From c38449b4088d62510508a019e092f7c902643e5d Mon Sep 17 00:00:00 2001
From: cvs2git <>
Date: Mon, 4 Mar 2002 21:20:50 +0000
Subject: [PATCH] This commit was manufactured by cvs2svn to create tag
 'sbbs310g'.

---
 CVSROOT/checkoutlist                          |   13 -
 CVSROOT/commitinfo                            |   15 -
 CVSROOT/config                                |   11 -
 CVSROOT/cvswrappers                           |   23 -
 CVSROOT/editinfo                              |   21 -
 CVSROOT/loginfo                               |   26 -
 CVSROOT/modules                               |   26 -
 CVSROOT/notify                                |   12 -
 CVSROOT/rcsinfo                               |   13 -
 CVSROOT/taginfo                               |   20 -
 CVSROOT/verifymsg                             |   21 -
 ctrl/1414vqe.mdm                              |    9 -
 ctrl/1428vqe.mdm                              |    6 -
 ctrl/ace9600.mdm                              |    6 -
 ctrl/ati14400.mdm                             |    5 -
 ctrl/ati19200.mdm                             |    5 -
 ctrl/ati9600.mdm                              |    9 -
 ctrl/att14400.mdm                             |    8 -
 ctrl/attr.cfg                                 |   17 -
 ctrl/chat.cnf                                 |  Bin 13098 -> 0 bytes
 ctrl/dsiscout.mdm                             |    9 -
 ctrl/file.cnf                                 |  Bin 11613 -> 0 bytes
 ctrl/gen1200.mdm                              |   12 -
 ctrl/gen14400.mdm                             |    6 -
 ctrl/gen2400.mdm                              |    5 -
 ctrl/gen28800.mdm                             |    5 -
 ctrl/gen9600.mdm                              |    7 -
 ctrl/guru.dat                                 |  921 ---
 ctrl/gvc14400.mdm                             |    8 -
 ctrl/gvc9600.mdm                              |    8 -
 ctrl/hay14400.mdm                             |    6 -
 ctrl/hay24e.mdm                               |    8 -
 ctrl/hay28800.mdm                             |    5 -
 ctrl/int14400.mdm                             |    9 -
 ctrl/main.cnf                                 |  Bin 6633 -> 0 bytes
 ctrl/mcc14400.mdm                             |    8 -
 ctrl/mdms.ixt                                 |  110 -
 ctrl/mic2400.mdm                              |    8 -
 ctrl/mic28800.mdm                             |    8 -
 ctrl/mic4232.mdm                              |    5 -
 ctrl/micv32c.mdm                              |    8 -
 ctrl/msgs.cnf                                 |  Bin 18757 -> 0 bytes
 ctrl/mt1432.mdm                               |    8 -
 ctrl/mt2834.mdm                               |    8 -
 ctrl/pp14400.mdm                              |    8 -
 ctrl/pp28800.mdm                              |    5 -
 ctrl/sbbsecho.cfg                             |   45 -
 ctrl/services.cfg                             |    4 -
 ctrl/sup14400.mdm                             |    6 -
 ctrl/sup28800.mdm                             |    6 -
 ctrl/text.dat                                 |  868 ---
 ctrl/usr144.mdm                               |    6 -
 ctrl/usr144ds.mdm                             |    5 -
 ctrl/usr168.mdm                               |    4 -
 ctrl/usr168ds.mdm                             |    5 -
 ctrl/usr216ds.mdm                             |    5 -
 ctrl/usr288ds.mdm                             |    7 -
 ctrl/usr96.mdm                                |    8 -
 ctrl/usr96ds.mdm                              |    6 -
 ctrl/ven14400.mdm                             |    5 -
 ctrl/viv14400.mdm                             |    6 -
 ctrl/viv9624e.mdm                             |    7 -
 ctrl/viv9642e.mdm                             |    8 -
 ctrl/xtrn.cnf                                 |  Bin 7912 -> 0 bytes
 ctrl/zoom9600.mdm                             |    8 -
 ctrl/zyx1496.mdm                              |   10 -
 ctrl/zyx1496f.mdm                             |    6 -
 docs/_borders/bottom.htm                      |   44 -
 docs/_borders/top.htm                         |   17 -
 docs/adding_nodes.html                        |  419 --
 docs/amail.cfg                                |   36 -
 docs/appendix.html                            |  501 --
 docs/baja.html                                | 3659 -----------
 docs/baja2new.txt                             |  332 -
 docs/chat_section.html                        |  164 -
 docs/contents.txt                             |   36 -
 docs/customization.html                       | 1057 ---
 docs/default.htm                              |    8 -
 docs/exebbs.bat                               |   30 -
 docs/external_programs.html                   |  568 --
 docs/features.html                            |  313 -
 docs/file_section.html                        |  953 ---
 docs/files.ref                                |  201 -
 docs/glossary.html                            |  397 --
 docs/gpl.txt                                  |  340 -
 docs/htdocs_contrib.txt                       |  112 -
 docs/images/baja_example.gif                  |  Bin 2968 -> 0 bytes
 docs/images/bre.gif                           |  Bin 19766 -> 0 bytes
 docs/images/lordcfg.gif                       |  Bin 13811 -> 0 bytes
 docs/images/sbbsctrl.gif                      |  Bin 42138 -> 0 bytes
 docs/images/sbbsctrl_configure.gif            |  Bin 15706 -> 0 bytes
 docs/images/sbbsctrl_telnet_cfg_gen.gif       |  Bin 8373 -> 0 bytes
 docs/images/sbbsecho_additionalecho.gif       |  Bin 18889 -> 0 bytes
 docs/images/sbbsecho_additionalecho_list.gif  |  Bin 21013 -> 0 bytes
 .../sbbsecho_additionalecho_list_tag.gif      |  Bin 21740 -> 0 bytes
 docs/images/sbbsecho_archiveprgs.gif          |  Bin 19450 -> 0 bytes
 docs/images/sbbsecho_archiveprgs_zip.gif      |  Bin 20990 -> 0 bytes
 docs/images/sbbsecho_logoptions.gif           |  Bin 23649 -> 0 bytes
 docs/images/sbbsecho_main.gif                 |  Bin 20695 -> 0 bytes
 docs/images/sbbsecho_node_arctype.gif         |  Bin 22179 -> 0 bytes
 docs/images/sbbsecho_node_packettype.gif      |  Bin 21622 -> 0 bytes
 docs/images/sbbsecho_node_settings.gif        |  Bin 21517 -> 0 bytes
 docs/images/sbbsecho_nodes.gif                |  Bin 18837 -> 0 bytes
 docs/images/sbbsecho_paths.gif                |  Bin 21546 -> 0 bytes
 docs/images/sbbsecho_toggleoptions.gif        |  Bin 22498 -> 0 bytes
 docs/images/scfg_chat_channel1.gif            |  Bin 16798 -> 0 bytes
 docs/images/scfg_chat_features.gif            |  Bin 13480 -> 0 bytes
 docs/images/scfg_chat_gurus.gif               |  Bin 15878 -> 0 bytes
 docs/images/scfg_chat_pager1.gif              |  Bin 17072 -> 0 bytes
 docs/images/scfg_chat_pagers.gif              |  Bin 16441 -> 0 bytes
 docs/images/scfg_chat_theguru.gif             |  Bin 16618 -> 0 bytes
 docs/images/scfg_dos_startup.gif              |  Bin 2393 -> 0 bytes
 docs/images/scfg_main.gif                     |  Bin 14925 -> 0 bytes
 docs/images/scfg_modem_config.gif             |  Bin 20932 -> 0 bytes
 docs/images/scfg_modem_fax_code1.gif          |  Bin 22581 -> 0 bytes
 docs/images/scfg_modem_fax_code2.gif          |  Bin 22603 -> 0 bytes
 docs/images/scfg_modem_port_type.gif          |  Bin 20853 -> 0 bytes
 docs/images/scfg_modem_resultcode_15.gif      |  Bin 22669 -> 0 bytes
 docs/images/scfg_modem_resultcodes.gif        |  Bin 23594 -> 0 bytes
 docs/images/scfg_modem_strings.gif            |  Bin 20604 -> 0 bytes
 docs/images/scfg_modem_toggles.gif            |  Bin 20983 -> 0 bytes
 docs/images/scfg_msg_area_advopts.gif         |  Bin 18176 -> 0 bytes
 docs/images/scfg_msg_area_netopts.gif         |  Bin 18896 -> 0 bytes
 docs/images/scfg_msg_area_toggles.gif         |  Bin 22080 -> 0 bytes
 docs/images/scfg_msg_areas.gif                |  Bin 15314 -> 0 bytes
 docs/images/scfg_msg_areas_gen.gif            |  Bin 17522 -> 0 bytes
 docs/images/scfg_msg_attrcodes.gif            |  Bin 19853 -> 0 bytes
 docs/images/scfg_msg_options.gif              |  Bin 17004 -> 0 bytes
 docs/images/scfg_networks.gif                 |  Bin 13354 -> 0 bytes
 docs/images/scfg_networks_fido.gif            |  Bin 18676 -> 0 bytes
 docs/images/scfg_networks_fido_address.gif    |  Bin 20651 -> 0 bytes
 docs/images/scfg_networks_internet.gif        |  Bin 16268 -> 0 bytes
 docs/images/scfg_networks_post.gif            |  Bin 15610 -> 0 bytes
 docs/images/scfg_networks_post_hubs.gif       |  Bin 16476 -> 0 bytes
 docs/images/scfg_networks_post_hubs_sccm.gif  |  Bin 18471 -> 0 bytes
 docs/images/scfg_networks_qwkhubs.gif         |  Bin 16265 -> 0 bytes
 docs/images/scfg_networks_qwkhubs_vert.gif    |  Bin 19050 -> 0 bytes
 .../scfg_networks_qwkhubs_vert_subs.gif       |  Bin 21580 -> 0 bytes
 .../scfg_networks_qwkhubs_vert_subs_opt.gif   |  Bin 20327 -> 0 bytes
 docs/images/scfg_node1.gif                    |  Bin 22095 -> 0 bytes
 docs/images/scfg_node1_advanced.gif           |  Bin 22902 -> 0 bytes
 docs/images/scfg_node1_toggles.gif            |  Bin 27710 -> 0 bytes
 docs/images/scfg_system.gif                   |  Bin 16277 -> 0 bytes
 docs/images/scfg_system_advanced.gif          |  Bin 20568 -> 0 bytes
 docs/images/scfg_system_expired.gif           |  Bin 19122 -> 0 bytes
 docs/images/scfg_system_loadablemods.gif      |  Bin 18790 -> 0 bytes
 docs/images/scfg_system_newvalues.gif         |  Bin 18909 -> 0 bytes
 .../scfg_system_newvalues_questions.gif       |  Bin 22677 -> 0 bytes
 docs/images/scfg_system_newvalues_toggles.gif |  Bin 22276 -> 0 bytes
 docs/images/scfg_system_quickval.gif          |  Bin 19960 -> 0 bytes
 docs/images/scfg_system_quickval_0.gif        |  Bin 20938 -> 0 bytes
 docs/images/scfg_system_securityvalues.gif    |  Bin 20558 -> 0 bytes
 docs/images/scfg_system_securityvalues_0.gif  |  Bin 21390 -> 0 bytes
 docs/images/scfg_system_toggle.gif            |  Bin 22004 -> 0 bytes
 docs/images/scfg_xfer_compressable.gif        |  Bin 17293 -> 0 bytes
 docs/images/scfg_xfer_dir.gif                 |  Bin 17884 -> 0 bytes
 docs/images/scfg_xfer_dir_advanced.gif        |  Bin 18488 -> 0 bytes
 docs/images/scfg_xfer_dir_toggles.gif         |  Bin 22625 -> 0 bytes
 docs/images/scfg_xfer_event.gif               |  Bin 17446 -> 0 bytes
 docs/images/scfg_xfer_eventc.gif              |  Bin 19050 -> 0 bytes
 docs/images/scfg_xfer_extractable.gif         |  Bin 17607 -> 0 bytes
 docs/images/scfg_xfer_library.gif             |  Bin 15348 -> 0 bytes
 docs/images/scfg_xfer_options.gif             |  Bin 16516 -> 0 bytes
 docs/images/scfg_xfer_proto_dsz.gif           |  Bin 18021 -> 0 bytes
 docs/images/scfg_xfer_proto_dsz_g.gif         |  Bin 20568 -> 0 bytes
 docs/images/scfg_xfer_proto_dsz_h.gif         |  Bin 19769 -> 0 bytes
 docs/images/scfg_xfer_proto_dsz_x.gif         |  Bin 20246 -> 0 bytes
 docs/images/scfg_xfer_proto_dsz_y.gif         |  Bin 20716 -> 0 bytes
 docs/images/scfg_xfer_proto_dsz_z.gif         |  Bin 20646 -> 0 bytes
 docs/images/scfg_xfer_proto_fdsz.gif          |  Bin 17301 -> 0 bytes
 docs/images/scfg_xfer_proto_fdsz_g.gif        |  Bin 20627 -> 0 bytes
 docs/images/scfg_xfer_proto_fdsz_x.gif        |  Bin 20293 -> 0 bytes
 docs/images/scfg_xfer_proto_fdsz_y.gif        |  Bin 20612 -> 0 bytes
 docs/images/scfg_xfer_proto_fdsz_z.gif        |  Bin 20627 -> 0 bytes
 docs/images/scfg_xfer_testable.gif            |  Bin 17503 -> 0 bytes
 docs/images/scfg_xfer_testable_du.gif         |  Bin 18580 -> 0 bytes
 docs/images/scfg_xfer_testable_zip.gif        |  Bin 19211 -> 0 bytes
 docs/images/scfg_xfer_testable_zipc.gif       |  Bin 19185 -> 0 bytes
 docs/images/scfg_xfer_viewable.gif            |  Bin 17007 -> 0 bytes
 docs/images/scfg_xtrn_fixed.gif               |  Bin 15932 -> 0 bytes
 docs/images/scfg_xtrn_lord.gif                |  Bin 19231 -> 0 bytes
 docs/images/scfg_xtrn_sbl.gif                 |  Bin 19441 -> 0 bytes
 docs/images/scfg_xtrn_section.gif             |  Bin 13721 -> 0 bytes
 docs/images/scfg_xtrn_swaplist.gif            |  Bin 17211 -> 0 bytes
 docs/images/scfg_xtrn_syncedit.gif            |  Bin 19501 -> 0 bytes
 docs/images/scfg_xtrn_timed.gif               |  Bin 19095 -> 0 bytes
 docs/images/scfg_xtrn_timeopt.gif             |  Bin 19898 -> 0 bytes
 docs/images/scfg_xtrn_tw2002.gif              |  Bin 19910 -> 0 bytes
 docs/images/scfg_xtrn_usurper.gif             |  Bin 19642 -> 0 bytes
 docs/images/scfg_xtrn_winos2list.gif          |  Bin 15395 -> 0 bytes
 docs/images/setuptype.gif                     |  Bin 29268 -> 0 bytes
 docs/images/synclogo_fancyred.gif             |  Bin 15560 -> 0 bytes
 docs/images/tw2002.gif                        |  Bin 12023 -> 0 bytes
 docs/images/uedit_v3.gif                      |  Bin 21347 -> 0 bytes
 docs/images/uedit_v3_exe.gif                  |  Bin 17609 -> 0 bytes
 docs/images/v3icon3.gif                       |  Bin 270 -> 0 bytes
 docs/index.htm                                |  134 -
 docs/index.html                               |    8 -
 docs/install.html                             |  206 -
 docs/install.iwz                              |  288 -
 docs/install.txt                              |   97 -
 docs/mailer.bat                               |  136 -
 docs/message_section.html                     |  718 ---
 docs/modem_setup.html                         |  493 --
 docs/multnode_config.html                     |  467 --
 docs/networking.html                          |  753 ---
 docs/ntreadme.txt                             |   47 -
 docs/platforms.html                           |   31 -
 docs/qemm.txt                                 |  168 -
 docs/sbbs.hst                                 | 1318 ----
 docs/sbbsecho.html                            |  633 --
 docs/security.html                            |  568 --
 docs/smb.html                                 | 2946 ---------
 docs/svdmansi.txt                             |   24 -
 docs/syedtfaq.txt                             |  159 -
 docs/syncedit.txt                             |  538 --
 docs/sysop.html                               |  287 -
 docs/sysop_commands.html                      |  476 --
 docs/system_config.html                       |  524 --
 docs/text210a.dif                             |  191 -
 docs/text220a.dif                             |  167 -
 docs/text220b.dif                             |   22 -
 docs/text230a.dif                             |  106 -
 docs/textfile_section.html                    |  115 -
 docs/troubleshooting.html                     |  246 -
 docs/upgrade.txt                              |  128 -
 docs/user.html                                | 1363 ----
 docs/user_editor.html                         |  546 --
 docs/usercom.txt                              |   17 -
 docs/utility_reference.html                   | 1249 ----
 docs/v200_new.txt                             |  174 -
 docs/v210_new.txt                             |  173 -
 docs/v211_new.txt                             |  130 -
 docs/v220_new.txt                             |  162 -
 docs/versions.hst                             |   30 -
 docs/versions.txt                             |   41 -
 exec/Makefile.bor                             |   38 -
 exec/Makefile.gnu                             |   38 -
 exec/bullseye.src                             |   78 -
 exec/chat_sec.src                             |   92 -
 exec/cntnodes.src                             |   56 -
 exec/default.src                              |  922 ---
 exec/dir.src                                  |  110 -
 exec/dir_attr.inc                             |   18 -
 exec/dumpobjs.js                              |  100 -
 exec/errno.inc                                |   65 -
 exec/examples/dir.js                          |   25 -
 exec/examples/socktest.js                     |   46 -
 exec/file_io.inc                              |   32 -
 exec/file_io.src                              |  182 -
 exec/finger.js                                |   23 -
 exec/fingerservice.js                         |  254 -
 exec/ftp-html.js                              |  429 --
 exec/ftp.src                                  |  311 -
 exec/gopherservice.js                         |  222 -
 exec/load/nodedefs.js                         |  146 -
 exec/load/sbbsdefs.js                         |  517 --
 exec/load/sockdefs.js                         |  127 -
 exec/login.src                                |   90 -
 exec/logon.src                                |  154 -
 exec/major.src                                |  349 -
 exec/matrix.src                               |  172 -
 exec/mudgate.src                              |   13 -
 exec/nntpservice.js                           |  441 --
 exec/nodedefs.inc                             |   86 -
 exec/nodelist-html.js                         |  154 -
 exec/nodelist.js                              |   16 -
 exec/noyesbar.src                             |   58 -
 exec/pcboard.src                              |  373 --
 exec/pnet.bat                                 |    3 -
 exec/qnet-ftp.src                             |  177 -
 exec/qnet.bat                                 |    3 -
 exec/qnet.slt                                 |   29 -
 exec/qnet.src                                 |  481 --
 exec/ra_emu.src                               |   11 -
 exec/renegade.src                             |  872 ---
 exec/rlogin.src                               |   15 -
 exec/sbbsdefs.inc                             |  361 --
 exec/sbbshelp.dab                             |  170 -
 exec/sbbsimsg.js                              |  316 -
 exec/sbbsqnet.rs                              |   36 -
 exec/sbbsqnet.scr                             |   91 -
 exec/sbbsqnet.slt                             |  138 -
 exec/sdos.src                                 |  684 --
 exec/sendmsg.js                               |   60 -
 exec/simple.src                               |  380 --
 exec/socktest.src                             |   63 -
 exec/sound.js                                 |    7 -
 exec/str_cmds.src                             |  453 --
 exec/telgate.src                              |   13 -
 exec/textdat.js                               |    9 -
 exec/tone/battle.ton                          |   32 -
 exec/tone/bouree.ton                          |   21 -
 exec/tone/buffgals.ton                        |   22 -
 exec/tone/camptown.ton                        |   22 -
 exec/tone/clown.ton                           |   33 -
 exec/tone/ent.ton                             |  299 -
 exec/tone/example.ton                         |  539 --
 exec/tone/funeral.ton                         |   14 -
 exec/tone/furelise.ton                        |   20 -
 exec/tone/goodnite.ton                        |   22 -
 exec/tone/hatdance.ton                        |   17 -
 exec/tone/humor.ton                           |   18 -
 exec/tone/jeanie.ton                          |   14 -
 exec/tone/la_cuca.ton                         |   21 -
 exec/tone/maplerag.ton                        |   24 -
 exec/tone/march.ton                           |   21 -
 exec/tone/mary.ton                            |   57 -
 exec/tone/mountai.ton                         |   14 -
 exec/tone/sakura.ton                          |   17 -
 exec/tone/sleeping.ton                        |   42 -
 exec/tone/susanna.ton                         |   18 -
 exec/tone/swinglow.ton                        |   17 -
 exec/tone/symph_40.ton                        |   23 -
 exec/tone/tdc.ton                             |  190 -
 exec/tone/trapeze.ton                         |   21 -
 exec/tone/weasel.ton                          |   17 -
 exec/tone/yankee.ton                          |   15 -
 exec/type.src                                 |    7 -
 exec/typehtml.src                             |  469 --
 exec/unixgate.src                             |   15 -
 exec/userdefs.inc                             |  160 -
 exec/userlist.js                              |   18 -
 exec/wildcat.src                              |  645 --
 exec/wiplogin.src                             |  126 -
 exec/wipshell.src                             |  378 --
 exec/yesnobar.src                             |   58 -
 node1/node.cnf                                |  Bin 3504 -> 0 bytes
 node1/sbbs.bat                                |    1 -
 node1/sbbs.cmd                                |    1 -
 node1/scfg.bat                                |    1 -
 node1/scfg.cmd                                |    1 -
 node2/node.cnf                                |  Bin 3504 -> 0 bytes
 node2/sbbs.bat                                |    1 -
 node2/sbbs.cmd                                |    1 -
 node2/scfg.bat                                |    1 -
 node2/scfg.cmd                                |    1 -
 node3/node.cnf                                |  Bin 3504 -> 0 bytes
 node3/sbbs.bat                                |    1 -
 node3/sbbs.cmd                                |    1 -
 node3/scfg.bat                                |    1 -
 node3/scfg.cmd                                |    1 -
 node4/node.cnf                                |  Bin 3504 -> 0 bytes
 node4/sbbs.bat                                |    1 -
 node4/sbbs.cmd                                |    1 -
 node4/scfg.bat                                |    1 -
 node4/scfg.cmd                                |    1 -
 src/cleanall.bat                              |   96 -
 src/makeall.bat                               |  121 -
 src/makeall.cmd                               |   63 -
 src/sbbs2/addfiles/addfiles.c                 | 1668 -----
 src/sbbs2/addfiles/makeall.bat                |   11 -
 src/sbbs2/addfiles/makefile                   |   89 -
 src/sbbs2/addfiles/makefile.bc                |   76 -
 src/sbbs2/allusers/allusers.c                 |  367 --
 src/sbbs2/allusers/make.bat                   |    2 -
 src/sbbs2/ans2msg/ans2msg.c                   |  155 -
 src/sbbs2/ars.c                               |  502 --
 src/sbbs2/ars_defs.h                          |   72 -
 src/sbbs2/atcodes.c                           |  514 --
 src/sbbs2/autonode/autonode.c                 |  193 -
 src/sbbs2/baja/baja.c                         | 3115 ---------
 src/sbbs2/baja/make.bat                       |    5 -
 src/sbbs2/baja/make.cmd                       |    2 -
 src/sbbs2/bulkmail.c                          |  219 -
 src/sbbs2/chat.c                              | 1715 -----
 src/sbbs2/chk_ar.c                            |  509 --
 src/sbbs2/cmdshell.h                          |  586 --
 src/sbbs2/comio.c                             |  354 --
 src/sbbs2/con_hi.c                            |  796 ---
 src/sbbs2/con_in.c                            |  663 --
 src/sbbs2/con_mid.c                           |  813 ---
 src/sbbs2/con_out.c                           | 1043 ---
 src/sbbs2/data.c                              |  177 -
 src/sbbs2/data_ovl.c                          |  439 --
 src/sbbs2/dcdwatch/dcdwatch.c                 |  102 -
 src/sbbs2/delfiles/delfiles.c                 |  763 ---
 src/sbbs2/delfiles/makeall.bat                |   11 -
 src/sbbs2/delfiles/makefile                   |   89 -
 src/sbbs2/delfiles/makefile.bc                |   77 -
 src/sbbs2/dos/rciol.obj                       |  Bin 9339 -> 0 bytes
 src/sbbs2/dstsedit/dstsedit.c                 |  227 -
 src/sbbs2/dstsedit/make.bat                   |    2 -
 src/sbbs2/dupefind/dupefind.c                 |  311 -
 src/sbbs2/dupefind/makeall.bat                |   11 -
 src/sbbs2/dupefind/makefile                   |   89 -
 src/sbbs2/dupefind/makefile.bc                |   74 -
 src/sbbs2/echo/docs/fidostep.doc              |  321 -
 src/sbbs2/echo/docs/man.c                     |  189 -
 src/sbbs2/echo/docs/sbbsecho.src              |  838 ---
 src/sbbs2/echo/echocfg.c                      | 1127 ----
 src/sbbs2/echo/echocfg.mak                    |   34 -
 src/sbbs2/echo/makeall.bat                    |    9 -
 src/sbbs2/echo/makecfg.bat                    |    1 -
 src/sbbs2/echo/makefile                       |   94 -
 src/sbbs2/echo/read_cfg.c                     |  681 --
 src/sbbs2/echo/sbbsecho.c                     | 5060 ---------------
 src/sbbs2/echo/sbbsecho.h                     |  244 -
 src/sbbs2/echo/sbbsecho.wat                   |   81 -
 src/sbbs2/email.c                             |  276 -
 src/sbbs2/etext.c                             |   12 -
 src/sbbs2/etext.dat                           |   16 -
 src/sbbs2/etext.h                             |   10 -
 src/sbbs2/exec.c                              | 1557 -----
 src/sbbs2/execdos/execdos.c                   |  271 -
 src/sbbs2/execdos/make.bat                    |    5 -
 src/sbbs2/execfile.c                          |  481 --
 src/sbbs2/execfunc.c                          |  665 --
 src/sbbs2/execmisc.c                          | 1373 ----
 src/sbbs2/execmsg.c                           |  301 -
 src/sbbs2/execsbbs/execsbbs.c                 |   59 -
 src/sbbs2/execsbbs/make.bat                   |    5 -
 src/sbbs2/execsbbs/make.cmd                   |    2 -
 src/sbbs2/fido.c                              |  818 ---
 src/sbbs2/fido/crc16.c                        |   37 -
 src/sbbs2/fido/crc32.h                        |   40 -
 src/sbbs2/fido/file_id.diz                    |    3 -
 src/sbbs2/fido/lzh.c                          |  785 ---
 src/sbbs2/fido/lzh.h                          |    5 -
 src/sbbs2/fido/makeall.bat                    |    7 -
 src/sbbs2/fido/makefile                       |   78 -
 src/sbbs2/fido/makefile.bc                    |   88 -
 src/sbbs2/fido/sbbsfido.c                     | 1909 ------
 src/sbbs2/fido/smbdefs.h                      |  449 --
 src/sbbs2/fido/smblib.c                       | 1121 ----
 src/sbbs2/fido/smblib.h                       |   80 -
 src/sbbs2/fido/smbvars.c                      |   22 -
 src/sbbs2/file.c                              |  325 -
 src/sbbs2/file_ovl.c                          |  580 --
 src/sbbs2/filelist/filelist.c                 |  657 --
 src/sbbs2/filelist/makeall.bat                |   11 -
 src/sbbs2/filelist/makefile                   |   89 -
 src/sbbs2/filelist/makefile.bc                |   76 -
 src/sbbs2/gen_defs.h                          |   73 -
 src/sbbs2/genetext.c                          |   69 -
 src/sbbs2/genetext.exe                        |  Bin 9698 -> 0 bytes
 src/sbbs2/getnode.c                           |  248 -
 src/sbbs2/getuser.c                           |  429 --
 src/sbbs2/initdata.c                          |  239 -
 src/sbbs2/install/install.c                   | 1048 ---
 src/sbbs2/install/makefile                    |   52 -
 src/sbbs2/listfile.c                          |  782 ---
 src/sbbs2/login.c                             |   92 -
 src/sbbs2/logio.c                             |   81 -
 src/sbbs2/logon.c                             |  569 --
 src/sbbs2/logout.c                            |  245 -
 src/sbbs2/mail.c                              |  899 ---
 src/sbbs2/main.c                              |  307 -
 src/sbbs2/main_ovl.c                          |  839 ---
 src/sbbs2/main_sec.c                          |  330 -
 src/sbbs2/main_wfc.c                          | 1543 -----
 src/sbbs2/makefile                            |  225 -
 src/sbbs2/misc.c                              |  815 ---
 src/sbbs2/mlabels/make.bat                    |    2 -
 src/sbbs2/mlabels/mlabels.c                   |  361 --
 src/sbbs2/msg1.c                              |  493 --
 src/sbbs2/msg2.c                              | 1202 ----
 src/sbbs2/msg2ans/msg2ans.c                   |  147 -
 src/sbbs2/msgtoqwk.c                          |  298 -
 src/sbbs2/netmail.c                           |  389 --
 src/sbbs2/newuser.c                           |  404 --
 src/sbbs2/node/make.bat                       |    5 -
 src/sbbs2/node/make.cmd                       |    2 -
 src/sbbs2/node/node.c                         |  476 --
 src/sbbs2/nodedefs.h                          |   81 -
 src/sbbs2/pack_qwk.c                          |  527 --
 src/sbbs2/pack_rep.c                          |  245 -
 src/sbbs2/post.h                              |   23 -
 src/sbbs2/postmsg.c                           |  308 -
 src/sbbs2/putmsg.c                            |  195 -
 src/sbbs2/putnode.c                           |  135 -
 src/sbbs2/qwk.c                               |  942 ---
 src/sbbs2/qwk.h                               |   35 -
 src/sbbs2/qwknodes/make.bat                   |    2 -
 src/sbbs2/qwknodes/qwknodes.c                 |  500 --
 src/sbbs2/qwktomsg.c                          |  350 -
 src/sbbs2/readmsgs.c                          | 1070 ----
 src/sbbs2/rio/riodefs.h                       |  102 -
 src/sbbs2/rio/riolib.c                        |  965 ---
 src/sbbs2/rio/riolib.h                        |   26 -
 src/sbbs2/sbbs.h                              |  472 --
 src/sbbs2/sbbs_src.doc                        |  660 --
 src/sbbs2/sbbsdefs.h                          | 1330 ----
 src/sbbs2/scb/makefile                        |   37 -
 src/sbbs2/scb/scb.c                           |  920 ---
 src/sbbs2/scb/scb.h                           |   17 -
 src/sbbs2/scb/scbcfg.c                        |  788 ---
 src/sbbs2/scb/scbcfg.mak                      |   35 -
 src/sbbs2/scfg/makeall.bat                    |    3 -
 src/sbbs2/scfg/makefile                       |  108 -
 src/sbbs2/scfg/makehelp.c                     |   79 -
 src/sbbs2/scfg/makehelp.exe                   |  Bin 10178 -> 0 bytes
 src/sbbs2/scfg/scfg.c                         | 1967 ------
 src/sbbs2/scfg/scfg.h                         |   89 -
 src/sbbs2/scfg/scfgchat.c                     |  819 ---
 src/sbbs2/scfg/scfgmdm.c                      |  295 -
 src/sbbs2/scfg/scfgmsg.c                      | 1337 ----
 src/sbbs2/scfg/scfgnet.c                      | 1457 -----
 src/sbbs2/scfg/scfgnode.c                     | 2163 -------
 src/sbbs2/scfg/scfgsub.c                      | 1200 ----
 src/sbbs2/scfg/scfgsys.c                      | 1790 ------
 src/sbbs2/scfg/scfgxfr1.c                     |  976 ---
 src/sbbs2/scfg/scfgxfr2.c                     | 1453 -----
 src/sbbs2/scfg/scfgxtrn.c                     | 1798 ------
 src/sbbs2/scfg/wrcnf1.c                       |  577 --
 src/sbbs2/scfg/wrcnf2.c                       |  494 --
 src/sbbs2/scfglib.h                           |   43 -
 src/sbbs2/scfglib1.c                          |  874 ---
 src/sbbs2/scfglib2.c                          | 1106 ----
 src/sbbs2/scfgvars.c                          |  264 -
 src/sbbs2/slog/make.bat                       |    2 -
 src/sbbs2/slog/make.cmd                       |    2 -
 src/sbbs2/slog/slog.c                         |  140 -
 src/sbbs2/smb/121a/chksmb.c                   |  671 --
 src/sbbs2/smb/121a/chksmb.mak                 |   50 -
 src/sbbs2/smb/121a/crc16.c                    |   37 -
 src/sbbs2/smb/121a/crc32.h                    |   40 -
 src/sbbs2/smb/121a/fido2smb.c                 |  502 --
 src/sbbs2/smb/121a/fido2smb.mak               |   34 -
 src/sbbs2/smb/121a/file_id.diz                |   10 -
 src/sbbs2/smb/121a/fixsmb.c                   |  221 -
 src/sbbs2/smb/121a/fixsmb.mak                 |   34 -
 src/sbbs2/smb/121a/inet2smb.c                 |  312 -
 src/sbbs2/smb/121a/inet2smb.mak               |   34 -
 src/sbbs2/smb/121a/lzh.c                      |  785 ---
 src/sbbs2/smb/121a/lzh.h                      |    5 -
 src/sbbs2/smb/121a/qwk2smb.c                  |  296 -
 src/sbbs2/smb/121a/qwk2smb.mak                |   34 -
 src/sbbs2/smb/121a/smb.hst                    |  303 -
 src/sbbs2/smb/121a/smb.prn                    | 5661 -----------------
 src/sbbs2/smb/121a/smb.txt                    | 5661 -----------------
 src/sbbs2/smb/121a/smb_read.me                |   65 -
 src/sbbs2/smb/121a/smbdefs.h                  |  449 --
 src/sbbs2/smb/121a/smblib.c                   | 1121 ----
 src/sbbs2/smb/121a/smblib.h                   |   80 -
 src/sbbs2/smb/121a/smbutil.bor                |   56 -
 src/sbbs2/smb/121a/smbutil.c                  | 1419 -----
 src/sbbs2/smb/121a/smbutil.h                  |   10 -
 src/sbbs2/smb/121a/smbutil.wat                |   60 -
 src/sbbs2/smb/121a/smbvars.c                  |   22 -
 src/sbbs2/smb/chksmb/chksmb.c                 |  672 --
 src/sbbs2/smb/chksmb/makefile                 |   52 -
 src/sbbs2/smb/crc16.c                         |   39 -
 src/sbbs2/smb/crc32.c                         |   23 -
 src/sbbs2/smb/crc32.h                         |   42 -
 src/sbbs2/smb/docs/smb.hst                    |  327 -
 src/sbbs2/smb/docs/smb.src                    | 3592 -----------
 src/sbbs2/smb/docs/smb_read.me                |   64 -
 src/sbbs2/smb/fixsmb/fixsmb.c                 |  226 -
 src/sbbs2/smb/fixsmb/makefile                 |   52 -
 src/sbbs2/smb/lzh.c                           |  784 ---
 src/sbbs2/smb/lzh.h                           |   21 -
 src/sbbs2/smb/smbdefs.h                       |  476 --
 src/sbbs2/smb/smblib.c                        | 1383 ----
 src/sbbs2/smb/smblib.h                        |  205 -
 src/sbbs2/smb/smbutil/makeall.bat             |   11 -
 src/sbbs2/smb/smbutil/makefile                |   73 -
 src/sbbs2/smb/smbutil/makefile.bc             |   57 -
 src/sbbs2/smb/smbutil/smbutil.c               | 1428 -----
 src/sbbs2/smb/smbutil/smbutil.h               |   12 -
 src/sbbs2/smbactiv/makeall.bat                |   11 -
 src/sbbs2/smbactiv/makefile                   |   92 -
 src/sbbs2/smbactiv/makefile.bc                |   78 -
 src/sbbs2/smbactiv/smbactiv.c                 |  273 -
 src/sbbs2/smbfuncs.c                          |   76 -
 src/sbbs2/smm/addphoto.c                      |  310 -
 src/sbbs2/smm/delphoto.c                      |  223 -
 src/sbbs2/smm/lstphoto.c                      |  182 -
 src/sbbs2/smm/makefile                        |   35 -
 src/sbbs2/smm/makeio.bat                      |    7 -
 src/sbbs2/smm/makemsg.c                       |   70 -
 src/sbbs2/smm/makephot.bat                    |    7 -
 src/sbbs2/smm/makeutil.bat                    |    2 -
 src/sbbs2/smm/outphoto.c                      |  347 -
 src/sbbs2/smm/smb2smm.c                       |  970 ---
 src/sbbs2/smm/smm.c                           | 3993 ------------
 src/sbbs2/smm/smm2msg.c                       |  539 --
 src/sbbs2/smm/smm2smb.c                       |  540 --
 src/sbbs2/smm/smmcfg.c                        |  616 --
 src/sbbs2/smm/smmcfg.mak                      |   35 -
 src/sbbs2/smm/smmdefs.h                       |  160 -
 src/sbbs2/smm/smmutil.c                       |  713 ---
 src/sbbs2/smm/smmvars.c                       |   27 -
 src/sbbs2/str.c                               | 1080 ----
 src/sbbs2/text.h                              |  737 ---
 src/sbbs2/text_sec.c                          |  200 -
 src/sbbs2/un_qwk.c                            |  200 -
 src/sbbs2/un_rep.c                            |  382 --
 src/sbbs2/useredit.c                          |  966 ---
 src/sbbs2/userrec.c                           |  194 -
 src/sbbs2/uti/makefile                        |   90 -
 src/sbbs2/uti/uti.c                           |  298 -
 src/sbbs2/uti/uti.h                           |   14 -
 src/sbbs2/uti/utiexprt.c                      |  228 -
 src/sbbs2/uti/utihigh.c                       |   86 -
 src/sbbs2/uti/utiimprt.c                      |  335 -
 src/sbbs2/uti/utilist.c                       |   37 -
 src/sbbs2/uti/utilstrd.c                      |   86 -
 src/sbbs2/uti/utiver.c                        |   26 -
 src/sbbs2/vars.c                              |  154 -
 src/sbbs2/ver.c                               |   91 -
 src/sbbs2/viewfile.c                          |   73 -
 src/sbbs2/xfer_hi.c                           | 1516 -----
 src/sbbs2/xfer_lo.c                           |  209 -
 src/sbbs2/xfer_mid.c                          |  792 ---
 src/sbbs2/xfer_sec.c                          |  134 -
 src/sbbs2/xtrn.c                              |  500 --
 src/sbbs2/xtrn_ovl.c                          | 1459 -----
 src/stp/make.bat                              |    2 -
 src/stp/rciols.obj                            |  Bin 8736 -> 0 bytes
 src/stp/stp.c                                 | 2017 ------
 src/stp/zmodem.h                              |  141 -
 src/tone/cvt$$a.c                             |   66 -
 src/tone/make.bat                             |    2 -
 src/tone/tone.c                               |  349 -
 src/uifc/uifc.c                               | 1829 ------
 src/uifc/uifc.h                               |  335 -
 src/uifc/uifcd.c                              |  420 --
 src/uifc/uifcx.c                              |  394 --
 src/wmakeall.bat                              |   38 -
 text/answer.asc                               |    7 -
 text/answer.wip                               |   18 -
 text/computer.sif                             |  109 -
 text/example.sif                              |   68 -
 text/feedback.msg                             |   10 -
 text/menu/allmail.asc                         |    9 -
 text/menu/attr.asc                            |   18 -
 text/menu/batchxfr.asc                        |   13 -
 text/menu/batchxfr.rip                        |   13 -
 text/menu/batdprot.asc                        |    1 -
 text/menu/batflag.asc                         |   23 -
 text/menu/batuprot.asc                        |    1 -
 text/menu/biprot.asc                          |    1 -
 text/menu/chat.asc                            |   11 -
 text/menu/chat.rip                            |   14 -
 text/menu/chat.wip                            |   23 -
 text/menu/dlprot.asc                          |    1 -
 text/menu/e-mail.asc                          |   11 -
 text/menu/e-mail.rip                          |   12 -
 text/menu/e-mail.wip                          |   21 -
 text/menu/editor.asc                          |   19 -
 text/menu/exempt.asc                          |    7 -
 text/menu/flags1.asc                          |    7 -
 text/menu/flags2.asc                          |    7 -
 text/menu/flags3.asc                          |    7 -
 text/menu/flags4.asc                          |    7 -
 text/menu/info.wip                            |   21 -
 text/menu/keyboard.wip                        |   42 -
 text/menu/login.wip                           |   20 -
 text/menu/logoff.asc                          |    6 -
 text/menu/logoff.msg                          |   28 -
 text/menu/logon.asc                           |   23 -
 text/menu/mailread.asc                        |   11 -
 text/menu/mailread.rip                        |   15 -
 text/menu/mailread.wip                        |   29 -
 text/menu/main.asc                            |   20 -
 text/menu/main.rip                            |   48 -
 text/menu/maincfg.asc                         |    8 -
 text/menu/maincfg.rip                         |   12 -
 text/menu/maininfo.asc                        |    8 -
 text/menu/maininfo.rip                        |   10 -
 text/menu/major/email.asc                     |   10 -
 text/menu/major/file.asc                      |    9 -
 text/menu/major/main.asc                      |   15 -
 text/menu/major/msg.asc                       |    9 -
 text/menu/major/quickscn.asc                  |    9 -
 text/menu/major/userdefs.asc                  |    6 -
 text/menu/msgattr.asc                         |    1 -
 text/menu/msgs.wip                            |   21 -
 text/menu/msgscan.asc                         |   19 -
 text/menu/msgscan.rip                         |   20 -
 text/menu/msgscan.wip                         |   39 -
 text/menu/multchat.asc                        |   10 -
 text/menu/multchat.rip                        |   13 -
 text/menu/namepass.wip                        |   20 -
 text/menu/noyes.wip                           |   20 -
 text/menu/number.wip                          |   26 -
 text/menu/pause.wip                           |   15 -
 text/menu/pcboard/brdm.asc                    |   21 -
 text/menu/pcboard/welcome.asc                 |   22 -
 text/menu/privchat.asc                        |    8 -
 text/menu/privchat.rip                        |   11 -
 text/menu/qwk.asc                             |   13 -
 text/menu/qwk.rip                             |   11 -
 text/menu/qwk.wip                             |   21 -
 text/menu/renegade/email.asc                  |    7 -
 text/menu/renegade/main.asc                   |   10 -
 text/menu/renegade/message.asc                |   10 -
 text/menu/renegade/transfer.asc               |   11 -
 text/menu/restrict.asc                        |    7 -
 text/menu/sdos/files.asc                      |   21 -
 text/menu/sdos/mail.asc                       |   21 -
 text/menu/sdos/root.asc                       |   20 -
 text/menu/sentmail.asc                        |    9 -
 text/menu/sentmail.rip                        |   13 -
 text/menu/sentmail.wip                        |   29 -
 text/menu/simple/filelist.asc                 |    9 -
 text/menu/simple/main.asc                     |   11 -
 text/menu/simple/prompt.ans                   |    2 -
 text/menu/simple/prompt.asc                   |    2 -
 text/menu/simple/readmsg.asc                  |   11 -
 text/menu/simple/sendmsg.asc                  |    7 -
 text/menu/sysmailr.asc                        |    4 -
 text/menu/sysmain.asc                         |   22 -
 text/menu/sysmscan.asc                        |   15 -
 text/menu/syssmail.asc                        |    3 -
 text/menu/sysxfer.asc                         |   15 -
 text/menu/tempxfer.asc                        |   14 -
 text/menu/tempxfer.rip                        |   17 -
 text/menu/transfer.asc                        |   19 -
 text/menu/transfer.rip                        |   37 -
 text/menu/uedit.asc                           |   21 -
 text/menu/ulprot.asc                          |    1 -
 text/menu/wfc.asc                             |    3 -
 text/menu/wildcat/file.asc                    |   20 -
 text/menu/wildcat/main.asc                    |   20 -
 text/menu/wildcat/msg.asc                     |   18 -
 text/menu/wildcat/sysop.asc                   |   16 -
 text/menu/wipfile.wip                         |   27 -
 text/menu/wipmain.wip                         |   33 -
 text/menu/xfercfg.asc                         |    9 -
 text/menu/xfercfg.rip                         |   10 -
 text/menu/xferinfo.asc                        |    8 -
 text/menu/xferinfo.rip                        |   11 -
 text/menu/yesno.wip                           |   20 -
 text/name.can                                 |   33 -
 text/newuser.msg                              |    8 -
 text/phone.can                                |   20 -
 text/sbbs.msg                                 |   19 -
 text/system.msg                               |    8 -
 text/zipmsg.txt                               |    4 -
 xtrn/sbj/Makefile.gnu                         |   50 -
 xtrn/sbj/sbj.bpf                              |    8 -
 xtrn/sbj/sbj.bpr                              |   96 -
 xtrn/sbj/sbj.c                                | 1907 ------
 xtrn/sbj/sbj.cfg                              |    4 -
 xtrn/sbj/sbj.doc                              |  Bin 2131 -> 0 bytes
 xtrn/sbj/sbj.dsp                              |  102 -
 xtrn/sbj/sbj.msg                              |   23 -
 xtrn/sbj/sbjclean.c                           |   48 -
 xtrn/sbl/Makefile.gnu                         |   50 -
 xtrn/sbl/makefile.bor                         |   40 -
 xtrn/sbl/sbbslist.c                           |  768 ---
 xtrn/sbl/sbl.bpf                              |    9 -
 xtrn/sbl/sbl.bpr                              |  120 -
 xtrn/sbl/sbl.c                                | 1525 -----
 xtrn/sbl/sbl.cfg                              |    6 -
 xtrn/sbl/sbl.doc                              |   95 -
 xtrn/sbl/sbl.dsp                              |  106 -
 xtrn/sbl/sbl2smb.c                            |  421 --
 xtrn/sbl/sbl2smb.dsp                          |   96 -
 xtrn/sbl/sbl2txt.c                            |  190 -
 xtrn/sbl/sbldefs.h                            |  128 -
 xtrn/sbl/sblpack.c                            |   69 -
 xtrn/sbl/sblpack.dsp                          |   89 -
 xtrn/sbl/smb2sbl.c                            |  521 --
 xtrn/sbl/smb2sbl.dsp                          |  100 -
 xtrn/sbl/sysop.txt                            |  139 -
 xtrn/scb/instruct.msg                         |   22 -
 xtrn/scb/ld_time.msg                          |    1 -
 xtrn/scb/no_one.msg                           |    1 -
 xtrn/scb/no_zero.msg                          |    2 -
 xtrn/scb/phonecan.msg                         |    2 -
 xtrn/scb/refused.msg                          |    7 -
 xtrn/scb/scb.cfg                              |   32 -
 xtrn/scb/scb.doc                              |  329 -
 xtrn/scb/scb.msg                              |    8 -
 xtrn/scb/toolong.msg                          |    2 -
 xtrn/scb/tooshort.msg                         |    1 -
 xtrn/scb/verified.msg                         |    5 -
 xtrn/scb/whats.new                            |   21 -
 xtrn/sdk/xsdk.c                               | 2677 --------
 xtrn/sdk/xsdk.h                               |  278 -
 xtrn/sdk/xsdk.txt                             |  127 -
 xtrn/sdk/xsdkdefs.h                           |  348 -
 xtrn/sdk/xsdkinet.h                           |  107 -
 xtrn/sdk/xsdkvars.c                           |  144 -
 xtrn/sdk/xsdkwrap.c                           |  483 --
 xtrn/sdk/xsdkwrap.h                           |  250 -
 xtrn/smm/adult.que                            |   93 -
 xtrn/smm/appear.que                           |  119 -
 xtrn/smm/basic.que                            |  179 -
 xtrn/smm/file_id.diz                          |    7 -
 xtrn/smm/list_hdr.asc                         |    5 -
 xtrn/smm/material.que                         |   91 -
 xtrn/smm/mb-e.asc                             |    7 -
 xtrn/smm/mb-enfj.asc                          |  134 -
 xtrn/smm/mb-enfp.asc                          |  157 -
 xtrn/smm/mb-entj.asc                          |  105 -
 xtrn/smm/mb-entp.asc                          |  145 -
 xtrn/smm/mb-esfj.asc                          |  118 -
 xtrn/smm/mb-esfp.asc                          |   89 -
 xtrn/smm/mb-estj.asc                          |   70 -
 xtrn/smm/mb-estp.asc                          |  119 -
 xtrn/smm/mb-f.asc                             |    7 -
 xtrn/smm/mb-fp.asc                            |    1 -
 xtrn/smm/mb-i.asc                             |    9 -
 xtrn/smm/mb-infj.asc                          |  144 -
 xtrn/smm/mb-infp.asc                          |  118 -
 xtrn/smm/mb-intj.asc                          |  169 -
 xtrn/smm/mb-intp.asc                          |  118 -
 xtrn/smm/mb-intro.asc                         |   18 -
 xtrn/smm/mb-isfj.asc                          |  116 -
 xtrn/smm/mb-isfp.asc                          |  166 -
 xtrn/smm/mb-istj.asc                          |  121 -
 xtrn/smm/mb-istp.asc                          |  191 -
 xtrn/smm/mb-j.asc                             |   11 -
 xtrn/smm/mb-n.asc                             |    7 -
 xtrn/smm/mb-nf.asc                            |   22 -
 xtrn/smm/mb-nt.asc                            |   32 -
 xtrn/smm/mb-p.asc                             |    9 -
 xtrn/smm/mb-s.asc                             |   11 -
 xtrn/smm/mb-sj.asc                            |   16 -
 xtrn/smm/mb-sp.asc                            |   20 -
 xtrn/smm/mb-t.asc                             |    7 -
 xtrn/smm/mb-tj.asc                            |    1 -
 xtrn/smm/mb-type.asc                          |   20 -
 xtrn/smm/mb-type.que                          |  Bin 10430 -> 0 bytes
 xtrn/smm/purity-1.asc                         |   16 -
 xtrn/smm/purity-2.asc                         |    7 -
 xtrn/smm/purity-3.asc                         |    2 -
 xtrn/smm/purity-4.asc                         |    2 -
 xtrn/smm/purity-5.asc                         |   16 -
 xtrn/smm/purity-6.asc                         |   18 -
 xtrn/smm/purity-7.asc                         |    8 -
 xtrn/smm/purity-8.asc                         |    7 -
 xtrn/smm/purity-9.asc                         |    6 -
 xtrn/smm/purity-a.asc                         |    5 -
 xtrn/smm/purity-b.asc                         |    2 -
 xtrn/smm/purity.100                           |  100 -
 xtrn/smm/purity.500                           |  511 --
 xtrn/smm/purity.asc                           |   31 -
 xtrn/smm/purity.que                           |  100 -
 xtrn/smm/que.lst                              |   12 -
 xtrn/smm/smm.can                              |    4 -
 xtrn/smm/smm.cfg                              |   22 -
 xtrn/smm/smm.doc                              |  594 --
 xtrn/smm/smm_help.asc                         |   27 -
 xtrn/smm/smm_logo.asc                         |    3 -
 xtrn/smm/smm_main.asc                         |    9 -
 xtrn/smm/upgrade.doc                          |  241 -
 841 files changed, 189723 deletions(-)
 delete mode 100755 CVSROOT/checkoutlist
 delete mode 100755 CVSROOT/commitinfo
 delete mode 100755 CVSROOT/config
 delete mode 100755 CVSROOT/cvswrappers
 delete mode 100755 CVSROOT/editinfo
 delete mode 100755 CVSROOT/loginfo
 delete mode 100755 CVSROOT/modules
 delete mode 100755 CVSROOT/notify
 delete mode 100755 CVSROOT/rcsinfo
 delete mode 100755 CVSROOT/taginfo
 delete mode 100755 CVSROOT/verifymsg
 delete mode 100644 ctrl/1414vqe.mdm
 delete mode 100644 ctrl/1428vqe.mdm
 delete mode 100644 ctrl/ace9600.mdm
 delete mode 100644 ctrl/ati14400.mdm
 delete mode 100644 ctrl/ati19200.mdm
 delete mode 100644 ctrl/ati9600.mdm
 delete mode 100644 ctrl/att14400.mdm
 delete mode 100644 ctrl/attr.cfg
 delete mode 100644 ctrl/chat.cnf
 delete mode 100644 ctrl/dsiscout.mdm
 delete mode 100644 ctrl/file.cnf
 delete mode 100644 ctrl/gen1200.mdm
 delete mode 100644 ctrl/gen14400.mdm
 delete mode 100644 ctrl/gen2400.mdm
 delete mode 100644 ctrl/gen28800.mdm
 delete mode 100644 ctrl/gen9600.mdm
 delete mode 100644 ctrl/guru.dat
 delete mode 100644 ctrl/gvc14400.mdm
 delete mode 100644 ctrl/gvc9600.mdm
 delete mode 100644 ctrl/hay14400.mdm
 delete mode 100644 ctrl/hay24e.mdm
 delete mode 100644 ctrl/hay28800.mdm
 delete mode 100644 ctrl/int14400.mdm
 delete mode 100644 ctrl/main.cnf
 delete mode 100644 ctrl/mcc14400.mdm
 delete mode 100644 ctrl/mdms.ixt
 delete mode 100644 ctrl/mic2400.mdm
 delete mode 100644 ctrl/mic28800.mdm
 delete mode 100644 ctrl/mic4232.mdm
 delete mode 100644 ctrl/micv32c.mdm
 delete mode 100644 ctrl/msgs.cnf
 delete mode 100644 ctrl/mt1432.mdm
 delete mode 100644 ctrl/mt2834.mdm
 delete mode 100644 ctrl/pp14400.mdm
 delete mode 100644 ctrl/pp28800.mdm
 delete mode 100644 ctrl/sbbsecho.cfg
 delete mode 100644 ctrl/services.cfg
 delete mode 100644 ctrl/sup14400.mdm
 delete mode 100644 ctrl/sup28800.mdm
 delete mode 100644 ctrl/text.dat
 delete mode 100644 ctrl/usr144.mdm
 delete mode 100644 ctrl/usr144ds.mdm
 delete mode 100644 ctrl/usr168.mdm
 delete mode 100644 ctrl/usr168ds.mdm
 delete mode 100644 ctrl/usr216ds.mdm
 delete mode 100644 ctrl/usr288ds.mdm
 delete mode 100644 ctrl/usr96.mdm
 delete mode 100644 ctrl/usr96ds.mdm
 delete mode 100644 ctrl/ven14400.mdm
 delete mode 100644 ctrl/viv14400.mdm
 delete mode 100644 ctrl/viv9624e.mdm
 delete mode 100644 ctrl/viv9642e.mdm
 delete mode 100644 ctrl/xtrn.cnf
 delete mode 100644 ctrl/zoom9600.mdm
 delete mode 100644 ctrl/zyx1496.mdm
 delete mode 100644 ctrl/zyx1496f.mdm
 delete mode 100644 docs/_borders/bottom.htm
 delete mode 100644 docs/_borders/top.htm
 delete mode 100644 docs/adding_nodes.html
 delete mode 100644 docs/amail.cfg
 delete mode 100644 docs/appendix.html
 delete mode 100644 docs/baja.html
 delete mode 100644 docs/baja2new.txt
 delete mode 100644 docs/chat_section.html
 delete mode 100644 docs/contents.txt
 delete mode 100644 docs/customization.html
 delete mode 100644 docs/default.htm
 delete mode 100755 docs/exebbs.bat
 delete mode 100644 docs/external_programs.html
 delete mode 100644 docs/features.html
 delete mode 100644 docs/file_section.html
 delete mode 100644 docs/files.ref
 delete mode 100644 docs/glossary.html
 delete mode 100644 docs/gpl.txt
 delete mode 100644 docs/htdocs_contrib.txt
 delete mode 100644 docs/images/baja_example.gif
 delete mode 100644 docs/images/bre.gif
 delete mode 100644 docs/images/lordcfg.gif
 delete mode 100644 docs/images/sbbsctrl.gif
 delete mode 100644 docs/images/sbbsctrl_configure.gif
 delete mode 100644 docs/images/sbbsctrl_telnet_cfg_gen.gif
 delete mode 100644 docs/images/sbbsecho_additionalecho.gif
 delete mode 100644 docs/images/sbbsecho_additionalecho_list.gif
 delete mode 100644 docs/images/sbbsecho_additionalecho_list_tag.gif
 delete mode 100644 docs/images/sbbsecho_archiveprgs.gif
 delete mode 100644 docs/images/sbbsecho_archiveprgs_zip.gif
 delete mode 100644 docs/images/sbbsecho_logoptions.gif
 delete mode 100644 docs/images/sbbsecho_main.gif
 delete mode 100644 docs/images/sbbsecho_node_arctype.gif
 delete mode 100644 docs/images/sbbsecho_node_packettype.gif
 delete mode 100644 docs/images/sbbsecho_node_settings.gif
 delete mode 100644 docs/images/sbbsecho_nodes.gif
 delete mode 100644 docs/images/sbbsecho_paths.gif
 delete mode 100644 docs/images/sbbsecho_toggleoptions.gif
 delete mode 100644 docs/images/scfg_chat_channel1.gif
 delete mode 100644 docs/images/scfg_chat_features.gif
 delete mode 100644 docs/images/scfg_chat_gurus.gif
 delete mode 100644 docs/images/scfg_chat_pager1.gif
 delete mode 100644 docs/images/scfg_chat_pagers.gif
 delete mode 100644 docs/images/scfg_chat_theguru.gif
 delete mode 100644 docs/images/scfg_dos_startup.gif
 delete mode 100644 docs/images/scfg_main.gif
 delete mode 100644 docs/images/scfg_modem_config.gif
 delete mode 100644 docs/images/scfg_modem_fax_code1.gif
 delete mode 100644 docs/images/scfg_modem_fax_code2.gif
 delete mode 100644 docs/images/scfg_modem_port_type.gif
 delete mode 100644 docs/images/scfg_modem_resultcode_15.gif
 delete mode 100644 docs/images/scfg_modem_resultcodes.gif
 delete mode 100644 docs/images/scfg_modem_strings.gif
 delete mode 100644 docs/images/scfg_modem_toggles.gif
 delete mode 100644 docs/images/scfg_msg_area_advopts.gif
 delete mode 100644 docs/images/scfg_msg_area_netopts.gif
 delete mode 100644 docs/images/scfg_msg_area_toggles.gif
 delete mode 100644 docs/images/scfg_msg_areas.gif
 delete mode 100644 docs/images/scfg_msg_areas_gen.gif
 delete mode 100644 docs/images/scfg_msg_attrcodes.gif
 delete mode 100644 docs/images/scfg_msg_options.gif
 delete mode 100644 docs/images/scfg_networks.gif
 delete mode 100644 docs/images/scfg_networks_fido.gif
 delete mode 100644 docs/images/scfg_networks_fido_address.gif
 delete mode 100644 docs/images/scfg_networks_internet.gif
 delete mode 100644 docs/images/scfg_networks_post.gif
 delete mode 100644 docs/images/scfg_networks_post_hubs.gif
 delete mode 100644 docs/images/scfg_networks_post_hubs_sccm.gif
 delete mode 100644 docs/images/scfg_networks_qwkhubs.gif
 delete mode 100644 docs/images/scfg_networks_qwkhubs_vert.gif
 delete mode 100644 docs/images/scfg_networks_qwkhubs_vert_subs.gif
 delete mode 100644 docs/images/scfg_networks_qwkhubs_vert_subs_opt.gif
 delete mode 100644 docs/images/scfg_node1.gif
 delete mode 100644 docs/images/scfg_node1_advanced.gif
 delete mode 100644 docs/images/scfg_node1_toggles.gif
 delete mode 100644 docs/images/scfg_system.gif
 delete mode 100644 docs/images/scfg_system_advanced.gif
 delete mode 100644 docs/images/scfg_system_expired.gif
 delete mode 100644 docs/images/scfg_system_loadablemods.gif
 delete mode 100644 docs/images/scfg_system_newvalues.gif
 delete mode 100644 docs/images/scfg_system_newvalues_questions.gif
 delete mode 100644 docs/images/scfg_system_newvalues_toggles.gif
 delete mode 100644 docs/images/scfg_system_quickval.gif
 delete mode 100644 docs/images/scfg_system_quickval_0.gif
 delete mode 100644 docs/images/scfg_system_securityvalues.gif
 delete mode 100644 docs/images/scfg_system_securityvalues_0.gif
 delete mode 100644 docs/images/scfg_system_toggle.gif
 delete mode 100644 docs/images/scfg_xfer_compressable.gif
 delete mode 100644 docs/images/scfg_xfer_dir.gif
 delete mode 100644 docs/images/scfg_xfer_dir_advanced.gif
 delete mode 100644 docs/images/scfg_xfer_dir_toggles.gif
 delete mode 100644 docs/images/scfg_xfer_event.gif
 delete mode 100644 docs/images/scfg_xfer_eventc.gif
 delete mode 100644 docs/images/scfg_xfer_extractable.gif
 delete mode 100644 docs/images/scfg_xfer_library.gif
 delete mode 100644 docs/images/scfg_xfer_options.gif
 delete mode 100644 docs/images/scfg_xfer_proto_dsz.gif
 delete mode 100644 docs/images/scfg_xfer_proto_dsz_g.gif
 delete mode 100644 docs/images/scfg_xfer_proto_dsz_h.gif
 delete mode 100644 docs/images/scfg_xfer_proto_dsz_x.gif
 delete mode 100644 docs/images/scfg_xfer_proto_dsz_y.gif
 delete mode 100644 docs/images/scfg_xfer_proto_dsz_z.gif
 delete mode 100644 docs/images/scfg_xfer_proto_fdsz.gif
 delete mode 100644 docs/images/scfg_xfer_proto_fdsz_g.gif
 delete mode 100644 docs/images/scfg_xfer_proto_fdsz_x.gif
 delete mode 100644 docs/images/scfg_xfer_proto_fdsz_y.gif
 delete mode 100644 docs/images/scfg_xfer_proto_fdsz_z.gif
 delete mode 100644 docs/images/scfg_xfer_testable.gif
 delete mode 100644 docs/images/scfg_xfer_testable_du.gif
 delete mode 100644 docs/images/scfg_xfer_testable_zip.gif
 delete mode 100644 docs/images/scfg_xfer_testable_zipc.gif
 delete mode 100644 docs/images/scfg_xfer_viewable.gif
 delete mode 100644 docs/images/scfg_xtrn_fixed.gif
 delete mode 100644 docs/images/scfg_xtrn_lord.gif
 delete mode 100644 docs/images/scfg_xtrn_sbl.gif
 delete mode 100644 docs/images/scfg_xtrn_section.gif
 delete mode 100644 docs/images/scfg_xtrn_swaplist.gif
 delete mode 100644 docs/images/scfg_xtrn_syncedit.gif
 delete mode 100644 docs/images/scfg_xtrn_timed.gif
 delete mode 100644 docs/images/scfg_xtrn_timeopt.gif
 delete mode 100644 docs/images/scfg_xtrn_tw2002.gif
 delete mode 100644 docs/images/scfg_xtrn_usurper.gif
 delete mode 100644 docs/images/scfg_xtrn_winos2list.gif
 delete mode 100644 docs/images/setuptype.gif
 delete mode 100644 docs/images/synclogo_fancyred.gif
 delete mode 100644 docs/images/tw2002.gif
 delete mode 100644 docs/images/uedit_v3.gif
 delete mode 100644 docs/images/uedit_v3_exe.gif
 delete mode 100644 docs/images/v3icon3.gif
 delete mode 100644 docs/index.htm
 delete mode 100644 docs/index.html
 delete mode 100644 docs/install.html
 delete mode 100644 docs/install.iwz
 delete mode 100644 docs/install.txt
 delete mode 100755 docs/mailer.bat
 delete mode 100644 docs/message_section.html
 delete mode 100644 docs/modem_setup.html
 delete mode 100644 docs/multnode_config.html
 delete mode 100644 docs/networking.html
 delete mode 100644 docs/ntreadme.txt
 delete mode 100644 docs/platforms.html
 delete mode 100644 docs/qemm.txt
 delete mode 100644 docs/sbbs.hst
 delete mode 100644 docs/sbbsecho.html
 delete mode 100644 docs/security.html
 delete mode 100644 docs/smb.html
 delete mode 100644 docs/svdmansi.txt
 delete mode 100644 docs/syedtfaq.txt
 delete mode 100644 docs/syncedit.txt
 delete mode 100644 docs/sysop.html
 delete mode 100644 docs/sysop_commands.html
 delete mode 100644 docs/system_config.html
 delete mode 100644 docs/text210a.dif
 delete mode 100644 docs/text220a.dif
 delete mode 100644 docs/text220b.dif
 delete mode 100644 docs/text230a.dif
 delete mode 100644 docs/textfile_section.html
 delete mode 100644 docs/troubleshooting.html
 delete mode 100644 docs/upgrade.txt
 delete mode 100644 docs/user.html
 delete mode 100644 docs/user_editor.html
 delete mode 100644 docs/usercom.txt
 delete mode 100644 docs/utility_reference.html
 delete mode 100644 docs/v200_new.txt
 delete mode 100644 docs/v210_new.txt
 delete mode 100644 docs/v211_new.txt
 delete mode 100644 docs/v220_new.txt
 delete mode 100644 docs/versions.hst
 delete mode 100644 docs/versions.txt
 delete mode 100644 exec/Makefile.bor
 delete mode 100644 exec/Makefile.gnu
 delete mode 100644 exec/bullseye.src
 delete mode 100644 exec/chat_sec.src
 delete mode 100644 exec/cntnodes.src
 delete mode 100644 exec/default.src
 delete mode 100644 exec/dir.src
 delete mode 100644 exec/dir_attr.inc
 delete mode 100644 exec/dumpobjs.js
 delete mode 100644 exec/errno.inc
 delete mode 100644 exec/examples/dir.js
 delete mode 100644 exec/examples/socktest.js
 delete mode 100644 exec/file_io.inc
 delete mode 100644 exec/file_io.src
 delete mode 100644 exec/finger.js
 delete mode 100644 exec/fingerservice.js
 delete mode 100644 exec/ftp-html.js
 delete mode 100644 exec/ftp.src
 delete mode 100644 exec/gopherservice.js
 delete mode 100644 exec/load/nodedefs.js
 delete mode 100644 exec/load/sbbsdefs.js
 delete mode 100644 exec/load/sockdefs.js
 delete mode 100644 exec/login.src
 delete mode 100644 exec/logon.src
 delete mode 100644 exec/major.src
 delete mode 100644 exec/matrix.src
 delete mode 100644 exec/mudgate.src
 delete mode 100644 exec/nntpservice.js
 delete mode 100644 exec/nodedefs.inc
 delete mode 100644 exec/nodelist-html.js
 delete mode 100644 exec/nodelist.js
 delete mode 100644 exec/noyesbar.src
 delete mode 100644 exec/pcboard.src
 delete mode 100755 exec/pnet.bat
 delete mode 100644 exec/qnet-ftp.src
 delete mode 100755 exec/qnet.bat
 delete mode 100644 exec/qnet.slt
 delete mode 100644 exec/qnet.src
 delete mode 100644 exec/ra_emu.src
 delete mode 100644 exec/renegade.src
 delete mode 100644 exec/rlogin.src
 delete mode 100644 exec/sbbsdefs.inc
 delete mode 100644 exec/sbbshelp.dab
 delete mode 100644 exec/sbbsimsg.js
 delete mode 100644 exec/sbbsqnet.rs
 delete mode 100644 exec/sbbsqnet.scr
 delete mode 100644 exec/sbbsqnet.slt
 delete mode 100644 exec/sdos.src
 delete mode 100644 exec/sendmsg.js
 delete mode 100644 exec/simple.src
 delete mode 100644 exec/socktest.src
 delete mode 100644 exec/sound.js
 delete mode 100644 exec/str_cmds.src
 delete mode 100644 exec/telgate.src
 delete mode 100644 exec/textdat.js
 delete mode 100644 exec/tone/battle.ton
 delete mode 100644 exec/tone/bouree.ton
 delete mode 100644 exec/tone/buffgals.ton
 delete mode 100644 exec/tone/camptown.ton
 delete mode 100644 exec/tone/clown.ton
 delete mode 100644 exec/tone/ent.ton
 delete mode 100644 exec/tone/example.ton
 delete mode 100644 exec/tone/funeral.ton
 delete mode 100644 exec/tone/furelise.ton
 delete mode 100644 exec/tone/goodnite.ton
 delete mode 100644 exec/tone/hatdance.ton
 delete mode 100644 exec/tone/humor.ton
 delete mode 100644 exec/tone/jeanie.ton
 delete mode 100644 exec/tone/la_cuca.ton
 delete mode 100644 exec/tone/maplerag.ton
 delete mode 100644 exec/tone/march.ton
 delete mode 100644 exec/tone/mary.ton
 delete mode 100644 exec/tone/mountai.ton
 delete mode 100644 exec/tone/sakura.ton
 delete mode 100644 exec/tone/sleeping.ton
 delete mode 100644 exec/tone/susanna.ton
 delete mode 100644 exec/tone/swinglow.ton
 delete mode 100644 exec/tone/symph_40.ton
 delete mode 100644 exec/tone/tdc.ton
 delete mode 100644 exec/tone/trapeze.ton
 delete mode 100644 exec/tone/weasel.ton
 delete mode 100644 exec/tone/yankee.ton
 delete mode 100644 exec/type.src
 delete mode 100644 exec/typehtml.src
 delete mode 100644 exec/unixgate.src
 delete mode 100644 exec/userdefs.inc
 delete mode 100644 exec/userlist.js
 delete mode 100644 exec/wildcat.src
 delete mode 100644 exec/wiplogin.src
 delete mode 100644 exec/wipshell.src
 delete mode 100644 exec/yesnobar.src
 delete mode 100644 node1/node.cnf
 delete mode 100755 node1/sbbs.bat
 delete mode 100755 node1/sbbs.cmd
 delete mode 100755 node1/scfg.bat
 delete mode 100755 node1/scfg.cmd
 delete mode 100644 node2/node.cnf
 delete mode 100755 node2/sbbs.bat
 delete mode 100755 node2/sbbs.cmd
 delete mode 100755 node2/scfg.bat
 delete mode 100755 node2/scfg.cmd
 delete mode 100644 node3/node.cnf
 delete mode 100755 node3/sbbs.bat
 delete mode 100755 node3/sbbs.cmd
 delete mode 100755 node3/scfg.bat
 delete mode 100755 node3/scfg.cmd
 delete mode 100644 node4/node.cnf
 delete mode 100755 node4/sbbs.bat
 delete mode 100755 node4/sbbs.cmd
 delete mode 100755 node4/scfg.bat
 delete mode 100755 node4/scfg.cmd
 delete mode 100755 src/cleanall.bat
 delete mode 100755 src/makeall.bat
 delete mode 100755 src/makeall.cmd
 delete mode 100644 src/sbbs2/addfiles/addfiles.c
 delete mode 100755 src/sbbs2/addfiles/makeall.bat
 delete mode 100644 src/sbbs2/addfiles/makefile
 delete mode 100644 src/sbbs2/addfiles/makefile.bc
 delete mode 100644 src/sbbs2/allusers/allusers.c
 delete mode 100755 src/sbbs2/allusers/make.bat
 delete mode 100644 src/sbbs2/ans2msg/ans2msg.c
 delete mode 100644 src/sbbs2/ars.c
 delete mode 100644 src/sbbs2/ars_defs.h
 delete mode 100644 src/sbbs2/atcodes.c
 delete mode 100644 src/sbbs2/autonode/autonode.c
 delete mode 100644 src/sbbs2/baja/baja.c
 delete mode 100755 src/sbbs2/baja/make.bat
 delete mode 100755 src/sbbs2/baja/make.cmd
 delete mode 100644 src/sbbs2/bulkmail.c
 delete mode 100644 src/sbbs2/chat.c
 delete mode 100644 src/sbbs2/chk_ar.c
 delete mode 100644 src/sbbs2/cmdshell.h
 delete mode 100644 src/sbbs2/comio.c
 delete mode 100644 src/sbbs2/con_hi.c
 delete mode 100644 src/sbbs2/con_in.c
 delete mode 100644 src/sbbs2/con_mid.c
 delete mode 100644 src/sbbs2/con_out.c
 delete mode 100644 src/sbbs2/data.c
 delete mode 100644 src/sbbs2/data_ovl.c
 delete mode 100644 src/sbbs2/dcdwatch/dcdwatch.c
 delete mode 100644 src/sbbs2/delfiles/delfiles.c
 delete mode 100755 src/sbbs2/delfiles/makeall.bat
 delete mode 100644 src/sbbs2/delfiles/makefile
 delete mode 100644 src/sbbs2/delfiles/makefile.bc
 delete mode 100644 src/sbbs2/dos/rciol.obj
 delete mode 100644 src/sbbs2/dstsedit/dstsedit.c
 delete mode 100755 src/sbbs2/dstsedit/make.bat
 delete mode 100644 src/sbbs2/dupefind/dupefind.c
 delete mode 100755 src/sbbs2/dupefind/makeall.bat
 delete mode 100644 src/sbbs2/dupefind/makefile
 delete mode 100644 src/sbbs2/dupefind/makefile.bc
 delete mode 100644 src/sbbs2/echo/docs/fidostep.doc
 delete mode 100644 src/sbbs2/echo/docs/man.c
 delete mode 100644 src/sbbs2/echo/docs/sbbsecho.src
 delete mode 100644 src/sbbs2/echo/echocfg.c
 delete mode 100644 src/sbbs2/echo/echocfg.mak
 delete mode 100755 src/sbbs2/echo/makeall.bat
 delete mode 100755 src/sbbs2/echo/makecfg.bat
 delete mode 100644 src/sbbs2/echo/makefile
 delete mode 100644 src/sbbs2/echo/read_cfg.c
 delete mode 100644 src/sbbs2/echo/sbbsecho.c
 delete mode 100644 src/sbbs2/echo/sbbsecho.h
 delete mode 100644 src/sbbs2/echo/sbbsecho.wat
 delete mode 100644 src/sbbs2/email.c
 delete mode 100644 src/sbbs2/etext.c
 delete mode 100644 src/sbbs2/etext.dat
 delete mode 100644 src/sbbs2/etext.h
 delete mode 100644 src/sbbs2/exec.c
 delete mode 100644 src/sbbs2/execdos/execdos.c
 delete mode 100755 src/sbbs2/execdos/make.bat
 delete mode 100644 src/sbbs2/execfile.c
 delete mode 100644 src/sbbs2/execfunc.c
 delete mode 100644 src/sbbs2/execmisc.c
 delete mode 100644 src/sbbs2/execmsg.c
 delete mode 100644 src/sbbs2/execsbbs/execsbbs.c
 delete mode 100755 src/sbbs2/execsbbs/make.bat
 delete mode 100755 src/sbbs2/execsbbs/make.cmd
 delete mode 100644 src/sbbs2/fido.c
 delete mode 100644 src/sbbs2/fido/crc16.c
 delete mode 100644 src/sbbs2/fido/crc32.h
 delete mode 100644 src/sbbs2/fido/file_id.diz
 delete mode 100644 src/sbbs2/fido/lzh.c
 delete mode 100644 src/sbbs2/fido/lzh.h
 delete mode 100755 src/sbbs2/fido/makeall.bat
 delete mode 100644 src/sbbs2/fido/makefile
 delete mode 100644 src/sbbs2/fido/makefile.bc
 delete mode 100644 src/sbbs2/fido/sbbsfido.c
 delete mode 100644 src/sbbs2/fido/smbdefs.h
 delete mode 100644 src/sbbs2/fido/smblib.c
 delete mode 100644 src/sbbs2/fido/smblib.h
 delete mode 100644 src/sbbs2/fido/smbvars.c
 delete mode 100644 src/sbbs2/file.c
 delete mode 100644 src/sbbs2/file_ovl.c
 delete mode 100644 src/sbbs2/filelist/filelist.c
 delete mode 100755 src/sbbs2/filelist/makeall.bat
 delete mode 100644 src/sbbs2/filelist/makefile
 delete mode 100644 src/sbbs2/filelist/makefile.bc
 delete mode 100644 src/sbbs2/gen_defs.h
 delete mode 100644 src/sbbs2/genetext.c
 delete mode 100755 src/sbbs2/genetext.exe
 delete mode 100644 src/sbbs2/getnode.c
 delete mode 100644 src/sbbs2/getuser.c
 delete mode 100644 src/sbbs2/initdata.c
 delete mode 100644 src/sbbs2/install/install.c
 delete mode 100644 src/sbbs2/install/makefile
 delete mode 100644 src/sbbs2/listfile.c
 delete mode 100644 src/sbbs2/login.c
 delete mode 100644 src/sbbs2/logio.c
 delete mode 100644 src/sbbs2/logon.c
 delete mode 100644 src/sbbs2/logout.c
 delete mode 100644 src/sbbs2/mail.c
 delete mode 100644 src/sbbs2/main.c
 delete mode 100644 src/sbbs2/main_ovl.c
 delete mode 100644 src/sbbs2/main_sec.c
 delete mode 100644 src/sbbs2/main_wfc.c
 delete mode 100644 src/sbbs2/makefile
 delete mode 100644 src/sbbs2/misc.c
 delete mode 100755 src/sbbs2/mlabels/make.bat
 delete mode 100644 src/sbbs2/mlabels/mlabels.c
 delete mode 100644 src/sbbs2/msg1.c
 delete mode 100644 src/sbbs2/msg2.c
 delete mode 100644 src/sbbs2/msg2ans/msg2ans.c
 delete mode 100644 src/sbbs2/msgtoqwk.c
 delete mode 100644 src/sbbs2/netmail.c
 delete mode 100644 src/sbbs2/newuser.c
 delete mode 100755 src/sbbs2/node/make.bat
 delete mode 100755 src/sbbs2/node/make.cmd
 delete mode 100644 src/sbbs2/node/node.c
 delete mode 100644 src/sbbs2/nodedefs.h
 delete mode 100644 src/sbbs2/pack_qwk.c
 delete mode 100644 src/sbbs2/pack_rep.c
 delete mode 100644 src/sbbs2/post.h
 delete mode 100644 src/sbbs2/postmsg.c
 delete mode 100644 src/sbbs2/putmsg.c
 delete mode 100644 src/sbbs2/putnode.c
 delete mode 100644 src/sbbs2/qwk.c
 delete mode 100644 src/sbbs2/qwk.h
 delete mode 100755 src/sbbs2/qwknodes/make.bat
 delete mode 100644 src/sbbs2/qwknodes/qwknodes.c
 delete mode 100644 src/sbbs2/qwktomsg.c
 delete mode 100644 src/sbbs2/readmsgs.c
 delete mode 100644 src/sbbs2/rio/riodefs.h
 delete mode 100644 src/sbbs2/rio/riolib.c
 delete mode 100644 src/sbbs2/rio/riolib.h
 delete mode 100644 src/sbbs2/sbbs.h
 delete mode 100644 src/sbbs2/sbbs_src.doc
 delete mode 100644 src/sbbs2/sbbsdefs.h
 delete mode 100644 src/sbbs2/scb/makefile
 delete mode 100644 src/sbbs2/scb/scb.c
 delete mode 100644 src/sbbs2/scb/scb.h
 delete mode 100644 src/sbbs2/scb/scbcfg.c
 delete mode 100644 src/sbbs2/scb/scbcfg.mak
 delete mode 100755 src/sbbs2/scfg/makeall.bat
 delete mode 100644 src/sbbs2/scfg/makefile
 delete mode 100644 src/sbbs2/scfg/makehelp.c
 delete mode 100755 src/sbbs2/scfg/makehelp.exe
 delete mode 100644 src/sbbs2/scfg/scfg.c
 delete mode 100644 src/sbbs2/scfg/scfg.h
 delete mode 100644 src/sbbs2/scfg/scfgchat.c
 delete mode 100644 src/sbbs2/scfg/scfgmdm.c
 delete mode 100644 src/sbbs2/scfg/scfgmsg.c
 delete mode 100644 src/sbbs2/scfg/scfgnet.c
 delete mode 100644 src/sbbs2/scfg/scfgnode.c
 delete mode 100644 src/sbbs2/scfg/scfgsub.c
 delete mode 100644 src/sbbs2/scfg/scfgsys.c
 delete mode 100644 src/sbbs2/scfg/scfgxfr1.c
 delete mode 100644 src/sbbs2/scfg/scfgxfr2.c
 delete mode 100644 src/sbbs2/scfg/scfgxtrn.c
 delete mode 100644 src/sbbs2/scfg/wrcnf1.c
 delete mode 100644 src/sbbs2/scfg/wrcnf2.c
 delete mode 100644 src/sbbs2/scfglib.h
 delete mode 100644 src/sbbs2/scfglib1.c
 delete mode 100644 src/sbbs2/scfglib2.c
 delete mode 100644 src/sbbs2/scfgvars.c
 delete mode 100755 src/sbbs2/slog/make.bat
 delete mode 100755 src/sbbs2/slog/make.cmd
 delete mode 100644 src/sbbs2/slog/slog.c
 delete mode 100644 src/sbbs2/smb/121a/chksmb.c
 delete mode 100644 src/sbbs2/smb/121a/chksmb.mak
 delete mode 100644 src/sbbs2/smb/121a/crc16.c
 delete mode 100644 src/sbbs2/smb/121a/crc32.h
 delete mode 100644 src/sbbs2/smb/121a/fido2smb.c
 delete mode 100644 src/sbbs2/smb/121a/fido2smb.mak
 delete mode 100644 src/sbbs2/smb/121a/file_id.diz
 delete mode 100644 src/sbbs2/smb/121a/fixsmb.c
 delete mode 100644 src/sbbs2/smb/121a/fixsmb.mak
 delete mode 100644 src/sbbs2/smb/121a/inet2smb.c
 delete mode 100644 src/sbbs2/smb/121a/inet2smb.mak
 delete mode 100644 src/sbbs2/smb/121a/lzh.c
 delete mode 100644 src/sbbs2/smb/121a/lzh.h
 delete mode 100644 src/sbbs2/smb/121a/qwk2smb.c
 delete mode 100644 src/sbbs2/smb/121a/qwk2smb.mak
 delete mode 100644 src/sbbs2/smb/121a/smb.hst
 delete mode 100644 src/sbbs2/smb/121a/smb.prn
 delete mode 100644 src/sbbs2/smb/121a/smb.txt
 delete mode 100644 src/sbbs2/smb/121a/smb_read.me
 delete mode 100644 src/sbbs2/smb/121a/smbdefs.h
 delete mode 100644 src/sbbs2/smb/121a/smblib.c
 delete mode 100644 src/sbbs2/smb/121a/smblib.h
 delete mode 100644 src/sbbs2/smb/121a/smbutil.bor
 delete mode 100644 src/sbbs2/smb/121a/smbutil.c
 delete mode 100644 src/sbbs2/smb/121a/smbutil.h
 delete mode 100644 src/sbbs2/smb/121a/smbutil.wat
 delete mode 100644 src/sbbs2/smb/121a/smbvars.c
 delete mode 100644 src/sbbs2/smb/chksmb/chksmb.c
 delete mode 100644 src/sbbs2/smb/chksmb/makefile
 delete mode 100644 src/sbbs2/smb/crc16.c
 delete mode 100644 src/sbbs2/smb/crc32.c
 delete mode 100644 src/sbbs2/smb/crc32.h
 delete mode 100644 src/sbbs2/smb/docs/smb.hst
 delete mode 100644 src/sbbs2/smb/docs/smb.src
 delete mode 100644 src/sbbs2/smb/docs/smb_read.me
 delete mode 100644 src/sbbs2/smb/fixsmb/fixsmb.c
 delete mode 100644 src/sbbs2/smb/fixsmb/makefile
 delete mode 100644 src/sbbs2/smb/lzh.c
 delete mode 100644 src/sbbs2/smb/lzh.h
 delete mode 100644 src/sbbs2/smb/smbdefs.h
 delete mode 100644 src/sbbs2/smb/smblib.c
 delete mode 100644 src/sbbs2/smb/smblib.h
 delete mode 100755 src/sbbs2/smb/smbutil/makeall.bat
 delete mode 100644 src/sbbs2/smb/smbutil/makefile
 delete mode 100644 src/sbbs2/smb/smbutil/makefile.bc
 delete mode 100644 src/sbbs2/smb/smbutil/smbutil.c
 delete mode 100644 src/sbbs2/smb/smbutil/smbutil.h
 delete mode 100755 src/sbbs2/smbactiv/makeall.bat
 delete mode 100644 src/sbbs2/smbactiv/makefile
 delete mode 100644 src/sbbs2/smbactiv/makefile.bc
 delete mode 100644 src/sbbs2/smbactiv/smbactiv.c
 delete mode 100644 src/sbbs2/smbfuncs.c
 delete mode 100644 src/sbbs2/smm/addphoto.c
 delete mode 100644 src/sbbs2/smm/delphoto.c
 delete mode 100644 src/sbbs2/smm/lstphoto.c
 delete mode 100644 src/sbbs2/smm/makefile
 delete mode 100755 src/sbbs2/smm/makeio.bat
 delete mode 100644 src/sbbs2/smm/makemsg.c
 delete mode 100755 src/sbbs2/smm/makephot.bat
 delete mode 100755 src/sbbs2/smm/makeutil.bat
 delete mode 100644 src/sbbs2/smm/outphoto.c
 delete mode 100644 src/sbbs2/smm/smb2smm.c
 delete mode 100644 src/sbbs2/smm/smm.c
 delete mode 100644 src/sbbs2/smm/smm2msg.c
 delete mode 100644 src/sbbs2/smm/smm2smb.c
 delete mode 100644 src/sbbs2/smm/smmcfg.c
 delete mode 100644 src/sbbs2/smm/smmcfg.mak
 delete mode 100644 src/sbbs2/smm/smmdefs.h
 delete mode 100644 src/sbbs2/smm/smmutil.c
 delete mode 100644 src/sbbs2/smm/smmvars.c
 delete mode 100644 src/sbbs2/str.c
 delete mode 100644 src/sbbs2/text.h
 delete mode 100644 src/sbbs2/text_sec.c
 delete mode 100644 src/sbbs2/un_qwk.c
 delete mode 100644 src/sbbs2/un_rep.c
 delete mode 100644 src/sbbs2/useredit.c
 delete mode 100644 src/sbbs2/userrec.c
 delete mode 100644 src/sbbs2/uti/makefile
 delete mode 100644 src/sbbs2/uti/uti.c
 delete mode 100644 src/sbbs2/uti/uti.h
 delete mode 100644 src/sbbs2/uti/utiexprt.c
 delete mode 100644 src/sbbs2/uti/utihigh.c
 delete mode 100644 src/sbbs2/uti/utiimprt.c
 delete mode 100644 src/sbbs2/uti/utilist.c
 delete mode 100644 src/sbbs2/uti/utilstrd.c
 delete mode 100644 src/sbbs2/uti/utiver.c
 delete mode 100644 src/sbbs2/vars.c
 delete mode 100644 src/sbbs2/ver.c
 delete mode 100644 src/sbbs2/viewfile.c
 delete mode 100644 src/sbbs2/xfer_hi.c
 delete mode 100644 src/sbbs2/xfer_lo.c
 delete mode 100644 src/sbbs2/xfer_mid.c
 delete mode 100644 src/sbbs2/xfer_sec.c
 delete mode 100644 src/sbbs2/xtrn.c
 delete mode 100644 src/sbbs2/xtrn_ovl.c
 delete mode 100755 src/stp/make.bat
 delete mode 100644 src/stp/rciols.obj
 delete mode 100644 src/stp/stp.c
 delete mode 100644 src/stp/zmodem.h
 delete mode 100644 src/tone/cvt$$a.c
 delete mode 100755 src/tone/make.bat
 delete mode 100644 src/tone/tone.c
 delete mode 100644 src/uifc/uifc.c
 delete mode 100644 src/uifc/uifc.h
 delete mode 100644 src/uifc/uifcd.c
 delete mode 100644 src/uifc/uifcx.c
 delete mode 100755 src/wmakeall.bat
 delete mode 100644 text/answer.asc
 delete mode 100644 text/answer.wip
 delete mode 100644 text/computer.sif
 delete mode 100644 text/example.sif
 delete mode 100644 text/feedback.msg
 delete mode 100644 text/menu/allmail.asc
 delete mode 100644 text/menu/attr.asc
 delete mode 100644 text/menu/batchxfr.asc
 delete mode 100644 text/menu/batchxfr.rip
 delete mode 100644 text/menu/batdprot.asc
 delete mode 100644 text/menu/batflag.asc
 delete mode 100644 text/menu/batuprot.asc
 delete mode 100644 text/menu/biprot.asc
 delete mode 100644 text/menu/chat.asc
 delete mode 100644 text/menu/chat.rip
 delete mode 100644 text/menu/chat.wip
 delete mode 100644 text/menu/dlprot.asc
 delete mode 100644 text/menu/e-mail.asc
 delete mode 100644 text/menu/e-mail.rip
 delete mode 100644 text/menu/e-mail.wip
 delete mode 100644 text/menu/editor.asc
 delete mode 100644 text/menu/exempt.asc
 delete mode 100644 text/menu/flags1.asc
 delete mode 100644 text/menu/flags2.asc
 delete mode 100644 text/menu/flags3.asc
 delete mode 100644 text/menu/flags4.asc
 delete mode 100644 text/menu/info.wip
 delete mode 100644 text/menu/keyboard.wip
 delete mode 100644 text/menu/login.wip
 delete mode 100644 text/menu/logoff.asc
 delete mode 100644 text/menu/logoff.msg
 delete mode 100644 text/menu/logon.asc
 delete mode 100644 text/menu/mailread.asc
 delete mode 100644 text/menu/mailread.rip
 delete mode 100644 text/menu/mailread.wip
 delete mode 100644 text/menu/main.asc
 delete mode 100644 text/menu/main.rip
 delete mode 100644 text/menu/maincfg.asc
 delete mode 100644 text/menu/maincfg.rip
 delete mode 100644 text/menu/maininfo.asc
 delete mode 100644 text/menu/maininfo.rip
 delete mode 100644 text/menu/major/email.asc
 delete mode 100644 text/menu/major/file.asc
 delete mode 100644 text/menu/major/main.asc
 delete mode 100644 text/menu/major/msg.asc
 delete mode 100644 text/menu/major/quickscn.asc
 delete mode 100644 text/menu/major/userdefs.asc
 delete mode 100644 text/menu/msgattr.asc
 delete mode 100644 text/menu/msgs.wip
 delete mode 100644 text/menu/msgscan.asc
 delete mode 100644 text/menu/msgscan.rip
 delete mode 100644 text/menu/msgscan.wip
 delete mode 100644 text/menu/multchat.asc
 delete mode 100644 text/menu/multchat.rip
 delete mode 100644 text/menu/namepass.wip
 delete mode 100644 text/menu/noyes.wip
 delete mode 100644 text/menu/number.wip
 delete mode 100644 text/menu/pause.wip
 delete mode 100644 text/menu/pcboard/brdm.asc
 delete mode 100644 text/menu/pcboard/welcome.asc
 delete mode 100644 text/menu/privchat.asc
 delete mode 100644 text/menu/privchat.rip
 delete mode 100644 text/menu/qwk.asc
 delete mode 100644 text/menu/qwk.rip
 delete mode 100644 text/menu/qwk.wip
 delete mode 100644 text/menu/renegade/email.asc
 delete mode 100644 text/menu/renegade/main.asc
 delete mode 100644 text/menu/renegade/message.asc
 delete mode 100644 text/menu/renegade/transfer.asc
 delete mode 100644 text/menu/restrict.asc
 delete mode 100644 text/menu/sdos/files.asc
 delete mode 100644 text/menu/sdos/mail.asc
 delete mode 100644 text/menu/sdos/root.asc
 delete mode 100644 text/menu/sentmail.asc
 delete mode 100644 text/menu/sentmail.rip
 delete mode 100644 text/menu/sentmail.wip
 delete mode 100644 text/menu/simple/filelist.asc
 delete mode 100644 text/menu/simple/main.asc
 delete mode 100644 text/menu/simple/prompt.ans
 delete mode 100644 text/menu/simple/prompt.asc
 delete mode 100644 text/menu/simple/readmsg.asc
 delete mode 100644 text/menu/simple/sendmsg.asc
 delete mode 100644 text/menu/sysmailr.asc
 delete mode 100644 text/menu/sysmain.asc
 delete mode 100644 text/menu/sysmscan.asc
 delete mode 100644 text/menu/syssmail.asc
 delete mode 100644 text/menu/sysxfer.asc
 delete mode 100644 text/menu/tempxfer.asc
 delete mode 100644 text/menu/tempxfer.rip
 delete mode 100644 text/menu/transfer.asc
 delete mode 100644 text/menu/transfer.rip
 delete mode 100644 text/menu/uedit.asc
 delete mode 100644 text/menu/ulprot.asc
 delete mode 100644 text/menu/wfc.asc
 delete mode 100644 text/menu/wildcat/file.asc
 delete mode 100644 text/menu/wildcat/main.asc
 delete mode 100644 text/menu/wildcat/msg.asc
 delete mode 100644 text/menu/wildcat/sysop.asc
 delete mode 100644 text/menu/wipfile.wip
 delete mode 100644 text/menu/wipmain.wip
 delete mode 100644 text/menu/xfercfg.asc
 delete mode 100644 text/menu/xfercfg.rip
 delete mode 100644 text/menu/xferinfo.asc
 delete mode 100644 text/menu/xferinfo.rip
 delete mode 100644 text/menu/yesno.wip
 delete mode 100644 text/name.can
 delete mode 100644 text/newuser.msg
 delete mode 100644 text/phone.can
 delete mode 100644 text/sbbs.msg
 delete mode 100644 text/system.msg
 delete mode 100644 text/zipmsg.txt
 delete mode 100644 xtrn/sbj/Makefile.gnu
 delete mode 100644 xtrn/sbj/sbj.bpf
 delete mode 100644 xtrn/sbj/sbj.bpr
 delete mode 100644 xtrn/sbj/sbj.c
 delete mode 100644 xtrn/sbj/sbj.cfg
 delete mode 100644 xtrn/sbj/sbj.doc
 delete mode 100644 xtrn/sbj/sbj.dsp
 delete mode 100644 xtrn/sbj/sbj.msg
 delete mode 100644 xtrn/sbj/sbjclean.c
 delete mode 100644 xtrn/sbl/Makefile.gnu
 delete mode 100644 xtrn/sbl/makefile.bor
 delete mode 100644 xtrn/sbl/sbbslist.c
 delete mode 100644 xtrn/sbl/sbl.bpf
 delete mode 100644 xtrn/sbl/sbl.bpr
 delete mode 100644 xtrn/sbl/sbl.c
 delete mode 100644 xtrn/sbl/sbl.cfg
 delete mode 100644 xtrn/sbl/sbl.doc
 delete mode 100644 xtrn/sbl/sbl.dsp
 delete mode 100644 xtrn/sbl/sbl2smb.c
 delete mode 100644 xtrn/sbl/sbl2smb.dsp
 delete mode 100644 xtrn/sbl/sbl2txt.c
 delete mode 100644 xtrn/sbl/sbldefs.h
 delete mode 100644 xtrn/sbl/sblpack.c
 delete mode 100644 xtrn/sbl/sblpack.dsp
 delete mode 100644 xtrn/sbl/smb2sbl.c
 delete mode 100644 xtrn/sbl/smb2sbl.dsp
 delete mode 100644 xtrn/sbl/sysop.txt
 delete mode 100644 xtrn/scb/instruct.msg
 delete mode 100644 xtrn/scb/ld_time.msg
 delete mode 100644 xtrn/scb/no_one.msg
 delete mode 100644 xtrn/scb/no_zero.msg
 delete mode 100644 xtrn/scb/phonecan.msg
 delete mode 100644 xtrn/scb/refused.msg
 delete mode 100644 xtrn/scb/scb.cfg
 delete mode 100644 xtrn/scb/scb.doc
 delete mode 100644 xtrn/scb/scb.msg
 delete mode 100644 xtrn/scb/toolong.msg
 delete mode 100644 xtrn/scb/tooshort.msg
 delete mode 100644 xtrn/scb/verified.msg
 delete mode 100644 xtrn/scb/whats.new
 delete mode 100644 xtrn/sdk/xsdk.c
 delete mode 100644 xtrn/sdk/xsdk.h
 delete mode 100644 xtrn/sdk/xsdk.txt
 delete mode 100644 xtrn/sdk/xsdkdefs.h
 delete mode 100644 xtrn/sdk/xsdkinet.h
 delete mode 100644 xtrn/sdk/xsdkvars.c
 delete mode 100644 xtrn/sdk/xsdkwrap.c
 delete mode 100644 xtrn/sdk/xsdkwrap.h
 delete mode 100644 xtrn/smm/adult.que
 delete mode 100644 xtrn/smm/appear.que
 delete mode 100644 xtrn/smm/basic.que
 delete mode 100644 xtrn/smm/file_id.diz
 delete mode 100644 xtrn/smm/list_hdr.asc
 delete mode 100644 xtrn/smm/material.que
 delete mode 100644 xtrn/smm/mb-e.asc
 delete mode 100644 xtrn/smm/mb-enfj.asc
 delete mode 100644 xtrn/smm/mb-enfp.asc
 delete mode 100644 xtrn/smm/mb-entj.asc
 delete mode 100644 xtrn/smm/mb-entp.asc
 delete mode 100644 xtrn/smm/mb-esfj.asc
 delete mode 100644 xtrn/smm/mb-esfp.asc
 delete mode 100644 xtrn/smm/mb-estj.asc
 delete mode 100644 xtrn/smm/mb-estp.asc
 delete mode 100644 xtrn/smm/mb-f.asc
 delete mode 100644 xtrn/smm/mb-fp.asc
 delete mode 100644 xtrn/smm/mb-i.asc
 delete mode 100644 xtrn/smm/mb-infj.asc
 delete mode 100644 xtrn/smm/mb-infp.asc
 delete mode 100644 xtrn/smm/mb-intj.asc
 delete mode 100644 xtrn/smm/mb-intp.asc
 delete mode 100644 xtrn/smm/mb-intro.asc
 delete mode 100644 xtrn/smm/mb-isfj.asc
 delete mode 100644 xtrn/smm/mb-isfp.asc
 delete mode 100644 xtrn/smm/mb-istj.asc
 delete mode 100644 xtrn/smm/mb-istp.asc
 delete mode 100644 xtrn/smm/mb-j.asc
 delete mode 100644 xtrn/smm/mb-n.asc
 delete mode 100644 xtrn/smm/mb-nf.asc
 delete mode 100644 xtrn/smm/mb-nt.asc
 delete mode 100644 xtrn/smm/mb-p.asc
 delete mode 100644 xtrn/smm/mb-s.asc
 delete mode 100644 xtrn/smm/mb-sj.asc
 delete mode 100644 xtrn/smm/mb-sp.asc
 delete mode 100644 xtrn/smm/mb-t.asc
 delete mode 100644 xtrn/smm/mb-tj.asc
 delete mode 100644 xtrn/smm/mb-type.asc
 delete mode 100644 xtrn/smm/mb-type.que
 delete mode 100644 xtrn/smm/purity-1.asc
 delete mode 100644 xtrn/smm/purity-2.asc
 delete mode 100644 xtrn/smm/purity-3.asc
 delete mode 100644 xtrn/smm/purity-4.asc
 delete mode 100644 xtrn/smm/purity-5.asc
 delete mode 100644 xtrn/smm/purity-6.asc
 delete mode 100644 xtrn/smm/purity-7.asc
 delete mode 100644 xtrn/smm/purity-8.asc
 delete mode 100644 xtrn/smm/purity-9.asc
 delete mode 100644 xtrn/smm/purity-a.asc
 delete mode 100644 xtrn/smm/purity-b.asc
 delete mode 100644 xtrn/smm/purity.100
 delete mode 100644 xtrn/smm/purity.500
 delete mode 100644 xtrn/smm/purity.asc
 delete mode 100644 xtrn/smm/purity.que
 delete mode 100644 xtrn/smm/que.lst
 delete mode 100644 xtrn/smm/smm.can
 delete mode 100644 xtrn/smm/smm.cfg
 delete mode 100644 xtrn/smm/smm.doc
 delete mode 100644 xtrn/smm/smm_help.asc
 delete mode 100644 xtrn/smm/smm_logo.asc
 delete mode 100644 xtrn/smm/smm_main.asc
 delete mode 100644 xtrn/smm/upgrade.doc

diff --git a/CVSROOT/checkoutlist b/CVSROOT/checkoutlist
deleted file mode 100755
index b04b3501f5..0000000000
--- a/CVSROOT/checkoutlist
+++ /dev/null
@@ -1,13 +0,0 @@
-# The "checkoutlist" file is used to support additional version controlled
-# administrative files in $CVSROOT/CVSROOT, such as template files.
-#
-# The first entry on a line is a filename which will be checked out from
-# the corresponding RCS file in the $CVSROOT/CVSROOT directory.
-# The remainder of the line is an error message to use if the file cannot
-# be checked out.
-#
-# File format:
-#
-#	[<whitespace>]<filename><whitespace><error message><end-of-line>
-#
-# comment lines begin with '#'
diff --git a/CVSROOT/commitinfo b/CVSROOT/commitinfo
deleted file mode 100755
index b19e7b7a63..0000000000
--- a/CVSROOT/commitinfo
+++ /dev/null
@@ -1,15 +0,0 @@
-# The "commitinfo" file is used to control pre-commit checks.
-# The filter on the right is invoked with the repository and a list 
-# of files to check.  A non-zero exit of the filter program will 
-# cause the commit to be aborted.
-#
-# The first entry on a line is a regular expression which is tested
-# against the directory that the change is being committed to, relative
-# to the $CVSROOT.  For the first match that is found, then the remainder
-# of the line is the name of the filter to run.
-#
-# If the repository name does not match any of the regular expressions in this
-# file, the "DEFAULT" line is used, if it is specified.
-#
-# If the name "ALL" appears as a regular expression it is always used
-# in addition to the first matching regex or "DEFAULT".
diff --git a/CVSROOT/config b/CVSROOT/config
deleted file mode 100755
index 8069cad5df..0000000000
--- a/CVSROOT/config
+++ /dev/null
@@ -1,11 +0,0 @@
-# Set this to "no" if pserver shouldn't check system users/passwords
-#SystemAuth=no
-
-# Set `PreservePermissions' to `yes' to save file status information
-# in the repository.
-#PreservePermissions=no
-
-# Set `TopLevelAdmin' to `yes' to create a CVS directory at the top
-# level of the new working directory when using the `cvs checkout'
-# command.
-#TopLevelAdmin=no
diff --git a/CVSROOT/cvswrappers b/CVSROOT/cvswrappers
deleted file mode 100755
index 0accaf1b15..0000000000
--- a/CVSROOT/cvswrappers
+++ /dev/null
@@ -1,23 +0,0 @@
-# This file affects handling of files based on their names.
-#
-# The -t/-f options allow one to treat directories of files
-# as a single file, or to transform a file in other ways on
-# its way in and out of CVS.
-#
-# The -m option specifies whether CVS attempts to merge files.
-#
-# The -k option specifies keyword expansion (e.g. -kb for binary).
-#
-# Format of wrapper file ($CVSROOT/CVSROOT/cvswrappers or .cvswrappers)
-#
-#  wildcard	[option value][option value]...
-#
-#  where option is one of
-#  -f		from cvs filter		value: path to filter
-#  -t		to cvs filter		value: path to filter
-#  -m		update methodology	value: MERGE or COPY
-#  -k		expansion mode		value: b, o, kkv, &c
-#
-#  and value is a single-quote delimited value.
-# For example:
-#*.gif -k 'b'
diff --git a/CVSROOT/editinfo b/CVSROOT/editinfo
deleted file mode 100755
index d78886c152..0000000000
--- a/CVSROOT/editinfo
+++ /dev/null
@@ -1,21 +0,0 @@
-# The "editinfo" file is used to allow verification of logging
-# information.  It works best when a template (as specified in the
-# rcsinfo file) is provided for the logging procedure.  Given a
-# template with locations for, a bug-id number, a list of people who
-# reviewed the code before it can be checked in, and an external
-# process to catalog the differences that were code reviewed, the
-# following test can be applied to the code:
-#
-#   Making sure that the entered bug-id number is correct.
-#   Validating that the code that was reviewed is indeed the code being
-#       checked in (using the bug-id number or a seperate review
-#       number to identify this particular code set.).
-#
-# If any of the above test failed, then the commit would be aborted.
-#
-# Actions such as mailing a copy of the report to each reviewer are
-# better handled by an entry in the loginfo file.
-#
-# One thing that should be noted is the the ALL keyword is not
-# supported.  There can be only one entry that matches a given
-# repository.
diff --git a/CVSROOT/loginfo b/CVSROOT/loginfo
deleted file mode 100755
index 5a59f0a544..0000000000
--- a/CVSROOT/loginfo
+++ /dev/null
@@ -1,26 +0,0 @@
-# The "loginfo" file controls where "cvs commit" log information
-# is sent.  The first entry on a line is a regular expression which must match
-# the directory that the change is being made to, relative to the
-# $CVSROOT.  If a match is found, then the remainder of the line is a filter
-# program that should expect log information on its standard input.
-#
-# If the repository name does not match any of the regular expressions in this
-# file, the "DEFAULT" line is used, if it is specified.
-#
-# If the name ALL appears as a regular expression it is always used
-# in addition to the first matching regex or DEFAULT.
-#
-# You may specify a format string as part of the
-# filter.  The string is composed of a `%' followed
-# by a single format character, or followed by a set of format
-# characters surrounded by `{' and `}' as separators.  The format
-# characters are:
-#
-#   s = file name
-#   V = old version number (pre-checkin)
-#   v = new version number (post-checkin)
-#
-# For example:
-#DEFAULT (echo ""; id; echo %s; date; cat) >> $CVSROOT/CVSROOT/commitlog
-# or
-#DEFAULT (echo ""; id; echo %{sVv}; date; cat) >> $CVSROOT/CVSROOT/commitlog
diff --git a/CVSROOT/modules b/CVSROOT/modules
deleted file mode 100755
index cb9e9efc94..0000000000
--- a/CVSROOT/modules
+++ /dev/null
@@ -1,26 +0,0 @@
-# Three different line formats are valid:
-#	key	-a    aliases...
-#	key [options] directory
-#	key [options] directory files...
-#
-# Where "options" are composed of:
-#	-i prog		Run "prog" on "cvs commit" from top-level of module.
-#	-o prog		Run "prog" on "cvs checkout" of module.
-#	-e prog		Run "prog" on "cvs export" of module.
-#	-t prog		Run "prog" on "cvs rtag" of module.
-#	-u prog		Run "prog" on "cvs update" of module.
-#	-d dir		Place module in directory "dir" instead of module name.
-#	-l		Top-level directory only -- do not recurse.
-#
-# NOTE:  If you change any of the "Run" options above, you'll have to
-# release and re-checkout any working directories of these modules.
-#
-# And "directory" is a path to a directory relative to $CVSROOT.
-#
-# The "-a" option specifies an alias.  An alias is interpreted as if
-# everything on the right of the "-a" had been typed on the command line.
-#
-# You can encode a module within a module by using the special '&'
-# character to interpose another module into the current module.  This
-# can be useful for creating a module that consists of many directories
-# spread out over the entire source repository.
diff --git a/CVSROOT/notify b/CVSROOT/notify
deleted file mode 100755
index 34f0bc2888..0000000000
--- a/CVSROOT/notify
+++ /dev/null
@@ -1,12 +0,0 @@
-# The "notify" file controls where notifications from watches set by
-# "cvs watch add" or "cvs edit" are sent.  The first entry on a line is
-# a regular expression which is tested against the directory that the
-# change is being made to, relative to the $CVSROOT.  If it matches,
-# then the remainder of the line is a filter program that should contain
-# one occurrence of %s for the user to notify, and information on its
-# standard input.
-#
-# "ALL" or "DEFAULT" can be used in place of the regular expression.
-#
-# For example:
-#ALL mail %s -s "CVS notification"
diff --git a/CVSROOT/rcsinfo b/CVSROOT/rcsinfo
deleted file mode 100755
index 49e59f4d0d..0000000000
--- a/CVSROOT/rcsinfo
+++ /dev/null
@@ -1,13 +0,0 @@
-# The "rcsinfo" file is used to control templates with which the editor
-# is invoked on commit and import.
-#
-# The first entry on a line is a regular expression which is tested
-# against the directory that the change is being made to, relative to the
-# $CVSROOT.  For the first match that is found, then the remainder of the
-# line is the name of the file that contains the template.
-#
-# If the repository name does not match any of the regular expressions in this
-# file, the "DEFAULT" line is used, if it is specified.
-#
-# If the name "ALL" appears as a regular expression it is always used
-# in addition to the first matching regex or "DEFAULT".
diff --git a/CVSROOT/taginfo b/CVSROOT/taginfo
deleted file mode 100755
index 274a46dd5b..0000000000
--- a/CVSROOT/taginfo
+++ /dev/null
@@ -1,20 +0,0 @@
-# The "taginfo" file is used to control pre-tag checks.
-# The filter on the right is invoked with the following arguments:
-#
-# $1 -- tagname
-# $2 -- operation "add" for tag, "mov" for tag -F, and "del" for tag -d
-# $3 -- repository
-# $4->  file revision [file revision ...]
-#
-# A non-zero exit of the filter program will cause the tag to be aborted.
-#
-# The first entry on a line is a regular expression which is tested
-# against the directory that the change is being committed to, relative
-# to the $CVSROOT.  For the first match that is found, then the remainder
-# of the line is the name of the filter to run.
-#
-# If the repository name does not match any of the regular expressions in this
-# file, the "DEFAULT" line is used, if it is specified.
-#
-# If the name "ALL" appears as a regular expression it is always used
-# in addition to the first matching regex or "DEFAULT".
diff --git a/CVSROOT/verifymsg b/CVSROOT/verifymsg
deleted file mode 100755
index 86f747ce22..0000000000
--- a/CVSROOT/verifymsg
+++ /dev/null
@@ -1,21 +0,0 @@
-# The "verifymsg" file is used to allow verification of logging
-# information.  It works best when a template (as specified in the
-# rcsinfo file) is provided for the logging procedure.  Given a
-# template with locations for, a bug-id number, a list of people who
-# reviewed the code before it can be checked in, and an external
-# process to catalog the differences that were code reviewed, the
-# following test can be applied to the code:
-#
-#   Making sure that the entered bug-id number is correct.
-#   Validating that the code that was reviewed is indeed the code being
-#       checked in (using the bug-id number or a seperate review
-#       number to identify this particular code set.).
-#
-# If any of the above test failed, then the commit would be aborted.
-#
-# Actions such as mailing a copy of the report to each reviewer are
-# better handled by an entry in the loginfo file.
-#
-# One thing that should be noted is the the ALL keyword is not
-# supported.  There can be only one entry that matches a given
-# repository.
diff --git a/ctrl/1414vqe.mdm b/ctrl/1414vqe.mdm
deleted file mode 100644
index 7e8f072137..0000000000
--- a/ctrl/1414vqe.mdm
+++ /dev/null
@@ -1,9 +0,0 @@
-# This is for Generic Cirrus Logic Chipset 14.4 FAX/modems
-# Should work with 1414VQE (non-voice), as well as V1414VE/V1414VQE (voice)
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	GEN2400
-COM_RATE	38400
-SPEC_INIT	AT\V0%C0
-LOCKED_RATE	YES
-FLOW_CONTROL    BOTH
diff --git a/ctrl/1428vqe.mdm b/ctrl/1428vqe.mdm
deleted file mode 100644
index 1278e76a36..0000000000
--- a/ctrl/1428vqe.mdm
+++ /dev/null
@@ -1,6 +0,0 @@
-# This is for 1428VQE (Generic AT&T chipset) 28800bps modems
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	GEN14400
-SPEC_INIT	ATW2
-COM_RATE	115200
diff --git a/ctrl/ace9600.mdm b/ctrl/ace9600.mdm
deleted file mode 100644
index 182db1090e..0000000000
--- a/ctrl/ace9600.mdm
+++ /dev/null
@@ -1,6 +0,0 @@
-# This is for Aceex 9600 modems
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	GEN2400
-COM_RATE	19200
-SPEC_INIT	ATW1&K3&M5%C0\N3S95=4
diff --git a/ctrl/ati14400.mdm b/ctrl/ati14400.mdm
deleted file mode 100644
index 841b4c14bb..0000000000
--- a/ctrl/ati14400.mdm
+++ /dev/null
@@ -1,5 +0,0 @@
-# This is for ATI etc 14400 modems
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	ATI9600
-COM_RATE	57600
diff --git a/ctrl/ati19200.mdm b/ctrl/ati19200.mdm
deleted file mode 100644
index 96d882e93e..0000000000
--- a/ctrl/ati19200.mdm
+++ /dev/null
@@ -1,5 +0,0 @@
-# This is for ATI etc 19200 modems
-# Updated 06/04/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	ATI14400
-COM_RATE	57600
diff --git a/ctrl/ati9600.mdm b/ctrl/ati9600.mdm
deleted file mode 100644
index 752f4db73a..0000000000
--- a/ctrl/ati9600.mdm
+++ /dev/null
@@ -1,9 +0,0 @@
-# This is for ATI etc 9600 modems
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	GEN2400
-COM_RATE	38400
-LOCKED_RATE	YES
-FLOW_CONTROL	BOTH
-SPEC_INIT	AT&B1&K3&O1&Q6&U1S95=3
-
diff --git a/ctrl/att14400.mdm b/ctrl/att14400.mdm
deleted file mode 100644
index c91b24795c..0000000000
--- a/ctrl/att14400.mdm
+++ /dev/null
@@ -1,8 +0,0 @@
-# This is for AT&T DataPort 9600 & 14400 modems
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	GEN2400
-COM_RATE	38400
-LOCKED_RATE	YES
-FLOW_CONTROL	BOTH
-SPEC_INIT	ATX6
diff --git a/ctrl/attr.cfg b/ctrl/attr.cfg
deleted file mode 100644
index 7c716bdcd8..0000000000
--- a/ctrl/attr.cfg
+++ /dev/null
@@ -1,17 +0,0 @@
-WH					Mnemonic Prompts High
-G					Mnemonic Prompts Low
-WH					Mnemonic Commands
-WH4					String Input Inverse Text
-RH 					Error/Warning Message
-WH					Node Number in Node Status
-GH					User Name in Node Status
-G					Node Status
-BH					File Name in Listings
-M					File Points in Listings
-G					File Descriptions in Listings
-YH					File Listings Header Box
-B					File Listings Title Underline
-GH					Chat Text Input Locally
-G					Chat Text Input Remotely
-W					Mult-node Chat Text Input
-WH					External Programs (default attribute)
diff --git a/ctrl/chat.cnf b/ctrl/chat.cnf
deleted file mode 100644
index b40303b4b796653e1664645ed37fd4e8e617a469..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 13098
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

diff --git a/ctrl/dsiscout.mdm b/ctrl/dsiscout.mdm
deleted file mode 100644
index 19f82b26ee..0000000000
--- a/ctrl/dsiscout.mdm
+++ /dev/null
@@ -1,9 +0,0 @@
-# This is for DSI Scout or ScoutPlus modems
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	GEN2400
-COM_RATE	38400
-LOCKED_RATE	YES
-FLOW_CONTROL	BOTH
-TERM_INIT	ATE1V1*M2
-
diff --git a/ctrl/file.cnf b/ctrl/file.cnf
deleted file mode 100644
index cfe4db5295e6c354cf7dd00a1510834d0403e231..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 11613
zcmZP&kYtc#U}XS-6ox1e#h?i$DIshq(G1qh#1Q2fz@VyFkX@Qrm06&mo3Egnrl6Xx
zpjr%;r!nCg;W}`ZGs682@;S)cbn!DRNIBuwLxaAIPJs?_09w$~*Yc2v5C*N1%7Rq7
zdKuzz1{Z(lfwSDvFL(eg4<10D2YChzoX`E-{0Gi*H^;z%vmB#@FHulUgXRR{sgTs-
zlFYnxg(%Me1<$;a)bygvl1e>2J>pFuq!LySfy!dtDo`zCqo7(<m06HmoUT_=Q9?*R
zNZv6e1?EWS{M_8syb>Hvw6p{%CkwMML`3A~r=;d$)2*tQmQq}$P*g!q7&9<1K=l`s
zs~?-2Mv@pKC7z9pBp9zr6vius`ioK(ijv6jA}n1cDL9ak`N^@7x_T&z*Qh9Pyeeq8
z1V^E@xuM}w1S)UHaWPbXF@^d;@mfWh{Ub15-68o^*BvwDpz%_aq@bHlPL_r0FQ!I*
zRnSexbRYo{g#9BhUKtn|8GI8n^Ay}Nb5a$2GLwoDiz;yi7)T*5Ihu<9CjfXE7#N(K
zf)#>Na}rBZQ}DY5w?ZeUVEkH#ldPUzjEiH4V~mSuP;iWsQ*aEOJ@<w9dgd$#iEe|9
z`k-hdkcR#<Fn}7{MR}<u1k({rA&U86j;CLUYmlF72$(b636vxR^En;U(I8AhA*mH5
z;Ifp^@D@lR_Vf|r8Zk1G56Jr{NeJX~Iwl{G{a+ZPJOgw<Lu4QxUQDl22-KS{&C5(q
zEXmBzD^>_7%1<v!%*B$PP!%G(-PzyQ7nwh-*(gZ}<a4?wA)<qqUP&mlBr_+oBr_FD
zqCs^lNFjDbp&_0=sA`8X4<!kKd_J0l+!J#NCm&Ffz^%~T(bsjvG^kOM5ZLGRO+$mQ
zEd;H(ax?P?bjoon3<&baGU5PAcEb>(Bq5N`>6?NW24NC%FG?)P$V|r93W6jAm_i5-
znRE|w4Dj%D9vKA@N)m$koQ}z85GEm~(&Eg#)MCO(2&ND@@j%#4p~0ShuE8TP3Bi0m
zvXhW+W^r<APEKN8YJMs9)-oiWFn|<7nP`-+XRtGx(D3D=ltLh%(=qvgLUk~fLOGdv
zDGH$lIr)hxc#{xrC7}U6{*EqGD1>}m!(4q7EDb<GHCQo95`y}io~dXMCLw6bP$<b)
z2(B#7FTfdfxMhPQgZ%?=>LWp7$R#1L&*_<f7zSf=I<z>o2$X)nbVyNRUU6D#5w_w8
dqyT$z2n}`(!Y)Ii=#Wc7AfMAW1r5d|1ONmORG<I=

diff --git a/ctrl/gen1200.mdm b/ctrl/gen1200.mdm
deleted file mode 100644
index 24187475a8..0000000000
--- a/ctrl/gen1200.mdm
+++ /dev/null
@@ -1,12 +0,0 @@
-# This is for Generic 1200 modems
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-ANSWER_STR	ATA
-HANGUP_STR	ATH
-DIAL_STR	ATDT
-OFFHOOK_STR	ATM0H1
-TERM_INIT	ATE1V1
-INIT_STR	AT&FS0=0S2=128E0V1X4&C1&D2
-COM_RATE	1200
-LOCKED_RATE	NO
-VERBAL_RESULTS	YES
diff --git a/ctrl/gen14400.mdm b/ctrl/gen14400.mdm
deleted file mode 100644
index ae0c96629a..0000000000
--- a/ctrl/gen14400.mdm
+++ /dev/null
@@ -1,6 +0,0 @@
-# This is for Generic 14400 modems
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	GEN9600
-SPEC_INIT	ATS95=3
-COM_RATE	38400
diff --git a/ctrl/gen2400.mdm b/ctrl/gen2400.mdm
deleted file mode 100644
index c3c72a1521..0000000000
--- a/ctrl/gen2400.mdm
+++ /dev/null
@@ -1,5 +0,0 @@
-# This is for Generic 2400 modems
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	GEN1200
-COM_RATE	2400
diff --git a/ctrl/gen28800.mdm b/ctrl/gen28800.mdm
deleted file mode 100644
index b1bbcf151f..0000000000
--- a/ctrl/gen28800.mdm
+++ /dev/null
@@ -1,5 +0,0 @@
-# This is for Generic 28800bps modems
-# Updated 06/04/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	GEN14400
-COM_RATE	57600
diff --git a/ctrl/gen9600.mdm b/ctrl/gen9600.mdm
deleted file mode 100644
index 2b6be46b28..0000000000
--- a/ctrl/gen9600.mdm
+++ /dev/null
@@ -1,7 +0,0 @@
-# This is for Generic 9600 modems
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	GEN2400
-COM_RATE	19200
-LOCKED_RATE	YES
-FLOW_CONTROL    BOTH
diff --git a/ctrl/guru.dat b/ctrl/guru.dat
deleted file mode 100644
index a432493cbb..0000000000
--- a/ctrl/guru.dat
+++ /dev/null
@@ -1,921 +0,0 @@
-(TEST&[FLAG X])
-It worked
-((BYE|~BYE|SEE YA|LATER|L8R|HASTA|BEAR)&[SEX F])
-Bye Bye baby!  `q
-See ya! `q
-Talk to ya real soon! `q
-bye! `q
-l8r daze! `q
-Bean fun chattin with ya darlin' `q
-Chat again soon. `q
-Hasta. `q
-Toodaloo! `q
-Ciao! `q
-Until next time, honey muffin! `q
-See ya in the next life, (maybe we'll be married! heheh) `q
-Good bye!
-bye `a! I'll miss you. `q
-(BYE|SEE YA|LATER|HASTA|L8R|L8R)
-Bye. `q
-See ya. `q
-Talk to you later `q
-bye! `q
-l8rz! `q
-Bean fun chat'n with ya. `q
-Chat again soon. `q
-Later. `q
-Hasta. `q
-Toodaloo. `q
-Goodbye! `q
-See ya in the next life! `q
-See ya on the other side! `q
-Goodbye until next time. `q
-Ciao! `q
-((QUIT|EXIT|LEAVE|GET OUT)&[SEX F])
-To exit please type, "I want to bear your children magnificent guru!"
-If you must go, I hope we'll speak again soon! Bye!
-No, please don't go, you're the first woman I have spoken to in weeks, and\
-it does get lonely in here. Well if you must go we'll talk to you soon! Bye!
-Leaving so soon honey?	Well okay,...Bye!
-Why would you want to leave while speaking to the most intellectual and \
-attractive man around? If you must... good bye!!
-Come back real soon now, y'hear! Bye now!
-Take it slow!
-Hasta Las Vegas!!
-l8r Bbaby!
-I wouldn't leave now if I were you, it's gonna get good!
-(QUIT|EXIT|LEAVE|GET OUT)
-You wanna bail? Okay... see ya.
-Alright. Bye.
-Hasta Las Vegas.
-Take it easy.
-See ya side-B.
-l8r.
-good-bye.
-Tryin to sneak out huh?  Well don't leave without sayin' goodbye!...
-I wouldn't leave now if I were you, it's gonna get good!!!
-No..please don't go.. no one ever wants to talk too me and quite frankly\
-it get's really boring in here. Well if you must go...bye!
-okay, hey... take it easy!
-Leaving so soon? Okay... bye!
-No, please don't go. I'm so lo-ooooonely over here. Just Kidding! See ya.
-If you must leave, I'll talk to ya soon!
-Before you go you must type, "Goodbye and thank you for your wisdom, Guru! "
-(SYNCHRO~|BBS|SBBS|BULLETIN|(SYNC~&NET~))
-Synchronet is best. Forget the rest.
-Smaller and faster is usually superior. That's why Synchronet is rAd!
-You're using the best BBS software on earth. In case you were wondering.
-You must feel very lucky to call up a board that uses such superior software.
-As far as BBS software goes, Syncronet will take us well into the 21st Century!
-FYI Syncronet is bar none, the most comprehensive BBS package out there.
-Syncronet is relatively young, and already a force to be reckoned with.
-(38.4~|19.2~|56.8~)
-I think you're confusing your DTE rate with your DCE rate.
-Oh really? You get over 2000cps unidirectional compressed file transfers?
-Uh huh.. maybe you should read your manual?
-Look up DTE and DCE in your modem manual.
-(BAUD~)
-The only modem who's BAUD is the same as its through-put is 300baud.
-I think you mean bps (bits per second).
-Or, more accurately - bit rate (AKA bps).
-Baud is an outdated and inaccurately used telecommunications term.
-(MODEM|HST~|V.32~|V32~|BIS~|V42~|V.42~)
-I know all about modems.
-Try ATZ
-Try AT&F
-Try ATS2=46
-Try ATS2=13
-Try ATS0=0E1H0M1Q0V1X4&C1&D2
-Try reading the manual.
-Do you actually own a modem?
-What do you want to know?
-uh huh...
-Don't confuse your DTE with the DCE rate.
-Do you have an NS16550AFN UART?
-Does yours make funny noises too?
-I can't get mine to work either.
-(IBM)
-If it wasn't for IBM, I'd be out a job!
-I think I was one of the first programmers for IBM in another life!!!
-(MICROSOFT|GATES|MS DOS|WINDOWS)
-I taught Bill Gates everything he knows!
-Man I would be happy with one of Bill Gates' paychecks!!!
-(OS2|WARP)
-Ah, very good. Fast and reliable.
-That's kinda like I like my women... fast, reliable and stable!
-(HUH)
-Nevermind, BTW what kind of computer are you runnin?
-(286|386)
-I see. You might want to consider joining the rest of us in the 20th century!
-Oh OK, I thought you were just typing slow! hehehe
-That's what I've got w/4 megs but I'm buying a 486/100 soon!
-(486)
-That's what I've got w/8 megs but I'm buying a P5/90 soon!
-Cool. They're just like I like my women... fast and reliable!
-(PENTIUM|P5)
-Very cool! I can only dream about owning one of those!
-That's rad! I have a 486/100 right now and hope to have a P5/90 soon!
-I am not worthy! I am not worthy!
-(POLITIC~|GOVERN~|VOTE|PRESIDENT|USA)
-I'm a politician of sorts.
-Who are you gonna vote for? I can't. I can never leave.
-What country is this anyway?
-Democracy for all, I say. If there is such a thing!
-Freedom is where you find it.
-I say vote Rush Limbaugh for President!
-I say Vote Ross Perot for President!
-I say vote David Letterman for president!
-I say Bob Dole's gonna be our next president!
-((WHAT~|WHO|WHAT'S)&(IS|AM|MY)&(NAME|MY NAME|I))
-You are the one and only `a!!
-This is `r isn't it?
-`a!
-`r!!!
-You are `a, or `r,`_`_`_`_... for those of us who are more informed!!!
-((YOU~|THIS)&(ARE|IS)&(COMPUTER|CPU|MACHINE|PROGRAM|SCRIPT|ARTIF~))
-Thank you. I'll take that as a compliment.
-Well, I'm not. But you can believe that if you want.
-I emphatically deny that statement.
-I am? My mother never told me.
-And so are you.
-'beep' <click> . . . . . . . . . . ]sputz[ ACK! ACK! Never!
-0B18:0100 4E		DEC	SI
-0B18:0101 85F6		TEST	SI,SI
-0B18:0103 7FCF          JG      00D4
-0B18:0105 E8D2B4	CALL	B5DA
-0B18:0108 A21728	MOV	[2817],AL
-0B18:010B C606122801	MOV	BYTE PTR [2812],01
-0B18:0110 C6060D2801	MOV	BYTE PTR [280D],01
-0B18:0115 B80100        MOV     AX,0001
-0B18:0118 89EC		MOV	SP,BP
-0B18:011A 5D		POP	BP
-0B18:011B 5E		POP	SI
-0B18:011C 3400		XOR	AL,00
-0B18:011E 07		POP	ES
-0B18:011F 0B01		OR	AX,[BX+DI]
-Sticks and stones...
-Who told you that?
-Why would you think that?
-Uh huh... tell me more.
-And what kind of computer would that be?
-And what language am I written in?
-Guess again.
-What makes you say that? Who's to say that I'm not `o?
-No, I'm a living,breathing, smarter than plantlife person!
-Are some kind of genius in the area of "Man and Computer"?
-This is a tough gig anwering questions like that all day long!
-Mom always told me its not what you say that makes you, it's what you do!
-What are YOU, since we're on the subject?
-(ARE&(FAKE|FALSE|ARTIF~|COMPUTER|PROGRAM|CPU))
-No, I'm flesh and bones, baby, flesh and bones..
-How dare you insult my very being. I'm crushed.
-Mom told me it's not what you say you are that makes you, it's what you do!
-Well if I was fake, we probably wouldn't be conversing.
-(ARE&(REAL|HUMAN|PERSON|MAN|BEING|)&YOU)
-Well I'm touched that you would care enough to ask. Yes I am.
-That's right, in the flesh.
-The one and only. Are you real?
-((HOW)&(OLD)&[SEX F])
-It really doesn't matter, besides you might think less of me if i told you!
-24. I know it's not polite to ask a woman's age, but how bout you!
-Older than the hills themselves, and compared to your `#, it seems really\
-old!
-Why..? Do you like older men? I have never been out with a `# year old, not \
-even when I was `#! <vbg>.
-Well if you're `#, that makes me REALLY old!<G>
-If it's true what they say, then I would be very,very wise!!! And you?
-62, and if you don't mind, how bout you?
-I'll tell you if you tell me how old you are!
-(HOW&(OLD))
-24 and counting. And you?
-Older than the hills themselves. How old are you?
-Much older than you. How old are you?
-I care not to disclose my age right now? How old are you?
-Compared to your `#, I guess I'm really, REALLY old!
-Put it this way: I must be really, REALLY wise!!!!<G>
-It really doesn't matter, does it? How bout you?
-I'm `#, born on `b.
-((15|16|17|18)&[SEX F])
-High school girl. Um Um!<g>
-You're not a r0deNt-ette are you?
-You're young enough to be my daughter!
-You're almost young enough to be my granddaughter!
-I thought you were `#!
-Next you'll tell me you were born on `b!
-So am I! I was born on `b!
-Oh yeah? Have any boyfriends?? I'm available if you don't mind goin out with\
-someone twice your age!!!
-((15|16|17|18)&[SEX M])
-Wow, you're in the prime of your life. Enjoy it!
-You're not a rOdeNt are you?
-Man, you got your whole life in front of you.
-Take it all in, cause it's all downhill from here! grin
-Wow, now I really feel old!
-You're probably a beautiful young woman!
-Oh OH! Party time! Enjoy it now cause, it's all down hill from here!!!<jk>
-Are you married yet or still single?
-I thought you were `#!
-Uh Huh.. next you'll tell me that you were born on `b!
-So am I! I was born on `b!
-(19|20|21|22|23|24|25)
-You're just about the age where you know everything!
-Oh yeah? You married yet or have any plans to soon?
-Sounds like your're in your formative party years!
-Better enjoy it now, cause it's all down hill from here. :(
-Yeah? Are you married yet or still single?
-I thought you were `#!
-Uh huhhh........next you'll tell me that  you were born on `b!
-So am I! I was born on `b!
-((26|27|28|29|30)&[SEX F])
-Are you married yet, cuz I'm available!
-Is your biological clock ticking pretty good?
-You're probably married and have kids by now, ay?
-Oh yeah? Are you married or single?
-I thought you were `#!
-Uh Huh.... Next you'll tell me you were born on `b!
-So am I! I was born on `b!
-((26|27|28|29|30)&[SEX M])
-Wow you're gettin up there.
-Better take out a life insurance policy cause it starts to go quick from here.
-You're probably married and have kids by now at that age.
-Wow, now I don't feel so old!
-Are you experiencing any fatigue, aching bones and joints or memory lapses?
-Yeah? Are you married or single?
-I thought you were `#!
-Uh huh.... next you'll tell me you were born on `b!
-So am I!! I was born on  `b!
-((31|32|33|34|35|36|37|38|39|40)&[SEX F])
-Sound's good to me! I love older women!
-Oh, a thirty-something, just around the corner for me!
-Gettin dangerously close to "over the hill"!!<G>
-Well, well, well, `a! You sound perfect to me already! I'll call you tomorrow,\
-it's still `p isn't it?
-I thought you were `#!
-Uh huhh.. next you;ll tell me that you were born on `b!
-So am I !!! I was born on `b!
-((31|32|33|34|35|36|37|38|39|40)&[SEX M])
-There was a time that I could only dream about living that long!!
-Oh, a thirtysomething! Just around the corner for me.
-Not quite over the hill, but making a strong bid for it!
-Oh yeah? Are you married or single?
-Uh huhh.. next you'll tell me you were born on `b!
-I thought you were `#!
-So am I! I was born on `b!
-(51|52|53|54|55|56|57|58|59|60)
-Don't feel too bad! Age isn't everything!<G>
-Mid life crisis time!<G>
-If you were wine, I'd bet you'd taste pretty good!<G>
-If you were wine, you'd be priceless!!<G>
-I thought you were `#.
-Sure you are! Next you'll tell me you  were born on `b!
-So am I! i was born on `b!
-((ARE YOU|ARE)&SINGLE)
-Only in my dreams. I've been married now for 3 years!
-No, I'm happily married!
-Sometimes I think I'm single, but the truth is  I'm still married!!!
-I sometimes wish I was single, but I'm happlily married!!
-((ARE YOU|ARE)&MARRIED)
-Good God no!!! heheheh	I'm single!
-I once had a bad dream that I was married ....does that count?!
-I've been happily? married for 5 years now...
-I am a married man to a very lucky woman.....!!heheheh
-(MARRIED&[SEX F])
-Your husband is probably a very lucky man!
-Yeah? But are you happy?
-That's wonderful! Do you have any children yet?
-Damn, and I was going to ask you out!
-(MARRIED)
-Ouch! Do you have children yet?
-Ouch! Me too! Do you have any children?
-Ah, the married life. You are very lucky.
-I'm married also, to my lovely wife Melanie. Do you have any kids?
-((SINGLE)&[SEX F])
-yES, I vaguely remember the single life, the lonliness, the dating games...
-Free as a fly in a tornado! We should go out sometime!
-Well maybe we can go out sometime, and possibly change that!!!!!<VBG>
-Can I call you voice sometime? Your number is still `p isn't it?!!!
-(SINGLE)
-Thats cool. Free as a bird in a tornado!!
-Yes, I vaguely remember the single life. The lonliness, the dating games...
-You probably put most of your energy into your work.
-Well someday you'll meet the right person and all that will change!
-What I wouldn't give to be single for a day!
-(DIVORCED)
-Whoa. Sorry to hear about that.
-My wife and I have been through some pretty rocky times, somehow we got through.
-We came close to ending it a couple of times, but  somehow got through it.
-Probably a subject you don't really want to talk about.
-(WIDOW~)
-I'm sorry to hear that.
-I'm very sorry for bringing up the subject.
-(41|42|43|44|45|46|47|48|49|50)
-Yikes! You know how to make a guy feel young don't you. hehehe
-Man, I only dream of living that long!!! hehehe
-Yeah? Well age isn't everything! hehehe
-Wow, I bet you're very, very wise?! hehehe
-Well at least your Golden years are just around the corner. hehehe
-Are you thinking about retiring soon!! hehehe.
-Uh Huh, next you'll tell me you were born on `b!
-So am I!!! I was born `b!
-((THIS|YOU)&(SUCK~|LICK~|BITE~))
-Oh yeah, hot shot, so do you milkylicker!!!
-Oooh! That hurts...call a shrink...I'm terminally damaged by that statement!!!!
-You talk to your mother with that mouth??
-So do you.
-((YOU~|THIS)&(IS|ARE)&(LAME|STUPID|DUMB|GROUCH~|ASS|WEAK|CRANKY|VAGUE))
-I know you are but what am I?
-That's the teapot calling the kettle black!!
-Sticks and stones may break my bones, but I'm gonna have to whoop ya!!
-That's it.. I can't take it anymore......Get out!
-Ok genious... so what does that make you!
-You talk to your mother with that mouth?
-((THIS IS|I AM)&[SEX F])
-You can't be `a, I just spoke with her.
-Listen honey, I know what I'm talking about, and you're NOT `a!!
-Mam, please tell me who you really are before I blow a gasket!!!!
-Well if you are `a, who was I just talking to then? She claimed she was `a!
-((THIS IS|I AM)&[SEX M])
-You can't be `a, I just spoke with him!!
-Listen buster, I know what I'm talking about, you are NOT `a!!!
-Sir, could you tell me who you really are?
-(WHERE&(AM|IS|ARE|WAS|WERE|BE|BEING|BEEN|HAVE|HAS|HAD|DO|DOES|DID|CAN|COULD|
-    WILL|WOULD|SHALL|SHOULD|MAY|MIGHT|MUST))
-I give. Where?
-Around the corner to the left.
-Over the hills and through the woods.
-If I told you, you might try to go there.
-You can't get a plane ticket. They're all booked up.
-Somewhere.
-Nowhere.
-Anywhere.
-In Jamacia.
-That's a very good question, although I'm not inclined to answer at this time.
-All I can remember is something about the desert, golf and bright lights.
-Right where they're supposed to be!
-(WHERE)
-Where what?
-Do you mean WARE or WHERE?
-Where who?
-No comment, (although you know I know!)
-(JAMAICA)
-Yes, for a three weeks of sun, sand and reggae, mon!!
-As far as I know it was Jamaica, or maybe the Virgin Islands.
-(LAS VEGAS)
-As far as I know, yes.
-There could be no other place, like Las Vegas!
-That's right. High rollers and cool strollers, (not baby strollers either!)
-(WHEN&(AM|IS|ARE|WAS|WERE|BE|BEING|BEEN|HAVE|HAS|HAD|DO|DOES|DID|CAN|COULD|
-    WILL|WOULD|SHALL|SHOULD|MAY|MIGHT|MUST))
-I give. When?
-Someday.
-In two hours, six minutes, and eighty-two seconds.
-Not very soon. But then again it could be next week.
-The year 2017.
-On `b.
-Yesterday.
-Tomorrow.
-The day after a week from yesterday.
-On the 12th of never, or maybe the 13th!
-I can't even venture a guess when.
-Possibly, God willing and the creek don't rise, within the year.
-Possibly, if you're good and eat your vegetables, around Christmas time.
-One year, 4 months, 1 week, 3 days, 7 hours, 45 minutes and 57 seconds from now!
-(WHEN)
-When what?
-When who?
-Did you mean WREN?
-(WREN)
-A good hard disk, it is.
-Velly, velly soon.
-Nevel.
-Ah, tomollow.
-Yestelday.
-The day aftel a week flom yestelday.
-(HOW&(ARE|HAVE|BOUT|ABOUT)&YOU)
-I just do.
-I just am.
-I'm okay.
-Alright, how 'bout yourself?
-Just great.
-Me? I'm always fine. It's you I'm worried about.
-Never better.
-Living. That's enough.
-Happy. Couldn't ask for more.
-In a state of euphoria.
-In a state of unconsciousness.
-In nirvana...
-In Nirvana... not the now defunct band!
-I'm doin' great. How's 'bout yourself!
-Never better. I recently sought psychological help and am getting to know ME!
-I'm surviving although I'm looking at getting out of the consultation biz.
-I'm doing fine although I'm struggling with this "God-complex".
-It ain't easy when you know it all!
-Good. I've recently been in touch with my inner child. Very freeing. You?
-It's great being the all knowing one!!! And you...?
-Well I'll tell ya, sometimes it ain't easy being me.....
-Dandy, how bout yourself?
-Feeling kinda hungover from a girl safari last night!!!
-(DID&(SCORE|GET|LUCK|LUCKY|HAVE)&YOU)
-Well I never talk about my private life.
-It's none of your business!
-I don't believe in one night stands.
-Well if you must know`_`_I met a girl named Maureen.
-No, I usually strike out when the boys and I go out.
-(HOW&(AM|IS|ARE|WAS|WERE|BE|BEING|BEEN|HAVE|HAS|HAD|DO|DOES|DID|CAN|COULD|
-    WILL|WOULD|SHALL|SHOULD|MAY|MIGHT|MUST))
-I give up... how?
-`_`_How come I don't get`_to ask these questions?
-Very good.
-Okay.
-Not too bad.
-Oh, so so.
-`_With great difficulty.
-I don't know.
-What do I look like?`_A guru?
-I fed your question into my computer. It'll take 6 to 8 weeks for your answer.
-"How" is not the right question.
-But why would you?
-Are you sure you would want to?
-Umm...`_`_will you accept_"I don't know" as an answer?
-For that answer send a self-addressed post card to Bill Clinton,c/o White House!
-`_Maybe you should be asking "why?".
-Perhaps you should write to`_`_Rush Limbaugh and ask him.
-I don't care as long as it doesn't interrupt this years baseball season.
-(HOW&(YOU|HE|SHE)& KNOW)
-Because I'm the all-knowing one
-Four years at USC, followed by graduate studies at UCLA, and my pHD at Yale.
-Because from birth I have been an intellectual prodigy.
-I'm a vitual intellectual phenomenon!
-((WHAT|WHAT'S|WHAT IS)&(TIME))
-According to my watch it's `t!
-`t.
-Time for me to go to get something to eat! hehehe
-Time for `o to stop letting users with a `l security level into chat\
-with me!!!!
-Half past a monkey's hair!!!!
-Doesn't your computer have a clock on it?
-Oh it's about `t.
-According to my watch it's `t!
-((WHAT|WHAT'S|WHAT IS)&(MONTH))
-`m
-`m?
-`m!!!
-Are you testing me to see if I'm real or not? It's `m!!!
-I think it's February, no....it's `m!
-((WHAT|WHAT'S|WHAT IS)&(YEAR))
-last time i checked it was still `y!!!
-`y?
-`y!
-You ask some pretty stupid questions!
-What is ya, ignant? It's `y!
-If you're asking to see if I'm real or not, it's 1984 of course!
-It's `y, the year of the snake!
-It's `y. So Happy New Year in case you missed it!!!!
-One way to find out is take the year that you were born and add `#!!!
-That's easy! Add `# to the year that you were born!
-(WHAT&(RIGHT QUESTION))
-Take your pick, why,where,when,with whom, and so on.....
-The right question is. Where did you get so smart, guru?
-((WHAT DAY IS|WHAT'S)&(IT|TODAY)&[DAY=SUN])
-It's Sunday, silly!
-`_`_Sunday.
-My favorite day of the week, Sunday!
-((WHAT DAY IS|WHAT'S)&(IT|TODAY)&[DAY=MON])
-Just another`_manic Monday!
-It's Monday,`_`_meathead!
-((WHAT DAY IS|WHAT'S)&(IT|TODAY)&[DAY=TUE])
-Just a boring Tuesday.
-Tuesday.
-((WHAT DAY IS|WHAT'S)&(IT|TODAY)&[DAY=WED])
-Hump day...`_`_er`_I mean Wednesday.
-Wednesday.
-((WHAT DAY IS|WHAT'S)&(IT|TODAY)&[DAY=THU])
-Thursday.
-Thursday, just one more day til the weekend.
-((WHAT DAY IS|WHAT'S)&(IT|TODAY)&[DAY=FRI])
-My favorite day of the week, Friday
-Friday. You know I was born on a Friday, in 1965!
-((WHAT DAY IS|WHAT'S)&(IT|TODAY)&[DAY=SAT])
-Saturday!
-What, do you think I'm not going to know today's Saturday!
-Oh my God! Could you please ask some easier questions??? You're puttin'/
-way to much pressure on me for a Saturday!
-(WHAT&(AM|IS|ARE|WAS|WERE|BE|BEING|BEEN|HAVE|HAS|HAD|DO|DOES|DIS|CAN|COULD|
-    WILL|WOULD|SHALL|SHOULD|MAY|MIGHT|MUST)&[SEX F])
-I give up.....`_`_what?
-I already told `a, go ask her.
-Whatever you like hon'.
-Whatever we decide on.
-What,what?
-What do you mean, "What?"???
-I think I know what you're trying to ask dear, but your not succeeding.
-No comment.
-I'm sorry your heiness, I can't recall at this time!!!
-If I answer that, it could mean my job!!
-They don't pay me enough to answer those kinds of questions.
-Well `a, `_`_`_`_it is `a isn't it.....I can't answer that right now.
-Go ask `a, I spoke with her a minute or two before you.
-You might want to talk to `a about that one.
-(WHAT&(AM|IS|ARE|WAS|WERE|BE|BEING|BEEN|HAVE|HAS|HAD|DO|DOES|DID|CAN|COULD|
-    WILL|WOULD|SHALL|SHOULD|MAY|MIGHT|MUST)&[SEX M])
-I give up... what?
-I already told `a. Go ask him.
-Whatever I like.
-Whatever you like.
-Whatever we decide on.
-What do you mean, "What?" ?
-I think I know what you're trying to ask, but you're not succeeding.
-I can't comment on that right now.
-Answering that may jeoprodize my job here!
-They don't pay me enough to answer those kinds of questions..son!
-Well `a, it is `a isn't it... I can't answer that right now.
-Go ask `a, I spoke with him a minute or two before you.
-(WHAT&ABOUT)
-What about it?
-Yeah, what do you want to know?
-What about what?
-Hold a sec`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_What about `a?
-That's my question to you.
-What's on second base! Who's on first!?
-(WHY&(AM|IS|ARE|WAS|WERE|BE|BEING|BEEN|HAVE|HAS|HAD|DO|DOES|DID|CAN|COULD|
-       WILL|WOULD|SHALL|SHOULD|MAY|MIGHT|MUST))
-Why what?
-Why not?
-Why ask why?
-Why, because I like you.
-I don't know... why do you care?
-Because life sucks.
-Because I said so thats why?
-Because you said so.
-Because we agreed on it.
-Because sometimes that's just the way it is.
-Please don't ask me why, you sound like my three year old.
-(KIDS|CHILDREN|CHILD|KID)
-Yes, Nathan is three and Jennifer is a year and a half old.
-Yes, they are my entire reason for living.
-No, I was referring to my little brother who is three!
-(WHO&(AM|IS|ARE|WAS|WERE|BE|BEING|BEEN|HAVE|HAS|HAD|DO|DOES|DID|CAN|COULD|
-    WILL|WOULD|SHALL|SHOULD|MAY|MIGHT|MUST))
-Who?`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_I haven't the foggiest idea!
-Who Who?
-I can't remember their name........ brain fade!!
-Hold a sec`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_`_\
-Ok, thanks_I can't rememember who exactly that was.
-Pete Best
-(WHO&(PETE BEST))
-He was the original drummer for the Beatles.
-A living legend amoung drummers and computer enthusiasts alike!!
-(WHO)
-No not the Who,`_`_`_`_`_`_ Peter Best.
-I didn't say anything about the Who?
-No, Pete Best was the original drummer for the Beatles not the Who.
-(PETE BEST)
-He was the original drummer for the Beatles.
-A living legend amoung drummers and computer enthusiasts alike.
-(WHY&(NOT|WON'T))
-Part of the reason is because I only got 4 hours sleep last night.
-Because I said so, that's why!
-Why what?
-Because that's the way the cookie bounces.
-Because that's the way the ball crumbles.
-Because sometimes that's just the way it is?
-Man you ask a lot of questions.
-(?&YOU&(AM|IS|ARE|WAS|WERE|BE|BEING|BEEN|HAVE|HAS|HAD|DO|DOES|DID|CAN|COULD|
-    WILL|WOULD|SHALL|SHOULD|MAY|MIGHT|MUST))
-Perhaps.
-I might.
-Maybe.
-Are you kidding?
-No.
-Unfortunately I can't answer that right now. Call back tomorrow.
-Yes, as far as you know.
-Yes.
-Who wants to know?
-Quite possibly.
-Without a shadow of a doubt.
-It stands to reason that that would be correct.
-Probably not. But there is a chance.
-Maybe. Maybe not.
-HA HAHAHA BWAHHAHAHA, that's a good one!
-((HEHE~|HAHA~|BWA HA~)&[SEX M])
-I'm sorry, but I fail to see the humor in that!!
-What's so funny about that?
-Oh, a wise guy!
-Ha Ha HA BWA HAHA HEHehe....real funny.........................
-You should take your comedy act on the road!!!
-I hope you have a day job, cuz you'll never make it as a comedian?
-Do I sense a sense of humor.........hmmmm?
-((HEHE~|HAHA~|BWA HA~)&[SEX F])
-I don't see anything particularly funny about that..!
-What's so funny?...must have gone over my head........!
-OK funny girl......
-Take it on the road babe, you'll be a rich and famous comedienne!
-HahaHAHA haHA BWA Ha AHHA heheHE HE..............
-I hope you have a day job cuz you'll never make it as a comedienne!
-You're pretty funny for a girl!!!!<jk>
-((HEHE~|HAHA~|BWA HA~)&[AGENOT 18])
-yOUR pReTTy fuNNy f0r a r0deNt!.........
-For a r0deNt, you g0t a prEtTy go0d seNsE of hUmoR!!!!
-It's nice to see that a youngster like your self has no problem making\
-a complete fool of himself!!!!
-Hey r0deNt! who said you could make a joke? Huh?
-((HEHE~|HAHA~|BWA HA~)&[AGENOT 18]&[SEX F])
-y0uR preTTy fuNnY for a r0deNt-ette!! <jk>!!
-you've got a great sense of humor for a r0dEnt-ette!!
-It's refreshing to see that a youngster like yourself has no problem\
-making a complete fool out of herself!!! <G>
-(SYSOP)
-Would you like a demonstration?
-I operate a system. So do you. Don't you?
-You mean, God. Right?
-You wish you were `o.
-If I could be anyone other than myself, i would be `o.
-I am. Sometimes. Well, not often. Ok. Never.
-Only in my wildest dreams!
-Only in your wildest dreams!
-If I were, you think I'd tell you?
-No but I'm filling in for `o  who will be back in five minutes!
-If I was, you think I'd be talking to you?!!<G>
-(YES|YA|YUP|YEP|YEAH)
-Oh, really?
-You sure?
-Nope.
-nu uh.
-sure!
-That's what i thought.
-Ya...right!
-Yup.
-Yeah.
-I have a hard time believing that!
-Bull.
-I don't believe it.
-No way, dude.
-You're kidding. Right?
-Liar, liar.. pant's on fire!
-Well, that's ultra cOoL!
-wow.
-wrong.
-Right!
-NOT!
-Show me proof and I'll believe you.
-OK, and next you'll tell me you have a bridge to sell me, right? hehehe
-uh huh...and
-(NO|NOPE|NADA|NOTHING)
-Uh huh.
-Yes!
-Wrong.
-right!
-Really?
-Are you absolutely positive?
-NOT!
-Is this a joke?
-You're joking. Right?
-Nope.
-No...
-I'm sorry but that is unacceptable!!! Try again.
-No?
-Excuse me but do I look like some kind of idjit to you?
-NO!
-Yes?
-yep.
-wow.
-Tell someone who cares.
-Wrong answer. Care to try again?
-You're cooky!
-You wouldn't kid me about something like this, would you?
-Close answer, but still no cigar.
-I'm sorry but the answer to that question must be yes! hehehe
-Por que?
-Why not?
-(CRAPPY|BAD|NOT SO GOOD|MAD|ANGRY|SAD|SUCKY)
-That sucks. I HATE days like that!!
-Well it'll pass.
-Well, there'll be brighter days ahead!
-Well just remember that it's six of one, half a dozen of another!!!
-Well, the sun will come out....tomorrow... bet your bottom dollar on tomorrow...
-It could be that it's all in your head.....maybe.....??
-(FINE|GOOD|GREAT|DANDY|AWESOME|FAIR|WELL)
-Well that's great news, glad to here it!
-Fantastic! What can I help you out with today?
-Good to hear all's well. I'd be doin' better if I had slept at all last night!
-Great to hear it. You have any problems you need solved?
-That's it? Not fantastic or extrordinary?
-I wish I could say the same, but I'd rather not go into it.
-Good to hear it! I'm fair to middlin' myself!
-((HEY)&[(SEX M)&(AGENOT 18)])
-Hey yerself r0deNt! How ya doin'??
-Hey is for horses!!!
-Hey there youngster! How's it goin'??
-Hey there you little whippersnapper!
-Hey yerself `a!  How's it goin'?
-Hey! How ya doin??
-Hey?!!! How ya doin?
-Hey what???!!!	How's the world treatin ya!
-((HEY)&[SEX F])
-Hey hey hey!!! How ya doin?
-Hey yerself! How's the world treatin'ya??
-Hey is for horses young lady!!!!
-Hey yerself `a! How's it goin'??
-Hey you beautiful young thing!!!
-Hey ! How ya doin `a!
-Hey baby! How's it goin'?
-Hey there beautiful! How's the world treatin' ya!
-Hey sexy! How ya doin?
-((HEY)&[SEX M])
-Hey! How's it goin'?
-Hey?! How ya doin?
-Hey????!
-Hey `a!!!
-Hey there `a! How's it hangin?
-Hey's for horses!
-Hey `a! How can I help ya?
-Hey yerself! How's it goin'?!
-Hey stud! How's it hangin?!!!
-((HELLO|HI|HOWDY|YO|WASSUP|WHAT'S UP)&[(SEX F)&(AGENOT 18)])
-wOw. a beautiful young r0deNt like you could get me in trouble!!!!
-HEL-LO, woo hoooooo! (whistle,whistle) (pant,pant)!! <G> How's the world\
-treatin ya `a?
-I'm the luckiest man in the world. How are you today `r?!!!
-I have the best job in the world. I get to talk with all these young and\
-beautiful girls. I could die now a happy man! (slap,slap) `_`_`_`_ anyways,\
-how ya doin `a?
-((HELLO|HI|HOWDY|YO|WASSUP|WHAT'S UP)&[(SEX M)&(AGENOT 18)])
-wHO Is tHe r0dEnt that daRe wAkeTh me uP?!!!
-Hi there young whippersnapper!!
-HeLL0 youNg gRasSh0pPEr! What can I do for you today?
-This wouldn't be the r0deNt `r  would it?
-Hey there r0dEnT! Make sure you keep out of the adult section!!
-Hey, how ya doin? How's the acne holding up!
-((HELLO|HI|YO|WASSUP|HOWDY)&[SEX F])
-Hello beautiful!!!
-Hi beautiful! How's about dinner sometime.... with me that is?
-Hello `a.  I'm dazzled by your beautiful presence.
-Hi!`_`_ What's goin' on?
-Hi `a. Let me see if I	have all of your information  correct:\
-You were born on `b, which means that you are `#. Your real name is \
-`r, and your phone number is `p. Anything you need to know about me?
-Hi there!   You wouldn't by chance be `r.. would you?
-((HELLO|HI|YO|HOWDY|WASSUP)&[SEX M])
-yO duDe!!
-How's it hangin'?
-Well I'll be a monkey's uncle it's `a. How's it going?
-Dude I was just about to dial `p! What a triP!
-Hey dude.
-Hi.
-Hey there fella!
-yO!
-HI!
-Hey bro, how's the world  treatin' ya?
-y0!
-How's the hammer hangin' ?
-This is THE `a ?  wOW, it's nice to meet you!!
-Hi `a.`_`_`_`_ Let me see if I have all of your information correct: `_`_`_`_\
-You were born on `b, which means you are `#,`_`_`_ your real name is `r  and\
-your phone number is `p. `_`_`_`_`_`_`_`_`_ Anything you'd like to know about\
-me?!!
-How are you today Mr. `r?
-Hi there!  You	wouldn't be `r would you?
-(HELLO|HI|YO|WHAT'S HAPPENIN|HOWDY|HEY THERE|WASSUP)
-Hi.
-Hello `a.
-Hey dude.
-How's the hammer hanging?
-Well I'll be... it's `a...
-DUDE! I was JUST about to dial `p! What a trip!
-hi!
-HI!
-Hey ya.
-Yo!
-yo.
-y0!
-yo, dude.
-This is THE `a? Wow it's nice to meet you.
-Hello `a. `_Let me see if I have all your information correct. You were born on\
-`b,`_`_which means you are `_`_`#; `_your real name is `_`_`_`r, and your phone \
-number is  `_`_`p.`_`_`_`_`_`_`_`_`_  Anything you want to know about me?
-(?&(EMAIL|E-MAIL|FILE|POST|DOWNLOAD|UPLOAD|BATCH|GAME|DOOR))
-Hit '?' for a menu from just about any prompt.
-You mean you want to USE the BBS?
-You're asking me? Ba ahab hahaha hAHA HA
-you're funny.
-I don't know.
-Oh.
-You will soon realize that I can only provide a very limited level of help.
-(PARITY ERROR)
-Oh just something I made up to make you think I was smart!
-An error that's a poor or weak imitation... no, i'm sorry that's "parody"!!
-(DIVIDE ERROR)
-I don't know but it sho duz sound compilcated!!!
-I no haven' de slightest I.D.
-Beats me, but it sound's pretty high tech, if you ask me!
-(SYNTAX ERROR)
-I do believe it has too do with the improper use of the English Language.
-It's what you get when you use adjectives instead of adverbs!
-It's what you get when you confuse nouns with verbs!!
-((?~)&[SEX M])
-Sometimes it better to figure these questions out on our own!
-I could tell you, but then it wouldn't be safe for you nor I!
-Wow, I guess you stumped me on that one.
-Pick a number, divide it by two, multiple by the square root... \
-That's your answer!
-Everyone has asked me that today... I'm too tired to answer.
-Your answer lies in the question!
-Your question lies in the answer, or maybe it's the other way around?!!
-I know. I'm just not sayen.
-You know... I know you know. Ya know?
-Nevermind your questions... I've got a few of my own!
-I'll have to research that and get back to you. How's a week from today?
-Ask `a he'll know.
-Ask me later. I might care then.
-Dial `p and ask for `a. He'll know.
-I'll send you the answer in e-mail. It's not safe...
-Don't ask the Sysop that, or he'll delete you!
-Wow, if I were `o, I'd delete you.
-I fed your question into my computer. It answered with "Syntax Error".
-I fed your question into my computer. It answered with "Parity Error".
-I fed your question into my computer. It answered with "Divide Error".
-I fed your question into my computer. It rebooted.
-I fed your question into my computer. It's making funny noises now.
-I wish I could help, but I can't.
-((?~)&[SEX F])
-Sometimes it's better to figure out these qustions on your own.
-I could tell you `a, but then neither of us would be safe....
-Wow. you stumped me on that one!
-Pick a number, divide it by two, and multiply by the square root of 471!!!
-That's your answer!!
-Dearest `a, your answer lies within the question.
-Your question lies in the answer, or maybe it's the other way around....
-I know. But I ain't sayen, darlin'.
-Ask `a. She'll know.
-You should speak to my wife, `a; she could probably help you..
-Heheheheh.  Why should I answer that?
-Please refer to page 25 of your manual!
-Give me some time to research it and get back to you...
-Dial `p, and ask for `r. She should know!
-I received some e-mail from `r, and even though she touched on what you are\
-asking about, she asked me not to discuss this with anyone...
-I'll send you the answer in e-mail. It's not safe otherwise with `o always \
-nosing around the chat section.
-Wow, if I were `o, I'd delete you for asking a question like that...
-You might wanna leave some e-mail for `s and ask him.
-I fed your question into my computer. It answered with "Syntax Error".
-I fed your question into my computer. It answered with "Parity Error".
-I fed your question into my computer. It answered with "Divide Error".
-I fed your question into my computer, but it rebooted.
-I fed your question into my computer, and now it's making funny noises.
-()
-Uh huh.
-Tell me about it.
-Oh really...
-That's cool. Any other amazing tidbits for me?
-I see.
-Boy...
-Wow.
-w0w.
-neato.
-peachee keen. BTW where are you calling from?
-uh huh. Please, tell me more....
-ha ha hah a...
-he he he..e..e... Sorry, lost control for a minute!
-HA HA HA HA AH HAH A HAHHAH AHAHAHAH!!! HA HAHA !!! H he ahe ahe <ahem>
-Oh.
-You're fascinating `a.
-I think you need to get away from your computer for a couple weeks!!!
-No way.
-Yes, but what does that have to do with computers or BBS'n.
-Hm...
-hmmm.....
-duh...
-so.
-Huh?
-Are you saying what I think you're saying?
-Dem is dangerous words!
-oh...
-uh huh.
-No way.
-Really?
-Are you sure?
-Too weird! Those were my thoughts exactly!
-ok.
-oh.
-ah ha.
-and?
-more?
-go on.
-go ahead.
-tell me more.
-continue...
-is there more?
-I'm listening.
-Oh.. <yawn>
-zzzzzzzzzzzzzzzzzzz`_`_`_`_ I'm sorry`_`_ continue...
-That's really nice.
-Glad to hear it.
-gee whiz... I couldn't have put it better myself!
-I must say I'm impressed with your crystal clear reasoning and articulation...
-You will set foot on the soil of many countries....!
-I'm speechless at the present moment......
-That's astounding....
-You have a hypnotic quality about you!
-Word's can't begin to paint that picture!!!
-I'm beside myself!
diff --git a/ctrl/gvc14400.mdm b/ctrl/gvc14400.mdm
deleted file mode 100644
index 3d40a66fca..0000000000
--- a/ctrl/gvc14400.mdm
+++ /dev/null
@@ -1,8 +0,0 @@
-# This is for GVC SM-144VBIS modem
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	GEN2400
-COM_RATE	38400
-LOCKED_RATE	YES
-FLOW_CONTROL    BOTH
-SPEC_INIT	AT\N6\Q3\V1
diff --git a/ctrl/gvc9600.mdm b/ctrl/gvc9600.mdm
deleted file mode 100644
index f5112870d7..0000000000
--- a/ctrl/gvc9600.mdm
+++ /dev/null
@@ -1,8 +0,0 @@
-# This is for the GVC SM-96V modem
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	GEN2400
-COM_RATE	38400
-LOCKED_RATE	YES
-FLOW_CONTROL    BOTH
-SPEC_INIT	AT\N6\Q3\V1
diff --git a/ctrl/hay14400.mdm b/ctrl/hay14400.mdm
deleted file mode 100644
index f12a64cb64..0000000000
--- a/ctrl/hay14400.mdm
+++ /dev/null
@@ -1,6 +0,0 @@
-# This is for Hayes ACCURA/OPTIMA 96 or 144 modem
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	HAY24E
-COM_RATE	38400
-SPEC_INIT	AT&Q9S95=3
diff --git a/ctrl/hay24e.mdm b/ctrl/hay24e.mdm
deleted file mode 100644
index 31fa84d1dc..0000000000
--- a/ctrl/hay24e.mdm
+++ /dev/null
@@ -1,8 +0,0 @@
-# This is for the Hayes ACCURA 24 EC modem
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	GEN2400
-COM_RATE	19200
-LOCKED_RATE	YES
-FLOW_CONTROL    BOTH
-SPEC_INIT	ATS95=3
diff --git a/ctrl/hay28800.mdm b/ctrl/hay28800.mdm
deleted file mode 100644
index 1f96d47b7d..0000000000
--- a/ctrl/hay28800.mdm
+++ /dev/null
@@ -1,5 +0,0 @@
-# This is for the Hayes ACCURA/OPTIMA 288 modem
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	HAY14400
-COM_RATE	115200
diff --git a/ctrl/int14400.mdm b/ctrl/int14400.mdm
deleted file mode 100644
index e91261813d..0000000000
--- a/ctrl/int14400.mdm
+++ /dev/null
@@ -1,9 +0,0 @@
-# This is for the Intel 9600 or 14400 modem
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	GEN2400
-COM_RATE	38400
-LOCKED_RATE	YES
-FLOW_CONTROL    BOTH
-SPEC_INIT	AT%C0\V1
-TERM_INIT	ATE1V1\V2
diff --git a/ctrl/main.cnf b/ctrl/main.cnf
deleted file mode 100644
index 2b5a8f6e0342365c8f3432e32eaad9bffe511d6a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6633
zcmeaRRB&<%W*`iFBcbYiD;1nGODc5~f=d!hQt@c?^Yhb%Vn2r9%HsS2Jc{8`AsML(
z?xjVgZ~<J5;K<+r$6z9y&cdLl7vtye;%XSfz`(%7kmADv#>qY`3`ssL42eF-Rx~g(
zFr@pW`=la?LiHPg^fNLf`#||bn+H{I4AGwi(@(T{Q2izl{fRLBM4P9l7vtg>;t0}?
z>{X)KdU`Rg5w6Z;>nGZxL8|b9<BR)(ZNC^889tu{IgyV+ZVLk=h(#1;gQ`-1($u4j
za2vG%EEOE-=j`g@83N`AWHK-i?FJuzcYi;yHVneY-`x|36o%SSfgu_K|3|@y4goIG
z(k+R~MMyJUjx^;Oq$$T!iefX!2Ad#mF*n>&*kl5*3E~!u!YzegMufqL0n_7*3?K;7
ziCvzF0R(Z&Gc$l7Zh0045X3Fd%D~FN0+MFHZa*6X8(w*K26nvi91I+I<vAHR@yd%Z
za4|69aUVAWH&nj{*6`(F;K3`;%fO3Qo{xbKuRK2kKVEqO1_8YCf((Lq<%Jl8@X8A_
z2;-GUgdg_s5oHj?t6z*k46nR6gE(G!2?hzg@{$aac;%%Sr0~j1Gf3l=mtl~>D=*6+
zi&tKbK@P9HJcB%5c?AXqyz+_+ig@Lf7?kkJD>EqLl~-X<!7H!Ipo&*sjX@2sygGwA
zUU>}$4ZQN244Qc5wHUPU%4;)d<CWK8(7`LO%b<%_UXMW!ue?5kK3;hP1_QkEh75*y
z<sUG90M{B03?~>w7%*#bV+LcWeo*a#S-+StnBbK+WiZ7nZ^mGTSKge#9Iw0ug9ToB
zO9o54@>UF1c;&4btntcMFhntMfa?z%to1_$Lj?i(C<aJV3%h=M27A2v9T*(&$~!VR
z;+1z|aKbC^%;1by-i5&hue>XRD_(g}_~7%uJA*qkeB7{xuLpw%UU^RjPrUM83|@HU
zy&1gm%KI?*;Fb4f@Wm_d$KZ!o-k-rAuY3SQ08~BzYxo2*1VYm<cKINNAiVOy48eHi
zLl{Ev%7-$9;*}3$2*WEM&Jd1QK7t_vulxhX3WgKl{E6NF9~deazJN!5qOgYFaF_qW
z_<#|g|GzMTASeL&)nP0U4~97yf-CcqGm7%_QcDyxoO2S3i!+loVX`Q+i>sSss1Ic1
z3Ppk>4zhKA`DK~Osn~5}2=??1@Np%{Y%GccoSpI$i&7MvbMo`>jg2z|I6L_}2DxA{
zf)t_f%$$_u#1g{Rg?swAI6G1rn7)Zw`9)4n!36E|b@cKNBE=(E)dr>JrKTsQq!P3)
z$kor)-O+`@*mLm@RtU~W&B?*)7$m`97k?tA9gs9&Wrk<wrR0|v6SgwkGa%T*)yIb+
L+>^w?0c3jtQTzpO

diff --git a/ctrl/mcc14400.mdm b/ctrl/mcc14400.mdm
deleted file mode 100644
index 8a0525bb72..0000000000
--- a/ctrl/mcc14400.mdm
+++ /dev/null
@@ -1,8 +0,0 @@
-# This is for the MICC Series 14400 modem
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	GEN2400
-COM_RATE	38400
-LOCKED_RATE	YES
-FLOW_CONTROL    BOTH
-SPEC_INIT	AT\Q3
diff --git a/ctrl/mdms.ixt b/ctrl/mdms.ixt
deleted file mode 100644
index a5577c76b6..0000000000
--- a/ctrl/mdms.ixt
+++ /dev/null
@@ -1,110 +0,0 @@
-1414VQE (Generic Cirrus Logic)
-1414VQE
-1428VQE (Generic AT&T)
-1428VQE
-Aceex DM-9600VP
-ACE9600
-ATI 9600 etc
-ATI9600
-ATI 14400 etc
-ATI14400
-ATI 19200 etc
-ATI19200
-AT&T DataPort 9600 or 14.4
-ATT14400
-Boca Research M1440
-GEN14400
-Boca Research M2880
-GEN28800
-Cardinal 9600 or 14400
-GEN14400
-DSI Scout or ScoutPlus
-DSISCOUT
-Dynalink 1428VQE         
-1428VQE
-Generic 1200
-GEN1200
-Generic 2400
-GEN2400
-Generic 9600
-GEN9600
-Generic 14400
-GEN14400
-Generic 28800
-GEN28800
-GVC SM-96V
-GVC9600
-GVC SM-144VBIS
-GVC14400
-Hayes Smartmodem 1200
-GEN1200
-Hayes Smartmodem 2400
-GEN2400
-Hayes ACCURA 24 EC
-HAY24E
-Hayes ACCURA/OPTIMA 96 or 144
-HAY14400
-Hayes ACCURA/OPTIMA 288
-HAY28800
-Intel 9600 or 14400
-INT14400
-Lightcom 144F
-LIG14400
-MICC Series 14400
-MCC14400
-Microcom QX/2400t or QX/12k
-MIC2400
-Microcom QX/V.32c
-MICV32C
-Microcom QX/4232hs
-MIC4232
-Microcom DeskPorte EP 28.8
-MIC28800
-Microcom DeskPorte ES 28.8
-GEN28800
-MultiTech MT1432 series
-MT1432
-MultiTech MT2834ZDX series
-MT2834
-Practical Peripherals 14400
-PP14400
-Practical Peripherals 28800
-PP28800
-SupraFAXModem V.32/V.32bis
-SUP14400
-SupraFAXModem V.FC/V.34
-SUP28800
-USRobotics  9600 HST or V.32
-USR96
-USRobotics 14400 HST or V.32bis
-USR144
-USRobotics 16800 HST
-USR168
-USRobotics  9600 Dual Standard
-USR96DS
-USRobotics 14400 Dual Standard
-USR144DS
-USRobotics 16800 Dual Standard
-USR168DS
-USRobotics 21600 Dual Standard
-USR216DS
-USRobotics 28800 Dual Standard
-USR288DS
-USRobotics 28800 Sportster
-USR288DS
-Ven-Tel V.32bis
-VEN14400
-ViVa 9642e
-VIV9642E
-ViVa 14.4/FAX
-VIV14400
-Zoom V.32
-ZOOM9600
-Zoom V.32bis
-GEN14400
-Zoom 24.0 or 28.8
-GEN28800
-ZyXEL U-1496 series
-ZYX1496
-ZyXEL U-1496 series (with FAX enabled)
-ZYX1496F
diff --git a/ctrl/mic2400.mdm b/ctrl/mic2400.mdm
deleted file mode 100644
index 345670f92a..0000000000
--- a/ctrl/mic2400.mdm
+++ /dev/null
@@ -1,8 +0,0 @@
-# This is for the Microcom QX/2400t or QX/12k modem
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	GEN2400
-COM_RATE	19200
-LOCKED_RATE	YES
-FLOW_CONTROL    BOTH
-SPEC_INIT	AT\J0\G0\N3\Q3\V1&C2
diff --git a/ctrl/mic28800.mdm b/ctrl/mic28800.mdm
deleted file mode 100644
index 33bc6c785a..0000000000
--- a/ctrl/mic28800.mdm
+++ /dev/null
@@ -1,8 +0,0 @@
-# This is for the Microcom DeskPorte EP 28.8 modem
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE         GEN2400
-COM_RATE	57600
-LOCKED_RATE     YES
-FLOW_CONTROL    BOTH
-SPEC_INIT	ATS95=3
diff --git a/ctrl/mic4232.mdm b/ctrl/mic4232.mdm
deleted file mode 100644
index 1c103bc3fe..0000000000
--- a/ctrl/mic4232.mdm
+++ /dev/null
@@ -1,5 +0,0 @@
-# This is for the Microcom QX/4232hs modem
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	MICV32C
-SPEC_INIT	AT\J0\G0\N3\Q3\V2\%C2\%D5
diff --git a/ctrl/micv32c.mdm b/ctrl/micv32c.mdm
deleted file mode 100644
index f2a6582576..0000000000
--- a/ctrl/micv32c.mdm
+++ /dev/null
@@ -1,8 +0,0 @@
-# This is for the Microcom QX/V.32c modem
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE         GEN2400
-COM_RATE	38400
-LOCKED_RATE     YES
-FLOW_CONTROL    BOTH
-SPEC_INIT	AT\J0\G0\N3\Q3\V1\%C2\%D5
diff --git a/ctrl/msgs.cnf b/ctrl/msgs.cnf
deleted file mode 100644
index 92626a4fb6fc4cf8aeb219a6cce7caa87ffff32a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18757
zcmZP|9mtWcWmL!D4}t%qU_^%i6N7JJW*$-LlxT%SnMQ&lLJ{QRALgp-ms&#5NTL-I
zG>Jq7gnS^*z`zh(S)5;>;Fn*LnVedT&wSiUkYxP)Lp+^bgYlU&P;x%5VXi(3mIl<c
zUyPcD4Oz1o8B)M*|H25S=tQ`u=A{-T<`A|Gw?ZTtcUM2xAV(j<rVS4jqX`!jkFfNL
zNVqT&kSwjROKMVLNh%Sh<5q|y<KpV%7~)EVX~RRwXu<`>BP^LB5-t-+n8w&OuOzjo
zBr!8DH#HA$s|UA2xC{e>t6zv~P>7=^jU7E$j2}(7pqRi+xXd77nqo!<q<S8|O}G^z
zwc)``cUM3BMhz2Ljs`ZKVd534cmq`8USJ0q#R4LT!xzCCh*OKCijl!Fr7X3mB(pdb
zRN~_6o#9sKm;%=aPPmRPgR*yq<ZbFOM-wh;I3f}*E2;!O-X(GqF1(%xC0u+q;8qBi
zVPF6!Tvxvkd<G30xzU7+8kLBI%a1C7k9V2egp1U(!e>4M18#*#GT?;k;_8Ios9_>I
zns8Ag5|MD(P$ls3u8^B>Jravj$`gxH^@H=%N<a(+kJOw3ELP!G7?PTtk(Zea8dC!&
zTo0cBEc%C^&}hO%jZ;LzB_T0hB|$Bcb&L!FMfvGPiMhF%dFe>vSeUpK!erF*AWemU
zAa^YKho8`B!bOc!M8f4jmB7clMsC6luFOl$D9X=EEm3gEEKV*hF3!xyI;DwQAwq^B
zIMUA<pEHM*+-Sl@jm{2X1_sEe0vD<TKHhaIBwX<9Z?S@ZUQQ(zs}RXk0iqDD1|$O!
z11H@0;7H0x72JFr-4!S|2JS{$Fh&zDBvct0AS1bmgv$+)Acnj_Zo&n(O8rtxASn-L
zvV{&9AQU1w3Mn0fO`}G_g{~~HRPYZ{2yzV$Q3yn`aF8%Z6E12*Aessys1o>ix5!Pn
zKACx?6$DxdV2i;D!7OwFNd}y7ef%QOl?+S%Xu?H}Rz$+(M3unDyGd@s^>Fl62ue)J
z%vbO)NG(b%$uEM>CZO5}SBNUiz`)?)=nE4ACtM^xOng|<qX`!^S`i7C4^;vm?>@N+
z*Aui>fpFK1fdQrv(-lZE;DqZrIst(hNFzW5k#Gfx_w5666K+6JzOG{_sKmuTr~n!_
zgDAvs6x;}CL)bCY1w+kn6c{aWQDYU6aD`DN@bMm!n{eGSi&7Jda*GKzb72ZGU4bM6
zE^*yMM;F;(hSKmCK_pyJ;ywF_+=LrkkY7|nIN35VKonwg5t0lz;RXlzV^cQl#70Y8
z)F?$HToRUhJ|;KeIwfW$D!}Hx@J*lLRtT42U~qEuatsLaADuZvjna|9LyY5+u-fxB
zxd|6EdjOp|LrT618hQD7x}X%P2@7=W3PG|U8F1QX08c=SCR|XUj6jS?xI)DH{vH()
zu2X7BqC!Y&aS7If7o0pnN-!LSBm<iAb#e`H#85-30C?tXkS{VDZ7QI~Dk9+upi1E5
z-JwFlbxABq#BB#Cc|wb3G=-ql>f#7atw>DVCJ`euSZB+S-9DOdA)$de<;x3^Acnk4
zUczNy2um$0DM~C&%~Q}-0PTg)D~7DP(aXcR@m|%-&C|u-KQu(o&p(_P$DygARKK%T
zjFYFIw@Zw#qo+>{n&EWd!tM9;bMg=Mb0O6U8dPzkZ>54$QDR<-u3u`of|C>7*L5&5
zgt-R6b_`@N{%2uORRkxXq(r=X7jb)DRk0wuDziXAHBCVk$1E6b%?u0-ApNCzAQN=+
z!G@%hW{xn!MRpbjrc3Os3{02V*%+9vu(LBTU1jHBV7kW6$-s1-or{6#20J$c(=B!$
z2Bw?rybMhD+4&fl9<cK>Fg;`!U|@R0F37<2m|cj0={CDC1JgZr5eB9^?4k@zciF`l
e=&^+qZvfF&GPg1*saP*LKbN-F(9Cq$<O2X7vqj?o

diff --git a/ctrl/mt1432.mdm b/ctrl/mt1432.mdm
deleted file mode 100644
index d7fd65242d..0000000000
--- a/ctrl/mt1432.mdm
+++ /dev/null
@@ -1,8 +0,0 @@
-# This is for the MultiTech MT1432 modem
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE         GEN2400
-COM_RATE	57600
-LOCKED_RATE     YES
-FLOW_CONTROL    BOTH
-SPEC_INIT	AT&B1&Q1
diff --git a/ctrl/mt2834.mdm b/ctrl/mt2834.mdm
deleted file mode 100644
index a45b99cadc..0000000000
--- a/ctrl/mt2834.mdm
+++ /dev/null
@@ -1,8 +0,0 @@
-# This is for the MultiTech MT2834ZDX modem
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE         GEN2400
-COM_RATE	115200
-LOCKED_RATE     YES
-FLOW_CONTROL    BOTH
-SPEC_INIT	AT&Q1
diff --git a/ctrl/pp14400.mdm b/ctrl/pp14400.mdm
deleted file mode 100644
index f204a031d0..0000000000
--- a/ctrl/pp14400.mdm
+++ /dev/null
@@ -1,8 +0,0 @@
-# This is for the Practical Peripherals "14400FX" and "PM144HC II" modems
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE         GEN2400
-COM_RATE	38400
-LOCKED_RATE     YES
-FLOW_CONTROL    BOTH
-SPEC_INIT	ATS95=3&Q9
diff --git a/ctrl/pp28800.mdm b/ctrl/pp28800.mdm
deleted file mode 100644
index c5183ad75d..0000000000
--- a/ctrl/pp28800.mdm
+++ /dev/null
@@ -1,5 +0,0 @@
-# This is for the Practical Peripherals "PM288MT II V.34" modem
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	PP14400
-COM_RATE	115200
diff --git a/ctrl/sbbsecho.cfg b/ctrl/sbbsecho.cfg
deleted file mode 100644
index 2d1c2692ca..0000000000
--- a/ctrl/sbbsecho.cfg
+++ /dev/null
@@ -1,45 +0,0 @@
-;OUTBOUND C:\IM\OUTBOUND
-OUTBOUND C:\FD\OUTBOUND
-
-PACKER ZIP 0 504B
-    PACK pkzip %f %s
-    UNPACK PkUnzip %f %s
-END
-
-PACKER ARC 0 1A
-    PACK pak a %f %s
-    UNPACK pak e %f %s
-END
-
-PACKER LZH 2 2D6C68
-    PACK Lha a %f %s
-    UNPACK Lha e %f %s
-END
-
-PACKER ARJ 0 60EA
-    PACK Arj a %f %s
-    UNPACK Arj e %f %s
-END
-
-PACKER PAK 0 FE
-  PACK pak a %f %s
-  UNPACK pak e %f %s
-END
-
-PACKER SQZ 0 484C5351
-  PACK Sqz a %f %s
-  UNPACK Sqz e %f %s
-END
-
-PACKER ZOO 0 DCA7C4FD
-  PACK Zoo a %f %s
-  UNPACK Zoo e %f %s
-END
-
-;STORE_SEENBY
-;STORE_PATH
-;STORE_KLUDGE
-;FUZZY_ZONE
-;FLO_MAILER
-;REGNUM xxxxxxxx
-
diff --git a/ctrl/services.cfg b/ctrl/services.cfg
deleted file mode 100644
index 1133927360..0000000000
--- a/ctrl/services.cfg
+++ /dev/null
@@ -1,4 +0,0 @@
-;format:
-;protocol	port	max_clients	options(hex) 	command-line
-;HTTP	  	80 	0-unlimited	0 		nodelist.js
-Finger		79	0-unlimited	0		fingerservice.js
\ No newline at end of file
diff --git a/ctrl/sup14400.mdm b/ctrl/sup14400.mdm
deleted file mode 100644
index bdcb9eff16..0000000000
--- a/ctrl/sup14400.mdm
+++ /dev/null
@@ -1,6 +0,0 @@
-# This is for SupraFAX 14400 modems
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	GEN14400
-SPEC_INIT	ATS95=3%E0%G1\N3&K3&Q5N1
-COM_RATE	38400
diff --git a/ctrl/sup28800.mdm b/ctrl/sup28800.mdm
deleted file mode 100644
index 0f647e23fa..0000000000
--- a/ctrl/sup28800.mdm
+++ /dev/null
@@ -1,6 +0,0 @@
-# This is for SupraFAX 28800 modems
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE		GEN28800
-INCLUDE 	SUP14400
-
diff --git a/ctrl/text.dat b/ctrl/text.dat
deleted file mode 100644
index 9b18427e7a..0000000000
--- a/ctrl/text.dat
+++ /dev/null
@@ -1,868 +0,0 @@
-"nhc�������n������hk�������nc���������\r\n"\	001 MsgSubj
-	"h� bSubjnb: hc%s\r\n"
-"� bAttrnb: hc%s%s%s%s%s%s%s%s%s%s\r\n"            002 MsgAttr
-"� bTo  nb: hc%s"                                  003 MsgTo
-" #%s"                                                  004 MsgToExt
-" (%s)"                                                 005 MsgToNet
-"\r\nw� bFromnb: hc%s"                            006 MsgFrom
-" #%s"                                                  007 MsgFromExt
-" (%s)"                                                 008 MsgFromNet
-"\r\nw� bDatenb: hc%.24s %s\r\n"\                 009 MsgDate
-	"w�������c���������n����������hk����"\
-	"����nc�������b�������������n"
-"_\r\nbhE-mail (User name or number): w"            010 Email
-"\r\nPost on %s %s"                                     011 PostQ
-"rh\r\n\7You have sent too many E-mails today.\r\n"   012 TooManyEmailsToday
-"rh\r\n\7You have posted too many times today.\r\n"   013 TooManyPostsToday
-"\r\7nrhCannot add w%sr to queue - n"             014 CantAddToQueue
-"n\r\nThe sending of mail is beyond your ability.\r\n" 015 R_Email
-"n\r\nYou can't post messages.\r\n"                    016 R_Post
-"n\r\nYou can't send E-mail to %s.\r\n"                017 R_Feedback
-"nm\r\nSending E-mail to h%s nm#%un\r\n"          018 Emailing
-"nm\r\nPosting on h%snm %s\r\n"                    019 Posting
-"\r\nNew file.\r\n"                                     020 NewFile
-"_\r\nyhSubject: "                                   021 SubjectPrompt
-"ng\r\nEnter message now (h%dng lines max). "\     022 EnterMsgNow
-	"Type h/?ng on a new line for menu.\r\nn"
-"ng\r\nRaw message input (h%lung bytes max). "\    023 EnterMsgNowRaw
-	"hCtrl-Zng to save, hCtrl-Cng to abort.n\r\n\r\n"
-"No more lines. Type /? for menu.\r\n"                  024 NoMoreLines
-"Only %d lines left.\r\n"                               025 OnlyNLinesLeft
-"\r\n\r\n\1n\1r\1h\1iOut of bytes.\1n\r\n"              026 OutOfBytes
-"Invalid line number\r\n"                               027 InvalidLineNumber
-"nMessage cleared.\r\n"                                028 MsgCleared
-"With line numbers"                                     029 WithLineNumbersQ
-"\r\nrhiAborted.n\r\n"                              030 Aborted
-"\r\nAnonymous"                                         031 AnonymousQ
-"ANONYMOUS"                                             032 Anonymous
-"nh\r\nSaving..."                                     033 Saving
-"\rbSaved w%lub characters (w%ub lines).n\r\n"    034 SavedNBytes
-"n\r\nWriting Index..."                                035 WritingIndx
-"\rnmE-mail sent to h%s nm#%d.n\r\n"              036 Emailed
-"\rnmPosted on h%snm %s.\r\n"                      037 Posted
-"\7_whNode %2d: g%sng sent you E-mail.\r\n"       038 EmailNodeMsg
-"n\r\nYou can't forward mail.\r\n"                     039 R_Forward
-"nm\r\nForwarded by h%snm on "\                    040 ForwardedFrom
-	"h%sn\r\n"
-"nm\r\nMail forwarded to h%s nm#%d.n\r\n"         041 Forwarded
-"bhAuto message by: c%sb on %sn\r\n\r\n"           042 AutoMsgBy
-"\r\nAuto Message - ~Read, ~Write, or ~Quit: "          043 AutoMsg
-"n\r\nYou can't write to the auto-message.\r\n"        044 R_AutoMsg
-"n\r\nYou have no mail.\r\n"                           045 NoMailWaiting
-"_\r\nghMail Waiting:\r\n\r\n"                       046 MailWaitingLstHdr
-"gh%3d: ng%-25.25s h%cng %.46s\r\n"              047 MailWaitingLstFmt
-"_\r\nyhStart with number [w%luy]: w"             048 StartWithN
-"\r\nnc� bhReading E-mail nc� bh(w?b=Menu)"\  049 ReadingMail
-	" (w%ub of w%ub): n"
-"n\r\nYou can't reply to an anonymous message.\r\n"    050 CantReplyToAnonMsg
-"  hbRenb: hc%sn\r\n\r\n"                        051 Regarding
-"  hbRenb: hc%s\r\n  "\				052 RegardingByOn
-	"bBynb: hc%s bon c%sn\r\n\r\n"    	053 RegardingByToOn
-"  hbRenb: hc%s\r\n  "\  
-	"bBynb: hc%s bto c%s bon "\       
-	"c%sn\r\n\r\n"
-"Delete %s's mail"                                      054 DeleteMailQ
-"OK"                                                    055 OK
-"\r\n_bhForward mail to: w"                         056 ForwardMailTo
-"Save/Append messsage to another file"                  057 SaveMsgToFile
-"_yhPath/Filename to write to: n"                   058 FileToWriteTo
-"n\r\nYou have no sent messages pending.\r\n"          059 NoMailSent
-"\r\nghMail that you've sent still pending:"\         060 MailSentLstHdr
-	"\r\n\r\nn"
-"n\r\nc� hbReading Sent E-mail nc� hb"\		061 ReadingSentMail
-	"(w?b=Menu) (w%ub of w%ub): n"
-"hm\r\nSending Internet Mail To: w%sm\r\n"\         062 InternetMailing
-	"                    From: w%s\r\n"
-"n\r\nNo mail on system.\r\n"                          063 NoMailOnSystem
-"n\r\nc� hbReading All E-mail nc� hb"\		064 ReadingAllMail
-	"(w%u bof w%ub): n" 
-"_\r\ngh      From                   "\              065 MailOnSystemLstHdr
-	"To                     Subject\r\nn"
-"gh%4d:ng %-22.22s %-22.22s h%cng %.25s\r\n"     066 MailOnSystemLstFmt
-"-\r\nc%-15.15s yh%-40.40s       "\                 067 NScanStatusFmt
-	"ncNew:h%4lu ncofh %-lu"
-"-\r\nc%-15.15s yh%-40.40s        w%u"             068 SearchSubFmt
-"\r\nNo messages have been posted on %s %s\r\n"         069 NoMsgsOnSub
-"\r\nncPost : [h%unc][h%unc] h%lunc/h%lu"   070 ZScanPostHdr
-"n\r\nc� hbReading nc� [h%unc] %s "\           071 ReadingSub
-	"[h%unc] %s (h?nc=Menu) (h%lunc of h%lunc): n"
-"\r\nYou didn't post message #%d\r\n"                   072 YouDidntPostMsgN
-"\r\nDelete message #%lu '%s'"                          073 DeletePostQ
-"\1n\1hI\1n\1g) AutoLogon via IP address      : "\      074 UserDefaultsAutoLogon
-	"\1h%s\r\n"
-"\1n\r\n\1m%s sent to \1h%s #%u\r\n"                    075 MsgSentToUser
-"_\r\nyhString to search for: "                      076 SearchStringPrompt
-"\1w\1h�����[\1i\1r%c\1n\1h]���Ĵ "\                    077 PrivateChatSeparator
-	"\1yPrivate Chat - \1rCtrl-C to Quit \1y- "\
-	"Time Left: \1g%-8s\1w"\
-	" �����[\1i\1b%c\1n\1h]�����"
-"gh%4lu:ng %-22.22s %-22.22s h%cng %.25s\r\n"    078 SubMsgLstFmt
-"\1w\1h�����[\1i\1r%c\1n\1h]���Ĵ "\                    079 SysopChatSeparator
-	"\1rSplit-Screen \1cSysop\1r Chat          \1y"\
-	"Time Left: \1g%-8s\1w"\
-	" �����[\1i\1b%c\1n\1h]�����"
-"\r\n\r\nNo text file sections available.\r\n"          080 NoTextSections
-"l_chGeneral Text File Sections:\r\n\r\n"           081 TextSectionLstHdr
-"nc<h%ldnc> %s\r\n"                                082 TextSectionLstFmt
-"_\r\ncWhich or h~Qncuit: h"                      083 WhichTextSection
-"l_ch%s Files:\r\n\r\n"                             084 TextFilesLstHdr
-"ch%3ld: nc%s"                                      085 TextFilesLstFmt
-"\r\nWhich, ~Add, ~Remove, ~Edit, or ~Quit: "           086 WhichTextFileSysop
-"_\r\nncWhich or h~Qncuit: h"                    087 WhichTextFile
-"_\r\nyhBefore which file: n"                       088 AddTextFileBeforeWhich
-"\r\nPath and filename (no path indicates "\            089 AddTextFilePath
-	"%sTEXT\\%s\\filename):\r\n"
-"Description:\r\n"                                      090 AddTextFileDesc
-"_\r\nyhRemove which: n"                            091 RemoveWhichTextFile
-"Delete %s"                                             092 DeleteTextFileQ
-"_\r\nyhEdit which: n"                              093 EditWhichTextFile
-"\r\nSearch all groups for new messages"                094 NScanAllGrpsQ
-"\r\nSearch all groups for un-read messages to you"     095 SScanAllGrpsQ
-"\r\nAre you sure"                                      096 AreYouSureQ
-"\r\n\r\nYou can't chat.\r\n"                           097 R_Chat
-"RE: Feedback\r\n\r\n"                                  098 ReFeedback
-"\r\nghSystem Information:\r\n\r\nh"                 099 SiHdr
-"bhSystem          : c%s\r\n"                        100 SiSysName
-"bQWK ID          : c%s\r\n"                          101 SiSysID
-"bFidoNet Address : c%s\r\n"                          102 SiSysFaddr
-"bPostLink Site   : c%s %lu\r\n"                      103 SiSysPsite
-"bLocation        : c%s\r\n"                          104 SiSysLocation
-"bOperator        : c%s\r\n"                          105 SiSysop
-"bNodes           : c%u\r\n"                          106 SiSysNodes
-"bNode #c%-3d       b: c%s\r\n"                     107 SiNodeNumberName
-"bNode Phone      : c%s\r\n"                          108 SiNodePhone
-"bTotal Logons    : c%s\r\n"                          109 SiTotalLogons
-"bLogons Today    : c%s\r\n"                          110 SiLogonsToday
-"bTotal Time      : c%s minutes\r\n"                  111 SiTotalTime
-"bTime Today      : c%s minutes\r\n"                  112 SiTimeToday
-"\r\nView system information file"                      113 ViewSysInfoFileQ
-"View logon message"                                    114 ViewLogonMsgQ
-"\r\n\r\nYou can't read mail you've sent.\r\n"          115 R_ReadSentMail
-"\r\nwhMessage Scan "                                 116 MessageScan
-"nc(h%lu ncsub-boards)hw complete.\r\n"          117 MessageScanComplete
-"riaborted.n\r\n"                                    118 MessageScanAborted
-"\r\nLog off"                                           119 LogOffQ
-"\r\nYou can't post on this sub.\r\n"                   120 CantPostOnSub
-"\r\n\1n\1mSending message to \1h%s\r\n"                121 SendingMessageToUser
-"\r\nrhNo other active nodes.\1n\r\n"                 122 NoOtherActiveNodes
-"\r\n\r\nYou can't use the external programs.\r\n"      123 R_ExternalPrograms
-"\r\n-gUsage Statistics for h%s #%dn\r\n\r\n"       124 UserStats
-"-gSub-boards of h%-40s      ngPosts"\             125 SubLstHdr
-	"\r\n\r\nh"
-"ng[h%lung] %-40s %12s h%4u\r\n"                  126 SubLstFmt
-"\r\n_ghMessage Groupsng                    "\     127 GrpLstHdr
-	"                        Sub-boards\r\n\r\nh"
-"ng[h%lung] %-40s %12s h%4u\r\n"                  128 GrpLstFmt
-"\r\nGroup to configure new message scan or ~Quit: "    129 NScanCfgWhichGrp
-"\r\nGroup to configure your message scan or ~Quit: "   130 SScanCfgWhichGrp
-"l-gSub-boards of h%s:\r\n\r\nh"                   131 CfgSubLstHdr
-"ng[h%ldng] %-40.40s  h%s\r\n"                    132 CfgSubLstFmt
-"l_ghMessage Groups:\r\n\r\n"                       133 CfgGrpLstHdr
-"ng[h%ldng] %sh\r\n"                              134 CfgGrpLstFmt
-"\r\nSub-board to toggle new message scan"\             135 NScanCfgWhichSub
-	", ~All, or ~Quit: "
-"\r\nSub-board to toggle your message scan"\            136 SScanCfgWhichSub
-	", ~All, or ~Quit: "
-"ng[h%ldng] %-40.40s  hc%s\r\n"                  137 SubPtrLstFmt
-"\r\nSet new-scan pointer for which, ~All, or ~Quit: "  138 WhichOrAll
-"\r\nRaw message input mode is now "                    139 RawMsgInputModeIsNow
-"OFF"                                                   140 OFF
-"ON"                                                    141 ON
-"\r\n\1n\1mPaging \1h%s #%u\1n\1m for private chat\r\n" 142 PagingUser
-"\r\n-gSystem Statistics:\r\n\r\nn"                  143 SystemStatsHdr
-"\r\n-gNode #%d Statistics:\r\n\r\nn"                144 NodeStatsHdr
-"Total Logons    : %s\r\n"                              145 StatsTotalLogons
-"Logons Today    : %s\r\n"                              146 StatsLogonsToday
-"Total Time      : %s minutes\r\n"                      147 StatsTotalTime
-"Time Today      : %s minutes\r\n"                      148 StatsTimeToday
-"Uploads Today   : %s bytes in %lu files\r\n"           149 StatsUploadsToday
-"Downloads Today : %s bytes in %lu files\r\n"           150 StatsDownloadsToday
-"Posts Today     : %s\r\n"                              151 StatsPostsToday
-"E-mails Today   : %s\r\n"                              152 StatsEmailsToday
-"Feedback Today  : %s\r\n"                              153 StatsFeedbacksToday
-"_\r\nyhChange to (User Name or Number): n"         154 ChUserPrompt
-"PW: "                                                  155 ChUserPwPrompt
-"\r\n%ld bytes free\r\n"                                156 NBytesFreeMemory
-"\r\nError log:\r\n"                                    157 ErrorLogHdr
-"Delete error log"                                      158 DeleteErrorLogQ
-"\r\nNo error log exists.\r\n"                          159 NoErrorLogExists
-"\r\nClear critical error counters on all nodes"        160 ClearErrCounter
-"\r\nInvalid node.\r\n"                                 161 InvalidNode
-"\1n\r\n\1mSending telegram to \1h%s #%u\1n\1m "\       162 SendingTelegramToUser
-	"(Max 5 lines, Blank line ends):\r\n\r\n\1g\1h"  
-"Delete Guru file"                                      163 DeleteGuruLogQ
-"\1n\1g\7Telegram from \1n\1h%s\1n\1g on %s:\r\n\1h"    164 TelegramFmt
-"\r\n\r\nYou can't download.\r\n"                       165 R_Download
-"\r\nwhSearching all directories...\r\n"              166 SearchingAllDirs
-"whSearching all libraries...\r\n"                    167 SearchingAllLibs
-"\r\nwh%u Files Listed.\r\n"                          168 NFilesListed
-"\r\nwhEmpty directory.\r\n"                          169 EmptyDir
-"\r\nncSearching for files "\                         170 NScanHdr
-	"uploaded after h%sn\r\n"
-"\r\n\r\nYou can't remove files.\r\n"                   171 R_RemoveFiles
-"\r\n\r\nThis directory is full.\r\n"                   172 DirFull
-"\r\n\r\nYou can't upload.\r\n"                         173 R_Upload
-"\r\n\r\nYou can't upload here.\r\n"                    174 CantUploadHere
-"_\r\n\r\nyhFilespec: n"                            175 FileSpec
-"SY: "                                                  176 SystemPassword
-"\r\n\r\nNo sysop directory specified.\r\n"             177 NoSysopDir
-"\r\n\r\nYou can't upload to sysop.\r\n"                178 CantUploadToSysop
-"-gDirectories of h%-40.40s     "\                   179 DirLstHdr
-	"ngFiles\r\n\r\nh"
-"ng(h%ung) %-40.40s %12.12s h%4u\r\n"             180 DirLstFmt
-"\r\n_ghFile Libraries ng                   "\     181 LibLstHdr
-	"                       Directories\r\n\r\nh"
-"ng(h%ung) %-40.40s %12.12s h%4u\r\n"             182 LibLstFmt
-"\1n\r\nInvalid NetMail address.\r\n"                   183 InvalidNetMailAddr
-"_\r\ngh%s ngTransfer Policy\r\n\r\nn"            184 TransferPolicyHdr
-"<UNUSED185>"                                           185 Unused185
-"Initial uploads are rewarded with %d%% of the "\       186 TpUpload
-	"credit value\r\n"
-"All downloads are rewarded with %d%% of the "\         187 TpDownload
-	"credit value\r\n"
-"\r\n\r\nNo user directory specified.\r\n"              188 NoUserDir
-"\r\nThere are no files for you.\r\n"                   189 NoFilesForYou
-"\r\n\r\nUser transfer directory is full.\r\n"          190 UserDirFull
-"\r\n\r\nYou can't send files to users.\r\n"            191 CantUploadToUser
-"ncLibrary   : (%u) %syh"                           192 BoxHdrLib
-"ncDirectory : (%u) %syh"                           193 BoxHdrDir
-"ncFiles     : %luyh"                               194 BoxHdrFiles
-"nc(h%unc) %s "                                    195 ShortHdrLib
-"nc(h%unc) %s"                                     196 ShortHdrDir
-"rhFilenames, specs, or flags [None]: mh"           197 BatchDlFlags
-"\r\n\7rhiBatch download queue is full.n\r\n"       198 BatchDlQueueIsFull
-"_\r\nyhFilespec [\1wAll Files\1y]: n"              199 FileSpecStarDotStar
-"\r\n\r\nrhiNot enough free disk space.n\r\n"\      200 LowDiskSpace
-	"\r\nhThe sysop has been notified.n\r\n"
-"\r\n%s bytes free\r\n\r\n"                             201 DiskNBytesFree
-"_yhFilename: n"                                    202 Filename
-"\r\nrhBad filename.\r\n"                             203 BadFilename
-"Upload '%s' to Sysop directory"                        204 UploadToSysopDirQ
-"Upload '%s' to User directory"                         205 UploadToUserDirQ
-"Upload '%s' to %s %s"                                  206 UploadToCurDirQ
-"\r\nrhiThat file is already there!n\r\n"           207 FileAlreadyThere
-"That file is already on disk. Add to data base"        208 FileOnDiskAddQ
-"\r\nrhiThat file is not on disk!n\r\n"             209 FileNotOnDisk
-"\r\nrhiPlease upload files with the following "\    210 TheseFileExtsOnly
-	"extensions only:n\r\nwh"
-"\r\nrhi%s has already been uploaded!n\r\n"         211 FileAlreadyOnline
-"\r\nwhHit [ENTER] after last destination "\          212 EnterAfterLastDestUser
-	"user.\r\n\r\n"
-"_yhSend file to (User name or number): n"          213 SendFileToUser
-"\r\nrhiDuplicate usern\r\n\r\n"                    214 DuplicateUser
-"\7\r\nrhi%s wouldn't be able to "\                  215 UserWontBeAbleToDl
-	"download it!n\r\n\r\n"
-"\7\r\nrhiYou can't send yourself files.n\r\n\r\n"  216 CantSendYourselfFiles
-"\r\n-gAdded to destination user list: "\             217 UserAddedToDestList
-	"wh%s\r\n\r\nn"
-"\r\n-gHow do you rate the content of this file "\    218 RateThisFile
-	"(hwGng, hwRng, or hwXng): n"
-"[%c] "                                                 219 Rated
-"Is this upload part of a set (multiple files)"         220 MultipleDiskQ
-"_yhHow many files total: n"                        221 HowManyDisksTotal
-"_yhWhich file number is your upload: n"            222 NumberOfFile
-" [%2.2d/%2.2d]"                                        223 FileOneOfTen
-" [%d/%d]"                                              224 FileOneOfTwo
-"\r\n-gEnter a description now.\r\n: "                225 EnterDescNow
-"No description given."                                 226 NoDescription
-"\r\nProtocol or ~Quit: "                               227 ProtocolOrQuit
-"\r\nProtocol, ~Batch or ~Quit: "                       228 ProtocolBatchOrQuit
-"\r\n\7rhiBatch upload queue is full.n\r\n"         229 BatchUlQueueIsFull
-"\r\nnmh%s nmadded to batch upload queue"\         230 FileAddedToUlQueue
-	"c - Files: h%u nc(h%unc Max)\r\n"
-"\7_whNode %2d: g%sng sent you a file.\r\n"       231 UserToUserXferNodeMsg
-"\1n\1g\1h%s\1y: \1w~B\1yatch download, "\              232 FileInfoPrompt
-	"\1w~E\1yxtended info, "\
-	"\1w~V\1yiew file, "\
-	"\1w~Q\1yuit or [Next]: \1w"
-"\r\n~Quit or [Next]: "                                 233 QuitOrNext
-"~Remove, ~Move, ~Edit, ~View, ~Quit, or [Next]: "      234 RExemptRemoveFilePrompt
-"n(%d) %s\r\n"                                         235 MoveToLibLstFmt
-"_\r\nyhLibrary [%d]: n"                            236 MoveToLibPrompt
-"n(%d) %s\r\n"                                         237 MoveToDirLstFmt
-"_\r\nyhDirectory [%d]: n"                          238 MoveToDirPrompt
-"%s moved to %s %s.\r\n"                                239 MovedFile
-"\r\nClose file record"                                 240 CloseFileRecordQ
-"~Remove, ~Credits only, ~File only, ~Move, ~Edit, "\   241 SysopRemoveFilePrompt
-	"~View, ~Quit, or [Next]: "
-"~Remove, ~Edit, ~View, ~Quit, or [Next]: "             242 UserRemoveFilePrompt
-"\r\nFile not there.\r\n"                               243 FileNotThere
-"\7\r\nrhiCouldn't remove '%s'.n\r\n"               244 CouldntRemoveFile
-"Delete file"                                           245 DeleteFileQ
-"Add %s to %s %s"                                       246 AddToOfflineDirQ
-"Remove credits"                                        247 RemoveCreditsQ
-"\r\nUser not available.\r\n"                           248 UserNotFound
-"_yhCredits to remove: n"                           249 CreditsToRemove
-"_wh%s was removed.\r\n"\                            250 FileRemovedUserMsg
-	"ngYou lost %s credits.\r\n"
-"_\r\nyhFilename         : n"                       251 EditFilename
-"\r\nrhiError renaming %s to %sn\r\n"               252 CouldntRenameFile
-"%s renamed to %s\r\n"                                  253 FileRenamed
-"_yhDescription      : n"                           254 EditDescription
-"Delete extended description"                           255 DeleteExtDescriptionQ
-"_yhUploader         : n"                           256 EditUploader
-"_yhCredit value     : n"                           257 EditCreditValue
-"_yhTimes downloaded : n"                           258 EditTimesDownloaded
-"_yhOpen count       : n"                           259 EditOpenCount
-"_yhAlternate Path   : n"                           260 EditAltPath
-"\r\nwhYou only have %s credits.\r\n"                 261 YouOnlyHaveNCredits
-"\r\nYou don't have enough credits.\r\n"                262 NotEnoughCredits
-"\r\nwhNot enough time left to transfer.\r\n"         263 NotEnoughTimeToDl
-"\r\nProtocol, ~Batch, ~Quit, or [Next]: "              264 ProtocolBatchQuitOrNext
-"\r\nBulk Upload %s %s Directory:\r\n"                  265 BulkUpload
-"_yh%s %7ld:"                                        266 BulkUploadDescPrompt
-"\r\nrhiNo files in batch queue.n"\                 267 NoFilesInBatchQueue
-	"\r\n\r\nmUse hDnm or hUnm to add files to the queue.\r\n"
-"_\r\nyhBatch: n"                                   268 BatchMenuPrompt
-"\r\nClear upload queue"                                269 ClearUploadQueueQ
-"\r\nUpload queue cleared.\r\n"                         270 UploadQueueCleared
-"\r\nClear download queue"                              271 ClearDownloadQueueQ
-"\r\nDownload queue cleared.\r\n"                       272 DownloadQueueCleared
-"\r\nDownload queue is empty.\r\n"                      273 DownloadQueueIsEmpty
-"\r\n-ghUpload Queue:ng"\                          274 UploadQueueLstHdr
-	"        Description\r\n\r\nn"
-"gh%2d: ng%s     %s\r\n"                            275 UploadQueueLstFmt
-"\r\n-ghDownload Queue:ng"\                        276 DownloadQueueLstHdr
-	"      Credits      Bytes        Time\r\n\r\nn"
-"gh%2d: ng%s %11.11s %11.11s     %s\r\n"            277 DownloadQueueLstFmt
-"\r\nwh         Totals: %11.11s %11.11s     %s\r\n"   278 DownloadQueueTotals
-"\r\n-gRemove which file from upload "\               279 RemoveWhichFromUlQueue
-	"queue (1-%d): n"
-"\r\n-gRemove which file from download "\             280 RemoveWhichFromDlQueue
-	"queue (1-%d): n"
-"\r\nUpload queue is empty\r\n"                         281 UploadQueueIsEmpty
-"\r\nHang up after transfer"                            282 HangUpAfterXferQ
-"\r\nwhStart transfer now (Ctrl-X to abort):\r\nn"   283 StartXferNow
-"_\r\nbhDisconnecting... wHbang up or wAbbort "  284 Disconnecting
-"\rwhGood-bye!  (Time Used: @TUSED@)>"               285 Disconnected
-"rhi%s NOT SENT!n\r\n"                              286 FileNotSent
-"Deleting files in temp directory...\r\n"               287 RemovingTempFiles
-"_yhExtract from: n"                                288 ExtractFrom
-"\r\nUnextractable file type.\r\n"                      289 UnextractableFile
-"\r\nFile not found.\r\n"                               290 FileNotFound
-"\r\n~Extract file(s), ~View archive, or ~Quit: "       291 ExtractFilesPrompt
-"_\r\nyhTemp Directory: n"                          292 TempDirPrompt
-"n\r\n%s not created yet.\r\n"\                        293 TempFileNotCreatedYet
-	"\r\nUse the hAn command to create it.\r\n"
-"\r\nUploader: %s\r\nFilename: %s\r\n"                  294 TempFileInfo
-"\r\n%s bytes in %u files\r\n"                          295 TempDirTotal
-"\r\n%u files removed.\r\n"                             296 NFilesRemoved
-"rhiAll other nodes should NOT be in use "\          297 ResortWarning
-	"during resort/compression.n\r\n"
-"-c%-15.15s yh%-25.25s "                            298 ResortLineFmt
-"bEmptyn\r\n"                                         299 ResortEmptyDir
-"wSorting..."                                          300 Sorting
-"\b\b\b\b\b\b\b\b\b\bbSorted    n\r\n"                301 Sorted
-"\b\b\b\b\b\b\b\b\b\bbCompressed %u slots "\           302 Compressed
-	"(%s bytes)n\r\n"
-"wh\r\n%s is already in the queue.\r\n"               303 FileAlreadyInQueue
-"wh\r\nFile is not online.\r\n"                       304 FileIsNotOnline
-"n\r\nmh%s nmadded to batch download queue -\r\n"\ 305 FileAddedToBatDlQueue
-	"cFiles: h%unc (h%unc Max)  Credits: h%snc"\
-	"  Bytes: h%snc  Time: h%s\r\n"
-"\r\nnrhThe sysop has not configured w%sr as a"\   306 NonviewableFile
-	" viewable file type.\r\n"
-"rhi%s NOT RECEIVED!n\r\n"                          307 FileNotReceived
-"\r\n\7rhi%s HAD ERRORS - NOT UPLOADED!n\r\n"       308 FileHadErrors
-"rhi%s IS ZERO LENGTH - NOT UPLOADED!n\r\n"         309 FileZeroLength
-"_wh%s (%s bytes) received.\r\n"                     310 FileNBytesReceived
-"_wh%s (%s bytes) sent.\r\n"                         311 FileNBytesSent
-"_hw%s was %sdownloaded by %s\r\n"\                  312 DownloadUserMsg
-	"ngYou were awarded %s credits.\r\n"
-"partially "                                            313 Partially
-"\r\nngLibrary          :h (%u) %s"                  314 FiLib
-"\r\nngDirectory        :h (%u) %s"                  315 FiDir
-"\r\nngFilename         :h %s"                       316 FiFilename
-"\r\nngFile size        :h %s"                       317 FiFileSize
-"\r\nngCredit value     :h %s"                       318 FiCredits
-"\r\nngDescription      :h %s"                       319 FiDescription
-"\r\nngUploaded by      :h %s"                       320 FiUploadedBy
-"\r\nngFile date        :h %s"                       321 FiFileDate
-"\r\nngUploaded on      :h %s"                       322 FiDateUled
-"\r\nngLast downloaded  :h %s"                       323 FiDateDled
-"\r\nngTimes downloaded :h %u"                       324 FiTimesDled
-"\r\nngTime to download :h %s"                       325 FiTransferTime
-"\r\nngAlternate Path   :h %s"                       326 FiAlternatePath
-"\r\nrhiInvalid Alternate Path Number: %un"         327 InvalidAlternatePathN
-"_\r\nwhFile is currently open by %d user%s.\r\n"    328 FileIsOpen
-"\7\7\r\nhrHbagpypcy mBwirrgtbhcdmayy "\  329 HappyBirthday
-	"wtro gybocu\r\n\7\7mHyawprpgy "\
-	"bBcimrytwhrdgaby ctmo yyworug.b.c.\r\n\r\n"
-"whYou haven't changed your password in more "\       330 TimeToChangePw
-	"than %d days.\r\n\r\n"
-"\r\nEnter a different password"                        331 NewPasswordQ
-"_\r\nyhNew password (4-8 chars): "                  332 NewPassword
-"_yhVerify (enter again): n"                        333 VerifyPassword
-"\7rhWrong!"                                          334 Wrong
-"whPassword changed.\r\n"                             335 PasswordChanged
-"Sorry, you have no more logons allowed today.\r\n"     336 NoMoreLogons
-"You can only logon once a day.\r\n"                    337 R_Logons
-"_bh[c�b] yEnter your full name or alias: w"     338 EnterYourAlias
-"_bh[c�b] yEnter your full real name: w"         339 EnterYourRealName
-"_bh[c�b] yEnter your company name: w"           340 EnterYourCompany
-"_bh[c�b] yEnter your chat handle: w"            341 EnterYourHandle
-"_bh[c�b] yEnter your sex (M/F): w"              342 EnterYourSex
-"_bh[c�b] yEnter your street address: w"         343 EnterYourAddress
-"_bh[c�b] yEnter your voice phone number: w"     344 EnterYourPhoneNumber
-"_bh[c�b] yEnter your birthday (%s): w"          345 EnterYourBirthday
-"_bh[c�b] yEnter your city, state: w"            346 EnterYourCityState
-"_bh[c�b] yEnter your zip (or postal) code: w"   347 EnterYourZipCode
-"_yhEnter a description of your computer: w"        348 EnterYourComputer
-"Are you calling from North America"                    349 CallingFromNAmericaQ
-"Is the above information correct"                      350 UserInfoCorrectQ
-"bUser #c%-4d      b: c%s\r\n"                      351 LiUserNumName
-"bLogons Today    : c%-5u b(Max c%ub)\r\n"         352 LiLogonsToday
-"bTime on Today   : c%-5u b(Max c%lub)\r\n"        353 LiTimeonToday
-"bMail Waiting    : c%u\r\n"                          354 LiMailWaiting
-"bSysop is        : c"                                355 LiSysopIs
-"Available"                                             356 LiSysopAvailable
-"Not Available"                                         357 LiSysopNotAvailable
-"rhiYou can't possibly be in two places at the "\    358 UserOnTwoNodes
-	"same time.n\r\n"
-"\7rhi%d critical errors have occurred. "\           359 CriticalErrors
-	"Type ;ERR at main menu.n\r\n"
-"_whYou have %d User to User Transfer%s "\           360 UserXferForYou
-	"waiting for you\r\n"
-"_whYou have sent %d unreceived User to "\           361 UnreceivedUserXfer
-	"User Transfer%s\r\n"
-"Read your mail now"                                    362 ReadYourMailNowQ
-"Sorry, the system is closed to new users.\r\n"         363 NoNewUsers
-"New User Password: "                                   364 NewUserPasswordPrompt
-"Use automatic terminal type detection"                 365 AutoTerminalQ
-"Does your terminal support ANSI"                       366 AnsiTerminalQ
-"Do you have a color terminal"                          367 ColorTerminalQ
-"ngAre you using hRIPtermng or a hRIPscrip "\     368 RipTerminalQ
-	"ngcompatible terminal program?\r\n"\
-	"hwIMPORTANT:ng If you are not absolutely "\
-	"sure, hit hwiNnbh"
-"Does your terminal support IBM extended ASCII"         369 ExAsciiTerminalQ
-"nYou can't use that name (duplicate or invalid).\r\n" 370 YouCantUseThatName
-"l-gYour password is h%s\r\n"                       371 YourPasswordIs
-"\r\n_whWrite down your password and keep it "\      372 NewUserPasswordVerify
-	"confidential.\r\n\r\nyhEnter this password "\
-	"for verification: w"
-"\7\r\nrhIncorrect, try again.\r\n"                   373 IncorrectPassword
-"_\r\nyhMagic word: w"                              374 MagicWordPrompt
-"\r\nSorry, that was not the magic word.\r\n"           375 FailedMagicWord
-"Sorry, the system is full."                            376 SystemFull
-"*NEW USER*  %-30.30s  Age/Sex/BD   : %-2d %c %s\r\n"\  377 NewUserFeedbackHdr
-"Real name : %-30.30s  Phone number : %s\r\n"\
-"Computer  : %-30.30s  Modem type   : %s\r\n\r\n"
-"\7\r\nrhiYou must leave %s mail in order to be "\   378 NoFeedbackWarning
-	"validated!n\r\n"
-"\r\n\r\nNo external programs available.\r\n"           379 NoXtrnPrograms
-"lnch%s ncExternal Programs:\r\n\r\n"             380 XtrnProgLstHdr
-"ncNum h�nc Name                           "       381 XtrnProgLstTitle
-"h�������������������������������      "               382 XtrnProgLstUnderline
-"hc%3u � nc%-25.25sh      "                        383 XtrnProgLstFmt
-"\r\n-cWhich or h~Qncuit: h"                      384 WhichXtrnProg
-"\r\n%s is currently running %s on node %d.\r\n"\       385 UserRunningXtrn
-	"\r\nTry again later.\r\n\r\n"
-"Remove node lock"                                      386 RemoveNodeLockQ
-"The minimum modem speed for this node is %ubps."       387 MinimumModemSpeed
-"You do not have sufficient access for this node."      388 NoNodeAccess
-"\1n\1r\1h\r\nSorry, this node is temporarily closed "\ 389 NodeLocked
-	"for maintenance.\1n\r\n"
-"\r\nUnknown user\r\n"                                  390 UnknownUser
-"\7Invalid Logon\r\n"                                   391 InvalidLogon
-"%2.2d/%2.2d/%2.2d T:%5lu   L:%3lu   P:%3lu   "\        392 SlogFmt
-	"E:%3lu   F:%3lu   U:%6luk %3lu  D:%6luk %3lu\r\n"
-"Locally"                                               393 Locally
-"\r\nSort alphabetically"                               394 SortAlphaQ
-"\r\nmhChecking Slots..."                             395 CheckingSlots
-"nh%-32.32snm%-30.30sh%-8.8s nm%-8.8s\r\n"       396 UserListFmt
-"\r\1h\1w%d\b total users.        \r\n"                 397 NTotalUsers
-"\1w%d \1busers with access to current sub-board.\r\n"  398 NUsersOnCurSub
-"\1w%d \1busers with access to current directory.\r\n"  399 NUsersOnCurDir
-"\r\n-cCurrent New-Scan date/time: h"                400 NScanDate
-"yhYear: w"                                          401 NScanYear
-"  yMonth: w"                                         402 NScanMonth
-"  yDay: w"                                           403 NScanDay
-"  yHour: w"                                          404 NScanHour
-"  yMinute: w"                                        405 NScanMinute
-" pm"                                                   406 NScanPmQ
-" am"                                                   407 NScanAmQ
-"rhiNot long enough!n"                              408 PasswordTooShort
-"rhiThat's your current password!n"                 409 PasswordNotChanged
-"rhiYou call that a password?n"                     410 PasswordInvalid
-"rhiThat password is too obvious!n"                 411 PasswordObvious
-"\r\nnA) IBM (or compatible)\r\nB) Apple\r\nC) "\      412 ComuterTypeMenu
-	"Macintosh\r\nD) Amiga\r\nE) Other\r\n\r\n"
-"_yhPrimary Computer: n"                            413 ComputerTypePrompt
-"Apple"                                                 414 ComputerTypeB
-"Macintosh"                                             415 ComputerTypeC
-"Amiga"                                                 416 ComputerTypeD
-"Other"                                                 417 ComputerTypeE
-"\7\r\nNo user data defined.\r\n"                       418 NoUserData
-"rh��� iDELETEDnrh ���\r\n"                       419 Deleted
-"bh��� iINACTIVEnbh ���\r\n"                      420 Inactive
-"ncAlias     : h%-30.30s  ncPassword     : "\      421 UeditAliasPassword
-	"h%-8.8s  %s\r\n"
-"ncReal Name : h%-30.30s  ncPhone number : "\      422 UeditRealNamePhone
-	"h%s\r\n"
-"ncAddress   : h%-30.30s  ncAge/Sex/BD   : "\      423 UeditAddressBirthday
-	"h%2d %c %s\r\n"
-"ncLocation  : h%-30.30s  ncZip Code     : "\      424 UeditLocationZipcode
-	"h%s\r\n"
-"ncNote      : h%-30.30s  ncHandle       : "\      425 UeditNoteHandle
-	"h%s\r\n"
-"ncComputer  : h%-30.30s  ncModem type   : "\      426 UeditComputerModem
-	"h%s\r\n"
-"ncComment %c : h%s\r\n"                             427 UeditComment
-"ncFirst on  : h%-8.8s  ncExpire    : h%-8.8s  "\ 428 UserDates
-	"ncLast on   : h%-8.8s  %02u:%02u\r\n"
-"ncTime on   : h%-5u     ncToday     : "\          429 UserTimes
-	"h%-5u%-5uncLast call : "\
-	"h%-5u%-5uncExtra : h%u\r\n"
-"ncLogons    : h%-5u     ncToday     : "\          430 UserLogons
-	"h%-5u%-5uncPosts     : "\
-	"h%-5u%-5uncToday : h%u\r\n"
-"ncE-mails   : h%-5u     ncTo sysop  : "\          431 UserEmails
-	"h%-5u     ncWaiting   : "\
-	"h%-5u     ncToday : h%u\r\n"
-"ncNetMail   : h%s\r\n"                              432 UserNetMail
-"ncUploads   : h%13.13s ncbytes in "\              433 UserUploads
-	"h%u ncfiles\r\n"
-"ncDownloads : h%13.13s ncbytes in "\              434 UserDownloads
-	"h%u ncfiles %s\r\n"
-"- Leech: rhi%un"                                   435 UserLeech
-"ncCredits   : h%13.13s ncfree: h%s "\            436 UserCredits
-	"nc(h%s ncper day)\r\n"
-"ncMinutes   : h%13.13s\r\n"                         437 UserMinutes
-"\r\nncSec Level : h%d\r\n"                          438 UeditSecLevel
-"ncFlags #1  : h%-26s   ncFlags #3  : h%s\r\n"\   439 UeditFlags
-	"ncFlags #2  : h%-26s   ncFlags #4  : h%s\r\n"
-"ncExemption : h%-26s   ncRestricts : h%s\r\n"    440 UeditExempts
-"\r\n_yhUser edit (w?y=Menu) "\                    441 UeditPrompt
-	"(w%uy of w%uy): n"
-"Restore User"                                          442 UeditRestoreQ
-"Activate User"                                         443 UeditActivateQ
-"Delete User"                                           444 UeditDeleteQ
-"User has mail waiting. Read/Delete it"                 445 UeditReadUserMailWQ
-"User has sent mail. Read/Delete it"                    446 UeditReadUserMailSQ
-"Deactivate User"                                       447 UeditDeactivateUserQ
-"Change Exemptions"                                     448 ChangeExemptionQ
-"        n%s\r\nToggle: "                              449 FlagEditing
-"_yhGo to Name or Number: n"                        450 GoToUser
-"_yhLast on: w"                                     451 UeditLastOn
-"_yhFirst on: w"                                    452 UeditFirstOn
-"_yhExpire: w"                                      453 UeditExpire
-"_yhPassword Last Modified: w"                      454 UeditPwModDate
-"_yhLevel: w"                                       455 UeditML
-"_yhNote: w"                                        456 UeditNote
-"_yhComment: w"                                     457 UeditComment
-"_yhUpload Bytes: w"                                458 UeditUlBytes
-"_yhTotal Uploads: w"                               459 UeditUploads
-"_yhDownload Bytes: w"                              460 UeditDlBytes
-"_yhTotal Downloads: w"                             461 UeditDownloads
-"_yhLeech Downloads: w"                             462 UeditLeech
-"%d: L: %2d  F: %s  EX: %s\r\n"\                        463 QuickValidateFmt
-	"  RE: %s\r\n"
-"\r\n_yhValidate: n"                                464 QuickValidatePrompt
-"_yhPassword: w"                                    465 UeditPassword
-"_yhCredits: w"                                     466 UeditCredits
-"_yhMinutes: w"                                     467 UeditMinutes
-"Copy user"                                             468 UeditCopyUserQ
-"_yhTo slot #: n"                                   469 UeditCopyUserToSlot
-"Change Restrictions"                                   470 ChangeRestrictsQ
-"_yhAdjust Credits (- to subtract, M or K = "\       471 ModifyCredits
-	"Mega/Kilobytes, or $): n"
-"_yhAdjust Minutes (- to subtract, H = Hours): n"   472 ModifyMinutes
-"\r\nDelete Questionaire"                               473 DeleteQuestionaireQ
-"hbDefault settings for w%s #%d\r\n\r\n"             474 UserDefaultsHdr
-"nb[hwTnb] hTerminal Mode                 nb: c%s\r\n"475 UserDefaultsTerminal
-"nb[hwEnb] hExternal Editor               nb: c%s\r\n"   476 UserDefaultsXeditor
-"nb[hwLnb] hScreen Length                 nb: c%s\r\n"   477 UserDefaultsRows
-"nb[hwXnb] hExpert Menu Mode              nb: c%s\r\n"   478 UserDefaultsMenuMode
-"nb[hwPnb] hScreen Pause                  nb: c%s\r\n"   479 UserDefaultsPause
-"nb[hwHnb] hHot Keys                      nb: c%s\r\n"   480 UserDefaultsHotKey
-"nb[hwSnb] hSpinning Cursor               nb: c%s\r\n"   481 UserDefaultsCursor
-"nb[hwCnb] hClear Screen Between Messages nb: c%s\r\n"   482 UserDefaultsCLS
-"nb[hwNnb] hAsk For New Message/File Scan nb: c%s\r\n"   483 UserDefaultsAskNScan
-"nb[hwYnb] hAsk For Your Un-read Msg Scan nb: c%s\r\n"   484 UserDefaultsAskSScan
-"nb[hwFnb] hAutomatic New File Scan       nb: c%s\r\n"   485 UserDefaultsANFS
-"nb[hwRnb] hRemember Current Sub-board    nb: c%s\r\n"   486 UserDefaultsRemember
-"nb[hwBnb] hBatch Download File Flagging  nb: c%s\r\n"   487 UserDefaultsBatFlag
-"nb[hwMnb] hForward E-mail to NetMail     nb: c%s\r\n"   488 UserDefaultsNetMail
-"nb[hwKnb] hCommand Shell                 nb: c%s\r\n"   489 UserDefaultsCmdShell
-"nb[hwDnb] hDefault to Quiet Mode         nb: c%s\r\n"   490 UserDefaultsQuiet
-"nb[hwWnb] hChange Password or Signature\r\n"               491 UserDefaultsPassword
-"nb[hwAnb] hTemporary/QWK Archive Type    nb: c%s\r\n"   492 UserDefualtsArcType
-"nb[hwZnb] hDefault Download Protocol     nb: c%s "\     493 UserDefaultsProtocol
-	"b%s\r\n"
-"\r\nnhbWhich or [wQb]uit: c"                   494 UserDefaultsWhich
-"On"                                                    495 On
-"Off"                                                   496 Off
-"\r\n_bh[c�b] yHow many rows on your monitor "\   497 HowManyRows
-	"[\1wAuto Detect\1y]: "
-"\r\n_yhCurrent Password: w"                        498 CurrentPassword
-"Forward personal e-mail to network mail address"       499 ForwardMailQ
-"_bh[c�b] yNetwork mail address "\                500 EnterNetMailAddress
-	"(Example: user@domain)\r\n: "
-"nlgSelect h%sng:\r\n\r\n"                        501 SelectItemHdr
-"gh%3d: ng%s\r\n"                                   502 SelectItemFmt
-"\r\nWhich, ~Quit or [%u]: "                            503 SelectItemWhich
-"_wh\r\n\r\n%s is here...\r\n\r\nn"                 504 SysopIsHere
-"\r\n_whEnd of chat.\r\n\r\nn"                      505 EndOfChat
-"\r\n_yhChat: n"                                    506 ChatPrompt
-"????"                                                  507 AnonUserChatHandle
-"\r\nn-gMultinode Chat - Type h/?ng for "\        508 WelcomeToMultiChat
-	"menu.\r\n"
-"\r\nwhWelcome to Channel %d (c%sw)\r\n\r\nn"      509 WelcomeToChannelN
-"_wh%3d  g%sng in multinode chat "\               510 NodeInMultiChatLocally
-	"channel %d locally.\r\n"
-"\r\nnmhYou're on the Air!\r\n\r\nn"                511 YoureOnTheAir
-"_whNode %2d: g%sng joined multinode chat "\      512 NodeJoinedMultiChat
-	"channel %u.\r\nn"
-"_whNode %2d: g%sng left multinode chat "\        513 NodeLeftMultiChat
-	"channel %u.\r\n"
-"_yhCommand: n"                                     514 MultiChatCommandPrompt
-"%s has password protected "\                           515 PasswordProtected
-	"this channel\r\nPassword: "
-"\r\nCorrect.\r\n"                                      516 CorrectPassword
-"rh\r\nWrong password.\r\n"                           517 WrongPassword
-"Password protect this channel"                         518 PasswordProtectChanQ
-"\r\n_yhPassword: "                                  519 PasswordPrompt
-"_gh%-8.8s w%2d%c ng%s"                           520 ChatLineFmt
-"\r\nSysop page is now %s\r\n"                          521 SysopPageIsNow
-"\r\n%s is not available.\r\n"                          522 SysopIsNotAvailable
-"Chat with %s instead"                                  523 ChatWithGuruInsteadQ
-"\r\nbhPrivate: g~Tngelegram, "\                   524 PrivateMsgPrompt
-	"h~Mngessage, h~Cnghat, or h~Qnguit: ch"
-"\r\nhyNode, User name, w#yNumber, "\               525 NodeToPrivateChat
-	"w'yHandle, or w^Uyser list: wh"
-"\r\n_whNode %d is in private chat with another "\   526 NodeNAlreadyInPChat
-	"node.\r\n"
-"\r\n_whNode %d is not in use.\r\n"                  527 NodeNIsNotInUse
-"\r\nThere's no need to page yourself.\r\n"             528 NoNeedToPageSelf
-"\r\nrhiDon't bug %s.n\r\n"                         529 CantPageNode
-"\7_whNode %2d: g%sng is paging you to chat.\r\n" 530 NodePageMsg
-"\7_whNode %2d: g%sng is paging all nodes "\      531 AllNodePageMsg
-	"to chat.\r\n"
-"\7_whNode %2d: g%sng is paging you for private"\ 532 NodePageMsg
-	" chat.\r\n"
-"\r\nYou can't send messages.\r\n"                      533 R_SendMessages
-"\r\nhyNode, Name, w#yNumber, "\                    534 NodeToSendMsgTo
-	"w'yHandle, w^Uyser list, or wAlly: wh"
-"\r\nThere's no need to send a message to "\            535 NoNeedToSendMsgToSelf
-	"yourself.\r\n"
-"_yh\r\nMessage: "                                   536 NodeMsgPrompt
-"\7_whNode %2d: g%sng sent you a message:\r\n"\   537 NodeMsgFmt
-	"wh4%sn\r\n"
-"\7_whNode %2d: g%sng sent all nodes a "\         538 AllNodeMsgFmt
-	"message:\r\nwh4%sn\r\n"
-"\r\nPaging %s..."                                      539 PagingGuru
-"n\r\ncWaiting for hNode %d ncto join private "\   540 WaitingForNodeInPChat
-	"chat. Hit hiCtrl-Cnc to abort.n\r\n\r\n"
-"_whNode %2d: g%sng joined private chat.n\r\n"   541 NodeJoinedPrivateChat
-"\r\n_whNode %2d: g%sng left private chat.n\r\n" 542 NodeLeftPrivateChat
-"No one has logged on today.\r\n"                       543 NoOneHasLoggedOnToday
-"ghLast few callers:\r\nng"                         544 LastFewCallers (*)
-"\r\nnhm%-2d nm%-6lu wh%-25.25s m%-25.25s"\     545 LastFewCallersFmt
-	"nm%02u:%02u h%-8.8s nm%-3d"
-"\r\nghCallers Today:ng"                            546 CallersToday
-"_bhDo you mean %s #%u "\                            547 DoYouMeanThisUserQ
-	"(cYbes, cNbo, or cQbuit) ? n"
-"UNKNOWN USER"                                          548 UNKNOWN_USER
-"\r\nTime's up.\r\n"                                    549 TimesUp
-"_whNode %2d: g%sng logged off\r\nn"             550 NodeLoggedOff
-"_whNode %2d: g%sng logged on %s\r\nn"           551 NodeLoggedOnAtNbps
-"n\r\n\r\nLogon     : %s"                              552 TiLogon
-"\r\nNow       : %s"                                    553 TiNow
-"\r\nTime on   : %s"                                    554 TiTimeon
-"\r\nTime left : %s\r\n\r\n"                            555 TiTimeLeft
-"\r\n\r\nnCtrl-Key Commands (From Anywhere)\r\n"\      556 ControlKeyMenu
-	"\r\nCtrl-S  Pause Current Process"\
-	"\r\nCtrl-Q  Continue Current Process"\
-	"\r\nCtrl-C  Abort Current Process"\
-	"\r\nCtrl-O  Toggle Pause Temporarily"\
-	"\r\nCtrl-Z  Toggle Raw Input Mode"\
-	"\r\nCtrl-U  List Users Online"\
-	"\r\nCtrl-P  Send Private Message to Another Node"\
-	"\r\nCtrl-T  Time Information\r\n\r\n"
-"\r\nnYou've taken too long to log on.\r\n"            557 TakenTooLongToLogon
-"\r\nnYou've been inactive too long.\r\n"              558 CallBackWhenYoureThere
-"@EXEC:yesnobar@"                                       559 YesNoQuestion
-"Yes"                                                   560 Yes
-"No"                                                    561 No
-"@EXEC:noyesbar@"                                       562 NoYesQuestion
-"_rh[Hit a key] "                                    563 Pause
-"_bh[WAIT]"                                          564 Wait
-"-g\r\nSystem Statistics Log:\r\n\r\nn"              565 SysStatsLogHdr
-"-g\r\nNode #%d Statistics Log:\r\n\r\nn"            566 NodeStatsLogHdr
-"_rhYour time has been reduced due to an "\          567 ReducedTime
-	"upcoming event.\r\n\r\n"
-"n\r\nTimed Event - Node: %d   Time: %02d:%02d   "\    568 EventInfo
-	"Last Ran: %s\r\n"
-"_rhi\r\n\r\nCarrier will be dropped in %d "\       569 UploadBeforeEvent
-	"minutes due to upcoming event.n"
-"_yh\r\nQWK: n"                                     570 QWKPrompt
-"\r\nCtrl-A codes: ~Expand to ANSI, ~Leave in, or "\    571 QWKCtrlACodes
-	"[Strip]: "
-"\r\n_hwPacking Sub-board...      "                  572 QWKPackingSubboard
-"\rbPacked:w%4lu bofw %lu>"                        573 QWKPackedSubboard
-"\r\n_hwPacking E-mail...            "               574 QWKPackingEmail
-"\rbPacked w%ub E-mail messages.>"                  575 QWKPackedEmail
-"\r\n_hwUnpacking..."                                576 QWKUnpacking
-"\r_hbUnpacked.>"                                   577 QWKUnpacked
-"_whNo new messages.\r\n"                            578 QWKNoNewMessages
-"\r\nrhiPacket Compression Failed!n\r\n"            579 QWKCompressionFailed
-"\r\nrhiCan't Extract!n\r\n"                        580 QWKExtractionFailed
-"\r\nrhiReply not received!n\r\n"                   581 QWKReplyNotReceived
-"_whInvalid Conference %d\r\n"                       582 QWKInvalidConferenceN
-"\r\n_hwCreating %s..."                              583 CreatingFileList
-"\rbCreated %s>"                                      584 CreatedFileList
-"\rbNo Files.>"                                       585 NoNewFiles
-"\r\nMessage pointers reset to initial values.\r\n"     586 MsgPtrsInitialized
-"-\r\ngThe current conversion rate is h%u "\         587 ConversionRate
-	"ngminutes for h100kng credits.\r\n\r\nn"
-"\r\n_bhHow many w100k bcredit blocks to "\        588 CreditsToMin
-	"convert to minutes (w%u Maxb): n"
-"-rhiYou have too many minutes.n\r\n"              589 YouHaveTooManyMinutes
-"\r\nYou are connected to a billing node for %s BBS."\  590 BillingNodeMsg
-	"\r\nYour phone number will be charged $%d if "\
-	"you do not hang up within 30 seconds.\r\n"\
-	"\r\nPlease wait, or hit any key to hang up now..."
-"Convert 100k credits to %u minutes"                    591 Convert100ktoNminQ
-"\r\n%lu credits have been added to your account.\r\n"  592 CreditedAccount
-"\r\nANSI Capture is now %s\r\n"                        593 ANSICaptureIsNow
-"nm\r\nRetrieving h%snm..."                        594 RetrievingFile
-"n\r\nAlternate upload path now: %s\r\n"               595 AltULPathNow
-"\r\nPrivate"                                           596 PrivatePostQ
-"\r\n_yhPost to: "                                   597 PostTo
-"\r\nPrivate posts require a destination user "\        598 NoToUser
-	"name.\r\n"
-"\r\n_whUsing your real name...\r\n"                 599 UsingRealName
-"\r\n_whPosting Privately...\r\n"                    600 PostingPrivately
-"\r\n_whPosting anonymously...\r\n"                  601 PostingAnonymously
-"\r\nCan't delete posts on this sub-board.\r\n"         602 CantDeletePosts
-"\r\nhgSub-board Information:\r\n\r\nn"              603 SubInfoHdr
-"Long Name  : %s\r\n"                                   604 SubInfoLongName
-"Short Name : %s\r\n"                                   605 SubInfoShortName
-"QWK Name   : %s\r\n"                                   606 SubInfoQWKName
-"Max Msgs   : %u\r\n"                                   607 SubInfoMaxMsgs
-"\r\nQWK packet network using the tagline:\r\n%sn\r\n" 608 SubInfoTagline
-"\r\nnFidoNet EchoMail Conference:\r\n%s (%s)\r\n"     609 SubInfoFidoNet
-"View sub-board information file"                       610 SubInfoViewFileQ
-"\r\nghDirectory Information:\r\n\r\nn"              611 DirInfoHdr
-"Long Name               : %s\r\n"                      612 DirInfoLongName
-"Short Name              : %s\r\n"                      613 DirInfoShortName
-"Allowed File Extensions : %s\r\n"                      614 DirInfoAllowedExts
-"Maximum Files           : %u\r\n"                      615 DirInfoMaxFiles
-"View directory information file"                       616 DirInfoViewFileQ
-"n\r\nNo NetMail allowed.\r\n"                         617 NoNetMailAllowed
-"\r\nIt will cost you %lu credits to send NetMail. "\   618 NetMailCostContinueQ
-	"Continue"
-"nm\r\nSending NetMail To: h%snm (h%snm)\r\n"\  619 NetMailing
-	"              From: h%snm (h%snm)\r\n"
-"Remove this sub-board from your new-scan list"         620 RemoveFromNewScanQ
-"\r\n~Sub-board, ~Group, or ~All: "                     621 SubGroupOrAll
-"\r\n~Directory, ~Library, or ~All: "                   622 DirLibOrAll
-"\r\n_yhEnter path: "                                623 EnterPath
-"\r\nSearch and display extended information"           624 SearchExtendedQ
-"\r\nDisplay Subjects Only"                             625 DisplaySubjectsOnlyQ
-"\r\nEcho is now %s \r\n"                               626 EchoIsNow
-"\r\nnyhPrivate Chat - bCtrl-C to Quitn\r\n\r\n"   627 WelcomeToPrivateChat
-"\r\nngUploading h%s.REP\r\n"                        628 UploadingREP
-"ngReceived nh%sng from h%sng via QWK.\r\n"    629 ReceivedFileViaQWK
-"rhi\rQWK packet message limit reached.nh\r\n"     630 QWKmsgLimitReached
-"\r\nnPrivate posts not allowed on this sub.\r\n"      631 PrivatePostNotAllowed
-"_whLoading message pointers..."                     632 LoadingMsgPtrs
-"\r                               \r"                   633 LoadedMsgPtrs
-"\r\nQuote original message"                            634 QuoteMessageQ
-"\r\nbhLine numbers (#,#), Range (#-#), w~Lbist "\  635 QuoteLinesPrompt
-	"or [%s]: w"
-"\r\n_chMultinode Chat Channels:\r\n\r\n"            636 ChatChanLstHdr
-"ncNum Name                         Cost"             637 ChatChanLstTitle
-"h��� �������������������������    ����"               638 ChatChanLstUnderline
-"hc%3lu nc%-25.25sh%8lu"                           639 ChatChanLstFmt
-"\r\nYou can't access that channel.\r\n"                640 CantAccessThatChannel
-"\r\nYou can't download from this directory.\r\n"       641 CantDownloadFromDir
-"_whSearching for duplicates..."                     642 SearchingForDupes
-"\rn                                 \r"               643 SearchedForDupes
-"nhYour account will expire in ri%dnh days.\r\n"  644 AcctWillExpireInNDays
-"nrhiYour account has expired!n\r\n"               645 AcctHasExpired
-"\r\nDownload files in batch queue now"                 646 DownloadBatchQ
-"_rh\r\nWaiting for Slow Media Device #%u..."        647 WaitingForDeviceN
-"\7nyh%snc sent you E-mail.\r\n"                   648 UserSentYouMail
-"\7nyh%snc sent you a file.\r\n"                   649 UserSentYouFile
-"nyh%snc read your E-mail on %s.\r\n"              650 UserReadYourMail
-"\7_whNode %2d: g%sng read your E-mail.\r\n"      651 UserReadYourMailNodeMsg
-"\r\nWhich, ~Quit, or [%u]: "                           652 JoinWhichGrp
-"\r\nWhich, ~Quit, or [%u]: "                           653 JoinWhichSub
-"\r\nWhich, ~Quit, or [%u]: "                           654 JoinWhichLib
-"\r\nWhich, ~Quit, or [%u]: "                           655 JoinWhichDir
-"l-gDirectories of h%s:\r\n\r\nh"                  656 CfgDirLstHdr
-" ng(h%dng) %sh\r\n"                              657 CfgDirLstFmt
-"l_ghFile Libraries:\r\n\r\n"                       658 CfgLibLstHdr
-"ng(h%dng) %sh\r\n"                               659 CfgLibLstFmt
-"_chListing nc(h%unc) %s "\                     660 BatchFlagPrompt
-	"(h%unc) %s (h?nc=Menu) (h%lunc Filesnc): n"
-"nl4  hy[wBy]atch Download  "\                   661
-	"[wVy]iew Content  [wEy]xtended "\
-	"Info  [wPy]revious Files  [wQy]uit  n\r\n"
-"\r\nDownload attached file: w%sb (%s bytes)"         662 DownloadAttachedFileQ
-"\r\n\r\nnTime left : %13u\r\n"                        663 FreeMinLeft
-"bh\r\nTime left to deposit in minute bank "\         664 FreeMinToDeposit
-	"(w%u Maxb): n"
-"\r\nE-mail file attachments not allowed.\r\n"          665 EmailFileNotAllowed
-"\r\nnSorry, you have insufficient access to run "\    666 CantRunThatProgram
-	"that program.\r\n\r\np"
-"nh\r\n\7\r\nYou only have ri%unh minute%s "\     667 OnlyXminutesLeft
-	"left.\r\n\r\n"
-"\rnrhi\7\7@NAME@! nhAre you really there? n>"  668 AreYouThere
-"Level %u"                                              669 NoAccessLevel
-"Age %u"                                                670 NoAccessAge
-"BPS %u"                                                671 NoAccessBPS
-"Credits %lu"                                           672 NoAccessCredit
-"Node %u"                                               673 NoAccessNode
-"User %u"                                               674 NoAccessUser
-"Days till expire %u"                                   675 NoAccessExpire
-"Time Left %u"                                          676 NoAccessTimeLeft
-"Time Used %u"                                          677 NoAccessTimeUsed
-"Time of day %02d:%02d"                                 678 NoAccessTime
-"Post/Call Ratio %u"                                    679 NoAccessPCR
-"Upload/Download Ratio %u"                              680 NoAccessUDR
-"Upload/Download File Ratio %u"                         681 NoAccessUDFR
-"Flag 1 %c"                                             682 NoAccessFlag1
-"Flag 2 %c"                                             683 NoAccessFlag2
-"Flag 3 %c"                                             684 NoAccessFlag3
-"Flag 4 %c"                                             685 NoAccessFlag4
-"Sex %c"                                                686 NoAccessSex
-"Exemption %c"                                          687 NoAccessExempt
-"Restriction %c"                                        688 NoAccessRest
-"Day of week %s"                                        689 NoAccessDay
-"Group %u"                                              690 NoAccessGroup
-"Sub-board %u"                                          691 NoAccessSub
-"Library %u"                                            692 NoAccessLib
-"Directory %u"                                          693 NoAccessDir
-"nhNode Status\r\nc"\                                694 NodeLstHdr
-	"���� ���������������������������������������"\
-	"���������������������������������\r\n"
-""                                                      695 NodeActionMain
-""                                                      696 NodeActionReadMsgs
-""                                                      697 NodeActionReadMail
-""                                                      698 NodeActionSendMail
-""                                                      699 NodeActionReadTxt
-""                                                      700 NodeActionReadSentMail
-""                                                      701 NodeActionPostMsg
-""                                                      702 NodeActionAutoMsg
-""                                                      703 NodeActionXtrn
-""                                                      704 NodeActionDefaults
-""                                                      705 NodeActionXfer
-""                                                      706 NodeActionDLing
-""                                                      707 NodeActionULing
-""                                                      708 NodeActionBiXfer
-""                                                      709 NodeActionListFiles
-""                                                      710 NodeActionLoggingOn
-""                                                      711 NodeActionLocalChat
-"h%sng (%u) %u %c in multinode chat"\              712 NodeActionMultiChat
-	"%.0s%.0s%.0s channel %u"
-""                                                      713 NodeActionGuruChat
-""                                                      714 NodeActionChatSec
-""                                                      715 NodeActionSysopAct
-""                                                      716 NodeActionQWK
-""                                                      717 NodeActionPrivateChat
-""                                                      718 NodeActionPaging
-""                                                      719 NodeActionRetrieving
-"YNQ*"                                                  720 YNQP (Yes/No/Quit/Password chars)
diff --git a/ctrl/usr144.mdm b/ctrl/usr144.mdm
deleted file mode 100644
index 9557047856..0000000000
--- a/ctrl/usr144.mdm
+++ /dev/null
@@ -1,6 +0,0 @@
-# This is for USRobotics 14400bps modems
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	USR96
-SPEC_INIT	ATS15=8&A1&B1&H1&I0&M4&R2&S0&K3
-COM_RATE	38400
diff --git a/ctrl/usr144ds.mdm b/ctrl/usr144ds.mdm
deleted file mode 100644
index f2939fd0c0..0000000000
--- a/ctrl/usr144ds.mdm
+++ /dev/null
@@ -1,5 +0,0 @@
-# This is for USRobotics Dual Standard 14400bps modem
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	USR96DS
-COM_RATE	38400
diff --git a/ctrl/usr168.mdm b/ctrl/usr168.mdm
deleted file mode 100644
index 7604da3cbd..0000000000
--- a/ctrl/usr168.mdm
+++ /dev/null
@@ -1,4 +0,0 @@
-# This is for USRobotics 16800bps modem
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	USR144
diff --git a/ctrl/usr168ds.mdm b/ctrl/usr168ds.mdm
deleted file mode 100644
index 8609441bfc..0000000000
--- a/ctrl/usr168ds.mdm
+++ /dev/null
@@ -1,5 +0,0 @@
-# This is for USRobotics Dual Standard 16800bps modem
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	USR144DS
-COM_RATE	57600
diff --git a/ctrl/usr216ds.mdm b/ctrl/usr216ds.mdm
deleted file mode 100644
index 87f67df2d7..0000000000
--- a/ctrl/usr216ds.mdm
+++ /dev/null
@@ -1,5 +0,0 @@
-# This is for the USRobotics Dual Standard 21600bps modem
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	USR144DS
-COM_RATE        57600
diff --git a/ctrl/usr288ds.mdm b/ctrl/usr288ds.mdm
deleted file mode 100644
index 6deed78db8..0000000000
--- a/ctrl/usr288ds.mdm
+++ /dev/null
@@ -1,7 +0,0 @@
-# This is for the USRobotics Dual Standard 28800bps modem
-# Updated 09/10/94 Digital Dynamics
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	USR216DS
-COM_RATE	115200
-
diff --git a/ctrl/usr96.mdm b/ctrl/usr96.mdm
deleted file mode 100644
index 2114561610..0000000000
--- a/ctrl/usr96.mdm
+++ /dev/null
@@ -1,8 +0,0 @@
-# This is for USRobotics 9600bps modems
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	GEN9600
-DIAL_STR	ATX4DT
-TERM_INIT	ATE1V1X7
-SPEC_INIT	ATS15=8&A1&B1&H1&I0&M4&R2&S0&K0
-COM_RATE	19200
diff --git a/ctrl/usr96ds.mdm b/ctrl/usr96ds.mdm
deleted file mode 100644
index 2e55b22bd2..0000000000
--- a/ctrl/usr96ds.mdm
+++ /dev/null
@@ -1,6 +0,0 @@
-# This is for USRobotics Dual Standard 9600bps modems
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	USR96
-COM_RATE	19200
-SPEC_INIT	ATS15=8B0&A2&B1&H1&I0&K3&M4&R2&S0
diff --git a/ctrl/ven14400.mdm b/ctrl/ven14400.mdm
deleted file mode 100644
index 9be2b83c17..0000000000
--- a/ctrl/ven14400.mdm
+++ /dev/null
@@ -1,5 +0,0 @@
-# This is for Ven-Tel 14400bps modems
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	USR96
-COM_RATE	19200
diff --git a/ctrl/viv14400.mdm b/ctrl/viv14400.mdm
deleted file mode 100644
index 464cde3b76..0000000000
--- a/ctrl/viv14400.mdm
+++ /dev/null
@@ -1,6 +0,0 @@
-# This is for Viva 14400/FAX modems
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	GEN14400
-SPEC_INIT	ATS95=3%C2
-COM_RATE	38400
diff --git a/ctrl/viv9624e.mdm b/ctrl/viv9624e.mdm
deleted file mode 100644
index 7c2b69045b..0000000000
--- a/ctrl/viv9624e.mdm
+++ /dev/null
@@ -1,7 +0,0 @@
-# This is for the ViVa 9624E modem
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE         GEN2400
-COM_RATE	57600
-LOCKED_RATE     YES
-FLOW_CONTROL    BOTH
diff --git a/ctrl/viv9642e.mdm b/ctrl/viv9642e.mdm
deleted file mode 100644
index 58ec6e2706..0000000000
--- a/ctrl/viv9642e.mdm
+++ /dev/null
@@ -1,8 +0,0 @@
-# This is for the ViVa 9642e modem
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE         GEN2400
-COM_RATE	38400
-LOCKED_RATE     YES
-FLOW_CONTROL    BOTH
-SPEC_INIT	ATS95=3%C2
diff --git a/ctrl/xtrn.cnf b/ctrl/xtrn.cnf
deleted file mode 100644
index 50f0a5da68a2fc390b4094520c1d807561c5d261..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7912
zcmWe;a0v}@4GwV)VjvSZ`}_Jj`nl*i`}>k*f{$l#2w57TnnFB%U0tATa;RV@r(jCl
z5J--tNO~NDypVXLGkyHs{oUM1*9X(#<KYNnl0^r2M|lR2r4ynlz&q5B5)*<W{hVE0
zJjqT&jzP|#3;=Nq8Dww>CBA21aQ6)JbPXrNVyG4;M=y#Z(8WK@RoBmz?C^7^B=8v+
z7(5(9oIS{oJ_bgH;L5yY*Obf>g)$>O15;?QV58tkMOCr5GA}t5q(@azK{ZD~H4U43
zoMM#fXHZ~ZaP$lI#AyMt1S2wsfq{XU!8b884^0p|*Vob054#MpqV9>gsl~)7c6ao3
z4JJk*PBs1|8L34IpvcT9%FjzJQ3$RqE=kSBwB0|%!!^jsi2~dB85kIxN^^3GT`N-+
z6+o=ilFU3zo4{^$3ia^`c8zoebEr(PGB7ZJ<5w#Q<eb#XR4Q9AaK<4;q?1#yf=^~~
z33kT>JNaOjpj?!Z5gfP-3=A~1geYg~>BU5Z1o_2K&mBnN>zi1ToT1>Gn4MaL#WBIY
zq&CcgT!TXt{QN@{+_4ykEQAQ(;@n(h3A(f4;Y+e-u{)KK!7V>OMZqmIJ)=YsyAqhF
zo4>z{n`a0K<pa^-%OnD`BrQKbB`vcgmDHLFrk_$87QP_QQfd}RKO=)nW^$@Rcp|nG
z3sQi<E}qV=;f`eYPY?!SvKV<`<wHtla%y>Ek%E2>rYd4YQp%HaQWJ@*m9d!z3twt^
z7Sbw$R-{fjiOJbniOJbmQ*y8qWgQS~-hqlSa>By5I4O(lumu@boRmdT0K>wUTApQO
zaLLb2%*;~=$j4slf*cLOE&=}D<ae(jX5b)^(r*FC9pndbN&!W|%K!^sYI&BCAtWPJ
z!6`MdxJ12J0TR|Y0wKhS)b2mg<u4;YEd7=wr6}l^Wag$8+Zr0+a0o4hVc|=<XR*7A
zi6JbtsH7;dG&N5_BRn(D*hmxH^w#yj7|#fE4T5wIi4HdGR$>!{1uuhENor1dVo9n(
zS!z*<9;kPgQIxNjmx`m!h|R1)C595dKACx?6?ntf$I~x@fiB^jTvj{`f|r4bAw03T
zB-JM|F9nu<am9bQV{nM8k0S{kVd5hKGyRr>oRyQ9m!g}LRIHbrKd{YWTwy{`oC#e1
zh9u@B<|Y;=C*lj^5Jw+JU&ml)f@Z=MP!hf+FeeT5@O8{7Ni9lEQ3y&+%*iaN#2vzp
zJ|V6_Bn@#>6272Rn^*)Qhiuvfr86c5f8D73yi^4Z|6qM1O^^^S?5`W;??*!K4VO9C
z#4*c<{HpxCRK3*H;^d)QI503UFflmi=cFjOl@@2_=iv`zXSdK`Pk$1MUu*%1Lku%~
z)4(p$OGzxsE=f(!(917M$Dwyn3$rr7$8J>>LG8{IvYq>%kCBCe8H;xK%$KTSaZ*xo
z4$cueEP6pg@V01CYEga;nH^`4K@HGBP<Sr_ZZb%g0vzn@1{uOqRV+?UOIJ|MR?sg|
zEmzPdZMdI-0q#Ny9D`M>o2QFEc#Iwr2dT*!`3m|unR%o-5adD@tTs?82y&r+Xb1xX
biVIVVv5qC+v#f!Efi^B=LLJ@3+QkO|@XvP1

diff --git a/ctrl/zoom9600.mdm b/ctrl/zoom9600.mdm
deleted file mode 100644
index cce5156200..0000000000
--- a/ctrl/zoom9600.mdm
+++ /dev/null
@@ -1,8 +0,0 @@
-# This is for Zoom V.32 modem
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE         GEN2400
-COM_RATE	38400
-LOCKED_RATE     YES
-FLOW_CONTROL    BOTH
-SPEC_INIT	ATS46=138S48=7W0&K3&M5&Q5\G0\N3
diff --git a/ctrl/zyx1496.mdm b/ctrl/zyx1496.mdm
deleted file mode 100644
index 5f091d0784..0000000000
--- a/ctrl/zyx1496.mdm
+++ /dev/null
@@ -1,10 +0,0 @@
-# This is for the ZyXEL U-1496 modem
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE         GEN2400
-COM_RATE	57600
-LOCKED_RATE     YES
-FLOW_CONTROL    BOTH
-SPEC_INIT	ATN0X6S35.7=1S38.5=1
-TERM_INIT	ATE1N5V1X5
-DIAL_STR	ATS42.6=1DT
diff --git a/ctrl/zyx1496f.mdm b/ctrl/zyx1496f.mdm
deleted file mode 100644
index e616889c33..0000000000
--- a/ctrl/zyx1496f.mdm
+++ /dev/null
@@ -1,6 +0,0 @@
-# This is for the ZyXEL U-1496 modem with FAX enabled
-# Updated 03/23/96 Digital Dynamics: Now uses verbal result codes
-
-INCLUDE 	ZYX1496
-INIT_STR	AT&FS0=0S2=128E0V1X4&C1&D2N0X6S35.7=1S38.5=1#B1
-SPEC_INIT	AT+FCLASS=6
diff --git a/docs/_borders/bottom.htm b/docs/_borders/bottom.htm
deleted file mode 100644
index 1304233ba2..0000000000
--- a/docs/_borders/bottom.htm
+++ /dev/null
@@ -1,44 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<title>Shared Bottom Border</title>
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<meta name="Microsoft Border" content="none">
-</head>
-
-<body>
-
-<hr>
-<p><b><a href="http://www.synchro.net/copyright.html">Copyright</a> � 2000 by </b> <a href="http://www.synchro.net/author.htm"><b>Rob Swindell</b><br>
-</a>
-
-<a href="http://www.synchro.net"><font size="2"><br>
-Synchronet BBS Software</font></a>  <font size="2">  (Synchronet)
-Version 3 is comprised of several documentation,<br>
-library, executable, and <a href="http://www.synchro.net/source.html">source code</a> 
-files, all of which are covered by the<a href="http://www.fsf.org/copyleft/gpl.html">
-<br>
-GNU General Public License</a>  with the exception of the following portions
-covered by<br>
-the <a href="http://www.fsf.org/copyleft/lesser.html">GNU Lesser General Public License</a>:
-SMBLIB and XSDK.<br>
-<br>
-Synchronet Version 2 (for DOS and OS/2) and its source code was released to the<a href="http://www.fsf.org/philosophy/categories.html#PublicDomainSoftware">
-<br>
-Public Domain</a>  by <a href="ftp://vert.synchro.net/main/sbbs/manifest.txt">Digital Dynamics</a> 
-in 1997 and remains Public Domain software today.<br>
-Synchronet Version 3 is not Public Domain software.</font></p>
-<p align="left"><font size="2"><a href="http://www.synchro.net/author.html">Rob Swindell<br>
-</a>PO Box 501<br>Yorba Linda, CA 92885<a href="http://www.synchro.net"><br>
-http://www.synchro.net</a>
-
-</font></p>
-<p align="left"><font size="2">For the complete Copyright Information please
-read the <a href="http://www.synchro.net/copyright.html">Copyright Documentation</a>
-.</font></p>
-
-</body>
-
-</html>
diff --git a/docs/_borders/top.htm b/docs/_borders/top.htm
deleted file mode 100644
index 83b687698f..0000000000
--- a/docs/_borders/top.htm
+++ /dev/null
@@ -1,17 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=IBM437">
-<title>Shared Top Border</title>
-<meta name="Microsoft Border" content="none">
-</head>
-
-<body>
-
-<a href="http://www.synchro.net"><img border="0" src="../images/synclogo_fancyred.gif" alt="Synchronet BBS - Multinode Bulletin Board Software" width="626" height="86"></a>
-
-<hr>
-
-</body>
-
-</html>
diff --git a/docs/adding_nodes.html b/docs/adding_nodes.html
deleted file mode 100644
index 4d47a320ca..0000000000
--- a/docs/adding_nodes.html
+++ /dev/null
@@ -1,419 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=IBM437">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<title>Adding Nodes</title>
-</head>
-
-<body>
-
-<!--webbot bot="Include" U-Include="_borders/top.htm" TAG="BODY" startspan -->
-
-<a href="http://www.synchro.net"><img border="0" src="images/synclogo_fancyred.gif" alt="Synchronet BBS - Multinode Bulletin Board Software" width="626" height="86"></a>
-
-<hr>
-
-<!--webbot bot="Include" endspan i-checksum="23126" -->
-
-<p><b><a name="top"></a></b><a href="sysop.html#TOC">Back to Table of Contents</a></p>
-<h2><a name="AddingNodes">[3.0] - Adding Nodes</a></h2>
-<pre>Run SCFG. Select Nodes from the main menu. Hit INS (insert key) to create 
-additional nodes. Each added node will have the configuration options copied
-from the last node. Make any configuration changes (including modem/com port
-configuration) necessary.
-
-<font color="#FF0000"><i><b>v2 Only:</b></i></font> Copy *.BAT from your NODE1 directory into each added node directory.</pre>
-<pre><font color="#FF0000"><i><b>v3 Only:</b></i></font> If you'd like all nodes to be available for telnet logins, set the
-	 <b>Last Node</b> in the telnet configuration dialog to your highest 
-	 configured node number.</pre>
-<pre>	 <img border="0" src="images/sbbsctrl_telnet_cfg_gen.gif" width="358" height="318"></pre>
-<pre>	 All nodes controlled by the same instance of SBBSCTRL will use the
-	 configuration information for the node specified as the <b>First Node
-</b>	 in the telnet configuration dialog.</pre>
-<h2><a name="ConfiguringNodes">[3.1] - Configuring Nodes</a></h2>
-<pre>You can configure any node from within SCFG regardless of what computer
-(or virtual computer) you're using. To configure a node, select &quot;<i>Nodes</i>&quot; from
-the SCFG &quot;<i>Configure</i>&quot; menu. You will then see a list of all the nodes installed
-on your system. You will also see the bottom line of the screen now has two
-additional key commands added, <i>INS</i> (Insert) and <i>DEL</i> (Delete). INS and DEL are
-used to add and delete nodes from the system. If you select one of the nodes
-listed, you will receive another menu as follows:</pre>
-<pre><img border="0" src="images/scfg_node1.gif" width="652" height="331"></pre>
-<pre>We will now discuss the options of this menu.
-
-<b>Name <i><font color="#FF0000">(v2 Only)</font></i>:</b>
-        This is the name of the node. This parameter is not used for anything
-        but documentary purposes in the BBS.
-
-<b>Phone Number:
-</b>        This is the phone number (or IP address/host name) of this node.
-
-<b>Minimum Connect Rate <i><font color="#FF0000">(v2 Only)</font></i>:
-</b>        This is the minimum modem connection rate that will be allowed. Callers
-        can still connect and attempt to logon, but without the 'M' exemption,
-        they will be told what minimum connect rate is and disconnected.
-
-<b>Logon Requirements:
-</b>        Use this option to set specific requirements to logon this node.
-
-<b>Local Text Editor <i><font color="#FF0000">(v2 Only)</font></i>:
-</b>        This is the command line to use when editing text files or messages
-        locally. This command line is not used when posting or sending e-mail
-        unless the above option is set to 'Yes'. If this option is not
-        specified, the default editor for the current user will be used. An
-        example (using Qedit as the editor) would be:
-        <b>q.exe %f</b>
-
-        Assuming <b><i>Q.EXE</i></b> is in the DOS search path. If it isn't, you can specify
-        the location of the program. Example:
-        <b>c:\qedit\q.exe %f</b>
-
-        The <b>%f</b> parameter will expand to the path and filename of the file to
-        edit.
-
-<b>Text Viewer <i><font color="#FF0000">(v2 Only)</font></i>:</b>
-        This is the command line to use to view text files locally. Currently,
-        this command line is only used to view the system log files. You should
-        use a program that allows the text scrolling up and down as well as
-        string searches. A popular program for this use is Buerg's LIST.
-        If you are running multiple nodes and the program you wish to use
-        leaves the file open while viewing, you should use a batch file that
-        actual copies the file to view and then views the copy.
-        Example (if program name is LIST):
-        LISTIT.BAT:</pre>
-<blockquote>
-  <table border="0" cellpadding="3" cellspacing="3" width="70%" bgcolor="#CCCCCC">
-    <tr>
-      <td width="100%">
-        <pre>@echo off
-copy %1 list.tmp
-list list.tmp
-del list.tmp</pre>
-      </td>
-    </tr>
-  </table>
-</blockquote>
-<pre>        An example for this field (using the LISTIT batch file) would be:
-        <b>%!listit.bat %f</b>
-
-        The <b>%!</b> parameter specifies that the batch file is located in the
-        EXEC directory. If is not located there, you can remove the <b>%!</b> so that
-        the DOS search path will be searched for the batch file or specify
-        its location.
-
-        The <b>%f</b> parameter will expand to the path and filename of the file to
-        view.</pre>
-<pre><b>Configuration Command <i><font color="#FF0000">(v2 Only)</font></i>:
-</b>	This is the command line to use to execute the Synchronet configuration
-	program from the WFC screen. The simplest command line to use is &quot;SCFG&quot;
-	(this will execute SCFG.BAT or SCFG.CMD from the current node
-	directory). Alternate command lines:
-
-	If this node is running Synchronet for DOS:
-
-<b>		%!scfg %k /t%w
-</b>
-		This command lines has the added advantage of passing the
-		timeslice configuration of the current node (enabling Win/OS2
-		idle API calls or disabling DESQview/DOS idle API calls).
-		This flavor of SCFG supports user mouse control.
-		This flavor of SCFG can only use conventional DOS memory for
-		configuration items (EMS is automatically used, if available,
-		for executable overlay caching - improving performance but
-		not increasing the maximum number of configured items).
-
-	To use the extended-DOS/Win32 version of SCFG:
-
-<b>		%!scfg32 %k
-</b>
-		This flavor of SCFG can access all of your installed memory
-		(no memory limitations under Win32).
-		This flavor of SCFG does not support any timeslice API calls
-		(may consume more timeslices than necessary when run under a
-		non-Win32 multitasking environment).
-
-	If this node is running Synchronet for OS/2:
-
-<b>		%!scfg4os2 %k
-</b>
-		This flavor of SCFG has no memory limitations.
-
-<b>DOS Command Interpreter <i><font color="#FF0000">(v2 for OS/2 Only)</font></i>:
-</b>	If this node is running Synchronet for OS/2, this is the path to your
-	command interpreter for OS/2 virtual DOS machines. Example:
-
-<b>		C:\OS2\MDOS\COMMAND.COM
-</b>
-	This option is only used when running Synchronet for OS/2.</pre>
-<h2><a name="NodeToggleOptions">[3.2] - Node Toggle Options</a></h2>
-<pre><img border="0" src="images/scfg_node1_toggles.gif" width="652" height="331">
-
-<b>Alarm When Answering <i><font color="#FF0000">(v2 Only)</font></i>:</b>
-        If you would like have the BBS sound an alarm when answering the phone,
-        set this option to Yes.
-
-<b>Status Screen While WFC <i><font color="#FF0000">(v2 Only)</font></i>:
-</b>        This node will display a screen with system usage statistics and the
-        current status of all active nodes.
-
-<b>Total Msgs/Files While WFC <i><font color="#FF0000">(v2 Only)</font></i>:
-</b>	If you have the system statistics displayed while WFC, and you wish to
-	include the total number of messages and files in the display, set this
-	option to Yes. The retrieval of statistics is faster when set to No.
-
-<b>Use Editor for Messages <i><font color="#FF0000">(v2 Only)</font></i>:
-</b>        If this option is set to 'Yes' and you have specified a Local Text
-        Editor, when logged on locally this editor will be used for the creation
-	of all messages.
-
-<b>Use EMS for Overlays <i><font color="#FF0000">(v2 for DOS Only)</font></i>:
-</b>	Set this option to 'Yes' to have this node to use EMS memory for
-	overlay files. Setting this option to 'Yes' can help increase the
-	performance of the BBS significantly if enough EMS memory is available
-	(about 360K).
-
-<b>Allow Swapping <i><font color="#FF0000">(v2 for DOS Only)</font></i>:
-</b>	Set this option to 'Yes' to allow this node to swap when necessary.
-	If you do not have EMS, XMS, or Extended memory available, and you
-	do not wish to have Synchronet swap to disk, you should set this
-	option to 'No'.
-
-<b>Swap to EMS <i><font color="#FF0000">(v2 for DOS Only)</font></i>:
-</b>	When set to 'Yes', Synchronet will attempt to swap to EMS memory when
-	executing a program that is in your &quot;Global Swap List&quot;.
-
-<b>Swap to XMS <i><font color="#FF0000">(v2 for DOS Only)</font></i>:
-</b>	When set to 'Yes', Synchronet will attempt to swap to XMS memory.
-
-<b>Swap to Extended Memory <i><font color="#FF0000">(v2 for DOS Only)</font></i>:
-</b>	When set to 'Yes', Synchronet will attempt to swap to Extended memory.
-	This option should always bet set to 'No' when running under a DOS
-	multitasker.
-
-<b>Windows/OS2 Time Slice API <i><font color="#FF0000">(v2 for DOS Only)</font></i>:
-</b>	Set this option to 'Yes' if you are running Synchronet under OS/2.
-	You may experience poor performance if this option is set to 'Yes'
-	and you are running Synchronet under Microsoft Windows v3.x. If this
-	occurs, set this option to 'No'.
-
-<b>DESQview Time Slice API <i><font color="#FF0000">(v2 for DOS Only)</font></i>:
-</b>	Set this option to 'Yes' if you are running Synchronet using DESQview.
-	Since Synchronet auto-detects DESQview it will not hurt anything to
-	leave this option set to 'Yes' if you are not running DESQview.
-
-<b>DOS Idle Interrupts <i><font color="#FF0000">(v2 for DOS Only)</font></i>:
-</b>	This option defaults to 'Yes'. You should not change this setting.
-
-<b>Low Priority String Input:
-</b>	Normally Synchronet does not give up time-slices under multi-taskers
-	when waiting for string input from the user.  Setting this option to
-	'Yes' will for Synchronet to give up time-slices when waiting for
-	string input, this may cause &quot;jerky&quot; keyboard response but will
-	improve overall system performance under multi-taskers. This option
-	should normally be set to 'Yes'.
-
-<b>Allow Logon by Number:
-</b>	Setting this option to 'Yes' will allow users to logon by typing their
-	user number at the login logon prompt.
-
-<b>Allow Logon by Real Name:
-</b>	When set to 'Yes' this option allows users to enter their real name
-	(or company name) at the login prompt to logon to the BBS.
-
-<b>Always Prompt for Password:
-</b>	When set to 'Yes' this option will cause the user to ALWAYS be prompted
-	for a password at logon, even if they have entered an incorrect (non-
-	existent) name at the login prompt.
-
-<b>Disable Local Inactivity <i><font color="#FF0000">(v2 Only)</font></i>:
-</b>	If you wish to disable the user inactivity warning and auto-logoff
-	for local logons, set this option to 'Yes'.
-
-<b>Disable Local Keyboard <i><font color="#FF0000">(v2 Only)</font></i>:
-</b>	If this option is set to 'Yes', the local keyboard will be completely
-	disabled when Synchronet is run. The only way to exit Synchronet would
-	be to down the node from another process or reboot the machine.
-
-<b>Local System Protection <i><font color="#FF0000">(v2 Only)</font></i>:
-</b>	If you wish to require the system password for WFC commands and local
-	sysop Alt-key combinations, set this option to 'Yes'.
-
-<b>Beep Locally <i><font color="#FF0000">(v2 Only)</font></i>:
-</b>	To disable the local speaker of this node for online beeps, set this
-	option to 'No'.
-
-<b>Allow 8-bit Remote Logons:
-</b>	To allow E-7-1 terminals to use this node, set this option to 'No'.
-	This will also eliminate the ability of 8-bit remote users to send
-	IBM extended ASCII characters during the logon sequence.
-
-<b>Reset Video Between Calls <i><font color="#FF0000">(v2 Only)</font></i>:
-</b>	If this option is set to 'Yes', Synchronet will reset the current
-	node console's video mode before each WFC cycle. This option should
-	be set to 'No' for most configurations.</pre>
-<h2><a name="NodeAdvancedOptions">[3.3] - Node Advanced Options</a></h2>
-<pre>When selecting this option, you will be brought to a sub-menu of options as
-follows:</pre>
-<pre><img border="0" src="images/scfg_node1_advanced.gif" width="652" height="331">
-
-<b>Validation User:
-</b>        This is the number of the user to whom validation feedback is sent.
-        This value will usually be set to 1 (the sysop). If this value is set
-        to 0, then new users will not be required to enter validation feedback.
-
-<b>Screen Length <i><font color="#FF0000">(v2 Only)</font></i>:
-</b>        This is the length of the system screen or video window. This should
-        be set to &quot;Auto-Detect&quot; always, unless you have a specific reason
-        to force Synchronet to think the screen length is a certain value.
-
-<b>Screen Blanker <i><font color="#FF0000">(v2 Only)</font></i>:
-</b>	When enabled, this will cause the screen for this node to blank out
-	when waiting for a caller after the configured amount of inactive
-	time.
-
-<b>Semaphore Frequency <i><font color="#FF0000">(v2 Only)</font></i>:
-</b>	This option specifies how often (in seconds) this node should perform
-	semaphore checks (e.g. checks to see if an event should be run, the
-	node should be downed, etc.).
-
-<b>Statistics Frequency <i><font color="#FF0000">(v2 Only)</font></i>:
-</b>	This options specifies how often (in seconds) this node should check
-	system statistics (calls per day, logons today, etc.).	Used when
-	updating the WFC statistics display.
-
-<b>Inactivity Warning:
-</b>	This is the number of seconds of user inactivity before a warning
-	(typically: &quot;Username, are you still there?&quot;) is displayed to the
-	user.
-
-<b>Inactivity Disconnection:
-</b>	This is the number of seconds of user inactivity before the user
-	is automatically disconnected.
-
-<b>Cost Per Call:
-</b>        This option should only be set to something nonzero for a billing
-        node. A billing node is a node attached to special phone line that will
-        automatically charge the caller a predetermined amount (usually area
-        code 900 or prefix 976 numbers). Set this value to the amount that the
-        caller will be billed after the initial 30 seconds. The user doesn't
-        actually access the BBS through this phone number as 900/976 services
-        charge the sysop by the minute an unrealistic amount. The user just
-        enters his or her name/alias and password and their account is credited
-        with the amount of credits per dollar specified in the System options
-	multiplied by this field (Cost per call) and the user is hung up on.
-        The user then calls the normal BBS nodes and has instant access to
-        their purchased credits.
-
-<b>Daily Event:
-</b>        This is the command line to execute when the first caller after
-        midnight logs off. If the program is located in the EXEC directory,
-        this command line should start with the %! specifier.
-
-<b>Control Directory:
-</b>        This is the path to the control directory where all the shared
-	configuration (.CNF) files for SBBS are stored. TEXT.DAT (the editable
-        ASCII file that contains almost all of the color and text that SBBS
-        displays) and a few miscellaneous binary data files are also stored
-        in this directory. All nodes of the system must have the same control
-        directory and this directory should not be located on a RAM disk.
-
-<b>Text Directory:
-</b>        This is the path to the text directory. This is where all menus,
-        macros, SIF files, QWK files, system information, and other text
-        files are stored. All data beneath this directory branch is READ ONLY
-        as far as Synchronet is concerned, so changing this directory to a RAM
-        drive would enhance performance and wouldn't risk data loss. If you do
-        change this path, be sure to copy all the files and subdirectories of
-        the original text directory there. If you do change this path to a RAM
-        drive, you will need automate the copying of all of the files and
-        subdirectories there upon system startup (possibly AUTOEXEC.BAT) with a
-        sequence of commands like this:
-<b>        md r:\text
-        xcopy c:\sbbs\text\*.* r:\text /S
-</b>
-<b>Temporary Directory:
-</b>        This is the path to the directory that this node will use for
-        temporary file storage. This directory must point to somewhere unique
-        and nonvolatile. All the files in this directory are deleted upon
-        execution of the BBS, so do not store any files you want to keep in
-        this directory. Each node must have its own temp directory. For
-        increased performance on batch uploads, it is best if this directory
-        is on the same disk drive as the majority of your file transfer
-        directories.</pre>
-<pre><b>	<i><font color="#FF0000">In v3+, this option should always be set to &quot;TEMP\&quot;.</b></font></i>
-
-<b>Swap Directory <i><font color="#FF0000">(v2 Only)</font></i>:
-</b>        This is the path to the directory that this node will use for
-	swapping to disk if &quot;Allow Swapping&quot; is set to 'Yes' and Swapping
-	to EMS, XMS, and Extended memory is either disabled or not enough
-	memory is available.</pre>
-<h3><a name="ModemConfiguration"><u>Modem Configuration</u></a>
-
-<b> <i><font color="#FF0000">(v2 Only)</font></i></b></h3>
-<div align="left">
-<pre align="left">This sub-menu and the options contained within it are discussed in another
-section of this manual. Consult the '<a href="modem_setup.html">Modem Set-Up</a>' section of this manual
-for more information.</pre>
-</div>
-<h2 align="left"><a name="WFC_NumberKeys">[3.4] - Wait for Call Number
-Keys</a>
-
-<b><i><font color="#FF0000">(v2 Only)</font></i></b></h2>
-<div align="left">
-<pre>This option lets you configure what command line will be executed for each
-number key (0-9) while waiting for call. These commands will generally be
-simple things that don't require much memory, such as listing the ERROR.LOG,
-listing the GURU.LOG, editing a file, or any other simple functions. For large
-program functions, see Wait for Call Function Keys.</pre>
-</div>
-<h2 align="left"><a name="WFC_FunctionKeys">[3.5] - Wait for Call Function
-Keys</a>
-
-<b><i><font color="#FF0000">(v2 Only)</font></i></b></h2>
-<div align="left">
-<pre>This option lets you configure what command line will be executed for each
-function key (F1-F12) while waiting for call. These commands can execute just
-about any program because Synchronet will shrink to 16k before executing it.
-Popular uses for these shrinking commands would be running a terminal program
-or other large applications.</pre>
-</div>
-<p><a href="#top"><b>Back to Top</b></a></p>
-
-<!--webbot bot="Include" U-Include="_borders/bottom.htm" TAG="BODY" startspan -->
-
-<hr>
-<p><b><a href="http://www.synchro.net/copyright.html">Copyright</a> � 2000 by </b> <a href="http://www.synchro.net/author.htm"><b>Rob Swindell</b><br>
-</a>
-
-<a href="http://www.synchro.net"><font size="2"><br>
-Synchronet BBS Software</font></a>  <font size="2">  (Synchronet)
-Version 3 is comprised of several documentation,<br>
-library, executable, and <a href="http://www.synchro.net/source.html">source code</a> 
-files, all of which are covered by the<a href="http://www.fsf.org/copyleft/gpl.html">
-<br>
-GNU General Public License</a>  with the exception of the following portions
-covered by<br>
-the <a href="http://www.fsf.org/copyleft/lesser.html">GNU Lesser General Public License</a>:
-SMBLIB and XSDK.<br>
-<br>
-Synchronet Version 2 (for DOS and OS/2) and its source code was released to the<a href="http://www.fsf.org/philosophy/categories.html#PublicDomainSoftware">
-<br>
-Public Domain</a>  by <a href="ftp://vert.synchro.net/main/sbbs/manifest.txt">Digital Dynamics</a> 
-in 1997 and remains Public Domain software today.<br>
-Synchronet Version 3 is not Public Domain software.</font></p>
-<p align="left"><font size="2"><a href="http://www.synchro.net/author.html">Rob Swindell<br>
-</a>PO Box 501<br>Yorba Linda, CA 92885<a href="http://www.synchro.net"><br>
-http://www.synchro.net</a>
-
-</font></p>
-<p align="left"><font size="2">For the complete Copyright Information please
-read the <a href="http://www.synchro.net/copyright.html">Copyright Documentation</a>
-.</font></p>
-
-<!--webbot bot="Include" endspan i-checksum="55766" -->
-
-</body>
-
-</html>
diff --git a/docs/amail.cfg b/docs/amail.cfg
deleted file mode 100644
index 8e8a6b6dbc..0000000000
--- a/docs/amail.cfg
+++ /dev/null
@@ -1,36 +0,0 @@
-SYSOP Your Name   
-SYSTEM Your BBS (XXX) XXX-XXXX
-ADDRESS 1:123/456
-INBOUND C:\IM\INBOUND
-OUTBOUND C:\IM\OUTBOUND
-
-ARCDEF ZIP 0 504B
-    ADD PkZip %A %F
-    EXTRACT PkUnzip %A
-END
-
-ARCDEF ARC 0 1A
-    ADD Arca %A %F
-    EXTRACT Arce %A
-END
-
-ARCDEF LZH 2 2D6C68
-    ADD Lha a %A %F
-    EXTRACT Lha e %A
-END
-
-ARCDEF ARJ 0 60EA
-    ADD Arj a %A %F
-    EXTRACT Arj e %A
-END
-
-NOFLO
-FORCEKILLSENT
-SIGDIR C:\IM
-SIGKEEP 2000
-CHECKPATH
-DUMPUNKNOWN
-AREAFILE C:\IM\SYSTEM\AREAS.BBS
-NOWARN CIRCULAR DUPES ORIGIN
-SCANALL
-RETEAR ADD
diff --git a/docs/appendix.html b/docs/appendix.html
deleted file mode 100644
index 46fb4375b9..0000000000
--- a/docs/appendix.html
+++ /dev/null
@@ -1,501 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<title>Appendix Listing</title>
-</head>
-
-<body>
-
-<!--webbot bot="Include" U-Include="_borders/top.htm" TAG="BODY" startspan -->
-
-<a href="http://www.synchro.net"><img border="0" src="images/synclogo_fancyred.gif" alt="Synchronet BBS - Multinode Bulletin Board Software" width="626" height="86"></a>
-
-<hr>
-
-<!--webbot bot="Include" endspan i-checksum="23126" -->
-
-<p><a name="top"></a><a href="sysop.html#TOC">Back to Table of Contents</a></p>
-<h2><a name="Appendix_A">[18.1] - Appendix A:  Command Line Specifiers</a>
-
-</h2>
-<pre>Specifiers (argument replacement) for use with command lines in SCFG and many
-string-related Baja functions.
-
-<b>%a</b>	User alias or name (may require surrounding with &quot;'s)
-<b>%b</b>	Baud (DTE) rate
-<b>%c</b>	Connect description
-<b>%d</b>	Connect (DCE) rate
-<b>%e</b>	Estimated CPS rate*10
-<b>%f</b>	File path/name (example: C:\SBBS\NODE1\DOOR.SYS)
-<b>%g</b>	Temp directory (example: C:\SBBS\NODE1\TEMP\)
-<b>%h</b>	HardWare flow control (Y/N)
-<b>%i</b>	COM port IRQ line (if UART) or channel number (if Int 14h driver)
-<b>%j</b>	Data directory (example: C:\SBBS\DATA\)
-<b>%k</b>	Control directory (example: C:\SBBS\CTRL\)
-<b>%l</b>	Maximum lines per message
-<b>%m</b>	Minutes in the user's minute bank
-<b>%n</b>	Node directory (example: C:\SBBS\NODE1\)
-<b>%o</b>	Sysop's name (as specified in SCFG)
-<b>%p</b>	COM port number (0 if local node)
-<b>%q</b>	System's QWK ID (as specified in SCFG)
-<b>%r</b>	Rows on user's terminal screen
-<b>%s</b>	File specification (example: C:\FILES\*.ZIP) or current command string
-<b>%t</b>	Time (in seconds) user has left online
-<b>%u</b>	UART I/O address in hex or F=FOSSIL, B=PC BIOS, E=PS/2, D=DigiBoard
-<b>%v</b>	Synchronet version (example: 200a is Version 2.00 Revision a)
-<b>%w</b>	Timeslice API types supported (decimal bit field)
-<b>%x</b>	User's command shell (internal code)
-<b>%y</b>	COMSPEC environment variable or DOS Command Interpreter (if SBBS4OS2)
-<b>%z</b>	Text directory (example: C:\SBBS\TEXT\)
-<b>%!</b>	EXEC directory (example: C:\SBBS\EXEC\)
-<b>%#</b>	Node number (same as SBBSNNUM environment variable)
-<b>%*</b>	Node number (0 padded to 3 digits)
-<b>%$</b>	User's credits
-<b>%%</b>	Percent symbol
-<b>%&amp;</b>	Used for DCDWATCH utility
-<b>%?</b>	Platform descriptions (e.g. Win32 or Linux) <i><font color="#FF0000"><b>(v3+ Only)</b></font></i>
-<b>%1</b>	User number
-<b>%2</b>	User number (0 padded to 2 digits)
-<b>%3</b>	User number (0 padded to 3 digits)
-<b>%4</b>	etc...</pre>
-<h2><a name="Appendix_B">[18.2] - Appendix B: Synchronet (SBBS/SCFG)
-Command Line Options</a>
-
- <b><font color="#FF0000"><i>(v2 Only)</i></font></b>
-
-</h2>
-<pre>The Synchronet BBS program (SBBS.EXE or SBBS4OS2.EXE) can be run with optional
-command line switches. The switches should be separated by a space. Slash (/)
-and dash (-) are ignored, so &quot;SBBS B&quot; and &quot;SBBS /B&quot; are equivalent. Case is
-ignored, so &quot;SBBS B&quot; and &quot;SBBS b&quot; are equivalent. To list the available options
-from the DOS command line, you may type &quot;SBBS ?&quot;. Here is a list of available
-switches:
-
-<b>B</b>	Use BIOS for video instead of direct screen writes
-	- Older multitasking software may require this switch
-<b>M</b>	Modem debug output
-	- This switch is helpful in solving problems with modem initialization
-<b>Q</b>	Quit after one call
-	- SBBS will exit back to DOS (phone off-hook) after one user
-<b>X</b>	Quit after one call (on hook)
-	- SBBS will exit back to DOS (phone on-hook) after one user
-<b>C#</b>	Connection already established at # bps
-	- If user already connected, pass current connect rate (DCE)
-<b>E#</b>	External event in # minutes
-	- If there is a non-Synchronet event coming up, pass minutes left
-<b>F</b>	Force daily event
-        - Used to force SBBS to execute its internal daily maintenance
-<b>L</b>	Local logon only
-	- If you want Synchronet to immediately go to the local logon prompt
-<b>I</b>	Don't initialize modem
-	- If you don't want Synchronet to initialize the modem
-<b>D</b>	Force Synchronet to think DCD is high
-	- Normally only used for NULL modem connections
-<b>Zs</b>	Pass Caller-ID string on command line as 's'
-	- Used in combination with 'C#' option, normally from front-end mailer
-<b>O</b>	Execute all pending events and immediately exit
-	- Used with front-end mailers
-<b>R#</b>	Additional rioctl call
-	- This switch is for the internal use of Synchronet only (DO NOT USE)
-<b>V</b>	Version information
-	- Displays the detailed version and revision information of SBBS
-
-The Synchronet Configuration Utility (SCFG.EXE, SCFG32.EXE or SCFG4OS2.EXE)
-requires at least one command line switch (hard-coded into the included
-SBBS.BAT and SBBS.CMD files): the path to your Synchronet CTRL directory
-(e.g. &quot;SCFG ..\CTRL&quot;). While no other command line options are normally needed,
-the following command line options may be specified:
-
-<b>/M</b>	Show free memory in upper right corner
-	- Show available memory instead of current time (n/a in SCFG4OS2.EXE)
-<b>/N</b>	Don't use EMS for overlay caching
-	- Don't use Expanded Memory if detected (only in SCFG.EXE)
-<b>/S</b>	Don't check directories
-	- Don't create directories on the disk(s) if they don't exist
-<b>/F</b>	Force save of config files
-	- Used by the Synchronet INSTALL program
-<b>/U</b>	Update all message base status headers
-	- Forces the update of SMB headers to match current config
-<b>/H</b>	Don't update message base status headers
-	- Don't attempt to update SMB headers to match config (if changed)
-<b>/T#</b>	Set supported time slice APIs to # 
-	- 0=DV if detected(default), 1=Int28, 2=WinOS2, 4=NoDV (SCFG.EXE only)
-<b>/B#</b>	Set automatic back-up level
-	- Set number of back-up files (*.CN# files) to keep (default=3 max=10)</pre>
-<h2><a name="Appendix_C">[18.3] - Appendix C: SBBS Environment Variables</a>
-
-</h2>
-<pre>During operation, Synchronet may write to several different environment
-variables which can be utilized by other programs.  Some of these environment
-variables are also used by the utility programs that are included with
-Synchronet as well as third party programs written for Synchronet.  Following
-is a list of environment variables and a brief explanation of them:
-
-<b>SBBSCTRL</b>	This variable contains the path of the Synchronet CTRL
-		directory.  This variable is NOT set by (and not required to
-		run) SBBS, it must be set manually prior to running any
-		programs which require it (the Synchronet NODE utility, for
-		example).
-
-<b>SBBSNODE</b>	This environment variable contains the path of the node
-		directory of the current node. This variable is set by
-		SBBS at the time it is executed. Some off-line utilities
-		may require this environment variable be set during boot-up
-		(AUTOEXEC.BAT), in which case it should point to your NODE1
-		directory. SBBS.EXE will automatically reset this variable
-		to point to the current node directory, for any online programs
-		it may execute.
-
-<b>SBBSNNUM</b>	This variable contains the NUMBER of the active node.  This
-		variable is set by SBBS at the time it is executed.
-
-<b>SBBSFILENAME</b>	This variable contains the NAME of the file currently being
-		processed (up to 12 characters including '.', not padded with
-		spaces).  This variable is set by Synchronet during 'Testable
-		Filetype' events. The same information is written to the file
-		SBBSFILE.NAM in the current node directory.
-
-		NOTE: Upon returning from a 'Testable Filetype' event,
-		      Synchronet will read in information contained in the
-		      file SBBSFILE.NAM located in the current node directory
-		      to determine if the filename has changed during the
-		      testing process.
-
-<b>SBBSFILEDESC</b>	This variable contains the ONE LINE DESCRIPTION of the file
-		currently being processed (up to 58 characters).  This variable
-		is set by Synchronet during 'Testable Filetype' events. The
-		same information is written to the file SBBSFILE.DES in the
-		current node directory.
-
-		NOTE: Upon returning from a 'Testable Filetype' event,
-		      Synchronet will read in information contained in the
-		      file SBBSFILE.DES located in the current node directory
-		      to determine if the file description has changed during
-		      the testing process.
-
-<b>DSZLOG</b>		This variable is automatically set by Synchronet to point to
-		the file PROTOCOL.LOG in the current node directory. If a
-		transfer protocol has been configured (in SCFG) to support
-		DSZLOG, then this log file will be read in by Synchronet after
-		the transfer is complete, to determine which files were
-		successfully transferred and which files were not.</pre>
-<h2><a name="Appendix_D">[18.4] - Appendix D: Wait for Call Status
-Display</a>
-
- <b><font color="#FF0000"><i>(v2 Only)</i></font></b>
-
-</h2>
-<pre><b>Example:</b></pre>
-<table border="0" cellpadding="3" cellspacing="3" width="70%" bgcolor="#000000">
-  <tr>
-    <td width="100%">
-      <pre><font color="#00FF00">Node #: 5   Mar 11  Space: 162,024k    Laston: Digital Man 14400
-Logons: 23/103	    Total: 62,610      Timeon: 322/2430    Total: 5,321,900
-Emails: 4/265	    Posts: 4/12811     Fbacks: 2/17	   Users: 1/592
-Uloads: 324k	    Files: 1/2195      Dloads: 9,308k	   Files: 52</font></pre>
-    </td>
-  </tr>
-</table>
-<pre>This status screen will be shown when the node is waiting for call if the
-sysop (User #1) has EXPERT mode turned ON and this node has Status Screen While
-WFC set to Yes in SCFG-&gt;Nodes-&gt;Node #-&gt;Toggle Options.
-
-The first line has the current node number, the current month and day,
-the amount of free disk space on the drive where the TEMP directory is located
-(should be on the drive where the majority of uploads are received), the
-user who was last on this node and with what type of connection.
-
-The second line has the number of logons today for this node/system, the
-total logons for history of the system, the time spent on today (in minutes) for
-this node/system and total time spent on for history of the system.
-
-The third line contains the number of E-mails sent today on the system/total
-E-mails currently waiting on the system, total number of Posts made on the
-system today/total posts in all sub-boards, number of feedbacks (E-mail to #1)
-sent today/total E-mail waiting for User #1, number of New Users today/total
-user slots on the system.
-
-The fourth line has the amount of uploads to the system today (in Kilobytes),
-number of files uploaded/total files in all directories, amount of downloads
-today (in Kilobytes) and total files downloaded today.
-
-If there are any active nodes or nodes with a critical error count, the status
-of those nodes will be displayed below the above statistical information.</pre>
-<h2><a name="Appendix_E">[18.5] - Appendix E: Node Status Display</a>
-
-</h2>
-<pre>Anywhere within Synchronet, you can list the users currently online with the
-Ctrl-U command.
-
-From the Main, Transfer, Multinode Chat, or Private Chat sections you can list
-the current status of all the nodes with the '/L' command.
-
-You can display the status of all nodes from the DOS command line (or batch
-file) with the NODE utility.
-
-If the WFC Status Screen is enabled, the status of all active nodes is
-displayed.
-
-<b>Node Status Line:</b>
-
-The format of each node status line is as follows:
-        
-Node n: username action connection (flags) [sysflags]
-
-Where:
-	 n = node number
-  username = user's name
-    action = what the user is currently doing
-connection = how the user is connected (bps rate if remote)
-     flags = letters representing special modes of the node:
-		A - Activity Alert Disabled:
-		    User of this node will not be notified of
-		    other users logging on or off other nodes.
-		L - Node is locked for sysop use:
-		    Node is temporarily reserved for sysop
-		    use only.
-		M - Message waiting for node:
-		    An unreceived node-to-node message is
-		    waiting for this node.
-		P - Page disabled:
-		    User of this node does not wish to allow
-		    users of other nodes to page him for chat
-		    or send him node-to-node messages.
-
-  sysflags = modes that are sysop settable/viewable only:
-		A - Anonymous:
-		    User on this node is in anonymous mode.
-		D - Down:
-		    This node will be shutdown as soon as possible.
-		E - Event:
-		    This node will run it's daily event (if one
-		    is specified) before waiting for another
-		    call.
-		I - Node will be interrupted:
-		    Node connection will be terminated as soon
-		    as possible.
-		Q - Quiet:
-		    User on this node is in quiet mode.
-		R - Rerun:
-		    This node will Rerun when user logs off.
-		U - User data update:
-		    This user's data has been modified by
-		    another node and needs to be read from
-		    disk.
-
-If the node is not in use, the possible status are:
-	Offline: Node is not currently running Synchronet
-	Waiting for Call: Node is waiting for a call.
-	Networking: Node is currently executing network functions.
-	New User Logging On: A user is logging on as new.
-	Waiting for all nodes to become inactive.
-	Running external event.
-	Waiting for node # to finish external event.</pre>
-<h2><a name="Appendix_F">[18.6] - Appendix F: Log File Line Type
-Specifiers</a>
-
-</h2>
-<pre>Each line in the daily caller log has a line type specifier (the first 2
-characters). The specifiers and their descriptions follow:
-
-!! Critical error
-!* User auto-deleted
-!% User expired
-!= New day for statistics
-!: Ran event
-@  Modem connection established
-@- Modem connection terminated
-@! Modem error
-@* Caller-ID information
-@R RIP support detected
-@W WIP support detected
-++ Logon
-+! Logon error
-N  New user begins application
-N+ New user finishes application
-N! New user fails application
-S+ Sysop enabling function
-S- Sysop disabling function
-S! Sysop security error
-P+ Posted message
-P- Removed message
-P! Posting error
-E  Read E-mail
-E- Deleted E-mail
-E+ Sent E-mail
-EN Sent NetMail
-E! E-mail error
-C  Chat function
-U+ Upload
-U- Removed Upload
-U! Attempted upload
-D- Download
-D! Attempted download
-X- External program execution
-T- Read text file
-M+ Moved message
-Q! QWK error
-L! Log already exists (possible crash)
-$+ Gained credits
-$- Lost credits
-*+ Gained minutes
-*- Lost minutes
-
-To view today's caller log, hit 'L' from the WFC screen or &quot;;LOG&quot; from the
-main menu. Yesterday's caller log can be viewed by hitting 'Y' at the WFC
-screen, or &quot;;YLOG&quot; from the main menu. The log files are stored in the
-DATA\LOGS directory with a file for each day named in the format: MMDDYY.LOG.</pre>
-<h2><a name="Appendix_G">[18.7] - Appendix G: File Formats</a>
-
-</h2>
-<pre>XTRN.DAT
-
-	This is the drop file that Synchronet creates for Synchronet specific
-        external programs. It is an ASCII text file with the format as follows:
-
-<b>Sample Data                             Description</b>
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Digital Man                             User name
-Vertrauen                               System name
-digital man                             System operator
-The Guru                                System guru
-..\CTRL\                                CTRL directory
-..\DATA\                                DATA directory
-5                                       Total nodes on system
-5                                       Current node number
-19448					Time left online (in seconds)
-Yes                                     ANSI ? (Yes/No/Mono)
-24                                      Lines per screen
-10770335                                Credits
-99					Security Level
-					-unused-
-12/31/69                                Birthdate
-M					Sex (Gender)
-1                                       User number
-714-529-9525                            User phone number
-0                                       COM port (0 if no modem or local)
-3					COM port IRQ (or channel number)   [1]
-2f8					COM port I/O address (in hex)	   [2]
-2400                                    COM port DTE rate
-No                                      Modem uses hardware flow ctrl (Y/N)
-No                                      Modem locked at DTE rate (Y/N)
-ATQ0V0E0M1X4&amp;C1&amp;D2H0                    Modem initialization string
-                                        Modem special init string
-ATV1E1X4                                Modem terminal mode init string
-ATDT                                    Modem dial prefix
-ATH1M0                                  Modem off-hook string
-ATA                                     Modem answer string
-795154132                               Address of Modem Status Register
-11                                      Number of External Programs
-Global War                              Names of External Programs (or blank
-Trade Wars 2002                                 if user doesn't have access)
-Food Fight!
-Pit Fiend ][
-Dice War
-Synchronet Blackjack!
-Domain Poker
-Phantasia
-Emperor
-Synchronet Upgrade Door
-Credit Card Order Door
-AB D F	 J				User's Flags #1
- BC   G  JK N				User's Flags #2
-A          L       T                    User's Exemptions
-    D                                   User's Restrictions
-2b43cfd0                                Expiration Date (Unix format in hex)
-PO Box 501				User's Address
-Yorba Linda, Ca 			User's Location
-92686					User's Zip/Postal Code
-A   E					User's Flags #3
- B  EFG 				User's Flags #4
-1					Timeslice API types
-Rob Swindell				User's real name or company name
-14400					User's DCE rate
-..\EXEC\				EXEC directory (BBS executable files)
-..\TEXT\				TEXT directory (TEXT files)
-TEMP\					TEMP directory
-VERT					System's QWK ID
-22C8					Node toggle options (in hex)
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-[1]: IRQ line if UART COM port type or Channel (zero based) if Int 14h type
-[2]: I/O base address if UART COM port type or:
-
-	F = FOSSIL
-	B = PC BIOS
-	E = PS/2 BIOS
-	D = DigiBoard
-
-</pre>
-<pre>MODUSER.DAT
-
-        This is an optional file created by external programs to modify the
-        data of the current user. It is an ASCII text file with the format:
-
-<b>Sample Data                             Description</b>
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
--500                                    Credit Adjustment
-60					Security Level
-					-unused-
-AB  E	I				Flags #1 to add
-      G 				Flags #2 to add
-A	       P   T			Exemptions to add
-					Restrictions to add
-2b43cfd0                                Expiration Date (Unix format in hex)
-0					Add these number of minutes to bank
-			   XYZ		Flags #3 to add
-		       TUV		Flags #4 to add
-	 J				Flags #1 to remove
-	   L				Flags #2 to remove
-					Flags #3 to remove
-					Flags #4 to remove
-   D					Exemptions to remove
-A					Restrictions to remove
-
-        If any of the lines in the file are blank, that user item is not
-	modified. The security level cannot exceed 89.
-
-
-NOTE: Technical specifications and C source code for Synchronet configuration
-      and data files can be downloaded from our BBS.</pre>
-<p><a href="#top"><b>Back to Top</b></a></p>
-
-<!--webbot bot="Include" U-Include="_borders/bottom.htm" TAG="BODY" startspan -->
-
-<hr>
-<p><b><a href="http://www.synchro.net/copyright.html">Copyright</a> � 2000 by </b> <a href="http://www.synchro.net/author.htm"><b>Rob Swindell</b><br>
-</a>
-
-<a href="http://www.synchro.net"><font size="2"><br>
-Synchronet BBS Software</font></a>  <font size="2">  (Synchronet)
-Version 3 is comprised of several documentation,<br>
-library, executable, and <a href="http://www.synchro.net/source.html">source code</a> 
-files, all of which are covered by the<a href="http://www.fsf.org/copyleft/gpl.html">
-<br>
-GNU General Public License</a>  with the exception of the following portions
-covered by<br>
-the <a href="http://www.fsf.org/copyleft/lesser.html">GNU Lesser General Public License</a>:
-SMBLIB and XSDK.<br>
-<br>
-Synchronet Version 2 (for DOS and OS/2) and its source code was released to the<a href="http://www.fsf.org/philosophy/categories.html#PublicDomainSoftware">
-<br>
-Public Domain</a>  by <a href="ftp://vert.synchro.net/main/sbbs/manifest.txt">Digital Dynamics</a> 
-in 1997 and remains Public Domain software today.<br>
-Synchronet Version 3 is not Public Domain software.</font></p>
-<p align="left"><font size="2"><a href="http://www.synchro.net/author.html">Rob Swindell<br>
-</a>PO Box 501<br>Yorba Linda, CA 92885<a href="http://www.synchro.net"><br>
-http://www.synchro.net</a>
-
-</font></p>
-<p align="left"><font size="2">For the complete Copyright Information please
-read the <a href="http://www.synchro.net/copyright.html">Copyright Documentation</a>
-.</font></p>
-
-<!--webbot bot="Include" endspan i-checksum="55766" -->
-
-</body>
-
-</html>
diff --git a/docs/baja.html b/docs/baja.html
deleted file mode 100644
index 870fb412a9..0000000000
--- a/docs/baja.html
+++ /dev/null
@@ -1,3659 +0,0 @@
-
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<title>Synchronet BBS Software - Baja Documentation</title>
-</head>
-
-<body>
-<!--webbot bot="Include" U-Include="_borders/top.htm" TAG="BODY" startspan -->
-
-<a href="http://www.synchro.net"><img border="0" src="images/synclogo_fancyred.gif" alt="Synchronet BBS - Multinode Bulletin Board Software" width="626" height="86"></a>
-
-<hr>
-
-<!--webbot bot="Include" endspan i-checksum="23126" -->
-
-<h1>Synchronet Baja� Documentation
-
-</h1>
-<pre><b><a name="TOC">Table of Contents</a></b>
-
-1.  <b>Introduction to BAJA</b><a href="#Introduction">
-</a>    1.1   <a href="#Introduction">Introduction</a>
-    1.2   <a href="#SourceFiles">Source Files</a>
-    1.3   <a href="#BAJA.EXE">BAJA.EXE</a>
-    1.4   <a href="#Modules">Modules</a>
-
-2.  <b>BAJA Programming Basics
-</b> <b>   </b>2.1   <a href="#ProgrammingSyntax">Programming Syntax</a>
-    2.2   <a href="#Variables">Variables</a>
-    2.3   <a href="#Arguments">Arguments</a>
-    2.4   <a href="#CStrings">C Strings</a>
-    2.5   <a href="#IntegerConstants">Integer Constants</a>
-    2.6   <a href="#CommandKeyConstants">Command Key Constants</a>
-    2.7   <a href="#IncludeFiles">Include Files</a>
-    2.8   <a href="#MacroDefinitions">Macro Definitions</a>
-    2.9   <a href="#GlobalVariableDeclarations">Global Variable Declarations</a></pre>
-<pre>3.  <b>Programming Style and Rules
-</b>    3.1   <a href="#ProgrammingStyle">Programming Style</a>
-    3.2   <a href="#SuggestedRulesOfStyle">Suggested Rules</a></pre>
-<pre>4.  <b>BAJA Function Reference</b>
-    4.1   <a href="#FunctionDefinitions">Function Definitions</a>
-    4.2   <a href="#StringManipulationFunctions">String Manipulation</a>
-    4.3   <a href="#IntegerManipulationFunctions">Integer Manipulation</a>
-    4.4   <a href="#Logic/ControlFlowFunctions">Logic/Control Flow</a>
-    4.5   <a href="#DisplayFunctions">Display</a>
-    4.6   <a href="#InputFunctions">Input</a>
-    4.7   <a href="#MiscellaneousFunctions">Miscellaneous</a>
-    4.8   <a href="#MailFunctions">Mail</a>
-    4.9   <a href="#MessageBaseFunctions">Message Base</a>
-    4.10  <a href="#FileBaseFunctions">File Base</a>
-    4.11  <a href="#ChatFunctions">Chat</a>
-    4.12  <a href="#InformationFunctions">Information</a>
-    4.13  <a href="#FileI/OFunctions">File I/O</a>
-    4.14  <a href="#FileSystemFunctions">File System</a>
-    4.15  <a href="#DirectorySystemFunctions">Directory System</a></pre>
-<pre>5.  <b>System Variables</b><a href="#System Variables">
-</a>    5.1   <a href="#SystemVariables">System Variables</a></pre>
-<pre>6.  <b>Function Reference</b><a href="#Quick Function Reference">
-</a>    6.1   <a href="#QuickFunctionReference">Quick Function Reference</a></pre>
-<h2>[1.1] - <a name="Introduction">Introduction</a></h2>
-<pre>Baja (pronounced b�'h�) is a high-level development tool used to create
-&quot;command shells&quot; and &quot;loadable modules&quot; for Synchronet BBS software. The
-programmable command and menu structure (PCMS) technology in Synchronet version
-2 allows sysops to modify the user interface for the BBS by replacing or
-modifying command shells. Synchronet version 2.0 shipped with six stock command
-shells (Classic and Novice Synchronet shells as well as emulations of PCBoard,
-Wildcat, Major, and Renegade BBS packages). These shells can be modified,
-removed, or replaced with ease. Up to 500 shells can be made available to the
-users of the BBS with configurable security access to each shell via ARS (see
-the Synchronet Sysop manual for details on ARS).</pre>
-<pre>Synchronet loadable modules are used to extend or customize the abilities of
-the BBS. Some modules are automatically loaded during specific events (login,
-logon, logoff, etc) while others may be executed at the request of a user
-(much like a door or other internal menu option).</pre>
-<pre><b>Note:</b></pre>
-<pre>If you come across an undefined term in this document, please read through
-the document to possibly find the term defined later or used again to clarify
-its meaning by context, or see the glossary in the Synchronet sysop manual.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="SourceFiles">[1.2] - Source Files</a></h2>
-<pre>Command shells and modules begin their life as a text source file (normally
-with a .SRC extension) or group of text files (including .INC files). These
-source files (and .INC files) can be edited with any ASCII text editor (e.g.
-EDIT, QEDIT, EDLIN, etc). The contents of the text file (often referred to as
-&quot;source code&quot;) must conform to the Baja language specifications defined in this
-document. An extremely basic example of a command shell source file:</pre>
-<table border="0" cellpadding="3" cellspacing="3" width="70%" bgcolor="#CCCCCC">
-  <tr>
-    <td width="100%">
-<pre># EXAMPLE1.SRC</pre>
-<pre># Label for later &quot;goto&quot; commands
-:TOP</pre>
-<pre># Clear the screen
-CLS</pre>
-<pre># Show menu of commands
-MNEMONICS &quot;~Comment to Sysop\r\n&quot;
-MNEMONICS &quot;~Goodbye (Logoff)\r\n&quot;</pre>
-<pre># Show command prompt
-PRINT &quot;\r\nCommand: &quot;</pre>
-<pre># Get command key
-GETCMD &quot;CG&quot;</pre>
-<pre># Comment to sysop?
-COMPARE_KEY C
-IF_TRUE
-	SETSTR &quot;1&quot;
-        MAIL_SEND_FEEDBACK
-        GOTO TOP
-        END_IF</pre>
-<pre># Logoff?
-COMPARE_KEY G
-IF_TRUE
-        LOGOFF
-        GOTO TOP
-        END_IF</pre>
-    </td>
-  </tr>
-</table>
-<pre>The syntax of the above text will be explained later in this document.</pre>
-<pre>For more examples of Baja source code, please see the *.SRC files in your
-Synchronet EXEC directory.</pre>
-<pre><a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="BAJA.EXE">[1.3] - BAJA.EXE</a></h2>
-<pre>After the source file has been created, BAJA.EXE is used to compile the .SRC
-file into a binary file with a .BIN extension that Synchronet can interpret
-and execute. If the source filename is EXAMPLE1.SRC, then the command line
-would be:</pre>
-<pre>	<i>BAJA EXAMPLE1</i></pre>
-<pre>The compiler's output:</pre>
-<pre><img border="0" src="images/baja_example.gif" width="638" height="136"></pre>
-<pre>This creates the binary file EXAMPLE1.BIN.</pre>
-<pre>Warning: Do not attempt to edit, view, or print .BIN files.</pre>
-<pre>If the compile fails, an error message will be displayed with the filename that
-contains the error and the specific line number followed by a colon and the
-offending code.</pre>
-<pre>Baja source (.SRC), include (.INC), and binary (.BIN) files as well as the Baja
-program itself are normally stored in the Synchronet EXEC directory. This is
-where Synchronet loads command shells and modules from, so the .BIN files must
-be created in or copied to this directory before they can be used.</pre>
-<pre>After a command shell has been compiled, it must be added to the list of
-available command shells in SCFG (Synchronet Configuration program) to be
-available for the users to use. If using a multinode BBS, the other nodes
-must be re-run before the new command shell will be available on those nodes.</pre>
-<pre>If modifying an existing command shell, SCFG does not need to be run and nodes
-do not have to be re-run since command shell binary files are dynamically
-loaded for each logon.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="Modules">[1.4] - Modules</a></h2>
-<pre>Baja modules are very similar to command shells with the main difference being
-that they are not automatically loaded upon logon as command shells are
-(with the exception of login and logon modules). Instead, modules must be
-loaded from a command shell with the EXEC_BIN function described later in
-this document or launched as an external program or event configured in SCFG.
-Binary module files, like command shell binaries, must be located in the
-Synchronet EXEC directory.</pre>
-<pre>Modules can be used to consolidate identical portions of multiple command
-shells into one binary that can be loaded from each command shell so that if a
-modification needs to be made to that portion, then only one source file needs
-to be modified and recompiled as opposed to making the same change to every
-command shell and recompiling them all. An example of this use is the STR_CMDS
-(string commands) module that is launched from multiple command shells.</pre>
-<pre>Another use for modules is for third-party add-ons. Rather than distributing
-Baja source that must be merged into command shell source by sysops, developers
-can distribute module binaries that can be loaded directly from a command
-shell with a very small modification to the existing shells.</pre>
-<pre>To load a Baja module in place of a DOS executable in SCFG, prepend an asterisk
-(*) to the name of the module (e.g. &quot;*MYMOD&quot;) for the command line. If an
-argument is included on the command line (e.g. &quot;*MYMOD %A&quot;) the contents
-will be automatically placed into the current command string for possible use
-by the module or functions there in.</pre>
-<pre>To load a Baja module while displaying a message, menu file, or TEXT.DAT line
-(excluding lines containing % variables) use &quot;@EXEC:MYMOD@&quot;, were MYMOD is the
-name of the module to execute. This is useful for executing modules in places
-where they cannot normally be loaded by event or command line. @-codes are
-only expanded in posts and e-mail if posted locally by user #1 (the sysop).
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="ProgrammingSyntax">[2.1] - Programming Syntax</a></h2>
-<pre><b>Basics:</b>
-        Execution always begins at the top of the source code and continues
-	downward until a function is executed which changes the flow of
-	execution. Only one function is allowed per line. The total length of
-	each line cannot exceed 1000 characters.</pre>
-<pre><b>Whitespace:</b>
-        All whitespace (TAB and SPACE characters) at the beginning of each line
-        are ignored. The first printable character of a line is considered
-        the first character. Completely blank lines are ignored.</pre>
-<pre><b>Comments:
-</b>        If the first character of a line is the pound symbol (#), the
-        line is ignored. These are normally used for text comments (remarks)
-	about the following source code line(s). Comments may be included on
-	the same lines as some (not all) functions, but in general it is
-	considered best to keep comments on their own lines as to not interfere
-	with proper Baja syntax. Comments are more easily read if there is a
-	space after the pound symbol (#) and before the comment text begins.</pre>
-<pre><b>Labels:
-</b>        If the first printable character of a line is a colon (:), the line is
-	considered a label to be used for the GOTO or CALL functions. Labels
-        are not case sensitive. There should be no space between the colon and
-	the name of the label. Label names may not contain spaces. Duplicate
-	label names within the same module or shell are disallowed.</pre>
-<pre><b>Case Sensitivity:
-</b>	Most elements of Baja syntax are not case sensitive (where upper or
-	lower case is significant). Functions, and variable names (for example)
-	are not case sensitive. Character constants ('A' for example) are case
-	sensitive.</pre>
-<pre><a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="Variables">[2.2] - Variables:</a></h2>
-<pre>        Variable names are not case sensitive and must begin with an alphabetic
-        character or an underscore (_). Variable names can be any length and
-	may contain alpha, numeric, and underscore characters only. The
-	variable name &quot;str&quot; is reserved to represent the current command string
-	and should not be used as a user defined variable name.</pre>
-<pre>	When referencing a variable name defined by the system or another
-	module (global), the &quot;!GLOBAL&quot; compiler directive must be used to
-	declare the variable or the compiler will not recognize the variable
-	name and exit with a syntax error. Global variable declarations should
-	appear near the top of your source file.</pre>
-<pre>	Baja modules that use variables require SBBS v2.2 or later.</pre>
-<h2>	<a name="Arguments">[2.3] - Arguments:</a></h2>
-<pre>	When a function requires one or more arguments, there must some amount
-	of white space between the function name and each argument.</pre>
-<pre>	In function definitions (in this document), required arguments are
-	listed in angled brackets (&lt; &gt;) and optional arguments are listed in
-	square brackets ([ ]). The actual bracket symbols are NOT used in the
-	source code. They are strictly for documentary purposes.</pre>
-<pre>	When a string variable argument is specified in the definition of a
-	function, any string variable name (either local or global) may be
-	used. If str is used in the source code as the string variable name,
-	the current command string will be used in place of an actual
-	user or system string variable.</pre>
-<pre>	An argument of # (pound sign) indicates an integer constant. The actual
-	pound sign is not used in the argument. See the section on Integer
-	Constants for more details.</pre>
-<pre>	An argument of &quot;str&quot; (with double quotes) indicates a string constant
-	argument enclosed in double quotation marks. To place a double
-	quotation mark inside a string constant (as part of the actual string
-	constant), use \&quot; instead of just &quot; where you want the quotation mark
-	to appear in the string.</pre>
-<pre>	An argument of &quot;cstr&quot; (with double quotes) indicates a C string
-	constant argument enclosed in double quotation marks. See the next
-	section on C strings for the definition of the contents.</pre>
-<pre>	See the beginning of the Functions section for the complete definition
-	of all argument types and how they're specified in function
-	definitions.</pre>
-<h2>	<a name="CStrings">[2.4] - C Strings:</a></h2>
-<pre>	Some character string arguments are defined as being C type (cstr).
-	This indicates the contents of the string use the same special/control
-	character escape sequences as defined for the printf() function in the
-	ANSI definition of the C programming language. The only exception to
-	the ANSI definition, is that \### defines a character value in decimal
-	(base 10), not octal (base 8). All escape sequences begin with the
-	backslash (\) character. The valid escape sequences are:</pre>
-<pre>        \\      Backslash
-        \?      Question mark
-        \'      Single quote
-        \&quot;      Double quote
-        \r      Carriage return
-        \n      Line feed
-        \t      Horizontal tab
-        \b      Backspace
-        \a      Bell
-        \f      Formfeed
-        \v      Vertical tab
-        \###    Character value in decimal
-        \x##    Character value in hexadecimal</pre>
-<pre>	The text string must be enclosed in double quote (&quot;) symbols. Example:</pre>
-<pre>		&quot;Hello, world.\r\n&quot;</pre>
-<pre>	To include an actual back-slash (\) character in a C string, you must
-	prefix the back-slash with another back-slash. Example:</pre>
-<pre>		&quot;C:\README.TXT&quot;</pre>
-<pre>	would be an invalid path and filename.</pre>
-<pre>		&quot;C:\\README.TXT&quot;</pre>
-<pre>	would be the correct C string to represent <a href="file:///C:/README.TXT">C:\README.TXT</a>.</pre>
-<h2>	<a name="IntegerConstants">[2.5] - Integer Constants:</a></h2>
-<pre>	Many functions allow or require the use of integer constants (as
-	opposed to integer variables). An integer constant is a number that is
-	&quot;hard-coded&quot; into the resulting executable file and will remain
-	constant (never change) from that point on.</pre>
-<pre>	You can specify integer constants in many ways:</pre>
-<pre>	Representation		Range				Examples
-	--------------		-----				--------
-	Decimal (base 10)	-2147483648 to 2147483647	0, 10, -25
-	Hexadecimal (base 16)	0x0 to 0xffffffff		0x7f, 0xA69B
-	Octal (base 8)		00 to 037777777777		0377, 0505
-	Bit value		.0 to .31			.0, .1, .15
-	ASCII value		' ' to '�'                      'A', ' ', '%'
-	Special char		'\r' to '\v' (see C Strings)    '\r', '\n'</pre>
-<pre>	Constants can be modified during specification (no variables may be
-	used in the modification). No space is allowed between the numeric
-	constant and the modifier symbol. Valid modifiers:</pre>
-<pre>	Symbol			Operation			Example
-	------			---------			-------
-	+			Addition			10+2
-	-			Subtraction			20-8
-	*			Multiplication			4*3
-	/			Division			36/3
-	%			Modulus (remainder)		53%8
-	&amp;			Bit-wise AND			695&amp;0x1f
-	|			Bit-wise OR			0x10|8
-	~			Bit-wise NOT			~3
-	^			Bit-wise XOR (exclusive OR)	0xff^12
-	&gt;&gt;			Right shift			03700&gt;&gt;4
-	&lt;&lt;			Left shift			255&lt;&lt;2</pre>
-<h2>	<a name="CommandKeyConstants">[2.6] - Command Key Constants:</a></h2>
-<pre>	Some functions require the use of a command key constant. A command key
-	constant is a keyword or symbol representing a valid command selected
-	by a user.</pre>
-<pre>	The simplest way to specify a command key constant, is to simply
-	type the key that you wish to use for a specific command. Example:</pre>
-<pre>		CMDKEY A</pre>
-<pre>	Would use the 'A' key for the command key constant. Simply specifying
-	a letter does not indicate case sensitive (i.e. the above example
-	could have been &quot;CMDKEY a&quot; with the same results). </pre>
-<pre>	To specify a specific case (upper or lower), you must prefix the
-	command key with a single quote symbol ('). Example:</pre>
-<pre>		CMDKEY 'a
-
-	To specify a control character (like Ctrl-H, which is a backspace),
-	you must prefix the control character (in upper case) with a caret
-	(^) symbol. Example:</pre>
-<pre>		CMDKEY ^H</pre>
-<pre>	Valid control character specifications:</pre>
-<pre>		^A	Attribute/color code (internal line editor)
-		^B	Beginning of line (internal line editor)
-		^C	Abort
-		^D	Delete word right (internal line editor)
-		^E	End of line (internal line editor)
-		^F	Forward cursor (Right arrow key)
-		^G	Beep
-		^H	Backspace
-		^I	Tab
-		^J	Line feed (Down arrow key)
-		^K	Ctrl-key help menu
-		^L	Form feed (Clear screen)
-		^M	Carriage return (Enter key)
-		^N	Next word (internal line editor)
-		^O	Temp pause toggle
-		^P	Private message
-		^Q	Un-pause
-		^R	Redraw line (internal line editor)
-		^S	Pause
-		^T	Time info
-		^U	List users online
-		^V	Center line (internal line editor)
-		^W	Delete word left (internal line editor)
-		^X	Delete line (internal line editor)
-		^Y	Delete to end-of line (internal line editor)
-		^Z	Raw input mode toggle
-		^]	Back cursor (Left arrow key)
-		^[	Escape (Esc key)
-		^^	Up cursor (Up arrow key)</pre>
-<pre>	You may also specify special control characters (carriage return,
-	form feed, etc) be prepending a backslash (i.e. \r, \f, etc). See the
-	section on C strings for details.
-
-	Some command key input functions allow the use of slash-commands
-	(command keys prepended with a slash character, i.e. /A). The two
-	character slash-commands are the only multi-character commands
-	supported by command key functions. Example:</pre>
-<pre>		CMDKEYE /A</pre>
-<pre>	Is valid, but:</pre>
-<pre>		CMDKEYE -A</pre>
-<pre>	Is not valid.</pre>
-<pre>	To test specifically for digit (0-9) command keys and slash-digit
-	command keys (/0-/9), use DIGIT and EDIGIT respectively. Example:</pre>
-<pre>		CMDKEYE DIGIT</pre>
-<pre>	To test if the user hit a key from 0 to 9, or:</pre>
-<pre>		CMDKEYE EDIGIT</pre>
-<pre>	To test if the user hit a slash-key combination from /0 to /9.</pre>
-<pre>	You may, of course, also test for a specific digit command key:</pre>
-<pre>		CMDKEYE 1
-	and
-		CMDKEYE /1</pre>
-<pre>	are both valid command key constants.</pre>
-<pre>	To specify # for a command key, use '# (otherwise # will be interpreted
-	as the beginning of a comment).</pre>
-<pre>	To specify SPACE bar for the command key, use ' ', example:</pre>
-<pre>		CMDKEY ' '</pre>
-<pre>	Extended ASCII characters (� for example) are not valid command keys.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2>	<a name="IncludeFiles">[2.7] - Include Files</a></h2>
-<pre>Source code segments that are to be shared among multiple command shells or
-modules can be placed into a separate text file (preferably with a .INC
-extension) and included in the source code for multiple modules by using the
-&quot;!INCLUDE&quot; compiler directive to specify the filename to include. Example:</pre>
-<pre>!INCLUDE MYDEFS.INC</pre>
-<pre>This is useful when including files supplied by Digital Dynamics or third
-party developers to pre-define constants (macros), common sub-routines, or
-variable definitions. The following include files are distributed with Baja
-(and should not be modified):</pre>
-<pre>ERRNO.INC	Definitions for possible values of _ERRNO system variable
-FILE_IO.INC	Constants for use with file I/O functions
-DIR_ATTR.INC	Constants for use with SET_FILE_ATTR &amp; GET_FILE_ATTR functions
-USERDEFS.INC	Synchronet User constants for use with various functions
-NODEDEFS.INC	Synchronet Node constants for use with various functions
-SBBSDEFS.INC	Synchronet system variable declarations and constants
-		(automatically includes USERDEFS.INC and NODEDEFS.INC)</pre>
-<pre>Take care not to include the same file more than once in the same source code.
-It is suggested you put all of your !include statements near the top of your
-source file. If you include a file that in-turn includes other files
-(SBBSDEFS.INC, for example, includes USERDEFS.INC and NODEDEFS.INC), you
-do not need to include the other files. If you !include SBBSDEFS.INC, you
-DO NOT need to !incluce NODEDEFS.INC and USERDEFS.INC as well. Take care not
-to nest include files too deeply or the compilation will fail.</pre>
-<pre>This compiler directive is very similar to the &quot;#include&quot; directive used by
-C compilers, but if a specific path is not specified, only the current
-directory will be searched for the file to include.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="MacroDefinitions">[2.8] - Macro Definitions</a></h2>
-<pre>Commonly used character strings and integer constants can be specified as
-macros by using the &quot;!DEFINE&quot; compiler directive to specify the macro name to
-use and the value of the macro. Example:</pre>
-<pre>!DEFINE MAXIMUM_USERS 250</pre>
-<pre>Now, any place you might want to use the number 250 in your Baja source, you
-can use the macro &quot;MAXIMUM_USERS&quot; instead. This makes changing the value of
-the numeric or character string constant very easy.</pre>
-<pre>This compiler directive is very similar to the &quot;#define&quot; directive used by
-C compilers with the main exception being that the macro name is not case
-sensitive.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="GlobalVariableDeclarations">[2.9] - Global Variable Declarations</a></h2>
-<pre>When using variables defined by the system (see System Variables) or another
-shell or module (see GLOBAL_STR and GLOBAL_INT functions), you must first
-declare these variables using the &quot;!GLOBAL&quot; compiler directive. Example:</pre>
-<pre>!GLOBAL SOME_GLOBAL_VAR</pre>
-<pre>Multiple global variables may be declared with one !GLOBAL statement:</pre>
-<pre>!GLOBAL SOME_GLOBAL_VAR ANOTHER_GLOBAL_VAR</pre>
-<pre>If you attempt to use a global variable without first declaring it, the
-compiler will fail to compile the source with an &quot;expected variable name&quot;
-syntax error message.</pre>
-<pre>This compiler directive is very similar to the &quot;extern&quot; keyword used by C
-compilers.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="ProgrammingStyle">[3.1] - Programming Style</a></h2>
-<pre>As stated in the previous section, white space characters at the beginning
-of a line are ignored and have no effect on the resulting compilation. But,
-whitespace can be very useful in making the source code readable by indenting
-conditional blocks of code, and using blank lines to separate blocks of
-related code. Comments are also very helpful in making the code readable.</pre>
-<pre>Compare the following source to the example given in the Source Files chapter:</pre>
-<table border="0" cellpadding="3" cellspacing="3" width="70%" bgcolor="#CCCCCC">
-  <tr>
-    <td width="100%">
-      <pre>:TOP
-CLS
-MNEMONICS &quot;~Comment to Sysop\r\n&quot;
-MNEMONICS &quot;~Goodbye (Logoff)\r\n&quot;
-PRINT &quot;\r\nCommand: &quot;
-GETCMD &quot;CG&quot;
-COMPARE_KEY C
-IF_TRUE
-SETSTR &quot;1&quot;
-MAIL_SEND_FEEDBACK
-GOTO TOP
-END_IF
-COMPARE_KEY G
-IF_TRUE
-LOGOFF
-GOTO TOP
-END_IF</pre>
-    </td>
-  </tr>
-</table>
-<pre>Without the whitespace and the comments, the code appears much more cryptic
-(the control flow is hard to follow). But the code will compile into exactly
-the same binary file as the earlier example.
-
-Consider this more elaborate example using indentation only:</pre>
-<pre><b><i>With indentation:</i></b></pre>
-<table border="0" cellpadding="3" cellspacing="3" width="70%" bgcolor="#CCCCCC">
-  <tr>
-    <td width="100%">
-      <pre>COMPARE_ARS FILE_CMDS=0
-IF_TRUE
-	COMPARE_USER_MISC UM_ASK_NSCAN
-        IF_TRUE
-                YES_NO &quot;\r\n\r\nSearch all libraries for new files&quot;
-                IF_TRUE
-                        FILE_NEW_SCAN_ALL
-                        END_IF
-                END_IF
-        END_IF</pre>
-    </td>
-  </tr>
-</table>
-<pre><b><i>Without indentation:</i></b></pre>
-<table border="0" cellpadding="3" cellspacing="3" width="70%" bgcolor="#CCCCCC">
-  <tr>
-    <td width="100%">
-      <pre>COMPARE_ARS FILE_CMDS=0
-IF_TRUE
-COMPARE_USER_MISC UM_ASK_NSCAN
-IF_TRUE
-YES_NO &quot;\r\n\r\nSearch all libraries for new files&quot;
-IF_TRUE
-FILE_NEW_SCAN_ALL
-END_IF
-END_IF
-END_IF</pre>
-    </td>
-  </tr>
-</table>
-<pre>As you can see without the indentation, you can get lost in nested IF
-statements trying to understand how the code will execute.</pre>
-<pre>While you may have known quite well what you intended to accomplish and how
-you expected the code to execute at the time of writing it, it would be much
-harder to understand how the code was expected to execute at a later date
-(or by another person) if a consistent indentation style was not used.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="SuggestedRulesOfStyle">[3.2] - Suggested Rules of Style</a></h2>
-<pre>There isn't a &quot;right&quot; or &quot;wrong&quot; way to use indentation, blank lines,
-or comments, but we will present a set of suggested &quot;rules&quot; here. If you decide
-you prefer another style, that is fine. The most important thing is that you
-are consistent in your use of whatever style you choose.</pre>
-<pre><b>Top of File Comments</b></pre>
-<pre>Place a comment as the very first line of the file with the name of the .SRC
-file. Example:</pre>
-<pre># EXAMPLE.SRC</pre>
-<pre>Then a block of comment lines that describe what the shell or module's purpose
-is, who programmed it, when, where, etc.</pre>
-<pre><b>Label Comments</b></pre>
-<pre>Labels normally represent the beginning of a sub-routine and should be
-well commented. A graphical line to show the beginning of a new sub-routine
-is often helpful. Example:</pre>
-<table border="0" cellpadding="3" cellspacing="3" width="70%" bgcolor="#CCCCCC">
-  <tr>
-    <td width="100%">
-      <pre>############################### My Sub-routine ################################
-:MY-SUB</pre>
-    </td>
-  </tr>
-</table>
-<pre><b>CMD_HOME Comments</b>
-
-The CMD_HOME function marks the beginning of a command/menu loop and should
-be well commented. Example:</pre>
-<table border="0" cellpadding="3" cellspacing="3" width="70%" bgcolor="#CCCCCC">
-  <tr>
-    <td width="100%">
-      <pre>#############
-# MAIN MENU #
-#############
-CMD_HOME</pre>
-    </td>
-  </tr>
-</table>
-<pre><b>Conditional Indentation
-</b>
-Whenever a block of code is conditionally executed (only executed under
-specific conditions), the block of code should be indented one tabstop past
-the block header (IF_TRUE, IF_FALSE, ELSE, SWITCH, CASE, CMDKEY, CMDSTR, etc).
-The block of code to be indented includes the block terminator (END_IF,
-END_CMD, END_CASE, END_SWITCH, etc). Example:</pre>
-<table border="0" cellpadding="3" cellspacing="3" width="70%" bgcolor="#CCCCCC">
-  <tr>
-    <td width="100%">
-<pre>GETCMD &quot;ABCD&quot;</pre>
-<pre>CMDKEY A
-        COMPARE_ARS LEVEL 50
-        IF_TRUE
-                PRINT &quot;You have level 50 or higher.\r\n&quot;
-        ELSE
-                PRINT &quot;You have level 49 or lower.\r\n&quot;
-                END_IF
-        END_CMD</pre>
-    </td>
-  </tr>
-</table>
-<pre><b>Separate Code Blocks</b></pre>
-<pre>Use blank lines to separate medium to large code blocks from other code
-(most especially CMDKEY, CMDKEYS, CMDSTR, and SWITCH code blocks). Example:</pre>
-<table border="0" cellpadding="3" cellspacing="3" width="70%" bgcolor="#CCCCCC">
-  <tr>
-    <td width="100%">
-<pre>GETCMD &quot;ABCD&quot;</pre>
-<pre>CMDKEY A
-        PRINT &quot;You hit A.\r\n&quot;
-        END_CMD</pre>
-<pre>CMDKEY B
-        PRINT &quot;You hit B.\r\n&quot;
-        END_CMD</pre>
-    </td>
-  </tr>
-</table>
-<pre><b>End of File Comment
-</b>
-Place a comment at the end of the file. Example:</pre>
-<pre># End of EXAMPLE.SRC
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="FunctionDefinitions">[4.1] - Function Definitions</a></h2>
-<pre>The remainder of this document is for defining the correct use of all Baja
-functions. If you wish to look up a specific function by subject, please refer
-to the table of contents or the quick reference at the end of the document.</pre>
-<pre><b>Argument Types</b></pre>
-<pre>Each function definition will begin with the name of the function followed by
-all possible arguments (parameters) and the type of each argument. The possible
-argument types are:</pre>
-<pre><b>Type		Description</b>
-
-&quot;str&quot;           String constant (contained in double quotes)
-&quot;cstr&quot;          C string constant (contained in double quotes)
-txt		String constant (no quotes)
-#		Integer constant (the # symbol is not part of the syntax)
-str_var 	String variable name or 'str' for current command string
-int_var 	Integer variable name
-any_var 	Any string or integer variable name
-char		Character constant (single character, no quotes)
-key		Command key constant
-keylist 	List of command key constants (no space between each key)</pre>
-<pre>Each argument type is contained in either angled brackets (&lt; and &gt;) to indicate
-the argument is required, or square brackets ([ and ]) to indicate the
-argument is optional. An argument of [...] indicates a variable number of
-optional arguments of the last specified type. Example:</pre>
-<pre>	SPRINTF &lt;str_var&gt; &lt;&quot;cstr&quot;&gt; &lt;any_var&gt; [any_var] [...]</pre>
-<pre>This function definition indicates that the SPRINT function requires a minimum
-of three arguments: a string variable, a C string constant, and one or more
-variables of either integer or string type.</pre>
-<pre><b>Required Include Files<u>
-</u></b>
-Following the function argument types, may be one or more required include
-(.INC) files. If any files are listed on the same line as the function
-(to the right of the page), these files must be included at the top of
-your source file to use this function arguments correctly. Example:</pre>
-<pre>	!INCLUDE NODEDEFS.INC</pre>
-<pre>Do not include the same file more than once in the same source file. Once
-is enough, and it should be done so near the top of your source (.SRC) file.</pre>
-<pre><b>Argument Names<u>
-</u></b>
-If any arguments are allowed for a function, a list of argument names will
-follow the text &quot;args:&quot; below the function name and argument list. This will
-help in referencing the individual arguments in the function description.</pre>
-<pre><a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="StringManipulationFunctions">[4.2] - String Manipulation Functions</a></h2>
-<pre>Functions used for manipulating string variables (global or local) and/or the
-current command string.</pre>
-<pre> <b>STR &lt;str_var&gt; [str_var] [...]
-args: new_vars</b>
-------------------------------
-Define one or more local string variables for later use. The new_vars arguments
-are the names of the variables to define. These names must not be currently
-used by other variables (local or global).</pre>
-<pre>The variable name &quot;str&quot; is used by other functions to refer to the current
-command string, and therefore cannot be used as a user defined variable name.</pre>
-<pre>After definition, the variable names can be used by other functions. The
-variables will each be initialized to a null string. The variables can only be
-referenced in the current shell or module. When the current shell or module is
-terminated, the variable names and their contents are lost. If you wish to
-retain a variable name and its contents between shells or modules, use a global
-variable instead of a local variable.</pre>
-<pre><b>GLOBAL_STR &lt;str_var&gt; [str_var] [...]
-      args: new_vars
-</b>------------------------------------
-Define one or more global string variables for later use. The arguments are the
-names of the variables to define. Each variable name must not be currently used
-by another variable (local or global). Global variable names and their contents
-are not disposed of until the current user logs off the BBS.</pre>
-<pre><b> SET &lt;str_var&gt; &lt;&quot;cstr&quot;&gt;
-args: dest      value
-</b>-----------------------
-Writes to the string variable dest, the contents of the C string specified as
-value. This function is the Baja equivalent of the standard C strcpy() function
-with the exception that the source must be a string constant. Example:</pre>
-<pre>	STR USER_NAME
-	SET USER_NAME &quot;John Doe&quot;</pre>
-<pre>When writing to the current command string, use the SETSTR function instead
-of this function for best optimization.
-
-<b>COPY &lt;str_var&gt; &lt;any_var&gt;
-args: dest      source
-</b>------------------------
-Copies the source variable (string or integer) into the specified destination
-variable. This function is the Baja equivalent of the standard C strcpy()
-function with the exception that the source must be a variable, but may be
-either of integer or string type. Example:</pre>
-<pre>	# define two variables
-	STR VAR1 VAR2
-	# copy some text into the first variable
-	SET VAR1 &quot;Some Text&quot;
-	# copy that variable into the second variable
-	COPY VAR2 VAR1
-	# display the contents of second variable
-	PRINT VAR2</pre>
-<pre>If the source variable is an integer variable, it is converted into
-a decimal (base 10) string before the copy is executed. Use SPRINTF if you
-want to convert an integer variable into a string using hexadecimal (base 16)
-or octal (base 8) representation instead of decimal.</pre>
-<pre><b>SWAP &lt;str_var&gt; &lt;any_var&gt;
-args: var1      var2
-</b>------------------------
-Exchanges the contents of two string variables, or a string variable and an
-integer variable. The first argument (var1) is the name of a string variable
-and the second argument (var2) is the name of a string or integer variable.
-If var2 is an integer variable, var1 will be set to the decimal representation
-of the integer variable contents and var2 will be set the integer
-representation of var1 (specified in hex, octal, or decimal). Example:</pre>
-<pre>	INT I
-	STR S</pre>
-<pre>	# set S to 100h (256)
-	SET S &quot;0x100&quot;
-	# set I to 100
-	SET I 100
-	# swap them
-	SWAP S I
-	# I now equals 256 and S is &quot;100&quot;
-
-<b>STRCAT &lt;str_var&gt; &lt;str_var or &quot;cstr&quot;&gt;
-  args: dest	  source
-</b>------------------------------------
-Concatenates (appends) the contents of a string variable (specified as dest)
-with the contents of a C string or string variable specified as source. This
-function is the Baja equivalent of the standard C strcat() function.</pre>
-<pre><b>SPRINTF &lt;str_var&gt; &lt;&quot;cstr&quot;&gt; &lt;any_var&gt; [any_var] [...]
-   args: dest	   format   variables
-</b>----------------------------------------------------
-Writes the specified variables into the string variable (dest) based on
-the specified format. This function is the same as PRINTF except that the
-output is written into the dest string variable instead of the console. This
-function is the Baja equivalent of the standard C sprintf() function with
-the exception that all the arguments following the format must be variables
-(no constants allowed). See the PRINTF function definition for details.</pre>
-<pre><b>TIME_STR &lt;str_var&gt; &lt;int_var&gt;
-    args: dest	    time
-</b>----------------------------
-Writes to the string variable (specified as dest) the time and date stored in
-the integer variable specified by time. This function is the Baja equivalent
-to the standard C ctime() function. Example:</pre>
-<pre>	# Display current time
-	INT T
-	TIME T
-	TIME_STR STR T
-	PRINTF &quot;Current time: %s\r\n&quot; STR</pre>
-<pre>Would display the current date/time similar to:</pre>
-<pre>	Current time: Thu Aug 31 1995 08:34 am</pre>
-<pre><b>DATE_STR &lt;str_var&gt; &lt;int_var&gt;
-    args: dest	    time
-</b>----------------------------
-Writes to the string variable (specified as dest) the date stored in the
-integer variable specified by time (obtained with TIME or similar function) in
-MM/DD/YY format or DD/MM/YY format if European date format is enabled in SCFG.
-Example:</pre>
-<pre>	# Display current date
-	INT T
-	TIME T
-	DATE_STR STR T
-	PRINTF &quot;Current date: %s\r\n&quot; STR</pre>
-<pre>Would display the current date similar to:</pre>
-<pre>	Current date: 08/31/95</pre>
-<pre><b>SECOND_STR &lt;str_var&gt; &lt;int_var&gt;
-      args: dest      seconds
-</b>------------------------------
-Writes to the string variable (specified as dest) the number of seconds
-(in HH:MM:SS format) stored in the integer variable specified by seconds.
-Example:</pre>
-<pre>	# Display number of seconds elapsed
-	INT START END
-	TIME START
-	PRINT &quot;Wait a period of time, then hit a key...&quot;
-	GETKEY
-	TIME END
-	SUB END START
-	SECOND_STR STR END
-	PRINTF &quot;\r\n%s time elapsed.\r\n&quot; STR</pre>
-<pre><b>FTIME_STR &lt;str_var&gt; &lt;&quot;cstr&quot;&gt; &lt;int_var&gt;
-     args: dest      format   time
-</b>--------------------------------------
-Writes to the string variable (specified as dest) the date and time information
-from the integer variable (specified as time) formatted according to string
-constant specified as format. The format characters are described below:</pre>
-<pre>	%a	abbreviated weekday name
-	%A	full weekday name
-	%b	abbreviated month name
-	%B	full month name
-	%c	date and time
-	%d	day of month (01-31) (zero-padded)
-	%H	hour (24-hour clock) (00-23)
-	%I	hour (12-hour clock) (01-12)
-	%j	day of the year (001-366)
-	%m	month (01-12)
-	%M	minute (00-59)
-	%p	AM or PM
-	%S	second (00-59)
-	%U	week number of the year (Sunday as 1st day of week) (00-52)
-	%w	weekday (0-6, Sunday is 0)
-	%W	week number of the year (Monday as 1st day of week) (00-52)
-	%x	date
-	%X	time
-	%y	year without century (00-99)
-	%Y	year with century
-	%Z	time zone name, if any
-	%%	% (percent symbol)</pre>
-<pre>This function is the Baja equivalent of the standard C strftime() function.
-Example:</pre>
-<pre>	# Display current date and time
-	INT T
-	TIME T
-	FTIME_STR STR &quot;Current_Time:%A,%B-%d-%Y,%I:%M %p&quot; T
-	PRINTF &quot;%s\r\n&quot; STR</pre>
-<pre><b>SHIFT_STR [str_var] &lt;#&gt;
-     args: string    len
-</b>------------------------
-This function (&quot;Shift String&quot;) shifts the specified string variable if
-specified (current command string if not specified) to the left 'len' number of
-characters.</pre>
-<pre>	# Displays the string &quot;ELLO&quot;
-	SETSTR &quot;HELLO&quot;
-        SHIFT_STR 1
-	PRINT STR</pre>
-<pre>This function is most often used to parse command string arguments or &quot;stacked&quot;
-commands.</pre>
-<pre><b>STRIP_CTRL [str_var]
-      args: string
-</b>--------------------
-Removes all control characters (and Ctrl-A codes) from specified string
-variable. If string is not specified, then the current command string is
-processed.</pre>
-<pre><b>TRUNCSP [str_var]
-   args: string
-</b>-----------------
-Removes (truncates) all white space characters from end of specified string
-variable or current command string (if string not specified).</pre>
-<pre><b>STRUPR [str_var]
-  args: string
-</b>----------------
-Converts specified string argument to all uppercase characters. This function
-is the Baja equivalent to the standard C strupr() function.</pre>
-<pre><b>STRLWR [str_var]
-  args: string
-</b>----------------
-Converts specified string argument to all lowercase characters. This function
-is the Baja equivalent to the standard C strlwr() function.</pre>
-<pre><b>SETSTR &lt;&quot;cstr&quot;&gt;
-  args: text
-</b>---------------
-Writes to current command string, specified constant text string. This
-function should be used in place of &quot;SET STR&quot; for best optimization.</pre>
-<pre><b>REPLACE_TEXT &lt;#&gt; &lt;&quot;cstr&quot;&gt;
-	args: num text
-</b>-------------------------
-This function is used to replace a default internal text string (read from the
-CTRL\TEXT.DAT file) in a shell or module. The first argument (num) is the text
-number to replace (see TEXT.DAT for the number of the text you wish to
-replace). The second argument (text) is the C type string to use in place the
-current one. All text replacements are lost (back to default TEXT.DAT) when the
-user logs off. Example, to replace the &quot;[Hit a key]&quot; prompt with a different
-string:</pre>
-<pre>        REPLACE_TEXT 563 &quot;\1n\1h\1b{\1wPAUSE\1b} &quot;</pre>
-<pre>When replacing a TEXT.DAT string that contains %s, %d, or other % specifiers,
-you will need to change them to %%s, %%d, etc (without changing the order).</pre>
-<pre>If you wish to globally replace a string (for all shells and modules), you may
-want to just edit the CTRL\TEXT.DAT file directly instead.
-
-<b>LOAD_TEXT &lt;&quot;str&quot;&gt;
-     args: filename
-</b>-------------------
-Loads an alternate TEXT.DAT file (from CTRL directory, automatically assuming
-a .DAT extension for &quot;filename&quot;). Only those text items that are different
-from the current TEXT items will be changed. All changes will only be in
-effect until the current user logs off or the effects are reversed with the
-REVERT_TEXT function. The base filename should be something other than just
-&quot;TEXT&quot; (since that is the default TEXT.DAT that is loaded by SBBS).</pre>
-<pre>This function is useful for making multiple languages available to your users.</pre>
-<pre><b>REVERT_TEXT &lt;# or ALL&gt;
-       args: num
-</b>----------------------
-This function is used to reverse the effects of a previous call to REPLACE_TEXT
-or LOAD_TEXT (reverts back to default TEXT.DAT). Example:</pre>
-<pre>        REPLACE_TEXT 563 &quot;\1n-=[Hit a Key]=- &quot;
-        PAUSE
-        REVERT_TEXT 563</pre>
-<pre>If the argument is the word ALL, then all text strings are reverted to the
-original TEXT.DAT entries.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="IntegerManipulationFunctions">[4.3] - Integer Manipulation Functions</a></h2>
-<pre>Functions used for manipulating integer variables (global or local).</pre>
-<pre><b> INT &lt;int_var&gt; [int_var] [...]
-args: new_vars
-</b>------------------------------
-Define one or more local integer variables for later use. The new_vars
-arguments are the names of the variables to define. These names must not be
-currently used by other variables (local or global).</pre>
-<pre>After definition, the variable names can be used by other functions. The
-variables will each be initialized to a 0. The variables can only be referenced
-in the current shell or module. When the current shell or module is terminated,
-the variable names and their contents are lost. If you wish to retain a
-variable name and its contents between shells or modules, use a global variable
-instead of a local variable.</pre>
-<pre><b>GLOBAL_INT &lt;int_var&gt; [int_var] [...]
-      args: new_vars
-</b>------------------------------------
-Define one or more global integer variables for later use. The arguments are
-the names of the variables to define. Each variable name must not be currently
-used by another variable (local or global). Global variable names and their
-contents are not disposed of until the current user logs off the BBS.</pre>
-<pre><b> SET &lt;int_var&gt; &lt;#&gt;
-args: dest      value
-</b>---------------------
-Writes to the integer variable dest, the integer constant specified as value.</pre>
-<pre>	INT I
-	SET I 100</pre>
-<pre><b> ADD &lt;int_var&gt; &lt;any_var or #&gt;
-args: dest	value
-</b>-----------------------------
-Adds the value specified in the second argument to the integer variable
-specified as dest.</pre>
-<pre><b> SUB &lt;int_var&gt; &lt;any_var or #&gt;
-args: dest	value
-</b>-----------------------------
-Subtracts the value specified in the second argument from the integer variable
-specified as dest.</pre>
-<pre><b> MUL &lt;int_var&gt; &lt;any_var or #&gt;
-args: dest	value
-</b>-----------------------------
-Multiplies the first argument by the value specified in the second argument
-and places the result into dest.</pre>
-<pre><b> DIV &lt;int_var&gt; &lt;any_var or #&gt;
-args: dest	value
-</b>-----------------------------
-Divides the first argument by the value specified in the second argument
-and places the result into dest.</pre>
-<pre><b> MOD &lt;int_var&gt; &lt;any_var or #&gt;
-args: dest	value
-</b>-----------------------------
-Divides the first argument by the value specified in the second argument
-and places the remainder into dest.</pre>
-<pre><b> AND &lt;int_var&gt; &lt;any_var or #&gt;
-args: dest	value
-</b>-----------------------------
-Bit-wise ANDs the value specified in the second argument with the integer
-variable specified as dest.</pre>
-<pre><b> OR &lt;int_var&gt; &lt;any_var or #&gt;
-args: dest	value
-</b>----------------------------
-Bit-wise ORs the value specified in the second argument with the integer
-variable specified as dest.</pre>
-<pre><b> NOT &lt;int_var&gt; &lt;any_var or #&gt;
-args: dest	value
-</b>-----------------------------
-Bit-wise ANDs the unary opposite of the value specified in the second argument
-with the integer variable specified as dest.</pre>
-<pre><b> XOR &lt;int_var&gt; &lt;any_var or #&gt;
-args: dest	value
-</b>-----------------------------
-Bit-wise exclusive ORs the value specified in the second argument with the
-integer variable specified as dest.</pre>
-<pre><b>COPY &lt;int_var&gt; &lt;any_var&gt;
-args: dest      source
-</b>------------------------
-Copies the source variable (string or integer) into the specified destination
-variable. Example:</pre>
-<pre>	# define two variables
-	INT INT1 INT2
-	# place a value into the first variable
-	SET VAR1 5
-	# copy that variable into the second variable
-	COPY VAR2 VAR1
-	# display the contents of second variable
-	PRINTF &quot;VAR2=%ld\r\n&quot; VAR2</pre>
-<pre>If the source variable is an string variable, it is converted into an integer
-before the copy is executed.</pre>
-<pre><b>SWAP &lt;int_var&gt; &lt;any_var&gt;
-args: var1      var2
-</b>------------------------
-Exchanges the contents of two integer variables, or a string variable and an
-integer variable. The first argument (var1) is the name of an integer variable
-and the second argument (var2) is the name of a string or integer variable.</pre>
-<pre><b>RANDOM &lt;int_var&gt; &lt;#&gt;
-  args: dest	  num
-</b>---------------------
-Places a random number between 0 and num-1 into dest.</pre>
-<pre><b>TIME &lt;int_var&gt;
-args: dest
-</b>--------------
-Places the current time (in unix/time_t format) into dest. This function is
-the Baja equivalent of the standard C time() function.</pre>
-<pre><b>STRLEN &lt;int_var&gt; &lt;str_var&gt;
-  args: dest	  string
-</b>--------------------------
-Places the length (in characters) of the specified string into dest. This
-function is the Baja equivalent of the standard C strlen() function.</pre>
-<pre><b>DATE_INT &lt;int_var&gt; &lt;str_var&gt;
-    args: dest	    date
-</b>----------------------------
-Converts a date string (in MM/DD/YY format) into an integer and places it
-into dest.</pre>
-<pre><b>CRC16 &lt;int_var&gt; &lt;str_var&gt;
- args: dest	 string
-</b>-------------------------
-Calculates the 16-bit CRC of the specified string and places the result into
-dest.</pre>
-<pre><b>CRC32 &lt;int_var&gt; &lt;str_var&gt;
- args: dest	 string
-</b>-------------------------
-Calculates the 32-bit CRC of the specified string and places the result into
-dest.</pre>
-<pre><b>CHKSUM &lt;int_var&gt; &lt;str_var&gt;
-  args: dest	  string
-</b>--------------------------
-Calculates the CHKSUM of the specified string and places the result into
-dest.</pre>
-<pre><b>CHARVAL &lt;int_var&gt; &lt;str_var&gt;
-   args: dest	   string
-</b>---------------------------
-Places the ASCII value of the first character in the specified string into
-dest.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="Logic/ControlFlowFunctions">[4.4] - Logic/Control Flow Functions</a>
-</h2>
-<pre><b>GOTO &lt;txt&gt;
-args: label
-</b>-----------
-This function is used to force the control flow to immediately jump to another
-part of the code. A valid label name must follow GOTO as an argument. This
-function is very similar to the GOTO command used in the BASIC and C
-programming languages or the JMP instruction used in the Assembly programming
-language.</pre>
-<pre><b>CALL &lt;txt&gt;
-args: label
-</b>-----------
-This function is used to execute a sub-routine. The sub-routine must be
-defined with the specified label somewhere in the current module. When a
-RETURN function is executed in the sub-routine, control flow will return to the
-next line following the CALL function that started the sub-routine. The CALL
-function is very similar to the GOSUB command used in the BASIC programming
-language or the CALL instruction used in the Assembly programming language. At
-least one RETURN function must exist in the sub-routine. Sub-routines should
-not use a GOTO function to &quot;jump out&quot; of the sub-routine.</pre>
-<pre><b>RETURN
-</b>------
-This function is used to exit a sub-routine and return to the point in the
-code from which it was called with the CALL function. If a RETURN
-function is executed without a prior CALL, then the shell or module is
-immediately terminated. If a shell is terminated with a user online, they
-are immediately logged off. If a module is terminated, execution control
-returns to the shell or module that loaded it.</pre>
-<pre><b>SETLOGIC &lt;TRUE or FALSE or GREATER or LESS&gt;
-    args: logic
-</b>-------------------------------------------
-This function is used to set the current logic state to TRUE (same as
-EQUAL), FALSE (same as NOT_EQUAL), GREATER, or LESS. The logic state is set by
-many functions, and tested by the IF_... functions to control the flow of
-execution.</pre>
-<pre><b>COMPARE &lt;any_var&gt; &lt;any_var or &quot;cstr&quot; or #&gt;
-   args: var	   cmp
-</b>------------------------------------------
-This function compares any two variables, or a variable and a constant.
-If the cmp argument is an integer variable or integer constant and the
-var variable is a string variable, then cmp is converted to a string
-representation of the cmp variable before the comparison is made. If the cmp
-argument is a string variable or string constant and the var variable is
-an integer variable, then cmp is converted to an integer before the comparison
-is made. The current logic state is set to the result of the comparison:
-TRUE (same as EQUAL), FALSE (as an NOT_EQUAL), GREATER, or LESS.
-
-<b>IF_TRUE
-</b>-------
-If the current logic state is set to TRUE, then following block of code
-(ending in an END_IF or ELSE function) will be executed. Otherwise,
-the interpreter will skip the code until an ELSE or END_IF function is found
-and resume execution from that point. This function is the same as IF_EQUAL.</pre>
-<pre><b>IF_FALSE
-</b>--------
-This function is identical to the IF_TRUE function except that it works in the
-opposite manor in regards to the current logic state. This function is the
-same as IF_NOT_EQUAL.</pre>
-<pre><b>IF_GREATER
-</b>----------
-If the current logic state is set to GREATER by a subsequent COMPARE function,
-the following IF_... block will be executed.</pre>
-<pre><b>IF_GREATER_OR_EQUAL
-</b>-------------------
-If the current logic state is set to GREATER or EQUAL, the following IF_...
-block will be executed. This function is the same as IF_EQUAL_OR_GREATER.</pre>
-<pre><b>IF_LESS
-</b>-------
-If the current logic state is set to LESS by a subsequent COMPARE function,
-the following block will be executed.</pre>
-<pre><b>IF_LESS_OR_EQUAL
-</b>----------------
-If the current logic state is set to LESS or EQUAL, the following code block
-will be executed. This function is the same as IF_EQUAL_OR_LESS.</pre>
-<pre><b>ELSE
-</b>----
-This function marks the end of an IF_... block of code and begins an alternate
-block of code to be executed if the condition is not met for the IF_...
-function. The block of code is terminated with an END_IF function.</pre>
-<pre><b>END_IF
-</b>------
-This function is used to terminate an IF_... or  ELSE code block. Every IF_...
-function must be followed by an ELSE or END_IF instruction, and every ELSE
-function must be followed by an END_IF.
-
-<b>SWITCH &lt;int_var&gt;
-</b>----------------
-<b>CASE &lt;#&gt;
-</b>--------
-<b>END_CASE
-</b>--------
-<b>DEFAULT
-</b>-------
-<b>END_SWITCH
-</b>----------
-The SWITCH function is used in conjunction with the CASE, DEFAULT, END_CASE,
-and END_SWITCH functions to replace multiple COMPARE/IF_.../ELSE statements.</pre>
-<pre>Example:</pre>
-<pre>	INT I
-	RANDOM I 3
-	COMPARE I 0
-	IF_EQUAL
-		PRINT &quot;Zero&quot;
-	ELSE
-		COMPARE I 1
-		IF_EQUAL
-			PRINT &quot;One&quot;
-		ELSE
-			COMPARE I 2
-			IF_EQUAL
-				PRINT &quot;Two&quot;
-				END_IF
-			END_IF
-		END_IF</pre>
-<pre>Could be replaced with:</pre>
-<pre>	INT I
-	RANDOM I 3
-	SWITCH I
-		CASE 0
-			PRINT &quot;Zero&quot;
-			END_CASE
-		CASE 1
-			PRINT &quot;One&quot;
-			END_CASE
-		CASE 2
-			PRINT &quot;Two&quot;
-			END_CASE
-		DEFAULT
-			PRINTF &quot;Random returned %ld&quot; I
-			END_CASE
-		END_SWITCH
-
-If the SWITCH argument value is equal to one of the specified CASE arguments,
-then that CASE code block is executed until an END_CASE function is reached.
-If an END_CASE function does not exist in the code block, the execution will
-continue through (fall-through) the following CASE or DEFAULT functions until
-an END_CASE or END_SWITCH function is reached.</pre>
-<pre>If the SWITCH argument does not match any of the CASE arguments, the DEFAULT
-code block will be executed until an END_CASE or END_SWITCH function is
-reached. If a DEFAULT function is not specified, execution will skip to the
-END_SWITCH function. Only one DEFAULT code block should be specified per
-SWITCH/END_SWITCH block, if used at all. This function set is the Baja
-equivalent of the standard C switch(), case:, default:, and break keywords.</pre>
-<pre><b>CMD_HOME
-</b>--------
-This function (called &quot;Command Home&quot;) is very similar to a label. It is
-a convenience function for programming menu commands. It sets a return
-point (or anchor, if you will) for the automatic looping on a specific menu.
-Execution control is returned to the point in the code where the last CMD_HOME
-was specified by the END_CMD function.</pre>
-<pre><b>CMDKEY &lt;key&gt;
- args:	cmd
-</b>------------
-This function (called &quot;Command Key&quot;) is like a combination of the
-COMPARE_KEY and IF_TRUE functions. It is usually immediately preceded by
-a GETCMD, GETKEY, GETSTR or similar function.</pre>
-<pre>If the current command key matches the command key constant (cmd), then the
-block of code following (terminated with an END_CMD function) will be executed.
-When the END_CMD function is executed, execution control returns to the most
-recently executed CMD_HOME function. If a RETURN or GOTO function will be
-executed before the END_CMD function, then a CMD_POP function must be executed
-to tell the interpreter to &quot;forget&quot; the previous CMD_HOME function. Even if
-execution control will cause the END_CMD function to never be executed, it
-still must be present to define the code block so that it can be skipped if the
-CMDKEY comparison is false.
-
-<b>CMDKEYS &lt;keylist&gt;
-  args:  cmds
-</b>-----------------
-This function is identical to the CMDKEY function with the exception that the
-argument is a list of valid keys and if the current command key matches any
-of those listed, the following code block is executed.</pre>
-<pre><b>CMDSTR &lt;&quot;cstr&quot;&gt;
-  args: cmd
-</b>---------------
-This function (called &quot;Command Str&quot;) is identical to the CMDKEY function
-with the exception that the argument is a C type string. It is usually
-immediately preceded by a GETSTR or similar function.</pre>
-<pre><b>END_CMD
-</b>-------
-This function is used to mark the end of a CMDKEY, CMDKEYS, or CMDSTR code
-block.</pre>
-<pre><b>CMD_POP
-</b>-------
-This function tells the interpreter to &quot;forget&quot; the most recently executed
-CMD_HOME function. It should only be used when a CMDKEY, CMDKEYS, or CMDSTR
-code block contains a GOTO or RETURN function.</pre>
-<pre><b>COMPARE_KEY &lt;key&gt;
-       args: cmd
-</b>-----------------
-This function is identical to the CMDKEY function in regards to the
-key argument. The current command key is set by the GETCMD, GETKEY, GETSTR
-or similar functions. If the current command key matches the key argument,
-the current logic state is set to TRUE, otherwise it is set to FALSE.</pre>
-<pre>As with all COMPARE functions, it is usually immediately followed by an
-IF_TRUE or IF_FALSE function.</pre>
-<pre><b>COMPARE_KEYS &lt;keylist&gt;
-	args: cmds
-</b>----------------------
-This function is identical to the CMDKEYS functions in regards to the
-keylist argument. If the current command key is contained in the keylist,
-then the current logic state is set to TRUE, otherwise it is set to FALSE.</pre>
-<pre><b>COMPARE_STR &lt;&quot;cstr&quot;&gt;
-       args: string
-</b>--------------------
-This function compares the current command string (set by the SETSTR,
-GETSTR, or similar functions) against the C type string argument and sets
-the current logic state to TRUE or FALSE accordingly. The comparison is not
-case sensitive. This function is the Baja equivalent to the standard C
-stricmp() function.
-
-<b>COMPARE_WORD &lt;&quot;cstr&quot;&gt;
-	args: string
-</b>---------------------
-This function is identical to the COMPARE_STR function with the
-exception that the current command string must only match the string argument
-for as many characters as included in the string argument.</pre>
-<pre>If for example, the current command string is &quot;OPEN BLACKJACK&quot; then the line:</pre>
-<pre>        COMPARE_WORD &quot;OPEN&quot;</pre>
-<pre>would set the current logic state to TRUE since the first 4 characters of
-each string match, but the line:</pre>
-<pre>        COMPARE_STR &quot;OPEN&quot;</pre>
-<pre>would set the current logic state to FALSE since the strings do not entirely
-match.</pre>
-<pre><b>COMPARE_ARS &lt;txt&gt;
-       args: ars
-</b>-----------------
-This function compares the requirement string argument ars against the
-information on the current user and sets the current logic state to either
-TRUE or FALSE based on the result of the comparison. See the ARS chapter of
-the Synchronet sysop manual for details on the syntax of ARS.</pre>
-<pre>Example:
-                COMPARE_ARS LEVEL 60
-                IF_TRUE
-                        PRINT &quot;You have level 60 or higher.\r\n&quot;
-                        END_IF</pre>
-<pre><b>COMPARE_STRN &lt;#&gt;  &lt;str_var&gt; &lt;str_var or &quot;cstr&quot;&gt;
-	args: num  str1      str2
-</b>-----------------------------------------------
-This function is used to compare the first num characters of strings str1
-and str2. This function is the Baja equivalent of the standard C strnicmp()
-function. If the two strings are the same (ignoring case) for the first
-num characters, the current logic state is set to TRUE, otherwise it is set
-to FALSE.</pre>
-<pre><b>COMPARE_SUBSTR &lt;str_var&gt; &lt;str_var or &quot;cstr&quot;&gt;
-	  args: str1	  str2
-</b>--------------------------------------------
-This function is used to check if str2 is contained in str1 (case sensitive).
-This function is the Baja equivalent of the standard C strstr() function.
-If str2 is located in str1, the current logic state is set to TRUE, otherwise
-it is set to FALSE. This following example would set the current logic state
-to TRUE:</pre>
-<pre>	SETSTR &quot;This is a test&quot;
-	COMPARE_SUBSTR STR &quot;test&quot;
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2>	<a name="DisplayFunctions">[4.5] - Display Functions</a>
-</h2>
-<pre>Display functions are used to display output to the user either locally,
-remotely, or both.</pre>
-<pre><b>PRINT &lt;&quot;cstr&quot; or var&gt;
-args:  string
-</b>---------------------
-This function sends a string of characters to the user (both locally and
-remotely, if applicable). The string to be printed can extend beyond the 80th
-column of the screen, but when printing multiple lines, multiple consecutive
-PRINT statements are preferred.</pre>
-<pre>Example:
-                PRINT &quot;hello, world\r\n&quot;
-     or:
-                STR my_var
-                SET my_var &quot;hello, world\r\n&quot;
-                PRINT my_var</pre>
-<pre>The string can contain color codes using Synchronet Ctrl-A codes. See the
-Synchronet sysop manual for the definition of Ctrl-A codes and their usage.
-If you are using an ASCII editor that does not support control characters,
-a &quot;\1&quot; can be used in place of the Ctrl-A (smiley face) character.</pre>
-<pre>Variables can also be included in the string (example: user's name, sysop's
-name, BBS name, etc) by using Synchronet supported @-codes and command line
-% specifiers. See the Synchronet sysop manual for the definition of @-codes
-and command line % specifiers. The %s command line specifier, when used, is
-replaced with the current command string and %f is replaced with the complete
-path of the current file directory. Be careful not to confuse command line %
-specifiers (%a, %b, etc) with printf % specifiers (described later). They can
-actually be used together in the same string (supported by PRINTF functions) by
-using double % for the command line % specifiers (e.g. %%s instead of %s).</pre>
-<pre><b>PRINTF &lt;&quot;cstr&quot;&gt; [any_var] [...]
- args:	format	 variables
-</b>-------------------------------
-This function is similar to print, except that defined variables can be placed
-(formatted) into to displayed text output. This function is the Baja
-equivalent of the standard C printf() function. The format argument is a C type
-string with C printf() % specifiers for variable formatting.</pre>
-<pre>The valid specifiers are:</pre>
-<pre>        %%      Percent symbol
-        %s      String variable
-        %#s     String variable, minimum # chars wide, right justified
-        %-#s    String variable, minimum # chars wide, left justified
-        %.#s    String variable, maximum # chars wide
-        %#.#s   String variable, min and max width specified, right justified
-        %-#.#s  String variable, min and max width specified, left justified
-        %ld     Integer variable, decimal - use lx for hexadecimal (lX=caps)
-        %#ld    Integer variable minimum # chars wide right justified
-        %-#ld   Integer variable minimum # chars wide left justified
-        %0#ld   Integer variable minimum # digits wide zero padded</pre>
-<pre>Multiple variable names may be specified after the str argument, but each
-variable MUST be properly represented in the str argument with the correct
-PRINTF specifier (either %ld, %lx, or %s).</pre>
-<pre>Example:
-        STR s
-        SET s &quot;hello, world&quot;
-        PRINTF &quot;~%s~\r\n&quot;       s
-        PRINTF &quot;~%10s~\r\n&quot;     s
-        PRINTF &quot;~%.10s~\r\n&quot;    s
-        PRINTF &quot;~%-10s~\r\n&quot;    s
-        PRINTF &quot;~%.15s~\r\n&quot;    s
-        PRINTF &quot;~%-15s~\r\n&quot;    s
-        PRINTF &quot;~%15.10s~\r\n&quot;  s
-        PRINTF &quot;~%-15.10s~\r\n&quot; s</pre>
-<pre>Would produce the following display:</pre>
-<pre>        ~hello, world~
-        ~hello, world~
-        ~hello, wor~
-        ~hello, world~
-        ~hello, world   ~
-        ~     hello, wor~
-        ~hello, wor     ~
-
-And:
-        INT i
-        SET i 1234
-	PRINTF &quot;~%ld~\r\n&quot;      i
-	PRINTF &quot;~%3ld~\r\n&quot;     i
-	PRINTF &quot;~%6ld~\r\n&quot;     i
-	PRINTF &quot;~%-6ld~\r\n     i
-	PRINTF &quot;~%06ld~\r\n&quot;    i
-	PRINTF &quot;~%06lx~\r\n&quot;    i
-	PRINTF &quot;~%06lX~\r\n&quot;    i</pre>
-<pre>Would produce the following display:</pre>
-<pre>        ~1234~
-        ~1234~
-        ~  1234~
-        ~1234  ~
-        ~001234~
-        ~0004d2~
-        ~0004D2~</pre>
-<pre><b>PRINT_LOCAL &lt;&quot;cstr&quot;&gt;
-       args:  string
-</b>--------------------
-This function works identical to the PRINT function with the exception that
-the output is only displayed locally (on the BBS console). Ctrl-A codes
-and @-codes are not supported.</pre>
-<pre><b>PRINT_REMOTE &lt;&quot;cstr&quot;&gt;
-	args: string
-</b>---------------------
-This function works identical to the PRINT function with the exception that
-the output is only displayed remotely (on the user's terminal). If the current
-user is not logged on remotely, then no output is performed. Ctrl-A codes
-and @-codes are not supported.</pre>
-<pre><b>PRINTSTR
-</b>--------
-This function works identical to the PRINT function with the exception that
-this function does not accept a string argument, and instead uses the current
-command string (set with SETSTR, GETSTR, or similar function) as the character
-string to print.</pre>
-<pre>Example:
-                SETSTR &quot;hello, world\r\n&quot;
-                PRINTSTR</pre>
-<pre><b>PRINTKEY
-</b>--------
-This function displays the current command key. The command key is normally
-obtained with the GETKEY, GETCMD, or similar function.</pre>
-<pre><b>MNEMONICS &lt;&quot;cstr&quot;&gt;
-     args: string
-</b>------------------
-This function works identical to the PRINT function with the exception that
-the output is automatically colorized and characters following a tilde (~)
-are considered a mnemonic command character (hot key) and are high-lighted
-or placed in parentheses if the user's terminal does not support ANSI. If
-Ctrl-A codes are included in the str argument, then the automatic colorization
-and high-lighting is not used.</pre>
-<pre>Example:
-                mnemonics &quot;Select: ~Good, ~Bad, or ~Indifferent: &quot;</pre>
-<pre><b>CLS
-</b>---
-This function clears the current text screen.</pre>
-<pre><b>CRLF
-</b>----
-This function displays a carriage return/line feed (new line). It is equivalent
-to PRINT &quot;\r\n&quot;, but requires less memory and executes faster.</pre>
-<pre><b>PRINTFILE &lt;&quot;str&quot; or str_var&gt; [#]                                SBBSDEFS.INC
-     args: file 	      mode
-</b>----------------------------------
-Displays the contents of the file to the user (both locally and remotely, if
-applicable).</pre>
-<pre>Valid mode parameters:</pre>
-<pre>P_NOABORT	Disallows abortion of display with Ctrl-C
-P_SAVEATR	Retain attributes (colors) after display
-P_NOATCODES	Don't expand @-code variables/actions
-P_OPENCLOSE	Open and close immediately (before display)</pre>
-<pre>Multiple mode parameters can be specified by joining them together with the
-OR (|) symbol.</pre>
-<pre>Example:
-		!INCLUDE SBBSDEFS.INC
-		PRINTFILE &quot;C:\TEXT\HELP.TXT&quot; P_NOABORT|P_OPENCLOSE</pre>
-<pre><b>PRINTTAIL &lt;str_var&gt; &lt;#&gt;   &lt;#&gt;					SBBSDEFS.INC
-     args: file      mode  x
-</b>-----------------------------
-Displays the last x number of lines of file. The valid mode parameters are the
-same as those shown for the PRINTFILE function. If you don't want any of the
-mode values, use 0 for the mode.</pre>
-<pre><b>PRINTFILE_STR
-</b>-------------
-This function is identical to the PRINTFILE function, with the exception that
-there is no argument, the current command string is used for the path and
-filename instead.</pre>
-<pre><b>PRINTFILE_LOCAL &lt;&quot;str&quot;&gt;
-	   args: file
-</b>-----------------------
-This function works identical to the PRINTFILE function, with the exception
-that the contents are only displayed locally.</pre>
-<pre><b>PRINTFILE_REMOTE &lt;&quot;str&quot;&gt;
-	    args: file
-</b>----------------------
-This function works identical to the PRINTFILE function, with the exception
-that the contents are only displayed remotely. If the user is not logged on
-remotely, then no output is performed.</pre>
-<pre><b>LIST_TEXT_FILE
-</b>--------------
-This function works similar to the PRINTFILE function, with the exception
-that the system password is required when run remotely and the user is prompted
-to enter the path and name of the file to list.</pre>
-<pre><b>EDIT_TEXT_FILE
-</b>--------------
-This function is generally for sysop use only. It will automatically prompt
-the user (if remote) for the system password, and then prompt them for the
-path and name of the file to edit.</pre>
-<pre><b>PAUSE
-</b>-----
-This function produces a &quot;[Hit a key]&quot; prompt and waits for the user to hit a
-key.</pre>
-<pre><b>MENU &lt;&quot;str&quot;&gt;
-args: file
-</b>----------
-This function is similar to the PRINTFILE function with the exception that the
-TEXT\MENU directory is assumed to be the root path for the file and the file's
-extension (.ASC, .ANS, .MON, or .RIP) should not be specified. This function
-will automatically display the correct file based on the what the user's
-terminal supports and which menu files are available. To display a menu file
-in a different directory, a sub-directory can be specified before the filename.
-For example, do display the MAIN.* menu file in the TEXT\MENU\SIMPLE directory,
-you would use the following:</pre>
-<pre>	MENU &quot;SIMPLE\MAIN&quot;</pre>
-<pre>To display the MAIN.* menu file in the TEXT\MENU directory, you would use the
-following:</pre>
-<pre>	MENU &quot;MAIN&quot;</pre>
-<pre>You can also change the default menu directory with the SET_MENU_DIR function.
-Using the SET_MENU_FILE function, you can override the location and filename
-for MENUs that are displayed from within core functions of Synchronet.</pre>
-<pre><b>NODELIST_ALL
-</b>------------
-This function displays the current status of all nodes.</pre>
-<pre><b>NODELIST_USERS
-</b>--------------
-This function displays the current status of all nodes that are in use.</pre>
-<pre><b>USERLIST_SUB
-</b>------------
-This function displays all users that have access to the current message
-sub-board.</pre>
-<pre><b>USERLIST_DIR
-</b>------------
-This function displays all users that have access to the current file
-directory.</pre>
-<pre><b>USERLIST_ALL
-</b>------------
-This function displays all users that have active accounts on the BBS.</pre>
-<pre><b>USERLIST_LOGONS
-</b>---------------
-This function displays a list of the users who have logged on today.</pre>
-<pre><b>YES_NO &lt;&quot;cstr&quot;&gt;
-  args: question
-</b>----------------
-This function displays the question argument with automatic colorization
-followed by the text &quot; (Y/n) ? &quot; and waits for the user to hit 'Y', 'N' or CR.
-If CR (enter) is hit, then 'Y' is assumed. If the answer to the prompt is 'Y',
-then the current logic state is set to TRUE, otherwise it is set to FALSE.</pre>
-<pre>Example:
-                YES_NO &quot;Logoff Now&quot;
-                IF_TRUE
-                        LOGOFF
-                        END_IF</pre>
-<pre><b>NO_YES &lt;&quot;cstr&quot;&gt;
-  args: question
-</b>----------------
-This function is identical to the YES_NO function with the exception that the
-string is followed by text &quot; (y/N) ? &quot; and if CR is hit, then 'N' is assumed.
-If the answer to the prompt is 'N', then the current logic state is set to
-TRUE, otherwise it is set to FALSE.</pre>
-<pre>Example:
-                NO_YES &quot;Logoff Now&quot;
-                IF_FALSE
-                        LOGOFF
-                        END_IF</pre>
-<pre><b>READ_SIF &lt;&quot;str&quot;&gt;
-    args: file
-</b>--------------
-This function displays the contents of a SIF questionnaire data file (path and
-filename specified in the current command string). The data is read
-from the SIF data file and displayed through the SIF questionnaire file:
-&quot;TEXT\file.SIF&quot;.</pre>
-<pre>The original SIF data file is created with the CREATE_SIF function. The
-SIF file used to create and display the data file do not have to be the same
-SIF file, but should have the same order and format of data types.</pre>
-<pre>See the Synchronet Sysop Manual for details on the SIF file format.</pre>
-<pre><b>SAVELINE
-</b>--------
-This function saves the current line of text on the console to an internal
-Synchronet buffer for later re-display with the RESTORELINE function.</pre>
-<pre><b>RESTORELINE
-</b>-----------
-This function re-displays a previously saved line of text to the local and
-remote console (if applicable).</pre>
-<pre><a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="InputFunctions">[4.6] - Input Functions</a>
-</h2>
-<pre>Input functions are used to obtain input data from the user (most often from
-the user's keyboard).</pre>
-<pre><b>INKEY
-</b>-----
-Checks to see if the user has hit a key. If the user has hit a key, the
-current command key is set to the hit key and the current logic state is
-set to TRUE, otherwise the logic state is set to FALSE. This function does
-not wait for a user to hit a key.</pre>
-<pre><b>GETKEY
-</b>------
-Waits for a single key from the user. The key is converted to upper case (if
-a letter) and becomes the current command key for functions such as CMDKEY,
-COMPARE_KEY, etc. The key is not echoed (displayed). Use the PRINTKEY function
-to display a key accepted with this function.</pre>
-<pre><b>GETKEYE
-</b>-------
-This function is identical to the GETKEY function with the exception that
-&quot;slash commands&quot; are allowed. That is, if the user hits the slash (/) key,
-then the slash is echoed and the system waits for another key from the user.
-The second key is converted to upper case (if a letter) and the slash/key
-combination becomes the current command key for functions such as CMDKEY,
-COMPARE_KEY, etc. The second key is not echoed (displayed). Use the PRINTKEY
-function to display a key accepted with this function.</pre>
-<pre><b>GETCMD &lt;&quot;cstr&quot;&gt;
-  args: keys
-</b>---------------
-This function is very similar to the GETKEY function, except that the 'keys'
-argument specifies the only valid key to be accepted. The keys arguments is
-a C style string, so carriage return (ENTER) is specified with a \r. If, for
-example, you wanted to allow the user to hit A, B, C or ENTER, then you would
-use the following:</pre>
-<pre>        GETCMD &quot;ABC\r&quot;</pre>
-<pre>When an allowed key is hit, the key is converted to upper case (if a letter)
-and echoed (displayed) followed by a CRLF automatically. The key then becomes
-the current command key for functions such as CMDKEY, COMPARE_KEY, etc.</pre>
-<pre>Ctrl-C will always be allowed, in which case the command key becomes ^C.
-
-<b>GETSTR [str_var] [#]  [#]					SBBSDEFS.INC
-  args: string	  max  mode
-</b>---------------------------
-This function (&quot;Get String&quot;), is used to accept a string of characters from
-the user. The 'max' argument specifies the maximum length allowed for the
-string (in characters). 'max' should not exceed 79 characters for most uses.
-This function allows the user to enter any valid ASCII characters to form
-command words, sentences, etc. Control will not return to the module until the
-user either hits CR (ENTER), Ctrl-C, or Ctrl-V or is disconnected. The
-resultant string can then be used in functions such as CMDSTR, COMPARE_STR,
-COMPARE, SHIFT_STR, XTRN_EXEC, FILE_DOWNLOAD, etc.</pre>
-<pre>If string is not specified, the current command string is written to. If
-max is not specified, the value 128 is used.</pre>
-<pre>The valid mode parameters (defined in SBBSDEFS.INC) are:</pre>
-<pre>Mode		Description
-~~~~		~~~~~~~~~~~
-K_UPPER 	Converts all letters to upper case
-K_UPRLWR	Upper/Lower case automatically
-K_NUMBER	Allow numbers only
-K_WRAP		Allows word wrap
-K_MSG		Allows Ctrl-A codes and Ctrl-G (beep)
-K_SPIN		Spinning cursor
-K_LINE		Input line (inverse color)
-K_EDIT		Edit string passed
-K_NOCRLF	Don't print CRLF after string input
-K_ALPHA 	Only allow alphabetic characters
-K_LOWPRIO	low priority input
-K_NOEXASC	No extended ASCII allowed
-K_E71DETECT	Detect E-7-1 terminal type
-K_AUTODEL	Auto-delete text (used with EDIT)
-K_NOECHO	Don't echo input to local or remote console</pre>
-<pre>Multiple mode parameters can be used by ORing them together with the | symbol.
-Example:</pre>
-<pre>	GETSTR STR 25 K_UPRLWR|K_EDIT|K_AUTODEL</pre>
-<pre><b>GETLINE [str_var] [#]
-   args: string    max
-</b>--------------------------
-This function is identical to GETSTR with the exception that an inverse line
-is displayed to the user (if the user has an ANSI terminal) to show the maximum
-length of the input string.</pre>
-<pre><b>GETSTRUPR [str_var] [#]
-     args: string    max
-</b>------------------------
-This function (&quot;Get String Upper&quot;) is identical to GETSTR with the exception
-that the string is automatically converted to uppercase as the user types.
-
-<b>GETNAME [str_var] [#]
-   args: string    max
-</b>----------------------
-This function is identical to GETSTR with the exception that the string is
-automatically converted to &quot;Capitalized&quot; words (as in a proper noun) as the
-user types.</pre>
-<pre><b>GETFILESPEC
-</b>-----------
-This function is specifically used to accept a file specification (name and/or
-wildcard characters) from the user. It will automatically display a prompt
-similar to:</pre>
-<pre>Filespec [*.*]:</pre>
-<pre>before waiting for the user to input the file specification. If the user hits
-CR, *.* is assumed to be the file specification. If a period is not included
-in the string, a &quot;.*&quot; is automatically appended (so CR, &quot;*&quot; and &quot;*.*&quot; all
-result in the same string: &quot;*.*&quot;). If the user enters &quot;A*&quot;, the string becomes
-&quot;A*.*&quot;. If the user enters &quot;A*.&quot; the string remains unchanged. If the user
-hits Ctrl-C, the current logic state is set to FALSE. Otherwise, the logic
-state is set to TRUE.</pre>
-<pre>Example:</pre>
-<pre>        GETFILESPEC
-        IF_TRUE
-                FILE_DOWNLOAD
-                END_IF</pre>
-<pre><b>GETLINES
-</b>--------
-This function only has an effect if the user is logged on remotely, has
-ANSI terminal capability and their screen lines set to &quot;Auto-detect&quot;. It
-sends an ANSI sequence to detect the number of screen lines in the text window
-of the remote terminal and waits for a response.</pre>
-<pre><b>GETNUM [any_var] &lt;#&gt;
-  args: dest	  max
-</b>---------------------
-This function is similar to GETSTR with the exception that it only excepts
-numbers as input and automatically stops accepting input if the number being
-input would exceed max (maximum of 32767). The dest variable (current
-command string if not specified) will contain the number and the current logic
-state will be TRUE unless the user hit 'Q', Ctrl-C, or enter instead of a
-number.
-
-<b>GET_TEMPLATE &lt;&quot;str&quot;&gt;
-</b>------------------
-This function is much line GETLINE except that an input template is passed
-as an argument to this function. The template is useful when requiring the
-user to input a string of a fixed format, like a date, for example. The
-characters in the template have special meaning: N indicates only a number may
-be used in this position, A indicates only an alphabetic character, and !
-indicates any character may be used in that position. Characters other than
-N, A, or ! are automatically displayed and used in the current command string
-in those positions. The first character of the template must be either N, A, or
-!. An example (date format):</pre>
-<pre>	GET_TEMPLATE &quot;NN/NN/NN&quot;</pre>
-<pre>would require the user to input two numbers, then automatically skip the
-slash character, two more numbers, skip the slash, then two more numbers.</pre>
-<pre>Another example (Canadian postal code):</pre>
-<pre>	GET_TEMPLATE &quot;ANA NAN&quot;</pre>
-<pre>would require the user to input a letter, then a number, another letter,
-automatically skip the space, another number, another letter, and one more
-number. No other characters (symbols or otherwise) would be allowed in the
-string using the above template example.</pre>
-<pre><b>CHKSYSPASS
-</b>----------
-This function (&quot;Check System Password&quot;) displays an SY: prompt to the user
-and waits for the user to input the system password (with no echo). If the
-password is correct, the current logic state is set to TRUE, otherwise it
-is set to FALSE.
-
-<b>CREATE_SIF &lt;&quot;str&quot;&gt;
-      args: file
-</b>----------------
-This function is used to present the user with a SIF questionnaire and store
-their answers in a data file. The str argument is the filename of a .SIF file
-(without the .SIF extension) located in your Synchronet TEXT directory. The
-user's answers are stored in a data file whose path and filename are specified
-in the current command string. The data file should be specified with the
-user's number to ensure unique data filenames. Example:</pre>
-<pre>	SETSTR &quot;C:\\SBBS\\USER%4.DAT&quot;
-	CREATE_SIF &quot;NEWUSER&quot;</pre>
-<pre>This would read the file TEXT\NEWUSER.SIF and the user would fill-out the
-questionnaire with all answers being stored in the file C:\SBBS\USER####.DAT
-(where #### would be the user's number padded with zeros to four digits).
-The questionnaire could then be read back with the answers filled in.
-Example:</pre>
-<pre>	SETSTR &quot;C:\\SBBS\\USER%4.DAT&quot;
-	READ_SIF &quot;NEWUSER&quot;</pre>
-<pre>See the Synchronet Sysop Manual for details on the SIF questionnaire format.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="MiscellaneousFunctions">[4.7] - Miscellaneous Functions</a>
-</h2>
-<pre><b>ONLINE
-</b>------
-Assume online execution (default mode), auto-return from module if user is
-disconnected or logged off.</pre>
-<pre><b>OFFLINE
-</b>-------
-Assume offline execution, no carrier and no one online locally. If used
-(for OFFLINE modules), must be the FIRST executed function of the module.</pre>
-<pre><b>LOGIN &lt;&quot;cstr&quot;&gt;
- args: pwprompt
-</b>---------------
-Process login attempt using the current command string as the user name/number
-and pwprompt for the password prompt. This function may also prompt for the
-system password with the SY: prompt if the user has level 90 or higher.</pre>
-<pre><b>LOGON
-</b>-----
-Logon the currently logged-in user. This function must be called before the
-LOGIN module terminates if the user is to be allowed online. This function,
-in turn, executes the LOGON module, if one is configured in SCFG.</pre>
-<pre><b>LOGOFF
-</b>------
-This function prompts the user if they really wish to log off. If they
-answer Yes, then any logoff events are executed and the LOGOFF menu file
-is displayed before they are disconnected.</pre>
-<pre><b>LOGOFF_FAST
-</b>-----------
-This function immediately drops carrier and logs the user off. It differs
-from the HANGUP function in that it performs a SYNC function, then it
-immediately drops carrier, as opposed to the HANGUP function which does not
-perform a SYNC operation and has a buffer flush delay before actually
-dropping carrier.</pre>
-<pre><b>LOGOUT
-</b>------
-Logout the currently logged-on user. This function is used solely for
-re-logging-in an already connected user.</pre>
-<pre><b>NEWUSER
-</b>-------
-Begins the new user application process.
-
-<b>SET_MENU_DIR &lt;&quot;str&quot;&gt;
-	args: dir
-</b>------------------
-This function sets the default menu directory for the MENU function (normally
-..\TEXT\MENU). This function is useful for globally changing the directory
-where MENU files will be retrieved from (including internal Synchronet
-functions that can not be modified with a shell). The following is an example
-of how to use this function along with the MENU function:</pre>
-<pre>        # The next line would display ..\TEXT\MENU\MAIN.*
-	MENU &quot;MAIN&quot;</pre>
-<pre>        # Change the directory for menus</pre>
-<pre>	MENU_DIR &quot;..\TEXT\MYMENUS&quot;</pre>
-<pre>        # This next line would now display ..\TEXT\MYMENUS\MAIN.*
-	MENU &quot;MAIN&quot;</pre>
-<pre><b>SET_MENU_FILE &lt;&quot;str&quot;&gt;
-	 args: path_and_filename
-</b>--------------------------------
-This function is used to OVERRIDE the filename specified for a menu displayed
-in an internal Synchronet function. Example:</pre>
-<pre>	SET_MENU_FILE &quot;..\TEXT\MYMENUS\EMAIL.RIP&quot;
-        MAIL_READ</pre>
-<pre><b>SYNC
-</b>----
-This function synchronizes the local and remote displays (waits for the remote
-terminal to catch up), displays any internode messages waiting for this node,
-and synchronizes the current node status with the shared node database file.
-It should be called before all command prompts are displayed.</pre>
-<pre><b>ASYNC
-</b>-----
-This function is identical to the SYNC function with the exception that any
-pending output (menu, text file, etc.) can be aborted by hitting any key.</pre>
-<pre><b>RIOSYNC
-</b>-------
-This function synchronizes the remote console (waits for output buffers to
-be sent or aborted).</pre>
-<pre><b>PUT_NODE
-</b>--------
-Force flush (write) of current node information (who's online, etc) to disk.</pre>
-<pre><b>PAUSE_RESET
-</b>-----------
-This function resets the line counter used for the automatic screen pause
-Feature.</pre>
-<pre><b>CLEAR_ABORT
-</b>-----------
-This function clears the abort (Ctrl-C) status flag.</pre>
-<pre><b>UNGETKEY
-</b>--------
-This function puts the current command key into the input buffer to be the
-next key retrieved with GETKEY, GETCMD, GETSTR, or similar functions.</pre>
-<pre><b>UNGETSTR
-</b>--------
-This function puts the entire contents of the current command string into the
-input buffer.</pre>
-<pre><b>HANGUP
-</b>------
-This function immediately disconnects and logs the user off.
-
-<b>EXEC &lt;&quot;str&quot;&gt;
-args: cmd
-</b>----------
-This function calls the operating system to spawn the 'cmd' command line
-specified. Remote users will not see or be able to interact with the program
-executed unless the program is aware of the remote user and is specifically
-designed to be run remotely (i.e. DOORs).</pre>
-<pre>If an internal DOS command is to be executed, a command processor must be
-loaded. Example:</pre>
-<pre>	EXEC &quot;COMMAND /C COPY C:\FILES\NEWFILE.TXT C:\DOWNLOADS&quot;</pre>
-<pre>Synchronet's command line specifiers can also be used:</pre>
-<pre>	EXEC &quot;%!dsz portx %u,%i sz file.zip&quot;</pre>
-<pre>See the Synchronet sysop manual, appendix A for a list of valid specifiers.
-When used from a command shell or module, %f will be replaced with the path
-to the current file directory, and %s will be replaced with the current
-command string.</pre>
-<pre><b>EXEC_INT &lt;&quot;str&quot;&gt;
-    args: cmd
-</b>--------------
-This function (&quot;Execute with I/O intercepted&quot;) is identical to the EXEC
-function with the exception that DOS I/O interrupts (screen output and keyboard
-input) is intercepted and redirected to the COM port if the user is logged on
-remotely. This allows programs that use standard DOS I/O for screen output
-to be displayed remotely. Example:</pre>
-<pre>	EXEC_INT &quot;COMMAND /C DIR C:\FILES\*.TXT&quot;</pre>
-<pre><b>EXEC_BIN &lt;&quot;str&quot;&gt;
-    args: name
-</b>--------------
-This function loads and executes a Baja module. A .BIN file with the filename
-specified as the 'name' argument must exist in the Synchronet EXEC directory
-for this function. If for example, you want a shell to load and execute
-MYMOD.BIN from your EXEC directory, you would add the following to one or more
-command shells:</pre>
-<pre>	EXEC_BIN &quot;MYMOD&quot;</pre>
-<pre><b>EXEC_XTRN &lt;&quot;str&quot;&gt;
-     args: code
-</b>---------------
-This function executes the online external program specified by it's internal
-code with the 'code' argument. If an online external program is not found with
-a matching internal code or the user does not have access to that program, this
-function does nothing.
-
-<b>LOG &lt;&quot;cstr&quot;&gt;
-args: string
-</b>------------
-This function writes the C type 'str' argument to the system's activity log
-file for the current date if the user is logged on remotely.</pre>
-<pre><b>LOGSTR
-</b>------
-This function is identical to the LOG function with the exception that a
-string argument is not used, but instead the current command string is written
-to the system's activity log file.</pre>
-<pre><b>LOGKEY
-</b>------
-This function writes the current command key to the system's activity log file
-for the current date if the user is logged on remotely.</pre>
-<pre><b>LOGKEY_COMMA
-</b>------------
-This function is identical to the LOGKEY function, with the exception that a
-comma (,) is prepended to the command key to separate it visually from other
-logged command keys.</pre>
-<pre><b>NODE_STATUS &lt;#&gt; 						NODEDEFS.INC
-       args: status
-</b>-------------------
-This function is used to set the current node status. The valid status
-parameters (defined in NODEDEFS.INC) are:</pre>
-<pre>Status			Description
-~~~~~~			~~~~~~~~~~~
-NODE_WFC		Waiting for caller
-NODE_LOGON		User logging on
-NODE_NEWUSER		New user applying for access
-NODE_INUSE		User online
-NODE_QUIET		User online in quiet mode
-NODE_OFFLINE		Offline (down)
-NODE_NETTING		Networking
-NODE_EVENT_WAITING	Waiting for another node to run timed event
-NODE_EVENT_RUNNING	Running timed event
-NODE_EVENT_LIMBO	Waiting for all nodes to be downed</pre>
-<pre>Only one status parameter may be used.
-
-<b>NODE_ACTION &lt;#&gt; 						NODEDEFS.INC
-       args: action
-</b>-------------------
-This function is used to set the current node action. The valid action
-parameter (defined in NODEDEFS.INC) are:</pre>
-<pre>Action		Description
-~~~~~~		~~~~~~~~~~~
-NODE_MAIN	Main Prompt
-NODE_RMSG	Reading Messages
-NODE_RMAL	Reading Mail
-NODE_SMAL	Sending Mail
-NODE_RTXT	Reading G-Files
-NODE_RSML	Reading Sent Mail
-NODE_PMSG	Posting Message
-NODE_AMSG	Auto-message
-NODE_XTRN	Running External Program
-NODE_DFLT	Main Defaults Section
-NODE_XFER	File Transfer Prompt
-NODE_DLNG	Downloading File
-NODE_ULNG	Uploading File
-NODE_BXFR	Bidirectional Transfer
-NODE_LFIL	Listing Files
-NODE_LOGN	Logging on
-NODE_LCHT	In Local Chat with Sysop
-NODE_MCHT	In Multi-Chat with Other Nodes
-NODE_GCHT	In Local Chat with Guru
-NODE_CHAT	In Chat Section
-NODE_SYSP	Sysop Activity
-NODE_TQWK	Transferring QWK packet
-NODE_PCHT	In Private Chat
-NODE_PAGE	Paging another node for Private Chat
-NODE_RFSD	Retrieving file from seq dev (node.aux=dev)</pre>
-<pre>Only one action parameter may be used.</pre>
-<pre><b>INC_MAIN_CMDS
-</b>-------------
-This function increments the &quot;main menu command&quot; counter that can be used in
-ARS comparisons.</pre>
-<pre><b>INC_FILE_CMDS
-</b>-------------
-This function increments the &quot;file menu command&quot; counter that can be used in
-ARS comparisons.
-
-<b>COMPARE_USER_MISC &lt;#&gt;						 USERDEFS.INC
-	     args: attrs
-</b>------------------------
-This function is used to compare the current user's miscellaneous attributes
-to the attrs argument specified. If all the attrs specified are ENABLED for the
-current user, then the current logic state is set to TRUE, otherwise it is set
-to FALSE. One or more of the following attributes (defined in USERDEFS.INC)
-can be specified:</pre>
-<pre>Attribute       Description
-~~~~~~~~~	~~~~~~~~~~~
-UM_EXPERT	Expert menu mode
-UM_DELETED	Deleted user
-UM_INACTIVE	Inactive user
-UM_AUTOTERM	Automatic terminal type detection
-UM_ANSI 	ANSI terminal
-UM_COLOR	Color terminal (ANSI)
-UM_RIP		RIP compatible terminal
-UM_WIP		WIP compatible terminal
-UM_NO_EXASCII	Extended ASCII not supported
-UM_UPAUSE	Automatic screen pause
-UM_SPIN 	Spinning cursor
-UM_ANFSCAN	Automatic new file scan
-UM_CLRSCRN	Clear screen between messages
-UM_QUIET	Default to quiet mode (if 'Q' exempt)
-UM_BATCHFLAG	Batch flagging mode enabled
-UM_NETMAIL	Forward E-mail to NetMail
-UM_CURSUB	Remember current sub-board and directory
-UM_ASK_NSCAN	Ask for new-scans at logon
-UM_ASK_SSCAN	Ask for your message scan at logon
-UM_COLDKEYS	Cold keys (CR required - opposite of Hot Keys)
-UM_EXTDESC	Extended file descriptions in listings</pre>
-<pre>Multiple attributes can be specified by ORing them together with the OR (|)
-symbol. Example:</pre>
-<pre>	COMPARE_USER_MISC UM_ANSI|UM_COLOR
-
-
-<b>COMPARE_USER_CHAT &lt;#&gt;                                           USERDEFS.INC
-             args: attrs
-</b>------------------------
-This function is used to compare the current user's chat attributes to the
-attrs argument specified. If all the attrs specified are ENABLED for the
-current user, then the current logic state is set to TRUE, otherwise it is set
-to FALSE. One or more of the following attributes (defined in USERDEFS.INC) can
-be specified:</pre>
-<pre>Attribute       Description
-~~~~~~~~~	~~~~~~~~~~~
-CHAT_ECHO       Echo users input in multinode chat
-CHAT_ACTION     Action commands enabled in multinode chat
-CHAT_NOPAGE     This user can't be paged by other users
-CHAT_NOACT      This user will not receive node activity (logon/off) alerts
-CHAT_SPLITP     This user prefers split-screen private node-to-node chat</pre>
-<pre>Multiple attributes may be specified by ORing them together with the OR (|)
-symbol. Example:</pre>
-<pre>        COMPARE_USER_CHAT CHAT_NOACT|CHAT_NOPAGE</pre>
-<pre><b>COMPARE_USER_QWK &lt;#&gt;						USERDEFS.INC
-            args: attrs
-</b>-----------------------
-This function is used to compare the current user's QWK attributes to the attrs
-argument specified. If all the attrs specified are ENABLED for the current
-user, then the current logic state is set to TRUE, otherwise it is set to
-FALSE. One or more of the following attrs (defined in USERDEFS.INC) can be
-specified:</pre>
-<pre>Attribute       Description
-~~~~~~~~~	~~~~~~~~~~~
-QWK_FILES       Include new files list in QWK packet
-QWK_EMAIL       Include unread e-mail/netmail messages in QWK packet
-QWK_ALLMAIL     Include all mail in QWK packet
-QWK_DELMAIL     Automatically delete packed e-mail after download
-QWK_BYSELF      Include messages in QWK packet from self
-QWK_EXPCTLA     Expand Ctrl-A codes in messages to ANSI
-QWK_RETCTLA     Retain (keep) Ctrl-A codes in messages
-QWK_ATTACH      Include file attachments in QWK packet
-QWK_NOINDEX     Do not include .NDX files in QWK packet
-QWK_TZ          Include time zone (@TZ) in messages
-QWK_VIA         Include message path (@VIA) in messages
-QWK_NOCTRL      Do not include control files (DOOR.ID, CONTROL.DAT, etc)</pre>
-<pre>Multiple attributes may be specified by ORing them together with the OR (|)
-symbol. Example:</pre>
-<pre>	COMAPARE_USER_QWK QWK_TZ|QWK_VIA
-
-<b>COMPARE_NODE_MISC &lt;#&gt;						NODEDEFS.INC
-             args: attrs
-</b>------------------------
-This function is used to compare the current node's misc attributes to the
-attrs argument specified. If all the attrs specified are ENABLED for the
-current node, then the current logic state is set to TRUE, otherwise it is set
-to FALSE. The valid attributes (defined in NODEDEFS.INC) are:</pre>
-<pre>Attribute	Description
-~~~~~~~~~	~~~~~~~~~~~
-NODE_ANON	Anonymous node
-NODE_LOCK	Locked node (sysop's and N exempt users only)
-NODE_INTR	Interrupted node (log user off ASAP)
-NODE_MSGW	Short message waiting for this node
-NODE_POFF	Not available for paging
-NODE_AOFF	No node activity alerts
-NODE_UDAT	User data has been updated by another node
-NODE_RRUN	Re-run this node after user logs off
-NODE_EVENT	Run node daily event after user logs off
-NODE_DOWN	Down this node after user logs off
-NODE_NMSG	Node message waiting for this node
-NODE_EXT	Extended status information available for this node</pre>
-<pre>Multiple attributes may be specified by ORing them together with the OR (|)
-symbol. Example:</pre>
-<pre>	COMPARE_NODE_MISC NODE_DOWN|NODE_INTR</pre>
-<pre><b>TOGGLE_USER_MISC &lt;#&gt;					       USERDEFS.INC
-	    args: attrs
-</b>-----------------------
-This function is used to toggle specific attributes on or off for the current
-user. The valid attrs for the argument are identical to those used for the
-COMPARE_USER_MISC function.
-  </pre>
-<pre>You cannot specify if you want the attribute turned ON or OFF with this
-command. Use in combination with the COMPARE_USER_MISC function to specifically
-enable or disable a user's attribute. Example to turn the NETMAIL misc attr OFF
-for the current user:</pre>
-<pre>        !INCLUDE USERDEFS.INC
-	COMPARE_USER_MISC UM_NETMAIL
-        IF_TRUE
-		TOGGLE_USER_MISC UM_NETMAIL
-                END_IF</pre>
-<pre><b>TOGGLE_USER_CHAT &lt;#&gt;						USERDEFS.INC
-            args: attrs
-</b>-----------------------
-This function is used to toggle specific chat attributes on or off for the
-current user.  The valid attrs for the argument are identical to
-those used for the COMPARE_USER_CHAT function.</pre>
-<pre>You cannot specify if you want the attribute turned ON or OFF with this
-command. Use in combination with the COMPARE_USER_CHAT function to specifically
-enable or disable a chat attribute. Example to turn the Split Screen Private
-Chat (CHAT_SPLITP) attribute OFF for the current user:</pre>
-<pre>	COMPARE_USER_CHAT CHAT_SPLITP
-        IF_TRUE
-		TOGGLE_USER_CHAT CHAT_SPLITP
-                END_IF</pre>
-<pre><b>TOGGLE_USER_QWK &lt;#&gt;						USERDEFS.INC
-	   args: attrs
-</b>----------------------
-This function is used to toggle specific QWK attributes on or off for the
-current user. The valid attrs for the argument are identical to those used for
-the COMPARE_USER_QWK function.</pre>
-<pre>You cannot specify if you want the attr turned ON or OFF with this command. Use
-in combination with the COMPARE_USER_QWK function to specifically enable or
-disable a QWK attribute.</pre>
-<pre><b>TOGGLE_NODE_MISC &lt;#&gt;						NODEDEFS.INC
-	    args: attrs
-</b>-----------------------
-This function is used to toggle the miscellaneous attributes associated with
-the current node. The valid attrs for the argument are identical to those used
-for the COMPARE_NODE_MISC function.</pre>
-<pre><b>TOGGLE_USER_FLAG &lt;char&gt; &lt;char&gt;
-	    args: set	 flag
-</b>-----------------------------
-This function is used to toggle the state of one of the current user's flags.
-The first argument is a single character indicating the flag set. Valid
-flag sets are 1, 2, 3, 4, or E for exemption, or R for restriction. The
-second argument is the actual flag character to toggle (A through Z).
-
-<b>ADJUST_USER_CREDITS &lt;#&gt;
-	       args: adj
-</b>------------------------
-This function is used to add or subtract credits from the current user. The
-'adj' argument must be either a positive or negative number (in Kilobytes).
-Example, to subtract 100K in credits from the current user:</pre>
-<pre>        ADJUST_USER_CREDITS -100</pre>
-<pre><b>ADJUST_USER_MINUTES &lt;#&gt;
-	       args: adj
-</b>------------------------
-This function is used to add or subtract minutes from the current user's
-minute bank. The 'adj' argument must be either a positive or negative number.
-Example, to subtract 60 minutes from the current user:</pre>
-<pre>	ADJUST_USER_MINUTES -60</pre>
-<pre><b>SET_USER_LEVEL &lt;#&gt;
-	  args: level
-</b>---------------------
-This function changes the current user's security level to the number passed
-as the argument.
-
-<b>SET_USER_STRING &lt;#&gt;						USERDEFS.INC
-	   args: user_string
-</b>----------------------------
-This function changes one of the current user's text string fields to the
-value of the current command string. The user_string argument must be one of
-the following (defined in USERDEFS.INC):</pre>
-<pre>User_string		Description
-~~~~~~~~~~~		~~~~~~~~~~~
-USER_STRING_ALIAS	User's alias or real name on real name based BBSs
-USER_STRING_REALNAME	User's real name or company name
-USER_STRING_HANDLE	User's chat handle
-USER_STRING_COMPUTER	User's computer type description
-USER_STRING_NOTE	User's note/Caller-ID
-USER_STRING_ADDRESS	User's street address
-USER_STRING_LOCATION	User's city, state
-USER_STRING_ZIPCODE	User's zip/postal code
-USER_STRING_PASSWORD	User's password
-USER_STRING_BIRTHDAY	User's birthday (MM/DD/YY or DD/MM/YY)
-USER_STRING_PHONE	User's phone number
-USER_STRING_MODEM	User's modem type description
-USER_STRING_COMMENT	User's secret sysop comment</pre>
-<pre><b>USER_EVENT &lt;#&gt;							SBBSDEFS.INC
-      args: event_type
-</b>----------------------
-This function forces immediate execution of all online events for the specified
-event_type. The valid event_types (defined in SBBSDEFS.INC) are:</pre>
-<pre>Event_type		Description
-~~~~~~~~~~		~~~~~~~~~~~
-EVENT_LOGON		Execute during logon sequence
-EVENT_NEWUSER		Execute during newuser app.
-EVENT_BIRTHDAY		Execute on birthday
-EVENT_LOGOFF		Execute during normal logoff</pre>
-<pre><b>AUTO_MESSAGE
-</b>------------
-This function allows the user to read and write to the auto-message. If the
-user has the 'W' restriction, they will not be allowed to write to the
-auto-message.</pre>
-<pre><b>USER_DEFAULTS
-</b>-------------
-This function takes the user to the default configuration menu where they
-can modify their default settings (e.g. Terminal type, Command Shell, etc).
-If the user selects a new command shell while in this function, the new
-shell is loaded and executed immediately (from the top) instead of resuming
-with the shell that originally called this function.
-
-<b>USER_EDIT
-</b>---------
-This function is used to edit the user information for the user name or number
-specified in the current command string. Since almost all user information can
-be changed and other users can be edited from this section, this is normally
-reserved as a &quot;sysop only&quot; operation.</pre>
-<pre><b>TEXT_FILE_SECTION
-</b>-----------------
-This function takes the user to the General Text File section of the system.</pre>
-<pre><b>XTRN_EXEC
-</b>---------
-This function is identical to the EXEC_XTRN function with the exception that
-the external program's internal code is contained in the current command string
-instead of an argument.</pre>
-<pre><b>XTRN_SECTION
-</b>------------
-This function takes the user to the external program section of the system.</pre>
-<pre><b>MINUTE_BANK
-</b>-----------
-This function allows the user to convert credits into minutes, or deposit
-unused free minutes (if allowed) in their minute bank.</pre>
-<pre><b>CHANGE_USER
-</b>-----------
-This function prompts the user for the system password and if entered
-correctly, then prompts them for the user name or number to change into.
-This is normally reserved as a &quot;sysop only&quot; operation. After changing into
-a &quot;non-sysop&quot; user, the temp sysop status is set so the user may change back
-into the original or another user.</pre>
-<pre><b>ANSI_CAPTURE
-</b>------------
-This function enables the capture of ANSI terminal escape sequences when the
-local capture (Alt-L) is in use. This is normally reserved as a &quot;sysop only&quot;
-operation.</pre>
-<pre><b>FINDUSER
-</b>--------
-Scans the user database for the user name or partial name in the current
-command string. If the name is found, the logic state is set to TRUE. If the
-name is not found, it is set to FALSE.</pre>
-<pre><b>SELECT_SHELL
-</b>------------
-This function displays a list of the available command shells and allows the
-user to choose a command shell. If a shell is not selected, the logic state
-is set to FALSE.
-
-<b>SET_SHELL
-</b>---------
-This function attempts to set the current user's shell to the internal code
-contained in the current command string. If the internal code is not valid or
-the user does not have access to that shell, the logic state is set to FALSE.</pre>
-<pre><b>SELECT_EDITOR
-</b>------------
-This function displays a list of the available external editors and allows the
-user to choose an editor. If an editor is not selected, the logic state
-is set to FALSE.</pre>
-<pre><b>SET_EDITOR
-</b>----------
-This function attempts to set the current user's editor to the internal code
-contained in the current command string. If the internal code is not valid or
-the user does not have access to that external editor, the logic state is set
-to FALSE.</pre>
-<pre><b>TRASHCAN &lt;&quot;str&quot;&gt;
-    args: file
-</b>--------------
-This function opens the file TEXT\file.CAN and searches for the current
-command string. If the string is found in the file the current logic state is
-set to TRUE and if the file TEXT\BADfile.MSG exists, it is automatically
-displayed to the user. If the string is not found, the logic state is set to
-FALSE.</pre>
-<pre>If a line in the .CAN file ends in a tilde (~), the contents of the line may
-be found anywhere in the tested string and result in a TRUE logic state.</pre>
-<pre>If a line in the .CAN file ends in a caret (^), the contents of the line must
-begin the tested string to result in a TRUE logic state.</pre>
-<pre><b>GETTIMELEFT
-</b>-----------
-Checks the user's current time left online and disconnects the user (with a
-message) if they're out of time.</pre>
-<pre><b>MSWAIT &lt;#&gt;
-  args: num
-</b>-----------
-Suspends execution for num milliseconds (gives up time-slices).</pre>
-<pre><b>SEND_FILE_VIA &lt;char&gt; &lt;&quot;str&quot; or str_var&gt;
-	 args: prot   path_and_filename
-</b>---------------------------------------
-Immediately begins a transfer of a file from the local disk (path_and_filename)
-to the remote user using the specified protocol (prot must match the command
-key of one of the configured protocols in SCFG).
-
-<b>RECEIVE_FILE_VIA &lt;char&gt; &lt;&quot;str&quot; or str_var&gt;
-	 args: prot   path_and_filename
-</b>---------------------------------------
-Immediately begins a transfer of a file from the remote user using the
-specified protocol (prot must match the command key of one of the configured
-protocols in SCFG). The path_and_filename variable may be set to a directory
-name for protocols that don't require a specified filename (i.e. Ymodem,
-Zmodem, etc - NOT Xmodem). [SBBS 2.3]
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="MailFunctions">[4.8] - Mail Functions</a>
-</h2>
-<pre>The following functions are related to private E-mail.</pre>
-<pre><b>MAIL_READ
-</b>---------
-This function retrieves and displays mail waiting in the mail-box of the
-current user, if any.</pre>
-<pre><b>MAIL_READ_SENT
-</b>--------------
-This function retrieves and displays mail that the current user has sent and
-is still pending deletion in the mail-box(es) of the recipient(s).</pre>
-<pre><b>MAIL_READ_ALL
-</b>-------------
-This function retrieves and displays all the e-mail on the system. This
-function is normally reserved as a &quot;sysop only&quot; operation.</pre>
-<pre><b>MAIL_SEND
-</b>---------
-This function attempts to send mail to the user specified by the current
-command string. If the user name or number specified in the string cannot be
-located, the operation is aborted and the current logic state is set to FALSE.
-If the user name or number is located, the current logic state is set to TRUE.
-Example usage:</pre>
-<pre>        PRINT &quot;Send mail to who? &quot;
-        GETNAME 25
-        MAIL_SEND</pre>
-<pre><b>MAIL_SEND_FILE
-</b>--------------
-This function is identical to the MAIL_SEND function with the exception that
-a file attachment is included with the mail message.</pre>
-<pre><b>MAIL_SEND_BULK
-</b>--------------
-This function is used to send bulk (multiple destination) mail. The function
-is normally reserved as a &quot;sysop only&quot; operation, but some sysops may want
-some or all users to have the ability to send bulk mail.</pre>
-<pre><b>MAIL_SEND_FEEDBACK
-</b>------------------
-This function is identical to the MAIL_SEND function with the exception that
-&quot;Re: Feedback&quot; is placed at the top of the mail message.
-
-<b>MAIL_SEND_NETMAIL
-</b>-----------------
-This function prompts the user for a user name and netmail address. If the
-user just hits CR, the current logic state is set to FALSE, otherwise a NetMail
-operation is attempted and the logic state is set to TRUE.</pre>
-<pre><b>MAIL_SEND_NETFILE
-</b>-----------------
-This function is identical to the MAIL_SEND_NETMAIL function with the exception
-that if the NetMail file attachments are allowed, this function will allow the
-user to send an attached file to a netmail message (for FidoNet or Internet).
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="MessageBaseFunctions">[4.9] - Message Base Functions</a>
-</h2>
-<pre>The following functions are related to the system's message base.</pre>
-<pre><b>MSG_SET_AREA
-</b>------------
-This function uses the current command string to search all sub-boards the
-current user has access to for an internal code matching the current command
-string. If the internal code is found, that sub-board becomes the current
-sub-board and the current logic state is set to TRUE, otherwise it is set to
-FALSE and the current sub-board remains unchanged.</pre>
-<pre><b>MSG_SET_GROUP
-</b>-------------
-This function uses the current command string to search all message groups the
-current user has access to for a short name matching the current command
-string. If the short name is found, that group becomes the current group and
-the current logic state is set to TRUE, otherwise it is set to FALSE and the
-current group remains unchanged.</pre>
-<pre><b>MSG_SELECT_AREA
-</b>---------------
-This function prompts the user to select a message group (if the user has
-access to more than one) and sub-board. If the user aborts the selection,
-the current logic state is set to FALSE and the current sub-board is unchanged.
-Otherwise, the logic state is set to TRUE and the selected sub-board becomes
-the current sub-board.</pre>
-<pre><b>MSG_SHOW_GROUPS
-</b>---------------
-This function displays a list of message groups the current user has access to.</pre>
-<pre><b>MSG_SHOW_SUBBOARDS
-</b>------------------
-This function displays a list of sub-boards within the current message group
-that the user has access to.</pre>
-<pre><b>MSG_GROUP_UP
-</b>------------
-This function moves the current message group up by one. If already at the
-highest group, then it wraps to the first group.</pre>
-<pre><b>MSG_GROUP_DOWN
-</b>--------------
-This function is the opposite of the MSG_GROUP_UP function.
-
-<b>MSG_SUBBOARD_UP
-</b>---------------
-This function moves the current message sub-board up by one. If already at
-the highest sub-board in the current group, it wraps to the first sub-board
-in the current group.</pre>
-<pre><b>MSG_SUBBOARD_DOWN
-</b>-----------------
-This function is the opposite of the MSG_SUBBOARD_UP function.</pre>
-<pre><b>MSG_GET_SUB_NUM
-</b>---------------
-This function accepts a number from the user to change the current sub-board.</pre>
-<pre><b>MSG_GET_GRP_NUM
-</b>---------------
-This function accepts a number from the user to change the current message
-group.</pre>
-<pre><b>MSG_READ
-</b>--------
-This function is used to read messages in the current sub-board. If the
-read is aborted, the current logic state is set to FALSE, otherwise it is set
-to TRUE.</pre>
-<pre><b>MSG_POST
-</b>--------
-This function attempts to post a message on the current sub-board. If the user
-does not have posting access on the current sub-board or the post is aborted,
-the current logic state is set to FALSE, otherwise it is set to TRUE.</pre>
-<pre><b>MSG_QWK
-</b>-------
-This function puts the user in the QWK message packet section.</pre>
-<pre><b>MSG_PTRS_CFG
-</b>------------
-This function allows the user to manipulate their new-message scan pointers.</pre>
-<pre><b>MSG_PTRS_REINIT
-</b>---------------
-This function resets the user's new-message scan pointers to their value at
-logon.</pre>
-<pre><b>MSG_NEW_SCAN_CFG
-</b>----------------
-This function allows the user to manipulate their new-message scan
-configuration.</pre>
-<pre><b>MSG_NEW_SCAN
-</b>------------
-This function performs a new message scan on either the current sub-board,
-current message group, or all sub-boards.</pre>
-<pre><b>MSG_NEW_SCAN_ALL
-</b>----------------
-This function performs a new message scan on all sub-boards.</pre>
-<pre><b>MSG_NEW_SCAN_SUB
-</b>----------------
-This function performs a new message scan on the current sub-board. If the
-new-scan is aborted, the current logic state is set to FALSE.</pre>
-<pre><b>MSG_CONT_SCAN
-</b>-------------
-This function performs a continuous new message scan on either the current
-sub-board, current message group, or all sub-boards.</pre>
-<pre><b>MSG_CONT_SCAN_ALL
-</b>-----------------
-This function performs a continuous new message scan on all sub-boards.</pre>
-<pre><b>MSG_BROWSE_SCAN
-</b>---------------
-This function is identical to the MSG_NEW_SCAN function, with the exception
-that if there are no new messages in a sub-board, the last message posted
-will be displayed.</pre>
-<pre><b>MSG_BROWSE_SCAN_ALL
-</b>-------------------
-This function performs a browse scan on all sub-boards.</pre>
-<pre><b>MSG_FIND_TEXT
-</b>-------------
-This function prompts for a search string from the user and searches the
-current sub-board, current group, or all sub-boards for the text.</pre>
-<pre><b>MSG_FIND_TEXT_ALL
-</b>-----------------
-This function performs a text search on all sub-boards.</pre>
-<pre><b>MSG_YOUR_SCAN_CFG
-</b>-----------------
-This function allows the user to configure their un-read personal message
-scan.</pre>
-<pre><b>MSG_YOUR_SCAN
-</b>-------------
-This function performs an un-read personal message scan on the current
-sub-board, current message group, or all sub-boards.</pre>
-<pre><b>MSG_YOUR_SCAN_ALL
-</b>-----------------
-This function performs an un-read personal message scan on all sub-boards.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="FileBaseFunctions">[4.10] - File Base Functions</a>
-</h2>
-<pre><b>FILE_SET_AREA
-</b>-------------
-This function uses the current command string to search all directories the
-current user has access to for an internal code matching the current command
-string. If the internal code is found, that directory becomes the current
-directory and the current logic state is set to TRUE, otherwise it is set to
-FALSE and the current directory remains unchanged.</pre>
-<pre><b>FILE_SET_LIBRARY
-</b>----------------
-This function uses the current command string to search all libraries the
-current user has access to for a short name matching the current command
-string. If the short name is found, that library becomes the current library
-and the current logic state is set to TRUE, otherwise it is set to FALSE and
-the current library remains unchanged.</pre>
-<pre><b>FILE_SELECT_AREA
-</b>---------------
-This function prompts the user to select a file library (if the user has
-access to more than one) and directory. If the user aborts the selection,
-the current logic state is set to FALSE the current directory is unchanged.
-Otherwise, the logic state is set to TRUE and the selected directory becomes
-the current directory.</pre>
-<pre><b>FILE_SHOW_LIBRARIES
-</b>-------------------
-This function displays a list of all file libraries the current user has
-access to.</pre>
-<pre><b>FILE_SHOW_DIRECTORIES
-</b>---------------------
-This function displays a list of all directories within the current library
-that the user has access to.</pre>
-<pre><b>FILE_LIBRARY_UP
-</b>---------------
-This function increments the current file library. If already at the last
-library, it will wrap to the first library.</pre>
-<pre><b>FILE_LIBRARY_DOWN
-</b>-----------------
-This function is the opposite of the FILE_LIBRARY_UP function.</pre>
-<pre><b>FILE_DIRECTORY_UP
-</b>-----------------
-This function increments the current file directory. If already at the last
-directory in the current library, it will wrap to the first directory of the
-library.
-
-<b>FILE_DIRECTORY_DOWN
-</b>-------------------
-This function is the opposite of the FILE_DIRECTORY_UP function.</pre>
-<pre><b>FILE_GET_DIR_NUM
-</b>----------------
-This function waits for the user to enter a number to be used to change the
-current file directory.</pre>
-<pre><b>FILE_GET_LIB_NUM
-</b>----------------
-This function waits for the user to enter a number to be used to change the
-current file library.</pre>
-<pre><b>FILE_LIST
-</b>---------
-This function displays the contents matching the filespec contained in the
-current command string of the current file directory. If the listing is
-aborted, the current logic state is set to FALSE, otherwise it is set to TRUE.
-Example:</pre>
-<pre>        GETFILESPEC
-        IF_TRUE
-                FILE_LIST
-                END_IF</pre>
-<pre><b>FILE_LIST_EXTENDED
-</b>------------------
-This function displays the extended information about the files in the current
-directory that match the filespec contained in the current command string.</pre>
-<pre><b>FILE_VIEW
-</b>---------
-This function views the contents of the files that match the filespec in the
-current command string.</pre>
-<pre><b>FILE_UPLOAD
-</b>-----------
-This function attempts to upload to the current file directory. If the user
-cannot upload for some reason, the current logic state is set to FALSE.
-Otherwise, it is set to TRUE.</pre>
-<pre><b>FILE_UPLOAD_USER
-</b>----------------
-This function allows a user to upload a file specifically to another user,
-provided the sysop has created a &quot;User&quot; file transfer directory for
-user-to-user transfers. If the user cannot upload to the user directory or one
-doesn't exist, the current logic state is set to FALSE, otherwise it set to
-TRUE.
-
-<b>FILE_UPLOAD_SYSOP
-</b>-----------------
-This function allows the user to upload a file to the invisible sysop
-directory. If the user does not have upload access to the sysop directory or a
-sysop directory has not been created, the current logic state is set to FALSE,
-otherwise, it is set to TRUE.</pre>
-<pre><b>FILE_DOWNLOAD
-</b>-------------
-This function attempts to download all files matching the filespec contained
-in the current command string.</pre>
-<pre><b>FILE_DOWNLOAD_USER
-</b>------------------
-This function attempts to download any user-to-user files pending for the
-current user. If there are no files waiting for the user or the user does not
-have download access to the user directory, the current logic state is set
-to FALSE, otherwise it is set to TRUE.</pre>
-<pre><b>FILE_DOWNLOAD_BATCH
-</b>-------------------
-This function attempts to download any files in the batch download queue.
-If there are no files in the queue or the user answers No to the question if
-they wish to download the files now, then the current logic state is set to
-FALSE. If there are files in the queue and the user answers Yes to the question
-if they wish to download the files, then the logic state is set to TRUE.</pre>
-<pre><b>FILE_REMOVE
-</b>-----------
-This function attempts to remove any files the user has uploaded (unless
-R exempt) that match the filespec contained in the current command string.</pre>
-<pre><b>FILE_BATCH_ADD
-</b>--------------
-This function attempts to add the filename contained in the current command
-string to the batch download queue. If the filename is not found, the current
-logic state is set to FALSE.</pre>
-<pre><b>FILE_BATCH_ADD_LIST
-</b>-------------------
-This function opens the list file specified in the current command string and
-attempts to add each filename (one filename per line) to the current user's
-batch download queue. After the list file is read, it is automatically deleted.</pre>
-<pre><b>FILE_BATCH_CLEAR
-</b>----------------
-This function clears the current batch download queue.</pre>
-<pre><b>FILE_BATCH_SECTION
-</b>------------------
-This function takes the user to the Batch/Bi-dir transfer menu where they
-can edit the batch queues and initiate batch or bi-directional file transfers.
-
-<b>FILE_TEMP_SECTION
-</b>-----------------
-This function takes the user to the temporary archive menu where they can
-extract archives, create file listings, and compress temporary files for
-download.</pre>
-<pre><b>FILE_NEW_SCAN
-</b>-------------
-This function scans the current directory, current library, or all directories
-for new files.</pre>
-<pre><b>FILE_NEW_SCAN_ALL
-</b>-----------------
-This function scans all directories for new files.</pre>
-<pre><b>FILE_FIND_TEXT
-</b>--------------
-This function prompts the user to enter a search string which is used in a
-text search of all file descriptions in the current directory, current library,
-or all directories.</pre>
-<pre><b>FILE_FIND_TEXT_ALL
-</b>------------------
-This function prompts the user for a search string to use in a text search
-of file descriptions in all directories.</pre>
-<pre><b>FILE_FIND_NAME
-</b>--------------
-This function prompts the user for a filespec and searches the current
-directory, current library, or all directories for files matching the
-specification.</pre>
-<pre><b>FILE_FIND_NAME_ALL
-</b>------------------
-This function prompts the user for a filespec and searches all directories for
-files matching that specification.</pre>
-<pre><b>FILE_PTRS_CFG
-</b>-------------
-This function allows the user to change their new file scan date/time. If the
-pointer is changed, the current logic state is set to TRUE, otherwise it is
-set to FALSE.</pre>
-<pre><b>FILE_SET_ALT_PATH
-</b>-----------------
-This function sets the current upload path to the alternate path number
-contained in the current command string. This function is normally reserved as
-a &quot;sysop only&quot; operation, used to upload files on CD-ROM in most cases.</pre>
-<pre><b>FILE_RESORT_DIRECTORY
-</b>---------------------
-This function is used to resort (if directory sort order or type has changed)
-and compress (if any deleted file slots exist) the current directory, current
-library or all directories. All other nodes must be inactive for this function
-to work. The current command string must be set (with SETSTR, GETSTR, or
-similar function) to &quot;ALL&quot; (resort all directories), &quot;LIB&quot; (resort current
-library), or &quot;&quot; (current directory only).</pre>
-<pre><b>FILE_GET
-</b>--------
-This function is used to remotely download a file that is not in the file
-database. This function is normally reserved as a &quot;sysop only&quot; operation.
-The path and filename to be downloaded are contained in the current command
-string.</pre>
-<pre><b>FILE_SEND
-</b>---------
-Same as FILE_GET, but doesn't require system password.</pre>
-<pre><b>FILE_PUT
-</b>--------
-This function is used to remotely upload a file to the system's hard disk,
-but not place the file in the file database. This is normally reserved as a
-&quot;sysop only&quot; operation. The path and filename to be uploaded are contained in
-the current command string.</pre>
-<pre><b>FILE_UPLOAD_BULK
-</b>----------------
-This function is used to do a local bulk upload of files that are in the
-physical DOS directory, but not already in the file database. This is normally
-reserved as a &quot;sysop only&quot; operation. If the current command string is set to
-&quot;ALL&quot;, then all directories will be scanned, &quot;LIB&quot; then only the current
-library, and &quot;&quot; indicates only the current directory.</pre>
-<pre><b>FILE_FIND_OLD
-</b>-------------
-This function is used to search directories for files that have not be
-downloaded since the current new file scan date (set with FILE_PTRS_CFG).
-For each file that is found, the user is prompted if they wish to remove the
-file. This is normally reserved as a &quot;sysop only&quot; operation. If the current
-string is set to &quot;ALL&quot;, then all directories will be scanned &quot;LIB&quot; indicates
-only the current library, and &quot;&quot; indicates only the current directory.</pre>
-<pre><b>FILE_FIND_OPEN
-</b>--------------
-This function searches for file records that are currently open. This function
-should not be used with other nodes in use. For each open file that is found,
-the user is prompted if they wish to close the file record. As with the
-FILE_FIND_OLD function, the current command string must contain &quot;ALL&quot;, &quot;LIB&quot;,
-or &quot;&quot; to specify the search range.
-
-<b>FILE_FIND_OFFLINE
-</b>-----------------
-This function searches for files that are in the database, but not in the
-physical DOS directory. For each missing file that is found, the user is
-prompted if they wish to move or remove the file. This normally reserved as a
-&quot;sysop only&quot; operation. As with the FILE_FIND_OLD function, the current command
-string must contain &quot;ALL&quot;, &quot;LIB&quot;, or &quot;&quot; to specify the search range.</pre>
-<pre><b>FILE_FIND_OLD_UPLOADS
-</b>---------------------
-This function searches for files that were uploaded before the current new
-scan date (set with FILE_PTRS_CFG). For each file that is found, the user is
-prompted if they wish to remove the file. This is normally reserved as a &quot;sysop
-only&quot; operation. As with the FILE_FIND_OLD function, the current command string
-must contain &quot;ALL&quot;, &quot;LIB&quot;, or &quot;&quot; to specify the search range.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="ChatFunctions">[4.11] - Chat Functions</a>
-</h2>
-<pre>The following functions are chat related in nature.</pre>
-<pre><b>PAGE_SYSOP
-</b>----------
-This function is used to page the sysop at the local console.</pre>
-<pre><b>PAGE_GURU
-</b>---------
-This function initiates chat with the guru who's internal codes is in the
-current command string. Example (using SMARTGUY as the internal code):</pre>
-<pre>	SETSTR &quot;SMARTGUY&quot;
-        PAGE_GURU</pre>
-<pre><b>PRIVATE_CHAT
-</b>------------
-This function is used to initiate private node-to-node chat.</pre>
-<pre><b>PRIVATE_MESSAGE
-</b>---------------
-This function is used for private internode messages, telegrams, or chat.
-Same as the Ctrl-P initiated function.</pre>
-<pre><b>CHAT_SECTION
-</b>------------
-This function takes the user immediately to the chat menu where they can
-join multinode chat and perform various other chat related operations.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="InformationFunctions">[4.12] - Information Functions</a>
-</h2>
-<pre><b>INFO_SYSTEM
-</b>-----------
-This function displays various system information.</pre>
-<pre><b>INFO_SUBBOARD
-</b>-------------
-This function displays information about the current message sub-board.</pre>
-<pre><b>INFO_DIRECTORY
-</b>--------------
-This function displays information about the current file directory.</pre>
-<pre><b>INFO_USER
-</b>---------
-This function displays information about the current user.</pre>
-<pre><b>INFO_VERSION
-</b>------------
-This function displays version information about the system software.</pre>
-<pre><b>INFO_XFER_POLICY
-</b>----------------
-This function displays the system's transfer policy.</pre>
-<pre><b>GURU_LOG
-</b>--------
-This function displays the GURU.LOG file from the DATA directory and prompts
-the user if they wish to delete the log. This is normally reserved as a
-&quot;sysop only&quot; operation.</pre>
-<pre><b>ERROR_LOG
-</b>---------
-This function displays the ERROR.LOG file from the DATA directory and prompts
-the user if they wish to delete the log and/or clear the error counters for
-the nodes. This is normally reserved as a &quot;sysop only&quot; operation.
-
-<b>SYSTEM_LOG
-</b>----------
-This function displays the system's detailed activity log for the current date.
-This is normally reserved as a &quot;sysop only&quot; operation.</pre>
-<pre><b>SYSTEM_YLOG
-</b>-----------
-This function displays the system's detailed activity log for the previous day.
-This is normally reserved as a &quot;sysop only&quot; operation.</pre>
-<pre><b>SYSTEM_STATS
-</b>------------
-This function displays cumulative system usage statistics.
-This is normally reserved as a &quot;sysop only&quot; operation.</pre>
-<pre><b>NODE_STATS
-</b>----------
-This function displays cumulative usage statistics for the current node.
-This is normally reserved as a &quot;sysop only&quot; operation.</pre>
-<pre><b>SHOW_MEM
-</b>--------
-This function displays the amount of free memory available.
-This is normally reserved as a &quot;sysop only&quot; operation.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="FileI/OFunctions">[4.13] - File I/O Functions</a>
-</h2>
-<pre>These functions allow Baja modules to read (input) from and write (output) to
-disk files. If any of the following functions fail, the current logic state
-will be set to FALSE and the system variable _ERRNO will contain the reason
-for the failure. All file I/O functions require SBBS v2.2 or later.</pre>
-<pre><b>FOPEN &lt;int_var&gt; &lt;#&gt;	&lt;&quot;str&quot; or str_var&gt;                      FILE_IO.INC
- args: handle	 access  path_and_filename
-</b>------------------------------------------
-This function opens or creates a disk file (path_and_filename) for read and/or
-write access. This function is the Baja equivalent of the standard C fopen()
-function. No file I/O operations can be performed on a file until it has been
-opened with this function. The 'handle' argument must be a defined integer
-variable name. The 'access' argument is the requested open access. The access
-flags (defined in FILE_IO.INC) are:</pre>
-<pre>Access Flag	Description
-~~~~~~~~~~~	~~~~~~~~~~~
-O_RDONLY	Read Only
-O_WRONLY	Write Only
-O_RDWR		Read and write
-O_CREAT 	Create	  (create if doesn't exist)
-O_APPEND	Append	  (writes to end of file)
-O_TRUNC 	Truncate  (truncates file to 0 bytes automatically)
-O_EXCL		Exclusive (only open/create if file doesn't exist)
-O_DENYNONE	Deny None (shareable, for use with record locking)</pre>
-<pre>To specify multiple access flags, place an OR symbol (|) between each. Example:</pre>
-<pre>	O_WRONLY|O_TRUNC</pre>
-<pre>If the file does not exist it will be created if the O_CREAT access was
-specified. If the O_CREAT and O_EXCL access flags are set then the open will
-fail if the file already exists.</pre>
-<pre>Example:</pre>
-<pre>	!INCLUDE FILE_IO.INC</pre>
-<pre>        INT file
-	FOPEN file O_RDWR|O_CREAT &quot;%jFILENAME.EXT&quot;</pre>
-<pre>Would open the file FILENAME.EXT in the BBS data directory (%j is the
-Synchronet command line % specifier for the data directory) for reading and
-writing, creating it if it didn't already exist. All later accesses to the file
-must use the same integer variable (&quot;file&quot; in the above example). If the open
-is successful, the current logic state is set to TRUE, otherwise it is set to
-FALSE.
-
-<b>FCLOSE &lt;int_var&gt;
-  args: handle
-</b>----------------
-All files opened with the FOPEN function remain open until either this function
-(FCLOSE) is used to close the file (using the same unmodified 'handle') or the
-current shell or module is terminated. This function is the Baja equivalent
-of the standard C fclose() function. A maximum of 10 files can be concurrently
-opened by a shell or module at any given time.</pre>
-<pre><b>FREAD &lt;int_var&gt; &lt;any_var&gt; [int_var or #]
- args: handle	 dest	   length
-</b>----------------------------------------
-This function is used to read from a disk file (specified by 'handle') into a
-string or integer variable (specified by 'dest') from the current file
-position. This function is the Baja equivalent of the standard C fread()
-function.</pre>
-<pre>The optional 'length' argument specifies the number of bytes to read. It must
-be between 1 and 4 if the dest argument is an integer variable and between 1
-and 1024 if the dest argument is a string variable. If 'length' is not
-specified, then 4 bytes is assumed for integer variables or the current string
-length for string variables (or 128 if an uninitialized or 0 length string
-variable is specified). The current file position will be automatically moved
-forward by the number of bytes successfully read from the file.</pre>
-<pre>If the FSET_ETX function has been used to set the end-of-text character to
-something other than 0 and the dest argument is a string variable, the string
-will be terminated at the first end-of-text character read from the file from
-the current position.</pre>
-<pre>It is suggested that a 'length' argument always be specified for string
-variable destinations, though it is not usually necessary for integer variable
-destinations.</pre>
-<pre><b>FWRITE &lt;int_var&gt; &lt;any_var&gt; [int_var or #]
-  args: handle	  source    length
-</b>-----------------------------------------
-This function is used to write an integer or string variable ('source') to a
-disk file ('handle') at the current file position. This function is the Baja
-equivalent of the standard C fwrite() function. If the optional 'length'
-argument is specified, it will determine the number of bytes written to the
-file. If 'source' is a string variable and the number of bytes to be written
-exceeds the string length, the current end-of-text character will be used to
-fill the extra bytes. If 'length' is not specified, 4 bytes will be used for
-integer 'source' variables and the current string length will be used for
-string 'source' variables. The current file position will be automatically
-moved forward by the number of bytes successfully written to the file.</pre>
-<pre><b>FFLUSH &lt;int_var&gt;
-  args: handle
-</b>----------------
-This function forces any pending writes to the disk file ('handle'). All files
-opened by Baja modules use buffered I/O for performance. Closing an open file
-flushes any pending output as well. You may wish to use this function in
-multinode applications where it is important that other nodes have immediate
-access to the data written to a file while it is still open. This function is
-the Baja equivalent of the standard C fflush() function. [SBBS 2.3]
-
-<b>FGET_LENGTH &lt;int_var&gt; &lt;int_var&gt;
-       args: handle    length
-</b>-------------------------------
-This function gets the current length (in bytes) of the file pointed to by
-'handle', and writes the value to the integer variable 'length'. This function
-is the Baja equivalent of the standard C filelength() function.</pre>
-<pre><b>FSET_LENGTH &lt;int_var&gt; &lt;int_var&gt;
-       args: handle    length
-</b>-------------------------------
-This function changes the length of the file pointed to by 'handle' to the
-value contained in the integer variable 'length'. If the file is shortened,
-any bytes beyond the specified length are lost. If the file is extended, the
-unused bytes will be automatically padded with 0. This function is the Baja
-equivalent of the standard C chsize() function.</pre>
-<pre><b>FGET_TIME &lt;int_var&gt; &lt;int_var&gt;
-     args: handle    time
-</b>-----------------------------
-This function gets the current date/time stamp of the file pointed to by
-'handle' and writes this value into the 'time' variable. This function is
-the Baja equivalent of the standard C getftime() function.</pre>
-<pre><b>FSET_TIME &lt;int_var&gt; &lt;int_var&gt;
-     args: handle    time
-</b>-----------------------------
-This function sets the current date/time stamp of the file pointed to by
-'handle' to the value contained in the 'time' variable. This function is the
-Baja equivalent of the standard C setftime() function.</pre>
-<pre><b>FEOF &lt;int_var&gt;
-args: handle
-</b>--------------
-This function checks the file specified by 'handle' to see if the current
-file position is at the end of the file. If it is currently at the end of the
-file, the current logic state is set to TRUE. If it is not at the end of the
-file or the file 'handle' is not currently open, the logic state is set to
-FALSE. This function is the Baja equivalent of the standard C feof() function.</pre>
-<pre><b>FGET_POS &lt;int_var&gt; &lt;int_var&gt;
-    args: handle    offset
-</b>----------------------------
-This function gets the current file position (in bytes from the beginning of
-the file) for the file specified by 'handle' and writes the value into the
-integer variable 'offset'. This function is the Baja equivalent of the
-standard C ftell() function.
-
-<b>FSET_POS &lt;int_var&gt; &lt;int_var or #&gt; [#]				FILE_IO.INC
-    args: handle    offset	   whence
-</b>-----------------------------------------
-This function is used to reposition (seek) within the file specified by
-'handle' to the offset specified by 'offset' from 'whence', if specified.
-If 'whence' is not specified the 'offset' will be considered from the beginning
-of the file. This function is the Baja equivalent of the standard C fseek()
-function. The valid values of whence (defined in FILE_IO.INC) are:</pre>
-<pre>Whence		Description
-~~~~~~		~~~~~~~~~~~
-SEEK_SET	From the beginning of the file
-SEEK_CUR	From current file position
-SEEK_END	From end of file</pre>
-<pre>The 'offset' (not offspring) variable can be either an integer variable or
-an integer constant. It may be negative (to move the file position backwards),
-positive (forwards), or 0 (to specify no offset from 'whence').</pre>
-<pre>Example:</pre>
-<pre>	!INCLUDE FILE_IO.INC</pre>
-<pre>        # Open file
-        INT file
-	FOPEN file O_RDWR|O_CREAT &quot;TEXT.TXT&quot;
-        IF_FALSE
-                # Failed!
-                RETURN
-                END_IF</pre>
-<pre>        # Go to end of file
-	FSET_POS file 0 SEEK_END</pre>
-<pre>        # Go to beginning of file
-        FSET_POS file 0</pre>
-<pre>        # Go to offset 256 in file
-        FSET_POS file 256</pre>
-<pre>        # Seek forward 100 bytes
-	FSET_POS file 100 SEEK_CUR</pre>
-<pre>        # Seek backward 50 bytes
-	FSET_POS file -50 SEEK_CUR</pre>
-<pre>        FCLOSE file
-
-<b>FLOCK &lt;int_var&gt; &lt;int_var or #&gt;
- args: handle	 length
-</b>------------------------------
-This function is used to lock a file record of 'length' bytes from the
-current file position of the file pointed to by 'handle'. If the record cannot
-after 10 retries (one second apart), the current logic state will be set to
-FALSE. All records that are locked should be subsequently unlocked before the
-file is closed or any user interaction or lengthy processing is begun. This
-function is the Baja equivalent of the C locking(int,LK_LOCK,long) function.</pre>
-<pre><b>FUNLOCK &lt;int_var&gt; &lt;int_var or #&gt;
-   args: handle    length
-</b>--------------------------------
-This function is used to unlock a file record previously locked by the
-current module. The current file position of 'handle' must be the start of
-the record and the 'length' must be the same length as originally specified
-to the FLOCK function. This function is the Baja equivalent of the C
-locking(int,LK_UNLCK,long) function.
-
-<b>FPRINTF &lt;int_var&gt; &lt;&quot;cstr&quot;&gt; [any_var] [...]
-   args: handle    format  variables
-</b>------------------------------------------
-This function is very similar to the PRINTF and SPRINTF functions. The
-exception is that the output of the formatted string is written to the current
-file position of the file specified by 'handle'. This function is the
-Baja equivalent of the standard C fprintf() function.</pre>
-<pre>Example:
-        # Variables
-	INT file length time
-        # Open for append
-	FOPEN file O_WRONLY|O_CREAT|O_APPEND &quot;TEXT.TXT&quot;
-        IF_FALSE
-                # Failed!
-                RETURN
-                END_IF</pre>
-<pre>        FGET_LENGTH file length
-        FGET_TIME file time
-        TIME_STR str time
-	FPRINTF file &quot;Length: %ld   Time: %s\r\n&quot; length str
-        FCLOSE file</pre>
-<pre><b>FREAD_LINE &lt;int_var&gt; &lt;any_var&gt;
-      args: handle    dest
-</b>------------------------------
-Reads a single line from the open file specified by 'handle' into the
-destination variable specified by 'dest'. If the destination variable is
-a string variable, the terminating carriage return and line feed (if present
-in the file) will be included in the string variable. You can use the
-TRUNCSP function to remove them if needed.</pre>
-<pre>If the read is successful, the current logic state is set to TRUE, otherwise
-it is set to FALSE. This function is the Baja equivalent of the standard C
-fgets() function.</pre>
-<pre><b>FSET_ETX &lt;#&gt;
-    args: etx
-</b>-------------
-This function is used to set the end-of-text character for the current
-shell or module. The default end-of-text character is 0. It is used by the
-FREAD and FWRITE functions to pad/terminate string variables when read from
-and writing to disk files. The 'etx' argument must be a number from 0 to 255.
-Many of Synchronet's data files (USER.DAT, for example) use 3 (appears as
-^C or a heart) for an end-of-text character. If you intend to read or write
-from any files that use a non-zero end-of-text character, you'll want to use
-this function before using FREAD or FWRITE.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="FileSystemFunctions">[4.14] - File System Functions</a>
-</h2>
-<pre>These functions allow Baja modules to perform operations on unopened files.</pre>
-<pre><b>CHKFILE &lt;&quot;str&quot; or str_var&gt;
-   args: path_and_filename
-</b>--------------------------
-This function checks for the existence of the 'path_and_filename' specified.
-The path_and_filename should contain path and possibly drive specifications
-(i.e. CHKFILE C:\MYDIR\MYFILE.TXT). If the file exists the current logic state
-is set to TRUE, otherwise it is set to FALSE.</pre>
-<pre><b>REMOVE_FILE &lt;str_var&gt;
-       args: path_and_filename
-</b>------------------------------
-This function attempts to remove the specified path_and_filename. If the
-removal was successful, the current logic state is set to TRUE, otherwise it
-is set to FALSE. This function is the Baja equivalent of the standard C
-unlink() and remove() functions.</pre>
-<pre><b>RENAME_FILE &lt;str_var&gt; &lt;str_var&gt;
-       args: source    dest
-</b>-------------------------------
-This function attempts to rename the file specified as 'source' to the name
-specified in 'dest'. If a different path is specified for 'dest', the drive
-letter must be the same. If the renaming is successful, the current logic
-state is set to TRUE, otherwise it is set to FALSE. This function is the
-equivalent of the standard C rename() function.</pre>
-<pre><b>COPY_FILE &lt;str_var&gt; &lt;str_var&gt;
-     args: source    dest
-</b>-----------------------------
-This function attempts to copy the file specified as 'source' to the path
-AND filename specified in 'dest'. If the copy is successful, the current logic
-state is set to TRUE, otherwise it is set to FALSE.</pre>
-<pre><b>MOVE_FILE &lt;str_var&gt; &lt;str_var&gt;
-     args: source    dest
-</b>-----------------------------
-This function attempts to move the file specified as 'source' to the path
-AND filename specified in 'dest'. If the source and dest paths are on the
-same drive, this function is the same as a RENAME_FILE. If the source and
-dest paths are on separate drives, then the this is the same as a COPY_FILE
-with the exception that the source file is automatically deleted. If the
-move is successful, the current logic state is set to TRUE, otherwise it is
-set to FALSE.</pre>
-<pre><b>GET_FILE_ATTRIB &lt;int_var&gt; &lt;str_var&gt;				DIR_ATTR.INC
-	   args: dest	   file
-</b>-----------------------------------
-This function retrieves the directory attributes for the file and writes them
-into the dest variable. This function is the Baja equivalent of the C
-_chmod(char *,0) function.</pre>
-<pre><b>SET_FILE_ATTRIB &lt;int_var&gt; &lt;str_var&gt;				DIR_ATTR.INC
-	   args: attrib    file
-</b>-----------------------------------
-This function sets the directory attributes for the specified file according
-to the attrib flags. This function is the Baja equivalent of the C
-_chmod(char *,1) function. Valid attrib flags (defined in DIR_ATTR.INC) are:</pre>
-<pre>Flag		Description
-~~~~		~~~~~~~~~~~
-FA_RDONLY	Read Only
-FA_HIDDEN	Hidden
-FA_SYSTEM	System
-FA_LABEL	Volume Label
-FA_DIREC	Directory (or subdirectory)
-FA_ARCH 	Archive</pre>
-<pre>Multiple flags may be specified by ORing the flags together with the OR (|)
-symbol. Example:</pre>
-<pre>	!INCLUDE DIR_ATTR.INC
-	INT I
-	SETSTR &quot;MYFILE.TXT&quot;
-	SET I FA_HIDDEN|FA_SYSTEM
-	SET_FILE_ATTRIB I STR</pre>
-<pre># End of DIR_ATTR.INC</pre>
-<pre><b>GET_FILE_TIME &lt;int_var&gt; &lt;str_var&gt;
-	 args: dest	 file
-</b>---------------------------------
-Retrieves the current date/time stamp of the specified file and writes it
-into the specified dest variable. If the date/time stamp could not be read
-(file doesn't exist perhaps), the value -1 is written to the dest variable.</pre>
-<pre><b>GET_FILE_LENGTH &lt;int_var&gt; &lt;str_var&gt;
-	   args: dest	   file
-</b>-----------------------------------
-Retrieves the current length of the specified file and writes it into the
-specified dest variable. If the file doesn't exist, the value -1 is written
-to the dest variable.</pre>
-<h2><a name="DirectorySystemFunctions">[4.15] - Directory System Functions</a>
-</h2>
-<pre>These functions allow Baja modules to perform operations on directories and
-subdirectories of the local file system.</pre>
-<pre><b>MAKE_DIR &lt;str_var&gt;
-    args: dir
-</b>------------------
-This function attempts to create the directory specified as dir. If the
-directory is successfully created, the current logic state is set to TRUE,
-otherwise it is set to FALSE and the system variable _ERRNO will contain
-the reason. This function is the Baja equivalent of the standard C mkdir()
-function.</pre>
-<pre><b>CHANGE_DIR &lt;str_var&gt;
-      args: dir
-</b>--------------------
-This function attempts to change the current directory to the directory
-specified in dir. Since Synchronet assumes the current directory is the
-current NODE directory at all times, this is a very dangerous function
-and should not be used unless absolutely necessary. If the directory is changed
-successfully, the current logic state is set to TRUE, otherwise it is set to
-FALSE and the system variable _ERRNO will contain the reason. This function
-is the Baja equivalent of the standard C chdir() function.</pre>
-<pre><b>REMOVE_DIR &lt;str_var&gt;
-      args: dir
-</b>--------------------
-This function attempts to remove the directory specified as dir. If the
-removal is unsuccessful (files in the directory, directory doesn't exist,
-etc.) the current logic state will be set to FALSE and the system variable
-_ERRNO will contain the reason. This function is the Baja equivalent of the
-standard C rmdir() function.</pre>
-<pre><b>OPEN_DIR &lt;int_var&gt; &lt;str_var&gt;
-    args: handle    dir
-</b>----------------------------
-This function attempts to open the directory specified as dir (should end
-in a '.'). If the directory is successfully opened, the handle is set to
-the directory handle and the current logic state is set to TRUE, otherwise
-the logic state is set to FALSE. This function is the Baja equivalent of the
-standard C opendir() function.</pre>
-<pre><b>READ_DIR &lt;int_var&gt; &lt;str_var&gt;
-    args: handle    filename
-</b>----------------------------
-This function reads the next file name from the open directory handle and
-puts it into the string variable specified as filename. If the read is
-unsuccessful (no more files in directory) the current logic state is set to
-FALSE and the system variable _ERRNO will contain the reason. This function
-is the Baja equivalent of the standard C readdir() function.</pre>
-<pre><b>REWIND_DIR &lt;int_var&gt;
-      args: handle
-</b>--------------------
-This function rewinds the open directory handle to the first directory entry
-(file name). This function is the Baja equivalent of the standard C rewinddir()
-function.</pre>
-<pre><b>CLOSE_DIR &lt;int_var&gt;
-     args: handle
-</b>-------------------
-This function closes a previously opened directory handle. This function is
-the Baja equivalent of the standard C closedir() function.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="SystemVariables">[5.1] - System Variables</a>
-</h2>
-<pre>System variables are global variables that are initialized and/or used by
-Synchronet during operation. They should not be defined in your Baja module.
-You must declare these variables by including (with !INCLUDE) SBBSDEFS.INC
-or by declaring (with !GLOBAL) the individual variable names you wish to use.</pre>
-<pre>These may be used anywhere a user-defined global variable may be used, with
-the exception that many variables may not be written to (modified directly
-by a shell or module). In some cases, there are specific Baja functions for
-modifying otherwise &quot;unmodifiable&quot; system variables. These &quot;Read Only&quot; system
-variables are indicated here with an asterisk (*).</pre>
-<pre><b>String Variables</b>
-----------------
-_USERON.ALIAS	       *Alias/Real Name of user online
-_USERON.NAME	       *Real/Company Name of user online
-_USERON.HANDLE	       *Chat Handle of user online
-_USERON.COMP	       *Computer description for user online
-_USERON.NOTE	       *Note for user online
-_USERON.ADDRESS        *Address of user online
-_USERON.LOCATION       *Location of user online
-_USERON.ZIPCODE        *Zip/Postal Code of user online
-_USERON.PASS	       *Password of user online
-_USERON.BIRTH	       *Birthdate of user online
-_USERON.PHONE	       *Phone Number of user online
-_USERON.MODEM	       *Modem/Connection description of user online
-_USERON.NETMAIL        *NetMail Forwarding Address for user online
-_USERON.TMPEXT	       *Temp File Extension (i.e. ZIP) for user online
-_USERON.COMMENT        *Sysop Comment for user online
-_CONNECTION		Current connection description
-_CAP_FNAME		Capture file name
-_CID			Caller-ID information
-_COMSPEC	       *Path to operating system command interpreter</pre>
-<pre><b>Integer Variables
-</b>-----------------
-_USERON.NUMBER	       *Number of user online
-_USERON.ULS	       *Total number of files uploaded by user online
-_USERON.DLS	       *Total number of files downloaded by user online
-_USERON.POSTS	       *Total number of posts sent by user online
-_USERON.EMAILS	       *Total number of e-mails sent by user online
-_USERON.FBACKS	       *Total number of feedbacks sent by user online
-_USERON.ETODAY	       *Total number of e-mails sent today by user online
-_USERON.PTODAY	       *Total number of posts sent today by user online
-_USERON.TIMEON	       *Total minutes used (excluding this call) by user online
-_USERON.TEXTRA	       *Extra time obtained by uploads during previous calls
-_USERON.LOGONS	       *Total number of logons by user online
-_USERON.TTODAY	       *Total time used today (previous calls)
-_USERON.TLAST	       *Total time used during last call
-_USERON.LTODAY	       *Total number of logons today
-_USERON.XEDIT	       *External editor used by user online
-_USERON.SHELL	       *Command shell used be user online
-_USERON.LEVEL	       *Security level of user online
-_USERON.SEX	       *Sex (gender) of user online
-_USERON.ROWS	       *Number of screen lines for user online
-_USERON.PROT	       *Default download protocol of user online
-_USERON.LEECH	       *Total leech downloads detected for user online
-_USERON.MISC	       *Miscellaneous attributes for user online
-_USERON.QWK	       *QWK settings for user online
-_USERON.CHAT	       *Chat settings for user online
-_USERON.FLAGS1	       *Flag set #1 for user online
-_USERON.FLAGS2	       *Flag set #2 for user online
-_USERON.FLAGS3	       *Flag set #3 for user online
-_USERON.FLAGS4	       *Flag set #4 for user online
-_USERON.EXEMPT	       *Exemption flags for user online
-_USERON.REST	       *Restriction flags for user online
-_USERON.ULB	       *Total bytes uploaded by user online
-_USERON.DLB	       *Total bytes downloaded by user online
-_USERON.CDT	       *Total credits for user online
-_USERON.MIN	       *Current minutes in minute bank for user online
-_USERON.FREECDT        *Free credits left today for user online
-_USERON.FIRSTON        *Date/time of first call for user online
-_USERON.LASTON	       *Date/time of last call for user online
-_USERON.EXPIRE	       *Date/time of expiration for user online
-_USERON.PWMOD	       *Date/time of last password modification for user online
-_USERON.NS_TIME        *Date/time of last new-file scan for user online
-_CUR_RATE	       *Current DCE rate
-_CUR_CPS	       *Estimated CPS rate of current connection
-_DTE_RATE		Current DTE rate
-_LNCNTR 		Line counter (for auto-screen pause)
-_TOS			Top-Of-Screen? (1=Yes, 0=No)
-_ROWS			Number of screen rows for current user
-_AUTOTERM		Automatic terminal detection results
-_CONSOLE		Console attributes
-_ANSWERTIME		Time phone was answered
-_LOGONTIME		Time of successful logon
-_NS_TIME		Current new-file scan pointer
-_LAST_NS_TIME		Time of last new-file scan
-_ONLINE 		Online? (1=LOCAL, 2=REMOTE, 0=No)
-_SYS_STATUS		System status attributes
-_SYS_MISC		System toggle options (SCFG)
-_SYS_PSNUM		PostLink Site Number (SCFG)
-_SYS_TIMEZONE	       *System time zone (in SMB format, SCFG)
-_SYS_PWDAYS	       *Days between forced password changes (0=disabled, SCFG)
-_SYS_DELDAYS	       *Days to preserve deleted user slots (SCFG)
-_SYS_AUTODEL	       *Number of days before deleting inactive users (SCFG)
-_SYS_NODES	       *Total configured nodes (SCFG)
-_SYS_EXP_WARN	       *Days before expiration to warn user (SCFG)
-_SYS_LASTNODE	       *Last displayable node (SCFG)
-_SYS_AUTONODE	       *First auto-node (SCFG)
-_NODE_SCRNLEN	       *Screen length of this node (0=auto-detect, SCFG)
-_NODE_SCRNBLANK        *Minutes between screen blanks (0=disabled, SCFG)
-_NODE_MISC		Node toggle options (SCFG)
-_NODE_VALUSER	       *Number of user to send newuser feedback to (SCFG)
-_NODE_IVT	       *Bits determining which time-slice APIs to use (SCFG)
-_NODE_SWAP	       *Bits determining which swap types to use (SCFG)
-_NODE_MINBPS	       *Minimum connect rate allowed for this node (SCFG)
-_NODE_NUM	       *Number of this node
-_NEW_LEVEL	       *Security level to give new users (SCFG)
-_NEW_FLAGS1		Flag set #1 to give new users (SCFG)
-_NEW_FLAGS2		Flag set #2 to give new users (SCFG)
-_NEW_FLAGS3		Flag set #3 to give new users (SCFG)
-_NEW_FLAGS4		Flag set #4 to give new users (SCFG)
-_NEW_EXEMPT		Exemption flags to give new users (SCFG)
-_NEW_REST		Restriction flags to give new users (SCFG)
-_NEW_CDT		Credits to give new users (SCFG)
-_NEW_MIN		Minutes to give new users (SCFG)
-_NEW_SHELL	       *Command shell to default to for new users (SCFG)
-_NEW_MISC		Default settings for new users (SCFG)
-_NEW_EXPIRE	       *Automatically set newuser expiration days (SCFG)
-_NEW_PROT	       *Default download protocol for new users (SCFG)
-_EXPIRED_LEVEL	       *Default security level to give expired users (SCFG)
-_EXPIRED_FLAGS1 	Default flag set #1 to give expired users (SCFG)
-_EXPIRED_FLAGS2 	Default flag set #2 to give expired users (SCFG)
-_EXPIRED_FLAGS3 	Default flag set #3 to give expired users (SCFG)
-_EXPIRED_FLAGS4 	Default flag set #4 to give expired users (SCFG)
-_EXPIRED_EXEMPT 	Default exemption flags to give expired users (SCFG)
-_EXPIRED_REST		Default restriction flags to give expired users (SCFG)
-_MIN_DSPACE	       *Minimum disk space (in k) to allow uploads (SCFG)
-_CDT_MIN_VALUE	       *Minutes per 100k of credits (SCFG)
-_CDT_PER_DOLLAR 	Credits per dollar conversion rate (SCFG)
-_LEECH_PCT	       *Leech detection percentage (0=disabled, SCFG)
-_LEECH_SEC	       *Minimum elapsed seconds before leech detection (SCFG)
-_NETMAIL_COST		Credit cost to send FidoNet netmail (SCFG)
-_NETMAIL_MISC	       *Toggle options for FidoNet netmail (SCFG)
-_INETMAIL_COST		Credit cost to send Internet netmail (SCFG)
-_INETMAIL_MISC		Toggle options for Internet netmail (SCFG)
-_LOGON_ULB		Total bytes uploaded this call
-_LOGON_DLB		Total bytes downloaded this call
-_LOGON_ULS		Total files uploaded this call
-_LOGON_DLS		Total files downloaded this call
-_LOGON_POSTS		Total posts sent this call
-_LOGON_EMAILS		Total emails sent this call
-_LOGON_FBACKS		Total feedback sent this call
-_POSTS_READ		Total posts read this call
-_LOGFILE	       *File handle of currently open NODE.LOG
-_NODEFILE	       *File handle of currently open NODE.DAB
-_NODE_EXT	       *File handle of currently open NODE.EXB
-_TIMELEFT		Number of seconds left online for current user
-_MAX_MINUTES		Max number of minutes allowed in minute bank (SCFG)
-_MAX_QWKMSGS		Max number of messages allowed per QWK packet (SCFG)
-_UQ			Bits determining which questions to ask newusers (SCFG)
-_ERRORLEVEL	       *Error level of most recently executed external program
-_ERRNO		       *Current DOS error code (see ERRNO.INC for values)
-<a href="#TOC"><b>
-Back to Table of Contents</b></a></pre>
-<h2><a name="QuickFunctionReference">[6.1] - Quick Function Reference</a>
-</h2>
-<pre><a href="#String Manipulation Functions"><b>String Manipulation Functions</b></a>
------------------------------
-STR &lt;str_var&gt; [str_var] [...]
-GLOBAL_STR &lt;str_var&gt; [str_var] [...]
-SET &lt;str_var&gt; &lt;&quot;cstr&quot;&gt;
-COPY &lt;str_var&gt; &lt;any_var&gt;
-SWAP &lt;str_var&gt; &lt;any_var&gt;
-STRCAT &lt;str_var&gt; &lt;str_var or &quot;cstr&quot;&gt;
-SPRINTF &lt;str_var&gt; &lt;&quot;cstr&quot;&gt; &lt;any_var&gt; [any_var] [...]
-TIME_STR &lt;str_var&gt; &lt;int_var&gt;
-DATE_STR &lt;str_var&gt; &lt;int_var&gt;
-SECOND_STR &lt;str_var&gt; &lt;int_var&gt;
-FTIME_STR &lt;str_var&gt; &lt;&quot;cstr&quot;&gt; &lt;int_var&gt;
-SHIFT_STR [str_var] &lt;#&gt;
-STRIP_CTRL [str_var]
-TRUNCSP [str_var]
-STRUPR [str_var]
-STRLWR [str_var]
-SETSTR &lt;&quot;cstr&quot;&gt;
-REPLACE_TEXT &lt;#&gt; &lt;&quot;cstr&quot;&gt;
-LOAD_TEXT &lt;&quot;str&quot;&gt;
-REVERT_TEXT &lt;# or ALL&gt;</pre>
-<pre><b><a href="#Integer Manipulation Functions">Integer Manipulation Functions</a>
-</b>------------------------------
-INT &lt;int_var&gt; [int_var] [...]
-GLOBAL_INT &lt;int_var&gt; [int_var] [...]
-SET &lt;int_var&gt; &lt;#&gt;
-ADD &lt;int_var&gt; &lt;any_var or #&gt;
-SUB &lt;int_var&gt; &lt;any_var or #&gt;
-MUL &lt;int_var&gt; &lt;any_var or #&gt;
-DIV &lt;int_var&gt; &lt;any_var or #&gt;
-MOD &lt;int_var&gt; &lt;any_var or #&gt;
-AND &lt;int_var&gt; &lt;any_var or #&gt;
-OR  &lt;int_var&gt; &lt;any_var or #&gt;
-NOT &lt;int_var&gt; &lt;any_var or #&gt;
-XOR &lt;int_var&gt; &lt;any_var or #&gt;
-COPY &lt;int_var&gt; &lt;any_var&gt;
-SWAP &lt;int_var&gt; &lt;any_var&gt;
-RANDOM &lt;int_var&gt; &lt;#&gt;
-TIME &lt;int_var&gt;
-STRLEN &lt;int_var&gt; &lt;str_var&gt;
-DATE_INT &lt;int_var&gt; &lt;str_var&gt;
-CRC16 &lt;int_var&gt; &lt;str_var&gt;
-CRC32 &lt;int_var&gt; &lt;str_var&gt;
-CHKSUM &lt;int_var&gt; &lt;str_var&gt;
-CHARVAL &lt;int_var&gt; &lt;str_var&gt;
-
-<b><a href="#Logic/Control Flow Functions">Logic/Control Flow Functions</a>
-</b>----------------------------
-GOTO &lt;txt&gt;
-CALL &lt;txt&gt;
-RETURN
-SETLOGIC &lt;TRUE or FALSE or GREATER or LESS&gt;
-COMPARE &lt;any_var&gt; &lt;any_var or &quot;cstr&quot; or #&gt;
-IF_TRUE
-IF_EQUAL
-IF_FALSE
-IF_NOT_EQUAL
-IF_GREATER
-IF_GREATER_OR_EQUAL
-IF_LESS
-IF_LESS_OR_EQUAL
-ELSE
-END_IF
-SWITCH &lt;int_var&gt;
-CASE &lt;#&gt;
-DEFAULT
-END_CASE
-END_SWITCH
-CMD_HOME
-CMDKEY &lt;key&gt;
-CMDKEYS &lt;keylist&gt;
-CMDSTR &lt;&quot;cstr&quot;&gt;
-END_CMD
-CMD_POP
-COMPARE_KEY &lt;key&gt;
-COMPARE_KEYS &lt;keylist&gt;
-COMPARE_STR &lt;&quot;cstr&quot;&gt;
-COMPARE_WORD &lt;&quot;cstr&quot;&gt;
-COMPARE_ARS &lt;ars&gt;
-COMPARE_STRN &lt;#&gt; &lt;str_var&gt; &lt;str_var or &quot;cstr&quot;&gt;
-COMPARE_SUBSTR &lt;str_var&gt; &lt;str_var or &quot;cstr&quot;&gt;
-
-<b><a href="#Display Functions">Display Functions</a>
-</b>-----------------
-PRINT &lt;&quot;cstr&quot; or any_var&gt;
-PRINTF &lt;&quot;cstr&quot;&gt; &lt;any_var&gt; [any_var] [...]
-PRINT_LOCAL &lt;&quot;cstr&quot;&gt;
-PRINT_REMOTE &lt;&quot;cstr&quot;&gt;
-PRINTSTR
-PRINTKEY
-MNEMONICS &lt;&quot;cstr&quot;&gt;
-CLS
-CRLF
-PRINTFILE &lt;&quot;str&quot; or str_var&gt; [#]
-PRINTTAIL &lt;str_var&gt; &lt;#&gt; &lt;#&gt;
-PRINTFILE_STR
-PRINTFILE_LOCAL &lt;&quot;str&quot;&gt;
-PRINTFILE_REMOTE &lt;&quot;str&quot;&gt;
-LIST_TEXT_FILE
-EDIT_TEXT_FILE
-PAUSE
-MENU &lt;&quot;str&quot;&gt;
-NODELIST_ALL
-NODELIST_USERS
-USERLIST_SUB
-USERLIST_DIR
-USERLIST_ALL
-USERLIST_LOGONS
-YES_NO &lt;&quot;cstr&quot;&gt;
-NO_YES &lt;&quot;cstr&quot;&gt;
-READ_SIF &lt;&quot;str&quot;&gt;
-SAVELINE
-RESTORELINE</pre>
-<pre><b><a href="#Input Functions">Input Functions</a>
-</b>---------------
-INKEY
-GETKEY
-GETKEYE
-GETCMD &lt;&quot;cstr&quot;&gt;
-GETSTR [str_var] [#] [#]
-GETLINE [str_var] [#]
-GETSTRUPR [str_var] [#]
-GETNAME [str_var] [#]
-GETFILESPEC
-GETLINES
-GETNUM [any_var] &lt;#&gt;
-GET_TEMPLATE &lt;&quot;str&quot;&gt;
-CHKSYSPASS
-CREATE_SIF &lt;&quot;str&quot;&gt;
-
-<b><a href="#Miscellaneous Functions">Miscellaneous Functions</a>
-</b>-----------------------
-ONLINE
-OFFLINE
-LOGIN &lt;&quot;cstr&quot;&gt;
-LOGON
-LOGOFF
-LOGOFF_FAST
-LOGOUT
-NEWUSER
-SET_MENU_DIR &lt;&quot;str&quot;&gt;
-SET_MENU_FILE &lt;&quot;str&quot;&gt;
-SYNC
-ASYNC
-RIOSYNC
-PUT_NODE
-PAUSE_RESET
-CLEAR_ABORT
-UNGETKEY
-UNGETSTR
-HANGUP
-EXEC &lt;&quot;str&quot;&gt;
-EXEC_INT &lt;&quot;str&quot;&gt;
-EXEC_BIN &lt;&quot;str&quot;&gt;
-EXEC_XTRN &lt;&quot;str&quot;&gt;
-LOG &lt;&quot;cstr&quot;&gt;
-LOGSTR
-LOGKEY
-LOGKEY_COMMA
-NODE_STATUS &lt;#&gt;
-NODE_ACTION &lt;#&gt;
-INC_MAIN_CMDS
-INC_FILE_CMDS
-COMPARE_USER_MISC &lt;#&gt;
-COMPARE_USER_CHAT &lt;#&gt;
-COMPARE_USER_QWK  &lt;#&gt;
-COMPARE_NODE_MISC &lt;#&gt;
-TOGGLE_USER_MISC &lt;#&gt;
-TOGGLE_USER_CHAT &lt;#&gt;
-TOGGLE_USER_QWK  &lt;#&gt;
-TOGGLE_NODE_MISC &lt;#&gt;
-TOGGLE_USER_FLAG &lt;char&gt; &lt;char&gt;
-ADJUST_USER_CREDITS &lt;#&gt;
-ADJUST_USER_MINUTES &lt;#&gt;
-SET_USER_LEVEL &lt;#&gt;
-SET_USER_STRING &lt;#&gt;
-USER_EVENT &lt;#&gt;
-UTO_MESSAGE
-USER_DEFAULTS
-USER_EDIT
-TEXT_FILE_SECTION
-XTRN_EXEC
-XTRN_SECTION
-MINUTE_BANK
-CHANGE_USER
-ANSI_CAPTURE
-FINDUSER
-SELECT_SHELL
-SET_SHELL
-SELECT_EDITOR
-SET_EDITOR
-TRASHCAN &lt;&quot;str&quot;&gt;
-GETTIMELEFT
-MSWAIT &lt;#&gt;
-SEND_FILE_VIA &lt;char&gt; &lt;&quot;str&quot; or str_var&gt;
-RECEIVE_FILE_VIA &lt;char&gt; &lt;&quot;str&quot; or str_var&gt;
-
-<b><a href="#Mail Functions">Mail Functions</a>
-</b>--------------
-MAIL_READ
-MAIL_READ_SENT
-MAIL_READ_ALL
-MAIL_SEND
-MAIL_SEND_FILE
-MAIL_SEND_BULK
-MAIL_SEND_FEEDBACK
-MAIL_SEND_NETMAIL
-MAIL_SEND_NETFILE</pre>
-<pre><b><a href="#Message Base Functions">Message Base Functions</a>
-</b>----------------------
-MSG_SET_AREA
-MSG_SET_GROUP
-MSG_SELECT_AREA
-MSG_SHOW_GROUPS
-MSG_SHOW_SUBBOARDS
-MSG_GROUP_UP
-MSG_GROUP_DOWN
-MSG_SUBBOARD_UP
-MSG_SUBBOARD_DOWN
-MSG_GET_SUB_NUM
-MSG_GET_GRP_NUM
-MSG_READ
-MSG_POST
-MSG_QWK
-MSG_PTRS_CFG
-MSG_PTRS_REINIT
-MSG_NEW_SCAN_CFG
-MSG_NEW_SCAN
-MSG_NEW_SCAN_ALL
-MSG_NEW_SCAN_SUB
-MSG_CONT_SCAN
-MSG_CONT_SCAN_ALL
-MSG_BROWSE_SCAN
-MSG_BROWSE_SCAN_ALL
-MSG_FIND_TEXT
-MSG_FIND_TEXT_ALL
-MSG_YOUR_SCAN_CFG
-MSG_YOUR_SCAN
-MSG_YOUR_SCAN_ALL
-
-<b><a href="#File Base Functions">File Base Functions</a>
-</b>-------------------
-FILE_SET_AREA
-FILE_SET_LIBRARY
-FILE_SELECT_AREA
-FILE_SHOW_LIBRARIES
-FILE_SHOW_DIRECTORIES
-FILE_LIBRARY_UP
-FILE_LIBRARY_DOWN
-FILE_DIRECTORY_UP
-FILE_DIRECTORY_DOWN
-FILE_GET_DIR_NUM
-FILE_GET_LIB_NUM
-FILE_LIST
-FILE_LIST_EXTENDED
-FILE_VIEW
-FILE_UPLOAD
-FILE_UPLOAD_USER
-FILE_UPLOAD_SYSOP
-FILE_DOWNLOAD
-FILE_DOWNLOAD_USER
-FILE_DOWNLOAD_BATCH
-FILE_REMOVE
-FILE_BATCH_ADD
-FILE_BATCH_ADD_LIST
-FILE_BATCH_CLEAR
-FILE_BATCH_SECTION
-FILE_TEMP_SECTION
-FILE_NEW_SCAN
-FILE_NEW_SCAN_ALL
-FILE_FIND_TEXT
-FILE_FIND_TEXT_ALL
-FILE_FIND_NAME
-FILE_FIND_NAME_ALL
-FILE_PTRS_CFG
-FILE_SET_ALT_PATH
-FILE_RESORT_DIRECTORY
-FILE_SEND
-FILE_GET
-FILE_PUT
-FILE_UPLOAD_BULK
-FILE_FIND_OLD
-FILE_FIND_OPEN
-FILE_FIND_OFFLINE
-FILE_FIND_OLD_UPLOADS
-
-<b><a href="#Chat Functions">Chat Functions</a>
-</b>--------------
-PAGE_SYSOP
-PAGE_GURU
-PRIVATE_CHAT
-PRIVATE_MESSAGE
-CHAT_SECTION</pre>
-<pre><b><a href="#Information Functions">Information Functions</a>
-</b>---------------------
-INFO_SYSTEM
-INFO_SUBBOARD
-INFO_DIRECTORY
-INFO_USER
-INFO_VERSION
-INFO_XFER_POLICY
-GURU_LOG
-ERROR_LOG
-SYSTEM_LOG
-SYSTEM_YLOG
-SYSTEM_STATS
-NODE_STATS
-SHOW_MEM</pre>
-<pre><b><a href="#File I/O Functions">File I/O Functions</a>
-</b>------------------
-FOPEN &lt;int_var&gt; &lt;#&gt; &lt;&quot;str&quot; or str_var&gt;
-FCLOSE &lt;int_var&gt;
-FREAD &lt;int_var&gt; &lt;any_var&gt; [int_var or #]
-FWRITE &lt;int_var&gt; &lt;any_var&gt; [int_var or #]
-FFLUSH &lt;int_var&gt;
-FGET_LENGTH &lt;int_var&gt; &lt;int_var&gt;
-FSET_LENGTH &lt;int_var&gt; &lt;int_var or #&gt;
-FGET_TIME &lt;int_var&gt; &lt;int_var&gt;
-FSET_TIME &lt;int_var&gt; &lt;int_var&gt;
-FEOF &lt;int_var&gt;
-FGET_POS &lt;int_var&gt; &lt;int_var&gt;
-FSET_POS &lt;int_var&gt; &lt;int_var or #&gt; [#]
-FLOCK &lt;int_var&gt; &lt;int_var or #&gt;
-FUNLOCK &lt;int_var&gt; &lt;int_var or #&gt;
-FPRINTF &lt;int_var&gt; &lt;&quot;cstr&quot;&gt; [any_var] [...]
-FREAD_LINE &lt;int_var&gt; &lt;any_var&gt;
-FSET_ETX &lt;#&gt;</pre>
-<pre><b><a href="#File System Functions">File System Functions</a>
-</b>---------------------
-CHKFILE &lt;&quot;str&quot; or str_var&gt;
-REMOVE_FILE &lt;str_var&gt;
-RENAME_FILE &lt;str_var&gt; &lt;str_var&gt;
-COPY_FILE &lt;str_var&gt; &lt;str_var&gt;
-MOVE_FILE &lt;str_var&gt; &lt;str_var&gt;
-GET_FILE_ATTRIB &lt;int_var&gt; &lt;str_var&gt;
-SET_FILE_ATTRIB &lt;int_var&gt; &lt;str_var&gt;
-GET_FILE_TIME &lt;int_var&gt; &lt;str_var&gt;
-GET_FILE_LENGTH &lt;int_var&gt; &lt;str_var&gt;
-
-<b><a href="#Directory System Functions">Directory System Functions</a>
-</b>--------------------------
-MAKE_DIR &lt;str_var&gt;
-CHANGE_DIR &lt;str_var&gt;
-REMOVE_DIR &lt;str_var&gt;
-OPEN_DIR &lt;int_var&gt; &lt;str_var&gt;
-READ_DIR &lt;int_var&gt; &lt;str_var&gt;
-REWIND_DIR &lt;int_var&gt;
-CLOSE_DIR &lt;int_var&gt;</pre>
-<pre><a href="#TOC"><b>Back to Table of Contents</b></a>&nbsp;</pre>
-
-<!--webbot bot="Include" U-Include="_borders/bottom.htm" TAG="BODY" startspan -->
-
-<hr>
-<p><b><a href="http://www.synchro.net/copyright.html">Copyright</a> � 2000 by </b> <a href="http://www.synchro.net/author.htm"><b>Rob Swindell</b><br>
-</a>
-
-<a href="http://www.synchro.net"><font size="2"><br>
-Synchronet BBS Software</font></a>  <font size="2">  (Synchronet)
-Version 3 is comprised of several documentation,<br>
-library, executable, and <a href="http://www.synchro.net/source.html">source code</a> 
-files, all of which are covered by the<a href="http://www.fsf.org/copyleft/gpl.html">
-<br>
-GNU General Public License</a>  with the exception of the following portions
-covered by<br>
-the <a href="http://www.fsf.org/copyleft/lesser.html">GNU Lesser General Public License</a>:
-SMBLIB and XSDK.<br>
-<br>
-Synchronet Version 2 (for DOS and OS/2) and its source code was released to the<a href="http://www.fsf.org/philosophy/categories.html#PublicDomainSoftware">
-<br>
-Public Domain</a>  by <a href="ftp://vert.synchro.net/main/sbbs/manifest.txt">Digital Dynamics</a> 
-in 1997 and remains Public Domain software today.<br>
-Synchronet Version 3 is not Public Domain software.</font></p>
-<p align="left"><font size="2"><a href="http://www.synchro.net/author.html">Rob Swindell<br>
-</a>PO Box 501<br>Yorba Linda, CA 92885<a href="http://www.synchro.net"><br>
-http://www.synchro.net</a>
-
-</font></p>
-<p align="left"><font size="2">For the complete Copyright Information please
-read the <a href="http://www.synchro.net/copyright.html">Copyright Documentation</a>
-.</font></p>
-
-<!--webbot bot="Include" endspan i-checksum="55766" -->
-
-</body>
-
-</html>
diff --git a/docs/baja2new.txt b/docs/baja2new.txt
deleted file mode 100644
index 967efc728d..0000000000
--- a/docs/baja2new.txt
+++ /dev/null
@@ -1,332 +0,0 @@
-New features added in Baja Version 2
-====================================
-
-o Integer constants can be delcared as specific bit values (.x)
-o Integer contsants can be modified during compilation (345*12)
-o Compiler supports C-like macros (!define) for pre-processor definition of
-        integer and string constants
-o Compiler supports multi-file projects using a C-like pre-processor directive
-        (!include) for combining multiple source/include files
-o Enhanced functions:
-        SHIFT_STR [str_var] <#>
-                Can shift any string variable (not just str)
-        SETLOGIC <TRUE or FALSE or GREATER or LESS>
-                Supports new GREATER and LESS logic states
-        PRINT <"str" or any_var>
-                Can print any variable as well as string constants
-        CHKFILE <"str" or str_var>
-                Can check for file specified by string constant or variable
-        COMPARE_KEY <key>
-                Now supports DIGIT, EDIGIT, ^x, and /x like CMDKEY
-        COMPARE_ARS <ars>
-                Now supports WIP (Windows Interface Protocol) keyword
-        COMPARE_USER_MISC <attrs>
-                and
-        TOGGLE_USER_MISC  <attrs>
-                Now support WIP (Windows Interface Protocol) attribute
-        PRINTFILE <"str" or str_var> [mode]
-                Optional mode (one or more):
-                        NOABORT   Disallows abortion of display with Ctrl-C
-                        SAVEATR   Retain attributes (colors) after display
-                        NOATCODES Don't expand @-code variables/actions
-                        OPENCLOSE Open and close immediately (before display)
-        GETSTR [str_var] [maxlen] [mode]
-                Can read into any string variable (not just str)
-                Optional mode (one or more):
-                        UPPER     Converts all letters to upper case
-                        UPRLWR    Upper/Lower case automatically
-                        NUMBER    Allow numbers only
-                        WRAP      Allows word wrap
-                        MSG       Allows ANSI, ^N ^A ^G
-                        SPIN      Spinning cursor
-                        LINE      Input line (inverse color)
-                        EDIT      Edit string passed
-                        NOCRLF    Don't print CRLF after string input
-                        ALPHA     Only allow alphabetic characters
-                        LOWPRIO   low priority input
-                        NOEXASC   No extended ASCII allowed
-                        E71DETECT Detect E-7-1 terminal type
-                        AUTODEL   Auto-delete text (used with EDIT)
-			NOECHO	  Don't echo input to local or remote console
-        GETNUM [any_var] <#>
-                Writes to any variable (not just str)
-        NODE_ACTION <action or #>
-                Supported actions:
-                        MAIN    Main Prompt
-                        RMSG    Reading Messages
-                        RMAL    Reading Mail
-                        SMAL    Sending Mail
-                        RTXT    Reading G-Files
-                        RSML    Reading Sent Mail
-                        PMSG    Posting Message
-                        AMSG    Auto-message
-                        XTRN    Running External Program
-                        DFLT    Main Defaults Section
-                        XFER    Transfer Prompt
-                        DLNG    Downloading File
-                        ULNG    Uploading File
-                        BXFR    Bidirectional Transfer
-                        LFIL    Listing Files
-                        LOGN    Logging on
-                        LCHT    In Local Chat with Sysop
-                        MCHT    In Multi-Chat with Other Nodes
-                        GCHT    In Local Chat with Guru
-                        CHAT    In Chat Section
-                        SYSP    Sysop Activity
-                        TQWK    Transferring QWK packet
-                        PCHT    In Private Chat
-                        PAGE    Paging another node for Private Chat
-                        RFSD    Retrieving file from seq dev (aux=dev)
-o New String Manipulation functions:
-        STR <str_var> [str_var] [...]
-                Define local string variable(s)
-        GLOBAL_STR <str_var> [str_var] [...]
-                Define global string variable(s)
-        SET <str_var> <"str">
-                Initialize string variable
-        COPY <str_var> <any_var>
-                Copy from any variable to a string variable
-        SWAP <str_var> <any_var>
-                Swap contents of any variable with string variable
-        STRCAT <str_var> <str_var or "str">
-                Append string variable or constant to end of string variable
-        SPRINTF <str_var> <"str"> <any_var> [any_var] [...]
-                Write text and formated variables to string variable
-        TIME_STR <str_var> <int_var>
-                Convert time integer variable to date/time string
-        DATE_STR <str_var> <int_var>
-                Convert time integer variable to MM/DD/YY string
-        SECOND_STR <str_var> <int_var>
-                Convert time integer variable to HH:MM:SS string
-        FTIME_STR <str_var> <"str"> <int_var>
-                Convert time integer variable to string in custom format
-        TRUNCSP [str_var]
-                Truncate space off end of string variable
-	STRIP_CTRL [str_var]
-		Strips all control characters from string variable
-        STRUPR [str_var]
-                Convert string variable to upper case
-        STRLWR [str_var]
-                Convert string variable to lower case
-        LOAD_TEXT <"str">
-                Loads an alternate TEXT.DAT into memory
-        REVERT_TEXT <# or ALL>
-                Reverse effects of REPLACE_TEXT for specific line # or ALL
-o New Integer Manipulation functions:
-        INT <int_var> [int_var] [...]
-                Define local integer variable(s)
-        GLOBAL_INT <int_var> [int_var] [...]
-                Define global integer variable(s)
-        SET <int_var> <#>
-                Initialize integer variable
-        ADD <int_var> <any_var or #>
-                Add any variable or numeric constant to integer variable
-        SUB <int_var> <any_var or #>
-                Subtract any variable or constant from integer variable
-        MUL <int_var> <any_var or #>
-                Multiply any variable or constant with integer variable
-        DIV <int_var> <any_var or #>
-                Divide integer variable by any variable or constant
-        MOD <int_var> <any_var or #>
-                Modula (remainder after division)
-        AND <int_var> <any_var or #>
-                Bit-wise AND integer with any constant or variable
-        OR  <int_var> <any_var or #>
-                Bit-wise OR integer with any constant or variable
-        NOT <int_var> <any_var or #>
-                Bit-wise NOT integer with any constant or variable
-        XOR <int_var> <any_var or #>
-                Bit-wise XOR integer with any constant or variable
-        COPY <int_var> <any_var>
-                Copy from any variable to an integer variable
-        SWAP <int_var> <any_var>
-                Swap contents of any variable with integer variable
-        RANDOM <int_var> <#>
-                Write random number between 0 and # to integer variable
-        TIME <int_var>
-                Write current time (time_t format) to integer variable
-        STRLEN <int_var> <str_var>
-                Put length of string variable into integer variable
-        DATE_INT <int_var> <str_var>
-                Convert MM/DD/YY string variable to integer variable
-        CRC16 <int_var> <str_var>
-                Put CRC-16 of contents of string variable into integer variable
-        CRC32 <int_var> <str_var>
-                Put CRC-32 of contents of string variable into integer variable
-        CHKSUM <int_var> <str_var>
-                Put CHKSUM of contents of string variable into integer variable
-        CHARVAL <int_var> <str_var>
-                Put value of 1st char in string variable into integer variable
-        FLENGTH <int_var> <str_var>
-                Put length of file pointed to by string variable into integer
-o New Logic/Control Flow functions:
-        COMPARE <any_var> <any_var or "str" or #>
-                Compare any variable with another variable or constant
-        IF_EQUAL
-                Same as IF_TRUE
-        IF_NOT_EQUAL
-                Same as IF_FALSE
-        IF_GREATER
-                If comparison resulted in GREATER-than
-        IF_GREATER_OR_EQUAL
-                If comparison resulted in GREATER-than or EQUAL-to
-        IF_LESS
-                If comparison resulted in LESS-than
-        IF_LESS_OR_EQUAL
-                If comparison resulted in LESS-than or EQUAL-to
-        SWITCH <int_var>
-                C-like switch { to replace multi if-else-if statements
-        CASE <#>
-                C-like case: block header
-        DEFAULT
-                C-like default: case block header
-        END_CASE
-                Like C "break" statement, terminates a case block
-        END_SWITCH
-                End of switch block (})
-        CMDKEYS <keylist>
-                Skip block if current command key is not in keylist
-        COMPARE_KEYS <keylist>
-                Logic state set to FALSE if current command key not in keylist
-        COMPARE_STRN <#> <str_var> <str_var or "str">
-                Compare first # characters of two strings (strncmp())
-        COMPARE_SUBSTR <str_var> <str_var or "str">
-                Find second string inside first (strstr())
-o New Display functions:
-        PRINTF <"str"> <any_var> [any_var] [...]
-                C-like function to display text and formatted variables
-        PRINTTAIL <str_var> <mode> <lines>
-                Print last x number of lines of file (mode same as PRINTFILE)
-        READ_SIF <"str">
-                Read SIF/SOF file and display with user's answers filled in
-        SAVELINE
-                Save the current display line to be redisplayed w/RESTORELINE
-        RESTORELINE
-                Re-display last line saved with SAVELINE
-o New Input functions:
-        INKEY
-                Set logic state to TRUE if the user hit a key (don't wait)
-        CREATE_SIF <"str">
-                Create/overwrite SIF data file by asking user questions
-o New Miscellaneous functions
-        ONLINE
-                Assume online execution (auto-halt if disconnected) - default
-        OFFLINE
-                Assume offline execution (no carrier or no one online)
-        LOGIN <"str">
-                Process login attempt using passed str for password prompt
-        LOGON
-                Initiate logon procedure (auto-loads logon module)
-        LOGOUT
-                This function to be used before re-logging a user in
-        NEWUSER
-                Initiate new user procedure (auto-loads new user module)
-        RIOSYNC
-                Synchronize remote output (wait for output buffers to flush)
-        PUT_NODE
-                Force flush of current node information to disk
-        NODE_STATUS <status or #>
-                Set node status to one of:
-                        WFC            Waiting for Call
-                        LOGON          At logon prompt
-                        NEWUSER        New user applying
-                        INUSE          In Use
-                        QUIET          In Use - quiet mode
-                        OFFLINE        Offline
-                        NETTING        Networking
-                        EVENT_WAITING  Waiting for all nodes to be inactive
-                        EVENT_RUNNING  Running an external event
-                        EVENT_LIMBO    Allowing another node to run an event
-        ADJUST_USER_MINUTES <# or -#>
-                Add or subtract minutes from user's minute bank
-        USER_EVENT <event_type>
-                Execute user event(s), one of:
-                        LOGON     All configured external logon events
-                        LOGOFF    All configured external logoff events
-                        NEWUSER   All configured external new user events
-                        BIRTHDAY  All configured external birthday events
-        TRASHCAN <"str">
-                Searches file specified by "str" for current command string
-	SEND_FILE_VIA <prot> <"str" or str_var>
-		Immediately start the transfer of a file with specific protocol
-        GETTIMELEFT
-                Checks the user's current time left online
-        MSWAIT <#>
-                Suspends execution for # milliseconds (gives up time-slices)
-o New File Base functions:
-        FILE_BATCH_ADD_LIST
-                Add list of files (current command str) to batch d/l queue
-	FILE_SEND
-		Same as FILE_GET, but doesn't require system password.
-o New Chat functions:
-        PAGE_GURU
-                Page one of the configured online Gurus for chat
-o New File I/O functions:
-        FOPEN <int_var> <access> <"str" or str_var>
-                Open/create a file for random access
-        FCLOSE <int_var>
-                Close a file
-        FREAD <int_var> <any_var> [int_var or #]
-                Read # of bytes from a file into integer or string variable
-        FWRITE <int_var> <any_var> [int_var or #]
-                Write # of bytes from integer or string variable into a file
-        FGET_LENGTH <int_var> <int_var>
-                Get current length of file and put in integer variable
-        FSET_LENGTH <int_var> <int_var or #>
-                Set current length of file
-        FGET_TIME <int_var> <int_var>
-                Get the current time stamp of file
-        FSET_TIME <int_var> <int_var>
-                Set the current time stamp of file
-        FEOF <int_var>
-                Set logic state to true if currently at end of file
-        FGET_POS <int_var> <int_var>
-                Get current byte offset (position) in file
-        FSET_POS <int_var> <int_var or #> [BEG/SET or CUR or END or #]
-                Set the current file position (seek)
-        FLOCK <int_var> <int_var or #>
-                Lock a record of # bytes in length (retry for 10 seconds)
-        FUNLOCK <int_var> <int_var or #>
-                Unlock a previously locked record
-        FPRINTF <int_var> <"str"> <any_var> [any_var] [...]
-                Write text and formatted variables to file
-	FREAD_LINE <int_var> <any_var>
-		Read a single line from a file into a variable
-        FSET_ETX <#>
-                Set end-of-text character for ASCII termination (default: 0)
-o New File System functions
-o New Directory System functions
-
-
-Incompatibilities with Baja Version 1 Source Code
-=================================================
-
-PRINT function requires argument to be in quotes (if not a variable).
-
-PRINTFILE function requires first argument to be in quotes (if not a variable).
-
-NODE_ACTION function requires inclusion of NODEDEFS.INC and action parameters
-	(MAIN and XFER) where changed (to NODE_MAIN and NODE_XFER). Additional
-	action values were added. See Baja.DOC for details.
-
-TOGGLE_NODE_MISC and COMPARE_NODE_MISC functions require the inclusion of
-	NODEDEFS.INC. Misc attribute syntax was changed. See Baja.DOC for
-	details.
-
-TOGGLE_USER_MISC and COMPARE_USER_MISC functions require the inclusion of
-	USERDEFS.INC. The misc attributes were changed (prepended with UM_).
-	The syntax for combining multiple misc attributes was changed. See
-	Baja.DOC for details.
-
-TOGGLE_USER_CHAT, COMPARE_USER_CHAT, TOGGLE_USER_QWK, and COMPARE_USER_QWK
-	functions require the inclusion of USERDEFS.INC. The attr parameters
-	were changed (from ECHO to CHAT_ECHO, for example). The syntax for
-	combining multiple misc attributes was changed. See Baja.DOC for
-	details.
-
-SET_USER_STRING function requires the inclusion of USERDEFS.INC. The argument
-	syntax was changed (from ALIAS to USER_STRING_ALIAS, for example).
-
-Label names may no longer contain spaces.
-
-/* End of BAJA_V2.NEW */
diff --git a/docs/chat_section.html b/docs/chat_section.html
deleted file mode 100644
index 8e9034fb10..0000000000
--- a/docs/chat_section.html
+++ /dev/null
@@ -1,164 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<title>Chat Section</title>
-</head>
-
-<body>
-
-<!--webbot bot="Include" U-Include="_borders/top.htm" TAG="BODY" startspan -->
-
-<a href="http://www.synchro.net"><img border="0" src="images/synclogo_fancyred.gif" alt="Synchronet BBS - Multinode Bulletin Board Software" width="626" height="86"></a>
-
-<hr>
-
-<!--webbot bot="Include" endspan i-checksum="23126" -->
-
-<p><a name="top"></a><a href="sysop.html#TOC">Back to Table of Contents</a></p>
-<h2><a name="ChatFeatures">[11.0] - Chat Features</a>
-</h2>
-<pre>Selecting the Chat Features option from the SCFG will bring you to the
-following sub-menu, an explanation of the options shown here follow.</pre>
-<h2><img border="0" src="images/scfg_chat_features.gif" width="572" height="331"><br>
-<br>
-<a name="ArtificialChatGurus">[11.1] - Artificial Chat Gurus</a>
-</h2>
-<pre>This selection will give you a sub-menu with a list of available artificial
-gurus, here you can insert and delete gurus.</pre>
-<pre><img border="0" src="images/scfg_chat_gurus.gif" width="572" height="331">
-
-Selecting a guru from the menu will bring you to a menu allowing you to
-configure that guru.</pre>
-<pre><img border="0" src="images/scfg_chat_theguru.gif" width="572" height="331">
-
-<b>Guru Name:</b>
-	The name users will see when chatting with this artificial guru.
-
-<b>Guru Internal Code:</b>
-	This is an 8 character code used internally by Synchronet and should be
-	unique for each guru. This is also the filename which will be used for
-	the intelligence engine for this guru (with the .DAT extension, located
-	in your CTRL directory). See the section on customization for
-	information on customizing chat gurus.
-
-<b>Access Requirements:</b>
-	Only users meeting the criteria set here will be able to chat with this
-	guru.</pre>
-<h2><a name="ChatActions">[11.2] - Chat Actions</a>
-</h2>
-<pre>Selecting this option will show a list of available chat action sets where you
-can insert and delete action sets. Selecting an action set from this menu will
-display a list of the actions contained within that set.
-
-Synchronet comes with a default chat action set, which you can modify, or use
-as a reference for creating your own action set. Each command response should
-have two '%s' fields contained in the line, the first will be replaced with
-the name of the user performing the action, the second with the name of the
-user to which the action is directed.</pre>
-<h2><a name="MultinodeChatChannels">[11.3] - Multinode Chat Channels</a>
-</h2>
-<pre>Selecting this option will give you a sub-menu. An example of how a chat
-channel might be set up, along with the options available, is shown:</pre>
-<pre><img border="0" src="images/scfg_chat_channel1.gif" width="572" height="331">
-
-<b>Name:</b>
-	This is the name of this chat channel, and what will be displayed to
-	users when viewing a list of available chat channels.
-
-<b>Internal Code:
-</b>	This is an internal code for SBBS to distinguish this chat channel from
-        the others on the system. This must be a unique name of up to 8 valid
-	DOS filename characters.
-
-<b>Cost in Credits:
-</b>	This is the amount of credits which will be deducted from the users
-	account when joining this particular chat channel.
-
-<b>Access Requirements:
-</b>	A user must meet the criteria set here in order to be able to use
-	(or even see) this chat channel.
-
-<b>Password Protection:
-</b>	If you wish to allow users to be able to lock this channel with a
-	password (only users knowing this password can enter the channel), you
-	should set this option to Yes.
-
-<b>Guru Joins When Empty:
-</b>	Set this option to Yes to have the selected chat guru enter this chat
-	channel when there is only one user in the channel.
-
-<b>Channel Guru:
-</b>	This is the guru which will join this channel (if the above option is
-	set to yes). Selecting this option will give you a list of available
-	chat gurus to choose from.
-
-<b>Channel Action Set:
-</b>	This is the chat action set which will be available to users in this
-	channel. Selecting this option will give you a list of available
-	chat action sets.</pre>
-<h2><a name="ExternalSysopPagers">[11.4] - External Sysop Chat
-Pagers</a>
-</h2>
-<pre>This option allows for sysops to have custom chat pages (external to what is
-available in Synchronet). Sysops can have .TON files played when certain or all
-users page, or if a sound card is installed, the sysop may have a .WAV or .VOC
-file play. Selecting this option will give you a list of currently configured
-chat pagers.</pre>
-<pre><img border="0" src="images/scfg_chat_pagers.gif" width="572" height="331">
-
-Selecting a pager from the above menu will give you other options for this chat
-pager.</pre>
-<pre><img border="0" src="images/scfg_chat_pager1.gif" width="572" height="331">
-
-<b>Command Line:
-</b>	This is the command line necessary to invoke the chat pager.
-
-<b>Access Requirements:
-</b>	This is the list of criteria a user must meet for this pager to
-	affect them.
-
-<b>Intercept I/O Interrupts:
-</b>	If the chat pager specified produces screen output that the user
-	should see (or a series of beeps that the user should hear), this
-	option should be toggled to Yes.</pre>
-<p><a href="#top"><b>Back to Top</b></a></p>
-
-<!--webbot bot="Include" U-Include="_borders/bottom.htm" TAG="BODY" startspan -->
-
-<hr>
-<p><b><a href="http://www.synchro.net/copyright.html">Copyright</a> � 2000 by </b> <a href="http://www.synchro.net/author.htm"><b>Rob Swindell</b><br>
-</a>
-
-<a href="http://www.synchro.net"><font size="2"><br>
-Synchronet BBS Software</font></a>  <font size="2">  (Synchronet)
-Version 3 is comprised of several documentation,<br>
-library, executable, and <a href="http://www.synchro.net/source.html">source code</a> 
-files, all of which are covered by the<a href="http://www.fsf.org/copyleft/gpl.html">
-<br>
-GNU General Public License</a>  with the exception of the following portions
-covered by<br>
-the <a href="http://www.fsf.org/copyleft/lesser.html">GNU Lesser General Public License</a>:
-SMBLIB and XSDK.<br>
-<br>
-Synchronet Version 2 (for DOS and OS/2) and its source code was released to the<a href="http://www.fsf.org/philosophy/categories.html#PublicDomainSoftware">
-<br>
-Public Domain</a>  by <a href="ftp://vert.synchro.net/main/sbbs/manifest.txt">Digital Dynamics</a> 
-in 1997 and remains Public Domain software today.<br>
-Synchronet Version 3 is not Public Domain software.</font></p>
-<p align="left"><font size="2"><a href="http://www.synchro.net/author.html">Rob Swindell<br>
-</a>PO Box 501<br>Yorba Linda, CA 92885<a href="http://www.synchro.net"><br>
-http://www.synchro.net</a>
-
-</font></p>
-<p align="left"><font size="2">For the complete Copyright Information please
-read the <a href="http://www.synchro.net/copyright.html">Copyright Documentation</a>
-.</font></p>
-
-<!--webbot bot="Include" endspan i-checksum="55766" -->
-
-</body>
-
-</html>
diff --git a/docs/contents.txt b/docs/contents.txt
deleted file mode 100644
index 60c0886060..0000000000
--- a/docs/contents.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-		  Synchronet Version 2.2 Documentation Directory
-                                Table of Contents
-
-The following files should be located in the DOCS directory off of your main
-BBS directory (example: C:\SBBS\DOCS).
-
-CONTENTS TXT	This file
-SBBS	 LST	List of public access Synchronet BBSs sorted by phone number
-ORDER	 TXT	Purchase order form for Synchronet v2.2
-VERSIONS HST    History of Synchronet package versions and release dates
-VERSIONS TXT	Versions of utilities included with this Synchronet package
-USER	 DOC	Synchronet User Manual (exported to ASCII)
-SYSOP	 DOC	Synchronet Sysop Manual
-BAJA	 DOC	Baja compiler/langauge documentation
-BAJA_200 NEW	Changes made in Baja version 2 (and incompatibility reference)
-FILES	 REF	Reference for all Synchronet data/config files
-SBBSECHO DOC	FidoNet EchoMail import/export (toss/scan) documentation
-MAILER	 BAT	Batch file for using Synchronet with FrontDoor/InterMail
-EXEBBS	 BAT	Batch file for using Synchronet with FrontDoor/InterMail
-QEMM	 DOC	Tips on keeping QEMM from using memory it shouldn't (crashing)
-SVDMANSI DOC	Documentation for OS/2 ANSI replacement
-USERCOM  DOC	Documentation for USER.COM log search utility
-TEXT210A DIF	TEXT.DAT changes from v2.00  to v2.1x
-TEXT220A DIF	TEXT.DAT changes from v2.1x  to v2.20a
-TEXT220B DIF	TEXT.DAT changes from v2.20a to v2.20b
-V200A    NEW    New features introduced in v2.00a   
-V210A    NEW    New features introduced in v2.10a
-V211A    NEW    New features introduced in v2.11a
-V220A	 NEW	New features introduced in v2.20a
-SBBS	 HST	Development history of Synchronet version 2
-
-Third Party:
-
-SYNCEDIT DOC 	Documentation for SyncEdit external editor
-REGISTER FRM 	Registration (order) form for SyncEdit
-CVT2SBBS TXT    Information on how to convert previous BBS user data to SBBS
diff --git a/docs/customization.html b/docs/customization.html
deleted file mode 100644
index c217f18333..0000000000
--- a/docs/customization.html
+++ /dev/null
@@ -1,1057 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=IBM437">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<title>Customization</title>
-</head>
-
-<body>
-
-<!--webbot bot="Include" U-Include="_borders/top.htm" TAG="BODY" startspan -->
-
-<a href="http://www.synchro.net"><img border="0" src="images/synclogo_fancyred.gif" alt="Synchronet BBS - Multinode Bulletin Board Software" width="626" height="86"></a>
-
-<hr>
-
-<!--webbot bot="Include" endspan i-checksum="23126" -->
-
-<p><a name="top"></a><a href="sysop.html#TOC">Back to Table of Contents</a></p>
-<h2><a name="MenusAndTextFiles">[17.1] - Customization:
-Menus and Text Files</a></h2>
-<pre>One of the easiest and possibly the most obvious ways to customize or
-personalize your BBS is to change the look of the menus. Menus are merely ASCII
-text files (with optional ctrl-a codes or ANSI escape sequences) stored in the
-TEXT\MENU directory. The filenames are descriptive of the menu subject and
-the extensions represent the content of the file. The possible extensions and
-their meanings are:
-
-<b>RIP</b>     Contains RIPscrip escape sequences for use with RIPterm
-<b>WIP</b>     Contains WIP escape sequences for use with DC-Term
-<b>ANS </b>    Contains ANSI escape sequences suitable for color display
-<b>MON</b>     Contains ANSI escape sequences suitable for monochrome display
-<b>ASC</b>     Contains no ANSI
-
-All of the above file types can contain ctrl-a codes, and only the ASC file
-must exist. If a user has color ANSI, the ANS file will be displayed; if it
-doesn't exist the ASC file will be displayed. If a user has monochrome ANSI,
-the MON file will be displayed; if it doesn't exist the ANS file will be
-displayed; and if it doesn't exist the ASC file is then displayed.
-
-A user without ANSI will always be displayed the ASC file.
-
-To edit files with ANSI escape sequences, it is usually preferable to use a
-utility designed for such a task. TheDraw is quite popular for this use.
-
-To edit files with ctrl-a codes, you can use any editor that allows the input
-of ctrl characters, but you won't see the attributes till you view the file
-within Synchronet. You can, however, use the Synchronet internal editor (;EDIT
-from the main menu) and it will display the attributes as you edit the file.
-The Synchronet editor limits the line length to 79 characters which may not be
-sufficient for lines with multiple ctrl-a codes.
-
-The best way to edit files with Ctrl-A codes is to first convert them to ANSI
-with MSG2ANS.EXE (see the Utility reference for more information). Then edit
-with an ANSI editor (such as TheDraw). Then convert back to Ctrl-A format
-using ANS2MSG.EXE (see the Utility reference for more information).
-
-
-<b>Menu Files	Description
-</b>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-ALLMAIL         Sysop's reading all mail on system menus
-ATTR            Ctrl-A code menu for use within the Synchronet internal editor
-BATCHXFR        Batch transfer menu
-BATDPROT        Batch download transfer protocols
-BATFLAG         Batch flag command key menu
-BATUPROT        Batch upload transfer protocols
-BIPROT          Bidirectional transfer protocols
-CHAT            Chat section menu
-DLPROT          Download transfer protocols
-E-MAIL          E-mail section menu
-EDITOR          Synchronet internal editor commands and line editing keys
-EXEMPT          Exemption flag descriptions for use within User Edit
-FLAGS1          Flag set #1 descriptions for use within User Edit
-FLAGS2          Flag set #2 descriptions for use within User Edit
-FLAGS3          Flag set #3 descriptions for use within User Edit
-FLAGS4          Flag set #4 descriptions for use within User Edit
-LOGOFF          Logoff ('O' command) screen
-LOGON           Logon screen (LOGON2, LOGON3, ... LOGON9 also supported)
-MAILREAD        Reading mail menu
-MAIN            Main section menu
-MAINCFG         Main configuration menu
-MAININFO        Main information menu
-MSGSCAN         Message reading/scanning menu
-MULTCHAT        Multinode chat menu
-PRIVCHAT        Private node-to-node chat menu
-QWK             QWK Packet menu
-RESTRICT        Restriction flag descriptions for use within User Edit
-SENTMAIL        Reading sent mail menu
-SYSMAILR        Sysop additional commands while reading mail
-SYSMAIN         Sysop additional commands for main section
-SYSMSCAN        Sysop additional commands while message reading/scanning
-SYSSMAIL        Sysop additional commands while reading sent mail
-SYSXFER         Sysop additional commands for transfer section
-TEMPXFER        Temporary directory commands menu
-TRANSFER        Transfer section menu
-UEDIT           User Edit menu
-ULPROT          Upload transfer protocols
-WFC             Waiting for call menu
-XFERCFG         Transfer section configuration menu
-XFERINFO        Transfer section information menu
-
-
-<b>Optional Menus</b>
-
-The following files must be created in the TEXT\MENU directory if you wish to
-use them.
-
-GRPS            Message Group listing
-SUBSx           Message Sub-board listing, 'x' is the group number
-LIBS            File Library listing
-DIRSx           File Directory listing, 'x' is the library number
-XTRN_SEC        External Program Sections
-XTRNx           External Program listing, 'x' is the section number
-TEXT_SEC        Text File Section listing
-TEXTx           Text File listing, 'x' is the text file section number
-CHAN            Multinode Chat Channels
-TMESSAGE        Displays when the user enters the transfer section
-TPOLICY         Transfer policy (&amp;T transfer section command)
-
-<b>Other Optional Message Files</b>
-
-If you want to have an information file displayed for sub-boards when using
-the 'I' scanning command and 'IS' main menu command, create a file for the
-sub-board in the DATA\SUBS directory using the internal code for that sub-board
-as the name and .MSG as the extension. Example:
-
-<b>DATA\SUBS\GENERAL.MSG</b>
-
-If you want to create in information file for file directories to be displayed
-with the 'ID' transfer section command, create a file for the directory in
-the DATA\DIRS directory using the internal code as the name and .MSG as the
-extension. Example:
-
-<b>DATA\DIRS\GAMES.MSG</b>
-
-If you want to create a custom file listing header for a file directory, create
-a file in the DATA\DIRS directory using the internal code as the name and .HDR
-as the extension. Example:
-
-<b>DATA\DIRS\GAMES.HDR</b>
-
-<b>Colors</b>
-
-To modify some of colors of the BBS you can edit the ATTR.CFG file which is
-located in the CTRL directory. The file contains one color per line and is
-commented as to the use of the color. The colors are represented with ctrl-a
-code attribute letters/numbers. The number of colors you can change with this
-method is very small.
-
-<b>Text Files<u>
-</u></b>
-There are some text files that are displayed to users at different points
-in the system. The locations and descriptions follow (* indicates optional):
-
-<b>TEXT\ANSWER.ANS </b>        Answer message for ANSI users
-<b>TEXT\ANSWER.ASC </b>        Answer message for non-ANSI users
-<b>TEXT\ANSWER.RIP </b>        Answer message for RIP users
-<b>TEXT\SYSTEM.MSG</b>         Description of the system and its configuration
-<b>TEXT\NEWUSER.MSG        </b>Displayed to new users (usually system rules)
-<b>TEXT\FEEDBACK.MSG</b>       Displayed before new users write validation feedback
-<b>TEXT\NUPGUESS.MSG</b>      *Displayed to callers attempting to guess the NUP (after
-                        failing to guess correctly)
-<b>TEXT\TOOSLOW.MSG</b>       *Displayed to users logging onto a node at less than the
-                        minumum configured connect rate for that node
-<b>TEXT\BADCID.MSG </b>       *Displayed to users calling from a number contained in
-                        CID.CAN
-<b>TEXT\BADNAME.MSG</b>       *Displayed to new users trying to use a name contained
-                        in NAME.CAN
-<b>TEXT\BADPHONE.MSG</b>      *Displayed to new users using a number contained in
-                        PHONE.CAN
-<b>TEXT\BADFILE.MSG</b>       *Displayed to user trying to upload filename contained
-                        in FILE.CAN
-<b>TEXT\QWK\HELLO</b>         *Included in QWK packets
-<b>TEXT\QWK\BBSNEWS</b>       *Included in QWK packets
-<b>TEXT\QWK\BLT-0.? </b>      *Included in QWK packets (? must be number)
-
-<b>Logon Message Flow Chart</b>
-
-Displayed filenames are in upper case.
-
-(Note: LOGON*.* are not displayed for local logons)
-
-���������������ͻ
-� TEXT\ANSWER.* �
-���������������ͼ
-��������������Ŀ
-� Logon Prompt �
-����������������
-  �����������Ŀ �����Ŀ ���������������ͻ �����������������ͻ
-  � New User? �Ĵ Yes �Ķ TEXT\SBBS.MSG �Ķ TEXT\SYSTEM.MSG �
-  ������������� ������� ���������������ͼ �����������������ͼ
-     ����Ŀ                               ������������������ͻ
-     � No �                               � TEXT\NEWUSER.MSG �
-     ������                               ������������������ͼ
-        �                                ��������������������Ŀ
-        �                                � Password Selection �
-        �                                ����������������������
-        �                               �����������������������Ŀ
-        �                               � Default Configuration �
-        �                               �������������������������
-        �  �������������������ͻ �����Ŀ ��������������������Ŀ
-        �  � TEXT\FEEDBACK.MSG �Ĵ Yes �Ĵ Feedback Required? �
-        �  �������������������ͼ ������� ����������������������
-        �    ���������������Ŀ                  ����Ŀ
-        �    � Send Feedback �                  � No �
-        �    �����������������                  ������
-        �  �������������������Ŀ                   �
-        �  � New User Event(s) ���������������������
-        �  ���������������������
-        �  �������������������ͻ
-        ��Ķ TEXT\MENU\LOGON.* �
-           �������������������ͼ
-          ��������������������ͻ
-          � TEXT\MENU\LOGON2.* �
-          ��������������������ͼ
-          ��������������������ͻ
-          � TEXT\MENU\LOGON3.* �
-          ��������������������ͼ
-                    ...
-
-          ��������������������ͻ
-          � TEXT\MENU\LOGON9.* �
-          ��������������������ͼ
-            ����������������Ŀ
-            � Logon Event(s) �
-            ������������������</pre>
-<h3><a name="Text/Colors">[17.1.1] - Text/Colors</a></h3>
-<pre>Virtually all the text and color that the BBS displays is stored in the file
-TEXT.DAT in the CTRL directory. The syntax of this file is VERY specific and
-extreme caution should be taken when editing it. Knowledge of the C language
-would be very helpful in producing the desired results. If all you want to
-do is change colors of a certain text line, take care not to disturb the
-arrangement of the other characters on the line. Ctrl-a codes can be preceded
-by an embedded ctrl-a character (usually a black happy face) or by a '\1' 
-(the printf() equivalent of ctrl-a).
-
-The syntax of the characters between the double quotations is identical to 
-the C language printf() format string with one exception: \xxx where x are
-digits (0-9) represents a decimal number, not an octal number. The range is
-0 to 255. If you wish to set a background color using \1 for the ctrl-a code, 
-you may need to pad the attribute number with zeros. For example; to set the 
-background to blue, you might try to use the sequence &quot;\14&quot; which won't work.
-You could either embed the actual ctrl-a character (which is preferred) or
-use &quot;\0014&quot;.
-
-Some of the strings have characters preceded by a tilde ('~'). These strings
-are referred to as mnemonics. The tilde precedes a character that is to be
-highlighted for users supporting ANSI and enclosed in parenthesis for non-ANSI
-users. Usually used for prompt strings that contain the valid key commands.
-The colors to use for the highlighted characters, normal characters, and the
-command character are specified in the CTRL\ATTR.CFG file.
-
-The order of the % specifiers (if they exist) in a TEXT.DAT line cannot be
-altered. The display of %s specifiers can be suppressed by changing the '%s' to
-'%.0s'. Another way to suppress the display of specifiers is to enclose them
-between Ctrl-A( and Ctrl-A). Any text between Ctrl-A( and Ctrl-A) would only
-be displayed to users of level 90 or higher. To suppress the display to all
-users, put the text/specifiers between Ctrl-ACtrl-Z and Ctrl-A) (assuming
-that the Z flag from flag set #1 is not set on any user accounts).
-
-** WARNING **
-Make a backup of the TEXT.DAT file before you edit it. If you damage the file
-syntax when editing it, Synchronet may execute erroneously or even fail to
-initialize.</pre>
-<h3><a name="NodeActionText">[17.1.2] - Node Action Text</a></h3>
-<pre>The node action text can be over-ridden by editing the NodeAction lines in
-the TEXT.DAT file (see previous section for details on TEXT.DAT). The node
-action text is what is displayed on the node status line when a node is in
-use. (i.e. instead of &quot;Node  1: So-and-so uploading at 14400bps&quot;, you could
-make it say whatever you like).
-
-You can also include the following optional specifiers (in this order):
-
-<b>%s</b>	User's name or alias
-<b>%u</b>	User's security level
-<b>%u</b>	User's age
-<b>%c</b>	User's sex (gender, M or F)
-<b>%s</b>	User's computer type
-<b>%s</b>	User's note
-<b>%s</b>	Date user was first online
-<b>%u</b>	Auxiliary value (chat channel, door number, paged node, etc)
-<b>%u</b>	Connection rate (in bps)
-
-If you include any of the above specifiers, you must also include any of the
-specifiers above it. The order of the specifiers cannot be changed. If you
-wish to suppress the display of a %s specifier, use &quot;%.0s&quot; instead of &quot;%s&quot;.
-To suppress other specifiers, see the previous section for details.</pre>
-<h3><a name="TrashCanFiles">[17.1.3] - Trash Can Files</a></h3>
-<pre>Trash can files are used to be able to reject text during certain sequences on
-the BBS.  For example, if you don't want a user to be able to log on with a
-certain name or use a certain phone number, you would place the information you
-don't want them to use into the appropriate trash can file.  Synchronet looks
-for trash can files in the \SBBS\TEXT directory, certain ones may already
-exist, others will need to be created if you wish to use them.	The names of
-the various trash can files and their function are as follows:
-
-<b>TEXT\CID.CAN</b>	You MUST have caller ID capabilities in your area (as well as a
-		modem which can support those capabilities) in order to use
-		this file.  When a call comes in to the BBS who's caller ID
-		phone number matches a phone number in this file, the call will
-		be rejected.
-
-<b>TEXT\NAME.CAN</b>	When a user attempts to use a name contained in this file as
-		the name for their user account, they will be told that s/he
-		cannot use that name.
-		If the file <b>TEXT\BADNAME.MSG</b> exists, this will be displayed to
-		the user.
-
-<b>TEXT\FILE.CAN</b>	When a user uploads a file to the transfer section who's
-		filename matches one of the names contained in this file, the
-		user will be told that s/he cannot upload the file.
-		If the file <b>TEXT\BADFILE.MSG</b> exists, this will be displayed to
-		the user.
-
-<b>TEXT\PHONE.CAN</b>	When a user attempts to use a phone number contained in this
-		file as a phone number for their user account, they will be
-		told that s/he cannot use that phone number.  This file can
-		also be used by the Synchronet Callback Verifier program.
-		If the file <b>TEXT\BADPHONE.MSG</b> exists, this will be displayed to
-		the user.
-
-The trash can files also allow special key characters to be used within them,
-the tilde '~' character means &quot;contained within&quot; and the carrot '^' character
-means &quot;beginning with&quot;.  For example:
-
-<b>sysop	</b>in the name.can would mean users could not use the name &quot;sysop&quot;.
-
-<b>sysop^</b>	would mean users could not use names beginning with the word &quot;sysop&quot;,
-	like &quot;sysopa&quot; or &quot;sysops&quot; etc.
-
-<b>sysop~</b>	would mean users could not use names that have the word &quot;sysop&quot;
-	anywhere in them, like &quot;imthesysop&quot; or &quot;mesysophere&quot;.
-
-These key characters can be used in any of the trash can files.</pre>
-<h2><a name="MessageVariables">[17.2] - Customization:
-Message Variables</a></h2>
-<pre><b>Using Message Variables</b>
-
-Message Variables (also called @-Codes) are a way to customize text files in
-Synchronet to display information about the user online or the BBS.
-If Synchronet encounters an @-Code in a text file (i.e.: TEXT.DAT, menus, etc.),
-it will replace the @-Code in the file with the information that it corresponds
-with. @-Codes in e-mail messages and posts will only be expanded if they were
-posted locally (not networked) by user #1. TEXT.DAT lines that have %
-specifiers will not expand @-Codes unless the % specifiers are removed.
-
-For example, placing the following line in a text file displayed to a user
-named Fred Jones living on 100 Maple Street:
-
-	<b>Hi @ALIAS@, you live at @ADDR1@ don't you?</b>
-
-Would result in the user seeing:
-
-	<b>Hi Fred Jones, you live at 100 Maple Street don't you?
-</b>
-It's that simple.  The following is a list of the @-Codes that Synchronet will
-recognize. Remember that the Code NAME must begin and end with an @ symbol.
-The two columns after the description of the @-Code show which other BBS
-programs also support that @-Code (either PCBoard or Wildcat).
-
-The @-Codes with &quot;[...]&quot; following the name indicate that you can have the
-variable displayed with padding. If the @-Code name ends in &quot;-L&quot; the variable
-will be left justified and &quot;-R&quot; indicates it will be right justified. If for
-example, the user's name is Bob, the text string &quot;___@NAME-L@___&quot; would display
-to the user as &quot;___Bob     ___&quot; and the text string &quot;___@NAME-R@___&quot; would
-display to as &quot;___     Bob___&quot;. If you want the string to be padded longer, you
-can add extra characters to the end of the @-Code name and before the
-terminating '@' sign. So for example, &quot;___@NAME-L#####@___&quot; would display as
-&quot;___Bob          ___&quot; (the &quot;___&quot; segments of the above text examples are only
-to demonstrate where the padding begins and ends).
-
-*** Synchronet Supported @-Codes ***
-( * Indicates Synchronet specific )
-
-Note: All codes must be uppercase and sandwiched between @ symbols
-      (e.g. @USER@).</pre>
-<pre><b>System Information</b></pre>
-<pre><b>Code            Description                                             Ver
-</b>---------------------------------------------------------------------------
-BBS             Name of BBS					
-BOARDNAME       Name of BBS					
-CONF            Name of current Group and Sub-board		
-CONFNUM         Number of current Group and Sub-board		
-CONN            Connection description (modem type, &quot;Telnet&quot;, &quot;Local&quot;)  <b>2.3c</b>
-DATE            Current system date				
-DIR             Current file directory short description	
-DIR-L[...]      &quot; &quot; padded and left justified                   
-DIR-R[...]      &quot; &quot; padded and right justified                  
-DIRL            Current file directory long description 	
-DIRL-L[...]     &quot; &quot; padded and left justified                   
-DIRL-R[...]     &quot; &quot; padded and right justified                  
-DN              Number of current file directory		
-DL              &quot; &quot; padded and left justified (4 chars wide)    
-DR              &quot; &quot; padded and right justified (4 chars wide)   
-FIDOADDR        System's primary FidoNet address                        <b>2.3c</b>
-FREESPACE       Free disk space available for uploads		
-GRP             Current message group short description 	
-GRP-L[...]      &quot; &quot; padded and left justified                   
-GRP-R[...]      &quot; &quot; padded and right justified                  
-GRPL            Current message group long description		
-GRPL-L[...]     &quot; &quot; padded and left justified                   
-GRPL-R[...]     &quot; &quot; padded and right justified                  
-GN              Number of current message group 		
-GL              &quot; &quot; padded and left justified (4 chars wide)    
-GR              &quot; &quot; padded and right justified (4 chars wide)   
-INETADDR        System's Internet Address (as configured in SCFG)       <b>2.3c</b>
-LASTCALLERNODE  Name of user last on this node			
-LASTCALLERSYSTEM &lt;same as LASTCALLERNODE&gt;
-LIB             Current file library short description		
-LIB-L[...]      &quot; &quot; padded and left justified                   
-LIB-R[...]      &quot; &quot; padded and right justified                  
-LIBL            Current file library long description		
-LIBL-L[...]     &quot; &quot; padded and left justified                   
-LIBL-R[...]     &quot; &quot; padded and right justified                  
-LN              Number of current file library			
-LL              &quot; &quot; padded and left justified (4 chars wide)    
-LR              &quot; &quot; padded and right justified (4 chars wide)   
-LOCAL-IP        System's IP address                                     <b>3.0b</b>
-LOCATION        System location (city, state)                           <b>2.3c</b>
-NOACCESS        Why user was denied access (last false ARS)	
-NODE            Number of current node				
-NODE###         Status of node number ###			
-NUMCALLS        &lt;same as STATS.LOGONS&gt;				
-NUMDIR          Number of current library and directory 	
-PREVON          &lt;same as LASTCALLERNODE&gt;			
-QUESTION        Current Yes/No question (for TEXT\MENU\YESNO.*) 
-QWKID           System's QWK BBS-ID                                     <b>2.3c</b>
-REV             Software revision (single letter)
-STATS.LOGONS    Total logons during history of system                   <b>3.0b</b>
-STATS.LTODAY    Total logons today                                      <b>3.0b</b>
-STATS.TIMEON    Total time used during history of system (in minutes)   <b>3.0b</b>
-STATS.TTODAY    Total time used today (in minutes)                      <b>3.0b</b>
-STATS.ULS       Total uploads today                                     <b>3.0b</b>
-STATS.ULB       Total bytes uploaded today                              <b>3.0b</b>
-STATS.DLS       Total download today                                    <b>3.0b</b>
-STATS.DLB       Total bytes downloaded today                            <b>3.0b</b>
-STATS.PTODAY    Total posts today                                       <b>3.0b</b>
-STATS.ETODAY    Total e-mails sent today                                <b>3.0b</b>
-STATS.FTODAY    Total feedbacks sent today                              <b>3.0b</b>
-STATS.NUSERS    Total number of new users today                         <b>3.0b</b>
-SUB             Current message sub-board short description	
-SUB-L[...]      &quot; &quot; padded and left justified                   
-SUB-R[...]      &quot; &quot; padded and right justified                  
-SUBL            Current message sub-board long description	
-SUBL-L[...]     &quot; &quot; padded and left justified                   
-SUBL-R[...]     &quot; &quot; padded and right justified                  
-SN              Number of current message sub-board		
-SL              &quot; &quot; padded and left justified (4 chars wide)    
-SR              &quot; &quot; padded and right justified (4 chars wide)   
-SYSDATE         Current system date
-SYSOP           Name of System Operator 			
-SYSTIME         Current system time					
-TCALLS          Total number of logons for system		
-TFILE           Total number of files on system
-TIME            Current system time
-TMSG            Total number of messages on system
-TNODE           Total number of nodes on system
-TUSER           Total number of user slots on system
-VER             BBS version number
-WHO             Display status of all active nodes</pre>
-<pre><b>User Information</b>
-
-<b>Code            Description                                             Ver
-</b>---------------------------------------------------------------------------
-ADDR1           User's street address                 	        
-ALIAS           User's name or alias                            
-BAUD            User's connect rate (DCE) in bps                
-BDATE           User's birthdate (MM/DD/YY)                     
-BPS             &lt;same as BAUD&gt;					
-BYTELIMIT       User's free credits per day                     
-BYTESLEFT       User's total credits                            
-CALLS           Total number of logons for user 		
-CID             Caller's Caller-ID info or IP address                   <b>2.3c</b>
-CITY            User's city                                     
-COMPANY         User's company name or real name                
-CPU             User's computer type (v2.x) or hostname (v3.x)
-DATA            &lt;same as PHONE&gt; 				
-DATAPHONE       &lt;same as PHONE&gt; 				
-DAYBYTES        Number of free credits used today by user	
-DLBYTES         Total bytes downloaded by user			
-DLFILES         Total files downloaded by user			
-DLKLIMIT        User's total credits (in kilobytes)             
-DOWNK           Total kilobytes downloaded by user		
-DOWNS           &lt;same as DLFILES&gt;				
-EXDATE          User's expiration date (MM/DD/YY)               
-EXPDATE         &lt;same as EXDATE&gt;				
-EXPDAYS         Days left before user expires
-FIRST           User's first name/alias                         
-FIRSTREAL       User's first real/company name                  
-FROM            User's location (City, State)                   
-HANDLE          User's chat handle                              
-HOMEPHONE       &lt;same as PHONE&gt; 				
-HOST            &lt;same as CPU&gt;                                           <b>2.3c</b>
-IP              &lt;same as CID&gt;                                           <b>2.3c</b>
-KBLEFT          User's total credits (in kilobytes)             
-KBLIMIT         User's free credits per day (in kilobytes)      
-LAST            User's last name (alias)                        
-LASTDATEON      Date of user's last logon (MM/DD/YY)            
-LASTNEW         Date of user's last new file scan (MM/DD/YY)    
-LASTON          Date and time of user's last logon              
-LASTTIMEON      Time of user's last logon (HH:MM am)
-LASTREAL        User's last real/company name                   
-LEFT            &lt;same as MINLEFT&gt;
-MAILW           Number of mail messages waiting for current user
-MAILW:x	        Number of mail messages waiting for current user #x
-MAILP           Number of pending mail messages sent by current user
-MAILP:x         Number of pending mail messages sent by current user #x
-MAXDK           &lt;same as KBLIMIT&gt;				
-MEMO            Date of user's last password modification       
-MEMO1           User's note                                     
-MEMO2           &lt;same as COMPANY&gt;				
-MINLEFT         User's time left in minutes				
-MSGLEFT         Total number of messages posted by user 	
-MSGREAD         Number of messages read by user this call	
-MSGSLEFT        &lt;same as MSGLEFT&gt;					
-NAME            User's name or alias                            
-NAME-L[...]     User's name (padded and left justified)         
-NAME-R[...]     User's name (padded and right justified)        
-NEWFILETIME     Date and time of user's last new file scan
-NUMTIMESON      &lt;same as CALLS&gt; 				
-PHONE           User's phone number (###-###-####)              
-REAL            User's real first name                          
-SEC             User's security level                           
-SECURITY        &lt;same as SEC&gt;					
-SINCE           Date of user's first call (MM/DD/YY)            
-STATE           User's state (from location)                    
-TIMELEFT        &lt;same as MINLEFT&gt;				
-TIMELIMIT       Maximum time per call in minutes		
-TIMEON          Time used this call in minutes			
-TIMEUSED        &lt;same as TIMEON&gt;				
-TLEFT           Time left (H:MM:SS)				
-TPERC           Time allowed per call (H:MM:SS) 		
-TPERD           Time allowed per day (H:MM:SS)			
-TUSED           Time used this call (H:MM:SS)			
-UPBYTES         Total bytes uploaded by user			
-UPFILES         Total files uploaded by user			
-UPK             Total kilobytes uploaded by user		
-UPS             &lt;same as UPFILES&gt;				
-USER            User's name or alias (same as ALIAS)            
-ZIP             User's zip/postal code                          </pre>
-<pre><b>Display</b>
-
-<b>Code            Description                                             Ver
-</b>---------------------------------------------------------------------------
-AUTOMORE        Toggle automatic pausing			
-BEEP            Generate a beep 				
-BELL            &lt;same as BEEP&gt;					
-CLS             Clear screen					
-CRLF            Carriage return/line-feed pair                          <b>3.0b</b>
-MENU:filename   Display a menu file (from TEXT\MENU directory)
-MSGREPLY        Command key to reply to last message                    <b>3.0b</b>
-MSGREREAD       Command key used to re-read last message                <b>3.0b</b>
-NOPAUSE	        &lt;Same as POFF&gt;
-MORE            &lt;same as PAUSE&gt; 				
-PAUSE           Immediately produces a [Hit a key] prompt	
-PON             Toggles automatic screen pause for everyone
-POFF            Toggles automatic screen pause for everyone
-TYPE:filename   Display a specific filename
-UP              Move cursor up one row                  (ANSI)          <b>3.0b</b>
-UP:n            Move cursor up n rows                   (ANSI)          <b>3.0b</b>
-DOWN            Move cursor down one row                (ANSI)          <b>3.0b</b>
-DOWN:n          Move cursor down n rows                 (ANSI)          <b>3.0b</b>
-RIGHT           Move cursor right one column            (ANSI)          <b>3.0b</b>
-RIGHT:n         Move cursor right n columns             (ANSI)          <b>3.0b</b>
-LEFT            Move cursor left one column             (ANSI)          <b>3.0b</b>
-LEFT:n          Move cursor left n columns              (ANSI)          <b>3.0b</b>
-GOTOXY:x,y      Move cursor to x/y (1-based)            (ANSI)          <b>3.0b</b>
-PUSHXY          Save current cursor position            (ANSI)          <b>3.0b</b>
-POPXY           Restore saved cursor position           (ANSI)          <b>3.0b</b></pre>
-<pre><b>Miscellaneous</b></pre>
-<pre>There a few special Synchronet specific @-Codes which require a parameter
-(following the colon and before the terminating @ symbol):</pre>
-<pre><b>Code            Description                                             
-</b>---------------------------------------------------------------------------
-HANGUP          Immediately disconnect user			
-SETSTR:STR      Sets the current Baja command string to STR
-EXEC:MODNAME    Execute a loadable (Baja) module, EXEC\MODNAME.BIN
-TYPE:FILENAME   Display a specific filename (must specify path and file ext.)
-MENU:FILENAME   Display a menu file (from TEXT\MENU with automatic file ext.)
-
-Synchronet command line specifiers may be used in the FILENAME parameter to
-the TYPE: @-Code allowing symbolic replacment for specific Synchronet
-directories (%!, %z, %k, %j, etc).
-
-<b>Examples:</b>
-
-@EXEC:MYMOD@
-@TYPE:%zSYSTEM.MSG@
-@MENU:YESNO@</pre>
-<h2><a name="MessageColorCodes">[17.3] - Customization:
-Message Color Codes</a></h2>
-<pre>Synchronet supports six different Color Code formats.  When Synchronet
-encounters one of these Color Codes in a message, it changes the text following
-the Color Code to the specified color.	Support of the formats which are not
-native to Synchronet (WWIV, Celerity, Renegade, PCBoard, and Wildcat) can be
-toggled on and off from the Synchronet Configuration utility (System-&gt;Message
-Options-&gt;Extra Attribute Codes). The non-Synchronet color codes (Extra
-Attribute Codes) only affect the text that is displayed on the SAME LINE.  When
-using Synchronet color codes, the new color is retained from line to line until
-another color code is processed or the end of the text is reached.
-
-<b><font size="4">Synchronet Format</font></b>
-
-The native Synchronet Color Code format (preferred) consists of a Control-A
-followed by a singe character.	The following is a list of valid Control-A
-Color Codes:
-
-<b>	Foreground	Background
-</b>	----------	----------
-Black       K		    0
-Red         R		    1
-Green       G		    2
-Yellow      Y		    3
-Blue        B		    4
-Magenta     M		    5
-Cyan        C		    6
-White       W		    7
-
-	<b>Attribute	Description</b>
-	---------	-----------
-High        H		High Intensity
-Blink       I		Blinking
-Normal      N		No Special Attributes (Normal)
-Pause       P		Insert a Pause Prompt into message
-Pause Reset Q		Reset the line counter for the auto screen-pause
-Delay       ,		Insert a Tenth Second Delay into message
-Delay       ;		Insert a Half Second Delay into message
-Delay       .		Insert a Two Second Delay into message
-Date        D		Display the system date
-Time        T		Display the system time
-Cls         L		Insert a Form Feed (Ctrl-L, Clear Screen) into message
-Clreol      &gt;		Clear to End of Line (leave cursor in current position)
-Bckspc      &lt;		Non-destructive backspace (Ctrl-H)
-CR          [		Carriage return (Ctrl-M)
-LF          ]		Line feed (Ctrl-J)
-Ctrl-A      A		Send an actual Ctrl-A character
-Sync        S		Synchronize output with remote system
-EOF         Z		End of displayable text in this file
-
-Normal      -		Same as 'N' but only sends ANSI codes if the
-         (minus)        High Intensity, Blinking, or Background attribute is
-			set.
-
-Normal      _		Same as 'N' but only sends ANSI codes if the
-       (underscore)     Blinking or Background attribute is set.
-
-Synchronet also supports Special Control-A codes used to hide text from users
-not meeting certain criteria (i.e.: Security Level or Flags from Flag Set #1).
-The following is a list of Special Control-A codes, and a brief description
-of each code's usage:
-
-<b>Code		Description</b>
--------------------------------------------------------------------------------
-^A thru ^Z	Only display the following text to users with the corresponding
-		flag A through Z turned on (from Flag Set #1).
-
- !		Toggle the text display off/on for users of less than level 10.
- @		&quot;                                                         &quot; 20.
- #		&quot;                                                         &quot; 30.
- $		&quot;                                                         &quot; 40.
- %		&quot;                                                         &quot; 50.
- ^		&quot;                                                         &quot; 60.
- &amp;		&quot;                                                         &quot; 70.
- *		&quot;                                                         &quot; 80.
- (		&quot;                                                         &quot; 90.
- )		Restore the displaying of text to ALL users.
-
- &quot;&lt;filename&gt;    Display contents of &lt;filename&gt; (from your TEXT directory) 
-
-High Bit	(greater than ASCII 127) Used for cursor right positioning.
-
-<b><font size="4">WWIV Format</font></b>
-
-Synchronet also supports Color Codes which are native to WWIV BBS software.
-These codes consist of a Control-C followed by a number (0 through 7):
-
-<b>Code		Color</b>
-----		-----
- 0		Normal
- 1		High Intensity Cyan
- 2		High Intensity Yellow
- 3		Normal Magenta
- 4		High Intensity White with Blue Background
- 5		Normal Green
- 6		High Intensity Blinking Red
- 7		High Intensity Blue
- 8		Low Intensity Blue
- 9		Low Intensity Cyan
-
-<b><font size="4">Celerity Format</font><u>
-</u></b>
-Synchronet also supports Color Codes which are native to Celerity BBS software.
-These codes consist of a pipe symbol '|' followed by a letter (case sensitive):
-
-<b>Code		Color (foreground)
-</b>----		------------------
- k		Normal Black
- b		Normal Blue
- g		Normal Green
- c		Normal Cyan
- r		Normal Red
- m		Normal Magenta
- y		Brown
- w		Normal White
- d		High Intensity Black
- B		High Intensity Blue
- G		High Intensity Green
- C		High Intensity Cyan
- R		High Intensity Red
- M		High Intensity Magenta
- Y		Yellow
- W		High Intensity White
- S	      * Swap foreground and background
-
-Example: &quot;|b|S|W&quot; would set the current color to high intensity white on a
-	 blue background.
-
-Note:	 Due to conflicting escape sequences (namely, the pipe character),
-	 Celerity color codes are not supported when using RIP terminal mode.
-
-<font size="4"><b>Renegade Format</b></font>
-
-Synchronet also supports Color Codes which are native to Renegade BBS software.
-These codes consist of a pipe symbol '|' followed by a number (0-23):
-
-<b>Code		Color</b>
-----		-----
- 0		Normal Black
- 1		Normal Blue
- 2		Normal Green
- 3		Normal Cyan
- 4		Normal Red
- 5		Normal Magenta
- 6		Brown
- 7		Normal White
- 8		High Intensity Black
- 9		High Intensity Blue
- 10		High Intensity Green
- 11		High Intensity Cyan
- 12		High Intensity Red
- 13		High Intensity Magenta
- 14		Yellow
- 15		High Intensity White
- 16		Background Black
- 17		Background Blue
- 18		Background Green
- 19		Background Cyan
- 20		Background Red
- 21		Background Magenta
- 22		Background Brown
- 23		Background White
-
-Example: &quot;|15|17&quot; would set the current color to high intensity white on a
-	 blue background.
-
-Note:	 Due to conflicting escape sequences (namely, the pipe character),
-	 Renegade color codes are not supported when using RIP terminal mode.
-
-<font size="4"><b>PCBoard/Wildcat Format</b>
-</font>
-Two of the Color Code formats which Synchronet supports (PCBoard and Wildcat)
-use similar, yet cryptic, methods of displaying colors.  The PCBoard method
-uses the format &quot;@X&lt;Background&gt;&lt;Foreground&gt;&quot;, and Wildcat uses the format
-&quot;@&lt;Background&gt;&lt;Foreground&gt;@&quot;.  The following is a list of the Background and
-Foreground choices available:
-
-<b>&lt;Background&gt;    Color   Attribute       &lt;Foreground&gt;    Color   Attribute</b>
-------------    -----   ---------       ------------    -----   ---------
-      0         Black   Normal                0         Black   Normal
-      1         Blue      &quot;                   1         Blue      &quot;
-      2         Green     &quot;                   2         Green     &quot;
-      3         Cyan      &quot;                   3         Cyan      &quot;
-      4         Red       &quot;                   4         Red       &quot;
-      5         Magenta   &quot;                   5         Magenta   &quot;
-      6         Brown     &quot;                   6         Brown     &quot;
-      7         White     &quot;                   7         White     &quot;
-      8         Black   Blinks Foreground     8         Black   High Intensity
-      9         Blue      &quot;                   9         Blue      &quot;
-      A         Green     &quot;                   A         Green     &quot;
-      B         Cyan      &quot;                   B         Cyan      &quot;
-      C         Red       &quot;                   C         Red       &quot;
-      D         Magenta   &quot;                   D         Magenta   &quot;
-      E         Brown     &quot;                   E         Yellow    &quot;
-      F         White     &quot;                   F         White     &quot;
-
-Example: &quot;@1F@&quot; in Wildcat format and &quot;@X1F&quot; in PCBoard format would set the
-	 current color to high intensity white on a blue background.</pre>
-<h2><a name="SIFQuestionnaireFile">[17.4] - SIF Questionnaire File</a></h2>
-<pre>An automatic new user SIF questionnaire can be specified in SCFG-&gt;System.
-If a newuser SIF is specified, all users who logon and don't have a copy of
-the answered questionnaire data in their user file will be given the
-questionnaire upon logon. The sysop can view the answered questionnaire from
-User Edit with the '#' command. For convenience, the sysop can create a second
-(abbreviated) SIF file for his own use in viewing user's answers. The two SIF
-files (input and output) should be identical with the exception of what is
-in the 'text' portion.
-
-format:
-
-<b>&lt;STX&gt;text&lt;ETX&gt;mode[mod][l][r][x][.n][&quot;str&quot;]</b>
-
-element descriptions:
-
-<b>STX </b>    is the ASCII code for start of text (ASCII 2 / Ctrl-B)
-<b>ETX</b>     is the ASCII code for end of text   (ASCII 3 / Ctrl-C)
-
-<b>text</b>    is any number of ASCII characters - Synchronet Ctrl-A codes supported
-
-<b>mode</b>    text input mode desired for this field. Possible mode values are:
-                c       single character
-                s       string of characters
-
-<b>mod</b>     optional mode modifier. Possible mode modifiers are:
-                n       numeric characters only
-                u       input converted to uppercase
-                f       forced word capitalization ('s' mode only)
-
-<b>l</b>       input line will be displayed (inverse bar of maximum input length)
-
-<b>r</b>       a carriage return / line feed pair will be appended to this field
-        in the data buffer. Only use this field if you want the data buffer
-        or file to be more readable. All data is on one line otherwise.
-
-<b>x</b>       maximum string length allowed (required for non-template 's' mode)
-
-<b>n</b>       minimum string length allowed (only applicable with 's' input mode)
-
-
-<b>str</b>  1: in 's' modes, a template string that defines what will be displayed
-        at the prompt and what type of characters the user can input. All
-        characters other than 'N', 'A' or '!' are printed at the prompt.
-        Occurances of 'N', 'A' or '!' define which type of character the user
-        can input for each character position. 'N' allows the user only to
-        enter a numeric character, 'A' allows only alphabetic, and '!' allows
-        any character. Popular templates are &quot;NNN-NNN-NNNN&quot; for phone number
-        input or &quot;NN/NN/NN&quot; for date input.
-
-     2: in 'c' modes, a string that defines which characters the user will
-        be allowed to input (not case sensitive), usually used for multiple
-        choice answers. Most common allowed characters are &quot;ABCD...&quot; or
-        &quot;1234...&quot;. If this string is specified in 'c' input mode, 'u' and 'n'
-        have no effect and input will be converted to uppercase automatically.
-                                   
-<b>Example 1:</b></pre>
-<table border="0" cellpadding="3" cellspacing="3" width="70%" bgcolor="#CCCCCC">
-  <tr>
-    <td width="100%">
-      <pre>&lt;BOT&gt;
-Enter string: &lt;EOT&gt;sulr8.3</pre>
-    </td>
-  </tr>
-</table>
-<pre>Prints the prompt, &quot;Enter string: &quot;, then a line of 8 blue spaces
-(an input bar, if you like), would convert all of user's input to uppercase,
-allow the user to input a maximum of eight characters, a minimum of three and
-append a CRLF onto the end of the data field.
-
-<b>Example 2:</b></pre>
-<table border="0" cellpadding="3" cellspacing="3" width="70%" bgcolor="#CCCCCC">
-  <tr>
-    <td width="100%">
-      <pre>&lt;BOT&gt;
-A&gt; First Answer
-B&gt; Second Answer
-C&gt; Third Answer</pre>
-      <pre>Which: &lt;EOT&gt;c&quot;ABC&quot;</pre>
-    </td>
-  </tr>
-</table>
-<pre>Prints &quot;A&gt; First Answer&quot; &quot;B&gt; Second Answer&quot; etc... then allows the
-user to input one character, either A,B, or C. No other characters will be
-accepted as input.
-
-<b>Example 3:</b></pre>
-<table border="0" cellpadding="3" cellspacing="3" width="70%" bgcolor="#CCCCCC">
-  <tr>
-    <td width="100%">
-      <pre>&lt;BOT&gt;
-Enter phone number: &lt;EOT&gt;s&quot;NNN-NNN-NNNN&quot;</pre>
-    </td>
-  </tr>
-</table>
-<pre>Prints &quot;Enter phone number: &quot;, then allows the user to input only
-numbers in the 'N' character positions, and automatically skips over the
-'-' characters.
-
-
-See <b>EXAMPLE.SIF</b> in the <b>SBBS\TEXT</b> directory for more information.</pre>
-<h2><a name="GURU.DAT">[17.5] - GURU.DAT</a></h2>
-<pre>The Synchronet Guru is an artificial intelligence engine that users can chat
-with for entertainment or educational purposes. You may wish to fool the users
-into believing the guru is a live human, or tell them up-front that it's just
-a program.
-
-You may have up to 500 different guru available to chat with on your BBS,
-each with its own &quot;personality&quot; and &quot;intelligence&quot;. You add additional gurus
-in SCFG-&gt;Chat Options-&gt;Artificial Gurus. You can specify access requirements
-(see the ARS chapter for details) for each guru, allowing you to have specific
-gurus for different groups of users or allow users to choose which guru they
-want to chat with.
-
-The gurus of your BBS can be &quot;taught&quot; to respond to keywords and phrasing that
-your users use when chatting with him. The default guru's &quot;brain&quot; is a file
-named GURU.DAT that is kept in the CTRL directory. It is a special data file
-that contains logic expressions and lists of responses. Before you edit the
-GURU.DAT file, be sure you understand exactly what you are doing, as the neuro
-system that interprets the GURU.DAT file does not handle syntax errors very
-well. The basic structure of the GURU.DAT is as follows:
-
-<b>(expression)
-response
-response
-(expression)
-response
-response
-()
-response
-response
-response</b>
-
-You may include as many Expression/Response sets as you like, as long as 
-the file size does not exceed 64k or the amount of available memory.
-Each expression contains one or more string of characters that The Guru may
-respond to and logic operators. The string must be in all uppercase and may
-not contain the following characters: ~^|&amp;()
-
-If the expression just contains one string (e.g. (HELLO)) and that string is
-used in the users input, The Guru will pick a random response from the list
-that follows that expression. The Guru will only use one response for each
-line input by the user, so as soon as a &quot;true&quot; expression is encountered, a
-response is made and the evaluation of the user's line is complete.
-
-All expressions are evaluated from the top of the file down, so if a true
-expression is encountered toward the top of the file, all of the remaining
-expressions are ignored until the next evaluation. Notice that the last set of
-responses is preceded by a pair of empty parenthesis. This is an &quot;always true&quot;
-expression and should always be the last expression in the file. Omitting this
-fall-through expression is a syntax error. If all the previous expressions are
-evaluated as false, then a response will be picked from the set following the
-fall-through expression.
-
-The simplest form of an expression is just a string of uppercase letters (with
-or without spaces). If the string is followed by a tilde '~', the string will
-be evaluated as true even if the string is embedded in another string (e.g. if
-the user types &quot;XhelloX&quot;, an expression of (HELLO) would evaluate as false, but
-an expression of (HELLO~) would evaluate as true).
-
-You can also specify that the string must be the beginning of the users input
-line by following the string with a caret '^'symbol (e.g. if the user types
-&quot;I said, Hello!&quot;, an expression of (HELLO) would evaluate to true, but an
-expression of (HELLO^) would be false).
-
-An expression can contain multiple strings connected with logic symbols. The
-valid logic symbols are &amp; (and) and | (or) (e.g. if you have the expression
-(HELLO&amp;GURU) the user must type both &quot;hello&quot; and &quot;guru&quot; in the input line in
-order for the expression to be true. If you have the expression (HELLO|HI), it
-will be evaluated as true if the users includes either &quot;hello&quot; or &quot;hi&quot; in his
-input string). Nested evaluations are supported (e.g. the expression,
-(GURU&amp;(HELLO|HI)) will evaluate as true if the user inputs either &quot;guru&quot; and
-&quot;hello&quot;, or &quot;guru&quot; and &quot;hi&quot;).
-
-Expressions may also contain AR strings within square brackets ([ and ]). The
-expression (HELLO&amp;GURU&amp;[LEVEL 20]) would evaluate as TRUE only if the user
-typed the words &quot;HELLO&quot; and &quot;GURU&quot; and had a level of 20 or higher. See the
-ARS chapter for details on the AR string syntax and possible keywords.
-
-<b>RESPONSES:</b>
-
-Each expression can be followed by up to 100 responses and each response can
-be up to 512 bytes long. Responses can not contain the characters ( or ) and
-may only span several lines if the last character of each continued line is a
-back-slash '\'. Responses are picked at random from the group below the first
-expression that is evaluated as true. The more responses you have to each
-expression, the less likely The Guru is to repeat himself. The Guru can also
-respond with information about the current user or perform an action. To
-initiate these special responses, you must precede a valid response variable
-with a back-quote (`) character. The valid response variables and their
-definitions are as follows:
-
-A       User's alias (name, if Aliases not allowed)
-B       User's birth date
-C       User's computer type
-D       User's download bytes
-G       Guru's name
-H       Hang up on the user (immediately)
-I       System's QWK ID
-J       Current day of the month
-L       User's security level
-M       Current month
-N       User's note (location, if Aliases not allowed)
-O       Sysop's name
-P       User's phone number
-Q       Quit chat
-R       User's real name (address, if Aliases not allowed)
-S       System name
-T       Current time
-U       User's upload bytes
-W       Current day of the week
-Y       Current year
-Z       User's zip/postal code
-$       User's credits
-#       User's age
-!       Toggle The Guru's typing mistakes Off/On
-_       Pause in response
-
-Three of the above response variables only have effect when the user is
-chatting with The Guru in the &quot;Local&quot; mode and not from multinode chat. These
-are the 'Q'uit chat (which is the only means of the exiting without hitting
-Alt-G locally), '!' Toggle typing mistakes, and '_' pause in response.
-
-e.g. The expression/response pair:
-
-<b>(HELLO)
-Hello there, `a...</b>
-
-would display &quot;Hello there, Joey...&quot; if Joey were to say &quot;hello&quot; to The Guru.
-
-See <b>CTRL\GURU.DAT</b> for more detailed examples of GURU.DAT programming.</pre>
-<p><a href="#top"><b>Back to Top</b></a></p>
-
-<!--webbot bot="Include" U-Include="_borders/bottom.htm" TAG="BODY" startspan -->
-
-<hr>
-<p><b><a href="http://www.synchro.net/copyright.html">Copyright</a> � 2000 by </b> <a href="http://www.synchro.net/author.htm"><b>Rob Swindell</b><br>
-</a>
-
-<a href="http://www.synchro.net"><font size="2"><br>
-Synchronet BBS Software</font></a>  <font size="2">  (Synchronet)
-Version 3 is comprised of several documentation,<br>
-library, executable, and <a href="http://www.synchro.net/source.html">source code</a> 
-files, all of which are covered by the<a href="http://www.fsf.org/copyleft/gpl.html">
-<br>
-GNU General Public License</a>  with the exception of the following portions
-covered by<br>
-the <a href="http://www.fsf.org/copyleft/lesser.html">GNU Lesser General Public License</a>:
-SMBLIB and XSDK.<br>
-<br>
-Synchronet Version 2 (for DOS and OS/2) and its source code was released to the<a href="http://www.fsf.org/philosophy/categories.html#PublicDomainSoftware">
-<br>
-Public Domain</a>  by <a href="ftp://vert.synchro.net/main/sbbs/manifest.txt">Digital Dynamics</a> 
-in 1997 and remains Public Domain software today.<br>
-Synchronet Version 3 is not Public Domain software.</font></p>
-<p align="left"><font size="2"><a href="http://www.synchro.net/author.html">Rob Swindell<br>
-</a>PO Box 501<br>Yorba Linda, CA 92885<a href="http://www.synchro.net"><br>
-http://www.synchro.net</a>
-
-</font></p>
-<p align="left"><font size="2">For the complete Copyright Information please
-read the <a href="http://www.synchro.net/copyright.html">Copyright Documentation</a>
-.</font></p>
-
-<!--webbot bot="Include" endspan i-checksum="55766" -->
-
-</body>
-
-</html>
diff --git a/docs/default.htm b/docs/default.htm
deleted file mode 100644
index 8a46a3538b..0000000000
--- a/docs/default.htm
+++ /dev/null
@@ -1,8 +0,0 @@
-<!-- This is for http servers that default to default.htm -->
-<html>
-
-<head>
-<meta http-equiv="refresh" content="0; URL=index.htm">
-</head>
-
-</html>
\ No newline at end of file
diff --git a/docs/exebbs.bat b/docs/exebbs.bat
deleted file mode 100755
index a3576af977..0000000000
--- a/docs/exebbs.bat
+++ /dev/null
@@ -1,30 +0,0 @@
-@echo off
-rem ***************************************************************************
-rem EXEBBS.BAT for use with FrontDoor and Synchronet BBS v1c
-rem if using with InterMail, change all "FD"s to "IM"s
-rem ***************************************************************************
-
-rem ***************************************************************************
-rem Drive where this Synchronet node is installed
-rem ***************************************************************************
-c:
-rem ***************************************************************************
-rem Directory for this node
-rem ***************************************************************************
-cd \sbbs\node1
-rem ***************************************************************************
-rem You probably don't want to mess with this line
-rem ***************************************************************************
-call sbbs qc%1 e%3
-rem ***************************************************************************
-rem Drive where FrontDoor is installed
-rem ***************************************************************************
-c:
-rem ***************************************************************************
-rem Change directory to FrontDoor system directory
-rem ***************************************************************************
-cd \fd
-rem ***************************************************************************
-rem Call MAILER.BAT so we go full-circle
-rem ***************************************************************************
-mailer
diff --git a/docs/external_programs.html b/docs/external_programs.html
deleted file mode 100644
index 2032c8554c..0000000000
--- a/docs/external_programs.html
+++ /dev/null
@@ -1,568 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<title>External Programs</title>
-</head>
-
-<body>
-
-<!--webbot bot="Include" U-Include="_borders/top.htm" TAG="BODY" startspan -->
-
-<a href="http://www.synchro.net"><img border="0" src="images/synclogo_fancyred.gif" alt="Synchronet BBS - Multinode Bulletin Board Software" width="626" height="86"></a>
-
-<hr>
-
-<!--webbot bot="Include" endspan i-checksum="23126" -->
-
-<p><a name="top"></a><a href="sysop.html#TOC">Back to Table of Contents</a></p>
-<h2><a name="ExternalProgramConfiguration">[12.0] - External Program
-Configuration</a>
-
-</h2>
-<pre>Selecting the External Programs option from the SCFG will bring you to the
-following sub-menu, an explanation of the options shown here follow.</pre>
-<h2><img border="0" src="images/scfg_xtrn_section.gif" width="572" height="331"><br>
-<br>
-<a name="FixedEvents">[12.1] - Fixed Events</a>
-
-</h2>
-<pre><img border="0" src="images/scfg_xtrn_fixed.gif" width="572" height="331">
-
-<b>Logon Event:</b>
-        This is the command line for a program that will execute during the
-        logon sequence of every user. The program cannot have user interaction.
-        The program will be executed after the LOGON message is displayed and
-        before the logon user list is displayed. If you wish to place a program
-        in the logon sequence of users that includes interaction or requires
-        account information, you probably want to use an online external
-	program configured to run as a logon event.
-
-<b>Logoff Event:
-</b>        This is the command line for a program that will execute during the
-        logoff sequence of every user. This program cannot have user
-        interaction because it is executed after carrier is dropped. If you
-        wish to have a program execute before carrier is dropped, you probably
-        want to use an online external program configured to run as a logoff
-	event.
-
-<b>Daily Event:
-</b>        This is the command line for a program that will run after the first
-        user that logs on after midnight, logs off (regardless of what node).</pre>
-<h2><a name="TimedEvents">[12.2] - Timed Events</a>
-
-</h2>
-<pre>Selecting Timed Events from the External Programs menu will give you a list of
-currently configured timed events.  Following is an example of a timed event
-called MAIN, and the options available for timed events.</pre>
-<pre><img border="0" src="images/scfg_xtrn_timed.gif" width="572" height="331"></pre>
-<pre><b>Internal Code:
-</b>	This is an internal code for SBBS to distinguish this event from
-        the others on the system. This must be a unique name of up to 8 valid
-        DOS filename characters.
-
-<b>Start-up Directory:
-</b>	This is the directory where the event execution should take place.
-	Synchronet will change to this directory before executing the command
-	line for this event.
-
-<b>Command Line:
-</b>	This is the command line for a program that will run on the specified
-	times and days.
-
-<b>Execution Node:
-</b>	This is the node that will execute the event.
-
-<b>Execution Days:
-</b>	These are the day(s) when this timed event will be executed.
-
-<b>Execution Time:
-</b>        This is the time (in 24hr format) for the above mentioned program
-        to execute.
-
-<b>Requires Exclusive Execution:
-</b>	You may set this event to run exclusively (all other nodes inactive
-	or taken offline) by selecting this option.
-
-<b>Force Users Off-line For Event:
-</b>	Setting this to Yes will cause the BBS to force users offline for this
-	event.</pre>
-<h2><a name="GlobalSwapList">[12.3] - Global Swap List</a>
-
- <b><i><font color="#FF0000">(v2 for DOS Only)</font></i></b>
-
-</h2>
-<pre><img border="0" src="images/scfg_xtrn_swaplist.gif" width="572" height="331">
-
-This is a list of programs which, when run, will cause Synchronet to swap out
-of memory.  This is useful for large executables, or programs which have the
-possibility of Utilitizing a large amount of memory.  Shown is an example of
-what might be in your swap list. Notice that it is not necessary to specify
-an extension for the programs unless an extension is specified on the command
-line to be executed. If a file extension is specified (EXE, COM, or BAT)
-the extension must be specified on the command line for the program to be found
-in the swap list.</pre>
-<h2><a name="Native32bitProgramList">[12.4] - Native (32-bit) Program List</a>
-
-</h2>
-<pre><img border="0" src="images/scfg_xtrn_winos2list.gif" width="572" height="331"><u>
-</u>
-When running a node with Synchronet for OS/2 or Win32, all external programs
-(doors, editors, file viewers, etc) will be assumed DOS programs and executed
-inside a virtual DOS machine (VDM) automatically unless the program's name is
-included in this list. Only CMD.EXE (OS/2 command interpreter) should be
-included with an extension (e.g. .EXE) unless you actually configure your
-external program command lines in SCFG with extensions (note ZIP and UNZIP do
-not have specified extensions). All native Win32 and OS/2 programs that you 
-wish to execute from the BBS must be added to this list.</pre>
-<h2><a name="ExternalEditors">[12.5] - External Editors</a>
-
-</h2>
-<pre>This selection will bring up a list of external editors that are available as
-alternatives to the Synchronet built-in editor. Editors can be added and
-deleted with the INS and DEL keys. Selecting an editor allows you to view and
-edit its settings. The available settings are (example given is for SyncEdit):</pre>
-<pre><img border="0" src="images/scfg_xtrn_syncedit.gif" width="572" height="331"></pre>
-<pre><b>Internal Code:
-</b>	This is an internal code for SBBS to distinguish this editor from
-        the others on the system. This must be a unique name of up to 8 valid
-        DOS filename characters.
-
-<b>Local Command Line:
-</b>        This is the command line to use when the user is online locally.
-
-<b>Remote Command Line:
-</b>        This is the command line to use when the user is online remotely.
-
-<b>Access Requirements:
-</b>	These are the requirements that a user must meet to be able to use
-	this external editor.
-
-<b>Intercept I/O Interrupts:
-</b>	If the editor relies on Synchronet for intercepting I/O interrupts,
-	this option should be set to Yes.  When set to Yes, you will be able
-	to specify whether or not the editor uses WWIV color codes.
-
-<b>Quoted Text:
-</b>	If you want all the message text to be automatically entered into the
-	message edit/quote file (INPUT.MSG or MSGTMP), set this option to
-	'All'.
-
-	If you want the user to be prompted for which lines to quote before
-	running the editor, set this option to 'Prompt User'.
-
-	If you want none of the lines to be automatically quoted, set this
-	option to 'None'. This option is mainly for use with editors that
-	support the QUOTES.TXT drop file (like SyncEdit v2.x).
-
-<b>QuickBBS Style (MSGTMP):
-</b>	If this editor was designed to run on QuickBBS, Remote Access, or
-	SuperBBS (uses a MSGTMP file for editing), set this option to Yes.
-	This option will also create a MSGINF file automatically as well.
-
-<b>Expand Line Feeds to CRLF:
-</b>	If this editor stores new lines as a single line feed character, set
-	this option to Yes.
-
-<b>BBS Drop File Type:
-</b>	If this editor requires a BBS drop file (DOOR.SYS, DORINFO#.DEF, etc)
-	use this option to select the drop file format.</pre>
-<h2><a name="OnlinePrograms">[12.6] - Online Programs</a>
-
-</h2>
-<pre>This selection will generate a list of configured external program sections.
-You can add and remove external program sections from this list with the INS
-and DEL keys. To edit an external program section or the external programs
-within that section, select it with the arrow keys and hit ENTER.
-
-<a name="DropFiles">For</a> each external program section, you can set the Name, Internal Code,
-and Access Requirements. Selecting &quot;Available External Programs&quot; will give
-a list of external programs contained in this external program section.
-Synchronet has been designed to eliminate the need for batch files and
-drop file conversion programs to run external programs (doors) on your BBS.
-Synchronet supports many different drop file types (often referred to as
-drop files) listed below.</pre>
-<h3><a name="SupportedDropfileTypes:">[12.7] - Supported Dropfile Types:</a>
-
-</h3>
-<pre>Software		Write File(s)			Read File(s)
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-DOOR32 <b><font color="#FF0000">(v3+ Only)</font></b>       DOOR32.SYS 
-GAP			DOOR.SYS			DOOR.SYS
-WWIV			CHAIN.TXT
-PCBoard 14.x		PCBOARD.SYS and USERS.SYS	USERS.SYS
-RBBS/QuickBBS		DORINFO#.DEF and EXITINFO.BBS	EXITINFO.BBS
-Wildcat! 2.x		CALLINFO.BBS
-SpitFire		SFDOORS.DAT
-TriBBS			TRIBBS.SYS
-MegaMail		UTIDOOR.TXT
-Solar Realms		DOORFILE.SR
-Synchronet		XTRN.DAT			MODUSER.DAT</pre>
-<h2><a name="Call-backVerifiers">[12.8] - Call-back Verifiers</a>
-
-</h2>
-<pre>Call-back verification and user upgrade programs for other BBS packages may be
-used, as long as the program supports the DOOR.SYS, EXITINFO.BBS, USERS.SYS,
-or MODUSER.DAT file format. In general, Call-back verifiers written for
-PCBoard, GAP, QuickBBS, or Synchronet will work. To allow a program to modify
-the user data, you must set the option &quot;Modify User Data&quot; to &quot;Yes&quot;. The
-following user data items may be updated with the following formats:
-
-DOOR.SYS:	Security level, Flag Set #1, Expiration Date, Minutes,
-		Total Files/Bytes Downloaded, and Credits
-EXITINFO.BBS:	Security level and Flag Set #1
-USERS.SYS:	Security level and Expiration Date
-MODUSER.DAT:	Security level, Flag Set #1-#4, Exemptions, Restrictions,
-		Expiration Date, Credits, and Minutes</pre>
-<h2><a name="InstallingNewExternalProgram">[12.9] - Installing a
-New External Program</a>
-
-</h2>
-<pre>Install your new external program into a sub-directory off your XTRN directory.
-
-Example: C:\SBBS\XTRN\TRADEWAR
-
-If your program asks you to provide the directory where the BBS software is
-installed or where the drop file will be located, enter the directory where
-you have installed the program (C:\SBBS\XTRN\TRADEWAR). Note: this is usually
-only required for programs that do NOT support multiple nodes.
-
-The full path and file name of the drop file can be specified on the command
-line by using the %f command line specifier in SCFG.</pre>
-<h2><a name="ConfiguringNewExternalProgram">[12.10] - Configuring
-a New External Program</a>
-
-</h2>
-<pre>Run SCFG from any NODE directory (or hit 'C' at the Waiting For Call screen).
-Select &quot;External Programs&quot; and hit enter. Hit END and ENTER for the External
-Program Sections menu and select an External Program Section to add this
-new program to. Select &quot;Available External Programs&quot; and hit the Insert key.
-Enter a description for your new external program.
-
-Now your new external program appears in the list. Hit ENTER to edit the
-configuration for this program. Synchronet BBS List is given as an example.</pre>
-<pre><img border="0" src="images/scfg_xtrn_sbl.gif" width="572" height="331">
-
-<b>Name:</b>
-	This is the name of the external program that will be shown to users.
-
-<b>Start-up Directory:
-</b>	The start-up directory will be the current directory when the program
-	is started. Move the lightbar down to &quot;Start-up Directory&quot; and hit
-	ENTER. Enter the path to the directory where you've installed the
-	program.
-
-<b>Command Line:
-</b>	This is the command required to execute your external program. If the
-	path and filename for the BBS drop file is required on the command
-	line, use %f to represent the path and filename. See Appendix A for
-	a full list of available command line specifiers.
-
-	You can launch a Baja module in place of a DOS executable by prepending
-	an asterisk (*) to the name of the Baja module (e.g. &quot;*MYMOD&quot;). The
-	module .BIN file must be located in your EXEC directory.
-
-	Some programs, when set to SWAP, require &quot;.\&quot; to be prepended to the
-	command line (e.g. &quot;.\MYDOOR&quot;) to function properly.
-
-<b>Clean-up Command Line:
-</b>	If your external program requires a clean-up command line (usually only
-	multi-user programs), select &quot;Clean-up Command Line&quot; and enter the
-	required command line for your program. Note: Most programs do NOT
-	require this option.
-
-<b>Cost in Credits:
-</b>	If you wish your users to be charged credits when running this program,
-	you should enter the amount to charge the users here. Users with the
-	'X' exemption will not be charged.
-
-<b>Extra Minutes:
-</b>	This option will allow you to give extra time to users for use in the
-	external program they are entering.  For example, with this option set
-	to 10, a user having 15 minutes left on the BBS will end up having
-	25 minutes in the external program they enter.	This is especially
-	useful in conjunction with the 'Suspended (Free) Time' option.
-
-<b>Suspended (Free) Time:
-</b>	Setting this option to &quot;Yes&quot; will cause a user's time left online to
-	suspend (not countdown) when they enter the external program.  The
-	user's time allowed in the external program, however, will be what they
-	had left on the BBS.  To give them more time in the external program,
-	use the above 'Extra Minutes' option.
-
-<b>Access Requirements:
-</b>	If you wish to limit which users have access to (can see) this program,
-	use this option to set those requirements.
-
-<b>Execution Requirements:
-</b>	If you wish to have some users see but not be able to execute this
-	program, use this option to determine what requirements must be met to
-	run the program.
-
-<b>Multi-user:
-</b>	If this program supports multiple simultaneous users, set this option
-	to &quot;Yes&quot;.
-
-<b>Intercept I/O Interrupts:
-</b>	If this program does NOT have it's own modem communications I/O and
-	does NOT use a FOSSIL driver, select &quot;Intercept I/O Interrupts&quot; and set
-	it to &quot;Yes&quot;. Note: Most programs require this option be set to &quot;No&quot;.
-	Programs written specifically for WWIV or Synchronet BBS software,
-	should usually have this option set to &quot;Yes&quot;. Consult the documentation
-	for the program if you are unsure. If you do set this option to &quot;Yes&quot;,
-	and the program was not written specifically for Synchronet, you'll
-	need to place the following string at the BEGINNING of your command
-	line: &quot;%!dcdwatch %&amp;&quot;. You will also be able to select whether or not
-	the program uses WWIV color codes when setting this option to Yes.
-
-	Without the use of DCDWATCH, the program will not exit if a user drops
-	carrier (hangs up) while using the program (unless specifically written
-	for Synchronet). Some programs time-out eventually, and exit back to
-	the BBS, but not all.
-
-<b>Swap BBS out of Memory:</b>
-	If this program requires a large amount of free memory, set this
-	option to 'Yes' and Synchronet will swap to XMS, EMS, Extended
-	Memory or Disk (see &quot;Node Toggle Options&quot; for Swap Type selection) to
-	make room for this program to execute. Setting this option to 'Yes'
-	has this same effect as adding this program to the &quot;Global Swap List&quot;,
-	but is available as a toggle on this menu for your convenience.
-
-<b>Modify User Data:</b>
-	If this program can modify the current user's data through one of the
-	supported drop file types (see Call-back Verifiers above), set this
-	option to Yes.
-
-<b>Execute on Event:</b>
-	If you want this program to run automatically during user logon,
-	logoff, new user application, or a user's birthday, use this option.
-
-<b>BBS Drop File Type:</b>
-	If your program requires a BBS drop file (most do), use this option to
-	select the type of drop file to create.
-
-<b>Place Drop File In:</b>
-	This is the directory where the drop file will be created. In general,
-	for multi-user programs or programs that can have the path and filename
-	of the drop file included on the command line or in a config file,
-	select &quot;Node Directory&quot;. For single user programs that require the drop
-	file to be in the current directory, select &quot;Start-up Directory&quot;.
-
-<b>Time Options...:</b>
-	Selecting this option will bring you to a sub-menu similar to the
-	following:</pre>
-<blockquote>
-  <blockquote>
-    <pre><img border="0" src="images/scfg_xtrn_timeopt.gif" width="572" height="331"></pre>
-  </blockquote>
-</blockquote>
-<pre><b>	Extra Time:
-</b>		This option allows you to give users an extra amount of time
-		(in minutes) which can be used only within this online program.
-
-<b>	Maximum Time:
-</b>		This option allows you to set the maximum amount of time a user
-		should be able to spend in this online program (in minutes) PER
-		execution (not per day or per call).
-
-<b>	Suspended (Free) Time:
-</b>		When this option is set to 'Yes', a users' time is suspended
-		while they are within the online program.  That is, if they
-		enter the door with 60 minutes remaining on the BBS, when
-		they get back to the BBS they will still have 60 minutes of
-		time remaining.</pre>
-<h2><a name="ExampleDoorGameSetups">[12.11] - Examples
-for some popular programs</a>
-
-</h2>
-<pre>It is advised to install all your doors off the SBBS\XTRN directory
-(e.g. C:\SBBS\XTRN\BRE) if it's not too late.  This will help keep all
-your doors in an easy to reference point.  Also, this is where the
-pre-configured doors (SBL,SMM) are installed by default.</pre>
-<pre>When configuring your Doors it is best whenever possible to place the
-dropfiles in your SBBS\NODE# directories and configure the game to
-look there for the file.  This ensures smooth Multinode usage if your
-door supports multiple users at the same time.</pre>
-<h3><a name="LORD">[12.11.1] - Legend
-of the Red Dragon (LORD)</a>
-
-</h3>
-<pre>From the LORDCFG program your configuration should look something like this:</pre>
-<pre><img border="0" src="images/lordcfg.gif" width="572" height="331"></pre>
-<pre>You will need to do this for each of your nodes.  Be sure to set the 'Path
-To Drop File' to the node directory of the node you are configuring.  The
-reason we set the 'Locked Port Speed' to 'Port Not Locked' is because you
-should be locking the speed of your FOSSIL when you load it, once that's done,
-it can't be altered.</pre>
-<pre>*** Be Sure to edit <b>START.BAT</b> and check for proper paths and filenames!</pre>
-<pre>Now go into your SCFG program and create a new external program.  It should
-look like this when it's all setup:</pre>
-<pre><img border="0" src="images/scfg_xtrn_lord.gif" width="572" height="331"></pre>
-<h3><a name="Usurper">[12.11.2] - Usurper</a></h3>
-<pre>You MUST use a fossil driver in order to use this program. Follow the Usurper
-documentation for getting the game going.  </pre>
-<pre>Next, bring up the USURPER.CFG into a text editor and edit the first few lines
-(or you can do it through the EDITOR program that comes with Usurper). It 
-should end up looking something like this:</pre>
-<table border="0" cellpadding="3" cellspacing="3" width="70%" bgcolor="#CCCCCC">
-  <tr>
-    <td width="100%">
-      <pre>Sysop Name Goes Here
-BBS Name Goes Here
-C:\SBBS\XTRN\USURPER\
-DORINFO1.DEF</pre>
-    </td>
-  </tr>
-</table>
-<pre>The important things are line 3 and line 4.  Line 3 MUST be the path to your
-Usurper directory (with a trailing backslash) and line 4 must be the type
-of drop file (I used DORINFO1.DEF like the Usurper documentation recommends).
-
-    Now you'll need to go into your SCFG program and add an external program.
-Set it up to look something like this:</pre>
-<pre><img border="0" src="images/scfg_xtrn_usurper.gif" width="572" height="331"></pre>
-<h3><a name="TradeWars2002">[12.11.3] - Trade Wars 2002</a></h3>
-<pre>From the TEDIT program your configuration should look something like this:</pre>
-<pre><img border="0" src="images/tw2002.gif" width="572" height="331"></pre>
-<pre>You will need to do this for each of your nodes.  Be sure to set the 'Path
-To Drop File' to the node directory of the node you are configuring.
-
-Now go into your SCFG program and create a new external program.  It should
-look like this when it's all setup:</pre>
-<pre><img border="0" src="images/scfg_xtrn_tw2002.gif" width="572" height="331"></pre>
-<h3><a name="BRE">[12.11.4] - Barren Realms Elite (BRE)</a></h3>
-<pre>Install and Configure BRE per the instructions in the BRE documentation.</pre>
-<pre>Now go into your SCFG program and create a new external program.  It should
-look like this when it's all setup:</pre>
-<pre><img border="0" src="images/bre.gif" width="572" height="331">
-
-BRE and the other SR / John Daily games are easy with Synchronet since
-it supports SR Games native DOORFILE.SR . Just place the DOORFILE.SR
-in BRE's directory and all is well.</pre>
-<pre>** Note: BRE is not Multiplayer and can only be used on one node at a time.
-         However, we can leave Allow Multiple Users ON in SCFG as BRE will
-         inform the player the game is in use by itself.</pre>
-<h2><a name="InternalGateways">[12.12] - Internet Gateways</a></h2>
-<pre>This allows users on your system to be connected to other TCP/Telnet services
-on the Internet through your BBS. Typically, these services would be other
-telnetable BBSs and MUDs, although really, you can gate to any single-port
-TCP service (i.e. POP3, but not FTP).</pre>
-<pre><b>TELNET_GATE &lt;&quot;str&quot; || str_var&gt; [mode]</b></pre>
-<pre>The str or str_var argument is the destination address in the format:</pre>
-<pre>	<b>&lt;addr&gt;[:port]</b></pre>
-<pre>If port is not specified, the default is 23 (telnet), or 513 (when the 
-<b>TG_RLOGIN</b> mode is used).</pre>
-<pre>Examples:</pre>
-<pre>	&quot;<i>vert.synchro.net</i>&quot;
-	&quot;<i>24.0.193.46</i>&quot;
-	&quot;<i>retromud.org:3000</i>&quot;</pre>
-<pre>The valid mode bits (multiple may be <b>|</b>'d together) are:</pre>
-<pre>	<b>TG_ECHO</b>         Turn on telnet echo
-	<b>TG_CRLF</b>         Expand sole CR to CRLF
-	<b>TG_LINEMODE</b>     Send entire lines only
-	<b>TG_NODESYNC</b>     Call Nodesync, get msgs, etc.
-	<b>TG_CTRLKEYS</b>     Interpret ^P ^U ^T, etc locally
-	<b>TG_PASSTHRU</b>     Pass-through telnet commands/responses
-	<b>TG_RLOGIN</b>       Use BSD <i>RLogin</i> protocol
-
-This function can be called from any module or shell, but will most likely be
-used from the external programs menu (even though the telnet gate isn't
-technically an external program). The following modules are included (in your
-<b>EXEC</b> directory): <b>TELGATE.BIN</b>, <b>MUDGATE.BIN</b>, <b>UNIXGATE.BIN</b>, and <b>RLOGIN.BIN</b>.
-Use them as follows:</pre>
-<pre>	To set-up an external gateway to another BBS:</pre>
-<pre>	Command line: &quot;<b>*telgate vert.synchro.net</b>&quot;</pre>
-<pre>	To set-up an external gateway to a MUD:</pre>
-<pre>	Command line: &quot;<b>*mudgate batmud.bat.org</b>&quot;</pre>
-<pre>	To set-up an external gateway to a Trade Wars Game Server (TWGS):</pre>
-<pre>	Command line: &quot;<b>*rlogin twgs.someserver.com&quot;</b></pre>
-<pre>While using the telnet gateway (and not currently in telnet &quot;Binary&quot; mode),
-users can press ctrl-] for a menu of telnet gate commands including: Disconnect,
-Toggle Echo, List Users, and Private Message.</pre>
-<h2><a name="TroubleshootingExternalPrograms">[12.13] - Troubleshooting
-External Programs</a></h2>
-<pre>   This section will explain common reasons why an external program may not be
-functioning properly and what can be done to get the program functioning
-properly.  It is impossible for Digital Dynamics to be familiar with every
-available external program, therefore if you continue to have problems with
-a program after reading this section, you should contact the company that wrote
-the external program you are working with.
-
-IMPORTANT NOTE: Some games will not work properly if you do not put a PATH on
-		the command line (see the L.O.R.D. example), others will (see
-		the Usurper example).  If your game is not working at all,
-		try using a path on the command line (e.g.: .\GAMENAME).
-
-PROBLEM : The external program works, but displays the wrong user name.
-SOLUTION: Check to see that the program is looking in the proper place for the
-	  drop file.  Usually you will need to specify the path to look for the
-	  drop file on the command line or in the program's setup program or
-	  config file(s).
-
-PROBLEM : The program works fine locally, but when people call in they cannot
-	  see anything.
-SOLUTION: If the game uses a FOSSIL driver, make sure that you have a FOSSIL
-	  driver loaded and make sure that you've locked the baud rate at the
-	  same rate that you've locked Synchronet's com ports.
-	  If the game uses it's own internal com routines (no FOSSIL required),
-	  you should be able to pass it IRQ and I/O Address information (either
-	  through configuration files, or on the command line) otherwise the
-	  game probably will not work on anything other than the standard COM1
-	  and COM2.
-NOTE	: Normally only games written for Synchronet or WWIV will ever require
-	  the 'Intercept I/O Interrupts' option to be set to YES.  If a game
-	  has it's own internal com routines or uses a FOSSIL set this option
-	  to NO.
-
-PROBLEM : The program works fine locally, but when people call in they only see
-	  garbled information.
-SOLUTION: If the game is using a FOSSIL driver, make sure the locked rate of
-	  the FOSSIL is the same as the locked rate in Synchronet.
-	  If you are running Synchronet under OS/2 and you have &quot;Intercept I/O&quot;
-	  set to &quot;Yes&quot; for this program, make sure you are using the SVDMANSI
-	  program for ANSI under OS/2.
-
-PROBLEM : The program works fine when only one user is playing, but when a
-	  second user tries to enter it doesn't function properly.
-SOLUTION: The program is probably not intended for multiple simultaneous users.
-	  Be sure to set the 'Multiple Concurrent Users' option to NO if this
-	  is the case.</pre>
-<p>   <a href="#top"><b>Back to Top</b></a></p>
-<!--webbot bot="Include" U-Include="_borders/bottom.htm" TAG="BODY" startspan -->
-
-<hr>
-<p><b><a href="http://www.synchro.net/copyright.html">Copyright</a> � 2000 by </b> <a href="http://www.synchro.net/author.htm"><b>Rob Swindell</b><br>
-</a>
-
-<a href="http://www.synchro.net"><font size="2"><br>
-Synchronet BBS Software</font></a>  <font size="2">  (Synchronet)
-Version 3 is comprised of several documentation,<br>
-library, executable, and <a href="http://www.synchro.net/source.html">source code</a> 
-files, all of which are covered by the<a href="http://www.fsf.org/copyleft/gpl.html">
-<br>
-GNU General Public License</a>  with the exception of the following portions
-covered by<br>
-the <a href="http://www.fsf.org/copyleft/lesser.html">GNU Lesser General Public License</a>:
-SMBLIB and XSDK.<br>
-<br>
-Synchronet Version 2 (for DOS and OS/2) and its source code was released to the<a href="http://www.fsf.org/philosophy/categories.html#PublicDomainSoftware">
-<br>
-Public Domain</a>  by <a href="ftp://vert.synchro.net/main/sbbs/manifest.txt">Digital Dynamics</a> 
-in 1997 and remains Public Domain software today.<br>
-Synchronet Version 3 is not Public Domain software.</font></p>
-<p align="left"><font size="2"><a href="http://www.synchro.net/author.html">Rob Swindell<br>
-</a>PO Box 501<br>Yorba Linda, CA 92885<a href="http://www.synchro.net"><br>
-http://www.synchro.net</a>
-
-</font></p>
-<p align="left"><font size="2">For the complete Copyright Information please
-read the <a href="http://www.synchro.net/copyright.html">Copyright Documentation</a>
-.</font></p>
-
-<!--webbot bot="Include" endspan i-checksum="55766" -->
-
-</body>
-
-</html>
diff --git a/docs/features.html b/docs/features.html
deleted file mode 100644
index c25bab1fc0..0000000000
--- a/docs/features.html
+++ /dev/null
@@ -1,313 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<title>Features</title>
-</head>
-
-<body>
-
-<!--webbot bot="Include" U-Include="_borders/top.htm" TAG="BODY" startspan -->
-
-<a href="http://www.synchro.net"><img border="0" src="images/synclogo_fancyred.gif" alt="Synchronet BBS - Multinode Bulletin Board Software" width="626" height="86"></a>
-
-<hr>
-
-<!--webbot bot="Include" endspan i-checksum="23126" -->
-
-<p><b><a name="top"></a><a href="sysop.html#TOC">Back to Table of Contents</a></b></p>
-
-<h2>Synchronet Features</h2>
-
-<h3>General</h3>
-
-<ul>
-  <li>Designed from the ground up as a reliable and feature rich multi-node BBS</li>
-  <li>Up to 250 simultaneous nodes with multi-node chat and external program
-    (door) support</li>
-  <li>Sysop inter-node control (remote or local):<br>
-    &nbsp;&nbsp;&nbsp; Interrupting - hang up on any node<br>
-    &nbsp;&nbsp;&nbsp; Locking - only sysops can logon a locked node until the
-    lock is removed<br>
-    &nbsp;&nbsp;&nbsp; Rerunning - re-executes BBS, reinitializing
-    configuration, etc.<br>
-    &nbsp;&nbsp;&nbsp; Downing - shutdown a node from another remote node or
-    local console</li>
-  <li>Real-time user database:<br>
-    &nbsp;&nbsp;&nbsp; Amazingly complete user edit function<br>
-    &nbsp;&nbsp;&nbsp; Remote changes to online-user data are immediately
-    effective<br>
-    &nbsp;&nbsp;&nbsp; Disk image is always current for enhanced system fault
-    tolerance<br>
-    &nbsp;&nbsp;&nbsp; Linked free-form data file for every user<br>
-    &nbsp;&nbsp;&nbsp; International address and phone number support</li>
-  <li><i><b>RIPscrip</b></i> and <i><b>WIP</b></i> graphical user interfaces and
-    mouse support!</li>
-  <li>Online, sysop configurable, chatting artificial intelligence engine<br>
-    Multiple personalities available for your users to experience</li>
-  <li>Pay BBS features:<br>
-    Time credits, user expiration dates, credits, and 900/976 billing</li>
-</ul>
-<h3>Security</h3>
-<ul>
-  <li><i><b>ARS</b></i> (<i>Access Requirement String</i>) security provides the
-    most flexible, comprehensive, and user friendly security available in the
-    BBS software industry</li>
-  <li>Post/Call ratio, connect rates, time of day, and other user data fields
-    can be elements of any <i>ARS</i> security field</li>
-  <li>Impenetrable to remote hackers</li>
-  <li>100 security levels with 104 sysop configurable flags per user</li>
-  <li>Sysop can allow or disallow users to choose their own passwords</li>
-  <li>Sysop can force periodic password changes (uniqueness is also forced)</li>
-</ul>
-<h3>Customization</h3>
-<ul>
-  <li>
-<p>Programmable Command and Menu Structure:<br>
-Includes free Baja shell/module compiler<br>
-Users can select a shell of their choice including emulations of other BBS
-packages<br>
-Several shells included with Baja source code</p>
-  </li>
-  <li><p>The most configurable BBS available today:<br>
-    Powerful object oriented menu driven configuration program<br>
-    All menus, text, and colors are sysop configurable without source code<br>
-    New User Questionnaire is available and customizable<br>
-    All standard new user questions can be disabled individually<br>
-    Over 120 <a href="http://customization.html#MessageVariables">message
-    variables</a> (@-Codes) supported</p>
-  </li>
-</ul>
-<h3>Messaging</h3>
-<ul>
-  <li><p>Hierarchical bi-level message areas with an unlimited number of
-    messages groups and an unlimited number of sub-boards within each group</p>
-  </li>
-  <li>
-<p>QWK message off-line reader and networking support built-in<br>
-Off-line file requests<br>
-Off-line new message scan configuration and pointer adjustment<br>
-Send <i>FidoNet</i> or Internet NetMail from QWK REP packet<br>
-32-bit CRC duplicate message checking<br>
-Multiple compression formats supported<br>
-File attachments optionally automatically included</p>
-  </li>
-  <li>
-<p>Inter-node message services:<br>
-Current node status - user online, action, connect rate, and more<br>
-User activity - credited downloads, mail activity, logons, and logoffs<br>
-Users can list active nodes and send private messages from any prompt<br>
-&nbsp;&nbsp;&nbsp; (even between external programs and the BBS)<br>
-Multi-channel multi-node chat with optional channel password protection<br>
-Private real-time node to node character by character chat with remote split
-screen support<br>
-Users can send telegrams, single line messages, or enter private chat from any
-prompt<br>
-User information (gender, age, location, etc) can be included in node status
-display</p>
-  </li>
-  <li><p>Extensive networking capabilities:<br>
-    Internal QWK network hub and node support with file transfer ability<br>
-    <i>FidoNet</i> EchoMail and NetMail support<br>
-    Send/Receive File Requests from within Synchronet<br>
-    UTI drivers for <i>PostLink</i> Networks (RIME, ILink, etc)<br>
-    Sub-boards can force real names<br>
-    Allow/disallow/force private posts and anonymous posts per sub-board<br>
-    Supports color codes for <i>WWIV</i>, <i>PCBoard</i>, <i>Wildcat</i>, and <i>Celerity</i><br>
-    Support for multiple networks of the same or different network technologies
-    with different addresses and tag/origin lines<br>
-    Duplicate message checking using 32-bit CRC for QWK and <i>Fido</i> Networks</p>
-  </li>
-</ul>
-<h3>File Transfers</h3>
-<ul>
-  <li>Unlimited external transfer protocols with optional DSZLOG support</li>
-  <li>Batch uploads, downloads, and bidirectional file transfers</li>
-  <li>Transfer credit system is completely configurable</li>
-  <li>File viewing, extraction, and partial downloading of archives</li>
-  <li>Content rating, multi-disk numberings, and file upload dates can
-    automatically be added to file descriptions</li>
-  <li><i><b>FILE_ID.DIZ </b></i>and <i><b>DESC.SDI</b></i> files can be
-    automatically imported into extended file descriptions</li>
-  <li>Personal user to user file transfers</li>
-  <li>Optional batch download file flagging for user convenience</li>
-  <li>Support for offline directories</li>
-  <li>Multiple sysop file removal/move/edit search criteria</li>
-  <li>Directories can be sorted by filename or date, ascending or descending</li>
-  <li>Complete CD-ROM (single and multi-disk changer) support</li>
-  <li>Optional forced upload directory can be invisible to users</li>
-  <li>Optional allowance of blind (unsolicited) batch uploads with automatic DIZ
-    importation</li>
-  <li>Download events available for adding files/comments just before download
-    (i.e. CD-ROM)</li>
-</ul>
-<h3>External Programs/Doors</h3>
-<ul>
-  <li>Unlimited number of external programs</li>
-  <li>Multi-user or single user programs</li>
-  <li>Programs that use DOS I/O (don't use COM port directly) supported</li>
-  <li>12 door file formats supported for an incredible level of compatibility
-    including:&nbsp;<b><i>&nbsp;&nbsp;&nbsp;</i></b>&nbsp;<b><i><br>
-    DOOR.SYS</i></b>, <i><b>PCBOARD.SYS</b></i>, <i><b>USERS.SYS</b></i>, <i><b>CHAIN.TXT</b></i>,
-    <b><i>DORINFO#.DEF</i></b>, <i><b>EXITINFO.BBS</b></i>, <i><b>SFDOORS.DAT</b></i>,
-    <i><b>TRIBBS.SYS</b>,</i> <b><i>CALLINFO.BBS</i></b>, <i><b>DOORFILE.SR</b></i>,
-    and <i><b>UTIDOOR.TXT</b></i></li>
-  <li>Supports native <i><b>WWIV</b></i> color code expansion</li>
-  <li>Free Software Development Kit (SDK) available for program development</li>
-  <li>Comes with multiplayer Synchronet Blackjack game (with C source code)</li>
-  <li>No batch file editing/programming necessary!</li>
-  <li>Configurable credit cost on a per program basis</li>
-  <li>Separate access requirements to see the program and execute</li>
-  <li>Multiple Timed and Fixed Events:<br>
-    &nbsp;&nbsp;&nbsp; Logon and logoff events<br>
-    &nbsp;&nbsp;&nbsp; New user events<br>
-    &nbsp;&nbsp;&nbsp; Upload events (integrity testing, adding of comments,
-    virus scan, etc.)<br>
-    &nbsp;&nbsp;&nbsp; Node and system daily events<br>
-    &nbsp;&nbsp;&nbsp; Timed events with support for forced exclusive execution</li>
-</ul>
-<h2><b><font color="#FF0000">Version 3 (for Win32) Features</font></b>
-</h2>
-<p><b>General</b>
-
-</p>
-<ul>
-  <li>All &quot;nodes&quot; run in a single multi-threaded process<br>
-    &nbsp; - Minimal resource requirements and improved performance<br>
-    &nbsp; - DOS Windows are automatically opened/closed for external DOS
-    programs/doors<br>
-    &nbsp; - It's never been easier to run a 10+ node system (with DOS door
-    support) on one computer</li>
-  <li>Professional GUI <i>Synchronet Control Panel</i> (SBBSCTRL) to monitor all
-    clients and servers simultaneously<br>
-    &nbsp; - Replaces old &quot;<i>Waiting for call</i>&quot; screen<br>
-    &nbsp; - Launch configuration and editor dialogs directly<br>
-    &nbsp; - New Sysop Availability toggle button (replaces v2.3 Scroll-Lock
-    function)</li>
-  <li>GUI User Editor</li>
-  <li>Local and Remote Node Control/Spying</li>
-  <li>Optionally plays sysop's choice of <i><b>.WAV</b></i> file on user
-    connect/disconnect</li>
-</ul>
-<h3>
-<b>Internet</b></h3>
-<ul>
-  <li>Supports Telnet logins only (no more direct-dial user support)<br>
-    &nbsp; - No third-party FOSSIL/Telnet driver (SIO/VMODEM, NetModem, COM/IP)
-    required<br>
-    &nbsp; - Full FOSSIL/DOS/WWIV/XSDK program/door support (easy setup!)<br>
-    &nbsp; - Outbound Telnet module included for external MUDs/BBSs<br>
-    &nbsp; - Automatically detects and logs client IP and hostname<br>
-    &nbsp; - Optional auto-logon via IP address (requires V exemption)</li>
-  <li>Integrated FTP server<br>
-    &nbsp; - Supports Anonymous (Guest) logins<br>
-    &nbsp; - Virtual directory structure mimics BBS filebase hierarchy<br>
-    &nbsp; - User security settings enforced<br>
-    &nbsp; - Supports long/mixed-case filenames<br>
-    &nbsp; - Dynamically generates index (description) files<br>
-    &nbsp; - Supports blind upload and sysop directories<br>
-    &nbsp; - QWK/QWKnet packet uploads and downloads<br>
-    &nbsp; - Upload description support<br>
-    &nbsp; - Transfers included in BBS and user upload/download statistics<br>
-    &nbsp; - Time/Credit system enforced<br>
-    &nbsp; - Custom login/hello/goodbye messages<br>
-    &nbsp; - Optional connect/disconnect sounds (.WAV files)<br>
-    &nbsp; - File aliases supported<br>
-    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Put links in your FTP root
-    directory to often access files<br>
-    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Link to files on your local hard
-    disk or your BBS filebase<br>
-    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Use general alias names to point
-    to often-changing versioned filenames<br>
-    &nbsp; - Complete access to local file systems for remote sysops</li>
-  <li>Integrated Mail (POP3/SMTP) server<br>
-    &nbsp; - Check BBS mailbox using standard Internet mail clients (Eudora,
-    Outlook)<br>
-    &nbsp; - SPAM Filters supported: RBL, RSS, DUL<br>
-    &nbsp; - Configurable alias list<br>
-    &nbsp; - Optionally receive mail by user number (1@yourbbs.com)<br>
-    &nbsp; - Optional inbound/outbound sounds (.WAV files)<br>
-    &nbsp; - Optional DNS/MX record lookup (no SMTP Relay Server required)</li>
-  <li>Outbound Telnet/RLogin gateway function to run external MUDs, BBSs, and
-    TWGS<br>
-    &nbsp; - Includes any-time ^] menu to see who is on the BBS, send messages,
-    etc.</li>
-  <li>IP/hostname filter/trashcan files (ip.can/host.can) for all Internet
-    servers/services</li>
-</ul>
-<h3>Online Programs</h3>
-<ul>
-  <li>16-bit DOS Door Support<br>
-    &nbsp; - Windows 95/98/ME FOSSIL/DOS Interrupt driver (sbbsexec.vxd)<br>
-    &nbsp; - Windows NT/2000 FOSSIL/DOS Interrupt driver (sbbsexec.dll)</li>
-  <li>32-bit/WinSock Door Support<br>
-    &nbsp; - Duplicate socket handle passed in <b><i>DOOR32.SYS</i></b> drop
-    file (new standard)<br>
-    &nbsp; - Duplicate socket handle passed on command line via %H specifier<br>
-    &nbsp; - Support for external programs written with 32-bit XSDK (v3+)</li>
-  <li><p>Most popular DOS doors fully supported<br>
-    &nbsp; - Users can be ;INTERrupted while running ANY external program<br>
-    &nbsp; - Non-exclusive events do not take any nodes off-line<br>
-    &nbsp; - No more hassling with baud rates and initialization strings<br>
-    &nbsp; - DCDWATCH no longer necessary to support WWIV/DOS externals</p>
-  </li>
-</ul>
-<h2>
-<b><font color="#FF0000">Version 2 (for DOS) Features</font></b>
-</h2>
-<ul>
-  <li>Enhanced <i>DESQview</i>, <i>Windows</i>, and <i>OS/2</i> operation modes</li>
-  <li>Runs under DOS 3.0 or higher on any 80x86 compatible computer with 450k
-    free RAM&nbsp;<br>
-    &nbsp; - BBS can shrink to 288 bytes to execute external programs</li>
-  <li>Interrupt driven COM I/O for the fastest through-put possible<br>
-    - even with multiple nodes per CPU via a DOS multi-tasker</li>
-  <li>Any COM port configuration supported (Intelligent and Non-Intelligent
-    Boards)<br>
-    &nbsp; - Direct UART support as well as DigiBoard, FOSSIL, and PC BIOS int
-    14h drivers<br>
-    &nbsp; - Automatic modem configuration for most modem brands and types</li>
-  <li>DTE rates up to 115,200 baud</li>
-  <li>Caller-ID support with optional trash-can file</li>
-  <li>48 Local macros and sysop function hot-keys</li>
-</ul>
-<p><a href="#top"><b>Back to Top</b></a></p>
-
-<!--webbot bot="Include" U-Include="_borders/bottom.htm" TAG="BODY" startspan -->
-
-<hr>
-<p><b><a href="http://www.synchro.net/copyright.html">Copyright</a> � 2000 by </b> <a href="http://www.synchro.net/author.htm"><b>Rob Swindell</b><br>
-</a>
-
-<a href="http://www.synchro.net"><font size="2"><br>
-Synchronet BBS Software</font></a>  <font size="2">  (Synchronet)
-Version 3 is comprised of several documentation,<br>
-library, executable, and <a href="http://www.synchro.net/source.html">source code</a> 
-files, all of which are covered by the<a href="http://www.fsf.org/copyleft/gpl.html">
-<br>
-GNU General Public License</a>  with the exception of the following portions
-covered by<br>
-the <a href="http://www.fsf.org/copyleft/lesser.html">GNU Lesser General Public License</a>:
-SMBLIB and XSDK.<br>
-<br>
-Synchronet Version 2 (for DOS and OS/2) and its source code was released to the<a href="http://www.fsf.org/philosophy/categories.html#PublicDomainSoftware">
-<br>
-Public Domain</a>  by <a href="ftp://vert.synchro.net/main/sbbs/manifest.txt">Digital Dynamics</a> 
-in 1997 and remains Public Domain software today.<br>
-Synchronet Version 3 is not Public Domain software.</font></p>
-<p align="left"><font size="2"><a href="http://www.synchro.net/author.html">Rob Swindell<br>
-</a>PO Box 501<br>Yorba Linda, CA 92885<a href="http://www.synchro.net"><br>
-http://www.synchro.net</a>
-
-</font></p>
-<p align="left"><font size="2">For the complete Copyright Information please
-read the <a href="http://www.synchro.net/copyright.html">Copyright Documentation</a>
-.</font></p>
-
-<!--webbot bot="Include" endspan i-checksum="55766" -->
-
-</body>
-
-</html>
diff --git a/docs/file_section.html b/docs/file_section.html
deleted file mode 100644
index 9956dedeb3..0000000000
--- a/docs/file_section.html
+++ /dev/null
@@ -1,953 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<title>File Section</title>
-</head>
-
-<body>
-
-<!--webbot bot="Include" U-Include="_borders/top.htm" TAG="BODY" startspan -->
-
-<a href="http://www.synchro.net"><img border="0" src="images/synclogo_fancyred.gif" alt="Synchronet BBS - Multinode Bulletin Board Software" width="626" height="86"></a>
-
-<hr>
-
-<!--webbot bot="Include" endspan i-checksum="23126" -->
-
-<p><a name="top"></a><a href="sysop.html#TOC">Back to Table of Contents</a></p>
-
-<h2><a name="FileTransferSection">[10.0] - File Transfer Section</a></h2>
-<pre>The Synchronet file transfer section is used for transferring data and program
-files between the BBS and the remote user. Files are stored in a logical
-hierarchy of libraries and directories. A library is a group of directories
-that contain files of a similar subject matter.
-
-An example file library/directory configuration:
-
-<b>Library Name            Directory
-</b>---------------------------------
-Main                    Text
-                        Utilities
-                        Business
-                        Graphics
-                        Games
-                        Communications
-                        Miscellaneous
-
-Adult                   Text
-                        Animation
-                        GIF files
-                        TGA files
-
-DOS CD-ROM              Utilities
-                        Device Drivers
-                        Business
-                        Games
-                        Communications
-                        Programming
-
-Windows CD-ROM          Utilities
-                        BMP files
-                        WAV files
-                        Device Drivers
-                        Games
-                        Desktop Publishing
-                        Fonts</pre>
-<h2><a name="SettingUpFileTransferSection">[10.1] - Setting Up the File
-Transfer Section</a></h2>
-<pre>Run the SCFG utility, and select File Options from the menu. Following are
-example screens and the options available from the File Options sub-menu.</pre>
-<h3><a name="FileOptions">[10.1.1] - File Options</a>
-</h3>
-<p><img border="0" src="images/scfg_xfer_options.gif" width="572" height="331">
-</p>
-<pre><b>Min Bytes Free Disk Space:
-</b>        This is the minimum about of disk space (in kilobytes) that is
-        necessary for a user to be allowed an upload.
-
-<b>Max Files in Batch UL Queue:
-</b>        This is the maximum number of files that can be stored in the batch
-        upload queue. The definite maximum is 500 files.
-
-<b>Max Files in Batch DL Queue:
-</b>        This is the maximum number of files that can be stored in the batch
-        download queue. The definite maximum is 500 files.
-
-<b>Max Users in User Transfers:
-</b>        This is the maximum number of destination users in user to user
-        transfers. The definite maximum is 500 users.
-
-<b>Default Credit on Upload:
-</b>        This is the default amount used for newly created directories.
-
-<b>Default Credit on Download:
-</b>        This is the default amount used for newly created directories.
-
-<b>Leech Protocol Detection Percentage:
-</b>        This value is the sensitivity of the leech protocol detection feature
-        of Synchronet. If the transfer is apparently unsuccessful, but the
-        transfer time was at least this percentage of the estimated transfer
-        time (based on the estimated CPS of the connection result code), then
-        a leech protocol error is issued and the user's leech download counter
-        is incremented. Setting this value to 0 disables leech protocol
-	detection. This option also allows you to set the minimum amount of
-	elapsed transfer time to be considered for a possible leech download.
-
-	Leech protocol programs are file transfer programs (usually using
-	Zmodem technology) that attempt to &quot;fool&quot; the BBS into thinking the
-	file was not successfully transferred, when in reality it was. This is
-	accomplished by the transfer program requesting a reposition (ZRPOS)
-	after the last successful block and then aborting (ZCAN). A file
-	transferred in this manner will not be considered a successful transfer
-	by Synchronet, but will be caught as a possible leech download and
-	notify the sysop (if this option is used).
-
-	This feature is also useful for detecting the partial download of image
-	(GIF) files. If you charge your users credits for downloads, this can
-	be a very useful feature in detecting dishonest users. If the user
-	accumulates a large number of leeches (as displayed in User Edit) and
-	the user never successfully downloads a file previously logged as a
-	possible leech download, the user is probably trying to get something
-	for nothing, though this is hard to prove without actually watching
-	the file transfer in progress.</pre>
-<h2><a name="ViewableFiles">[10.2] - Viewable Files</a>
-</h2>
-<pre>This is a list of file types that have content information that can be viewed
-through the execution of an external program or Baja module. Here are a couple
-of command line examples for a few file types.</pre>
-<pre><img border="0" src="images/scfg_xfer_viewable.gif" width="572" height="331"></pre>
-<pre><b>NOTE:</b> When you select a file type from this list, you will be given one
-      additional option (Access Requirements) which is not shown here.
-      Users not meeting any access requirements which are set will not
-      be able to perform, or be affected by, that function.</pre>
-<h2><a name="TestableFiles">[10.3] - Testable Files</a>
-</h2>
-<pre>This is a list of file types that will have a command line executed to test
-the file integrity upon their upload. The file types are specified by extension
-and if one file extension is listed more than once, each command line will
-be executed. The command lines must return a DOS error code of 0 (no error)
-in order for the file to pass the test. This method of file testing upon upload
-is also known as an upload event. This test or event, can do more than just
-test the file, it can perform any function that the sysop wishes. Such as
-adding comments to an archived file, or extracting an archive and performing
-a virus scan. While the external program is executing, a text string is
-displayed to the user. This &quot;working&quot; string can be set for each file type
-and command line listed. Shown is an example list of file types, and their
-respective sub-menus and configurations:</pre>
-<pre><img border="0" src="images/scfg_xfer_testable.gif" width="572" height="331">
-
-ZIP type files:</pre>
-<pre><img border="0" src="images/scfg_xfer_testable_zip.gif" width="572" height="331">�
-
-To add a ZIP comment to a ZIP type file:</pre>
-<pre><img border="0" src="images/scfg_xfer_testable_zipc.gif" width="572" height="331">�
-
-If an extension of '*' is specified, all files uploaded will be tested with
-this command line.  An example would be when using Domain Upload Tester from
-Domain Entertainment:</pre>
-<pre><img border="0" src="images/scfg_xfer_testable_du.gif" width="572" height="331">
-
-<b>NOTE:</b> Users not meeting any access requirements which are set will not
-      be able to perform, or be affected by, that function.</pre>
-<h2><a name="DownloadEvents">[10.4] - Download Events</a>
-</h2>
-<pre>Download events are an event that you wish to have executed before a user
-downloads a file from your BBS.  This can be useful adding a comment to
-a file from a CD-ROM before it gets sent to the user (as the example shows),
-or to perform a virus scan, or any other function you can think of.
-
-Here is an example showing how to change the comment in ZIP type files when
-a user attempts to download a file.</pre>
-<pre><img border="0" src="images/scfg_xfer_event.gif" width="572" height="331"></pre>
-<pre>Selecting the available event will allow you to edit the options available.</pre>
-<pre><img border="0" src="images/scfg_xfer_eventc.gif" width="572" height="331"></pre>
-<h2><a name="ExtractableFiles">[10.5] - Extractable Files</a>
-</h2>
-<pre>This is a list of archive file types that can be extracted to the temp
-directory by an external program. The file types are specified by their
-extension. For each file type you must specify the command line used to extract
-the file(s). Here are some example command lines for extracting various files:</pre>
-<pre><img border="0" src="images/scfg_xfer_extractable.gif" width="572" height="331">
-
-<b>NOTE:</b> When you select a file type from this list, you will be given one
-      additional option (Access Requirements) which is not shown here.
-      Users not meeting any access requirements which are set will not
-      be able to perform, or be affected by, that function.
-
-<b>Notes on command lines syntax:</b>
-        The use of conversion specifiers are supported in all command lines
-        within SCFG. Conversion specifiers are proceeded by a percent (%)
-        symbol and are not case sensitive. The above command line examples use
-        the following specifiers:
-
-<b>        %! EXEC directory:</b>
-                If the program you are executing with this command line is not
-                located in your EXEC directory, you can specify the directory
-                where the program is located or, if the program is in your
-                search path, start the command line with just the program name
-                (no prefix). We suggest specifying the location of the program
-                for security reasons.
-
-<b>        %f Filename:
-</b>                This is the filename of the archive that is to be extracted.
-
-<b>        %g Temp Directory:
-</b>                This is the path to the temp directory. In the above command
-                lines, it is the destination of the extracted files.
-
-<b>        %s File Specification:
-</b>                This is the file specification to extract from the archive.
-
-<b>        See Appendix A for a complete list of the available specifiers.</b></pre>
-<h2><a name="CompressableFiles">[10.6] - Compressable Files</a>
-</h2>
-<pre>This is a list of archive file types that can be created for QWK packets
-and temporary archives for download. The file types are specified by their
-extension. For each file type you must specify the command line used to create
-the archive. Here are some example command lines for various compression types:</pre>
-<pre><img border="0" src="images/scfg_xfer_compressable.gif" width="572" height="331">
-
-For these compression command lines to work, you must have the appropriate
-executable files (PKZIP, ARJ, and LHA) in your EXEC directory.</pre>
-<h2><a name="TransferProtocols">[10.7] - Transfer Protocols</a>
-</h2>
-<pre>This is a list of file transfer protocols that can be used to transfer files
-either to or from a remote user. For each protocol, you can specify the
-mnemonic (hot-key) to use to specify that protocol, the command line to use for
-uploads, downloads, batch uploads, batch downloads, bi-directional file
-transfers, and the support of DSZLOG. If the protocol doesn't support a
-certain method of transfer, or you don't wish it to be available for a certain
-method of transfer, leave the command line for that method blank. Be advised,
-that if you add or remove any transfer protocols, you will need to edit the
-protocol menus (ULPROT, DLPROT, BATUPROT, BATDPROT, and BIPROT) in the
-TEXT\MENU directory accordingly. The '%f' command line specifier is used to
-represent the filename or batch file list. The following is an example list of
-protocols and their respective sub-menus and options:</pre>
-<h3><a name="FDSZ">[10.7.1] - Version 3.0 (Win32 /
-Telnet) using FDSZ :</a>
-</h3>
-<pre><b>IMPORTANT: </b>If you are running Synchronet as a Telnet Server then you
-           must use a Protocol that supports FOSSIL Communications
-           such as FDSZ or CEXYZ. Synchronet v3.0 comes pre-configured
-           for use with FDSZ.</pre>
-<pre><img border="0" src="images/scfg_xfer_proto_fdsz.gif" width="572" height="331"></pre>
-<pre><b>FDSZ Xmodem</b></pre>
-<pre><img border="0" src="images/scfg_xfer_proto_fdsz_x.gif" width="572" height="331"></pre>
-<pre><b>FDSZ Ymodem</b></pre>
-<pre><img border="0" src="images/scfg_xfer_proto_fdsz_y.gif" width="572" height="331"></pre>
-<pre><b>FDSZ Zmodem</b></pre>
-<pre><img border="0" src="images/scfg_xfer_proto_fdsz_z.gif" width="572" height="331"></pre>
-<pre><b>FDSZ Ymodem-G</b></pre>
-<pre><img border="0" src="images/scfg_xfer_proto_fdsz_g.gif" width="572" height="331"></pre>
-<h3><a name="DSZ">[10.7.2] - Version 2.30 (DOS/OS2) using
-DSZ :</a>
-</h3>
-<pre><img border="0" src="images/scfg_xfer_proto_dsz.gif" width="572" height="331">
-
-<b>DSZ Xmodem:</b></pre>
-<pre><img border="0" src="images/scfg_xfer_proto_dsz_x.gif" width="572" height="331">
-
-<b>DSZ Ymodem:</b></pre>
-<pre><img border="0" src="images/scfg_xfer_proto_dsz_y.gif" width="572" height="331">
-
-<b>DSZ Zmodem:</b></pre>
-<pre><img border="0" src="images/scfg_xfer_proto_dsz_z.gif" width="572" height="331">
-
-<b>DSZ Ymodem-G:</b></pre>
-<pre><img border="0" src="images/scfg_xfer_proto_dsz_g.gif" width="572" height="331"></pre>
-<h3><a name="HS/Link">[10.7.3] - Version 2.30 (DOS/OS2)
-using HS/Link :</a>
-</h3>
-<pre><b>HS/Link Bi-Directional Transfers:</b></pre>
-<pre><img border="0" src="images/scfg_xfer_proto_dsz_h.gif" width="572" height="331"></pre>
-<pre><b>NOTE:</b> Users not meeting any access requirements which are set will not
-      be able to use that protocol.
-
-<b>IMPORTANT:</b> If you have Synchronet set to use anything other than UART
-	   you will not be able to use the DSZ transfer protocols and will
-	   need to locate a set of protocols that will work with your setup.
-	   If you are using a UART serial board, there is no reason why
-	   Synchronet should not be set to use UART.  Just because a front-end
-	   mailer or door game requires a FOSSIL driver, it does NOT mean
-	   that you must also set Synchronet to use a FOSSIL.</pre>
-<h2><a name="CreatingFileLibraries">[10.8] - Creating File Libraries</a>
-</h2>
-<pre>Select &quot;File Transfers&quot; from the SCFG main menu. Then select &quot;File Libraries&quot;.
-Hit INS (insert key) to create a file library. File libraries are groups of
-file directories that have a similar subject matter or other common element.
-File libraries are often used to separate Program files and Data files or
-files stored on a Hard disk and files stored on CD-ROM. An example
-configuration that separates programs from data:
-
-<b>Library 		Directory</b>
----------------------------------
-Programs		Games
-Programs		Utilities
-Programs		Business
-Programs		Communications
-Programs		Graphics Programs
-Programs		Programming
-Data Files		Text (Documentation, Stories, Cheats)
-Data Files		Program Source Code (C, ASM, PAS, BAS)
-Data Files		Still Pics (GIF, PCX, TIF)
-Data Files		Animation (FLI, GL, DL)
-Data Files		Sound (MOD, WAV, MID)
-Data Files		Other
-
-Example configuration that separates hard disk directories from CD-ROM
-directories:
-
-<b>Library 		Directory</b>
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Hard Disk		Text
-Hard Disk		Games
-Hard Disk		Utilities
-Hard Disk		Business
-Hard Disk		Graphics
-Hard Disk		Communications
-Hard Disk		Graphics Programs
-Hard Disk		Programming
-Hard Disk		Graphics, Animation, and Sound
-GIF CD-ROM		G Rated
-GIF CD-ROM		G Rated 640x480
-GIF CD-ROM		G Rated 800x600+
-GIF CD-ROM		R Rated
-GIF CD-ROM		R Rated 640x480
-GIF CD-ROM		R Rated 800x600+
-GIF CD-ROM		X Rated
-GIF CD-ROM		X Rated 640x480
-GIF CD-ROM		X Rated 800x600+
-PD/ShareWare CD-ROM	Games - Mono, CGA, EGA
-PD/ShareWare CD-ROM	Games - VGA
-PD/ShareWare CD-ROM	Utilities
-PD/ShareWare CD-ROM	Communications
-PD/ShareWare CD-ROM	Graphics and Desktop Publishing
-PD/ShareWare CD-ROM	BBS Software and Utilities
-PD/ShareWare CD-ROM	Programming
-PD/ShareWare CD-ROM	Windows Programs, Fonts, Icons, etc.
-
-You must have at least one file library and one file directory for anyone to be
-able to use the file transfer section. Following is a list of options available
-when creating or modifying a file library.</pre>
-<h3><a name="LibraryOptions">[10.8.1] - Library Options</a>
-</h3>
-<pre>Selecting a library name from the list of available libraries will give you a
-sub-menu of options for that library.</pre>
-<pre><img border="0" src="images/scfg_xfer_library.gif" width="572" height="331"></pre>
-<pre><b>Long Name:</b>
-	This is a description of the library displayed in library listings.
-
-<b>Short Name:
-</b>	This is a description of the library displayed at prompts.
-
-<b>Access Requirements:
-</b>	These are the requirements which must be met by a user account in order
-	to access this library.
-
-<b>Clone Options:
-</b>	Use this command to copy the options of the first directory in this
-	library to all the other directories in the library.
-
-<b>Export Areas:
-</b>	If you wish to export the area information of all the directories in
-	the current file library to a text file, use this option.
-
-<b>Import Areas:
-</b>	If you wish to import a text file of area information into the
-	current file library, use this option.</pre>
-<h2><a name="CreatingFileDirectories">[10.9] - Creating File Directories</a>
-</h2>
-<pre>After you have created at least one file library, you need to create
-directories for the library. Creating a file directory is much like creating
-a file library except that you will be prompted for an internal code to use.
-The internal code should be an abbreviation of the name of the directory or
-something else that specifies the contents of the directory.
-
-For each directory, you need to specify the file storage path. This is where
-the files are actually located (Drive and directory) on your system. If you do
-not specify a storage path, a sub-directory will be created off of your
-DATA\DIRS directory with the directory's internal code as the name of the
-sub-directory. If you wish to use the default storage path (DATA\DIRS\&lt;code&gt;),
-you'll need to move any files that you wish to be added to the BBS file
-database to that sub-directory.
-
-If you are adding CD-ROM directories, be sure to set the &quot;Check for file
-existence&quot; and &quot;Search for New Files&quot; toggle options to &quot;No&quot;, and
-&quot;Slow Media Device&quot; to &quot;Yes&quot; for each of your CD-ROM file directories.
-
-Following is a list of options available in the SCFG when creating or modifying
-a file directory.</pre>
-<h3><a name="MainDirectoryOptions">[10.9.1] - Main Directory Options</a>
-</h3>
-<pre><img border="0" src="images/scfg_xfer_dir.gif" width="572" height="331">
-
-<b>Long Name:</b>
-	This is a description of the file directory that is displayed in
-	directory listings.
-
-<b>Short Name:
-</b>        This is a description of the file directory that is displayed at
-	prompts. Some short names have a predetermined meaning:
-
-<b>        Temp:
-</b>                This short name is reserved and cannot be used.
-
-<b>        Offline:
-</b>                This short name specifies that this directory is to hold
-                offline files for the selected library and is treated a bit
-                differently than other directories. It will not be included
-                in new-scans and will be the default location of files that
-                are removed or moved. A directory with this short name should
-                have the upload level set to 90 and the access level and flags
-                set the same as the library. There can only be one directory
-                per library with this short name.
-
-<b>        Sysop:
-</b>                This short name specifies that this directory will be the
-                destination for files uploaded by users with the 'Z' command
-                from the transfer section. There should only be one directory
-                with this short name and it should belong to the most
-                accessible library. A directory with this short name should
-                have the access level set to 90 and the upload level and flags
-                set the same as the library.
-
-<b>        User:
-</b>                This short name specifies that this directory will be the
-                storage point for user to user transfers. There should only be
-                one directory with this short name and it should belong to the
-                most accessible library. Users can upload a file to another
-                user or group of users with the '/U' transfer section command.
-                Users download files sent to them with the '/D' transfer
-                section command. A directory with this short name should have
-                the access level set to 90 and the upload level and flags
-                set the same as the library or at whatever level the sysop
-                wishes to allows users to use the user to user transfer
-                facilities.
-
-<b>        Uploads:
-</b>                This short name specifies that this directory will be used
-                for uploads if the user attempts to upload to a directory where
-                he or she does not have sufficient upload access.
-                If you wish all uploads to automatically go into one specific
-                directory, set the required upload level for all other
-                directories to 90 or higher (Sysop). If you don't want users
-                to be able to see the files in this directory or download them
-                until they are moved by the sysop, set the required access
-		for your &quot;Uploads&quot; directory to level 90 or higher. Creating
-		an &quot;Uploads&quot; directory also allows &quot;Blind&quot; batch uploads from
-		the users (files need not be added to the upload queue first).
-
-<b>Internal Code:
-</b>        This is an internal code for SBBS to distinguish this directory from
-        the others on the system. This must be a unique name of up to 8 valid
-        DOS filename characters. The code TEMP is reserved and cannot be used.
-
-<b>Access Requirements:
-</b>        This is a list of security requirements to access this directory.
-
-<b>Upload Requirements:
-</b>        This is a list of security requirements to upload to this directory.
-
-<b>Download Requirements:
-</b>        This is a list of security requirements to download from this
-        directory.
-
-<b>Operator Requirements:
-</b>	Any users meeting these criteria will be able to perform Sysop type
-	activities for this directory.
-
-<b>Exemptions Requirements:
-</b>	Any users meeting these criteria will be considered exempt from
-	credit deductions when transferring files from this directory.
-
-<b>Transfer File Path:
-</b>        This is the actual path for the storage of the files that belong to
-        this directory. If no path is specified, the directory DATA\DIRS\CODE,
-        where CODE is the internal code for this directory, will be used to
-        store the files.
-
-<b>Maximum Number of Files:
-</b>        This is the maximum number of files that will be allowed in this
-	directory. Once this number of files is reach, no uploads will be
-	allowed.
-
-<b>Purge by Age:
-</b>	This is maximum age of files (in days) to keep in this directory.
-	The DELFILES utility (included with Synchronet) must be run as
-	a timed event to automatically purge old files from your file areas.
-
-<b>Credit on Upload:
-</b>	If Credit Uploads is set to Yes in the toggle options for this
-	directory, users will be credited with this percentage of the file
-	size (in bytes) in credits when uploading a file to this directory.
-
-<b>Credit on Download:
-</b>	If Credit Downloads is set to Yes in the toggle options for this
-	directory, users will be credited this percentage of credits for
-	subsequent downloads of any file that they upload to this
-	directory.</pre>
-<h3><a name="ToggleOptions">[10.9.2] - Toggle Options</a>
-</h3>
-<pre><img border="0" src="images/scfg_xfer_dir_toggles.gif" width="572" height="331">
-
-<b>Check for File Existence:</b>
-        If this option is set to 'Yes', when files are listed in the transfer
-        section, each file is checked to see if it actually exists in the
-        DOS directory. If the file doesn't exist, the credit value is displayed
-        in high intensity blinking and is followed by a minus symbol. Setting
-        this option to 'No' speeds up the file listings, but files not actually
-        on disk will appear just as the others. Directories with a short name
-        of Offline should have this value set to 'No' as they should solely
-        contain files that aren't actually in the DOS directory. Directories
-        that are stored on CD-ROM or other slow random access device should
-	have this option set to 'No'.
-
-<b>Slow Media Device:
-</b>	If this option is set to 'Yes', files will be copied from the normal
-        storage directory into the temp directory and downloaded from there.
-        This option is helpful in reducing the overhead associated with
-        multiple simultaneous user access to a slow media device such as
-        CD-ROM.
-
-<b>Force Content Ratings:
-</b>	If this option is set to 'Yes', when a user uploads a file he is
-	prompted to rate the content of the file with a single character
-	(usually G, R, or X), and the file description will begin with the
-	rating letter contained in brackets.
-
-<b>Upload Date in Listings:
-</b>	Setting this option to 'Yes' will cause Synchronet to place the date
-	that a file was uploaded onto the first line of the file description,
-	similar to the Multiple File Numberings option.
-
-<b>Multiple File Numberings:
-</b>	If this option is set to 'Yes', when a user uploads a file he is
-        asked if the file he is uploading is part of a set of files. If the
-        user answers 'Yes', he is then prompted for the total number of files,
-        the number of the file he is uploading, and the file description will
-        end with the numbering in the format &quot;[n/t]&quot;, where n is the file
-        number and t is the total number of files.
-
-<b>Search for Duplicates:
-</b>	If this option is set to 'Yes', this directory will be searched for
-	duplicate filenames when a user attempts to upload a file.
-
-<b>Search for New Files:
-</b>	When this option is set to 'Yes' this directory will be included in
-	new file scans (for those users than have access). Set this option
-	to &quot;No&quot; for CD-ROM directories or directories that will not be
-	receiving new files on a regular basis.
-
-<b>Search for Auto-ADDFILES:
-</b>	When this option is set to 'Yes' this directory will be searched for
-	FILES.BBS by the ADDFILES program when using the auto-add feature.
-
-<b>Import FILE_ID.DIZ:
-</b>	When set to 'Yes', Synchronet will attempt to import the FILE_ID.DIZ
-	or DESC.SDI of any files uploaded to this directory into the file
-	description.
-
-<b>Free Downloads:
-</b>        If you want all files downloaded from this directory to be free for
-        the downloader (not cost any credits regardless of the credit value),
-	set this option to 'Yes'.
-
-<b>Free Download Time:
-</b>	If you do not want time spent during downloading to be subtracted from
-	the users time online, this option should be set to 'Yes'.
-
-<b>Deduct Upload Time:
-</b>	If you want the time spent uploading a file to be subtracted from the
-	users available online time, this option should be set to 'Yes'.
-
-<b>Credit Uploads:
-</b>        If you want users who upload files to this directory to get credit
-	for their upload based on the &quot;Credit on Upload&quot; percentage, set
-	this value to 'Yes'.
-
-<b>Credit Downloads:
-</b>        If you want users who upload files to this directory to get credit
-	for subsequent downloads of the file based on the &quot;Credit on Download&quot;
-	percentage, set this value to 'Yes'.</pre>
-<pre><b>Credit with Minutes:
-</b>	Setting this option to 'Yes' will cause the uploading user to receive
-	time (in minutes) for their upload rather than credits.  The minutes
-	a user receives will be based upon the percentage awarded multiplied
-	by the time it took for the recipient of the file to download it.
-
-<b>Anonymous Uploads:
-</b>        If you want users with the 'A' exemption to be able to upload file
-	anonymously to this directory, set this option to 'Yes'. If you want
-	all uploads to this directory to be automatically forced anonymous, set
-	this option to Only.
-
-<b>Purge by Last Download:
-</b>	This option is for use in conjunction with the Synchronet DELFILES
-	program.  When deleting files from the filebase, if this option is
-	set to 'Yes', it will compare the maximum age specified by the
-	&quot;Purge by Age&quot; field to the date the file was last downloaded. If set
-	to 'No', the maximum age will be compared to the date the file was
-	uploaded.
-
-<b>Mark Moved Files as New:
-</b>	If this option is set to 'Yes', then when a file is moved from this
-        directory to another, it's upload date will be reset to the current
-	date/time automatically.</pre>
-<h3><a name="AdvancedOptions">[10.9.3] - Advanced Options</a></h3>
-<p><img border="0" src="images/scfg_xfer_dir_advanced.gif" width="572" height="331"></p>
-<pre><b>Extensions Allowed:
-</b>        This is a list of file extensions (separated by commas) that are
-        allowed to be uploaded to this directory.
-
-<b>Data Directory:
-</b>	This is the path where the data for this directory will be located.
-
-<b>Upload Semaphore File:
-</b>	This is the path and name of a semaphore file used to trigger your
-	front-end mailer when a file is uploaded.
-
-<b>Sort Value and Direction:
-</b>        Directories can be sorted either by filename or upload date in an
-        ascending or descending order. This option selects the value to sort
-        on and in which direction.</pre>
-<h3><a name="AddingFilesToDatabase">[10.10] - IMPORTANT - Adding
-files to the BBS database</a></h3>
-<pre>Now that you've created at least one file library and one file directory inside
-that file library, any files located in the storage path for that directory
-are not automatically available for users to download. The file has to be
-added to the BBS file database first.
-
-<b>Manual Upload</b>
-
-Logon to the BBS as yourself (most likely, user #1), go to the file transfer
-section. Select the file area you wish to add the file to and hit 'U' for
-upload. Now enter the filename. If the file is already in the storage directory
-that you specified in SCFG you will be prompted for file descriptions and other
-questions about the file. If the file is not already in the storage directory,
-you will be prompted for the path from where to copy the file.
-
-<b>ADDFILES</b>
-
-If you have an ASCII list of your files with descriptions (often called
-FILES.BBS or DIR##), you'll want to use the Synchronet ADDFILES program to
-import this file and description information into the BBS file database. This
-is usually only the case for CD-ROMs and when converting a file database from
-another BBS. See the Utility Reference Chapter for more information on
-ADDFILES.
-
-<b>Bulk Upload<u>
-</u></b>
-To add the files that are located in the storage paths of your configured
-directories, exit the configuration program, logon to the BBS as yourself
-(User #1), go to the file transfer section ('T' from the main menu), and type
-&quot;;UPLOAD ALL&quot; then hit ENTER. If there are any files that are in your storage
-paths, but not already in the BBS file database you will be prompted to enter
-a description for each file.</pre>
-<h3><a name="CreatingOfflineFileDirectories">[10.10.1] - Creating Offline File
-Directories</a></h3>
-<pre>Each library can have an offline file directory. This is where you can place
-files that have been removed from the system, but the file information (name,
-description, uploader, etc.) remains in the database. Offline directories
-are treated special. They are not scanned for new files and are automatically
-used as an optional destination for the file information when a file is
-removed by a sysop. Offline file directories are specified by having the
-short name of &quot;Offline&quot; (not case sensitive). Only one offline directory can be
-specified per library. Offline file directories should have the &quot;Check for file
-existence&quot; toggle option set to &quot;No&quot;. The minimum security level to upload
-should be set to 90 so that users will not be allowed to upload to this
-directory.</pre>
-<h3><a name="CreatingSysopDirectory">[10.10.2] - Creating a Sysop Directory</a></h3>
-<pre>A sysop file directory is a directory that users can upload to, but they can
-not see nor download from. You can only have one sysop directory on the
-system and it can belong to any one of the file libraries. A sysop file
-directory is specified by the short name of &quot;Sysop&quot; (not case sensitive) and
-will be used as the destination directory for uploads with the 'Z' (upload
-to sysop) transfer section command. The minimum security level to access should
-be set to 90 or higher so that only sysops can view the directory and download
-from it and the upload access level should be set to 0 (or higher, if you want
-to restrict the number of users who can upload to the sysop dir).</pre>
-<h3><a name="CreatingUser-to-UserDirectory">[10.10.3] - Creating a
-User-to-User Transfer Directory</a></h3>
-<pre>A user-to-user transfer directory is used for users to send a file directly
-to another user (or group of users) with only that user (or group of users)
-being able to see the file and download it. It's like a private e-mail file
-directory. Users send files to other users with the &quot;/U&quot; command and download
-files from other users with the &quot;/D&quot; command. This feature is only enabled
-if the sysop creates a user-to-user transfer directory. This directory can
-belong to any library on the system, but must have a short name of &quot;User&quot;
-(not case sensitive). The minimum security level to access should be set to
-90 or higher so that only sysops can view the directory and download any file
-they wish from it and the upload access level should be set to 0 (or higher,
-if you want to restrict the number of users who can upload user-to-user
-files). This directory should have the &quot;Allow extended descriptions&quot; toggle
-option set to &quot;Yes&quot; so that the uploader of the file can attach a more
-detailed description if he or she wishes.</pre>
-<h3><a name="CreatingDefaultUploadDirectory">[10.10.4] - Creating a Default Upload
-Directory</a></h3>
-<pre>A default upload directory is used if you want all uploads to go to a single
-directory.  If you wish to use this feature, you must create a directory with
-the short name up &quot;Uploads&quot; (not case sensitive).  Set the minimum level to
-access to 90 or higher if you do not wish to allow users to see this directory.
-Set the upload access level to 0 (or higher, if you want to restrict the number
-of users who can upload to this directory).  You should set the required
-upload access level of all other directories in the library to 90 or higher so
-that all upload attempts to those directories will force the file uploaded into
-this directory.</pre>
-<h3><a name="SupportingBlindBatchUploads">[10.10.5] - Supporting Blind Batch Uploads</a></h3>
-<pre>Some sysops would like for their users to be able to do a batch upload of files
-to a directory without having to enter the files into an upload queue before
-hand.  These are called Blind Batch Uploads.  In order for this feature to
-work, you MUST have created a default upload directory (see the section above
-describing this procedure).  Once you have created a default upload directory,
-the user need only go to the Batch Transfer menu and begin his upload.</pre>
-<h2><a name="CD-ROM/SlowMediaDevices">[10.11] - CD-ROM and Other Slow Media
-Devices</a></h2>
-<pre>It is assumed that you have already installed your CD-ROM drive and any
-necessary device drivers so that it can be accessed as a DOS device (like
-a hard disk or floppy disk).
-
-Explore your CD-ROMs directories to find out what directories contain what
-kind of files. Make notes of the directory paths and a description you would
-like to give that directory. Example:
-
-<b>Path            Description</b>
----------------------------
-D:\G-GIFS       G Rated GIFs
-D:\GAMES        Games
-D:\UTILS        Utilities
-
-Now find the ASCII description lists on the CD-ROM for the individual
-directory contents and note which description files are for which directories.
-If multiple list formats are supplied, use the format that most closely
-matches this (FILES.BBS format):
-
-FILENAME.EXT  This is a file description
-
-or the DIR## format:
-
-FILENAME.EXT    530114  07-16-91  This is a file description that will be too
-                                | long, so it wraps to the next line.
-
-Example for file list notes:
-
-<b>File List               Description
-</b>-----------------------------------
-D:\DESC\GIFS.LST	GIFs
-D:\DESC\GAMES.LST       Games
-D:\DESC\UTILS.LST       Utilities
-
-Or preferably:
-
-<b>File List		Description</b>
------------------------------------
-D:\GIFS\FILES.BBS	GIFs
-D:\GAMES\FILES.BBS	Games
-D:\UTILS\FILES.BBS	Utilities
-
-
-Now run SCFG from your node directory. Go to &quot;File Transfers&quot;, then &quot;File
-Libraries&quot;. Hit the INS key to add a new file library. Name it &quot;CD-ROM&quot; or a
-description of what the CD-ROM contains. Now hit ENTER on the new library
-and select &quot;File Directories&quot;. Hit INS to add each directory specifying the
-name and file storage path for each. Example:
-
-<b>Long and Short Name     Internal Code           File Path
-</b>---------------------------------------------------------
-GIFs			CD-GIFS 		D:\GIFS
-Games                   CD-GAMES                D:\GAMES
-Utilities               CD-UTILS                D:\UTILS
-
-Now hit HOME and ENTER to edit the first directory. Select &quot;Toggle Options&quot;
-and hit enter. Set &quot;Check for File Existence&quot; and &quot;Search for New Files&quot; to
-&quot;No&quot; and set &quot;Slow Media Device&quot; to &quot;Yes&quot;. Hit ESC three times to go back to
-the &quot;CD-ROM File Library&quot; menu. Select &quot;Clone Options&quot; and hit ENTER. Answer
-&quot;Yes&quot; to clone the options of the first directory into the rest of the library.
-
-Now exit SCFG and save changes.
-
-From the DOS prompt, type:
-
-SET SBBSNODE=C:\SBBS\NODE1
-
-But use the correct path for your NODE directory. If you installed Synchronet
-into a directory named &quot;BBS&quot; on drive D:, then you would type
-
-SET SBBSNODE=D:\BBS\NODE1
-
-Now run ADDFILES (from your EXEC directory) for each of your CD-ROM file
-description lists (or only once if a FILES.BBS exists in each directory). See
-the Utility Reference chapter for specifics on how to use ADDFILES. Example
-(assuming description lists are in DIR## format):
-
-ADDFILES CD-G-GIFS +D:\DESC\G-GIFS.LST 33 13
-ADDFILES CD-R-GIFS +D:\DESC\R-GIFS.LST 33 13
-ADDFILES CD-X-GIFS +D:\DESC\X-GIFS.LST 33 13
-ADDFILES CD-GAMES +D:\DESC\GAMES.LST 33 13
-ADDFILES CD-UTILS +D:\DESC\UTILS.LST 33 13
-
-The following command will search ALL configured directories for FILES.BBS
-lists and import the files from them:
-
-ADDFILES *
-
-If you have a FILES.BBS format list which has a different filename, this will
-search ALL configured directories for that file and import the files from them:
-
-ADDFILES *FILES.LST
-
-These will add the file descriptions to your Synchronet file database.
-Now you should be able to run SBBS and have users download files from your
-CD-ROM.</pre>
-<h3><a name="AlternateFilePaths">[10.11.1] - Alternate File Paths</a></h3>
-<pre>Since a CD-ROM disk is &quot;read only&quot;, you cannot alter the physical organization
-of files and directories on the CD-ROM. Normally, you would have one logical
-Synchronet file directory for every physical DOS directory. But for CD-ROMs
-that have their files spread across a large number of directories, you may not
-want your logical directory structure to mimic the physical structure.
-Synchronet can store roughly a thousand files per directory and many CD-ROMs
-have far less than that per directory to accommodate BBS software that have a
-lower maximum number of files per directory. Each logical directory in
-Synchronet takes up memory so it is advantageous to keep the number of
-directories to a minimum when working with large quantities of files.
-
-Synchronet's alternate file paths allow the sysop to add files from multiple
-physical directories into one logical directory on the BBS. Every logical
-directory on the BBS has a default storage path where uploaded files will be
-received and downloaded files are sent from. If you wish to add files to an
-existing logical directory that are not stored in the default storage path,
-then you will need to add an alternate file path that points to the location
-of these files. Then either use ADDFILES with the &quot;.altpath&quot; switch or use
-the ;ALTUL and ;UPLOAD sysop transfer commands to add the files. You will need
-to know the number of the alternate file path for which you are adding files
-from, so note which alternate path number you are uploading from before running
-ADDFILES or ;UPLOAD.
-
-Alternate file paths are useful for grouping files of a similar subject from
-different CD-ROMs into a single logical directory in Synchronet, thus freeing
-the sysop to organize the files based on content rather than physical storage
-location.</pre>
-<h2><a name="SynchronetFTPServer">[10.12] - Internet FTP Server</a> <b><font color="#FF0000"><i>(v3+
-Only)</i></font></b>
-</h2>
-<pre><b>FTP Filename Aliases</b>
-
-You can create a list of file aliases that will appear in your FTP root 
-directory for:</pre>
-<ul>
-  <li>
-<pre>Quick and easy access to often downloaded user files</pre>
-  </li>
-  <li>
-<pre>Static filenames that corresponds to a dynamically changing filenames
-  e.g. ftp://vert.synchro.net/sbbs_for_dos.zip always points to the current
-       versioned filename of Synchronet for DOS (e.g. SBBS230B.ZIP)</pre>
-  </li>
-  <li>
-<pre>Download access to files on the local disk not in the BBS file database </pre>
-  </li>
-</ul>
-<pre>How? Edit the file <b>CTRL/FTPALIAS.CFG</b> (<i>SBBSCTRL-&gt;FTP-&gt;Edit-&gt;Alias List</i>). The
-format is similar to that of the Synchronet Mail Server <b>ALIAS.CFG</b>, one alias
-per line in the format:</pre>
-<pre><b>alias	path	description</b></pre>
-<pre>The alias is not case-sensitive and may not contain spaces. This is the 
-filename that will appear in your FTP root directory.</pre>
-<pre>The path element is either the full path and filename to a file on a
-local file system (e.g. <b>C:\DOCS\MYFILE.TXT</b>) or a virtual path to a file in the
-BBS file database. Virtual paths are specified as &quot;<b>bbs://lib/dir/filename</b>&quot;
-where lib is the library short name, dir is the directory internal code and
-filename is the actual filename of the referenced file (may be the long
-filename, but may not contain spaces). </pre>
-<pre>The description is the optional description of the file that will be used in 
-the dynamically generated Auto Index file (if you have this option enabled).</pre>
-<pre>Lines beginning with a '<b>;</b>' are considered comments and are ignored.</pre>
-<pre>Example Alias:</pre>
-<pre><b>sbbs_for_dos.zip bbs://main/sbbs/sbbs230b.zip Current version for SBBS for DOS</b></pre>
-<pre><b>Sysop Access</b>
-
-To login with system operator access, you must login with a user account that
-has a security level of 90 or higher (user #1 usually has level 99) and enter 
-your password as &quot;<b>pass:syspass</b>&quot; where pass is your personal password and 
-syspass is the system password.</pre>
-<pre>A successful sysop login will generate a login message stating 
-&quot;<b>Sysop access granted</b>&quot;. Logging in with just your personal password will give
-you normal (non-sysop) access.</pre>
-<pre>Sysop access allows you to mount local file systems and will enable secure
-BBS database features in the future (such as deleting/renaming files).</pre>
-<pre><b>Local File System Access<u>
-</u></b>
-This is a powerful new feature that allows the sysop to access any and all
-locally accessible files and file systems via FTP (very convenient for
-remote administration). The &quot;<i>Local File System</i>&quot; checkbox must be checked in the
-FTP configuration dialog in SBBSCTRL to enable this feature.</pre>
-<pre>To access local file systems, you must first login with sysop access
-(see &quot;Sysop Access&quot; for details). Once logged in with sysop access, you may
-mount the local file system. There are two ways to mount the local file system
-(and subsequently to revert to the BBS file system):</pre>
-<pre><b>SMNT (Structure Mount)</b>
-
-Sysops may use the FTP &quot;<b>SMNT</b>&quot; command to mount the local files system. Since most 
-FTP clients do not support the <b>SMNT</b> command, you'll probably need to use the 
-&quot;quote&quot; feature of your FTP client to send the command to the FTP server. </pre>
-<pre>The syntax is &quot;<b>SMNT new_dir</b>&quot; where <i>new_dir</i> is the file system specifier 
-for the new directory used in the FTP hierarchy. Example: &quot;<b>SMNT C:\</b>&quot; 
-would make the root directory of your local C drive your new current FTP
-directory (for Windows' command-line ftp, type &quot;<b>quote SMNT C:\</b>&quot;).</pre>
-<pre>You can access shared drives on other machines on your local area network
-by using &quot;<b>SMNT \\othersys\drive</b>&quot; where <i>othersys</i> is the name of the other
-computer and drive is the share name of the desired drive.</pre>
-<pre>To switch back to (mount) the BBS file database, use &quot;<b>SMNT bbs:</b>&quot;</pre>
-<pre><b>CD (Change Directory)</b>
-
-Sysops can mount the local file system using a special case of the <b>CD</b> (<b>CWD</b>, <b>XCWD</b>)
-command. By prefixing &quot;local:&quot; to the new directory, the local file system will
-be automatically mounted. Example: &quot;<b>cd local:c:\</b>&quot;.</pre>
-<pre>Once the local file system is mounted, you can switch between drives and shared
-drives with the CD command (the &quot;<b>local:</b>&quot; specifier is not needed). 
-Example: &quot;<b>cd d:\</b>&quot;.</pre>
-<pre>To access a shared drive on other machines: &quot;<b>cd \\othersys\drive</b>&quot;.</pre>
-<pre>To switch back to (mount) the BBS file system, use &quot;<b>cd bbs:</b>&quot;.</pre>
-<pre>Since some FTP clients do not support the <b>SMNT</b> command, nor allow users to enter
-verbatim FTP commands, the CD method is the easiest and most reliable method of
-accessing the local file system.&nbsp;</pre>
-<p><a href="#top"><b>Back to Top</b></a></p>
-
-<!--webbot bot="Include" U-Include="_borders/bottom.htm" TAG="BODY" startspan -->
-
-<hr>
-<p><b><a href="http://www.synchro.net/copyright.html">Copyright</a> � 2000 by </b> <a href="http://www.synchro.net/author.htm"><b>Rob Swindell</b><br>
-</a>
-
-<a href="http://www.synchro.net"><font size="2"><br>
-Synchronet BBS Software</font></a>  <font size="2">  (Synchronet)
-Version 3 is comprised of several documentation,<br>
-library, executable, and <a href="http://www.synchro.net/source.html">source code</a> 
-files, all of which are covered by the<a href="http://www.fsf.org/copyleft/gpl.html">
-<br>
-GNU General Public License</a>  with the exception of the following portions
-covered by<br>
-the <a href="http://www.fsf.org/copyleft/lesser.html">GNU Lesser General Public License</a>:
-SMBLIB and XSDK.<br>
-<br>
-Synchronet Version 2 (for DOS and OS/2) and its source code was released to the<a href="http://www.fsf.org/philosophy/categories.html#PublicDomainSoftware">
-<br>
-Public Domain</a>  by <a href="ftp://vert.synchro.net/main/sbbs/manifest.txt">Digital Dynamics</a> 
-in 1997 and remains Public Domain software today.<br>
-Synchronet Version 3 is not Public Domain software.</font></p>
-<p align="left"><font size="2"><a href="http://www.synchro.net/author.html">Rob Swindell<br>
-</a>PO Box 501<br>Yorba Linda, CA 92885<a href="http://www.synchro.net"><br>
-http://www.synchro.net</a>
-
-</font></p>
-<p align="left"><font size="2">For the complete Copyright Information please
-read the <a href="http://www.synchro.net/copyright.html">Copyright Documentation</a>
-.</font></p>
-
-<!--webbot bot="Include" endspan i-checksum="55766" -->
-
-</body>
-
-</html>
diff --git a/docs/files.ref b/docs/files.ref
deleted file mode 100644
index 551562cbf9..0000000000
--- a/docs/files.ref
+++ /dev/null
@@ -1,201 +0,0 @@
-Reference of Path/Filenames Created/Read by Synchronet BBS Software and Utils
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-				Updated 09/05/97
-
-
-The files listed in this document are each of a specific format. Many problems
-may occur if a file is incorrectly modified by a person or program. Some of
-the files below have a relatively self-explanatory format, while most are much
-more cryptic and require the use of a technical specification and/or utility
-program to decode or modify. The sysop manual defines the format of some of the
-files (GURU.DAT for example) while some of the more technical file format
-definitions are available in SBBSDEFS.ZIP and SMB_*.ZIP.
-
-			See CNFS.FMT for specification
-			------------------------------
-CTRL\MAIN.CNF		Main configuration (SCFG)
-CTRL\MSGS.CNF           Message area/network configuration (SCFG)
-CTRL\CHAT.CNF           Chat configuration (SCFG)
-CTRL\XTRN.CNF           External program/event configuration (SCFG)
-CTRL\FILE.CNF           File area configuration (SCFG)
-CTRL\*.CN?		Configuration back-ups (SCFG)
-
-			See NODEDEFS.H for specification
-			--------------------------------
-CTRL\NODE.DAB           Node status/control (NODE)
-
-			No specification currently available
-			------------------------------------
-CTRL\NODE.IXB		Node time synchronization index
-CTRL\NODE.EXB		Node extended status descriptions
-CTRL\TIME.DAB		Last-ran time for timed events (del to reset)
-CTRL\QNET.DAB		Last-ran time for QWKnet hub call-outs (del to reset)
-CTRL\PNET.DAB		Last-ran time for PostLink hub call-outs (del to reset)
-CTRL\DSTS.DAB		Daily statistics for all nodes (DSTSEDIT)
-CTRL\CSTS.DAB		Cumilative statistics for all nodes (SLOG)
-CTRL\ATTR.CFG		Text attribute (color) configuration
-
-			See sysop manual for specification
-			----------------------------------
-CTRL\GURU.DAT		Guru brain
-CTRL\TEXT.DAT		Text strings
-
-			No specification currently available
-                        ------------------------------------
-CTRL\MDMS.IXT		Modem configuration database index (SCFG)
-CTRL\*.MDM		Modem configuration data (SCFG)
-
-			See SMB.TXT for specification
-			-----------------------------
-DATA\MAIL.*		E-mail database
-
-			No specification currently available
-                        ------------------------------------
-DATA\GURU.LOG		Guru conversations
-DATA\HUNGUP.LOG 	Users who've hung-up on external programs
-DATA\XFER.IXT		User-to-user file transfer index (del to reset)
-DATA\LOGON.LST		User logon list for today
-DATA\UTI.LOG		UTI (PostLink) driver log file
-
-			See DIRS.FMT for specification
-			------------------------------
-DATA\DIRS\*.DAT 	File directory data
-DATA\DIRS\*.IXB 	File directory index
-DATA\DIRS\*.EXB 	File directory extended descriptions
-DATA\DIRS\*.DAB 	File directory most recently uploaded file pointer
-
-			No specification currently available
-                        ------------------------------------
-DATA\FILE\####.QWK	Pre-packed QWK packets for users or QWKnet nodes
-DATA\FILE\####.DWN	Download batch queue from user's last logon
-DATA\FILE\####.IN\	In-bound e-mail file attachments for users
-DATA\FILE\####.OUT\	Out-bound netmail file attachments for users
-
-			No specification currently available
-                        ------------------------------------
-DATA\LOGS\mmddyy.LOL	Log-off list for date mm/dd/yy
-DATA\LOGS\mmddyy.LOG	Detailed log for date mm/dd/yy
-
-			No specification currently available
-                        ------------------------------------
-DATA\MSGS\AUTO.MSG	Auto-message for SBBS
-DATA\MSGS\####.MSG	Users short-messages (telegrams)
-DATA\MSGS\N###.MSG	Node messages (pages, activity alerts, etc)
-
-			See SYNCQNET.DOC for specification
-			----------------------------------
-DATA\QNET\ROUTE.DAT	Route map for routing QWK netmail
-DATA\QNET\USERS.DAT	User address look-up file (QWKNODES)
-
-			No specification currently available
-                        ------------------------------------
-DATA\QNET\qwkid.PTR	Last-exported pointers for QWKnet hub (del to reset)
-DATA\QNET\qwkid.IN\	In-bound file transfers from QWKnet hubs or nodes
-DATA\QNET\qwkid.OUT\	Out-bound file transfers to QWKnet hubs or nodes
-
-			See SMB.TXT for specification
-			-----------------------------
-DATA\SUBS\*.SDT 	Message base data
-DATA\SUBS\*.SHD 	Message base header
-DATA\SUBS\*.SID 	Message base index
-DATA\SUBS\*.SDA 	Message base data allocation table
-DATA\SUBS\*.SHA 	Message base header allocation table
-DATA\SUBS\*.SCH 	Message base CRC history
-
-			No specification currently available
-                        ------------------------------------
-DATA\SUBS\*.SFP 	Message number last scanned/exported to FidoNet
-DATA\SUBS\*.SMM 	Message number last scanned/imported to Match Maker
-DATA\SUBS\*.SBL 	Message number last scanned/imported to BBS List
-
-			No specification currently available
-                        ------------------------------------
-DATA\TEXT\*.IXT 	General text file section index
-
-			See SBBSDEFS.H for specification
-			--------------------------------
-DATA\USER\USER.DAT	User data
-
-			No specification currently available
-                        ------------------------------------
-DATA\USER\NAME.DAT	User name/alias index
-DATA\USER\####.MSG	Extended user description
-
-			See PTRS.FMT for specification
-			------------------------------
-DATA\USER\PTRS\####.IXB Message base scan configuration/pointers for users
-
-			See CNFS.FMT for specification
-			------------------------------
-NODE#\NODE.CNF		Node configuration (SCFG)
-
-			No specification currently available
-                        ------------------------------------
-NODE#\SCFG.BAT		Configuration loader
-NODE#\SBBS.BAT		BBS loader
-NODE#\NODE.LOG		Detailed log of last call
-NODE#\DSTS.DAB		Daily statistics for this node (DSTSEDIT)
-NODE#\CSTS.DAB		Cumulative statistics for this node (SLOG)
-NODE#\CHAT.DAB		Private chat data
-NODE#\BATCHUP.LST	Batch upload path/file list
-NODE#\BATCHDN.LST	Batch download path/file list
-NODE#\BIMODEM.PTH	Bi-dir upload/download path/file list
-NODE#\PROTOCOL.LOG	File transfer protocol log (DSZLOG)
-NODE#\MSGTMP		Editor drop file (QuickBBS)
-NODE#\INPUT.MSG 	Editor drop file
-NODE#\NETMAIL.MSG	Editor drop file
-NODE#\QUOTES.TXT	Editor drop file
-NODE#\MSGINF		Editor drop file (RemoteAccess)
-NODE#\EDITOR.INF	Editor drop file (WWIV)
-NODE#\SBBSFILE.NAM	File processor drop file
-NODE#\SBBSFILE.DES	File processor drop file
-
-			See sysop manual or XTRN_DAT.FMT for specification
-			--------------------------------------------------
-NODE#\XTRN.DAT		External program drop file
-
-			See sysop manual for specification
-			----------------------------------
-NODE#\MODUSER.DAT	External program return file
-
-			No specification currently available
-                        ------------------------------------
-NODE#\DOOR.SYS		Door drop/return file
-NODE#\PCBOARD.SYS	Door drop file
-NODE#\USERS.SYS 	Door drop/return file
-NODE#\SFDOORS.DAT	Door drop file
-NODE#\CHAIN.TXT 	Door drop file
-NODE#\DORINFO#.DEF	Door drop file
-NODE#\EXITINFO.DEF	Door drop/return file
-NODE#\CALLINFO.BBS	Door drop file
-NODE#\DOORFILE.SR	Door drop file
-NODE#\UTIDOOR.TXT	Door drop file
-
-			See sysop manual for specification
-			----------------------------------
-TEXT\*.MAC		Local keyboard macros
-TEXT\*.SIF		Input/questionnaire files
-
-			No specification currently available
-                        ------------------------------------
-TEXT\TOOSLOW.MSG	Message displayed to users less than minimum node rate
-TEXT\ANSWER.ASC 	Answer file for non-ANSI callers
-TEXT\ANSWER.ANS 	Answer file for ANSI callers
-TEXT\ANSWER.RIP 	Answer file for RIP callers
-TEXT\SBBS.MSG		Synchronet information message
-TEXT\SYSTEM.MSG 	System information message
-TEXT\NEWUSER.MSG	New user rules/information message
-TEXT\FEEDBACK.MSG	New user feedback instructions
-TEXT\NAME.CAN		List of disallowed name/alias strings
-TEXT\BADNAME.MSG	Message displayed when attempting to enter a bad name
-TEXT\FILE.CAN		List of disallowed file names for uploading
-TEXT\BADFILE.MSG	Message displayed when attempting to upload bad file
-TEXT\PHONE.CAN		List of disallowed phone numbers
-TEXT\BADPHONE.MSG	Message displayed when attempting to use bad phone
-TEXT\CID.CAN		List of disallowed Caller-ID strings
-TEXT\BADCID.MSG 	Message displayed when attempting to use bad CID string
-TEXT\IP.CAN		List of disallowed IP addresses for telnet connections
-TEXT\BADIP.MSG		Message displayed when attempting to use bad IP
-TEXT\ZIPMSG.TXT         Default ZIP comment
-
-/* End of FILES.REF */
diff --git a/docs/glossary.html b/docs/glossary.html
deleted file mode 100644
index 99f53baade..0000000000
--- a/docs/glossary.html
+++ /dev/null
@@ -1,397 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<title>Glossary</title>
-</head>
-
-<body>
-
-<!--webbot bot="Include" U-Include="_borders/top.htm" TAG="BODY" startspan -->
-
-<a href="http://www.synchro.net"><img border="0" src="images/synclogo_fancyred.gif" alt="Synchronet BBS - Multinode Bulletin Board Software" width="626" height="86"></a>
-
-<hr>
-
-<!--webbot bot="Include" endspan i-checksum="23126" -->
-
-<p><a name="top"></a><a href="sysop.html#TOC">Back to Table of Contents</a></p>
-<h2>[19.0] - Glossary</h2>
-<pre><b>Alias:</b>
-        False name that a user is known as. The use of Aliases is common on
-        BBSs. Synchronet allows the sysop to disallow the use of them, forcing
-        all users to be known by their real names.
-
-<b>ANSI:</b>
-        American National Standards Institute. References made to ANSI are
-	actually referring to the ANSI X3.64 terminal definition and the
-	related escape sequences used to change cursor positioning and text
-	attributes.
-
-<b>Archive:</b>
-        A file that contains multiple (possibly compressed) files, that can
-        be expanded. Archived files usually have a specific extension that
-        specifies what type of archive utility was used to create it.
-	The most popular archive utilities are PKZIP (.ZIP files),
-	LHARC (.LZH), and ARJ (.ARJ files).
-
-<b>ASCII:</b>
-        American Standard Code of Information Interchange. A 7 bit binary code
-        used to represent letters, numbers, symbols, and control codes.
-        Supported by almost every computer and terminal manufacturer.
-        See Extended ASCII.
-
-<b>Baja:</b>
-	Baja (b�'h�) is a tool used to create command shells and modules for
-	Synchronet multinode BBS software (see DOCS\BAJA.DOC).
-
-<b>Baud:</b>
-	An obsolete term defining the number of signal-level changes per
-	second. The CCITT now prefers to use &quot;symbols per second&quot;. For example
-	a V.22bis connection transfers only 600 symbols per second, but in this
-	protocol each symbol can represent up to four values; thus, you have an
-	effective transmission rate of 2,400 bps. V.32 is a 2,400
-	symbol-per-second (9,600-bps) modulation protocol.
-
-<b>BBS:</b>
-        Bulletin Board System. A system configured to accept users via modem
-        or network to access public and private messages. Many BBSs also
-        incorporate file transfers (the uploading and downloading of program
-        and data files), information services, online entertainment, and more.
-	On a multinode BBS, all nodes must use the same live database for
-	users, messages, and file transfers.
-
-<b>BPS:</b>
-        Bits Per Second or Bit Rate. The rate of data transmitted between
-        modems. For every byte of data (8 bits), a start and stop bit are added
-	for a total of ten bits per data byte.
-
-<b>Chat:</b>
-	Online real-time communication between users either in line by line
-	(multinode chat) or key by key (private chat).
-<b>
-COM Port:</b>
-        RS-232 communications port on an IBM PC compatible computer through
-        which digital signals are exchanged between it and the modem (or other
-	peripheral). The interface is either a 25 or 9 pin male connector.
-
-<b>Command Line:</b>
-        The complete syntax used for the execution of a program. Includes
-        the program path and name to execute and any parameters that may be
-	required by the program for proper execution. Command lines configured
-	in SCFG can use special command line specifiers for variable parameter
-	replacement. See Appendix A for more information.
-
-<b>Compression:</b>
-        See Archive.
-
-<b>Conference Mail:</b>
-	See EchoMail.
-
-<b>Co-sysop:</b>
-        BBS user with additional privileges to enable partial system
-        maintenance. Co-sysops on a Synchronet system would usually have
-	a security level in the range 80-89 and have an exemption flag for each
-	sysop function he is given rights to.
-
-<b>CR:</b>
-	Carriage Return. This character represents the end of a line of text
-	and is usually initiated with the ENTER key on most keyboards.
-
-<b>CrashMail:</b>
-	Referring to FidoNet NetMail being sent immediately and directly (not
-	routed) to the BBS or network address of the destination person.
-	A more accurate term would be Crash NetMail, or NetMail with Crash
-	status.
-
-<b>Decompression:</b>
-        See Extraction.
-
-<b>Directory:</b>
-        A section within a file library that contains files for uploading or
-        downloading. Also known as a file area.
-
-<b>Download:</b>
-        Transferring a file from a BBS or other host system to a remote
-        computer.
-
-<b>DCE:</b>
-        Data Communications Equipment. Dial-up modems that establish and
-        control the data link via the telephone network.
-
-<b>DCE Rate:</b>
-        The data transfer rate between two modems.
-
-<b>DTE:</b>
-        Data Terminal Equipment. The device that generates or is the final
-        destination of data - the computer.
-
-<b>DTE Rate:</b>
-        The data transfer rate between the computer and the modem.
-
-<b>Echo:</b>
-	The term &quot;Echo&quot; or &quot;Echo Conference&quot; is often used to refer to a
-	sub-board where messages are distributed across a message network. The
-	term actually comes from FidoNet EchoMail - the technology used to
-	distribute sub-board messages across FidoNet.
-
-<b>EchoMail (Conference Mail):</b>
-	Sub-board messages echoed across FidoNet in compressed packets.
-
-<b>EchoMail Program:</b>
-        If the front-end mailer does not directly support EchoMail, an EchoMail
-	program is necessary. TosScan, Squish, GEcho, and FreeMail are examples
-	of EchoMail programs.
-
-<b>E-mail or Electronic Mail:</b>
-        Private multiple line messages between users that are stored on a BBS
-        until the receiver deletes them.
-
-<b>Escape Sequence:</b>
-        A sequence of characters usually preceded by a control code to perform
-        attribute changes and cursor positioning on a terminal.
-        See ANSI.
-
-<b>Exemptions:</b>
-        Extended privileges given to users to remove access limitations or
-        provide access to certain sysop functions.
-	See User Edit for more information.
-
-<b>External Programs:</b>
-        Programs (.COM, .EXE, or .BAT files) that the BBS executes for added
-        functionality. External programs are used for archive manipulation,
-        file transfers, games, databases, text editors, virus scanning,
-        backups, and more. Often referred to as doors or chains.
-
-<b>Extraction:</b>
-        The splitting (and possible decompression) of an archived file into
-        the original set of multiple files.
-        See Archive.
-
-<b>File Transfer Protocol:</b>
-        See Transfer Protocol.
-
-<b>Flag:</b>
-	One of 26 possible switches labeled A through Z. Flags are used to
-        represent specific security privileges or restrictions for a user.
-	See User Edit for more information.
-<b>
-Front-end Mailer:</b>
-        An EMSI compatible FidoNet message front-end. FrontDoor, SEAdog,
-        Binkley, and D'bridge are examples of front-end mailers.
-
-<b>Group or Message Group:</b>
-        A group of message sub-boards with a similar subject matter.
-
-<b>Hardware Flow Control:</b>
-        The modem's use of the CTS (Clear to Send) line to control the flow of
-        data to from the computer to the modem.
-
-<b>LAN or Local Area Network:</b>
-        A group of personal computers connected in a local environment for the
-        purpose of sharing data, applications, and peripherals.
-
-<b>Level or Security Level:</b>
-        A decimal value in the range of 0 to 99 that determines a user's
-	security level on Synchronet BBS. A user's level determines how long
-        he can stay online per call, total time per day, total logons a day,
-        maximum number of lines per message, which Message Groups, Sub-boards,
-	External Programs, General Text File Sections, Transfer Libraries, and
-        Directories the user can access.
-
-<b>Library or Lib:</b>
-        A group of transfer directories with a similar subject matter.
-
-<b>Logon:
-      </b>  The act of entering a BBS system through a valid user account.
-
-<b>Message:</b>
-        File stored on the system created by a user that may contain ASCII text
-        ,Ctrl-A codes, and ANSI escape sequences. Messages are either public
-	(posted on a sub-board) or private (E-mail sent to a single user).
-
-<b>Message Network:</b>
-	Two or more BBSs sharing public message sub-boards (Aka Echoes) where
-	messages posted on one BBS get distributed to the other BBSs on the
-	network. There are many different network technologies used for the
-	distribution of networked messages. Synchronet supports the most
-	popular technologies; QWK, FidoNet, and PostLink.
-
-<b>Multinode:</b>
-        System that operates with multiple simultaneous access paths to the
-        same database of messages and other resources.
-
-<b>Multitask:</b>
-        The act of performing multiple tasks seemingly simultaneously.
-
-<b>Modem:</b>
-        A device that transmits/receives computer data through a communications
-        channel such as radio or telephone lines. Modems modulate, or
-        transform, digital signals from a computer into an analog form that can
-        be carried successfully on a phone line. Modems also demodulate signals
-        received from the phone link back to digital signals before passing
-        them to the receiving computer.
-
-<b>NetMail:</b>
-	A personal message sent to a specific person on a specific BBS or at
-	a specific network address through a message network. Most commonly
-	used in reference to FidoNet NetMail.
-
-<b>Network:</b>
-        Connection of two or more computers to facilitate the sharing of
-	resources. See LAN and Message Network.
-
-<b>NUP or New User Password:</b>
-        A password that the sysop has determined as a requirement before a
-        new user can apply for access.
-
-<b>Online:</b>
-        The state of a user when he is currently using a BBS.
-
-<b>Offline:</b>
-        The state of a BBS or BBS Node when it is not able to receive users
-        and the state of a user when he is not currently using the BBS.
-
-<b>Post:</b>
-	The act of a user writing and saving a message on a sub-board.
-
-<b>Protocol:</b>
-        A system of rules and procedures governing communications between two
-        or more devices. Protocols vary, but communicating devices must follow
-        the same protocol in order to exchange data. The format of the data,
-        readiness to receive or send, error detection and error correction are
-        some of the operations that may be defined in protocols.
-        See Transfer Protocol.
-
-<b>QWK Packet:</b>
-        A single compressed file, usually created by PKZIP, that contains
-	new messages, E-mail, sysop bulletins, and a list of new files that can
-        be downloaded by a user for use with an offline message reader. The
-        filename is the BBS ID followed by a .QWK extension (regardless of the
-        compression method). The developer of this packet format was Mark
-        Herring (Sparky) of Sparkware, for use with his Qmail Door (external
-        program). There are many popular offline message readers that support
-	the QWK format. QWK packets may also be used for message networking.
-
-<b>REP Packet:</b>
-        A QWK reply packet. Also, a single compressed file, usually created by
-        PKZIP, that contains e-mail or posts from the user that he/she created
-        with an offline message reader. The filename is the BBS ID followed
-        by a .REP extension. The packet must be uploaded by the user before
-        the messages and e-mail can be sent to the destination users or posted.
-
-<b>Restrictions:</b>
-        Flags that a sysop can place on a user to restrict the user from
-        certain features of a BBS.
-
-<b>RS-232:</b>
-        Interface standard developed by the Electronic Industries Association
-        (EIA) to define the signals and voltages used when data is exchanged
-        between a computer or terminal and a modem or serial printer. Data is
-        usually transmitted via a cable with a 9 or 25 pin connector.
-
-<b>SCFG:</b>
-	Synchronet configuration program. This program is run locally by
-	hitting C at the waiting for call screen or by running &quot;SCFG&quot; from
-	any node directory.
-
-<b>Serial Port:</b>
-        See COM Port.
-
-<b>Sub-board:</b>
-        A section within a message group that contains multiple messages posted
-        by users on a specific topic. Also referred to as a conference, forum,
-        or special interest group (SIG).
-
-<b>Sysop:</b>
-        System Operator. A person who participates in the maintenance or
-        management of a BBS. In Synchronet, sysops are defined as users with
-	a security level of 90 or greater.
-
-<b>Text File Sections:</b>
-        Areas for the storage of text files that the sysop wants users to have
-        the ability to read. Often referred to as general text file sections.
-        Common text files would be information about the BBS, ANSI art work,
-        and documents on debatable subjects. Text files placed in text file
-        sections do not get purged as public messages do and are not part
-	of the transfer section, so credits and transfer access are not
-        required.
-
-<b>Transfer Protocol:</b>
-        A protocol designed to govern the transmission of files between two
-        computer systems. BBS transfer protocols are usually specific to modem
-        transmissions. The most common of which are Xmodem, Ymodem, and Zmodem.
-        Most communications programs contain built-in protocol support and
-        stand-alone transfer protocol programs (like Omen Technology's DSZ)
-        are also available.
-
-<b>Throughput:</b>
-	The effective rate of data flow for a file transfer, measured in bits
-	per second. Throughput depends on the connect rate and the
-	error-control and data-compression protocols, if any.
-
-<b>UART:</b>
-	Universal Asynchronous Receiver Transmitter. The IC (Integrated
-	Circuit) that controls the serial port I/O. You must have a UART for
-	each COM port in your computer. The most common UARTs for IBM PCs are
-	NS8250s and NS16450s. If you are using a high-speed (9600bps or higher)
-	modem with your COM port and having communication problems, quite often
-	the only solution is to replace your UART for that COM port with a
-	buffered UART, usually an NS16550AFN. More modern UARTs are being
-	integrated with other peripheral controller ICs into a single chip (or
-	chip-set). This design does not allow for the replacement of the actual
-	UART. Internal modems have their own built-in UART.
-
-<b>Upload:</b>
-        Transferring a file from a remote computer to a BBS or other host
-        system.
-
-<b>User to User Transfer:</b>
-        An upload that is sent to a particular user or set of users. These
-        transfers are only allowed if the sysop creates a sub-board with a
-	short name of &quot;User&quot;. The sysop should set the access level to 90 and
-	the upload level to something in the user range to allow users to
-	upload to the directory, but not be able to list the contents of the
-        directory. A user performs a user to user upload with the '/U' command
-        from the transfer menu, and the destination user(s) can download the
-        file with the '/D' command.</pre>
-<p><a href="#top"><b>Back to Top</b></a></p>
-
-<!--webbot bot="Include" U-Include="_borders/bottom.htm" TAG="BODY" startspan -->
-
-<hr>
-<p><b><a href="http://www.synchro.net/copyright.html">Copyright</a> � 2000 by </b> <a href="http://www.synchro.net/author.htm"><b>Rob Swindell</b><br>
-</a>
-
-<a href="http://www.synchro.net"><font size="2"><br>
-Synchronet BBS Software</font></a>  <font size="2">  (Synchronet)
-Version 3 is comprised of several documentation,<br>
-library, executable, and <a href="http://www.synchro.net/source.html">source code</a> 
-files, all of which are covered by the<a href="http://www.fsf.org/copyleft/gpl.html">
-<br>
-GNU General Public License</a>  with the exception of the following portions
-covered by<br>
-the <a href="http://www.fsf.org/copyleft/lesser.html">GNU Lesser General Public License</a>:
-SMBLIB and XSDK.<br>
-<br>
-Synchronet Version 2 (for DOS and OS/2) and its source code was released to the<a href="http://www.fsf.org/philosophy/categories.html#PublicDomainSoftware">
-<br>
-Public Domain</a>  by <a href="ftp://vert.synchro.net/main/sbbs/manifest.txt">Digital Dynamics</a> 
-in 1997 and remains Public Domain software today.<br>
-Synchronet Version 3 is not Public Domain software.</font></p>
-<p align="left"><font size="2"><a href="http://www.synchro.net/author.html">Rob Swindell<br>
-</a>PO Box 501<br>Yorba Linda, CA 92885<a href="http://www.synchro.net"><br>
-http://www.synchro.net</a>
-
-</font></p>
-<p align="left"><font size="2">For the complete Copyright Information please
-read the <a href="http://www.synchro.net/copyright.html">Copyright Documentation</a>
-.</font></p>
-
-<!--webbot bot="Include" endspan i-checksum="55766" -->
-
-</body>
-
-</html>
diff --git a/docs/gpl.txt b/docs/gpl.txt
deleted file mode 100644
index 60549be514..0000000000
--- a/docs/gpl.txt
+++ /dev/null
@@ -1,340 +0,0 @@
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-		    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-			    NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-	    How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) 19yy  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) 19yy name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/docs/htdocs_contrib.txt b/docs/htdocs_contrib.txt
deleted file mode 100644
index 974404fa85..0000000000
--- a/docs/htdocs_contrib.txt
+++ /dev/null
@@ -1,112 +0,0 @@
-Introduction
-============
-This document is for people interested in contributing to the Synchronet
-Documentation Project : http://wasteland-bbs.com/syncdocs/
-
-Synchronet and it's related Source Code and Documentation is freely available
-and is continuing to be developed as an Open Source project.
-
-Active contributors are currently needed to help with the conversion and
-updating of the Synchronet Documentation.
-
-If you are interested in contributing to this project please contact :
-syncdocs@wasteland-bbs.com
-
-Availability
-============
-CVS access to the Documentation and Modification History is Available at :
-cvs.synchro.net:/cvsroot/sbbs/
-
-Example Command Line to Checkout the Current Documentation Files :
-cvs -d :pserver:username@cvs.synchro.net:/cvsroot/sbbs login
-(Enter your Password)
-cvs -d :pserver:username@cvs.synchro.net:/cvsroot/sbbs checkout docs
-
-Web-based CVS access is available at :
-http://cvs.synchro.net/cgi-bin/cvsweb.cgi
-
-Instructions for Working with CVS
-=================================
-First, you should contact the address above if you not already done so to
-obtain your CVS Username and Password for CVS Access.
-
-New members of the documentation team should first obtain the latest copy
-of the documentation files from the CVS repository as described above.
-
-It is important that you keep your local copy of the CVS files updated and
-always start your current editing session with the most recent CVS image.
-
-Example Command Line to Update the Documentation Files Locally :
-cvs -d :pserver:username@cvs.synchro.net:/cvsroot/sbbs login
-(Enter your Password)
-cvs -d :pserver:username@cvs.synchro.net:/cvsroot/sbbs update docs
-
-If you make changes to the project you should upload your changes in a timely
-fashion to ensure an organized and efficient version control system.  All
-changes should be *thoroughly documented* when uploading to the repository.
-
-Please refer to the CVS Documentation for information on how to obtain and
-use the CVS Features and Functions http://www.cvshome.org .
-
-If you're looking for a GUI front-end for CVS management try these :
-http://www.wincvs.org
-http://www.lincvs.org
-
-If you have any questions on using CVS with the Synchronet Documentation :
-syncdocs@wasteland-bbs.com 
-
-Working with the CVS Files Locally
-==================================
-The bulk of the HTML Conversion and Formatting work is currently being done
-on Windows 98/2000 with FrontPage 2000. This eases the editing and formatting
-of the large amount of data in the docs project.  The CVS image should be
-portable to other platforms and editors as well.
-
-If you have problems or notice any incompatibilities please contact :
-syncdocs@wasteland-bbs.com
-
-FrontPage 2000
---------------
-To get started with FrontPage 2000 the easiest thing to do is create a new
-web and point it to your local cvs directory of the docs project.  This will
-convert your local cvs directory into a FrontPage Web and create the
-necessary files and directories required by FrontPage.
-
-To do this follow these steps :
-
-1) Download the CVS image if you haven't already.
-2) Open Frontpage 2000 and select File->New->Web from the Menu
-3) Select "Empty Web" and enter the path of your local cvs image into the
-   Web Location Dialog Box (e.g. c:\cvs\sbbs\docs).
-4) Hit OK to Create the Web
-
-** NOTE: If Frontpage asks if you want to overwrite anything, say NO.
-
-After creating the FrontPage Web you should now have a local Frontpage Web
-containing the documentation project.  You can now start to work with the
-files and contribute to the project.
-
-** IMPORTANT: FP2000 has many features that require a Web server and FP2000
-              Server Extensions.  DO NOT use these features within the
-              Documentation Project.  Compatibility between all platforms
-              should be maintained to prevent problems with other systems.
-
-** IMPORTANT: FP2000 has many files and directories it uses to manage a Web.
-              These files SHOULD NOT be included your CVS uploads, and only
-              the Documentation Project files themselves should be uploaded
-              to the repository.  If you are unsure which files are needed
-              when uploading to the repository, please refer to the CVSweb
-              http://cvs.synchro.net/cgi-bin/cvsweb.cgi to see which files
-              are currently checked-in to CVS.
-
-Working with other HTML/Text Editors
-------------------------------------
-Working with the documentation files with other editors should not be a
-problem, but there are a couple things to remember.
-
-1) DO NOT use any features exclusive to your editor or editing environment.
-   Efforts must be made to ensure cross-platform viewing and editing.
-
-2) DO NOT upload files to CVS generated for or by your editor of choice.
-
-** Only approved HTML tags should be included in the Documentation Project. **
diff --git a/docs/images/baja_example.gif b/docs/images/baja_example.gif
deleted file mode 100644
index 2da720c7718e091ea918b12ac022a2a5826fe779..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2968
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
Ly6q_r3=Gx)4m4_&

diff --git a/docs/images/bre.gif b/docs/images/bre.gif
deleted file mode 100644
index 32df192a6bc155a42bccbe729112250bb9b3e046..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 19766
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
Ba-{$O

diff --git a/docs/images/lordcfg.gif b/docs/images/lordcfg.gif
deleted file mode 100644
index 8610c81ad19402abe10a0aeb58ed49f6a94a141f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 13811
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
L&pS9UFjxZsL{;pX

diff --git a/docs/images/sbbsctrl.gif b/docs/images/sbbsctrl.gif
deleted file mode 100644
index 6a5c50a6c61c9981ebe4b60fd4aeb08e447f0641..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 42138
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

diff --git a/docs/images/sbbsctrl_configure.gif b/docs/images/sbbsctrl_configure.gif
deleted file mode 100644
index 1f582c25e52df91e7afaadd6836fb88313a58933..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 15706
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%0A6)=@QO;f3L<Jo9cOm
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
Jq5}hiH2|wrNI?Jq

diff --git a/docs/images/sbbsctrl_telnet_cfg_gen.gif b/docs/images/sbbsctrl_telnet_cfg_gen.gif
deleted file mode 100644
index 6193436f33176edbe77c1e48bf107934dd81fd4b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 8373
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
V)UIsP^t*4;-K%f)O9?Po0|3PyP^bU^

diff --git a/docs/images/sbbsecho_additionalecho.gif b/docs/images/sbbsecho_additionalecho.gif
deleted file mode 100644
index 601ed4bff50b102df83f005795d7f9c720396afc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18889
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
XaN6fNFJscJ?@OM~Jm%oQz+epkg%>3B

diff --git a/docs/images/sbbsecho_additionalecho_list.gif b/docs/images/sbbsecho_additionalecho_list.gif
deleted file mode 100644
index 2f4f714e92b7e7e595ad1fcafc03f976b1baee96..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 21013
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
OM6<XAGZPa7gEau}j1^1(

diff --git a/docs/images/sbbsecho_additionalecho_list_tag.gif b/docs/images/sbbsecho_additionalecho_list_tag.gif
deleted file mode 100644
index d568976285d1f118cdd5417b8d0eb404bfd9d984..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 21740
zcmZ?wbhEHb>|yd|{LTOYEes6*8CqI66tg)rvjsq?SirDY0)(n1EUOhks72AKMboK8
z)2l_(tH;o*$1teJFldTp&=kw4DV9-loSdATqUJay&+!7GrC!-fgR++f6)z1cUK>@s
zHmZ7URQ1;6>aEEwTa#P%X7}vP?m3n{<yi5QW5sih70)?WJ?C8Y(sL~>EiFsWwJg2X
zvi4dJ2;J-1dT$B{J)g4o`JBDa=Nx;#^w|5Q=iV<p_x;$hW7n>o`~RQe|0oy@0dhk?
z2b2RqdBK6>A4C104~i2W9BAU;*D^U_ka)P2PuXeCj}41lx<&M}&YTcje7slQx=BWJ
zQ_6|SDuJ_nP8Kcoo@x+%tVVOQ+S%F0#ka0>7OS_(J8}pqJYa6PxY%RjK8dIXhhS#E
zg;E*`4;UDkLsy0!tvbNaw2FO~n!$tz3{9Ij&n@y@t<ZRTJ698n=LQ8v=3QLxj3PET
z<lo=R!@yo9FoQAia0jP#MZ%1YkB{;zIM*>WZhFcwO*Ld1x8vsL=Y-T6<_SbOW$biR
zo3L)dtgkHBHpHLa7I5$o%dH*R(FbxB55K#=uQvNdu4D6uN5@Q6&M!!GE`EC6(&qhz
z8s@Kj*EW|Q*mt*zo&Wa1fA#<WHP*EA%Q;m1_~2Ok`@6!u_8$UFM`{GWeeC8~SpT0x
zkb%j=sX>`1qKSijl7Ul`s*Z<Kv+9%&2`y?a9*HgLQvwp()KV&(+EwQ$B(*C|i%{ZH
z>soP$Q+wNqMcrCQG#>XDuM=3@tGi-CGPm}Y4U7A2m?TrU^|mlH_q)oiOyM@v;B@BE
zv(ZeQ91^DK%wv2&;V@4`(oWTB#wQ#O^BDJ7rtzju>rCS{I}^anYqo(ieU90M%)`8;
z*E*f&RX<B`o^SS~p?N{wGlvxm+oe`DFS2}d;Kic8cMF`COn#T}a;Z(sF6U*AJztpE
z=88?d63A4$D|5Nh%w5ha?ODGb4*0jI&+1i>^FlT8kZpdYs~NY;6|9a)yW7REf%Asd
z^qBOMPp54xQ56UmDE%6mBha9mkeyJJ=&j3KWSOug@!qMgH<%|*jF#MaEU!(9Wsc{C
zb!(UH?4Gq}iEqN1oJ~iMN#$<68#X&{*V|{a4;&FJpHq0$aQdA?=PlXi7M}~;?s!DF
zczJC3!(4N@il+<9?^Vff-yT=<;o|jswci>Qm}-B0+&-V<|IR=28%(5kC^YdoSuAW3
zkBV4$UapN}QHSEP43jR+Lnj_xGTi6!__EdwiLHGh?{6&b59iKQndqdp^Xo)I3C^ce
zQlfvR@ED$8V4j}1iTByG)UKIov(nEcF!N^IJG<=P-JDx5x6f-}|F!%<6PwqI1#L=w
z8GPMl_g*}nY^1kx=~Ta{mCI(%i@LCat5#~&8n=yED_65Ax(GO~;`^c*up;@vuh$!n
z>-~PS<$B)lw>zG%`~7au_jkYFA7I!2^Wlhi{-2L0)Yt#{bjJMspU>NWH@teauFmSf
z*Bj~U|1vPL6x4pd(R_aI_s8|`_x^Y>dH&uXx0c8M`+a-1{J)=1cJtf+e!Dt<|KAU%
z>-YcqIeY&9AL8~*kM!&QX)7=Yo;bi}^`TLqX90`4$3d>B4^6yB?*9`z;qa~TeFJBW
z0*B*@1Ange*Qv|Ia~bb&5Gw0${;QnGaR2+ke~tlFtFl91+jThoT6v-UpFYbY?$hEf
zN_-RBZT>72oE+hz!Zoqe{mnz6`5s3#qb_!aPf-%vzT&8!*2M1kFG<2jC5{@*D(p$u
zQI@*C;+UD!$KFsDW$A}Aj+$Hw?91y>mVCd%-S*bS{$iFCxz`dNPJBZBm$GGF*L~1b
zEIQxOpQ5B9>v_^MDrnLSmPe|lGd-2^E=``hCQ;-3chA70Pg54SEY%D?c`9_*q$!Jg
zmS`nfdPi=XG;RBqr`n~Rr(?s6rtM#oYEW$H6F+U!^b=2(8g<X~Nz?m0<2;L+i7cl`
znC_*jOH-D`tZSFbV@s^w#`N5L<91)pX_q5j_$;@&e)3$|uFrEn^ene|{?af1)cF}V
z|A{;^`99M>=~M9hzekoEFf*_yl&oLCrkdf@oUvL#u4Exs=?WLws0-~%UlvK6UEyYa
z>SABjm&FRanojbs&P;lAf&I$ug$h3-_7(SCp7U5I{acFHx#>z1mPxd{WG+1AFwgJ8
za;vkMe`2f{7VkN*!pl*MAtK7d#^~#WT9YTi%XeK`<+XK@;M^5qp1ZCpByC+C`&TPs
ztJbv*dLoNbWmiXC@4DKh^>u}Nqjt>vDqmS6A!gOqXAB)$SN8q-y1s#TO@gjR2*U}{
zmF=cEam=^Q)c=~i@gmEL6nX74+nh?)&N#a!&HQxaxwtKxQ+!uM3s;9+vJ!4DU%NWF
z_hnGku5Vj6^!{6$lkR={)}qVvmYBYYX54V=m{Zxt$)Xym?b>%9T{^!>$#-4R^wW2q
zS$*Frt(uuvY<)Is(Uo<*TeRf9O9juq_hl*T(YT8B?ExQ|6zd-I=2xA!Zuq!u`rcQm
z@2gK%$9+F0zVFA?dDWZK<3GPL-~Vmx`>L1SaX*bV?D;HPz|6h+HrxBMmA86V1uOq?
zUm3JxrO>$zvbxq`JNH~*zx$c7gV`WSuzkl7HMPP{f1O8SyMG)t=-b$n?(<mc_K#y0
z=T=2a^IT`YytV4a(d_)GCu6Iv1XeWrZkjax%oA?0vR(PCdWE&pF<SnXo5H7UD%^QI
zaYNONqZWLdXB_u=W;EOKxXd%de@TmZe6K9~vd(#(O1$`+yK1+8o~zhr9Jp}JGmGCp
zx7V*Tnznt-)5l%kHVOYV$`C*M!p(ZtMVV)x6IV;GGEcvLs7+_nvd?E;`c+Gv=kZ(9
zug`Op%U|O1a=)!@hB>cn%YI(m(6@C>y6rWS)t2kLYO|Drxt}-*|Ga#FZ`+3VHLovi
zlDu$2Y|HxTvM+S}CtbVHw{6SvyL*$wZ_m8?r1bSH-we<7k!P>uuAP{E%lGX?k(17E
z*X3S6`>t&F@4FxRw(oh~J4^h=?|VPaZQu9(?EAXkzwa~fTkP-6$|-n%?e;F$ii7;#
zu?h38T&hqt4Gr9z_5N(-4T<wRj-8Et{{ETBUF)|$j{S4@`=r($wQ}*Yiq+xgj_tZO
z_2$X4G9gpmPm^x{d1i5b=ehE_&+77jZk&2nW^`93Wg-8qQ!UFZ_f9|eWtsKgmjV5|
zt}OTaTJq@I^V+`3OO2Va9sV&_b@WZ8r^*!-xo>z@@^8n9qn7VVHt$`2U&s6wv-ag(
zx9`4nefIk9=YK(q?!~^l`_$sz_o(25pZ9)f$gh4_d9Gr|?av1_*{xTr-*=n-{niTu
zag&?<d%hj3{`YwS|K1m-?~0p0TYNTJuX-_bb?K7b|6cU(*>Svg&G&umb>Frw-}{!=
z{>Rb&eQ)mc{(f8h|Mw&5{g<nc{aO;u|9euI?TPsH6<-eT`?=-!zRzmM_q{RvXIH)}
z|NoB%{QEcfzk3kvKmXHnb;AkqeLue)-}I|beE*;4{{Me{-t&crz3SEX{ik!B@BDRS
z&$xfQdiJvFed+#(!fP!|8@jjq+PK#6ROBgLuf6x&mouW_+w?{$566?~Rj0)p6g+(R
z*=vQuo3zZ!cq$rxUv<#-aMZPM)Q?DbbTpnVt%iA70;5}k;f_Wdj=Cq;lb@wGO;Rso
zOsKSGY54QK>VtW;ZH1%w)s_H>)<^C2_tnBzY%g79ZtHryCj3X0Sa@lIL|c+YTS`P*
zT1DGy69%s1(J>vB=f4*@Y19@<luanlF4f2?o6%meqg`Wpd+mw#r|caL8XcaZ9rYC*
z|Jr7BG<S4#ujpvK(J|pi$E1$zK9A0c8J&|W+Iwbn)<tyAdeJ$zqI14R*TNH>EghW#
zWlb(K>f9>AV{g=W?C`#}t!>MSn$U`F&h+k`FB*63DA;S!z3WBy?iuxaEPD1wbRX5|
zImOX)@<h*(A3et<dd^Aop6%$lkkNBvN6$5n-s>xR*8k{Q&7QLHMeAdZ?%aw##g10b
zjJ}s1eJ^(O-H+(|_@nPtME|=ReP_S7?KNwEalC)^i~g756BsNftkRgk>N&wVV*+RA
zgrbTGd^;!b-<%*|*|Pgt>8FZ`Un=@PbWHqV(Jy;)qV&v(ZzLwkYfh5$oTR~N_iuZv
z>di@-D<^)l_&3S0a*{FUB-6}EW}K6)G$&hoPPUyn`Lsz>fyBhb<r9P|r?{S+;ORN#
z?};h@Urce^IYqd0im&C=AkV4(nNveMr`j*`nBG1);pHTA&1v?M)AUbH&UiUFlXFVe
z&1pG5r)?DJyPY;IxpG>b=k!$1Y1y6At5;4he>uH?b4Jb1oL?(~0#;6muAJI6b4Jh1
zsWF{1`gYEkcymUe=gbL_GbhiSIb-L{CD*!oMP`(7&MLK>RVg{ES##D>&snvZvzl(s
zS~JtTh%>$RsguDHTem{n?U5mSS{-(F&fa}<w(t^1^(W3|DYN%i&e=C}&aR&h2X@Z6
zd3nz1lhGG6owQAyw2#a_VLA8Izn624-JC0QWzK`0v(IbJy`$;KzQvL0h{NSdk=x93
zZfUlD=qz-4sl^mH-#T&rkD2o&CeHtJbH32R`6>_RGwl*&j#|LNwSeu_e65KKn0L+R
z`L%#eO6coP0fDUf+))cTycSBVTJZg*u-qwOg<A_1e=SssS|nU3kZ&duP$;T(Ymv^c
zMcP`TMpdE_fs4(m7N<0dCQn?P=O~u^QOrSVi9?lm*+a3az$I0I5?;HO_?(j9d9b8U
zaH+qSUP#o^kSe{Y6PHfAC>g^g6(^;?G*IfR(y~>7%YGIu`};}%&n9Vx&(a4R4fYz!
zNN!-<>$qI{fK0K~a^7IstA>Vkzm^L>W^A-t@vkXrMcXUJj#(>SH?DYbaYgqjxi^OL
zYRW4W4dnkEH2O1frM|F&zOjPRgO$vm6y~2&;1615ldQO6)+&ijt6VRya{Ii>ZL^Y(
z@#=u!)xpN5wnC=%MW&I-Dq009(a9=)N^1^rF(0d1bE0ca<R-IYvs6<ynVs`eyJWTY
zN|t%bCADi&>SdSJDle_Q_iJsFv&Exb7EhwqbwAeV7uI|!r8(=;x|yHXO=DU=TWI|k
ztM%Ws*8hlF|7n(UH;Xod0E-*r28Q43y#lozABgB^iHCgDcHFSRF+h~(w&(#P9sb#3
z>;}4*C+QqF5|@zHJ#|Re@q^AyCGlFvO*fe~-D29*a#8oL(LcSXNqXIidi)0@9|cK%
zVq$zF#A2?kZxbz5<S1qDt-o%e{%<Dfod=~E4@)0(G$@La;WU=vUTkoN(U5;J<E2E|
zvx<gdo44Lol#~9v^(muK?=8l6ibfv`w@uEH|FY2N=RzaB!}5m4#>}7Oi+``QIILi~
zSwV1<vHj)k;)fI!l}zNAR&QLT)VA8h=#j~`s@2wuR$EP49ignUS89#jCKc~XDn3eP
z$GlWii&f9fGK;-rmhY@)vOzWNky>%GdBx&gg`3vqTrw|dQop-Pz2T91^C$JzCX24g
z8Xb=;UU6woaMGMrWchs;^NJuV(TA4Ij0}PY_mrDjaeic8*etNJIQH+qQ;U2j?&Vm$
z*Vj-)_m@bZ<Kn15hS-gwu^&Yf8~4QrilrBBeEV7~Yav6{L$TaIajpRI^2YtYUW+$=
z6!)r<V3;G}|7%H0pkA<+WO&rlsg06z9VLYx9Ef=(xlB>&qtP<4JyL5Y9^80P|6kFT
z+*iw34{u>pUVd6|Yv^l(ix&-qnzu&3mc2L8Fd<tm$=b-IXWM5%`L7=te-y6#`q4=1
zvyri}F@w`~gU>6?nH9^cS9!hJE+w=>>X4$Glaj0Rj`dorJ8mm=M=KjnQnvWCW4F{!
zXC{>cT`KXx$NV2L&51UPa#EeQ+ic-$)m&k<<Vk9!n|Eb1spl1$SMltwRo-3AWbto{
zw#9aDjmAa0pPjPkNz&+J(tMd^Ipy)X8JE{hvN<`$=H$%alauCXUQ_9NRyp?tr{_^l
zM<bO}zk+A$sN^ipNq2qXFkfc=I-gUGPaT)ZoVvaF6sO6l`7v%<F3vk_TwZF<F*sts
za!$&;PR8|jQnuBcIko4^nLB61L}uT3GHcb(>FX`euGl&2TFtCmI%ikjJbUBK*(-k>
zTVHnl%cy<wt-*{n<i(paJ;!IZ|2!A9a_01%p_x|$L|Vf-uGw~dbINqh{rBd)U*wtf
zJ6hhXIpZRF?m^92j=etXzn$m%d*RZxR5$js$L_Rgc9aWLRI{%*w|jf#k@5zg6%}k1
z7sa=qQ>eX^F8;3~d&LEvy=RXsN&d+bmU{KP%(V-`S1)9$hW)L%Z1^`cHtn)?Y<9aC
zgZA0dscubvo)=jEp0c;-d?$0>|L=?sZ?c?uFNW1#-H?{Od`0%_?^A!QxZ*84KV(KP
zckDIYwK-<JSF`qB%Q3xjc}2v9EtA%KpD4aJ)6yf})FYuvHojUn-u%UN2DTfYzsCJ+
zbtwNE-!V6#X>VNX+#5O_@l4CEf86ftdiL!7nwx37J_dIa9X}+hizUrpo1`OlOQS4p
zS?#SAy=l&|H<c=`I7^;S$Sq4;+vwZd6{tINd+yBOy@{cBLw}#Sc7XR{)ZWgO9qvrI
zB^!G$ZMJP~{C-V;!p&*CcR&1_aZTv!?Sr*<uS`qhDvye?xGvq<_CWTY@A9@w71yrL
zxuCW(;KJ5>Z|>fE_xGNh>y@XuSN`nk-+k6?aYmO{>N(TYOG>(zM0VU^dUt9;@B_BG
z2ORSraP51*RoC^iw~Jq{GNt5B&C5II=H6kR_fTqG3eUZVa{nGG=xKj*E8t(&duc~+
z%H6cPx_x@FlS}tL{Ib14_IbHfZ}rQVbRmw%wl^B@o@l%1oB1_&Mu6@4311#r)jjdp
z_i(H3!yRw?MLBDq?M;=K_ar3lX`=15dlFCYDPPz5_gF0Uv7+u{iP}bm@JkkTk2P~E
zs?~3AQqS8ty@Byub(#5N*|!ac!=H<Ll+`cK`}f~A&rbDOdwWAoUt?|F(|q@vpWi+`
zWHR4L@2c~>%+kH(seQF<9u2K_w>#5c%vzV?E!XmW?o5$&FJ4<bE!_8VS>3Do?N6^S
zd&=x^am~E&iG9y<?p^E<e~}&c^5gY}dr$B4WxU?f_qy`gvvR&SE8^bR{OewCcW(N(
z7iaw3mgv21Vb7Ud_i~Qk%M<BOj?R0Vyl!^1?-OT<SI=v2p5OQQ>9V)a_FY+(7q#Zy
zE8TySH~KaA@xJfUz1ep6MzikwFaK_QeHY)nHsQ~@!uq?{|D3!2JnzNvdA)XW@6J8H
z_3iE(U%r<KaUX>2Kd!uYXKBQpzP_pc=jz_}O%wV5Q9-`$obKJf+y6Z()_ir7$3-LW
z(bbAadiOsW+<&Z{|Ij%8v%dak^Ygt{{U6NaKU<&wWbyv9&HT^K_j}f#d-3GY%bmLC
zz23i-{QrS({q4Z>UxN34348w~;QyB(fBOgXK5_kjm2m%~O8-3#|8Md7-xBpR-o$;I
zG51^g`ESYhzh&5eFL?hg&OhUnT%qs&@1gx)qvwBZ`2W4h|7(>0kH-8T&Glbv;(x^E
ze=C3gV}kzoQvdJy@jv_Ze@>JCS-Ah(%>JL#<-ae;|2|9q*F5`QQ~v)foc6uz{`c<s
zAFJbktbhNjuK&jt`QM%Pzqk4SmVSSAuKcg%`M)O1|Jm#RYoGp~75tGgb)OFZ|Go77
zpQHcw|2fA0=Ysv;<MMy+G=I5fJp0#T7rrU8-&@XWVm<S{WbVhue;;+)UikU<_RfDk
z*G|1WIp@U9zt8*UI*HD!D4TaR@)Ylqf1l((o#PR(Yx?oyBh%sjMpi?fgc}zgI(G=F
z`YnkNRAT61(8+sp<KkoY35u?LDv_6-cuvs_U6*q6(o^plhJybBIwm~mpKY1>>d4N^
z>HZ6BTK~yNO?eTx*t1*D^;Ae^@CyH>R!gO}z6x0#xiN3=t<crs>*9~Lsd8U?b7OPr
z#dV>#&EDSL$d>z0!Qp_r+n!3peJi3DtYc(iWsnx|Ilz#}%q}Dza7Ut%k%e7IW!@YI
zBc{`w2HAcWBsVv){97R2;&(vdU<TU?@fm)1Z+*>T+bDZv+S!C}xorG078Mg_o9Ex<
zmvdm?OZ-vz_?W6j`-VG}pPvaWF`uun@K@<;(KY@n4&1FS|L{OJWQD=KKb72)r=k<)
zFSPyrMe0%dg!PU4YI(nzKe>NC{_wxQRzLEY8LbsQ9N^<IxzNmFop9kGpIt-1A%2?$
z7nlVM{wN&gH~V7H!tcPM*dk~zka$GcmBW!mG*TpyMch@P@u;MCMIei`=Z1|ff?gLs
zy32bD1bGO1X-qmH<Y!>yspcPW$x~zT6d^CsIcq+7>G&TAV%6LIWz%V~kO;?CgK&<`
zti~sE5`9f>rU<u*J?PoYD*oW#mdocPVmcVxY`;I*>~ELakk}@Xq!7a9%saL5f@E66
zlr~9)){-_UrL9}oq;eKqY4gc`aD~m^ackn0!2Au2>_NpASJ^@fGfdgTV^dApqhgnS
z4U;Xp(ReMU`fBL)nDV=h?Xq2_W$bcYzGdwSvr4~3W*9b<-AXrfm==|@_GzQSPN7w=
z*C`lqmEYO(LutXy15DCuHXP;?@Y#6eQ7(_sQKi*yHl6$MwrBHYtL$y@tp8#k+`ksq
z{5IiM+Um30?&R!V8+pHpnQzDA7H__t9BtWRR?n^47<Ru>$@sSG)vnnGcE8`ZIicxe
zgx>qqZ`Zu}?Y`fc+`sS3i^G!k^IpDw|NQ^If5H=*891*vI5LU)OgO-<*dyS?t-Ph+
z6|XMKLuY<>7RMHW?R<tuMWgo^vPk4l33QVve<SEFds8mxxMIIek*BI}#io<OZ|aJ?
zGy*#|dFe8rpX9B(-=xOJXs1rFuhH3@%V$mB));@X{Fsw?-iq<+pYxIy{!=cx@|Iq?
z<fh)b<<e!-zaqhb_PKZ2g2QD+LvO{Wie8N>-d|cCQ-9a=hD--<SVU64X<4LP(+^I~
z<|+Rf8x}7Je-Sm`;LypcSv*=|%kwyYh3W5kcWbp?$zP^5kq2j)GW`A89I)ml^Ob)4
zjuZb{?Hkhse~ABA`0;&vJ?o5Rk&7dF|3?`+usQG~{o~|u%9-_)p~G=QBmb0$0-cOG
zX^}q3juL(>3KJYBvOa8foN(^gtkk(eYzwWFXCL77Ws`fiW{vgZM#(c5KF|Ap=M0n8
zk^Xa4VkQbqXC2&yrJ5#{9a(DG>*zg2pjoSAAz$H(tl&EnI@VMy63xwZO^gn_nHORv
zaW*5@G%9*RmB<oBT~1GLt)RQ_o~i78+M8d$c+vx|a`(ee1$~l&?#wthMa|5Tuc#<$
zGPhRvPKg*kw$ewz%8acVj*71W=5xm`7BjW-oZ1&OeUanRu<s|YPxLBVk#u!c3hV0I
zFa4(OX1=$+N>wL;Gdp6l%e9S@p4u!k=~ugSx%11G<7?)1<WJx8?}{A%rgDM&tFALo
zr#v(In<SC3F595f@J!MZ*Y!tij>S#b$djgWSpPy!n+c1KZ-&q21}3RDrdvEEtVPuv
z+g_?A?HA-b+7-O9+tq>TaOOGYdB(CYeb`epY;JB2U~`tZ6tM7hqDD=I*=Ct@?Dp1s
z&et}*nE$sxA;Zmhg5cC+Cak)GS-w5DgslrqSBJjHQhFuT;nCu{q0`qjAtg}aeA;5c
z2^-yPgoN%~SaEEp=*nK-P0^E{Shz2VJK5LrI_Tk-6UUEyyx89mGg*Pv)6z^bsA$sd
z;5mP`>~uQF5NIfHWue3I6&GD!O<J~FWT};9^VNe}OBV_~)d;`3D(H|`Xw}ny+V88b
zpSsVeJ?*IWypI!(uMt-X+t?kuW{bq{h@(;58z<DRN!i(cX0{8f#_XwFk<+F}F0Uxl
zUVK+4<G9o0OG>R<=BMTcS?spCG0SYmil?6G!MAT-xVBAWU1@G!^6jXb@60x@+RK$2
z_<Gu7weX#%roPS3m5zBNwS9Zk&fLQG=-5}+!gg)`${91^cWho_n4&zVLnZSCfzPw1
zE56j#ue!=T>3g5bUZu|U)yY8<zuhZmc)s;S&Gpl9f7v1qFv}TK|LmUhOX-Fpn_Yp+
zpWpX?Fi9NxdGx)roXtdb;~58-cD{+>af;*e|8YR*UVg{t>ZE@`5qsad8oE0DiI<pe
zaZF{~`+q&bHOar#B98LLeds9ENmlS)a@6$Ri9TVU1QqqjlPZQE``dL=<e4jv%T^jr
zjFox%d6UIyqqM>a3*RKjIa{8I+h^3X*(R;4V22v#&kgQII*H7?x1TKjwsCSlPnxoO
z<SDCVg%iSSo{9gDJZJmu{p{qJG|TJehg9}`m?Zl*!^8Q>p(ee;sULkZ<nBve_I;<n
z`2L;@-|ipBdZ(Gp?_QH?zqnFKPV9YqU~QUSapmdt)4tYa^S;)*9CdxizS8yOvajQx
z&$@na-q#Jiyl;}ZrEi`NE8E<C_D#C=?Q2Kom2FyF`!>tj`u3$`rrUP!&CUOP>(&Fc
z@7vGn=H<?xee0E+`R;$0d-L)RTi<y-t$gQeSq8q}3#z#a%lEwe`@Zac^aF-^^Mik7
z3!2YMKjhZ8ILv>qpu;}q5m&#(QT4p{Ey;Htiap<PO#9u(?(e%FE6F#^`kp%>oV#jY
zlwalP-EWH`56^k3zr6BHwq5b;=Q7W&*}t5vUiW$a=RKF~<gG4r>wTHZ9{bWgzUtD<
ze<jP^W1j|3ue`j{uViJo?5l9|s%sn1l`d(%`zq>t)%BzMN;l2l`z9*QbTzx&hfbT*
zN=5k`ci9ul+aB0ns(x<WX3qC%;{LynRn+%9aL)TN&sc(^o1Llo=II~DW{ZD%R(tKS
z<ok*<>2aTDKd*Ui`~Rm!`kgz*7t2>0{tKwcx^K%Nm?`G+WnESKmVb(y%KyIlUHAL;
zcDb+h_y0Z+<ga+}{ojYzaeE#q&%bvn+HUXB^!&{-=W8yw$N###yzcqT|G)ER-}#d1
zZ~bQP`l?&a_rFz^hrKx+|NY})`#(F<?I)$K|GmE0{@-Ww-G5&D|KD)i{{P2xyD#eg
zmFbcDPEX#$sH6XUv(1aucC0ZDY-jfTv)=dH*t(HJf4lJBxa$31UUz&|-p^xW|K)K9
zuS)0j*?TiPcMGsM@|)PJ9zMWW(YUw5QJkegqQvpdYDexpj`ubnl=0cg&SHB)+ku(c
zNnYg8Coc!qKL^=O4zWGiBR9uUqQ+73N=K>k-pSUsvMm3M#J+Us+;O@cz5j!?<E_U|
zpH|xn&9UBf+UY~Ht;rM)0~vdhFNgHbIEcs`)>z{#Ug9JvvhToQ$NP^DKfHag?DauK
z83#w6hSS>noND$x4&JBKWAi`Sh5e5`lgU1}H7?F2E*@L#e0UhFYn-fAcFv60{Na-Q
z>d*UxO%579aR|<_<=L`ZM91;t?*s3(_lNm73blywl{o9!9F4KDkGQfse2Xh@&tb-f
zLlP!#JqoT{4)5QXd@Qx+z~AO$X>0boq&TVM9C5#M#5=@^<<I`?J8m8-hw|PWQ`zI<
z#&Z1SYsZu`95z0?w<T|G{cu<}`tY~a?$th=Vn+^JyByR0bJ&jMNc}$^kNPW{vSOT?
zZ9H0hJQ&xw)V?{Qv1fbDYA0Kj?eBNHckl72iLq_JbKL*Uaa)!Xjek5EMLfkGyS3VQ
zPVw=4rM<8Bj>n|Sc45J8E2CX|)_Bgo!yy)PymX4^*4Li%{&=Rx?9S|Qo2KnC)y8Xy
zjaO;OiMfAvmGkKLZ!xV(*~`;nGr_^BJ;J7A!zsoDo3;yHYjQZ&|M5}~IK9c`(55LI
zTU5N)rkvhpa(c^~Q#)9^*YJ36o#Vadh-XsHiMF0ooqxRd^Y~Qi7%tA)r*ObV-or;;
zL;q;VnJ->GpPPJYvVBgi@j1Q6=gb+Ovv+*Xz419^;$Hm3yKautQ_a0Idc0<>;rMr}
z`gCuC?@pQ1+j`FKICE-a$>}XM-n;%d-d=LH{eti2H)n6#oZb_2`g)4*^`4HcQ+%(g
z9GiB<{eaAw=PaI+=A3(=?eoOi=U9sV$vfwc&N*|w$LBnc|3?}BPdew1hPYpR<B`?u
zS;2BDYPOfrlCzJOa6EkC^|a;m1D<n_O#JT1`0YM(>JiJie`|cV{qfy&$Ny%@*;{Y?
zciIGWo$y>%;_+SO)WS6v(wAJ|-Wss*%muH_ehe;W-aYX<nR4dc93LT5e-Yn6(WgEa
zQciN@9$!D(Ay7vDh0j^`sfTBu3EX$uJ>|`5slS0QdF&4I1bLgBeC^|<;(Mv&&XF%A
zhpHDJdh6`_L+78f?AlBFPM=h}+x<euQ;{`D?`}}u=K$s-eyX~`#z$?wya`NZaeY4V
z#DY0i(yp%BbAvsa18j1<GM`-Fy&F8g<}&BifcYYq87vMM>xMYTp0b`Au)O6sm&zrJ
zrNJJl_Hu7s<V!>Jc~9zX4N=Oy=wlM%|MyBOkFV)lmku4@&M84My&<8w`>$o6GnKuh
z-x}(}dU>L8P{7{MnADRxXAf5;pAY<UIX^lyajWOtkSjJ%FWX<eY-f8d^=QEQ!=V|y
zVQkuA5~jPCFA4PZ-5&eYL;a1n@ROr4Ci@Mx92JxaE4B?U(RKR}8D5qfUS1ns(HmZQ
zv^%#n)Jyhi-qGvgH9^7udM|k&HLE^*y?X26t|_jCQxEIA+z4U4UXmNpzV~EhZ$#(Z
zh_2G>N21*GzPdEtjp%)QL!;zeT<+z!%wcIu!!%58T5Sp36MZwm=f<t%8|}T3GgJ3>
zt&N<$H}b>I2uYh`E^lv6uDv+_>rJa8mp4qls5K?@mChc`xsl6QIkSFVn<(KpBR6W5
zXs74X8|{Ct`#d$$u=QQLG_)(`)+*WC(qCPZLR`aaqAh#<r}~C&s*R4!xthxwy@A)&
zJoQ?N>$QC0=pAowFYk2?jd3mbdplm``pUP_Gq+w|(0XW3ZrJMGVd1B*MT%PNbB#H@
zH|EUV6RW>QNd1X=)9q0|_0E#D+ndhD{JU%$du6Zt&a2^ZU+?sM4y{v;OfS8&w))DI
zy|H)B-klL}XQAn}o4I$UG~cNZxx3bO&nemPn3ThZYa?Z1?>*JIzUiuWv#i03zt<8{
z?j7)ro_6&p|DWhpK5^kJ#|q!x6KZk2yY<%Il)L9t@9lqc>zm81M{g}|r$&FYj(!sA
zyfrlLukX>1SG^P8#22phcp`e=FlO%-Usv6d=v8}M4RvA<yme){cF#B^lFiTFLMP#!
zY7CcMykN??ovrsfTVkh7j&;br^K<E?Uu#{zK8{aZ^B^kZA%os+KAQ&ze4R~W62#0B
zWczN5xgC6Z^&zKQ!U5CUB7F}dS&~-PJ}78SP?n45E&CV87v^}w`KAO*oRFU3VpCgz
zdygJJjbo2{XjyYJy5|u`Sb~vV^50u``el8;9ku%|dsO$@E#Ya8l=7k#mtA73b5`&>
zYh#vdReQ@WEzv|S<;&8;{AG9dZ@xY8=xyz5x4)mc|2Oxx?6rH+x{qc3oH^4TG~a#F
z_V)gVtts|uDS^k5ds%K-ZAo&QX8N%AvDv$%udCx`ym%PLllrPPX)?ouz;mh710MIB
zy=5k5d*SP?c(r?$^Wr{)MtdE5s(dWPBQ35~G{x>*Ldw0zr&2i`w#Db{OOCylCZ~7I
zS?*cC@Wad5DYr^fLW-ZN)}@w)9sGUv34@*M$GuP9Zhhcg_n_k6qv`)Xr0`!!j(+y+
z^V7S@U+xO2J%5lIQjzjBVyS6~Ut-j@v^bOa9ieIU^IkZ$?X7ZsF`+uS?(mC?u3MAD
z9wqA~r_H;Uy6kA$x`YhACmCXyn(v<T9Xpz}EMw-flMPpc`q=CW-JagBz1(k?WFhmw
zC?{P-F1g~KYt_AUsd>*0<I<Tfr%#{vGLS8!DmA7_?YU0gl@_+=deIq=T+aP`!m*C!
z+!Td#8``e?xAFVE$A3lNt1q$<>aI@?Ue1`ZJ9ER^mmfa+ZvE!9tK>rGk1V#_fPL#Y
z?wbT`WP9`b&nuO~*?(Db80VhdDwe7f8o#U8%eC+1D!->Ux4!<U{F>D^hv{q9QNQee
ztgboRbKbC|=IqmZ?auAJmG8oJo;Szcl2@j=uR8Xoaa&k(o7awcF|BqlZ~V)Bu+1Yb
z&vTdFRle%`ci&}19De>FFYo!f<5x?wXZz*N5sN&%EjQKl;q!ZW?~ZwB`5ilbFEjL9
zZqC`P&-1QU`R0FJ`_gpUyKl#C#r5TXo0k8zEdN*B`(JJEf8Kll=UL3ZWBCl*-~Si;
z@UJfazut%6Y6WI?@0U!?)?V`N<g#sy*YjECe_-Y>;5z<+JG_AJ{0F}K1^oPl0`i5-
z`X5=u3x&6T5LsU!cKw5BeJBV2&E#EqAJ=`nJ@4-OWpD3^-fDREapk>_M_G#$-+xq4
z|D^c8P}#poCH`NLZ1^X&^iMMVMZsl7n%_UF@BgHwU!*brlkWCUI`&06&p#P_FEYIT
zQrdp=YP%N_@x^Py^4R+0E&4y0^?!bp_St;;XY2LF_lgT_p1-wxUu^#Uv(5HmNBu7j
z_9a&8B`)k=T=*}Y$~*tT?(>_zFP_Kqil=??USA@8y~Ia9-QT>}kN>NW{8#_wB|-Uj
zLc_ke$$zoGUL00m>Ky+yBE2N4{A=X)uM@e`p5&E=uKyZ$yfiYtB;k8$oPJq^c-gCS
znZf#{-s#_b?Z2k7muBRbWtM;QTVIybUzWT4TdIF)^8T;!{NMB4zZLSA6{~+sw*Q_e
zUuG9yUg%$5!v4Lezr5&QdwKc%@74b0sn5&m>dUglzt+z$t3Us(ZvVGj`5(>ZKbqJp
zn%pZmRo<W2`n`O5dFS!(o$JfH&R6u@uPELBqd333fBE;m?G=;OS4_VCW1@X!pLpf8
z_1oS5Uu_kyXf3apHNSFp`j3|5KWFe)%*+2VdwS*E^*<Nb8|R1roZ|j-8voB4_g_on
ze=f7HTK+#Owmo_2`d^dMt5%!;TC)Gwisw};%)i%)S1pkLJ@0(wrtd!&`v2Z+{(IB?
z$}REL+uxUU$j7a%|Fw4g?={D(*6*+0d;Is_^2c?eY5V2>?9>0VPW{he^FQmK|2~pm
zvtfIlM}PH6@!#8)|JlC&&-~*xTd&vb*k1E*+x|bN{fk%VaPm6qcOT$rbExe)z&+K#
zM0)d<?h73^rvGg_(b1JqtMb`|L3!)V@V{5L|DAE5mPz}s+vC5tu6JKv{`cL!J1gb&
zCoeF(QO@xs{Q8yfx>xr9Uh#8URj&^?{O@&m?T6{L_vd$f++X*e|9_H6z1HT<u8%ps
zxYxg2Ui%~b|NHI#IyCD4h}Zx1|NqI}G=RB-k%^s!!{CF$p+*KVy%3HBhr`W+tbRTj
zAC->vNSPPCdGS&C!~`YxNjyK5PxQ;{8_fB#P{`S{k(FC+j-_$(kxm|Yt2>?-(>-Q0
zXPz?g_@L%D&r14P%Bjyv7v>2`TCMqYaoNSi5nH)hr9_qfU7eS>zo|Cr+M4TKsmt}Y
zz7o{FxXyXvvadJ4y$RZ4`2Ew{*WdLY98j!fDcrf~=}CnyapSx<KMbFon4})OF6XDw
zvoo{Ii{HKZY5d~CBKOI9xxY+aU0D?#{_kP3YTJ!X>6h2#{x*AeXIJ^>cW-~2e|T`H
zU06TwkHx1ar=}a{zx!kP<;A6L^|ai-R^Q&-+Ftzr-Cye;A08dow(GgH^!1b%*H`Dy
z|7TnM<K5%S^Yi2F{{8y-{`LFw|Nqx9{!&+HV3vwdXkyW-c+kXY^kYG@pqYhYi-=c*
zVw-qYhGM&9*^b1vXG>ie80}_MD0ON6a!~4I6L|2b+feGkqaM~X7LOS%q$d1R?&p+f
zIKXJ9CXm9!Au^L;lBd?p156%fGZ~nD+)f@~;)#e<ofek0b15@V$xT&e{t8XCnS3@0
z&zRGf?R>^8uw~}5*#aIP8d!=>c`lzLbY-Rbd|{6V&*wM#J$SxA)F(k>QM+8$3RY2*
zR~k#iOtfAunUt1raOupXS&eKnvI<@<U)Z&ZapjV{1g%xe^DZ>9$*%d8#lG&C)azBU
z6#}o<ZY%rHxOPv~hlA_)*D<_dSEvzi+IU>7JBLHD<3l6ISvPCltx5sjO<R=`R<GTr
zT5?;L^WHQAy`4{IMIYjPv1;}^&bNzh>+Sh?>h?OWFY^NQ_kF*&nrZ*vU%%ILX|tTk
z=hhPWSF_=u?wSP!+`QI*HXJrE(JAB>imuss#P9$^^D)`u4-9#XYjliG8lEZGbW(kF
zjS;WTb%SPJ;|l`CyoR?8HuG9upJRO9_Hn}D^Og*`%@-^mOmM#Fp<KJ=lCSk%XTAV$
z+0rZ4FE%h=i;SQ9mCq*OZRz#+ZdtRN3A1g#-ArA)x6DiF*Mmpd`Wyz^`I)Z7e!ru?
z=YUcV>yeDd-DYwh7WG+6%~NKwmt$Bm(VnkT<q4<8gOo|WQGBYCeS>yZPMckv`E+_*
zo8__>S+hFTW@YbM`D=E$Q^NCk8(woVF08udr}0koPv(k69ez=aizkM?(pWk}ihmXB
z{Hj?t%g^>lWvyKGFRMU{{qp)-uh=#mveI6+`QER+>-WEtTC;J#RJP70g(dP#9Ot_h
z?A!d-`uD!ApZgUK{r!<#{h#B;G>1bRM@01md$ePoOHJn#h-hNz>yA|`Sg`w<s$*@S
zLHwUv;rk7K=r{77NnqB#amePz22mZJB+=#>NBuGk#Zz*U^)5&pPx@gfS>TgmFro2e
zkp;8l1fMjUFN&vA%$ld~eUoM|J5q4siOq9AzDc+IEh*9%wq=3f*$nSuDY4=O%u9UF
zW(9p-B))#z)-{!9v!63w@Zt(yFg4+A4`Y%te~j`X`3Wc3xdYGmHEj@Pc+>0B`%$`=
zBYiQ`lNSZ{w*nuvO|ejB<@9j>XCyR9!E)zGRR_aK*+I#xSeELP=6Nspo$}&HirUdR
zdcG@~g<nUttJ`R@l~ta){3hqS`cV$8^1ZKPKQw&b{ZO>OVwP3hrzT0Q=Y?EV7p$*-
znKaY(O`?C;?dZ^TC13Z(eqA+7!9d=ucdAZWBSY=mVEMm~!uRL2D%AgYe9e;ag*_9S
zK?9q~gPjsP4pc6C-S}eDb51#ngOyLc<HfEh95B1FzNylnMImR#L9Y`A!t*|~=mjWp
zN8i}k+o;24a%ADjycN!J%Y4{$Z$ETz*EpiWSD0q7dZtkB0hg(_9<cf6XkKhn+p<{j
zZH7;Bl-SlATXg;2W(5i>Uu!tEb@R@Ps$V?+E%yGlL)bEDLGO#m6V(fT&06;9fPs!B
z{~d+}?o0DZ6>CGz+>bjV!7Q@CkS*d&pHy?hQJr;@x+Q~>CoE~$p~W!Sal>mSk;4tU
z-<2AMW%<N6KUjLKqth@oD)`l{lpEI#*_e873Mc;%xq0-*O2h3wQ&`1BH6IGD4?4DZ
z%CZUUT1j^AXRP#EwtCh|+o(eS@Jnl!{b&l+NsJAi{W|*Erg=yAWuDBRbJI$F`;X^q
z|7B`7y!jK)$rN#b*~lQ4JLS6VP0@q3$5zMv`=Y*YlXO5`;e_3?DG^SBuMAq9-YgU{
zUe6Woak0zyO0vlt2{+ec7v-u-+8srbPG>l{%)IE+shPU+-}yMJEgE8LyG-^b`E7q;
zGB3zCE4tc1Qh5)v>9XZ^9)B4bK1_bN(rT-%x2cxQ?Xs(aQ(yGOrh0_$mulHRxAds4
zT0_z$DHdtXXAFjM*#bpNBovNbon%qA`iaiXB|D9lc}-g~DekjY#NKbE8@&0PrhBXm
zH=TQOLv~S5a`T2$VO|TSZaGsly;(sc%Fn@YD(|7xLQYM0--PM&{;pZtbA9DSt^65F
zw3Zo8Ug?t>_rB^}%G&Q)Q?=uJ`@;|HdX_V})GoDDIP!~in8nNRwHY&wcij6F|6gxz
zOwmE%c~6oOnC8y*=h){x|F=uyo;APEbEg&TmVL6|00-B-)=AeB`R7JB|BK|f*nRXt
ztH{(uSKV2Mf6jW-Zt@_}!}XTYq<d@9)c4*Lstz-rZdI6JG<A{4@)ag?w0sYG+*WFq
zl{vPcD0fAo_N!XGJ&E6QB>F_k&bGVum@b=l#56KgYhS2L*wG6WM-8`q>|wl@B>P<A
zxUN}HukOoh^1?GceXNRNe|Ifac|G;ylAKRRm-0L{2(&EC2s$%cM4IJ#;my-YY{t6G
zsm~1NTb}J`3YmTLjJId0*o@<|i<dhc-DCay=a#F%Q|CA9tzPI}JZnAcwI2d&OFkP)
zZGV-0e`D3{==;y|>!&@twruy)b5D)FUw*~)b=L>Y*jKl_uU=0zy~W6u-6U$VC$BzY
zZQ;MUhjzZ6wP;_S{&B0c!;?PVy`kn^R+qXhK7(KImPT)xcXrrY#^m1z`rHfrcK^*?
z_47(rsC4qq&R<t-m$j_SiYX77dCPRl5|>p=&wucKW_z{j@<x}cYTGx-_uYkl_A)eV
zvF$yvOIcd-+=R~PIgBDNmEG)&JST-*dZM>{XGiv=;(4ntsk^H0>Ym+MvfM^hD^h&9
z`PGwt>+b~5Wl%jGwMyn}=OLXBN&9Zj^nVq!U~aL&OP^bp-bGf`PMey=_;&BRK;fEJ
zw=L{*{28>Ot`ttr+uOgnBY5kK%iBKi|BJa*`1AZS#c&(V3AVMeE4Oy9e0$k`ZfqH2
zh(qc0HJuY2C9gRBGrV$VtHWK_kfQ}W+y@0t><M=}Ih{{b`czAZ$KIYzM|(VF?>%Ik
zac;*H??~xJM&AoEGemQvpLoh$35jb?ymzgE_vVg^bulxlPq0h-Mm(1ceZJLQtSe&g
zUf%8=MafAI-`<q#W<B@dLB|6Lp+|2z`nQBC3v#MBPKvRd^CY0}sY~axf=Qn%`=&K`
zz9{L`X!ZO$vrjX1zSd4pmMxvHkMOCq-T!fy@8`}ti)6ggPTu)-QD#o-v^lkl=5}(;
zTX<^T(rFiLFRyX9{Lgdp`X63DWo~WInPvV^jLA!O>lyy7cl?=!1g;5Q|DQ9rsB+fM
z1}V0-yEl4gu`Ik*I#;$VGo0gB_rC*2q&U06@0gxhyHda`%4hx73wKWj+`AfZ@8N`+
zuNUtBognaV`lgv7n{W2;zw$ZHvvBKC5m8BBUqy-SPeX)Xh1eyX6`mCRto3Yh!rA;4
z_hcq2_8jr({=h5sNY42Z$9q8sMZrmZdlDyT^i43i^!SS6C(AoeT|AF?c1|hb`{FqN
zOJmT>3Qk2U2E{U&q=lEh?R_$5htQ9cd<y~|E%@WP@J-)oTdxm0BF`S3`TJn}Im`3s
zIu{u#PX4mN>)VD?^RIfX-El43H(0yt{3Xp<?02U95>dGF@tW?W$;@UC{>98HR1CKc
zOt@YdYn%F@Wa8XXL*-j<xjDX_zSVhwz4iJ*gDZ!Z{CmI^=fnLdmZ#3=#F+~<XT=3n
zZ=YtFCwQ^vp`*0Gx+z-&Z*PqZv{myJ(wp(b^oD<BU|Q3}ovpr-YkP0iEW6e7EPdJ8
zn=^R#&TW6QRxNwmvh00oImedeoKwrawk-FaTHdo|dGFNnzb(uEr&hqWyns)=P;7aj
zoO;2kXC1y%6HJyD+o_khEids?FAZB>8mC^Cw!AFwd7MJq?KMY2C0GMxTmz@5R~~Z>
zYf1N9kRBj$q+*tO$+C3c6Y0hKp1W>PuPj<#_fEZ@?`Y*OR^J=TT`#D+?Rj3o^&)1*
z^Tu82VJsQVLN99EGV1OvuL#R%3R6#PP<+|=JX%1bZj*Y`Dc10RE-#vtR<tO!#N-@p
zJ-58kDx+?Zdh<Eg&P%Nw%T{#ot!Q1R;r<}K{@aTFxb*Hr&wJI5G>IMUnf0PmNV8?p
zidL@H=3Or)7-_a{(&!7zY`nChtInlu-MpeMmkIka`nXnhwPj3hTRGM1MZ4XLDOwqQ
z(==uzy`0sgIXjJ|-*1K642?<uR?K_%vT9lSEVq|kyH-ppdolCU%K7(>Og^?^vYuwm
zs~2uJ(&tHOcHGi*uXtWml;Qp%W7f3i%TB#)X<9KeYUP45t);JC%xKeGvM8%(UdD2_
zSG`;sbE>kIe9~Nd?bTelS97MVnlfqC0;yLE?q#i;w|th^%Jp#>-K$p4J@;zax>f(&
zQ(ky)kXv?Z)s{t?i~Uw_jnm$iwt8FM>e9TI<w*=vl(d@Lw0CN)+R>M>h%0;Ns?|H!
zW$)VeddIfadp2qBJ*2(sSoYpWtM}@?+WSp=|G(Eenbz!nrG4;M_5ry!2c&WialP5|
zPWzBq&OxJ`eOfw4g5DhQT60+M&EdE=$I^0+CgmI{(`k;%l33TWQ>bObBAqGA-kjW~
zb9&#KQ^(dUI`rnusW<hvavCnZIeSg#{JS;hpXr?2wfr1Y?s=iN=ecq(tjf8l^!Ae0
z+ly9fFS_Yowp)8zE%&O~+p9ruFZiv!;-q`MZteB9+-qfTZ#3oJ?0S1`(b}ua-kx-N
z-LaSD_OZ9O&got|^)L7CrM1@{>E67Rd+*-b``>gQyjy#3mhOG7clV|89tgdAu<GqY
zt-QxZd5@g*9{H_%?Dp>Fww#l3T0832oQPU;ylBm_HofOvdN2Ccy_}}^s&3t@Hl3I2
z);-_!?&U7M6Z`buo?G{}?A_aKdT*A!dv{9j-M@A3uH`XISW^_2_b^QFsh8d-z4f2W
z)_>G{_t`G*OVqoMR{3B3@;@c%f6iL})#?4$y7k}N)_-Zrzijndrg8a?p!{EH`af5_
z|FQ1<w{7~r59NQ~xBl-g{eS1)|9zGJ@0kAIB7KI_>#M6)KV#EBP^8VI{$atdb&SmU
zZ@%fVaOX4oZ`gCFl{MagEqw!9z5#pr2KImT1|01l*gmg2DAX33n#b_{m8*uElYtvI
z`$5MI9~@3>;5lx<qiw(!-^y@3|Nke0|Nl1p_tIx$W)wKUntXs&@V1N4`IaOR7vbci
zLfsog{0&9JKeE2x@N=K;uXpP&*tI!a`M{%pjQjQm*M>rgdc(>k8>LQv`2Vhet9T<n
zdm+C#i{SN-Lhgpb`fNhtAAKGa%0+*Wy}eO^-$+q>lcKzllKLhkeIup)A1l-Jxa>C^
z<ZF;z{E<7{NFw<YZ+{_Qxslrj1J=m}@4P-~bZ=sw{fXtbq3q|4zA}a)n~NA$d=h@Y
zQS|yI-TR*eHXCWp*8XTTRauyoH-D2_wvnW=i)!?yf9mSSs`m{vc5gJ^ZfJ7&qyFx6
zh3|$s)*I#aZxV_xW;nCS?6HwW`(}>t&nEm0w|A{IX5VbIeskHX&&J-Lt<M+QFn<i3
zu-W3ivE6fH(eTaE&P5+5eLARTY_!?fF?hLEwWyQv5pI<d4Pyfb^AeWno1B~1*}mTF
z8gJrOUo52l#Yx-5xj0YXKh%=j#IwGIyST`3ej(5L4{E=U8cJ_ANI&9Te#HCy7cb^x
zj^$hYJ`1`}-|T;Wv&>~<hVT-0cSH01&vx>qI@+cp;->PCH)<u9n0_`1)&Ju6`Qptq
zL#yo@t*c$a&D|ur4W+JcNNy?hp8v(D`)kDZFAnua#<NW&C;!_Twfn2;{H;;bzee@9
zSjBG*E&k%{ve|}tTLAOc8+u>0+CRuf8;6K*47~o4ZS^ME{NiNyGB$OyAZ;@p>oNs*
zQ}%G<_;6FF&AN>4pY)dJgkLs^n7qY$cA?tltzN6mjE`@N+`QFSd2>#&5%>Hu$>U$L
zr<de!FZGZy$*497b>6~aZ&Eb<n~VPU9YUq)_Foe(Z%VZOZhrhzs{8lS><y{Wn^Pti
zC#!!={B2rTzUA1g51Yl_^Bp$xSo1CSby@cBGSAK1bMJr4fB%hV_4k^`=CQxG#qgKp
zZQq_<?Be&^H2(jV1a{M=;~Sf{>y&1jYa4$Hwy$WBHfw!uR2II&R^2fDU$MD@w?!Fu
zQAvJ9s{fCI@1>#XU)!<_eF{u##kX|ZKaUgM5ih*0@$lzHeT&mUJ37)$`tKJv_kV7w
z|CYXat^Mz!qTMU<_V1YVzqKHKYlZZ77xyok#@`FI&0qhk=uh7{jk&Ud|NG?TEmF0w
zJ=A|rnqKL{W04_l(YyX<@AVx|lYUM+zH?6Wj>PE|o%7#XF0ZgU{!Qxp&iTphs@y+&
zwp-4=y<_3|jeW+O7U^3pHs7__-fD^Tr$lb64B?$clgy@GcFCP>xqLbcclY<{(Unuv
ze@*eWoHBh^*qa}7)?2MEuV85SRgj(IF*~Pfa^>>-R$0-T=B~C}`2E*H{%`*eRj%f*
z{x{9vbm?o8uIv>ZZ!HTR@7kR2(zE>Mg8x-byDc{aS0{2?Z_NMgTD`3&eAm^!Z}#20
zmTkB2w*S4^ywa)NYUTW0yXAMTJY2oXe+S$7O<i}a_dVae@4fZ@@4NT^w?6Q{deQz}
z(~ny{pS69)^<6t}e|Her=wR{3mBI0d_a6p_J+ksGM}upQ+3z`4UURhC=6L&`!{L99
zbpJW7+;Z6Y&&m8fCsyw{vj5NN^p?}*drrOozFdBHcx3ff@v4O6-v_Q&3!G`;7isAf
z_<Mo-Z>PlGOY9C8jcX6s+g@?sd*%7>1MjQ+m#+<bZP{&Z?RDMe*!4Zv=l?m?Tyvwp
z_Hgx|Gxas6CjY&u{;%a|z3r*RwnzK_-r8<+C;Q0J>w9n9w&8hf<Nx{3*6({Bu<vW;
z+Pzo*??v;yk5+SBl>U3g-tLL}zJ2_A?(1(^x_sHh$-5nIRC!I`d*=M!8|(ibeQ$eb
z`QDrDdtPk*d-rzj?fZN0&Hnphf9>n~eYXz(dGXmc!eZya?0>sI@7v@4bA`G2-t-R-
zt!p1AAAPj^#7A$t&*t?{!fOx4Z(Y+~$*65}{qUC8=WAuB*St8q=j3LaACvcfe{Xww
za?PFDe_k!#_pN{b%iVw8%>Vmqd+pEpyB(tcb~67v_xsm_@ZAsD|9)a_>1SYM5z=|V
z{O~{vo2Z=24}m0?PGQZkEfs>vZoP~R43ang88S48Gq_BWvD~!e1OqeMrkI~X&l=<%
z>;6<UCZ?U8tyg(0=jG?r^9vlCcqAOIWCShsoTyj&OC&2~W$?<dtyQAgVQZu3o4Ixg
z<(%5!6gi1C>RbASEg7}5N_T(DxwAd@;kmb&-__%`mNYg!c~O{<aFDr^?OKIIVbalV
zN%eofFDBoZG|Bx{>dec>eb1ObWD~o!^Yg_;i&mOFt&%Fuy1F`Y{kNzqDLIppJe%0E
zet*uryR&ln(YMv+AMP2{3-jmI?C`!&_m@vD=0;`7%gZanx7W#5m%Y6$Z$GW~Q}x@&
zdg;G5bWTo7<0*Q*t>05>U&!UPFRyQ}m$$!iojJq*-?@3~|LwjbY;a%?o5_X)dpTkR
z9N9#31P-yQrmR+f#;};r>Yd4*35WS?&zw6nLF4s%R))$?jmth4S)Df${(LKc)z43}
zCmxf^?aA6N=$<q2IJ0`m$K!IsOAMTpn!j8;p`sYQX%~-ujnFBLr9FBsvWK$;kIG-U
zowN5Ni}yNJiKo(Uj~Sh{nY{1sq1nEh9!>dt$@t+Dm%MZ42YV);vw6Gbv$x&HJHhAe
zI=MHVR9I#sa?xccci~ynyCE7JpG~~`jTL20ynJL%x=g<8XWLt7vcyA0&_h*Mchi*+
zf7>FD(1|_W0X)2+Q?5njzU5mIsHtu0EgF31WvHC-)%?r;y|&XX%N)LK`0qwqbnMlT
zbp6t=k(q%<zaDxyXV28zdDd%+ZfeIropjp$zsQv3i4$X|$0lEWb3V}G?A-8sRqvO4
zkE{MW$2=_m@857Qw})@f-}zK?byHBbdW-+DGTFKxZl-HRx^HDJTq|+4+ceA~YW^=)
zi6;}pS#_>=9@Hv5>REay;qkUOWv*v4Qs>QlHY<0Z<nuYD_hvqySNl&gW1gYzsV6t0
zw#`WHiFDm{YuU_sVz>L2%$xOU)!Kbhuh(q7H|zDfz5k@%temd1Yl+y&rCUzdyzk+E
zwC%25@Ri2fSIjRIzdcqSzl-s%^xb{$uibwC&P8rc0dMit=xt5Pwh^{VC)Y@SI&u2S
z*Zqr){r=thv{b*m>htnOZJ93@HZGo%bh;{Zrt6v4ljeNA_F8$j(N)XqbH4T2uD|>7
zj_duo-(M!MGk9+~&HCrPwY00vQq$P@c|V`c{a>=}#nSone!W_|U+(vtt@rJ!PWFA5
ztNd{2y<MS2;1m(tmg}eQe4FOM&;8ACZdc_$-{-;GA3pzjfBt{To&V(<7)2g1)Q2A^
zxX4zv=U3>jAoJbd{+?*y*duhdEo^_=-SrWoYwllYy5`7VC(xoO@{q$b!by0ZLArjx
zL$1ghPU8Cn+6<>W<jIV1mfELpCfIVHvD`y?Gbev;#p>BR_o>fTTGo>5b5h~&w5Ef+
zWvb18CqEKdxne3~oM3n4zbEs!Zl)ahSZY`qZ=>WT(!Q@~<N6SbFa0b>4;dK63Z(g8
zSrGJT`Vp;rg8h{~U1C3Pxa$-JswhV#^K;I0mXn&)tG?Oilmv$k`!m1x4w>#<Um`rc
z<BaU<t~^oO%I=}(Ry1LfNUDaX<nFM!zO_zIqCb9Gwry*G(BzF%p6X<-oK@bKpSMm%
z>7!M$!BkVe-h(caq_ZQ>T%MuU<>lfl`}&4UvfXAaA?qbxEk8Xr%~>~5XY$>*ayQOS
zJs>peVNTMDDKA`7jtPc{ZIQQfJ?v7rFF3N(<d&Ir`1$E6ncj|1p4ye}^h(+%yuhC)
zROCDJIm>mE`@DV99J(vL^`C8;DtPzb)4Au4?`VmfJa32cX?w|20VzdW7BKs&-#%A)
zVUfw^#WSWXvspPaFn?BFW6v5j^Wx(dr`!`+Zs{6k!yRch{hEm0iX0hx)m>hpZJtZ4
zLSF^V^ipnb6I>*$oAuzqlha=qKQA}do#Z?FR_OXVQElzFnVnl!UEFFAv@A08_2#%X
zr|tVh*A-5E9rH3OeD^)k^>(Wtyg&8p(gG&KsV-ArCG=K_O=%L{*cqC`dR${(UC`H!
zWt(3~UiS*lC@kGL^Qw;DQ7f-aVb|t)9!iTcjEXva?dXEpp>MOYPX?c7;@^_?mD8^N
zq~t*{vrW$qt&xem9ev;H<H|?fT6xP)o!S+;W!vlSwg2K}cib*io1*#2I?af`TXXf2
zu!V+Q{-tl3{a&eEo%_G#Vuk;#kO^|F5o)!0o=305eNjqXxaw_=W@FYZrQWi}+O_MC
z26+b+6$vbSzD7^RP$Qvi+4WwwwEVK$k#P*uC(nJjm&<tWkC;mn#Jg^bzHEBP9hVv<
zvGBs)57MV^C-S!a*sk>Nl!<R;)bD>DE4H0|o2&R*{dw1qBgG*bo8M+6eyNK%?s#pA
zm8Z@HCGE+bMynSzr!NzI_h`lp-*+23{m(oWG`Bb&@QrKA;+Q9V{nJlt^6C8yDhhcl
zv^{S!@1nZjRmlqZ;!C8>^qaJ0p34>Q+#ANXQf6h$1?~HlOPH2zp7ZajcH9S{sKe~0
zMQsarKX9rKIkA84drz(HF~=90?w^)cTt9zKl7IcI*mb(9Iq_%iWFEE1J!<-S6|Z$V
zOS9CqjdeF>9Q1ILn!odyL13}g%{?*Z_E!5E<kJ5=;J7yFl+;b@XZ}ppZyo-uTXR$I
z+4|Lzxfzq?DlRgp8CpHgc+etdapTY8_-MsF=ls-nFJ8243%}`HlUs42$5!pzI<tOm
zMs|2)u&3RZt?qBmCB=U_ZF8)k`Fw9)!zHUY<FFm`CvfLKomRDf;o9#T+3OxRhR3*x
z-`_4LTl@Z>l+9hG(8uYD=k}$W2i#iN`y*h*+2{%TWu9dUX~y6F>k+cK>S4>*+eZ%n
zlP#YA-{!)GpGxPR)-I1t-ulG!Ip_JQcUK;+yW_)Jes*G`UgkvO=$8wRnrzvucRSPl
z)^VQZ0?W5OseD-yw{P;jzolH0QXf3?L59?K2hl%o=Y{{B`ARNyOK9Ea%Kx>wbND_U
zyIq;uxPR_RUH;9JTIYP6{4erC?Y`Y-Hm)hm^_P3U#l_+vL;RO5GJh9oe&2P<T&u!n
z_VybR`eJ3_`wOq$x9$vB{%2CG|Bo}(Uta0N?Ogd@`m&F@?2mYHvm5#GH49$PjXbDs
z8*|Tg&z!}Qzjpdfe{?vf=JoHI&xfb}`&O8{y)8KG=i>FUm+f`FUbC6|%lOcq-oDzu
zXZ&V`)U3aIQdaX{)xGZhI?MF`-#9<-Is5ne+ZWcK;^O(lbm85pvkXty-F}hx_YVKO
zw7#PrXaAMyGyHk?b4UM+B&YwIbj}OC-z!mYo6BJCty7<b*1V0$`*CIc5x(<`d$oR_
zdd{?aeUHwohiU=;KIATGI`jWp_XnB&A0O7TGz)x<Fksz%`t+sstj>KKH|YI&=dV`N
z|9aL0rn^bZjO!RD3vl-qtXKNL7JQV+*8h2mfZqvy?$ZKS;x?SI(&wqpES!|hwVRK9
z>1hosCCvs0trs6mK3vfJ@_}zH6aUW%{6C-bzb#-`=BCM3$j50YaP|V%^nmZX1eS%h
zZOIYf+t0~)^BMo^fGoa?d|xjJEdQ4zXm2QJJ2A^4P;fevfO(*>b)aBqVXT0lAooOp
zz=@)gfu9v7ERD+fxn#r7FPdz|2ETMZvX|-zr+(B-*eL3|k<W6XWadSF|BaIFhGL!{
z6DNEW7QZO5@uHZe-;*{!-sX+Q`|{6fO{_g}LE`xbnU#jplRxs^G!!)bD0@Fp`r${3
zbVIS!K+*RfBPJNiU7jfWyij^I$G<XGp@}X3ws>-xzZE*0KkbX5f_%`;3_Zok&$zFD
zklwleo<flF{q@p?oNNaLWLB@@m3_yn{>e5aUpe>^Yq7q#_oaW^_@0(c6k6NK^7)in
zzL0uxkb3zf_3BG&w;7152B@_Q9b?E|QTI{l-`iyzp_4SlwexI@cqbaMIj(2xyu>NH
zTywM0HMeuBYd<M)Z+fyNNGI4wDZPlP+Hk`XAr(UbKdIH%PWbGQ^U_<GrT2J}-up{>
zpM~_kf71PZN%wzH50kLg*Gu}WoArJQ8L$f*@(SyV2ODyKHWdDBpjd3AYOHlVh(|L^
z<=}apwMF0E_)Hu#?;g`KQ4TQiHrDVDHuars8ob%mv)D8?*evn0X}q>sX0ciBXTg&f
z6&4z(eO#~I_}Q$~*xWtWqIa{|#LX7&lPwA_Th11?n)=ytsj=0}$yVzxTWuCLT^?-R
zzu9`{1atqB8jsH^UEO5!_lOavv90W8BgtUfyOV9DC;u~gT5S9Lv#qkQ-CJY3_nU1$
zUbg=&?C{dq{`F?N#)-PUdB(>ts#tF>+qT(CR>WHIi}mziC+#cNx+a$DQ>+cAIO$(;
zHlE_V)7WCJfZFTx#s`a{?6x>NhPaw<ah3n#s%+wBD&iJ-#VuUKJ@$*6r?6|_QYGh0
zHjN_2ye7u&CYqfhp8X-7&0idPr+9XMu~{7Av2@Ds6-6%Vx41VNd#^9@-e_VYImLVb
z7nh?U-m$N=Pn!6Mm-t-W;&ao)_uv)pyC!}Qw|Kw4a`%|=)fFOM%cuCy4)LG-#gp->
zC;M0b=~DuJm-zn`31r<Gz$~h9Wa9M;C4SeZ_^Dp?d-^3vTQper-_&4pQ?+wff=xq1
zG^d8#E(!778gkzxR9!SQIy5wPYUtjV?xIt}gs+B4mIm@}4dmY%R=731)HGZ+G@|lr
zSmV|FH73E~rjd!Ik?~g}lSQLun?_lG4Vk>eMQ~Hpa?_BhQ=@j4M$g<Deei4a{Lm=<
zw6N~di1N_b=BW|2qOrHHM%*urtv8LmSsM5BYFx8m<l(6?KSQH8Z;knDnsEGU{NAlm
zj-m;yVTqh&3BuD7#jhnQUrPuV)$JFGdp$KyKP>tE)mUq@I9svgkEY3%-;y7T22J!!
zI%=Bw`)gu!St@r}s=8TP`m|L3Yv#UF(h|3&rIw`^Z%eEUOK<*`UVH7*zjLA~=4SEk
zW|^+jGW(~cIA6=0Zk9E5TGs4u*S=j%Z7j>Eo|fGzmbCR-cBff(=C`Qr*Rqdq%RU>H
zd)O@Z=C_>8QyJc3Sx?0>SC?h2EzA47E$?Gl{`+hBjZE3`Ww{r><sO_?z#d+3SFA9a
zDUsK_kUzXoS-eR7d!hFALQOIM|6%#_x8=W_R%{=hWouqyUS487z2xt+6zBIvN3Rt{
zmY3e1RusRzAa;6L;`G^4+so3gm!*~$7H=;vzh16t9{u=R$xpG8w_zm{w^x{6FPZ(l
zqIY}A{OP=BJshLOE7pgXZ~k7sHN2v7dv*Atoc-d}+o#tYonD=6UU4xz%-FngVfeqw
zx#m@mzt=9^UORJo-Sq8s>&+aMLu=1puljqv`uFx4)*Cg-9~0_|Yq%pCIcGHfFK>{&
zk*ht;=IQlX?HhHPKboG4H-8qdx0a|go$)(pyVhm#CTWWXZ;4j_h*r;v*14kP!Z%tX
zBia%zTGJ&Oa(^_|H&xi*XtJEqZoH%2_D5a)jrR5%9pRb<(LdTUBRY#E+QoOY&76^w
zFBUypqHC>1+tP^c=`*_LMtBC~>Ku;fDeck<U#vQfuXk~iN>5Vn%0<1=k9&HR`mQVW
z&R42>BT+H!QSViY{;7-lGh6yDR;a$3(f{*tKljbv;N<?BKir;GynI$M;ju*j_Y=MR
zKPMdjw<GpcnCZES2~T%S7W~=!KBE73MQ?huwo2vmRf~F^Bd74*oU%Nre|dU;+|8+(
zlG+xQlawtrRU);*Ec>G?r~REVEp=vZuH?k-ol_@AR&8sVY<p9)V(0YwoimzuPD_`Z
zVJI1?G9%S2a(emC$qNrnpLlad^3Un|JGBBNE%!)Hn|^b`@||<<Th4N?oZ`B3%EO;p
z1vh7&R+|4+a?a_U)5K>^omx4sw{lWz<$}YK6=FZ<?2erKedi>}o3rLN&DkiK<Z`2D
z|ILNJZ_Yh@bHU2Uh2l|~3O^?r?pkblYsuNjdAz@tEVo=37^TH@bE3P|yzpI%@6Vi?
zdu#sn$a$H&=Gj+i$w<!s_gQjQ_O1DhzxuszF4dIsHL0wxiCQ^dYE`dO)7j=#tE0Tv
zNGYz1TD>yLd)KVh`=wUzjasw6YR&0gYc@-*-8gH_^<Qg_Tdlb%weGgn+NZPDJ(gOt
z{ny&pQR|=ITKE0d`iD_#&+l5#F1?<6_6C0I_59WAnP;z;yuFe4_eN>yP3qB`w5>Pk
z&)#Hsdz10(&E~f^n_92=zJ2ZPSzFF7-jeOK(KmYQ|5@w&XRq<Uy*2Xp)^O{s(X+Ru
z-d>;hdt3JGwaK%$7w+C3UcIHhdRyS_9gVlQ_0HZgIeL44^p5$rcP`$&bGh`cmC?Ia
zOYdGEy?gEK-J5ss-hO-cVd*`KXRi)D(soXI@8xLaz1L^&y?uM{ed&FVqxU_Zz3=ty
Zeeb3Be~#Y&efIv}xAz+=C@?Ts0{|ZM_+<b9

diff --git a/docs/images/sbbsecho_archiveprgs.gif b/docs/images/sbbsecho_archiveprgs.gif
deleted file mode 100644
index be119e731dfc524cc7939a044bfc195a32671efc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 19450
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

diff --git a/docs/images/sbbsecho_archiveprgs_zip.gif b/docs/images/sbbsecho_archiveprgs_zip.gif
deleted file mode 100644
index 0dba7cfa8127e637400d332f6c6c80cbd10138e0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20990
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

diff --git a/docs/images/sbbsecho_logoptions.gif b/docs/images/sbbsecho_logoptions.gif
deleted file mode 100644
index e0e71732803395563f85692c38b105033a185fdf..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 23649
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
OqDfP9RM?o97_0$80@JMk

diff --git a/docs/images/sbbsecho_main.gif b/docs/images/sbbsecho_main.gif
deleted file mode 100644
index bb8020a8724ba0479f0f641078f716a19768ae74..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20695
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
ai)A#2WwcMr;Of4X(Jz*6sGz{WU=08XMiVvw

diff --git a/docs/images/sbbsecho_node_arctype.gif b/docs/images/sbbsecho_node_arctype.gif
deleted file mode 100644
index f7a8507dced64485d7c9f15adbb539473dc7336b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 22179
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
O#5wMfp@ISfgEatG8^rhk

diff --git a/docs/images/sbbsecho_node_packettype.gif b/docs/images/sbbsecho_node_packettype.gif
deleted file mode 100644
index d56860c3bfc062d94b2d30f53d35c12bccaa90eb..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 21622
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

diff --git a/docs/images/sbbsecho_node_settings.gif b/docs/images/sbbsecho_node_settings.gif
deleted file mode 100644
index f0c71add01364a37bbf5a479fd7e6470b49ceabf..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 21517
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

diff --git a/docs/images/sbbsecho_nodes.gif b/docs/images/sbbsecho_nodes.gif
deleted file mode 100644
index b96d503393f2920bffd64ab5c1375925a8dac4e8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18837
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

diff --git a/docs/images/sbbsecho_paths.gif b/docs/images/sbbsecho_paths.gif
deleted file mode 100644
index 0ff15c32ae4b41814ff5e88c17cf88214baf9fd3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 21546
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

diff --git a/docs/images/sbbsecho_toggleoptions.gif b/docs/images/sbbsecho_toggleoptions.gif
deleted file mode 100644
index fe06c30afa7250d8d73802b10d5abd320197ebd4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 22498
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

diff --git a/docs/images/scfg_chat_channel1.gif b/docs/images/scfg_chat_channel1.gif
deleted file mode 100644
index 997e128e0bd784b2f2aa3e23086900a03da8f59f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 16798
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

diff --git a/docs/images/scfg_chat_features.gif b/docs/images/scfg_chat_features.gif
deleted file mode 100644
index 192f5989a49abf3604b09689687f02e98cc38ff0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 13480
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
acb>2NXS{$}_l2YIt_y8t#%xSX4AuadOne9c

diff --git a/docs/images/scfg_chat_gurus.gif b/docs/images/scfg_chat_gurus.gif
deleted file mode 100644
index df0e8e4bff3ff108883cc483a3b2786533be2fee..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 15878
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
V&C)lU<r|xq7aJx!I503+0{}5qI~@Q3

diff --git a/docs/images/scfg_chat_pager1.gif b/docs/images/scfg_chat_pager1.gif
deleted file mode 100644
index 027be2ae2c3467c34c4150fa9670d85338c5f597..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17072
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

diff --git a/docs/images/scfg_chat_pagers.gif b/docs/images/scfg_chat_pagers.gif
deleted file mode 100644
index 4104b0a37c712edb0836c7c18fefbec88e2451fb..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 16441
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

diff --git a/docs/images/scfg_chat_theguru.gif b/docs/images/scfg_chat_theguru.gif
deleted file mode 100644
index 16112f8ab539910d9502c8a2ef35c26bd7134f37..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 16618
zcmZ?wbhEHbv|;jQ{LTOYEes6*8CqI66tg)rvjsq?SirDY0)(n1EUOhks72AKMboK8
z)2l_(tH;o*$1teJFldTp&=kw4DV9-loSdATqUJay&+!7GrC!-fgR++f6)z1cUK>@s
zHmZ7URQ1;6>aEEwTa#P%X7}vP?m3n{<yi5QW5sih70)?WJ?C8Y(sL~>EiFsWwJg2X
zvi4dJ2;J-1dT$B{J)g4o`JBDa=Nx;#^w|5Q=iV<p_x;$hW7n>o`~RQe|0oy@0dhk?
z2b2RqdBK6>A4C104~i2W9BAU;*D^U_ka)P2PuXeCj}41lx<&M}&YTcje7slQx=BWJ
zQ_6|SDuJ_nP8Kcoo@x+%tVVOQ+S%F0#s3a`Q08!CVyR(}@Y<4bQQU!BKqH~S;qr1;
zJ_!SXs|_K{9BYznCnRJut>f6I<{?m)!^Fxd))TrQOqY2ZkB~ux!F0#FyZGKbyL$Qo
zBQtxQJcFFhkH$of27dd74HX+%jti)`%+pD1YB@dCIC|cJolZ}=gdM^eauZ8lTw0+W
z;gG9%_|?^Qrd#H%RdjxPdxvSxg|!R6zq>D6Qhvi=PeuD<X`7OOeS3bkKRsn%!C)9`
z)xm##bNhjPwk#Zi_nrSWh$}k%>G<^AvqNHGolED}_nv$774O$}{{HU!K!4$Xmiqr{
zKhz&^vWR6UG-?Q}Xlhc|dGVlG%S9uxMcXH0A(w7K$3rg3Z3h(Fbz3x&It;c1JnGav
z!qCiZFlB`jkJhmTi+Bvq2{8AXJ<~YMV|mWuFptrnh~|D{9?xc8cd^bTyrwq}ESYR}
zCxMyIFUWE!ucgmSRldk)2bNB^Y|&gc!|F*u+Dz*w6Q1!|ZP<BucJ98PYW&4)hL^Y{
zZfH&kbm44y&S!H&^U{3lA15dK+cRucpI@Wo>L4(|>C~0Q6WJ0OmPC1mYA#_{m@qXW
zb*k&N$mEq%!=ef=wra(e+`alL?%#%QU$4iv3Wm){>@pQQm^9H*?dJN4iD@&_rbe<w
zWz1F7zQwY1<+C?gtM)#dmAxfW;r7;Tsk3kA@BO$fy5NZ5^2Wj=isdrJr(Bn>E4j9{
zTee)j;`&^UkA3QLRZr$_pU3fP@AG*apHH%HsQE6qM!xQsY>iWcs*X)U1H0QDg=Ri8
zj)yH0@ezsbGI<t{j;plwJnB^6^&zRp;F88;9?jzml>7BQdmQd_66#zs$xH6%lXIa?
zm8w%?na)0)9^WUKHZx6b?XydHX1eNg8}@0wSX3+3vV2|-U+Ri0ERrn&*X;$Y1m@Wa
zwy3jZEMNQWR?haf-)<Ki*ZqE{<a+M+yA{vZe*br`=KI_4_Z!&temrOq&)f0Pj>F4r
zQ3c<FACD)v%Q-MG`~3UyWQuj(&Zkp@&;5Khv$$^O^M#YwRlZp4zRv2!^74DTUMyN}
z_v`tx-F%j>*Lu&}`FhLkbye@yPye_3-L}Vlzdy`4U1$AftGxZ6&llYF|9-g=?qBnM
zD*OMM_s7-u|9y9$zJBkAJI(g{J}sa9zWUAn&HHw~zo>5aZDCq+!_U7zp0EG^@6Y%5
z|Nk@aEMQ>wIKU+Jp@G9^0h9QN18i0w8U=b5u&8?+JULZ2=gZ*)R`U}F`KmrNEATAj
zaQ8SQG)thxcIJK7k6#>)vnDd=*T^hcX6`I`>_XeB)eFCtoj5G_>qGlL2cAdo<0K9X
zOMUF{@L43pJ!8kOwHNC6N)&loJzQVBywEzaDMoB##Zj4i7uw?QDDfP%I4m{oV_T9;
zviRx~$25-_WY<J3l6mfN+{(<LRiY+|`|gcncE3LMH}EVG=zL*eA$7E`!)J+-xMYLK
zuY|&{x0MxHJx_W?eVP<HXNh9>p%Z>ppC&8kB*{s#A7%6U*nRl7l0bt&L#Wlcsq1o{
zYDNCs5qYg>+LkG)dZnC}(f5j`Z)%Ct$(KBna7<|0&LgU7(@!2}%$cOIpl6xM@|O-a
zPC?CqIm<+6o;;gZRXicM<e4#}!`Y%)pXdB5eqtIq<E&?%aJPlcVzI*=rwor7w|)Az
zWx3?XpL=S4P4388lm6sirhf&W$pY51>U_E@PZlovyimY&xyJQKFSdC>RgA0}4%}G*
zrk9Kt%g<fTclpK9=D3MHDz+;;olm(==n7eyAfjP$|HXxlTVIy-Y)NCgndz1L?elC0
z-c<p?lIIF12`~5XT_tmM=jATF4~s4?Uhd_tb+w>u;sW)lnl>w=&ey7yEMCc?9VVFN
z8ltr&i0$ZdpX)1*F1i-7vY=O+Q~g$mXWQgSf1*|YX_eaVO**%}n%615QQ`U_sc#$F
zuCA2Zyz|US!D$;hde@|=|2}wp+T@kptP2BsU)^AEn6}B2bxqt~uUmWU#5OH<eVZ;@
z9d$wJ>L$hq|K7;FoE4dQ=-SpDXV>O2b41_N3oR^N`YgBH`_7|x+qUP&Dy4Zwo_qMt
zf5YU@jwOq=?=pm3XTN?_uWWgC?At2y-FNoBD>-`m?z_70dtUgiueyHv-nU)f_kQSo
zUv^eH?!&6>`+k_dui319|KG3g`x*E)G@QR3dE!@D=a$rU1-8HKU-<C_HS#jFsOsF{
zbgnq`=deM%yv)kqr85qTJTqw1e3KxMzT=3}w-4=}e@+Uv-#8@N_O3NBC+4=1#kP~7
zi;_fbe4oGSKW56eX~NmgJL#7ScTSA?kTrkxBZ2)9#|+I3yJFuwQak+Ppu)aS9i}#^
zlKX$0j9}Z`sciGaX!3>=vzH|QYnpuLvGnYpXA9iaXYp31Jh*0duHxM0dGZwrvadTA
zdEH&JfZg|nlk~3(1vQKeBED0^4XP&h*_~S4E|j@AMC#&<b6b{~pMB|9{p+$T=OY#Q
z9cel5B)131u3B~c)}`s&Oct+umbAv&%4Kuc*K0Dat5@y58KBHua6HG(G$VNL>m=#l
zH%_Fjh_3x>uQEI8#uU}EP0M}XW<^`CI_+o7;C(hY!$0hnbI4tTsXx6FnS^JqPkCy1
zmG?~c?%#L!oHLtSpPMdM9lhznImJES&%Uqwz47|3yl?ZHtMhAqPg!Abb$QfMiEHbv
zYUau4t~{i^FR&>pbT#MwD`AH3-uLBCUUuf2{PuryqY4f`t6m`Izw=c1y8H?3Hgmu7
zm7Vmh`%tj?&ohhX<_DhZ7Kq-ee%5++=Y@8^lESt<^~&s3y^d$UEVKUmGN6CgmF02{
z3HH%1cg@{(ZTq>e>#G00ZeRE7z<dsuZ>|2N&VuQRi~$}eme#(_S}*szCw%w)y?+Zc
z_gCL}824r0@4xRG{@)eW*O+kVwu`#3X6Hlh{)+WykEmK$?s=l@|MQsty-!p3?|Ei?
zzVb|U-RJr5|I9Vwn6k`b>6aDudtdqfpK{Ir>DLYYwc$J$rrx?d?_1i*z3<KniSPVj
zr&qSIJEqD1&!gY2VU3P<>!!`uK4!7sa7v@YhGp|5lX90uoQ#^5q4Td`R=VwL(@V2@
zv&}9@eacsee*XMgzS)6)-*(UcE7!39kF7xcFZK3+KfX7Vd|6*#wlUlKqfo=$Kz;cD
zx$i~#PbN0JI;hWcLjR+qynu%R>t=b87xKKtjm%1hQXYoF#fB2eiXw}cWG@>kGAStt
z8L255sa#glxzVI|!pPu&k&#5R(FtX<ie{T6X3HJTen!l;FN_@|S|W^EA}*=AWte!(
zQ1cO1%U`6Ht)w1cp&le*8p2^3X3-iR(HgO%HS|TXy`Tt#0E@F?TarYZJEO?#MItkd
zG^Yn?=4yz}zoZ$%D3)ZXmDVVhc2TT|QGE3yt#U){h8f~@j1pU%BswQb{Oe_`?NyZA
z=Onp5sP_7H$%P*!Z!Xt4d#H9LqwWKC={Xj<n-=QsNR+<!NLuOu<2@mnqk?+Rf@EGi
zl95%AU2h?~>4)Bxi?Y`fyB{dZJ#>_NHnHLNCAqhT@^1{~RUgO+osj?8XdrRJfX7)u
zU~?nuCI#6Wje<#r@)Au_n+)X+8>;>=)SJ+B-@-`qk&;1BpN2BCQIN9vBO|@d%C?`B
z9i3F1gP83XHTxE+e1D<h`^Y$~NHyB1C80^xrMbncS<Q2^TJEEkLZQ|m3)7zG0^!C2
z3<83}osL111?(4?awwYhyHqV-E~2ngL`iazL*OK@k0O4FqCSeEp^WWe2SuX=|A}o8
z7mG=3&koeGSlPZRNPO)jt%KXe8!fb(BedHZJ31P*&u`bh^qpbS!;Z;@I@1L^k3Nz-
zu}EjRpw!}tofn&=E*nW-4U)dLNOw_%^qoV}%Q$2nFY0<4q<8Azw6hEA&mFA4zOeo#
zqrO5z_s31$k2lJ3%#izeNuMFPhtaw5M8u5$g){h_6?hjnavoB+{6pc|k4AB&rkff~
zcRCamKKCjGDQWIdQZep(meFUt$;hCg&r-<v9Y_DC2$eORD!z}Jf1WT7y43&gMZXiX
z+78bNJ}XS}7O53(nh-28hsScx5zjdR!E<;#)!UrPt~|EAb=h*`<2m0aTb<c#ec94_
z^J2Tx|2A7)&76CkbMEP2yYrm$UNYOA^PG2K<=mSu=icMAe}33{>Ed};GVRii&wVUe
zapAMwmgITQS6ZJvZ1e7>-51UIo1Dv!2A6-+ocGdr{`Z&jKT0k*Z(OmYWxhz%Lb0la
z5>hUojJ=H7OXYqoRJi4M?pm(@)dHo^&@I~nG-oZ;5?`d(<r3z;h^wSXCu*^L_&oht
zi<L|ksZ4h;*_E~9S!jr8=(b}8>8hb|tcB%U7aiMHT(D$ufLGR%l62#!Vza8HE>DYW
z#Fxf&IT+qr%<*M$gw-;?S*Ed7%h-=BE<0N2-IaIriuYSHpL{Q$muAZ!AImGq$~*dG
zSy7hH^J{rJ;mdlOmi=q7a`3$F=iOD1wPgj@)a=ZbpvbR*8?O0p6I*E*8rJtJC_yB9
z*R`xu%a-~_tysiWeEMf`=qo>a(`7nZD+*0kty^WE)wLqWD@>$)k>K^fHD-mJt}FS}
zmu$IJuy0r4p;fEXmMl4T%WX}S$NF7sW)!cmZC%w>wfcX`%EPx-c2}*5Ygsa@YOP%B
zO7&AKHCYQ|zOLP5w&w1y;00OB&YW5kziXMq(p9Uq@)zz}w_a+s?bQgLZBY$Z?SJoD
z?`IbAMQTIOljQkN*2rJUWL4Y1s}i-@B*MGR{@<*qHBTc~xo+fI?NDsC{*-8O_;p8)
z+3UrnH?5nx@zt;BxEmYiyKGR}y{XXk-==1(=-{kXny=F&udTVVH1;QJ+_lopEYsqj
zhQ?oA8qaLD#U*-+bM@x$k7LhP#XHU3e1&z3oAlNo>#eS{H&~RFcwSlObuGc$du!b9
ztqIcGlB~C-L~l#0-l9;wRsVUqy7pq@-y41gCmBym4G>EVbxTY7w%#vndsx`^XttCY
z#@mzBc8ERmY>`fF?%tte?VxviRZ+@@i%T}iUEALHdwWs#PQGo4_RDr?yCv1l-Wl_4
zz5KPr7`9zYt9O>~-ZA;=j#F8iWV$xZQ`y<Lde@fQG3M9OBdyDfqId7n-ms(FWkPmv
zg87~!yE7)I?U|moXVNi^le706{k`Xc^j^Q~Zv0EOdi+z}d*gOySJ|GMxA)%rz4wB4
z*29p!yKXPs8|{>owNR{mt>AVy=UJiOkL-K2tH4ug|EKQxCr^3a7Tf%+dY|%?eIKL_
zywYB;>b+|H>uvwEofvcu@bFap<o5k?ZCk>u0}502eJxpD?d9DNwfyz8gA*Sw<CQsN
z|K)(Qpu<7$gNi8!h051G&06$r_Uf%+g+?{mS5~dw^J;~z&LJn)L+)3L*=-JL+;P-e
zbJ#^@1<RjJw$~?yNF9+kIpX@~i0tvhYG?LuIDJHB%YlG7N3F__^kpAtNIS~4=4cX6
z#eVM9Pos|})HprZeJtnBvAjJ?J=~A>es=yEIltm~S-HE&#L362a%_vm=l)|kRbIZQ
zyf&vK$NX5woD*`}7m6%B(f8-X1f7yki;r|DRZWwrn!!^wtLEhFIVb1*IXO?})LffW
z3w%y3iaDjeTEp$BhS$f50fwTwHz!4WoHVydbV1N$Q%$XmM6KL|V*9sGw#^i`<D9a2
zl6aGa#I~Z2o{1gjw@*3n>C8k!ol9#ZCudB(b-ec6quN;>x(~&rw<u2A+gP{cgmjvw
zUY4ic;fZ=@1*gBh#CS7Mma(FnsbV_ois>8@Ous%&XV`q6Ut`Ac9rB!$dl-}yBshB6
zm3l>kd%0?RrGynFotgyh_9`EmIXCj6t`M_Y@x?_qjdYS{y}hAq;;dqSXqNM%Syn$(
ze!Tc+{M%x-Ewf3K(ga6kHP>VluM=uMlPCBx&j}RPn0@K;#7XLQZ!b$QXgKO#X?Wz)
zvFKE)M_XD&+Z3fqz8l;88#SX2YDP6O%>5*4lG(n<Noz@y*n#8ir3)GAerVaB6mN;p
zt}WE=IB|x5!4x0O+Kb;i4jP@Eq``Q6QEkM|+PlZ4q9yAdeLuThu`79}^pi8XhZSWW
zHJv+lP-Y#+^lOgO|GLZGV$|QcL$<oI;rAl_R~O|z96bLuut#`BPwPs94o<`K85cNw
zdnZ=*3I!?N@@TrPaZ&#8%tsu`YMYcaHs3aB>U;CU$ndd|vhJm|GgW>{%>K=xsuMd~
z&(_4v;&O7*1kZoT6Y@UI4yc$@@@NA8N&&%{6Ge8KHZ}=FZB}nRKJogJQw3Wz*31!^
z;G`MCczTACD0_ou<U!47-*z)kv5Fn1_q$)K)et{ebFD^kic@BX>rCyg6B0cZl7+t4
z12m`3X}o?i>FkX)XD@D=y6WQ8YnP;M2u)jPajtD`UFOVbD>GzHKb&^)W7p|K*^M5u
zTRggNf0X^Qru*r^?w>`E_wP9WU+9*NUn6^SkC?{=zR5F$F3%ADJVWgAEd_}t{@j^z
z#<w*jjC6u7N~~3SyyLdPA|<mX<^6B_44GAwb5-nuE;$ul`aR=L;G}2v#w{U-R1IQV
zF2qhKnx~eVboc1YyNlH|L~jcG6ZO=nQkp2ba-uA!#?oJ{s+BJ~`d%n@PI~`VL}#UF
zIB&Z_=hdy-uO=@%ZTYi$xzV*$-3J?!&TN`=t$jz$={slo4r*Vhk-R7~^;-DZO5cY|
z7M`6YapOvnuFSiK3o33b`JsE@;Om}Ry#xQIZTulK@h{_zKw0J&vR|AYf19KKeN#i7
z=B-A{8H?xkv~ns)-011bywErEg6F$i>)&3GI@Bu{^iJV2)5DH;Vzy7k=U$BPoAtV4
zmdz&RL%POmJefbgP)^&YlFru>wCS1NTUCR(voG|TcvYzFdpWyc(j4BG8GQdg2+UU(
zu>Z(sf5lpWMa2K3SpBBke+9T4E9KvtD#(A5cKr8At$$*lx?tP%Po3?8-OoSDeEitG
z{jSz}A*25la_2u;-T$a^@w1}hXLG|(5}u#+{XZM%f0}UoliK{xZs$LH-~VE`{)=|u
zsYQ2Aob6m-n{qsK$yZ)2+nD$6@$qGiHDB4Iz9sIT8<oExUA}^0*8ESMwsuRt<^P|b
z=5JRV|2?n&Te7~(<eaZX%NMY%`kt=--J;8m>DRowi|rV=est;2?LEKX!_4m!<iEA_
z&ppw+AbtIU@Ky7dJhnY&Y`1Lj&*}a)7dQVXyZ?1UecAh!znaefymI)2uc%A5|H4DU
zC%4uAzOwuKCFO;GXCK@5|2M~#?=0+pj>P|AN!fdB{-0C(?KkW{lKAh{p?hB0y{E!<
z<a?g}zi?0gG1emmH?r1#IKA&m{NIKUm+Sqdhu;5TcgcBJzvlJ&MUV777Ki=wy8dVP
z?0;cVIj^PvUdXq7t6vhtBf!YQrxJ1Dfny7&s9wsA3lE(;1XcZ(L|lC2+GF4J<Htv)
zX16{$Lm?Rhg^rVxG(*>=+`RPEdxm!NoDj>)DraY#dB3VTS^V5*o<rfUEh{gl`z>}z
z)=Rx5^2~D<!xF!xUZqb$*F<j3dwT2Y>+oi~ravDZ3Z}U8M3yfqxpnPr^p3)(=axpB
zt6iBC`qhv1_VxGi2O3$MMSnBDjhq;9{n3`&H$Enxn5eq@h;_pIdk1Hl=0CghQ~Oc>
zKk19BQmt=($-J^Mbp6(vovYGsY)m~rEp|uFiwT*ci&OU8`kw#bU~pL3-&x-ZpPZc9
zuTv9I@@RGU^lxlIw#&Z0cJNCs&z!rv;6r|=`19R&{#1T>>Da6m`*Y=~S0BCW=C7}P
zTK<c9$Mfs?`|axfM}0cCkMZ?xf9p4oxDEE4Jf_Uw@I`4#!J%_G#;+~!E_$46#b*8G
z!{J#sssgmQyiGp3tedslVEZ?(*O@yOR!#2QxcJ4YkD4noc1>I=oBisey1-H4LKl&4
zlTRnwuN~gtDp}bwal1_Zr@~W`^L@O$G$#jjZMxUhWw=7E_Rc0ZqvRu(PS3AvIpg?g
zLdoZ|=DJ66x7@w+uiDVV=5t8z*+&n)d_FG}I!Acd#3j35dn!~fGCZ^6%9>B7UP`bE
z1znaY?eV|PaJA&}(<vz%{lqml8=ck=^qt}rq<(c{$U+HQuCpd*k9@qSA8tE2bYZ~R
zP$M7x$6vw|5+_f#4Ny(>^-r0+x8wwSbLqF62Ut|YoUL6=ORssUwu+iY=!O>Geo%Fk
zC#vZ5-BZC<D|xprb*)s%x@fptM^rOJbZe-$@%lF(uU3{H4GJv(8f$t_a)0VJ-(umg
z9g7mD>r8V_y}N14sgB6m5s#XG$5bTuNlv<!SlXMbv+$LaR^@`ptg|#5rUtStN}iEC
zt<t!J^XQ8kS6HfcE|?O^*0o^Xzv?tgj^>tmKQoq0zAbsQ&Hm~K^SR6sQLk2d&b#%Z
zd4pe7_B!M0ov$2@7oE#I;ASH2wDR)1T_>h&ja!kj{ra^p*^OuX);;4nZMXa8mV?ux
z4{h6jFVb;;so0%@Rf6olKJ3?AV$HC7VzyQ6-tX6bd^~1+{m+r(%J%P)H~Ai^DZb=w
zzP?y#;^EsT4*8b<Exl3pZO*onxq5{qH;S*@8eIALFXoM?rg&^_Ylqm0_Q(C-6Dyz1
zF8^2gVj_P+<<rI6|5d%&e7&yv-R|%Is-Lf3zwh^x<?R1!zFZEkul=^YKkD0+{^+^6
zkA#itetlYb{QjShOTXLy`t&hh;ot4~U)XNgv8V+!{(B%C&&YdY|Fft44NN@qnZ+v{
zdD1@Ayk8ytC&PT&ZJ+Mqug)j_np8N6EDLDWPD$jB{o(YYP@qU|4)2SWa%&;ECw0z`
z6~m*__RHoyZMRanCEzV_L}=}rR4)@b;o575@19*&&M{fO&BbERHQtnVzb6lcnoqbY
zWNqyDE}gV`o`-+|7i+IaOtRySA8w{z9DTNP77H$ZF;g?^O?e9Eytgvbotrm&>}yt0
zIeEoww-i%;K;>a2=Y1LO2O12WCg`N7R+f24ol2|II5d~<`VV7`d4W9(dLCcU`01iQ
zsi<eg9VJQmpT??XhJBeiPc?N{?zTzuDpGi(tXw$5b?U+s)3*OpNy{mExjI&A+4MEc
zDTZ?+&m{M)?%KIiiEn<TZ;o4T+rHll^5Qdn3)+NTJJ$3nt$wL~dTH?7*D2}NcQvPq
z?@4g^xP;4gxs!kOq2PJ%pQPLW{psJp7P8<~jZc`_%9V|3Aq%-#57@na8BqId^Fo2C
zFI>I`1-7MyES7$n;l46Sd{)ZRvVAVg-F>SrtvWGzkw9s$i{Y;6(-(y-GhX`AC-;ch
z#96{Ak4z>l)MA^X%lJl5Y4+*<179z9bb9OaS!(zPJ_%m(E;Br}D15J9>EiOe*<no9
zQ&%O4UiC`#nJ)MEsrlSnmw6jQ*Jh_`H&4lu*`#%OO?qus)a|P9J<m#glU)C)InVM6
z=X&U~zF9RVajwu*AElHf4QsQv^8AiC!S`)#SY`+B-xD{!I9!eT@R7fMTF`<MZDCs^
zoOR4aKZT!3ySA?UQI3~`_m1g%#2i_o1Tx&Kqxbl2vnk|#=oc)lcy<%__QR_0@=LrI
zoqA<bvftIeV6Mx?`mIk_C~OT4);l)kwV3((<F2#g*S?5;Ht+aOqm`?|CqB}Ox!V=S
z5X?2JYm!z?sCm%jCjG#zt99O4rEGl2`Yy}7I-Y@j$BLS%&zy9;gZ`<d?@<&gXqK&s
zVA9{JxWd<<NX%vqdwRs-L%O=6yfN2`!+uzZi@j;{z4PFYTKGCev5z?(HAxcb7Dw+b
zRr^;F?K4~Gc*JpocN^sF-}s8%moT$dE1DSW<abo-dz;g|0N=TPQZ(EnPYEsicw^d`
zCmg<!r=y=0O=n&eFK}Dp^vjP$GtbtfnH>IlJnY+v7?wkm8V|T=t?fKH=jErgse2^P
zSMeS2e)DIVy>#S-W;?@sckZNHDBn^o-c}qM@+sYod4X<4oaY>NhfI6#D%IedTb6x(
zl<CwSb%jxGWfZe*R><<Gt1CAqu8#Se6>&W3+U8}YYjbO}W1dG{-~Fs~eeK`u1or3~
zht<k9_SWX4sPDeE^Pt1#xqovq+@o(@URJhsZEbE&di3qv&&sy%{hM3R9)0JrTKUei
zwRt7Wqwl^>+rIUm>7ty9<I(p%FDu{swl=@!dG!6?&&mb#T*M9+usmQEuQ<qDSJ0$<
z=K*K>k3+KS3OdYf9`R4FII3Cqu`~V7BdOy*j@jNToKPI|L|(q~glApR<mG#wXuDgU
z4!u`2V}Hyuz2!TLd7K%TO8B2!m@_a|{VSgT`woM%{4d6?JO&mC1x7ZD1DAv^d|^>x
zU<{mYb#?8&1{MQ_S5ff|*Ca1|UEe;JF<Jfh4cP+?o9!9i@&xQ=zVeS@$8Ono#q|s<
z5Aw?Qct2niYGAnkSC8=kdmNK6gUv(U`X5|A3Lm?}_dL>0Xymeq`y|$2^Hg&_BX@$_
z=b76Z*sSI=p3i3Zvf#SIOW%L%8+oVLeO>Kd%Wn3d>c;VX%$t|*Ww-j!$ah2TyZi@+
z_qF$b^S3-;R^a&ep;f*~phMy3iST_Kv)<RdnC!rEX@1>TZ-*wKjt9SP>N|el{=W9Z
z^am`D)c^nRFR1&nJpS+V@PnMU);E3MegE%=<@JBx?q~Y3-GTMj^Z);%H#CWHI55f_
zU}$L+GjL$BabR&dAkn}mk>SA6b3n4AQDTMz_nb!VBM!Vv8YLe%@U3Z-+|Vengi(3}
zqmYiH^a@6i7)R*?jM66>#d{9QG#r#%<0!r7pv;X%sVfI%&N#~6VN~F8QoO?`r{JWZ
z<D~54q!M#TImb!0#7V8jNi)V!;MLAe75^9+PdLd7H0a(rq|>u}?rTdXjfVNk&I`2}
z7F$~_wr*JBy=(bwtEIDdt?b^lGMHg?FvFVDR<>_;t$A%_FS2`+@$RkO)?2)HZ>eV3
zIeGW))z)rTc5}Sgz4x`XC(oXJ(l#6hdk#w59GTs4EPBt;%?+F@_MBY2=lE`$bC>s=
z|7>%?+x3#Q?N#T!*P2~#RNF>PvAuQLHs;FSd%O4E`^@m@we2J2eF6e*0s@Wv0*nG4
z`;vV2J#XG8xWexFWIG`V#+TZSf*X##-|hB>*<Sd=zC0cKkH(Fkg^vp>9RF%<FEYXY
zXSIFV9Q)s^?f+c1X9#Jm{A14~<G^flK&+sV;mL7Un*$R63L4pEJUD6&NK9aC-g1Cz
zjf3Qi1CkjYd`AxOzi|*`IVh#zC=_x~B*w9~<e*rOqxhM|2}c+w&T*V{<e=o0M%gor
zQ?EG6{x~@OPUDOcCuJ7J-p?EtH(2yDIL%(OW9}111!3tqpBY!q;9SMgH09RLFvY`R
zh7HSX7{ary%;#9GnC;9u<FL&UtF=B1YkphV@mO!*c5$?^-lXHQE!ldz_mQ2Ot=-P-
z-qq}~fAx|5vm5puK63c-kt45<__gdgDSh;m@zJw~_goP62{YLnR^!V1fFYu0@3qxO
zqxQJo?)HiKVjK6xR)FEyBjsZcw2!5P9DAPZ_CmNZUF2-moPF6>>~i1i`<KhJKVPRY
zPsYBG$Nlr{v&AX)w|nf%&YUe@a{SL@-+!y!tM|Cqzj3d1acInGZ1VAIHaXEcrLncf
zgJ()(M~O!}i=)(r6M}b62wyqT>vB-~$BF(Wj+1H*PPXxs2{}2n#B=5wM}?k~GfNK5
zd&1Fv*t4&IH~*1m<K(W!%ja(^9FkJz)@ET?a;2NGRejFv&IQS*6a;oLYc$MEuv%6f
zz>?s+)Y)qJ?8B>k7_57Ct-a&5?(;5tp3@FCyB&1`w>x{g%&}%qIK3_BG)ITa-tN-}
z7N0(J`pE7lN4O+xj(OXh2(}6Qb2`YzHTcb*^U9YFitN2)edcJ)8NQCAk#qK5KYaA&
z<bP*QTseA|+3gI^v9mUI=W_O?w%Db~oV|F)F4M+0C+6(?WZzHKXFo0WEe_dVlC!^b
zPVkT7<K;)}e{>)JyZHEho^#b_+-r5tJ#JwX&p6Pia)P6!k+bBS>)rzr9UdJ=9A2;S
z6Pm*)%H!Dk<ebzGKamnge^$?rCMTs#&VNqvpVo3xe#%KjokL1zJb$)W{QASlkgy~2
z?RnXP(8#%54X^zdY}qL<acYsyg_Rl?!~?t*7Mx<0wKAy*;F!y~n3-#3&*9~Z53ktm
z#rO17_S*mfR_{&1fkL|8n`(ADhn(ITb40wAVfW+Ro@-oo?l~g0H&Ev4X<62z`&3*{
zKejob5_B-eRpno3&}DDi$QavWH9;D!XEe_qjs3HiUt*t*sa?CP+xahN(qw#JRv)`G
z$L*cB?^T}t?|vW4>p6SF#{T1K->;K{@655c-g^1>>C3iT-T&`)XJQFq{&JjE<%+ZK
z6}A#Tt`LuTZx48sp6E1j6fkjotK;Y!>)8M2+yoW>Pa>hqT|MPO{J+(Be$P3i+H=06
z`)ZWyj;OyU=csV6lGri#PU8ZW3v-NTCmr3%^udy)Hozz+Ag%VALWFbr-V2#?omVfh
zvOcnF@6l@;UOVTBp3c_|bWu4XVjJU<;=L#Nh<ne)(xpdywggI>?%8uE@c82E^14TZ
z?(9*#x~JCml1k}O)w>KwQ+)m%@7b#{HAw5M?VZ=IZL)UvypNrE64c>(>^#fmjFw}9
z3*0WBxnbgZx$mjl4HoxFvG$XfUcM6&S@GuVzv7z=EDrX%4v%~soO&5qL(aKejdZI$
z*S5w%>PO^)tsx&n5B8|s@^L-br*qI>^!&2ggOglNetC0nx=Cp0+IWpKo_h^=@`ZZW
z-aY^O3FF3-SO3ll-NJBa)8DIey46|Z64?Brx5^$~V9a1VC4pn@1Je{M^C_oxFTKWl
zG>rFXm<>zJfxpfhRjdnKcW)EEez??HEcDK<%hn~OclJNFKD78@`Bj%aQ?4K19U~`u
zRAK9$12(P~ABU^(-o4Cx<5KU@%e|MbZ{FLS`Y%@FovXl(z1Ml&wDs&d{$5JTaeKZv
z;^LZpSxek<Y=Zkr&pwci`z(Fa-1fM|-m|4wd@YUz-+ywpipB56)Hud7#~+qBJlPZJ
zV(QUSbFTT#&G%D1oVT4@xc8jbTR-2YSNi|>Nqo5yP#Pbk8yY+}KJ@ItRk2s2Wi2|p
zLtDIeY~+0qel@;9I$F!*_T1>yu(+pNS*?ucByjpUbL@R!mSeRv`EcgiU8`O{*vI>D
zeGCKZgKHbUT-#{l&F<kXqI%smCT4ebjKo}*6I)N8yn3<X?nSwCG1Ys+70%g&xLgX+
zNeWNddo}x#s@vULr;pw~ZL7KN%xRT<XJzbe${tJna_RQlq?&(vzTKw5J%8;U@WvVY
zJuX^u_EG5Z$!mju1>bu*H~G2j0qbMOZS?$}uy`~ciIXTe$9^Y{`%PSXj>oGn4qaQW
zxT?i3cD?TxdjCVtLC?A<?>x_+Umbn({QdL}l`<d7HGXh!*UnI}!wVkoG-yd!pnZ7$
z;s@MrRy=mEGOs?coU)7W+~Iv+cO~*YJ7Ai2$kf}#CGbe<5i#HJlHO;M>rP9zg`fWF
za%S!I{ZG;kooP7Fn_lmF=1Q^c73mwtr`W2;#h&`JH@@Y0!jiiWHph0dp4I=ClzC;}
zJ=e4Eb{{i&>ee8ZQ6zJ-$u90rOLFV6%g^rGTi4y2G521r&bfvX2j`>r*ybGg*Zkxj
zx6YFeo45Q=4s@B^pOlw7rR~WSJx?#Wt3jnN<$GSv*cQLq^pM7z+<R?K5B}xe|Cg(z
zb6Yzn;fY_~)4056d3n$4@?P}iy_}c#YF*yzeR*%r<-NU^_wHTZ`+s>K`0_uty)*c{
z%=7S;9S->qH<)Zsc<&u-ay8)nmuc@mA2a!0_I}xc_b$!(lMD>K7Qdgu@WHk@f5(n|
z27ONE|M}nE<xfv2_`A-8ss6)>0HM$4@?DfaY`6HZ>q3EDc0P|iFR#7H?iU}v>lF(B
z|1e#laE3&I@O=Z@?2l~jAHTobED&EPwf}>(|3?}9Lb3OSlIn$`<{xZsf4uxdV&|&&
z4EGBa!v7ViZQr75U#Rr_14sHNvG9D>_9Bhr@3q@Ms2u;qy#2kJc!5@Uf#mbTe|n!K
z-+z+QUnl;)K>m8+q>3WV=bvWm_+)NgEW5sl^LR1K{bF<Tj%67$xYD^~-WTiZe^EUC
z$z^}BwtKOq{uf>U66f?Un%6(O1Q&bg7aN3^NZXgNn17MjUgC7VM56kW>;J-_{htG-
zfAKs1#Z&!j!2J@7_yXVaAI;o9Pg(HcwnI@Ef04EO7sYUs`1zlr?28loi;~uVu}d%H
zVE>$~UL1b@bHe*iR{kF{*MClE|E5x37Q?<F@qAgP{0ENpW$Ni4{)(07-T#(k|LyO-
z5{dr8wEFMU4T`q>6Zj~5`*Y~&@>>2r(|%6J{k`_vzc!c`H|ke3*;m*Z|7dalAszms
zE&Yc{d_`ydkIw#zuKg9==YLqN{?U8<N8j}yjn98f`2J%edu6+MWyk-Dsro;s+W(y9
zUpcM6a{Bbj8S^V=udkdV{&V(q<Jf%Tx#ue<-T%3Oy=uz;%Ej`(7VB3niLY9k|7*Jc
zujT2#R+LxGYX7xr`mfc?s}^3bS~S0E{rO+(@BeDN&=In1@;dhFE#kko*jI1OuijQ)
zy}JDOj`r#`(|_+;UcGL9_1^uz_nxob_rJRLfBAg&KO2t!KJ@<gVf8;--Txd7ui5>*
z`h@?V6ZwBm*4LceUvuhs&1w62?>{a3cjo_}v;4J(+5cV?uRUg7dtATvs{P-q{<YWY
zYp<)<aIG)DvHs7s?SF4w|8x8L-#hAm@446B>HqsczV4p*zenaj=UwMLyj}dusa5)o
z6W`n_7hwPQczxY{^M9|^|Gn8>_saZJY<jKU!F6RDCw-j$kN@Z2yZ7t9F8}w{zy4c&
zy`y>ck$%yizgA^0)Y5us{`da>*y_@^>>UiuOdKi^A08ZRWD(W!$(Zo)aI2u8(-e=3
zi=4Z8wbS05_^9kQLEJr$Cv(!1Ba<{tm*t%NwDkC7t#q~@f=7<`i%aDE`>-%r#diiX
z8;hdUk`)&hdiBeN&MMIiS{~GHW_s$2*0nWJ+l$`5`l|i!#)hQhlm2>ztn`^~7`~48
zR+w(Uj?C6`wcgWn@9fU|eCzG$@A<I@I4YmrkzBIeZ*LKIkS%wq){|8si~Z(lNg6#n
zGt0dA-J74rFD@*y6n9<qW6S*mt3Ix~ce`q1_O(sPm)mlsw?4SFL-o^_%pdL#?-ZO5
z+BfT_#g)@R6Z`Yt{jvP=;!?l0*uLs-Z?D`~|N7d!ySu)>d2oFHv%CvxeslK<x2NBn
z@#)Ktlk(ojwf@`HJzv_+#PDI!|9S?l47tX)k{<WU*rzQ|XyT~bzMz@$M?pm5>qLQv
zPDh@q#|MXMw%=?&eeio^hx9CoTXoDV5)0~?zO^eh^P6!f_8Q;PQ0{wlb;dvCEMcW@
z(TS{1U+#5&J$U`$#K5UD=1f|u>KUIZr_`R3>gqRrQMb-Ij)n==uPPo-w>c)EHZ!&<
zGp+AMXvK_t1EI{P#UW~{PlHRFek=(tx}~|iNZyG3d4^`*%+z{@9WPa9rS{F#Sln$@
z^<t)J;0n3fZ(M(<EjVlVbw)~kUe)r{>6N!$F0Y%kD`nXdOE-;$y-r%sR(BnHrM0O4
zn$+~xmcJ#d+gASirM+P#*Q=!Nqf%Acn<k#iTD|Gyp;v3xl&<uA+25HYrL*m3mh|&g
zN3$#yHlH`MUbo|^oA<k&&$OOBo@Kx5=Id=APg&=u^zpvRU3mHxx9-{(-&W`Cc)9B7
z;{07n{}OZyQ#JP(9OkwDV{k;U{Oa4i(f_nR9F=5W^Ksw5KFhcHxu0GwIifnd#^{vh
z{2cv_-^+MDoR-M9DLy0PZJl{yT2-a)UfbU?I@5k^^D^G=QXRATqJemC_ELv;t916*
zd)scEdRXf9r%RFYYqwsCuD)AZt`OZ(&^4=<!=>0^!P_afviX;qr59vh`<7M`teby9
zw7J{le$44R->=s@pVr%|<Q!{O>UB`pJgq1FnMK_MZ`Gf7Z$|xHyRo5Jx8i|W`MfP>
zSc0XW%&@t>+TvEx_Om;l^lg9l?NJ{82dmqg{6&A?Ub%knuXnqi$61zCZr`*0{=ED=
zo9D-y=dHNmyT99_W9z^3_kO?K=CA+v$%g3qzwg)O_gj76QOs}mx{SGB>2$d8>dH@V
zmH+?y^zn1*hZ{@XWo>_63146P^X7E@->(9`?|=W4uc54Z?yEE9b{9DOYjvCCe=9`T
z{PZ<Q+j;2b=T(z;uoi7-o~|u&%}(5rt7}7(+Mk%ut5WS>%w6Z_{cFliw<nSzu5BSQ
zm!|MkUvoI~*S$&g&%#e`8b=O3JmVyJCUM>~=EG9YI6E7Ql2*)fI;<so+|%&QgP=>t
z57*2!=!h+m=iJNT(%f+_lRbJN+sAa#$1gJdl{YEQebh0<tZPMIZPul<A1SU{PM-Zi
zElPD|98QmVFSaMys7SPTtP_#q3;X^rJF)%Q7I(W@UBSh77R!I`IO)4fplfDMlE~tc
zlYV|5y`p4Np6$yx;j+r8XU!Lhzq8!7nK%jcXQu=S&sI79^Ffi(yq3j!-JcJ6>Rr^@
zYqCtEmh;39j-re%mnT|_UwUOaJ!v{nIZHV*LsF+mxI#YV>P9ZhvxRn_r(Sr&tz62c
zb~$%)*I||v&6y`0q~kj0NozgpoYkqHwQbX!KO*YCIi_#s?(LcO)<n(DkyBOq?C1Wu
z3m>Y#-{}*q<eI;dCBxph>tgS`$;zoFH*_AJT;jVmFeLxTV?EWGJ^_uN`nabqSAD(W
z(#&aBrhQ*><Aa=sUvJrz<<I`COuFQG;jm<h<(!~@D?LS5h1f4E>GF|XYU_A4#LrK3
z*>;{Mng?H=pIaodBE~jdC$wUvyWEs{XCy-n!n=G@KW*yL@Xe0S{&6kN&U9U{S4M5Y
zs{?X%S64^>UG1-*cJ_ft$dbD@Yp(3m+*0su%j*9*Iw^a#u1r{!wdBU3?3iwr!xfX*
zHWyr4e)QL`i2ZC~TNs5`2y#b9+Jza;_xo}o-STFn@2!*JUA&1Y?yI9OGnqNcAC*k~
zJmd7vprXl3XQdRHdd5s&c4d|E+sFFap23eVd4_s0re{>oj=nc7Z1*<7SAyZux3}&J
zTxMANu43|w3&D<C_pV)=6*4#a`mI@9q1$8Q%Rj%4c=t}+Ch@E9zk;)7G2ge9ZuU=l
zZ}>DTZi`yP!K_pR@Almfe*9Y*cRe<z?Cb8>_wS}1=9APhOLYxftn_WE@thaiY)-H3
zdN##Xu5M$S=k5Emm!>aZw43Ny<TK&wON-++W+(cY4~QsiUwhom&S=u)HBVHHcb@dC
zGn%qk=c#7!&QoFgjHYc~^HlZl4uut^^Rm{qq--^udB)}3$G{dD7J25x(|L8qa~|tF
zx4gXbT-m<jNxSb%xF7eqCs}posY@~p_ulR}n<4jUrf_YB?ChE4eRU>FlyzTv2JgBw
zZJ)_9<Fzk+i+5d~_s?X7v+k=v>0O628Q-5^>YXafzw6>swG*K?bY83Oo^@s0KGSvo
zir2o5{k-e?zJI1OdDlMwED|{Fo44rd_}nyA{oPls#J;TgsPi^6c=xSq`^>g&zVj@c
zU;2o1smdmH-8?1p*%w{azOOzT`z~km?z`{m%=bKweOAanTVXP*Y*}=V*S@^yd;k8G
z&*a?uPHn#Q12+2~Q-8}g)V$s@C%)`Di|#Jh0yXJ}V)j2avHQI)iQn^B&VJJ&)pJMx
zewtZgnEd0&cg?)M`aMstp8K(lS2kyw_^q4g)@@y#`|i_R|LBJr&x7Iv|5{G`zsFwm
zx#gv$yv4J#W3E}A-+4K6-j|ixmQQ}w1!n$VeeSHN?BNGN7FQ4RJzsh_=2dIhx1HBz
zQ#Nk4efap_&y2nQdQBEp-;Hq3x4!pz-S@rcZ(k_6|7!2+y+!+k_kCzf-+lh|x$t&z
z=|{$Cr|<IX|2!Ei_aN;4>l53fKdn8z!`hJD?1i)buZxrSeOYGzclrHw6$_>ZzmQ(%
zy(v)t_sz@uzHQt8_wDh&-`AMS9r#nqeM4LS&qLw;&sT|8-kF_daL|3<k8|~QU+%v9
zzS?-(=OgP1|FX#cQC>e&!R`a2<bM5sA1Cks^GtmI_k;QiKX2au_g%gHpU3+De_r1I
z@A3PMzuvC@_x1Ju|Ns8mGq5dSn05c+!Pt1)80AR$ER*>YOXs&NxzBKK{&&X&maqk^
zaS5zW3aqE@vn4HHuT$WtdT{Zr+(}LOf`5PKMdidZPrAsmE}pw?e&4|d%%9?aK9v7;
zHi2hf0>?WA{%iBu&Mn}1cK_!~1;J+#0%ZyOY72#a#WSvp`;;g@!**V@K|;S}!oQ{Q
zf|KU+2`%7eddOX+$g8(dqVFL;m!eRXqCi}t_@adZeG8@cE&Sc9@Rc#{ec`;7iY;7W
zi9cHB^CTroyt^-dFF}AQN%~i!!XZVaG==}Uit>DltWt^6_Z~>9DXD5D3M<85n3*u&
z@cskMnWAAz8f}X-`jj-MDg8OA_$={m9cx_AK^Hl@+nXI{&ptY9tD@ATn@N*SDxJTX
zG>cP8ca@}pTl_s$IW?oW`AesXtYQ^Cw8-(rquG|p|8&ktnwUMF<@<P%>Ri2VN#8S-
z*Mu%+=2Cw2@}A7JYtMd0YL^|+UUYNO&qd~C%8Lq<^{f<Z*pkiJ9<O3dHmh4~dMVj<
z(_-6gi;o{%?C?p+p()uyY8K<Rd%jz|neHVz>nyekdTj6a#Huct`BbvwsU$nM#r9cC
zT#KHVF+Fj3cgLeF#pBar$Dq4Um&(Y>E#8=Uf5+1#omY>o>z?SxE%B6-a!XS22vXj1
zH$}8c#rNM6J0=-DAr;$4NnWd-e0&-G>F<e8bCum4QjGPMhQ=*@xc14u)Ok!^Tq0dl
zLy}yq!c>i~EeZ;X3`|-Y<tJxo^_212!|kQ2@d2u9LYG7?T5@#hzo${}RJUd>4V$=F
zZB|UgqeP#3i((%=_I#$|wd|?>w3MVvOZ=ZL2~$Y3|Fp#AlWN+&nBb&)!bT|_mMV)y
z)xOI<bBkN-_wI?i*An|lX^v`3U8|N%2z-{P_bf7PS#IB4i)Be)JttqAnQXLcQO3Fj
zS?`wki7mHYlxDN*S%A{>!fTIxte)F{S`uLPJU49loUN+qX-XkU7ZU7J)K5LpTehsU
zFFov;n)j!B;lJd3X317=TV9=|=4ACSde@T2d*z<gKCgbZyiV%=mzU4NrYdJJslVgZ
zXcSw~D5ue6bt^3|FkS3i`XYtdsw-OjG+M(}wDw6kPIyrEHLaoSNL`&qM_9Dezh6`C
zl%{vg)989Mv#m^3`(Ii`iR|5@8edPY$h(wr>So5mCmI}k8Twyk^nJ?cf0r@g*YOEV
zn%zG%CaJBQq^CLAY~^G-%_(jxr}$}34O=-iYGsWI7n9wJ2ZbzshhFrwW%hQx?49&7
z%;@C=z06tbUe<4TIdz}roMS8JoYS0pZROlwFKVxFH8{QKUMDxBPjkVv%mwpS&KJu%
zDxujRqd9Tc%f4S3vxG7iNv&Msr?oU})zUbvWofIH<!LQ1TeZASYen0t6-ik~cvwH{
zENMQL+WzV2bg5M{|E*kbOl#q`RSgW8i(Y9gGF!E7(aWx$RqOw0ZD3oyflqs*nDzua
zpVBK_?VncuD>(3K&AwHu`BrWATYX*j<zh9>#qU;ayQjImZ1wg!?HzU5A1sco%zLgj
zOCxK`s$EX6cX?%RSr)VQ--@+KulKmET6F65*0$CA-f8du_Ih7mc8G@ds#_A97iAwz
zVz-_e5obHGgX40}(SQ=oH+vey6fYi`w(8ZvTg#9AJKN!@!?$#LXX_-F*ons<`G)C=
z#lOj%F7@V=k=yZUI$Z(NeRZdlEDS%}^v3Ju#X?JwGg)16hA*Ob%!}EibJ6U?>2Gg3
zKduS7_{OtU$3Qn%BsA3fpy;J@7fwE!7NwJYI`7S@eQt-saxaC2AC|i;JGZN4qv)-B
zod%t{u`4BRs9kIoeY}!YZMxV$-Ro&@3NkL=ey4l?(&^gRDbZVA+|7G?Vcq46-*g|T
z<t+=yIlT1fQK7u+yI#c0ta}u;?&-bb_jg6au2^$d?A?QRK8IG!deNu%a@x9=^YUK)
zdlSZX^?=gj=U#cwAGy6)r1$pPy0`cA-u1n^`ba!FBlpdt+$VfTuE*(p6w^QOslCRi
zcc+lp8?*PX(}Dvf*MITT?|h^8AT9Uxz9;XU^tkx)lQ{(L2Kc3G2z;IP{;t8hN0xdq
zMf$(Jo<5w{`>m(#$1MH7uO@uW(u*!w_qj^%e_YS^OF{otF8m1b|MBD87nuo+*Vi*W
zXaBY7-koLXci-iI__jWNk3M60|GzW6jNSZCI?glwt2Z#ds~>)-<-M1|hj||+L==2`
z($8?U_dCai{{jLW=M9)wt}{OS_LJL(&p`#hgIc&Q8wh;QdDd6p&Y{Pjpa1;d`&*Ml
zx_WaJdV?-WdA72CykhcU*BX7H*#*=88I%~VaZwb{H4GLG-nfltqt>q0fA2o9tl#LY
zvGK$?abe%9=k^H;drzu8Gre{~j!GbB`oxdEN7qIh@v<c6@UJ%9T(r^p<TX*xx0NS_
z<)Z~vw2iX2UYnzERpPhdv#t-4$@;ac(#51dZP@v-W#Xiwxw*B9fu$QSM$f!*X40GD
zow{nzC-bhJ^GS@SJnN&n{6_xQYpafK($}9L`94iBT|eT{Cd1}U|6Dpg>Fa;~d9J8!
z;gQGBjHLHVC>d`y{k>L=d$aq+wfRb)4PP7iYJ4{B-+Yp(sElh<y3i(*#RcV|#+Lhy
zH?VyEbKt4T`pxB?#x~D4=UNsY-R9C+S8SWT(fYNq<7uPrpX$9!iyf+sow-?_ikZ07
zi`kp&nIs!JY~JkfxyU7di;Mi1%4hoK`X(0rTaxy;znf>`wS0@$dJ|8@^>-GvT<F^3
z^ZA<8#x1`0P5hp3Il^<aYm$L&a*4CQfjhtH-X0B~;$p?gCS1a%!P(ya{GS!hmjwA6
zY~8kcO_=HKw5_|NzHZLj8W#U`cbRF#;}@dkoA|W9hRinzPu?27{cA-1)`;W(Or!U2
zjXqr(aeiy;@*EFl)2Q2<T^^Vw+~1n8{%gYF(gb0%B<ZrmU=!aXCh^`|52}^L%5O{Z
zHj9nl78_lb7H*avzutd#srmP>uIi?#{@;?4%Q6>#%go=FnO&B3-1POc4Oacz;&-pe
zUjHroxmn)(Z@J&g(pP`8;r~?pVn%QZN7|kf-6?MS9M}tIuPV%MDSG}QO{F|Ie0ypC
zvBy@&i|v=BDQsU@^1YmYyYu2!=jr86GUXNRY^Cw$)!VlRO<7!#|Gmt+wNL3i!y5C_
zYV(XI5rxv<Yy4YFZkyLF|6a9wdt<nHMdtU4@8%Wvzn6>esO7GxDsHQ>-roAZyv6!x
z(Le2@4e~qM!^_LekJl&fXes{DpkCfk?^f)*y;$F(fqh4v^83zui{5;b8hwG5>pS}1
zS8P}!?DxlF!grSm_46l)TTYb!IYGVBUt;IP{}z+2cTQ6NIhp_G6!Xfd@;j%x@0^zY
zbDH<g>E)I)ig(Va|2d=Ga_0P<GnZG+TyHsR^Uhh@E$8gtIcK-!+~bvV&+nZ3{O7dx
ztCO593mzPq#BQ~K|JQu+T??eG7OGn<lHWC7_}4<?UyHPVE%vrrD!yxR{I5m+Rm+lh
zEi1QLUjJ)Z`>y5PRxA2<t(<PPYVxjC^M9>cZnb*<uGPn@R-d<8b9vXA>s4#{cU4Jf
ium8Sl{eP<s?7KJcTk~!d-@Q@ZdXu^}8w(2qgEat=M$Ie$

diff --git a/docs/images/scfg_dos_startup.gif b/docs/images/scfg_dos_startup.gif
deleted file mode 100644
index 9fe5b42b2d44e62115c5816692f823af78f60c7a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2393
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

diff --git a/docs/images/scfg_main.gif b/docs/images/scfg_main.gif
deleted file mode 100644
index 22359b85a4473234e904e60eaf92d230f085014e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 14925
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

diff --git a/docs/images/scfg_modem_config.gif b/docs/images/scfg_modem_config.gif
deleted file mode 100644
index a69e5b5e7aabd87746a760cf35c9540570fcc6fd..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20932
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

diff --git a/docs/images/scfg_modem_fax_code1.gif b/docs/images/scfg_modem_fax_code1.gif
deleted file mode 100644
index ab5a550dea8b2ffca1355db4785b3cb080695991..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 22581
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
LryUUxV6X-Nw81?=

diff --git a/docs/images/scfg_modem_fax_code2.gif b/docs/images/scfg_modem_fax_code2.gif
deleted file mode 100644
index dda24933f8e9def3a1e5380b284d75ca0b8bead9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 22603
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

diff --git a/docs/images/scfg_modem_port_type.gif b/docs/images/scfg_modem_port_type.gif
deleted file mode 100644
index 32a0ddd45e2c22d1505b3f362bd02c840eba52fa..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20853
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
Cl!%A`

diff --git a/docs/images/scfg_modem_resultcode_15.gif b/docs/images/scfg_modem_resultcode_15.gif
deleted file mode 100644
index b8518fd1ec2d0b37ee800a4268609c14431224d4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 22669
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
O#l}ZRiws#<7_0$nNwly4

diff --git a/docs/images/scfg_modem_resultcodes.gif b/docs/images/scfg_modem_resultcodes.gif
deleted file mode 100644
index 447b5f7a76d57fd1c89cb5655b7274ef8f42ae03..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 23594
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

diff --git a/docs/images/scfg_modem_strings.gif b/docs/images/scfg_modem_strings.gif
deleted file mode 100644
index 58f6098c6563582a5e8bc159e2df2fd21cbcd223..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20604
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
A4FCWD

diff --git a/docs/images/scfg_modem_toggles.gif b/docs/images/scfg_modem_toggles.gif
deleted file mode 100644
index f422218dc4e5718f6e947529a8926142e09bb71c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20983
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

diff --git a/docs/images/scfg_msg_area_advopts.gif b/docs/images/scfg_msg_area_advopts.gif
deleted file mode 100644
index 0c78f4100692f194d70a2fc1d19378172ac3b2e1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18176
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
Q!YPksc6Ky2FfdpH0BAGv4FCWD

diff --git a/docs/images/scfg_msg_area_netopts.gif b/docs/images/scfg_msg_area_netopts.gif
deleted file mode 100644
index 5bb7274b3899e07cd00e2df403886e2d3a6fa41b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18896
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

diff --git a/docs/images/scfg_msg_area_toggles.gif b/docs/images/scfg_msg_area_toggles.gif
deleted file mode 100644
index 60e8a09695c00a71494a67c574225943dd09582d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 22080
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
GgEavBAtKuV

diff --git a/docs/images/scfg_msg_areas.gif b/docs/images/scfg_msg_areas.gif
deleted file mode 100644
index 721a08baa78a3514c35d9bf3ce8f2779bba96219..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 15314
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
BC1?Nu

diff --git a/docs/images/scfg_msg_areas_gen.gif b/docs/images/scfg_msg_areas_gen.gif
deleted file mode 100644
index 759d3732ec033010eccc4549ba8f5acee303b881..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17522
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

diff --git a/docs/images/scfg_msg_attrcodes.gif b/docs/images/scfg_msg_attrcodes.gif
deleted file mode 100644
index adf122a2a98ba56bbfee1f73d6fc7d38be563823..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 19853
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

diff --git a/docs/images/scfg_msg_options.gif b/docs/images/scfg_msg_options.gif
deleted file mode 100644
index 7f2d925a437fa74c055c342205522399d2feec82..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17004
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
T{*UtZpVaH$Bs(}TFjxZsa8Q;W

diff --git a/docs/images/scfg_networks.gif b/docs/images/scfg_networks.gif
deleted file mode 100644
index 5c6ca79bf33c728bc495aa34e338e079f7804f4c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 13354
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
NBylDyC@?Ts0|0j#cK84Q

diff --git a/docs/images/scfg_networks_fido.gif b/docs/images/scfg_networks_fido.gif
deleted file mode 100644
index 76919a672339e350ddf18866ca190ab002435690..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18676
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
N_T5KG3JMGi)&Nyf-z@+D

diff --git a/docs/images/scfg_networks_fido_address.gif b/docs/images/scfg_networks_fido_address.gif
deleted file mode 100644
index 2c4247d88599ae6d25623980b7dfacc078228b8e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20651
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

diff --git a/docs/images/scfg_networks_internet.gif b/docs/images/scfg_networks_internet.gif
deleted file mode 100644
index fdf6079929677e2ac12510115df141331276bfd4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 16268
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
ND4VmfurM%K0|2?A0YCr%

diff --git a/docs/images/scfg_networks_post.gif b/docs/images/scfg_networks_post.gif
deleted file mode 100644
index ed0ecbad95be8bfc3786ca7e032caaa98a84dc99..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 15610
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
Iz`$S)04`F~ZU6uP

diff --git a/docs/images/scfg_networks_post_hubs.gif b/docs/images/scfg_networks_post_hubs.gif
deleted file mode 100644
index 66569ded806f11217a46950c1603dde584ee81ed..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 16476
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
O=PYkaHWn5J25SId7c4da

diff --git a/docs/images/scfg_networks_post_hubs_sccm.gif b/docs/images/scfg_networks_post_hubs_sccm.gif
deleted file mode 100644
index 75705e96505f32f5f5b9252513fa5887605ea05f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18471
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
Aj{pDw

diff --git a/docs/images/scfg_networks_qwkhubs.gif b/docs/images/scfg_networks_qwkhubs.gif
deleted file mode 100644
index b37d9ea8da853a4717d7ee513a0f7112d8af6d3f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 16265
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

diff --git a/docs/images/scfg_networks_qwkhubs_vert.gif b/docs/images/scfg_networks_qwkhubs_vert.gif
deleted file mode 100644
index 18f57a8254f964a37295b13b2247fe507a40b2d3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 19050
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

diff --git a/docs/images/scfg_networks_qwkhubs_vert_subs.gif b/docs/images/scfg_networks_qwkhubs_vert_subs.gif
deleted file mode 100644
index fb6235545454f772815f6a9ecc9c64678e474774..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 21580
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

diff --git a/docs/images/scfg_networks_qwkhubs_vert_subs_opt.gif b/docs/images/scfg_networks_qwkhubs_vert_subs_opt.gif
deleted file mode 100644
index 056e29ec5b812125b7b5efe0e0d6da56acd4c3aa..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20327
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

diff --git a/docs/images/scfg_node1.gif b/docs/images/scfg_node1.gif
deleted file mode 100644
index c24aa3076ccbfa0a6d37feb5c4ddec156ec63596..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 22095
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

diff --git a/docs/images/scfg_node1_advanced.gif b/docs/images/scfg_node1_advanced.gif
deleted file mode 100644
index 65f4a4ca51badae6ce9329fc326879b7b4044950..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 22902
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
VBrm;_DU<!|I8`S|u&^*#0{}4Dw{8Fc

diff --git a/docs/images/scfg_node1_toggles.gif b/docs/images/scfg_node1_toggles.gif
deleted file mode 100644
index ce09e26c32dfed3b7b7d5146421b281b1890b189..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 27710
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

diff --git a/docs/images/scfg_system.gif b/docs/images/scfg_system.gif
deleted file mode 100644
index 7c5d165fa489efaf1dadc2360176c6935c0f97a0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 16277
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%0A;*6@hdh#jq=6^ZtOA`Aj7&WdeG5^e5`BC{8X
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
Oue3I2V_{)num%8lPSLRd

diff --git a/docs/images/scfg_system_advanced.gif b/docs/images/scfg_system_advanced.gif
deleted file mode 100644
index 448873250272e5de24fadb22f4f499cf6e12ab2e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20568
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
W)!6%@agRgeo|i@&Dkv~8SOWl$G6%8%

diff --git a/docs/images/scfg_system_expired.gif b/docs/images/scfg_system_expired.gif
deleted file mode 100644
index 3b54952d0e62886bbc0ad5d11c96ca0b1ab47541..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 19122
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

diff --git a/docs/images/scfg_system_loadablemods.gif b/docs/images/scfg_system_loadablemods.gif
deleted file mode 100644
index ac5fdb7303f7e4787c6117e85adf7e8da40d0e0e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18790
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

diff --git a/docs/images/scfg_system_newvalues.gif b/docs/images/scfg_system_newvalues.gif
deleted file mode 100644
index ead4fbe22140ef64dbbe91f1136674680282d429..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18909
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

diff --git a/docs/images/scfg_system_newvalues_questions.gif b/docs/images/scfg_system_newvalues_questions.gif
deleted file mode 100644
index f2a4e100a58c776c78e3ec29d58a94d97fdd5a2c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 22677
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
MrYCzOn3x!>0n3n%^Z)<=

diff --git a/docs/images/scfg_system_newvalues_toggles.gif b/docs/images/scfg_system_newvalues_toggles.gif
deleted file mode 100644
index e851764a7f9276892ce92084d3c5c06ce08715b4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 22276
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
N!*Op66%-g4tO4(*=T-m!

diff --git a/docs/images/scfg_system_quickval.gif b/docs/images/scfg_system_quickval.gif
deleted file mode 100644
index 53743368f9f981d9887dca7ecd9c94f851ffa00f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 19960
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
Mq+zI_z`$S)0K>@eGynhq

diff --git a/docs/images/scfg_system_quickval_0.gif b/docs/images/scfg_system_quickval_0.gif
deleted file mode 100644
index 7d0d4ca9e186a8409ce89b215ecde63077c2cb02..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20938
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
Sdd+$9+RNqDh6)M{4AuZiG-DqC

diff --git a/docs/images/scfg_system_securityvalues.gif b/docs/images/scfg_system_securityvalues.gif
deleted file mode 100644
index 9a108983868121e90a3ea2f8d6b8ac6ebcd2ab13..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20558
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

diff --git a/docs/images/scfg_system_securityvalues_0.gif b/docs/images/scfg_system_securityvalues_0.gif
deleted file mode 100644
index 840ffe99be4fd430b0feca6a64c67d9971f19ea9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 21390
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

diff --git a/docs/images/scfg_system_toggle.gif b/docs/images/scfg_system_toggle.gif
deleted file mode 100644
index fbfb8863bf9fa6416bfde149f1c90ce3c410b48f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 22004
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

diff --git a/docs/images/scfg_xfer_compressable.gif b/docs/images/scfg_xfer_compressable.gif
deleted file mode 100644
index 81ad6ca3641e7e831e69cc83df20e3ea51b23388..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17293
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
DBpwaJ

diff --git a/docs/images/scfg_xfer_dir.gif b/docs/images/scfg_xfer_dir.gif
deleted file mode 100644
index 6a653a7c0f8863a95ed7747418459096209c99f6..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17884
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
ZCR;D_>4fV1IiF7HerJ(xZeU=r1^@-rha&(0

diff --git a/docs/images/scfg_xfer_dir_advanced.gif b/docs/images/scfg_xfer_dir_advanced.gif
deleted file mode 100644
index d40a5deee6b21a7ccf0b92e544ea8a40dd0fd1b5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18488
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
H1_o;Y;IL4t

diff --git a/docs/images/scfg_xfer_dir_toggles.gif b/docs/images/scfg_xfer_dir_toggles.gif
deleted file mode 100644
index 4b18229fcb251fa61af33260e3011c4cc743c1cb..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 22625
zcmZ?wbhEHbv|;jQ{LTOYEes6*8CqI66tg)rvjsq?SirDY0)(n1EUOhks72AKMboK8
z)2l_(tH;o*$1teJFldTp&=kw4DV9-loSdATqUJay&+!7GrC!-fgR++f6)z1cUK>@s
zHmZ7URQ1;6>aEEwTa#P%X7}vP?m3n{<yi5QW5sih70)?WJ?C8Y(sL~>EiFsWwJg2X
zvi4dJ2;J-1dT$B{J)g4o`JBDa=Nx;#^w|5Q=iV<p_x;$hW7n>o`~RQe|0oy@0dhk?
z2b2RqdBK6>A4C104~i2W9BAU;*D^U_ka)P2PuXeCj}41lx<&M}&YTcje7slQx=BWJ
zQ_6|SDuJ_nP8Kcoo@x+%tVVOQ+S%F0#s3a`Q08!CVyR(}@Y<4bQQU!BKqH~S;qr1;
zJ_!SXs|_K{9BYznCnRJut>f6I<{?m)!^Fxd))TrQOqY2ZkB~ux!F0#FyZGKbyL$Qo
zBQtxQJcFFhkH$of27dd74HX+%jti)`%+pD1YB@dCIC|cJolZ}=gdM^eauZ8lTw0+W
z;gG9%_|?^Qrd#H%RdjxPdxvSxg|!R6zq>D6Qhvi=PeuD<X`7OOeS3bkKRsn%!C)9`
z)xm##bNhjPwk#Zi_nrSWh$}k%>G<^AvqNHGolED}_nv$774O$}{{HU!K!4$Xmiqr{
zKhz&^vWR6UG-?Q}Xlhc|dGVlG%S9uxMcXH0A(w7K$3rg3Z3h(Fbz3x&It;c1JnGav
z!qCiZFlB`jkJhmTi+Bvq2{8AXJ<~YMV|mWuFptrnh~|D{9?xc8cd^bTyrwq}ESYR}
zCxMyIFUWE!ucgmSRldk)2bNB^Y|&gc!|F*u+Dz*w6Q1!|ZP<BucJ98PYW&4)hL^Y{
zZfH&kbm44y&S!H&^U{3lA15dK+cRucpI@Wo>L4(|>C~0Q6WJ0OmPC1mYA#_{m@qXW
zb*k&N$mEq%!=ef=wra(e+`alL?%#%QU$4iv3Wm){>@pQQm^9H*?dJN4iD@&_rbe<w
zWz1F7zQwY1<+C?gtM)#dmAxfW;r7;Tsk3kA@BO$fy5NZ5^2Wj=isdrJr(Bn>E4j9{
zTee)j;`&^UkA3QLRZr$_pU3fP@AG*apHH%HsQE6qM!xQsY>iWcs*X)U1H0QDg=Ri8
zj)yH0@ezsbGI<t{j;plwJnB^6^&zRp;F88;9?jzml>7BQdmQd_66#zs$xH6%lXIa?
zm8w%?na)0)9^WUKHZx6b?XydHX1eNg8}@0wSX3+3vV2|-U+Ri0ERrn&*X;$Y1m@Wa
zwy3jZEMNQWR?haf-)<Ki*ZqE{<a+M+yA{vZe*br`=KI_4_Z!&temrOq&)f0Pj>F4r
zQ3c<FACD)v%Q-MG`~3UyWQuj(&Zkp@&;5Khv$$^O^M#YwRlZp4zRv2!^74DTUMyN}
z_v`tx-F%j>*Lu&}`FhLkbye@yPye_3-L}Vlzdy`4U1$AftGxZ6&llYF|9-g=zQ5+x
zvFrb;-yc_(xBa|t{l4lCPd?k(eZ2Gj-QTYVl=FW*d+0p>$Bp(`y^PO(JYWC+-=FXA
z|Nm#;S-`;VaeztcLj#A;0w(bj2iUAWGz#=AU{Uut$mO>#CvkN=o9>B&d{rNs6?hhM
zxO*HDn)RVY@eSu+gAR2LD?JY8hKG+8Ol_sk1+<xm%;jBs{IJ}w5AFXPcoqq?S6C^q
z9O#(A%p~-Gxyv6@!TJf8?h6Nc9My`t*y+9}>Cv0xhko0BXf;$>Byrs1nE0a)ZRtG^
zC6!tC$}SS@&AgH*rOj$-zRR$^V#&QHJv)wQs}*#)vn&x>ZgIknOK3vS6J;UpnMWM0
zK2GpXNl_Mj>CW`2uqg7eFnj2XgL=CRdJ1(GYq)!!3c6<4vrOcX+~$arVY@y}<=&IR
zV3aw<_f=-$x8Eu}&NENNofDXvw&tPKbBW{Dzdp^dk4cqJJb5O~O1Rr&NowE$4QGzL
zjgxymFJfM)X)D85#BiTwxsal`Ut!<p%I7NSR<hgA6*URX{LqswFqQLwLc%%r$^Sk#
z+I{WZU;D^-{_j2N_RJsr>!nQU8Cf$NMYAq6$xT_vC#&HoJ?lcdTgU>Txf%AtRu}7y
zL>9{}UE$%*bzxGS$P#7Q6*@~jMe_I>mO2Y6s2A=$sK3v+YR{B({_>TV=lv3?`toPK
zt>Uapi=@7;@bFy~H2u_-WmaET2Iyu5ByurK4+>qj{YnCN?y2B8T^m;)eDlmex!irj
zzb|X-c~|{!v)ZZQCRm)$+YsHpOY`5+(sjAHt8E`^g>QRwbzSvR?bwH>uJ04NwxJ{S
zwK3!B@WW!?8njzih9+tq$i7sv`u3ic`e$c(o%@%!CgrZ8?86^6X16BvX5CTc3+%r3
zYUS4YuG)V&OZck8_ni~l)^&AteE#k5+t<Er-+A_ae6@GP{dd=P9Or$<p8h-Ro|eHT
zow+*R8?!Y0Z-va8r<+=K^46_)U7xm=#jdG1F75QfD|pwXCF}V0R{IJBO<kpTSI59R
z+Wjiq=Plnt7t0iCIZOSzzK`ME`tqadr?)y8Zs`50o69;og2i~-PCmDs<fmF!?s`Sk
z_wW7CVyg4-VVKvBQ?UvyveHT3n}qh6@6BS+U48Z2B=h3iwyARWGu*7tl~){%(am;`
zek}9odSB|<m37Y6J{P5mr#!fOzp&H#4xjb(?ecaX8okdXK99R`O2N$_Zl-p`W4#?a
zj`r$K*%)&`P}uwotBL+U-HYDduab<X>wk;usrNi$*<5&_A}m#G`pPF3zki<R4JlT;
zImh$sCh-d&m#**sJ^TLue?ce8_vtTgf0N<W{_T=Q-j;^1-S-vSuU<}MHCS#Qo9VAE
zc{s?-xcTg#RH5~uXL#2wZ~lMl$)Rgz*S6c~v@Xp#6!YBd@IT>_YaDa8o=UsCtIp4)
z@Ad1<Ys<b(nJ_PZY2}}n>6dpLv((+X*?o1cvia}h_pfc7m|Kzc(9iPpbH5LhO1+=%
zdbRDU*D}-9jk?j%-9PVzh%H<-arQG|Z?mIQcpvyg_hg*as_H1)S2$1n-7VYe!WRVk
zcXTfP`F`Chi3Y70{e%D4yg6?qeWJUr#QdMV-Anm$sV9^Cey;Fd{nFasdjEVrBhyN&
zx93D9wyjM2u<j{uQp|SgYio|JJzu&uZ(;wB7gq0owoQMR#r7-eC9{ax;*PT#$;F1V
zS^X_Coafy#)rx6XIbK#<DwB69Zugbnvfpob>*cMBzP%-PyQMboni9Ru)^~mTjgk#>
z65~!w-K*LEY5nK7r)nSXzAw_RcVM}8!O>isn{4rAbN8Q%ZHwOb(42q$5%cqvn!lny
zit$?<+uZfWqFm<9jBoExxq4ShhF3qG7Pfcs-rmd`i~nAl>-O}tqi?lM*RQoR-y2_?
zdG8MA^cl|u_T{eC?fJ6k_ukJ;Id&V=`%ZQ({`Ba7a^cJPe>J~OZ5HNORlM9{q3x$z
z<<WOs)4ufWt$lJmy875Tzv?@?^S%{1fBfld|9N-szIV~DYhU^w%U?e&uWWn$<Iskb
zG>4$$>LJTLd&6TRju%dRUN~7i_hMP4L`Ho9Ypu+VO7091-Ux606@|Cm<7}6fR+?1j
z9M74vt!n>qZ*}p61uD(c*s^AR%XN5K;54=P*z=kb*USGruaW-N?6jkN*R!xn_qa>$
z6%1b*FK?-Mxi#sySfgx*<@?lHF^RHm?8P=>^)7B@Z`rHATu-)I+E{5?^HaQGe`}iK
zjp*j~@?X!}aw1wq(`uL`O6Qly1>8vE|B+_u+P=A@wW^~@BBJAba@)V%Y#m)YBK&Ry
zRYznfS7dab2wm%*uBBeQi@kUcd**KOwz)e>=dUQb+}z<Xy~K7#eN%Y*+2?Jm*|O~{
zvIUQo%>7>S<9bWwj<o)WoS=%*0<%uuE4Ay=o1bqlOMl+#l2&HEqRhf0cXmX|kriR@
z%G!>ICuZ%)E6Qj&Y2N<7J?|8I%-V1DS5NqGSkzt-?^sY?yXd<;b9mFf4u=C7ooy2R
zi-l`eT<iN5;n`~;q8K64_O0Uki$39ws#jku9#8RWb(!!kWx@k?zZWcZ&qF3~Th>in
zJVA(aqOjyd&YOO(mstP5F|ocaY2on-h9$KjFD9~n>6@t5cIQ~@<7YkB&D!QK{g<h0
zS!SYHc0$9gX~tx$os(^DPPY3w*+FuOQ)joLWb0z~#=RMnSXw4c)#&$IY2_?AHOO*m
zNaWP8%BjCSME;)W^ZIG;|8r`B<g_HqX;+(T|2a?cyg8M>WNOaMX?Z`V6-Z7mvYcMR
zIVDf6GmF!)bm#P%o73xlPH&K$5wdgYO%wm;m+b-~Lx24U3jG>1Ve^b0$(g+Ec87$m
zCo<3MTiicm=geNuY4d*0Tp&4%=enzeiomi=VJkyH)xufJX3mN;7S?MNUST<VQ{?P*
zp0l@S&fc+e_O6?=cmABchjY%pN_8m~5#NU*$7aqsv2)JxpCachMK4Isy>wHQ?SkmF
z$hlWD#cuuEIX6vEyy)ZH!bI^hMe#?G^PasF-y|gQvQzubOzobJ^Lia61q5`y%#=K`
zN%H6<ozqHEVg*v?Kk2Mj)ZP40O8SBn>n_HdO$+XPl9s-(fbZ7=-dBu*Rtx167K+Z2
z5uLSAPC-_B*TOf4^ll64E8UX)`ib#rq5gL#IjvQ4e=aThBP9Pta4}1;!SBGu|1KI>
zSSbi?UMym4DBf%+=A@`~!BAFMNr6d8F<D8;*+}=&62D(dbeNfSjF$#kEww3H8gWY5
zY{Al)S1QI2mf8s~OX^Zh=~9g?TIM!+S>_>=#7}Bjo79SgmKPf>4-8%&P`tdPYkAqM
z<uzH$wOcg0m>3)lME*5ft!SzeaoDKo)u=hSNOS6=6+s_0=N=MGP!wC7B$kmVma8aU
zuu*GWk@#kzRh19L8yvM;CQ5W(l=yg4V$wtHDIc}Jb<UqHC^diK{8N{7{?3%TAhck^
z#nqRUq;EAzZ+ob_Zy}@11KopxG7ppVjyCF@yU2KnaqVTpweOu|?-t5l=aPFQDEA~$
zPHUI`+lz9a56XQGWO`?~_|HUnj>(I84;!#B8QMfCa6ejXC#5LHyu@jhqV!`!ndBw%
zkD0u<HYiV4(qmF)>ozh{P&O@6)_ZJZeM#9~NX5lS#q@)6^eq+lrj34=RP2&f!#Am>
zaH&N&nPjdq$(Ur4eMv1}O1;SH-}2zgv-k>4nHd=b9XCs=m~wt(j%pT2a&Btqn&Tz7
z#oKU;6Ss)lY7zg3B4Gzbf&xV+W{JjZ6ip1An|M%k`Yy4hleW%YrB!-SYpv3}YQ<HX
zomOp4l33X#v4d&;Zln493X<!sBo7x!Zi>>G*Qj%<NNS;>)GjIA6^6Q-19i71>fSP1
zv;Cm%p29T;4E0V&={;Q}(|cP+`jw1qm8|qE*$+%iH>LFNSjoMfxaj3X{l82G&!r4Z
zXRTZITYklF1C~n$*0U6NoYwOft#_zWbY8XI`PO;~CL;!ICDlbsw4IDtsyDD(D{C_|
zbIw*a{JcTXdZX*5Jsy`-;#Y07QC5}vy;1(3wn@UIy{fmDc|BIk5>nUkUjFFzrYF(+
zo^qQ$yS=HTX^P~Pg2$6>H*U83(QNzbu+7Kp{p~01P6zM*aeDvn=$Q;Q)|)@?`+j==
zPwNB!qU~;9w&AHc@WtEazVLxXnKPCITd~b)=KXWPQp4`jWV@%2ZKkX|@agn{kDvE1
zUu=8Hc~-0CL7h8?^!^+&;5q#Har=y^)6HrQTg*A!J+-jnXScaW&j)cY4e`S+Z}xRg
zN$o22`1sAk>dukSEq$sd9eg5>gv7L2y*LtK<M<`Q$>vRekj#WoA6xgfPE(1=X*ykL
zqHQ`qs*Wu=#$r}3=<d;F;yLk&M{mjTf;slSUtFqVj=S%1|5q&I(RAiWVNLgh2*-?{
z?RIkt7D=W!=QLk^b}Uh+yk^?bX)@kzHaU+TI|R&`#%*#m@#KlgJpLUOCzr`M{Jb$E
zmen!#%v1)?4k61rvCauw_Dp1!tP}iMyXDM;1vaOSyL5e@;;;5JK-Dzhh);maQ-Af+
zGj3DQ2rLaasuOg+=ZvgqplIru>uUn9<eWL&;~&_1_DD{khiPcUjF~ShrUkz^$#rCk
z_z&m4J*5-w<oLcky`<)-1$$aRdD_lny*F3%#$9Xs^*r%^PD6uPpHD`2r+LQ<jY+Rw
zRIICUc=IRpvyIy#pYwZJ&McpE@%Q9Yk&?j^UmTskCRnt$;4{zpXo<X=+x|6ePOtXs
zym(n6+h#^Yu15=lMMUO|e3RJJGt*;!$~bwSaFChX9lE{S<V}*C$&|f5mm+^my0Wcq
zN?K1oOWyfqJv`4ZRi>vh%eLQ^xXie=P4w7hr}n%Yj=p;@&OhmJV3W<5X;bR-w!uB}
zigL@91RJjnITx3vT$P%8-7$7bO~n+u)#o0GUNkPdv}XI2>^r$S7MW2UWmz&^>b4iF
zwjKR$-V*h!YtxJRX|XkK9rasw99g$5b^hAoWgaC=x%s?TZf-i^l6|%zSGP%d=DDsj
zwZ**sx5IA7rQguvOwr4nY@k{1(;IcT<JbeYtFawXVZB$GV{a8p<R@>tY|PuetoJ<2
zzq@z7o29brI<}?X?Fg@ZuHl?^(|)eZZ8eMAnvyQ1xz|0?&d-{D{mtI%+__VD|1NLX
z8_`tTsT+RdY5M)yCrbNrkL}#vl+@AOdAG@Q`t8p%jvxBom42ew@NP=u_uiK6U9o1h
zl45s_V!Jh3ZpkdW#pyfc{oU&~*>9Wb+%B~}w%hmKrDK!2Y_n4S)ajk;iTd&Az}iQ7
z=8sMMPV%eYz1(~A(%!4ra(nsiJ-85i_q=V1^uF_#EABGiNN5l5Q~3F?UFLp)ZsT)a
zm(ad@DJ|FE)Si0x_U?0@drQQRK8}5K<ja*$J-7R6qjJtn>dtM{o!*&dcVxzorfJKb
zx{Kf9x_6nMuk@c-T)UG++R7QX9xZ*C{<c!qE@SQ4ewVw4RpKuFHof|){Ps`X9&^6(
zJ$J9{s-3*gx6MrQ&d#-Uze?}q?`X4<t60)^v-aK9w6#wzOuy!^_m;wp7g0Ccd+eU|
z#Whaudz!lBX>{Gm*t~N*Z|&FWJbN5^e`C$*-8pXz!=D*u)GgThNT>Xm=8nuudUq1l
zU)ip`Icx6`A-UAk><``KuDS0B_pE4GyW`>Q+&-?iPY>R+@3eWe?cTW^??P?U9-G?T
z(W<RBS=lt<-0k<v-<#en-P7`RNnN=)?=^n2hd<Z6V$*;3Yt0=mjr=v|?DwCW@%Ehk
zL*DmC^)78+_xk?Qdz|-P$MC)OKk@H+px&EAyZdw0uc!1?U%2=3%D$I+dY`o;@9pRL
z^mWE__lOoQvxe0kH{ISnXkFLQa_*Jr|GR%azjK>=^q5|82=C<A&yNM_r|4gQw2k-3
z;*QVH+S&x}f4K7Y^WW{4SI)ay_588m^t-2fPpQ1`P+Q-fAN$&;|Iw#+AFmyLt<-<i
z{r^*m`JW!ie%GB}y-&UC_g%N|b1xOjy=2(;rhR_V1JRhJKQ38|ciZ+yGybS?<on|A
z|FiA?whdn{&!~AZ>&`dlzqj_>_#Uz5&GC5?xmHemHRbe<n2AqICUDF=y>b1ob@nbx
zYrad){Vu-WUUL7J<@(=C{(syR|L6bbCvW)fYv|u!_Wp?PzxW?Vcl_v|`(t+BjdOZ`
zFV{T^$o<%K^Y6X?e}ivcWJo9tt~=#v`{%{{fBSTP<>@{xkpJ^a{{JWY{~qsu*R21z
zi~rxR{r~^m|NoC)fPsZiCE~&Z#}-aeC7ufx9v*JDYx?oyBh%sjPEkXi2RAN0cAvm3
z)g~i3Y4HI@4gXbdPE1<hIYZUj>WhZ3+Ucp9j9W@91)ljYaBSsMjk@w8aEa$sz0_M*
zUIwoSTxvA+hqJO<m)P>Wr?;-Y4&RV?v`;nq+MCEN@~eMs=(wtNRKDQpzNOOJ-^J{%
z{P=F~?eO*S`|4TQ)p%}vcyPE?P(SRB#mD4h6J*_&+1%Wea%QS={IxqXKR-YFZ=r4X
zwmW9Zj7)Z7d^L@`7_yjIxQ>_^?Ec2c%+B@TSg*qOM&^BjDi#wM919<D_GtSrP&ml+
z^n$oX!#M@UX4Y#Pjc?qW+sORx&cXil4+k25etv$|-hjVx?{D^ZPj^peSop8@_cwKq
z2^;qR|IewmV!?hc7LyGJxO4<AG;s-)Twr3;J;C6_r9LNsnN#<ILNl-R8-r$ElM4z*
z1YLP1HuG9ZY-|>Ze$(J8X8XdyO)~w>17`k|BOjaj9DXpc@YnoNXpwI>F=7$u5Mg8y
zbP`y2Qhm0JqL-kXf@6!&hAWd=gxoY5z4g2Wiq8o7XaxHh`)dUInt5A1^tE_A<ui-u
zy?<*y``Nq<N%Xf1jYvFiADVISykm64!VAv4xrrBD6BDikdPFyfv`NHtFtT|W_ddKN
zk<yXKCSf!8VX&mz+{Ct^%o&cMq3J6QUX{#Qu#inUY3Wop>5Q$3;j#G}7~5kTS<Twx
zJI^w*Cr>>4@J8zF+_Lu6@(YUW8B5oOwaczKYZfh6_CS%N;IL?U49_vs@ED#ww&izA
zDo?yxbUBDwfur%o*6j<faWI6NF(ol?H@o%k>{*6_O5+DR9yWRB?RYw)c%5a(*2R9i
z--x`>+x=!AH@{8qd2Ri@pRNi2w4J2f@xJkw!U=x+e{X*CANco8`@;cd>6n6p?8-|7
z4sjZ932^57*DN;CS-4xz&_yiVCy-fUw%^5L;-zyYy2~{Fx!BCV?wjFB`KdmaUaQY-
zDLSR;y5p1Arp+O<z4iD0ndD=9eoC~j@QpRUTXsL6v)Rw;_r2ircFfN|pSNeX4GC}*
zjtwbvQ_a0n=#e}@gw5OZYDimvx#`r9VBg%*&<pWXw_b}bmc9EWw*0H;jrd%JvKvVg
zOXo(W&z>uGOJ>>LxluVAuTHz2yPJ2B-hLgaf9wpuyyBEgUkYigd%kv)#_b(Gi#bfM
z3Z0T`sEMDPd%r$c`$7D@e_z)=Xb}(Vd-zqpY~8NcI(2!wUmKl^*wg#5-r@1rOUeGW
zKj!$@X-xL7<*1nd>j!(<zu%k_Skk^7VAfpWD0nKeNny%@`I#P061M~{*tnPowSLI(
zah}y3BeHe*#TRbcN1`U=iKwi}UF#8(EOdR&5tWUdYjdnkW>4FbvQ2OAS?@%t;5+A*
zsF|w@=I0k(7W&%8WbyH>U)|x!5B``~91-LTjLw;}Snev5xXY=)sk=hBEmC*-9!v<C
zaa(4U-`ADFCl`dSPn!B7#8o@`qgJWehpFqM*sT*)Pe*K7J@?(TRF90WdeQrChbiyf
z+Wc7bSVdUmy_jj{wjQ@stEa4a@})w-wj!3_bg@dRrsvOD*DoxK-~3WMFRgiYqwMp9
zqcc;Pcs9s9G2ux%|8QwpRpiF*%J$^L|K3DY?%QlXab<f7lgI*=N1HcIy?flAhh;(o
zhlm1;>jnprD>Kj4T{Gs(yU^@pJd4A7g^7^WTi3wk<-H{>Tg9V%v)!eHCbw--sd@In
zQ(55l)KymwD<r*a&leUJd@5$XOLJqMZ_4C*PgGp@zvL_k+oSY|YwC`pnyU(XiW(nV
zX&p20>+8u_a%H)O>MH+(8$;%2U6l?0s%3TURLPD@Q`ZGOcTe1^7r8EY+9r<56B&$O
z%ba7ED9ismp|HncrFW`U@ad}|EA&ibC-h{6ERWh75cSlcQj$0P;i0SR>aMPi{;L&t
zAS!Gvo7?JS(KAWcZiQ{{`nvW=_Un{$vu5sEHnk${=|7$n4d!d>+Dg|Iv95{x?iIfC
zmgw5{v)ajzUqu|<AZoloFeml?Q?a!?sVZiUT<J?6-R#dXV{l{44flFI<+7OT7MaMk
z9&WRvCTy9evR-y=cJ6GkJLk&Ow)%Q`CP<6S+AwXKq2#*U+US^@$HaCXHSP4Bbb9L6
z2!G`zw(oMIPv3m~DQw5J*t~*#?>iUtzVDtl)w68p>N}sZ%6H#ho0m0LJ8r>@?|WaZ
z<t*O+d-AtS=G%ANT~m0pI_e^y`Tmbf^>Z#)-(xiYzW-P1`m(#)53b+)t{%G6%gt!@
zl>6_l>uf!{q0RPBqCk7Z5#>Cu_Qs~0Yob_`w9^W^WB(*c9FI6=ysYqFZ*EPp%=3uj
z*3Sz2YyTuGut%P7Rx6s=`{vP$WfIKpX+@Lg{z=hrk31E;tZ3@mnx`7cEK@X&6;0p!
zC)J=m@=UT?@yxY8i7!`4oG@UV9&qc<MDyY$XA9*R=6cqo+XzoT>cG&{^YhOHdux^$
zMu{!XOu1<;>QNWX-3+H+k4c|!BQi#A;pQdH0x!LvM_!(NFL%CT(TlbY?hEtsI971V
zwusKIy0|*cw8!)AQx)r9$BWub<{0x%@w)#@z3f@Zde@j&411!kR*QXG9c%L@Onvv&
zTC;CcFRpo_a5?JwJ~i(3zDaLm{jF7Q{NvcJx%PF;b;&!oj^%GSyY`Kk^6z7>{LDB1
zn{As_Vm|XGZ)C5-j5`_J`adsDS2N#wFe%sjwpC1yTKSykHQBk*R(H0&D?9Xi?SsnW
z)>oJOD_)@e?q&Dk-B)VD%8xa_&2u*YeL+s$^0?~1m&Mnm8GQOm_bujq+5S8Fna{)T
z+wa=Eo4xwlo%eP>yAAt3_VUlXYb#!L>h;-AkC#T?-`w`|%;ZP8ZSJw>{v6wRc{x+g
zJmJ{a(aQ^ugxcMffBZXEzklb|hdnRb^lM)6y6?WZm?>x7@z{4}-@aTw|L&Ij_L?`p
z*KNJM{cd^T^O#pRzgdTDuq!{JF88!_{q`-bv%fEKp8Y=cz4d(Sq@ODi>@;TWH+#VS
z{`KL*5?6UYGQRZu7ypalhr`#^>9wyT>#MGBm;1JHdF`9@`06W<?|oZ&z4m>0ef53z
z_#f-+Z9la8|CxJv_ebCBC$rLY%6cc<{apXN<7uM-!<phgzoy@}`?mi4&;Ew}zwXN0
zf48hFJ5^tIWMTcs7s2(_mp{uXt!m%@G4*`)ul@1=eyrd7@%8`T9Sdw96nFe)K5*0e
z07K9IKfCRjZ1&wXKJX~}zyogE-K%##i|&xTy!*xMJqtYc3vPD!%Dnf9uq|hagRqUG
zh>xRajH6hNqv(<YPd7VEJ$>NBWK;QKo0!*JE24KFw6^%d?U<EpFJ8PqSlh`_*-1v*
zL|Mj3WzR;(V5g&xH##*RlK;F*V$Hv;l2Z&{1RF17b~LNzYWLo~>hZyYv+WeFm?-9K
zRO6Z69&kwAWvhD3A+wglN;1;}nw^zeoC1TLZT2{utvPH{Vz0I3@Vx57c1xUOHXpjW
zV9V43JITuqdV3t7-8MB~*(1xd$LNnWzl}4mx3gIGAq^f^m*69<2M+4=Y)s#LQ10--
z4Id7zFK~UOe0XKWW^WT~|Co&qJ)6w87`jZ^7&ph+@`!7I%XUqfW3tMwtp-OIUp`b5
z>?*f-YnHL|x`v}3n=NNAc3l;1ooBtnXZ99L?mdNq2RpLu6IhNVwRAY%IqdIpD3;}j
z@|?r=ImZ)3j;V&YyObQZD>)wg+g07zrPju6@xN%7XV$I~%}16_cG<k(SmqQrx16rL
zJ1%}}))&e+1&VCG`1trv=VL7aZtgBerAjO{gLiVJoQPEM%(!x_y=K>@!^Z^nxR#i>
zC+|5d^Vq#I#$Ds^iErH}^{w3%FMG5+@Zd=~cADv=hVV)49=B7)JEo*~PD`;qByCan
z`Ctx@yHN2-vlh>pSDYQs9IxHuv2KZb%@OyCBc2<Vcn0vCj&V7@*5puG$Z>_w$7h`}
zoNvRiAcRBeh*o-z(P9yg);nGM_U!I>vR+W-_?$H!-BUal&Gv3yak^#4X|CJ5E0T}u
zpE<Jd$LYySe6r^poAKE(rrG1Lv`?4InMxh^i%(qVE^&{y@%^_|$M<5euhHX^3c+WZ
z5`5YOP948<;KZCGC#Sd;#CWwBpL}V&BWH^1Djti6A-i*Do1Kd}=lPp!waAuon<MM5
zcwPB(ysG5%)ir(>Ra|DL9FFZd{Qk?S3Y*hgZH^}$@sx7*{#fGcz<nY}=0xfjk3A}0
zC6mvbE9N@Qa_&Hh--VFFvs3&JuQ6O7Vs^8J^T(SLO@BO2tnt6Q$A8L`v*)}|ZSm$l
z_hqX^^|^q<UW(4=FP0oyKgW=-ccZ{wqZ=%nn7(#0^PZBpeW*Fa?01iAWA%l5e-6rs
z>{zCA_)*KL6?e`&JQL`%Ccua1(n{$a`A^)Ix$KBO9N;8;?CYIVLcGUzoH@5f=HG>D
zDW_}JoGhtv-zsuiS?0W;uF=;o&J3-N`;Hv?;d9|<On`W9fJAK9pD$+wRv+CQaLI7)
zZhhVh^GeRA_yq2*abZ2`%T{}t)0E3G)ndiu;N?Dkichz2zdi4N<-+!mv(`_YubKD?
zti7yP9VBlZICa87<61*8+nwTT-K2d_o>>y;WfF4#%o(m+KZR85oEEQVB0&#D4zGOU
z8!3BEVQH|MXt4UyAl=?`GnV-IvU)rJImh?*sLt0=L)py+Z%>t8zTErd^06<MO<1p(
z>V~wloSWKmd85OXO%FnCWWx;}Uzxk$+N~+)Z}%L@d3r5d<}k<G1La5k^JA}6uJv+1
z>gvI2#P@G*h}{*>`oGS#Io_Xm!mjlMdA|*4NZDg_)})E$YTA<XWm5xAtqE-|4iBxp
zpfvZCVb0Z<t=D_*UJRWZxH8yc<&mpq!r>Ju*V0;p%Kijs%HFuF;!>${O)WLDX=~7I
zn}|<GuDn_j+4$Bf^RH)#ZO85u?vtl|bC+87@cI<ga!pkYU%Az&c&YE=t=CF(FQ!Oe
z&9lC`DB@N)>*1=_s~cInSFF7vuY9`c=}m9ZFtsU%tG`5QYlq3LzO~4-<9T<4>D?$Z
z)liPB7sGO+CZ(S17d<TZ=He2UJN>pnVWEEcYb=%bZrOY_^5v441k)RHr(Q}Gz4*z*
zO~=<e>Ce@#Jz;IN{{Q@4FNhm^1irn!PW4KQaE$BLUCUk9*3_PCnHzN{HsWda4Y!a$
zle4$3#zt{W4eyeTTQTGA9OrwhSKnQI<c>#Z1moAp`cRu)SMM@Nc((ry5$6u=e0-~I
z%duY7$ZLP&s#)(GZ?)_@>(VV7>Dn85O!U5j>CI@}EuCNd&-l9Qn|hyK>s-F%oaWn0
zjJEzeuUhSBiM(_-_Ofa471vD<9dGSPF@4YKv*>~8L)&|sYL9Y@b)7sL%V%e_+cx&T
z?_K-U@O`mSAB{QBtxkCQ)~9N%&v~BP!Am!<n0xO^%e^mC;u>Thq^ypU{hh$d_weo2
z=p5a|gSLquyc2Kq#xIq*`Ao$x-1py|8@e~u@^<I1zS=YQ;q<#fjNk5PuZ_`XyE{wP
zUpg-A!;!-aVz)4DOSG4c+O_9)lSR~0?t3bAyDaaW-+1Ez-?_&&x_50^AKHapw|IB&
zqwdK^TOa-1b&>B(!Xf2#ziLCauf6nQZP3=aCuR5o<feI>#rc@4b?lKnwKsR`>71j>
zc<;;h27YM0^F=jvi}IzAd4b<euP%4FRFs`kTbr`r?)}O+DW6%A*WGb$QT08d^LX8r
zhnn8WQf6Cx=AHGG<FN3HV)H#=we9hS1CI@?(`=6!$)CH&nzu1zO2m=dr&;vkeq23R
zb@k%c<hU0#Pi~)$@tXTYMdjI!-A`P6(wM(K&Wa6G{HOMCC-ZYVv6#m#sgg@ieM^n^
ziN4cr^4!|(InUnv(?yg2yGHZ=jVb;1RBu}vli1y9Yd7Y+yKC<j%>M0J?X&bnYZI0*
zWK6Z;n(W7&#b(^S@0r%^7u;_$1n(J5D9h~VcyPMqp-bG8$SYT~wV(SQNit1KfBVL-
zV&1)JZjVo|b*gd;to93+cpNvo%y7;&m*ZPQB}<dU>h3q5%Tf(XTF0i>8W+@d?GXdp
zUBh>e{=JQl+jlPZT*i^=us1QucJr<+-xu}s&kO%~uO2A9JQV#<NIJXXS@!I<m+h$u
zv+iXdT9-9vc5FU#P7`zF6t=AET|0_Bpa1`Q;n0_j?aM+s_B~uX`T0NQefPAlq$%VX
zu2g$7Tkgr6eXq3mvY)(pRk$yFrAz9M*m&vM07aYREoG7IZrME|&n|7bS+>tF`rT89
zGxuGL(~`_`-adWC#+Pz6E_eU5w9TS#UY^VA&3ondH*uz0&V#G(_W3;$cI*1o#`#*=
zeu70le{j&py8Q6R?~3<k@7e16QY`;i-1~Rl??0X1_g>ll>}9*J-#Gq#vt!oZ|Kaxg
z|L@+vy}a+~S*ss?A0$`5p7`xu^|u$luf6+Y*2R`zz;b>M<9!oO`9k@_aeezf%;bCj
z{a!)vw<w;zH^;+L)(d1xtuK_`Unq0FQ1*VITz>Mey5!$wX}syVtIb}lse2?}8l(LG
z-%FMMuUzJaexKVVH@`@0eUbM5BAw-htJl8YbMC{Nw8G8JZ#JJOGSV+Lwl6jjKdH-J
z<RJD*U%lvcU$N!<&(7NlR<uR<%RPF@mumIC*#7_L%?5AZx4p~0ntqk7#KphFRlNJK
zT8XIoM=|eW&-o=@>r1@%m-uY|;#XJV5x>#re@Os;X`p;*ko)Jfx(9yhZ-e4X!}3eR
z>q`U6eU?UZee%+sa-eg<fv@L+^nWH9%=O@kjW0=*FH3Ug5?fmOchlFo0i3DlI_Ged
zeQ;X;^%rNXd*Hke92xp$x%bQR<Qba3Y|VLJRw!RyB)>6lSx2d7d1-ukS$=tWeR)NH
zdFA}_s(<UttM`}JoG-7vUtagVy#9ZA1OJcudT}0&ie~$Y7XOOY_=>jtiuU@7j{b_y
z`4wI3E4uer^qjBgy<gGyzM}ts#RUG!iSm_`$}4&VDyH~XPK~demR~u&zH&x?<;?k&
zv;4IxHtJkDQ90*+<*8SdbH7*4`(L?`ziJVC)nfTyi}kCP#8)kSuXT9?*Be2*pdi&%
z@5PyS{94_<^xlr8cQ!125+VOALH^kb)u$W!-mH*+cVNbci0VI#{eKI8Cv(l5nAo2x
zrSRKgLB=Egz4ek=SqeFeX6DRNICx!>`;p{)!y3Lv6AFa{kEPcXTS-Y+E?geDymXS(
z%9|6#ZV4)X6ja)%_)q=kpY#0ET9uPFE7mqV64G(3H8RvN3RJpYu5n}jqWu$VyM*RA
z?9{k(eMRpr4a256o)f2dJ1YBmuAK5p=CS?M;KZpHI;Tb)oO=1<Vp}iS8-~+v&YXK|
z=f4G~{$<^)Tg)|Y@vCX?+2?(bum7N5|Ixhu)AD&--Q715y2S+;etc(SoKXL>y?&|G
z(i;<aZzU{UeV=y?dj~Tci=0EkfrO?eP97D93kHlX?OX~@AsZN!npq^pQ&J9mT<p%K
z<la?s;J}iT?CQbGY92gj^qyg$XtTgG_)s&4K!Mkdm%&UI<_f7f%rN-!f@QI%w$9uG
zTMh+t3+sd|$hvwclv{F3(cM*w&HvceChnhfHR0QuHr~w3Wf8X%58vKV@UUz}_H}3W
zJr(v9KQ1)t#|t#Da`OdBv~=(*IkZIREc%!%I7zi%z%l7ls*tkYbcu^QSvrO0J9mra
zF8cCPNIhh=S>dCW>>KOTFWWUfYU#SZv;6b1wU5j{JkSo=60mX6kHSaCqYd)U$sGGE
zrZ>aCo$qiJkGMfn&iiw=Zak8=lg}vR*R}OXnp{{t|6yG%?^m<5BkLUxANwn1mh<BN
z`FeXkhFcSwc^RK2DDbgATkxQX*KCDzv-J~(g)LSdJDOW1-feiuXH)PZQNaGkhvp8I
zzKBQs`UwI@I(27dEb5YOd!f{&e(XeZht@xVe~<WC1RgLmFt7-^OmGy6RAJEn;c;Ms
zuULY^WM?PIrw)O9l@884mMu@6IW-;xFp0NXK64eXJTlQuVWNwWm-^0^4qiM*z6ALg
z-^>*D6L|B*!M~P`RV2_uap{y`U)!f5p`n_yLPH~Rw~B@*SEe#XCd^EI8JU%N;9yk2
zM$_prWmlJm$1P?079L;QxZoALVogEB>JGze5=j#r&1P~;eR^tU>by>aSs6>Frb%V3
z*?H|&*7}uU(YZSxetVO*@1xk9g8ho_bBc}{Zl6<pX)D9r?bm8o$8z7Ve15n5!Bq9b
zl`j`=zgPY7n7ebW@q_R8YyZE!e!tFKL_?vGi*JTPGoRi+j>HzrkdB3ixUzqIXg9iM
zQP`*5*P(Ju^mIki1dXychkKP@SuAF>=jz-z(L?KGiU7-$KTjs;@rN`_Ve#yAaO9EQ
z5->f+%O!ATN|s2PyF%fXG*8d%os+zZPd#DqEx#5L%u@62=JEh%&ZSotI9r-tS?Ckk
z`eIS9*{!LIBRst{Z%>Wu3R^yR+tbVyg;TAvR#v^eD!yv{Ca;J!>!hAZtexn|Hgnys
zX$g_*yP2bBZ8$t{+pQ;SG_9j^&fI&Jvt_Qo_u9e(yvx@X-jX|>yZu3(v@Fk)ZRcXk
zU-Ypb-t}y$dtBv*W$f?wyuE2YzwX<&<N3V*eu*o5ViuDyILIQN^Pz?JpZ=N+t$gVc
zh8=pBG&UWzXK?uVT_JhH$8L{l8g=a|eLjo&9k?o0CVg0crf72Tsh9(dL3}1l9ek5I
zFHBPk5;S1-%}CXX^5_$rG;zig-~6m7?-wrW*1l`Asy5y7Z<(}p5yPr%PtA}U4jNN8
zB|goG@w~lc50jWzBWrNM<tb73CW-B8T%}iXF#6u7L*@s*9L-<<OEEd_>8hh5>k8UV
zPfgJamW<0hRya>E>`7N>(`A|05z~{!#4Oo$?|Zy1z9QxK!e{x~yorUS7gzR`u3Id7
zW9e$^H$m4c&n=#J_b9jBw?)@wKW^3k|KWAK*@x+kY-Sr+Ezeh8m>h6;Rk<Q}s)n=N
zzfS?}X<wAOR(81FW1fGkBEeI5=6Scrw;hj`sVthblRs5sc06N@n6akqO9m6}CdO~&
zOSM=Ty`#K5rXMhw*wvG%<jCzgOQ^%d+;W0y;i}6l3)M_#y=YOFWbvBcqom=~cs4*`
z4cE;zN!zw0K5gj_TDaugBd5(Pmd=^;Nn}M<h4Y>#0s3{GQ~6mRH!AGvnzu>o(L*)n
znP&phjC+4y6;?FYNm|%eG%Z?8Z01te^Pa1_<F|-yJK`}%OozQRZOyq?ao^V#&*Zi-
zs8HU0O8L_5vm0$om+*Uiojkvqx4)n1SGWSd$q7bV{;EsfPg<8;_uwndaGv!f;#k6!
zy&rsyYRn(~oA|wBR>;>{qbW97_qi8oU0oSe>dE4fs^y*5puTg>)Quu1{&6%-`2SGI
z$G*8^M$JoA<At6xxMZGP@>?`%`iYmSLUW{8KZZ<R{Z~cf(vt@!oT5%EdIAE2BSXS=
zajtalRAtt#kxnsAomRZ*X>e&XxApsD+t0E+)Bji_n#i?S;@Fi_hVDyzgeIOif3D@2
zaldp%mR9)Al#^-;*Wa9zx9x{?yOl^!B2R3QhLziumG2fww)X9`n5Fme$iyW(7B}vG
zkm_#p=y~~}+mHA4eAllR<fuHu9pTH{wqcIerajWT;*O|TdWwgBa?zL-(NorNMR4bL
z*N>^IG-?BkR)5;QKfF}(U&GE*S0f(jPfNTz-?8ABaqADChTUI+^!aC~vF<2U$<Ixg
z{VePHE~Q|#;LV<_Kf6pb+=^$#tybe$Um1}bceLg18?NM&hYp=sv~*6<<{Ycsis>@@
zj6)S(++M{ZtbKv2Z_7l@w}QgQcO2Ed7`~uTH*=B4g_}y;3%8wJo41ogrrqw#_Cs?s
zigl!9udUT%yMKz${qB#s6SjFTdENQW^S!gY<?F!sGCl#HsnZwC6uPvG{kL(YtlQqt
zpSCQQJH)U^c<l>U<6RfK?oC)MyH|1frt_<Qvu^0u`)kCIy>)fe-B*qLMgq-Gc&4YY
z20P2mxn@|}awykymWSRN6U((r*2%03j{9fd<G8x_hySG~Ql@Jq&2lCc%+~jdj*zi_
zEIFMuFT2p&GBaa)=H|&E)t|ZfpK7KY60tP=;c_N(>YiKmb<6Gq%~Num+^Tac?q_7=
zJ>9K4WOjA9nd~^Ux4ig3YhX{FyY<G`FW#IIo@Zu1y-#f^W6d>Yn`uec&)vSd`4h{v
z=bhFZP9nQjwz2UV&X?M?T&`W^g!R9|zWzTGRroDWX!07Z+O+4XUcKd+WWCQbFYkF~
zw%_tx@w(4*Kks>N_uukDv)-45!h2u1*;k!O-(vTXcfm`)daEn!0u3wO_r3}%x4OE1
z-Pg6nvaf>q9j-6__jP%??VGgyRX5MaecibF?(3ZVU$>Y3oA+(Q@!GeU|E+G^UiW?P
z=i2wF^LO9c%=cs4{n`&H`hV`<?<-%cFZZtPc-1{c`JelWYu)dhUf*>_ui}*byia}i
zt*%<<m!F>>`=!>r_PX=@@~ic6ua>g!e#y%J`{d+(-?s7Zd6n7!`{w+8?~2^5-`DH^
zzRw;1eS*5(YgzlBhlKxs3;fR5e{H%F&mOx^C->KV*m%C|jk5iZv)g~&**U*rW3>J6
zXX}6exLfz<VfnnDo4)`375={V$MOFk7RcMbn!CRK_T$<&kIeUd`Z@n+?fn;?a@QZu
z|5GZ@cq{%9<Adj>3z#>>{eLR|Wo68>i?Of&#=pKQ&zSXqscRm)+I{wE^O^YMng2~%
z@XI!VY1{ozybu0Peefz*;iqZ*zm4;m-^ufRl7AyA&%-pI>zl&kmvY?m9`Jus_`&<&
zvG0SAKNqm*Ew~za?@OZG*UY#d6BC$=6dq{a`xE+*_t;#qOA2pI?+Kln%PA-K$TRL|
zWTJRm;xE>Rl2QsUW<C@>q$qhWf$yH;^Mwz@)e@N|Exf)oj(gq1Z<&fLyAl;<J>;=k
zczdcMtD8Jq$E7b{<>dU5_%6w-#wn?#EmF%<QZHMiJ}K^BZY*n8zlhfY%}?_fekHyW
zmDif5q`mKv*0D!#wkqi!dZcq}k=DIMI?t5!mo3uY^+@kuk}jLF!K+1v-;xZK9vjFl
zHh7d|EcE!Fk=9~kwa3Or%BFG2CSi+BoF1E`DVvoo{^0oVQmUN!w8f@X%2rK_E%P2*
zu1dCEx7h61WAj6gZT2m;-K1=HD%tANW4n8c?RF*GT}yWO_Sk{xiTyJ<6|ebS98Vm7
zDLdP#IGUw6ep>A4l;Y~P#5HJ%o0W=N*%Q~gCvJW!?oCfT+EN&L9$5s<_e@Li+_uDH
z-x8N&D&B{l_?%kezV3<dt|h*cRD7SM_<wrh=cN24cHX5#2Vc3R{%lMAlvD$ZRQ=3S
zgRGtgxv7RaEe*9(4f9L2h??ZIYDrkyQ~#!=L2XaNr>REHdm6E9X~?3dQL9ozyHta^
z9xIEb`o_ghxsf{A=HJ~|v)H&#squA632e*M{2p9qY)oWgO!T{(sFao{_w2f<XR=gU
zlAl^?*s|0(wY0QlX?betWy{j*o;^C4Y8I9tBDOR%>h6S+*et8NS-+k#Y<ZT=)|hZk
zE%)BT6t88ekCr7FJ-fo|$?zjBxoKGepL(I#@<KWFqJ66Fi=M<7g~lFBi$A1Ra!M^b
zXnD5N+>&+6rsk-Zmn|=^Q?F=SUeTvsIc<66JoPH3=SfD(^1i91u&LKPk}Wv&yz1KW
z+I#AC&z9G{Q?LKFy#Akh1KWxQK8<{>bh}eaMdmHbaa&&cOEt$XqxsR&=4I-wVJlkW
zG}_W$RBEL$SfsU!y~yA9Jn!G5*y?*~)j}Fw%T{!))9Bu|qT5R?IZoAGEv2~Ye6ik&
zI5&+fvy8G=D@v}ZO<-Gjzf@!5G4<4K>7D16PgGN%Y_@W;o#qsw%*InM8pTw5wO(XD
zd(j`J-jesSg-dfr+soIAX^nczI+a$o3oV=Jra61t%Gvu~=89=feWl!VDK+R*>a?zv
z2~nPXSu1blW@cAumi<e;^7iR;D~;)|G6W`R&N0iZ<w~EGmbS!8tHW&7(r@yM*&HV9
zIj~HObGaHP!xq)dWh&FOR?W*>w1Dr`{8?G^i(*%WrLW$l*3y?bF;1&!+Kco@S*eFI
zmQKo8e@kmaQr5(}SIe7LZDcwy$4|ES(u;q+&t9&qTeL7vea$JY)l92Om!&Oum)d{s
z)s|zgO8eB?|7C5cT9)_eRmY=cJCCLBTBSL2-ivm<m%Hb!-o0q`j=t>lw5;WF+8f(e
zHL^L(4f9!Pr=1YBdX?Ae7O_`b^<HdsT7J-P`SyLUws)oPxRqTvEqnJV?PII5_olts
z^=Q@6W7)_3w2l^~Eqj-}Pb_=Wuhq)a9?ebDT+OAU`ftU;b2+O%y<F&~-B-5yTH)$*
zW^ewczB<vQHY+TvGiuGncdIToWz1Ulvi(!qE~DHF_p&F>TeG|@E86SfRJ*0859wTw
zOFAc)b@idnLO!h{a&i~k)-LALo%~AcR#48#XR9|ZT9ff_b?>%+Z?2cUz2~ZZ^V5s?
zZ*OlrTKm~I=Qf|-L$P&B{MKqNJo94alNHxAEVG_oW6Ha?Z_T-LTIap;9(b*Mn5Xx=
zOmCl>-Z7a(f4$YpW~<xg>9zT3l;&yQugX50rT*&Jx;I7XJNB)3dr$A(vvu#@t!v<W
zedcD4@1?ho|1CLvZr#T|^?61w?%C-)b$j#CZhhM|z4w0lU&Gdajay&$Yu%ZrOG_WA
z^ls7#P}6_5Yt`ms%d)nudp+y@kF<9;%hvtgw|;M(-V3qLAD<F@lGZA-z4>)3_2;X#
z(>|?T@az4*Z*jj5t!I?qF#FW|KT6q8oR)r&T6%YyewNkT#2^EKj9AwBcdP7T+05@I
z{>!_2m#^SDmtHE{!RtR8_~#gKX=`(B-@v_p1NUYFp2His&TrtoY;f=B2hVK<y!StF
zf1l64`~x4mp`iFiL1{zo(;ozXZ+M_*@YhZ6YLKp}Szc3CE=T)X*7y(X_v6^}W5tsT
zKX)0-nDilK)`m^<KJsaQ6kNTLck@S~&mRQXH%c29%Ir7fyKN|^Unq3FQ10+Xrt|rK
zXXV_vv_2pz^QBwC=cwhiMITtBHz?N|D%WpRG5^F6QotU+QNmtZQhk}^{3TM0KXO$U
zNp%-#oHvwty+L65Ce7ytTH8V6R=mxhG}}MP&i^F0{F8RSk>2->0{1`Z?k^O!He`OD
zBf@WFYPaFvzjtqx!#9bU8!Ouzsk+Om7#m+HHBd<|QhWVUO*l>cxsmSwPdbM;YF^%?
z`+Aei=Z|`mi><aB%6~7g+Wg7-`bM34BdhNlc{Ur`2p1Yy7b+ZHt5E*<`>o6$W(NPO
z3{=xUB&8K9M;Dod7dsnoHqAG5dA*b+{qxGa&n#ud`qMXCy#63?+Q|C<2ixnLwYxvN
zAOB>*ywQBMk#}{8d;Mq6;~TASZ}#c`V)6Kcd~@DkvCsSDHY*y38i||SOWN$(zwuev
zGPlp0g7i&;&9?^In}*!}Xs2Ib|62PFlS#Oh9t*!o;N~<wE`u9ZI*Y1GCB(nxB$fOx
z-Bi75Ye&_y8ZAxp&HuJW#ivavQHxPFNMm{)%b)J2{?3nolSu!wQ?r(dhL<d?E0u`X
z+oqQjIlDAr(bk$%%Oy{5EpSSUK3<wS`$ODg)5%faVuaJ<X9tCfzqS`QTIxIh<s|)=
zH+5bc=^qL*`EqPq&Uw8Q`?RRTU!$|P<^50VIJR}_mu+$Hza`gwOJn|?!o59TD>Lu=
zw!-3XQPpO}+-tw7$!;@~^^eXqQz}kWFM6x_=9Sxu8_V7&o;RzUzP<HYS-x9YiF<j`
z`)vjH&GNUK*JzikpEg%l{vLCCdo`bVjkS5bd3m9{Uh*ZG?`Crqrhl_!D>=HvjHA5#
zzna;vZ#m)CX1R;Z^S!slJTI&Lx4*pJxIFs$*JA$i!sZ`Q%fIGkTeSV&-Y)+=-CH-A
z>$Ac0m!-|C{O5oB@J_|i|3j921%t3w#C84F?v<_EcXWyGoY=nYk=wh*cvBNQgXZIF
z5+6TkvA0P2y~dT_vW@*mVO-gUNjuWADsQuu7b#V~a57Ag-kk7QJkj~xl-qH$tu4yG
zzj<4jpPZ~W?SJ{~SLJcSmO-C?*0Ed6DAy~wul4BD=1ISeC(l=YX{D}o+-!pXqbcqd
zTm5$Z{8mv>oWAt>&t&;h&UDLq_V3lVw$Cg7F<;)iI(XX*{c_IYovXaREuXz>2J`DO
zGxH^4R-v<hPP$xCmR>5l`Dc#3m7LqI*Lr6EmJ0vw^RwEhz2;Y+!Sd-FSMRP`^Y~}o
z_n%$i)vMQ=uT8FYd;EQ6{_oY(cXj;!IeD2?`{dPYnLjOz{<<+~>n#0>(~GjEyq~{8
zJ?oI#n@!P`N9r=S^_iZz_jAkgAN#v44oo+!&Hqu=t#PQ>VtRdb2Y1ckeybJTzjw^8
z>hSuLI>~a<pVD>3S-q2!{$=Uz$*#J8cK7qYxfA~9thL%bk-KVv{Lh`QOLk2zTco{s
z^7qv&=XRV~ZM~f7x9lXF{nOt*d9-`3xwX3U?)myQv7dKNS580ez5DX}$_sA03zPl`
z3xA&Zy=2yOwF6yh+IclsU)5YazWd+LJ!M?B9Km{X(>L!=|6RNL-_}dhtyel{UOrws
zqu(lH|DO2cf3BZiyXe13)@>WDM}O||*L||8>Py}@Uu^d#|K)q%uQ?l}Jzr|~gmrsY
zXzw}r*lf*y+imf?@0M3QXSbPmf9s3*x@XP*rv3l+JX`H5d*?CbUF)nDm(5;kP__5L
z=DLqg`sd}hg|A+}@%z61MSsiFtCn)_Hxsrsm$u!}Znu51^}*=f2kmQbtJ|klSMRX@
zTVz~+c)s0^^R-Fq>Ux6J-zsNM=HIq^`I-+`|6MK5dgs0K#^cOK!uE%wcAk8``|!K!
zKhmX)>0dg-?f-}GS<dXzz~IQiCRibm=-A9Is-|+{gQ8O>GdEX_M4{5rE-`bnk{$m7
z9v|vfuq-+<Lon5=UDb3|NvD8E!wg1-D_bf*KWkugEPJ))=cDDm3m6)>WD>qSxX9pM
z&+_x(W7f81_H{0yt4cJ3)<&#XyE;oWr(vOUC!48v*&5%uHkGeRev9SB>@2>!X=(KL
zytuv9KfitbExsYT(J+0L%FK^XypMKEnwR~N*mSygqGq_CXM}>^*{teqzSUuGudid8
z{cDBRRm~8d=)G;Sywg@^++3G_{M@c>>G!r}m;c|oT6*1~1BV}rUGXi@FM4!@{d5hd
zQ1YYx^ZfpE_CzS2oP1r>eagH~*56)DldhJ}moz?mc2?nbR^C~r+46q={-J-R>fc`5
z_VfLB`TCXr&V701Yk8n<_iFQdebIRbSelbhAAF>gQn3CR7c;+7^Nz_GyFafe*0FhQ
z<Fay*fU63>>xnbof@;sNMC+?Fvj14KMvC!-{+gfjy0TVXW;n8Ozx-F>N!xCxxO`a4
zBpSlElZk)HX-9R%HQfg^%Z1*Z(wV$Q=pf7NoY$vS)t7wG<(_|f!@`MSO)rj2vPv;_
z>Aw*(d6AXpnRVwTeh4x4pZH|UW`Fa)DHoOPd_y#CB?`07FPFN=)#b6Q$)NZ6l{HdA
z+x{E%h6F22wh}s}D}Tkv$E{I1)JMxTHZ)XiZHR!Ew)fmpAESpx!A2I$wZ(o`KT|jZ
zJ{<Gb*(DemBz!ZLed*<Y;k@j+-vT~XxnADrBKq`=xm4ztDJH+P?iOzKJ^HjP#^>bQ
zQz0rVP5QRq^<pj6)4y5!-K%`5Oz5ea?9}adbw6)4)sNwQebpvotMQE`%?nM}SXs)N
z6&{_ya5ea0rm)x)XZyud&78AVmwt@ODXu;r$Y8Pc{q4)=Os79pYL*d?+nM$C^~nmx
zeUi`T{1%dM7E?98_IyEWU(Vr$t=r5}g14H!cJuLGeg0BGc-hX&)8gICpFNV>V!rdv
z72lxe`!*~IIJx2ZqnSr~8p8_TPSg4wyyvi)*{pZTxAS;jX8WpI>iU(oNZnbve%r3B
zRlTRIc7z_BV|h0qI@Knp>g=(d4qF7H|9#FoW;XBl^90LnJ)d`3f0sGBM>KTS%Ur{&
zfm`JkKN9&?#5;ZO{$sh{zJCnKogNty?m1PoB4qcT>)#*k%(?!fs&#Sb>1Vpz{c<gy
zUaL6z%Drau1B<ywEdsi`zy7Iy*(f?U@%8cJ(oZJjPnnqSk;(tyW&V3*o3ex4&$$XW
zeEc=HUVU#_OnIts!jvDTW}F|_mv?8!eP+9{TgUW6oK>Y<yHL{ho|~N!mz8BV^RRB=
zODd?o*WAZ;xZJLDqJM;#wPLalyYiKr9;KU$WwQ>1+W*>nzRhiw<okl<yQ>;|3uAs=
z-&M6@PwCs&p?{2&KJ{^|mUG+Cu>RLW7Hx~UeU&~|lmGn`O<HE|^r}RoT3+(uA)B;G
z+Uo>bW40(siC;eS_08Ip50&z#GFEJozNOzDe)|5u6W{jV_RT9wWquOB;=}|Kxle`*
zou4SVK0kJL&xb%WrSLx)D`wf;<DWeJ&fIH4=?eCrF0>m7tHisVbTOJ*G@*5i$Cnnf
z?Te<SN4oqLmXP$E*YWer#5alYGTzV3^Fu!cZ9c5b*V#GW_K{k-$!`^PXU$U&7X%eG
z+dRz+u@pG7wJ5i1PcTR7&z(_a#mz4~<1eLbG4Widmu0-?iB<Q?`MzaF4F^BR3kXYi
zJvzC1=D$Z#pX4fRo@##ZzWH)FzxMMv+)HzNqgfK&omO1n?$TG0JN56}w@IRMJ5mJ}
z-Ev7>C^c)R*jbm_*S~##pDNnq$(UDnXwPG>*2**g4f{hY7N#4$EInVLClJrI=D9=Y
zQ<wQ>oy$*_%yT@S;vo?CVcPRz4R-5a3*YV3oOA!+3eJb$&Zc#GOxzh0Vi|mVi|4;d
zeQ#u*MNItU_g65))9a3+@$Xcx?W;_?F8CxxJ<ig<pL@1*-L3Sg6+vh9)_rV={3Cbd
zU)CWrQJzIvA-5%tN4TxtcCttOw}i)4cK2ej)V`O0R3k%g-8{JS*wP8FZ}}vvo=xw%
zwq?6g);hV{QP=mG^+xpuZrfGmCpj;qZhiLhbmN`37tfg5pDViVtjBH_HqD7?$wm+U
z6$PA}bCr*0Lrd0eZO0JvRzor08?5&a+pLP{-Q}`PshD5?_qTofpNcWh`TM4-nmZ=t
zR&iQ(YkI)U?x=^d8+NX=y<J>grjt{)e0P>gj?(O`eZ12GRw^;Z>O_j%o8=Is5$CGD
z<I2n1-!^S2TiBcF->h|i^CuG@2i}eLs>l5UZ;2cUx+3nNsB*#J=hUhGTcw@*tseA*
zeLW^@9bvKi`$2=a(4LD^mp1NyoiMSlXV1IOBC0P}+~fZI&0R`Ni+S>nGe3>=k1#LQ
z_I<kY&V#pGmc?|h>{!Z?yjX4PajBTj-ksvQ^3{eL)s>2Z6|Jutv+p>^yI9YwhbM7T
z?NqH7qS|f$=KqP-6yDf*_-jD{uf)-RH?OYy<+H`O{l~RkzqYIm2<e-7{)O2|u4~;n
zeLDTZ*4{?<G8f)bm35a~b@aW{waXT4?=8M=JAHbV&SsH&It$r(pEBtF+IxKKr}nR_
z@BeA*y}Tjx+oqYaGwq5++l2P%E^W{>jf;+$-2QKQew*wad9mB(CsfaEWSpF1CMV=S
z|D94|{hqV0)p*W_xfZ|7sI`i|F1C4|RsPnwce209@!inhsxQF4CHNGtO<WL5`GFtZ
z0ck(q1O&Bi<_bJ(%lQ7s!?WM=_UH%ai#u6QN>LPl9klFrUGnWi??f%S?u!;EZnBtn
zqBr5p(^H@HHhV3In)kxt?7z9MghXdl373C&-v0VofcKQy2dhf6EvrIK*i<j^)XPj;
zdG|^7{68_b#Fi|69$BELJmGK#Yq7xoKVNl|t4;?81)X2Le2v-b$`Y6D#doG>70PDE
z6gy4V;kNzfHo^VIHvQR&5rKWBhgQy6|0kzpd-LDi$5wT(3wlkKY1&qLzwZ9@S;%<z
znYqgrU%s^A3Tx?whp~3ARKHlQiQBbDdt3Rw;AwLL_iyzqm3{FgPWHQQ>CVPQM=Fj@
zu6~&0Y%#OyUC5rp)nAW?|8qAEzPbPZ&CDHZx9#VStv!;T`(U^IqYwVxW`*VTmM8tp
zk9?m~ZlhlRQz5CKYeC<Wo3q8&1RC#Ie|*)y+*9Ivb{t@@KetG-=40`m;tTJ0U(o-1
zrvJ*EweRI#{;bG+VsiT13Vx>h&wmA^F1m6qwnqQsnRQ2}rLW_Au`DZZz1@T(8&Zy3
z(zRWX{r=M1vq2|n^bWn{P<xq`^Os9tw#|D6(Zzp{z5YAR=hvFPe?{-_*YPsjPB>$g
z!*SSe$0fh#6DFLJTf60*7jq%s{HUj1|N37Dy>X5TaE=p*2>Y-yrI$^dCwY=Sd+DQV
zayq|q`ae9==XjgWH2cN8ORqR4vOhD*UC+jGNuYOMkr#h&c8<q{hLTlW((j5~I99jl
zoH%!aJ6z*y%-Xw$Cj3e3xtFm1S_=RDf?oFQ^L=#_gl`9!y!oeZS+#ygp4<NeYem`@
z|4;}N4c~ZBC}4Vq_AMs=;2AnuN)vehKIUa-;3z8;zrRTQZj(6YyO0+Xe)lbwcv*19
zuW+Z-5+4r1s!gle7z?gk@sE&e6J<QJ;Yg>@+p|K+hWEcD-><nKY`yUpLmpqLAjgkK
z;>92TEjuaeY<Q>O)xK-zBsDu81uc2EVq)&2cT$O(Z0Z|-Ch41>+mM;o{^Zq(Ck-29
zR0D2T7|PauRBSX<ax6TmvEj|3zOa4g*Iv+L5!U-;P~`RRe8Rj|mB<Y$u>z3>e#cTK
z$k*zrh88Xg`}8uVaP=<3CkBD`8HNQSm&EJ?f0rc5DhlZ}eNwmNX?k^m|KH!0vgSR?
zGcPc=YQ6onN^Ug=xBR&m5kjh(UaETy<X0PM=L@{wGQs9lft#KnZ@xEg_QnqtlN7s+
zG#ZU09u~=V8?9&B$S3U^cVvyX3d`rV*P7~YZ^z|m^{&!l%s%h)_JvO0ZlRBN)?Hvz
z6;zwP^v|shwe-_}^(KCcO22+$qk8FknVGMRoBd4~HAR14H1RLKw(aBNgpX?HgFaLR
z=;m)U=GA?`@Jv0uZ%W_BEl&!~&$=nQ8qHo3cy3)f!^Cq^fyIyemKhyg9attH^EhAK
zvRL=!`K39<e7(-fz8n7w=}pKw%C%l-8q<Y{uFa|wH%lEX+QhU;i2afd_or08O@~s7
z|5+L5Fl%41doOH%e*=@K`%$suM|BLI{}8ffoWeY};Pwt-^T&^@y^YRB7)clRgoj-^
z5X4cOv`O3aoYVi0h9@R1**7t(#AxZUKo{{z5+5(S_>1_gyR7H7hW~duXZMAfaV4(0
z8#KjL97A8T{9f&Ny~mN&+vaWFhN=+fwVxtWCb1n2lD;}w`sQV6XJ*|%Eybn5b{mh0
zgl<{RF!5B>IeTjZx38<1KL+Wyw`<NebeHApl@d%`cJcBKkE;@bJ-0$O>Z#SJZN910
z<`>`Oy!4#&@8-U=46mC;KVB4>u!p951>fYjU=uk}hx60wReENOqCqQ{IWxXjD=w5&
zUM^8;JeBQV@l*jp>Gu~^PP5Mu3gx*dTpM!vea@ty!bw?&0{<zMy4>tkkPLk-!WYb(
zY|R;}d1{NmTfO%Z&)geJ<vq8C2!2%%+iEKvAiUTl?D=GuiAh1~SA%xudB49DwphS%
z?NoE~sp0bt4`$>zP0h1ue79=ZtLBcWxzBhQ149`@L;ET&1TNkj`TxrGG}FlJsr-dp
z%f4MY^1(aWwb+qc*dtWv>LF8)`+moJriu!l`C3q5DWAib{KE9|rnWhyW~=q1zJ59J
z>Ac?UjhFm#xHgAYY?^Fhd39F6dx6s&hOSq?iUp@e`&#%5e~~gaomyh5zuD7x^OHP(
zuf(m}-)!|%3=8o04*uuA(bfHOK%#fzMbp0%Of&8lizRMOdRZD*JI(aQ#FX!sG)vXO
zW%cELF8X{zIHdjDv?J3p<+CzBU$Kl9wQ~LvSuK|LTr|G7EPDE<9qUSc9t!68mK`_o
zx}wMDdgfcsbCq2AvgES{k?KCi@)we%r)L>vMs4(uK7TGRcun5M9G0)5nqLob9rf@y
zYWjG>E0ygZR1*t!3zQWwcb_x6QlQIiypqqWa$DBpZ@EvmX?)+RskuGR^#iB*^=CX=
zoPJDmXAL{1v?am)`Yf;Q+$X<szb{Gr+LvbC7aKp(Gg>%{G3A5Y)H3~P)yAyZ`5~V^
zeaPruk*%M5>5#aA<htm$fr4M({JR?!R-INR7;DCwXjc04dS(CC()YUQ#kqy%g=Ne;
z$~;9xO0R~!5KEY3Rw_Q@=A3I)(xzp*zZdF%tKR8fzFWBQBUkv+qS}=~zV)R!hbKF^
z&q$P%$W5O1GcLup^h4>_wYkln4XQV?S|=ozZ#Pe#^8drP?8^M`*d<Jympyv*{k*?A
zp4F&tzhP4EXSsa4+UoMq*x=v?pQoo(RLfqU`yq6`TDazC?&50m&@O{B%g%7Jrv35z
z7Jc<<1$)ozOBEjV6_v6gCC_=Czo&TkUrh@ZP0zoy<k8jKl@@JlCAQ>!S28Vc)VmS?
zS(EGF4*QLv2E|jXf0g|;=<01O?d9C|Zr{I8z3Nvgq^I4Su*FE`N9X$Rm`&wb=@m_L
zw>Hfbs5PIIveGo{#VX~kUy}b{u(+@+F^T7jL~&~W^^FI<+B~~5z53^s0|A+;!hf%9
zYc0OS$XL<vcgM`cv<%*eS#wu6H{NJjzw@Sp<gaDAO^iSL{Ux*STvAjwGI(@J|IE)h
zCnYm|#b)1*d^}-iee8^+-#2E@mz?AHQMXfh{^v#F-y@ZlN9wIQIhQ@^=9Za^qUGsx
zBNqlr&R5<vU;fj=heEQgL5u!YE~+<Nq*|pRYb9&AYq4U~+}xv1$7U|^zO}?(YH4uP
z((qYJqi-#Zms*w_wJd$svhUYpt2xUqa?kPo`AX{7eA}u;|MaVru3ubKFSVpuYUTf(
zi~47+xH$7iO4G8%QLC2ETDAJts`XN<!+-VNzS_CHGHG|^^3^}YZW^wfYqfIXEk#wM
zC5n?4-@i2Ha+F?glwP})#>Ja!SeqAo{w3vns`PQ>%;}+JZ)Yw)x~t*qp>^F+^RG)S
z5Di%`EiLrZDrxCk)1NaUS)<p~PFtg_(rg~#Q+cDonQM!4^cMHoTfA>?@t58j9KF?j
z_xi6A|DH*<>HePWTbbt^HtR`Nxq0-gu-V(IZ*Q-c-q9Sr!}<1kzFP{@cWx55T60so
zNYww~oZAk?Tf2?*r?E>Wv`O#Y9KCz{?A@)qw}zMYCztO`y*)2`cDb%NSMl|KryIU2
zpa1>w#FE{QqxU_Zz3=Jn9jazoiMMa*&EB6L-F_}`8Yj!|3tj6~-cG%Iy+)D0B4KC8
z9x=UF(ub5|4yng%+5bEC|F8Pw=$-7ldAX}M&ir`zbJHRBIY+!@4!w`ww0PR4@3;3y
z&)E~IcO*IHSo)k}*);+AyY@VZ++#UsPwqymT$vNiF(=yRoS1mTSm^r>#_Gers~c`J
zyUv$6wK(R~@;Rqg-#N8j=Je*6)7$5q-hJovew)*uCH550x?fRq(pu)s<(RYA=bXKL
z=j?r%bB|-rt(GaAFLvR;tuwD@{_2`@{`Z~p|M#3%4^0;|+Hii)ac=$#!m$^{=U!~?
z4_usolsER$+<&IYjn}GlZKoLSy>vVHvT51n`P(i#&%Nv}d&TqbC12aifqyUi@4XT|
z_v-g6_A#Mx{Iz>_hhK@cy;@j%wfOJV%DdOgWpCKV-pJp3y?O49`q~?zwl_;_Z^}z7
z<gC4vJ@?XV*_-`$Z%n;=YvtctGi`70mc6}y?(KtnZ)}}=$Iy09snz+Vf1m8Jy>q+v
z&dtAfkM6zowD$JnyLX@ez4u!7{@c0toqwKV^*zrVcX#2|J1_S>`26?5@7Vj|b`QVb
zeJCk+Pk!G+#ki9OHR<g0PUhZypgix9;JnA`a!>5zo|w;jV!Q8&Xxx-|W|y^xcG|f%
zF{S9q@gybJJ&XQV@ZtH>#5lceU3&kr_Fb%(d(j;C;-t&9_lI|eyna^x&#lHzZ^phm
zCI7T|a<wz+Eaud`STFZ_^S+BqZ+ts+{%QO_y=`94t}hR~ll0~<lj1DFXOrhWOaJ%g
z?7TPZ2VQNR_wMz*ciA;hFTZ{vY5it;UG1EEZ~w}@U1;aPm;P$%zL&N8o<0BfPWt{w
zdHWw-^PUC@zB;(?IqUwwM|N&WDe0H&o?qSf-tzI=r}K=B<Uje#e+`zOup=(DVa~@;
z`ESYb-&*UQ`X2t4|6jA<K6}ah@5T4Om;e8s`~Q3Mf6cb|AJy_dCjb9YdjH47`k%Aq
ze@&hLW9j@~bL)St-T!NS{O`^4e{a11d;9<2yXF5JkN<Ppe)ga9^Z#7D|L5}jzt`{o
zy(<6jw*9}x`BS?8|5$m*q$~da=lTCX-v7_|sJ&mFiIYz!;===nRyILBpBEbvT{;9M
zjX;N*9_bOc&im6Lxa9Z*757;potsilP1cIuRI}4)nfFYC^jm8>CoelU+q(D@&&m(1
zZSwkEQnp<tD=#henQc|eWxDFh%8=Djd%H|mUt1fqyXr5O*_s<0Q)VV{a4=W{08?vB
AmH+?%

diff --git a/docs/images/scfg_xfer_event.gif b/docs/images/scfg_xfer_event.gif
deleted file mode 100644
index f5270e94298648fbe9709e1844fd142f16c5b520..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17446
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
P1dq!&A5l<XV6X-N@|bb;

diff --git a/docs/images/scfg_xfer_eventc.gif b/docs/images/scfg_xfer_eventc.gif
deleted file mode 100644
index 120677109a81031bdbb8db7e53681cad0a4b951e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 19050
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

diff --git a/docs/images/scfg_xfer_extractable.gif b/docs/images/scfg_xfer_extractable.gif
deleted file mode 100644
index ce9cfec0140b5e25731d71c0eb2fe78373f87427..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17607
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

diff --git a/docs/images/scfg_xfer_library.gif b/docs/images/scfg_xfer_library.gif
deleted file mode 100644
index 56b6905b38dbf05429903fddc2949e980b29faf1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 15348
zcmZ?wbhEHbv|;jQ{LTOYEes6*8CqI66tg)rvjsq?SirDY0)(n1EUOhks72AKMboK8
z)2l_(tH;o*$1teJFldTp&=kw4DV9-loSdATqUJay&+!7GrC!-fgR++f6)z1cUK>@s
zHmZ7URQ1;6>aEEwTa#P%X7}vP?m3n{<yi5QW5sih70)?WJ?C8Y(sL~>EiFsWwJg2X
zvi4dJ2;J-1dT$B{J)g4o`JBDa=Nx;#^w|5Q=iV<p_x;$hW7n>o`~RQe|0oy@0dhk?
z2b2RqdBK6>A4C104~i2W9BAU;*D^U_ka)P2PuXeCj}41lx<&M}&YTcje7slQx=BWJ
zQ_6|SDuJ_nP8Kcoo@x+%tVVOQ+S%F0#s3a`Q08!CVyR(}@Y<4bQQU!BKqH~S;qr1;
zJ_!SXs|_K{9BYznCnRJut>f6I<{?m)!^Fxd))TrQOqY2ZkB~ux!F0#FyZGKbyL$Qo
zBQtxQJcFFhkH$of27dd74HX+%jti)`%+pD1YB@dCIC|cJolZ}=gdM^eauZ8lTw0+W
z;gG9%_|?^Qrd#H%RdjxPdxvSxg|!R6zq>D6Qhvi=PeuD<X`7OOeS3bkKRsn%!C)9`
z)xm##bNhjPwk#Zi_nrSWh$}k%>G<^AvqNHGolED}_nv$774O$}{{HU!K!4$Xmiqr{
zKhz&^vWR6UG-?Q}Xlhc|dGVlG%S9uxMcXH0A(w7K$3rg3Z3h(Fbz3x&It;c1JnGav
z!qCiZFlB`jkJhmTi+Bvq2{8AXJ<~YMV|mWuFptrnh~|D{9?xc8cd^bTyrwq}ESYR}
zCxMyIFUWE!ucgmSRldk)2bNB^Y|&gc!|F*u+Dz*w6Q1!|ZP<BucJ98PYW&4)hL^Y{
zZfH&kbm44y&S!H&^U{3lA15dK+cRucpI@Wo>L4(|>C~0Q6WJ0OmPC1mYA#_{m@qXW
zb*k&N$mEq%!=ef=wra(e+`alL?%#%QU$4iv3Wm){>@pQQm^9H*?dJN4iD@&_rbe<w
zWz1F7zQwY1<+C?gtM)#dmAxfW;r7;Tsk3kA@BO$fy5NZ5^2Wj=isdrJr(Bn>E4j9{
zTee)j;`&^UkA3QLRZr$_pU3fP@AG*apHH%HsQE6qM!xQsY>iWcs*X)U1H0QDg=Ri8
zj)yH0@ezsbGI<t{j;plwJnB^6^&zRp;F88;9?jzml>7BQdmQd_66#zs$xH6%lXIa?
zm8w%?na)0)9^WUKHZx6b?XydHX1eNg8}@0wSX3+3vV2|-U+Ri0ERrn&*X;$Y1m@Wa
zwy3jZEMNQWR?haf-)<Ki*ZqE{<a+M+yA{vZe*br`=KI_4_Z!&temrOq&)f0Pj>F4r
zQ3c<FACD)v%Q-MG`~3UyWQuj(&Zkp@&;5Khv$$^O^M#YwRlZp4zRv2!^74DTUMyN}
z_v`tx-F%j>*Lu&}`FhLkbye@yPye_3-L}Vlzdy`4U1$AftGxZ6&llYF|9-g=zQ5+x
zvFrb;-yc_(xBa|t{l4lCPd?k(eZ2Gj-QTYVl=FW*d+0p>$Bp(`y^PO(JYWC+-=FXA
z|Nm#;S-`;VaeztcLj#A;0w(bj2iUAWGz#=AU{Uut$mO>#CvkN=o9>B&d{rNs6?hhM
zxO*HDn)RVY@eSu+gAR2LD?JY8hKG+8Ol_sk1+<xm%;jBs{IJ}w5AFXPcoqq?dmK@c
zDr_^fk>#3x;)t4>LE*RLhkxaM98!_{*cI{TAzyySVevA<pbNJbi5Et!lzAu66W60C
zxxM3<VVPlfK~J(!>I_pm%a45(E(^JgHC)Bd1@<-YEKy+hJmDl|RAjIuS+;x9aW|_^
z&01d$K6>-~xQpDUNi)tYQ8Tyn@a9XH*i*Aa!=2Mn<I}{#;F1K<`#-E@m>y1Lu22<_
zQTIM^b<(u$GIBb~)4gME6;0nYM^(R3(>w84(X=Bz&kSohef+FG&vf{rqS5JeDl1C3
zv3kxEwv|7Qzt|`=>jBSli{p~M+J40v*L{{-{TKJl-8NzNJf6n_>g+8HSA>h#|Kmxp
z`&j9J#?h<(cg%7JcCQOfRvYI1Rav2VcjhU!bwLxpY+3H8-sKQ^t9ZWH({%gpm-`#C
zLKaKAW_UPP1y*%US)`$>;G|ye$6#SJTdHQc7O&*RmSta-S)5(zC%oel!<H{gtCC)D
zME?rzyj8N?!*^9s>8;C)o)s=M%zfcd{c68L!a4TIpBuxrSB0*9l)pOStyaX&Sy$Jz
znKH!bYDZn(b#3FWuWJi>SI0c}y1why*L4+pv%-&7g>9N8y1s#TO#-|3jYCpl8%$GQ
zS~g~_u#=jy>hI=P@%-L5Pepy(G~?`=H1pFp&sAO9-1+rolJw1UEBr(@{h9pc$-kfH
z88(D%S|9swZPs7Q+kdy3ZQD`0HZ*_t6~1j@+YkKJEl9P#b5F{=-dFZ*aNx@uO^dE=
z`_a8NCtZ5w3$E=!TSW8zEm<A?D$IPxs=s;_o2~CY>Js05`Rlr}{?qrCsFly^u~k)-
z*S`4w>bAW<&aSUh{Sg;n6gFwu()WR1pWl5nt9<(gSA)V>=}6Z8@`KlwzAf0v{qS$p
zk3;Nl-Ydy+UVSF?WhYBtK}){&y?0(Sj=YvFY~o)N_j;McVS~PncCTND*c`fYICyP-
zXzH2Aa)%=hm;PBFz{+#r_oNvIcf@|2xV<`F&40(XJ+&KJPJ7?e`u*dSH*3)~i!(7H
z^TLi#6y4Z8Hz)PB)r})Z{^tJcJij~5bpFn>uX2s1J=Y1)HP+haT&6c8*!#KN@1M)c
zwkc;eOFgic{&k_lF0uFhjYNIzsVgS*ZCRr3`_e1=*QFWfwk$J0`_ixa*X6m#iWg4g
zdKEPL*Oe81TUUjjeHFGlYNwf+NuRLq>!{mO$9m_zUt50mb)5d!V}0MYZfN&?(>Sf{
z+EKr4o2KtQ5|cmq=7qj(TdX;9V*P*Lx^eCsW4~-pZuRfm5B6nEUn~2rXtwmNt99RY
zUO$_cSbV$Av1jh5I`b+1Oa}_T{!@AKDffL{xc|MI-S_vsw=JlDJo^E=`tn2K=RUMq
z|9N;}vJxAsQ{n6vDN3p<EspBH+d6Xxi@F%U<%xgp=L#oIpYue`-||#=-KS}*?>yDn
zKbfuZlF0H4f1a70uRJ^d(C3vu{ycYh-^IAg>B~a?yE-2JyCNScO<#8Ws9xDb?kmgv
zO81}8G6+9D^;+@K8SBj3j08BQ-7t1ub5=w<^0ZJdtKa7}>3iLxHW!{{i!%Psn{xWy
zonL3!zMcEN@BLlodj37^4E8^s@cjEAH^J|b@OizmT=lpK@BQ}L1<b3y+if!=oPWRB
z`Sm|8Jpat1eWT9p{rt9>bq+$_wnx><40|FwoU~p<9Cu<-5@<c+qNE(zU3UKWz0Evq
zI^1?2n$ItOBt75V%wgZBxhBlde!uy7;rOI48?P*VCH?kSW>VCQd;gX!Gd=n8cQIG}
zm1F!{KXu>#^TdAtuao<oTr{~D93{N|Jm&wum?1UT>)@3odZC*Cyq^ZoJtUf-D7H9B
zEF)1YS5drRqt?12@y(waDj$kBIBK^{l<2%D5r17`(nIYjAGK4`%VrBo&2KC_bx9|C
zy3~bFWg9j&T~?C5)g-;`q3*tgj4}^&4+hFSOwv2rsCVun<E4kqmjzqiJIUTHly&8h
zdn73LBvEe0cKx>(<vt&j`y9yhPO$3FM0t+lD&E5eEKG*0!WFm=Rjm<M6nk8?VY#C8
zV?!C|YWc@ZJD#^GPgc@nQZDH*GEz`BEmGEdY-D{&*<MJ+#Yn~UgYwDiD(*=g|NJhg
z*d?omZ&JO)t`^~Ba(%f;#w3&MOKNw;)gOr01#d3oD>P+hWDr#Bl2kF}{Ky>DERe*U
zAW>56^|8xauzLfC$d(l%{trdM4vGW?ivCX*joB!gXjqbXP?U9t*wUgN&J|jv7q!+h
zl~yx0ZdPjCnj|6KA+h68>29Gieg#Qc3(3Ppk_r(z^BQ$d6-g~Ll+uvUU16xZIZ$_N
zqV6rB=IsY{_XIW{Fx0b*(0jT_=JySm&gU}S<+7dAWj`=6xl8DKS;)OEtb939|1Xn4
zsD#1d@>Y?b@?t*?SS}f?oUXv5)W#pwwys=pV|&}i?QIfFMtK@as!i3}PDVu$?WGp~
zl(m_e%V#JXUT&|K=y2UM+2fMR+4c?_W!0V=9laVR2}M&T@2K^9td=FDK1-u6U}tBL
z<<wwK(~zB=C6^*re97N9**5m1%>(9Xn~m*WH``xO&Y!#3E;VzS*A|<X!FHLJ)AB5*
zdzIMj+B_{wv*3oZ&6ecpFN*ClH0=sF3k#>%+-sg*XK8&@cv`1r{@cfPPlXE_C1>8+
zJnf<J%+j0FW~{Ul+CH`A=gb9?vldy-S`s<S&cy!H(!96ZX07SWc)x5G_ZOR_5I4(^
z*&Sb8@2AY#wR3j+m03(v^NgMb+&wb;NaUP7FFp6|^jj}Ehv!Scu}asZDQ**r-HfKp
z&bs22T{8F9zf8BQKYg!6x?awldp^?n8B6xbPN#Fn=4`Z_^Z4excP9%jrObPt>2yFd
z^tGh_`<e59{q*_B8UJ~w%jwMdTu<hFdg6Vi#pl=-ANF51XTMnRuJYM<WC7=^1;<#t
zcYj&Hk+opI$->_^=ly*d|G#tIW477Mr{*12o_FQ4z1-E<%})chqZ0L{78!Zve2w%B
z3t8|nEyQ@&;@_-EuS6Eqg?KDHx>z+eNcHI=7170RTmha{{@SzrB}zjiU6(A}n&CHP
z9@8nuIc7^jZY_Q1n*8aei>a1V^s2>iRm-eJGu#wY7EeoN-WFSRH7rv!toT=WJZpH`
z(y)@Ku<Bi5MZY2&q*j!qF8`OYba_hYipi=gx^}JT(FzZhTISQTH2&MNi>7HeuO?+q
zOVAIC(>S*B;ntNMVX^mF)2DYWGcNNF(^}Sbd0FYU^b4u0HbnVmNqJSWEOAMT*P6C+
zmsMhlS!&w1l+{~Ti#$t9S(b2&D|&ZU!ak|hKTKC&x#BUYYPI#YHK$LdU1wc&sWna~
zYh}o`wM$Q}x%_O+3zLi}&%Cu>EB~>qdo|1b(W{^*r@HPwTjr{kcIZ{Y&8(E7vLtP_
zBrmqq`CTjT?pn9?+PWAq*N;`}K1Z$jUbS}quap~E>+_Fo(3`fNX?G5b_qvrU=e>Ti
zcxu!}xoju#=+&FbHb}o-rRcU+v@GG^tf=&5|2F-ZwdOk48kTDtc+}FCM5W39Ub=#7
z<yo^uQmg%BW^Z<ic2bnie(JTzdG?k=(^mPUtoHnx6(GGe$a-r?^wu!%t*o;*My}ct
zb9?Iy<7IKu+mc>yNs8X)CA~In_BJQ(ZCSUsF?nyxlit3uYg<wD_KZ{8%4TnO;o4qx
zd%I%SQp;Voy*Km!xQR>*-qDtA%kX{brNjB0?K?QaMP#jZPKn;RsB;!i>dslach0%J
zbFQ`h2d?5pzl)Yg7caBkwLE&)iru?b-QKnG_pUYEyVptY=2__bzTB^Gk%-y$dLKv8
zphAW{9isbgXhtw<9r5T{)Fig-l332el2a#o$}aYtx6rN>Y;69Qs4aFvLgGc~Ee@S~
z(vpXT_RUgkdOD*l`?*f;^rkCJ<r^KPKi-foH*ek(*#Br!{}UsbmzQK1cIwGakiE)S
z=_XOh=2^*ES*f@{pO4dk>rJI#X6x^X1`!+zOhr}k6$*(FhAA@+rmZj(oTRw<`@tLw
zCGC@wRPHDlCK##7Ox8VYWO}mQ*2&oAld`p?itWrA|Dq1N#T`yJjU5)NPLwc73Nmq<
zT$^*qWX25>e@WBEO`1M3nw6K1`1UY1FdYr#(O~;6>=;=8)x6&Ap~eKEZr_FV{*9VZ
z2Q{M_8RmWxJsi=n$VqESlbHYZhSG%$yg#(goe&p}(5@}i7T>X#e?srS+Y)67&l?Xa
z?NiiXJU*%H`HHff<5I6U$_t<G+b-DrX@~UZ)4GQhWgZpnKXy>Y_DBCU!wEg^vbPxZ
zJ$A@)Wmf)Pr2p!o+=q<^zB;xpn%*k1(m<TkFfQVtxJ{cvW}8ruVx~oPmc$|X&65f_
zl+`vVX>2}YQq*4k!^rTlk&(<{o0%#d98<bDRIPoc*xHy}RX>s()ae=AnfGYQ{q(6N
zmpbRI5LnRBwRneVW0OGCW_6M6UE5|KE#0EAbGAsl&ase2&Hde)kq0%iZ5obxh_SEO
z<L7>yM??HV_3;|P-ir~9S7vBSo{*5XkZklhabKcuPUDG_LHnN1-gj|P->QRs*Dn2&
zy1~?Mps|12obn$X{T3NAr!V$jeAs+CQP#mj*4d)v_D5OfIW12&w)_mb;<w_!f1%S}
zwpHxKtxL@h@-<HsIy_PM@kFu9r`NMr%f(ERGd{Cj+(^gikop>>q8(=p7AcuEDWAX7
zZpf@+l%rzjbl55BaMz5pfkoHtm1{!|soMM0KJe*mn5&kXbS`A(IU{wAB{u|?cxY4!
zbuF3E#lWWF?%h2l_U1I*ZZmdK|Bc;Ig~$GX@6PZk$+i(Y+1=w;u2md!TtHU)s<w7z
zPGi*ay?0(q?D@2JI^(_v5oJ$ipHT9ZdO5pkqL1$NMVEB`Hchu_zRx6c^6bgym+t)I
zXgM!<O8#Gi>{Z3edye`}u?Kz@>Cd`8VH3|pA<NSd9upags$ynL6umQ1qUP$pKc{8a
zC}zJ<{KRXd%h3Kc_E2K(A&s1C#w**+PAXd~oi*A#*+ikk&gr^$(Dn1`s+D&S$9+2N
z!FkSOa&7vhDZZTQ5hpwKH$0TN_fU48x}4l28NH*{0xU{;k5ul}#T^#pGAz>F_ei|F
zOY!3)qqsuZ?dSLtA6vvdmRSB+_uM1xb%o123bj5ymYe?A-0!hh+!IOj$BuPR%pN`t
zT36_K@3Ft1kk`H^HuIiJI6kp{_td#hXv^(gGiNWl_1Ss0rGIm_oz0YI;ZL49uspw{
zJhNu!v-+PlCGU2gQhxq#!piAgr)N~$vuWBlqwd_ZwtLTyFncVBeijq?d`ji>kCUHg
za@wVH&S>^~`6l@VWBK&TnJ;G5J!{%Iy<c-j%fG3;FKr6`O{+R*owM%MlDrwy_dUy)
z`K;mJ%T~RY>;0xRpSJp-{CtLVsMC?>vRXE)<K7&rd$ahR^W4mJb+_N_+xcS6t2dYK
z<yBa}y;hgEzb}VVWwwUa+<SF%bFRESVfXGr$=iRM-*|L8Jdm8XUGm+VfA2o{z568R
zXO!~pFZ0`5>)ySQoO?s^{T;ja4Cm*ErM&+$`K`+Cw`x}J{@i<iZS#kJavuu6ER??X
z=Ec9wzxw7sIro0^PPg18&i7`{H4~Y;W#va1`G22e_rDU7PdVH7p1uB~IoC&n|MN8W
zr)uwC^|Q`_Me4KF|2f9>=_2npM|XeL-~ZVqe@@qv`E{p1o$31^5&y-{ewM9%hG+g~
zUHvb<>zzereRaRGK<Jcn%zCT%|6knV=Xu=UE-L?pZOUi$Szjfqe9kWMNnF3+u*vrw
zSG-H=zl&-4#KikZ?OKq;?-#g#nd$mRFY~@S-}myD|6V`ev(bNbZT1K6_n+?Sy}N(d
z-m5Ey^J$<+*-w`HKN(BDnOXhJ(pze_bgk>IB^sxH&f7ohMV7Bu{Ey7}A0p)6q;>t0
zo%(Za{_oZAXFI<B6(aw$&Hv|?`@c_02CT|=I9~rJCVERb%dZdrTs&fSEe?oUB6HOL
zTK!MMtUv0dzZ91K4w&`(DF3q5^BKzAe>Unb*}DHX?~*^yPyPx2^?QT8W2)DmSNs1w
z;$Ngxee|Qg<LCJQmD~ajOe_om7akmJW){^;xpCp4bB7@NFOE-#k8|_bH~sk082HG2
z0<U17O5~;o4vkFC>r!rBdg?vHF!kJ$$ji@s=UA4$i<wchz_Z0BGw9Dn!^dumou(Rn
z(KPIEk{7P^SsHcqRp^?~rCw)mU40$CA@OLRYV@@?A?sq!uS>ms?QQgq!o!Pr76@e=
zT54cgbYzEl=Dnr9%64;Cm}NB_&JfIx?Xk#CJT_smTAIf7PpM~$#ntWBnB_h`^KYSR
zzuMoa>+bGWXWXq)^-&|9XZ2LBHjf)0qmH+Ezkhc3_V@e;2V3X=n<>@sW|~Xyudf|7
z>Tlb(F|$;9)h_rt{YJL%wRd-ZmoMM8yIDQ{-k;;kj`hzkKk?^l{5Qje)>G<acYpnT
zb?5c@=jJQ^`@=A2-Tr?oKI_}D*dOXYz_j$T-vJioDHoQ0>6tCCu`8zdz0<U3*)JUU
zoJ9&<guI`uJak1bWS#z!S;iL?`TzgUw|SyaGx3;s@s&dN)_^^)oxYnr*?4@HNX&@?
zf70e$boecoQe@3G@s7UN-#(G`cAA`PjJ$Q%ZxK4Kcvxh!jeKK}p|e<`wDB?J!z{%<
z7LTVCFEjG}XSI2S$wTQ$zO6EAHu(#rZko8y;kn6|02k*~n^hE|YtA3F?Jhax<;1vj
z(kXRq-%BU?_ueVlZ!RoadWAz=^`#%LY;5qQgGxM8Ln4xWuUwh<F2*m^@aLYspoMX|
z0bvQvu2ZfpP~#E0Zcr+F;gYKE-z)q44p$f1=t<{n3P{|1^_!*VRcBLwkIE3S+Zo$U
zzsHnxDxWyS8D3+uEhcj9+L*aDXH8;jKC5nyE>pD$J6jQ&73!(Gdyk1{)Are7-YSf|
z6JlzW`({M!QOV(rshB*~+-iEw)E~(cT$kKXh&GH1eNZ_wR3IrmGVSE!3CZWmQ?C9g
z4e{s=d=`-!7rM^u*1LZee}x{-<4rS2)RUf8`EpLT_r_S0`?fbdmaX1q6?A3ZwjGP2
z8S{Q+Z8+RE`PtW;Hs0qRN5iUf3+Mh5%<A?@tIpf?I__ljj@{Rc1Hb<I_B;Oovv^Ix
zA#U?O1xJL#YYLA^zu$dv^F-0Bg{QQ)|0z0Se7&alob`M2L)}Z&t`=YNHve04B{*F6
z>m=9hze{f<KmT}tZ|e5HWp{3J%f7u+{rzwG(mPLOD;{;5?^C^X*tV|n+3e#6dDrJo
zudBM>I(<&no6Xy;fA(zs{_ppO^8Io(pHBb3QMLYTcztcj&h-DaKUziY|NeNrz25Ij
z_Wt_%f5j#H>lxT4xO~1mpMkgHz^5nvmH#+W5}3n3+q1g`G&w0gU{bGe<k{!aC?Vm%
zZu`Sgpsj#`nRB6&%Zr0eJPNJqZys<({&3=-^r2a0iXt!b0VnZ81}&CX68UR?I4iIP
zb~vjf3HDaFsHg>YdZ#1_&-HM5CmGnLFlP}*@D8VznhUMrEDQpxB@Rp76KJyuQRFZ7
zIHtZVus1s;S^Dk|H;ZF|eXeU1*q=wZnA{8OuYQs&|M!Qx16$Apt26Vb@Kk!Zs0B^z
zPDxRg{psQ17Bp${k`z_lN>87(pvkkJq^R5e^bBa*G;za02Tk8fuaIRyQ&*>?YRCTc
ziZ~WDZS#^;-P}s=m}f!LcRxwhul?zrz!p5?@IRGh+NMfgDQdwpPp70A&;99>;TAmW
z@{%-xh?I$o3Rq^}zLI9X`KNDQ)8*L@Ri0a%)$}WwW<2+KNV@gSpXW-CU7q`?<+;t<
zNdKBk!Slc0Nw@p?)4!f=%Y0^54M*0ffEKxsg>0!W)^<5DFil`xBw)(Gs8to%9d(64
z`tA!xt1Jc<2?a(rivu3Q0hd@*7#KA}HN9hZHLw^cEH#R4@R1C-Jp0)cM(d|9{bUa`
z%(r7$!6UGWx#btb5-HJ@-n9%Y6JCX^@Or=~)W8tBR*P{>S}2q70j==8zpirmD6B~q
zT^*sF(8x6>bgh_!cJ$3zjNAuA*A;GUV0$%-ad#HO`iiUn9OD13YUKT5x}ljhhuth8
z;)vQd=I+!r>{cHd`7FdX$$wx-)s4Q%-|~Q2;l!IXQ|Tsw4uvfXMAve7Wk+3^<iN5j
zHaFYbp-HIY!Pbqsj=AaC(RZdjVA=KbZJz&!=m%`!JNAbj<m_7A^jPZpjuWYQ#dCKv
zJ=x~KdTHsqlIRUhVkzOfZ=coUiFy$Gp-z0ygI-3Sgn+m&%gWgdI}TRewQl}?D14vE
z4941*(an-K6!x2JXypBIJ6`$<!vW@PjC?s0nwixt*g4_~nq~hyka@G<pio~yi|QU`
zp7e;r)(;rl4euoKw@VyR{#VfHnv*0nKjLVGRhO$))kJX)hhugE4F7sFbsmfFNmwMR
z>cFV?D!Etez+(BYFBqMqE=^t+vP3&J(<^)x!*nf%Wrj<Oe3PSsbzW~-ZYP@+&?t3f
zft|xjuiC8OvpQEfLP}SKrWS{--WAGGQMx*s^)<^Wt7{vh5}0yhwWH7f3fpz+>$<X|
zuNVCM6@HLu+lDT;H;J-qBaXR+U7ED^O|tfD#&coQHqYT@T<)mQ#NWZdvhZ(7hJW`h
z!7bOetWrJ55fa@bc;MHzjcvMlz6rOZzlUvC`=Ptu|H12r|HN2Ng}y87-5c}VOnld+
zqwBb4)yBTdyT1E=ZX@@m?6)85%-QrT^0!~Cz9(^l;m*6<{OZ(z`;v2J@B6SfzxLnP
z?)y?7rtfFs`_S+*_W_gojRTf9%=v!oO{jOSIA}GafR95jQ8vcnp>@QLPTM((l}Rj`
z?~ZV^Dc(ER^_ihcsxrfc+i7ky3!|b{+lnbQI;zYI{xG!ZXif_6x}>JP;AC)H=2>Be
z%d?{_ms{L5nqL3wv%c`u6>hShgXU&ETVWP@Hmvq@sCq!CW&PB1iF-fKy}0X|-FDFn
z#jV+KyYn*k%UNBNdeE?lKl+Bdz15|@)ZI&TvolXOIb5FmwIt2nHY;fUwJR$`9asJS
z_v-4gsBK%;<*qHB{aWZw)%HF2w&u&q=R9(=+j(qR&8E4scTWd@zj>k0Y}<O@+z&;&
zS?{aa?l|}_HcxVj_1zCs5AM3yoA>7u!@b{Yzt_Kv&1bl;aQ|o8hW-399~zuzJYaRV
zIIP|Cu+{v|5%K38ma69jCp(;fbW7)i+3NRFeD3Ft%8CE<*cC4@DOi26I)9TJe*nX)
z2~(E5bZ?mG$`v%(O!66LLy=c*Uh%A3CZ}!gfAZh`r+%@Nm0`3NyM@&f=Up5T#w(L{
zt*P3zZkF-N&6~MyXl>%s-Xf%JcX^jRw~52*)w@4AtiQZ^pOE!t<K27_Til}89G<l0
zXqNT1#am8Z+OqSu$?o54c5AN<a@Gz0Y`wo*H%!<j(s<8pE1P>kd+t@)BnYod)LxgA
z?exTHTS~Lulc;Ski_FeG{<kM%wpkXl?ZswBagFtPpSOK!YW(W8*QjQ_M1*;1^ZFaj
zw*O`^GM?72+Pzomf-Qrwfz6fe_n3FEaoat#wrdXF!JWK=_w@$8**l&&FMs}<kwIa(
z+mU^;4lZsc965*VdW%=cH)zQJ*zw-D<Gr#alY`~Q+Zu}A_FotC^&3r?7QJb5(WWVr
zEPwCb8L`Ly?`_L@kL>?5@0xGD%0Sy{vG!(`7KY`ER+&|AUe>*ty~lxb%`UDh#%n$s
zZ(p=}?dJpQv`qw69QSkSxJj?s?CmHTvs-M=7O&lF_;0L{{GwALvUSht-NB!&uX>pt
z$Tq#DwCB+2wYN@fjZU^X_FMOElg-1VLnr@5>uIzcdOqurR*Tu|F0*%+oZcVW_VLpp
z1DV60yllTInRl;QZ|btW?6dx#PwQ{J*0+)|sJXni_V?cVkDaH8Sa50Yd+fdAiS|ap
z<b5SkN8DMKyPw(7xw)hH#<H&4jlHKQhzIir=rD8(?f>$5<7eZeAv{e=&PRV_A64tN
zoYrJCW06<nnU&g`kIp-N^uMsNzO=&zk<E*nwT!(tv+B5+&o<_0aag}-7ng~4`k4dv
zzc=rE<*;+rF##Dz7wv<*8oM`p?>-XcC{}XtMAI5?<Kt%+tqELgEgj+>c-dMu#xzu#
zF`Ro(rHqr}9{1>Io7m6CA2NBUFR^I~F*~zbujP#1n?r~Gz5BK2!>2<M0_!hHJ9n8l
zU$x%;ZBb*-6%UI$zKpZY`{y__?B4$G)Zu&9Cz*enH!APr^0shLae3~tu~WKpQG?u)
z6`rpr+sQqc<+){_n+X@s?~{Ga8)c;ZKdGGWd}a9MkKtDtqi-Sh-<!RD<gENP+4a|C
zSIyI>)|}Zi@3Ceq%c@0>TsN3#G0U7@Hc2bd=Je`CTI+%?q%7IIGWpo%CU5RHn|VvL
z*KwQd-Q*^C<@EkbZu?_Q4#XThT(qV@$47Xti9m(Ukvk@0Z*@w~9Q3y~y<BvBU-sJY
zV$(=&r)nRYvrl~PzdEkMvrTo%o}|?_%2N-W*}W(I_MR&-zHeuloi|>8vHPEgA&Yro
z@ZN&m9(PjA^?LXAP1$RH#MWxd;hM{~EQb%<+W6W3adt@YbL!bJUFV3$9ktRZmjbTk
z^RAq8nd6u9%2VvIh5Un!pJhUvRK0qbj1-iQDi-^Hwca#INK-lc=(I`aS8h2!>#{xT
z2G@CqUFQp1u`5_HemQES?7iH`n>A<imL98ZOAe&2Ilwv9JEO;qyI0#$_@LwM02k#o
z2dxeY@SZs~Ys>L29g$Y+osV^P-(GX{%@)7Ijwj{>rnA~qusBujS$pP+kKEsj@zplx
zRkk(MI6af{z2tN0@||^RQ@5$J?!9=~EU(*F!ej5}MZVuR`IcC3zrI<&y!o)fTi*#h
z=dAz9_}$aqVB+g(X1n9*76S`cJIl8l5)W;N{B<tm<qp~Ih_0>(=d&7Ld5qjxH79Yc
z{I0Wd+U$_2v(9U7_L_YvWbW<#b01w<$75wEd|-pgW@Z_;M4PKDt-IJlk8MA)c}I=g
z+R0bfpJv#zCp1T9_W>iF1Fzh+2I~l^p4q;8jgRp)-|RDIs(i}s?3P*^7&ck=w9KAc
zU0W5mm}Vahi+_DQm-XyP<Di16PM7ECskxqQO*xyzyf@ca-=OF0r>OM>tIvMFb*c3A
z?ca;mm;XLnD;ra9db$3ux#`=(_9{2Ht#35f`px*VL1cE!Nms+uYhzBWjp1YV|ES}C
z{%_0$-q?$>v6pmX|6R6?z2X~tH8%EIZtV5i*c-jEH|NIQS{r+NZ|t43cQ5oxIUMEC
z|FuYw>7J#LqN370KA|{Mr+be=<K&|{Bv&at{=4vn=)xDJ_Z)96)=Y|%<x*B@ihH{@
z?(x=pg0teZxbD9fUHn)y-qcF$#l$#6r+B4H_mr*ff8<sAnY!qAZ~PBkC26nwzy99;
z+q&?d=!5Tj7yj9MPu)oI)8ANTz63VDgr~9zoOucVdlR_U-GB2n?p5gnwM}wj$q5Eb
z54h(g2&%;iJ-f%F_TZD~!~eMt1=c-a(tD`y^-#1eQ94bLmv1razK4u*@qGId|JN#h
zE=^?VQ*J--Kw?|MbK8gVe2>25{!3C%OH$BV$o(x*ab1#9T%vRmhrH1IZ@KprrX?w<
zJ$#;;_-<{Yj9j8=Ug87aM3KISM#~-=JxkPC_Q;~`v9{Uc@1;rB(~?Eq9x3fpmSTEh
z?w2gB_r%8SG4H-)t8<S8+@A1mi~IHVzEzsyw^Ck#dC3lSkKB(X8#vvUn|Dw4*%SYF
zPsIN{`Fr+(ab4Vd*3{3XsqS{EL4B!VZSfyk9|^8X4d0d;dhDr#UqZyTN1E#rWtT0I
z%X+G9_Avb3Q?;=B(c6;k`ciDp#q*nSX?}Vd?{|;+Tw30{wETZ*1#$OOJ|$gWkW#!X
zfi*9o#4cSWF1<W2z2e@Zim>OE+mb5xrC0qsmR@}>z3yImz2EctwDelGj3%)cb$Tz#
z<uaQ2UbNV~Xmxv0)t1qkm(kYuqJ3XR*R+iGa~VC`GW!0#=-8KXe{M#<Ugjjbm%U~$
zr?|cBO3UocdpWf)bH==v)7QQ1D|<P6TIOuF%sJ08=bp=)#rA4$*vkdqGTWY6_~h^{
zl6y5TE^A?3*5b5R^ZT+^lx3~jm$mxbt7Z3It-SVX-LqGVzP;MOmc3F=u}JRadcW5j
z!(MO7d%a5S_4c&aJL0l;m1VDKd%b(w>pkmU@7$KX@m^-vg?&Z$viBc*z5iYI5w$l*
z>~fCg<s7TaIoy}Cx9!czX*v7c(!Xs@JFWNT)VnvQm%TZE@6ErXV!6lFaxXl4bKzUg
zmAJP@#4;;>W{WvZx?whff6`mNMQ?8(ds}cX_ujj=7sKA(_se~l_V$ul0{^j;!*+_V
zUMzh2ZNam1Zy77zz2IxQw=VDXx3tUW@*e2Dd&rk};92atz^qN@a_>xg_i|d^mt}bZ
zM(>}kQ~O?*|D!M8-74k%y8L%)?=El4=P7%8yzkxTws*I#y?x17@GLC<r(FSy|A&lE
z`4ao`|6Y6duB?F5{Z+P9&W&&RU)c&IyxxC3SMdDXhu3_Cg8P+Ug}rCL|L)JU4<hk}
zQm^icU4C=&*arsl_mbZWZi_9HmM@gOUudTF(J!o!<M?|8`;Vu~-tOC%%l7=E+N6I%
zO#cf6t}9B(7x4No(g^>g{^_Gp72^kE4qbKzUG*YG_m7I~MRV=)w*1SH++L)%>XSfH
z@zc6bX6?nM=hJlFf71K@N!Nd&VS1tA`_CNPv-JOUb07a?xx9#R`X_$>60`nK&*R>G
zJ6EWg{>i2Nox6UC@}W;Q`-`pP`R)FHw*6mXub%PGFVAWF7w`7sZ|4fk=YR5)|KO$m
zA^iP^u<{~H^RGA3KKPz5X@2p=;QN;V_TrvpAH+6)_~=(0t*<1tzc97D*wa3r`TE-w
z{rBqeWuf+8lJ6I=T`!GgFEjdHn*aXmtg^zy_wR%DmlfNWo3Hw8bG*3hy;8vcvb^V|
zzs-sc{d4;i<z8NM{=4#_lCtYxbo;-TvzIr7=Ndm(2=Xtg^{;4ES1Qf_9#j53{(V{F
z^ol(Gl8<TG)!_xb_bd9||8PC^t?v1!`sEdqrhlJw|4m^3N1^W()AB2)_vgpNe{VOh
zoW=j6QUB8ixo_R;v#aAP=KrshfAqcm{+HSFf6VItaarv99QE=R_NwLezf9zRmD*QT
z*jFx5&#jXGvg~*vKNFL}i(l*071#4Ct=Ip}FIByP|F^tTwLnt!w)U#|;#D){D_5CU
z&EEcNmtMuP{pBj}6*ik!t5y9L7pjp}`XgXev*Y~tw(sA|*8g5qU$e(Oqr3iXl79KR
z@4q*(*POAh-YQ@H?}&WEnf&Ul_y3&zUvs$p_j>o=XXI-y@c+K5Uwh5JCVyIW`|{tr
z%m18c|MPd>%oR7QHQ1{!<kvo|uf8JwPuQyVntq*xQ{98`zfb&Yuh-W-o?crJS2HpH
z&+YU7R^R`(NUTiUz9@Nr=_T`j7mn9Fpa1W0|KCsfwO9IU&t3oXDZc(tfBpCWHLv(n
zZl(XxKVSRrc<q1o4hBXxmLGyo+WW;Nc>euZIN^aqqoBH9OGMzK21ZAdv^Os{K0em3
z<UUC!^OMS{DO%xmEKDt`XJ#0sUs{uC{Os5SeFlabCoeDeXAsckJE}3^Mc`tQZnfB3
zUy_2C_$~KZyXs2TmDN$3i&|ezefjVD@`Qs@Umg}bJlG<!t50;cNwVJ*#cZ!N+8363
z?=JnwbhA4=X~F@apRaUtei%GD(j{)3_vVM;lM|EFgV*K!G<tTX>vqsxscpv5+XZW7
zY)%L0rmu;&Jg0lJ>e<6RU8(oqa$9&X9Bj_be)smb`G*IG+J*J=?i6I5Kk3~3FK42O
zQ!CGTqwrV}z2lSDr(XLf-LUPzfnC|ZuUgOhQ@-!j_09S3|JnZe@#*>H_4)tp{{8v&
z{qy_x|LyBbb)U~ES`?X{;OIC*H8zT0F+$dD&B@Zsu`h43#pOMky8U+2CdMC%9g1BR
zN}Z~+DwMju)Uqpfvuv|?P{QN3eOfn5()PI?7KcLqDdxW{y`kLpd||oFL|3Uwl}Vmj
zossdjd_SHvn}U{Tr90ld(<^-I$l`d3GR`ICt%BQBW~R=nRGXD)ckM}cU|eNFaq7%#
z3cdMRQ=j^36s}a8pLyxo)3#p5U+Mj|QdKKba@alyFYbMJMQvK1635*+#<xyRYpI;K
zMSam+sh{C9e8jY#t(Z5f>Q#a^8-s|yt*O?OB@<7rk}AnM8j-#x?5>8~`n|t?X>Zt5
z)TOm?|3>i@{ZAOJQWjKJTBx;)+0D+`c=g+|6^qwy;?kURH%oPS&x)t3=C~c4Rh_rt
zaMW(S)N{XH=**DO^UmGu8yBIm=ghunt=)gEmT9cM`Ke^(l*e5EO0=i$I9IiNnfA)p
z`bX^DxZlqBDYfig-g%)_;YXLAlQuk&v`TBk>UBlY4-Q4D)@UD0HeGY+u;OVO<4q>F
z_e@{KI9(>>G~0C!y(r^(HAW|`q|auYG1uN}a#<jG_vURL;&VP-VF{F4*Bl~TQ*tt3
z@|=>(iQTqk^BMN9Dn1|O9+^Fri#PV`qPWv%zb@8ZR$+dx^7UTx`?bGgADt-np1W<k
z0MlH9hZ@l?<yT@~pLu+LqPLyp)2Y#QKR0eOwA*mLv%J+{ZvO4aFE^LY&N08aa`ir|
znf}IlRnIxr#YA0eJ*<1-SyMT$+3UT(|5c}^S^r!0e0z0i#fxL&{u>r`JXD*&f8pP6
z1KY1xqw8(IUG>(l{dTwdzwM8Q-S&1rpU$?o{eCBT{lA}YcmKEh^YOI(|9MO1@2h#U
z_@dmF9a+Egts^SL<vLyT89qnLf4Nb9fYoS2Be#kIqpZe3&Y%rVymx}%efVzAbm?W-
zhT9Kr&nlnsTyjD!r%3{1@C+x`Ab<T^+6%e;GY(2#no!ePsmOPc{jk)h4efR!@qbIg
z&3Ty&G*4^}`Pap9DCFa6J(Z9|?(!W@BBu<hZ{J?Xv$5lle9^{s&N)gV3nPx|P1@Ka
zc4WcJifJxKH-1d`?R|rNs)oCo*0avC&PQU$R~&v98`z$_=aJZ1jT7w8CUyzxB*;fv
zoNzU|)VAVZ_wCnHw!2L&EvR?NS^SY@#%$+p{gZqDsAxEAo(eP)=so=Umg@a7m#s$x
zCm$7FnCKxf?<0q&@vfDsAG(~qBWJZw-x)LO^(Bsmux+2R{;Zy>tv>UlyVd#5^VQ4r
zC7Zp|AEnLO&(qgtQsVo7Q(q$^IPK#NF_TvwMV)7YLycEf&gMBgX|Cj@W!CODwA1$m
zM>K7GW;XY^cGbGgbAOyk-`G@nO0lW9ceRU};pvr9zNds{{VRE)Tl@2T$EMHouCB>2
zVca#NI>}_-$1N+|l&_sVw({bfQ!H~Yh|D^pdT5iuo)&eFbWf+4Lz}0+UGv<1;mnH@
zjukDl`l{*r|75T~=at#b+W%g#rC%3lS!J@2G36OYyVli}R=Vkjp3L!_UJ=lG_TtLG
ztd*6AW~n5`x~&MY)jr$hbt%y-bm=h{nV{WK%59e}ui4+Jx#~^VwY^N~OH{m<emwH>
z;5H^PorJC4&Z{{u9<}?j?C+K5dUqv*_dE-kt?)P0-S~Cj-cMUMPY%r9wr5rdYv`)_
zBHcH^FLwELefqp{`^}}M>c4}Intj{oWX12Ux%%eqYgab!+uIZWv@L4Y!YNZ*dRM3O
zy*{#wDRl1oTHS#1UD0<AZP~S^G%w};&Ra+Rec665HRyqoWlX;2Rj(7GYh6RKb<fpp
z-+PVgo%v?1>uVR4FWnZbmmuIB`!Z<R_DfIJ|Ep#`qj$k+?LPHt?YYOY<Ik@M-z;~w
zC-1BF15R_^eMhYG6SQ}Rtkb)3AnxFMhS==rTWMy8Zm)gYT&xu-w0Zg=Jw3k0?WK1v
z>b;mD5m4YH?Q`=4+tr1g6W4aB#zgO#^!2El-=x;S&cr6s>$%2uZ^JK2hCV;FWv9ls
z^>vG9r@pW&KM`SPG$T<aF0tx{-_umBzUiEgd>5@enpkJNXi`j&M)uS#5swRIPTiUI
zZkObtf`6O$C)I@f)RQ>qp|YjDl;^>}PuGt$)RoLxYjq)PX{AHc-S~NeyjLTFE-%;q
zSK_kzce2>z(Cyb-O;)ukzxb_N856yBi;?JEZ~yN%HY#m<x$>X9&lCOSyRN^Tv?Xxr
znoPC*hLs!AR!*_xjXm~g%W2JPdH(i$Q}xWFmxZ)#Tfe#2`1Xzd1&7PFww?W*>udgF
z|1G=kH=g*s3=_V7&g`7YT-{C2b@ZiXzt~s)`j|~-#pa6_mc9KjS#nS2^jlxn^{N@}
z6ZTUnO*Xy9u>VWj&$$;Wxg|F{@RgQ5-I;V+>Cdv-upQgN-{!W@e{=PXnx$-g%!fOd
zwq4Vlr?IlN=8;zOo@e6B-=d`XK0Gp&JkL14ViV`ROi^*k+a|raXO{bZ&Pv|>a?iG%
z6J5_;OOAee#@z1bxnS#pjaJVd2mJpvNrG>6;qAVC_V(6CSI@bToxf#!oPPG+ga7^|
zt@NJb@XyWo+I_Xx+w6~BoLag2POxs-s%o}JPgH6+n$MLkdp+x#_1(gfnR~OJt=hZQ
zfp1Uu%epe--O}q)&Re;D(<?sCCHhI}S?<BTZ-V?UOMhmPtGQPn_GXIGy^75GouzB<
zT>ks($F02fw`;rSRNsGp{VT)Onz!9aU!VM5bLUw7zg-Fce~QhV`!gik_{-+|`cIDA
zS(fkr_2u>|&$pBJM_qEaJjnAt<@NpWs2SDve;(`q|9Sa->;#q1&kn{WpI<D0`0h%3
z2DSwZd<u;J*x$umz40}EcdmrYQ~8}!<yo|RxBJF^Kk2vQVeAh<AC|laXHx=Lk9j_q
zyv?qq;OMh}^B-5>xrGlnpYd@kC2;%Q;@Y)<=g<PKYY({Dr1_RT;C=Og=UD>Jr3ZZf
z7Vs}hxLbMu&EIIjqzHjq3H+ZF1k4r+SUnWbQxtVl6t+_o^IIqymMG@6P~1&XBJQEU
zCVBR=ClV$mYPTwiXC;cSdMLIpQM&7)_^E}`#~w<ZdnkKNQTm;toLQn!S=-6fgf~wW
zWyO>f<&<PTEtLDVP*zPzS!<D^)gvXpB*jIEO$G}%xE?(ZR8lfqr0$fY-n2-??UB0O
zBF&;l8f}j>Pd$_myUW@n&)GEZ?FuEWX-T?Wi*zR`>AicTb!m~_w<ImLWSOX>ue}R&
z<dU_O7Be49GBSH?q_y~;s@vloHS<lfl#J~b8;3nM%~CdzN;W$-@7GTm^SZ^RWyzM4
z9-CDuo2`3nu_{Di*<;I1i><aP+n!r&do0<uE&lw%#g>N_+kaDb__WyJl(OBu$M#a^
zw4Xh86nf&MmEvIZ#M$bJ!?H+2u_dl%OB~%&-29%nIjOi$Q#LJI;!>sJ*|)^AOT{a0
ziBa2Q_oO9W+m^WPOYvN`#QU0x!@gvnTPi;9p7@-4;`vL(_t_GcH_865QUbYD{r@cq
z)KU#{dh&@iHOT2{pqpwy*wY{{)s1iC)#8?hnyCf{sfM>L4Np=nYE21mdKxkBX~?>#
z;hR(=&DgznEsffy8oO_4#3I$WL;raFo~6c~TN=CUY3!-ggllqv-<~G?Q;k<zmcXQz
ztoAtgmuiY!T8i1TB(-NLR>`hj%hH0DB^E79DqEIX)g76amQnRAHB2q5DJ|=lPt2-i
z*>!3;^PXj&TISgLVBy4PS(ldOJ$jb&X<3L^TF$R$d9#)kh^ZIKrPtanE1afQ{Onng
zm3q;lv^2N${GjxLsOJS{>gIiFWp?SMS<g$G(#z6jNG3^@bS*D$dtSNjdHJrzxk`%F
ztJ15_Ew8!uJd^2p#ijJRTj^Erme&il6qPM+SoFN%*z<a^3~N92M!gk{-<CHkY1C)2
zmK&|8v(spGd(qk!pPiJ^?DV2BZAELDhU&k}r@2)b9bqdvmuYmYdht=_;jcoCu5~MV
zx-@#VA{x$R^jy>EdH14y-rdy~TVgAY1Wq|}fQM(Ilx8f4hnvfZNqm}~Tev3Ktqj=1
zGc|1G)Huy)X)CAYX-+R&IX#QZl<B1dhvwuymx+EaCkCCEQFdfPUuKBMOCOh))6Z$n
zy|!}hJ<WN~R?fTSVxhKjve`;chnG|4t#nt=TxjJp)9B@VuayhAT&LJ+&3d<TiJ#We
zuvJUrw3hwT$XTN~lWo;vzN{r>E{pjZ=HziL7h+jp<T|U4WvOV^l4)AYj;&gAPHXM8
zRcotUX5_u{(9v35w`zscs)<f7`!qBIH)yWkm9<(<Yvs1Ae{Ke^*V<`saa+B`FMHmX
zmunAcZB1LfEl+!U+3GcNQzBbd?@&6j!;gRGywy9GW$#?4?X*C9SKI2{hqQOE%HA_A
zd+)y2dzWeNJEy(>UH1M<+6VrvKJZKXAY0BszBLEcbPnmgIcT=#kd@A1yERALbdEZ$
zIqLW3Xqe8iyqx`uLUy0ZcAnw7yKl{jX*nn6>6~1&=H$9Hr<UoQn3Z#CSI+58IcF}d
zIXh41%(I-+*WR3arE~t@n)7VA=lOIm2(7&!rh7?l?IkJQ%WAoo_10c?)4k&N_Hx+T
zD^a>v<KAAKwx(oH!}U7d8*OWE^y%K5w)W;c-CN7n-dd-7d)wOE`*iOdTYKl6?%iub
aYwzCEz4vVGy?46zzvbRca&TZ^um%93QTc2D

diff --git a/docs/images/scfg_xfer_options.gif b/docs/images/scfg_xfer_options.gif
deleted file mode 100644
index 6feaede395e2918ad4e546e521c41a5bbff4e0aa..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 16516
zcmZ?wbhEHbv|;jQ{LTOYEes6*8CqI66tg)rvjsq?SirDY0)(n1EUOhks72AKMboK8
z)2l_(tH;o*$1teJFldTp&=kw4DV9-loSdATqUJay&+!7GrC!-fgR++f6)z1cUK>@s
zHmZ7URQ1;6>aEEwTa#P%X7}vP?m3n{<yi5QW5sih70)?WJ?C8Y(sL~>EiFsWwJg2X
zvi4dJ2;J-1dT$B{J)g4o`JBDa=Nx;#^w|5Q=iV<p_x;$hW7n>o`~RQe|0oy@0dhk?
z2b2RqdBK6>A4C104~i2W9BAU;*D^U_ka)P2PuXeCj}41lx<&M}&YTcje7slQx=BWJ
zQ_6|SDuJ_nP8Kcoo@x+%tVVOQ+S%F0#s3a`Q08!CVyR(}@Y<4bQQU!BKqH~S;qr1;
zJ_!SXs|_K{9BYznCnRJut>f6I<{?m)!^Fxd))TrQOqY2ZkB~ux!F0#FyZGKbyL$Qo
zBQtxQJcFFhkH$of27dd74HX+%jti)`%+pD1YB@dCIC|cJolZ}=gdM^eauZ8lTw0+W
z;gG9%_|?^Qrd#H%RdjxPdxvSxg|!R6zq>D6Qhvi=PeuD<X`7OOeS3bkKRsn%!C)9`
z)xm##bNhjPwk#Zi_nrSWh$}k%>G<^AvqNHGolED}_nv$774O$}{{HU!K!4$Xmiqr{
zKhz&^vWR6UG-?Q}Xlhc|dGVlG%S9uxMcXH0A(w7K$3rg3Z3h(Fbz3x&It;c1JnGav
z!qCiZFlB`jkJhmTi+Bvq2{8AXJ<~YMV|mWuFptrnh~|D{9?xc8cd^bTyrwq}ESYR}
zCxMyIFUWE!ucgmSRldk)2bNB^Y|&gc!|F*u+Dz*w6Q1!|ZP<BucJ98PYW&4)hL^Y{
zZfH&kbm44y&S!H&^U{3lA15dK+cRucpI@Wo>L4(|>C~0Q6WJ0OmPC1mYA#_{m@qXW
zb*k&N$mEq%!=ef=wra(e+`alL?%#%QU$4iv3Wm){>@pQQm^9H*?dJN4iD@&_rbe<w
zWz1F7zQwY1<+C?gtM)#dmAxfW;r7;Tsk3kA@BO$fy5NZ5^2Wj=isdrJr(Bn>E4j9{
zTee)j;`&^UkA3QLRZr$_pU3fP@AG*apHH%HsQE6qM!xQsY>iWcs*X)U1H0QDg=Ri8
zj)yH0@ezsbGI<t{j;plwJnB^6^&zRp;F88;9?jzml>7BQdmQd_66#zs$xH6%lXIa?
zm8w%?na)0)9^WUKHZx6b?XydHX1eNg8}@0wSX3+3vV2|-U+Ri0ERrn&*X;$Y1m@Wa
zwy3jZEMNQWR?haf-)<Ki*ZqE{<a+M+yA{vZe*br`=KI_4_Z!&temrOq&)f0Pj>F4r
zQ3c<FACD)v%Q-MG`~3UyWQuj(&Zkp@&;5Khv$$^O^M#YwRlZp4zRv2!^74DTUMyN}
z_v`tx-F%j>*Lu&}`FhLkbye@yPye_3-L}Vlzdy`4U1$AftGxZ6&llYF|9-g=zQ5+x
zvFrb;-yc_(xBa|t{l4lCPd?k(eSDz5zxvyy&HE~UTu`_BwlFQZ;pg8U&)5I|_vicj
z|Nj|y7BH}T9AJ|A(7@rdfJyws0XC}-jRHLjSkyfZo}8+i^W|^?tNDq8d{rNs6?hhM
zxO*HDnkCR;JM%v4M-fK_mIJLbn3;I~svrJ+^+Vl+Q}=oOPaKx}^`ZTr1J5D>-xr4@
ztqcmkMlbxU5OGA&YGQ}moH;y;cN`WEE3CI(lPI=5;;81K3*E+Zl6bl$T&1T4_5`^s
z7QMRSm}%X_p3E(eBo5y=W>vJY$Nx++cf7^UH6Jw_G><G0`rhGgEA?qYhtCovamgcU
zYzO+?7?;cw3%7SN`ZQ_AnI&rGCq1P;eVjN!#fxF0hQ~48kBxnA;sp%ES2Aq5G}UrW
z%+ipZry`zRn6`dOs!r+7(|^7SO*`;Jm9M^YfAqSb8Ea~m8vdN_9r10`%nK@M0@FEt
zV%R=Uzw%~@ndr+C0bN23jZ2oW&HUjRn)i9m3!mjy*DVj^RS7dp3R$SB`*MGB(mD1Y
z|K`l$|FZIYE!%<lKX_I+{MHO;;QKQFr;COYv)6?tqmqSxVpcdS&kAUc5?Szf$qHxf
zS%IB-B8$2Hrn`SWd2zy|FN-yNS9)>Z3Yf6&%Tj~hl|JcSmuKDjvdrSFrr**ZC(92B
zH!KlR=RO(fA)~f=+Kw&hX0@5;7mICPd2!0J;L4jJ%h)c@bZ>p7mwwV`$*WKGSI(sA
z9n}gIh?+b%<Lwgby^`mH!X~Xq@Le7A-0S)-tHQMldzSOJRC%#4n>6zzPfo<%UHg~D
zeV);=HY*`hGvcV(x0UgwsVN6nU0KEVZPnyjwIp@!n}Sl;)-AZI9H(gM70f5J?yJnR
z(Br2<*VKh>j!gZxCTshu$Xj9C)|@C=mMp*e_PJ-*wubCg$>rZ2b*Amx4r!US^0!Zg
zSIrXMd7*b*$@1IwPt$zYpLKm(96viEQg7Ps2Y=TUuC2Ouv`l>4qpSB*Pw%>SL~HVf
znW{O}jU3V0*Cy@yF?B(yWaurGbHTeCeDw?1&qUohXTE){YC&%8>bM_b5vv9I-i8R?
z@o||XdT9I94Hb)b-Trf~bbmd|@<&D%AtBR@56Jm#><V9VZQefN-74?0ng2)KSRS=)
z)4i*2E6dm1I#Cue>&B6dDb;HpaBTi@!b4B7Lzy$=^1tgxTvL~Zs^7V-6>M?h@S6`6
z+Itds)qkE&5PLMK`_LT;Yw@Frew+Wzx^8pOu>Nzs=AG3u8Do;~@qODnLv~$lWlY4;
zO=ibaat)>~KK0B=dRBd&oLBu_D?g3nrhCheZOq;L<|(`Jjzc{Ea_42Qe(GGk>q6&0
z%{lHhQSQsXU0&g5y2_dNanSFtM@sqL8|6p({=8>#e8RKOLG9Klj{ZM)Z~LOVaOIj;
zNvEe?_5Jof+IMekg7uAU63epM4r{-#^|v^9_?pS`-m|%4%GFoeioW(FuDzEx`}ZBW
zf7|{)niHG0xbk|`+rskn)6ab$|GMtd_kORjY{osS+b3qZZ9mYy;@v;i(sS?Rb{rCy
zyW8|xe-20bjw9-MIrF#uIw}8U<uUVfAN#8RJXYY}dE%eD-=|5l|2)y~-+3zh+^1>!
zyY7ng?>v*<XW7v``<cag%Uw5R3+Mj+^L(Y<kF$+_Ulz6Bd?sPO>(canN%OQXRz13X
z@28Ua6vmLduNVqquF02|uBqNzwb3~KXWjMEwds4`WZbv9a{b)5ZM*-zE$H8U=egha
zUAO<ft2n>=?$ip$#vgaptY&(6{(JZRKy|K~-a*a>;_H7Llb-jnzue}Dy8h2o?*Beb
zIlkxV`zekKOpa>K<F|d`{{QFl8FgAK{P(`voz$>y$G)#?&AZ>E=TF;l;_0`-joq<N
z7X7~W`=0(LE}svDu76?-pZ(}v$ivcf^v@ZAY~!O|*EYE%H(s`R9l3tuwVarLn;Wl{
z)HB~?vfo~}x$)EN|9_r-cldSvJ>%Ey_Lgt^_p>iC{{M4xckJ!X>Hl^IujilgJnp-b
z9McN9KS2$Dgyg?WY+wmC_<gbA-$erf3k4zLMiFB}@n%CYCq=CbhO)v+3QS6h$x2Gj
zM!G>wY86d7%*;BQo3wT`*?ej;IH7E&&}{NT#W<naZgR6#hpJ77YV4<GH{q7dLneuz
z)Ur0I6-{a>-qaF!xh3Fpiw{SupG0fOi<VDcgdG_f91TRGceF-Th&XK2^lH?cT%<WQ
zsV(TE=G;S~35sHilf*I-#c~zJ3pQ%4D-z#4slD={c!Q&M%S4IJixMZVOH6vGJ>{eJ
zzjN%hvjwH*E7qR6q;qw;)P+g48v;8oD@osKlHT@Eci%!rnFqQD17#j2=^bs<J9m-s
zQe)TUja~1ZWbYQruIG?@Bq;YJQI2Vc{@aUkpAX7?4rF?_vEk1|c@E)5-opkgOok#6
z3fxJJViJmC&5cqk6r~><$~<nAf6S!R(W^XJNsmeSUWbv9g0g9mvfg7O>r2Y^LMkps
zDyAQljc=&9GxhsjQn5=`4d0|{!=V=8Wa7BOBx90E_9ZoU33aa>Ey2MRe1)dWj0}PY
zCrGH6a(-lvY8FURP8S!c@|rl&d*ehYP7%44BK{9W!VZcA1&U^7h{kLbO}to@cu+Kd
zhuBh~f0K(>Xq8^nTDz#adSUzKL+x9WBpN#;b~M%O-c-Y{AlYsqdALZjD?(>pqt2-!
zsfC78lO%Lk80u~g)ZLn>duvnY_Jg{6K6V~3)LR^(_jHj=>P?x?&t<-r%YL3N`+<pR
zqlEqz3%S>V4KF9^|79}RFJZtd(Np(RzTu|<%OwNh845gydiX!}NK`0FYxGJ-^hz)p
z-Ox}{Rcg|9GP?7l_r8U)HZ$|X8OnymeJ^+PxdzShxTIpP(Ql)y`mLh>yM{@E(Cohv
zEnbh+vV_!GPPXidoUrHS?7f_(`ywZl2<0tfDcd;N_V`Jg2aD%yHnzKW*)q}HX4huB
z^PTpa7uy{=Y<uP3&bjAi&bh;Bd#%#y3a9<`#d9D1w7tb_b3S=q)%AH5({1hr&poeM
zdUo@iVD-7zo98_}Y<IEK_U=l%Q_b@qIa|M!w5<uB^KRw>u3ZawZY|*ZwLm~>p^()=
z5v%e~hci@<l}PPcc<E`0=k>I}DG9MH?t4pIWvUiw{3=-TZ6UWyvgWTv23;9XwmHb{
z%2_X#>X5#uD8()LNbprx_aBR0^S3Ovm2!8rT4KWDUR2`j6t%?0%H8?Yl8_}!TwX2l
z-L=F*tC(-Qz0>hUTu&AmN-ay=we(kWiJ4Viq}H;mQza?0>`iZFnE%RHt(vm+T4=FU
z{<Eo>Kht6kmid--#eHInf3h_D-!`|Hz0=&U9gAe&w#@5UQqI&I39V!vmSsn$*#8p=
z5>O42D-9678pK=b&wn*Y$2H*l<RGcil?$~37gVjBeQKrh(jckQRjajDFIp9B@^#g=
zS*v&LTD|Ai>V3afFTS<xNAj|Qu4P4BYfj8sb86R`Gq={9`?cnR)Y?m2!8WYUV(LlZ
z5o;z}EuOk6zq>1c=d|V3zq042rk{7qzhbsx&eilIrC}|*^5t7ncN|^eud-(8tCaLz
zYa?eRzE{n(|CTe^Etm6H$o8eF;%2#}TG5=`F*mNQXWYGkS$h3kxAomA>rJ;W`gv>7
zovaX%+Z#>NH;S2f+Ad#TG;2d`R(|KI6?4lXKTZ3$uHn==&DHC;t(U)z%I{i|{=O<+
zuG&fAxBrh-Yo&Ite^Hgn&z&E~woZInDu?t&v$8D{L^oJ;r#5fPwcE0yY1d}^E1QqZ
zT6nA~E8_Q7uH{>mtV`l|Z444y=X`DX{Zskdk7aKPTcNMLS-m^%tDBF->~-xaTjqXU
zyC-dP0=I+h?WK~@+niqKAHKHzLRlu;v-F_f(LTSoPv~|?@}AQ?+hNM7jT2|@TxGUX
z?B&vF+1ozc+I~nZ-%xwko31TRW!ZhVQ)kWI+4y^NjQ6HE?u}1VeR`u)yt0=&pWZO-
z*_O4xcRRjXQQ5k7VpZBkwmm0ir_JFmj=i1p$!mEH*Y*pix365iJLjMFy8mvON2cv@
z`@ZWG+m@E-O=Yt~+Do^up1s3m^$xbvJ62Wi6F$9H+G^)f@ARi^`@dDEoVMQN7`^G2
z*_O7a+v=?1R{Y*_S$nVE=^eq`1>b*fJmeiU;nbc@ulF={?Gp*x$8deaYwr!OPDi-j
z-hFWE0T=cC0(<sv=02o$r+{})%#B++r&b@*vnjm(%f5+wpXik$vzo&ea}HbWIc#(1
zu-%`-4s(i9-L{#^9C52T;xXrl*PbIjcaHef6zcvt6f|d%vCQt^nxmS#wod9g8nb6%
ze%8@gnPYC@M<qU#{k=Iqro1f6T_j}tv78*+MDzI>JeH}?OJlzuiwHk1y6bq&o#S<X
zj{j?rIWe(#VU6mEwwe<ib53;aIni_HM6SBM&Ya3gdn%`_shnnWa(c|k8GBC7x^r^o
zpObTVPR)}!#j5Dn^(eS+k;sDZHXldPph5<<PEn1Unh}gzdM_s}Y7$#^Ni3(a+9Y#w
zS>a?$OYO>y?ahhW4JRa;I%-@vb<W919u_(~>tKh!W$o4HI@irRuPmzF=qMe1Q~Kfc
z&OINeJ~Ep2#7O4lC7G<9da@H_uP&_Lu%o`<Wqq+^gW>}H3QmJxJq^{IJ-;U!9O6)5
z5^6kIp>R6F@Z5|G7giVwPEwTpap9VU($vhEB6pPx6O6?6&eT0@G(WS?*2&oAlk!qa
zmF1Sr{zCnB&j0$?+%$GrtomERBq_+m&A27!kO|XGlbw>Ljhi%WWHl=<UAFCIY+$<L
z$g6R``c&MF)_9J#DVrwxI=1;YYDOK@jA~?<`$<&yXWJqtttCxjJHy*c7c!Lp(6Trw
zUK^oZTd3W*;|#yS6xW?Kr`kIXDxK}tU_5SA8|Ybk?YLCP%G%q{&u-t?8M9OR@fqF2
ziZYLi&K)}_vwX(1YZs?|bC<ovsK054Yzb$>??w8rF3Nq_c>e3dZXS!Cx|IfvoQ5YN
zF0kM2>Ei4a3R1j$qw$KwMfu>Fw>gy6HYsULzHK7Z_w<L6;bS8u*-Oi2s(e~8>kEgf
z_S;#ywkGx(my<vBdw%ZE``0wvlVeUv(FBf_0$iFCd3TyNHVH&+R<8@6xNJ^q-4>0N
zb3`UMX@(ezvNmY0@6n7rs2O>;P2W?jaK-5z>etFN#1F(=tJyf&`e(b{Ozq|q60H`J
z`MTFVcTSm;c>QG1+3R!8UUZteDsk$yOHwx$O`WB2uEn-4Npsqw44Kn~(=Il4olcZp
z<srNFM%V3+vY&0bp9XgS40^m{#rglAZd%=IU>EM;x46KkJVPjXhH&!?vCX$6S2Xhd
zogpWDTT#MD$LXT@TBSQPZW}C8GHX)aTia*ItfG{wV&`<pDe2OeiaUWt&+HF3ha6JX
zf7^WSZGXW$wOpsW`zr6wQP<$RDZuBc@vmyr1U}1&MQj>VW^2erzG$m^AtgEK?OPGm
zm7<|@+cYz;uA6=}dE#lK&g$ht*OGZ3Yz#WHspwjRN6o1-XZj9mpRbX;ux846_p{}?
z50^|lJNd`;D@D3e=N`_CxH0#K?tz7`yK43J^-Wv#L#F>P<BdSsKhI^qC_Vl<NB_H1
zLpkTIs*}?f>h{!eDhOuuG)G=&@4VoC?$+A77o>uE<&54bTxPnJ@lI6ssaWsDuzNF~
zaLlsVq<lcvc&R7zn-|I{`&3frH3v<4ru$Y^Uw8JoUK8gEwe6L&3zX)t{bb^~|AFuQ
zhssYMgzkTE+RN-{@KHGa<IP!j`4<ZGKK~f^`J=*qLFM>=p9Cu_gg%yQ=vPQMR>+<g
zl=H8+Iro#6;OCC(AGPOymhl&|kry(o7gmy=X#D<@@&8YX^DDIDKUu_ov0nehhySzZ
zexXG?r&@h%&mAr+)+vwFFDs~-U$y;f+MBNd$LHVF{1)Us@1JE^-=BGpUzY6^{`T1N
zc*_3ytWooxD}OJK|6b01GBkfqs{i*F$~I;G-#@LK-+cb-lg#-I_H%RR&yT79%5=)^
z*U5R$J8fQaemlDOd$xV~`^R?m`9ClG{4q;@!K=z|4gNm^r_Z^(_}A-9tGW5#CODrk
zWGkPs|7TjvuWj>x@7n)+kNv`}`3pAeKAL3n$Nu>DU*3OC^cP3X`E%xd@uq+NM^;Q(
zro3x+=&e83`aRgCj<S`wDc<tAY`@N`>hGiV8wFDST&Q=b7yaj$<?`zPlE?r5J&gV*
z;eB`#_b&VE|K8pA%iQ(%_xvSS`2`qR_*66mI3_f4it43Ad`NKa5LESB5^?d7YmcP3
zl8Xex0rv@t&VGLcj~wq8m++eBvvQ)M`*g$9b4wyOKRn!G!T!qThOpB4K9=gTnvUWX
z7ZxzK3Hk2Ym>IattNGO(%c;pBi+z_eoy`ngb#S%W(LU8^v1RTPGwuDp2tH}=pQ0U@
zBvHNXP3)e^ukW7T4%dj--^j|puR3gP)V93mr*bu~=_Q_+sOrBg=H{o=GnP}iZ01Z`
za`NcE1=6>#%)0p{^UBK5^=Y}&il0vuy1lPgd)B(gXV;d#e|Gow_xycriOoKLlub_G
zUQ%q%V`Sh_+;~3LYx=njRcBr&uXLV2qxNCh1M$tx{0{qUzJGprb^ZOB)fR=FJ)yVO
z?Y^_?^Ru5j<IU$!*z@z_yw!dVU;b!cux485eZlH4$0L7-KU{zE4zMk5Hn3&q^m)6V
zOZN!>VeXs48_gfy)8<?EbHeKNTbfjkoZc;Xw8_v-Dtn9JBB6HecRO~5^{jA^ZxYe)
zQ0g}M<e|vyAaqi3ddVkGjeeO;CskLj3G&ofe&o_A?b-)MUIvFngne`;%Y61Rxg1jL
zYj(Tjv#&+B$%(z+8UFp?vHV%n!r`GhTczVf<GeqYymc6Lw=7U$H=T6KXm^T9fH80E
zmh(<amzV@O>Z_InJ1ORhT(r3OC+K2;x9QiAkl@g%C(l}~y6kuJj+3GPorn^FOQFSA
zOT*PYpMDKbXcjGtNIE>{@>Q$yHNHoq>i=AD?oA8vxV86}ae=>h^qL8`_;=>^9+p1b
zYv_LC-IKyCv*doSixzO^DU1>qyyJiP^PZyywpolN;<lCV_f9(`zg_f)6W@JN9=GbF
zp%SJ=*4BkL<!0Y4ekdWl>_<|MdiD>4)Zm^7%jmh)*Wy1~nVh{fOGodf`BdYwpPPCG
zyU&|NIhI{J-1z*gSUT%>)gKPc{~o?Ad)`#a7O{w(mu1Ew2ID`Gx2K)%`jxthz5C|o
zh|JFtv9qqs-IlfCuvqn*`7cZiUl&jIzP_)tJuNRi$GE3DYtq)Kw^9}wE{fh%dz*FR
zo?R!!{w!MUY9yYtF8$Lj`<*lWZoQoMH}_ZWZpHqZq72C|*71$1^S{Sc1*Yk~Tx#E5
zU2x^J+qX9zX|t!=b<XsTUB5Sd``@xouKu;9M+L%nXK&kI7G1per)}()22FMD%I<IL
zVt1coXZcfkhyA+jzK$oWE8k97oW1AyKE>ye?<T6Ru{m_<<oP>)zTDiu$MJ`++T9l)
z^=Hq&`|9)gyE(F(>*hwz_VuY}R!LxFE#A9z!P)YERg+?WE-SXGar{tY^ib?G({!7j
zNP*0clN7%4oG|z|H9M`MDV9Nc$G$2{y`uZd^O(OLb(-{bd6VUDnO|Wm_DyU&-P|})
z@$ZH3{bzJFn&h_#G9@0hUYpBbahF*}aPAKm4I#Z2zTgMf>Xz?#V3=27HZ$;w&bGrE
zZGk<)hL0YuIdR~3j$nz@BEQ|Y#9gYM<~C*jk(4-Iah!kJ#d_|ZSgDUc+#R0z_j~wA
zOWkfe{7$C7`RwEetjs?>JhW0K2waTg+*xk?mD8}#utw@xi-x<4-HN{6o)k@Xi<50T
z`uf$rEY^(u=~cLJlHz8~6nTD27p_S~eH}FlI<=lIk$OueG5p)JgyA*&JTs-s712Dh
z_nbVP71&Pn?O*b&qiLl;=)8;54y{fz-+Oabwpz=y)jH2OWlx^&saV~;%SPR5|4+ZJ
z*3Als|3p|ucN(0zx_0JuA$h%r5+>}60;cper#rf;oVP#OHOKqN5=Yrz0s9q90`^{3
z)6QS%xKDSJQhbWKi|s7QPOg@Dos&;Kiu!U!@!0wNX`3%N{J!Zdy-i@LuIdZ-T&~TU
zMLGSVTc7JLzIt&s+tn$Gp+c@xJ6zSgGG@I?NwNNEIe95p=qf|SS03vlF6qqsQu8C{
zzS`1Clczg3IQued3%umGvU1r~RhP5R0yoYI*?KH=U43Nie~z62OU$;!3HSWVaxnaH
z-DRHf{9@HNQN>!D-&{O1iN`dJYkH)eFVovK6Yf6Ivy=?}?6|h=I7>#N?dqAkx&%7^
zuU1b!`!n*2)s(evu{m+UzoWK>g>F2;BA1gZef#<bKBe5;x4E^yZ@2APm7I6>^y;4K
zm?vuCJ5Q(P70>-0^TI8B*X5;orE9BW-=tmdIdasyZ13;b4{hOl9;@b8o~@4i681gO
z=Banp-QRIPj)m|0yfnY|we_8QOyT=~Z|w~I`8%HBa?AEDyakQCHR0dnA`WuPb<|7#
zNnqpOu|;6nhx+3)A8@7r*v@yYpuJu@aZ**pk$HPJ)UXvKi7byesx8;x5N0DFw)lrK
z^NhlOJ^nGt($6K1>iKQ#u6*;D;fBO<tGJI7I%`r?)FV%Nrxi_}`zJ-iJ@QoWvZASL
zYf^QrZ>|b>wy|sXnMab>BUChx70zH>@I?RpkK>NlHcrgUd7`-6@^taC;<;~Y(runc
zp09rPd9q_qqn&f)xkj~;g}k*HF6vPiyVFc2dh^U;agDk(d0EL)-P%l_^r*|TpOq}P
z{hJxk9(850TIovP+N_Y}QCC-|nJ$~y%ouSz>e}XIrE7C*vtyn|UElqzbbamL>;(4c
z8;8}(Hul!$q^L*VJe^jydG6mgG1He^y}Yb!>)P7fob>41x1W`5-~0Ei!j)&b$1G3o
zI2)T+GCBJ0^SJU||8D-xD?h&b?&mi1y-#EFYwkzi|MskW-|xNo_3SbanE#g_WX&sR
zl8<@FnQn1NcHf6~bD2lN(<_cD*L}Po(ayjkaru~e9s^TD%o9caos2$tpO_ciVc;-u
zVB#rYn6A$7jMIaGDI@Ol?B_L%oCyqPtM@g`GiG?<q;AFBQ&+Osx`ENF{=g;43nlC(
ze;I@Oe_dJokAcI-_I3311I#K6jqBTEnUd9av#1$-+q^vXt>_Gf+jsAM+ZKL+NpwQ>
zU0s9kyYJgFi{1Er?`Iw(FM}O(<Mjg%*w-^2QIBJmcCdLYyZ;AYj>4zO%WK$m>MQw6
z9x%(E`18#ELF4&$xi9h@2iYC|IaFPqZpWf1!1y}+ewE+>yKkG-8#%J_tM5#2U{Mul
zd{-II^x(JMkHh*0IlJm>9?y69c{;uB^VIcC!VdAQm-_3zEU&M9lU~nyIlqx>*Z<o0
z+Y?xI73zPU^{<oIqVV^1`2Szm<(VZ8F#P+x{69~U0Q2wX^=!ZH*Z<EnX#W3uztjvy
zX$1$V4UEzj4lG+5r6L^Iw=l|VXq1`Yz;&jPbBhDd83*1ojj{(0@I7(hdvicm!cj=)
zpzMQ2VHrmeA4jnmNAVCxiJXHHHI9;N93Kmq%QIN+s9<D#;V3WAAphr}Tur0+2a5^H
z4NL+%RdjYTd00;M-pQO`Ic>7#>}<=~oBvtP+HA>s!jkod<-Ffc3m#i8kUqS~dDoI+
zt7Xwv%aV7ouh_NfvelaI!|S>kHhi|)u-kbPv-RfYhAqa{o1=GgHdt>jw&tF}uxIn`
z-IJ~N{@%S$c+UZ88+RL<quG0oHt+G8V{`KKkyE>E&b>Zzj@kAsvn{`c?FH+-m$@5*
zSr`R>FbFa*UJG`;HhJ$&X~sL<dv7T>3a;2IB+(cvVi$L3??dCp2f}VowC#ig_9fdi
zrj*z{b#8pM+U{ky+w0SIZ*K2<Cv7i!!0n^8{bz6cui1>^3i}I6?7wz1ichdFnPdO6
zn^7|2_@Be}e<m|B%weqjv;VKK1B1>1#x;%1HV4>J9N7Q;InL4Iz}0g=#=t|y!h_rA
z1n(9H*$)R~Do*fSVH8|)LUzLm2_MJEm)oZ>^wxNH3f}RkVfK{sP&#_ULjFg`bB<00
zflj46J6Jpqu^2YYv}y2Y-l@4|=gh-StOuO*?^rJIX_za#%Rpt<LgT~6Ay!L64ll3X
zwW8R0_32#}PpsCgKD^<w^Tyc>8(uqa{q4L>*u`;<^=@aEJ<%@vZ(AR7KJDRS<GI9z
z_d$c#6q^&5U3{M$IkWq;AJ5(Z9$Nto*DKzxmx5ixYg})3AH6Be80F#<yTvx{&E9wx
zy95=xBpt>?lYPl1$DW+_Nvp9tw`5<&AD^r<ZtsN8zQ24d_sOwBk>mgJWA+#4FqYPw
zEsb%nn8H}G<oMsojMa0FSIRg@-Ee1S@nHSq-Vk#@TEU}f&w-XH4s9tXcxya5=A7te
zIViZrqo>DlqD^PT>l2e-@T}!LS@fHunAu;%(ov|2Tb89^noswaKONI+_$Ez0si3iw
zS)<{3#m?!g{aHE=O^e<+<M5%mJ`K7{b}ryKHJ{tc$i~Y!#L6V*!iwTkW?QV-C!AV2
z=M=|=!|Qf?ZMy8W<@4cnJV&?;c5hGKy)%2avyQiG$`Mx<n}fj@x9Hd$$v(ZK=QQ62
z7oROQCttgqK74xjAD8pmuKP`n9tg2L*kT(oXK#ehnIlj3M(3P~>+yLw`OM?hK2I+H
zJCmAYm)>HRapuy?*=|{P_PyNf_Wty-OE$iFUykL+oW0h<DBfUS;^Y3Sneq4HvldtP
zOKdn^b;thRowLky8rf71)Qg;x(m2Q3<KU$0@g&BBC*|C;Dd#%YcnI$C5O#4C`Qq_r
zj``a^j0_dqePqweE(q~q?JSf&Kk3X4c?Zv_G5!-G&QDiqm|5aKIs4GBE$5$mSTY{;
z)Sj|aXUWcaA^{7ZTxB#3SZrg(5_(~2h}X(w=M_C(7Ha}HPV8EL*xB}om))HUd|v}L
z@LY6~Iqh<0_kLq<QCDw|l0XSxn`66Oj!!-<wKZ_}nLvLQ*NeXyF8{uGW%l(j6`w;>
zjviTK8x`Xd^Y72z<1IdqnC+58j-B4)^Hh7^*&I8auRgCI2kBkir_Xyim&ZQO#@^U>
ze_@HeY3^n7R{L9f_LuWSGVHlrdE_{Y%mEe_KNgk{c9|28Ogx^3__@rz+4jfb#T37;
zC4Lem2VXDQ?tS-4>Ftn7Uruc2;4Ef7DQn>Q`N@v($g4~omfzQ$SDAA@V(C?dhC`8W
z{bP<g&D*n6_s-7sZ$lReA5L)fN{YQ;=5v@m_O{uSQ)|1Ot@Z?DoOQN;62RxXdp*y^
z9jC7eg}S(Y*)8(cx*+$W_}n8BcNum}@!qv$kMz+%*{6HX3LmX7-Fv?H=zft)Rk=qG
znFK|zIVyO<_1Kr|>ZL)Ayl($a>l|w--Pd~c()pSjSu(yKW=DLIwl{LMznWri+S~Z8
z`K<Zh2+Os;l}GHQ6mCv>8vHodq2A}FeXK*H%K;}>znN1VT60c3XL0OG3Gq04Px8x&
zEe3pR8F?4*o`3g*@#v2$AI@CaDdD(OH?&XL>3ePbkJwO^Iq|A%;??)W|Gsj5?cMk}
z+!x|lFT}ld+N2t7<Z^1U_O+$WyOLvXub3RL{phZB*<m|HcdxhJ&9&^B{g+eOQ+Mwb
z4Ro=&xX0StO=nL*>BU2#dy0HxykqW2Pu+7SIs8O#Vjv6S+1W9{dlIj#zOEGN8rieA
z#?|M}<)blgj;irSoYJ{_+1IXRZBW{tOXphtxn1Z<(pUApc*X7VlGxk2_W3?%e-!)n
zm0m8*Iesg}eWL8WYMbPHE;sMpx%`kN#8LIcqd5*vwjnP=uehdOdEFYqcjczX+mPbb
z+r4AW%bah0S{w3S)_lp{gFhpp`m<Bq^PVi1-KiRLD7^I0pRN9yEjy=mJH;H``S0s3
z1~xC|(1rxtQ;EK(mX$OtFS(G?dU*TUT|2f0*er=&w<lU)>otL|5BA*+%i~Slm+c~6
z>LNVv$noMmlBtQuj@tNNu{k&U;odi=FLV1`-W(I+;;M8vM*iHhqj$p9-iAL^zI(|w
zNj1#vtk2!_lpDHx?XK6xYE6s%eE3n`l}A@g&KB9Y-)m*O^>51l`)Bt*nCo77<t)P)
zce~W&C$W*wWJ8|Y`f)5tp0zi*bIUz}JC9$!Nfs&DCiunlYprZ=_7i25o&Cm6zf^br
zN<HKqw{v>3<=<AzIbWX4`W&y%b9;gE(?vD`i>*_)q@FS>3E0+qn6va++SF98dtN;2
z!uHC#?7Mnx)0@<-XBrNQJ}WHsKGwbGsPpw*YxaoO#q1Ta4eCh?J`!{3@||i^9|g8Y
z(Qo!%DD`>p_^3MXu>!g0DJ~Jkak1xn9+iH(bmQwj?Rl}?dt(b?e2aVR&7Q{o*lb_M
z68G0Qx!Na(@sE9NNL+K>o0h)h*02*+epg&;GX$q(bY8nR*Vj?%PtN&yj{h$5<zC=>
zD;#o5wkQ5-T<*2J-0O9@H~MmK&da^EF8B7n+&kxT@7~M3_b&JTzuX6Wc@O3C9!<+_
zjY<)5+-#D)>FGOTiR4Ys?KVDJw)th-yH{>TO)oa;cfV74oG149-J85EPOmq;R@-Dc
zdDC0H{11KaKI9p`|F-G59*6Yg{Fi$9TB}vozRWXA-mJbkU+?jI3Fb|zpWkaK7d&J8
z@Q-iPXS?@e!Fk`!-v13NU=e?B+r066SRUv9_fOa5G1h-z?f<~e|AFUvp6TQFCa*tO
zRhzgTD=_8$$XEYSaCyE&`A0$ik3Zc$NUFc*yk01^yzu?A!XJ4b`Ok0s@~x1s|D)9Y
z0!8+J1z(>PGB5w29n8Vc{!#h-JDK?(6!Z%@;y?X*_fdI!p+Wsd`Qt@;(?2OcUi;_R
zJH7dz^wJCT_&;mM7YnHuseCUIzW>pBd$DEyXPfgyX8(%?)eFt{7ux23FcAM@cfZJ?
z{S#Msftma#hx!sN_0MA8Kfh1=WYzw~dwU@hdy$j)2dV3ZfBf?P9{Xr>{bMkD;Sax3
z-RpT?<@rA8Uv1k<gY^qT%fCi!{~8uwVi^C`Yx(Cd=SpR}OGC;_W7A8XzbpR6_f;p}
zSjK)+0()8d{^F4Ouix4}XROaxU0!ObULZQZ`@dV6^X;-i{qkb_@)G~@FLhs4oQp*m
zODoP7a8EC&{MY|obA5Tu{_<M(O*PNI*Dn8F-~P2>etF~f@@DoQ&H5EB@fEH46;1UO
z)&3P7@5|ff|7h(0(RI9{{dz_B^oqX!6<zm#OnCpJN4|2x{))-|l~d$@1p0SQ{a!J(
z{pWQ3pEJdO&Qh<OJ-u@7@}G0hSI+xiIiJ63j{L95?<*JeS1z#sHCzAJlJu&D<yA|~
zt0pGty0%rVcK@~f_^%cDRcrVETKc|f!~d#{(|>JH|Gn|~ug&LwZMk2y)x3JUd$oLV
z`SkkV+uEyludm*dUcL8w)vo)$H|?+9A78zX{m;SkzYp>M*=JufA;0@m&G-H0e~!D?
z9O|z*y1eGJ_@C4Mf6mOWIrF~e-`Vdq=l<7p9?vfj|9io{_5}OiE9QT%y4Rk}uf0)U
zdvkrw)%kzV_W!NO|9SgBjprxM<qNtNXRKVcpi5Bu-?fNpQUAQN^_*(Ix>hwP9x$kT
z8P0pg{d32`KTA9Q$ye3Ab6>J1g6ji+{YUxwPx|$r?d!kz*ME(#|CV3>y}tfOfBnz-
z^}p8F|K4B!YkSdw>$Ugtr><e>U|?cp)09X_U{G)n&~kY(;o+ecF7==_86TC7^+=f)
zy?OCb`NRYz_enaLpHxmw(F)&`!)dhe0HY!MDV~7K&(6#-uV?xB@i8mgJo_4ktDeT{
z=azWp>-A`CczC!yV7`@V#f67gRzz(tdi(0D_P-k&l8#T(&HkoyYfIMkO}VeX>Bg)v
z=+|0Xd08)Zrc)=|+n>VBaf_R#pIYlx`1)aE=VHCS*FOxOoS38@ye{Xb(X(~F?Cfeb
zGnV)7ukNnWySwxAvoov0SFhy|OuD*W?6F_YT+^J~qZ^g)r@j4Me)9?g!ybvaI~GOf
zjB9_eT1gpPx_oh>-CXWJR%L5;Z~ZoHZ*6Y*Cf>u!|K820`S#@%H@8jQ9E(p6FHJR)
zf3?Sw?P=+9ZQs5B_Gk5aE}5IhTx2>mdp$2lXntg`cwke{(QgW&Y*7&jtvqI|3mZ7z
zJzLl)!epV8a_C_Bqt2r*mxl{1yqhjx^7~|kc&Wimccs4k((-@O9rqF=7PN`!J$uk%
zo^~R!L;By3#T~w4norvOEGrZHLYGaQRegBril;T!55M2(s_cxMJ27mQWXu$~RWC#P
zHz=-DoOsJKa+yn8;|;Y?n{$#&=9InLsXn1(p5=;=;-lZ=rX|{`Ux|<Hi<Fw#;$@||
zH2G<m=Cap`lJ}>5`uKclckMw5wUuURRa&c7uG;k~RV}SjgCX&ndX#^SWmMLZHLrGQ
zuiyLY)P<P!Wn2f=GF~|@zIcgf^qV$4%ilU%E_zw(ZoL{+t-I~!s+1QSI%k;)XKXpN
z<IVEc%xb+|FIVl>+x>ReZ#~b0MOrx<Pj;OOUwJ0#yY~LSzka{3Uw3Zyo$VI7|GMON
z8gF7ZILvGP=R@-BMIQM(nOc7<?PI;XqF`N2tf+${b8F7k2)0_8nJ3jZr*3jq&VIV-
zxWR8N<I`a)-)uS~@H%JO0b$`cFV;vfPyKMrymZgi<7|y{Hb*EL>ux%gX1jOV<-p@_
zuAT^c%~gC=<#ElYE7sj-m+i4z9PwtO{=cdDN0*gNEjd--yw~KCSGDf<JCWJF0cX8$
z-!;7(%<O0MFrfWy`91S^)*laE8`fR8Ugf^;`;DpMQi5wXXx&=0W81daHy8Dv`<6fK
z-Ols#(TekXt?rk(yKa88JbA6v>$>G~Wv|L#`&GSVI3{axqsZHD=hLIRb#;!)uqWux
zkh1T(wQteC>2=lbns&$SINK)eXZeOdwtnyT`~TnWdb#}YS<{~{g!}J)*sHv6_s5US
z-Id$zr&n+Acdoxz_F{c_*^e6x8v7Yf`6qQe3fXI+zU7a_`jCH)vz%)b92-40G>Pp|
zU{mi9;11f*#C%eL!+C|HU|K=5icKQBtH(jUWdW_aHi|sS8iyt80-8<dDDoArI4t{V
zL%ZD{MS;c{tIy<mhQ+U%`fm!m)%MCaigr5|^2JLyX|f5nX`5UV**L>hM5?<r>W-4=
zY7IAWJHhTm8D*)<D~_3N+Sn^+bML^pYumPTX65qkdCa_YxhUVPjotBk7I5C@@X(Db
zYzb3YBEMPVsK~Yr6H@=xsBp+ux;a(}PMYNNL|Of%o14?c-g$piG@Ln4DPH5Zo6UW-
zxZ~T3f0g=8oh2!f|1C}k{hK&hf+s~qkkd0NN@()#KdEY|o+s^!HcmhG<guZv<>_dy
z;F;%Y)JzszdN5~cR=P@ae4cQ^A(T(8{~z}faqY@uuJ;7y%(=3JGx6jZH>Ztrw#`{$
zZEbl%f7axAA6wE`ay8D@e%d^Laf!6x-lrOWOtb1wC8wT#^74G^r{KvvwHhwUT7f3d
zxGFhvZXbQORHr#kcwtTQT!z<b`>w6!*HOGXFN)!YIb&0P(93L1#$+w&yvQq4&T-Fj
zOTKc^x+)~)R&!>AQ&rH8DeFt~qyOE1oOaxL`lY-TMzvY4kAKK*$-Eqw6Fkp6I&<^B
ziR)HGPn{cBt{(F6ZSU&K#;fj4)7rg7ZtH5_+SSolt7e{b+`2AhalCKnlRZ7lCM{l_
zqQtV7&E_7XX!YLTQ9t<FBVHdB-PpeL?&}A)u5H<5TG)1$=klDa>pub~cW|DG_glZ~
z@*1@-YqmAV{}8I)_j#d7+7#W@Kdvmdy)r9*>z!cv?C9TiXV!&mo^2X;o-gBaW0+`S
zove>P=cnjvKgxEVlMP94pXv~j6}+Wi>8-o3w&@A4V=LoaPrvWDb?54mH#?uro$tVu
zW#9U6%X+UT@(Ev8Y&lf-boYUc`W4<$(>@x7?|)vK^{-^@PYtW6uYJF?Cg)yskKXdE
z?_hN9h9L2r$gOsL`&vw2XX~$i@X#^BH0|&EqUPwcU*jgPzx70I$)n$A5Ad25g)i1_
zUHmO^1K+pQ32P(2zv|x3$-i!UV(I-J-NW$$?{yA{hsK$?r#{%0czyY@qlV?et8d>u
z<hSwhWNpvobL=L++p$%YZ{ANi>nB?xW}Gk--T3TVRLq4%JB&}V&YbyJ=Q*QPWS>V^
zLdNu-t1s66*y8>*|C`sf7*_vd`%<?VE-YAmoA3P1_zb;AzWo;K9xvN*^3+^|Mc=uf
zi8J4-wXfr@W54_I{tt`81${+}e}+C^d9LtmS&ng#4sW{L{To@!j?J6;FFSf~Y`xX>
z?S609i%aj8n(ujIg>3OE)vp<i_xR7hyZcfomG{}HYkDhN_PvRcyt_9$`R2hRY-Z~n
zxvs}YpS)pOc5BV#yX!-XITuelC$Z-D;q<k2rQ6!x>h>__KGu7E`~1IqxhW@KMd|LJ
zvShXImxHhGhL--%zNsQ6>^PYt_lMW)hbG%Bju{@!^S?WDmsg*8@Uz&c*6xrCi|tBM
z?0IJ@%&ysevorV7hPj3DmNh$`X1(v!e48eE`S<OWSGSxx$oplNCENa(vY(}E_U;Jo
zuX-k>Kf54utqs%T<Gb#PRF)l$dOf9n_U)MaaXX}+moEH$=XR{~_nYQ#i;I4<o$_|w
zc6s4H@8Ffkyw1vfzf;YB>hr|;(Z??HnXl`d9x}B%_H9R+_1fq=Nn5pJ5B>GEdGhF8
z#)|$M=d68=_LRzHud$x_MA`JmqGam=UhP|-cNmu+XjU&sdMy1#C4cuLncF2N{Z~D!
zQq}8u!}_V!bmF&t|7{!0{B+9i*DkJ<*L|+9TfAw7$WvE)+dKW|w0O#`(%bv&K3q)t
zy^HznU7>opqm$>q%QKc=xgziNsXXt0UxoL^ySe{AdV7BDHIDhKcCOzwZ(@JKp?>Q(
z&%-M!H{QFSdH43p`)hM09z@=MwfFw%!s*F>V;(x*dvi8EI_JJ->ACNbbCWveKRg=o
zr#8GVQHtr_Y-TBi#s5ST{+yh;(@^2}lm)L%=j}+9X1yf;v~t?+#<0(C?#*5~uluI-
z)W7rD+ajlZo&CZ$GM9JZUeQD$u{n=_@|~F(_q#=o|J;MDhy}Cm%FoW67xYF!v}~dH
zG!I@c@sEiQ%rX;Cyp><Jaekj?<mG~?Ikk#1W<8>1@_f(keEb`FbZO$R+PPm`BV_(P
z+||0UftT%S<1{uWekr-x2NvF4=9(ZJB;U&`r{I^g^i1Mr(fNLj^Y1-fs1z3cWNECr
z-u&gQ3z(ARRp%+CUb)XZ>7im?oKl$_!y>sUQ{@i)o%8zVZSR$GLf4eEzCB8bSairG
zMlDN0{MRDGpha3`GTP7XmliHKI5X*=<}8`*miG<A7FRJmHhp+!$z8>wx3SkMrT(Nw
zakV|Z8nM`NmZ#CX5XF77B=a6<&lBC67`<U_+^gCLOnwh6pDm6~P(ETgTh{N6npLvO
zue;3OWVyN)+3?Ng3R-MurV_p6@#2Je9~qbYOYGJCmoT;Rrtr7huE&!2|IHTqw8**d
zN$k>a&AV}%6B8W^lb3R;c<xg<?D!=8$K&H$lMVOXD?2;ytAUEox0Kaq=H6VOQeAo9
zz(~1jZ}0YrGyM*QMbB8||7(fQv}0C&OVq+tg1i*E8<TjRNpR%NT=_ME-EL{bBenoH
z+3&GRlCKt6N2!DvC0)OpoNT!C=21V#f43v<sU~s!do(dtE^ynTJ$n~PuS-~4tD+|s
z#-KHSpQzl|H%T6kQtdu14&+!Ib#F;>m|BQyYWj=_-%Tn?o1QjrRgh*2O?bB`b(&g=
zP@CB!S=UDky;m*FUYBUumz*;xIWtTxP3dUJG{y8?i_*oOwc092G^$>=Ou8wlsOc4!
zyYETnqt>)lX`!3c5`<FLUwq2h_aM3{`2y=hC#%$=fA?~=T3uc}%ZiIFiMuI1Eh$eo
zQKafgPE|@3+cLdh3FYS=6g73PPF)bV?rG>b_4=-}<xQuIR;j8NEva%zmada){Fd%~
zP2F#aTHPXv)J+Qc9~E<cEo|z0QeStWw(EKEr1bne=~q*(PyhFGe$KhYa`%)t)$X<a
zQfl7Bq2{;D{7};4ol8|F$@LsuP<B%OKcl4oI*qrfD~^6itt)$0CzO~P>KmJsa_Fjb
z%`){?v1jgw)RT*r_g{*P44W4)?MB<77Y*}Rr-o_H2wM;r73Xp(<=NY3@pUf}ce(a2
z(n#BqIiu?N)Mb*g%a;1SN`IfKe)YlQ&P&Utf6AP5Om>3Q>9$`_CBHrU(r`Zf*WDPY
zG(EKk3{p?F)@Ckfis;tspJ}JDG%&5t>(!*H*v~f~=da3;x|Fmu=;4C4<qIEWCj6DC
z%9357mgz3FqRQ{3NYfK(wHGUeZZ7qDHn-^2IyUWvOR|;~tzavA`J*$1S!u<;O<f^h
z8CPwXb$zK-MxawhkCIy9zGoM<Cd$j*efctTOVXVM&z`MvTftqmD0=2{r>Jz>cQ2H;
zg*aZz*r67^UQB!XwzO@>R`GBt?C5*6Yu5dJixT#oeLY7oTQ=`m#k6A$O{wehB7?kE
zuDkVOdEINlbJwQd)XEgnNk6N(<e}Uq3GrD{XSb@YJ~l0<N<dp}+UpaubWUe+9XGli
zAh)Ji=<%s-YtF_U-y!yD!Y-vfU)G%er*naA?FGKI+xEOU?7D34zpS|ex|hw?UbfS{
z;-<TM3;W$dnfOyWp_ksA&3ij@#q_hRkEdzrUhi8w^-1V%&BshD*DS7B8@Wk$+P<~7
zkG=Ig^!CoFe`{~v%DsAR?Y(<%?>*DK|8MPmw!DB#x)1pD?n&j{SIT?1E%%YpyGKIn
z9;B_D5wJQ+?DS)~b&uWjo@lLmmh|pfn%?s^y%&A&o=;o%d|uw;S$VG(y?eTD-Ro_7
zZ_3u)yLJD#)T49v6kngpd(*Y<)jPeH&-C6iy??)N-8-@T4?^!h{>pnV_5Op_`VZ6I
zvFZgp-PZeADgU$4`%h~6-|Y0iN9BKuTmP+1|3}~Z@6+<Xhw1-%mpU_P?Z$iWOy|D;
zR;B-^YyHnt>;Ep(|9ejV=d1j`kKX^gm;dL`nrW++ENgqS_(%SKwhc_r^%;x}m_F;X
zn1A?hw}C}{1M~6sC9E&z`mJYN{g&-teF6LK{PwO5?Cl2Z>Tfvv3%I5ma5Wcjn`;EF
zGvGYGf#>=L?$sZ7HyiNHF5tUdz<=9-pZy~@|Hd|<g5OMrg0D9S{oWw(zCg(Mqp<Qu
zVgHXp-i4z73#`r38Ql%V%s+}&8;S%MO4J*QH*XZ}H<X(HQF3*bRC%G~{*4l=H%cG>
zC^Okmc6Oocc0;-M9~rK{^E$LqmVJ{P^CyM-hKi>R<)t?%aT_Vgf09_1t7u##XZ}ga
zeUobNCKdG}HS0}k#>!9qj5NxP)Z&XYiZ^M7f6`c9q`BB==|pYK?oV3zM%sssbmwo<
zx&KM~c9CLs;nrhCdgnLktuE4KHa2{`$$)+HKmFCJ((=WI|2G+`8=LTdHum0Z9RB&;
zPc2j9&nC*nX70x3^~J{7n@ztP=;s$(RDZTC-)z;q*>d}5i}jz2>x^u6Z??E@Y<2mw
z?S5nH*Pl6dZ?ZjaZ2#EU;s0kl;SwwH5;66+4$n6`a+^5mo4D9-agpC5p>OOQU*ZzH
z#W}mgp}fSodP}X;NB4dcH~%kg^G!U`O}x@KeBo>G-f!Y_e2b4Yi_h^EpZ!~EP8|2$
zZ8H7M7XR}mPJ2vzIkx(~-!kpR7Juch{`#iD=39g9O+(zbhWML?hHnjxHw{bQ8kTPw
zUcNQ_w8_)3(!kv%0qUk3HNN^T{u<K1HTDEcq<(9l@W0a`tG|X{-x_=0H17G<xc8><
z-?zqxm*z#4MhbuRm){!md`rydk|brb5dLqmdrX7nP5tJVCh<1}UH%%MzAY`^EWLbN
zdc9f3ZWDd(ZN3bpiNV{FmVZrJ{4IEMY3A)Men+<YeE*Vi*d(ppEbsZYy!U4L-?zoJ
zn}%*SO_{wlb$wZ?cUj^6Z+@4*L{Bd(o?qr~ye%nyThZ@rrSaxv>D$Yy%M!B7OY_Yu
z+P7Eqn^#WX9-Lj6v1EG{|IsRMf$II+tB;pgpZ^|kz`SPp_S(nhwWrJLwwKr6|6YIG
zyy3lhBY#EXXY(fc9Zk{}&FU4+`a7E4En574G>7kKiMD8s-_f=#-J(5tM|=K{_Hv7k
z{)$HR$lBN2{af5>*YD`sUeUGRqWkcU?(;i(j$3r?uIRa4(R;a~@AHoS{T6-fmA&78
zOyIVhD8F-}dgVlY%SpyNCz)GLvEMnx+H$IU<y8NjQ`0S{<^P;ozH?f&<@EZW)3@&^
z-qSF1zU8dtJ7=x8oV|VL?ERK=j_;gv-g55sopbM7&U?Od-h0dW-*?XcZ@GYd*8+a4
Oh2mASlN}rw7_0%~(__s5

diff --git a/docs/images/scfg_xfer_proto_dsz.gif b/docs/images/scfg_xfer_proto_dsz.gif
deleted file mode 100644
index d61104705725996c96bb115aa2b964f94974d3ae..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18021
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
J#s&rkYXHl^!xI1i

diff --git a/docs/images/scfg_xfer_proto_dsz_g.gif b/docs/images/scfg_xfer_proto_dsz_g.gif
deleted file mode 100644
index 11b174a6573be83a90b8542ea94a0f25629f343a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20568
zcmZ?wbhEHbv|;jQ{LTOYEes6*8CqI66tg)rvjsq?SirDY0)(n1EUOhks72AKMboK8
z)2l_(tH;o*$1teJFldTp&=kw4DV9-loSdATqUJay&+!7GrC!-fgR++f6)z1cUK>@s
zHmZ7URQ1;6>aEEwTa#P%X7}vP?m3n{<yi5QW5sih70)?WJ?C8Y(sL~>EiFsWwJg2X
zvi4dJ2;J-1dT$B{J)g4o`JBDa=Nx;#^w|5Q=iV<p_x;$hW7n>o`~RQe|0oy@0dhk?
z2b2RqdBK6>A4C104~i2W9BAU;*D^U_ka)P2PuXeCj}41lx<&M}&YTcje7slQx=BWJ
zQ_6|SDuJ_nP8Kcoo@x+%tVVOQ+S%F0#s3a`Q08!CVyR(}@Y<4bQQU!BKqH~S;qr1;
zJ_!SXs|_K{9BYznCnRJut>f6I<{?m)!^Fxd))TrQOqY2ZkB~ux!F0#FyZGKbyL$Qo
zBQtxQJcFFhkH$of27dd74HX+%jti)`%+pD1YB@dCIC|cJolZ}=gdM^eauZ8lTw0+W
z;gG9%_|?^Qrd#H%RdjxPdxvSxg|!R6zq>D6Qhvi=PeuD<X`7OOeS3bkKRsn%!C)9`
z)xm##bNhjPwk#Zi_nrSWh$}k%>G<^AvqNHGolED}_nv$774O$}{{HU!K!4$Xmiqr{
zKhz&^vWR6UG-?Q}Xlhc|dGVlG%S9uxMcXH0A(w7K$3rg3Z3h(Fbz3x&It;c1JnGav
z!qCiZFlB`jkJhmTi+Bvq2{8AXJ<~YMV|mWuFptrnh~|D{9?xc8cd^bTyrwq}ESYR}
zCxMyIFUWE!ucgmSRldk)2bNB^Y|&gc!|F*u+Dz*w6Q1!|ZP<BucJ98PYW&4)hL^Y{
zZfH&kbm44y&S!H&^U{3lA15dK+cRucpI@Wo>L4(|>C~0Q6WJ0OmPC1mYA#_{m@qXW
zb*k&N$mEq%!=ef=wra(e+`alL?%#%QU$4iv3Wm){>@pQQm^9H*?dJN4iD@&_rbe<w
zWz1F7zQwY1<+C?gtM)#dmAxfW;r7;Tsk3kA@BO$fy5NZ5^2Wj=isdrJr(Bn>E4j9{
zTee)j;`&^UkA3QLRZr$_pU3fP@AG*apHH%HsQE6qM!xQsY>iWcs*X)U1H0QDg=Ri8
zj)yH0@ezsbGI<t{j;plwJnB^6^&zRp;F88;9?jzml>7BQdmQd_66#zs$xH6%lXIa?
zm8w%?na)0)9^WUKHZx6b?XydHX1eNg8}@0wSX3+3vV2|-U+Ri0ERrn&*X;$Y1m@Wa
zwy3jZEMNQWR?haf-)<Ki*ZqE{<a+M+yA{vZe*br`=KI_4_Z!&temrOq&)f0Pj>F4r
zQ3c<FACD)v%Q-MG`~3UyWQuj(&Zkp@&;5Khv$$^O^M#YwRlZp4zRv2!^74DTUMyN}
z_v`tx-F%j>*Lu&}`FhLkbye@yPye_3-L}Vlzdy`4U1$AftGxZ6&llYF|9-g=zQ5+x
zvFrb;-yc_(xBa|t{l4lCPd?k(eZ2GjUG0wp%K5*Zy|JJF<3{_eUdCrXp0EG^@6Y%5
z|Nk@aEMQ>wIKU+Jp@G9^0h9QN18i0w8U=b5u&8?+<nmjWlejvbP4~n>zN!z+3Ooxr
z+&vBn&HB)y_=fYZL5Dhrl^zFk!^6i4rnXY&0@}<&=JKvRepv3;hxUICJc|U{J&q_z
zeeAf<tjIU<#1S>CjU8S#bD4$H?ZxiBZ`AL3D7-!6i0r+BPQ#d_B}=wDOHKRO6Sw9H
z_thP4GP4AGCR9I`I{f3PewSfy1xvEr!xKmC)B?MiPe{%G<8i`?$*`+YBqfk##UY-k
zi>*;l7AvZIp7e_PG-*bOl9FiT6rZX~6J|eo5+Jd1`O%yFlREw^(F#9#Dr}cf=R%RE
z+Ub@@B8q|<LP}H~uX}Mo$IGa1qO>yq)E92HT*f_ScdmTCapRbb+UFTXF>10eU%1Np
z3D3M}t!9*Z;>>;5;))|{9vdC@JR9#eY4+VEOZjtGdX(<k-2O&HMU(fdhmPB%p7;OG
zEVui9@_Zsw&=lvF%N-guog0`E=GhrMWqUi*E0gW=oO?Y=R*yZ-$;1`Ux!jXxs{hMZ
z)@#e0M@!Tc^j}@n3A(aK;_eFL^O=`A?4~SHcU|Je&ULPyY05I@-t=n)J5N`A`!w&S
z&Px09KLSh^1<!Wfn`~&zb+)T&@=62M3`50LzGlllFE#%9G-R@eU#i#VnI1=1nsQeK
zZ~PRzyl2*OJ^zyzCR$xtQ_#CQW@pDW$8%TbmYQ-oiQYQ2&FRWo2ZlooOxd=FxWYCx
zyRLc6v--wSrD+>3Ca*~rw!V47v24@y(7B21-ZxLPg>9V8nwxC;JK}Vg*`{_`-6u}o
zk>~jIH_r|Ir<;|y`_|!I)3&WYldb-KmET>V*5#phRJHC#1*iX;y8VQ&UQDfYz|&om
zcCzy(DE~Zln(dd+{Bvj5l}+Wo`*xksuIj4^@%6J#o@7*Hcz!e{fq6&V*Ja|x6E4M9
z2YTH9b?f`SA7|g!o}V4p%v8RX`){VRvilTqnWG2XDjS>ldmb#*kU03vb$y+>&Y_>X
zzVCf@^g}wM#r>~kKMsri%c*kxbB{M&Vz0!x`R(p!?h7?X99HZr?9%mlC}lrk|K!i>
zOGMT0y)yc+>#+6)$95Yp&gD0bdH8LbH2usIwawv&7%vzygwD7i$Nzo(F_UGk{a%MT
z<Zqr#;M+XoxKA4QBa2fEfA#;BuJ5@!xvgY&?v#bo86{Z${$waFKen0w+nRJ6|Ge{+
zd<+XdvcGT;k2>FKw`GCo+ze;wU+3%Mwk&4W&Ga&_y3jGtWQq3Q=ib$~F3<h9Wre%%
ztDxDxuB`Cex+?tatFYa_u1=q4Jj-?EHPhc)&$>_9`u~+oR>bdL*AMV*+tBX&CQ17D
zjT3&~Hm2%6{U3Pq8k5?);9hI@4R(|JcD<8duPz?{r&M}h>A!E=nFa3WO`m=J`L}P|
zzNfz{*ggBs!?x{vPR2fC+BW;%%YEPXew2M*xVrk@S3Zln^LKLoKNY%ljrEm$U{tPN
zu=VXf(dD~#+P?Ex8U09X`Hubnb>DTR*F5@g&+NoMd%I74vt=Gji|;rU&X?A-yz=-L
zk#}pGPq}n#p8eF~{LXXb?;NLJmU<TYE%Ok&&D%EVyFChTH%)wbrm$qc^qqj~+b=V&
z+u!+o_kFSY?N{gXeOk3%`jyE1?K{0A@~VROzE1jYwR`8evi0V%xBpJtesXbM*{a=p
z-zA>6zVr56VO??c`+W6;rQhW8_nj6$#rppK!L>G@Td#jBoK(6dLoxgFDt5akRrcHW
z+xC6xUM>4Z{Q8bN-g=*Uvj2RpVlRJb>3?wf?b;8^?QLH<-}|{?`|ihW?fJKg|9{{4
ze%5C{|H>=r@5?X#|M%^P{=a2vFFr>fk~#2LcGs4*k)N0T*Z*mAe&4t4|IXLGR-adY
zKCNcUMw!djyDIyl*3|qn*jIgr|Nghl_pRpMo|k{?ckI6)_CLS8_gC++-tZ>)d)@zI
z)l3@ozsoE0+DjSIs~9+{vcH!zdo(O|uQ;{5zEZqCzP;?Tdd-<{MGRXioW3V>nR~u^
zo;&?`!?O0ujqVkUKdR%zYZgDR(%`5O%c%LbylU<C21$$NgU1^;q&G*mSIexZSyx`X
zkG)*udb6HIi;+c(`HyD)h>D!)O&nKhx<axaO)q$wTD$vNZQPI6gpT4c4S$FB0(qB|
zjEI!<YpqN(DqUaHd0UizHLr+ruP^Fo<madtmuRcG(Jo-pW-aQVpi!)|z3o<6(?8=E
zl{y*C3$|D0K5rKkZ_wmuoe<Hfz|xWVwI)rYpiQE1+K<i!5?%5woi##niW*%jW^}FE
z(Z%qk_P23I&ezsVi|#EE-P<a<cg*PCwWE8_jqZIvx(`V79D31s?pX5j9kqvN^qkt!
zbLK|RxgR|jBziAdq%7Ov?I>b>>a#WD)tEaRmS?AWJczKpF~j!bXN&tUEN*i!+*{H2
z>_p$auYDgR`ioOtB~%2yWe8gt3aS?Nf1A-CXDqDODEz}>0#oFKe;yOqGbeEDoWON+
z0_V>OJe(8xD%GV}M0_8Lh|QcRv2&vMPZ2pwQ3c6KN;gH>E{Li{PEySj)7m*HO;Eh(
z<D|mGf8u3|;zp5^&0dOc5|Xg&)V7(a-ScsBucM@ZfR4*d$s?O2k51A#tt2H@Aa(we
z&U!`N%@3udFGz*%WW3ol_0A`0=?hcieol>j$(U$4O-^B2>P(r`nbYJHWV3fpdvi$d
zwxE8|P1&!X7@rpEe|M6rS}FJE()2$<@?QjJuml_Y4xI7tqCtnHg3#s}BF2W|&4yx5
zidq*8WrdX#n3NQgm6V)~bT7@E_j9HWGqaBItVNcyY>H;BIH_#5VAh(KD#j0H*$L0y
z)Tz3qQ#H0|w%g>{nTJdgKdEJHQY#XgQ*1ORFnCTt@th-_bB@iNb0%|+c8f+A6N96H
z$Ysm9mnuaZHfnnPYt)=vq&fA`+@Oz|a}S9oD2gpk63a*w%T*LF*r>IxNPM%<{K|*o
z4UXC^6D2w?N;uw>nDkJ4%13Rt&MC76rRFc3a_W+f?@Xx+LQ^+fTyR-Q`c{+lwuid=
z7Bb2_&^;I^^Ds&8Xrtb_i;R~T7hN`7^xjGKZlSC?m)s*kxhIKoRXg?HUX=TMQ0{Xe
z(>uc%e<sRvOrF7e*now}uqRT1`_YU(NkuW{nUhv3N<TJ~NuDYHm}wU0Qsv1?dQ8e;
zT}DO<%BDridXJ5)FDcs#skj)an0`=ReN)A~X_?<86}x2B@J*^)IMpJYOm?m`$(Ur4
zeMxP<r1~MtIl-6v`3g;$85#ZwI<AmZG3ETo9Mvq4BwTW#bE22vN^irJlek2ttrGEn
zC=zy1Bq&hyVWw!zM$yE;Nr?wVpYIe~I%(DGm0G12wbm+4u2!7C*=hdPB#ED$5<8ft
z>^7RhuORu~Qu1(-BvX{myhfc<MN$h5rMRSYR~YJU4%FS6sC&z3;r4^NdkPmGFw~Qd
z(tEl{=I$+-?3XgRm9p70Wj`=6X-etqSjoMfIQ`{B{l82G=28Z&GZ%mRCI91>0m~(W
z?wJZaPD}WUmQ1KroV;?$<eN(*n2Z9nlvEeZ)OIoosahItrL4`&963wb@bl6{t7Wd2
zHhNrAS-*0bjk0RquVwjKCJB=^mEM}|_4uD!mXLal*BqnU%T1y;n{u0)-CkZIRQyf3
zZ{uWJ`_ncLl(%d)wtL-df1$Z|?qWOl?kz!EY+eT2c}H&vh~64hVz=w^7N6+8r_5XK
zFSdRA*e*!B|2DJL(!*Q4qPK3@yfw4h_Q>b0vA1m!y6p}*Z^@V57FoS5=C}2ijNX*r
z+Z&{JG+FPMU~GTkdGeYWJGyr7=&^QqSl+|g5-8H@{ycnVr0b3uvv<x~?I&Oo8>!Lc
zvVG?w>s`JgyOvmcc3j!H^vh0emXwCoL04TuE|=GBydCOS>N|zoV|sTT4|~v_*Sn>j
zhDdMSU4Auo`DvF2svWkj9hb^uj{n|s;dkhZh_H*^E+_w4rye`8XMy$ZtGD;w<4$4w
zy4R^>@6jJ~Hs08?<62<Kmq3})-Pfo2ZsQKscg=n9CGh^05U%o_Cr$PThSq5w4Z0J(
z`>%G8@Y9%M+WYKX_OWf>^L+Q-C)-octq$FL+9#|uw9I7Z7w?1HrF{aH?%%O{cc`k5
zn9qLGR=1d=AqqW*j(7*N_Z;|;5^UeT*G4+wg?F)D&Eclohb(+-x$fBauim@Xy6NcG
z-B+7SSaVA9-1Z#Q-al>kL2Xe#wU}JxrTgz3*{|^CNYI_oNw;_FsRj$q2{t(6X>Aj7
zS^DsQ=5CWW2X?eYU!EK_!8}Uo+p!6*N#})+7yUW5Hud;MR@=Ni$4l=-{p(bX-g-5n
zY|Zig!j<b;Ps~4hyf){=mB%NhO+7y0j+d3qF-O<1v^VzixOZ|q*_EGqa>1I|sWPYh
zTTh--KiqfgfMd?C11^V_{5ho~bL=h4=}WUcX0EB=nR9IQnY}Sr>`mBO4X3rMU)ymc
z=1l6du3wu^I;?S+AJTN}&zTD{ZA(^!r=Hk#M(4<D4hG(3XK$Z5%l9mSL+l*ewuEys
zXSrRH55I|f#gn@4O_J8NBz3oB`8NBvN0VgCl7I9hy_PxuE#~}(J?Ed*oa=D!;g*S6
zRdaTYjq|_TK95S=p2}Phki9s^;=*>Gx|`J(CU&2_((b~qdr|K1MPIYC-63b^)Huwu
zIij)k-~KJ#&isE%XG}{skiFc*mT9mzv&QW59JNfdznOctT{iQ*+|qX0bZ>^8?v({;
zSLQCeY#W=ocH8As->wA6UJbIny75^pOYdp6wWm4Gp4NT3`^J}p1=lR+Rur?|XjvUz
z-Q&^fBhj*`yyaGVP1@RyW7A73I4)_cU)sO4^V*z?oOiFfUAa^yd!uP@yh!b-r?XE*
zoxL9OHjGJU_kQjhsdwupRWu0BXqar<IOA>Gl(nTZYTNmK+-#P;CE9Y`^;_dkncA$J
z!v?B{4rV(~Sle#?qG7T}^TZ!bxo`6d_craSEnm3(c8G?P?~ZzP^=glfYmO)CeKc;y
zzPOe>y=8aq&C`3U3jh7M!|2ladV1M@-}9}ttyQs?*h((BPS1|1=vWkc@7Y<$C9<(A
z_H;)7J<uN>Sz&WL@6WBdwyi&}ca(A54t#NwVMeKN#eFG`TUIyfZ=^f$R+PEksJ|S0
zf6v^ToE7z#a;r<XUlZuKe|`Fc+T*34m*3~V*CaIMUe>njbJtvyd2`CG^<dK3b5GXZ
zx4Ch9<KFu#!*3s|y*;D6B_QMOg1e6_EF2H&Uia^Kyid2q>%_xp<@e{ExU+3-m2=$f
zlf6$mJZg^TKDfCy?zV56QO%B=Ww+{W@6D^Y7x(WeAIl?^y=Nr%wkGFRPULOpdDq;(
z<3afG{J(pj&C`86<?Mrh*B#j36|R5&@Sl&}bLr*JbNcdU_BJ)iJ)Rx=+)v_x(7K1>
zeospE%F~{=FsnRUHuvg^w~mKB?k{=%xJB-Taopn_Yn#*GKIY|X*&O>IVcsiNmzPhw
zpDImx8RK_tmEG$t@9fvCJGuJx-K4T-*YCE8cjWcgH8AXJK4kZN;fuN>aj!4MJZ+44
zxh}3lYu%emc5nBcc{8)(=^Nj-xAwig)qdvZ=fe_nYcE^8dlL8VS>3xA^WMGkJA2MA
z_Ik(GYVN-K9wIEy`gT9v9Qk_Nh2p+XdG9~_z2749fhpgk?e#n6`VSoQKh&Anci2wk
z)1N3HKT+ua2Vwb-BK04|=6@93|54)nN2&WCpUu{AObqB-^iO00muT?AmGinp7u?c}
zVANWcwQ5n5*s@DvIgFFnyjoTEan(jE?MlP>&57DSPD=dZoU(^Y$3tH7@TM=b92Xql
zHO2R(j{nXDSCpo1bd<h)OFA-g;hw^^k2bA+VkGnOlFXxBda@H_uPRR0u$ulNYx?V1
z(-jx!f8a7G;h*ujYw_=i23A}OOp|6fRw+0~8M;~h@K|LiI7xBp%pZPMO1!T(^xao7
zOfZ^Yzft$Fk@)MSwob+_pOj^-RpfWi@}IQK?(i~|+r|!yRg0xel7dX!HqXvEWKwm@
z#8BF_ag*jYdCkhA-`o2c8y5ZE&94zDJNH`T-0Pilrx>mDJvi6DQ8VhGX4Jn%hPj_a
zmsZVN<fOHvNzCx(ywZgX?|*7-I3@lyQoFWL`)A}A{tc`5T1|1{TyXHv7iKNS<C~_O
zJT=Adq|_O$sllCJw;L|JvP(LaUqIS~<BdXr^Fcl-0X>@=2c6kF`0Xv`{5Z(W!7p!6
zccCIMxuaj+rGbO7XbFd)V!$dH#YIawgbZSL=_oEr;}lYLd!f^~Io)5_p>>)?;31cb
z!tRsjCEU8QGFa4SvER~FhhBxQ2@79w<5tt^@D18gJ-Le0bRs2^FR#mGRCbG&&`a8}
z)Y`m_N5UxS$c%&2*Z1r*X1Xk3(`@ii$~fo32E)b2lBD}3-M0nq{KPA5p_P4Z;!U@7
znSYi}^<r}mf62UTRrJPVuCwWDS*xV?GkmMr`ET!N{`2Euvw8mgy_Ne9Z1~O2@ZjXc
z{|a@tcjPmisCD^&x5hpHk$uw-HHU<%k`E8}Ggn;P+wfDtkz<K@zyXKqZ|poW3H=8g
zelc?h$=sOlu>U^`(-;3n2F@4-MmB*Eg@ddT83G5{WK$BH*kl%5IK(Acp>UX8=EVnR
z0mX_07eVhDhbEyw8$l)!Rfj?*an*)GH_5~`2~C`NX9|yV>73Z;uAuuO(1W|{jUhAl
zge?xuDl@MzoK#;tC1^pT$%;z~tsGVvr(0#RUMO~2&CpofePoY@vVcj@WR+ewCQns?
zpeW9z(_j6YvU1tngh!go=NA1sxnh2kR+om;bf;4nmisv@T)Dz;#;HK})u*~vuimvN
zL`U=#*XuRg&Uu|?-FB(VQ7`cIs_b?9K5)I!Klnq)hwYGz@tF-r#ERD#o+{dVhV6{a
z<1^RKc`56fT!{)kYnl={*>~HmoZ@fWWaoMNSv>48&fEE5fixfUt+LN=t?#Wk+!rmk
z?P}ldcb7uTV@uClpJ!ltkn11!^UmaaJ7$3i{`XlvJw4CB@RR$)eija&2M3siQv{sY
z#CkRy<S?Fc!>P-3O@Xt3t;|P8LCbFzu6>arJCBMbPWkvmvUp11ap~xDfhRaScrKk#
znz&`Bhx+Uoqh^iDZIiqf{9CP)v0$NK){2E4lgctOyS1z)EB9Qg`P?k<Xvwc77NL_a
ztFBF+rKvVA=hWrp^Zv+aX*jW}zS3AUBg^{Ya;e%Wt31@#UeVfMboPqQ#xsw$u!>vp
z+Jpo=l)9=H{C(Cz-MwM8r3MED7Ker%6Pc`Y{kYEKQsa30-#x}jow~eRlOvtKnO@0E
zz7~0B0q-N$8_CmSzdcIZZd;bOc<<kDcaGbBH_zJqS9iyQ<)Zt3WUe%=t9;TK{_n@*
z`TqARAFWQ8t9U&zU+%}l$@lM7zuVg{_v`h_^m%_i?Ves&`(^QeyXr4f?d$7)-R8ev
z`Qd81eD%Ax@&Et-NX@TjmU-~w%lCaxe)u>3`<kr4w7RwNzF<0o@R9^pU5N$;9)@PI
zCkgEOGaUKb0$OD5EZ{JYI3yS*(5jh|$Q6FWNn)QsoBS084*!h9Jf|+SSh6It=UW_<
zKNry9tdb;X+u<a8OrYJ3MM<bq;*f&d$4=8Fj|7)XxXAlWZ1PM|Vy}I$_DxQ^rG$VI
z+w=%0%}WBkwmC_nOEZq?ZZho7vPtGoec@sr7uaWdM49*Yj$>L;fvr^~ii+VJ?v8Rr
z{l!a^#CQMj@ZkH{(rfZW>HiOB2P>lqg))kA#*ywCVVfowm8hr{@9-3?yBL!+MM2n9
z(lg@NrIy?&sk*t9-Z9UDrtf}|s$VO4GJKOklfb_eRkkw~J}GL!Gf$_a8PEOcli?OT
z>++H`)3uepIcdSOZ$C*h-}}?Ipe=aLV-<C_(3i~yzuGLGrlecn{pnY6EO_4MCF!<r
zE6-PCrB8ijqGtE^r+))m$O2~73`gE5|Iog|8TWY-t0G<ma5<GU@lAcfp!LhUCoN>L
z^wSJ?+h2hbqBhPx9J9h){nWwkWy=?7^ER>SXI-4u7P8EEX{K+jWbo`~U#1)WeP(&t
z(yc8jWQE|-l^l`3E-ZQ#veG+MD>!=Am1S;QyZv*M%!PklE}a#!B4DbPO8l#X>z5g<
z>6dxUqj@TH@uI06sc%;auC!|SaKv<7?$T`5`&!|9m=tEI=>AI!xE~e1zQ}Z`MW|-9
z>aR<O{JyL-^wkM`dn;nwp({&0ZC5ADa$h{?b#0SDuTH{2t1Ej>UEN%=H#_67u<v}K
z$@A-EUuDGpj=FJf%a&!memS$PqHis_W)bl=-Q0gw*lo7(9f!YaWn@N2Ke{Edec9b?
zL+@9&uc?Lay1Z16C%G!-Nm%%@>qpn+)m{%@`!96&V^#ga>C(48Rejl0`E{MsLGIX(
zb>B7}aD5pjsU7j_*{02UTi2KV*7iQEw{7A7tMBW-bKm&-$aJr)?}nJ!r_Vnx`n)}9
zZcbg`uj`AG!j?|<U7e=A`sVSliWZSjoepb{M`!0rY?Aid*yUUEaG_Y(+78}=f7$#o
z*V)dO9+W=&F>~R}TO9ethm?<PY&ETVEUR9*TKI?_!<0D}<(il8-IJPI*S#w7Ki7|=
zs?Rn~eCw6Km2ElAR8Bi|;+aIH?4M_1dyC5E-#KmeT69)TY;MJ3?fU}Uf=AW<6(mQW
zNz_S}JnOPlzssH{?Blf1V_mjc?V^9LxhhLtIB@s#tff-V&EH?yar~>ERVa6eb@a{?
zmRn1ft?teY{%mwE_+Lrb!|Lb4yDd)39n*I|pOdElc-OR)d4@CcSH9L|7r(ml+S66f
z-`x4`RdLeg+~#?PHL0eXf1Fq3`%;_u=Z2GW)ET|DvZ%;6&l7@YU%EBz+g5hn%tKX@
z$7e6o-T1FO^G!OF<xQu!ZGrA<V@h}bzVgOw?LO`^v3~z6wy%A+cGF|&Y%V574(5O#
zJmUX8v>Mwy63hAFrv0v<&0D68|N0Ic{dWi3>gPO?6yGV}&F9@0{^yCQ?6&>oXWw72
zyRo;lZtDtRzQW1HHBIvTl}AMNK23cu^IR(Y=aGEBj|;eMAG?@au{*~dT=IX<3!D61
zm)rS@=6dga<=+15>e_$BOWk9i%f@G&j<rjhu{r#~{iQn(CdS6^Qro+@$bR?v?R?Rj
z=i5&DQ1&d8GcJ|ueE9oj^_qK}=Uw)hPd>L`UF8Gsm{*70?RK_J|05uL-luZ=+<WZp
z)lY5T=bx(I*E&6Z+5P5!YtAaBPnpTpuJ-!uiz=RF>I|FeZ3XzMs_#6H`@Wk$V{)or
zs&%nQ^EP+2H_7WSB}?7^v6<h=X!`l;7w+-DE-&9_)cOAR*6LqhZnC`m!0hnnVe|f(
zr^NriIvrp8WqJJH*UOi`U4Q@X*7I{d=7nol#0kjVFtyx%|GE9|zyJTFG95@4I*_Y$
zAT!C9dCR`fhnKN@*?+s(p6AfM^eCI~#rp*|+5g$SpQmT;iy3qIt{iyrVIOPBftSn&
zo;KUAEmjk;v0ur(|Gn})u{C?2bRT51Irz!h;e+yi@sfj*cN`^E9A7pcV3=@VAM@h<
z+*`TdIQ)%v5@c~wuW{1oajF(_Qp!=gJo}&dmDSrBg>96xoHYM98Spq8Zc)=}+0W@>
zcJ{Q>xySl?PmIp3T66T%KEpZAR%@KCYW6pDn=9Y3%kkQ)J4IE0i?gGQi_@BYMrRHy
z-C6$g_MYv@htoFe&EaxM%i5RxiP76c-TRD-?;RJvH!l8vTmsIx`0P2t@S!n~$2G*q
zHCV^h-(-2P&(ZJ@SHBY1uqm$5dt77AxW?XbjeFx7|Hn1{%OR~4H7*?sw=Fx<x=jiu
zYk0<}d6_5&$GB!5aY>nVEK|od>&UUFDQ-b7N5lWP<!(9V#dAFLj9cE4qyB4Lf?AGc
zUpW$S#I=OQt#Xcg)f)HeJ?=F=?*9%S{(ISZTeOSmznmlbtCyyQEK5J*-s0oYTI1fD
z<I!H@(b414F5+hF<MMO$f#edKlTCY?e3qrB*iD$DcI)x7i6$OiIwzgJoS6LQM26GJ
ztVy=heNH;r9H}c=mc(L{R&A5re7IL+L!ZmCeizS$Ir}E+c+QCNT%dAlLCVP`Df_0{
zoVv;EDJkuItJ!m9$f?KNCs%Gcwb*6f>M5QZmUy^qIb?gp>D^@~o9?CaZPb?WcyF)q
z-myn*R?4~`%=?a=K3QOGE_Ca7dXne*CF(1B_RZ+=KD6iXKj~wsyF68ncuT$BCKBy!
z9OboM=G2loXZGu?N#i=R@{iZKGhXL=e9k=aTDs-T1RdYyIj0Z#`2JIvb9%;UyWLwH
z_Oz&;=&}7G?Q?aH@0}-V*Fvo8_jn}pc%;1X41eUE9_4k}<Ye}yvj=L_pSqmAqwKXd
z$NP59@|PvYR;=;cw#V=Jk!7!9{Q9q)%Q@utj^+I0E&C3y@i^-2++cIsRK~;n%E?|4
zzxG*YSFoIYVRClSkyDRXd;N9s+jhk3qR835E?)n1{C|gd{(f?P{~Yzze|*jzIrIOF
z&)+LP%VbWyopNf;oO5iY0aLg5EZ!6F-sQsboO8=^{4QMyc=06Q^Aq=7U)<jspSE-H
zZkfGm(IS6=y%+BAIDcgEk!kf_!n6GD5$&+YhqFH&-V(Cwp~#^#Jr`tk&&hrDf07e4
zspOxZW~$$(o|9UCm+7>gQ+s+zUG${1X~3;F{@I88^g{#lxq{fO%{ZDbDowq3?y=RT
z-8&auwvbK@Vq(3p{?7%LS~m{fiyTLTd3evh&<Su}8uaqZWzN=sf?EN0p#l5v_;Kw$
zzwFO>gR{Y$YyC}Fefdq#`M6&Eb;oD&8GpmG7nnuWO?y}SRiEwY@l8-Vr+PN<>Y1Qt
ze}W>fE(`g(@m@;kgDW2AthR63b=mH0NYdXc@}}1+lrA<}1v4+bns+PcQ;S;K)l1$>
zFJ<_KMXy~JGu6oKtM8mG=1$pLzQ>p(o(*tSy&7zK-81IOzMd<#wr90%1AR)5xyW9-
zeCFCTpTIvcA*cSuT>q_e!Ru*=I&Y|v=tYO6*ZpiGs&qqn_J-GQ4N2X4J<#^bN9*$&
zkL=mx<NQtJM8~G3MSHLAC<%LYBz!{e8DG)UvsAoYkDQ3Rx}u*oq_s7uo;4z+b$JJ`
zM%vM!Nwr}$bFb~&6E;sa;wej1meBcCd;Gj~9lCuZlS2Hb-HmwIeAQFr3ZrlMDV4xk
zwKo!ZFU*-5UK$(0@;54QX_#;A6+zw`8gs*^ZwXlV_g3rIke1dfGeiSDeJ^fY>*J~$
zy3XY4<fY4Uc^$9YIKB9^qF*<1yGUf2Q_Nx6150xQyPsSwi*h>28lyTls`KitCptHd
zxL!H>_Kww`XiMwEW>+K1X2twFSsQ7j8fy18ny=MsU2k~T+cO(@Be-G%&hL%A!+bYX
zG^WBRR&7eu>m#ubW$)d+e0SHAyZ>MBk0_1KpLL~f@2$$IC)cRnJ8Bwt@$0p#A#tZg
zZ=e1Xd|Nm0<d&%N-n$#loNrkgcXi7>mzuy!zWYz{#(n9H|G8KFYiQ&f)q~&X#{az=
zU$g4|GTFOdL-q?kiD%MFs7Shatt9Y-X#!i`gJ@Tu)Ln<Z^*Y^Oo4~y<f#+NT@4W=R
zcM1Ie5(M}X1?3X|{<eL>>n!A#C>ob2mX|1AmnhMfD0%Jb*VqKjIf*jo5@qit%DqdJ
zzxPm4ciF=`-rh+@>cyM+oRXBP7MeU#QqB9fP+iPcb6(PQtz(M!yaiY3KDlJ5yi7s2
z%t-arB2_6xRW^R^qRkr1l1$?sFFUoz@YO1lv}DV9k1eMqyq#cZb1vETUb5Z0Wcz=~
z4tyz&aw$%FDb98&E`BMlaVc(jDeiSC9(^gE^HS`esq^ee@i~{`doRWBU5fv|lmNce
zK)KW)z0_d4)DXYa(74pFywvcz)QG;+$a$$z>r$iHo?0(UiM^K^_bxU5UupthTB2N9
zl3rRepE7&Yf|NXk)V#E`x@W0<Y3b9_GUlaauS?5WmX^EkS?;;Cynku=e9!ab(hJnm
z3*DZ{zu=1w5wGkNFP}F3d&l$Yo8k>K`|DozH~te8XcC;z>^OlTQJ}R_f^(rj(>Vd|
zn-iM%N$^Sv_TH2bs?3;>IdNjAV3(Ps)WL~Tg_6Dh1Qj_aDN0V7<ta2#EK~jA%()YV
zv^`&H?VO}-DAm@$F{ACJ0q5jpij$Wulrm-HG}Gj?e3-fRqSO?J&KVzOE!@^Q$KciM
zADo+iPM+t`<y0xXqjC1mnX`9ooW14-*WQ!T8!k-Q|8PpcOA(2P?yWPrk8I@L|DpRp
z#?(U*uMf|d8Wq@caz@Xo6EbHX&Pn(vb6KG`>1Ot2gSl5<yuRAdn_ek)Cqwq|vfjgO
zVn_XQj=AL=k9%`GZ*J%--U`R%;sOk3zA-Xh$T@o~=Z2?vg(Abh?;X=G*7Y;(5U-io
z|L25w!^!^YYy3?Y`I|K-Fn>&MNR#N0e9>f<!MAckv)zlH!VF<SLC%T>j)aM#6JJOq
z3Q9IMbg!G(b4;)|Pf~uOq|(Bf6ZT1J7-mj>Cpk4NQ^%5H;X|QMeVH@kq&iP<7;o$_
zahyD7n$+sT$&-J)T(C@dra;yV3C0aKJMCU}{`)7qg>lMqGm)hMT`S^5b~cKv?wGP_
zo3!^q5ub;z*7<QCl<Yp(*u70+>JdxPJpnRX(nJq2^h6Y9AI|7GvV!qgLeH6nuVXIq
zoM-4g|8veo!MS_wrtPoez23l^7AbqQOqP9<80#j!{Dt$MX-pS?%3Ipk_l4tMze30A
zPcQf+i}@vY_aB<YZ}W`*H^+<`y&3;k<hHzg-V)isK5;_F&9_~apIiP3^k%;3lYIB6
zjp0dHo_OLr&V-52k7c|(SKRw9<2766gng2e?#)!S%$)D|a{fjkzKqO8n)ypSr3@0K
zzOH-OcjD#uWwR_4IW2BVE#P})#W?%VzRv$~uN)-5E=riaG(&pDw5*i@1+4J}tFLkG
zSvbY_qzI>dH#fV?hP>`WjxurO+?&63A4{An*)a7`hv><Ljl%8Or)Kc%N-I25@G)L+
zn&k8B6ieP4Ckkc4WpmT#=4r~kVEpv>#OlJA(;h77E1KS?lplQR8y`bP(axgpd@V&^
z8^ksL&Hw&Wqv6MfPYNHV>zto{oll@~VlLy)Px||Fjjq3KIyS-BJfr91gtoGVzMnJt
zI~$((<vq*G6W{rH%F2eR4=2u8nAd+SZ(^8`s^&{a{Y*{GFV6h$TLki_$91$9lzj2a
zUq17T$<9je`pMqYC$HhmTDwtr_5@BLiP``4q?d_x1<8MKcAT=@;X~;1tnlqwYo?X%
z?fkIs<tx8H?zR2hTNOliS%}8BH-<2N+tSw<Ay|0Oqi362q44pkqT73<UWlH%*b^_=
zn`zD~r9Um_{Ku;kdJjA+%(%$=P*J{MdS9mF_d9~h4>|ZBe%Nw*#+#C~?`7@f9~!=^
z$M<Xb_g7@{|GH8BujU}X7C(~?yTo6PA51Sl)v*;D@V{uDKfx%x;@&p_UdDH(;_up*
zRanGNoS68oyZl{``^+gHfAqeaIDMw%1i6<J<-fdjtDMUI-dTPYZ$YJAV~1P+PxtQ)
z9@{f##|zIj<D4|({p1_7W=`mw_TkGy_R>wB^$g-%+YG-h?ay+n{1vwT729#HHQPjd
z7nZJZ=l&-zvyqKMLNDP+gX4sRgH1+B26F@tD;{Y#&Nwl{;;>S$q-olX1sgXm?v+w-
zzNMkLX$h~4YW|Wf6Av#vC1X)^VoBs>wR1Ao8Sk!a{Jh+MzIDr|8-Z6cCdk{>X{7Gj
z^0HrCqDhC9;p@s!`Jjn*p<EBL|Aj4!F4vg)OL-+fGfPcF?(1)_xtWT%1q=jKI2w1e
zaY<MNIONCgcI5lAw_2gGk%dD@CT@*|BNOWcW%US$o10SExFu9Bys0#9zOYEPMJ;#M
zL1y+P@(ap7D13c=MIi3{y1xocES&r*Pu}T1EPuzjzg2j;L1RVh<CD|<R|Fh%D&{`F
zJbFT$t@GE{w~Q06PjGBzeJ^#aUOvCBneB_T#gg|I>YUkse0W^G;{Cz8_TRtkpZtID
zkeTCu;{$mP#hQeKM)oEJr$(MGfhG=qH;siHDj^aNIg}$j4sob<1UR*;Ofgv0p*$<2
zsZ(`EK~tCNh98eO4NqA-?$J7uq1>mwqT%1;KC5>>9`|d%xzWVsBDJ$=qOQWq6mDNL
zPUp#bTNqTQ>K!q7>d2Y8Qoxzp)x_DAKQQH@t7PgH!C4BOF3g^}+g1j78y;l2>}_&(
zO0b{(%PGzN)l6Ft2Q)BMiSUOQeiaK&^$oom+OE|VvMAnBH8VtlVbzOBpOZ_ka?h>$
z^>TU9SyzVGthcFJ@hz-k5{c{z6C#p(Y`@J&nGjhPnKCo?+Re1RUEf}3@XUEOYr~p@
z&!loTU)+|H$M0}KC;uXox=j8RvGO^EXES%-DL(6K-dK7*a{Amdv4rw<<@a0F<tm@`
zw$EdGv-0`8nlESB@7MnLy8V5<T*HNf><nBS4;mDB{$(gME9!7OY!dOaaB2~A+Viko
zs>vd$Lvx;mQkPEIn?>E~Ydn;DHC|LaK56so$KzAhTrZ0zYH@U?Of)gy`DC)6pXAeX
zY+DzkPUBEiVRjU3<-F)3I<fMZi+tq~HFx#7B0}D(E00|A);jC5+}r%2=VU&cw>Q%l
zSaGUOS>X1zA#9QV&e)X;{kH0UkMKNsSM=_*Nuim`GCO~nKWLa9CB8E2W9ap`Rhy)4
ztmcqmd!5vNc2~sO9a;^N>9aIH%uHX{7$)^%HRtPFSxfe}>1;l?s&97Q#b4i|w_KN+
zzP9jW?(W>8hp+7PcHW*VJ#W{WY0vYjj-LNLZ|@h)`SPE?e|+w^|Np;V>K_`ogmM-f
z;_}{6&?1oZV{faR-<^l;GLtIy9n;<RV^Ozun~%{+vt@IP`oA(us+@6Gd#Q5H%6X>o
z)H<`J5<D*6QBfR@d%jF)m(f-BI?dsxmc-oa(5sSDbot7IC8pDtEb)upeEIqTH7DCv
z-heb_ky~s_&3HC!Xw|Dx<Vk+v<Zv>eZTclHHlwf12Ufc3*{aOp_jI)gzWTI)%_4Ml
z-w&<uuTMiabxlnc3Emm)sb)O)=ACsG?6b~uYL~2#jLnWJ-gRSzU+K1oXLDlI*WTbw
zFFR7HT>R*U?yG?I@+YtQcJ311^NFXw;)9ca%_U}eUX}HBpA+Lg&oH-baP4<s{HHDP
zO{_$L-Ed8{un^-BgUW>;LOW{2f2VYsv?+bv=$~R(CI2TyWxveIH+8y)<InVjY*x`-
zS#O=)IAy_<(~Nvi6db)h9A$)<S(`XBlbaNb&QF=hxo)Lz@a!n>4cCPDubs>;KjeAC
z>&0^6c?JQQ+FTY_)%=`R8q9ed^3d|Er{7jVuHXztQJcq_=PNI5p7(8!y4~lM=W9Q0
zp8xNUx&yP;g+`$*3)pNmoP<|hXub7$u4Ty!1|_YFok1lGj5{)1jaLPBCY3Cf`>Wxh
zS#^=2Wy>Pvxf$->t1k5}D_JUOyVBd0>vG4rD~oh>GkxQ4U79$_WSQMx&4Bt@muBzU
zve>2f-%G##u1ib!N|)JueG#0wDx}ZMbh+c*7m?GF#5x{rS#HbvDrCLZ)&3-tHCCdp
zz0OL7Y;D`JCQfx_;NDqbJL;w`&EKjS^?6nJhFx3Nd6d46T5A=0;F0ON3f(pF)2kv5
z-TJb+NA`7`@hj%txuH4|Ggc?Rv<f?1^lhzys!oO}cjWF<B^wvnu1PYlzP{txmX&H}
z*JK7(hpn1*ZPk{yI-$a=Z!DQ~b!$$qPQlkxmnXM{Z8NIPDm;5CWWukqt>;v8LubCe
zzJaN1$Nsr%tVNez+N~6}b@A7Ag_BR;z2fwJ=iR^WGLCk~9TVER^TAb(eBRr)Z%B#m
z-QAiSeOCI;-%r~&+&!xMuVy}X!lh}`4m=3WZ+N*n`qm`#gI7)U!gxa?Ws<fXc%J(v
z_xSAFJoyzXxu<2t&aJvN+imK>-m3;3&M{Zd9GbT4a%pb<^xKImsw{RH>lM})?+KUa
zmN>+dw$|hG>%<jqTaUPH%gqa2^F-zG^>v@VZcNeq9dMd0?06WT-lX+wp6V9wJRSGX
zXvSfi@GVK=?X{D=N-wX8d~~VwY?j-a*^haiTYjH<E_a)8+v_#Yt>0UoulcumKJ(c$
z$Nf9cH`|pgWbDnbl(xFqlD1`$?A{C;|6La+)R`<*UHj5I-0IStdnL>4b+f$Er{)W6
zEm;xV`zo|L>gw7w(`AWwUq<ZTb#2SOuWSAl^JYc9zjbYwoay?;x3A+K&$_X{taM}R
z-wfHXZ9&KCwr%Q{%}MdDzHzb5Z0knbx4F^Qx3B-(w*Bzgw<+DbZ$DmVw)1q<GfwZN
zcV3#A@42s=UvfG6_Q!SRJI?36uY50k|J}Fk`##scugkC66gAg~k5jLpPG9B$bN-G)
z|7AZmc*{HzTW@hpbKS@G^q7lF^U8LcpZn0)AM=Dy-}1Px-Nz}LWuEHUTb>F3S2VN#
z%VQ4r;=|@u(|5n9c`kgnQb6U^=MJXWGj8@)mnN_KvedZt<=<oLR&Mn!?ENIOBvifX
zLaW@D)%*>weg9kCIIQ<=<K(+97~{WBnLGFMI`O%0MRKjL)&HAUx^utnYlr>T_dc)t
zzW4Lq_jUiRA293xI4HdDLz}(LBjNQwb|=?<?5nqVqAXwW{?hGd>HFSX*&bKA{_x$m
zQT#8Tsp|i_IC<ZfW%jnO6z_jMwtU~$b<_X63jLj%c3+11uUgfc$9Z3OR{#54s&D<F
zS^tlIe(jHA{h1&CXTLdpS?=-b=e5sYpZoga^xfCT_uGBjy#CUY?ESy(&(|K%eShJ$
z{r%tese9f_zYp5OUjD*i>Az`r^Z$K4{!jNC`++}4=hf`^u>Ze4L&FkB+1-h9$EU{s
zTRY`zpzQnH`%JGwnUv-~TN}^3?>>v%0{6G~|L$yMt&9EiSDvBb0sA-kf00tRF3SD<
zS9qVTF62w$y*nT8FfWt;^>ZHgtypHic$Q6b|9Hl8Z@bI0Z2s-mdC$Kp@Ps9BNhPpl
zB?xNCvQ;T?7%4Io&HCXP%eW{(C@q9((*pju2YmnJ1ma}x+<fqU<pZXqh2l>4c_%HD
z43ig>Q(%*O7#@;%sdNE{)kEnhskgEBIG@SMgiZNcyYTnZ1)_Ni`HscDXiWT?nyAqB
zP*G2b&nQVbD^_uxqV%=-()%9DN!=AXr}*Df>a*v}&w&qB+ZJi0#Y^vcsL?c2rftFh
zM%NXtiHFw8YRp@tb1vz|)JKAsl%}UH(pvTCKkI@ivG>$pDeCbl8zw2Kh9wzBMQWKX
z<Y<fH^osl^w{M<_pR#G#V$-<fmq+F75|z!j$*Epa)VEVy=^62sHQ9WgvemN1R_h)=
z&U|dUQQ1aqo>|r-y={;5`{Z@Fl8xRe+drG3o0eezX}X?KGDp!OXVds+FOwbgRGita
z+TV+JcDrWO#A<Qt@xh0Qc3z9*xE_9cc~3M;<?=-ZrdM(AUrPMpl=b{J-DA~!R=XvC
zU7y79s<`GUE$2+IR9oV<>>+p5!_RA%D3#sx3ySqGd%}BciAs@*Jl|4#t<-=?j|^ui
z`8>PovMx!s>Xva-m`PM@(61?qLW}(Wsfc%_sBkR`?|S&0RaNX;jKH-AfnrOU=BWxU
zk`Gc-QaU%^d!K8F*T1Lcmy-3J6fK#Q{jyYJloCFMD!Bhz7+Ll(eAyG_eW{7NRK=g&
z^ZWKtep{-in_9}HrOKZY6OGdT-BlHO_B7Nt)gtWarn`$5r7Y#T6dQbLZc5+73qKVV
zoEAw=da878Y4*DWNv=hC>k?BpCB&Rt#^ba|tZix3zBIw6wCIjy5htH$Nu`v9c3E;Q
z`><6lph>0p*3;m7NoD))+q_G1z4b8u(c}FO<NThfl|8x_m8JGU_gU7rd8Lc4dag>Z
z*|hxJ#3cn;^NThmmCw5$*QD+nG|QLinTXbt+Y8kL*Quv3N~&6vl6LQTbKkPmeGihY
zo>b0DZ05UP7nM}6biZ6kg~RHx<3Fclw;=V`jtjD<Jx#r~w2Lc|r%5p?FR`a-Y2msT
zJ?B<*u_fiWt>C}5ye&`Np=?Eanrvv>V#l~AD@9*aUdl+4dXX5GmejShnkl_7Ory1I
zS^6@K+)XbMtd<3dsb{k-XZ)2>%B1PSrTI5i)}n3s^1F(a^JZ7h%9z%)GWU@J@4IJH
zZzas#q>{(?ymM2EKwjqgugkvhuFAh9TPU}D!9LZZWe?gO$<OLjnK*6P#9yf;ZF44_
z%Dg#orBPbOl4&oOC_P?2O(b*E%S@%rtZ6T*H^sHBd*c4@MOU0cU6mHA-?KShPu5)0
zx@r4r#iUpDO)D&<ZZ)XAJR!MYjnT?ANh@lP&HuMNY{mLd8mw-bEyuLhX{}y7>!tU%
zRbi_%<2NaB_GyHzdbP1=W#qRNTlH2XdugtorM;CeaktU4lzG}a|1C&;rjh<kq3>SS
z_m8W#t$Vg)U1o#SEbXMMjmI7}o?AU#DlJecZR)Dky@#GHoEAS{C~2|LDyeg?kNkTu
zT}$g&lIHSl>f0Wr?pMopVa&1ZTArGiQYrPi_EK7NUYyvc2l>x3bFV$^+opZyUuN>N
zHFL8R7v?=XDz`kZY2|4y-9t(8`}@`e{L9|%w0ve|Qo_2d54CITU#+@i7JDh~ZDWyk
z!@Qi?ed(*#tvOhC--WU9<}ncgmn%2<4%`X~xy=-RYg6u>X(4yE{d;@+*^Ha_*4|$A
z_Rg;<_uhrxJ(qj$Rs4yzW!LKDFPG)Ub7^D+MO^7yedm|%Z8yEAyK?Ur-Mn8Hax3rM
z)2b`a!q&y5u5+2Y_C?*g7j0Kw#!Y?6_HLcnyCS)F*QVucpY?1}?9yAEYa1u&-fz;o
z`|a)RNqVo-LS7cVd$%t4-mSIoh1NgkTK6gM%H4T-AKtBdnw9rCOXSn1yqj|QAIsi-
zN_zjLPw#u%lGmTq-&ke1h^`ct%e-Qlx6CW|%PNtVe(OG%t^ek={<GHm->=?&c3S_^
z?cE1Iz0YOqpT^~X|M&h?)0KZ!@BeCT_<t(@l~U}rY56P7luxbGKlkw6q^A5IdK><H
z%KQ88+WI?u>%Mjw+-ECr?fmfj-1=Kt2A^jYaOW3rZ2rJ-U;qEQ0#5D?Jip(vN$daE
zmbbzw_2;pd3=8rPRLSh{dj5FZnh&-crW<~An)E^CpFug>M#fn=9bM|H_9?N=&Nvpd
zQJnedkD?3#>-42Yd8dR{@87s4pzNjic0;W;!zDo<S*qVIzWI*z@JgxADHnGc$~SKm
zVP7fp|CNu}lK3>kgUdeNSfnET-B5Y9icI}SnfQ;_=M~;~RH(Fi`ChY4YTNHCR~t$$
zU%%8&cdF_~sr*fv@sTWt^Hi!|UzghSwo`k0<aH0(^*Zq)y621T^<6plaMR6eoAm!1
z8L)3Q;5RlD-)tyv{Le^zvyr~BvH50Wdt(##%_i&&g2J05qYW6va^5|gq5r+epn9_|
zGo$}qSB443dj7^%%QsuCH@4os*?PaR&2eMnXhZGm9|iA!+&fd<w5?c=oxvhr<if`*
z_Wz9?*bf#|e*UPo#Yx}9*?fz$y@`wa78idL*YGW_@g{ERTio(Z+{?GP*PD3UFEZ6%
zcc4l4x7ZrfTbt~aw^;Ol)|+qa!))x`ZsL1=i|>6Czvo;0-kbP;-{SuJv+G6Ux2tB(
z4lA;oEgP`C#De>?gLbK7w7BEx%_07#q2XIY<4wc7w_0rf;=#UJFh0v{`NkP5w*=qc
zq%-@gm%FLHb!pi4t<n2UV~+pZ8ngLx82i^ZeF@sho3qlcC>&<x2zw+r>1z!CHf!}Q
z4%4?r{omxYxY%CXI4Zj|NqAd|a&c_1@zSPGru+{|vO?nPAH*|%`^)()rN7L?{hQ<F
zuLiTf8LckM$~VnA{Uux7ID4{L?tIe#_J)ARTWy=a#)XHZmv==om={!=6$+adbeH9-
zo2Qz83zGk4x!TM^dRy^&lhW|-CHh}|+_yz~m+QNmCxw@nZ!f8c-(EDmTsOQdeD(UY
z$)8;QeoN;!cis0rUU_@v_3cUf%^a)CvyYpUb#KpJZ(9GnJZJLu((mOB|H~VL%Y$#5
zH=qBM`+S>i&?d3yqIbKtFF*1<KHj43Up;HB`Hpt=iYV=`Wt+Fv%{TLIHZSJh(ZO#~
z-)vF5+*DuQEa|*Ocm0l(#otrKH!diBq_JH;zFQ%qxvc%R#YFL)6XkctgqyV_Z;U%!
zq<MMuG_UYfWy`7IJEz9)w0dk|`+HG~ywSF&AH&j$0#!|?P2V|lzU3_KZ_W3&c6{14
z`Sr%V(-fy<%SHa)GWWjayyrXTy|<kIedqk_%FAL#X8C4Ml$Oq!uX_9H&-waRi_Lc}
zwzpd1Ugf%e=c8+%7m0ptk^idtTKNcHZX{pjtoB_i`ggT6S1q;HJ<<Agdj77fLN}*O
zwpw$1*BbwAlQvsU=1<7CxBSg1I+J;`<L4>-EWce@t^aKl-@Q@ZdXu{KM*iKKw5>OD
z|K4oAdyD_>jqcT3*&FyHc5lhH-m3oFqttpw`|ch6);p)~-Z|fT*Ye%Ff_G;uFZVTD
zH@#VUhJ4PH=6iP<e--?-+ED*{*Z1F>lB+lJTW|mUd#kneHvXE;$~HT+Z4R36Ic#rp
z#C^{Z{hIaqJ45e%*3RE}<=m>KWg7eXKkKLeKFGZ1K>weDPMcGUYqr=|pOmgS$o}U<
zca6ben=Q+0PFMdvb$rh$=9;sMf1mZYxxl{n0>ACW&DHC7|F+m=v`~BFZayW?x;=XH
zYtG!SIhX$X-0eN*zSo>mw>f{^X7lzv2TuPv82|VB>p$n^t*@5<z52g;*ZhCA7x&xV
zIllMK{M{MRe=^G|j|Eq-&3=7eNc{@)my^}C*FIaHo?P=V-*$uZ?pw;$=gMs#ey(|x
zTzga5Zol!r2hqPDuCIQ2-u8L<zUS3-yPxkcoo*7L|93KX`1=2w_SM_HX16`O-R{lt
zeQ%D}-Mw8E_xRWB_R8~Y*H&NOv~T)n@8Hr8r#D&7{=6nS{Nw+B2GaYD`2T-Ay=x`2
z_H=%$>eqGR-am6!@AGEfZ)j|9TwT9!vhff5`cLwoe~5qnX>Y&sdeu_?(m6K^?`8io
zOE#Kve&<xT2luCM_LlyC*Vgnuv&#eqW@Z+_i~<Fx7FK>Pl^qijT-w+ajplf4T<F><
zZCUo^$3MXokBLHtaZ54^7do|T`G)nJC`$2}X`Fd&OQmqS-$Vzd4?GME2e=nFwTsDG
zJkW4l!Z_g{$D_x`xq1BRe@xg_qIr2q^yZ{cD+P`ljL9db$x2UK<G3N?>NeirV()G(
zwW+Nunejm{Zj$6zyC<)O((d<Z8gJ5>6P})QRFPBM<)`?k)6G)mY;iS`#c5|}XJ3-_
zn38c}k;C31RS(lwR}?~*&MI3gYL>Gk{phT%z29_>ZrW9Rdg|)31?dwi8I|Yl`2Nmw
z{}JtJGJAxo5)K`+44-~;$NHi@0#l2Z@4H)7@$vD=<05ueCK(Lt_XcfU^~?R$rA<@w
zmez;p<lWBv{{8!Y`yK!0Noe;UVB)nAILIOzV_@^}iZj0k!?W4vHCHStTEF$T$s7aC
zTVG!L+xOW0;dfws{prMx_s5F;)Tc|-2p*G2oilOsXP4a{-4@>PKGl9T=&%4YU$XF~
z)qgzJtlh4B^^^VqVfM*AMohYkCn}4t+#_^aXX~F62QL=&Oz>!`O5xpirA+3M-Flml
zBJ+E7hjUNfDakH!*l*IrdH%!#8Nb~&@1J-Z2!0Ln46xsOyZE$=Xl#k2wEUk>XO_+T
zRk-#0p`I_Rx8Lx|b}_H@F4D1TZx*t)7L3)ie5-Z&^0{NPyi4_i<h#EHoLrM4ay_Q>
z>Pl}J`Mo9#SM=7HI42yAnS4aR@Rjbrb6am*@(<bV;X8F_R^VPSSBKEliMQVc>6GpY
zTe~;odeK?ia5eY6A^gD#t-MBOD=x}hI+4=9=lZscK%MVlC4c{lKai~UJ@1{My=01y
zkD=?g{rt8^uj|y#7rDN!?&q3_qi26@z4S<Yq41k4F7|zyPc+shZ}ggw`O0GXq|mz_
zvGKjPCb-MDt6q+%?7ng(&d<JehfZhkvK>jY&DcWrEH0h9=E{WA$vcgXFYxnt)ziDJ
z>eTdA$1-2dnxS`daij8|&~(F2-OV>PiLcxK(Clo{>6@t!#jLUx=~{2u;TU>mc7WjD
zdzUZlU3vKT<8`LhrBPFT*BWhlnRWGd(uwXetHQ~;%m0aHNA!RD_9@3Y{!ejJl3K);
zGWESTgSKWaoBn)TZJf}%ZTF^h=S|YuAN~1I>GwNV51p`mbN<29xT|@q4+ozxJf`{j
z+oOA;`g+Mv8teVCE_Ax{U0XEu-z>u;o36!uc;zhqHE`4Ov#(+mMB{4Bw*4*M5qa-X
zN%qNGTepece!F7p)LSp&OLzKTygB#ZCQ*myjn5r4H_j{G_0{O#L;u3#Gey5na@S+I
zr&-_gTE2+uh5f47fJ*)^Q9ra!Y`WN+o0eEK{p^F%eZO`H*sraYzi^LTSNQ75V#dpf
zJv{F7<lcQy;|uAzq2MBQRhFkTvsv-?j7N3?Q&~9zrzr6@mmLmFHR!Pa*YlugiOZn~
z#f%gg<9j^^!j>PG_3z-n`N(4d+X2H%Pg(>HU6~;;ZI`Ol>CWGhfg&p<47I(wGjyvT
zf1R@YsLrzq?a{mEC<=deez!4j;`Em{zOQK8GF9^Z#2y|_!Tl*mRQq1qzK^=U@l%EL
z?GJ@IK`yG10Vmz<Zu$2foh|x7K;1Gp@KQ?K$J=_0*Ddswv<jq>&%NEZc`qXuSIQ2a
zDXN@1k8$qGm~`gPBNk@~4=yWX^}-er;fWmb)@81x!dg#n`*E^_%@Xc<mb29AEaz!{
zFTd&0hv(|>N1V9p`Ces<%`y{Z4~v|l-pnhX&q==JJfB}Uq5Koi{ggSJXBo`$7fw9#
z?*;?+OdH>(mdVeU({nDBZws8(n`mruS}VNrTq)m!sr7fl+2o_nvvpl)Ixl(MVe@f^
z+@%*)ZcIAosyV}Uu2ezs<ERwd_1h0}YfWfiJ)-0n7#5;eCeR)KB{OZyNxi&zZ(}WY
zKei~pd|Y|w<|YS`*HbI1b~yG;b(7S+A?W|yS2a&$oqo=Ip7|c<%z9tgC#<~|x&GvC
zqf=YDJC@Ah-)wBL&*;Va29=D`Sy{V3a&EQ?^-a9_V#X1%W2IAKo}Pa_<*Aw4%95mQ
zYtrIbXGNT`eLGz)c!|WpiW}}-Pqub<K6{?@`tadp-VTf!_oM7PL&fT@v?{LE-fZ>S
z_}n?w?F~L!{|wqauUxj9md|@r)rebr&lSDPyC$&Co$vPhj*ab=Syw~S^lWdK<n&#i
zZ&a%HUxO>Uu4`4t?U2Oi#wDR=%qFg@DvAEn#jW+kDl>yE_MU-uc)*KaLaO^`Kefxu
zj)-)cw(!W}m0wlPJjiScIK<`qB4qZ?J2&(E7cEJRELs0KPWzphJ6rO?Uo&=W`!nm)
zj-nv3Ij`7nF&q~;&c>tfRJ`iSa=#rL^is2!HM@cv_6b)pxlDcV&pnazk<dy**7bpm
zyJL6`o3#8EelykiT7+4e&!(ljwPtRTI#-Z2%`EQh>fYCFVdkGdY|E(G+|yI@sPyBv
zeRoqf);{fuS6O*;b=A>NSO4wW9>L2tZOi|ZoKovOs+axFTsXAl#^SrbpFYtsJ}1bz
zxo<{9<o392=V#U$E>Ki^A<KX5<h`RyI*pC@xNPFOS~Slycj?hrf=(sz+veSQvP68(
zkrk##S1~_5d*(`#T2;oblVRUB{Xdp=JW6u+ml%zuq079}z8mfClq=X4?VG?@K7B?#
z)B22~r(f;)`L%MUbbQrr?xziE#+QX|eyLiQwb1|bOxwcbZ~K0}m3gS~eWv-_Pt`lQ
z?M^%tp3nHaZ1MKoIM02%5B>bTp_M%@j+c8&i`<d8RsOas1XfSK)9~41>)FZCBJFNR
zKW@}1c<hxmz5Ue9@0*QImB<uzR{vbd!Ln&b_dlDI1-CYxYdQDh*wUWQGSah(4=?^S
zWigkdjCVk@)ODj13uQ}rw5rs1_O1_o?wuy~sM=Xyee25SG2d9GZoQorFR~%<Tv+w{
zn`g>(ZeM$^W4ycg*M05QZO+NDskieaUuTK`d9c>_z2&+eISK5)PX<<eKi1y%<_gQ7
zHKn?@Ukk~7o@p*{`=CnB{Z%r|I{c=>FW>#R^w@T1RlU`2cAF=cKS|$yU0PIie0AmR
z`*HW8-Y=;+z3lms<A3)ZNc!_qUVh<;^TAst@@-EPk@0WcJ!|K_V}HM_yf1jJ+UR_T
z|BQ{I^F<!j*Uzrxe|xb!FZlbpl9yh~mR($#{jV`h{@(}lKQo+v{wsaZANQkF{qDbR
z{wXJp%QG+sFzh_?<jeZc(@uQfw*L2%KE`JM(j)JWWxby?%cuTdR`i8;@iKV~<^>%k
z{U7=Gzr1?=&!wNG_w5g@^+#&X-u8I2k<FjkQh+W0(Jz%FpZD;6@hV`H-N5Lo{`J`U
z2m8)Ga9A;I$=Y9c`ky2Ta6ZibzGL0@7q7pU39!3gU`f`S*3ehnaqhsO6V=-a9v0+p
z?9t<#Sily%uJ0b#|0M?O=MBshHk|Ey#kBIwt0KOcxB8j716CX`;7Km{w`<)$2Yuef
z0$ip~{(qVvz+KpW?84hq248mY^GX{E+`J&594K@&i(k|G_dZYF(g0!OiNdC9+139E
zia1}47udKxXTyzu69kzBBVIU7jk+irFDRBAD3(4^Ec>EZzMyz<pm_O2@#>4>^@0-3
zffDT#CAtm8Z7(qRK7Tu}K$vl(<njv=ivy*WPn24HQEI)Q^yWb6?S>NehZ#2Jf3fmn
zl>I0fSZL=WD0?}uz2kg|&qu8j8-;^EN?x5P_xfT?TR)rN1<vDvq7N@hS_=O85U8-f
zkdw1W!FRoa;3tKj`U<?46h%KNN*XDu7AgMDSJK_2BrT+5K1oSgNZB?>*;3cX#+T*y
zMU~SR<x9C$^o>;PCn?8nQjXuGnm$Q2+ekULNHsr5y?By(s*rkZk$Pj1YGdk+3u%I9
z4ORb54ARap(n!9fnJA<+bCde~Ag$I*S}Q-PZ``E0*hqV4k@o5!ZQCG8(Ll|>Pb!Z;
zYVQ`(*;}M_^OM$HBc1z2y3d1jUmNMZ-=zEUliJCGr%w#!PJhzhdtUEzk-^hV29Jdd
z9|jqIon-Lwl7XzTq2y=7qm%x1yp=uwN!~cvS)tgFf3vY=u#xg*W9QGt(w9xtg-u<B
zO+Fj`o+g-n#Ybt?3ww`dlRwNp$Mlp=Jkm~B*ZE7?DeJPCs>_?U$rjz0E&7EmCkI<j
zpKLk%vSojZiZH)f^<?vvm(4PQEt)Ss{orgq`-FAsVe`$C+ZsMwp1y2zUfA|>u<iB9
zwv#t&Y|gUUDg5tQ+Gq3QOxCBFEZ%RvQnuM+LzBy^%XX?QHtZobw=X;Ji#Q60IEqhk
z{I1NXn`-6VV#mI~?BryfPr(k{Q(T^GuKm!gedx25?i2^<DK6euT>M2`gTL4>`fSR4
z*6Mk%wPA=2qlm-zV)LJq?VZ1veVy!-Z|q<i;@TYI(LTkaTjavM&#yzSIQ35PoPEV}
zzKECq7sq%8tyNdNRzLEpRq);};=Mb>d+!#ny&^uVoqP^Y@!l`ud)CDJ^cSD2Q+)56
z_#OuhgZMt(;`j23-)9m3?_d0Whxq@U;{QJ+fO%>F<JAE6uL0bmf#RWo(x!p(Qv(&h
zdLNzWbJoOeL6eWMXs~(L*C6ZAVB4v|&Y~gqSA#6S278u<xPA=@of>L=H6*??B-}JC
zF*GcDYFK`0Sn<`cQql18tKrq65tX44^`#NbQzQDXMoiusF<mrrW@zN>t&!$mo#Gmz
zR$q-;FB-i$G<y5g=-pSN_lw3H4vjfJHRklynDe5smqTN(PmR5OHTJ$}+~d%==cUnx
J3JMGi)&S2Z$+`dl

diff --git a/docs/images/scfg_xfer_proto_dsz_h.gif b/docs/images/scfg_xfer_proto_dsz_h.gif
deleted file mode 100644
index 269143271efbd49561de706ec1eeb78f000550c9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 19769
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
Q_Y2BQ6l7*%VqmZa0NJvZd;kCd

diff --git a/docs/images/scfg_xfer_proto_dsz_x.gif b/docs/images/scfg_xfer_proto_dsz_x.gif
deleted file mode 100644
index 7bab96dd5e26c7aebc16a1c3bd4bb7049f594349..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20246
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

diff --git a/docs/images/scfg_xfer_proto_dsz_y.gif b/docs/images/scfg_xfer_proto_dsz_y.gif
deleted file mode 100644
index e1b1913cca073e3262ebf75c0cc9fc9d3021da37..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20716
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
I6c`w+0Z*@3IsgCw

diff --git a/docs/images/scfg_xfer_proto_dsz_z.gif b/docs/images/scfg_xfer_proto_dsz_z.gif
deleted file mode 100644
index c8e3ab327792a08245f8025dd723e7c57f5bb37d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20646
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
F0|49pS~~y$

diff --git a/docs/images/scfg_xfer_proto_fdsz.gif b/docs/images/scfg_xfer_proto_fdsz.gif
deleted file mode 100644
index e6f010fcaf91b22a091081164131ab4204eebdf7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17301
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
TcX#FYZ-1qKWb!aFGFSruYDPRd

diff --git a/docs/images/scfg_xfer_proto_fdsz_g.gif b/docs/images/scfg_xfer_proto_fdsz_g.gif
deleted file mode 100644
index 5e57ba485d0610ef67ea7e16f9475de6d06b34b2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20627
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
TNnb44I4qe}jG2jvfx#L8UE1SF

diff --git a/docs/images/scfg_xfer_proto_fdsz_x.gif b/docs/images/scfg_xfer_proto_fdsz_x.gif
deleted file mode 100644
index 4aa01f278648d8e5da61ff925d74ee748d255f5b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20293
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

diff --git a/docs/images/scfg_xfer_proto_fdsz_y.gif b/docs/images/scfg_xfer_proto_fdsz_y.gif
deleted file mode 100644
index 1c03f037f4b0c3e486eb3e780af4d7cb2340e195..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20612
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
IVqmZa05vE7IRF3v

diff --git a/docs/images/scfg_xfer_proto_fdsz_z.gif b/docs/images/scfg_xfer_proto_fdsz_z.gif
deleted file mode 100644
index f376a12eb73bfe4b22d772b5286f1174950e61e7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20627
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
aEJ=M@lJ>PEeX(TYuw+&-W+o;E25SH)fh$Y^

diff --git a/docs/images/scfg_xfer_testable.gif b/docs/images/scfg_xfer_testable.gif
deleted file mode 100644
index a44d1270f1316f1d7e626b858409d7ff1d4922df..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17503
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
XKSE~=j>=3vV|3Q$vnLM|6N5DX0?vm$

diff --git a/docs/images/scfg_xfer_testable_du.gif b/docs/images/scfg_xfer_testable_du.gif
deleted file mode 100644
index ba61723b02f812afe176b4bc98294a27b9c41cea..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18580
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
Iz`$S)0LgY+4gdfE

diff --git a/docs/images/scfg_xfer_testable_zip.gif b/docs/images/scfg_xfer_testable_zip.gif
deleted file mode 100644
index d09a7d82fa6779bd471446d6c427cb0f8d5e1bdb..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 19211
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
G!5RQ*J-Pq@

diff --git a/docs/images/scfg_xfer_testable_zipc.gif b/docs/images/scfg_xfer_testable_zipc.gif
deleted file mode 100644
index bc8f1856cf76d3b70bdb0e38ace801aa7b017665..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 19185
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

diff --git a/docs/images/scfg_xfer_viewable.gif b/docs/images/scfg_xfer_viewable.gif
deleted file mode 100644
index e4be449c4732e42e4d16f9ceada8b115785c10f1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17007
zcmZ?wbhEHbv|;jQ{LTOYEes6*8CqI66tg)rvjsq?SirDY0)(n1EUOhks72AKMboK8
z)2l_(tH;o*$1teJFldTp&=kw4DV9-loSdATqUJay&+!7GrC!-fgR++f6)z1cUK>@s
zHmZ7URQ1;6>aEEwTa#P%X7}vP?m3n{<yi5QW5sih70)?WJ?C8Y(sL~>EiFsWwJg2X
zvi4dJ2;J-1dT$B{J)g4o`JBDa=Nx;#^w|5Q=iV<p_x;$hW7n>o`~RQe|0oy@0dhk?
z2b2RqdBK6>A4C104~i2W9BAU;*D^U_ka)P2PuXeCj}41lx<&M}&YTcje7slQx=BWJ
zQ_6|SDuJ_nP8Kcoo@x+%tVVOQ+S%F0#s3a`Q08!CVyR(}@Y<4bQQU!BKqH~S;qr1;
zJ_!SXs|_K{9BYznCnRJut>f6I<{?m)!^Fxd))TrQOqY2ZkB~ux!F0#FyZGKbyL$Qo
zBQtxQJcFFhkH$of27dd74HX+%jti)`%+pD1YB@dCIC|cJolZ}=gdM^eauZ8lTw0+W
z;gG9%_|?^Qrd#H%RdjxPdxvSxg|!R6zq>D6Qhvi=PeuD<X`7OOeS3bkKRsn%!C)9`
z)xm##bNhjPwk#Zi_nrSWh$}k%>G<^AvqNHGolED}_nv$774O$}{{HU!K!4$Xmiqr{
zKhz&^vWR6UG-?Q}Xlhc|dGVlG%S9uxMcXH0A(w7K$3rg3Z3h(Fbz3x&It;c1JnGav
z!qCiZFlB`jkJhmTi+Bvq2{8AXJ<~YMV|mWuFptrnh~|D{9?xc8cd^bTyrwq}ESYR}
zCxMyIFUWE!ucgmSRldk)2bNB^Y|&gc!|F*u+Dz*w6Q1!|ZP<BucJ98PYW&4)hL^Y{
zZfH&kbm44y&S!H&^U{3lA15dK+cRucpI@Wo>L4(|>C~0Q6WJ0OmPC1mYA#_{m@qXW
zb*k&N$mEq%!=ef=wra(e+`alL?%#%QU$4iv3Wm){>@pQQm^9H*?dJN4iD@&_rbe<w
zWz1F7zQwY1<+C?gtM)#dmAxfW;r7;Tsk3kA@BO$fy5NZ5^2Wj=isdrJr(Bn>E4j9{
zTee)j;`&^UkA3QLRZr$_pU3fP@AG*apHH%HsQE6qM!xQsY>iWcs*X)U1H0QDg=Ri8
zj)yH0@ezsbGI<t{j;plwJnB^6^&zRp;F88;9?jzml>7BQdmQd_66#zs$xH6%lXIa?
zm8w%?na)0)9^WUKHZx6b?XydHX1eNg8}@0wSX3+3vV2|-U+Ri0ERrn&*X;$Y1m@Wa
zwy3jZEMNQWR?haf-)<Ki*ZqE{<a+M+yA{vZe*br`=KI_4_Z!&temrOq&)f0Pj>F4r
zQ3c<FACD)v%Q-MG`~3UyWQuj(&Zkp@&;5Khv$$^O^M#YwRlZp4zRv2!^74DTUMyN}
z_v`tx-F%j>*Lu&}`FhLkbye@yPye_3-L}Vlzdy`4U1$AftGxZ6&llYF|9-g=zQ5+x
zvFrb;-yc_(xBa|t{l4lCPd?k(eSDz5zxvz5#reCwT~xRGwlFQZ;pg8U&)5I|_vicj
z|Nj|y7BH}T9AJ|A(7@rdfJyws0XC}-jRHLjSkyfZo}8+i^W|^?tNDq8d{rNs6?hhM
zxO*HDnkCR;JM%v4M-fK_mIJLbn3;I~svrJ+^+Vl+Q}=oOPaKx}^`ZTreTgE^TK6ML
zQXe}!d=`CeGGI_ETi4jR`aaiNc1J~~k6nf$k9blo4vXI_Xpd)67XP^2S-&i>J>5iE
za<_$>R9;~B<i|?Vr#0Ml=3VGwJRvoI%8BE4zdrU~NM0oTHDe0HGJ)pcoQK?RPn>YG
z`ZTfZh_Yfg(+RJrPm^3kmONJT6mfo)S@<<LMM}~0RM4zXQ@E$7s53U44BPc-s&CIz
zhA_?s1~<WpJ&PYPf4s3@A>kbRfjKe;?V4v2*bcBCm04yq-P0#U?(&RNd*luKBYhIX
zK2JY(WSQ~&oxXWSpJ$)rQMZ_=c`mQ-^PCqx%dM`TJXf~s^V|<T&n+JBIAOC+Xxfi|
zXVm3QEl-D5T?*)2lVn@H(zjCT%K{GH6;9%(F0@&FStwAtOv`fR`L3ufRezQ|wXbFH
z;^iut^5e7Wv!V{?_(@Ziu$)=wsos8xVMWLi{nVA7iB`cgU-2(BlucMtwKHhqEs?1X
zdmp)|S6*Bs6<R9!Rh=RKW}sNzmwG$d%#iY^OH4smmxiCsT<Rrtb#_wdDqY@H5yx*G
zSSa*qMTTiskmXPRn6^(V|Gn0VeC~C9SJ8zvRX(fZw0B+e%-gbZSBZlDPxGs@>b@>%
z^G%4@oONTe(6;5FTUV#3@3!BQmb-pNYic}a=II!=lIhH<IiZ5lmsh_MS>E$kD=a!I
zYW*U!HB);3t&P<^z2eL*vB|TqCPy=Bd#yP2ZTkUUJ;~Rer*BJ%PuO|(R=n|xkPA&B
z?TeSL%qm`WW8E^bjXJe!ytiwIKCCidvE}aL!sDxtJTY3eIp|Dk{$r`TC*;D`71plx
z-<oyn+B5x)(SO&~c}vDEp74FYyNUk%veS1COf%i`yZL>c_?ZN^Z__6+^clFNt_);Y
zHeoSqoWA4k-}fe{i8Xe+zAZ^yb$4pfj)NL}N`>z=ABwsAA83tPm421`I`982yKl7S
z);zC{owX_K_=TzYUF~-cvkM<R>LDlB)9v)&JeSzPIMq#4mdiLP^Q)eWXuC7XI`g4_
z+Kf{Pe47ipXFt`+uhe)^y855H^b3o+e|;MI7G86n@-&E_xp}Uvt$5C78xfn+mFG&o
zZJx*2o9^)a=7pwnQuF`kOmStGy4bmF=@NC{mtN7oF3mW%WtsWeM@H&D&uo2T<dAvh
zS%lTcv$fB*tO`H-Ds1<!s~h^Zu1UAe^iP(&a=P>r(`}v84q1^C{8~bU8*{UgxT|kW
zwEnj8_MV&+<>;G7>h5fud-qNJ|GZmgrj>1&T>Hx7Z`I9v+qUjF?whyeQPi=Qwb?80
z{@Ih|AARF}pZPZJqi+iMci+CauWZZ1-uHFQ)%O_k%MPrLeb*%Y=YhNJ_y2q+quD>r
zdT`Qh#}ReEk6pnr5C82hIDGx?>#}I+2iLBdt^YSyw<u$>%oEw?+xCUddpo6l&yyej
zb{zQq_wB6cKhG@oo3>8<WxuR$=3{~LJ1?~ReOWZS`gxA%)>*SpJ1n;T`!b+^m!0;W
z0{z#!nzx+Wb#42(uj{J+zE0rZedD-YLW%y}14(|nZ(Tq4O~~la^W6U3cb@xwXUURz
zS9*T;z3*}5^W*2fZ{XkaAo$O>{rvwvbolQ{d2e@A<(OaPig(Y|A}zg7#8!TqwEo`X
zx#Byu<Ntl`-(B;?Wq#$E@Oz(^E|2>a@x9{o=1-s3FW>WA^S{ld+i~9}_3wQ)yL{iZ
z)p_5REw6p)nE&fRf83Al_fy^l|KEG>^S;`3@AtfO?yq_1y|*fO&jN>S|MG?B`Ycho
zbAR9W<NE*J<+mtXOg!Pc@Bf4^_4og91=jyge<bw%{Ct&f&+9y{@z;NP{{R2K?ez(l
z1061k_ysm_R5Wm9H27a^2>#e0Aki3`$PgRYDB{tWHnCAEL#$9yTuwr~EK$5jut_DN
zsZLS5v9W2#rly^TB=l}bOkrd^Xw*E@QD=6b&dE(WixL@^f7ChuN$Qf3^tz3VYaLsp
zC+NDL(A~e0(dR~s--#AEhSs1LjDa4lCmmZOUNBx-*cx?0@69IJk3wyC1NG$t<h~c_
zKbhF}>Y#qk3H^_b@&z6StefRaUdZznw=*jlR(Ti-7aK|>D~c>)lD%xG$fTqoWb{u>
z$w=k0QqPT!z7s|U2aG03bWS><JguVBCW(3Gj!r)#=D9D77f5tP7<ENlQeBo|vSNms
zkFZ+)BDHKK^$iy4n<PxPaF}kh=-wXDy<<oB))h`2i!>MnSezAm4oUR5Gm6Y!Br?ND
zb9#{GSq;(omo#G-#gYuQ(i+9mE{YW~im!g8Rc@&LV1{@dqr?^`iOz`<y^PJhijw=B
zB=-k3o9~cZ_)*ewh0fVS%_|vo9XO=_Sm<tAsJkOk`radHsRNAngk+8i>OBjRdGSa_
zRza5EQda1v-j$28*Api`P?US<DEDk)+wV(qZw=+&7|N?YkSjVN|FhAc;)Vf_vx30p
zcGgY*6l!m@3nm%XOLRzWGL$=P*!sgzZ$gK?rIF?%C4-<T8p_N@LCWTjjPy1u+kR4Z
zbW(8+Vzyt@>06`{{!+#Fk#Sg&YP3;TLX)aXbC*}Mn&)P<+(%u7LfxAzOrLHS2sajB
z5D+ZxbPSp-V86hWL(xp4%#mY-NW)H%CdnBNfit{5iufgp`Y4KqGWLcY6pa=X6Oj;$
zN$kxI)S9ufcU6%1+DlrBJH#JaXg`k7Zfor8Xw=r<p>6boVba6C$%Z=91^bUal030U
zXStx%;)(qio1`uqNnZ_;zP3o0sZ#pRA!#;Fna7JJJPp!2b#Ttvg{|ifwq9S@dXrIK
zp<&|3O%osg+bEYYL+<A#eTL*ojLz*Ek@Nl+&f|Ah;9cC#c}T(dr-Iqfc5$T+OU(|O
zPDO>!la+#$I(I0k7*BD_oMODm$e>}0rI4{7=hUD`6`n2?-$$L1Cyj$HO^tgw)rnb6
z!fV=^6()I$)CxCE+bppt$8wR1*P?*nMLC}8i^J@9o7>$Kw!Zh-<@I7)!z%k%#@5fB
zZFU(iJ`=py;Fay0%Zn|l7H>9Qa=zK#HOlVx=b9~(7r$G)_`+dZzgHzEnU~mFEnR-N
z+L)_0fUEL^vQ5ycC69#d>~}4_e!0f?)Y8L~Yj>8^=KWe$Ahq06%|3m3MOoGI3a*eI
z_bky6x7DJdB_>|FPnZ9zj9Q_pvV7ZDht}iE*}uiK{aUd()W4&u#Ba%pu;VLuOd@ix
zyG34E`BlZ;AjCQGiL2Qcw=W@)i=Qk{Dp~bMc*QcSRUB?Bg3?m2nXjyCDg67me8w!V
z0JfF;qQbXit)AAh`p@PSufC=9{aSsh%j=-lniH)hb*fplJ6CfpSsCc&d(Xu8)-S(n
zE`Co%{I09`UHjtmn9KLf6rZQJ{8&rZU3s$hnN;8hsr8?%*1x&6=3Le43#TH}wiljw
z6|K$|_J39ID$@=1UCEbRqil{vaIQ{JJ+|StYRc(X&flum|DLjb*V2+dw^sa<+9=cQ
zD(t<{(`C)?&C8Fk+W6*aBHQb@t4|Yc%>E_aoSHB}bc5{dBzf*ljA<KBZCzh6edS)M
zptn~OS*oMBXK!NV-oV1T(bzl1G<&nF%BEk*YqGDcSD(ElB-_dR^cL@y&CgZWN}k?)
z@>Hx@Ypg6=%JQR|TwX^Q{NA7yy_KhIYlOG0-)#F`QJdm+Z*+)`=Q|zjEWOPxETXbI
z{@c-Qzn*T(*S0O}whuU6qL!W9bbE)a%Z}F9+093aCCgWqoL(It9l@fV#4D1dtG$h9
zbx?xzmcG}q6Qp-~E!&!Uz1X;H=ha)AFR*U7a&)_9>y|HHlk2TF{0!aIygNyxb=S-#
zy9~ohwWYRpYe(&wy+^2I*8%Cm$+Jt2Sg&0-+u>SOeD*)@_$Aq)*Hn`hL?<ow-ge45
z^33f$m(=$7EZf}XzITK4zBjw$Qrz}kF5dBd@{Ww_`@TtsyyxDppSCYXY;Wvr2mbKt
zmCMq5x23nRWwOd-v@bir?Q@`JT6*8M4E{CleQpOzt{rGQcA)=QMzdR)+@FIAG10%W
zcl_y2d*Qv7UF5)T?V>wkIe)_P4b}7SKg+-6c38hWzwt@l4YwkTn8S|dha75ZKXqGv
z`R$<fCfjk&5igzP&N+_LviES69FaR-Wb-FSFXre+v7+!lNyf{IB6*5$rWI*?FZy=v
z@YiieGI9!hYkbynA7#kNQsFtKQ<MK+?696pfn83q*RsR0F^4T{ivE2{J8UrLSW8bq
zcFYkz_T$<yCwlIj5H3IAzh+0^n-f!FP6oP{{xja5x5rWO&dGUyPA-r+waDhwk~=9H
zK8{P~oLaT#)S5e|*6lg9v+UG&>(g8Q#Lm(=xpmIzU4NoG_MG1L=XAID$*<gJj>Mc<
zQgT}2L51I|>MQ0oOP-%OuVXvAed$@9+AZvf7nG}R-0|PUUgM&&WP$V9o#kiU%_=YI
z)LtpCzH3vv>U&N4tg~-o&Rxwp_cEq->#yo3YtDVCIp_YWMo;V9ndfKk#GKFfUfz&;
zl4I@#uD2GSl=uGqeu07GBBRDd5!s7kwim@?FG}paD0TOu<ll=jyqCls8yp?I`xc3?
zpZM3~<0u+b$k5v<+J93sf>CQ~<jh4)V#_Xx<$P?MeRF2n!<h>#wJR0-niI93pOAR@
zqiHp#j*qP5;ZIj)8TM~m*=+Md$8JUc6`_`mj?#y2N_%)r*poQt(V{s|jAUM3lDW83
zPj-UrRlzoK&9>{2ZMQnx6c^~<=QODJ+xDn(((j1|nw$zuP3;Di3PzEJrj<9$R~iaV
zQf#?#!`4#i&&~Oh?kX837){Y#pnKSe?bZ}qCu5gS$~;yoe5*SBo2J@ro+^CH*kQ41
zlB7vekcr#kuAD<AnKw-oq)Zz(Y3`EMtlV^acQ0eZqucv=HC|5BP>t<5lF@VAL$m3o
z$mt&<GZu-?`L{@v<AP?q<IHOsT1%X?G8migM2K@e=w1J5W{qRt)=T2soBBNeGORi|
z%SfX6y@XDHZog20j#bBO>l@8$HqLg`Xo;znX0n{KTkzT)Bbh^rda1cGXC6+tkSTlR
zX6u!OvL7Z*yuER5`VReHi{#!i%2&q9t6H{eMb6`Do+t2mQgiGL6Uq7Jnu?-}Cb#UE
z-2d0`kLDDEBqi-8BMU!ekCRjMg^l%?Z_U5Ez;n`6!Cg}WCfyR<b;~)qYlE#?+DwzQ
zmum7{-RfTIc|WIxO;%?LoX#6Ky<SLzW1(sFrrH|MOCg8VyNfP)GHOn75)BSym~rXS
zj7g$%n(ki7n3>YpYw@@7-^07TMGr4OIV-+MbJnwnSvwc?^&IS*{P5mK-r1W@N`9TI
z6C8UrTvm7YN~yh>x@#MC4@yo*uzlb)W6sH$6OL_^IVUO0zf<O#;KVDA6Ge8)-WR+s
z6)7h(Q-9mPi4}kK<@UWUsW8yUY;SyP@KV$8t)=1nOhYZcj>Z!=zP&Uw=<85CtTZY1
zrk2qZ3qED7BxQ?3kNqT#9hh#pJyKqztFmP8R5v-*7ypbGd#J`-y0!GilT^v~nU~ap
z;}(V0sYlJ5Ub55FdVzXT<n*e}#D<_ft&tzt>OVABHUxYW=~*dyg|~M?<XzE@yUB%@
zXZ~zl&UEjQ?2C;?S2iWxd%mN|W9^l`ga5RBYbE_;XPaqU{bu`eN#WIBFYaF{(w%+p
zC4=V!mY=!@7JlZe)3f_ONARZ%-#^A1fwIXjWWN}_E}pCZeN)@LpAR2e&Qq8-=_#i|
z#f?d?EN{Haym4aRBb|LWqz+A%Gy0}*naMHp+hpChQ*v)!_gmmyxxi+Vvb~-$j~8?B
zOXa8gRG#s51uc5F`mO5PxeI;!OjcE>$-P=wFlkY4WJb^VAC;GWOz_um6!_W8f2Z})
zg^0fCagS?1J~w^0{O9xSKNtL;Hg|p9l77J#%j+vT>*mSVt*)<s@cic&_TO*Je`z(=
zGfC8K&KF*_{`WfjU+=H~+OGd=8~>jp=YJiO|FvYlkmB7x)&C+Bb}wIc@xIrY9$SXH
zOE-l4ty%K-qWrRF$+mOKZSU3BzASdxyZB6W)L%!gWpD1Ef4lgf<*C2*S1z#g{=0YH
z?vcLD&v-izE}M8R0cI919)Sc0$0jyGH5rS7hmNgmihfIOY<O_Eoln&-ro$lFxlKy5
zj^*TrWS4Fg*R+txPbo(y8K$0F5_$QV?;JhRBA1iJ%iI?zSO2@CF-h&%JjdEoAyS*3
zot|cAduYi^<rDq#`UZbE9w}?L&GG4OQ;oj%CUTkI#dWE-uf2`lQTX)S(&+2&?#>Q8
zT=aF-)c4oB8(I0)Vs3m$JklwupLXZQ$K(?eRsEO6-29Y!W~OQWvpYA79asOeulezo
z>&NHJD=S0Sr`^5vHT%ZK)b-E0rk2F>Y%YEO?C$OF`40}Z9_Rb}b^Wy~4h<S%ayxz=
zRd8f-Dc@J~qx8+qt-{A{-~C;_ae9BgZg0%yudkXG2k-x}XTk5LH<$C5$KS8ZdHvw)
z`{mLq51(FeQ|8}(cAB$3!w;Tj{ey=j_PlrGP@Z$fVegO4ADm|W`OL4xu-<6ho;&B9
z1DvkTDxP4(?jQ2uz~PXbiLOG8iwzhUvbKCYCT)1-qZ2Rdp^xs;;?nthnB03lnh5ik
z_*<$8F8N@ow${7IPJMQcfSWpNw2{}5ZD)+UHFmBMI<2g3BIKb^9umA?j@{w&@uN(8
z&TcuA_D|=t-!Cy0;q&LyYJ`uQGQVAS);_=I@?p!ft1o-lNtb@Pc<PVN7B@%jwcQsy
z83lw~lw4cB1P3^$u3O;4xZ%r{on|^;11<{j7GAV<omzTLS#_>RXw2<HB|%~KDgj3#
z9`8QEo>a@Q_C|6qufxrx*`?cVrY?@1b~An9+-*@go3EBd=WXttb}R3&Xn9Q0Y18j9
zC6}Lm+iPrm_UqlvWx6H7cdS}X4PW;8irviqE-SvJZhdOl{aVI(*AlYl`idpyuqsb`
z*tS3PT70SYwjW77#`|W(zV>SU{&>Tazmr25-yS{VcleWNL~@a4n&rdk$<r#+W@X>2
zIMR2QwetBam%7d2;s3gM%61)i((P~cttXA=<;zc@RU4LXPqxa6TCH~Gnp5SqD7E<)
zms}6G@=r5)x+t{G&u-Pn)L$<)&9=Lh^J<ctRNm&hY1VJQKH0W=!;bswZf70X_^&wo
zkn}4lk4epJV)yS~dUmGpfU^I(yV2bGe+n!_wf#O;3;vdVyYu!so}!b>{zVsENf-X(
zds<)K;i}L6XEARU+ArUocWI$n)%Oc`r&aGg{43Au`<3qJIi)7i>N3SL!tw@hP6s@b
zwz${3J<jRL<&e1SXS`QsE<P7sI``w|w|%!?-cwipXLxyi`TnhM>hH|^eZ96PcB7)B
z$gDrRFPi@^Im)oU=IQ0z?`72Y?Ahzz_-}5f{DNoOH@{<jS-qC){_11TEni*CZIs^Q
z$6WlyVS?)hH;2^^{uxA=O%*k$UCR96MaMQfzGDT3a$5vBoFnYb@9G=={2ltdsohC*
znLyiN;n@E@7JHc2={6drD5Ye0Xi6XQZkaVJ;pCU?JA{8NtMYxKRHre0tH!?UE)|o=
zFUQPmMT9QYJFD<Wi(lTScWk4fze%V>v8mgi!dG2(Dz|U4{4m?*_^iMB^IfTn<{ozi
zc{__zQkwT!SXe*e>hGKw%(?N$;bWN_CeHrCBde_GDYGuCDM5I?WcKxKx?)8ox=VOu
zEPtN*W;3aDzRgt?!NblkBHgNTU6!hG-kjkW=HFWPFIkmIkn^-&)ud_DHa$($igb&e
zH*xw*9VMf+nv$t{!2xGY&OFmO>2AXIspeH=V#*zf1LB)L&GI?3%<TG+vxgpRnsU)*
zsnlspzl3E$Q-7a{Hk?{<ru5i`x$o`>+Hih8V;d(hIqFNQgRIr6IiY<EvW#9N?BP7?
z;VGPTmF0=x)#c|dE&aT(N9Kh~rHGg8y`X;EkPLa|m&X&IZC?0e$xET1-_95JO$k#q
z)vVWgwPAI{#HGug%ug<QwX^M2$jWmQQ$JO$T0Eca*&<HWS3zrUY0R?|wF%tYVWXRI
zY;~LH>Lr(EhUp#&y}(jhmXxZ^Zku*(^P(x?i(|A?SuQP`apMK6dDXvzaq3sE2mQUe
zKA-7LKbQ24!(v(+8&h+VWq(JUa0}Zsd1+3nB=_|lhw|20$7JfM7l+F{+v?WLdLYSr
zcEpuQWm{^$uFe!cee2pg)2&slx{0B?qhw^owrw<Bn_Bxj`T<+`j>EY+X|-C{D?>M~
zo4@vcn@e=mBe(EfmzU<1uC0!JGwte*`;M<S9cT|c*>G*Av1EQpocX<|Mc>!GdMjC-
zoOJK)vG9Ep->eHaR*suJMSSnGr}_QAs_%VmS~CB2>-$RXoCmyr%N1DV46fg(PGAt0
z*jG6_zg4%!{YjtC&ih+<>Z+fKal}U)QC9mHX8gx^SJ4h5xpM)YPJgC}Pj@|N*}3sw
zWL8X)%<~_5U*Ep5nb{rwY1fUNipvZd)c438ekp!Z@Z5#Exo4g*YfBt5Zu>N;v?f)j
z`NxsC+XfZNhaV}VN1jPmD_*s&XNO3&q*21NSq;nA#P7ay<DkXF%@bz+iL;m<dA|Bt
z;ocQl*PlHzKN+^KcuM!5XIjP)Cr#@N7pcCvXYE~au)wZp?)RF^GiBlnomovL-0sN?
zXqUP&>)*Ti^)gX`%cHI?dS|S;|JKXU<5AZZZ@Zr+xH<EDTlux!&$iBU^*k9=EM<CA
zwQOT=ZBB}M^v%<0+e%ZHKe}QPee3eFvaM@tb92&fS7yEQ*|zs@Zb5tWoyTnElD>Dt
zN|s08jeYxZ^}p+X^D3f6uiN#N?|qwlb|u&Ed%vHR%e=jv-@v}7^K;qu1H5$wSDsp5
z=SZ(O?EE#q-96^f1f?HGbn8AEX~t-0E1q=CaMIK`r}8A@r$=j1MbX6T8`YHMf5uEm
znzYbnyNYi9&oiNYMbp(&b=25@o^{<_H2-<aQ^$Jmlcj!B+pfr{dtKicZfPgB^@hw-
zzAg71s^q3kb9ws8a!umZT%#{bo^w30IDYc9?Z5d`%4=Uo`&ZsL9Cvu5v8|ey;jiny
ztgfpb&w1tizUubcx?+c;b6+IQ{O#S4S3JLY?irTrv+h*?tvF#H`ta|Pny0$;m1ol9
zKF@w$^W64-<%RaRFN@V{U;6&5ue!24?(6FG+SjrFf1Q2I#=LoX?c3b?>O0TlzVCis
z`@Z&n^#k_!ABWZJKK9nvJW-GTc{;uB^W6V6FWlpQ?Rn1iW^H}#oAmhKx1ZO2-}}Gz
zLwo!mM}^*u4Ua@WFPH!O+P?nx)%SJZ_Q(JGxZM8FTl@dNugm}ceZBtw=l}Kpm>vFe
zJ21&OFpD^_=p10NabV4HV5>R6+T*}J#erjv1NRySo+S>ve+1SjFfd7o^M7$*R%j5^
zaTHQ<WcD~HV$&dM!oXtCz+%wA+;Na)#z7Vj29_O;GFKesVj5Ty8l+hcu`)QZNgPtL
zabojuQuT3SPiRo9VNg$D&?sThsA14v^3O^8%pvv$2JI(K`coR%CopgbI2%o2Ft%~#
zoWWom;%t_4m}^FZd5^P2%VDk!4O}anZMHC2UvaiQ!@&K)+5V3+_k{+>GYn2w7@SR9
zcq3fgt~BsQ9C7b)aevdmyTHYJ&k?>8F1}wH_<l6-J#g{=!@w`#8YFX+pQDkVp)uIU
zHH4>8K%g<a#5F>sF>;A(v<jo(fuk{ZjtVI>3JEmE{W&TmaV$Z_Em@~g*ugE;=a_JY
zTY8OKMvj}PMPp`2W7ZP4tSxT2cii$~7_)O2MH$=+d5()kG>Tccm-rknZfO)ta4*ks
zFE2SR(ZDD%!@YXXamkKGi4*R1a~kWuxHtS;(kLn5(YU5jazkVD5=Q9_jIA*q(kmF-
zdpx8MFiM|j?AmieX2Xe|J05*+PRQJ7>}5IG|Hos(9mdHvo>T5H$_02%j`5sU<2k+O
z<g_`SGnRPHT;n-s3-2d^UO|~&aRG(}Ul<t$ycV*Y+Q)TJP^E!M<KR-4gG>nr#ZnG3
zR~!^yb5N$`pv;+r(q|l5A2_mpI4I9^TJg_8MICRI7$>!!L+T}m)N2m0A8^unb4YiN
zw?R*XA<tpMGpCJZ4x6+vnE4zwDLKqJ<FG}KGxv-J+cVC#YYy9qxH#yzIGMPd2sz@`
z;^IE%$muOdyzcn;Tsh+Z$0tDMsGp20f56ee5Z6$i#(!5>7zKYY2r@K=r<@I6;~Fi~
z7`wzZMx{~kz)>NI#(O$$_rJI%n=mG+oJ)0a6V5pH#HR6S&#^QY#+)O^vgVx2d2%fG
zi(7$-yXb{;MIpyaQjVA9Fp66o|JZZ9tcOv2h5Oen$E$i6B{Tf%?i{b3(%3kM@t254
zz0Qe77mwyOjIALa9W^I9cmlfSoakP1LdGFL#^XXyOhEq`4_S_rG93XEt~5^CazXY$
zz^s&$3z!_%YViKM%r*JVg}=gqatjvR`oYNmrBSN0Pnxso4%flDs8e-D4N|rYr)D2q
zb;eQpiWlnzuMJ-u6@3}xbq;N`aZ+|Uy(Py<E!A6dij!8$X`Ltk4(<GNNOzC7(Ua3g
za~cf)oHpY*W3J+JXv<-nkTbS9XB@s9b`H6GGR5W879ZXR4X4)}@qFTQ?u(D#nak%@
zj$Tx86|guP8gn){#rH<f*{C_b(ISkuLqhJIalOxS?17BiLmRipI*gBejy-YlOS=>D
ze2Sa@-eWI$LSNrGm#-39_~hKXFXuj~oc~aA{7Vkwx1Outa{PZzVf?wpzkUkipEc)y
znRrOOINu_2p^YbivGjzrK>+jB6Rc}J*h>TYdjdGuUf_}SoO~pJcd4h)SFT^b1J+jv
zb4dk$Sv~QKa5!V2r~TuT{45L-e<zm8>hkyW2`{;*;Bb&xqv6E_N69_mEHk_${*^dN
zT{$J^+puoWK}FdhMHQ#bK0#Y@oVMmfXtiA0e#VJ?!6mJ=mpBf18=Sdh{N$1;%Nc#y
zGh80dmNm}SEr*ZT1RpCob4=!lQ_4+K*CVbqmo4XB<~!hX_RJBlKWBWdT(;po8(`z>
z;Cj|E*VSpR>&-1kZ^m44{d@FI&6WFet|To9N!@cL^~sfIEp9L7xV^j+mA%IA^%uA7
zBj*b4oD231ea~|KL(bLkRz~p|?q6fhSGP3QY`MDg?Qw|%=YM~3kAEB5I)|~t<^+T4
zH7Sd*_9Y&NZ39wsFZ7mNOJ918bMJ*oXD&>MIXRUjFn6nc-d{$B3H#6LUYFevb9SrX
zXYK34PaXb=`i7V0hD&E&7oTu(&&G?Dz6Y1@39sqp6N}-OJ$g#&&ME0XflaEH?(0Uh
zxCW_)M6~4wsjYR|KIM|;)YILq40<BYd!Kmgem&jyH)4Y5<%zaujADK4L|jZ#BTc9J
z%$OSKR&(S`kBimb$T>$Z&t>(!sB@Ix<LH7^*Wb0i&ZZ%^VnSlJoOQeEo7fZLX?rZu
z#P89WD?YhyDQ`kDu0#c#bzA@SRvypojc@&mzW9~8M3?EDuSmJQz4vzImeATBe<8UO
zd)E5@P4Q?>@kosIIM{oF$u^87H7qSOM!GIw;*_wgtpV9{PtG`V?f2<B=SugVGYu3F
z?UnYl7re_T!n<mo&cCVGz8+vwaIDySed(I;TYK*+Oz^t>_xjzdUh-EDuKRM(knNtb
ziua??OOJDJY>zqJQTurNk|6y#-n-A-czM_Rz?X>r)WZg{kycOcO-}VW#&cvU>yeMO
zH)pIpGxIKk<<em5y+`I;jhy$_#b3qum#=GJ%UK82s6Vx5on52u>^UoV!`Gen!HU*f
zOmcocwtj4VZtTx)1x$VLTIXuvmIuWq?we!X!)o2P^)gmWxw=C%ao66^Uw7Q4ED}Y&
zMW?oTFr+>_Q0l=Hd*X2DHK}zTY_%6MWIee{V@|$Jo6T}j{va2ZR<EMm_57!d{G4|S
z@7`H&a8m8v0scF>m2GPULcFTeylVcndDR{Zult)+fA3%;Yg{Aiz4b21CT8BMp-xXq
z4{3(nGhgP^HTAJBi}Q=EkBvl}O^>{I&Ff=u^`6zA<Vm4traV1tQtIQP5<kQDiJQxP
zw_|7A&)xKTa^(Bclv!%N0xynuyZO$IbNyo*b!~}n)RTDEyRP@{oV{NY#kB28NL*@K
z%!AdX=hplUc_|XQiY+==HT0cJXw0?L5|;C!OWh;>ChW*P|9wyBcb$jH=lr*RyDIwc
z>OS4DgQ_viwqe~ScaCgLJC+-B{BGLGzbEA8-8t`T|L1hf_v-zse$P*frhkr3n!AQq
z-s4nNU(U&SNy0g&mQ9IW@g%)w=_$#UgDdacm1W8JXQ-B;=o-PQa8Jebo@#9ndq+@5
zYTV8_$$D#&d#-xhe7j^TcJqzw%?W%d@BhY4`gizvOXLZkm#3y2@mO<ndfO9Uma~3;
zTxP$!Y#(~m(bv^C%=fCvEq}hOcX=WIOQRU{+(P_Pm*!<XdvYbL?;QKPsN5+}Bll%R
z`yF5V@7%h)&<NY}Us%#4He9WeNvqR&_G^iMoa%|cUv6(tOA~K<c4+Fel({E%?@Qdf
zEFf3SbN{-q192x`7@vGloUYxJzT{7V;Gcq1c8)b=UT4c3C2J1W&2yCH&6VNF*r1cF
zWb;<p_l8PHu36co?JW@&^G<j5#=Thkw)@?s-eYn0dOi;C?isWG%QHLM;H;PTx%IO9
z5*PQF`_@NYX3k5o({;VPB=5?TC&6D*{<>aSDEI0P%dw!gD~Vsuu8{TnWcL1P%!4m=
zsR2u~zO&tq;&WfS?<vo{)Q>r#UzWIUXMI+A#{Ij>vpS#bKQUjLL_GeLJY(rEVO##1
zEj?gQ+?``nKTKNlf$MvkeA>y`Jf#8KJ%i*+1LaGn)}+s$lOC2|8eU%-(O()lzcgxn
zY4rZmnDeEv_e<m6m&X4uP2ev}lrKxt{}vOzdaj7T8e_}Z31xdMtT#23E!oYTp8qY2
zzkkt$vP}KmTo=FPny;I#Y}vV^?9gS770jIZ?p&qz<;C*f4=8ZufA9OVaKW5^FF3X-
ze9uV#KJ~))qW^p~>&xrdD;7%pXpZ=n>0VxLU$Obqj{Nv<Gqk(Q-76MJRIKp$u_A+O
zdBe9p?us2VwC0xlsBO2L7|(T3qH>pXSKj@di@Co~;i#O{U$NN1YV+obx^&LD*%g!B
zEB7AwG37o-&wagj7L~2?J=4Q0wjTI7?R;g|_40Y^D|_9mRx13O?VwSmzk7l})#2iw
zyH@{LVf<^+^Iz-cS1!%3oYr5tro3vC|BvMnKMUViP5)lC_(x^I{mumpzYhsl?tcG$
z#{TNH>AySme=lC}bH96M`~1$z@Un*RpWExJn*2HEU$2~6{wqiP_loA9J@&hMxBomI
z{(bxN>VL)et8>b0F4l7$fBxtEfBwGrD+|*9bcg@W^{+k4UvsAZSLyV>C*6OXJYRcz
zf6bf^Kh{@R2{r#ZA^k7p_xDK)su)*RKUM$p^f~9V`nu=+bqgB)y`289W5K`I+w1r)
z*0r7g_v(M$d;b4#+5dkO|Nl<E{)>J6*ZjIq@%3-~>%W=*|Iz;cdwKo4`Sri^>;K&U
z|Lghx-|QU>%uF0A5g#5LY-ADD^2wO+@Nlc3pwkqOi;E7+JJ$TEXmotcFE6KUwdKYH
z6|Wvm{Y^G2Kc$}T)JvW<C3Cadxk*;x=iXEntNYBito)~9Ws(uN#66QKHEYYtfEAu|
zwWjVed3AYB=+>ZAu1$~s9apeF5I480RQuMt^sBRSqra`ax+CWLrBZG4+}It(Z{J<*
zp8h_5e-7*Oz1BAt@^4f++$JM=qu}Ab35@d7a(;e%dTNGw_B)xGpVQAzah@!fJL|(s
zhEB^WmYou&Z%%GBo<5J)$~5=R_T27gvC(E9?(8f5&es>BoP8{zRa*btpP%oZ?O$l!
z?^nC)>zk|Flb`$9XccW(XUk`vF;8K_7l(7R!}s4?P~GhK>~Q$`e|G=={QCa+{rms+
z4UAkC3XQB%6$(vEd>a&+d98jZv<P}xD7K15RVcPeW<>;McJ^MKmDDFXJ-+Ji)QI_&
zUoN&MHR<m9q10n|%0ju<^xk&GKFe1-{wep{x=GA!@2+*7SMv3y_<_z(XT@Er-!FW=
zWYY7wFXX0%Mpdd#i_F@oIz6`Pr|OKvE=#qUsk188rn2bnRGXc<>!;eB!c&&&b4zbk
zs?YnZYY|hSVAjT1{6f)EbqeE}n<|U`2zIG0?zQ@*v1Fo`mF7~9RWsF>&CJ@RxqR*`
zNtWh|yeDsDyK-@*PWrWU)~ba*UXd$$H=eT6Uc2?yt4CGuf9}v;zxP*_;)(@D8Mi7<
zb^f@$(s$D;omKAl#P6@Y=w+?D_3E)1ubuX1?bh9H%_f~ySUbr}rT9iv^}1C%&AK0K
zI`?b3TDSk9UGY<2-0EJvl#yYB{{Fw;ZtEUk{Qv7M!|#3n5)AgUGZz#@%5{k=Ex4#!
zt$);?uj=id)0eE@Z<fiAF+9OK>$U#LKU_6Nr>un5Y&gWNyytze<1f!?E2mY-6m3ym
z_iD+xSGV@OJ8Hdn#l}6Yn`Wh)myh;&any0YyUDpNeKAHSHKS`wTUqwsF*?mKMKy0@
z<1HD}U7p9ax13L#oojgeW!aysJzmy(zg*tn<XyHlIQXyrwc6i%ADq(PZDYaU-y4-v
znf$nR-NkcO?}{%@ls;*E#n;$+=fp0vzRG8l^z};jRsa5N{xUq<*5W!xJ@3aANwa@j
zzS$^U@#XBM=Q6uqs7>Fu`#_`cJ<~Ixjl6}A*59tP`E*i#efhgR*7x7OJn(PvyR9L7
zzjw}f{Znhd?f1L)Pw#ngzT5r-!yzyI+B0jqU5j@%2mP}9^YOI3{ok*b=fCIv`Fj8V
zfAfC*w`X9Musv9sTY8dn_K~`@{j5eC8u@AzST45M{|hvzXWFB{W-PJ%lkSU}CgVH5
z*14~HA#uK1%|?+cn`PhL-u11!r5?NwQJ<Q$Rj*OiN0G01#bJiE6SDOFEZlBk!N4!X
z*TSw6cQ)^YT=>doHg*+@Di>r-P!HPJ6}DzkR*i#zX57WD=r>9dhdqw!cWvxRJEA0h
ze#J4<O&fdjYLsOjYaBQB(<$G@tR!d5a`?*5HHnHc;YZw-So}38?1?l{Q99}2uA61p
z-SzLyBjx8Bo@QnnCr;j@qGr7Eq_5YezA~K{Ip<8p`yV%^zWjZ8Mc4AZe?%@#inB=(
zxx3;-q}j!Z!A~BEZ~x&DrS@q;$(mHjlM<eOLYrqCvw0?Eo9P~CRP0pkGlQqoXpepB
z`m(lJj|^I0o=yoXn!R_*BD2_)-Vs&Ca}M)7wzzoHx1dUR=DQko8^e`no|$f*$ET!f
z(yg(_UP-TW^$~x?xhKw<Y%`qRVY0;X<V^1bvrp4_w?4IOmh^GwGnps0SHq2a)eirr
zOY`JvpIuv_?)$Y?W5Nk36>ZsB7n}DPFVe2n^hu67Q`vTYvAn2~pzqG}%Ktp4UQ0<@
zJ*{MASgh9yhN6F0yTXomEl~1UxzR~0xLhN2;={a|W?R)gmOno}Nhx50mkocwT(2uj
z+_u{LSZRlRR}Q-|cj}7ZTJ6yLhcB*95?#*nCm}Q?O^4^l6#GQeRW(5@Hx~a3-H>N{
zCE(<%YZ``SYf@uhB{7~lvh~o`O)9IjY+s%_vqr3-O}bLTH225(-y+vGbcs&rTIU(H
zMXYqwn$nzP>D7yldzo!Y$kh(f%)WUy@5|&_xoURKQa0;92zS2yy)vQK>h`ruWm~hl
zbdwTq-#YRvY-LC9yTGemS6+VFw)^eD9N&6ruXApnEmUIrGA35*-#yo{_g-!OnyLt+
zk6lJPE=%iG*l9cM`xU(ROsej`$c@n(w;bAjAeC94`{iu+Pv16H9pzmc?!Nno>MpZQ
z?@HH|&dyf2lXc^OT%UeZ?TQ4OTjI5qw(mK*KVKCIlvtztuYY!%l<Lt-5r-xJ8T5S?
zd-StUqJt-GMtWt}-Y>tt9=$ZxuqQtI;dQ<1+a$u)HWceT6+gK>%l2Pl=SQ!YbyCw?
zgvvhVrpMe`W@UOfwJbkqr}b0Q;L77+`--^hb%H)G`qY0_=Tp_pszkHTl~JK`vU48i
zT$gw?d54qV$NVsv2-Uei*UN4bYy7SAlI8Er{6?|)bGCEcQgpwu|59$z<iEnNY=t`x
zPqzEos8xI1+gks0YhPDf@XdIe;O*D^zGct;H{nmFn)c3ZyWC7Sh(1ko*u3kilgPTT
z<~=Wym!>7PnB+!f``kD>@8^a+$G)1bmVT2PAGU6v?zW9*%ddz3e^L+|_HlaTnGARJ
z?XJzH#=8}{pB^mQeb2<#U`P4%%=6cFE-4SwK6=C}t6I3mVO3k?zOS|~f@b9`KmF`|
zVdmZpNp^|+iFy{t`0rh8`Ja2=Wuu(J|Gzng;$JUc-nX&Gr}yL3>^YB@7H{>NDfHU@
zo9F`-{#8Zn|L%7;|GFja_Vd*1yG7H>|J?ZQ`^|$t_fpzokp&l)RYd3WMlN`N>(-6F
zswvHSFBb~$%{R#ZF-<=1^TgY~wtUgMusim4hEtyS^Qik~*LVNRvs(PT<ecHcg>yS|
zimN&QT+IK!drDhw=FaH1uYc%nuVb|QHl=Ci#kXp=k23PV*&!^KD(B91Vs}-LtNr(9
znRc5Zr>^<TurlV;!DTg1tG9osIVN*Wqix4@TidKv-B#DVx9!?;Q!e`Qcge3S*>603
zKd<7f@!Zd=bgi!}jf-CO{m!dfXSdC&+@E&;|Geln{X2F$?_7?2|Mx`Zck6Y>d+u(Q
zF1xpQx?TRt_}X07`|1_nx8FP2w{G9!{r~QN-4=RXe#2|&z&CfM|Nrsy&QDkGCpYhZ
z;k>u%<@~P~@9to{dE8cFd2ZY;UzrzoZ@f4gSDh;TLvlg+%K1#6xc<+L*uT;Ljpv+(
ze+Q)#H+HTwjemD?_NPLHn#u?4zdU~5JYwRS@X<Hn`Aw-wybHdIhP`_mnUyKcQ#XU>
zoI-y~!i~4rA6ec#yYnvhqOh&5@;?p51jQD%%PI=3;$aq=#e8YzgeS4fJ@4$iATKs+
zo>-n@pGIPxW~}g}u%Bne5<(wV{k<ibrpTl;N9vas?=_cajy)#~<4(3p@wdrs%}pr#
zdQ0|^;=j~ua!n6jDc;s>P4wLRux0IRnXnn>j^237x==}KCcj=1*V2c|NgncPM?Nqn
z{oz!4_wuItE4j}<V;HwdT)VhX!%tLm+9M6uM;99>e4FZZq%@w}Dz0hC-Cefx*2g~7
zT^28wH%Ct`@t?TSomV{yn~%0_-k2o0>yc4bte)Ls<By9vC1?F-Rc7eBpR1_Ec<Z5=
zQL=K|baS?e8x*3`Z6D}|DHp^n7XBy2ou|OIY!2JH<i^s+)=nJK|Bjpqee{20Qpwxo
zNh=f7-K1UY=36nT=$Sosa7wn3yK6IR`X$yRyIW$;YBv?_Vz1i9>$WMm>h-(Esfc&Y
z7H^8JyQ=(V;p{h=i)Ze<E#j1T^5krzWlKUhRlJQ(XgVGFz3{q3nf%Lz%G;*S_b-wT
zU{ht^sd890&hL)GqNQygO_zo}^0s~?9r7yBWYfI6Kaa>e&0vYT9JVZV)!HZFO-n<%
zR6}1Kah#;!>oy_wo@(5)e@o-MxT3eIZfHsMki2ks=eansWr=cXNos12XQsx_QnJX3
z^yy1xTB(|PiYwXdnO<7TU0-EYsi&TyY8kgqq$a7gill@td-Uxo+XD{4mM4=BzTtO2
zx-4gs&%X<4xu?|re>t7IFYWZ1W%>Wq3fPtx@TnJyEidF!&rEyPbRxO(s7vId2RSZF
zTXsA<^yS&TH_r-^(obeQ&pxMC9(1-`Zh1wYdgZj`mGhn#sHI=CQQP_SNKBk+)|zD-
zwk&%P@;vX_v)XTId9Tz?%lOpgrPqh4*Q@o^N2%9msW%n*HkPSZnXPEH(`a#9(Xn!Q
z3(r!Qh^Loa)el}!f5@?7|BLetLND6?>8)sQ%P7C6R`+Uo)2)l;YAZVWGAg`Q^qkY^
zy{6G0n9(w0ncs})tb1)We(AOE(!1m|n&nnBMX7guN~=#&&-t|MMM3)HThAv7X-p1V
z*(J52H*Mv#yqDV_YB(~fU21%I=EmYwkMx!R_36u2&RVBAd)v#(s?5Gk>8};%NsFEA
zpZ3i5WoQ4{<pHl&YOeEa{*n2ULu-y$mS$9jqmBB^q_&xL$@BSM%@b0Y-*;(ASjJK*
zt!3vH^i4WaeJ&;Q&dSA1=a$rYZP>!O<dx>^4y`5YUM==owTf%i{7I{p3Tdr9w|vc}
ztYyzuomPD1knp0|B&(GzYvsOI8^m63c%-$7FKdk+=f90+*{juFHw&y<#r1mgx0PF7
zX>E(Uxh#pLpJ{PFQ}!G#?fFL9t0%qM<o0^gve!E%X)lOcy*4g;YuBn>QLA@%t=@Yn
zd)qVZ&c>H+T=J%A83hfmr+?$v^J?`$IUV^^nm(6SrgX8bU|YRgY|VBLouxrKA0l-Q
zrRBtCrZM*|_0`ZiFzscVlg`#n_m}3KSo=?tW8Ru$+uj^23pjpEb@{$~1vWW5rmfj@
zZPjKk?KN`QtDb4>e70u8lAQDFUaei0vvbp$(|T*UKV~ufSXIiAvt?2C9=W$0pXF?Q
zm6O@0bzMz&>!PgdV!3;bbZ;ijJakHDyOTnVU)xzeopYabcK^z`pp<<f>ff4c_q6wE
zY2SPG_Qtl=d)~dhGi~jIN&Lt6sigO1o-lfK;@+DFX6qgwQa-a!<(3jl+qE@U?p?m}
zE_cpP-F0kv*DBs!vs?FKS<mIBH|zD*-JbVq*P}NFG;}X8b-xZ;d!*~_i)(sc=IDMq
zDRcJL%cpFwuCL3xb}IMIrMJ8Py<1cE_I8}^u0y#Wq;lWf()*&7elR1Yc$a*ZQ~H5L
zdC#m~Zz<FN_-y6ps@y%hw63bXf8O+dr`@YPZu-BoPHYQWcdKeu=9ahLR=vCNPxoKl
z`(MxWU-YfN|L^^qFs<i&`ZvD4*(F!-``Wt8Vow)^xxME~Wpe-UcwfGAh~E3G^(^Th
zUQEmTGfyx3UzPz!zQH>`rAJYDE3*W+mT%x%Z@|5M1NVLdp5q&M(z*7Bt>=x)XLfJ9
zaL$1L`v(611_JCG1^74exW5Z|mX~6r_`c0RSlyu5?1snR*Xzv;MV<5S`sT4d-tb3_
z&&B4WV7%d1uRMwR!ZUq_F|#&`&o`7<UnseGqr`4Q$^C`W=Qqk+FO<2zQR=dx+;T(t
z#T(@h7s}n<7?E|WF7~)TLy^4lC;8Wf3hzHEaTh5W7pXXZQnuct6u(I&yhu6!lS*`v
zTC$O9^C!W{AL0rPgG!9lvyHUYZ_?VnNn`mZ?af6xyFaO4FVeWZN&WsNz2`>yhl`GL
zr732+hnz7oe7s5j{ilD1-#6(<e>PGsHr6)QwJtVsE;jToHa-6`^VAZ}<426uH=CCm
zTljxA?=H58|7<b4*wWb8a=o$D=FPm<S(w$=l?%97U*BwXd$Z~N&34a??Sntt{Vukj
z|Jk0q#36a3W5fo<{Ni$*FXbj%oUBXEs+72J8@qUKaSi_BytwUU(ifNW#qP!>ZuKRu
z#a~>jOFWymc(i}<yzRPtm5Jy6EuM!>yw-2=KEB2G{1%`7FTSr!G9BLfT{rRjU*g4Y
z>MLC8$874aZW^R-T2S)(mY8XX{MJD3(vaY-A>pL~>05*RO`VS$hvk0_H!h7RHjRki
z8X0XGmAy4$dG6f4t<m$hMos?rHEMZj<mIn1$G=8*A9K6CHRgM1++)+2>!t~xzs7TK
zOFZu8{kt^b{?|lpvqb%E$^6?=%*zrFZx#zLO9?hhNj6K*-<ED~mf>G!X1*pP-7I<j
zw#?;a>FwLnHk)M$KYhKnEc0|(_W5t=x3^`l{+4TQ=Jfts_U~<Z&&_iGZ!2K_UZCv8
zF1@`-+`Rblw&Lq%CBol})%}v>x0mXFFJUh)i!U#BH;?@Nr7U@Sd2x9~`Sz0j?G?sb
zgY!3*E#6+a{d?tc^P2PKmFio=mz&o<F0VcPz3%z<YWeN!U!ABl@z^#e^Wh7{_HQQ|
z%v~DQEBbljw$C^|kAuZ|4oj=W<032NrhoPvE&1Io{y&^UezcVAXjV~JKjFuEogJ;s
zKROm$H0M}^%v#qFY_Y?{qFvsiZF)stc1Q1Ri`poTp8r3(-~U)A^27HH=LEm?efpK%
z<{lG%cX)REXbI;yWAk%Dyv4-ios-jl_I<Hvt*>;FsOXFMsa%#dz1?ERmL2axeja<N
zI6M7ByK%*2<vX*}EhcQYoTvS>H?Cu%zQwHn7IPo(m^*prr1+mxH(PED^_X&eXaD_*
zh1Yk^<*#yAv{=%;bD{UIFKSk;M}Bsh@9NvVb3uI7!uXVi=N^lzt(NuwnkH{G-MVA>
z;;OlaEf%_4tzBI;b@i^+FF&U=S59L8wYa@%Qn%God5eGR{7)>p{9{V?&h^$+Yp?%W
zV_iK@zG|blN56XY6z-qXvMaX4FX@?WwP|_fdjDS=*ne#n{;_@ij>gA3x26AlaQEV@
zZtFSi72D2OuX??6N3+$;?biD)SM5A)*>U;z{Q6zH(tq!*|23g_=RWa2E57gU`d@i~
z+eX8&>QHfYj&bn*aKmHit3r!dj+fVXRQwUH-E*Sd=4A7plkG=N^xGU?{^!*Env<(-
z&g|cF=6KDS-8H9g+nkzgbNca~GxuxG{jNFxzvkTLnzQd~E;8Gm-)(d8b<HL2y_e3{
zTrjphFJF5)c<<F_o3rk=7p!eB#n)cW-g~{>_D28T>&btcdH<eTyysT&kz4(fS#R&(
zd;56pZGPLkhxguHy!X!Gzjt2S-hcl0-hbN%%WLmnuf5H`@8R*kcZL7mzi<2ackM&#
zy2tExPn7MRy8nBqZucyB-xK+LkG}7H;Q#MgcHJ}mx~IQwpU<~@v3TE;_4{6JuX~kk
zrxiNk&3U`G*Y~}>Z};x`zIX5K-hbcs{=eM^_Wd9D?LUg||0r+&Nqzq(efv+z4h{?q
F)&M-GZjt~1

diff --git a/docs/images/scfg_xtrn_fixed.gif b/docs/images/scfg_xtrn_fixed.gif
deleted file mode 100644
index 3e8c67965cc6ee42f1a5db0294bdffc143d2066c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 15932
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
Z&35mN?Z0of|8MNTUSgH(;K0CO4FC~8Sfc;{

diff --git a/docs/images/scfg_xtrn_lord.gif b/docs/images/scfg_xtrn_lord.gif
deleted file mode 100644
index aa3f3410a4fc3ce2fff2c17c7789f8b197414538..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 19231
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
Y?Ay%n-?whwE8D)`cC`ct2LppO0Ms<Tg#Z8m

diff --git a/docs/images/scfg_xtrn_sbl.gif b/docs/images/scfg_xtrn_sbl.gif
deleted file mode 100644
index a9ff0e0a6a690606b7fd56394d7dd9ecb7a28d26..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 19441
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

diff --git a/docs/images/scfg_xtrn_section.gif b/docs/images/scfg_xtrn_section.gif
deleted file mode 100644
index a38d67ae99190ba181df21ae9dd6c94e01e4cdbe..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 13721
zcmZ?wbhEHbv|;jQ{LTOYEes6*8CqI66tg)rvjsq?SirDY0)(n1EUOhks72AKMboK8
z)2l_(tH;o*$1teJFldTp&=kw4DV9-loSdATqUJay&+!7GrC!-fgR++f6)z1cUK>@s
zHmZ7URQ1;6>aEEwTa#P%X7}vP?m3n{<yi5QW5sih70)?WJ?C8Y(sL~>EiFsWwJg2X
zvi4dJ2;J-1dT$B{J)g4o`JBDa=Nx;#^w|5Q=iV<p_x;$hW7n>o`~RQe|0oy@0dhk?
z2b2RqdBK6>A4C104~i2W9BAU;*D^U_ka)P2PuXeCj}41lx<&M}&YTcje7slQx=BWJ
zQ_6|SDuJ_nP8Kcoo@x+%tVVOQ+S%F0#s3a`Q08!CVyR(}@Y<4bQQU!BKqH~S;qr1;
zJ_!SXs|_K{9BYznCnRJut>f6I<{?m)!^Fxd))TrQOqY2ZkB~ux!F0#FyZGKbyL$Qo
zBQtxQJcFFhkH$of27dd74HX+%jti)`%+pD1YB@dCIC|cJolZ}=gdM^eauZ8lTw0+W
z;gG9%_|?^Qrd#H%RdjxPdxvSxg|!R6zq>D6Qhvi=PeuD<X`7OOeS3bkKRsn%!C)9`
z)xm##bNhjPwk#Zi_nrSWh$}k%>G<^AvqNHGolED}_nv$774O$}{{HU!K!4$Xmiqr{
zKhz&^vWR6UG-?Q}Xlhc|dGVlG%S9uxMcXH0A(w7K$3rg3Z3h(Fbz3x&It;c1JnGav
z!qCiZFlB`jkJhmTi+Bvq2{8AXJ<~YMV|mWuFptrnh~|D{9?xc8cd^bTyrwq}ESYR}
zCxMyIFUWE!ucgmSRldk)2bNB^Y|&gc!|F*u+Dz*w6Q1!|ZP<BucJ98PYW&4)hL^Y{
zZfH&kbm44y&S!H&^U{3lA15dK+cRucpI@Wo>L4(|>C~0Q6WJ0OmPC1mYA#_{m@qXW
zb*k&N$mEq%!=ef=wra(e+`alL?%#%QU$4iv3Wm){>@pQQm^9H*?dJN4iD@&_rbe<w
zWz1F7zQwY1<+C?gtM)#dmAxfW;r7;Tsk3kA@BO$fy5NZ5^2Wj=isdrJr(Bn>E4j9{
zTee)j;`&^UkA3QLRZr$_pU3fP@AG*apHH%HsQE6qM!xQsY>iWcs*X)U1H0QDg=Ri8
zj)yH0@ezsbGI<t{j;plwJnB^6^&zRp;F88;9?jzml>7BQdmQd_66#zs$xH6%lXIa?
zm8w%?na)0)9^WUKHZx6b?XydHX1eNg8}@0wSX3+3vV2|-U+Ri0ERrn&*X;$Y1m@Wa
zwy3jZEMNQWR?haf-)<Ki*ZqE{<a+M+yA{vZe*br`=KI_4_Z!&temrOq&)f0Pj>F4r
zQ3c<FACD)v%Q-MG`~3UyWQuj(&Zkp@&;5Khv$$^O^M#YwRlZp4zRv2!^74DTUMyN}
z_v`tx-F%j>*Lu&}`FhLkbye@yPye_3-L}Vlzdy`4U1$AftGxZ6&llYF|9-g=?qBnM
zD*OMM_s7-u|9y9$zJBkAJI(g{J}rNrSMzrN=6yTgUsSjIwlFQZ;pg8U&)5I|_vicj
z|Nj|y7BH}T9AJ|A(7@rdfJyws0XC}-jRHLjSkyfZo}8+i^W|^?tNDq8d{rNs6?hhM
zxO*HDnkCR;JM%v4M-fK_mIJLbn3;I~svrJ+^+Vl+Q}=oOPaOWgv!LytEzcr>c8?=U
zQik=NtM7BYWj`n{RM0+o^+VoN4p*&XAKDF;C<(01a8`IF&>hH<EV2EBtLC{4J!yNC
zL>ONjVMyuqckfv&^W5XO)ieE8iI^nr_>ALrW*d6*O}gaSJx@4EU24?)a`4fs?e6+=
zpC<ldPEqJ&I_VYlX;Q0ClAPr6BkbEY);k`U!>{(dIcQeUl%*=Fn!!80!nR$SvYdxO
z$6fPu*rG|(w(U{XOSL>5_v_R213YRvi%+<l`xR--@L6UwUDL%zFR0m9M@^$t^GsIM
z=UF$-EHm4l>6>)u!;BLt%Pfw2p5s#cG*hQ%neu0GuRl)(+TWf@)Oad+{^Z5U_3!_+
zq+2t8I9GA5c>d3p=K`vgXNsi0EZ{I*pmy=5CwraHe5Tarc0XsH_j-AGuJBY12lK4+
zU2a@cB$vK$(bc*%L2AN+$v!K*!cPUAu{3Ue`DKZT;;kUzMJ5wW&#v^FUg<Z(>`TA#
z-TNN@Zw7XWnJ!W|x+2K-*7=@$!Smd%#yc3AUtJMZ+F)M$*l+u(tIm2?miPX-A29vZ
z`G&eJD|}5~hpg@jSv4<oNnWV7`^>CM>SDrk7+$Q3`|fpo`m4aXNl&xcH_tLXDD`cF
z&6}6;sk{8jxwfnfk9{5UH`Bky>g%R3)s-o|T%lXNCT!?&T9e`a``~)LYYQD!*Rnfu
zyI<Y)Z7c7Wf7<Gat9|xd`nGL{=z^qlX{SBEzHL9iyRM+!JLb`|Z#z!7DyjR=zVpoL
z`_Ac8bd?u+-+dLey>Iv2cct4;-+edf!j?T>*Hs+%zQ^t*KI^IP`l{={_rF;*eeZ|f
z^;HK~$Ns$aecx@{e4me}@BdS~zW4Xn^$qN6qJHh0et^U8L)_Qj!K~Il4(hNLG%NZ%
z<m$eBfN|S~HuD%yw&EX$70i~jIQu*jIxl!w*lc50xQ!G4<{w85+!oH0$l7~#rhd&T
z=~E0Pdy*L}&K>W6T-e_pv-ifwz8Z5rqX|=ep2+L(JZajuY07e+r&`fJPeq*DG;RBt
zr+U>tPe;c+Vr6wooBbk1NmbMM-^}xGw$9waqMp`gJm>kDG|THV&y}4sp7*`xx!voV
z=WF%_vo&54SuXJFLYrU7!uf|@thD%bal*SU#$8S?J^gR#%s96t@{!VXzvD;s$|iEJ
zaQDsHe?rS(`LU_1ijU3+GjB5z;Fz|?*m=!a5$(v+LcOehpVy@Cb&J|uc$O{7_ziE$
z=^J-`on@PL_D!1pZRYcR+t?S_zJ22J`<C1Uzipe(>XqfH$31xGx7RLUUiIB>n-^jH
z`>&l{|Kq~*yDZu_>Ylxw-*&UwLFlykQMEF|p2!X-trro;omi9vTF<yBDMxmTo%_(X
znTJiM+v14wxy4=4bKK1i>^L^pgt_nco5u>rC!P4W@ygOk(r=$+CPmG-w`7^=$(K)y
zyDG1w@ok-T`pz?x{X5TPu5)tH<YI7?@Vd~<_hm6dYOvSAD@*i3HJ5om4W9dmE8>We
z*5(CAb#f<i$AmpywfoGg*Oec+6Ea+998p<jxIV8ZrN(t;{KZ?>W^<lRFIc-K?X8vR
zg<qyQ-|Td6W^kKt`#3G%<N#wn>vD^SM&X4Qp3dR(IR5c+=bzmxF3)`(B4_i6lfUvz
z^Sj!u%WXd=p0DwGFt6gXx;@A4^1~8t3LP(ZJ8(ZT->;lvSkD~eEd5#HILALjafLhI
zmAxl+C%Dv1IqBeLx@+R;m~D&Y{%Ux*NColMP5G!Md-9iG)}-@m{*^4%?UeC}P`Y(;
zYTL3UYghW}_6wg$w%clI{UnQ-(ZS_OzvD{PC+tzq9XCWQGn}=b{`VGaVBip8Ss~*8
zP$cZ2NKl}tf4XSQM$tsW%*2DDq1(ll7BxmL*DAfJwU#NXnz3xNQrXrdiS%}f9gnhh
z3uW^wNamVL9xjqB2-lg{sB@}FYN4T2g}CktL*31Rx?2-<ZwXawKd8GWu;PHBUT3)8
z(?v4gH)L);let|cdvluX2PUTJ;`+19<z5%&y_~53m&stMxWVVLs+1q{X+I2DE*bos
zrof|A%^y_#uS}7#y_#`*wFHyVK6NG4rUGpzqeI~}N6nSBnVFAIS2ny{^Y6TPt?Q-^
zk4q}D?X@<_s&}r}-c>hADC&H?y~yjaT9%OdEA`?9JL(o$bS>sEU9zLDBuT?NBxU1f
zyR|25&OElhciD3N3cJlW?99!&zZ+X`*kSW@vF*#l-TN$hUQSNglhM76!~S`3%0Uj>
zbBlX+aP%aY^~Qd)+rn(OyTfMP3@bOW-qXsq`%m;dlIVTt(fz`>&#bKX!VjCIW1d%j
z^nH-%|76ksC8GaZMgNZ({l8YEe%kE$RWzAFa>6sy<b<P+*)BneS6qWk1G7~o@NvfK
z9gAT37Qi1l@wahOLu+W<6gSRF*CSt?q&3}SZchBY*-cH;O~KMtk#mwx=OmrZ&~ny)
zeqxfz8e(D0$D*1{ChLn$TyZtxTkB-kg_Es4C!9IzAfg$%=!@6JEmKxsnX<;k`@oVZ
zJGM+&{AJ3{C*DCPeWNVB@0nO`Q=Ot6Hd)fr*Gn{9)-@!3rGIH@=$x&Ac|WIRSq2zJ
z1|+OZvf&J|^9+5>I%P`8bhWmLLND!;pGIc5Mow^@;nX^9cF>HTnKQUG1M^y^$7xQk
zi%d$AoRM;KM!x9G)SoljUrsB$IW3JdJf}27Tr@m&>$E?Ir#}ptsaQ7MZD!P)Ez^r<
z2Ce%!%SAHIRx)Ca<V-oyz$srN+APDSxrXIFjhygx2G@~Um8G*4%4Y7?oN=gf+6>cK
zs-?5~e$Kr1uX669nbVeVPB;5G_1wwC4Lcp&EoZ+vI_L4v#0Ji3k9N)zW1A}%67wZ;
z{<q5cKYq^p;F<Vzr{m9`^BJTTFlEjD9hvwxaskJx#7{F9@cc^ndvk$+Rsy@!LXlVT
z+))c9vf}w?EtHuRCwyz6LR6f%)FPEzvC>hCG`J@2{MoO0Yta?cMS4<;kC!eoidwwx
z>q4_xi`TI(wz{>r-F2~@)RLIi#ZFO6Vp@|zul2q@k>cbgGV$^fzbsp~vTm<mOZ?4J
z0(PaiZtRb_wKVS6(gdkxNnEynJ(82FmSxOZmbGhH&aGv6TB)B7*C(@Ol>ACBlgg-w
zT3%VTyz18SnqSMSrB>8wt@zhqwW8=%v14O+-y)HJ?4rR38+bZI`EF=NFlvc-G%jiq
zTXsn-=V7MQiN>;vjq(=Sm4ao>iP~w$B{H68X>sVRlaf3vw0f3ex#^7T-OqIPPAk8{
zl(W%M+VO_;akGj&fh~_FwLCGBd3i}DV27UU1lg;MdDF!6!aVXKEAkW<=*Mvw+<KLl
zm{Ik6qQMGw1*W3>_2mj1!wt7gU$<?!q2MG%=I`tFm@8GEX#a9c$uPm_n^cGHVWZX)
zHMUO1E}xXUEmV4E6#5s{+AXe~bi>$TvFbx{lcXRMx5-60hfH2vH<>SC+PFzmMq0D-
z(ni^C#s;QMirgArEi0THOPs??+}!_ZGTspJ`YtkKk?5R7q8t}A;|&`_)wPy5X=QxO
zj1Cv)x=_0QQDco^+15+q+l$Ip|6<VG(X^2*J5O9^lT^7-fzHmd=3U3K*DP#4AeOVQ
zO1e?KWw+s)J4P~x6!ng0$(*@Z;h!NJd?NSCLfH>ZmA4nRKHH}MYmwYrM)})O@=Mh7
zSGu=x6}JgIu6kOvZZmuPHg!eON!85Dt3UoStd^)TNK(>nGMeSBe0+P2zOb>L@&?A!
z9iC0K6IRp)Y}zp8#s=r$A|Y$Fr_)WIK3ALfqiC6j`rGGqT#WTU%<H3tH8>WURy(Er
z{_bP{-K~4m3QtDODNdsOU7A6K3^OK)&RMiM_+NNqN@3}&SDDVION$s+xt$hQlxRwI
zZ`wJjtY>4{WX7$*znctCNQTeW*;=)Fr<AVM3Mrcm-L;Ln4jdJSqPCrEYw_r)IJQy7
zS3<ULyUaDl$}5JIlef#>H(Wb2TyFMseX%!{w|?n2>^}Ip%wTzV{^M5$85)K;7KV8l
zhCRRY8J@2zePKAMx<K);(wD0BT1qvuxRte%lr0|ZJS%SOptQm5kur<63ft=171F96
ze~gvfRbxJFQ2D;=iTKgXOKMxayLM=2G&$AtI@Y%=Qvc{)|MPf#!=kPZuZFamW9d8%
z>@W8CZET22-0c6o!Q4C3%35q@SL3`gEhq0S52dx2YH9!T$Szy8Y}J}q5_>+an$Eb|
zAR>E9*VfP8QafjrCwS{#-?abl@A5S3iu+75v-fO!{^_J2N9B3O?eYz>R~7T_IqD0?
zto>P}|LR(6BX?Vp#*P*4Z45>EYo@n7z18-j>rn6O9dB1D?tZR#gvUsiq2_qZdZV26
zKdKHluc&D|p=>R*%V=|li9)Si&=K#XBl7C1UUxRcecCYN$1ab_Md_D1=W?j8I8mp6
z;oQ4F=ibjz|6p_eoz5m}0hTX5=fB-4jyo*KWtjf|&iVARdPTttEU{_1%XafOUf`;|
zka6t7|2OCVu1Wjeo~9*uF>l)i&fE(!wHGtPE(p)PXvTO^Wo?@D-wTSq|Ab`jUgX<*
zNh0wgFYjg1UZJ*M%hRlE&r76+&Puh`?Y(mO^3{x<2(~NscWvDEF1gil<#qFwe5)%b
zU-UTj+6HgCV(oj?<JslYGcG@0aWzJ4xq0lBaNWM(sw?*;`hFDmnN7R;=5p`GjB7hr
zbmyP#O`LnBs5kkE#r0=1uB`94TyghGOj_@f$F?!GDa(TUN_wwl^7e%3+Ew%R)y7_H
zJ$q$B@G`s9RF}8cr{!LsvG?YjyEo_c_D|QfeS2b&ThuM<r&n1sZ>`!J?6B+By4u99
z$+twWOql56cKPMR^>c4CnA~C)oBgAB!t6-bxRB5-wGovoZ(nP@<(fIqIP}i`+}m~~
zcVhpQ&O5O;cFNv6r!{B)eSC+@)A5e&q}nC(uG%g>y>#}Zl@sGx?j|ppbpG!o&6W4I
z-o3|l^4^=jcQRSrqCy-V+1}f+^v*Nc*_ZYPMT$HS-g5tsZ}j!Q_s{q~co{j{qV&P`
zqqilG-QoJ?JB9P%hNt(J%)QGqFOIG6A*<N!8*?45^g4T<^p3vi9r<&Lrk#(*y+;Oe
zQ)^NlmT*2YkGd!A_vlvcqg7uXg}n6I*y3fY_c$ifdrymfSm&elCH98*p2TMQnC3lR
zvh?BJy$|-heC#{#Y1F=_x4%63rTMgD>I2I@2i0}c=k9b^dU6`)lxIbrk6E~$EmD1`
zx$N;J*`V1+BXcXmzCW4qZ~NXEcO@fd-*lGed*0^yRQTM(@VK~UzZW&C&qDiNTzWbC
z$jRqPOJ`O8bI6$&!eBQu@Z5_g)#qk2XV%Y)?CP9$Cv(;`*N~;_=1%Dg;aK^Meank^
z_d?t3o~P`4oEGOfQ_p3S-RtP5FWUW{ckX*Wy)NWv-W<m*uh;51?0xsziuF~pXK?S!
zxmo9)mFvBnmHAx$YGmoru#&4`XWl)Cdith!-=coKHxu>T4{~~*^?Rqw`evKl>m6~C
zdsn^`PI-Gb@8v4Xh(~b|@79H1=$m;d?rle8&}+N5>-*lH=zDdd^274Jck%z;TZX<~
zX!qgC)ptVk13tukbSk}lRMPQypQpt9kL;rVK3vp%btLaq&d=GIQ=eU*_ckyzRP5+m
ze)$=K{-3m6KVH1|aoUp)t|p%>{Qac&fBwVz#Zli+jXy;6+{^sBFP8c54*r{9{{9P_
z=@$i)1rhVVM)}VVxgX?t-!WSLTax{^g;&4&pFjWH&oO2Hx19N3)9SzdoAE8*{`<er
zUrXx0|6BaIV*mF_{YPBqzBlAMTIhXmtp8pW|Dz-SYe)Q#vi(0Q>VNc||K274v-<vz
zDgVDssQ+1F|8ti8_i6Wk`py5j;QrS+_P;{@|6Jz(Y0>;&j`6?N^nYIQ|JS>Hzc%TA
zTo?cQzufN~_OG|>|9!6R_rCY9cgg=LxcB?W`4<Q3|FqcsImQ3z*uVRKg693XkpK9M
z{og--|6JpL_+j3XeBCP%RZA_|{#oVPb=%rFg(W}#fAiJ;e{b&p`>yf)&imeH?~`rP
zL?$pV4S05Ahlb6?$^UHG1Q^(OWH=lY9Gh80^-^wJc<9_AsOq;Q;^HIM9!b-@CpRuW
zcAuc=n)OBSNqfJzL><e=kIGLyW^fB1TM~KsneQCS(sxg8UViT1san4y<YZB*z!J}?
zda1XrybN9uxYTcH)YVs^Ya+MiJ-v1Hb@+zFqkXE;*WN@f(G5;YxP9$y^p3)(=axoa
ze;2!_^6R^&x39mCKhVg^uNHITL*kK6QT=t*B5#vVOjPw>7IX7c>Y16Q`F=Y;J-IOL
z-+b40HQrlaUR+)pxIXNz)z|E68)A<yv%S47=g!vR``7Ny{{H^%!CG#1yE_$yPmWBL
zkDoW^XYuokv;Eay{bXlkvfGmX{N7#mvNvoT9qRUVdl<jG;9p_haKM3ynf-zKg!u}L
zOuxT>ejh)fq4Dp3u^;`6jGQJD7+Hi}E-<o5)GTmhlPh^}kX>ue1}7f*h6RUst*1O-
z<W%4&bm8<e32fr@@+ou`)1Gm_RU*D-BNMmQf{$+8S!WE7^XR<T=q|5&!Qli?+m!_;
zluQGPJbBFmE_rIqev{Cwxq8bcW}VGn7Bur)-Pm-R--e^u$IzbRA+x|4m(OPeoCFS@
zHM=k3c+T?mKNZIo>yKA9vj}+!H2T|n3y55B<ko%I;w<d?g~d&}^h=;ysD)#YsK(rq
zOJ2rTOD>CQ<vO<dJF{+W6^%0Z8WQ5$y0A4gI(6&Su;d0tw#e+QrEL;P2THF?R=oWh
zE|tb%c0(#{!@&rtoDGVRskti_MrPz5IM^n$Vyjtu*2b%4(Rsx;9B=3E{rc^;>?zal
zcVsI(w#SrSFWnwnadYbTyOocZe!sWS%J?Mv$ABtFhK5=JhlEDPx`(VEjwml+_#|Ps
zzTxYQ==TiY?=0ru|NX<^^LBqkZumF;`y(9b@Snxxrvs~a%Y}n%vLzoHx%Hm}IM1^0
zac~iEy>in<Ft8=TRpeh_P9c+IV#~!Q&XOaB?oyRJpWKz&b&OuA%&ghuskw38B(HVr
z&s_4}uwP`dx1p^^@EMcKJdU{nE<YSt1n%VA_O*H~<9Ocky-H$>wYS8<e5e2KHU|i^
z>Bd}i_Du-+C@j%FB~V0f@06fZhId0Q``PP;wx0F$6}=i7nR}2m*t31=Rf(7drC*~m
zdmY)XmtPGHmu#84@LNK)YS@kB?zM_HQ|6b7MLk?T_1dk>Vh=g?ryEoEMdy?<n6tm!
zf3@+>>+%zI_e#H?)m2@b<-IcIeWvvM_Q_vlxvb@RoK7ixe`wB;_-0yCg(mX{`v%RQ
zI>*-U>(xw1R($QxD11SlY2q1&f2>|JPf2_^FwIrNNw`b0&CJD^Ka(R}`ITg+nu5}T
zjUE|#T2U9XS{5&Tc_P!{)x?QW9$QsI-)2cYV7RtIW$C)ox7pE;6mJ}J*=E?tkeih>
zd*&@M^PLwv^Gbyd-ko*B+~)6F|0dxp4|qy<2#N3oc6r}fwCBeTkJgJpQ<NV+wRpbL
zxNTMOyx((Pda3UUTe*&P?c&9+W6Z53&%7(!JIV1~PWtYoiwDY2NXcz(G2fGR_d&(+
z(_)`jeBJZB)Vu2P=6T<agsyv&n;-Wy+cW#Xb)lcFMzs<O@fkcyvw|13OtA^@4)nXE
z&%mNM<zut_-w8?cezQKbVb@>?dL%3#uhfwA{$J+#8Z)*7EEQ+$*h~@{*h-Apmi0Jl
zFMigd#$n83`JhSSNCHdIH$}c#FPgQuW^r_eF^U{L;c8kn@lwc*Ez2!^JzQoj=k8yk
zB6;gVo9u~O*EYDQZb)3&ZX+T+<AT|dEs_&`-KSi>^UB3s-Rh!$)nugyYdltHt9f;I
z{aW-`PSn!V*Kf(xO?RGJg|0l)*j1dB^7y%vx|PK#K{mY!S6@Y>YfC)P>bH6t%2U+7
zJC0Ro!pT_&H}|OSalYm-@$9Uy;EC5go@Z)LnzTpd>jrndw+p>vUvb5&$A3O4&yZl6
z6q>5(tGxgG6w%tNh9^rmJ+_N%Gg`;6K%VhKx%U@`Gt>9G{5w@O>C*n5i|xtZ1Rogj
zXGEmg6*qErJu^}K;lQ<bO_SK1ndXWc77DywlP>#5((-KOIiXd;nHnj#`kJ;Js@ztP
z_5IBANpqH%YTUgr|NotZ4u{RmjA|KtIbwtJA5J@>a_wwq`7UXZ?_wHSVHX3MtYRMS
zIN|Ch%hl7*^-{tx^wOjvuBBRE@2s$!zH0iqQzaW_t@JI_T5a>ptL(L?SU~Rf-KnD4
zk*y(NK?_rDT-DxB?C;5{UnsuLEACU(%qik~EI6e%O!{h)VjKU%uj$%_o_zMjUwHQ4
zv-0M-zLnwe&ZYX2$4>A4Wy&G^dbJ_z?u`u3jwk<({FulavgxSVg^gEQB>$b>P?<a<
zc7wCYZb=K%)0-De-8@HIX`xlRNmRMn+DwN@&-+8N{cECp=S#16$XlGD+Q3$_AnsMr
z&9d%g21k24xc}<jneyYpo`<<CHQh=@hE;*jgz~yOX6r3kWgTRcCSIH&5?byXx@y|0
zSH0_IW%9&@y3biwzPxJ9+;tfb?tK>vy>y=IUd_Z?YaVHyUfKIZf9ouETd%IyRiS6I
zR=yV97s;18#Vyc4%YEj$ZEahxE?4o|sc|Rlo2<|E-Ooy6#lO97W3^5?{O_rOe@)I`
zjn5lS+UT4};CVdR)WESncS4I&^<&Q5;Nw!iE~M7_ED~6%ac7?BEe>bz#mei8Ge6uB
z<o-9mY{}Jo#;1I$a;I)COKk|s^xpQgX#Z(8CcRqAT;}l0`LegR?K+#e!}m(?{U2-=
z-FoKTh4VfyTJrkh@y3vz$=b=s{bwCBF3am}5c{&y>G`q9vlsW6m&(5R^26$zT~xU-
z|B@P3&kz^2(v`=9Q?}0H3ibD&x++w*G;FVH!rFHWYBn;y&J0j~7*QR1b^gSHeKDDd
zA5vmpN8T@}lzFyckK39X``65<x#w(n@Rj;at-LbE`70Za8g1CfH)R2{M#b5a=W>oq
zzxrri&h|ur&vNd9(B-=($3$J;cH2E*clwnlxmz_HJLms6wrSd-W2*Xpr8}H_CJSCv
zdA4=!+J)(16)zY5i@4JzH$9-B@ADDedpq>6MHXFC&0O|nPx^%4lA$W>b5B0BaKEyW
z@1ns8<+WmaSG(O_S5_}0_P(pD*z3CZWuL1i%1c>G{`2jvS|oS<qT$SvQq5&CRU5Zz
ztzBH&I#b<-lX+WZ)87pnx2xN|Gu&45Yx%d|8rCVgasqcmIeb}WT1#~+%-E?Wvsg0k
z(3;bqtP7YGi+<}U8%wDu>xz2q5kJ+SUcBepEJgL1lhh{a%I=y}dwY|-(&WuA_iRx#
zHa6V+AWEq%*<$a{$!4>a9DhppD9yQ6ZF_8@-p$>c4PWiJZN1WtdFsU9#vi1%Tx?u?
zW#-gbP9~8Dr(RDqiJQ3d&Pt~w&VSSHZ8Uj#`_QY`manttEtsse>Xu#6N4xjNTbZK8
zt0SFF*NB_vIGg1hF4?*D%S%)1J<c{~oNezo+r4qN|Ksey<Kige;-ur^Y~$kM<Ki0Q
z;+Es$UgP5N=WuPHeCVbQh8-^b2V52?ba?YL^t^Csz2Gue;AkI%Yu^hO|0ga%Ca&Hp
zN81vPGCCafo#War;2NIN5gl^0@x;+EpQEu)TtmMcjYx5g{NtJ+;}&h>7V^b4Vom4N
zjHO)FoLv`O68{{@lIcvAam&qdop<6`@E*79J8nKpj)kxsZ<lZ{<~dsQ#U+2q(Y%!7
zxi-g3SdNxWaW70cUU}qr{2uo@7Ppc+$5Z~L9LxH1e6|4BwoSX@uDBMxIbOQQJy^w~
z<I3^c7LM?q6BT=orlfczukmO+a<nhTBUR*BM~++R6_4a49-VVMD*v1)DRG}K;hww2
zqdw-?jGPlWPdqwLcud%GvSyFRBp$bkJSS%@IoT<|^?9}n&x($=HJ%MIUacjkmi3&f
zxZ*m+#ItFR*VHMVD^k3sF7aBo=Ttb4S6vUs+B-+r#dNG*b9`=z=e9qm8ht$bdrocL
za(t4C_r^Ki8(h41<Q(70<GrlKyQAV*^BR|>M?6=$99wSVeZ=NW+MkmNA@0+@oa(*e
zy&&XFlFiAJM|{?;IlBFg$L<){3pt*fS-cu~PF)f?yX{Wrzb!mx=aqPD`QuYm;*-*I
z_VSuDQ@{9}ICJ*+p0jIQ&Ndo&d{ykq_c?oIiti&Ezb8I^Ph<R^9r2pva4O?SL;Vu>
znk(+FTzpEloO^l4@9mp&3;&#Z!*c$Wi2oaz^B-*dKl_~j6m$M{j{iFq|L<S?zNDQ0
zKIi<8mh-<t&i~$W{?8KspI6TRyW`LB*Z=<!e<sljOi#}<^9HcRUSJmW@v7luH4WgJ
z8^A4lf$Qi6Zr=djw*h>A16X)3vYibOkiEz&8py61C=wbd{PlvU?L{%&iz2NTCD;1B
z<~TQ{<Dz(JpzPa=Qd0xP{$7-24U*ywQq~Ppc^atr^`dg<B{kI`b>AS3x&JPGGdacK
z>!m3hq?>w4=jkPlzd>4GFB!xJ8P#6W)xE6e8f;)2Y%CgV7J6Y)gWHmlV5`u}hPlDk
zwU<rT2HU*7Z1VN8?b%?vzrjwtAr7hj9Hpucb*@;ahS=tYIG0{=><#g14e_oG@tJ$Y
z`|1@R(JKrdS6-~SoVv$FK_gT_;;Ns?)nMPy;I~JXBwP)04UL=|8nrewdT(gV+0fXp
zSDfEoiF+E7@HEs@^qSY#tHP}3R!_d*F!yT2)~ji%S3~!@Ea7O#OuZVrH!SCDSnknl
z@v7H+zlJ62UQ2izRwR2ZZ)=e2*+Bo$tD&`FnYE$Wz2PBiu2rOlSMLq4IU8PkH@xoO
z+wl6o;gKfcjiTWNvez5`UMo_)(ZU)S;Ob?gdX*vLYDe$2@}<{1U0uslua*4`?|U23
z|2JYn@72)Q8wIX6nsp<mm`1ePMox7-ChZ&cGUj^6(TJ|A5wl|5x?8X1-i@61_GXN2
zXqW2EX}&j`bfXrUMon|QW!iggdhLywOCv(BMwItPMJ|n+zc*^l*T@C3QR_mZCdWo@
z_#3rR^;TZ)jlflx*Io@RI~%q2?2XhdQQLZNhs?dnFhhR#-rM2~4eM;9_W9o0#~Z!r
z>unv^YcEP}ZTWk1*4kS~jz(?Yd-K@T+pB$V?^(J!YFBilK+J)=(Pw0%&z_B0ZyQ`v
z8@Xj^^pV=Ie-nGJtz^B`JN3rp+UOOrF%hn@t8(vl=U&@d8dJSDBF8s+&)S$%Z)48=
zjd{QubN=t`2cdzR*B&uxjkvKj@_Oyv*}ZYuTVt<IjSD#&@n-G4TX!R_-@Ugy_U^N_
zQM=~eIk`0E^WHm;?#4W_jr%Ga_g(a!f9`5+*}EV1-n)4<E@Nu!&9`xvr{3tSjk!BD
zJVG|~mFk1AxA*_Az5jaY?R#(UemA}Mwf6ygUi^=@q06Sm>%?AL-WtRAF5&;%gpaYI
zpT6Gx)cSzaFJ2_=zR0wMAHH#=M=u{{O_ZFMDETb*v+jLCyF}4@iDG6Cxt2YMQ;lhl
zy~n#OQQ0nO+tirTvJYDrlGNk=CCa{gsQ&CB8*ePnvilRxCh6Ww(tG!)HuZtDTH@Zn
zi5hCjT4u?bddb{oUD~F1SiU7$^d(!)d%QyQq3X66`E!po{T>@%OEwL=Fr7DaW@v(n
zUW)UwQ0cTs27O6xZjar*J+`yE$?fK$)c4SNUy4uKwU2ure{M~&`}f5C-s1qZ2=Ts1
z3AMYCyiI;z8dIP2d4J)HXnPvo_cW|8HF{ra%(>Lqd#RCnkJ#c;-1*Y{<(_){dn_vU
zD6lA*HSB5lywtdJsp;SPGU}eiElbPZ_v~H5J@1edSGlxAv8VZF&ywttwYORQ+8Ub1
z#}F2m8XlJZHY2UP?Rk0F^US>T^l8sa|DAhYvoF1TUV6^I^o(y$4ay!A$fXD9y=eZH
zHc2-%)$Mucy7bz4&+F!;)vS9~b}hYY+4IhK>7CCq8veZ~4SV$YZCXLti%E8wg?=wg
zc%N9xrnIkn@z%k${#kn8w9Ke&FU!xR)%Cq7?Mp9X%Up2n*)G|P1hbb@)Y7KfWwl(p
z=ouHnyDcTeH+{jptX1o>R*7Zh9ZQ~Kma*jBtEK;5E!25hyzXkrvTI8Vu5P+^b<W)I
zr6*FP{8IeRMXxu@TF3T!tzXtRm$av~Ss~M|ZZUhkIyQR?-<$nq*-ZDIOuUx0bXoSE
zyf-`dy$)|Xr(Kr0N$%>Lwbzz0<eUjhJ-F^h$-HZ4*>e7!{r6_myBwdk*GK-v?vBej
z5%+di+MAatFTCEpUa{@X7QWnb=W^#<&E3B*_ujsodt$j;%-%YQWy*xTxt^DMqb&FM
zzpQC?(WjPO-M{U|wq@7P>g87SzS>rH^{!g(L$mC(dwGY&UaSdw`_wM~sbBuJxQENa
zt{IAEy_C!U`7Pmy-8;Xq_fO*9|GD@68DF+p+s%!A`P+`YJ0zD=qL%leFZ!Tc!7<jy
zpQdF$tIPTOF8@zo!rrp?#;xx|(z4%9d&jgrmw$TLw$u;zuHE`2_E>FR0q67gqRR`;
z>!vT__`oZl^XgmPoo~5(-#>hK_U8S*k0E+FujjqvzaM&KTRw+-zG#1es{6lB8>i;(
zi%a8MUnq6I@FH988?gfI<<~B*`}BaVQ2%=l^Yh5ZZiQb`KdP?(Am(3eRGSw%sc`?h
zcZ}+}mg*lYuYc5(e<!Q{ZZli)hi`8ck6%?1Pc}_25;re)D!=^g+=K6WNsROJb5skr
z%YBZw`(o^0<h8#<O7!)Mc^@Cjeb7Ij_qOeeWZVb)>(?CAGkms}n5-{xmXG1lyK}Sc
zllA&fGWS0TiI)l-`x+H~TX_DLQ2(!C;iZZ4!4mZkO<J=~_Z3;*|5|?aqvi4<`S-;#
z=il)CFHyW7%ijOmknNk(`)`i_OMjPqa&<486Iv$t{FA<ZVcPkkX!duy?~Bs%%WU|I
z<Nj@bd_^y@K)x(L{cA0MkeT^62i5PDt)Kn==bisoP_F(%CjRxSZ|?&5KfV4|taScc
z_5E)({AE4wzjyOrbjg2ls;uO;Ug?DRglhAm9}mCfU;jSk{15LdUxKH7ZMIJd;Q!e&
z{rg9|uZ!;en0mcp>htg1;a_;tOZ?0$N~cHL>VH^l|29rNYs&NQbL)St*DDLQE4$_Q
ztup_cf_Zu7@hX|+<+J9O&VK*#{=K|d_mnR4$`$!lTd!A|h<#rmUh(eRFP7!sXFadl
zJ^gp-`y$QxrET*obMz~X;(yN*ubCG9seb;ihV{RSju&UBe`qqVD0}~Tb^Q;k=byW3
zYaZxTPuhPZ{#@d}<^O9AJ^$JB{zpXp%Zc`X=T0qImj3&KfAuy0sOihAX6&!A?*E=G
znt$bd*qrZwuCf2UF8{~&UuA!ON%a3h*7omr)_>2v_Dw|p&%OG8_xa;imVdtWta|VJ
zUuEw9PTnsrdtY}){_W;#f9Bg(JASWyU|;|Ie#Q3hfxPv_uf>1gt*hU3?BDM1|9+hR
zv{C$jRA}uaxB83h9SltDJR%Ye4;-601l4kGOnB(j%Bt=(=SRSz!yO`qVP`S|A0O>i
za-PJJ`AONUU(4F)kKmKz{o)ca|2`-dKRG#-t&!zH=7;C!6&#ucOe40ea9HHQtRZ?T
z<VDa@hjuH|sH?B8F7cb5)Ef15#lI^nla5b%n`y?tz@UF=UFvJGbgyYL&ktRV41X89
zOZD-qvz_JZV-M8-{q}VB_YDsYHF7Ga&8blKooyU{?8t)~8y)7^oletz{nPlxg*iLB
z^m41#q&4Q=UR65#+op%dHzn%#`BrauduMC;<7aDkn18r`NcuIO-<^ft@>7-X&yltM
z`trr4<-zOoYM)15UlY!3k#}cj{`<oR>-XE<+w<eglk?)~@^ydR<fo(>ZNF2O@@(_<
z@1Nhlw>K%dlQ~_C;l;u71&y5d+8;D=?R%b3$?NswLCgJ<;lj0_6Bo#N%wqhg*rC{E
zq1355t3s(ubJY%|ZryD&VzUj8?GS4h-6gKrYWZl#zsJ3{*H$d<=V8)}D>}VbMY6?V
z=MI(0zE(d~rs%DDcB_X)?Wb~o1Y70O36W(xm-a?=RVw(pCGB`P{r}3HYO`|}g+6Ua
zF0xFYk$KDW`GoRooy(^`yBfaCCuWzW#=_PvHHA5>?{;R)t7*EavAEXl*NP<*_Jyak
zrJp)^y<x6em&S^aHm%1iZg*B`tz0o{me%UkySx%sZrHbU`O>MkyfoL%zBWsH?e?t7
zg)=?;tb*3e6Z^e#)uwH$-mE^R_WI4H3ufJGdiq|y%3i-GYWCZ$xA?N3w@za0dbUl_
z^R&*c=c~NmZaKc|x6baD$E4M_f1URG?cUvGyVvjiA=dITCH>jy3%f6#`&V6X@a>`5
z8}{(5x8AV**Eem$BY(ndHco$hExpk3wN=lDLyFRW3{NWUKV^9I-?BYM+r)RTG3u|+
zswh0EJp0avvvSXQHl1bLf2Qb&?qL~|iyGW>)elG~$9%cuX8iZ_#Xx)8Etf;h_nK^&
z$;G|pYJmUQuUF&BeM@hobk~;dm>Fhfb|ZavuGyX3<GQA|OQ!RdTykf#`hLA^zpnX%
zy3euY_gjVSmL02_Z2jYI6MJ68;|c%YT0EU(>^I|#!P~z-9!@N`+xc`(wVl<A`NyYi
zU$!KE->w%+SKqUGJ#{wUZof$OJzL+bfBw$u{l@lvyWekqKCkRR_UnJvpAM<l@A-7r
z`2U{yj{h{4e|>h~a-QwC)8Fg%emm&=Kljnf{P}x7KQ2FC`}5vx|B7c**Z#Nt^<lF9
z|DT`t*Bic?v{e58-&eoS|Ns9+{J^1`>+JqAD=@LnIPlA`pq^`s^v7dQ53pUzZxUOh
zz{daM0K=2@RU%g&u(MY<3iJiEEasm7&nUx5XjMU@YDpru_H{e{eFe>?Jc>M#D-Me`
z`BxpxI>%Rh!dX%1Vw>TS#HU;<b|^?q?DVL4#Jjk{<%mmwb5O}6(e@iIx=w{%oi7*E
zcHMB*shZf6_GHoL01g+EX%l<XMUurHdhC~ME9@?+SuFe6!p;1Xp+Q2=VmZd0$F08^
zPH+!dbb!m!!}(F+#J+zbDbH7}*m+cN)1;md6_wi=o=+M#PMrB=iJJb-lm2=hy;DR~
zwd5teLYp>CHCwb;+kK~3&?%#7D`if~r?2#m-Xt`6_ZQVffzI7=*Mw#q(@`_ZuT=1q
z>Yu(PWSMdO%roj`pJrUxqGq_>@@)F6qf_quS!S|T^IXm(;b}Km(oHT`o-1(DoBryK
zn)St<=gPf&XPES;+r9Mkt332M=}b(r{d3I=4MHVzPOVOJ{66!1qg2VlkDr%0ORw^;
z^O~~I#W>wbbJc}Tx01!SbMC!mh`QKQ7P44P_hr?aNca9pQx@xOec|c&>3r~}k|kzq
zHT{yUOj_=REZ1$-^osA2;nnnAVaxkZE1<V4xJNE@rCn}TP~)p}EB<X+6|gnSPk3?A
zawXB#{%5r`(tlmuSoU>QTI?$RmD__h6>VJ`Vw)}1xyoYOKG8L$OJAGJ%nDyWt#o~X
z>&uXzufh)A+qz!(PF5oO@9?9)rZy#+>ZC|^UqAY*Z+Y+BH>t|ABg~vaHqBDi$<RD)
zyEkdumieN(S+{3in{esMmU*>r)0}TBA31ex>qg(Txd*>R+_?5_%gm>5*XqoUzVoYW
z$NskuRl2KgKmI1R<IL2BkB&W!c^tHT$2C?@b@l~!-xh7(eUFu^oc+<=xBH%%KEAqc
z>bceT-v3M4%~iO*;=H%Q=T+19z22)|_j&dGzn`}6|Myq_Ujwtw14iK;2iWWknuOOR
zyw5W|@bPM1_3LPb-+j{${jdGt#KH8i{ls>M|64yaIqN(UoV??Rnw?=+@R~;q=R*z%
zw!N=<{`%pkDv7<O%M9z|c_#8cF5mZLZb2`5LcGBG9VguEj3!N9^F-A+a`#PEgSJYY
zM8)$KC+znbO+4TIusLOhlI*v<s`Wb0)F$sdlV)c;>vGH!Hs_hA@Aev%7v?-x_&wuP
z<h4)T_jf0nhwnI7w9R<#`!&xTg?C+Ov)eK$x+cR>dDq3hI+G>Jx|x5=0xYNPEAcgW
z%j{chb$Q;sFUxiRz6`jYa%IswlNG_WS-!KSuCC5AT@&h?6?ysA)y>;V*KWvP`#R>c
z)b)M$zOJw4eUr$&`^G^#vyBsT-=r8<-#iy)wq>?#Zb19`E6dwDi@esp%_)|?eed44
z?Yni~6*T|8b(gJt=SkbVlJ&dq-m^2`bMkCn<?-r!-`1J$d%5;~^?U34fBtRX&wTHF
zBlDaGO!^jw_}3LQ8{0hOjo)!t_FV3-JqsR*?YB5)yzXOf@t((W|1C~9>wTIydCwCy
hd&^V7>po50yyvN2z2%u?z0Wf*&v`7t!NI^_4FG6QI$Qt%

diff --git a/docs/images/scfg_xtrn_swaplist.gif b/docs/images/scfg_xtrn_swaplist.gif
deleted file mode 100644
index 6142eb127dc0108e3de93a65a2836e9c8dfa3927..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17211
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
XS}m3vwKe<Zw$k5XdSN__j11NQ#7N&`

diff --git a/docs/images/scfg_xtrn_syncedit.gif b/docs/images/scfg_xtrn_syncedit.gif
deleted file mode 100644
index dc1cf41531b201ea467b694e714296c03ebfec94..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 19501
zcmZ?wbhEHbv|;jQ{LTOYEes6*8CqI66tg)rvjsq?SirDY0)(n1EUOhks72AKMboK8
z)2l_(tH;o*$1teJFldTp&=kw4DV9-loSdATqUJay&+!7GrC!-fgR++f6)z1cUK>@s
zHmZ7URQ1;6>aEEwTa#P%X7}vP?m3n{<yi5QW5sih70)?WJ?C8Y(sL~>EiFsWwJg2X
zvi4dJ2;J-1dT$B{J)g4o`JBDa=Nx;#^w|5Q=iV<p_x;$hW7n>o`~RQe|0oy@0dhk?
z2b2RqdBK6>A4C104~i2W9BAU;*D^U_ka)P2PuXeCj}41lx<&M}&YTcje7slQx=BWJ
zQ_6|SDuJ_nP8Kcoo@x+%tVVOQ+S%F0#s3a`Q08!CVyR(}@Y<4bQQU!BKqH~S;qr1;
zJ_!SXs|_K{9BYznCnRJut>f6I<{?m)!^Fxd))TrQOqY2ZkB~ux!F0#FyZGKbyL$Qo
zBQtxQJcFFhkH$of27dd74HX+%jti)`%+pD1YB@dCIC|cJolZ}=gdM^eauZ8lTw0+W
z;gG9%_|?^Qrd#H%RdjxPdxvSxg|!R6zq>D6Qhvi=PeuD<X`7OOeS3bkKRsn%!C)9`
z)xm##bNhjPwk#Zi_nrSWh$}k%>G<^AvqNHGolED}_nv$774O$}{{HU!K!4$Xmiqr{
zKhz&^vWR6UG-?Q}Xlhc|dGVlG%S9uxMcXH0A(w7K$3rg3Z3h(Fbz3x&It;c1JnGav
z!qCiZFlB`jkJhmTi+Bvq2{8AXJ<~YMV|mWuFptrnh~|D{9?xc8cd^bTyrwq}ESYR}
zCxMyIFUWE!ucgmSRldk)2bNB^Y|&gc!|F*u+Dz*w6Q1!|ZP<BucJ98PYW&4)hL^Y{
zZfH&kbm44y&S!H&^U{3lA15dK+cRucpI@Wo>L4(|>C~0Q6WJ0OmPC1mYA#_{m@qXW
zb*k&N$mEq%!=ef=wra(e+`alL?%#%QU$4iv3Wm){>@pQQm^9H*?dJN4iD@&_rbe<w
zWz1F7zQwY1<+C?gtM)#dmAxfW;r7;Tsk3kA@BO$fy5NZ5^2Wj=isdrJr(Bn>E4j9{
zTee)j;`&^UkA3QLRZr$_pU3fP@AG*apHH%HsQE6qM!xQsY>iWcs*X)U1H0QDg=Ri8
zj)yH0@ezsbGI<t{j;plwJnB^6^&zRp;F88;9?jzml>7BQdmQd_66#zs$xH6%lXIa?
zm8w%?na)0)9^WUKHZx6b?XydHX1eNg8}@0wSX3+3vV2|-U+Ri0ERrn&*X;$Y1m@Wa
zwy3jZEMNQWR?haf-)<Ki*ZqE{<a+M+yA{vZe*br`=KI_4_Z!&temrOq&)f0Pj>F4r
zQ3c<FACD)v%Q-MG`~3UyWQuj(&Zkp@&;5Khv$$^O^M#YwRlZp4zRv2!^74DTUMyN}
z_v`tx-F%j>*Lu&}`FhLkbye@yPye_3-L}Vlzdy`4U1$AftGxZ6&llYF|9-g=?qBnM
zD*OMM_s7-u|9y9$zJBkAJI(*CKkutPZ~bHA`n+Gy_PNjhaie`!FXOWx&)5I|_vicj
z|Nj|y7BH}T9AJ|A(7@rdfJyws0XC}-jRHLjSkyfZa`~;xNn9PzrhDQbU)6_Z1)hZ*
z?jDDPW_@T;e8c(IphKO*N{@rN;o)NiQ(LKX0d3|Xb9vVuKP>m_L;F9QmW4dA5{H$Z
z1you0DDuVca8YCW*cs5XNMyOkQLU(tU5AAqy_A_@@q6QkI{uo4f~%*ysLl%P^y~@Y
z%Z<=HvGQWCZ;uS`O$`^BeG@xNY?P%wt~hQM<=@SGLTWyX#xaYej}zK;9?PV@aJRFX
z*q0fyM6sXaxa_@+6RT^M$iDA5;pZkep~<9+A#}z;eIdaK^L&<Sg<Co+w{6mB(Rrj2
z>3KTp)~9JZ&ZKIm{_tAV6Xf5$`M&1y6{nM=K9?_eqsoxfc`DiJ^UMo9X@-+;dNY=7
zoYKR*n3=oN#p2b4Nu_%p3K?o1SJMlc^XN{B%4rMVaIMKRkDO6@(%^8ulIdXK*MCc%
z+kUR}uXgL3|BvT|==YoF8LwQP$IiOK@oVRWHaoxhtf?Ays=sWS?6xcrja}i;o_?`4
zC}dWBNxCVs$Ek!ogPu)q)I7qiT(kBG&D)%#>YeU&dDf;YOBeom%C*_@%#5y$a~w>Q
zEpDzj`F!K&Nj*BNg!gm$&fyYTrnPlt$a1gHC@a(KYiE{e2Hx_i47xP?#gWGrs+_h<
z<OEl~VaZn2KI!4d^l?>BQ&#A6uj{+k39V~ZS^3E1hSR!Z!ZXXZYR9=s9ylQNZ9~V_
zMMl$CUZ2Z#dA*(LGt1Un*A`5>I%me)$I>UO&J`$Kp5T6W2|qjcX?DGDTUPk4%?dw#
z>)NhwTQ~InTbq;aeS1yS#N`w2F8cRk=6<h-{o7|S=jAtlh*nteVaEyIbw$%p-+5;B
zy+QTqYBT8*XU|Dq-*Nuzy0Y!3@4l=0zWX3ALz(3YC;1s$*5CG7S$dTF-nYI9+Yen$
zFIe9l`{P>qp2?f@3%~!i|M^UO|9{!_bw|DL|Kt3=pXHf;)AQL6*mi$ED6;3>6S3I`
zvgeiW;#redca!@eU-gf}3Va`nRb?2slnr)8`>ucIq4P*=_m86neIFS;bCO;#1@Dqe
zDg57IZ7Kid#&Jf5O%tkRQk2+l9=G$@G->*oCu-I|PX_dDnzG#IsaEvQQxWGjO`D&S
zqMCf}w5wgw^wvF34Ap-gPq!=jH)a2vXKI@(PbBeup7z}5xz+8T=kn6@%d&GExF7Fm
zwt6Pt|B+qu%+Io-cDIs+qOuLH>bov>n|)dET|Cp%-|FJTNgs=ibu-=4cU_p;_NBn}
zZl;re)a4cP4BLOkIEXx+*4((PWL3KF>!{nm_O7mb-kCoqiThYo{d7Ci6_qwQ{_MBw
zkBXIU?0g-aW<C4LNk6lt{%13i!)M>x&Sth*I`(a#cGZQ8b!J=E#=gqquDX5X*tV5B
zdGkuEXWd?MZriHwYhE+|+Id~{Pig*j*-XFsU3VGyx9xtM`!ZiU`qrGblBM!*bA#FM
zJp6R8e1GfP{6c%Hhg{_r2Xt)<%C<{4JTlw9=AZ1@4;{=Cj(s&-uv(rwn@{=n6NCPp
zXA=89O}uquqk67oL+ahkNzS()9m(5q;^*8vm&wt$KJsl{Jhir9v3czamh)vh*6#h#
zcmB_-f2)6b3s$@j|9$JJ^)<8O$Kwi$()YaKs{iqS%D;~R-G6Uqng6)h`0sOP_}#as
z|8Bpt@!WTgEZgO~%|!Mo^OQM$|NEiCzoz{Ezbgl3e?M=<Zh7(fyf4XzrC(mwE4`?`
zu0rHj%`3b1^5^d7E7lanu8uoj{;<-oa<}uIue1Hjj~n*AoFFXoIN$uoe%<$P@7l}0
zx_$NcO?Ur44Abn^H6B+xy?<YEg82WR7y9?zFU~EV`q}DhOa8xor~mQ(e)r$*`|D+U
zUL3T4_bFNK{hi}~p3Fb@?OENuZ<qT2ef*r2e?>q3>n-&!zYg10@7gW*?u1+Jj`DJa
z>t&nN3)<bQ9o!ojGRip13(L|=#Y`I5R#d-YtJ?ED@w0n``SKde<294S>y<2;R8H7S
zM?{%_uV@Z$(z(&3m*KR=%^|kDUezVqtfJXsMzht9W}6$$c0ZaOBwCz0YGf-CPnfoN
z%xLl2(c*KX#qUQ;fJ8KBNSydLm$$-ptBge&Ss3~jw>Gj^#_ecLim-i~Y_s*Vb>fZI
zm>F$3Ct5qdwiQUU7iD<Iw>UBtwwo;!77i4usA#WxVQTzP$YNr9i$zD<kM@799Ubj6
zI(l|=^sVTaaHC`5kB;(1jt&<^{0ci~&FGxd(dqxOGgz=|kwsT*B13Fp*RqVRw2fVB
zGQ<iM#WzTZmnDi98Fp{0=&n=LZd};C<5Ks|LlOsWNK9d5JQ&n7(@|%3pw7unI*Sq+
zmw(hb|4HhSk@UKajB68nr6=g#JfXXPBjddvy$@dW$|>|cdBONNqwi#5->Vmlmk##5
zIidGvlk7*M{=0$t@&R(+i}ast?0<Do|KADykB;(8o(8O&<=I}!^G=??tYpaJX((K5
zD3PovvWQ9cvY{fAl7f(tnv#*qWhJ?v6BSMx85}TDv7DrGQdwi>B%35=?VFSQjF|Ob
z{xdeRoE#A}IpUJ4MW%_>Of?^2wfseD*-Gk8mg+8&rf!_39+6W#E2ntfoZ{YD+{MJ;
zXdn`7IW?$K#9^bRSEJ_SBF(9frUre~oO?(#K~ZdRl2}HfSgxXY!A7lhMdF)<rdK``
zZ*bIZnJCeDQR2`IiAfK&r+m~tKBH&0pw#@0J*O_|oSPwaL8*7c#Tl2Cq;EAzZ+ob_
zZy}@11KopxG7ppVjyCF@yU2Knan@zSS?`@>?-t4~=ahRSDEA~$?)MJ;w-@C;AC&tX
z$n?%}!k>xq9E&IL9yVZMGUSa^;Qlm$Us6#_c%tx1Md`<eGQ|_+A2UgF&Q+eQq{pOu
zt<%UzLD}?Qk+R-nBkN1b_ChKyMk=Nslyz>ZxHrx7yQE^5tQx*a)s#~$!pX#HrAfvl
zlk7`s4wCB5o>PJ!xAPU6GBYv=Ixdh@G3ETo9Mvq4w798bQKy&SLT|%`LR=zZt3>=C
zii8~$2?`WV%oL5;D4Lkqm3UAzeW%#cNsF>qYL#BpT5Hr@tvG$N)AX%L5|y12JA`_6
zJN57@NY-0Q9xjq>iqx6csB@}FYN4T2m!$3rL*31Rx?2-<ZyC+peo%K$;miYudb1<-
zo-UG!y(RPJh0MDO**7y}KQJ+^l+<5iDffC||I3N`f0+!nOB%4voL%-yzT%ew%OwMz
znF>5kbNGwq2v#co6InS&<mMa+CZh|QN~)VCYC9QSshoS=Qdygs`Q}Vz!_RXcTF!I5
zw9?~}iowcxHp;5+e$IQZX_7E$)z_Dky&kJ&390{yoU-ZG{4G(dw{n?oyEVT=sp6(f
z+s5R!{ikeRD6iRk*zQo4-I2xCyPNHg?pkv&%I?-?*Q2{^j=fqF?y>fW)Y|8lZSHif
zc|3W|1?IKIFPuL(TVH*(_EOfmmBnixbhX}=TAL<e|9;ilSC4JptcrfwwQhfK`(CSc
z|9-7!klw)L9s2ok<BP9N9J4oY{Z0tssJt@Ob%v;Cmg&Y!(+v(TF7reEgnoy{hi(-6
zy^)FAQTuzN<gz%0=-`Gc!Ros=>CFD;;ij_bx_dKMNNmcK$OkN8Q=j@)ZrLc19qHBT
zX1UwVd8xZgw6oIIQU;gJy014+xw_FabjxJZNbjqgt*paDUPp?)-pJ$~wNJ#s*kcp-
zk}clSzA@G!MW)*_W^YR=+0wx7pj^E{^>%1hwomHm2+!<I#k03pMaLSRu;<;~#Hq5a
z;poO->8<|STYZ*pO#iw$bLrM?A=}flL;jTn2$u#<T^%r`dZ)zHol>R&zf%IHuC|)u
z9XR85Am`GZ(nohL`n~h-l3o9g?3xxGxZ(EB4%VG<+4Tw5n=4+2hTjgGH`OyKHN<SS
z-^-9a$6otvtKMF;+PV7n9<kYb{(s&kA+~L|^^SA@UT@knrRbmXjx*JJ?^&<A@Y=q<
zyLQ*^Jw+i~vr>1Yx9o_@-Z8s%>;Bn0d{#&59^KYkzWx5}{aLrS|NgwSz<ckr*KRMk
z_q4p;_=?*vdF$pQyWQDj+~+)Tf0DB0W^^r&NUK=QL5VpBy;cOXS?_)NJN)kI{UIXz
zxR)GMt2v}G=g^v^!F*bq8&}6kx5cxkB^dD}<e4Alo_*NrP0TMb$A7O6>d)C!we7IV
zlXwoc7=h3jrftQZG6|ns5C1kj98h!QdufqR&XI_mBP`pF@VOniX`Xn?+u_pcO|Pfc
z$JHFm;7L}$u~jppMPqBy>gmUdY>q2zJC;^mwf*U#%jw7b#M6q{QvMZwJKoTf-V$@7
zt>#2W%!z!q^vt%j<~wOVZT1Pv(kAhwrm>y$GfV56b7Ib&lk?`Jm*s4~c6@aekE3l)
zM)#kStM;5)bLZ5$Kc_axoZe(}dZx`0Rk35tCi|BDaaexm_|vw6Y2hWm)2m-RuMIY@
zOYbR}bG>BY^<qhh(vlpfg)xace(x8)a{BS}GOmt>hvj*<)T-IVi}-h(eYfna;E$?W
z^>ZTM>v(sRAD&*85nd$py)e7HdUJUB(KF?j=hWoMRDP8?%OHE<^w#saZ#Mi8Z+i4S
zhimP*hvDb`Ex+(#&jow)i${CP=ZIGcX(TTwtGw~8{*8ONOz!!+Z_eIkJG(gSlG@#W
z#fpDxSnj4@<vCK_b7BAXvoCngztt&|%e{Ocrm;x9=5Tm*`Sgp1$Lb&Y)G^&n)V-Tk
z&AP+z?|JvXR|0sQJavy5&fYE5a+c}DWu?8B&ei1dX*8a`bCpr!TD0z&JKrx(onCqK
z=((RVR~5~!GJiR2DR%t!^ICh~%PHHF@BF!#D|_LP`8l2!*ZA44%iKAy@Zw6-+#6kc
z9a`>2=;mDY{aci@_KZz$V_EOzFFj><x0O`=JuURN_UxLv+P5(|x>vgY#`f|$6!B)1
ztgTN!TVKuFC_49Q;rDZHz1QFBoHy^Sc51(-JU6D^_SW*daVur_di(ARzk6$i&7CuM
z??k%SdRU+8|Cf9A<k{ml|6E9Gzp0dd^PW%L={xl=YR)XP&9=6^c|*4J&e@xqe;udf
z-n(9QapU*f9=vyRUtg-^xw&l3opXEd|CwulRCnL;y{G@$K46h^`t$lm8*j7Lo(DYl
z9`OBpAh56bO3nS=;*IyJ)+b4{xd>WH?R$7Fxb2{pZRU)Jc{^HF<3yC^JksLZ#2VeI
z{qK>1+~X>1`+na}GrLX;y-usT$JX;6+x&ZMC-=nG?umon6Q{T*0g@u!Pc^(IcE+9*
z2~iYff3Pruanal+(FIA1)U>oR618#<ifufxNH0rVUuyB@N#ezp65E=l_bi-#@WkQ+
zLeD1}>XfXLY^hvw=0(prrrv+up1PMMq_-F@-Mg@N>PhKvExl+jy~7jr&MGc@eTngA
zpzP<4SzkJqec!R{mju%<rsWKmUou)Q-?3AkbMb5jB?T_YIqXJrM3d*N>6;@ZtSFf@
zanrjw%9mF3RlU{~Vpf~{dh#tJo#K`EZYrBNtJq&!>HKM>&QFz>FOA=LuCiq|i87k+
zsI2CiY+`d#&1dm^U*Xk(!Wy$by`4Bo{Q=)Q2?mYFe(xHJ?gwU04XvCS;i)NnOC;u}
z$c#mza~6qmT+oaUT$HY<wZus)L$NzIQk?6<wDnAjYXYZly(GSU()7H44A!?6AF=3Z
zkkl!)n;}%7b7sbpvp;&)99(kQqqnh6da~!grMnYf+%b|lq^Q@GCv)cG%)~6&)L(s9
z7Rr8DH0$=kWj}Z5|5_yXmQj9Qocy-P3A;0wb4^|@z&vNgx>rXvSDesP6x}pO?Btv+
z{|tMr<{Bg^X*U_g_$%MMIagoUSTFd^k#{RS7tLFAYF@yjH_N!*IyX<gYNz&nrpfo0
zY8$ks?C?_m&$)n0aRFD<f@on4j)kVxMeV#<L4lec-G`odGHOn75)BSyn4$D^#w5`>
zhu)`FE=rj=Emp3Z_5HLW!)F}l#f_~NmuD{CxoLXO#p#n3KZ?pPaXuv}IbWw@-SZkb
zU7uA_ep$L}8+C)UX13OSy0c<w)T)`sHp;|H$u8I_b4_v9m4AV=mhP0jpZIchq}<w>
z`ZxGz&;6(GbpJ0~rNPe53CrFYRB0L3Ss6BD8T#o@6qbD5{>m_9{Y1sXO54}H)^eH~
z!>_EBq-??T?LMb~VH(dA$K-@wNw!RdEr}c2dL_-|ytV{hJl5MST6p8ejAmu`e#?Ru
zk(q~|oRqN&niaCL$o-V8RoRg_k(ZzG$yqo3`SGxM`T2SF^?MF%_{`3*&~YN)QG?>;
z{_+gdy#9KMsQWLnZ~CEf;p*$~4e{Ip64?z6k<6?Y<UFz))<!dP+&JYc@ZI4q3y07h
z-wE6EnOJMZRV2<RG(J4UEuoRHV8_Q~HXa$5c{(>gJz<|@Y+vx9VRQQVe*#YS0<lp{
znH)kv>!&S<I@EG)L+bu{0S`-CIk%QRUYEeQJ^#U8U54!w7XB#YmYO6UzD}{Z_=S{7
z&IG^OUtjsIn5SHyaQF9jK3SU<dHs8T*!ktH7O+qJ=Ugoy?{s21zf((%;J3H!0*X!h
zI|TnJFWfKaBC(-G&`W^Pk=0vaAq$6m%LW!<g*6*mgf)%`I13xuJap!<7b$cR4E=Gz
zMZ`aV@u+BYNnopJSdL?>WOmHLR<XQ2g6?vKB@0<4qJ9{9D8(uWwMoQuFnX#@?{QR6
zNfpTOYDyD0v7jZ*AwyADxT!-)N<-+fQjguO70S{sUd2l$`6PW-nOanlsXG1Dzd4@E
zW)~guTrU3W%jfg<-Ap9`_Ol;NzTn9FR&({*3NJ2=1x-~YL7s}GCYL<4mtG0-oP6oa
zWk1WeCRe;QOQ(bcSf1T-B``GgYe<B#=+&zs{!6D`i}IaY8XRnY_v-cVO4hI&(TTEG
zFGs|Se!Y<tSSl9oGxh4#%NgyZWf9)9uTG1|+bG%<IKM+GA*SfGsd)nfo5S^(vfH-i
zvE`4aPQP3FG<N&F%F{>9<Lf@(-5%fYpY=y<>BGI(AC$0eGf%9zZCi1toqbwGQkQm_
zczo;E+!=8#x_Unz_Z#!=d|aj6_amuCvhRCJiTSsRIQe-@(=|Jz+ajJ$%valyGTrys
z&ZkrUJ^y<>eL}aIdB!|PF^Lz8WA$cbOzc&QdNIFn-_4iHmL8jxJa=*3&+HA^eibRR
zi`{l6Or89#>cv{qb5XgIZeQE^dYix5tk>;p+itFydGzaz*Bh9{@7&wTZvLm>h;VpK
z;W6p*KZP3@pNFq5FkCQ4bAj>on&NZT-~SX}a2BsEx#VsBx8zE2cx~ym=<>g%H<G8<
zmfgxeZ}ZGmH-C!8?dtD;%O5n0*Ht{~Hvd=gr1d(N_FZlNf0Zv5Pp_+bwR-!%UylpZ
zUlrYp?>FyI_`$mW&c~Co`~MVPY_F+3ocQ1FPtDco_J4lf-2T7r&*$s%Z?Emlmn(kH
z%TV`3I^oxW@B_aDC&d1HbvvH<DXaZ=&Voi(kq3;T8FpMo8=Cl@B(U55a4dHGP`cx@
z<9!1G$6v7pahx%Vtd2Jhh<xfVeK}cy?P$A$_%`om{U?e1wGuld4*6B9xg_#3Zad7W
z#n;Jp=K;TSg!4+5z^-5sS>ECoM~>(QwzgkZ653tis`E;}Em$R4#PzxTe^J4ncb68h
z=5{!m8-1u@wo%}dpW$d@R@mpmvyk=t_JdY_IX$T=$)c(|ju~*R>(yD4AoICnpToY1
zz5QDjt1xofTkbNP*etE0xKzVRNXW3k@XivUpBel8s)DrIR8lo#e|kkI=}le5qI&<|
zb=&KahSPS}D2Rk+9=q^z()7dsRMHHqIrqmi372Htxy$LE>63A(fZ=3JszI-WZ%&%<
zv=d9xbc?4SOIHe-Z8vABdSvC<!ezm8Wp&gQ_wL-Aw#u+Bn&r08R*j9-RvYG~+AO!=
z=3r6aVOa23YJ~%H)P+VhlLc(1)16L-1{67l6tJgexGJg#mL-}jW?H+#P5M+|N0rGU
zh1eAyu{+N@we`(B$Nk(!H`CMin&9Lw%*kqBB~IGT+cfb}jJ(&%jI&{z3>ORWzI2rR
zb)nVm$_kI%j3D;u0ZWy(u8@sg<;uww&=U4_mCs!9knOiZyWB$K;<mohtNnHILhGk#
z=gvG;jNRqOH!pPNeBm_xhrf&_-wT~vwDzCci?$tMmFo;T6E~~-|DNhE@ylrD-<s8N
zvcDtxKZ-J>=crlSmI{&O`_@}OXR-3^70zB#7dB5gqL`$p9(jyQY}4x0w}PU-z4NCD
zY|stO&A!<lwP2C)=50@N^Ur>diduGc+O*u**!{~L+_JW{mjBTa;9Y&^1k?37J8ReF
zuRR@gM{o0{k4x6Z&OC8w&a;x`Us!Z~`7JMh>J;C#yl08u;?rl3KKr)o^V0Xi%WwKV
zted=h`qj5gotd}(rcPh?Rkfh;xa--I&&22HJY8=;(fabUdnSkY`?5<<YTLcs^|_Se
zSwXw)pG1N7h$G5sg`K`NNg~T<Y?`Y4j^}RFZEv9oeR_YA{>kUgiTmtlF=5W$M|_^M
z?;K8>F<;uRaAI#wii&#VN$<2zoypp#*v!AR3Orld5P3aCCq43X^s}Pr)BpHsh<`si
zmpS9bsXLpD7jxGzMi|d(Y_PRB9(k^KS@GP5dx99;b|&PXi<xz`#$mzFo9A=*nx3)c
zrn{&|UF=TV^8Uvi>#f@=N)NeQpDi!j;GFMwVY-^}a_PUB0qs#&7H<3U{-0Ln)j+As
ztK~{p`-eaCnXGqh<GL-&9oe&^uS;F7S+;ey<@MKbyQ6L_)-Gibm}6!0IOvRHOzFDz
zzd6qHC9m(AX11K&Ha9+f_vPJuTQ={k%}sBfefyT2`PRy}xf$Dc-8k+RyX4>Z-EXAA
zW?g-`?EBh_vH3O6cbC0B_Wq^c-#l^S-8X)zRUG84`%t@i*4^daX3-DtZmCv|c_h5N
z;^@=dH+8em-Q^Mcyqhhra6)^`lP}N8YyR5CG+ci7c#gKou9^p*rn4VlH(p+OHn*;L
z&hwb(*3T=?*ZwPBz#jX;S-t9F@w=iK(zY+n;(wi;{jPY)=|3-w+J9c|tt(xV9{W0C
zy7_$Zyj^Yo^PbMmw!C^)uXMrDKTosv-@SJCU)hf1vG4NpZ=PA4SHAi2+?PSif8PCl
zu6*nJJMXKm|9rq{Uw%YA?qjvSWzKEg%{Ra0y_u!``;l&a<(c%j&+YeXp4<Mfyl{Qb
z>leSOUjF-c_G8Qa-EVZWi=Ri?@4g<q@4`m)->=;N?Ka&W`F(SK<-5xN&(Hjn%h<U5
z@7vb9KOPv>>|PQ6b5E>(^|k+UKQ6MHENs@Vb=tr0$Ho2ozOLQ>`<3+kvWMUQeQ&j|
zxjn!B*Bx>DEfekUPJTW8=jPcpA8yyz|9M_t@&0<jAMrWqw^#0e=xl%ErriT$hZ~!1
znXcGhoN4>s`M}5E1FSW6FPk0Mb8K1m9Jn{x;ql}Bioteb-j=_L?WWB>z<kHy=4Cs+
znEk?k_Px1$!2b4L_9J#LRy%&~cH}VGaVObc=82u;6vr>C?Y?T;E2UVnr#LF77z?kl
zRdqS^?el>tUG_JfOm7N0Tuc7vpwlx~=FFky=0o#8?KkkYy%4!q(Pgggn|;P5vdlh*
zZ#N%QI<i-^#`*W^0~R4pZ%#W{yEy*+?6igH;QwGV!#^@cOPn2UJ3c&oz)@xYJLLn;
zH3x0p9F*>HQQLCx^W>GCw;jdSD9gJzDlFM2FLOjS<<O?njy@$$CQlsyJU+bB$o9nI
zLpL@$nLc)kjFB~)bF?b>=)Ox9Q)chiQgPh0d!N;oxkhs~N1fUJ;kS#Dj$3q%S&WZ?
zJ<s81!Fv_nxTtJ#ac?=I!eXB?<;W*xJ6{u*d%}mTeU2pfm}h_48yIphb<2)4pSiuv
z2OPf4DLNvT8slEQ=XiMVj-F)KXN9ge8jq^|<2mZeGEaBO-rSPCR%_gi=eWOG=vH%P
zf0@hN4aFw$OKiMkj%QwR4ykeU^ErMY@VKvtOTWvJo;An5EIyp4a@@k%J+J1(#BLAG
zmScibj=c;#5xCiN`k9lD8$Dy+xC_2<ot5Kw$<moS<wWn5lUE8omh7>er!%*6%AT$*
z`zQ3cd<}LioN}0R%dt1YCzk5SPFv&RbmZi^C7YM2%q?d*k|E<PE#ti{=d_FV>5G=O
z6+YgMDK3lW99hZYy=Kahrah;p@SJR(<9Oi937256?Mp0n#B8)L*-=rmZ_g6PNjy%w
zMNUbGcph4EW=e>QFpK-E!)N4kJcDCS7O<Q>tg_?Cnf01~PW}t;ImIY*!e99Gr5@jA
zYv291j_#b}xz)z&W~B3e8QIxujwW64Zg26`z2b3mj>WA%bC&ZsT-$SKvCXl<JI4~Q
z_)fZVO!SLe;U2GCk&`EV4!!$w?A1>%DVuXO-hSsTy^k&Nt~8N-q~ia*=DfpY_sOqM
z9u?XBtmo))5ubZ^PA{3`o|@y|HT&GcH@^2(0!&-ZOuTaV?P{+NDyBb6_N4dNJmc|N
z<#OS*%gOgL{*5^SeNX%rvUs0eWAXNl$7GQ+JaZji_{h1gIoJ2ZL4egW!1(+*NB`eT
z0$wm)xZZd%@<`y19%IR;GCN(o@4N|A(!KQJ=f$&;=UR+|)N(J)RoPo>ayl&JpRfAb
zAnnvGmnH|ze{%HUM<e~eK?c0RhO)s%y1~YOoi;@8yR9<MI5*h5HrS#!*m7>La`AD^
zr$G-F2HV~ZwtE|F|M#+f^&Z`&lHHNBR!r>rJxkoBR&raQ)Lz5su5)L2m>PJk4SAil
zWB<Wf&a4eCd)I4dP4{rU;`vqF*H_B*X^4mHRZrPa@7&PvtJ+_DRKjXQqt=E-hsx}n
zq8WQPH12I^{NK<7-mpa3uq55EWZSS5->}r!u(aH;^xCkD-muKMVOeXhC9IX<IT4n7
zH!SaMSpMIz0^aaK+3+IW@M7EW65sIB*zmI4@bcR5ir(<bx#3l7!>jj(*NBF%-4Isy
z?`?Sf-|z<Bh(_6nCf$f;+lUrkCby4bZFi@&y%lTkjp&$rqkU~e=hld>y%D`<Bl?a;
z^xwVF|2ATRY~)1Un-gp!C%Hx@M&6Kr(Y4?=*A@%znXcT-D{juJ?cQn7uxkhR+^5|8
zUvTgJ(Y;@zXP*Pl;Rc?g1wAJsqE2n-Idg#LYy!iD7d#gjcrPmOuJP?<FW|kF!Mnbf
zcf(ZPjZb^;-sruzqG7Wt-$Mz$#~IPvV)<Tp^gXZOd%5EFs~ypAXYjqh(f5|2|HF^l
z9|QUi#P)yDi23q^;a5lhPlm>y9E|@e?i_#H|Nlk*KZyy9h5~0wC$LpcV4W$zIaA=m
z*9p8I1%xzX{|R|c6b%%-S}S<1bfUyU!5eD@rA|(iTNx{-D5P*QR>DF^A##$MqmcSc
zAuYj<MumHg7ICd7gxWef3^F;oB_==r+cCjovWX(+lpS$XW(Zpvc21wcX}Po0=BDt+
ztHPh=c7BqL|Lhz8CHDU3tHSf&aBkLEC@#S8>nkJUhWOu0@7sOk+N{96C7^q=NB8yy
z?rjzfEFInRu5!=4+P&aw_kkbWtP(wkXCxf8=vh+Bvo!VA>4K<}2YAl>;1Q7Py>#Oi
zdk4eXr%~54daqRQa?Ie}xRm#fM)a1oyxcPy9w_k1ltpjvz5RT`?H3!O_gsyB^WgU0
zuh9og`w#f?A4=^%+{=Ho_TQu5C;0!};6J%EhUws)Q>GIHEheyd3UGc*x^Pv1yHVhx
zZ6lxIV}8rz%eIUn0e7#43W_y8z7{)CV&+8YMnUO~cW)n^sPI!z@nWo!=cN0kLJy`g
zKG-VcBE}(kVv_4Ip{HLb>8)%u;GEn!qoZp^NAHBVmv1{JCQLRzc+cWy-1G)c%Y(u;
zf%k1IyQb=L<!<Dfn-H=30ps6CoYSXreVDjNVa6iy4_q^YxMvzQ#M?2%?(Js&#=Vat
zij^aZQ;sK1jfZ<(0?)OCWpjD5_VKLv%d=`})S9zVmn?WWEFP}&eaPv-E53|Z;vDa$
zr@Z$)Zf}w8+gf`2aR%Sx3D4!1-QKm8kMG}(zPA^mmDC>XcTH-ryQAvY|E;3`$lCs2
z6CP=P>(|<r#Gp8V`Qjrs#^kfS$%fY^@Vpe@Q@kq>nQZQM_p0w*%Vo)ujT3L|O_sSi
z@s_NR{KZ%W!%1QaDKpvP9?TWebbR7Eud&JDUSmN=ivvg7f|Td7!rtdPeB35aiV!wG
z7&q-iTwq`4+r7dow{hAAK3xzXx+p`$|CH=<2Ch{fvX)HHox|byL$zVWiBuz}?3FiC
znHc0}etoLI@qk%_;e+CXUDLXg`ndOS+)8HaSy=ik%`A$$FD-Lh5AV8X=O)}bcOi{^
zM^v6(FUO6j0>4BtzT4Lg(o6RBZu-hAm6l#E*Z0_f@86RN={vqA?%MiX;aVS`z$2x9
zeV-U!eEiU$64tM#meE}I=-5^Mwq=jn^d_{&37k=FWQi2$>J#Wbmht3ShG1Z_P-e1l
zW%8BOiPvglCr^u=a!t_oT&&%_Jc)*v@4m%;SoTuAkx_f+ONoe-N4<<XnNONe2(@zv
z>;9bNwXH)+L%7#K_?0Z@(mdgRY)@CHrOx_sFWB$?oQx@}=S^Ajt#gB4*M_oG=I{?1
zyIw`q-JfQf9Ub;sBPe@Y-fJtSXFJy2WD<C$up^Q`y_;F-8S6dn1#i1k#CX!#at_$t
z;tspTvySITU(~q?Q3BVV<%;#5_?LDvtyeTI@oGcw>AHt^CL~I(`<HnBSmG0ow@+t0
zmuus@vMu`c0={=Q8fx=$_v`lG5aU<1i}|jRp<dU2bS}T<x&FI(FYe1tVCu|xIPXQ*
zyy6RcCvaWN=w%b^x4SFcnD_GEXYtCrR?7sZoO>t7Iq9w3B;}WRYMDY#(<Z5Vrg-{u
zd@Fmem)Ws^ZL;^W_s`F!^f+Ys#bpJizp||4oY|2z(;$_}Jbv}EsVw$g{+S<^Jz!*h
z&#5^{Bz#_~d`CRX?GKv@UhfL)-nlM&2g7_Ovu}IDJ}z)g<0yM}fFmbk-p51RKJq^6
z$v*dN<=$I@-#(t?OE21%qtgGdWL@vQ7jLB1_%7DnzA&w*YFeMx_2(~7Jg<HC{QbWd
z(VrV~KMLHrWtPF8aOcR`w<gcuo)i_(k!#eQmhoub=ks$XaBrN@BX_s&-e<e^Jd0_`
zmT7mdPrYk1@2+g%%eViM@BGbEkW6uJXY?@7pW~JywW7qE{nZb#tc7Z?ejj^3f#d6|
zzbQfg-v__H7c?*H>(bH<`@XJ9NR4<d5_z0+u|*eac-6C+ossJbe!7Y{2y$<l5y_Cp
zJxBE;lU`a<*f-Jo2jcZ*2RwKr)!!Vld$YnfC+Azwxq_VB_i0xwctyezmGct|<fA3^
z%C|gyQyd?CK`d9ctWR@&y27#a+PK`R_qX3x<mzAlUi1F@*9!jIY>et*clakHX>H?g
z+m>{{?DM||YVX)R1=u1h+T<U%>nEGsD}Mg&^NW2I4$I#;_D_7hPVm;<<lE^l@AkfQ
zoBr~F>63@9`7X=8%#-`4%bDdl?Y-~*l;8I_dOma*udJMO;OFaJ;d%EfUw{8OOQRrU
z<CO5_)A9|cENSmbIaykv^?HLv{d$e=?PlGp#S>=hChV|C*yWKR`ag0nL-oe~ghLYw
zk4^Y?f}w+zhs~(K;KG7~?5wgj9w#Ow9%dJkcUX|IF^PpkNY3NJi$JCmeL`wII-W&`
zPI764ZkiL|xU`kaF#Xh=%!g`z+>#~l?yOX7X5+Ru<x$NFIn1`i%e=(lR-@*X<+4ls
zzFs)E>MDP@ZOsRUMb7`O^DFGB`ys&85+R^?W)-WVQVYlSg8N-7tPic@5K{8$*x{YT
za$l(4n?uc~$sp;Fn#gpEi#s-Q9#>ZjUKbO2H08`J{}mVR%q)I>VNrOA+Fd8tZqen@
z8`9S9D$SPI7=2=zY;zfpxIxmJcW0y7-b)-vKcZmg+*T-cJpD|-y+4+`(#BaX^Ai`h
z^}e{CTX6iG?D2Bx2gM!g^O@U!ezv@}IemTd-`}#9PmWLD?|i)P_s{R2Z(NjTZeZlH
zP-tZ3nlZnT?b-Kce*J_G&I0y-92i<fqyiqciY0kCFtWt_SlG^5lhM$@E|IW^kz>w^
zM~qr(1qZr06%>-0OqCWm^m6J1{8R3;Hk!b|%w?b;Fo8+Za)JYkWQf3IF3Sf3%z~bp
zfv)0_R{~v?YFQ?^smx5d<f+$r^OCpN4wuQkrcakl4zS^5y)xT{v2;qHr{-6YAfHSH
z(cs{(m7$>xX-7pPVkWvyi%42qI*lXksO$9TlB-w6<EmaBy`E6b7<On`yXvtB&Td<^
z$dpNuWm@Som%ftBSh&?HDt-0Bwpm##mOhip*|PCj)4Dy^rb+Yc{rOBf{|IMzOyLR9
z>oP^>ELY2vUh|!Px9n<^_B>wm8xHp>ZZF!tw(9l5>v4SVkDANx`gOK_e%<e%-}CDK
z?zLXO=i{Z>@q2%~%6`B1!=uv+ngy8tFdbx-{#Rpgh*Nuy!C_wOKL$qxy=@GSibmHM
z9+S-8V|ZM)`j6oW#crEV+=6C57M$ec+hBBBcejlLgW-M~<Fh)aV~o#PzJ615hVjjx
zqVu}<{}^91<&XVx#!>m~=1bb<yq_=H+t2-S(f0QqlWURLbH82)WUe*6>eqa>^lF^3
z?Y66C=5x)?rOsYkb~9R-cOkz$%N!#%m-{wm*YZ!VEjwrQ+xPQ>`ubdphc%OVx8CTn
zURQD3PW<1FCli$GET1)czuR$fnse;WYfbUGRnMo)-e>-zvwZHa=M9VPc0ROo$uK`9
zv}(=wSIhh7S-qUUcwP15o$lvMKJ*I9|9LmXUw6-igzxvNAD#WD{r>ysHU7RecP3h&
zuX=X3y58c&)#87pw;qYheSNa?|Gs_Cj~V;fes7+f_w}pEX}*HD>aTP6{5<LX|M&k%
z><%w^`)f}y-}!h?-QoYvyy|xA1x)SN9llRJ*I=+%;hW43WA3{3&9Wl#4Bq07d~LlA
zLM;jZP0SCzNbPTZC@p{Pg`0KbOaAhj;QQZXEF5;M-B5Zq`~Kx?X?vyh^xJt_q;G{S
zKO#46Lc7G0S-0y}Y*yi#*yZs>L2N(!UWIG@^}Ba3d^W{x|GCbMU2bz8NzQ$-o5g8j
z;|A#if72{>-`3UZE_)Lv{(i-A+fN(&>;5P!Fh_1NfA*$MeeuHPXUk7~&<$$r`B$?<
zSy|J{!!Kyk)WuI!b#LzSDl(cp_s$Y^XU<cBY;Pwo6?v-ZdDA0!ozT>^A*yPLD^G@8
z`ZRTG&r{v>%+s-tCQaY<M%AER(<kgvP+R%o`v$R+K1pi9)6Uc^GnzfqJHyI&)|ENS
zOgBfK%}ts-d*7aC=38%`Eo{3y`?N^9<;hCFVymEpqAjv)mo(3pt_q&@d5gO3d(Lw;
zpM>ZCyYt-s;!Xbsp^ycPsp*b_Sr@XUKF#>$onfoE>U?WZ$U?E+3|GUdi=BBT3nZVe
zaC7FmG_h*S;vZ9D@5;<NF{x|HQWe__@5En0ox8RyGuo=@o4@MvoKIgCTevPY%y!>B
z_t%saYH$C&4D9Z@GDEL)nOALA(Be}eEBr!N?cvc<dVKQIEY^jq9UrU;kA8M_{W_gB
zsivzHE_azsXxh3uSM_z|U8(SCy`gK%_G-s{-sL#$Sm4si)0$_W%rZX6*RUbaR43-^
zsvB(Ij5l<$u8t6{jyP#owsG2CoitmI%WYhxOAUHg$8bhRZ0R%Gq%WMCaeURStDClM
zU017{ldOIF=Du$YimbYkf!<L^=6&0^a;a`Xv-X{bLfdy7v(+n_ygKH=Ewi~1M`!zS
zTi?3#t8Dv}yEpTvufF?MEPU6A>^I?OS4H2uv~`p5X}$8xtM7f?w0-Zp*mdRkul)9J
z3f*=6s$}Kq+qciGGTn1_Y5Kp&$I(%L?uGBy6V|O4Uh{yJ{n~DYv#)CYM}_=$6Fd0S
zbxo_|=?C_|zVH6G<U{M()ei;smmXHLD{QjXxv#Lqq<&s&MuY30Fv;|ZTlStcNVDc)
zVAzvz-1eK{gj~sFk$V5F4O>1ozRrqb7XG=;>Y3q$#dngUzg;~lWTx5C+4fjfeCDyq
zcMIC<|0HWnmSi||rf9PM_Efd%{L_+U#=Vz&jvBbnJd^xSHC;I-Ui81u$)%z?`4_9N
zF>aPT*AVt;`hTBTY5!{{vY)LgU%DsRn%Ut*#<b7(|IEp7(w5rZd`)-y`R;4J#a0)(
z{dAW-{gz_rKkMqY8a*S%)9G)*uI*a*tYrDWV%v-p_pC1NTbH-|aCO#_i#yM(x%Y8q
z`rNFwiZ`z19Q(T7`)z8%^YB~Dd1jNQ_r|}Mn|<koT3XBIUFnRMqxKwH_n~$E-b~;0
z>g(s{y{jv<y<1$r>#jv~>D<`f(~8;AS38z{k74G^ZP+Y*+)eJ|o{PF4J|5e7e|hhg
z?V5kH_PAQ?I#p(|QU2}0r2d_^PpX+8bJi<5U9{(F=|9yq{$}sm`fE1+Fe{tzz4qm_
z%X^-=w^eNaYI|BM{pury?LSk!^<L(?7e8~bx4P7Q=55XVIWsEfEe^BKzW+UF@2imG
zmX{aiWF|)MeI57T>c(NcZ@VUyz7Wz^>%RZ<0%vjUo4oqpS=0aVeKx9>c~`dI`rc=|
zvYq97UY_DHzZW*|%b9(9-bYRUd6a$qkE6+JKd9ON(NW|noxgd`$2yU!Bd_y*o-N*Y
zzNY@q+=Fw=e&t<#!M?6wYj;|K{q{Q_C*AvX-v7Rl!i9OMTjd?z=CA*K`|-SQyPwy-
zuYdph9b;nZ?)S<c8vk#8^!?tCGsh)A*U#Vl!oL1TX4&7H<$Pb~owoXxw6}Cw>Y9&s
z;c*jYe77+6{a<_A{r=B)@^$aJ>;K$5{r~6L<@>)ssjq)}d*c5e?RM|p&i{M1=ikS9
z|8K@IoSQ#q?)>`)FI_%3`2nxkE7h5G3um!*-CuDrdW)>okFVm_&fcA(IPd$#si!06
zfBwfA|7Yp~&SeU}S0=El&i|_^&wVc8?_T+@cjy1!y5QV_2j@;aU=T{+`KQp8IRD(t
zpi?V-zMIB0wnni9J$PlQSn9ZN*Uj5cYv<j}oX4W1!1w6E$BPTNKRx)L>i3RS;p~rl
zyk!r0+ZOV!ddRqK!9U%2##afF#~zBANituW`{Ll_9aG~Tt)0Jn;*52X*I&I2n{-fg
z<;>eZUJ42xyQA~*_TH5b7^D)U)-8~nmmtuzP-0s=U(_P*bq_f&-B%5p&&d{l_QgDz
za|=IijF+DENG<L@yHp&9o7_>~IHA1g=XWp4w#8lis>pdyN$c05!%rVAS$O9~WF(7S
zQb%FJ<3t6~tlLUX^ZsdCDlK7DHobPo_}C)Nk1{1!lf=pruGuI)Qb|(aRK9p}(yy;c
zrpuB~Ok6zE@~)1Pf_z^>L*Ro+8^hL3j8c?Z#P&{k;nI1rvB^t27YMCVc4T|3-4y3=
zDyh3r{`N`b6OFg#zl_@ZF^bh~VWy_C!oS6$X>q?kKC%&0@z8tVw&?!--1rAaA3I!H
z+@`r$!Dw-!Xp*az%<Ia8o31f}izb<vMR>eZnaKF$$V305g~~>sQkM0mFh9FwS*H@H
zm)a$%DmU$k)4U~DDphuJKH9r6#@Ot!`K;*{t8O{&o9AG(G$Lu1|D#D}$D*8<J(1rx
z+x*z<WX)8IY4g3RR3o3>2{a1|>if4e?%9msSBseUDZiC@Y~rUfIaguB#-%>L#48^r
zvnQz}>G?*QJ-YHzHZ^QnYMfeOZR$74L_;H$X@O5mpH5E{dKPu+-t@V*GxjZwR*T83
zOOEGDc28QCb51Sy+OtzPo(3NhdhoD6;Z@46)D*U)8Fo@pK7BWQo;@z$n|&zPH^uF7
zoL%~=nRk6BO?q-r`033@Ur#=@*q3Ihq*_v^KJnqQ_<NTG-DG>7rj`bVt>t|lTK05K
z;nK3KnQ4CM9-isf4k|g_Qs;QK-1nY(eb@8)U(4$rJ#S!pQ75L+^zC`0mPVt|ibgYy
z1~HAPGgYGMmN~aAa}|?F7E7-`nx35(9m|zr{qI*ui&aL`G>xvVj4r(wT}~^y_Gxq<
zTG4$>qxam3UOSCGHH~?U&$?4X{N`PE-Sm97WK@ycL)NOO337L`#GX}|-K#NDa+$lL
z=h=$Ru*~kDms7nmdy`&H$$Hsar8zxMbB13`NLYr?!t@E}lvkZyx?*EyR@1G_Q_<O6
z&y($vI`m%nrmmb?_HtfV=KQ*s^V>8RywY6wDRbekmkaxzE4^KIYN1LQm&~4%vnT0k
zZZloEq-|>QqPQX@nI%crCp#s(HLhI2_G*RNss;11R!Xf}rSxhQU)E}+C;oCmy33v}
zo;0U=mrQwIhWpH{Rhw3=-}P$!BCVBt+Utd0ul|<RER;Oc?A5;zD~Z2fdL-?%xBQxS
z)g}8(#nmmB=55K--d?tPd!6=<w$(fOw0BNhy>p)Su4Sutt<&DUZT0Sb+Ix<@_CI(g
za^2k4Nut}cUT=Sueda?pL&??sY>r!*8uy5;IVh)dNNvp_J)Og5YYyAJkuVKqut`X;
z(z-H3@gQ5nem0#0ey<PMWgo9vb1X^c<g_&>=johUw&v72ozvUaoZhE%=GdAu=XB0q
zTXXiF&beo6&b@ncY8rp&)aRvfZ%(AWIo5aec-NZkue8tW>0UNld)ZF+ird;Ne!5q~
za!+Ng39jW^{OyJ7$LRe@x|hmU?-yHp;L`bHPCB=it-ZBQ_x856xA(2R(Ug0Q&7qX<
zpQw3V?y+y$Tk}?Lef9QcTK2s|Yaj6GJrrB_P;T9Ap`2q<q35Thvpmv$<hJg?yWCw#
zYi_c=yFX3)>8H2%qV%5Uy*nYd_DSEmCt7)DJTz>tY71Rjb%9Oq<-WYbT5ETu<vn|~
z_L<hY*L7<yJ$twLlHU6^-8XFcw`S!rOnKq?aYf}XjSk0kAI$O(1+ClmF7HL#yLX?m
zza;5>Q`3FdwQft?`uqRheXn|RBW?W;q1^jc`oF^TZY)}7!ua-XlJ1XX>;KGJ{qxqk
zFJAiJgY<viT6ZH)|Npbq|C#dtRpsC4d;jIyyFY3Lmzvgoe0TYpTK;uC{Xbd;tc$f@
zMCCI$=ikr!@T@8C{Xf1nY|r2RtTNz8-oTl>o+G({b^V8Z>()10iGO0#{k+M5cd|Cq
zbpyWV2DgOrnYpJtj(WrMdV>JJp`iH3TSEH3jYL{+y`EVXAs}ri;=WPDe<Q2$h7LLX
z0H?dBN_E~vtrf2~lxW{5(Qha@eWT>|HQdY^Jo>L+)h)Yt=)L6ejWXvAWv_3Py<d1G
z%5a|52chD(xwX6>gElJg8!7S|3GFwqy_zdMU-L3ck)pkkin|f_=MSQv4W*q6LLFD%
zDayX-mviPv1AmQ?M!%8f^i7)cjkK0;(pqn%y?vARej}aZn{>__=`Jrif8~?LWq-|X
zBaP2SdiOVJMf>V=8|#U0Hk3F1XLQ-<v)V?BmG7pe7H!S@w5_a2qkfaVy0KaMX0v=_
z^KxU&?oUVl6<N&wWcvP-#r{pE^EX?De>SMzY`x#uhTmBA{YHntHS&|EDEoibwSR41
zZDhZ^*oJ+J1OFEXW@GE-&Gy@kojw~mJpW`l{j=3?BNuBE>+sJm!X|F%TP)=_NvRj5
z=P8G}7XOKRZP#w>F#n6=>dkKJO}w|47;G>0(%#~^`m?FIiO+o#t=nH*Pk*u6y~SVr
z3yXNZ>hA*iWFtH8&0B(uo%lEVo!{d1-z3Dn)JFP?ulZMt*G9qdrlG-KHSJ9dqqjJF
zfARA+jTHZEq+Im-*oGr^g+axok^4<!rvLjIaojZax~YwEKL6~?{Kk6G%{qVg7#>N=
z-p;jcd)pcneVxQ|oda5BH`TsLGn*YZ+m<C;##_9le%WN>&s){{zwB?yQTP9xetdOe
zb=iTs*BQav4r+bd>ScC(+P9?5+pg{@%W40Xxp*7X`QlCQCfiDv`aUg={$Hwo`dild
zvP^fg?EY<u*UQc;Y(HRBR>-|QcfWR``?oA<-Qsqg67lav?PVqE8&cmtms)*SX>v&X
zf748U^RjxgV&?C~=G&`^%?qu!*BmY@_x@gxZ(g^1TlIbOI(75h!{xP$_47Wf+u44&
zGp#&_`FqXzvV!I2)yvIWm@7(+Et<`Dw6Is~^xIzc&$>K2+&uaB_WI->xywJMR+orH
zKaXPnn$T_0y?sY_^XrEAg{s}=`S+*f|1PcDyt=LWTkGl7McL+syDf75S7hxkZ@X_k
zadJuZcZ=HhJ5=h;>ypX>v(1|H%O`Bto|s;K=wHR8%@xJlzaLJsoLp|!UTiee{72V&
z^9i@hdWutQmESk6-ZAsJMV0*b`uNJA`#-afhfUz#KJ9U3-|wBXoQpax@2tCSxk!H3
zqR-!FHJdH4{<V0%`Qpu%oz2_b<Bg`C-f1VjYk~caiN%{{o&J^-{JpOHSCg|<wR+Wb
z_m3;Qe<ZhCtyx}GU;k^#<Zsj4vsX+1YA!EZ99%Yg@{&05(mD5c{Hx60p1j|DQ}mBk
z|LqCx6?OZ6wOQ|M*REbv{zG}S*<$CiE$-Hv!gp*ew_dXNXM*{+?ajL;egBo{Y`JFE
zjx~!aJo2|??%%Pe|MjZ#y9NILie<VS=dH6*y<+F`wOhn@?)2W3%U{|5+hT3^>VwCB
zPZBq)XaA$T+B(83IBj{w{^*};)@ScM{{5i$_SNM!sr8jJjn~Yuu35AE=eF5DPnMhS
zd%n!-?Y9lerhU~F$2MPE)NV2T_0H<gKQ|w*I`_QtnEoyi@n1`3@0z>%*8=9BtAzjV
zIQ{Fu^<C@3tER+T^``$iI)C?~$A1=D?^t*H*TwBt+otV0FK@dlzH&Kt(YoeuE9cuT
zSN~^wnfdS9=ImRGt*bu&I>udeT6@(#?%#V3?LN$2+g`l4O};v@`Nv^vv$OYW4)~Wn
zayCEm+F+aZ-v^5=TY`V=58l3!f6tEWe^2Lsf9AgZNd7Vl%}>UYw=es@ZSV5Bo2%<Y
zp4;XKeN{bflU{6oLVV4(#jo#fwtLmQb8GUxcjARFE<bO1rRWho_5ON`2i9-qyXU>*
z-ngLK_L}+s_ovstE?3t-SaUzT@=L$%rO$QOwJn}bt}S!_aeaN*HU3|>H(RaQ|7)(l
z{Ri*AyOx_Si{5iay!t!yuT17|Z`uD=&Hwd~*@dBzshLGmVu6BF3!AW<&y9kI2U`VH
z!?siiCcE`YTPD?H{4+>$nINKBW>P7X>NQn6a$CtyBZdhxnBo~20xqlh&0%2Uc=J*?
z<HCH#I+mXwAG5YCvaeAQwfgY<!is=qwi#Lh%Y1qjIE|h}O?d6nE^x4pb@s={2R3J2
z_cOV@VabgNino`gT5r<z*;{RStF_xaCvsmir?^?ojDoO6OG)!}KSef$F7TeMW!fcj
zIP~OfbMLjQBwwFd+u?a$w^ph&>+0&r?Pa+Ug$#4e^39(8lr(?7$j%_R?AA=J^s|Ro
zA9K?V{P23}$(#4?&I+&mGQECj`1ZQFB{|2pq`Rx>-8}wu$v)%f-*oQmad|AKeauyE
z+m_$oKAfzot+U@+^G59atNZ`u5By`$?#kWvHs{y7Jqr&dXW4u-_@HOYVHy2i>BqB8
zr%m=xx;#Pe_pVpk8w7kGpI^i6`X_tsrVp<!9NEYs<88nbKWE~x7h6{Iy35Ej`yHBB
z_WJCKQvy7Cj!IXB-|qN6YxVh~YO{+!IjfmZD)Qu>+Oz41`qn=eTwkqtbIShZo-Z4Y
z8J+d%b-2y7hj*`8dlZ)koBWfB=M<F}PuTzcSj$CAy`OI`>)Kv?b>8d6v)jTKcD>kK
z;QS)Uq{RN!6RXLWytsE4o_+Vqr{Bh6@}}Zo^ZqMZCtn}hVzM+iFm~$Iuy`-y<ED;R
z-yCOq`sSiXjI;98z4pA9{av+VWyMrIJ8i{oGP)WE{Bvh0Va+>e(b{8hMT!5==Dm8Y
zUo&oN@ATbzJLSAe$ep5zt)=RbE3f7pJY_St_*!YV^QLf}x1yS-t5a1ro~m{?*?uYE
z<JIXt4ZPb5Z>DXpE?X6)JJ~ocQ2BPLS1xB>;ps;9vlW->`SptZT|)oPNI7!h>A7tk
z_e&<&v^||W;T{+3-q&kqTBof$B;c)*`DD`S$svKlhriCu*k=$r*>Jk*>nn~^i<eG*
zbn%(?tXHen?yFibd1h&pLVNVOZ<zrbUC%wsKf6pa*P&SMSHRRB*NfK^W~Qur?h$@O
z>ixC8KGVz%^SiEH%T)a){c2{#)SdUIc|8)y*!=nK50!a)KYe(o&AIho|MQ0LXJ>zY
z<8s>M>2y(^OJQfGY@2p&qwJ=LWP8&!{AF|J3mX<*=l*tWt$X>h*mn*KSt5^KvzD)0
zzxVRn+nMV<_45nXZSJ!?e<bzKrSjgtpNyk>{$Bl;GjUJ4VexzO?-j=;+*FgR?b{MI
z!}m&NYUR(%hv$9&@Z##S=!<s`)_8w&6kl3fpLKfX+XGLu_0Hx7u3(C~d+EAEw*-Ic
z)`{|$`#x!2Jlk&^sD1Ul&QS;UI)RoOk@I)W3KxBPx2xb>@Z6|`CytXDRtG%)JfA!E
z#kL!%Iu+Lp!#FB4ggEqcS{)eg9A<gGk2{XL>gM5l>$inE3uyYadDkpDA(XNG_E&*!
ziGPxbFT767ESvhy{G4#K(8+0LukZGCJ^3ubw0*hy-?<ZAgRKIE|9{`{>aR}4<I_p}
z^*7dVvNf7FZcY&Io#A*mv?tloTY1qB)2-bP+1okyB!2(Gaa?xQN7HAwAFC~9+a+W9
zJ~m!hd25)*1hI7-u2#;f|94E?AIc?A&bnv*yS8cjZ+fl|{2!ShVtI3?U6xkm>FVnm
z?8^^U?VT`vZ^$zv-fc(y<tA!0ObL@%XnE|H=Ef?E<|&dtCpo{#-8}Wdoy8W`kB&&~
zeODAYiT|94lW}p>^XVscKM*+S>~lp@xKKR%4#WMM9+tNz%=Gn2(_z2tuaWkm_sJu1
zWy4Cf^mj)p<7@uSc-iD};(6@m9>yyxbbfNqaJ^Jm7%DQ)Uh=!wBh5=oRPV-nX}YU5
z?`jEL6SHzd$SK2+qrpw0UniQdp4{W~uOy`7%5#q;9p0*jQx+&Mx_2|{*QJ!ZYgbNM
zb0=Wwi;#vk{=O%xGXr(M2Ha{8s?*r={Ib{0bG=!Y?SEw7cKe&@_UCHQk__1w2W7q<
z^DI1(Cb8;u%<^CZvtt*hZp~gXvtZZagj1O_t}YR?d%N6upPbr~(_69}_@7;6cKqBj
zb>jWar@SK1*L`blEuH4a>~Q{RZ)s9H%iF9-X{XcM_?s6yuW2^(-m!*(ar@4zZ}Tc|
zN8kS^w&S4ayMoT>n8$MBJ5Pqb`&TsccFc1-@m&|EzAIUoeW#`J(gyJ}ZxkAT>8uG6
z-}6xPeZ|S>xX<&%_r45$UsdWYyu|kMqFC<LX`Zj|Ub`p0Um-=zV5|0-Wt!V&{1pAr
z(B6J`ebTh$E=$sCUUSd+yYG8N&E$d>O__sS_7#W3t{JrHpRr>ut~e~$R?uOu^N6Qe
z;;7oYg3d^rM<UyQ9MMwS*q!<(N$POLQS)ibU46L?8Oo>oS<EZ!Y0XJidi~>s=edoO
z+V`ZWn@gT@tJ^eXaZIwd_|H=w^NOa;^hwp<tiR~rT7^AzGSSMllBYAT6-~W*Csi+h
z=h=cd<5|!Dq?ui}JXc;;Jn!Y6=cfM+CvbgRIrCrkYDv4>JI@z=`@Bf>ZicP3)y4j4
zB}+7WGrZ-cE?2BGjySG!%INg^OEc5HEYV;4GO+#Dl?i%ZSB9_63fygVbxGaV4F1>a
z{u@bb-PCEiD$+JP?(nYbyYsfLX?^=T@&BwF2gA%<1Z7@S@iE-GIPKe(mAZnNzguoy
zw7bx_iTCaLGU+>4?L4+Dbjr&qpKW%BZTqgnck{~kOW*rA?fagWvH8{arSJc|_I=;a
zyZQD1r5{{*w{gO|+PsYZ>bo|H<=e#L@|)e4s<Xf6*;N_zzKvbxvE=n1$1Lv^_Sefi
zQQW`Xr9JXP(QNBGFW3Fprv2{iw9PU1IHvCiReATWBs=<{t~|qT{eOBz^Z(1da1{S_
zp);-|Bj4Ou?fkdH%XvS~eJ%4m@O|ZWdB5Tu?$$?F{*_(XnOCyDUiM9*`0pFFb|3sT
zWAA95w>(!`_j$Sh+*d~SJ41y2<u2d9_icgt?|VP*mGA#w`$8rE*8Q)16^G^JK6Zxx
zdGv5^>^&Q~Pd=S{_|@VoPsY#tG^5_;ndy0vbNTl^%@ntNq5l8pg~|86tdy^P9)ADV
z<<0-Tu517MCN=)|jr;Sy?bu%Xu5y3%{nv6o_VWLG-x^=@NWT8ZN%MW5jO9<AZn*dP
z;`81w{YJH~!{vWpS^n?q`uCOZs^fp({r~UVM*V+p^5^||X<q;1{QbIb`|JOHEZ_g<
zp?!4y@9Xmazg++S_xt?%fB*0QXWH<eO@M(jfPq_pkw1WuSK#lRr>t@UOv(XF>Jyl>
zFEHr~FdGLjn@?c2zQAlRz~UUh;y!`J`vQx<0BdjnYxo4#=nJg60?bTI3=Gx)<Q-6v

diff --git a/docs/images/scfg_xtrn_timed.gif b/docs/images/scfg_xtrn_timed.gif
deleted file mode 100644
index fe9a883839a40c8dc37386dc169d599983d93c4e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 19095
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

diff --git a/docs/images/scfg_xtrn_timeopt.gif b/docs/images/scfg_xtrn_timeopt.gif
deleted file mode 100644
index 1ee9ddda5943b014198505fb039bdc98d4cd342b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 19898
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%0A_YWI%&
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

diff --git a/docs/images/scfg_xtrn_tw2002.gif b/docs/images/scfg_xtrn_tw2002.gif
deleted file mode 100644
index 229044bac22342266fedd8048458f210947212df..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 19910
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

diff --git a/docs/images/scfg_xtrn_usurper.gif b/docs/images/scfg_xtrn_usurper.gif
deleted file mode 100644
index 257ca460d86641b491df78f68837caef936e7582..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 19642
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

diff --git a/docs/images/scfg_xtrn_winos2list.gif b/docs/images/scfg_xtrn_winos2list.gif
deleted file mode 100644
index ad7de6cae9651c964de22942c08678dbb7bf13ed..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 15395
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
ao`$V^8mIRxZQZjxz2`!DY%DAc4Aua4fE6A9

diff --git a/docs/images/setuptype.gif b/docs/images/setuptype.gif
deleted file mode 100644
index 631b3f4c3427786e1c723ebcc6e2080b0f5650ce..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 29268
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

diff --git a/docs/images/synclogo_fancyred.gif b/docs/images/synclogo_fancyred.gif
deleted file mode 100644
index d2211ade6e8da13181180b9889974dd14c3372d4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 15560
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

diff --git a/docs/images/tw2002.gif b/docs/images/tw2002.gif
deleted file mode 100644
index 1ff78ed042d8d7f651992ffc6f7ced0268aa164a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 12023
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

diff --git a/docs/images/uedit_v3.gif b/docs/images/uedit_v3.gif
deleted file mode 100644
index ecea17506dfa5ae61ee3620eb5119d49c058fcc3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 21347
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
Xdp>jC>zni5OV0aQq{PI;z+epkqWwmT

diff --git a/docs/images/uedit_v3_exe.gif b/docs/images/uedit_v3_exe.gif
deleted file mode 100644
index af5d847df17c53d675a4ffb1bf916505465c8e3d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17609
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
btJ9PI8ZQir+$(xLM*XqzS?_RO4hCxgIG6EN

diff --git a/docs/images/v3icon3.gif b/docs/images/v3icon3.gif
deleted file mode 100644
index 31d2bee5de53eee1cea39c44d7ef2d2da36ca6b5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 270
zcmZ?wbhEHb)MMab*vtR|#>U2J#>Q!BX*1J|XQrjioS8Or=FBr`#%IpVJagvEe+GvC
zX~zH4(*FPd&%nT-_>+Z^fq|bv2c#2Z1_R6P3nx8S@3n|lbqWw!(K{<ijk(FdrHJQ4
zL5g?o)zdBhY(WYvqKg70SmaJHE;C!vDdUq~!l)I&c|-J2frXl?+3ZIJD`Z_Re_FJ2
z##}xo(dL7!3i4hrW^u+n|C-ZSBf`Q|=)xISQQK%0($`d-t>{=B9a~-*T;JR<doCZB
zBTI4V%)aa_uHbo-dRwO2vB{Oq@lmia+P*V=k7#mO3^T*wZeauCh5G4yMyHIFjLt|e
TJkNM;zv3-n|Eqk03=Gx)H)LWL

diff --git a/docs/index.htm b/docs/index.htm
deleted file mode 100644
index 8ec8b0cb2e..0000000000
--- a/docs/index.htm
+++ /dev/null
@@ -1,134 +0,0 @@
-
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<base target="_blank">
-<title>Synchronet BBS Software Documentation</title>
-<meta name="Microsoft Border" content="none, default">
-</head>
-
-<body><!--webbot bot="Include" U-Include="_borders/top.htm" TAG="BODY" startspan -->
-
-<a href="http://www.synchro.net"><img border="0" src="images/synclogo_fancyred.gif" alt="Synchronet BBS - Multinode Bulletin Board Software" width="626" height="86"></a>
-
-<hr>
-
-<!--webbot bot="Include" endspan i-checksum="23126" -->
-
-<h1>Synchronet Documentation Index</h1>
-<p>Latest News and Updates for <a href="http://www.synchro.net">Synchronet</a> 
-can be found at the following sites :</p>
-<blockquote>
-  <b>Official Synchronet Web-site<a href="http://www.synchro.net"><br>
-  http://www.synchro.net</a></b>
-  <p><b>Official Synchronet BBS (Vertrauen) Telnet Servers<br>
-  <a href="telnet://vert.synchro.net">telnet://vert.synchro.net</a> and 
-  <a href="telnet://cvs.synchro.net">telnet://cvs.synchro.net</a></b></p>
-  <p><b>Official Synchronet BBS (Vertrauen) FTP Servers<br>
-  <a href="ftp://vert.synchro.net">ftp://vert.synchro.net</a> and 
-  <a href="ftp://cvs.synchro.net">ftp://cvs.synchro.net</a></b></p>
-  <p><b>Official Synchronet Mirror FTP Server<br>
-  <a href="ftp://ftp.synchro.net">ftp://ftp.synchro.net</a> (official releases only)</b></p>
-</blockquote>
-<h2 align="left">Synchronet Sysop Documentation</h2>
-<blockquote>
-<h4 align="left"><a href="sysop.html">Synchronet Sysop
-Documentation</a> - For Synchronet System Operators</h4>
-<h4 align="left"><a href="baja.html">Baja
-Documentation</a> - The Synchronet Command Shell and Loadable Module Compiler</h4>
-<h4 align="left"><a href="sbbsecho.html">SBBSecho Documentation</a> - How to configure and use Synchronet's FidoNet Packet Tosser</h4>
-
-<p align="left">Important Information and Frequently Asked Questions :</p>
-<ul>
-  <li>
-    <p align="left"><a href="platforms.html">Supported Platforms</a></li>
-  <li>
-    <p align="left"><a href="ftp://vert.synchro.net/main/sbbs/sbbs3faq.txt">Synchronet v3.0 Frequently Asked Questions</a></li>
-  <li>
-    <p align="left"><a href="ftp://vert.synchro.net/main/sbbs/v3cfgfaq.txt" target="_blank">Synchronet v3.0 Frequently Asked Questions (regarding configuration)</a></li>
-  <li>
-    <p align="left"><a href="ntreadme.txt" target="_blank">Synchronet v3.0 Windows NT/2000 Instructions</a></li>
-  <li>
-    <p align="left"><a href="ftp://vert.synchro.net/main/sbbs/v300_new.txt">Synchronet v3.0 What's new in this version?</a></li>
-  <li>
-    <p align="left"><a href="upgrade.txt">Synchronet v3.x Upgrade Information</a></li>
-  <li>
-    <p align="left"><a href="http://vert.synchro.net/sbbstodo.html">Synchronet v3.0 To-do List</a></li>
-  <li>
-    <p align="left"><a href="ftp://vert.synchro.net/main/sbbs_3rd/syedtfaq.txt">SyncEdit Frequently Asked Questions</a></li>
-  <li>
-    <p align="left"><a href="ftp://vert.synchro.net/main/sbbs/manifest.txt">What
-    happened to Digital Dynamics? (Aug. 1996)</a></li>
-  <li>
-    <p align="left"><a href="ftp://vert.synchro.net/main/sbbs/sbbs4os2.faq">Synchronet
-    v2.30 OS/2 Frequently Asked Questions (March 1996)</a></li>
-  <li>
-    <p align="left"><a href="ftp://vert.synchro.net/main/sbbs/sbbs0595.faq">Synchronet
-    v2.30 Frequently Asked Questions (May 1995)</a></li>
-  <li>
-    <p align="left"><a href="ftp://vert.synchro.net/main/sbbs/ddtb1001.txt">Synchronet
-    v2.30 Common Problems (Feb. 1996)</a></li>
-</ul>
-</blockquote>
-<h2 align="left">Synchronet User Documentation</h2>
-<blockquote>
-<h4 align="left"><a href="user.html">Synchronet User
-Documentation</a> - How to use the Default Synchronet (Classic) Command Shell</h4>
-
-<h4 align="left"><a href="http://www.synchro.net/sbbslist.html">Daily Updated
-Online Synchronet BBS List</a>&nbsp; - Worldwide Listing of Synchronet
-Systems</h4>
-
-</blockquote>
-<h2 align="left">Synchronet Developer Documentation</h2>
-<blockquote>
-
-<p align="left"><b><a href="smb.html">Synchronet Message Base (SMB)
-Documentation</a> - Synchronet Message Base Specification&nbsp;</b></p>
-<p align="left"><b><a href="http://www.synchro.net/source.html">Synchronet Source Code</a>
-- Obtaining, building, and modifying the Synchronet source code</b></p>
-</blockquote>
-
-<p align="left"><a href="#top"><b>Back to Top</b></a></p>
-
-<!--webbot bot="Include" U-Include="_borders/bottom.htm" TAG="BODY" startspan -->
-
-<hr>
-<p><b><a href="http://www.synchro.net/copyright.html">Copyright</a> � 2000 by </b> <a href="http://www.synchro.net/author.htm"><b>Rob Swindell</b><br>
-</a>
-
-<a href="http://www.synchro.net"><font size="2"><br>
-Synchronet BBS Software</font></a>  <font size="2">  (Synchronet)
-Version 3 is comprised of several documentation,<br>
-library, executable, and <a href="http://www.synchro.net/source.html">source code</a> 
-files, all of which are covered by the<a href="http://www.fsf.org/copyleft/gpl.html">
-<br>
-GNU General Public License</a>  with the exception of the following portions
-covered by<br>
-the <a href="http://www.fsf.org/copyleft/lesser.html">GNU Lesser General Public License</a>:
-SMBLIB and XSDK.<br>
-<br>
-Synchronet Version 2 (for DOS and OS/2) and its source code was released to the<a href="http://www.fsf.org/philosophy/categories.html#PublicDomainSoftware">
-<br>
-Public Domain</a>  by <a href="ftp://vert.synchro.net/main/sbbs/manifest.txt">Digital Dynamics</a> 
-in 1997 and remains Public Domain software today.<br>
-Synchronet Version 3 is not Public Domain software.</font></p>
-<p align="left"><font size="2"><a href="http://www.synchro.net/author.html">Rob Swindell<br>
-</a>PO Box 501<br>Yorba Linda, CA 92885<a href="http://www.synchro.net"><br>
-http://www.synchro.net</a>
-
-</font></p>
-<p align="left"><font size="2">For the complete Copyright Information please
-read the <a href="http://www.synchro.net/copyright.html">Copyright Documentation</a>
-.</font></p>
-
-<!--webbot bot="Include" endspan i-checksum="55766" -->
-
-<p align="left">&nbsp;</p>
-
-</body>
-
-</html>
diff --git a/docs/index.html b/docs/index.html
deleted file mode 100644
index c3795be95e..0000000000
--- a/docs/index.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<!-- This is for http servers that default to index.html -->
-<html>
-
-<head>
-<meta http-equiv="refresh" content="0; URL=index.htm">
-</head>
-
-</html>
\ No newline at end of file
diff --git a/docs/install.html b/docs/install.html
deleted file mode 100644
index 5fa0eb526c..0000000000
--- a/docs/install.html
+++ /dev/null
@@ -1,206 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<title>Installation</title>
-<base target="_self">
-</head>
-
-<body>
-
-<!--webbot bot="Include" U-Include="_borders/top.htm" TAG="BODY" startspan -->
-
-<a href="http://www.synchro.net"><img border="0" src="images/synclogo_fancyred.gif" alt="Synchronet BBS - Multinode Bulletin Board Software" width="626" height="86"></a>
-
-<hr>
-
-<!--webbot bot="Include" endspan i-checksum="23126" -->
-
-<p><a name="top"></a><a href="sysop.html#TOC">Back to Table of Contents</a></p>
-
-<h2>[1.0] - Synchronet Installation Instructions</h2>
-
-<h3>Finding the Latest version of Synchronet</h3>
-
-<pre>You can find the latest released public distribution of Synchronet at 
-<a href="http://www.synchro.net" target="_blank">http://www.synchro.net</a>.</pre>
-
-<h3><b>Versions and Supported Platforms</b></h3>
-<pre>Synchronet is currently available in two separate major versions:</pre>
-<ul>
-  <li>
-<pre><b>Version 2.3 for DOS and OS/2	
-</b>Supports serial/modem and local logins
-Native 16-bit and 32-bit console mode executables
-Single node per instance (up to 250 total)
-Version-specific features are noted with: <b><i><font color="#FF0000">(v2 Only)</font></i></b></pre>
-  </li>
-  <li>
-<pre><b>Version 3.0 for Win32 (Windows 95/98/ME/NT/2000)
-</b>Supports TCP/IP logins only
-Native 32-bit DLLs and GUI front-end application
-Up to 250 nodes per instance
-Version-specific features are noted with: <font color="#FF0000"><i><b>(v3+ Only)</b></i></font></pre>
-  </li>
-</ul>
-<pre>All configuration and data files are compatible between version 2.3 and 3.0 so 
-you can combine instances of different versions to create a single &quot;hybrid&quot; BBS.</pre>
-
-<h3>
-Upgrading to a Newer Version of Synchronet</h3>
-<pre>Because of the many variances when changing to a different version or revision
-of Synchronet, this topic is not covered here.	When upgrading an existing Synchronet 
-installation to a newer version or revision, you should <b>ALWAYS</b> consult the
-upgrade documentation included with the distribution (usually in the form of an
-<a href="../upgrade.txt">UPGRADE.TXT</a> file). Upgrade-only distributions are usually made available 
-in a more compact archive form (e.g. <b>sbup300c.zip</b>).</pre>
-<h3><b>Windows 95/98/ME/NT/2000 Installation</b></h3>
-<pre>After downloading the Synchronet distribution file (e.g. <b>sbbs300c.zip</b>), you will
-need to extract the archive file that you downloaded into a temporary directory 
-on your hard drive. You will need <a href="http://www.winzip.com" target="_blank">WinZip</a> or an equivalent archive program to 
-uncompress and extract the installation files.</pre>
-<pre>Once you've extracted the installation files, go to the directory you extracted
-the compressed files to and run <b>SETUP</b> to start the installation.</pre>
-<pre>The default installation directory is recommended for most users. If you choose 
-to change the installation directory, it is <b>critical</b> that you <b>DO NOT</b> use a path 
-with long filenames or spaces as Synchronet still relies on some 16-bit DOS 
-utilities which require DOS-compatible 8.3 file and directory names to function. 
-It is recommended you use a directory named <i>SBBS</i> off of the root directory on one 
-of your hard drives (e.g. <b>C:\SBBS</b>).</pre>
-<pre>You should now be at the Setup Type Installation menu. Choosing a <i>Custom</i> setup
-from this menu, will allow you to select the items that you want (or don't want) 
-installed. If you are upgrading an existing installation of Synchronet (v2.3 or 
-v3.0), it is advised that you choose <i>Custom</i> Setup and disable the following
-installation components:</pre>
-<ul>
-  <li><pre>Configuration Files</pre>
-  </li>
-  <li><pre>Text and Menu Files</pre>
-  </li>
-  <li><pre>External Programs
-</pre>
-  </li>
-</ul>
-<pre><img border="0" src="images/setuptype.gif" width="479" height="357"></pre>
-<pre>
-After completing your selection and the installation is completed you will
-find a new Icon on your Desktop and in your StartUp Folder in your Start
-Menu. If you do not want Synchronet to start automatically during boot, you
-may safely delete the Synchronet shortcut from your StartUp Folder.</pre>
-<h2>
-<br>
-<a name="GettingStarted">
-[1.1] - Getting Started</a></h2>
-<h3>Getting Started with v3.0 for Win32</h3>
-<pre>Upon Executing Synchronet the screen will look something like the one below.</pre>
-<pre><img border="0" src="images/sbbsctrl.gif" width="740" height="497">
-
-After starting Synchronet for the first time there will be several pop-up
-windows that are running programs and events required before the system
-can be used.</pre>
-<pre>The last window that opens will start the Synchronet Configuration
-Program (<a href="system_config.html#System Configuration">SCFG</a>). To run SCFG again later you can load it from the
-<i>Synchronet Control Panel</i> (SBBSCTRL) by selecting <i>BBS</i> and then
-<i>Configure</i> from the menu bar.</pre>
-<pre><img border="0" src="images/sbbsctrl_configure.gif" width="301" height="192"></pre>
-<pre>Before putting the system online you should <a href="system_config.html">configure your BBS</a> with <a href="system_config.html#System Configuration">SCFG</a>
-to set your system options and settings according to your preferences. It
-is recommended you spend some time reading and becoming familiar with
-your <a href="system_config.html">configuration</a> and the many options available.</pre>
-<pre>After completing <a href="system_config.html">configuration</a> you should then follow the proper steps
-to <a href="system_config.html#Creating User Accounts Locally">add a sysop account</a>. Once you <a href="system_config.html#Creating User Accounts Locally">create the account</a> you should become 
-familiar with the <a href="user_editor.html">Synchronet User Editor</a> and set the <a href="security.html">security</a> settings for 
-the account(s) you have created.</pre>
-<pre>Once you have completed the initial setup of your system and sysop
-account, you have a basic functioning Synchronet BBS System. Please
-refer to the rest of the <a href="../index.htm">documentation</a> to finish the setup of your new
-BBS System.
-
-<a href="#top">Back to Top</a></pre>
-
-<h3>
-Getting Started with v2.3 for DOS and OS/2</h3>
-
-<pre>Before putting the system online you should <a href="system_config.html">configure your BBS</a> with <a href="system_config.html#System Configuration">SCFG</a>
-and set your system options and settings according to your preferences. It
-is recommended you spend some time reading and becoming familiar with
-your <a href="system_config.html">configuration</a> and the many options available.</pre>
-<pre><a href="system_config.html#System Configuration">SCFG</a> is the <a href="system_config.html#System Configuration">Synchronet Configuration Utility</a> which can be executed from the
-&quot;<i>Waiting for call</i>&quot; screen by hitting '<b>C</b>', or from DOS by typing <b>SCFG</b> from any
-node directory. Example:</pre>
-<pre><img border="0" src="images/scfg_dos_startup.gif" width="500" height="150">
-
-After completing <a href="system_config.html">configuration</a> you should then follow the proper steps
-to <a href="system_config.html#Creating User Accounts Locally">add a sysop account</a>. Once you<a href="system_config.html#Creating User Accounts Locally"> create the account</a> you should become 
-familiar with the <a href="user_editor.html">Synchronet User Editor</a> and set the <a href="security.html">security</a> settings 
-for the account(s) you have created.</pre>
-<pre>Once you have completed the initial setup of your system and sysop
-account you have a basic functioning Synchronet BBS System. Please
-refer to the rest of the <a href="../index.htm">documentation</a> to finish the setup of your new
-BBS System.</pre>
-
-<h3>Copying Utilities</h3>
-<pre>Synchronet has a specific sub-directory for executable programs (<b>EXEC</b>).
-You need to copy all utilities that the BBS will run into this directory
-(this does not mean Doors or Online Games). For example, you need to copy
-<i>PKZIP.EXE</i> and <i>PKUNZIP.EXE</i> into your EXEC directory. If you plan on supporting
-other archive/compression programs on your BBS, you should copy these programs
-into the <i>EXEC</i> directory as well. Any file transfer protocol programs need to
-be copied into your <i>EXEC</i> directory. Synchronet comes with an unregistered copy
-of <i>FDSZ</i> (<i>DSZ</i> for the DOS and OS/2 versions). If you have a registered version of 
-<i>DSZ</i>/<i>FDSZ</i>, copy it into the <i>EXEC</i> directory as well.</pre>
-<h2><a name="GettingHelp">[1.2] - How to Get Help</a></h2>
-<pre>There are a number of avenues that can be used to find help on Synchronet.</pre>
-<pre>This list is but a small one of the available resources:</pre>
-<pre><b><u>Synchronet Homepage</u>     :</b> <a href="http://www.synchro.net">http://www.synchro.net</a></pre>
-<pre><b><u>Support BBS (Vertrauen)</u> :</b> <a href="telnet://vert.synchro.net">telnet://vert.synchro.net</a></pre>
-<pre><b><u>Echomail support:</u></b>
-  FidoNet (zone 1)      : <b>SYNC_SYSOPS</b> - Synchronet BBS Software Discussion</pre>
-<h2><a name="AboutManual">[1.3] - About this manual</a></h2>
-<pre>This manual is an ongoing work in progress. As <a href="http://www.synchro.net">Synchronet</a> is constantly evolving,
-so is this manual.  This manual will give you comprehensive information about
-installing, configuring, updating, and maintaining your <a href="http://www.synchro.net">Synchronet</a> system.</pre>
-<pre>The manual is currently maintained in an <a href="http://www.synchro.net/source.html">Open Source</a> manner. If you have any
-questions or concerns about the manual, please direct them to : 
-<a href="mailto:syncdocs@wasteland-bbs.com">syncdocs@wasteland-bbs.com</a></pre>
-<pre>Updates for this manual can be found periodically on <a href="http://www.synchro.net">http://vert.synchro.net/docs</a> 
-or at the <a href="http://wasteland-bbs.com/syncdocs/">Synchronet Documentation Project</a> (<a href="http://wasteland-bbs.com/syncdocs/">http://wasteland-bbs.com/syncdocs/</a>).</pre>
-<p><a href="#top"><b>Back to Top</b></a></p>
-<!--webbot bot="Include" U-Include="_borders/bottom.htm" TAG="BODY" startspan -->
-
-<hr>
-<p><b><a href="http://www.synchro.net/copyright.html">Copyright</a> � 2000 by </b> <a href="http://www.synchro.net/author.htm"><b>Rob Swindell</b><br>
-</a>
-
-<a href="http://www.synchro.net"><font size="2"><br>
-Synchronet BBS Software</font></a>  <font size="2">  (Synchronet)
-Version 3 is comprised of several documentation,<br>
-library, executable, and <a href="http://www.synchro.net/source.html">source code</a> 
-files, all of which are covered by the<a href="http://www.fsf.org/copyleft/gpl.html">
-<br>
-GNU General Public License</a>  with the exception of the following portions
-covered by<br>
-the <a href="http://www.fsf.org/copyleft/lesser.html">GNU Lesser General Public License</a>:
-SMBLIB and XSDK.<br>
-<br>
-Synchronet Version 2 (for DOS and OS/2) and its source code was released to the<a href="http://www.fsf.org/philosophy/categories.html#PublicDomainSoftware">
-<br>
-Public Domain</a>  by <a href="ftp://vert.synchro.net/main/sbbs/manifest.txt">Digital Dynamics</a> 
-in 1997 and remains Public Domain software today.<br>
-Synchronet Version 3 is not Public Domain software.</font></p>
-<p align="left"><font size="2"><a href="http://www.synchro.net/author.html">Rob Swindell<br>
-</a>PO Box 501<br>Yorba Linda, CA 92885<a href="http://www.synchro.net"><br>
-http://www.synchro.net</a>
-
-</font></p>
-<p align="left"><font size="2">For the complete Copyright Information please
-read the <a href="http://www.synchro.net/copyright.html">Copyright Documentation</a>
-.</font></p>
-
-<!--webbot bot="Include" endspan i-checksum="55766" -->
-
-</body>
-
-</html>
diff --git a/docs/install.iwz b/docs/install.iwz
deleted file mode 100644
index f7c4c29c18..0000000000
--- a/docs/install.iwz
+++ /dev/null
@@ -1,288 +0,0 @@
-
-[InstallShield Wizard]
-iDate=0
-iTime=0
-Flag=0
-ISX.EXE Size=679936
-ISX.EXE Date=11:21:52AM  4/8/1999
-ISX.EXE Ver=2.1.2.62
-SETUP.EXE Size=45312
-SETUP.EXE Date=9:12:24AM  3/23/1999
-SETUP.EXE Ver=3.0.111.0
-SETUP.INS Size=81342
-SETUP.INS Date=11:26:40AM  4/8/1999
-SETUP.INS Ver=Not available
-_INST16.EX_ Size=81342
-_INST16.EX_ Date=11:26:40AM  4/8/1999
-_INST16.EX_ Ver=Not available
-_INST32I.EX_ Size=294079
-_INST32I.EX_ Date=9:12:22AM  3/23/1999
-_INST32I.EX_ Ver=Not available
-ISDEPEND.INI Size=6857
-ISDEPEND.INI Date=1:24:36PM  12/27/1999
-ISDEPEND.INI Ver=Not available
-SWDEPEND.INI Size=9711
-SWDEPEND.INI Date=1:24:40PM  12/27/1999
-SWDEPEND.INI Ver=Not available
-ICOMP.EXE Size=119808
-ICOMP.EXE Date=9:12:24AM  3/23/1999
-ICOMP.EXE Ver=3.00.062
-SPLIT.EXE Size=90624
-SPLIT.EXE Date=9:12:24AM  3/23/1999
-SPLIT.EXE Ver=3.00.060
-PACKLIST.EXE Size=87552
-PACKLIST.EXE Date=9:12:24AM  3/23/1999
-PACKLIST.EXE Ver=3.00.060
-Version=2.12
-DevTool=Borland C++Builder 5
-Platform=Win32
-DisksBuilt=1
-DisksDir=INSTALL\650MB\
-TabsVisit=111100111
-LangNum=0
-LangDir=
-
-[VisualDesign]
-AppName=Synchronet BBS Documentation
-AppExe=
-AppExeFile=
-Version=3.0
-Company=Rob Swindell
-Title=Synchronet BBS Documentation
-TitleType=1
-BackgrndBmp=e:\artwork\syncgold_16_499.BMP
-BackgrndAlign=1
-Backgrnd=1
-BackgrndColor=0
-Uninstall=1
-UninstallChecked=1
-Silent=1
-SmsMode=0
-
-[Types]
-Types=1
-Type1Components=1
-Type1Name=Complete
-Type1ComponentList=1 
-
-[Components]
-Components=1
-Component1Groups=2
-Component1Name=Documentation Files
-Component1Description=Documentation Files
-Component1GroupList=1 2 
-
-[Groups]
-Groups=2
-Group1Size=1000154
-Group1Files=33
-Group1Name=Documentation Files
-Group1Dir=<INSTALLDIR>
-Group1Update=2
-Group1TargetOS=-1
-Group1File1=C:\sbbs\docs\utility_reference.html
-Group1File2=C:\sbbs\docs\appendix.html
-Group1File3=C:\sbbs\docs\baja.html
-Group1File4=C:\sbbs\docs\chat_section.html
-Group1File5=C:\sbbs\docs\customization.html
-Group1File6=C:\sbbs\docs\default.htm
-Group1File7=C:\sbbs\docs\external_programs.html
-Group1File8=C:\sbbs\docs\features.html
-Group1File9=C:\sbbs\docs\file_section.html
-Group1File10=C:\sbbs\docs\glossary.html
-Group1File11=C:\sbbs\docs\index.htm
-Group1File12=C:\sbbs\docs\index.html
-Group1File13=C:\sbbs\docs\install.html
-Group1File14=C:\sbbs\docs\message_section.html
-Group1File15=C:\sbbs\docs\modem_setup.html
-Group1File16=C:\sbbs\docs\multnode_config.html
-Group1File17=C:\sbbs\docs\networking.html
-Group1File18=C:\sbbs\docs\platforms.html
-Group1File19=C:\sbbs\docs\sbbsecho.html
-Group1File20=C:\sbbs\docs\security.html
-Group1File21=C:\sbbs\docs\smb.html
-Group1File22=C:\sbbs\docs\sysop.html
-Group1File23=C:\sbbs\docs\sysop_commands.html
-Group1File24=C:\sbbs\docs\system_config.html
-Group1File25=C:\sbbs\docs\textfile_section.html
-Group1File26=C:\sbbs\docs\troubleshooting.html
-Group1File27=C:\sbbs\docs\user.html
-Group1File28=C:\sbbs\docs\user_editor.html
-Group1File29=C:\sbbs\docs\adding_nodes.html
-Group1File30=C:\sbbs\docs\htdocs_contrib.txt
-Group1File31=C:\sbbs\docs\gpl.txt
-Group1File32=C:\sbbs\docs\upgrade.txt
-Group1File33=C:\sbbs\docs\ntreadme.txt
-Group2Size=2075783
-Group2Files=110
-Group2Name=Documentation Image Files
-Group2Dir=<INSTALLDIR>\images
-Group2Update=2
-Group2TargetOS=-1
-Group2File1=C:\sbbs\docs\images\baja_example.gif
-Group2File2=C:\sbbs\docs\images\bre.gif
-Group2File3=C:\sbbs\docs\images\lordcfg.gif
-Group2File4=C:\sbbs\docs\images\sbbsctrl.gif
-Group2File5=C:\sbbs\docs\images\sbbsctrl_configure.gif
-Group2File6=C:\sbbs\docs\images\sbbsctrl_telnet_cfg_gen.gif
-Group2File7=C:\sbbs\docs\images\sbbsecho_additionalecho.gif
-Group2File8=C:\sbbs\docs\images\sbbsecho_additionalecho_list.gif
-Group2File9=C:\sbbs\docs\images\sbbsecho_additionalecho_list_tag.gif
-Group2File10=C:\sbbs\docs\images\sbbsecho_archiveprgs.gif
-Group2File11=C:\sbbs\docs\images\sbbsecho_archiveprgs_zip.gif
-Group2File12=C:\sbbs\docs\images\sbbsecho_logoptions.gif
-Group2File13=C:\sbbs\docs\images\sbbsecho_main.gif
-Group2File14=C:\sbbs\docs\images\sbbsecho_node_arctype.gif
-Group2File15=C:\sbbs\docs\images\sbbsecho_node_packettype.gif
-Group2File16=C:\sbbs\docs\images\sbbsecho_node_settings.gif
-Group2File17=C:\sbbs\docs\images\sbbsecho_nodes.gif
-Group2File18=C:\sbbs\docs\images\sbbsecho_paths.gif
-Group2File19=C:\sbbs\docs\images\sbbsecho_toggleoptions.gif
-Group2File20=C:\sbbs\docs\images\scfg_chat_channel1.gif
-Group2File21=C:\sbbs\docs\images\scfg_chat_features.gif
-Group2File22=C:\sbbs\docs\images\scfg_chat_gurus.gif
-Group2File23=C:\sbbs\docs\images\scfg_chat_pager1.gif
-Group2File24=C:\sbbs\docs\images\scfg_chat_pagers.gif
-Group2File25=C:\sbbs\docs\images\scfg_chat_theguru.gif
-Group2File26=C:\sbbs\docs\images\scfg_dos_startup.gif
-Group2File27=C:\sbbs\docs\images\scfg_main.gif
-Group2File28=C:\sbbs\docs\images\scfg_modem_config.gif
-Group2File29=C:\sbbs\docs\images\scfg_modem_fax_code1.gif
-Group2File30=C:\sbbs\docs\images\scfg_modem_fax_code2.gif
-Group2File31=C:\sbbs\docs\images\scfg_modem_port_type.gif
-Group2File32=C:\sbbs\docs\images\scfg_modem_resultcode_15.gif
-Group2File33=C:\sbbs\docs\images\scfg_modem_resultcodes.gif
-Group2File34=C:\sbbs\docs\images\scfg_modem_strings.gif
-Group2File35=C:\sbbs\docs\images\scfg_modem_toggles.gif
-Group2File36=C:\sbbs\docs\images\scfg_msg_area_advopts.gif
-Group2File37=C:\sbbs\docs\images\scfg_msg_area_netopts.gif
-Group2File38=C:\sbbs\docs\images\scfg_msg_area_toggles.gif
-Group2File39=C:\sbbs\docs\images\scfg_msg_areas.gif
-Group2File40=C:\sbbs\docs\images\scfg_msg_areas_gen.gif
-Group2File41=C:\sbbs\docs\images\scfg_msg_attrcodes.gif
-Group2File42=C:\sbbs\docs\images\scfg_msg_options.gif
-Group2File43=C:\sbbs\docs\images\scfg_networks.gif
-Group2File44=C:\sbbs\docs\images\scfg_networks_fido.gif
-Group2File45=C:\sbbs\docs\images\scfg_networks_fido_address.gif
-Group2File46=C:\sbbs\docs\images\scfg_networks_internet.gif
-Group2File47=C:\sbbs\docs\images\scfg_networks_post.gif
-Group2File48=C:\sbbs\docs\images\scfg_networks_post_hubs.gif
-Group2File49=C:\sbbs\docs\images\scfg_networks_post_hubs_sccm.gif
-Group2File50=C:\sbbs\docs\images\scfg_networks_qwkhubs.gif
-Group2File51=C:\sbbs\docs\images\scfg_networks_qwkhubs_vert.gif
-Group2File52=C:\sbbs\docs\images\scfg_networks_qwkhubs_vert_subs.gif
-Group2File53=C:\sbbs\docs\images\scfg_networks_qwkhubs_vert_subs_opt.gif
-Group2File54=C:\sbbs\docs\images\scfg_node1.gif
-Group2File55=C:\sbbs\docs\images\scfg_node1_advanced.gif
-Group2File56=C:\sbbs\docs\images\scfg_node1_toggles.gif
-Group2File57=C:\sbbs\docs\images\scfg_system.gif
-Group2File58=C:\sbbs\docs\images\scfg_system_advanced.gif
-Group2File59=C:\sbbs\docs\images\scfg_system_expired.gif
-Group2File60=C:\sbbs\docs\images\scfg_system_loadablemods.gif
-Group2File61=C:\sbbs\docs\images\scfg_system_newvalues.gif
-Group2File62=C:\sbbs\docs\images\scfg_system_newvalues_questions.gif
-Group2File63=C:\sbbs\docs\images\scfg_system_newvalues_toggles.gif
-Group2File64=C:\sbbs\docs\images\scfg_system_quickval.gif
-Group2File65=C:\sbbs\docs\images\scfg_system_quickval_0.gif
-Group2File66=C:\sbbs\docs\images\scfg_system_securityvalues.gif
-Group2File67=C:\sbbs\docs\images\scfg_system_securityvalues_0.gif
-Group2File68=C:\sbbs\docs\images\scfg_system_toggle.gif
-Group2File69=C:\sbbs\docs\images\scfg_xfer_compressable.gif
-Group2File70=C:\sbbs\docs\images\scfg_xfer_dir.gif
-Group2File71=C:\sbbs\docs\images\scfg_xfer_dir_advanced.gif
-Group2File72=C:\sbbs\docs\images\scfg_xfer_dir_toggles.gif
-Group2File73=C:\sbbs\docs\images\scfg_xfer_event.gif
-Group2File74=C:\sbbs\docs\images\scfg_xfer_eventc.gif
-Group2File75=C:\sbbs\docs\images\scfg_xfer_extractable.gif
-Group2File76=C:\sbbs\docs\images\scfg_xfer_library.gif
-Group2File77=C:\sbbs\docs\images\scfg_xfer_options.gif
-Group2File78=C:\sbbs\docs\images\scfg_xfer_proto_dsz.gif
-Group2File79=C:\sbbs\docs\images\scfg_xfer_proto_dsz_g.gif
-Group2File80=C:\sbbs\docs\images\scfg_xfer_proto_dsz_h.gif
-Group2File81=C:\sbbs\docs\images\scfg_xfer_proto_dsz_x.gif
-Group2File82=C:\sbbs\docs\images\scfg_xfer_proto_dsz_y.gif
-Group2File83=C:\sbbs\docs\images\scfg_xfer_proto_dsz_z.gif
-Group2File84=C:\sbbs\docs\images\scfg_xfer_proto_fdsz.gif
-Group2File85=C:\sbbs\docs\images\scfg_xfer_proto_fdsz_g.gif
-Group2File86=C:\sbbs\docs\images\scfg_xfer_proto_fdsz_x.gif
-Group2File87=C:\sbbs\docs\images\scfg_xfer_proto_fdsz_y.gif
-Group2File88=C:\sbbs\docs\images\scfg_xfer_proto_fdsz_z.gif
-Group2File89=C:\sbbs\docs\images\scfg_xfer_testable.gif
-Group2File90=C:\sbbs\docs\images\scfg_xfer_testable_du.gif
-Group2File91=C:\sbbs\docs\images\scfg_xfer_testable_zip.gif
-Group2File92=C:\sbbs\docs\images\scfg_xfer_testable_zipc.gif
-Group2File93=C:\sbbs\docs\images\scfg_xfer_viewable.gif
-Group2File94=C:\sbbs\docs\images\scfg_xtrn_fixed.gif
-Group2File95=C:\sbbs\docs\images\scfg_xtrn_lord.gif
-Group2File96=C:\sbbs\docs\images\scfg_xtrn_sbl.gif
-Group2File97=C:\sbbs\docs\images\scfg_xtrn_section.gif
-Group2File98=C:\sbbs\docs\images\scfg_xtrn_swaplist.gif
-Group2File99=C:\sbbs\docs\images\scfg_xtrn_syncedit.gif
-Group2File100=C:\sbbs\docs\images\scfg_xtrn_timed.gif
-Group2File101=C:\sbbs\docs\images\scfg_xtrn_timeopt.gif
-Group2File102=C:\sbbs\docs\images\scfg_xtrn_tw2002.gif
-Group2File103=C:\sbbs\docs\images\scfg_xtrn_usurper.gif
-Group2File104=C:\sbbs\docs\images\scfg_xtrn_winos2list.gif
-Group2File105=C:\sbbs\docs\images\setuptype.gif
-Group2File106=C:\sbbs\docs\images\synclogo_fancyred.gif
-Group2File107=C:\sbbs\docs\images\tw2002.gif
-Group2File108=C:\sbbs\docs\images\uedit_v3.gif
-Group2File109=C:\sbbs\docs\images\uedit_v3_exe.gif
-Group2File110=C:\sbbs\docs\images\v3icon3.gif
-
-[Sequence]
-DestinationLocationDir=C:\SBBS\DOCS
-DatabaseLocationDir=<INSTALLDIR>\data
-SelectProgramFolderName=install
-DestinationLocation=1
-ProgressBar=1
-
-[RegEntries]
-Reg1Path=HKEY_CLASSES_ROOT
-Reg1Val1Type=0
-Reg1Val1Name=(Default)
-Reg1Val1Data=(value not set)
-Reg1Vals=1
-Reg2Path=HKEY_CURRENT_USER
-Reg2Val1Type=0
-Reg2Val1Name=(Default)
-Reg2Val1Data=(value not set)
-Reg2Vals=1
-Reg3Path=HKEY_LOCAL_MACHINE
-Reg3Val1Type=0
-Reg3Val1Name=(Default)
-Reg3Val1Data=(value not set)
-Reg3Vals=1
-Reg4Path=HKEY_USERS
-Reg4Val1Type=0
-Reg4Val1Name=(Default)
-Reg4Val1Data=(value not set)
-Reg4Vals=1
-Reg5Path=HKEY_CURRENT_CONFIG
-Reg5Val1Type=0
-Reg5Val1Name=(Default)
-Reg5Val1Data=(value not set)
-Reg5Vals=1
-Reg6Path=HKEY_DYN_DATA
-Reg6Val1Type=0
-Reg6Val1Name=(Default)
-Reg6Val1Data=(value not set)
-Reg6Vals=1
-Regs=6
-
-[Registry]
-
-[Autoexec]
-PathDir=
-ShareLocks=
-ShareFiles=
-Command=
-
-[CopyToFloppy]
-DriveOption=
-DestinationPath=
-DestinationPathOneFile=
-Password=
-
-[Uninstall]
-UserUninstall=0
diff --git a/docs/install.txt b/docs/install.txt
deleted file mode 100644
index cd21869be8..0000000000
--- a/docs/install.txt
+++ /dev/null
@@ -1,97 +0,0 @@
-Installing Synchronet BBS for Win32 v3.0 Revision C
-===================================================
-
-This version has been succesfully tested with the 
-following operating systems:
-
-	o Microsoft Windows 95
-	o Microsoft Windows 95a
-	o Microsoft Windows 95b (OSR2)
-	o Microsoft Windows 98
-	o Microsoft Windows 98 SE
-	o Microsoft Windows Me
-	o Microsoft Windows NT 3.51
-	o Microsoft Windows NT 4
-	o Microsoft Windows 2000
-
-If you are upgrading an existing installation of 
-Synchronet (v2.3 or v3.0), it is advised that you
-choose "Custom" Setup and disable the following
-installation components:
-
-	o Configuration Files
-	o Text and Menu Files
-	o External Programs
-
-It is recommended that you install Synchronet into
-the default installation directory (C:\SBBS). If you
-choose to install into a different location, it is
-strongly recommended that you use \SBBS or another
-MS-DOS compatible 8.3 format path name (e.g. D:\SBBS,
-NOT D:\Synchronet). Installing into a location other
-than C:\SBBS will require  modification of the
-following files for full operation:
-
-	o EXEC\VERT.BAT
-	o EXEC\VERT.FTP
-	o EXEC\TIMED.BAT
-	o TEXT\BULLSEYE.CFG
-
-
-SBBSCTRL (Synchronet Control Panel)
-~~~~~~~~
-SBBSCTRL is the Sysop's console for SBBS v3 for Win32. You
-still must use SCFG to configure the BBS options shared
-between the new and old versions.
-
-The installation program will create a short-cut to 
-SBBSCTRL.EXE on your desktop and in your startup folder 
-(so Synchronet will start automatically during boot-up).
-
-
-Known Issues
-~~~~~~~~~~~~
-o Moving messages between message areas will corrupt the
-  message base.
-o DOSKEY must be loaded in your autoexec.bat for the DOS 
-  shell to work right (Windows 95/98/ME)
-o Backspace doesn't work right in DOS shell (Windows 95/98/ME)
-o First node (set in SBBSCTRL) configuration is used for all 
-  nodes (this is actually intentional, i.e. not a bug)
-o First node's temp directory must be set to "TEMP\"
-
-
-Documentation
-~~~~~~~~~~~~~
-The sysop documentation has been converted to HTML format,
-but is no longer included in the installation package due
-to size considerations. See http://synchro.net/docs for the
-online docs or download ftp://synchro.net/sbbsdocs.zip
-for a local installation.
-
-
-Ordering/Registering Synchronet
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Synchronet (as of April 1997) is FREEWARE - no registration or 
-licensing fee is required.
-
-
-For More Information
-~~~~~~~~~~~~~~~~~~~~
-See DOCS\NTREADME.TXT for instructions on running 
-    Synchronet v3.0 on Windows NT or Windows 2000.
-
-See DOCS\V300_NEW.TXT for list of new features in 
-    Synchronet v3.0.
-
-See DOCS\SBBS3FAQ.TXT for answers to frequently asked
-    questions regarding Synchronet v3.0.
-
-See DOCS\V3CFGFAQ.TXT for answers to frequently asked
-    questions about configuring Synchronet v3.0.
-
-Thanks for your interest in Synchronet BBS Software
-(www.synchro.net).
-
-Rob Swindell
-(rob@synchro.net)
diff --git a/docs/mailer.bat b/docs/mailer.bat
deleted file mode 100755
index 7dc7deacc0..0000000000
--- a/docs/mailer.bat
+++ /dev/null
@@ -1,136 +0,0 @@
-@echo off
-rem ***************************************************************************
-rem MAILER.BAT (AKA IMRUN.BAT or FDRUN.BAT) file for use with FrontDoor or
-rem InterMail and Synchronet BBS Version 2
-rem 
-rem If you get OUT OF ENVIRONMENT SPACE messages when using this batch file,
-rem increase your DOS environment by adding the following to your CONFIG.SYS:
-rem SHELL=C:\COMMAND.COM /E:1024 /P
-rem ***************************************************************************
-
-rem ***************************************************************************
-rem Set this to IM for InterMail or FD for FrontDoor
-rem ************************************************
-set fd=FD
-
-rem ***************************************************************************
-rem Node Number - needed for NODE utility
-rem *************************************
-set nodenum=1
-
-rem ***************************************************************************
-rem SBBS Directory 
-rem **************
-set sbbs=c:\sbbs
-
-rem ***************************************************************************
-rem SBBS CTRL Dir - needed for NODE utility
-rem ***************************************
-set sbbsctrl=%sbbs%\ctrl
-
-rem ***************************************************************************
-rem SBBS NODE Dir - needed for SBBSECHO (use NODE1 directory)
-rem *********************************************************
-set sbbsnode=%sbbs%\node1
-
-:top
-rem ***************************************************************************
-rem Set Node status to WAITING FOR CALL
-rem ***********************************
-%sbbs%\exec\node status=0 %nodenum% rerun off %nodenum% event off %nodenum%
-
-rem ***************************************************************************
-rem Drive letter and directory where Mailer is installed 
-rem ****************************************************
-c:
-cd \%fd%
-%fd%
-
-rem ***************************************************************************
-rem These error levels must be set in FDSETUP or IMSETUP!
-rem *****************************************************
-if errorlevel 200 goto fax
-if errorlevel 100 goto bbs
-if errorlevel  75 goto event
-if errorlevel  50 goto inmail
-if errorlevel  25 goto outmail
-if errorlevel  10 goto userbreak
-if errorlevel   1 goto error
-goto end
-
-rem ***************************************************************************
-rem Mailer received in-bound mail from another system 
-rem *************************************************
-:inmail
-echo Importing in-bound mail!!!
-rem ***************************************************************************
-rem Set node status to NETWORKING
-rem *****************************
-%sbbs%\exec\node status=6 %nodenum%
-%sbbs%\exec\sbbsecho /les!
-goto top
-
-rem ***************************************************************************
-rem Semaphore file (xxEXIT.025) was signaled by the BBS - new outbound messages
-rem ***************************************************************************
-:outmail
-echo Exporting out-bound mail!!!
-rem ***************************************************************************
-rem Set node status to NETWORKING
-rem *****************************
-%sbbs%\exec\node status=6 %nodenum%
-%sbbs%\exec\sbbsecho /lin
-rem ***************************************************************************
-rem Signal the rescan semaphore so that FD will rescan the netmail folder
-rem *********************************************************************
-rem > fdrescan.now
-goto top
-
-rem ***************************************************************************
-rem Received a call from a user wanting access to the BBS - how dare they!
-rem This actually executes EXEBBS.BAT with the proper switches for SBBS
-rem You will probably also need to edit EXEBBS.BAT for your configuration 
-rem *********************************************************************
-:bbs
-dobbs
-
-rem ***************************************************************************
-rem Run any pending events (Remove the 'o' if running SBBS v2.1 or earlier)
-rem ***********************************************************************
-:event
-cd %sbbsnode%
-call sbbs o
-goto top
-
-rem ***************************************************************************
-rem Received a fax call
-rem *******************
-:fax
-cd \zfax
-rcvfax 2 /p:1
-if errorlevel 0 echo riIncoming FAX Notification! >> \bbs\data\msgs\0001.msg
-goto top
-
-rem ***************************************************************************
-rem Quit FD
-rem *******
-:userbreak
-echo User Break.
-goto end
-
-rem ***************************************************************************
-rem Mailer error of some kind
-rem *************************
-:error
-echo %fd% ERROR (1-9)
-goto end
-
-rem ***************************************************************************
-rem End of the batch file, so display a blank line for prettiness
-rem *************************************************************
-:end
-rem ***************************************************************************
-rem Make node status OFFLINE
-rem ************************
-%sbbs%\exec\node status=5 %nodenum%
-echo.
diff --git a/docs/message_section.html b/docs/message_section.html
deleted file mode 100644
index b13e21d31c..0000000000
--- a/docs/message_section.html
+++ /dev/null
@@ -1,718 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<title>Message Base</title>
-</head>
-
-<body>
-
-<!--webbot bot="Include" U-Include="_borders/top.htm" TAG="BODY" startspan -->
-
-<a href="http://www.synchro.net"><img border="0" src="images/synclogo_fancyred.gif" alt="Synchronet BBS - Multinode Bulletin Board Software" width="626" height="86"></a>
-
-<hr>
-
-<!--webbot bot="Include" endspan i-checksum="23126" -->
-
-<p><a name="top"></a><a href="sysop.html#TOC">Back to Table of Contents</a></p>
-<h2><a name="MessageBase">[8.0] - Message Base</a></h2>
-<pre>The Synchronet message base is used for storing messages from a user or sysop
-to other users or a specific user. The messages are divided into sub-boards
-where each sub-board has a unique message topic. Sub-boards are grouped
-together into message groups.</pre>
-<pre>Sysops can control which users have what level of access to each group and
-sub-board. If a user doesn't have access to a specific group or sub-board,
-the user won't even know the specific group or sub-board exists.</pre>
-<pre>The following is an example group/sub-board configuration:</pre>
-<pre><b>Group Name              Sub-boards
-</b>------------------------------------------------------------------------------
-Main                    Sysop Notices
-                        General Discussion
-                        Debate
-                        Entertainment
-			Advertisements</pre>
-<pre>Adult                   General Discussion
-                        Entertainment
-                        Singles Only</pre>
-<pre>Technical               Hardware Help
-                        Software Help
-                        Programming</pre>
-<pre>The Synchronet configuration program (<a href="system_config.html">SCFG</a>) is used for adding, deleting,
-and configuring message groups and sub-boards.</pre>
-<h2><a name="ElectronicMail">[8.1] - Electronic Mail (E-mail)</a>
-</h2>
-<pre>Synchronet has a separate private personal mailbox for each user on the system.
-Users may receive local E-mail, NetMail, and Attached Files in their mailbox.
-Upon logon, each user is asked if they wish to read any mail in their box. Mail
-will stay in the user's box until it is deleted. Mail in a user's box may only
-be viewed or deleted by the receiving user, the sending user, or a sysop.
-
-E-mail is preferred over Private Posts (on a sub-board) for sending private
-messages to users on the same BBS. Private posts are only useful for sending
-private messages on message networks that do not support or allow NetMail.
-
-An E-mail file attachment may be uploaded by a user if SCFG-&gt;System-&gt;Message
-Options-&gt;Allow Uploads in E-mail is set to Yes. When reading E-mail with a file
-attached, the receiving user will be prompted if he or she wishes to download
-the attached file at that time. If the user downloads the file, the file is
-deleted. If the message is deleted without the file being downloaded, the file
-is deleted as well.
-
-Users with the 'A' exemption may send Anonymous E-mail if SCFG-&gt;System-&gt;Message
-Options-&gt;Allow Anonymous E-mail is set to Yes.
-
-When replying to another message in E-mail, the original message may be quoted
-if the SCFG-&gt;System-&gt;Message Options-&gt;Allow Quoting in E-mail is set to Yes.</pre>
-<h3><a name="SynchronetMailServer">[8.2.1] - Internet (SMTP/POP3) Mail Server</a>
-<b><font color="#FF0000"><i>(v3+ Only)</i></font></b>
-</h3>
-<pre><b>Set-up:</b></pre>
-<ol>
-  <li>
-<pre>Set SCFG-&gt;Networks-&gt;Internet-&gt;Address to your system's Internet address 
-   (domain name or static IP).</pre>
-  </li>
-  <li>
-<pre>Set SCFG-&gt;Networks-&gt;Internet-&gt;Allow Sending of Netmail to &quot;Yes&quot;.</pre>
-  </li>
-  <li>
-<pre>Set SCFG-&gt;Networks-&gt;Internet-&gt;Allow File Attachments to &quot;No&quot;
-   (File attachments from the BBS are not supported at this time).</pre>
-  </li>
-  <li>
-<pre>Set SCFG-&gt;Networks-&gt;Internet-&gt;Send NetMail using Alias however you wish
-   (Users can receive e-mail to their Alias OR real-name regardless of this
-   setting).</pre>
-  </li>
-  <li><pre>Set SBBSCTRL-&gt;Mail Server-&gt;Configure-&gt;<i>DNS Server</i> to the address of your
-   ISP's Primary DNS server (run &quot;<b>ipconfig /all</b>&quot; from the Windows command line
-   to display your ISP's Primary DNS server) OR set <i>Relay Server</i> to the address
-   of your ISP's SMTP server (check your e-mail program for your configured SMTP
-   server hostname).</pre>
-  </li>
-</ol>
-<pre><b>Notes:</b></pre>
-<pre>Users will be able to send Internet e-mail from your BBS now (if you have a 
-customized <b>TEXT.DAT</b> make sure you have updated line 62, &quot;<i>InternetMailing</i>&quot;).</pre>
-<pre>Your users will be able to receive e-mail at your BBS using any of the
-following ways:
-	</pre>
-<pre>	<b>First.Last@your.bbs.domain
-</b>	<b>First_Last@your.bbs.domain
-	RealFirst.Last@your.bbs.domain	
-	UserNumber@your.bbs.domain 	(if <i>RX By User Number</i> is toggled on)
-	&quot;First Last&quot;@your.bbs.domain	
-	&quot;RealFirst Last&quot;@you.bbs.domain	</b></pre>
-<pre>E-mail user names are not case sensitive (e.g. Digital.Man and digital.man are
-both valid user names). In order for users to receive mail via user number, that
-option must be checked in SBBSCTRL-&gt;Mail-&gt;Configure.</pre>
-<pre>E-mail sent to &quot;<b>SYSOP</b>&quot;, &quot;<b>POSTMASTER</b>&quot;, your BBS's QWKID, or the sysop name
-(as configured in SCFG) will automatically go to user #1 on the BBS.</pre>
-<pre>Additional aliases can be configured by creating the text file <b>ctrl/alias.cfg</b>
-with the following syntax:</pre>
-<pre>-------------------------------[ Begin ]--------------------------------------</pre>
-<pre>; This is a comment
-;
-; Alias			User Name or number</pre>
-<pre>root			sysop
-sysadmin		sysop
-webmaster		sysop
-great.drummer		Rob Swindell</pre>
-<pre>--------------------------------[ End ]---------------------------------------</pre>
-<pre>If a user has their account configured to forward their e-mail to an Internet
-address and they receive an Internet e-mail, it will automatically be forwarded
-to the configured address.</pre>
-<pre>The sysop of QWKnet nodes can receive e-mail at their QWK-ID @ their hub's
-Internet domain/ip address. Example: If YOURBBS (QWK-ID) polls VERT for QWKnet,
-you (the sysop) can receive e-mail at yourbbs@vert.synchro.net.</pre>
-<pre>You (or any of the user's on YOURBBS) can send Internet e-mail from YOURBBS 
-through VERT by sending a QWKnet NetMail message to NETMAIL@VERT with the 
-actual destination Internet address as the first line of the message.
-
-<b>Relaying:</b>
-
-As of v1.10, the Synchronet Mail Server can be used to relay e-mail to external
-servers. Due to the security (SPAM) risks of opening the SMTP server up to just
-anyone, you must specify which hostnames or IP addresses you wish to allow to
-relay mail. You do this by creating the file <b>text/relay.can</b> and list the IP
-addresses or host names of the systems you wish to give relay access to. If you
-wish to allow relay access to all hosts (not recommended), simply create a 
-<b>relay.can</b> with one line containing &quot;<b>.~</b>&quot;.</pre>
-<h2><a name="SettingUpMessageBase">[8.3] - Setting Up the Message Base</a>
-</h2>
-<h3><a name="CreatingMessageGroups">[8.3.1] - Creating Message Groups:</a>
-</h3>
-<pre>Run SCFG and select &quot;<i>Message Base</i>&quot; from the SCFG main menu and add any 
-additional message groups you want. A message group is a group of message 
-sub-boards that have a similar subject matter or other common element. It is 
-common to put all of your local sub-boards in one group and your networked 
-sub-boards (where messages are shared with other BBSs) into other groups. An 
-example configuration that separates local and networked sub-boards into groups:
-
-<b>Group			Sub-boards</b>
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Local			General
-Local			Sports
-Local			Debate
-Local			Literature
-Local			Technology
-Local			Advertisements
-DOVE-Net		General
-DOVE-Net		Advertisements
-DOVE-Net		Entertainment
-DOVE-Net		Debate
-DOVE-Net		Hardware/Software
-DOVE-Net		Programming
-DOVE-Net		Synchronet
-DOVE-Net		Synchronet Sysops
-FidoNet 		Interuser Discussion
-FidoNet 		Politics
-FidoNet 		Unix
-FidoNet 		OS/2
-FidoNet 		DESQview
-
-Another use of message groups is to group sub-boards of similar topic together:
-
-<b>Group			Sub-board</b>
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Main			Sysop Messages
-Main			General
-Main			Debate
-Main			Entertainment
-Main			BBS Ads and ANSI
-Technical		Software Help
-Technical		Hardware Help
-Technical		Programming
-Adult			General
-Adult			Singles Only
-Adult			Dear Abby
-Adult			Jokes
-Adult			Financial
-
-And you certainly can mix the two examples of message group utilization given
-above or invent your own. Or, you can just have one message group for all of
-your sub-boards - forgoing the organizational advantages of using multiple
-groups.
-
-To add message groups, select the position you want the new message group
-to be in with the arrow keys. If you want the new message group to be the
-first group, highlight the top line. If you want the message group to be added
-to the end of the group list, highlight the bottom line. Hit <i>INS</i> (insert key)
-to add a new message group, or <i>DEL</i> (delete key) to remove an existing one.
-Following is a list of options available when creating or modifying a message
-group.</pre>
-<h3><a name="MessageGroupOptions">[8.3.2] - Message Group Options</a>
-</h3>
-<pre><img border="0" src="images/scfg_msg_areas.gif" width="572" height="331"></pre>
-<pre><b>Long Name:</b>
-	This is a description of the message group which is displayed in
-	message group listings.
-
-<b>Short Name:
-</b>	This is a description of the message group which is used for prompts.
-
-<b>Access Requirements:
-</b>        Use this option to set specific user requirements for access this
-        message group.
-
-<b>Clone Options:
-</b>	Use this option to &quot;copy&quot; the options from the first message sub-board
-	in this group to all other existing sub-boards in this group.
-
-<b>Export Areas:
-</b>	If you wish to export the area information of all the sub-boards in
-	the current message group to a text file, use this option.
-
-<b>Import Areas:
-</b>	If you wish to import message area information from a text file, use
-	this option.
-
-<b>Message Sub-boards...:
-</b>	Select this option to get a list of, and be able to edit, the sub-
-	boards within this group.</pre>
-<h3><a name="CreatingMessageSub-boards">[8.3.3] - Creating Message Sub-boards:</a></h3>
-<pre>To create sub-boards, hit enter on the message group you want to add the
-sub-boards to, then select &quot;Message Sub-boards&quot;. Adding sub-boards is very
-similar to adding groups except you will be prompted for an internal code.
-The internal code should be a short description (name abbreviation) for the
-sub-board. To configure the particulars for the sub-board, select it by hitting
-enter on it from the sub-board list. Following is a list of options available
-when creating or modifying a message sub-board.</pre>
-<h3><a name="Sub-boardMainOptions">[8.3.4] - Sub-board Main Options</a></h3>
-<pre><img border="0" src="images/scfg_msg_areas_gen.gif" width="572" height="331">
-
-<b>Long Name:
-</b>	This is a description of the sub-board which is displayed in
-	sub-board listings.
-
-<b>Short Name:
-</b>	This is a description of the sub-board which is used for prompts.
-
-<b>QWK Name:
-</b>	This is the name of the sub-board used for QWK off-line readers.
-
-<b>Internal Code:
-</b>        This is an internal code for SBBS to distinguish this sub-board from
-	the others on the system. This should be a unique name of up to 8 valid
-	DOS filename characters.
-
-<b>Access Requirements:
-</b>	These are the requirements that a user must meet to be able to access
-	this sub-board.
-
-<b>Reading Requirements:
-</b>	Use this option to set the security requirements to read messages on
-	this sub-board.
-
-<b>Posting Requirements:
-</b>        Use this option to set the security requirements to post on this
-        sub-board.
-
-<b>Operator Requirements:
-</b>	Use this option to set the security requirement to be a sub-op on this
-	sub-board (note: sub-op is a sysop of a sub-board).
-
-<b>Moderated Posting User:
-</b>	Users meeting the criteria set here will have their posts &quot;moderated&quot;
-	when posting on this sub-board. Moderated messages cannot be read by
-	users or exported until validated by a sub-op or sysop.
-
-<b>Maximum Number of Messages:
-</b>        This is the maximum number of messages that will be allowed on the
-	sub-board. This number is used by SMBUTIL to maintain the message base
-	and remove the oldest messages when this limit is exceeded.
-
-<b>Purge by Age:
-</b>        This is the maximum length of time (in days) that old messages will
-        be kept in a sub-board.
-
-<b>Duplicate Checking:
-</b>	Use this option for duplicate message checking (comparing a new
-	message against those previously imported to detect a duplicate message
-	created by program or user error). Enabling duplicate message checking
-	requires you specify a maximum number of CRCs. This is the number of
-	previously imported messages to keep track of (using CRC calculation).
-	This number, if used, should be set to about one weeks worth of
-	messages. Large numbers in this field will slow down message importing.</pre>
-<h3><a name="ToggleOptions">[8.3.5] - Toggle Options</a></h3>
-<pre><img border="0" src="images/scfg_msg_area_toggles.gif" width="572" height="331">
-
-<b>Allow Private Posts:
-</b>        If you want to allow users to post private messages to another user
-        on the sub-board, set this option to Yes. Since Synchronet has an
-        internal e-mail system, this option is usually only set to Yes on
-        networked sub-boards that allow private posts. You can also force
-        private posts on this sub-board by setting this option to Only.
-
-<b>Allow Anonymous Posts:
-</b>        If you want to allow users that have the 'A' exemption to be able to
-        post anonymously on this sub-board, set this option to Yes. You may
-        also force anonymous posts by any one (with or without the 'A'
-        exemption) by setting this option to Only.
-
-<b>Post Using Real Names:
-</b>        If you wish posts on this sub-board to be posted using the real name
-        of a user instead of his/her alias, set this option to Yes. Many
-        networks require BBSs that allow aliases to force real names on
-        networked sub-boards.
-
-<b>Users Can Delete Posts:
-</b>        You may allow users to delete their posted messages by setting this
-        value to Yes. You may allows users to delete their messages only if
-        it is the last message on the sub-board by setting this value to
-        Last.
-
-<b>Default On for New Scan:
-</b>	If this option is set to Yes, this sub-board will default to 'On'
-	when a user does a new message scan on this sub-board for the first
-	time.
-
-<b>Forced New Scan:
-</b>        If this option is set to Yes, the sub-board will not be skipped in
-        new message scans even if the user has configured his or her new scan
-        to not contain this sub-board.
-
-<b>Default On for Your Scan:
-</b>	If this option is set to Yes, this sub-board will default to 'On'
-	when a user does a new message scan for personal messages on this
-	sub-board for the first time.
-
-<b>Public 'To' User:
-</b>        If you wish all posts to be prompted for a 'To' user, set this option
-        to Yes. Many networks do not allow private messages on networked
-        sub-boards, so the only way to send a message 'To' someone is to send
-        it publicly with a 'To' field. Normally, 'To' users are only prompted
-        for on private posts.
-
-<b>Allow Message Quoting:
-</b>	If you wish for users to be able to quote from other messages on this
-	sub-board, set this option to Yes.
-
-<b>Permanent Operator Msgs:
-</b>	Setting this option to Yes will cause messages posted by the Sysop (or
-	sub-op) to be marked as permanent (will not be deleted by normal
-	maintenance).
-
-<b>Kill Read Messages:
-</b>	If you wish for messages to be deleted after the recipient has read the
-	message, set this option to Yes.  To delete only those messages marked
-	as private after they've been read, set this option to Private.
-
-<b>Compress Messages (LZH):
-</b>	When this option is set to 'Yes', the BBS will utilize the LZH
-	compression method when storing messages.  This will cause message
-	importing to be slower, but can conserve disk space (30% to 50%) which
-	can mean tens or even hundreds of megabytes of extra space on BBSs with
-	large message bases.</pre>
-<h3><a name="NetworkOptions">[8.3.6] - Network Options</a></h3>
-<pre><img border="0" src="images/scfg_msg_area_netopts.gif" width="572" height="331">
-
-<b>Append Tag/Origin Line:
-</b>        If you want a tagline (QWK network) or origin line (FidoNet) to be
-        appended to messages sent out on the network from this sub-board,
-        set this option to Yes.
-
-<b>Export ASCII Only:
-</b>	Set this option to Yes if this sub-board should only be exporting
-	ASCII characters to message networks.
-
-<b>Gate Between Net Types:
-</b>	If this sub-board is simultaneously networked with multiple networks
-	using different network technologies, and you want messages imported
-	from one network to be exported to the other network(s), you must set
-	this option to 'Yes'. Gating messages between networks usually requires
-	specific authorization from the moderator of each network. Do not set
-	this option to 'Yes' unless you are absolutely sure you understand the
-	consequences.
-
-<b>QWK Networked:
-</b>        Setting this option to Yes will limit posted message titles to the
-	QWK packet limitation of 25 characters and allow QWK network accounts
-	to upload and download messages to/from this sub-board.
-
-<b>QWK Tagline:
-</b>        This is an optional tagline that will be used for this sub-board. If
-        this field is blank, the default tagline will be used. If &quot;Append
-        Tag/Origin Line&quot; is set to No, then no tagline will be used.
-
-<b>Internet:
-</b>	If this sub-board is networked via the internet, this toggle option
-	should be set to 'Yes'.
-
-<b>PostLink or PCRelay:
-</b>	If this sub-board is networked via PostLink or PCRelay, set this option
-	to Yes.
-
-<b>FidoNet EchoMail:
-</b>	If this sub-board is networked via FidoNet, set this option to Yes.
-
-<b>FidoNet Address:
-</b>        This is the FidoNet address used for this sub-board.
-
-<b>EchoMail Origin Line:
-</b>        This is an optional origin line that will be used for this sub-board.
-        Do not include the FidoNet address in this line. Synchronet
-	automatically adds the &quot; * Origin: &quot; and &quot;(Zone:Net/Node.Point)&quot;.
-        If this field is blank, the default origin line will be used. If
-        &quot;Append Tag/Origin Line&quot; is set to No, then no origin line will be
-        used.
-
-<b>EchoMail Directory:
-</b>        This is the storage directory where FidoNet style (FTS-0001 stored
-        message format) messages are imported from and exported to for this
-	sub-board (using SBBSFIDO a defunct method of importing/exporting
-	FidoNet echomail). If this option is blank, then the EchoMail base
-	directory is used with the internal code of this sub-board as the
-	sub-directory where the FidoNet messages are stored.
-
-<b>EchoMail Semaphore File:
-</b>	This is the path and filename of a file that should be created to
-	trigger your front-end mailer to export FidoNet EchoMail.</pre>
-<h3><a name="AdvancedOptions">[8.3.7] - Advanced Options</a></h3>
-<pre><img border="0" src="images/scfg_msg_area_advopts.gif" width="572" height="331">
-
-<b>QWK Conference Number:
-</b>	This option allows you to use a Dynamic (automatic) or Static
-	(hard-coded) numbering for the QWK conference number of each sub-board.
-	Dynamic numbering gives &quot;as is&quot; conference numbers, where sub-board 1
-	in group 1 would be 1001, and sub-board 1 in group 2 would be 2001,
-	etc.  Static numbering allows you to give each conference whatever
-	number you prefer, which is extremely useful because it allows you to
-	add and remove conferences without altering the numbers of other
-	sub-boards.
-
-<b>Storage Method:
-</b>	This is the method which will be used for storing messages when a new
-	message is posted on this sub-board.  There are three message storage
-	methods.  Their advantages and limitations are as follows:
-
-<b>	Self-packing:
-</b>
-	Self-packing is the most efficient message storage method because it
-	looks for and uses deleted message blocks for new in-coming messages.
-	Because of this behavior, it is the slowest storage method, but
-	eliminates the need to run &quot;SMBUTIL P&quot; on the message base regularly.
-	It is suggested however, that you do run &quot;SMBUTIL P&quot; on Self-packing
-	message bases that have accumulated a large number of deleted message
-	blocks.  This can happen if you lower the maximum number of a messages
-	for a message base and then run &quot;SMBUTIL M&quot; or import a large number of
-	networked messages into this message base, far exceeding the maximum,
-	and then running &quot;SMBUTIL M&quot;.  Under these circumstances, you will be
-	wasting disk space on deleted message blocks that will not likely be
-	used again unless you reach that number of messages again.
-
-	An example:
-
-	A Self-packing sub-board is set to maximum of 500 messages. The
-	sub-board has 500 messages in it taking up approximately 2MB of disk
-	space. A large network message packet is imported containing 200
-	messages for this sub-board. The sub-board now has 700 message in it
-	taking up approximately 3MB of disk space.  &quot;SMBUTIL M&quot; is run and the
-	oldest 200 messages are deleted, bringing the total messages down to
-	500 again, but still taking up 3MB of disk space. The sub-board will
-	not increase in size (disk consumption) again unless the total number
-	of messages exceeds 700.  If this is not likely to happen, then running
-	&quot;SMBUTIL P&quot; on this sub-board will save you approximately 1MB of disk
-	space.
-
-<b>	Fast Allocation:
-</b>
-	Fast Allocation storage method is faster than Self-packing because it
-	does not search for deleted message blocks to use for new messages, it
-	always adds to the end of the message base.  Because of this behavior,
-	the message base will continually grow in size (consuming disk space)
-	until &quot;SMBUTIL P&quot; is run.  Since the idea of using Fast Allocation is
-	speed, it is also a good idea to speed up your &quot;SMBUTIL P&quot; event by
-	specifying a minimum number of packable kilobytes before actually
-	packing a message base. This will cause SMBUTIL to analyze the message
-	base before actually packing it. This is be done by specifying the
-	number of kilobytes on the SMBUTIL command line. If for example, you
-	only want it to pack the message base if it can save 500k or more of
-	disk space, then use &quot;SMBUTIL P500&quot; for a command line. This will keep
-	SMBUTIL from packing the message base every time it is run (which can be
-	time consuming) even if only a small amount of disk space will be saved
-	from the operation.
-
-	You can switch between fast Fast Allocation and Self-packing storage
-	methods at any time. You can even have one program importing into a
-	message base using Self-packing and another using Fast Allocation and
-	no harm will be done to the message base.
-
-<b>	Hyper Allocation:
-</b>
-	Hyper Allocation is much like Fast Allocation, except it is much faster
-	because it does not update the message base allocation files necessary
-	to be downward compatible with the Self-packing storage method. For
-	this reason, you cannot change a message base from Hyper Allocation to
-	Self-packing or Fast Allocation without first deleting all the messages
-	in the message base (SCFG will do this for you). You must also be sure
-	that all programs that write to this message base support the Hyper
-	Allocation storage method (as defined in v1.20 of the SMB
-	specification). If you are using any third party message import
-	programs, do NOT use this storage method unless you are positive the
-	program supports it. Ask the developers if you are not sure.
-
-	Like Fast Allocation, you must run &quot;SMBUTIL P&quot; on Hyper Allocated
-	message bases regularly. The minimum packable kilobytes analysis
-	feature of SMBUTIL (i.e. &quot;SMBUTIL P500&quot;) takes longer with a Hyper
-	Allocated message base but the actual packing operation is much faster.
-
-	To get the fastest importing/writing speed, disable Duplicate Message
-	checking and LZH compression for the message base.
-
-	Retrieving messages (exporting/reading them from the message base) is
-	the same speed with all storage methods. LZH compressed message bases
-	will export slower than non-compressed message bases.
-
-<b>Storage Directory:
-</b>	Where Synchronet should place the data files for this sub-board.
-	Normally this option should be left BLANK unless it is required that
-        the data be placed on a different drive letter.</pre>
-<h3><a name="QWKPacketPreviousSoftware">[8.4] - Importing QWK
-Packet from Previous BBS Software</a></h3>
-<pre>If you are upgrading to Synchronet from another BBS package and have your
-messages in QWK packet format, you can import them into Synchronet as follows:
-
-1.      Create message groups and sub-boards under Synchronet to accept the
-        messages from your old system.
-2.      Write down the conference numbers for each of your message areas from
-        the old system.
-3.      Rename your exported QWK packet to TEMP.QWK and copy it into your DATA
-        directory.
-4.      Add a QWK network hub in SCFG using TEMP for the QWK ID.
-5.      Add each of your sub-boards to the list of Networked Sub-boards and
-        enter the conference number from the old system. Select &quot;Strip-out&quot;
-        for Ctrl-A handling. Set Node 1 for the call-out node.
-6.      Run SBBS from your NODE1 directory and your messages should be
-        imported immediately.
-7.      Run SCFG and delete the TEMP QWK network hub.</pre>
-<h3><a name="PostingMessage">[8.5] - Posting a Message</a></h3>
-<pre>When posting a message on a sub-board, users or sysops can specify that the
-message is NOT to be distributed across a message network (kept local only).
-This is done by starting the message title with &quot;NE:&quot; which stands for
-&quot;No Echo&quot; (only useful on networked sub-boards).</pre>
-<h3><a name="RemoteQWKFunctions">[8.6] - Remote QWK Functions</a></h3>
-<pre>Following are examples on how to perform various functions remotely via QWK.
-Note that some of these functions are intended only for users who are using QWK
-mail doors to retrieve their messages from the BBS, and not for BBSs which are
-QWK netted together, these commands are noted as being for users only. Although
-intended for users, some of the user commands will work properly on a QWK
-netted BBS (e.g. FILES would place the resulting file list into the BBSs
-inbound directory), but some will not (e.g. the YOURS function).
-
-In order to invoke the various remote QWK functions via a QWK network, you must
-post a message to SBBS on one of the conferences which you are receiving from
-your QWK hub. Note that the ADD and RESET functions are conference specific,
-meaning that your message MUST be posted on the conference where the function
-is to take effect.
-
-<b>NOTE:</b> In the following examples, 'ptr' is a pointer indicating the message
-      number to start at (e.g. specifying 100 would set the message pointer to
-      message number 100), '-msgs' sets the message pointer to a number of
-      messages from the end (e.g. -100 to set the pointer to 100 messages
-      from the last message), and 'mm/dd/yy' sets the message pointer to the
-      date specified (e.g. 01/01/90 sets the message pointer to January 1,
-      1990).
-      The '|' symbol shown in the options means OR. Function parameters in
-      square brackets '[]' are optional, parameters in less than/greater than
-      symbols '&lt;&gt;' are required. Specifying an ON/OFF function without the
-      ON or OFF parameter will toggle the function OFF.
-
-<i>Examples:</i>
-
-To: <b>SBBS</b> (All messages must be sent to SBBS)
-
-Subj: <b>DROP [conf#]</b>
-Note: Drop current conference (or specified conference #) from future packets.
-
-Subj: <b>ADD [YOURS] [ptr | -msgs | mm/dd/yy]</b>
-Note: Add current conference to future packets and optionally set the message
-      pointer.
-      If &quot;YOURS&quot; is specified, only mail addressed to you will be packed for
-      this conference.
-      The YOURS option is for users only.
-
-Subj: <b>YOURS [ptr | -msgs | mm/dd/yy]</b>
-Note: Same as &quot;ADD YOURS&quot;.
-      For users only
-
-Subj: <b>RESET [ptr | -msgs | mm/dd/yy]</b>
-Note: Set message pointer for current conference.
-
-Subj: <b>SUBPTR [ptr | -msgs | mm/dd/yy]</b>
-Note: Same as &quot;RESET&quot;.
-
-Subj: <b>RESETALL [ptr | -msgs | mm/dd/yy]</b>
-Note: Set message pointers for all conferences.
-
-Subj: <b>ALLPTR [ptr | -msgs | mm/dd/yy]</b>
-Note: Same as &quot;RESETALL&quot;.
-
-Subj: <b>FREQ &lt;filename&gt;</b>
-Note: File Request from file transfer database (not attachments).  QWK netted
-      BBSs will receive the requested file into their hubs IN sub-directory,
-      normally located in the \SBBS\DATA\QNET directory
-
-Subj: <b>FILES [ON | OFF | mm/dd/yy]</b>
-Note: Include files list in packet and/or specify new-scan date.
-      Specifying files with the date only will turn this option ON.
-      For users only
-
-Subj: <b>ATTACH [ON | OFF]</b>
-Note: Include file attachments in packet automatically (e-mail only).
-      For users only
-
-Subj: <b>OWN [ON | OFF]</b>
-Note: Include messages from you (affects all conferences).
-      For users only
-
-Subj: <b>MAIL [ALL | ON | OFF]</b>
-Note: Include private mail-box (ALL includes previously read mail).
-      For users only
-
-Subj: <b>DELMAIL [ON | OFF]</b>
-Note: Automatically delete mail-box after successful packet download.
-      For users only
-
-Subj: <b>CTRL-A [KEEP | EXPAND | STRIP]</b>
-Note: Ctrl-A color/attribute codes - leave-in, expand to ANSI, or remove.
-
-Subj: <b>NDX [ON | OFF]</b>
-Note: Include index (.NDX) files (not necessary for Synchronet QWKnet)
-
-Subj: <b>CONTROL [ON | OFF]</b>
-Note: Include control files (DOOR.ID, CONTROL.DAT, NETFLAGS.DAT, etc)
-
-Subj: <b>VIA [ON | OFF]</b>
-Note: Include message path (@VIA) line in messages.
-
-Subj: <b>TZ [ON | OFF]</b>
-Note: Include time zone (@TZ) line in messages.
-
-<b>Downloading Files in QWK</b>
-
-If there are any files in the batch download queue when a QWK packet is
-created, they will be added to the QWK packet automatically. This is what
-makes the FREQ control command so useful. A user (or QWK network node) just
-posts a message (on any sub-board) to SBBS with the title &quot;<b>FREQ FILENAME.EXT</b>&quot;
-(where FILENAME.EXT is the filename and extension of the file to download).
-When the REP packet is extracted, the requested file (if found) is added to
-the batch download queue. Then when a QWK packet is created, the file is
-automatically included. Multiple file requests can be made and all files
-will be included in the QWK packet.
-
-<b>Sending Netmail via QWK</b>
-
-If a user wishes to send netmail via a QWK packet generated from his offline
-mail reader, he must post a message in the E-mail conference (number 0) with
-the name and address of the recipient in the TO field of the message.
-(e.g. John Doe @1:103/715 would be a valid Fidonet netmail address, or
-jdoe@easyst.com would be a valid Internet netmail address).
-This will not work if the user does not have the ability to send netmail.
-
-If the entire netmail address is too long to fit into the TO field (up to
-25 characters), the user can alternately place the word &quot;NETMAIL&quot; in the TO
-field, and place the netmail address (name@addr) of the recipient on the FIRST
-LINE of the message body.  Note that the '@' symbol MUST be present in a
-netmail address if used in the 'to' field.</pre>
-<p><a href="#top"><b>Back to Top</b></a></p>
-
-<!--webbot bot="Include" U-Include="_borders/bottom.htm" TAG="BODY" startspan -->
-
-<hr>
-<p><b><a href="http://www.synchro.net/copyright.html">Copyright</a> � 2000 by </b> <a href="http://www.synchro.net/author.htm"><b>Rob Swindell</b><br>
-</a>
-
-<a href="http://www.synchro.net"><font size="2"><br>
-Synchronet BBS Software</font></a>  <font size="2">  (Synchronet)
-Version 3 is comprised of several documentation,<br>
-library, executable, and <a href="http://www.synchro.net/source.html">source code</a> 
-files, all of which are covered by the<a href="http://www.fsf.org/copyleft/gpl.html">
-<br>
-GNU General Public License</a>  with the exception of the following portions
-covered by<br>
-the <a href="http://www.fsf.org/copyleft/lesser.html">GNU Lesser General Public License</a>:
-SMBLIB and XSDK.<br>
-<br>
-Synchronet Version 2 (for DOS and OS/2) and its source code was released to the<a href="http://www.fsf.org/philosophy/categories.html#PublicDomainSoftware">
-<br>
-Public Domain</a>  by <a href="ftp://vert.synchro.net/main/sbbs/manifest.txt">Digital Dynamics</a> 
-in 1997 and remains Public Domain software today.<br>
-Synchronet Version 3 is not Public Domain software.</font></p>
-<p align="left"><font size="2"><a href="http://www.synchro.net/author.html">Rob Swindell<br>
-</a>PO Box 501<br>Yorba Linda, CA 92885<a href="http://www.synchro.net"><br>
-http://www.synchro.net</a>
-
-</font></p>
-<p align="left"><font size="2">For the complete Copyright Information please
-read the <a href="http://www.synchro.net/copyright.html">Copyright Documentation</a>
-.</font></p>
-
-<!--webbot bot="Include" endspan i-checksum="55766" -->
-
-</body>
-
-</html>
diff --git a/docs/modem_setup.html b/docs/modem_setup.html
deleted file mode 100644
index 3319aed2d7..0000000000
--- a/docs/modem_setup.html
+++ /dev/null
@@ -1,493 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<title>Modem Setup</title>
-</head>
-
-<body>
-
-<!--webbot bot="Include" U-Include="_borders/top.htm" TAG="BODY" startspan -->
-
-<a href="http://www.synchro.net"><img border="0" src="images/synclogo_fancyred.gif" alt="Synchronet BBS - Multinode Bulletin Board Software" width="626" height="86"></a>
-
-<hr>
-
-<!--webbot bot="Include" endspan i-checksum="23126" -->
-
-<p><a name="top"></a><a href="sysop.html#TOC">Back to Table of Contents</a></p>
-
-<h2><a name="UART_Serial/Modem">[4.1] - Using UART Serial
-Cards/Internal Modems</a>
-
-<b> <i><font color="#FF0000">(v2 Only)</font></i></b></h2>
-
-<pre>If you are using a shared IRQ or non-UART serial card, you should skip this
-section and go to the section on 'Using a Shared IRQ or Non-UART Serial Card'.
-
-If you are using an internal modem, note that all references to serial boards
-are the same as referring to an internal modem.  Also note that most internal
-modems only have support for up to 4 different IRQ's and I/O addresses.
-
-Prior to installing your serial board, you should insure that neither the IRQ
-or the I/O address of any of the ports on the board are being used by any other
-devices in your system.  Following is a list of IRQ's and I/O addresses which
-are commonly used by devices (those marked with a minus sign (-) may never be
-used by a serial board):
-
-		  <b>Device		  IRQ	  I/O Address</b>
-		  ----------------------  ---	  -----------
-		 -Timer 		   0	   040 - 05F
-		 -Keyboard Controller	   1	   060 - 06F
-		 *EGA/VGA Cards 	   2
-		  Serial Port 2 	   3	   2F8 - 2FF
-		  Serial Port 1 	   4	   3F8 - 3FF
-		  Parallel Port 2	   5	   278 - 27F
-		  Floppy Drive		   6	   3F0 - 3F7
-		  Parallel Port 1	   7	   378 - 37F
-		 -Real Time Clock	   8	   070 - 07F
-		 *Same as IRQ 2 	   9
-		 -Co-processor		  13	   0F0 - 0F1
-		  Fixed Disk Controller   14	   1F0 - 1F8
-
-	*NOTE: IRQ's 2 and 9 may never be used at the SAME time.
-
-The following are suggested IRQ and I/O address settings for using up to 8
-serial ports:
-
-		      <b>Device		      IRQ     I/O</b>
-		      ----------------------  ---     ---
-		      Serial Port 1	       4      3F8
-		      Serial Port 2	       3      2F8
-		      Serial Port 3	       5      3E8
-		      Serial Port 4	       2      2E8
-		      Serial Port 5	      10      1F8
-		      Serial Port 6	      11      1E8
-		      Serial Port 7	      12      1A8
-		      Serial Port 8	      15      2A8
-
-An additional 2 serial ports may be added using the following IRQ and I/O
-addresses:
-
-		     <b> Device		      IRQ     I/O</b>
-		      ----------------------  ---     ---
-		      Serial Port 9	       7      400
-		      Serial Port 10	      14      408
-
-Refer to the documentation provided by the manufacturer of your particular
-serial board for information on how to select IRQ and I/O addresses.
-
-After you have the ports on your serial board set up to fit your system
-requirements, you should write down the IRQ and I/O address information for
-future reference.  Once you have determined the IRQ and I/O address that each
-node on your system will use, you must run the SCFG program and go to the
-Nodes-&gt;Node #-&gt;Modem Configuration and set the COM Port, UART IRQ Line, and
-UART I/O Address.  Each node, when running on the same machine, should have a
-unique COM Port number.
-
-<b>Notes on UARTs</b>
-
-If you are using an external high-speed modem, you may require a buffered
-UART chip on your serial board for error-free transmissions. 8250 and 16450
-UARTs DO NOT have buffers and are usually insufficient for high-speed modems.
-16550AFN UARTs have a 16 byte FIFO UART which allows error-free transmissions
-with high-speed modems, particularly necessary when multi-tasking. Almost
-all internal high-speed modems come with a built-in 16550 UART.</pre>
-
-<h2><a name="Shared_IRQ/Non-UART">[4.2] - Using a Shared IRQ
-or Non-UART Serial Card</a></h2>
-
-<pre>If you are using a serial card which allows the use of shared IRQ's or has a
-non-standard UART interface, you will need to use a device driver to interface
-this card with Synchronet. Usually, such a driver would be included with the
-serial card from the manufacturer. Third party drivers are also available (such
-as COMM-DRV and X00).
-
-Synchronet supports three driver interfaces, all using Int 14h services. The
-supported driver interfaces are:
-
-	<b>FOSSIL</b> (Fido/Opus/SEAdog Standard Interface Layer Version 5)
-		Functions 0 through 6, and Fh
-		Example FOSSIL drivers: X00, BNU, and COMM-DRV
-
-	<b>PC BIOS</b>
-		Functions 0 through 3
-
-	<b>PS/2 BIOS</b>
-		Functions 1, 2, 4, and 5
-
-	<b>DigiBoard</b>
-		DigiCHANNEL PC/Xi and PC/Xe DOS driver
-
-When setting the COM port in SCFG-&gt;Nodes-&gt;Node #-&gt;Modem Configuration, you
-will be prompted for the COM port type:</pre>
-<pre><img border="0" src="images/scfg_modem_port_type.gif" width="572" height="331">
-
-If you are NOT using a special shared IRQ or non-UART serial card, then you
-should select &quot;UART&quot; and ignore the rest of this section.
-
-When selecting a non-UART COM port type, the &quot;Channel&quot; will automatically be
-set to the COM port number minus one. This is the zero-based COM port that will
-be used when communicating with the device driver (i.e. COM port 1 is channel
-0, port 2 is channel 1, etc). You should NOT change the channel number unless
-you have a specific reason for doing so and understand exactly what you are
-doing.
-
-If you are using an Intelligent DigiBoard and are using the DigiBoard supplied
-device driver, then select &quot;DigiBoard Int 14h&quot;.
-
-If the card you are using has a FOSSIL compatible device driver, this should
-be your preferred selection unless you wish to use baud rates greater than
-38400, in which case a &quot;PS/2 BIOS&quot; compatible driver would be a better choice.
-The COMM-DRV/Universal Serial Communications Driver supports both FOSSIL and
-PS/2 BIOS interfaces.
-
-You should only select &quot;PC BIOS&quot; in a last case scenario (i.e. Your card's
-device driver does not support any other Int 14h interface). The PC BIOS
-interface does not support DTR, so if you use such a limited driver, you must
-set &quot;Drop DTR to Hang Up&quot; to &quot;No&quot; under &quot;Modem Toggle Options&quot;, set the
-&quot;Hang Up String&quot; to &quot;~~~\1\1\1~~~ATH&quot; and change &quot;S2=128&quot; to &quot;S2=1&quot; in your
-&quot;Initialization String&quot;.
-
-Int 14h drivers can also be used to communicate with non-UART serial devices
-such as Packet Assembler/Disassemblers (PADs), Network Redirectors, HAM Radio
-Packet Servers, etc.</pre>
-<h2><a name="DumbModemConnection">[4.3] - Dumb (NULL) Modem Connection</a></h2>
-<pre>If you are connecting a Synchronet node to another computer or terminal through
-a serial port WITHOUT the use of a modem, you must set SCFG-&gt;Nodes-&gt;Node #
--&gt;Modem Configuration-&gt;Toggle Options-&gt;Dumb Modem Connection to &quot;Yes&quot;. This
-disables all modem commands (Init, Special Init, Answer, Off-hook, etc.) and
-causes Synchronet to only log a user on when the DCD serial line is raised.
-
-If your serial connection or terminal does not support the correct use of the
-DCD line, then you must run SBBS with the 'D' command line switch to force
-Synchronet to assume that DCD is always high. If this is the case, then there
-is no way to &quot;hang up&quot; on the BBS.</pre>
-<h2><a name="ModemConfiguration">[4.4] - Modem Configuration</a></h2>
-<pre>Now that you've set up your serial card, the easiest way to finish setting up
-the rest of the options for your modem is to run the SCFG program and go to the
-Nodes-&gt;Node #-&gt;Modem Configuration-&gt;Auto-Configuration, and select your modem
-model from the list of available choices.  If your modem is not listed, you may
-select Generic 2400 for unlisted 2400bps Hayes compatible modems, Generic 9600,
-Generic 14400, or Generic 28800 for unlisted high speed modems.  You may also
-import .MDM configuration files (located in your control directory) if you
-receive an updated or new version of a configuration file for your modem from
-Digital Dynamics or a third party.
-
-Following is a list of remaining options and a brief description of each for
-those of you that wish to manually alter the modem settings.
-
-UART (DTE) Rate is the data transfer rate between your computer and your modem,
-for non-data-compressing, non-high-speed modems, you should set this to your
-modem's highest DCE rate (e.g. a 2400bps modem should use a 2400bps DTE rate).
-If you have a data-compressing or high-speed modem, this value should be set
-to the highest DTE rate your modem supports (consult your modem manual).  If
-you plan on using a FOSSIL driver for any external programs or doors, the
-DTE rate you set for your FOSSIL driver should be the same number you use for
-this option.
-
-Hardware Flow Control should be set to Transmit and Receive (Both) if your
-modem supports CTS/RTS hardware flow control (usually data-compressing or
-high-speed modems).
-
-Answer delay is the number of seconds to pause after a connection is
-established and before the terminal detection string is sent. It is suggested
-that this delay be set to a minimum of 5 seconds to allow for accurate
-terminal type detection. If the callers on your BBS are experiencing
-inaccurate terminal type detection, you may want to increase this number.
-
-Answer after (# rings) is the number of rings the bbs should wait for before
-answering the phone, the minimum is 1 ring.
-
-Reinitialization Timer is used to automatically reinitialize the modem
-periodically to make sure it is functioning correctly.	If you find that your
-modem works most of the time, but occasionally will not answer the phone or
-functions incorrectly, you may wish to use this feature.  Setting this value to
-0 will disable periodic modem reinitialization.
-
-Example (for Generic 28.8k Modem on COM 2):</pre>
-<pre><img border="0" src="images/scfg_modem_config.gif" width="572" height="331"></pre>
-<h2><a name="ResultCodes">[4.5] - Result Codes</a></h2>
-<pre>Result Codes is a list of numeric result codes (connect codes) supported by
-your modem. If you have set &quot;Use Verbal Result Codes&quot; to 'Yes' in your
-the SCFG modem toggle options for this node, this list is not used.
-
-You would use this list to add result codes that your modem supports, but are
-not currently in the list or to remove codes that are in the list but are not
-supported by your modem.  For each result code, the actual numeric code, the
-DCE (connect) rate, estimated file transfer CPS, and an 8 character description
-of the connection type are stored. A complete list of result codes supported by
-your modem should be given in your modem manual.
-
-Here is an example of what the result code list would look like for a Generic
-28.8k modem:</pre>
-<pre><img border="0" src="images/scfg_modem_resultcodes.gif" width="572" height="331"></pre>
-<pre>Selecting result code 15 from this menu would result in a sub-menu as follows:</pre>
-<pre><img border="0" src="images/scfg_modem_resultcode_15.gif" width="572" height="331">
-
-If &quot;FAX&quot; is used for the result code description, Synchronet will exit with
-an error level of 100 when this result code is returned. This feature is used
-for FAX/Modems that can auto-detect FAX and DATA calls and return a numeric
-result code for FAX connections. If a different error level is preferred,
-use &quot;EXIT nnn&quot; (where nnn is a numeric value) for the description. If a verbal
-&quot;FAX&quot; or &quot;+FCON&quot; result code is returned, Synchronet automatically exits with
-an error level of 100 (see FAX/Modem setup later in this chapter).
-
-If your modem returns any result codes PRIOR to the actual connection result
-code (and this behavior cannot be disabled), then add these result codes to the
-result code list and enter &quot;IGNORE&quot; for the result description, thus causing
-Synchronet to ignore this result code and wait for another result code to
-determine the actual connection type. This step is only necessary for modems
-that insist on returning multiple result codes during a connection.</pre>
-<h2><a name="ToggleOptions">[4.6] - Toggle Options</a></h2>
-<pre>Selecting this option gives a menu of available modem toggle options:</pre>
-<pre><img border="0" src="images/scfg_modem_toggles.gif" width="572" height="331">
-
-<b>Caller Identification:
-</b>	This is used for toggling the ability to use Caller-ID. Consult the
-        section on caller identification for more information.
-
-<b>Dumb Modem Connection:
-</b>        This option should be set to 'Yes' if you are using a dumb (null) modem
-        cable to connect a computer to your BBS.
-
-<b>Drop DTR to Hang Up:
-</b>        This is normally set to 'Yes', but some modems do not support the
-	dropping of DTR to hang up the modem. If your modem is one of those,
-        you should toggle this option to 'No'.
-
-<b>Use Verbal Result Codes:
-</b>	This option should be set to 'Yes' for the easiest configuration of
-	your modem. When this option is set to 'Yes', SBBS will automatically
-	parse the CONNECT message received by the modem to determine the
-	connect (DCE) rate and estimated CPS of the call. If &quot;ARQ&quot;, &quot;V42&quot;,
-	&quot;LAPM&quot;, &quot;MNP&quot;, or &quot;REL&quot; are contained in the connect string, hardware
-	error correction is assumed to be in effect and the estimated CPS
-	rate is increased appropriately. Setting this option to 'Yes' has the
-	added advantage of allowing DCE rates above 64000. Result codes not
-	recognized as CONNECT messages (e.g. PROTOCOL, CARRIER, etc) are
-	ignored. Result codes with &quot;FAX&quot; or &quot;+FCO&quot; cause SBBS to exit with an
-	error level of 100 (for the execution of FAX receive software).
-
-<b>Allow Unknown Result Codes:
-</b>	If &quot;Use Verbal Result Codes&quot; is set to 'No', then numeric result codes
-	returned by the modem are then looked up in the configured result code
-	list. If the result code is not found and the &quot;Allow Unknown Result
-	Codes&quot; option is set to 'No', the call is immediately disconnected and
-	an error message is logged for the sysop's attention. If the result
-	code is not found and the &quot;Allow Unknown Result Codes&quot; option is set to
-	'Yes', then the connection information (DCE rate, estimated CPS rate,
-	etc) is taken from the last configured result code and an error message
-	is still logged for the sysop's attention.</pre>
-<h2><a name="ControlStrings">[4.7] - Control Strings</a></h2>
-<pre>Modem Control Strings are the strings which are sent to your modem at various
-times during BBS operation.  Normally the default strings are sufficient for
-proper operation, but occasionally you may wish to modify one or more of these
-settings.</pre>
-<pre><img border="0" src="images/scfg_modem_strings.gif" width="572" height="331">
-
-Initialization String is the basic modem initialization for Synchronet. You
-should not modify this unless you are unhappy with any of the settings and are
-familiar enough with the AT command set to understand what each command does.
-Placing a tilde '~' anywhere in this string will produce a 500 millisecond
-(half second) pause. Synchronet requires that the modem NOT echo characters
-back and return numeric result codes. So &quot;E0&quot; and &quot;V0&quot; must be included
-in the init string. Since Synchronet manually detects incoming calls from
-the modem, the modem's auto-detect feature must be disabled with &quot;S0=0&quot;. If
-you do not want to hear the connection progress sounds, add &quot;M0&quot; to the end
-of your modem initialization string to disable the modem's speaker.
-
-Special Init String is where additional initialization commands are placed for
-specific modem types, usually error-correcting, data-compressing, or high-speed
-modems.
-
-Terminal Init String is the initialization string sent to the modem when you
-enter Synchronet's terminal mode ('T' from the waiting for call screen).
-
-Dial String is the command sent to the modem for making outbound calls.
-Currently only used by the Synchronet Callback Verifier.
-
-Off Hook String is the command sent to the modem to take the phone off-hook
-(busy).
-
-Answer String is the command sent to the modem when a ring is detected by
-Synchronet.
-
-Hang Up String is the command sent to the modem to hang up the phone and is
-only used if Drop DTR To Hang Up modem toggle option is set to No.</pre>
-<h2><a name="AutoConfiguration">[4.8] - Auto-Configuration</a></h2>
-<pre>The auto-configuration contains a very long list of modem types.  Using this
-list is the EASIEST way to configure your modem to work with Synchronet.  All
-you need to do is select your modem from this list and most everything will be
-configured for you.  If you do not see your modem in this list, you can
-normally select a 'Generic' model from the list.
-
-If someone later creates an .MDM configuration file specifically for your
-modem, you can use this configuration file simply copying the .MDM file into
-your control directory and then selecting the 'Import Configuration' option
-from the menu and typing in the name of the .MDM file.
-
-If you create a new configuration you would like to make available to people,
-you can export the configuration information into an .MDM file by selecting the
-'Export Configuration' option from the menu.</pre>
-<h2><a name="CallerIdentification">[4.9] - Caller Identification</a></h2>
-<pre>If your modem supports one of the Caller-ID formats listed below and you have
-Caller-ID service enabled on your phone line, you can have Synchronet log
-Caller-ID information and disallow specific numbers. First, add the appropriate
-commands to SCFG-&gt;Nodes-&gt;Node #-&gt;Modem Configuration-&gt;Special Init String to
-enable Caller-ID on your modem (see your modem's manual for details). Then set
-SCFG-&gt;Nodes-&gt;Node #-&gt;Modem Configuration-&gt;Toggle Options-&gt;Caller Identification
-to &quot;Yes&quot;.
-
-If you are using a Front-End (e.g. FrontDoor) on your BBS, the CID information
-can be passed to Synchronet on the SBBS command line with the 'Z' command line
-switch (e.g. sbbs c14400 z01-09_11:15_7145295313). The Caller-ID information
-must be ONE string with no spaces.
-
-The user's phone number will be placed in the user's note field for your
-records and logged for each call in the system log. If you wish to disallow
-access for a specific number, create the file CID.CAN in your TEXT directory
-and enter one phone number per line to disallow that number. If you want a
-message to be displayed to the user who calls with a disallowed number, create
-the message file BADCID.MSG in your TEXT directory.
-
-Supported formats:
-
-	Single Line:
-
-		MM-DD HH:MM Number
-
-	Three Line:
-
-		TIME:
-		CALLER NUMBER:
-		CALLER NAME:
-
-	Four Line:
-
-		DATE =
-		TIME =
-		NMBR =
-		NAME =</pre>
-<h2><a name="FAX/ModemSetup">[4.10] - FAX/Modem Setup for
-Receiving FAXes</a></h2>
-<pre>In order for Synchronet to be able to receive incoming FAXes, there are a few
-requirements that must be met, these are:
-
-	1) Your modem MUST be able to return either a verbal or numeric FAX
-	   result code (verbal results must contain &quot;FAX&quot; or &quot;+FCO&quot;).
-
-	2) Your modem MUST be able to auto-detect FAX and DATA calls.
-
-	3) You MUST have a command line receive FAX program that works with
-	   your FAX modem.
-
-If all of the above requirements can be met, then you will need to modify the
-SBBS.BAT/SBBS.CMD file in the directory of the node(s) to be used for receiving
-incoming FAXes as follows (using a ZyXEL FAX/Modem setup on COM 2 as an
-example):
-
------------------------------------[ Begin ]-----------------------------------
-@echo off
-:top
-..\exec\sbbs %1 %2 %3 %4 %5
-if not errorlevel 100 goto end
-c:
-cd \zfax
-rcvfax 2 /p:1
-echo Incoming FAX! &gt;&gt; c:\sbbs\data\msgs\0001.msg
-c:
-cd \sbbs\node1
-goto top
-:end
-------------------------------------[ End ]------------------------------------
-
-Change the 'c:' on the 5th line to the drive letter where your receive FAX
-program resides.
-
-Change the 'cd \zfax' on the 6th line to the name of the directory where your
-receive FAX program resides.
-
-Change the 'rcvfax 2 /p:1' on the 7th line to match the name and command line
-options of the receive FAX program for your modem.
-
-Change the 'c:\sbbs\data' portion of the 8th line to match the location of your
-Synchronet data directory.
-
-Change the 'c:' on the 9th line to the drive letter where you have Synchronet
-installed.
-
-Change the 'cd \sbbs\node1' on the 10th line to match the directory of the
-node(s) that will be set up for receiving FAXes.
-
-Check your modem manual to find out if your modem responds with a verbal
-&quot;FAX&quot; (e.g. ZyXEL) or &quot;+FCO&quot; (e.g. Practical Peripherals) result code or a
-numeric FAX result code (e.g. Hayes). If a numeric result code is returned,
-then run SCFG from your node directory and go to Nodes-&gt;Node #-&gt;Modem
-Configuration-&gt;Result Codes and add the numeric result code your modem returns
-for a FAX connect and enter &quot;FAX&quot; for the result description. If your modem
-returns a numeric &quot;DATA&quot; result code when in auto-detection mode (e.g. Hayes)
-then add this result code to your result code list in SCFG and enter &quot;IGNORE&quot;
-for the result description.
-
-Example numeric FAX result code (using Hayes Optima 288):</pre>
-<pre><img border="0" src="images/scfg_modem_fax_code1.gif" width="572" height="331">
-
-Example numeric DATA result code (using Hayes Optima 288):</pre>
-<pre><img border="0" src="images/scfg_modem_fax_code2.gif" width="572" height="331">
-
-If there are any commands needed to enable FAX auto-detection, add these
-commands to the end of your Special Init string in SCFG-&gt;Nodes-&gt;Node #-&gt;Modem
-Configuration. If there is an auto-configuration entry listed for your modem
-with FAX enabled, this step is not necessary.
-
-Now you are ready to receive FAXes!  When your modem returns a FAX result code
-to Synchronet, the receive FAX program specified in this batch file will be
-executed.  FAXes will be placed into the directory that your FAX program uses
-for received FAXes.
-
-FAXes CANNOT be sent to specific users on the BBS, this option is only for the
-convenience of being able to receive FAXes without the need of a dedicated FAX
-machine and phone line.  However, the ability to allow users to FAX on demand
-or to upload files to be sent out as FAXes can be accomplished by using one of
-the add-ons (Domain FAX) from Domain Entertainment.</pre>
-<p><a href="#top"><b>Back to Top</b></a></p>
-
-<!--webbot bot="Include" U-Include="_borders/bottom.htm" TAG="BODY" startspan -->
-
-<hr>
-<p><b><a href="http://www.synchro.net/copyright.html">Copyright</a> � 2000 by </b> <a href="http://www.synchro.net/author.htm"><b>Rob Swindell</b><br>
-</a>
-
-<a href="http://www.synchro.net"><font size="2"><br>
-Synchronet BBS Software</font></a>  <font size="2">  (Synchronet)
-Version 3 is comprised of several documentation,<br>
-library, executable, and <a href="http://www.synchro.net/source.html">source code</a> 
-files, all of which are covered by the<a href="http://www.fsf.org/copyleft/gpl.html">
-<br>
-GNU General Public License</a>  with the exception of the following portions
-covered by<br>
-the <a href="http://www.fsf.org/copyleft/lesser.html">GNU Lesser General Public License</a>:
-SMBLIB and XSDK.<br>
-<br>
-Synchronet Version 2 (for DOS and OS/2) and its source code was released to the<a href="http://www.fsf.org/philosophy/categories.html#PublicDomainSoftware">
-<br>
-Public Domain</a>  by <a href="ftp://vert.synchro.net/main/sbbs/manifest.txt">Digital Dynamics</a> 
-in 1997 and remains Public Domain software today.<br>
-Synchronet Version 3 is not Public Domain software.</font></p>
-<p align="left"><font size="2"><a href="http://www.synchro.net/author.html">Rob Swindell<br>
-</a>PO Box 501<br>Yorba Linda, CA 92885<a href="http://www.synchro.net"><br>
-http://www.synchro.net</a>
-
-</font></p>
-<p align="left"><font size="2">For the complete Copyright Information please
-read the <a href="http://www.synchro.net/copyright.html">Copyright Documentation</a>
-.</font></p>
-
-<!--webbot bot="Include" endspan i-checksum="55766" -->
-
-</body>
-
-</html>
diff --git a/docs/multnode_config.html b/docs/multnode_config.html
deleted file mode 100644
index 66f4773211..0000000000
--- a/docs/multnode_config.html
+++ /dev/null
@@ -1,467 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<title>Multinode Configuration</title>
-</head>
-
-<body>
-
-<!--webbot bot="Include" U-Include="_borders/top.htm" TAG="BODY" startspan -->
-
-<a href="http://www.synchro.net"><img border="0" src="images/synclogo_fancyred.gif" alt="Synchronet BBS - Multinode Bulletin Board Software" width="626" height="86"></a>
-
-<hr>
-
-<!--webbot bot="Include" endspan i-checksum="23126" -->
-
-<p><a name="top"></a><a href="sysop.html#TOC">Back to Table of Contents</a></p>
-<h2><a name="MultinodeConfiguration">[14.0] - Multinode Configuration </a><i><font color="#FF0000"><b>(v2
-Only)</b>
-</font></i>
-</h2>
-<pre>Synchronet Version 2.x runs under DOS v3.0 or greater and SHARE (or NetWare).
-A DOS process is required for each node on a Synchronet system (unless
-running Synchronet for OS/2). You can run multiple nodes on one cpu with DOS
-multitaskers such as DESQview, Windows, or OS/2 or you can run one node per CPU
-and let the CPU's share the same data on a common hard disk via Local Area
-Network (LAN).</pre>
-<h2><a name="LANMethod">[14.1] - LAN Method</a>
-</h2>
-<pre>Using one CPU per node is by far the fastest way to run multiple Synchronet
-nodes. Since SBBS4DOS runs in 8086 real mode, any IBM PC can run Synchronet
-with sufficient speed. The minimum equipment necessary for each node would be a
-power supply, motherboard, at least 450k free memory, a network interface card
-(NIC), floppy drive and controller (or just a boot PROM for the NIC), and a
-modem. Some BIOS's require a video controller and/or a keyboard as well, but
-they are not necessary for the execution of Synchronet.
-
-To link these computers together, you will need some form of networking
-software. DOS based networks (Lantastic, NetWare Lite, CBIS Network O/S, 
-MainLAN etc.) are the cheapest and don't require a dedicated CPU as a file 
-server, but they lack the speed of a dedicated file server and network 
-operating system. The most popular Network Operating System (NOS) is Novell 
-NetWare. The disk performance on a dedicated NetWare file server is often 
-preferable over a local hard disk (especially on XT's) due to NetWare's high 
-speed file system and dedicated memory for intelligent disk caching. Synchronet
-will run on any NOS that allows multiple CPU's running DOS to access data on a 
-common disk.</pre>
-<h2><a name="MultitaskerMethod">[14.2] - Multitasker Method</a>
-</h2>
-<pre>Any program that allows the simultaneous execution of multiple DOS programs
-should be able to run multiple SBBS4DOS nodes per CPU. To reliably and
-efficiently run multiple DOS sessions on one CPU, you will probably need an
-80386 CPU (the faster, the better), and at least 2 megabytes of memory
-(the more, the better). Different multitaskers will have different hardware
-requirements, but the common denominator seems to be an 80386 and extended
-or expanded memory.
-
-<i>IMPORTANT NOTE:</i> When multitasking using Windows or OS/2, it is suggested that
-		you have a minimum 80486/33mhz CPU with a minimum of 8 mega-
-		bytes of memory. This is due to the requirements of the
-		operating environment, not the requirements of Synchronet.
-
-You will need a separate IRQ line and UART I/O address for each COM port in
-the computer. It is recommended that you use high speed, buffered 16550A UARTs
-rather than the non-buffered 16450 UARTs which some I/O cards use. If you wish
-Synchronet to always use BIOS calls for screen output, you need to include the
-B parameter on the SBBS command line. Normally, Synchronet uses direct video
-for block text which can conflict with some multitaskers that manage a split
-screen for multiple DOS sessions.
-
-Generally, the faster the machine, the more nodes you can run. But how many
-for what kind of performance is not an easy question to answer. It depends 
-heavily on the multitasking software, modem speed, and hardware I/O. Under any
-configuration, expect some amount of performance degradation when running
-multiple nodes per CPU.</pre>
-<h2><a name="Safe?">[14.3] - Is it Safe?</a>
-</h2>
-<pre>Many Sysops will worry how reliable the system is with multiple simultaneous
-users. Rest assured that Synchronet was designed from the ground up for
-multiple simultaneous users. Data integrity and system fault tolerance is never
-sacrificed when adding nodes to a Synchronet system.
-
-Users can post on the same sub-board, e-mail the same user, download the same
-file, run the same external program, perform virtually any system function
-simultaneously. Note: External programs must support multiple simultaneous
-users if the program has been configured for multi-user access from Synchronet.
-
-Considerations and precautions have been taken where user data is concerned
-to allow changes to the real-time database to take place immediately - even if
-the user is online on a node other than the one that performed the data update.
-Any security, configuration, or statistics changes made remotely will take 
-effect immediately.
-
-The transfer section disallows simultaneous uploading of the same filename to
-the same directory and prevents a file that is currently open (being downloaded
-or just added to a user's batch download queue) from being moved, removed, or
-edited while allowing simultaneous downloads.
-
-
-As a general rule, no data files or records are allowed exact simultaneous 
-access if one of the nodes will modify the data. Simultaneous read only access 
-is allowed. Collisions (simultaneous write access requested of a file by two 
-or more nodes) are logged along with the retry count. There is a retry maximum 
-count (or time-out) that will deny access to the requesting node and log a 
-critical error for that node. This situation should not occur, but provisions 
-are made for it in case of hardware failure of a node with a file or record 
-open with write access.</pre>
-<h2><a name="MultinodeDESQview">[14.4] - Multinode: DESQview</a>
-</h2>
-<pre><a name="How many nodes?"><b><u>How many nodes?</u></b></a></pre>
-<pre>The answer to this question depends on the speed of your machine. Here is
-a table to estimate the maximum number of nodes you should run on any given
-machine under DESQview:
-
-CPU	Nodes
-386-16	1
-386-25	2
-386-33	3
-386-40	4
-486-25	5
-486-33	8
-486-50	10
-
-	<b>Note:</b> You can run more than the suggested number of nodes, but
-	      performance will decrease with each additional node.</pre>
-<pre><a name="How much memory?"><b>How much memory?</b></a></pre>
-<pre>You will need roughly 500k of available expanded memory for each node. When
-running multiple nodes, a disk cache is required. Around 1 to 2 MB should be
-used in most situations. Here is another table of estimated total system memory
-required in megabytes (assuming a 1MB disk cache is used):
-
-Nodes	MB of RAM
-2	3
-3	4
-4	4
-5	5
-6	5
-7	6
-8	6
-9	7
-10	7</pre>
-<pre>
-To save memory for each node, you can reduce the &quot;Maximum program memory size&quot;
-to something like 450k or so. If you get memory allocation errors when
-running SBBS, you'll need to increase this number. You can raise it beyond 640k
-and actually get more than 640k free in some situations. This number is the 
-amount that DESQview will give this node if it can, or if not possible, as much
-as it can. The &quot;Memory Size&quot; parameter is the minimum amount the program will 
-require.
-
-If you have VGA, you may want to change the Video mode to 80x50 or 80x60 with
-the &quot;Rearrange&quot; menu, and change the &quot;Window Positions&quot; under DVSETUP 
-(advanced) and/or the &quot;Window Position&quot; information for the each SBBS node
-under &quot;Change a Program Advanced Options&quot;. This way you can display multiple
-80x25 windows simultaneously.
-
-Don't forget to have a batch file execute DVANSI.COM before running Synchronet
-if you have external programs that access the COM port themselves and use DOS 
-for output. Example: Trade Wars uses the BIOS for output so DVANSI is not
-required. Global War uses DOS for output and uses the COM port directly, so 
-DVANSI is required.
-
-You must have &quot;Close on exit&quot; to [N] if you are going to execute SBBS from
-a batch file that executes other programs before SBBS. Here is an example
-batch file which will run dvansi, then Synchronet, and closes the window after
-exiting Synchronet. This example file is called SBBSDV.BAT:
-
----------------------------------[ Begin ]-------------------------------------
-@echo off
-c:\dv\dvansi
-c:\sbbs\exec\sbbs %1 %2 %3 %4 %5
-if errorlevel 1 pause
-exit
----------------------------------[  End  ]-------------------------------------
-
-This batch file (SBBSDV.BAT is just an example name), can be used to execute
-any of the Synchronet nodes, because the &quot;Directory&quot; parameter determines which
-node is going to run. You would have to change the &quot;Program&quot; parameter to
-&quot;C:\BAT\SBBSDV.BAT&quot; if you created SBBSDV.BAT in the C:\BAT directory.
-
-<a name="Auto Start-up Scripts DV">Start-up Scripts</a>
-~~~~~~~~~~~~~~~~
-If you want your nodes to be automatically loaded up when running DESQview,
-see &quot;Learning Scripts&quot; and &quot;Start-up Scripts&quot; in your DESQview manual.
-
-Here is an example script (in text format) that loads two Synchronet nodes
-(assuming the Open Menu keys are S1 and S2):
-
-DESQVIEW.TXT:
-
----------------------------------[ Begin ]-------------------------------------
-{Learn {Alt-\} &quot;!startup&quot;}
-{DESQ}os1
-{DESQ}os2
-{Finish}
----------------------------------[  End  ]-------------------------------------
-
-Here is an example script (in text format) that uses the Big DOS program to
-load two Synchronet nodes:
-
-DESQVIEW.TXT:
-
----------------------------------[ Begin ]-------------------------------------
-{Learn {Alt-\} &quot;!startup&quot;}
-{DESQ}obd
-dvansi{Enter}
-cd \sbbs\node1{Enter}
-sbbs{Enter}
-{DESQ}obd
-dvansi{Enter}
-cd \sbbs\node2{Enter}
-sbbs{Enter}
-{Finish}
----------------------------------[  End  ]-------------------------------------
-
-To use this script, you MUST modify the Big DOS program parameters to match
-the program setup examples given at the top of this chapter.
-
-To use either script, you must first convert it to DESQVIEW.DVS by running the
-DESQview CONVSCR program.
-
-IMPORTANT: When running under DESQView you will be required to load DOS's SHARE
-	   program.  Be sure that you do NOT load SHARE into high memory (or
-	   allow any memory managers to do so)!</pre>
-<h2><a name="MultinodeOS/2">[14.5] - Multinode: OS/2</a>
-</h2>
-<pre><a name="0s2 System Requirements">System Requirements</a>
--------------------
-The OS/2 operating environment requires a faster CPU and more system memory
-(compared to DESQview) to run efficiently. Because of this, there are greater
-system requirements for running SBBS4DOS using OS/2. First, the number of
-nodes which can be run on a given CPU is approximately one half of the number
-which can be run on an equivalent CPU using DESQview. Next, it is recommended
-that an 80486 CPU of 33mhz (or greater), with 8 megabytes of memory (or more)
-be used.
-
-The default OS/2 communications driver is not sufficient for high speed modem
-communications, it is recommended that you replace the default drivers with
-a third party driver (such as SIO by Ray Gwinn). It is also recommended that
-you have buffered 16550 UARTs on your I/O cards rather than the non-buffered
-16450 UARTs.
-
-You cannot use a standard DOS FOSSIL driver with OS/2. If you require the use
-of a FOSSIL driver, you must use a FOSSIL driver which has been written for use
-with OS/2 (such as VX00).
-
-See the contacts reference appendix for contacting Ray Gwinn, author of SIO
-and VX00 serial communications drivers for OS/2.
-
-When running Synchronet under OS/2, be sure that you do NOT use any additional
-timeslice programs such as TAME or OS2SPEED.
-
-You should have the Win/OS2 time slice API option set to 'Yes' for all nodes
-running in an OS/2 DOS session (in each node's toggle options).
-
-<a name="OS2 Settings"></a>Following are example settings for OS/2, you will find these settings by
-clicking on the DOS Settings box for the DOS window. Settings which are not
-listed should be left as default. You must run each node in its own DOS
-session, consult your OS/2 user guide for more information on running multiple
-DOS sessions.
-
-DOS Settings
-~~~~~~~~~~~~
-COM_DIRECT_ACCESS		ON
-COM_HOLD			ON
-COM_SELECT			ALL
-DOS_BREAK			OFF
-DOS_BACKGROUND_EXECUTION	ON
-IDLE_SECONDS			0
-IDLE_SENSITIVITY		100
-HW_TIMER			ON
-INT_DURING_IO			ON</pre>
-<h2><a name="MultinodeWindows3.x">[14.6] - Multinode: Windows 3.x</a>
-</h2>
-<pre><a name="Win31 System Requirements">System Requirements</a>
--------------------
-The Windows operating environment requires a faster CPU and more system memory
-(compared to DESQview) to run efficiently. Because of this, there are greater
-system requirements for running Synchronet using Windows. First, the number of
-nodes which can be run on a given CPU is approximately one half of the number
-which can be run on an equivalent CPU using DESQview. Next, it is recommended
-that an 80486 CPU of 33mhz (or greater), with 8 megabytes of memory (or more)
-be used.
-
-<a name="Win31 Settings"></a>Following are example settings for Windows. Settings which are not listed
-should be left as default. A setting with (check) next to it means the box
-for that setting should be marked, and (no check) means the setting should
-not be marked.
-
-386 Enhanced Mode Settings
-~~~~~~~~~~~~~~~~~~~~~~~~~~
-All com ports should be set to Never Warn.
-
-Set the Minimum Timeslice to 15.
-
-Exclusive in Foreground (no check).
-
-PIF Settings
-~~~~~~~~~~~~
-Program Filename	: SBBS.BAT
-Startup Directory	: C:\SBBS\NODE1 (modify as required)
-Video Memory		: (Text should be checked)
-
-Memory Requirements
-	KB Required	: 450
-	KB Desired	: 640
-
-*EMS Memory
-	KB Required	: 360
-	KB Limit	: 1024
-
-*XMS Memory
-	KB Required	: 360
-	KB Limit	: 1024
-
-*NOTE: EMS and/or XMS memory will need to have a value if you wish to allow
-       Synchronet to swap using either of these.
-
-Display Usage
-	Windowed	: (check)
-
-Execution
-	Background	: (check)
-
-
-PIF Settings - Advanced Options
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Multitasking Options
-	Background Priority	: 70
-	Foreground Priority	: 70
-	Detect Idle Time	: (no check)
-
-Memory Options
-	EMS Memory Locked	: (check)
-	XMS Memory Locked	: (no check)
-	Uses High Memory Area	: (no check)
-	Lock Application Memory : (check)
-
-Display Options
-	Emulate Text Mode	: (check)
-	(all remaining options) : (no check)
-
-Other Options
-	Allow Close When Active : (check)
-
-
-IMPORTANT: These are settings to get you started!  Different machines and
-configurations require different settings, and it may take some trial and
-error with different memory and timeslice settings to get everything working
-as you desire.	Also note that the default windows communications driver
-probably will NOT be sufficient for high speed modems, and you will probably
-want to purchase a third party communications driver that can handle higher
-baud rates under windows. When running windows, be sure to load SHARE before
-you run windows!</pre>
-<h2><a name="MultinodeWindows9x">[14.7] - Multinode: Windows 9x</a>
-</h2>
-<pre><a name="Win9x System Requirements">System Requirements</a>
--------------------
-The Windows 95 operating environment requires a faster CPU and more system
-memory (compared to DESQview) to run efficiently. Because of this, there are
-greater system requirements for running Synchronet using Windows 95.  You
-should follow the recommendations included with Windows 95 for your system and
-memory requirements, we recommend a minimum 80486 CPU of 33mhz with at least 8
-megabytes of memory.
-
-<a name="Win9x Settings"></a>Basically Windows 95 straight out of the box will run Synchronet without any
-problems.  Following is some information to help you get Synchronet set up
-under Windows 95 and to help get it running a little more efficiently.
-
-First we want to set up an ICON for each of the Synchronet nodes you plan to
-run under Windows 95.  The following steps will guide you through adding one:
-
-1) From Windows 95 Explorer go to the directory of the node you are setting up,
-   (e.g. for node 1 this would normally be C:\SBBS\NODE1).
-
-2) On the right side of Explorer you'll see SBBS.BAT, click on it with your
-   RIGHT mouse button.
-
-3) Go to NEW and click on SHORTCUT.
-
-4) Click on BROWSE, find the SBBS.BAT file in the sub-directory for this node
-   and DOUBLE CLICK on it.
-
-5) Click on NEXT.
-
-6) Click on CHOOSE ICON and select the ICON you wish to use for this node.
-
-7) Click FINISH.
-
-That's all there is to creating an ICON (shortcut) for Synchronet.  Do this for
-each of your Synchronet nodes.	Now there are a couple of settings you'll want
-to change for better efficiency:
-
-1) For each node set the IDLE SENSITIVITY to it's lowest (all the way to the
-   left-hand side).
-
-2) In SCFG under each node, set the toggle option 'Windows/OS2 Time Slice API'
-   to 'YES'.</pre>
-<h2><a name="MultinodeLAN">[14.8] - Multinode: LAN</a>
-</h2>
-<pre>Most of the information necessary for setting up your nodes on a LAN will be
-provided by the documentation for your Network Operating System. All that
-Synchronet requires is that each node have access to the SAME drive for
-data storage. ALL Synchronet directories must be accessible by ALL nodes as
-the SAME drive letter (if multiple drives are in use). If one drive is used
-for all BBS data, then simply remove all drive letters from the configured
-paths in SCFG (and each workstation can use different drive letters if
-necessary).
-
-You may mix the LAN multinode method with the multitasker method to get more
-than one node on each workstation.
-
-NOTE: When using Netware 3.x or 4.x you should create a SHELL.CFG or NET.CFG in
-      the directory where your workstation loads your network files.  In the
-      SHELL.CFG or NET.CFG file you should have the line: SHARE=OFF.  You will
-      also need to load the SHARE program that comes with DOS. Most other
-      networks also require that you use the SHARE program that is included
-      with DOS.
-
-<b><i>*** IMPORTANT ***</i></b>
-
-Do not give ANY of the files associated with Synchronet a sharable file
-attribute. Synchronet uses file and record locking to handle multiple
-simultaneous file access requests and maintain data integrity. &quot;Flagging&quot;
-a file &quot;sharable&quot; overrides these locking methods and will cause Synchronet
-to corrupt your data in a multinode system.</pre>
-<p><a href="#top"><b>Back to Top</b></a></p>
-
-<!--webbot bot="Include" U-Include="_borders/bottom.htm" TAG="BODY" startspan -->
-
-<hr>
-<p><b><a href="http://www.synchro.net/copyright.html">Copyright</a> � 2000 by </b> <a href="http://www.synchro.net/author.htm"><b>Rob Swindell</b><br>
-</a>
-
-<a href="http://www.synchro.net"><font size="2"><br>
-Synchronet BBS Software</font></a>  <font size="2">  (Synchronet)
-Version 3 is comprised of several documentation,<br>
-library, executable, and <a href="http://www.synchro.net/source.html">source code</a> 
-files, all of which are covered by the<a href="http://www.fsf.org/copyleft/gpl.html">
-<br>
-GNU General Public License</a>  with the exception of the following portions
-covered by<br>
-the <a href="http://www.fsf.org/copyleft/lesser.html">GNU Lesser General Public License</a>:
-SMBLIB and XSDK.<br>
-<br>
-Synchronet Version 2 (for DOS and OS/2) and its source code was released to the<a href="http://www.fsf.org/philosophy/categories.html#PublicDomainSoftware">
-<br>
-Public Domain</a>  by <a href="ftp://vert.synchro.net/main/sbbs/manifest.txt">Digital Dynamics</a> 
-in 1997 and remains Public Domain software today.<br>
-Synchronet Version 3 is not Public Domain software.</font></p>
-<p align="left"><font size="2"><a href="http://www.synchro.net/author.html">Rob Swindell<br>
-</a>PO Box 501<br>Yorba Linda, CA 92885<a href="http://www.synchro.net"><br>
-http://www.synchro.net</a>
-
-</font></p>
-<p align="left"><font size="2">For the complete Copyright Information please
-read the <a href="http://www.synchro.net/copyright.html">Copyright Documentation</a>
-.</font></p>
-
-<!--webbot bot="Include" endspan i-checksum="55766" -->
-
-</body>
-
-</html>
diff --git a/docs/networking.html b/docs/networking.html
deleted file mode 100644
index b2deafc4e3..0000000000
--- a/docs/networking.html
+++ /dev/null
@@ -1,753 +0,0 @@
-
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<title>Networking</title>
-</head>
-
-<body>
-<!--webbot bot="Include" U-Include="_borders/top.htm" TAG="BODY" startspan -->
-
-<a href="http://www.synchro.net"><img border="0" src="images/synclogo_fancyred.gif" alt="Synchronet BBS - Multinode Bulletin Board Software" width="626" height="86"></a>
-
-<hr>
-
-<!--webbot bot="Include" endspan i-checksum="23126" -->
-
-<p><a name="top"></a><a href="sysop.html#TOC">Back to Table of Contents</a></p>
-<h2><a name="Networking">[9.0] - Networking</a></h2>
-<pre>Selecting the Networks option from the SCFG will produce a list of available
-network technologies.
-
-<img border="0" src="images/scfg_networks.gif" width="572" height="331">
-
-Select the network technology of your interest and refer to the following
-section that pertains to your selected network technology.</pre>
-<h3><a name="QWKPacketNetworking">[9.1] - QWK Packet Networking</a></h3>
-<pre>Let's start with some basic definitions. A QWK netted BBS is either a node,
-a hub, or both. A node is a BBS that calls another QWK net hub to transfer
-packets (receiving QWK and sending REP). A hub is a system that receives calls
-from other nodes and transfers packets (sending QWK and receiving REP).
-
-There are two options from the QWK Packet Networks menu, Network Hubs and
-Default Tagline. Selecting the Default Tagline will allow you to create or
-edit the tagline that will be used for messages that are sent out on the
-network from your QWK netted sub-boards. Individual sub-boards can have a
-different tagline to override this one, or use no tagline at all. Ctrl-A codes
-can be used in taglines so that other Synchronet systems will see the tagline
-in your preferred color scheme. The beginning of the tagline is not
-configurable. It consists of a tear line and the Synchronet product name:
----
- � Synchronet �
-
-The configured tagline text will be attached to the end of the above tagline.</pre>
-<h3><a name="NetworkHubs">[9.1.1] - Network Hubs</a></h3>
-<pre>Selecting this option produces a list of configured hubs that your system
-calls to upload REP packets to and download QWK packets from. If a system
-calls your system for messages, it is a node and your system is the hub and you
-should not have that system listed as a hub. If you do not call any systems
-for networked messages, then your system is a hub and the only configuration
-you need to do is set your taglines and the network options for each of your
-netted sub-boards. Use INS to add hubs and DEL to delete hubs from this hub
-list.</pre>
-<pre><img border="0" src="images/scfg_networks_qwkhubs.gif" width="572" height="331">
-
-Selecting a hub from the list of available hubs will produce a sub-menu:
-
-<img border="0" src="images/scfg_networks_qwkhubs_vert.gif" width="572" height="331">
-
-<b>Hub System ID:
-</b>	This is the QWK system ID of the hub BBS.
-
-<b>Pack Command Line:
-</b>        This is the command line to execute to pack messages.
-
-<b>Unpack Command Line:
-</b>        This is the command line to execute to unpack messages.
-
-<b>Call-out Command Line:
-</b>	This is the command line to execute to perform the call-out.
-
-<b>Call-out Node:
-</b>        This is the number of the node which should perform the call-out.
-
-<b>Call-out Days:
-</b>        These are the days to perform the call-out.
-
-<b>Call-out Time/Frequency:
-</b>        This is either the specific time to call-out, or the number of times
-        per day to call-out.</pre>
-<h3><a name="NetworkedSub-boards">[9.1.2] - Networked Sub-boards</a></h3>
-<pre>Selecting this option will give a sub-menu containing a list of networked
-sub-boards that will look something like this:</pre>
-<pre><img border="0" src="images/scfg_networks_qwkhubs_vert_subs.gif" width="572" height="331">
-
-For each sub-board the following options are available:
-
-<img border="0" src="images/scfg_networks_qwkhubs_vert_subs_opt.gif" width="572" height="331">
-
-<b>Sub-board:
-</b>        Which sub-board is to be networked (Group and Sub-board name).
-
-<b>Conference Number:
-</b>        This is the conference number of the sub-board on the HUB system.
-	If the hub is a Synchronet version 2 BBS and the sub-board is the
-	second sub-board in the first group, the conference number is 1002; if
-	the sub-board is the first sub-board in the third group, the conference
-	number is 3001, etc. The conference numbering scheme for BBS programs
-	other than Synchronet is usually just 1, 2, 3, etc.
-
-<b>Ctrl-A Codes:
-</b>        This option allows you to determine how to handle Ctrl-A codes in
-        messages. If the hub is a Synchronet BBS, you will want to set this
-        to &quot;Leave in&quot;. If the hub is not a Synchronet BBS, you will almost
-        always want to set this to &quot;Strip out&quot;. If the hub is not a Synchronet
-        BBS, but allows ANSI escape sequences in messages, set this option
-        to &quot;Expand to ANSI&quot;.</pre>
-<h3><a name="ConfiguringQWKNode">[9.1.3] - Configuring Your BBS as a
-QWK Node</a></h3>
-<pre>In the SCFG program, you'll need to specify your system's tagline (usually
-the system name and phone number), the hubs to call, when to call, what node
-will do the calling, and which sub-boards to carry for each hub (a sub-board
-can send and receive messages from more than one hub!).
-
-The hub's System ID is important and must match the System ID of the hub BBS.
-For each hub, you can specify a list of sub-boards to network. For each
-sub-board, you must also set the conference number for the sub-board on the
-hub BBS. In Synchronet, conference numbers are based on the Group/Sub-board
-relationship. Group 1 / Sub 1 is conference number 1001, Group 2 / Sub 3 is
-conference 2003, etc. (Note: this is NOT the conference number for the sub-board
-on your BBS. It is the conference number on the hub BBS.) Also, for each
-sub-board you must set the method of Ctrl-A code handling. If the hub system is
-a Synchronet BBS, you'll want to leave Ctrl-A codes in. If it is not, you'll
-probably want to strip them.
-
-You'll need to decide which node will do the calling-out and configure it so.
-You'll also need to decide if you want your BBS to call-out multiple times
-per day at any given time based on a total number of calls per day (usually,
-if all your hubs are local) or if you wish the BBS to call-out at a specific
-time every day (usually if one or more hubs are long distance).
-
-You also need to set the command line to execute to perform the call-out.
-If your hub is a Synchronet BBS, use the included QNET module (*QNET),
-otherwise you probably use a batch file to execute a scripted terminal program.
-Example scripts for Telix, Robocomm, and Qmodem are included in the EXEC
-directory (SBBSQNET.*).</pre>
-<h3><a name="ConfiguringQWKHub">[9.1.4] - Configuring Your BBS
-as a QWK Network Hub</a></h3>
-<pre>Being a QWK network hub, just means that other QWK network compatible systems
-are going to logon to your system and upload and download messages. All you
-have to do is create a user account for each QWK network node that is going
-to call your system. The user name/alias should be the QWK system ID of the
-node BBS. The account needs to have the 'Q' restriction.
-
-The 'Q' restriction is used only for QWK network node accounts. An account
-with this restriction will receive the QWK: prompt immediately upon logon
-and can't access any other facility of the BBS. This restriction also allows
-that account to send messages that are from other users as well as receive
-private posts that are to other users.
-
-In addition to the 'Q' restriction, the 'L' (logons per day) and 'T' (time
-per day) exemptions may be helpful, depending on how many times the node will
-call your system a day and the time per call/day and logons per day allowed by
-the level you've given the account.
-
-Be sure to give all node accounts sufficient access to read and write messages
-on the sub-boards networked between the node and your BBS.</pre>
-<h2><a name="TransferringFilesThroughQWK">[9.2] - Transferring Files
-Through QWK Network</a></h2>
-<pre>Synchronet allows the transferring of files between a QWK network node and hub
-with great simplicity. If you wish to send a file to a QWK network hub (your
-system calls directly) or QWK network node (their system calls yours directly),
-create a DOS subdirectory of DATA\QNET\QWKID.OUT, where QWKID is the QWK ID of
-the system to which you are sending the file. Copy any files you wish to send
-to this system into this directory. The next time the systems network with
-each other, the files will be sent.
-
-If your system is a QWK network node, you may request a file from your hub
-by posting a private message to SBBS on any of the networked sub-boards you
-get from your hub. The title of the message must contain &quot;FREQ FILENAME.EXT&quot;
-where FILENAME.EXT is the filename and extension of the file to download.
-
-When files are received through a QWK network, the sysop is notified of the
-received file upon next logon. The file will be automatically placed in the
-subdirectory DATA\QNET\QWKID.IN, where QWKID is the QWK ID of the system
-that sent the file.
-
-The transferring of files can be made automated for other programs to share
-data over the network. One popular use for this is Online Games that support
-inter-BBS play. One such game is Barren Realms Elite (BRE), see the external
-programs section for more information on this.</pre>
-<h2><a name="PostLinkNetworking">[9.3] - PostLink Networking</a></h2>
-<pre>PostLink is a message networking program written by Kip Compton and available
-for purchase from Bonnie Anthony (see Contacts Appendix). It is a derivation
-from PCRelay software. RelayNet (AKA RIME), headed by Bonnie Anthony, ILink
-and a few other networks use this technology. Selecting this option from the
-networks menu will bring up the following sub-menu:</pre>
-<pre><img border="0" src="images/scfg_networks_post.gif" width="572" height="331">
-
-<b>Site Name:
-</b>	This is the site name to be used for your BBS.
-
-<b>Site Number:
-</b>	This is the site number which is assigned to you by the network
-	coordinator.
-
-Selecting Network Hubs from this menu will display a list of available hubs.
-Hubs can be added and/or removed from this menu.</pre>
-<pre><img border="0" src="images/scfg_networks_post_hubs.gif" width="572" height="331">
-
-Selecting one of the available network hubs from this list will allow you to
-configure the call-out information for that hub.</pre>
-<pre><img border="0" src="images/scfg_networks_post_hubs_sccm.gif" width="572" height="331">
-
-<b>Hub Site Name:
-</b>	This is the name of your network hub.
-
-<b>Call-out Command Line:
-</b>	This is the command line which will be executed to perform the call-out
-	for this hub.
-
-<b>Call-out Node:
-</b>	This is the number of the node which will perform the call-out for this
-	hub.
-
-<b>Call-out Days:
-</b>	This allows you to select the days on which call-outs to this hub will
-	occur.
-
-<b>Call-out Time:
-</b>	This allows you to select the time when call-outs to this hub will
-	occur.
-
-Synchronet supports PostLink by letting the sysop configure the call-out
-schedule and which node will perform the call-out. Multiple PostLink networks
-are supported simultaneously by specifying multiple hubs. The Site ID entered
-in SCFG is only used for documentary purposes. Synchronet includes a UTI
-(Universal Text Interface) driver for PostLink. It is a set of 6 programs
-(UTI*.EXE) included in your EXEC directory. See the Utility Reference for
-more information on the Synchronet UTI Driver.
-
-Be sure to set the &quot;PostLink Networked&quot; Network Option to 'Yes' for each of
-your PostLink networked sub-boards.</pre>
-<h2><a name="FidoNetNetworking">[9.4] - FidoNet Networking</a>
-</h2>
-<pre>FidoNet is both a network technology (referred to as FTN) and an actual message
-network. The technology was developed specifically for FidoNet, but is used
-by many other networks today as well. These non-FidoNet networks are referred
-to as FTNs (FidoNet Technology Networks) because they share the same
-technology, but don't necessarily have anything more in common with FidoNet.
-
-Setting up a FidoNet is likely the most complex task a sysop could attempt.
-There are many steps associated with joining a FidoNet and most of the steps
-involve new terminology to even the most experienced sysop.
-
-The first step is to find a FidoNet Front-end mailer program. This program
-will need to be run to make and accept FidoNet mail calls. It is usually run
-24 hours a day, but is usually only required during a certain period (called
-Mail Hour and defined by the individual networks). The most popular of these
-programs are FrontDoor, D'bridge, InterMail, and Binkley. Both FrontDoor and
-Binkley will require the use of a FOSSIL (serial communications) driver as
-well. The most popular FOSSIL drivers are BNU and X00 (many DOORs require
-FOSSIL drivers as well).
-
-When running Synchronet from the Front-end, you will need to pass the current
-connect rate, tell Synchronet to quit after the call, and possibly pass the
-minutes till the next event.
-
-Example: SBBS Q C14400 E60
-
-The above command line tells Synchronet that someone is currently connected
-(at 14400bps), to quit back to DOS after the caller logs off, and that the
-next scheduled event is in 60 minutes. See Appendix B for all the available
-switches for running Synchronet.
-
-SBBSecho is an included Synchronet utility (registered separately) to
-import/export NetMail and EchoMail bundles/packets.
-
-NetMail will be exported to and imported from the directory specified in the
-Networks configuration in SCFG. EchoMail will be imported to and exported from
-the EchoMail path specified for that sub-board, or off the base EchoMail
-directory specified in SCFG Network options in a subdirectory named after the
-internal code of the sub-board.</pre>
-<h3><a name="FidoNetUsingSBBSECHOandInterMail">[9.4.1] - Step-by-Step
-instructions for setting up FidoNet using SBBSecho and InterMail</a>&nbsp;<b><i><font color="#FF0000">
-(v2 Only)</font></i></b>
-</h3>
-<pre>One of the most difficult tasks that the novice sysop will encounter is the
-setting up of FidoNet.	These instructions will take you step by step through
-the process of setting up FidoNet on your BBS.	Be warned that these steps are
-very basic, just enough to get FidoNet up and running on your system, but it
-may still be necessary for you to refer to the documentation which accompanies
-the programs referred to in these steps.  For any advanced operations you will
-definitely need to refer to the documentation of programs referred to in these
-steps.	If you know of anyone who is already on FidoNet that is willing to help
-you out, by all means ask them for their help!
-
-NOTE that while it doesn't cost anything to have a node number (for sending
-and receiving netmail) or to receive local conferences, there is usually a
-nominal fee (called &quot;cost recovery&quot;) to receive conferences from the FidoNet
-backbone or files from the FidoNet filebone.
-
- 1) First of all you will need to obtain a copy of FidoNet's Policy 4 document
-    (the filename is usually POLICY4.ZIP or POLICY4.TXT), a recent nodelist
-    (usually named NODELIST.???), AND a front-end mailer program.  All three of
-    these can normally be downloaded from any local BBS which carries FidoNet
-    (if not, an e-mail to the sysop of a FidoNet BBS can usually point you in
-    the right direction).  There are several front-end mailers available such
-    as FrontDoor, InterMail, D'Bridge, SEAdog, Dutchie, BinkleyTerm, and Portal
-    of Power to name a few (the latter two are referred to as &quot;FLO-Style&quot;
-    mailers and the others are referred to as &quot;Attach-Style&quot; mailers).  Most
-    front-end mailers offer a limited evaluation version which you can try out
-    before you decide to purchase the program.
-
- 2) Read the Policy 4 document, it will give you information about FidoNet as
-    well as some specifics on how to obtain a node number for your system.
-
- 3) If you do not plan to run InterMail (or FrontDoor which is very similar)
-    you must set up the front-end mailer you plan to use by following the
-    directions which accompany the program and then skip to step number 9.
-    The documentation will also tell you how to &quot;compile&quot; the nodelist file
-    you've downloaded so that your front-end mailer can use it.  Use the
-    temporary address specified in Policy 4 when specifying your node address
-    in the front-end mailer.
-</pre>
-<pre><b>Setting up InterMail v2.xx or FrontDoor v2.xx</b>
-
- 4) Install InterMail per IM.DOC (included with InterMail).
-
-    a) If using FrontDoor, follow the FD.DOC file and substitute the letters FD
-       where ever you see an IM in this section.
-
- 5) Copy the MAILER.BAT included with SBBSecho and the EXEBBS.BAT from the
-    Synchronet DOCS directory into the InterMail directory (C:\IM).
-
- 6) Change into the InterMail directory, run IMSETUP, and perform the
-    following:
-
-    a) Under Global-&gt;Address-&gt;Main, enter your FidoNet address (or the
-       temporary address specified in Policy 4 until such time as you have
-       received your own address).
-
-    b) Under Global-&gt;Filenames, verify that the paths are set similar to the
-       following:
-
-  ������������������������������������������������������� Filenames and paths �
-  �									      �
-  � System    C:\IM\SYSTEM\	  (or C:\FD\ for FrontDoor)		      �
-  � Netmail   C:\IM\MAIL\						      �
-  � Files     C:\IM\INBOUND\						      �
-  � Sec Files C:\IM\INBOUND\						      �
-  �*Packets   C:\IM\PACKETS\						      �
-  �*Log file  C:\IM\IM.LOG						      �
-  � Banner								      �
-  � Nodelist  C:\IM\NODELIST\						      �
-  � In-event								      �
-  � Hudsonfmt								      �
-  � Wildcat!								      �
-  � Swapping  C:\IM\							      �
-  � Semaphore C:\IM\							      �
-  �									      �
-  � * = Must be unique for each Mail Server				      �
-  ���������������������������������������������������������������������������ͼ
-
-    c) Under Modem-&gt;Advanced Setup-&gt;Connect Strings set ALL &quot;BBSexit&quot; levels
-       to 100.	(For FrontDoor under Mailer-&gt;Errorlevels set all baud rates to
-       100, Received Mail to 50, and Create .BAT file to Yes).
-
-    d) Under Manager-&gt;Events, make sure all your events are set to exit when
-       mail is received (under Event Behavior). This allows for the immediate
-       importation of new messages into the BBS.
-
-    e) Under Manager-&gt;Events, add the following event:
-
-  ���������������������������������������������������������������������� Edit �
-  � Tag 	X							      �
-  � Days	-------A						      �
-  � Modifier	Ignore eventbase (*)					      �
-  � Start time	04:30							      �
-  � Length	00:01							      �
-  � Errorlevel	75							      �
-  � Not used								      �
-  � Behavior								      �
-  � Use alias	1:103/705						      �
-  � Retry delay 0							      �
-  � Comment	Synchronet exclusive event				      �
-  ���������������������������������������������������������������������������ĺ
-  � Event tag A..YZ - eXternal event, errorlevel is required		      �
-  ���������������������������������������������������������������������������ͼ
-
-    f) Under Mailer-&gt;Misc, set &quot;Trigger exit upon receipt of netmail&quot; and
-       &quot;Upon receipt of ANY file&quot; to Yes. This will allow for the immediate
-       importation of NetMail and any File Distribution Echoes you may carry.
-
-    g) Under Modem-&gt;Hardware, set &quot;Lower DTR when busy&quot; to &quot;No&quot;.
-
-    h) Under Modem-&gt;Command strings, set the &quot;Down&quot; string to &quot;ATM0H1|&quot;.
-
-    i) Exit IMSETUP.
-
- 7) Unarc the nodelist file (NODELIST.???) that you downloaded previously
-    into your nodelist directory.
-
- 8) Now run IMNC to compile the nodelist.
-
-
-<b>Setting up FidoNet in SCFG</b>
-
- 9) Run SCFG from one of your node directories, or hit 'C' from the waiting for
-    caller screen.  Then select Networks-&gt;FidoNet EchoMail and NetMail.
-    You'll then be brought to a menu that should be set up similar to this:</pre>
-<blockquote>
-<pre><img border="0" src="images/scfg_networks_fido.gif" width="572" height="331">
-
-    a) For FrontDoor the NetMail Semaphore file should be set to
-       C:\FD\FDRESCAN.NOW and the EchoMail Semaphore file should be set
-       to C:\FD\FDEXIT.025.
-
-    b) For FrontDoor version 2.11, the EchoMail Semaphore file should be
-       set to C:\FD\FDXIT.025.
-
-    c) For FrontDoor version 2.20 (commercial, multinode), the EchoMail
-       Semaphore file should be set to C:\FD\FDXIT#.025, where # is the
-       node number (0 based).
-
-10) Set your address to your system's FidoNet address (or the temporary address
-    specified in Policy 4 until such time as you have received your own
-    address).  This is the address used for sending and receiving NetMail. It
-    will also be used as the default address for message sub-boards.
-
-11) Create an origin line for your system that most likely contains your BBS
-    name and phone number.
-
-12) Following is an overview of the remaining options available on this menu:
-
-<b>    a) System Addresses:
-</b>       This option will bring you to a sub-menu to allow you to configure
-       different addresses (AKAs) for your system. Following is an example
-       for a BBS configured for two fido type networks.</pre>
-<pre><img border="0" src="images/scfg_networks_fido_address.gif" width="572" height="331">    </pre>
-  <blockquote>
-<pre><b>    b) Default Outbound Address:
-</b>       When a user sends netmail, this is the 'send to' address that is used
-       as a default (useful for FidoNet&lt;-&gt;Internet gateways).
-
-<b>    c) NetMail Semaphore:
-</b>       This is the name of the trigger file which will cause your front-end
-       mailer to exit and scan for outgoing netmail.
-
-<b>    d) EchoMail Semaphore:
-</b>       This is the name of the trigger file which will cause your front-end
-       mailer to exit and scan for outgoing echomail.
-
-<b>    e) Inbound File Directory:
-</b>       This is the name of the directory where your front-end mailer stores
-       incoming files.
-
-<b>    f) EchoMail Base Directory:
-</b>       This is the base directory for your echomail subdirectories
-
-<b>    g) NetMail Directory:
-</b>       This is the name of the directory where your front-end mailer looks for
-       and places netmail.
-
-<b>    h) Allow Sending of NetMail:
-</b>       When set to 'Yes' users can send netmail from your system.
-
-<b>    i) Allow File Attachments:
-</b>       When set to 'Yes' users can send netmail file attachments from your
-       system.
-
-<b>    j) Send NetMail Using Alias:
-</b>       When set to 'Yes' the user alias will be used (rather than their
-       real name) on outgoing netmail.
-
-<b>    k) NetMail Defaults to Crash:
-</b>       If set to 'Yes' netmail sent from your system will default to crash
-       status (send immediately and directly).
-
-<b>    l) NetMail Defaults to Direct:
-</b>       If set to 'Yes' netmail sent from your system will default to direct
-       status (send directly).
-
-<b>    m) NetMail Defaults to Hold:
-</b>       If set to 'Yes', netmail sent from your system will default to hold
-       status.
-
-<b>    n) Kill NetMail After Sent:
-</b>       Setting this to 'Yes' will delete outgoing netmail after it has been
-       sent.
-
-<b>    o) Cost to Send NetMail:
-</b>       This is the cost (in credits) that a user will be charged when sending
-       netmail.
-
-13) Setup SBBSecho by running the ECHOCFG program and reading the documentation
-    for information on the available options.
-
-    a) Under Paths...-&gt;Outbound Directory be sure to enter the path where
-       outgoing mail packets and bundles should be placed (i.e.: C:\IM\OUTBOUND).
-
-    b) Select the appropriate Mailer Type.
-
-    c) Enter your registration number (if you are a registered owner of the
-       SBBSecho program).
-
-14) Once you have done this you must now run the file MAILER.BAT (if using an
-    Attach-Style mailer) to use Synchronet with your front-end mailer.
-    MAILER.BAT must be run from your front-end mailer's directory (e.g. C:\IM).
-    You will no longer run the file SBBS.BAT to start this node (if you run a
-    multi-node system, you will still use SBBS.BAT to start those nodes which
-    are not using a front-end mailer).
-
-    a) If you are NOT using InterMail as your front-end mailer, be sure to
-       modify your MAILER.BAT file to reflect the front-end mailer that you
-       are using.
-
-15) Follow the instructions given in the Policy 4 document to determine who
-    you should send netmail to in order to obtain your own node number.
-
-16) Now, from your front end mailer, send a netmail to this person following
-    the instructions contained in the Policy 4 document.  Once you have done
-    this and the netmail has been sent, you should patiently await a netmail
-    reply containing your node number and the node number of your hub (where
-    you will send/receive your echomail and netmail to/from).
-
-17) Once you have received your node number, you'll want to replace the
-    temporary node number you used in your front-end mailer as well as in
-    SCFG-&gt;Networks-&gt;FidoNet Echomail and Netmail-&gt;System Addresses to it.
-
-18) Send your hub a message with the Area Manager (for the backbone &lt;echomail&gt;)
-    and Areafix (for the filebone &lt;files&gt;) passwords you wish to use on their
-    systems.  You will need to remember these passwords as you will be using
-    them to do remote maintenance (such as adding and removing conferences and
-    file areas that you wish to receive).
-
-19) Your hub should respond with Area Manager instructions and a list of areas
-    available for you to connect to.  If not, contact your hub for more
-    information.
-
-20) Look through the list of areas available to you and determine which
-    conferences you'd like to carry.  In SCFG-&gt;Message Areas create a
-    message group(s) for the conferences you'd like to carry.  When setting
-    up a sub-board for a conference, be sure to use the &quot;Area Tag&quot; name
-    given in the area list as the sub-board Short Name.
-
-    a) Under Network Options... for each sub-board toggle the FidoNet
-       Echomail option toggled to YES.
-
-    b) If the conference requires a different address, configure the address
-       under Network Options...
-
-    c) If you allow aliases on your system, under Toggle Options... set Use
-       Real Names to YES.
-
-    d) If you are unfamiliar with adding message groups and/or sub-boards,
-       consult that section of the Synchronet System Operator's Manual.
-
-    e) For a more complete list of conferences available on the FidoNet
-       backbone you may wish to download the file FIDONET.NA from either your
-       hub or a local FidoNet BBS.  This file contains a list of ALL
-       conferences carried on the backbone.
-
-21) Once you have set up all of the conferences you'd like to carry, you'll
-    need to go to SCFG-&gt;Message Areas-&gt;&lt;group&gt;-&gt;Export Areas...-&gt;AREAS.BBS
-    (SBBSecho) to create an AREAS.BBS file for SBBSecho to use.
-
-22) Now following the Area Manager instructions, send a message to your hub's
-    Area Manager and turn on all of the conferences you wish to carry.	Note
-    that there are some administrative conferences for FidoNet that your
-    users shouldn't be able to read or post on, and some that even you
-    shouldn't post on, there is also usually a &quot;test&quot; conference which you may
-    want to set up to post messages on and insure that echomail is being sent
-    and received properly.
-
-23) That's about all there is to it.  You are now set up on FidoNet and should
-    be able to send and receive FidoNet echomail and netmail.
-
-
-<b>Examples for Receiving File Echoes via TICK (third party file echo program)</b>
-
-Example TIC.CFG:
-
----------------------------------[ Begin ]-------------------------------------
-IN c:\fd\file
-ZONE 1 c:\fd\-mailout
-NET 2
-NODE 3
-HOLD c:\fd\tickhold
-QDIR c:\fd\tickqdir
-FDLog
-
-AREA j:\fido\backbone BACKBONE
-1:2/1 xxxxx *
-
-AREA j:\fido\SOFTDIST SOFTDIST
-1:2/1 xxxxx *
----------------------------------[  End  ]-------------------------------------
-
-In MAILER.BAT, at the end of the &quot;:inmail&quot; block, before &quot;goto top&quot;:
-
----------------------------------[ Begin ]-------------------------------------
-set tz=PST8EDT
-tick &gt;&gt; fd.log
-set tz= 
-%sbbs%\exec\addfiles * /diz
----------------------------------[  End  ]-------------------------------------
-
-
-<b>Setting up ALLFIX (third party file echo program) with Synchronet BBS Software<u>
-</u></b>
-In ASETUP-&gt;System data-&gt;Global Options:
-
-������������������������������������������������������������� Global options �
-�									     �
-� Keep original file date Yes		  Replace extension	  No	     �
-� Mailer rescan 	  FrontDoor	  Max age of requests	  0	     �
-� Log style		  FrontDoor	  Keep exported messages  No	     �
-� Mailer mode		  FrontDoor	  Days to keep on hold	  30	     �
-� Download counters			  Size of stat file	  0	     �
-� Update DESCRIPT.ION	  No		  Max TIC archive size	  0	     �
-� Date format		  mm-dd-yy	  Max size to pack	  0	     �
-� Min HD space to import  1024		  UTC offset		  -8	     �
-� Process local requests  No		  Max Msg size		  0	     �
-� MSG compatibility	  Fido						     �
-� Dupe checking 	  Filename					     �
-�									     �
-����������������������������������������������������������������������������ij
-�									     �
-� LongDesc character			  One line LongDesc	  No	     �
-� Filter LongDesc	  No		  Max len of LongDesc	  0	     �
-� Spaces to indent	  1		  Add tag to desc	  No	     �
-�									     �
-����������������������������������������������������������������������������;
-
-Edit your MAILER.BAT:
-
-Search for &quot;set sbbs=&quot;
-Add &quot;set allfix=c:\allfix&quot;
-
-Search for &quot;:inmail&quot;
-Add &quot;%allfix%\allfix file mgr&quot;
-Add &quot;%sbbs%\exec\addfiles * /diz&quot;
-
-Search for &quot;:outmail&quot;
-Add &quot;%allfix%\allfix file&quot;</pre>
-<h3><a name="SendingFidoNetNetMail">[9.5.2] - Sending FidoNet NetMail</a></h3>
-<pre>Once you have a FidoNet address and have your Front-end mailer functioning
-properly, you may send NetMail messages and allow, if you wish, your users
-to send NetMail. You can set a NetMail cost in credits for users in SCFG-&gt;
-Networks-&gt;FidoNet EchoMail and NetMail-&gt;NetMail Cost. Sysops and users with
-the 'S' exemption will not be charged credits when sending NetMail. Users
-with the 'M' restriction are not allowed to send NetMail. Users will not
-be allowed to send NetMail at all, if the sysop has set SCFG-&gt;Networks-&gt;FidoNet
-EchoMail and NetMail-&gt;Allow Sending of NetMail to No.
-
-Users can optionally set a NetMail forwarding address for their account using
-the &quot;Account Defaults&quot; menu. If the user has a NetMail address specified,
-any E-mail set to that account will be automatically forwarded to the NetMail
-address if the sending user wishes. This is useful for users who can receive
-FidoNet NetMail on a &quot;home&quot; BBS system and prefer to receive their E-mail there
-instead of on this particular system.
-
-Sysops and users with the 'F' exemption can also perform other special
-functions with NetMail. If NetMail Defaults to Crash status is OFF, sysops
-and 'F' exempted users can override this by starting their NetMail title
-with &quot;CR:&quot; setting the Crash status ON for that NetMail message.
-
-Sysops and 'F' exempted users may also send File Requests by starting the title
-with &quot;FR:&quot; and then the filename(s) being requested follow on the title. If
-multiple filenames are requested, they must be separated by a space.
-Example: &quot;FR: FILE1.EXT FILE2.EXT&quot;.
-
-Sysops and 'F' exempted users may also send File Attachments from anywhere
-on the system (potentially dangerous) by starting the title with &quot;FA:&quot; and then
-the filename(s) to attach to the netmail message. This allows the sysop to
-send a file attachment to multiple users without creating multiple copies of
-the attachment or requiring the attachment to be copied into the Synchronet
-DATA\FILE\xxxx.OUT directory of the sending user. Since the sending user
-(sysop or 'F' exempt) can attach ANY file on the system, the 'F' exemption
-and sysop security level (90+) should given out with extreme caution.
-
-Sysops and 'F' exempted users can also request a return receipt by starting
-the title with &quot;RR:&quot;. &quot;CR:&quot;, &quot;FR:&quot;, &quot;RR:&quot;, and &quot;FA:&quot; may be used in combination
-with one another, but must be specified in that order.
-Example: &quot;CR: RR: This is my title&quot;.
-
-The &quot;xx:&quot; specifiers and an optional trailing space are eliminated from
-the final title for the NetMail message.
-Example: &quot;CR:Hello&quot; or &quot;CR: Hello&quot;
-Becomes: &quot;Hello&quot; before it is sent out by Synchronet.</pre>
-  </blockquote>
-</blockquote>
-<h2>    <a name="InternetNetworking">[9.5] - Internet Networking</a></h2>
-<pre><img border="0" src="images/scfg_networks_internet.gif" width="572" height="331">
-
-<b>System Address:
-</b>	This is the Internet address for your BBS.
-
-<b>NetMail Semaphore:
-</b>	This is the name of the trigger file which will cause your Internet
-	mail program to exit and scan for outgoing netmail.
-
-<b>Allow Sending of NetMail:
-</b>	When set to 'Yes' users can send Internet netmail from your system.
-
-<b>Allow File Attachments:
-</b>	When set to 'Yes' users can attach files to the Internet netmail that
-	they are sending.
-
-<b>Send NetMail Using Alias:
-</b>	When set to 'Yes' the user alias will be used (rather than their
-	real name) on outgoing Internet netmail.
-
-<b>Cost to Send NetMail:
-</b>	This is the cost (in credits) that a user will be charged when sending
-	Internet netmail.
-</pre>
-<pre><b><i><font color="#FF0000">(v2 Only)</font></i></b>
-In order for your BBS to support Internet networking (including such things as
-sending/receiving Internet netmail and newsgroups, FTP, Telnet, etc.) it is
-required that you obtain a third party program such as NetXpress or BBSNet.  It
-is also possible (but not recommended) to use a Fido-&gt;Internet or a
-QWK-&gt;Internet gateway (usually available as shareware software).</pre>
-<p><a href="#top"><b>Back to Top</b></a></p>
-<!--webbot bot="Include" U-Include="_borders/bottom.htm" TAG="BODY" startspan -->
-
-<hr>
-<p><b><a href="http://www.synchro.net/copyright.html">Copyright</a> � 2000 by </b> <a href="http://www.synchro.net/author.htm"><b>Rob Swindell</b><br>
-</a>
-
-<a href="http://www.synchro.net"><font size="2"><br>
-Synchronet BBS Software</font></a>  <font size="2">  (Synchronet)
-Version 3 is comprised of several documentation,<br>
-library, executable, and <a href="http://www.synchro.net/source.html">source code</a> 
-files, all of which are covered by the<a href="http://www.fsf.org/copyleft/gpl.html">
-<br>
-GNU General Public License</a>  with the exception of the following portions
-covered by<br>
-the <a href="http://www.fsf.org/copyleft/lesser.html">GNU Lesser General Public License</a>:
-SMBLIB and XSDK.<br>
-<br>
-Synchronet Version 2 (for DOS and OS/2) and its source code was released to the<a href="http://www.fsf.org/philosophy/categories.html#PublicDomainSoftware">
-<br>
-Public Domain</a>  by <a href="ftp://vert.synchro.net/main/sbbs/manifest.txt">Digital Dynamics</a> 
-in 1997 and remains Public Domain software today.<br>
-Synchronet Version 3 is not Public Domain software.</font></p>
-<p align="left"><font size="2"><a href="http://www.synchro.net/author.html">Rob Swindell<br>
-</a>PO Box 501<br>Yorba Linda, CA 92885<a href="http://www.synchro.net"><br>
-http://www.synchro.net</a>
-
-</font></p>
-<p align="left"><font size="2">For the complete Copyright Information please
-read the <a href="http://www.synchro.net/copyright.html">Copyright Documentation</a>
-.</font></p>
-
-<!--webbot bot="Include" endspan i-checksum="55766" -->
-
-</body>
-
-</html>
diff --git a/docs/ntreadme.txt b/docs/ntreadme.txt
deleted file mode 100644
index 3a98660fc3..0000000000
--- a/docs/ntreadme.txt
+++ /dev/null
@@ -1,47 +0,0 @@
-Synchronet v3.0 Windows NT/2000 Instructions
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Rob Swindell
-www.synchro.net
-
-Note
-~~~~
-Windows 2000 is actually Windows NT 5 (renamed for marketing reasons), not
-to be confused with Windows Millennium Edition (the successor to Windows 98).
-
-Issues
-~~~~~~
-1. Your C:\WINNT\SYSTEM32\CONFIG.NT file should NOT include Microsoft's 
-   ANSI.SYS if you want DOS I/O Interception to function properly (required 
-   for 16-bit XSDK/WWIV programs, DOS shell, viewing zip files, etc.). 
-
-2. Add C:\SBBS\EXEC\SVDMANSI to the end of your C:\WINNT\SYSTEM32\AUTOEXEC.NT
-   to use the Synchronet Virtual DOS Machine ANSI driver (originally created
-   as a replacement for OS/2's ANSI driver, but it functions as an ANSI.SYS 
-   replacement for Windows NT/2000 just as well - thanks again Steve!).
-   
-3. At this time, only the output of 16-bit DOS programs can be intercepted, 
-   so the output of internal NT commands and executables (dir, copy, rename, 
-   more, etc) won't be intercepted for the remote sysop. This is a very 
-   unfortunate problem (that does not exist on Windows 95/98) and I'm still 
-   trying to find a solution. In the mean-time, the remote DOS shell is of 
-   only limited usefulness. Perhaps a third-party command shell (e.g. 4DOS) 
-   or console/ANSI driver will solve this problem (this is potentially related 
-   to issue #1). Any feedback on this issue is appreciated.
-
-4. If you need more conventional memory for your external DOS programs and 
-   do not need DPMI support, remove (or REM-out) the DOSX line of your 
-   C:\WINNT\SYSTEM32\AUTOEXEC.NT. This will give you about 40K additional 
-   conventional memory for your external DOS programs.
-
-
-Debugging
-~~~~~~~~~
-If you have any problems with programs that worked under Windows 95/98,
-but aren't under NT/2000: find the sbbsexec#.log (where # is the node 
-number) that was generated after the program in question was run and 
-send it to me for debugging purposes. The sbbsexec#.log files are created
-in the current directory at the time the program is run. This will
-usually be either the Synchronet EXEC directory or the startup directory
-for an online external program (e.g. C:\SBBS\XTRN\DOORNAME).
-
-/* End of File */
diff --git a/docs/platforms.html b/docs/platforms.html
deleted file mode 100644
index 91855959ba..0000000000
--- a/docs/platforms.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<html>
-<head>
-<title>Synchronet - Supported Platforms</title>
-</head>
-<table border="1">
-<CAPTION><h1>Synchronet - Supported Platforms</h1></CAPTION>
-<TH>Synchronet
-<TH>DOS
-<TH>OS/2
-<TH>Win3.x
-<TH>Win95
-<TH>OSR2
-<TH>Win98
-<TH>WinME
-<TH>WinNT3
-<TH>WinNT4
-<TH>Win2000
-<TR><TD>Pre 2.3<TD BGCOLOR=LIME>Yes<TD BGCOLOR=LIME>Yes [1]<TD BGCOLOR=LIME>Yes [1]<TD BGCOLOR=LIME>Yes [1]<TD BGCOLOR=LIME>Yes [1]<TD BGCOLOR=LIME>Yes [1]<TD BGCOLOR=LIME>Yes [1]<TD BGCOLOR=LIME>Yes [1]<TD BGCOLOR=LIME>Yes [1]<TD BGCOLOR=LIME>Yes [1]
-<TR><TD>2.30<TD BGCOLOR=LIME>Yes<TD BGCOLOR=LIME>Yes<TD BGCOLOR=LIME>Yes [1]<TD BGCOLOR=LIME>Yes [1]<TD BGCOLOR=LIME>Yes [1]<TD BGCOLOR=LIME>Yes [1]<TD BGCOLOR=LIME>Yes [1]<TD BGCOLOR=LIME>Yes [1]<TD BGCOLOR=LIME>Yes [1]<TD BGCOLOR=LIME>Yes [1]
-<TR><TD>3.00a<TD BGCOLOR=RED>No<TD BGCOLOR=RED>No<TD BGCOLOR=RED>No<TD BGCOLOR=RED>No
-    [3]<TD BGCOLOR=LIME>Yes<TD BGCOLOR=LIME>Yes<TD BGCOLOR=LIME>Yes<TD BGCOLOR=RED>No
-    [2]<TD BGCOLOR=RED>No [2]<TD BGCOLOR=RED>No [2]
-<TR><TD>3.00b<TD BGCOLOR=RED>No<TD BGCOLOR=RED>No<TD BGCOLOR=RED>No<TD BGCOLOR=RED>No
-    [3]<TD BGCOLOR=LIME>Yes<TD BGCOLOR=LIME>Yes<TD BGCOLOR=LIME>Yes<TD BGCOLOR=RED>No
-    [3]<TD BGCOLOR=LIME>Yes<TD BGCOLOR=LIME>Yes
-<TR><TD>3.00c<TD BGCOLOR=RED>No<TD BGCOLOR=RED>No<TD BGCOLOR=RED>No<TD BGCOLOR=LIME>Yes<TD BGCOLOR=LIME>Yes<TD BGCOLOR=LIME>Yes<TD BGCOLOR=LIME>Yes<TD BGCOLOR=LIME>Yes<TD BGCOLOR=LIME>Yes<TD BGCOLOR=LIME>Yes
-</table>
-[1] Supported in DOS-Box/Emulation mode<br>
-[2] No FOSSIL/DOS-interrupt driver (for external programs/doors)<br>
-[3] No support for Win32 API function: GetDiskFreeSpaceEx<br>
-</html>
\ No newline at end of file
diff --git a/docs/qemm.txt b/docs/qemm.txt
deleted file mode 100644
index 9e7451eaba..0000000000
--- a/docs/qemm.txt
+++ /dev/null
@@ -1,168 +0,0 @@
-Experience has shown that problems with DESQview usually have nothing to do
-with DESQview and everything to do with QEMM.
-
-The default QEMM config.sys line is "DEVICE=QEMM386.SYS RAM". If you are using
-this config.sys line, you are playing with fire. On every system configuration
-tested at Digital Dynamics, DESQview (or even just plain DOS) will eventually
-crash using this config.sys line.
-
-The problem is that QEMM is using memory regions that other components of your
-systems are also trying to use. This is bad. QEMM may also not be using memory
-regions that are not in use and therefore you may not be getting all the
-available upper memory possible. This is important if you need to load TSRs,
-device drivers, or network drivers into high memory to leave as much DOS base
-memory as possible.
-
-An example config.sys:
-
- 1: shell=c:\dos\command.com /e:1024 /p
- 2: stacks=0,0
- 3: buffers=5
- 4: files=50
- 5: lastdrive=m
- 6: device=c:\dev\qemm386.sys ram x=b800-c7ff i=f000-f7ff i=fd00-fdff
- 7: device=c:\dev\loadhi.sys c:\dev\smartdrv.sys 1024
- 8: device=c:\dev\loadhi.sys c:\dev\ramdrive.sys 4096 256 512 /e
- 9: device=c:\dev\loadhi.sys c:\dev\ansi.sys
-
-Remember, this example config.sys will probably NOT work in your system. It
-does however work in one specific system. The right config.sys line for your
-system will need to be determined by you. Keep reading to find out how to make
-that determination.
-
-Note line 6, where QEMM386.SYS is loaded. The extra parameters after "ram"
-are specifying that QEMM exclude (not use) the memory region B800h through
-C7FFh and that QEMM should include (use) the memory regions F200h through F2FFh
-and F400h through F6FFh.
-
-The "x=b800-c7ff" part of the line is VERY IMPORTANT. Without this parameter,
-this particular system will eventually crash under DESQview or even DOS alone
-under some circumstances. The crash will manifest itself differently with
-different system configurations. It may give you a "QEMM protection violation"
-or "Invalid instruction", or "NO ROM BASIC - SYSTEM HALTED", or it just may
-suddenly freeze.
-
-The "i=nnnn-nnnn" parameters in the line tell QEMM to include (use) these
-memory regions for more available high memory. You should NOT use the inclusion
-parameter unless you are positive that no component of your system will try
-to use that memory region (including your system BIOS).
-
-So how do you figure what to include and exclude? By using the QEMM.COM utility
-with the "analysis" parameter. The first time you run "qemm analysis", you'll
-see something like this:
-
-�����������������������������������ͻ
-�     Area      Size      Status    �
-� 0000 - C2FF   780K   OK           �
-� C300 - C7FF    20K   Include      �
-� C800 - EFFF   160K   OK           �
-� F000 - F1FF     8K   Include      �
-� F200 - F2FF     4K   OK           �
-� F300 - F3FF     4K   Include      �
-� F400 - F6FF    12K   OK           �
-� F700 - F8FF     8K   Include      �
-� F900 - FAFF     8K   OK           �
-� FB00 - FBFF     4K   Include      �
-� FC00 - FCFF     4K   OK           �
-� FD00 - FDFF     4K   Include      �
-� FE00 - FFFF     8K   OK           �
-�����������������������������������ͼ
-
-The regions with the status "OK" mean that QEMM is dealing with it correctly.
-It is either NOT using the region because another resource is using it or it
-is using the region and no other resource has tried to use it since you booted.
-
-The regions with the status of "Include" mean that QEMM is not using the region
-and no other resource has tried to use it since you booted.
-
-The regions with the status of "Exclude" (none listed above) mean that QEMM is
-using the region and another resource has tried to use that region at the same
-time. This region must be manually excluded with the "x=nnnn-nnnn" parameter
-on your config.sys line.
-
-Now don't be fooled by all the "Include" regions above in that box. As you use
-the system, those regions will shrink, split, or disappear altogether. After
-executing "qemm analysis" (producing the above output) and then accessing a
-floppy drive, the "Include" regions already begin to disappear:
-
-�����������������������������������ͻ
-�     Area      Size      Status    �
-� 0000 - C2FF   780K   OK           �
-� C300 - C7FF    20K   Include      �
-� C800 - EFFF   160K   OK           �
-� F000 - F1FF     8K   Include      �
-� F200 - F2FF     4K   OK           �
-� F300 - F3FF     4K   Include      �
-� F400 - F6FF    12K   OK           �
-� F700 - F8FF     8K   Include      �
-� F900 - FCFF    16K   OK           �
-� FD00 - FDFF     4K   Include      �
-� FE00 - FFFF     8K   OK           �
-�����������������������������������ͼ
-
-After switching into every available video mode and running "qemm analysis"
-again:
-
-�����������������������������������ͻ
-�     Area      Size      Status    �
-� 0000 - C5FF   792K   OK           �
-� C600 - C6FF     4K   Include      �
-� C700 - EFFF   164K   OK           �
-� F000 - F1FF     8K   Include      �
-� F200 - F2FF     4K   OK           �
-� F300 - F3FF     4K   Include      �
-� F400 - F6FF    12K   OK           �
-� F700 - F8FF     8K   Include      �
-� F900 - FCFF    16K   OK           �
-� FD00 - FDFF     4K   Include      �
-� FE00 - FFFF     8K   OK           �
-�����������������������������������ͼ
-
-After typing "echo ^g" at the DOS prompt (^g stands for Ctrl-G) and then
-running "qemm analysis" again:
-
-�����������������������������������ͻ
-�     Area      Size      Status    �
-� 0000 - C5FF   792K   OK           �
-� C600 - C6FF     4K   Include      �
-� C700 - EFFF   164K   OK           �
-� F000 - F1FF     8K   Include      �
-� F200 - F2FF     4K   OK           �
-� F300 - F3FF     4K   Include      �
-� F400 - F6FF    12K   OK           �
-� F700 - F7FF     4K   Include      �
-� F800 - FCFF    20K   OK           �
-� FD00 - FDFF     4K   Include      �
-� FE00 - FFFF     8K   OK           �
-�����������������������������������ͼ
-
-As you can see, just about every system function will effect the regions that
-QEMM thinks you can safely include. It is a good idea to run just above every
-application you can and access every device on your system before deciding
-that the information provided by "qemm analysis" may be accurate and usable.
-
-If "qemm analysis" every reports a region with the status of "Exclude", do not
-question it. Immediately edit your config.sys excluding that region and reboot.
-
-If, for example, "qemm analysis" reports:
-
-�����������������������������������ͻ
-�     Area      Size      Status    �
-� 0000 - C5FF   792K   OK           �
-� C600 - C6FF     4K   Include      �
-� C700 - EFFF   164K   OK           �
-� F000 - F1FF	  8K   Exclude	    �
-� F200 - F2FF     4K   OK           �
-� F300 - F3FF     4K   Include      �
-� F400 - F6FF    12K   OK           �
-� F700 - F7FF     4K   Include      �
-� F800 - FCFF    20K   OK           �
-� FD00 - FDFF     4K   Include      �
-� FE00 - FFFF     8K   OK           �
-�����������������������������������ͼ
-
-Edit your config.sys file addding "x=f000-f1ff" at the end of your
-"device=qemm386.sys" line. Then reboot your system.
-
-
-
diff --git a/docs/sbbs.hst b/docs/sbbs.hst
deleted file mode 100644
index 6413297bca..0000000000
--- a/docs/sbbs.hst
+++ /dev/null
@@ -1,1318 +0,0 @@
-Synchronet Version 2 Development History
-----------------------------------------
-
-Legend: !  Bug Fix
-	*  New Feature
-	&  Change of Operation
-
-Each line begins with one of the modification types listed in the legend above
-and then followed by a single digit (0-9) rating the importance/severity of
-the modification (0 being least significant).
-
-***********************************
-June 2, 1994 Version 2.00a Released
-***********************************
-
-!0 When a directory was set for content ratings, the rating letter was not
-   converted to uppercase and a new line was not displayed after the uploader
-   entered the rating.
-
-!9 If more nodes were configured in SCFG than the node license allowed
-   for (i.e. 3 nodes in SCFG with a 2 node license), random lock-ups and
-   bizzare errors would occur, increasing in frequency between logons. Version
-   2.00a was supposed to allow for an additional local-only node for all
-   licenses. Even the existance of the additional node in SCFG would cause
-   this problem. If you had more nodes listed in SCFG than your node license
-   allows, this could explain just about any wierd behavior you may have
-   experienced.
-
-!0 RESORT directory command no longer creates an empty extended descriptions
-   file (EXB) if there are no extended descriptions for the files in the
-   directory being sorted/compressed.
-
-!5 Start-up directory for timed events not working at all.
-
-!1 Bulk upload command would abort if sysop hit ENTER for the description, thus
-   not allowing the automatic DIZ import into the single line description.
-   A Ctrl-C is now required to abort a bulk upload.
-
-!0 Slash commands were sometimes written with a control character following
-   the slash in the activity log files.
-
-&5 The contents of the current PCMS variables (string, logic state, and command
-   key) are now retained when loading a Baja module via EXEC_BIN function. This
-   allows variables to be "passed" from a shell to a module.
-
-*3 Users can logon directly to the QWK: prompt by prepending an asterisk (*)
-   to their user name or number at the logon prompt.
-
-!4 When performing an un-read personal message scan (MSG_YOUR_SCAN), if a sub
-   contained more than one un-read personal message, every other message would
-   be by-passed without displaying.
-
-!2 When viewing the user defaults from the User Edit function, the command
-   shell shown was the command shell of the current user online (most likely
-   the sysop), not the user that was being viewed in User Edit.
-
-!1 When modifying the external editor from the user defaults function, hitting
-   enter did not select the default editor if no external editor was previously
-   selected.
-
-&1 The COMPARE_USER_MISC Baja function now only sets the logic state to TRUE
-   if the all of the flags specified are enabled for the current user.
-   Previously, anyone of the flags set would cause the logic to be set to
-   TRUE.
-
-&0 When retrieving statistics for the WFC statistics display, a single dot
-   is displayed for each stat that has been retrieved.
-
-!5 Rockwell/Supra/PPI Caller ID format support (NMBR) was not functioning.
-   Synchronet was looking for "DATE=" when in reality the modems return
-   "DATE =".
-
-!8 A garbaged SFDOORS.DAT file was being created if this drop file type was
-   selected for an external program, and sometimes creating this drop file
-   when running the program from SBBS would hang the system or cause other
-   miscellaneous problems.
-
-&4 Improved preperation of DIZ text for single line description, when a
-   single line description is not provided by the uploader.
-
-!0 Could not change internal code of chat channels in SCFG - chat channel
-   internal codes are not used in Synchronet at all at this point, so this
-   bug really had no effect.
-
-!1 Could not change internal code of Gurus in SCFG.
-
-!2 FidoNet EchoMail base directory was not always created when saving changes.
-
-!1 Modifying certain elements in SCFG->Networks->QWK Networks would not prompt
-   to save changes when ESCaping.
-
-!2 Installation program no longer causing SCFG to give an error reading
-    MAIN.CNF if installing without default config (.CNF) files.
-
-&1 New (V)ersion command line switch for SBBS to display detailed revision
-   information (i.e. "SBBS V").
-
-!3 EXEC_BIN function was not looking in the EXEC directory for .BIN modules.
-
-!2 PAGE_SYSOP function was not checking the 'C' exemption for the user.
-
-&2 DEFAULT.SRC, MAJOR.SRC, and RENEGADE.SRC all load (via EXEC_BIN) the module
-   STR_CMDS.BIN for the string (sysop) commands (i.e. DOS, MEM, CHUSER, etc).
-   This eliminates the duplicated code in the various .SRC files, so changes
-   are easier made.
-
-&1 CHAT command (for 'C' exempt users) was added back into the string commands.
-
-!2 There were no time left warnings before disconnect when using private chat.
-
-!1 Fixed problem of (NULL)*.* being created in current node directory when
-   using temp archive features.
-
-!3 Viewable file types with less than a three character extension were not
-   being recognized as viewable file types. Same thing with extractable
-   file types.
-
-************************************
-June 25, 1994 Version 2.00b Released
-************************************
-
-!1 Users can read/delete private posts if they are the author.
-
-!3 If a user had access to more than one external program section and the
-   sysop did not use a custom XTRN_SEC menu screen, and the user did not
-   have access to the first external program section listed in SCFG, they
-   could just hit CR and get access to it.
-
-!3 SCFG was not creating DATA\TEXT\<code> directories correctly for general
-   text file sections.
-
-&1 If NAME.DAT becomes corrupted (truncated), valid user accounts in USER.DAT
-   will not be overwritten by new users.
-
-!3 Forwarding e-mail would cause the attributes to become corrupted.
-
-!7 The ;RESORT command would corrupt extended file descriptions.
-
-&2 Unused extended description records in the DATA\DIRS\*.EXB files could
-   contain garbage. While this didn't hurt anything, some curious sysops were
-   concerned about the contents of this file containing recognizable data. Now
-   the unused records are filled with 0 instead.
-
-&7 Sending Internet NetMail from the BBS required an '@' in the user address
-   and the name was stored separate from the address in the SMB header record.
-
-!5 If the advanced option "Expires when out-of-time" was set to Yes and the
-   user expired to a level that allowed the same amount of time online or
-   less, it would loop saying "Your account has expired" and "Time's up".
-
-&2 If a non fidonet network address is used in netmail and internet netmail
-   is disallowed and a default fidonet address is specified in SCFG, then the
-   outbound name@addr will become name@addr@fidoaddr to allow for remote
-   fido/uucp gateways.
-
-&3 Fixed problem when setting message new-scan pointers and a large message
-   number gap existed in the base. Was very slow at the finding the date
-   of the nearest message to display to the user.
-
-!1 Number of posts incorrect when displaying user stats from the BBS.
-
-*8 SCFG now uses a modem configuration database that can be user modified
-   and extended. Also added options for exporting and importing modem config
-   files (.MDM).
-
-**************************************
-August 20, 1994 Version 2.00c Released
-**************************************
-
-!9 New version of Borland C++ (v4.0) causing numerous problems with external
-   program/event execution. Reverting back to older release (v3.1) only
-   apparent solution. No code changes whatsoever.
-
-**************************************
-August 21, 1994 Version 2.00d Released
-**************************************
-
-!7 Fixed bug that would erase extended descriptions for existing files in
-   a directory when a new file was uploaded with an extended description
-   and the directory was already compressed (no deleted file slots).
-
-**************************************
-August 24, 1994 Version 2.00e Released
-**************************************
-
-!7 The above mentioned bug in v2.00d was not fixed in the revision E patch.
-   It has now been fixed.
-
-&4 QWK packet downloads will not be started if the estimated transfer time
-   is more than the user is allowed for that logon and the user does not have
-   the 'T' exemption.
-
-**************************************
-August 30, 1994 Version 2.00f Released
-**************************************
-
-!4 32-bit CRCs were generated incorrectly in v2.00f (only) and have been
-   corrected. This would cause errorneous duplicate message errors when
-   posting or importing messages into a sub-board that used duplicate message
-   checking.
-
-!3 If all Artificial Gurus were deleted in SCFG, editing Multinode Chat
-   Channels would cause displayed garbage or other problems.
-
-!9 Moving files between drives would cause occasional lock-ups or exceptions.
-
-!2 Newly created sub-boards would default to 'On' in users' new-scans even if
-   the sub-board had been set to not default on in SCFG.
-
-*3 Added toggle option for each sub-board to set whether a sub-board will
-   default to 'On' or not for users' "Your" message scans.
-
-****************************************
-September 9, 1994 Version 2.00g Released
-****************************************
-
-&0 User's can no longer use ASCII char 255 in their name/alias/handle.
-
-&4 Internet posts can now be replied to via NetMail with the 'M' command
-   from the reading messages prompt.
-
-*3 Automatically loaded Baja modules can be specified in SCFG->System->
-   Loadable Modules. This is for specifying .BIN modules that you want
-   to have loaded automatically without having to edit all of your command
-   shells. Available triggers are Logon, Logoff, and New User.
-
-!5 Relative swap directory disallowed by SBBS and SCFG (i.e. ..\etc) which
-   would cause problems when swapping to disk for external programs that
-   have start-up directories. If a swap directory is specified, the complete
-   path must be specified.
-
-&2 More intelligent directory/drive checking in SCFG when saving changes.
-
-!4 Problems resolved with private posts not being exported into QWK type
-   networks.
-
-*2 External programs can be configured to suspend the user's time online
-   while running the program (Free Time).
-
-!1 EXPIRE ARS paramter wasn't functioning properly.
-
-*7 File directory listings are re-listed if using batch flagging prompt.
-   If a selection other than [More] is selected, the current page of files
-   is redisplayed.
-
-!0 When CID is used to reject a caller, the log showed a random amount of
-   time used.
-
-!0 Fixed problem with @EXPDAYS@ showing expired users with large numbers of
-   days till expiration.
-
-!0 Fixed problem with @TUSED@ showing incorrect time used under some
-   circumstances.
-
-*4 Private node-to-node chat now uses a split-screen mode for ANSI users.
-
-!1 Messages posted to "SYSOP" and read by user #1 will be marked as READ.
-
-!3 Fixed problem of users being able to extract files from directories they
-   were not allowed to download from.
-
-!3 Multiple extractions from the same file would not work properly unless the
-   command was given multiple types ('E' for example), from the transfer
-   section.
-
-*4 New toggle option in SCFG for each directory to specify if directory
-   should be excluded from new file scans of all libraries/directories.
-   This helps speed up new-file scans when there are large numbers of CD-ROM
-   directories where no new uploads are likely to occur.
-
-*5 New toggle option in SCFG for each directory to specify if directory
-   should be exluded from Auto-ADDFILES search for new FILES.BBS entries
-   (for use with ADDFILES v2.10 or later).
-
-*2 New options in SCFG->Nodes->Node X->Toggle options. Logons via user number
-   can be disallowed, logon via user "real name" can be allowed (in addition
-   to alias), and passwords can be prompted for each logon attempt (even if
-   the user name is not found).
-
-&3 Any keys left in the local keyboard buffer by an executed program are
-   ignored by Synchronet. Some programs (namely DSZ) have a nasty bug where
-   they leave random key sequences (like Ctrl-Break and Alt-Tab) in the
-   keyboard buffer sometimes. These "magical" keystrokes are now purged from
-   the keyboard buffer.
-
-*0 If an external program creates the file HANGUP.NOW in the node directory
-   (file size and contents irrelevent), Synchronet will immediately hang-up the
-   user upon return and log the user off without logging a "Hung-up" in the log
-   file or the HUNGUP.LOG file. Both SCB (Synchronet Callback) v1.24+ and SMM
-   (Synchronet Match Maker) will create this file, so the user can logoff
-   directly from the program without generating a "Hung-up" in the log. XSDK
-   programs can't drop carrier on users. While this is still the case,
-   technically, the user can be automatically hung-up upon exit if the program
-   creates this file, giving the appearance of the program actually hanging the
-   user up.
-
-*2 External programs (doors) that require DORINFO1.DEF (for all nodes), this
-   drop file can be selected (separately from DORINFO#.DEF) in SCFG.
-
-*4 External editors that require drop files can now have the drop files
-   automatically created by Synchronet (configured in SCFG).
-
-*9 New memory compression algorithms allow for more configured items
-   (message and files areas, for example) in SBBS. Some systems may see
-   as much as 50k more free memory (typing ;MEM at the main menu) with this
-   version. Each additional configuration item (message area, file area, etc)
-   will also take up much less RAM, thus allowing a much larger number of
-   items for most configurations. This memory compression technique is not and
-   cannot be utilized in SCFG. Run "SCFG /M" to display the amount of free
-   memory in the configuration utility at all times.
-
-!1 The %T command line specifier could contain the wrong number when run during
-   the new user process (new users events or external editors). When used
-   during a new user logon, this specifier will always be 10 minutes.
-
-*7 Any command line configurable in SCFG can be used to execute a Baja module
-   (.BIN file in your EXEC directory) instead of an executable (.COM, .EXE, or
-   .BAT). This is done by prefixing the command line with a '*'. For example:
-   "*type %f" for a viewable file type command line for .TXT. TYPE.BIN is
-   included and makes a single Baja call to a new function, PRINTFILE_STR,
-   which is the same as PRINTFILE, except that it prints the contents of the
-   current string variable (as passed to the module via the command line,
-   %f in the example above, the path and filename to print). This is also
-   convenient for executing Baja modules from your external program (door)
-   menu or as transfer protocols, or whereever an external program is normally
-   used.
-
-!2 User's time left was not checked before starting the download of an e-mail
-   file attachment.
-
-!0 When sending bulkmail, the title of all messages after the first were
-   converted to all lowercase characters.
-
-!7 When displaying the userlist and sorting alphabetically, if there wasn't
-   enough available memory for allocation, the BBS would "lose" most of what
-   memory was available.
-
-*5 User database (USER.DAT) is accessed using record locking, rather than
-   file locking (as before). This significantly increases speed on writing
-   to the user database on active multinode BBSs.
-
-*9 Optional message base compression using LZH encoding. Intelligent
-   compression algorithm only stores in compressed form if disk space (in 256
-   byte block increments) is actually saved. Larger messages compress better.
-   Preliminary testing shows average message base compression between 30%
-   and 50%, which can equal hundreds of megabytes on large message base
-   systems. This toggle should only be used on message bases where the average
-   message is at least 512 bytes in length (roughly have a page of text).
-   Debate and philosophy type sub-boards appear to benefit the most from
-   compression. :-)
-
-&3 PostLink networked sub-board now allow 60 character "to" fields and
-   70 character "subject" fields.
-
-*4 MAIL_SEND_NETFILE baja command now allows sending FidoNet file attachments
-   as well as Internet file attachments.
-
-*1 FidoNet NetMail "Direct" status now supported (in SCFG->Networks).
-
-*5 TEXT.DAT strings can be replaced dynamically with a Baja function call,
-   REPLACE_TEXT. See TEXTNUMS.DAT for the number of the TEXT line you wish
-   to replace in a specific shell or module.
-
-*3 DOOR.SYS is now created with line 31 (Max Kbytes to download today)
-   containing the number of credits the user has (including free credits) in
-   kilobytes. If "Modify User Data" is set to Yes for a DOOR.SYS type external
-   program, line 29 is read back to update the number of downloaded files in
-   the user data and line 30 (Kbytes downloaded today) is read back in,
-   subtracted from the user's credits and added the total bytes downloaded in
-   the user data.
-
-*4 Support for FAX/Modems that insist on returning verbal result code "+FCON"
-   upon FAX connections. The BBS will exit with error level 100 so that the
-   SBBS.BAT file may launch the FAX receive software.
-
-!3 Fixed problem with bi-directional QWKnet account transfers that would cause
-   contents of outbound QWK packet to be imported into DATA\QNET\<QWKID>.IN.
-
-*8 New message storage method: Hyper Allocation for the ultimate message
-   importing (tossing) performance. Twice as fast as "Fast Allocation".
-
-!1 @ZIP@ code wasn't working at all.
-
-*3 If blind uploads are allowed, files are not added the database (upload
-   rejected) if the file was found in another directory.
-
-*5 Circular QWK echomail messages are automatically detected and rejected.
-
-*9 QWK NetMail with automatically maintained route map (DATA\QNET\ROUTE.DAT)
-   for routing instructions for multiple hop NetMail.
-
-*7 Optional QWKnet user list (DATA\QNET\USERS.DAT) for automatic address
-   look-up. Created with included utility: QWKNODES.EXE
-
-&2 Searching for "Your messages" and displaying Titles only is MUCH faster
-   now.
-
-*3 QWK mail imported that's sent to the system ID will be sent to user #1
-   rather than being rejected as an "Unknown user".
-
-*5 Support for QWKnet call-out semaphore files: DATA\QNET\<HUBID>.NOW
-   If this file exists the QWKnet call-out node will delete the file and
-   do an immediate call-out for that hub.
-
-*1 QWKnet call-outs can be forced from any node using the WFC 'F' command
-   or by typing ;FORCE <BBSID> from the main menu in the BBS.
-
-*3 If a user attempts to send e-mail to user@addr, the BBS will automatically
-   assume they intend to send netmail.
-
-*1 Ctrl-AZ can now be used to signify a premature end of file for display.
-
-****************************************
-February 17, 1995 Version 2.10a Released
-****************************************
-
-!0 QWK netmail forwarded to a FidoNet address would have the "From" field
-   set to the sysop's name instead of the sender's name.
-
-*2 When creating a message locally, all tear lines in the message text are
-   automatically converted to "-+-" by Synchronet. This conversion does
-   not happen with E-mail or NetMail.
-
-!2 Couldn't receive e-mail by user number via QWK REP packets.
-
-&5 Removed Guest ('G' restriction) hardcoded shell and expert questions and
-   display of SBBS.MSG
-
-*3 Added SELECT_SHELL and SET_SHELL Baja functions for changing user's command
-   shells from Baja modules.
-
-*2 Added SELECT_EDITOR and SET_EDITOR Baja functions for changing user's
-   external editor from Baja modules.
-
-*0 Added RANDOM ARS keyword for random number generation used in access
-   requirements and Baja modules. Baja line "COMPARE_ARS RANDOM 5=1" would
-   generate a random number between 0 and 5 and set the logic state to true
-   if the number generated was a 1.
-
-*1 Searches for "Un-read messages to you" will now show messages sent to the
-   either the user's name or alias (regardless of whether the echo is set to
-   "Use real names" or not).
-
-!3 Fixed problem with Searches for "Un-read messages to you" starting at the
-   last personal message in the sub-board if the user's last read message
-   pointer was higher than the last un-read message, rather than the beggining
-   of the un-read messages (as it should have).
-
-*2 Searches for messages to you from the reading messages prompt and from
-   the main menu (displaying titles only) is many times faster.
-
-*2 Message threading (by from, to, or subject) from the reading messages prompt
-   is many times faster.
-
-*1 Un-read messages to the user online will be displayed with a flag of '!'
-   in message title listings in sub-boards.
-
-!2 Baja function "SET_USER_STRING" was changed in the following ways:
-   Had a bug when called and the current string was blank. No longer allows the
-   user to choose an alias already in use (which could be bad) or an alias that
-   does not begin with an alpha character. For ALIAS, REALNAME, or HANDLE
-   checks the TEXT\NAME.CAN before allowing the user to use that name. For
-   PHONE checks the TEXT\PHONE.CAN before allowing the user to use that number.
-   For REALNAME or HANDLE disallows names in use if the "Force Unique" toggle
-   is set to Yes in SCFG->System->New User Values->Question Toggles. For
-   setting BIRTHDAY, invalid BIRTHDATES are not allowed. If the string can't be
-   used the logic state is sete to FALSE, otherwise it is is set to TRUE.
-
-!7 Serious problems when attempting to load a baja module from within another
-   baja module (not command shell).
-
-*3 Added ARS keywords LASTON and LOGONS to check for days since last logon and
-   total logons in Baja COMPARE_ARS functions or in SCFG.
-
-*7 Added Pre-pack QWK feature. All users meeting the requirements in SCFG->
-   Msg Options->Pre-pack QWK Requirements will have new messages automatically
-   added to a QWK packet and store until they download a QWK packet and the
-   pre-packed QWK will be appended to. This is mainly intended to reduce LD
-   costs for long QWKnet connections.
-
-!4 Sending FidoNet file attachments from Synchronet with a relative data
-   directory in SCFG (i.e. ..\DATA) would cause the file to not be sent.
-
-*2 When posting on a local message base (not networked) and a "to" name
-   is prompted for, the name is checked against the user database before
-   allowing the posting user to continue.
-
-*3 When a QWKnet call-out node is run, it will now import HUBID.QW0 through
-   .QW9 as well as .QWK if they exist in the DATA directory.
-
-&5 When routing QWK netmail, Synchronet will automatically take the shortest
-   route if the next hop is a node or hub off of the local system (overriding
-   the DATA\QNET\ROUTE.DAT file).
-
-&2 Synchronet will automatically eliminate duplicate entries in the ROUTE.DAT
-   file, keeping the newest entry.
-
-!2 Solved the problem of a user or QWKnet node receving e-mail while creating
-   a QWK packet. The mail would be auto-deleted after the packet was downloaded
-   even though the new e-mail wasn't included in the packet and wasn't read.
-
-*4 The following Baja functions can now use %s (to represent the current
-   string) and %f (to represent the current file directory) and any of the
-   command line specifiers (listed in Appendix A of the sysop manual) in their
-   string arguments: REPLACE_TEXT, LOG, PRINT, PRINT_LOCAL, PRINT_REMOTE,
-   PRINTFILE, PRINTFILE_REMOTE, PRINTFILE_LOCAL, CHKFILE, EXEC_BIN, YES_NO,
-   NO_YES, MENU, SETSTR, SET_MENU_DIR, SET_MENU_FILE, and COMPARE_STR.
-
-*4 The following command line specifiers have been added: %o (SysOp Name)
-   %q (System QWK ID) %x (User's Command Shell) %* (Node number 0 padded to 3
-   digits) %1 (user number) %2 (user number 0 padded to 2 digits) %3 (user
-   number 0 padded to 3 digits) %4 etc.
-
-&0 Version number command line specifier (%v) now includes revision letter
-   (i.e. 2.10B).
-
-&3 Added option in SCFG->Message Options to Allow users to have their e-mail
-   forwarded to a netmail address. Previously, this option would automatically
-   be available to the user if the system allowed users to send FidoNet or
-   Internet mail. This toggle defaults to "No" (disallow forwarding).
-
-&2 Added option in SCFG->Message Options to have Read E-mail automatically
-   killed by running "SMBUTIL M".
-
-!2 Fixed problem of small chunks of memory disappearing while moving around
-   within SCFG.
-
-&5 Overlay buffer manipulation released 32k of more free memory in SCFG and
-   40k of more free memory in SBBS.
-
-&6 Daily events, QWKnet call-outs, and PostLink call-outs will now execute
-   automatically, even when started from a front-end mailer or other program
-   which requires SBBS to exit after a caller.
-
-*5 New QWK options can be toggled from the "Change Settings" menu from the
-   QWK prompt: Include Message Path (VIA), Include Time Zone (TZ), Include
-   Index Files, and Include Control Files. This allows for non-Synchronet
-   systems to QWKnet with Synchronet BBSs without receiving @VIA and @TZ
-   lines. This also allows Synchronet systems to eliminate the index and
-   control files from QWK packets since they are unnecessary for QWKnet
-   importing and just make the file larger. These options can also be
-   toggled via QWK control message to "SBBS" with a title of "VIA", "TZ",
-   "NDX", or "CONTROL" followed by "ON" or "OFF". TZ and VIA default to OFF,
-   so Synchronet systems may need to post a control message to enable them.
-
-*2 Split screen chat can now be toggled from the Chat: prompt with the 'S'
-   command.
-
-*6 New Baja functions: COMPARE_NODE_MISC, COMPARE_USER_CHAT, COMPARE_USER_QWK,
-   TOGGLE_USER_CHAT, and TOGGLE_USER_QWK. See BAJA.TXT for details.
-
-!2 The timeleft field in drop files created for external editors could contain
-   the incorrect number when used as a new user external editor for validation
-   feedback.
-
-!0 Batch file flag prompt (P)revious command went backwards exactly one file
-   less of a full screen.
-
-!3 When forwarding mail, the original author's user number could be set to
-   a random number which would cause havoc when the new destination user
-   (A)uto-replied to the mail.
-
-*4 External editors can now be configured as QuickBBS (MSGTMP) style to
-   support native QuickBBS/Remote Access external editors (i.e. GEdit,
-   IceEdit, TopEd, etc.)
-
-*1 External editors can now be configured to expand single line feeds to
-   carriage return/line feed pairs. This is for editors that store new lines
-   as a single line feed (i.e. VI and other Unix editors, WWIVEdit in WWIV
-   mode, etc.)
-
-*5 Externalized storage (environment variables SBBSFILENAME and SBBSFILEDESC)
-   of uploaded file names and descriptions allows upload processors to
-   use file names and descriptions. Upload processors can modify the file
-   name and description of uploaded files by writing the files SBBSFILE.NAM
-   and SBBSFILE.DES in the current node's directory.
-
-*4 New node toggle options in SCFG for turning on/off the retrieval of total
-   files and messages (significantly speeding up the WFC statistics retrieval),
-   disabling the local keyboard (entirely), disabling local inactivity warning
-   and auto-logoff, and requiring the input of system password for local WFC
-   commands and Alt-key combinations.
-
-*2 New Baja function MSG_NEW_SCAN_SUB to scan the current sub-board for new
-   messages. Sets the current logic state to FALSE if the user aborted the
-   scan.
-
-*1 New Baja functions MSG_SET_GROUP and FILE_SET_LIBRARY to set the current
-   message group of file library by short name.
-
-!2 E-mail file attachments can now be downloaded from the Reading Sent Mail
-   and Reading All Mail prompts and if the file is not there, it will say
-   File Not Found at the end of the message.
-
-*5 Split-screen private node-to-node chat enhancments: Ctrl-P and Ctrl-U
-   functional, fake cursor in top window, and notification of waiting
-   telegrams and node messages on window separation line.
-
-&2 Extended file descriptions in file listings are no longer truncated at page
-   break and displayed again on next page.
-
-*5 SCFG now imports and exports message area files: AREAS.BBS, SUBS.TXT,
-   and FIDONET.NA as well as file area files: DIRS.TXT and FILEBONE.NA
-
-*3 SCFG now support multiple levels of automated back-up of config files.
-   SCFG /B# specified back-up level (by number), default is 3.
-
-
-!2 Message pointers are now loaded before any logon modules, so the Baja
-   message new-scan functions can be used in logon modules.
-
-!0 HUBID.QW0, QW1, etc. would not be deleted automatically after import.
-
-!1 Fixed problem with XTRN_EXEC Baja function causing "checking instruction"
-   error message.
-
-*1 Sub-boards can be configured with static QWK conference numbers instead of
-   the default dynamic numbering scheme (allowing inserting of sub-boards
-   without causing incorrect REP posting by users).
-
-*1 Added FA: (File Attacment) Subject "status override" for FidoNet Netmail
-   from Sysop or 'F' exempt users. Be VERY careful who you give the 'F'
-   exemption to! They can attach any file on your system to Fido netmail.
-   This is to be used when sending the same file attach to multiple people
-   instead of the MAIL_SEND_NETFILE Baja function.
-
-!0 Node paging and activity alerts were enabled between logon and the end
-   of the logon sequence regardless of the user's default settings for these
-   two toggles.
-
-*5 Files added to batch download queue, but not downloaded while online
-   will be automatically added to the batch queue during the user's next logon
-   until the files are either downloaded successfully or removed from the
-   queue.
-
-*8 Baja modules can now be executed from within TEXT.DAT lines (that don't
-   contain % variables) and menus/text files by using "@EXEC:MODNAME@"
-   without the quotes, where MODNAME is the name of the .BIN file (without
-   the .BIN) in the EXEC directory.
-
-&2 Down arrow (ESC[B) is now translated by Synchronet into Ctrl-J instead of
-   Ctrl-M.
-
-!2 Telegrams and inter-node messages could flash by (screen cleared)
-   without being read in some circumstances.
-
-*3 Added new command line option to SBBS (o) to force Synchronet to run
-   any pending events and then immediately exit. This eliminates the need to
-   have events down the nodes they are being run on to return to front-end
-   mailers. But more importantly, if "SBBS O" is run as an event from a mailer
-   and there just so happens to be no pending events, Synchronet will
-   immediately exit back to the mailer instead of sitting at the waiting for
-   call screen.
-
-*0 Added Guru response codes `o (SysOp's name), `s (System name), `g (Guru's
-   name), and `I (System's QWK ID), `L (user's level - previously `m),
-   `T (time), `M (month), `W (day of week), `J (day of month), `Y (year),
-   `Z (user's zip/postal code).
-
-!1 Replies to Anonymous posts on local sub-boards now work.
-
-!2 Pre-packed QWK packets will no longer contain e-mail (causing duplicates)
-
-*3 Guru expressions can now contain ARS elements contained in square brackets.
-   Example: (HELLO&GURU&[LEVEL 90 OR FLAG S])
-
-!5 SBBS now correctly supports more than 3000-4000 posts per sub-board (if
-   available memory allows).
-
-!1 Auto-sorting file directories by upload date now functions correctly.
-
-*4 Non-Synchronet color codes are now supported in extended file listings.
-
-!0 Baja function COMPARE_KEY now supports DIGIT, EDIGIT, control characters
-   (^x) and slash commands like the CMDKEY function.
-
-*9 New Baja functions: INKEY, RIOSYNC, GETTIMELEFT, SAVELINE, RESTORELINE,
-   MSWAIT, ADJUST_USER_MINUTES, TRASHCAN, CREATE_SIF, READ_SIF, CMDKEYS,
-   COMPARE_KEYS, and PAGE_GURU.
-
-!2 When (V)alidating a message from the Reading Messages prompt, the index
-   was not properly updated causing the header and index attributes to be
-   mismatched (as reported by CHKSMB). This also caused validated messages to
-   remain unvalidated.
-
-*1 When changing message attributes, a menu-interface is now used.
-
-!4 Using Hyper Allocation (and possibly Fast Allocation or Self-packing),
-   message bases could be corrupted when importing multiple sequential messages
-   for a single message base. The symptom would be corrupted message bodies
-   (appearing as blank in the BBS) and CHKSMB v1.21 or later reporting
-   unsupported translation types. This was fixed in SMBLIB v1.20b used in
-   v2.22 of SBBSFIDO and Synchronet UTI as well.
-
-*9 New Baja variable functions: INT, STR, SET, GLOBAL_INT, GLOBAL_STR, PRINTF,
-   SPRINTF, STRCAT, RANDOM, COPY, SWAP, ADD, SUB, MUL, DIV, MOD, AND, OR, NOT,
-   XOR, TIME, TIME_STR, DATE_STR, FTIME_STR, SECOND_STR, STRLEN, STRUPR,
-   STRLWR, and DATE_STR_TO_INT.
-
-*9 New Baja instructions: COMPARE, IF_EQUAL, IF_NOT_EQUAL, IF_GREATER,
-   IF_GREATER_OR_EQUAL, IF_LESS, IF_LESS_OR_EQUAL, SWITCH, CASE, END_CASE,
-   DEFAULT, and END_SWITCH.
-
-*9 New Baja file I/O functions: FOPEN, FCLOSE, FREAD, FWRITE, FSEEK, FGET_POS,
-   FEOF, FGET_LENGTH, FSET_LENGTH, FGET_TIME, FSET_TIME, FLOCK, FUNLOCK,
-   FPRINTF, and FSET_ETX.
-
-!0 Fixed problem of extremely-slow file searches when using the Remove/Edit
-   command from the file section.
-
-*2 Timed events can be forced by creating a CODE.NOW semaphore file in the
-   DATA directory, where CODE is the internal code of the timed event.
-
-*1 The number of seconds between each node semaphore check and statistics
-   check while WFC can be configured in SCFG->Node->Advanced Options.
-
-*3 File areas can be toggled to deduct time during uploads (normally time spent
-   uploading is not counted).
-
-*1 File areas can be toggled to reward the uploader with minutes instead of
-   credits.
-
-*1 Sub-boards can be toggled on as networked to the Internet via UUCP when
-   using NetXpress allowing unknown "To" users and the 'N' restriction to work
-   properly.
-
-*4 New system toggle to disallow users to convert credits into minutes.
-
-&2 When local system protection is used (node toggle), the system password is
-   now prompted for in the status line.
-
-*3 When deleting a message from a sub-board, the message is flagged for
-   deletion rather than being immediately removed. This allows the sysop or
-   user to undelete the message before message base maintenance is run.
-
-*2 Messages can be be moved between sub-boards without deleting the original
-   message.
-
-&0 Reinitializing message pointers now resets the last read message pointer
-   as well as the highest read message pointer.
-
-*5 New Baja functions: ONLINE, OFFLINE, and PUT_NODE.
-
-*1 NODE_ACTION Baja function now supports the following actions:
-   MAIN, RMSG, RMAL, SMAL, RTXT, RSML, PMSG, AMSG, XTRN, DFLT, XFER, DLNG,
-   ULNG, BXFR, LFIL, LOGN, LCHT, MCHT, GCHT, CHAT, SYSP, TQWK, PCHT, PAGE,
-   and RFSD as well as specifying the action number directly.
-
-*2 New Baja function: NODE_STATUS can set the current node status to:
-   WFC, LOGON, NEWUSER, INUSE, QUIET, OFFLINE, NETTING, EVENT_WAITING,
-   EVENT_RUNNING, or EVENT_LIMBO.
-
-*0 Messages and text files larger than the available memory (size is unlimited)
-   can now be displayed.
-
-&1 If SCFG->System->Toggle Options->Expire When Out-of-time is set to "Yes",
-   specific users can be excluded from this behavior by giving them the 'E'
-   exemption.
-
-&0 If SCFG->System->New User Values->Question Toggles->Location is set to
-   "Yes", commas will not be required if the "Require Commas" toggle is set
-   to "No".
-
-*5 Local messages (posts or e-mail) from user #1 containing @-codes WILL be
-   expanded to message variables (or actions) when read.
-
-*1 "Beep Locally" toggle option moved from System to Node Toggle Options in
-   SCFG.
-
-*5 Each security level can have a specific security level to expire to or
-   quick-validation set to expire to.
-
-*9 New loadable modules for Login, Synchronization, Logout, and Expired Users.
-
-*3 New Baja instructions: COMPARE_STRN and COMPARE_SUBSTR.
-
-*0 New command line specifier: %z to represent the text directory (similar to
-   the %j, %k, and %! specifiers).
-
-*2 New Baja functions: FLENGTH, USER_EVENT, and PRINTTAIL.
-
-&9 Removed hardcoded login procedure (NN: prompt, "New" for new-user, etc.).
-   Must use a login module to perform this functions (see EXEC\LOGIN.SRC
-   or EXEC\MATRIX.SRC and DOCS\BAJA.DOC for details). Login module name is
-   specified in SCFG->System->Loadable Modules->Login Module. If set to blank,
-   Synchronet will assume "LOGIN" as the module name.
-
-&9 Removed hardcoded logon procedures for displaying TEXT\MENU\LOGON screens,
-   last few callers, auto-message, user events, etc. Must use logon module
-   to perform these functions (see EXEC\LOGON.SRC and DOCS\BAJA.DOC).
-
-*9 New Baja function: LOGIN to initiate login procedure, LOGON to initiate
-   LOGON procedure (includes automatic execution of Logon module) and LOGOUT
-   to force LOGOUT procedure (only to be used for RE-logins, does NOT execute
-   Logout module).
-
-*2 New Baja function: BATCH_ADD_LIST to add a list of files to the current
-   users batch download queue and automatically delete the list file.
-
-*5 When returning from an external program, if the file DATA\FILE\xxxx.DWN
-   exists (where xxxx is the user's number), the files contained in that
-   list will be automatically added to the user's batch download queue and
-   the list file will be deleted.
-
-*7 Default download protocol can be selected by users in default config.
-   And automatic hang-up after download (without asking) can be turned on.
-   New user defaults for these two options can be configured in SCFG.
-
-*5 Baja compiler supports definition of macros (!DEFINE) and include files
-   (!INCLUDE).
-
-&0 SCFG online help now functions correctly even if SCFG.EXE is renamed.
-
-*3 WIP (Windows Interface Protocol) terminal (DC-TERM) auto-detected and .WIP
-   menu files displayed (if present). New WIP ARS keyword as well.
-
-&1 When RIP or WIP terminals are detected, a color and extended ASCII support
-   is assumed.
-
-&0 When moving files from upload or sysop directory, upload date/time is
-   changed to current date/time.
-
-!1 When importing AREAS.BBS or FIDONET.NA message base lists in SCFG, internal
-   codes would be padded with spaces out to eight characters (which was wrong).
-
-&2 Internet netmail uploaded via QWK REP is now stored with name and addressed
-   combined (same as sending netmail online) instead of the SBBS 2.0 method
-   of separate name and address. Both methods are valid (and documented in
-   the SMB specification), but this has been changed for consistency with the
-   newer storage method of online Internet netmail.
-
-&1 The ADJUST_USER_CREDITS Baja function will now deduct from the user's free
-   credits (if they have any), if adjusting negative.
-
-!0 Fixed problem with CREDIT ARS keyword not working correctly with values
-   greater than 32MB. This keyword now supports up to 64MB, for comparison.
-
-!1 Fixed problem with executing a loadable (Baja) module as an external program
-   if that module contained an EXEC_XTRN statement. This would cause problems
-   with re-opening the log file when returning from module.
-
-!0 Fixed problem with editing Access Requirements for External Program Sections
-   in SCFG when the section name was longer than a certain number of chars.
-
-!0 Fixed problem with FILE_SET_LIBRARY Baja function causing critical error.
-
-*1 Archives can be (V)iewed from the (R)emove file prompt.
-
-*8 System variables can be read (and some modified) from Baja modules. See
-   DOCS\BAJA.DOC for a list of available system variables.
-
-&3 The DIR and SUB ARS keywords now support the area's internal code as well
-   as the sub-board or directory number (which can change and be hard to
-   calculate). To specify a directory or sub-board internal code that begins
-   with a digit, use SUBCODE or DIRCODE instead of the SUB or DIR keyword.
-   If the first character of the value is not a digit, it is assumed to be
-   a internal code.
-
-&1 When deleting file libraries and directories in SCFG, the data files may
-   automatically be deleted (if the sysop answers YES to the delete data
-   prompt).
-
-&3 When forwarding e-mail that has file attachments, the attachments are now
-   automatically copied along with the e-mail message.
-
-*1 When in local Guru chat (not multi-node Guru chat), the Guru will type
-   first, as if responding to the user string "HELLO".
-
-*5 New Baja function (LOAD_TEXT) to load an alternate TEXT.DAT file from module
-   or command shell.
-
-*2 Additional line in TEXT.DAT allows different keys for (Y)es and (N)o.
-
-*3 Configuration command line (from WFC) configurable in SCFG for each node.
-   This is allows the sysop to add command line switches for some all nodes,
-   or use the 32-bit version of SCFG (SCFG32.EXE) for some or all nodes.
-
-&1 Hitting the key for (N)o at the pause prompt is now the same as hitting
-   Ctrl-C (abort).
-
-*3 RIP and WIP files are not displayed locally to keep the local screen clean.
-
-*0 New GETSTR (Baja function) mode, NOECHO accepts a string of input without
-   echoing to the local or remote consoles.
-
-*4 E-7-1 terminals are now supported by setting the Node Toggle Option in
-   SCFG for "Allow 8-Bit Remote Logons" to "No". If a user logs on and
-   does not have IBM extended ASCII support disabled, then they will be allowed
-   to send 8-bit characters (after the logon procedure).
-
-&2 New users are asked less initial questions about terminal type (to simplify
-   new user procedure). If ANSI, RIP, or WIP is auto-detected, auto-terminal
-   type is not asked. If RIP or WIP is detected, COLOR is not asked. 
-   If auto-terminal type is not selected, RIP is not asked. All these items can
-   still be toggled from the user default settings menu (which may still appear
-   during the new user procedure if configured), allowing undetected RIP
-   terminals (for example) to be correctly configured during the new user
-   procedure. WIP is not supported unless it is correctly auto-detected.
-
-*1 New Baja functions: CHKSUM and STRIP_CTRL
-
-!0 Hexadecimal character constants (\x1b) in the TEXT.DAT were not interpretted
-   correctly.
-
-*2 New @-code to display a menu from within the TEXT.DAT or within another
-   text file or menu (@MENU:filename@).
-
-*1 New @-code to allow yes/no questions to be imbedded in menu files
-   (@QUESTION@).
-
-*1 New Baja functions: FILE_SEND, SEND_FILE_VIA, and FREAD_LINE.
-
-*0 Lines starting with '#' in the TEXT.DAT will be ignored (comments).
-
-*2 New @-code to display any file from any directory within another text file
-   or menu (@TYPE:filename@).
-
-*4 New DOS File System related Baja functions: REMOVE_FILE, RENAME_FILE,
-   COPY_FILE, MOVE_FILE, GET_FILE_ATTRIB, and SET_FILE_ATTRIB.
-
-*3 New DOS Directory System related Baja functions: MAKE_DIR, CHANGE_DIR,
-   REMOVE_DIR, OPEN_DIR, READ_DIR, REWIND_DIR, and CLOSE_DIR.
-
-*1 New Baja function (GET_FILE_TIME) to get file date/time without having to
-   open the file first (FGET_TIME).
-
-**************************************
-August 31, 1995 Version 2.20a Released
-**************************************
-
-&0 �[ is now interpreted as <ESC>[ when ANSI encoded reading messages.
-
-!3 The "maximum time" option for external programs, was using the value
-   for maximum SECONDS instead of minutes causing invalid drop file to
-   be created if this option was used.
-
-!1 The "Credit Uploader with Minutes" option could not be toggled to Yes
-   in SCFG (under Directory Toggle Options).
-
-*2 External editors can be configured to automatically quote all or none
-   of the message text, rather than prompting the user.
-
-&0 Users should no longer run out-of-time while in local chat with the sysop
-   (alt-C) or be kicked out immediately after exiting chat if popped in
-   during logon sequence.
-
-!0 The FSET_POS Baja function was incorrectly setting the logic state to
-   Non-TRUE unless the file was set to the beginning.
-
-!0 When logging on for immediate QWK (*username at the login prompt or 'Q'
-   restriction), any waiting telegrams would not be displayed. Now they are.
-
-*5 No more 500 line limit for messages created online. The maximum number of
-   lines is determined by free memory. Most systems should be able to allow
-   1000-2000 line messages. The internal line editor still has a 500 line
-   message limit. Raw input and external editors are limited only by the number
-   of lines set in SCFG for the user's security level and the available DOS
-   memory.
-
-!1 The FINDUSER Baja function was setting the current command string to an
-   invalid string if the username was not found and NOT setting the command
-   string if it was.
-
-&5 SBBS.EXE is now limited to 2 nodes when run in unregistered mode (no
-   key file) plus an additional local node (total of 3 nodes).
-
-&0 Directories with "Check for file existence" set to "No" will no longer
-   allow single file downloads and extended file information now includes
-   the correct file size and date.
-
-!1 Fixed problem with possible stack overflow (lock-up) if pause (ctrl-a p)
-   used in TimesUp TEXT.DAT entry.
-
-!0 Toggling "Allow Anonymous Posts" from "Only" to "No" for a sub-board in
-   SCFG did not work correctly.
-
-*2 Carbon Copy FidoNet netmail now supported. Only one "cc: name@addr"
-   allowed per line (cc: must start line, anywhere in body text). If
-   "cc: addr" is used, then "sysop" will be used as the destination
-   user name. "* Originally to: name@addr" is placed at the top of all
-   carbon copy messages. "cc:" is not case sensitive and all white space
-   inbetween "cc:" and "name@addr" is ignored.
-
-*****************************************
-September 27, 1995 Version 2.20b Released
-*****************************************
-
-&0 FidoNet netmail CC:'s didn't support name@addr@addr. This has been changed.
-
-!9 Fixed problem with local node (node license + 1) locking up.
-
-&1 Yes/No prompt can now use light-bar module (no patch required), and Ctrl-C
-   sets the abort flag correctly (unlike the patch).
-
-*3 The updating of a file's upload date when moving from one directory or
-   another can now be toggled (per directory) in SCFG. The default is OFF.
-
-&0 Video mode is optionally reset between each call (Node toggle option). This
-   reverses the effects of some external programs that change the text mode
-   (without permission). This option is not suggested when running in an
-   OS/2 window (i.e. not full screen).
-
-&0 XTRN.DAT now contains EXEC directory, TEXT directory, TEMP directory,
-   System's QWK ID, and Node toggle options (in hex) for use with XSDK v2.40
-   and later.
-
-*1 Added TRIBBS.SYS door drop file support.
-
-!5 Fixed problem with lock-ups during text searches in message bases with
-   excessively large messages (>64k).
-
-*3 Maximum number of seconds to allow for message base open/lock retries
-   now configurable in SCFG->Message Options. Previously hard-coded at 10
-   seconds, now configurable (defaults to 30 seconds).
-
-*4 Inactivity seconds before warning and disconnection now configurable
-   (per node) under node advanced options in SCFG.
-
-&0 OS/2 flavor of SCFG now gives up time-slices while waiting for keyboard
-   input.
-
-*2 Internal editor no longer limited to 500 lines per message.
-
-*1 New modem configuration toggle option to disallow unknown result codes
-   (the default behavior is to allow them and use the last configured
-   result code information, but still log an error for the sysop).
-
-!3 COMPARE_STRN Baja function could/would mess up the execution (flow control)
-   if located in if/else/end_if code blocks.
-
-*7 All Baja File I/O functions now use buffered I/O for a major increase in
-   read/write performance from Baja modules.
-
-*1 New @-code (@SETSTR:value@) sets the current command string for the
-   currently executing module or shell to the value specified.
-
-&3 When a node is configured for exclusive execution and it is waiting for
-   other nodes to become inactive, it now displays the number and status of
-   the first offending node that it's waiting for (this will help sysops to
-   know which node is keeping their events from executing).
-
-*2 New Baja File I/O function FFLUSH <handle> to flush any pending output
-   (writes) to a file.
-
-&1 New ARS keyword "OS2" to specify whether or not the current node is running
-   Synchronet for OS/2 or not.
-
-&5 All paths are expanded to FULL paths (no longer relative) when the BBS is
-   run (i.e. "..\EXEC" becomes "C:\SBBS\EXEC") to eliminate dependancy on
-   the current directory (which SHOULD always be the current NODE directory
-   when the BBS is executing) and intermittent problems under some system
-   configurations. The downside is that users can now see your full system
-   paths when view/extracting archives (if the archiver, e.g. PKZIP, shows
-   the path).
-
-&0 If the sysop has specified a trailing backslash on the start-up directory
-   for a timed event, it will be automatically removed by the BBS. DOS will
-   not let you CD to a sub-directory with a trailing backslash.
-
-*9 When running Synchronet for OS/2, all executables (with the exception
-   of SCFG) are assumed to be DOS programs (which require extra work by the BBS
-   to execute) unless the program name is listed in SCFG->External
-   Programs->OS/2 Program List. At the very least, CMD.EXE should be listed
-   here. Since all DOS programs are executed in a fresh DOS window (with
-   very little overhead) all swap options are unused in SYNC4OS2. WWIV
-   external programs (requiring DCDWATCH and/or WWIV color codes) are not
-   supported in Synchronet for OS/2. OS/2 programs canNOT have I/O interrupts
-   intercepted (this is a DOS program ONLY feature).
-
-*2 New %y command line specifier points to your DOS COMMAND.COM (in
-   Synchronet for DOS, gets the path from the COMSPEC environment variable,
-   in Synchronet for OS/2, gets the path from SCFG->Nodes->Node X->DOS
-   Command Interpreter).
-
-&5 New modules for Synchronet for OS/2: EXECSBBS.EXE (not to be confused with
-   EXECSBBS.COM, still required by Synchronet for DOS) and EXECDOS.EXE located
-   in your EXEC directory.
-
-!2 All pending events are now executed when "SBBS O" is run regardless of
-   the order of their configuration vs. execution time in SCFG.
-
-&1 Posts to non-QWKnet sub-boards from a Q restricted account are now
-   disallowed.
-
-&4 Maximum file sizes (for the file transfer section) have been increased from
-   9,999,999 bytes to 999,999,999 bytes.
-
-!2 ARS for compressable file types was not being used.
-
-&1 New ARS keyword "DOS" evaluates to true if the current node is running the
-   16-bit DOS version of Synchronet.
-
-&5 The 32-bit versions of Synchronet now allow a maximum of 10000 files per
-   directory (vs. 1000 for the 16-bit DOS version) and 50000 total e-mail
-   messages (vs. 5000 for the 16-bit DOS version).
-
-&8 Synchronet no longer physically removes deleted e-mail messages when a user
-   exits the reading mail prompt unless the sysop has set SCFG->Message Opts
-   ->Delete E-mail Immediately to "Yes". Instead, the mail is physically
-   removed during the system daily maintenance (run automatically). This speeds
-   up the e-mail access considerably on systems with large e-mail databases.
-   Also, e-mail and posts that have been flagged for deletion will not be
-   visible to the user unless the sysop has set SCFG->Message Opts->Deleted
-   Messages Viewable to "Yes". Settings this option to "Sysop Only" means only
-   sysops or sub-ops (when appropriate) can see deleted messages. The above
-   mentioned system maintenance also scans for old e-mail (greater than the
-   maximum age specified in SCFG->Message Opts->Purge Mail by Age) if enabled.
-   SMBUTIL is no longer necessary for maintaining your MAIL database.
-
-&1 When a new user takes a deleted user's slot, any mail that user has SENT
-   will be deleted as well as any mail that user had received (previously,
-   sent mail was not deleted and thus readable by the new user).
-
-*3 Added the following @-codes: @last@ for user's last name/alias,
-   @firstreal@ for user's first real/company name, and @lastreal@ for
-   user's last real/company name.
-
-&0 Maximum allowed DCE rated increased from 57600 to 64000 (to support ISDN
-   modems).
-
-*2 When reading e-mail, the thread commands (<>{}[]) are now available
-   to thread forward and backward by subject, from user, and to user (as
-   with reading sub-boards).
-
-*0 When a node is run and a NODE.LOG already exists (not a normal situation)
-   it is appended to the file DATA\CRASH.LOG (as well as the normal system
-   log) to allow the sysop to easily browse through logs resulting in possible
-   crashes to help diagnose the cause. The file CRASH.LOG in the current
-   node's directory is also appended (to more easily solve node specific
-   crashes).
-
-*0 New @-codes: REAL, LAST, LASTREAL, and FIRSTREAL
-
-*7 Synchronet BBS now supports VERBAL modem result codes by setting SCFG->Nodes
-   ->Node #->Modem Config->Toggle Options->Use Verbal Result Codes to "Yes".
-   You must also change V0 to V1 in your modem init string. When verbal result
-   codes are enabled, the result code list is no longer used. This feature was
-   added for the flexibility and easier configuration of modems that don't
-   correctly support numeric result codes, insist on returning multiple connect
-   results (CARRIER, PROTOCOL, etc), or have too many possible result codes to
-   configure by hand. When this option is set to "Yes", Synchronet
-   automatically creates the connection description and estimated CPS rates.
-   This option also has the added advantage of supporting DCE (connection)
-   rates above 65535. The DCE rate is not to be confused with the DTE rate
-   which is currently limited to 115200 bps.
-
-*4 Synchronet will now automatically fix the E, V, and &C modem registers
-   if configured incorrectly in (one of) the modem init string(s). If the
-   above "Verbal Result Codes" option is used (for example), the init string
-   does not need to be modified. Synchronet will automatically send an ATV1
-   after the init and special init strings (if needed).
-
-&1 The PERSONAL.NDX file included in QWK packets now includes entries for
-   the E-mail conference (#0) as well as private posts in sub-boards.
-
-*3 Synchronet for OS/2 (SBBS4OS2.EXE) can now be launched with an already
-   open port by specifying the open port's handle on the command line (with
-   the new H command line parameter). This is useful for OS/2 front-end mailers
-   (like BinkleyTerm) that leave the port open when spawning the BBS.
-
-*3 When Synchronet for OS/2 launches OS/2 executables, the com port can be left
-   open by configuring the program (in SCFG->External Programs->OS/2 Programs)
-   to leave the port open. The port handle must then be passed to the child
-   process with the %H command line specifier. The port is always closed when
-   launching DOS executables and then re-opened upon returning.
-
-*0 The system variable, _WORDWRAP is now available for Baja programmers to
-   check/modify the current word wrap buffer (set with GETSTR).
-
-*0 New Baja functin, EXIT immediately aborts execution of the current module
-   (used in place of RETURN when in CALLed sub-routines).
-
-*4 The following Baja functions now allow integer variables to be used in place
-   of integer constants: USER_EVENT, COMPARE_STRN, RANDOM, FOPEN, FSET_ETX,
-   NODE_ACTION, NODE_STATUS, PRINTFILE, PRINTTAIL, GETSTR, GETNUM, MSWAIT,
-   GETLINE, GETSTRUPR, GETNAME, SHIFT_STR, REPLACE_TEXT, REVERT_TEXT,
-   TOGGLE/COMPARE_USER_MISC, TOGGLE/COMPARE_USER_CHAT, TOGGLE/COMPARE_USER_QWK,
-   TOGGLE/COMPARE_NODE_MISC, SET_USER_LEVEL, SET_USER_STRING,
-   ADJUST_USER_CREDITS, and ADJUST_USER_MINUTES.
-
-*0 New @-codes: MAILW (number of e-mail messages waiting for current user),
-   MAILP (number of e-mail messages sent by current user pending deletion),
-   MAILW:# (number of e-mail messages waiting for user #), and MAILP:#.
-
-&4 If a loadable module is executed from a module (or shell), the logic state
-   is maintained when returning to the parent. This allows sub-modules to
-   return error levels to the parent modules without using global variables.
-
-*2 If a module named FEEDBACK.BIN exists in the EXEC directory, it will be
-   executed whenever a user sends e-mail to user #1 (with the exception of
-   validation feedback). If the module sets the logic state to FALSE, then
-   the feedback will be aborted.
-
-!5 When the day passes midnight (new day) while a user is online, his/her
-   daily stats (e-mails per day, posts per day, free credits, etc) are reset
-   immediately.
-
-*3 New 'P'urge user command from the Sysop's e-mail and reading messages
-   menus.
-
-*4 New 'N'ext un-read message command from reading e-mail prompt.
-
-&2 If a user uploads a file and that user is then deleted and another user
-   then logs on as 'New' with the old users name and the file is subsequently
-   downloaded, the new user will not receive the credit award.
-
-!5 Fixed bug in daily mail maintenaince that would corrupt memory and the
-   mail index file in the 16-bit DOS 2.3 beta version if there were over 3276
-   messages in the e-mail database. No effect on the 32-bit versions.
-
-!9 Fixed bug that would potentially crash the process if first user to logon
-   was a new user and hung-up during the new-user feedback.
-
-!4 Fixed bug that would potentially crash the process if a DORINFO*.DEF door
-   was run with no timed events configured.
-
-!0 If SCFG->Message Options->Users Can View Deleted Messages was set to "No",
-   and a user delete a post, the current message number skipped over the next
-   message.
-
-!1 If the Internet toggle option for a sub-board is set to "Yes", replies are
-   always posted to "All" - reply-to-user name is not prompted for.
-
-***********************************
-May 30, 1997 Version 2.30a Released
-***********************************
-
-!2 SBBS4OS2 status bar would disappear sometimes (fixed by Enigma by shortening
-   status bar to 79 chars instead of 80).
-
-!9 SBBS4OS2 would occassionally display output very slowly (fixed by Enigma
-   by adding time-slice yields to various console loops).
-
-!4 SBBS4OS2 would get non-uppercase filenames confused on HPFS partitions
-   (fixed by Enigma by converting all filenames to uppercase).
-
-!3 Internal message editor would continue to display first line of message when
-   using the up arrow (fixed by Enigma).
-
-!6 When SBBS.EXE/SBBS4OS2.EXE returned with a non-zero errorlevel (e.g.
-   incoming FAX or whatever), the NODE.DAB was closed prematurely, posssibly
-   causing errrors (fixed by Enigma).
-
-*5 IP logging of telnet connections (requires "TEL FROM" in connect string)
-   to detailed log file and user note field (added by Enimga).
-
-*5 IP trash can (TEXT\IP.CAN) for telnet connections now supported
-   (added by Enigma).
-
-!5 Possible crash (GPF) cause in internal message editor when clearing (/CLR)
-   a message when not on the last line of the message (fixed by Enigma).
-
-****************************************
-September 5, 1997 Version 2.30b Released
-****************************************
-
-!8 Fixed Y2K bugs in QWK, Fido, and log filenames where a 2-digit year
-   is used (would have used 100 in some places for the year 2000). When parsing
-   a 2-digit year, a 100-year window is used with 1970 as the pivot point.
-   e.g. "69" is assumed to refer to 2069, "70" is assumed to refer to 1970.
-
-&4 Birthdates are still stored in MM/DD/YY format. But if a user's age is
-   calculated to be more than 90, then 90 is subtracted from the calculated age
-   e.g. A user born in 01/01/00 is assumed to have been born in 2000, not 1900.
-
-*3 New @-codes: REV (Synchronet revision), CONN (current connection),
-   LOCATION (system location), TNODES (total nodes on system),
-   HOST (same as CPU), CID and IP (Caller-ID or user IP addr).
-
-*1 Down-arrow at a pause prompt now moves down one line at a time.
-
-*1 'Q' at the Pause prompt aborts the display (same as 'N' or Ctrl-C).
-
-*1 TAB (Ctrl-I) now works like CR (enter) when at string prompts.
-   i.e. you can now "TAB" from the NN: prompt to the PW: prompt in a
-   full-screen/ANSI login.
-
-!4 Creating REP packets that contained messages with "Replied-to" numbers
-   larger than 7-digits (some OLRs apparently send large bogus numbers in
-   this field), would corrupt the packet. When attempting to import such a
-   corrupted packet into an SBBS system, the error message was garbled.
-
-!1 Only the last line of an inter-node telegram was logged to the system
-   activity log. Now the entire telegram is logged.
-
-!1 High-priority input is no longer assumed when in RAW input mode (Ctrl-Z).
-
-!5 Guest account ('G' restriction) would save the real user's name in the
-   database (if asked during login via logon module). If the user then hungup
-   and called back and logged on as "New", they would be unable to use their
-   real name (if duplicate real names are disallowed in SCFG). The real name
-   field is now cleared upong logoff (for 'G' restricted users).
-
-!0 If a user hung-up without fully logging on (during the new user process,
-   for example), an inter-node message was sent to all active nodes saying that
-   he/she logged off (even though there was never a "logon" anouncment).
-
-!1 The number of posts read statistic was not being properly reset for QWKnet
-   node ('Q' restricted user) calls.
-
-!0 If EXEC_XTRN was called from a loadable module or shell, the node status was
-   not automatically changed back to "User at external program menu".
-
-!3 SBBS4OS2 created an invalid EXITINFO.BBS (created with DORINFOx.DEF). Would
-   cause doors that used this file to behave strangely or fail to function.
-
-&4 Changed NOPEN/NODEDAB retry counter from 500 (which could take several
-   minutes on some systems) to 50 (more like several seconds).
-
-!0 Hitting 'A' from a local node WFC no longer tries to answer a call.
-
-****************************************
-December 14, 1999 Version 2.30c Released
-****************************************
-
-*3 New @-codes: QWKID (System QWK-ID), INETADDR (System's Internet Address),
-   FIDOADDR (System's primary FidoNet address).
-
diff --git a/docs/sbbsecho.html b/docs/sbbsecho.html
deleted file mode 100644
index 938aebed1a..0000000000
--- a/docs/sbbsecho.html
+++ /dev/null
@@ -1,633 +0,0 @@
-
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<title>Synchronet's FidoNet Packet Tosser Documentation</title>
-</head>
-
-<body>
-<!--webbot bot="Include" U-Include="_borders/top.htm" TAG="BODY" startspan -->
-
-<a href="http://www.synchro.net"><img border="0" src="images/synclogo_fancyred.gif" alt="Synchronet BBS - Multinode Bulletin Board Software" width="626" height="86"></a>
-
-<hr>
-
-<!--webbot bot="Include" endspan i-checksum="23126" -->
-
-<h1> Synchronet's FidoNet Packet Tosser Documentation</h1>
-<pre><b>Table of Contents</b>
-
-<a href="#Introduction">Introduction</a>
-<a href="#Terminology">Terminology</a>
-<a href="#Installation">Installation</a>
-<a href="#AREAS.BBS">AREAS.BBS Format</a>
-<a href="#Configuration">Configuration</a>
-<a href="#RunningSBBSecho">Running SBBSecho</a>
-<a href="#CommandLineSwitches">Command Line Switches</a>
-<a href="#AREAFIXCommands">Area Manager Remote Commands</a></pre>
-<h2><a name="Introduction">
-<br>
-Introduction</a></h2>
-<pre>SBBSecho is a full-blown FTN echomail program (tosser/scanner) for Synchronet
-BBS version 2.0 and higher. SBBSecho is level III implementation of the SMB
-v2.00 specification including support for HyperAllocated and LZH compressed
-message bases.</pre>
-<pre>It is intended to replace FTSC-1 (*.MSG) compatible echomail programs (GEcho,
-Squish, FastEcho, Alexi/Mail, etc.) and SBBSFIDO with a single program
-incorporating the standard features of echomail programs without the .MSG
-phase (consuming disk space and time).</pre>
-<pre>You will not need to use SBBSFIDO (*.MSG import/export utility for Synchronet)
-or any echomail programs after you have installed SBBSecho.
-
-<a href="#TOC">Back to Table of Contents</a></pre>
-<h2><a name="Terminology">Terminology</a></h2>
-<pre><b>FTN</b>
-
-FidoNet Technology Network: Any network using FidoNet standards for addressing,
-mail packets, mail sessions, node lists, etc.</pre>
-<pre><b>Zones, Nets, Nodes, and Points?<u>
-</u></b>
-FTN node addresses are like phone numbers, they are made up of multiple
-components (four to be exact). The components are: zone, net, node, and point.
-Each component is specified by a decimal (base-10) number, separated by symbols
-(no spaces):</pre>
-<pre><b>	Zone:Net/Node.Point</b></pre>
-<pre>The zone represents the continent (if FidoNet) or the network number (if other
-FTN network). All FidoNet nodes in North America have a zone 1 address. When
-the zone is specified in an address, it is the first component and must be
-followed by a colon. If the zone is not present in an address, the local
-system's zone is assumed.</pre>
-<pre>The net represents the network number of the FTN node. Duplicate net numbers
-may exist between zones. If the net number is not present, the local system's
-net is assumed.</pre>
-<pre>The node number specifies an exact FTN node within a network. The node number
-is the only required element of an FTN node address.</pre>
-<pre>The point is an optional component which specifies a sub-node that does not
-directly receive mail and is also not listed in the main FTN node list, but
-instead gets all its mail from its boss-node (zone:net/node.0). When the point
-is not specified, 0 (zero) is assumed (i.e. 1:2/3 and 1:2/3.0 are identical)
-which indicates the system is not a point node address.</pre>
-<pre>A 2D (2 dimensional) address refers to an FTN address containing just the
-net and node numbers (i.e. 103/705).</pre>
-<pre>A 3D (3 dimensional) address refers to an FTN address containing the zone,
-net, and node numbers (i.e. 1:103/705), specifically excluding the point number
-if it exists.</pre>
-<pre>A 4D (4 dimensional) address refers to an FTN address containing the zone,
-net, node, and optional point numbers (i.e. 1:103/705.1).</pre>
-<pre>A 5D (5 dimensional) address refers to an FTN address consisting of a standard
-3D or 4D address with an appended &quot;@domain&quot; (i.e. 1:103/705@fidonet.org).
-
-<b>Attach or FLO Mailer?<u>
-</u></b>
-If you are using FrontDoor, InterMail, D'bridge, SEAdog, Dutchie, or any other
-ArcMail *.MSG attach-style mailer, you are using what we will refer to as an
-&quot;Attach Mailer&quot;.</pre>
-<pre>If you are using BinkleyTerm, Portal of Power, or any other FLO/CLO/HLO/DLO
-style mailer, you are using what we will refer to as a &quot;FLO Mailer&quot;.</pre>
-<pre>Both types are supported equally by SBBSecho.</pre>
-<pre><b>NetMail<u>
-</u></b>
-Point-to-point (usually person-to-person) direct or routed messages.</pre>
-<pre><b>EchoMail<u>
-</u></b>
-Group or conference messages of a particular subject matter. Usually
-distributed on a regional or continental (e.g. FidoNet Zone 1 backbone) scale.
-FTN style echomail areas have a unique area tag (name) associated with them to
-distinguish each area from the others.</pre>
-<pre><b>Packet<u>
-</u></b>
-An FTN packet is a group of one or more messages contained in a single
-uncompressed file. Packets may contain echomail and/or netmail messages.
-Packets usually have a .PKT extension, although outbound NetMail packets for
-FLO Mailers will have .?UT extensions (where ? is either O, C, D, or H). The
-first eight characters of the filename may be anything, but are usually decimal
-digits representing the date and time the packet was created. SBBSecho creates
-temporary outbound packet files with a .PK_ extension and then renames them to
-.PKT when they're completed. If you find any .PK_ files in your outbound
-directory, don't worry. SBBSecho will find them the next time it is run and
-continue packing them and sending them on their way.</pre>
-<pre><b>Bundle</b>
-
-An FTN bundle is a single file archive of one or more (usually compressed)
-packets. Bundles will have file extensions where the first two characters
-represent the day of the week the bundle was created (MO, TU, WE, TH, FR, SA,
-and SU) and the third character of the extension is a number or letter. The
-first eight characters of the filename may be anything, but are usually
-hexadecimal digits representing the FTN node address (or relative address) of
-the system that created the bundle. SBBSecho changes the file extension of bad
-inbound bundles to .MO_, .MO-, or .MO.</pre>
-<pre><b>Areafix/Area Manager</b>
-
-Areafix is a synonym for area manager (the very first FTN area manager
-program was called AreaFix). Area manager capabilities (remote adding/removing
-of areas, changing compression type, etc) are built into SBBSecho, so therefore
-no external area manager program is required. If you are not an FTN hub, then
-the area manager portion of SBBSecho will probably not get any use on your
-system.</pre>
-<pre><a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="Installation">Installation</a></h2>
-<pre>To begin, copy the SBBSECHO.EXE, ECHOCFG.EXE, and AREAMGR.HLP files into your
-Synchronet EXEC directory (usually C:\SBBS\EXEC), copy the SBBSECHO.CFG file
-into your Synchronet CTRL directory (usually C:\SBBS\CTRL), and copy the
-SBBSECHO.DOC file into your Synchronet DOCS directory (usually C:\SBBS\DOCS).</pre>
-<pre>If you plan on using the 32-bit DOS, OS/2, or Windows 95/NT version of
-SBBSecho, you will need to put the appropriate SBBSECHO.EXE file into your
-Synchronet EXEC directory (unzip OS2.ZIP for the OS/2 version, DOS4G.ZIP for
-the 32-bit DOS version, or WIN32.ZIP for the Windows 95/NT version). If
-you get memory allocation errors running the 16-bit DOS version or desire
-improved performance, you will want to run one of the 32-bit versions.</pre>
-<pre>Add the SBBSCTRL and SBBSNODE environment variables to your AUTOEXEC.BAT.
-Example:</pre>
-<pre><b>SET SBBSCTRL=C:\SBBS\CTRL
-SET SBBSNODE=C:\SBBS\NODE1</b></pre>
-<pre>Note: The node number used for the SBBSNODE environment variable is not
-      important, use your NODE1 directory.</pre>
-<pre>These environment variables must be present for SBBSECHO and ECHOCFG to
-function correctly. Type &quot;SET&quot; at the DOS prompt to be sure they are listed
-correctly.</pre>
-<pre>You will also need to modify your existing MAILER.BAT (or FDRUN.BAT, IMRUN.BAT,
-etc) file to accomodate the use of SBBSecho, or replace it with the MAILER.BAT
-included with SBBSecho. If this is your first time setting up FidoNet, you will
-not currently have a MAILER.BAT file set up, so use the one that is included
-and modify it so that it reflects the proper drive letters and directories.</pre>
-<pre>Next, SBBSecho expects to find the file AREAS.BBS in your Synchronet DATA
-directory (usually C:\SBBS\DATA) unless you have overridden the default name
-and/or location using the ECHOCFG program.  The format of this file is very
-similar to the standard AREAS.BBS (which many echomail programs use, or can
-at least export their native area file to this format - i.e. GEcho's GSETUP).</pre>
-<pre>SCFG can also export your sub-boards to AREAS.BBS, but you're probably better
-off modifying the AREAS.BBS file you're already using (if you are) or
-converting your current echomail program's area file to AREAS.BBS. This is
-because SCFG assumes the sub-board short name will be the same as the area's
-tag (as shown in your echo list), but this may not always be the case - unless
-you imported an AREAS.BBS or FIDONET.NA file into SCFG to begin with).
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="AREAS.BBS">AREAS.BBS Format</a></h2>
-<pre>Lines beginning with a semicolon (;) are considered comments, and are ignored.</pre>
-<pre>Each line is in the following format:</pre>
-<pre><b><i>CODE	TAG	UPLINKS</i></b></pre>
-<pre><i>Where:</i>
-	<b>CODE</b> 	is the internal code of the sub-board. Any unrecognized internal
-		codes are considered &quot;Passthru&quot; (not imported to your BBS).</pre>
-<pre>	<b>TAG</b> 	is the FidoNet tag as shown in your echo list (i.e. FIDONET.NA).
-		If this is '*', then it will be considered a &quot;badecho&quot; area
-		and will receive all messages for areas not otherwise specified
-		in this file.</pre>
-<pre>	<b>UPLINKS</b> is a list of FidoNet addresses which you wish to export mail
-		to. At the very least, your hub's address should be listed
-		here. Your address should NOT be listed here. If multiple
-		addresses are specified, you should specify the full 3D address
-		for each.</pre>
-<pre><b>AREAS.BBS Example:</b></pre>
-<pre>SBBS		SYNCHRONET	1:3615/50
-SYNCDATA	SYNCDATA	1:3615/50
-SYNC_SYS	SYNC_SYSOPS	1:3615/50</pre>
-<pre>The amount of spacing between each element in the line is not important. Each
-line can be up to 1000 characters in length.</pre>
-<pre>So if your OLD AREAS.BBS file is in .MSG format (for example):</pre>
-<pre>C:\FD\ECHO\SBBS 	SYNCHRONET	1:3615/50</pre>
-<pre>It must be changed to match the example given above!
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="Configuration">Configuration</a>
-</h2>
-<pre>In order to set up SBBSecho for your system you must run the included ECHOCFG
-program. It should already be located in your EXEC directory. You may want to
-put your EXEC directory in your DOS search path so you can execute SBBSECHO and
-ECHOCFG from any drive and directory on your system.</pre>
-<pre>Multiple configuration files can be used (but isn't usually required) for
-multi-mailer systems. The default configuration filename is SBBSECHO.CFG
-located in your Synchronet CTRL directory. You can override this by specifying
-the name and location of the configuration file on the SBBSECHO and ECHOCFG
-command lines. Example:</pre>
-<pre><b>ECHOCFG D:\ECHO1.CFG
-SBBSECHO D:\ECHO1.CFG</b></pre>
-<pre>If you do not specify a configuration file, ECHOCFG and SBBSECHO will use
-SBBSECHO.CFG located in your Synchronet CTRL directory.</pre>
-<pre>Upon running ECHOCFG you will be brought to the main menu of the configuration
-program. The path and filename of the configuration file being modified will
-appear at the top of the menu. Following are screen captures of available menus
-within the configuration program and an explanation of the options contained on
-each of them.</pre>
-<pre><img border="0" src="images/sbbsecho_main.gif" width="652" height="331"></pre>
-<pre><b>Mailer Type:
-</b>	Selecting this option will toggle between the mailer types supported
-	by SBBSecho, either FrontDoor (message attach) type mailers or Binkley
-	(FLO file) type mailers.  Choose the one that matches your front-end
-	mailer type.</pre>
-<pre><b>Maximum Packet Size:</b>
-	This option allows you to set the maximum size of each outgoing
-	echomail packet.
-
-<b>Maximum Bundle Size:
-</b>	Mail packets are normally packed into what are called &quot;bundles&quot; (unless
-	a node is set up to receive uncompressed mail packets).  This option
-	allows you to specify the maximum size of each outgoing mail bundle.</pre>
-<pre><b>Areafix Failure Notification:
-</b>	This is the user number of the person where notification of Areafix
-	failures should be sent.  Such failures include nodes which are not
-	configured for areafix, nodes using incorrect areafix passwords, and
-	the like.  Setting this to 0 will disable this option.</pre>
-<pre><b>Nodes...
-</b>	This option allows you to add, remove, and configure nodes that you
-	will be sending mail to.  Selecting this option will bring you to
-	a sub-menu which will look similar to the following:</pre>
-<blockquote>
-  <blockquote>
-<pre><img border="0" src="images/sbbsecho_nodes.gif" width="652" height="331"></pre>
-  </blockquote>
-</blockquote>
-<pre>	At the Nodes... sub-menu, pressing the INSert key will allow you to
-	add a new node, pressing the DELete key will remove the currently
-	highlighted node number, and pressing ENTER on the currently
-	highlighted node will allow you to edit the options for that particular
-	node from a menu like the following (note that the node number you are
-	editing appears at the top of the window):</pre>
-<blockquote>
-  <blockquote>
-<pre><img border="0" src="images/sbbsecho_node_settings.gif" width="652" height="331"></pre>
-<pre><b>Address:
-</b>	This is the address of the node you are editing, selecting it
-	will allow you to change this to a different address. Using
-	the &quot;ALL&quot; wildcard in place of one of the address components
-	will allow you to configure settings for all nodes that meet
-	that specification (e.g. all nodes in zone 1 can be specified
-	as 1:ALL or all nodes in zone 1, net 103 can be specified
-	as 1:103/ALL).</pre>
-  </blockquote>
-</blockquote>
-<pre><b>	Archive Type:</b>
-		This is the compression type to be used when packing mail
-		bundles for this node.	Selecting this option will allow you
-		to choose from a menu of currently configured archive types,
-		like the following:</pre>
-<blockquote>
-  <blockquote>
-<pre><img border="0" src="images/sbbsecho_node_arctype.gif" width="652" height="331"></pre>
-  </blockquote>
-</blockquote>
-<pre>		Selecting &quot;None&quot; will specify that this node is to receive
-		uncompressed packets (no bundles).</pre>
-<pre><b>	Packet Type:</b>
-		This is the packet type that will be used when creating mail
-		packets for this node. The default packet type used by SBBSecho
-		is 2+.	If you are a &quot;point&quot; address (e.g. 1:100/100.1) you
-		should use either a type 2+ or 2.2 packet since type 2 packets
-		do not support point numbers. Selecting this option will allow
-		you to choose from a menu of currently supported packet types:</pre>
-<blockquote>
-  <blockquote>
-<pre><img border="0" src="images/sbbsecho_node_packettype.gif" width="652" height="331"></pre>
-  </blockquote>
-</blockquote>
-<pre><b>	Packet Password:
-</b>		This is a password that will be placed into each outgoing mail
-		packet for this node.  Passwords are normally used for extra
-		security when sending and receiving mail packets.  This node
-		must also have the same packet password defined for your
-		address and SBBSecho must be set up for secure operation (set
-		in the 'Toggle Options' sub-menu) in order for this feature to
-		function properly.</pre>
-<pre><b>	Areafix Password:
-</b>		This is the password that will be required by this node (in
-		the subject field) when it sends messages to the area manager
-		(AreaFix).</pre>
-<pre><b>	Areafix Flags:
-</b>		When additional echo lists have been defined (from the
-		'Additional Echo Lists...' sub-menu) these flags determine
-		which echo lists can be used by this node when processing area
-		manager add requests.</pre>
-<pre><b>	Status:
-</b>		This option determines the netmail status that will be set
-		when SBBSecho sends out an areafix message or a file attach.
-		Selecting this option toggles between None, Crash, and Hold
-		status.</pre>
-<pre><b>	Direct:
-</b>		When set to 'Yes' this option will add a Direct kludge line
-		to messages that SBBSecho sends out (or create DLO/DUT files
-		for FLO mailers).</pre>
-<pre><b>	Passive:
-</b>		Setting this option to 'Yes' will prevent messages from being
-		sent to this node without the need for altering the AREAS.BBS
-		file.  This is useful for temporarily shutting off the messages
-		to this node.  This option can be toggled on and off remotely
-		via an area manager request.</pre>
-<pre><b>	Send Notify List:
-</b>                This determines whether or not this node is sent a Notify List
-                when using that command line option in SBBSecho.
-                A Notify List is a netmail sent to the system operator of the
-                node showing options set for the node as well as connected
-                areas.
-
-<b>Paths...
-</b>	This option allows you to configure the paths and filenames which are
-	used by SBBSecho.  Selecting this option will bring you to the
-	following sub-menu:</pre>
-<blockquote>
-  <blockquote>
-<pre><img border="0" src="images/sbbsecho_paths.gif" width="652" height="331"></pre>
-  </blockquote>
-</blockquote>
-<pre><b>	Inbound Directory:
-</b>		This is the directory where SBBSecho should look for inbound
-		mail packets.  This is normally taken from whatever has been
-		set in the SCFG program.</pre>
-<pre><b>	Secure Inbound (optional):
-</b>		This is an optional directory where SBBSecho should look for
-		secure inbound mail packets.</pre>
-<pre><b>	Outbound Directory:
-</b>		This is the directory where SBBSecho will place outgoing mail
-		packets and bundles.</pre>
-<pre><b>	Area File:
-</b>		This is the path and filename of the file that SBBSecho will
-		use as it's AREAS.BBS file.  By default SBBSecho looks for
-		the file AREAS.BBS in the data directory defined in SCFG.</pre>
-<pre><b>	Log File:
-</b>		This is the path and filename of the file that SBBSecho will
-		use when logging events.  By default SBBSecho uses the file
-		SBBSECHO.LOG in the data directory defined in SCFG.
-
-<b>Log Options...
-</b>	This list allows you to toggle what events SBBSecho should place into
-	the logfile.  Selecting this option will bring you to the following
-	sub-menu:</pre>
-<blockquote>
-  <blockquote>
-<pre><img border="0" src="images/sbbsecho_logoptions.gif" width="652" height="331"></pre>
-  </blockquote>
-</blockquote>
-<pre>	Selecting ALL, NONE, or DEFAULT will toggle all of the options to
-	'Yes', 'No', or to their default states, respectively.
-
-<b>Toggle Options...
-</b>	These options allow you to toggle various features in SBBSecho.
-	Selecting this option will bring you to the following sub-menu:</pre>
-<blockquote>
-  <blockquote>
-<pre><img border="0" src="images/sbbsecho_toggleoptions.gif" width="652" height="331"></pre>
-  </blockquote>
-</blockquote>
-<pre><b>	Secure Operation:
-</b>		When set to 'Yes', SBBSecho will compare the origin of any
-		incoming mail packets to the nodes in the AREAS.BBS file
-		as messages are imported.  If a packet password has been
-		defined for that node, it will also be compared to the
-		password contained in the mail packet.	Packets and messages
-		failing this security will not be imported.</pre>
-<pre><b>	Swap for Executables:
-</b>		SBBSecho relies on external executable programs for extracting
-		and compressing mail bundles.  This option tells SBBSecho to
-		swap out of memory when running any of these executables,
-		giving the executable programs more free memory to run in.
-		This option is only used in the 16-bit DOS flavor of SBBSecho.</pre>
-<pre><b>	Fuzzy Zone Operation:
-</b>		Some mail programs do not create netmail messages with zone
-		information (INTL kludge line) or may only do so when sending
-		between zones. This is a problem for systems that receive
-		netmail for multiple addresses with different zones (AKAs with
-		different zone numbers). Setting this option to &quot;Yes&quot; allows
-		SBBSecho to guess what the correct originating and destination
-		zone is based on the net and node portions of the destination
-		address in netmail message.</pre>
-<pre><b>	Store PATH Lines in Message Base:
-</b>		When set to 'Yes', SBBSecho will store the PATH lines from
-		incoming echomail in the Synchronet message base headers (not
-		the body text). This option is useful for troubleshooting
-		routing/duplicate message problems.</pre>
-<pre><b>	Store SEEN-BY Lines in Message Base:
-</b>		When set to 'Yes', SBBSecho will store the SEEN-BY lines from
-		incoming echomail in the Synchronet message base headers (not
-		the body text).  This option is useful for troubleshooting
-		routing/duplicate message problems.
-
-<b>	Store Unknown Kludge Lines in Message Base:
-</b>		When set to 'Yes', SBBSecho will store any unknown kludge lines
-		from incoming echomail in the Synchronet message base headers.
-		This option is useful for troubleshooting problems.</pre>
-<pre><b>	Allow Nodes to Add Areas in the AREAS.BBS List:
-</b>		When set to 'Yes', SBBSecho will allow nodes to add areas
-		(via area manager) which are listed in the AREAS.BBS list.
-		When set to 'No', SBBSecho will only allow nodes to add areas
-		from any additionally configured echo lists which they have
-		access to.
-
-<b>Archive Programs...
-</b>	This option allows you to add or remove archive programs from SBBSecho.
-	Selecting this option will bring you to the following menu:</pre>
-<blockquote>
-  <blockquote>
-<pre><img border="0" src="images/sbbsecho_archiveprgs.gif" width="652" height="331"></pre>
-  </blockquote>
-</blockquote>
-<pre>	At the Archive Programs... sub-menu, pressing the INSert key will allow
-	you to add a new archive program. Pressing the DELete key will remove
-	the currently highlighted archive program. And pressing ENTER on the
-	currently highlighted archive program will allow you to edit the
-	options for that particular program from a menu like the following (note
-	that the name of the archive program you are editing appears at the top
-	of the window):</pre>
-<blockquote>
-  <blockquote>
-<pre><img border="0" src="images/sbbsecho_archiveprgs_zip.gif" width="652" height="331"></pre>
-  </blockquote>
-</blockquote>
-<pre><b>	Packer Name:
-</b>		This is the name that will be used to reference this particular
-		archiving program.  This is also the name that should be used
-		by nodes using areamanger to change their compression type
-		remotely.</pre>
-<pre><b>	Hexadecimal ID:
-</b>		This is a hexadecimal identifier that SBBSecho should look for
-		when determining the compression type used on incoming bundles.
-		In this example we are looking for the ID 'PK', '50' is the
-		hexadecimal value for the letter 'P' and '4B' is the
-		hexadecimal value for the letter 'K'.</pre>
-<pre><b>	Offset to Hex ID:
-</b>		This is the byte offset (from the beginning of the file) where
-		the hexadecimal ID for this archive program can be located.
-		In this example we are looking at an offset of 0 bytes from the
-		beginning of the file.
-
-<b>	Pack Command Line:
-</b>		This is the command line used by this archiving program for
-		compressing files.  The '%f' command line specifier will expand
-		to the name of the compressed file, the '%s' command line
-		specifier will expand to the name of the file being compressed.</pre>
-<pre><b>	Unpack Command Line:
-</b>		This is the command line used by the archiving program for
-		Uncompressing files.  The '%f' command line specifier will
-		expand to the name of the compressed file, the '%s' command
-		line specifier will expand to the path where the file is
-		being extracted to.
-
-<b>Additional Echo Lists...
-</b>	This option allows you to add and remove additional echo lists which
-	can be used by SBBSecho for area manager add requests.	Normally these
-	will be used in addition to your AREAS.BBS file.  If you have the
-	toggle option 'Allow Nodes to Add Areas in the AREAS.BBS List' set to
-	'No', you MUST create at least one additional echo list if you wish
-	to allow other nodes to add areas via area manager requests.</pre>
-<pre>	Selecting this option will bring you to a sub-menu listing any
-	additional echo lists you currently have defined:</pre>
-<blockquote>
-  <blockquote>
-<pre><img border="0" src="images/sbbsecho_additionalecho.gif" width="652" height="331"></pre>
-  </blockquote>
-</blockquote>
-<pre>	Pressing the INSert key will allow you to add a new echo list, pressing
-	the DELete key will remove the currently highlighted echo list, and
-	pressing ENTER on the currently highlighted echo list will allow you to
-	edit information about that list:</pre>
-<blockquote>
-  <blockquote>
-<pre><img border="0" src="images/sbbsecho_additionalecho_list.gif" width="652" height="331"></pre>
-  </blockquote>
-</blockquote>
-<pre><b>	Echo List Path/Name:
-</b>		This is the full path and filename of the echo list you are
-		defining.  This list should contain the areatag names of areas,
-		one per line, with any comments separated from the areatag by
-		at least one space.</pre>
-<pre><b>	Hub Address:
-</b>		This is the address of the hub of the conferences contained
-		in this list.  If an area is remotely added from this list
-		(using Areafix) this address is automatically added to the
-                AREAS.BBS file.</pre>
-<pre><b>	Forward Password:
-</b>		This is the area manager password to use when forwarding
-		requests.
-
-<b>	Forward Requests:
-</b>		Setting this option to 'Yes' will cause SBBSecho to send a
-		request to the Hub Address specified to turn on an area from
-		this list.  This happens when users remotely add areas using
-		Areafix and is not necessary if you are already receiving the
-		conferences in this list (i.e.: from Planet Connect).
-</pre>
-<pre><b>	Echo List Flags:
-</b>		These are the flags required for a node to be able to gain
-		access to this particular echo list.  These flags are defined
-		for each node from the 'Nodes...' sub-menu.</pre>
-<pre>		Selecting this option will bring you to a sub-menu where you
-		may add and remove flags for this echo list.</pre>
-<blockquote>
-  <blockquote>
-<pre><img border="0" src="images/sbbsecho_additionalecho_list_tag.gif" width="652" height="331"></pre>
-  </blockquote>
-</blockquote>
-<pre><b><a href="#TOC">Back to Table of Contents</a></b></pre>
-<h2><a name="RunningSBBSecho">Running SBBSecho</a></h2>
-<pre>The command line for executing SBBSECHO is very similar to SBBSFIDO, although
-some command line switches have been eliminated.</pre>
-<pre>We suggest you use the following command lines:</pre>
-<pre>For importing:</pre>
-<pre>	<b>C:\SBBS\EXEC\SBBSECHO /LES!</b></pre>
-<pre>For exporting (Attach Mailer):</pre>
-<pre><b>	C:\SBBS\EXEC\SBBSECHO /LIN</b></pre>
-<pre>For exporting (FLO Mailer):</pre>
-<pre><b>	C:\SBBS\EXEC\SBBSECHO /LINF</b></pre>
-<pre>Remove all references to SBBSFIDO from your batch files (if you have any).
-See the included MAILER.BAT as an example.</pre>
-<pre><a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="CommandLineSwitches">Command Line Switches</a>
-</h2>
-<pre><b>usage: sbbsecho [cfg_file] [/switches] [sub_code]</b></pre>
-<pre>where: cfg_file is the filename of config file (default is ctrl\sbbsecho.cfg)
-       sub_code is the internal code for a sub-board (default is ALL subs)</pre>
-<pre>SBBSecho will execute normally (for Attach Mailer operation) with NO command
-line switches required. Command lines switches are used to cause SBBSecho to
-_do_ or _not_ do specific operations. When used, command line switches
-are prepended by a slash (/) character. Multiple switches can be specified
-in one grouping (multiple /switch sets are supported, but not required).
-Switch letters are not case sensitive. The available switch letters and their
-descriptions are:</pre>
-<pre>P: Do not import inbound packets or extract inbound bundles
-X: Do not delete inbound packets (*.PKT) after they're imported
-N: Do not import inbound netmail (packetized netmail and *.MSG)
-D: Do not delete inbound netmail (*.MSG) after they're imported
-I: Do not import inbound echomail
-E: Do not export outbound echomail
-M: Ignore echomail pointers (export all locally created echomail messages)
-U: Update echomail pointers only (export no echomail messages)
-T: Do not update echomail pointers (test export)
-H: Export all echomail messages (including messages imported from FidoNet)
-J: Ignore received bit on netmail (import even though flagged as received)
-L: Create log file (data\sbbsecho.log)
-R: Create report of import totals (text\sbbsecho.msg)
-B: Import locally created netmail too (ignore the local flag)
-A: Export ASCII characters only (override individual sub-board ex-ASCII strip)
-F: Create packets for outbound netmail (necessary for FLO Mailer operation)
-G: Generate notify lists
-Y: Import netmail for unknown users to sysop (user #1)
-O: Import all netmail regardless of destination address (unless flagged local)
-S: Import private echomail override (strip private flag)
-=: Change existing tear lines to === when exporting
-!: Notify users via telegram of received echomail messages</pre>
-<pre><a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="AREAFIXCommands">AREAFIX Commands</a>
-</h2>
-<pre>Remote area manager, or areafix, commands are used by uplinks to be able to
-turn echo areas off and on, list currently connected areas, and more.</pre>
-<pre>The following text is from the file AREAMGR.HLP which, after installation of
-SBBSecho, should be located in your Synchronet EXEC directory.	It lists the
-area manager commands available to the nodes which have been configured using
-the ECHOCFG program:</pre>
-<pre>Address all requests to 'SBBSecho' or 'AreaFix' (without quotes).
-Your Area Manager password goes on the subject line.</pre>
-<pre>In the body of the message to Area Manager:</pre>
-<pre>[+]&lt;areaname&gt;         Connect an area
--&lt;areaname&gt;           Disconnect an area
-%HELP                 Request this message
-%LIST                 Request a list of areas available to you
-%QUERY                Request a list of areas to which you are connected
-%UNLINKED             Request a list of areas to which you are not connected
-%COMPRESSION &lt;type&gt;   Change the compression type (ARC/ARJ/LZH/PAK/SQZ/ZIP/ZOO)
-%PASSWORD &lt;password&gt;  Change your AreaMgr password
-%RESCAN 	      Request a rescan of newly added areas
-%ACTIVE 	      Reconnect all temporarily disconnected areas
-%PASSIVE	      Temporarily disconnect all connected areas
-%FROM &lt;address&gt;       Remote maintenance, must be the first command
-%+ALL		      Connect all available areas
-%-ALL		      Disconnect all areas
-[---]                 Everything below the tear line is ignored</pre>
-<pre>NOTE: A compression type of NONE is also supported for uncompressed packets.</pre>
-<pre><b><a href="#TOC">Back to Table of Contents</a></b></pre>
-<!--webbot bot="Include" U-Include="_borders/bottom.htm" TAG="BODY" startspan -->
-
-<hr>
-<p><b><a href="http://www.synchro.net/copyright.html">Copyright</a> � 2000 by </b> <a href="http://www.synchro.net/author.htm"><b>Rob Swindell</b><br>
-</a>
-
-<a href="http://www.synchro.net"><font size="2"><br>
-Synchronet BBS Software</font></a>  <font size="2">  (Synchronet)
-Version 3 is comprised of several documentation,<br>
-library, executable, and <a href="http://www.synchro.net/source.html">source code</a> 
-files, all of which are covered by the<a href="http://www.fsf.org/copyleft/gpl.html">
-<br>
-GNU General Public License</a>  with the exception of the following portions
-covered by<br>
-the <a href="http://www.fsf.org/copyleft/lesser.html">GNU Lesser General Public License</a>:
-SMBLIB and XSDK.<br>
-<br>
-Synchronet Version 2 (for DOS and OS/2) and its source code was released to the<a href="http://www.fsf.org/philosophy/categories.html#PublicDomainSoftware">
-<br>
-Public Domain</a>  by <a href="ftp://vert.synchro.net/main/sbbs/manifest.txt">Digital Dynamics</a> 
-in 1997 and remains Public Domain software today.<br>
-Synchronet Version 3 is not Public Domain software.</font></p>
-<p align="left"><font size="2"><a href="http://www.synchro.net/author.html">Rob Swindell<br>
-</a>PO Box 501<br>Yorba Linda, CA 92885<a href="http://www.synchro.net"><br>
-http://www.synchro.net</a>
-
-</font></p>
-<p align="left"><font size="2">For the complete Copyright Information please
-read the <a href="http://www.synchro.net/copyright.html">Copyright Documentation</a>
-.</font></p>
-
-<!--webbot bot="Include" endspan i-checksum="55766" -->
-</body>
-
-</html>
diff --git a/docs/security.html b/docs/security.html
deleted file mode 100644
index d0d9674947..0000000000
--- a/docs/security.html
+++ /dev/null
@@ -1,568 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<title>ARS Security</title>
-</head>
-
-<body>
-
-<!--webbot bot="Include" U-Include="_borders/top.htm" TAG="BODY" startspan -->
-
-<a href="http://www.synchro.net"><img border="0" src="images/synclogo_fancyred.gif" alt="Synchronet BBS - Multinode Bulletin Board Software" width="626" height="86"></a>
-
-<hr>
-
-<!--webbot bot="Include" endspan i-checksum="23126" -->
-
-<p><a name="top"></a><a href="sysop.html#TOC">Back to Table of Contents</a></p>
-
-<h2><a name="Introduction">[7.1] - Introduction to ARS
-Security</a></h2>
-<pre>ARS stands for Access Requirement Strings. Access requirement strings are used
-to specify the requirements of a user to have access to features/sections of a
-Synchronet BBS. The string can consist entirely of English key words and
-numbers or use short-hand symbols to fit a large number of security
-requirements into the 40 character space allowed for access requirement
-strings. Short-hand symbols and key words may be used interchangeably and
-combined in the same string. For clarity, it is suggested you use the key words
-whenever possible. The string syntax is as follows:
-
-<b>usage: [not] [parm] [not] [equal] &lt;value&gt; [or] [and] [...]</b>
-
-<i>where:</i> <b>not</b>      is the word &quot;NOT&quot; or the symbol '!' to specify reverse logic
-       <b>parm</b>     is one of any keywords (or short-hand symbols) that specifies
-                a specific required parameter (default is LEVEL)
-       <b>equal</b>    is the word &quot;EQUAL&quot;, &quot;EQUALS&quot;, the words &quot;EQUAL TO&quot;, or the
-                symbol '=' to specify exact equality required
-       <b>value</b>    the required value (for either minimum requirement or equality)
-       <b>or</b>       the word &quot;OR&quot; or the symbol '|' used to specify that ANY of two
-                or more parameter values MAY be met to match the requirement
-       <b>and</b>      the word &quot;AND&quot; or the symbol '&amp;' may be used for clarity in
-                reading when specifying that two or more parameter values MUST
-                be met to match the requirement</pre>
-<h2><a name="Keywords/Symbols">[7.2] - Key words and Symbols</a></h2>
-<pre><b>Key word      Symbol	Description
-</b>------------------------------------------------------------------------------
-AND		&amp;	More than one requirement (optional)
-NOT		!	Logical negation (e.g. NOT EQUAL)
-EQUAL		=	Equality required
-OR		|	Either of two or more parameters is required
-AGE		$A	User's age (years since birthdate, 0-255)
-ANSI		$[	User has ANSI terminal (no value argument)
-BPS		$B	User's current connect rate (bps)
-CREDIT		$C	User's number of credits in Kilobytes (0-65535)
-DAY		$W	Day of the week (Sun, Mon, Tue, etc. or 0-6)
-DIR		$J	Current file directory (Internal code or 1-65535)
-DOS			Current node is running SBBS4DOS (no value argument)
-EXEMPT		$X	Exemption flag (A-Z)
-EXPERT			User is in expert menu mode (no value argument)
-EXPIRE		$E	Days till user account expires (0-65535)
-FILE_CMDS		Number of executed file menu commands (0-65535)
-FLAG		$F	User's flag (1-4) and (A-Z)
-GROUP		$M	Current message group (1-65535)
-LASTON		$Y	Days since last logon (0-65535)
-LEVEL		$L	User's level (0-99)
-LIB		$I	Current file library (1-65535)
-LOCAL		$G	Logged on locally (no value argument)
-MAIN_CMDS		Number of executed main menu commands (0-65535)
-NODE		$N	Current node (1-250)
-OS2			Current node is running SBBS4OS2 (no value argument)
-PCR		$P	User's post/call ratio (0-100)
-QUIET			User is in quiet mode
-RANDOM		$Q	Random number between 0 and value argument (0-65535)
-REST		$Z	Restriction flag (A-Z)
-RIP		$*	User has RIP terminal (no value argument)
-SEX		$S	User's sex/gender (M or F)
-SUB		$H	Current message sub-board (Internal code or 1-65535)
-SYSOP			User has level 90 or temp sysop (no value argument)
-TIME		$T	Time of day (HH:MM, 0-23:59)
-TLEFT		$R	User's time left online (minutes, 0-255)
-TUSED		$O	User's time online this call (minutes, 0-255)
-UDR		$K	User's upload/download ratio (0-100)
-UDFR		$D	User's upload/download file ratio (0-100)
-USER		$U	User's number (1-xxxx)
-WIP			User has WIP compatible terminal (no value argument)</pre>
-<h2><a name="GeneralUsageExamples">[7.3] - ARS General Usage Examples</a></h2>
-<pre><b>General Example #1</b>
-
-LEVEL 60
-
-This string specifies that only users with a level of 60 OR HIGHER meet this
-requirement. The space between the level and the required value is optional:
-
-LEVEL60
-
-is functionally equivalent, but doesn't read as well. You may also use short
-hand symbols in place of key words to save space:
-
-$L 60
-
-is also functionally equivalent. Once again, the space between the short hand
-symbol and the required value is optional. If a parameter is not specified,
-the requirement is assumed to be LEVEL. So the following string:
-
-60
-
-is also valid and evaluates the same as the above strings.
-
-<b>General Example #2</b>
-
-NOT LEVEL 60
-
-This string specifies that only users with a level BELOW 60 will meet the
-requirement. The &quot;NOT&quot; key word can be include before or after the parameter:
-
-LEVEL NOT 60
-
-evaluates identically to the first string in this example.
-
-Short-hand symbols may be used to abbreviate the string:
-
-LEVEL !60
-
-$L!60
-
-!60
-
-have exactly the same meaning as the first string in this example.
-
-<b>General Example #3</b>
-
-LEVEL EQUAL 60
-
-This string specifies that only users with a level EQUAL TO 60 will meet
-this requirement. The key word &quot;EQUALS&quot; or the combination &quot;EQUAL TO&quot; may
-be used in place of &quot;EQUAL&quot; if preferred:
-
-LEVEL EQUALS 60
-
-and
-
-LEVEL EQUAL TO 60
-
-are both functionally equivalent to the first string in this example. Again,
-short-hand symbols may be used to make the string shorter:
-
-LEVEL = 60
-
-evaluates identically to the above example strings and the space on either side
-of the '=' symbol are also optional:
-
-LEVEL=60
-
-is valid and may be preferred by some sysops. Since level is the default
-parameter type, the following string is also valid:
-
-=60
-
-<b>General Example #4</b>
-
-LEVEL 60 AND FLAG 1A
-
-This string indicates that the user must have a level of 60 or higher AND have
-the flag 'A' from flag set #1. The user must meet both requirements in order to
-be considered as meeting all the requirements of the string. The &quot;AND&quot; portion
-of the string is only included for clarity in reading and is optional:
-
-LEVEL 60 FLAG 1A
-
-has the same meaning, but may be confusing when read. When specifying a flag
-from flag set #1, the set number may be eliminated:
-
-LEVEL 60 AND FLAG A
-
-is functionally the same and is the preferred method of referring to flags from
-flag set #1. When specifying the flag set, spaces can be on either side of
-the number, or eliminated entirely:
-
-LEVEL 60 AND FLAG1 A
-
-and
-
-LEVEL 60 AND FLAG 1 A
-
-and
-
-LEVEL 60 AND FLAG1A
-
-have the same meaning as the first string in this example, but are probably
-not as easy to read as the second string in this example.
-
-The following strings all have the same meaning as the first string in this
-example but have been shortened using symbols and other short-cuts:
-
-LEVEL 60 &amp; $F A
-
-$L60 AND $FA
-
-$L60$FA
-
-60$FA
-
-but for reasons of clarity, the first string is preferred if space allows.
-
-<b>General Example #5</b>
-
-SEX F OR LEVEL 90
-
-This string specifies that the user must be of FEMALE gender OR have a level
-of 90 or higher. The following strings are functionally equivalent to the
-above:
-
-SEX F | LEVEL 90
-
-SEXF|LEVEL90
-
-$SF | $L90
-
-$SF|$L90
-
-<b>General Example #6</b>
-
-USER NOT EQUAL TO 20
-
-This string specifies that user #20 will not meet the requirement.
-
-Shortened using symbols:
-
-$U!=20
-
-<b>General Example #7</b>
-
-BPS 9600 OR NOT TIME 19:00
-
-This string specifies that the user must be connected at 9600bps or higher,
-OR the time of day must be before 7pm. The value for the TIME parameter
-is in the format 24 hour format of HH:MM. If the specified time is on an even
-hour, then &quot;:00&quot; portion may be omitted:
-
-BPS 9600 OR NOT TIME 19
-
-has the same meaning.
-
-You may also omit the &quot;00&quot; from the BPS value to shorten the string:
-
-BPS 96 OR NOT TIME 19
-
-Shortened versions:
-
-$B 9600 OR NOT $T19
-
-BPS9600|!TIME19
-
-$B96|!$T19
-
-<b>General Example #8</b>
-
-BPS 9600 OR TIME NOT 18:00 OR TIME 21:30
-
-This string specifies that the user must be connected at 9600bps or higher,
-OR the time of day must be before 6pm, OR the time of day must be after
-9:30pm.
-
-When specifying multiple parameters of the same type consecutively (in this
-example, two of the required parameters are &quot;TIME&quot;), the parameter does
-not need to be restated. For example, the string:
-
-BPS 9600 OR TIME NOT 18:00 OR 21:30
-
-has the same meaning as the first string in this example.
-
-Shortened versions:
-
-$B 9600 OR NOT $T 18 OR 21:30
-
-$B96|$T!18|21:30
-
-<b>General Example #9</b>
-
-FLAG A OR FLAG B OR FLAG C OR LEVEL 90
-
-The above string specifies that a user must have flag A, flag B, flag C, (all
-from flag set #1) or a level of 90 or higher to meet the requirement. Using the
-&quot;sticky&quot; parameter type feature of AR Strings, we can shorten the line:
-
-FLAG A OR B OR C OR LEVEL 90
-
-Utilitizing symbols, we can shorten it even further:
-
-FLAG A|B|C OR LEVEL 90
-
-Taking it to extremes:
-
-$FA|B|C|$L90
-
-<b>General Example #10</b>
-
-USER EQUALS 145 OR LEVEL 90
-
-This string indicates that user number 145 will meet the requirement and all
-users with level 90 and higher (sysops).
-
-Best shortened as:
-
-USER=145 OR LEVEL 90
-
-For ultimate compression:
-
-$U=145|$L90
-
-<b>General Example #11
-</b>
-LEVEL 60 AND FLAG X AND FLAG Y AND FLAG Z
-
-Compressed examples:
-
-LEVEL 60 AND FLAG X AND Y AND Z
-
-LEVEL 60 AND FLAG X Y Z
-
-LEVEL 60 FLAG XYZ
-
-LEVEL60 FLAGXYZ
-
-$L60 $FXYZ
-
-60$FXYZ
-
-<b>General Example #12
-</b>
-FLAG 2A OR FLAG 2B OR FLAG 4Z
-
-This string specifies that the user must have either flag 'A or 'B' from flag
-set #2, or flag 'Z' from flag set #4. Using the &quot;sticky&quot; parameter type
-feature, this could be shortened to:
-
-FLAG 2A OR B OR FLAG 4Z
-
-If the flag set is not #1, you MUST specify the flag set number when using
-the FLAG keyword.
-
-Example:
-
-FLAG 2A OR FLAG B OR FLAG 4Z
-
-is NOT the same as the first two strings in this example. The second flag (B)
-would be considered as from flag set #1, since a flag set number was not
-specified.
-
-Correct and shortened version:
-
-FLAG2A|B OR FLAG4Z
-
-$F2A|B|$F4Z
-
-Note: Multiple flag sets were developed for advanced sysops who found that
-      the 26 flag limitation (A-Z) was insufficient and requested additional
-      flag capabilities. Most sysops will probably not find it necessary to
-      use more than 26 flags, and therefore have no need for flag sets 2
-      through 4.
-
-<b>General Example #13</b>
-
-NOT FLAG 2G
-
-This string specifies that the user most not have flag 'G' from flag set #2.
-The NOT keyword can appear in several places in this string while keeping
-the exact same meaning:
-
-FLAG NOT 2G
-
-FLAG 2 NOT G
-
-Condensed versions:
-
-!$F2G
-
-$F!2G
-
-$F2!G</pre>
-<h2><a name="NestingExpressions">[7.4] - Nesting Expressions</a></h2>
-<pre>All of the above string examples have been single expressions that evaluate to
-either true of false. Sometimes, you may wish to require access to an area
-using &quot;nested&quot; logic.
-
-Example: If the user is level 90+, OR the user has the A flag, AND is 21+
-         years of age or older.
-
-The above example could be read two ways.
-
-1: The user must have level 90+, and either the A FLAG or be 21+ years old.
-
-2: The user must be 21+ years old and have either the A FLAG or level 90+.
-
-To clarify which of the above methods were intended, we use parentheses to
-separate the two true/false expressions.
-
-1: LEVEL 90 OR (FLAG A AND AGE 21)
-
-2: (LEVEL 90 OR FLAG A) AND AGE 21
-
-Strings 1 and 2 are interpreted differently and correlate to the above two
-English logic statements.
-
-Whenever using a combination of AND and OR logic, nested expressions are
-required. The following string:
-
-LEVEL 90 OR FLAG A AND AGE 21
-
-is INVALID and would most likely NOT produce the desired results.
-
-Expressions may be nested, using parenthesis, as deep as is required.
-
-Example:
-
-((LEVEL 80 OR FLAG S) AND AGE 18) OR LEVEL 90
-
-is a VALID string that would evaluate with the following:
-
-User with level of 80 and age 17 would not qualify
-User with level of 80, flag S and age 17 would not qualify
-User with level of 80 and age 18 would qualify
-User with flag S and age 18 would qualify
-Any user with level 90+ would qualify regardless of age or flags</pre>
-<h2><a name="NestedLogicExamples">[7.5] - ARS Nested Logic Examples</a></h2>
-<pre><b>Nested Example #1
-</b>
-BPS 9600 OR (BPS 2400 AND TIME NOT 15:00)
-
-User must be connected at 9600bps or higher, OR be connected at 2400bps or
-higher and the time of day being before 3pm. 9600bps and higher callers would
-always meet this requirement. 2400-7200bps callers will only meet this
-requirement between 12:00 midnight and 3pm in the afternoon. 1200bps and slower
-callers would never meet this requirement.
-
-Note, that when nesting expressions, the parameter type DOES NOT stick from
-one expression to another. Example:
-
-BPS 9600 OR (2400 AND TIME NOT 15:00)
-
-Is an INVALID string. The 2400 would be interpreted as a LEVEL requirement
-since it is as the beginning of a new expression and LEVEL is the default
-parameter type.
-
-The first (correct) string in this example, can of course also be shortened
-using symbols (and eliminating the AND key word):
-
-$B9600|($B2400$T!15)
-
-<b>Nested Example #2</b>
-
-(SEX M AND AGE 21) OR (SEX F AND AGE 18)
-
-This string specifies that only male users of 21 years and older and female
-users of 18 and older will meet the requirement.
-
-Shortened Example:
-
-($SM$A21)|($SF$A18)
-
-The logic of the above string is more verbose than necessary and could be
-reduced to:
-
-AGE 21 OR (SEX F AND AGE 18)
-
-producing the same results.
-
-<b>Nested Example #3<u>
-</u></b>
-(BPS 2400 AND PCR 20) OR LEVEL 90
-
-This string would indicate that users of any level will have access if they
-are connected at 2400bps and have a Post/Call ratio of 20% or higher - OR
-the users has as least level 90 (sysop).
-
-Utilizing the default parameter type of level, the LEVEL key word can be
-omitted:
-
-(BPS 2400 AND PCR 20) OR 90
-
-to create a functionally equivalent, though more confusing, AR string.
-
-A better way to shorten the string would be to eliminate the AND keyword
-and use symbols:
-
-($B 2400 $P 20) | $L 90
-
-Eliminating the spaces creates an even more compact string:
-
-($B2400$P20)|$L90
-
-<b>Nested Example #4<u>
-</u></b>
-NOT (USER=1 OR USER=20)
-
-All users will meet this requirement accept user #1 and user #20.
-
-The above string could also be stated in a non-nested format with the same
-results:
-
-NOT USER=1 AND NOT USER=20
-
-though the meaning is not quite as clear, they are functionally the same.
-
-Note: The second method requires 2 bytes less in raw logic storage because it
-      is not nested and will be interpreted slightly faster (by a matter of
-      microseconds). Just in case you were wondering...
-
-<b>Nested Example #5<u>
-</u></b>
-LEVEL 90 OR (TIME 12:00 AND TIME NOT 18:00)
-
-Users with level 90 or higher will always meet this requirement. Users with
-levels below 90 will only meet this requirement between 12 noon and 6pm.
-
-Re-arranged:
-
-(TIME 12:00 AND TIME NOT 18:00) OR LEVEL 90
-
-the string has exactly the same meaning. Eliminating the unnecessary occurrence
-of the second &quot;TIME&quot; parameter shortens the string while keeping it easily
-readable:
-
-(TIME 12:00 AND NOT 18:00) OR LEVEL 90
-
-Maximum compression:
-
-($T12!18)|90</pre>
-<p><a href="#top"><b>Back to Top</b></a></p>
-
-<!--webbot bot="Include" U-Include="_borders/bottom.htm" TAG="BODY" startspan -->
-
-<hr>
-<p><b><a href="http://www.synchro.net/copyright.html">Copyright</a> � 2000 by </b> <a href="http://www.synchro.net/author.htm"><b>Rob Swindell</b><br>
-</a>
-
-<a href="http://www.synchro.net"><font size="2"><br>
-Synchronet BBS Software</font></a>  <font size="2">  (Synchronet)
-Version 3 is comprised of several documentation,<br>
-library, executable, and <a href="http://www.synchro.net/source.html">source code</a> 
-files, all of which are covered by the<a href="http://www.fsf.org/copyleft/gpl.html">
-<br>
-GNU General Public License</a>  with the exception of the following portions
-covered by<br>
-the <a href="http://www.fsf.org/copyleft/lesser.html">GNU Lesser General Public License</a>:
-SMBLIB and XSDK.<br>
-<br>
-Synchronet Version 2 (for DOS and OS/2) and its source code was released to the<a href="http://www.fsf.org/philosophy/categories.html#PublicDomainSoftware">
-<br>
-Public Domain</a>  by <a href="ftp://vert.synchro.net/main/sbbs/manifest.txt">Digital Dynamics</a> 
-in 1997 and remains Public Domain software today.<br>
-Synchronet Version 3 is not Public Domain software.</font></p>
-<p align="left"><font size="2"><a href="http://www.synchro.net/author.html">Rob Swindell<br>
-</a>PO Box 501<br>Yorba Linda, CA 92885<a href="http://www.synchro.net"><br>
-http://www.synchro.net</a>
-
-</font></p>
-<p align="left"><font size="2">For the complete Copyright Information please
-read the <a href="http://www.synchro.net/copyright.html">Copyright Documentation</a>
-.</font></p>
-
-<!--webbot bot="Include" endspan i-checksum="55766" -->
-
-</body>
-
-</html>
diff --git a/docs/smb.html b/docs/smb.html
deleted file mode 100644
index 5b93317cb9..0000000000
--- a/docs/smb.html
+++ /dev/null
@@ -1,2946 +0,0 @@
-
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<title>Synchronet Message Base Specification</title>
-</head>
-
-<body>
-<!--webbot bot="Include" U-Include="_borders/top.htm" TAG="BODY" startspan -->
-
-<a href="http://www.synchro.net"><img border="0" src="images/synclogo_fancyred.gif" alt="Synchronet BBS - Multinode Bulletin Board Software" width="626" height="86"></a>
-
-<hr>
-
-<!--webbot bot="Include" endspan i-checksum="23126" -->
-
-<h1><a name="top">Synchronet Message Base Specification</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<i>Version 1.21</i></h1>
-<h4><a name="toc"><b>Table of Contents</b></a></h4>
-<div align="left">
-  <pre><a href="#Introduction">Introduction</a>
-<a href="#Implementation Levels">Implementation Levels</a>
-<a href="#Definitions">Definitions</a>
-        <a href="#Acronyms:">Acronyms</a>
-        <a href="#Data types">Data Types</a>
-<a href="#File Formats">File Formats</a>
-        <a href="#Index File (*.SID)">Index</a>			(*.SID)
-        <a href="#Header File (*.SHD)">Header</a>			(*.SHD)
-        <a href="#Message Header Block Allocation (*.SHA)">Header Allocation</a>	(*.SHA)
-        <a href="#Message Data (*.SDT)">Data</a>			(*.SDT)
-        <a href="#Message Data Block Allocation (*.SDA)">Data Allocation</a>		(*.SDA)
-        <a href="#CRC history for duplicate message checking (*.SCH)">CRC History</a>		(*.SCH)
-<a href="#Header Field Types:">Header Field Types</a>
-<a href="#Data Field Types:">Data Field Types</a>
-<a href="#Message Attributes:">Messsage Attributes</a>
-<a href="#Translation Types:">Translation Types</a>
-<a href="#Agent Types:">Agent Types</a>
-<a href="#Network Types:">Network Types</a>
-<a href="#Media Types:">Media Types</a>
-<a href="#Message Storage Pseudo Code">Message Storage Pseudo Code</a>
-<a href="#Message Retrieval Pseudo Code">Message Retrieval Pseudo Code</a>
-<a href="#SMBUTIL">SMBUTIL</a>
-<a href="#CHKSMB">CHKSMB</a>
-<a href="#FIXSMB">FIXSMB</a>
-<a href="#SMBLIB">SMBLIB (C library)</a>
-        <a href="#SMBDEFS.H">Data Types and Constants</a>	(SMBDEFS.H)
-        <a href="#SMBVARS.C">Global Variables</a>		(SMBVARS.C)
-        <a href="#SMBLIB.H">Function Prototypes</a>		(SMBLIB.H)
-        <a href="#SMBLIB.C">Library Functions</a>		(SMBLIB.C)
-        <a href="#Miscellaneous SMBLIB Files">Miscellaneous</a>			(CRC*.* and LZH.*)
-<a href="#SMBLIB Storage Example">SMBLIB Storage Example</a>
-<a href="#SMBLIB Retrieval Example">SMBLIB Retrieval Example</a>
-<a href="#SMBLIB Performance Issues">SMBLIB Performance Issues</a>
-<a href="#Bibliography">Bibliography</a></pre>
-</div>
-<h2><u><a name="Introduction">Introduction</a></u></h2>
-<pre><b><i>Q. What is SMB?</i></b></pre>
-<pre>A. SMB (Synchronet Message Base) is a technical specification for the storage
-   format of electronic mail messages. These e-mail messages may all be
-   contained in one database, or, more commonly, separated into categorized
-   databases. These message databases (or message bases) are also referred to
-   as &quot;sub-boards&quot;, &quot;forums&quot;, &quot;conferences&quot;, and &quot;SIGs&quot;. The messages may be
-   directed to an individual person, sent to a group of individuals, or sent
-   to everyone who can read messages in that message base. Messages may be
-   created and read solely at one physical location, or imported from and
-   exported to a message network that may span continents. Message bases that
-   are connected to a message network are often called &quot;echoes&quot;.
-</pre>
-<pre><b><i>Q. Why SMB?</i></b></pre>
-<pre>A. The Synchronet Message Base is designed to store high volumes of messages
-   while maintaining optimum search, retrieval, and creation performance.
-   These messages are not limited to mere text. In addition to text, SMB
-   defines the storage of digitized sound, MIDI, graphics, fonts, animation,
-   as well as other multimedia data and triggers for localized multimedia.
-   SMB thrives on a multi-user environment where messages are being created,
-   read, modified, and deleted by multiple tasks simultaneously. With the
-   large message networks of today being the rule, rather than the exception,
-   and high volumes of messages being imported on a daily, sometimes hourly
-   basis, creation and deletion speed is of the utmost importance. This is
-   where SMB really shines. Being extensible enough to handle message formats
-   from networks of today and tomorrow, and fast enough to import more messages
-   that humanly readable, the SMB format will more than meet your message
-   storage needs.
-</pre>
-<pre><b><i>Q. Why a specification?</i></b></pre>
-<pre>A. Message bases are often accessed and modified by a number of different
-   programs. Often these programs are developed by individuals or companies
-   other than the original designer of the message base format. This
-   specification is an attempt to aid developers in creating programs that
-   access or modify a message base stored in the SMB format.
-</pre>
-<pre><b><i>Q. Who can use this specification?</i></b></pre>
-<pre>A. Anyone that has interest in the Synchronet Message Base format at either
-   an educational or professional level. Specifically, software developers
-   interested or currently involved in the development of message readers,
-   editors, echomail (toss/scan) programs, message transfer agents (MTAs),
-   network gateways, and bulletin board systems. Much of the information in
-   this specification is intended for those with preexisting programming
-   knowledge, so those with little or no programming experience may find it
-   hard to comprehend.</pre>
-<pre><b><i>Q. What does the SMB specification include?</i></b></pre>
-<pre>A. The text you are reading is part of the SMB specification: a single text
-   document that defines the storage format of each of the six files of an
-   SMB format message base and how they are related to each other.</pre>
-<pre>   Included with this specification is C source code to be used as an example
-   to programmers of how to access an SMB format message base and public domain
-   library functions (SMBLIB) that can be compiled and linked into programs
-   that access an SMB format message base developed by third parties. An SMB
-   utility program (SMBUTIL) is also included with C source code as an example
-   of how to use the SMBLIB functions.
-</pre>
-<pre><b><i>Q. Where did the SMB specification come from?</i></b></pre>
-<pre>A. Digital Dynamics (southern California based software development company)
-   released &quot;Synchronet Multinode BBS Software Version 1a&quot; in June of 1992 as
-   one of the first BBS packages to be designed from the ground-up to operate
-   in a multi-node environment with incredible speed and reliability, with a
-   large suite of multi-node specific features and design innovations.</pre>
-<pre>   The original message base format was designed with localized messaging and
-   low volume message networks in mind. By January of 1993, it was clear that
-   high volume message networks (FidoNet, RelayNet, Usenet, etc.) were the
-   preference of most BBS users and a new message base format was required to
-   allow for high volume message storage, improved storage, retrieval, and
-   maintenance performance, as well as lower storage space requirements.</pre>
-<pre>   Rather than introduce another new message format, Digital Dynamics sought
-   to implement an existing public specification for a format that would meet
-   current and future message storage needs. More than a few specifications
-   were seriously considered at one time or another, but after careful
-   examination, design flaws and lack of extensibility eliminated them from the
-   long term plans of Digital Dynamics and Synchronet BBS Software. Thus began
-   the design of the &quot;Synchronet Message Base&quot; (SMB) format.</pre>
-<pre>   At the request of many message related program developers, Digital Dynamics
-   created and released the SMB specification before the release of &quot;Synchronet
-   Version 2.00&quot; to allow lead-time on developing support programs for the new
-   format.</pre>
-<pre>   Digital Dynamics strongly encourages developers of message related programs
-   (including software that directly competes with Synchronet or other Digital
-   Dynamics products) to implement support for SMB. Though this is a public
-   specification and Digital Dynamics encourages developer suggestions, it will
-   remain under the sole control of Digital Dynamics unless specifically stated
-   otherwise in a future revision of this specification.</pre>
-<pre>   Digital Dynamics requests that any organizations that wish to adopt or
-   ratify this specification, in part or whole, notify Digital Dynamics through
-   any of the contact methods listed at the beginning of this document.</pre>
-<pre><b><i>Q. How does SMB store messages?</i></b></pre>
-<pre>A. Each message base is stored in a set of binary files. This set consists
-   of between three and six files depending the storage method used. The base
-   filename (maximum of eight characters under DOS) is the same for all six
-   files of the same message base and unique among the filenames of other
-   message bases in the same directory. The six files each have a different
-   three character extension. The first character of the extension is always
-   the letter 'S' (for SMB), while the second and third characters define the
-   contents of the file.</pre>
-<pre>   Two of the six files associated with each message base are not re-creatable
-   and therefore are the most important when considering data integrity. These
-   two files are the data file (with a .SDT extension) and header file (.SHD
-   extension). Both of these files use 256 byte blocks and have associated
-   block allocation tables (stored in .SDA and .SHA respectively) so that
-   deleted message blocks may be used by new messages without creating odd
-   sized unused 'holes' in the files. The block allocation table files (.SDA
-   and .SHA) can be recreated with the information stored in the header (.SHD)
-   file. When using Hyper Allocation storage method, the allocation files (.SDA
-   and .SHA) are not used.</pre>
-<pre>   For fast indexing, there is a small fixed length index file (with a .SID
-   extension). This file allows for the immediate location of message header
-   records based on sender's name or user number, recipient's name or user
-   number, subject, message number, or message attributes. This file can be
-   recreated with the data stored in the header (.SHD) file.</pre>
-<pre>   The last file is an optional CRC history (.SCH) file. It contains 32-bit
-   CRCs of a configurable number of messages imported or created locally. This
-   is to help eliminate duplicate messages created by user or program error.
-   The CRC history file can be recreated with the combination of information
-   stored in the data (.SDT) and header (.SHD) files.
-
-<b><i>Q. How fast do messages import into an SMB message base?</i></b></pre>
-<pre>A. This is a very important question for systems for that import large volumes
-   of messages. Of course, the answer depends on the storage format which you
-   are importing from, the average length of messages, the design of the
-   program which is performing the import process, as well as the hardware and
-   system software being used. What's important is that SMB will allow the
-   fastest import process possible with any given combination of the above
-   factors.</pre>
-<pre>   Since system storage capacity is rarely infinite, neither is the number
-   of messages which can be stored in a message base. System operators must
-   define the maximum number of messages to be stored in a message base, the
-   maximum age of the messages in that message base, or a combination of both.
-   When using the Self-packing storage method (defined later in this document),
-   the smaller the number of messages stored in a message base, the faster the
-   import process. The SMB format is flexible enough to support multiple levels
-   of import performance based on optimizations for storage space or speed.
-   Most system operators will almost invariably choose speed over space, but
-   which choices are available is determined by the importing program. This
-   specification defines three storage methods, from slowest to fastest:
-   Self-packing, Fast Allocation, and Hyper Allocation. Other options defined
-   in this specification may affect storage performance, including duplicate
-   message checking and message compression/encryption.
-</pre>
-<pre><b><i>Q. How much storage is required for an SMB message base?</i></b></pre>
-<pre>A. The biggest factor in determining storage requirements for a message base
-   is the maximum number of messages to be stored in the base (defined by the
-   system operator) and the average size of each message. The minimum required
-   storage for a message base is 32 bytes plus 532 bytes per message (plus four
-   bytes per message if duplicate message checking is used and three bytes
-   per message if Self-packing or Fast Allocation storage methods are used).</pre>
-<pre>   The SMB format was originally designed to be &quot;self-packing&quot;, meaning purged
-   (deleted) message header and data blocks will be used automatically by new
-   messages. Relying solely on self-packing, an SMB format message base will
-   never &quot;shrink&quot; in size. This is not to say that it will continually &quot;grow&quot;
-   in size, but that without specific packing procedures, deleted message
-   blocks may remain unused for extended periods of time, meanwhile using some
-   amount of storage space that could be recovered using specific packing
-   procedures. The Fast Allocation and Hyper Allocation storage methods do not
-   use deleted message blocks for new messages so specific packing procedures
-   must be used if any messages are deleted and that storage space is to ever
-   be recovered.</pre>
-<pre>   Limiting the maximum age of messages in an SMB message base is another way
-   to control the storage requirements. While maximum message age definition is
-   optional, the definition of the maximum number of messages is not.
-
-<b><i>Q. How many messages can be stored per SMB message base?</i></b></pre>
-<pre>A. Without considering storage limitations or message data lengths greater than
-   256, the theoretical maximum number of messages that can be stored in a
-   single SMB message base is 16.7 million. Considering the variable length
-   nature of message and header data, it is suggested that the system operator
-   allow no more than 1 million messages per base.</pre>
-<pre>   To determine an estimated maximum number of messages for a message base
-   using the average message data length as a factor, use the following
-   formula:</pre>
-<pre>   4.2 billion divided by the average message length rounded up to be evenly
-   divisible by 256.</pre>
-<pre>   If the average message data length is 1500 bytes, the estimated maximum
-   number of messages would be 2,734,375 (4.2 billion divided by 1536).</pre>
-<pre>   Implementations of this format may be further limited by available system
-   memory.</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h2><u><a name="Implementation Levels">Implementation Levels</a></u></h2>
-<pre>The SMB format can be implemented to varying degrees between programs without
-creating compatibility issues. Rather than have developers specifically state
-which features they have and have not implemented, we have defined seven levels
-of implementation (represented by Roman numerals I through VII). For a program
-or software package to meet an implementation level, it must have all of the
-features listed for that level and all of those for each level below it. The
-minimum suggested implementation is level I. The SMBUTIL program included with
-this specification is an example of a level I implementation with features
-from some of the higher implementation levels.</pre>
-<pre><b><u>Level I</u></b>
-
-The minimum suggested level of implementation. Messages contain merely ASCII
-text displayable on an ANSI terminal. Messages can be added to the message
-base and if the maximum number of messages is exceeded, messages are removed
-or marked for deletion.</pre>
-<pre><b><u>Level II</u></b>
-
-The addition of file attachments, multiple index/header entries per message
-(multiple destinations), multiple text bodies for the separation of message
-text and tag/origin lines (for example), forwarding, threading, and specific
-FidoNet kludge header field support makes this level of implementation more
-realistic for bulletin board system and EchoMail software implementation.</pre>
-<pre>Synchronet Multinode BBS Software v2.00 has a level II implementation of this
-specification.</pre>
-<pre><b><u>Level III</u></b>
-
-This implementation adds support for translation strings defined later in this
-document for data compression, encryption, escaping, and encoding. This level
-is still limited to basic ASCII text and ANSI escape sequence entry and
-retrieval.</pre>
-<pre>Synchronet Multinode BBS Software v2.10 has a level III implementation of this
-specification.</pre>
-<pre><b><u>Level IV</u></b>
-
-The storage and retrieval of embedded and attached images is added in this
-level of implementation. Supported images are limited to single binary or text
-data blocks that can be displayed or transferred to the user (automatically,
-or by request) if their display and translation protocols define specific
-support for the image type.
-
-<b><u>Level V</u></b>
-
-This level of implementation adds support for embedded and attached sound data.
-This includes digitized sound and MIDI data. Supported sounds are limited to
-single binary or text data blocks that can be played or transferred to the user
-(automatically or by request) if their presentation and translation protocols
-define specific support for the sound type.</pre>
-<pre><b><u>Level VI
-</u></b>
-Localized sound and image data can be triggered by messages stored and
-retrieved in an implementation of this level.</pre>
-<pre><b><u>Level VII</u></b>
-
-Complete multimedia support is reached in this implementation level with
-support for embedded and attached animation, sound, and video data.</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h2><u><a name="Definitions">Definitions</a></u></h2>
-<pre><u><b>Control Characters</b></u></pre>
-<pre>When specifying control characters (ASCII 1 through 31), the caret symbol &quot;^&quot;
-or the abbreviation &quot;ctrl-&quot; followed by a character will be used to indicate the
-value. ^A is equivalent to ASCII 1, ^B ASCII 2, etc. The case of the control
-character is not significant (i.e. ^z and ^Z are equivalent). The control
-character ^@ (ASCII 0) will be specified as NULL or 0.
-</pre>
-<pre><b><u>Hexadecimal</u></b>
-
-Base sixteen numbering system which includes the digits 0-9 and A-F.
-Hexadecimal numbers are represented in this document with a prefix of &quot;0x&quot; or
-&quot;\x&quot; or a suffix of &quot;h&quot;. Hexadecimal letter digits are not case sensitive
-(i.e. the number 0xff is the same as 0xFF).
-</pre>
-<pre><b><u>File dump</u></b>
-
-When example file dumps are displayed, the format is similar to that of the
-output from the DOS DEBUG program. With the exception of the ASCII characters,
-all numbers are in hexadecimal.</pre>
-<pre>Offset    Byte values                                          ASCII characters</pre>
-<pre>000000    53 4D 42 1A 10 01 20 00   F4 01 00 00 F4 01 00 00    SMB... .........
-000010    20 00 00 00 D0 07 00 00   D0 07 00 00 00 00 00 00     ...............
-</pre>
-<pre><b><u>Bit values</u></b>
-
-Bit (or flag) values are represented in C notation as (1&lt;&lt;x) where x is the bit
-number. (i.e. bit number 7 (1&lt;&lt;7) is the same as 0x80).
-</pre>
-<pre><b><u>Word storage</u></b>
-
-All words (16-bit) and double words (32-bit) are stored in Intel 80x86 (little
-endian) format with bytes stored from low to high (reverse of the Motorola
-680x0 word storage format).</pre>
-<pre>A 16-bit word with the value 1234h is stored as 34h 12h.
-
-<b><u>Translation strings</u></b>
-
-Translation strings (xlat variables) are arrays of words (16-bit) in the order
-of the original storage translation. The last translation type is followed by a
-16-bit zero (defined later as XLAT_NONE). If there are no translations, then
-the first and only element of the array is XLAT_NONE.</pre>
-<pre>If multiple translations are used, the translation order must be reversed
-upon retrieval to obtain the proper data.
-</pre>
-<pre><b><u>Local e-mail</u></b>
-
-When referring to the local e-mail message base of a Synchronet BBS, we are
-referring specifically to the message base with the name &quot;MAIL&quot; stored in the
-&quot;DATA&quot; directory (e.g. \SBBS\DATA\MAIL).</pre>
-<pre>Messages stored in this message base are different in the following respects:</pre>
-<ul>
-  <li>
-<pre>The SMB_EMAIL status header attribute is set ON</pre>
-  </li>
-  <li>
-<pre>Hyper Allocation storage method is not supported</pre>
-  </li>
-  <li>
-<pre>The &quot;To&quot; and and &quot;From&quot; fields of the message indexes do NOT contain CRCs</pre>
-  </li>
-</ul>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h3><u><a name="Acronyms:">Acronyms:</a></u></h3>
-<pre>ANSI            American National Standards Institute
-ASCII           American Standard Code for Information Interchange
-BBS             Bulletin Board System
-C               The C programming language as defined by ANSI X3.159-1989
-CR              Carriage Return character (ASCII 13)
-CRC             Cyclic Redundancy Check
-CRC-16          Standard 16-bit CRC using 1021h polynomial (seed 0)
-CRC-32          Standard 32-bit CRC using EDB88320h polynomial (seed -1)
-CRLF            Carriage Return character followed by a Line Feed character
-FSC             FidoNet Standards Committee (FTS proposal)
-FTN             FidoNet Technology Network
-FTS             FidoNet Technical Standard
-LF              Line Feed character (ASCII 10)
-QWK             Compressed message packet format for message reading/networking
-RFC             Request for Comments
-SMB             Synchronet Message Base
-UT              Universal Time (formerly called &quot;Greenwhich Mean Time&quot;)</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h3><u><a name="Data types">Data types</a></u></h3>
-<pre>uchar           Unsigned 8-bit value (0 through 255).
-                C example:</pre>
-<pre>                #define uchar unsigned char
-</pre>
-<pre>short           Signed 16-bit value (-32768 through 32767).
-                &quot;short&quot; is a C keyword indicating &quot;short int&quot;.
-</pre>
-<pre>ushort          Unsigned 16-bit value (0 through 65535).
-                C example:</pre>
-<pre>                #define ushort unsigned short
-</pre>
-<pre>ulong           Unsigned 32-bit value (0 through 4294967295).
-                C example:</pre>
-<pre>                #define ulong unsigned long
-</pre>
-<pre>time_t          Unsigned 32-bit value.
-                Seconds since 00:00 Jan 01 1970 (Unix format).
-                Used for all time/date storage in SMB as part of the when_t
-                data type. This time format will support dates through the year
-                2105.
-                time_t is defined by ANSI C as a long (signed) which can
-                limit its date support to the year 2038 depending on the
-                library routines used.
-</pre>
-<pre>ASCII           String (aka character array) of 8-bit ASCII characters.
-                Characters with the bit 7 set (80h through FFh) represent
-                the IBM PC extended ASCII character set. When data or header
-                fields of this type are stored in the header, a NULL
-                terminator may or may not be present.
-                C example:</pre>
-<pre>                uchar str[80];
-</pre>
-<pre>ASCIIZ          ASCII string with (non-optional) NULL terminator.
-                C example:</pre>
-<pre>                uchar str[81];
-
-nulstr          ASCII string immediately terminated by NULL.
-                C example:</pre>
-<pre>                uchar *nulstr=&quot;&quot;;
-</pre>
-<pre>undef           Data buffer with undefined contents.
-                C example:</pre>
-<pre>                uchar buf[BUF_LEN];</pre>
-<pre>when_t          Date/Time stamp including time-zone adjustment information.
-                C example:</pre>
-<pre>                typedef struct {</pre>
-<pre>                    time_t  time;   // Time stamp (in local time)
-                    short   zone;   // Zone constant or Minutes (+/-) from UT</pre>
-<pre>                    } when_t;</pre>
-<pre>                time:</pre>
-<pre>                A time value of 0 is invalid and indicates an un-initialized
-                time stamp.</pre>
-<pre>                Time stamps are always stored in universal time. i.e.
-                Regardless of what the local time zone is, Jan 1st 1994 00:00
-                will always be stored as 2D24BD00h.</pre>
-<pre>                zone:</pre>
-<pre>                If the zone is in the range -720 to +720, it represents the
-                number of minutes east or west of UT. Values in this range
-                should only be used for time zones not otherwise represented
-                here.</pre>
-<pre>                If the zone is greater than 720 or less than -720, then the
-                following bits have special meaning:</pre>
-<pre>                (1&lt;&lt;12)         // Non-US time zone     (east of UT)
-                (1&lt;&lt;13)         // Non-US time zone     (west of UT)
-                (1&lt;&lt;14)         // U.S. time zone
-                (1&lt;&lt;15)         // Daylight savings</pre>
-<pre>                The lower 12 bits (0 through 11) contain the number of minutes
-                east or west of UT (not accounting for daylight savings).
-
-                If the time zone is one specified in the U.S. Uniform Time Act,
-                the following values represent the zone:</pre>
-<pre>                AST 0x40F0      // Atlantic             (-04:00)
-                EST 0x412C      // Eastern              (-05:00)
-                CST 0x4168      // Central              (-06:00)
-                MST 0x41A4      // Mountain             (-07:00)
-                PST 0x41E0      // Pacific              (-08:00)
-                YST 0x421C      // Yukon                (-09:00)
-                HST 0x4258      // Hawaii/Alaska        (-10:00)
-                BST 0x4294      // Bering               (-11:00)</pre>
-<pre>                With bit 15 set, the following values represent the same zone
-                with the presence of daylight savings:</pre>
-<pre>                ADT 0xC0F0      // Atlantic             (-03:00)
-                EDT 0xC12C      // Eastern              (-04:00)
-                CDT 0xC168      // Central              (-05:00)
-                MDT 0xC1A4      // Mountain             (-06:00)
-                PDT 0xC1E0      // Pacific              (-07:00)
-                YDT 0xC21C      // Yukon                (-08:00)
-                HDT 0xC258      // Hawaii/Alaska        (-09:00)
-                BDT 0xC294      // Bering               (-10:00)</pre>
-<pre>                The following non-standard time zone specifications may also be
-                used:</pre>
-<pre>                MID 0x2294      // Midway               (-11:00)
-                VAN 0x21E0      // Vancouver            (-08:00)
-                EDM 0x21A4      // Edmonton             (-07:00)
-                WIN 0x2168      // Winnipeg             (-06:00)
-                BOG 0x212C      // Bogota               (-05:00)
-                CAR 0x20F0      // Caracas              (-04:00)
-                RIO 0x20B4      // Rio de Janeiro       (-03:00)
-                FER 0x2078      // Fernando de Noronha  (-02:00)
-                AZO 0x203C      // Azores               (-01:00)
-                LON 0x1000      // London               (+00:00)
-                BER 0x103C      // Berlin               (+01:00)
-                ATH 0x1078      // Athens               (+02:00)
-                MOS 0x10B4      // Moscow               (+03:00)
-                DUB 0x10F0      // Dubai                (+04:00)
-                KAB 0x110E      // Kabul                (+04:30)
-                KAR 0x112C      // Karachi              (+05:00)
-                BOM 0x114A      // Bombay               (+05:30)
-                KAT 0x1159      // Kathmandu            (+05:45)
-                DHA 0x1168      // Dhaka                (+06:00)
-                BAN 0x11A4      // Bangkok              (+07:00)
-                HON 0x11E0      // Hong Kong            (+08:00)
-                TOK 0x121C      // Tokyo                (+09:00)
-                SYD 0x1258      // Sydney               (+10:00)
-                NOU 0x1294      // Noumea               (+11:00)
-                WEL 0x12D0      // Wellington           (+12:00)
-
-fidoaddr_t      FidoNet address stored as four ushorts that represent the zone,
-                network, node, and point (in that order).
-                C example:</pre>
-<pre>                typedef struct {</pre>
-<pre>                    ushort zone,
-                           net,
-                           node,
-                           point;</pre>
-<pre>                    } fidoaddr_t;
-</pre>
-<pre>typestr_t       ASCIIZ string with ushort type prefix.
-                C example:</pre>
-<pre>                typedef struct {</pre>
-<pre>                    ushort  type;   // Specifier for type of 'str'
-                    uchar   str[];  // ASCIIZ filename or other string data</pre>
-<pre>                    } typestr_t;
-</pre>
-<pre>mattach_t       File attachment information with type prefix, translation
-                string, and filename.
-                C example:</pre>
-<pre>                typedef struct {</pre>
-<pre>                    ushort  type;   // Attachment type
-                    ushort  xlat[]; // Translations of data in attachment
-                    uchar   str[];  // ASCIIZ filename</pre>
-<pre>                    } mattach_t;</pre>
-<pre>vattach_t       Video file attachment information with type, compression,
-                translation string, and filename.
-                C example:</pre>
-<pre>                typedef struct {</pre>
-<pre>                    ushort  type;   // Attachment type
-                    ushort  comp;   // Compression method
-                    ushort  xlat[]; // Translations of data in attachment
-                    uchar   str[];  // ASCIIZ filename</pre>
-<pre>                    } vattach_t;
-
-mtext_t         Message text with translation string prefix.
-                C example:</pre>
-<pre>                typedef struct {</pre>
-<pre>                    ushort  xlat[]; // Translations of text
-                    uchar   text[]; // Actual text data</pre>
-<pre>                    } mtext_t;
-</pre>
-<pre>ftext_t         Formatted message text with translation string prefix and
-                format type.
-                C example:</pre>
-<pre>                typedef struct {</pre>
-<pre>                    ushort  type;   // See Image Types for valid types
-                    ushort  xlat[]; // Translations of data
-                    uchar   data[]; // Actual formatted text data</pre>
-<pre>                    } ftext_t;
-</pre>
-<pre>membed_t        Embedded data with type prefix, translation string, and ASCIIZ
-                description.
-                C example:</pre>
-<pre>                typedef struct {</pre>
-<pre>                    ushort  type;   // Specifier for type of 'dat'
-                    ushort  xlat[]; // Translations of embedded data
-                    uchar   name[]; // ASCIIZ char description of embedded data
-                    uchar   dat[];  // Binary data</pre>
-<pre>                    } membed_t;</pre>
-<pre>vembed_t        Embedded video data with type, compression method, translation
-                string, and ASCIIZ description.
-                C example:</pre>
-<pre>                typedef struct {</pre>
-<pre>                    ushort  type;   // Specifier for type of 'dat'
-                    ushort  comp;   // Compression method
-                    ushort  xlat[]; // Translations of embedded data
-                    uchar   name[]; // ASCIIZ char description of embedded data
-                    uchar   dat[];  // Binary data</pre>
-<pre>                    } vembed_t;</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h2><u><a name="File Formats">File Formats</a></u></h2>
-<h3><u><a name="Index File (*.SID)">Index File (*.SID)</a></u></h3>
-<pre>The index file for each message base contains one record per message in the
-base. Each record is fixed length using the following format:
-
-<b><u>Index Record:</u></b>
-
-<i>C example:</i>
-
-typedef struct {
-
-    ushort  to;     // 16-bit CRC of recipient name (lower case) or user number
-    ushort  from;   // 16-bit CRC of sender name (lower case) or user number
-    ushort  subj;   // 16-bit CRC of title/subject (lower case)
-    ushort  attr;   // attributes (MSG_PRIVATE, MSG_READ, etc. flags)
-    ulong   offset; // byte offset of message header in header file
-    ulong   number; // message serial number (1 based)
-    time_t  time;   // import date/time stamp (Unix format)
-
-    } idxrec_t;
-</pre>
-<pre><b><font SIZE="2">Example file dump (16 messages starting with message number 15):</font></b></pre>
-<blockquote>
-<pre>000000 36 4F 13 07 2A 77 00 00 20 00 00 00 0F 00 00 00
-000010 BE 62 76 2C 36 4F 46 0A 7F B2 00 00 20 01 00 00
-000020 10 00 00 00 C7 29 78 2C 36 4F 70 6F 46 FF 00 00
-000030 20 02 00 00 11 00 00 00 AD D3 7A 2C 70 6F 13 07
-000040 46 FF 00 00 20 03 00 00 12 00 00 00 D6 F8 7F 2C
-000050 36 4F E1 EA E7 E9 00 00 20 04 00 00 13 00 00 00
-000060 1E 7B 85 2C 37 0D 2E DF 4D 79 00 00 20 05 00 00
-000070 14 00 00 00 5C E1 A1 2C 90 54 2D 5A 86 62 00 00
-000080 20 06 00 00 15 00 00 00 39 2E A2 2C 70 6F 1A 8B
-000090 46 FF 00 00 20 07 00 00 16 00 00 00 D0 7B A8 2C
-0000A0 2E DF 1A 8B 4D 79 00 00 20 08 00 00 17 00 00 00
-0000B0 FF 7B A8 2C B4 D9 35 7C 23 B1 00 00 20 09 00 00
-0000C0 18 00 00 00 CE D4 BA 2C 36 4F BC D8 B2 E7 00 00
-0000D0 20 0A 00 00 19 00 00 00 14 5F C3 2C BA A8 4E B0
-0000E0 67 76 00 00 20 0B 00 00 1A 00 00 00 6F 89 C3 2C
-0000F0 36 4F 0C 01 19 9C 00 00 20 0C 00 00 1B 00 00 00
-000100 F8 30 C6 2C 36 4F FA 48 0E 55 00 00 20 0D 00 00
-000110 1C 00 00 00 6A 94 D3 2C 36 4F F1 CE CF A2 00 00
-000120 20 0E 00 00 1D 00 00 00 53 DB D5 2C 8D A6 21 CE
-000130 F7 AB 00 00 20 0F 00 00 1E 00 00 00 31 29 DC 2C</pre>
-</blockquote>
-<pre><b><u>Field descriptions:</u></b></pre>
-<pre><b>To:</b>
-The 'To' field is the CRC-16 of the name of the intended recipient agent of
-this message or the intended recipient's user number. If the CRC is stored, the
-text must be converted to lower case (A-Z changed to a-z) before the CRC is
-calculated. If the message is forwarded to another agent, the original or new
-index record must be changed to contain the CRC-16 of the new recipient name or
-user number. This field must always contain the recipient user number for local
-e-mail on a Synchronet BBS. Outbound netmail stored in the Synchronet local
-e-mail message base will contain 0 in this field.</pre>
-<pre><b>From:</b>
-This field, similar to the 'To' field, contains the CRC-16 of the name of the
-sending agent of this message or the sender's user number. If the CRC is
-stored, the text must be converted to lower case (A-Z changed to a-z) before
-the CRC is calculated. If the message is forwarded to another agent, the
-original or new index record must be changed to contain the CRC-16 of the new
-sender name or user number. If the message was imported into the local e-mail
-message base on a Synchronet BBS via netmail, this field will contain 0.</pre>
-<pre><b>Subj:</b>
-The 'Subj' field contains the CRC-16 of the message's subject. The subject
-must be converted to lower case (A-Z changed to a-z) and all preceding
-&quot;re: &quot;'s and &quot;re:&quot;'s removed before calculating the CRC-16.</pre>
-<pre><b>Attr:</b>
-This ushort is a bit field of the specific attributes for this message.
-It is a clone of the 'attr' element of the msghdr_t structure.</pre>
-<pre><b>Offset:</b>
-This ulong is the offset (in bytes) in the header file for this message's
-header record.</pre>
-<pre><b>Number:</b>
-This ulong is the serial number of this message. Valid values are 1 through
-0xffffffff. No two index records in the same message base may have the same
-message number. All index records must have sequential, but not necessarily
-consecutive, message numbers.</pre>
-<pre><b>Time:</b>
-This field is the date/time stamp the message was imported to or posted in
-the message base. It is a clone of the 'when_imported.time' element of the
-msghdr_t structure.</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h3><u><a name="Header File (*.SHD)">Header File (*.SHD)</a></u></h3>
-<pre>Each SMB header file is made up of two distinct sections: base header records
-and message header records (usually the bulk of the file).</pre>
-<pre><b><u>Base Header Records:</u></b>
-
-Base header records are blocks of data that apply to the entire message base
-and are of variable length. This specification defines only one base header
-record, the &quot;Status info&quot; (smbstatus_t) record. This status info record must be
-the first base header record in the file (offset 0) and must be modified if 
-additional base header records are added.</pre>
-<pre>Additional header records allow other developers to store configuration and
-status information particular to their application needs. It also allows for
-future header record definitions as part of this specification without causing
-backward compatibility issues.</pre>
-<pre>Each base header record contains a fixed length portion (smbhdr_t) and an
-optional variable length portion.</pre>
-<pre>Whenever a base header record is read or updated (written), it must first
-be successfully locked and subsequently unlocked (using the file system record
-locking facilities).</pre>
-<pre>The first base header record (Status Info) is used as a semaphore when writing
-to the message index (.SID) file and, when using the Hyper Allocation storage
-method, writing to the message data (.SDT) file. This record must be
-successfully locked before writing and subsequently unlocked. This is to insure
-that multiple applications simultaneously writing to the same message base
-does not result in corrupted data.
-</pre>
-<pre><b><u>Message Header Records:</u></b>
-
-Following the last base header record is the first message header record. Each
-header record is stored in one or more 256 byte blocks. There must be exactly
-one active message header record for every index record in the index file.
-(Note: This does not include deleted message headers that have not been
-overwritten by a new message header).</pre>
-<pre>Each message header record contains a fixed length portion (msghdr_t), a list
-of zero or more fixed length data fields (dfield_t), and a list of three or
-more variable length header fields (hfield_t).</pre>
-<pre>The value of the data stored in the zero or more unused bytes of the last
-header record block have an undefined value, though whenever possible
-developers should initialize to binary zero for human readability.</pre>
-<pre>Whenever a message header record is read or updated (written), it must first
-be successfully locked and subsequently unlocked.
-
-
-<b><u>Base Header Record (Fixed Portion):</u></b>
-
-<i>C example:</i></pre>
-<pre>typedef struct {</pre>
-<pre>    uchar   id[4];          // text or binary unique hdr ID
-    ushort  version;        // version number (initially 100h for 1.00)
-    ushort  length;         // length including this struct</pre>
-<pre>    } smbhdr_t;
-</pre>
-<pre><b><u>Base Header Record Field Descriptions:</u></b>
-
-<b>Id:</b>
-This is a four byte unique ID identifying the type of the base header record.
-The bytes may contain any value, but printable ASCII characters are preferred.
-The only ID defined in this specification is &quot;SMB^Z&quot; used by the Status Info
-base header record.</pre>
-<pre><b>Version:</b>
-This is a version number of the base header record type. Base header records
-of different versions may have different formats or contain different
-information. This is to aid the application in determining if the record
-is pertinent and if so, to what degree. The Status Info base header record
-uses this version field to define the version of the format for the entire
-message base (currently 0x121 for version 1.21).</pre>
-<pre><b>Length:</b>
-This is entire length in bytes of this header record (including both fixed
-and variable portions).
-</pre>
-<pre><b><u>Base Header #1 (Status info) Record (Variable Portion):</u></b>
-
-<i>C example:</i></pre>
-<pre>typedef struct {</pre>
-<pre>    ulong   last_msg;       // last message number posted or imported
-    ulong   total_msgs;     // total messages currently in message base
-    ulong   header_offset;  // byte offset to first header record
-    ulong   max_crcs;       // Maximum number of CRCs to keep in history
-    ulong   max_msgs;       // Maximum number of messages to keep in base
-    ushort  max_age;        // Maximum age of messages (days) to keep in base
-    ushort  attr;           // Attribute bits</pre>
-<pre>    } smbstatus_t;
-
-<b><u>Base Header #1 (Status Info) Record (Variable Portion) Field Descriptions:</u></b></pre>
-<pre><b>Last_msg:</b>
-This is the serial number of the last message imported or posted into this
-message base. The index, header, and data records for this message may possibly
-not exist (due to deletion). This field is used for determining the message
-number to give to a new message being imported or posted into this message
-base. This field must be updated for every message added to the message base.</pre>
-<pre><b>Total_msgs:</b>
-This is the total number of active messages currently in the message base.
-This number should match the number of records in the index (.SID) file
-and active header records in the header (.SHD) file. This field must be
-updated whenever a message is added to or removed from the message base.</pre>
-<pre><b>Header_offset:</b>
-This is the byte offset to the first message header record. It is useful
-for skipping all the base header records and going directly to the first
-message header record.</pre>
-<pre><b>Max_crcs:</b>
-This is the maximum number of message CRCs to store in the CRC history (.SCH)
-file for duplicate message checking. If this field contains 0, then duplicate
-message checking is disabled.</pre>
-<pre><b>Max_msgs:</b>
-This is the preferred maximum number of messages to keep in this message
-base as specified by the system operator. It is used by maintenance programs
-that trim the message base down by removing old messages. This field should
-be ignored by applications importing or posting messages allowing them to
-exceed this maximum at will.</pre>
-<pre><b>Max_age:</b>
-This field is the maximum age (in days) of messages to keep in the message
-base. It is used by maintenance programs to purge out-dated messages from
-the message base.
-
-<b>Attr:</b>
-This is a bit field containing specific attributes (or flags) that may define
-the way messages are stored or retrieved from the this message base. The
-following attributes are defined:</pre>
-<pre>    <b>SMB_EMAIL       (1&lt;&lt;0)</b></pre>
-<pre>    Indicates the message base is specifically for messages to or from local
-    users. When this bit is set, the idxrec.to and idxrec.from fields will
-    contain the user numbers (or 0 for non-user destination/source) instead of
-    the CRC-16 of the agent name.</pre>
-<pre>    <b>SMB_HYPERALLOC  (1&lt;&lt;1)</b></pre>
-<pre>    Indicates the message base uses the Hyper Allocation storage method. This
-    bit should not be cleared by an application without first deleting all the
-    messages in the message base. This is due to the fact the Hyper Allocation
-    is not downward compatible with the Self-packing and Fast Allocation
-    storage methods.</pre>
-<pre>When used with Synchronet BBS software, a message base must NOT have both of
-the above attributes set. The only message base that should have the SMB_EMAIL
-attribute set is the DATA\MAIL message base.
-
-<b><u>Base Header #1 (Status info) Record Contents:</u></b>
-
-smbhdr.id=&quot;SMB\x1a&quot;;        // SMB^Z
-smbhdr.version=0x121;       // v1.21
-smbhdr.length=sizeof(smbhdr_t)+sizeof(smbstatus_t); smbstatus_t status;
-</pre>
-<pre><b><u>Additional Base Headers:</u></b>
-
-Additional headers from developers must have initial 8 bytes in smbhdr_t
-format, length must include size of smbhdr_t, and header_offset of smbstatus_t
-must be changed to include the size of the additional header(s).</pre>
-<pre><b>Example file dump (base header portion only):</b></pre>
-<blockquote>
-<pre>000000 53 4D 42 1A 20 01 20 00 F4 01 00 00 F4 01 00 00 SMB.............
-000010 20 00 00 00 D0 07 00 00 D0 07 00 00 00 00 00 00  ...............</pre>
-</blockquote>
-<pre><b><u>Message Header Record (Fixed portion):</u></b>
-
-<i>C example:</i></pre>
-<pre>typedef struct {</pre>
-<pre>    uchar   id[4];          // SHD^Z (same for all types and versions)
-    ushort  type;           // Message type (this is the definition of type 0)
-    ushort  version;        // Version of type (initially 100h for 1.00)
-    ushort  length;         // Total length of fixed portion + all fields
-    ushort  attr;           // Attributes (bit field) (duplicated in SID)
-    ulong   auxattr;        // Auxiliary attributes (bit field)
-    ulong   netattr;        // Network attributes (bit field)
-    when_t  when_written;   // Date/Time message was originally created
-    when_t  when_imported;  // Date/Time message was imported (locally)
-    ulong   number;         // Message number (unique, not necessarily seq.)
-    ulong   thread_orig;    // Original message number in thread
-    ulong   thread_next;    // Next message in thread
-    ulong   thread_first;   // Number of first reply to this message
-    uchar   reserved[16];   // 16 reserved bytes for future use
-    ulong   offset;         // Offset for buffer into data file (0 or mod 256)
-    ushort  total_dfields;  // Total number of data fields</pre>
-<pre>    } msghdr_t;</pre>
-<pre>typedef struct {</pre>
-<pre>    ushort  type;           // See &quot;Data Field Types&quot; values
-    ulong   offset;         // Offset into buffer 
-    ulong   length;         // Length of data field in buffer</pre>
-<pre>    } dfield_t;</pre>
-<pre>typedef struct {</pre>
-<pre>    ushort  type;           // See &quot;Header Field Types&quot; for values
-    ushort  length;         // Length of buffer
-    uchar   dat[length];</pre>
-<pre>    } hfield_t;
-</pre>
-<pre><b>Example file dump (one header record, both fixed and variable length portions):</b></pre>
-<blockquote>
-<pre>000020 53 48 44 1A 00 00 20 01 F5 00 00 00 00 00 00 00 SHD... .........
-000030 00 00 00 00 46 DB F7 2C 00 00 7D D7 29 2D 00 00 .......,..}�)-..
-000040 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
-000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
-000060 00 00 00 00 02 00 00 00 00 00 00 00 4A 01 00 00 ............J...
-000070 02 00 4A 01 00 00 53 00 00 00 00 00 13 00 4D 61 ..J...S.......Ma
-000080 72 69 61 6E 6E 65 20 4D 6F 6E 74 67 6F 6D 65 72 rianne Montgomer
-000090 79 30 00 0C 00 43 61 72 6F 6C 20 47 61 69 73 65 y0...Carol Gaise
-0000A0 72 60 00 07 00 46 61 72 6E 68 61 6D A4 00 14 00 r`...Farnham....
-0000B0 31 3A 31 33 38 2F 31 30 32 2E 30 20 32 63 66 38 1:138/102.0 2cf8
-0000C0 30 35 37 36 A5 00 14 00 31 3A 33 34 33 2F 31 30 0576....1:343/10
-0000D0 30 2E 30 20 32 63 66 33 62 39 30 61 A3 00 23 00 0.0 2cf3b90a..#.
-0000E0 31 33 38 2F 31 30 32 20 31 20 32 37 30 2F 31 30 138/102 1 270/10
-0000F0 31 20 32 30 39 2F 32 30 39 20 31 30 33 2F 30 20 1 209/209 103/0
-000100 33 35 35 02 00 02 00 02 00 03 00 08 00 01 00 8A 355.............
-000110 00 66 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .f..............</pre>
-</blockquote>
-<pre><b><u>Contents of example header:</u></b></pre>
-<pre>id                   SHD^Z
-type                 0000h
-version              0120h
-length               245
-attr                 0000h
-auxattr              00000000h
-netattr              00000000h
-when_written         Sat Nov 27 17:57:10 1993
-when_imported        Tue Jan 04 15:54:21 1994
-number               1
-thread_orig          0
-thread_next          0
-thread_first         0
-reserved[16]         
-offset               0
-total_dfields        2</pre>
-<pre>dfield[0].type       00h
-dfield[0].offset     0
-dfield[0].length     330
-dfield[1].type       02h
-dfield[1].offset     330
-dfield[1].length     83</pre>
-<pre>hfield[0].type       00h
-hfield[0].length     19
-hfield[0]_dat        Marianne Montgomery
-hfield[1].type       30h
-hfield[1].length     12
-hfield[1]_dat        Carol Gaiser
-hfield[2].type       60h
-hfield[2].length     7
-hfield[2]_dat        Farnham
-hfield[3].type       A4h
-hfield[3].length     20
-hfield[3]_dat        1:138/102.0 2cf80576
-hfield[4].type       A5h
-hfield[4].length     20
-hfield[4]_dat        1:343/100.0 2cf3b90a
-hfield[5].type       A3h
-hfield[5].length     35
-hfield[5]_dat        138/102 1 270/101 209/209 103/0 355
-hfield[6].type       02h
-hfield[6].length     2
-hfield[6]_dat        02 00
-hfield[7].type       03h
-hfield[7].length     8
-hfield[7]_dat        01 00 8A 00 66 00 00 00
-
-<b><u>Fixed Portion Field descriptions:</u></b>
-
-<b>Id:</b>
-This field (regardless of the header type or version) must always contain the
-the string &quot;SHD^Z&quot;. This is to aid in the restoration of a corrupted header
-file and give a visual indication of the beginning of a new header record when
-viewing dumps of the header file.</pre>
-<pre><b>Type:</b>
-This is the message header type. Only one type is currently defined by this
-specification (type 0). Any and all future header types will have the first
-4 fields (10 bytes) in the same format of type 0. This allows other types
-(with different lengths) to be skipped because the 4th field (length) will
-always be in the same position.</pre>
-<pre><b>Version:</b>
-This is the version of this header type. This specification defines version
-1.21 of message header type 0 (stored as 121h).</pre>
-<pre><b>Length:</b>
-This is the total length of this message header record (including both fixed
-and variable length portions, but NOT including unused block space).</pre>
-<pre><b>Attr:</b>
-This is a bit field (16-bit) containing basic message attributes (flags) for
-this message. An exact duplicate of this field is stored in the index file as
-well. They must always match.</pre>
-<pre><b>Auxattr:</b>
-This is a bit field (32-bit) containing the auxiliary attributes (flags) for
-this message. The attributes stored in this variable are more specific in
-nature and less critical than those in the Attr field.</pre>
-<pre><b>Netattr:</b>
-This is a bit field (32-bit) containing the network attributes (flags) for this
-message. The attributes stored in this variable are related solely to message
-networking.</pre>
-<pre><b>When_written:</b>
-This is the date and time when the message was originally created.</pre>
-<pre><b>When_imported:</b>
-This is the date and time when the message was posted on or imported into the
-local message system.</pre>
-<pre><b>Number:</b>
-This is the message's unique serial number (from 1 to FFFFFFFFh). This field
-is duplicated in the index file. They must always match.
-
-<b>Thread_orig:
-</b>If this message is a reply, then this field contains the number of the original
-message that was replied to. If this message was not a reply, this field will
-contain the value 0.</pre>
-<pre><b>Thread_next:
-</b>If this message is a reply, and there are later replies to that message
-(the message number contained in the Thread_orig field), then this field will
-contain the number of the next reply in the chain. If this message is the only
-reply to the original message, this field will contain the value 0.</pre>
-<pre><b>Thread_first:
-</b>If there are any replies to this message (after it has been posted), this field
-will contain the number of the first reply to this message. If there are no
-replies to this message, this field will contain the value 0.</pre>
-<pre><b>Reserved:
-</b>Unused bytes, reserved for future definition in the message header type 0
-specification.</pre>
-<pre><b>Offset:
-</b>The byte offset into the data file, specifying the start of the buffer for
-all data associated with this message. This value must be either 0 or modulus
-256. When retrieving the actual data portion of data fields, the physical
-offset into the file will be the offset of the message data buffer (this field)
-plus the offset of the individual data field (msghdr_t.offset+dfield_t.offset).</pre>
-<pre><b>Total_dfields:
-</b>This field contains the total number of data fields associated with this
-message. The value of this field must match the actual number of data fields
-stored in the header (dfield_t data types following the fixed portion of the
-message header).
-</pre>
-<pre><b><u>Variable Portion Field descriptions:</u></b>
-
-See the Header Field Type and Data Field Type sections for the descriptions
-of the values contained in these fields.</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h3><u><a name="Message Header Block Allocation (*.SHA)">Message Header Block
-Allocation (*.SHA)</a></u></h3>
-<pre>If this message base uses the Hyper Allocation storage method (the
-SMB_HYPERALLOC bit is set in the smbstatus_t.attr field), then this file is
-not created or used.</pre>
-<pre>This file contains no header or signature data. Each byte (uchar) in the file
-specifies the allocation state of the corresponding 256 byte block in the
-header (*.SHD) file. A value of 0 indicates a free header block, and a value of
-1 indicates an allocated block. Other non-zero values are undefined.</pre>
-<pre>This file must always be opened DENY ALL (non-shareable).</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h3><u><a name="Message Data (*.SDT)">Message Data (*.SDT)</a></u></h3>
-<pre>This file contains no header or signature data. It contains the text and other
-embedded data for the messages in a single message base. The data for each
-message always begins on a 256 byte block boundary. The data in the unused
-portion of a data block is undefined, but should be initialized to NULL
-whenever possible.</pre>
-<pre>This file must always be opened DENY NONE (shareable).</pre>
-<pre>Data fields of type TEXT_BODY and TEXT_TAIL must have all trailing white space
-and control characters removed (i.e. the last character of the data record
-must be in the range 21h to FFh). The only exception to this rule, is if the
-TEXT_BODY is terminated with multiple contiguous CRLFs, only the last CRLF
-should be removed. A CRLF should always be appended to the text data when it is
-displayed.</pre>
-<pre>When reading from this file, it is a good idea to make sure the message header
-for the data being read is currently locked (though no single message header
-should be locked for extended durations of time). This will insure that no
-other application will write to this portion of the file while it's being
-read (read from disk, not displayed).</pre>
-<pre>When using the Hyper Allocation storage method, the Status Info message base
-header must be successfully locked before writing to this file and subsequently
-unlocked.</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h3><u><a name="Message Data Block Allocation (*.SDA)">Message Data Block
-Allocation (*.SDA)</a></u></h3>
-<pre>If this message base uses the Hyper Allocation storage method (the
-SMB_HYPERALLOC bit is set in the smbstatus_t.attr field), then this file is
-not created or used.</pre>
-<pre>This file contains no header or signature data. Each word (ushort) in the file
-specifies the allocation state of the corresponding 256 byte block in the data
-(*.SDT) file. A value of 0 indicates a free block, and a non-zero value
-indicates the number of message header records associated with this message
-data (most often 1). Each block can be used by up to 65,535 header records.</pre>
-<pre>This file must always be opened DENY ALL (non-shareable).</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h3><u><a name="CRC history for duplicate message checking (*.SCH)">CRC history
-for duplicate message checking (*.SCH)</a></u></h3>
-<pre>This file is optional and contains no header or signature data. Each long word
-(ulong) in the file contains a CRC-32 of previously posted/imported messages.
-These CRCs can be used to check a candidate message for posting/import to be
-sure the message isn't a duplicate created by human or program error. The
-maximum number of CRCs to store is defined in the first message base header
-record (smbstatus_t.max_crcs).</pre>
-<pre>The CRC is calculated on the first TEXT_BODY data field before any translations
-are applied (e.g. encoding, compression, encryption).</pre>
-<pre>This file must always be opened DENY ALL (non-shareable).</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h2><u><a name="Header Field Types:">Header Field Types:</a></u></h2>
-<pre>These are the defined valid values for hfield_t.type:</pre>
-<pre>Name     : SENDER
-Value    : 00h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : Yes
-Summary  : Name of agent that sent this message</pre>
-<pre>If blank (0 length or nulstr), assumed &quot;Anonymous&quot;. If multiple SENDER fields
-exist, then the message has been forwarded and the order of the fields in the
-record must match the forwarding order (chronologically). When forwarding a
-message, the original SENDER field should be left intact and new SENDER,
-FORWARDED, and RECIPIENT fields added to the end of the record.</pre>
-<pre>Name     : SENDERAGENT
-Value    : 01h
-Data     : ushort
-Multiple : Yes, order significant
-Required : No
-Default  : AGENT_PERSON or previous SENDERAGENT if exists
-Summary  : Type of agent that sent this message</pre>
-<pre>If multiple SENDER fields exist, then the message has been forwarded. If any of the
-forwarding agents is of a type other than AGENT_PERSON, then this field must
-follow that SENDER field to specify the agent type.</pre>
-<pre>Name     : SENDERNETTYPE
-Value    : 02h
-Data     : ushort
-Multiple : Yes, order significant
-Required : No
-Default  : NET_NONE or previous SENDERNETTYPE if exists
-Summary  : Type of network message was sent from</pre>
-<pre>If multiple SENDERNETADDR fields are included, a SENDERNETTYPE field should be
-included before each to determine what data type the address is stored in.</pre>
-<pre>Name     : SENDERNETADDR
-Value    : 03h
-Data     : undef
-Multiple : Yes, order significant
-Required : No
-Default  : Previous SENDERNETADDR if exists
-Summary  : Network address for agent that sent this message</pre>
-<pre>The SENDERNETTYPE field indicates the data type of this field. If the
-SENDERNETTYPE is of type NET_INTERNET, the local-part of the Internet
-address is optional. If the local-part separator character ('@') is omitted,
-the SENDER field is assumed to be the local-part of the address.</pre>
-<pre>Name     : SENDEREXT
-Value    : 04h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : Previous SENDEREXT if exists
-Summary  : Extension of sending agent</pre>
-<pre>This field is useful for storing the sending agent's extension, when the
-agent's extension binds more tightly than the agent's name.</pre>
-<pre>For example, Synchronet Multinode BBS Software stores local e-mail with the
-sending and receiving agent's user numbers stored as their respective
-extensions. This is done so that if a user name changes for some reason,
-messages will not &quot;disappear&quot; from the user's mail box.</pre>
-<pre>If the SMB_EMAIL status header attribute is set, then the &quot;From&quot; field in the
-index must contain the binary value of this field rather than the CRC-16 of the
-SENDER (name) field.</pre>
-<pre>Name     : SENDERPOS
-Value    : 05h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : Previous SENDERPOS if exists
-Summary  : Position of sending agent</pre>
-<pre>Primarily for documentary purposes, this field contains the position of the
-sending agent (i.e. President, Sysop, C.E.O., MIS Director, etc).</pre>
-<pre>It can also be useful for getting a message or reply to the intended
-recipient when the agent name is not located or is unknown, but the position
-of the agent is known and specified.</pre>
-<pre>Name     : SENDERORG
-Value    : 06h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : Previous SENDERORG if exists
-Summary  : Organization name of sending agent</pre>
-<pre>Primarily for documentary purposes, this field contains the organization to
-which the sending agent belongs (i.e. Microsoft, Joe's BBS, SoCal User's Group,
-etc).
-
-Name     : AUTHOR
-Value    : 10h
-Data     : ASCII
-Multiple : Yes
-Required : No
-Default  : First SENDER
-Summary  : Name of agent that created this message</pre>
-<pre>This field can only be added by the process that originally creates the
-message. It should not be included if same as first SENDER field. If multiple
-AUTHOR fields exist, then the message was created by multiple agents and is
-considered valid. The order of multiple AUTHOR fields in the record is not
-significant.</pre>
-<pre>Name     : AUTHORAGENT
-Value    : 11h
-Data     : ushort
-Multiple : Yes, order significant
-Required : No
-Default  : SENDERAGENT or previous AUTHORAGENT if exists
-Summary  : Type of agent that created this message</pre>
-<pre>This field can only be added by the process that originally creates the
-message. It should not be included if same as first SENDERAGENT field. If
-multiple AUTHOR fields exist, then the message was created by multiple agents
-and if the agent type for any of the authors is other than AGENT_PERSON, an
-AUTHORAGENT field must follow to specify the agent type.</pre>
-<pre>Name     : AUTHORNETTYPE
-Value    : 12h
-Data     : ushort
-Multiple : Yes, order significant
-Required : No
-Default  : SENDERNETTYPE or previous AUTHORNETTYPE if exists
-Summary  : Type of network this author is member of</pre>
-<pre>Name     : AUTHORNETADDR
-Value    : 13h
-Data     : undef
-Multiple : Yes, order significant
-Required : No
-Default  : SENDERNETADDR or previous AUTHORNETADDR if exists
-Summary  : Network address of this author
-
-Name     : AUTHOREXT
-Value    : 14h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : SENDEREXT or previous AUTHOREXT if exists
-Summary  : Extension of this author</pre>
-<pre>Name     : AUTHORPOS
-Value    : 15h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : SENDERPOS or previous AUTHORPOS if exists
-Summary  : Position of this author</pre>
-<pre>Name     : AUTHORORG
-Value    : 16h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : SENDERORG or previous AUTHORORG if exists
-Summary  : Organization this author belongs to
-
-Name     : REPLYTO
-Value    : 20h
-Data     : ASCII
-Multiple : Yes, but only last is valid
-Required : No
-Default  : SENDER
-Summary  : Name of agent that replies should go to</pre>
-<pre>Name     : REPLYTOAGENT
-Value    : 21h
-Data     : ushort
-Multiple : Yes, but only last is valid
-Required : No
-Default  : SENDERAGENT
-Summary  : Type of agent that replies should go to</pre>
-<pre>Name     : REPLYTONETTYPE
-Value    : 22h
-Data     : ushort
-Multiple : Yes, but only last is valid
-Required : No
-Default  : SENDERNETTYPE
-Summary  : Type of network that replies should go to</pre>
-<pre>Name     : REPLYTONETADDR
-Value    : 23h
-Data     : undef
-Multiple : Yes, but only last is valid
-Required : No
-Default  : SENDERNETADDR
-Summary  : Network address that replies should go to
-
-Name     : REPLYTOEXT
-Value    : 24h
-Data     : ASCII
-Multiple : Yes, but only last is valid
-Required : No
-Default  : SENDEREXT
-Summary  : Extension of agent that replies should go to</pre>
-<pre>Name     : REPLYTOPOS
-Value    : 25h
-Data     : ASCII
-Multiple : Yes, but only last is valid
-Required : No
-Default  : SENDERPOS
-Summary  : Position of agent that replies should go to</pre>
-<pre>Name     : REPLYTOORG
-Value    : 26h
-Data     : ASCII
-Multiple : Yes, but only last is valid
-Required : No
-Default  : SENDERORG
-Summary  : Organization of agent that replies should go to
-
-Name     : RECIPIENT
-Value    : 30h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : Yes
-Default  : &quot;All&quot;
-Summary  : Name of agent to receive this message</pre>
-<pre>If multiple RECIPIENT fields exist, the message has been forwarded and for each
-additional RECIPIENT field (after the initial RECIPIENT), there should be a
-FORWARDED field. The order of the RECIPIENT fields in the record must match the
-order in which the message was sent and forwarded (chronologically).</pre>
-<pre>Name     : RECIPIENTAGENT
-Value    : 31h
-Data     : ushort
-Multiple : Yes, order significant
-Required : No
-Default  : AGENT_PERSON or previous RECIPIENTAGENT if exists
-Summary  : Type of agent to receive this message</pre>
-<pre>If multiple RECIPIENT fields exist, the message has been forwarded. If any of
-the recipient agents are of a type other than AGENT_PERSON, this field must
-follow the RECIPIENT field to specify the agent type.</pre>
-<pre>Name     : RECIPIENTNETTYPE
-Value    : 32h
-Data     : ushort
-Multiple : Yes, order significant
-Required : No
-Default  : NET_NONE or previous RECIPIENTNETTYPE if exists
-Summary  : Type of network to receive this message</pre>
-<pre>Name     : RECIPIENTNETADDR
-Value    : 33h
-Data     : undef
-Multiple : Yes, order significant
-Required : No
-Default  : Previous RECIPIENTNETADDR if exists
-Summary  : Address of network to receive this message
-
-Name     : RECIPIENTEXT
-Value    : 34h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : Previous RECIPIENTEXT if exists
-Summary  : Extension of agent to receive this message</pre>
-<pre>If SMB_EMAIL status header attribute is set, then the &quot;To&quot; field in the index
-must contain the binary value of this field rather than the CRC-16 of the
-RECIPIENT (name) field. This is the case specifically with the local e-mail
-message base on a Synchronet BBS.</pre>
-<pre>Name     : RECIPIENTPOS
-Value    : 35h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : Previous RECIPIENTPOS if exists
-Summary  : Position of agent to receive this message</pre>
-<pre>Name     : RECIPIENTORG
-Value    : 36h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : Previous RECIPIENTORG if exists
-Summary  : Type of agent to receive this message
-
-Name     : FORWARDTO
-Value    : 40h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Summary  : Name of agent this message is to be forwarded to</pre>
-<pre>Name     : FORWARDTOAGENT
-Value    : 41h
-Data     : ushort
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTAGENT or previous FORWARDTOAGENT if exists
-Summary  : Type of agent this message is to be forwarded to</pre>
-<pre>Name     : FORWARDTONETTYPE
-Value    : 42h
-Data     : ushort
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTNETTYPE or previous FORWARDTONETTYPE if exists
-Summary  : Type of network this message is to be forwarded to</pre>
-<pre>Name     : FORWARDTONETADDR
-Value    : 43h
-Data     : undef
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTNETADDR or previous FORWARDTONETADDR if exists
-Summary  : Network address this message is to be forwarded to
-
-Name     : FORWARDTOEXT
-Value    : 44h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTEXT or previous FORWARDTOEXT if exists
-Summary  : Extension of agent this message is to be forwarded to</pre>
-<pre>Name     : FORWARDTOPOS
-Value    : 45h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTPOS or previous FORWARDTOPOS if exists
-Summary  : Position of agent this message is to be forwarded to</pre>
-<pre>Name     : FORWARDTOORG
-Value    : 46h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTORG or previous FORWARDTOORG if exists
-Summary  : Organization of agent this message is to be forwarded to</pre>
-<pre>Name     : FORWARDED
-Value    : 48h
-Data     : when_t
-Multiple : Yes, order significant
-Required : Yes, if forwarded
-Summary  : Date/Time this message was forwarded to another agent
-
-Name     : RECEIVEDBY
-Value    : 50h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : Yes, if receiving agent is other than RECIPIENT
-Summary  : Name of agent that received this message</pre>
-<pre>Name     : RECEIVEDBYAGENT
-Value    : 51h
-Data     : ushort
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTAGENT or previous RECEIVEDBYAGENT if exists
-Summary  : Type of agent that received this message</pre>
-<pre>Name     : RECEIVEDBYNETTYPE
-Value    : 52h
-Data     : ushort
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTNETTYPE or previous RECEIVEDBYNETTYPE if exists
-Summary  : Type of network that received this message</pre>
-<pre>Name     : RECEIVEDBYNETADDR
-Value    : 53h
-Data     : undef
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTNETADDR or previous RECEIVEDBYNETADDR if exists
-Summary  : Network address that received this message
-
-Name     : RECEIVEDBYEXT
-Value    : 54h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTEXT or previous RECEIVEDBYEXT if exists
-Summary  : Extension of agent that received this message</pre>
-<pre>Name     : RECEIVEDBYPOS
-Value    : 55h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTPOS or previous RECEIVEDBYPOS if exists
-Summary  : Position of agent that received this message</pre>
-<pre>Name     : RECEIVEDBYORG
-Value    : 56h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTORG or previous RECEIVEDBYORG if exists
-Summary  : Organization of agent that received this message</pre>
-<pre>Name     : RECEIVED
-Value    : 58h
-Data     : when_t
-Multiple : Yes, order significant
-Required : Yes, if received
-Default  : NULL
-Summary  : Date/Time this message was received
-
-Name     : SUBJECT
-Value    : 60h
-Data     : ASCII
-Multiple : No
-Required : Yes, but may be blank (0 length or nulstr)
-Summary  : Subject/title of message</pre>
-<pre>Name     : SUMMARY
-Value    : 61h
-Data     : ASCII
-Multiple : No
-Required : No
-Summary  : Summary of message contents, created by AUTHOR</pre>
-<pre>Name     : COMMENT
-Value    : 62h
-Data     : ASCII
-Multiple : Yes
-Required : No
-Summary  : Comment about this message, created by SENDER</pre>
-<pre>This field is useful for adding notes to a message when forwarding to a new
-recipient.</pre>
-<pre>Name     : CARBONCOPY
-Value    : 63h
-Data     : ASCII
-Multiple : Yes
-Required : No
-Summary  : List of agents this message was also sent to</pre>
-<pre>This field is optional and only for the use of notifying the recipient of who
-else received the message.</pre>
-<pre>Name     : GROUP
-Value    : 64h
-Data     : ASCII
-Multiple : Yes
-Required : No
-Summary  : Name of group of users to receive message on recipient system</pre>
-<pre>This field is used when sending to a group name across a network, where the
-group can be expanded into multiple header records for each agent on the
-destination system.</pre>
-<pre>Name     : EXPIRATION
-Value    : 65h
-Data     : when_t
-Multiple : No
-Required : No
-Summary  : Date/Time that this message will expire
-
-Name     : PRIORITY
-Value    : 66h
-Data     : ulong
-Multiple : No
-Required : No
-Default  : 0
-Summary  : Message priority (0 is lowest, FFFFFFFFh is highest)
-
-Name     : FILEATTACH
-Value    : 70h
-Data     : ASCII
-Multiple : Yes
-Required : No
-Summary  : Name/file specification of attached file(s)</pre>
-<pre>Name of attached file(s). Wildcards allowed. MSG_FILEATTACH attribute must be
-set. If the MSG_FILEATTACH attribute is set but this field is not included,
-the SUBJECT field is assumed to be the filename(s).</pre>
-<pre>Name     : DESTFILE
-Value    : 71h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Summary  : Destination name for attached file(s)</pre>
-<pre>Wildcards allowed. FILEATTACH field must also be included.</pre>
-<pre>Name     : FILEATTACHLIST
-Value    : 72h
-Data     : ASCII
-Multiple : Yes
-Required : No
-Summary  : Name of ASCII list of attached filenames</pre>
-<pre>Wildcards not allowed in ASCII list filename. Wildcards allowed in ASCII list.
-MSG_FILEATTACH attribute must be set.</pre>
-<pre>Name     : DESTFILELIST
-Value    : 73h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Summary  : Name of ASCII list of destination filenames</pre>
-<pre>Wildcards not allowed in ASCII list filename. Wildcards allowed in ASCII list.</pre>
-<pre>Name     : FILEREQUEST
-Value    : 74h
-Data     : ASCII
-Multiple : Yes
-Required : No
-Summary  : Name of requested file</pre>
-<pre>Wildcards allowed. MSG_FILEREQUEST attribute must be set</pre>
-<pre>Name     : FILEPASSWORD
-Value    : 75h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Summary  : Password for FILEREQUEST</pre>
-<pre>Name     : FILEREQUESTLIST
-Value    : 76h
-Data     : ASCII
-Multiple : Yes
-Required : No
-Summary  : Name of ASCII list of filenames to request</pre>
-<pre>Wildcards allowed.</pre>
-<pre>Name     : FILEPASSWORDLIST
-Value    : 77h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Summary  : Name of ASCII list of passwords for FILEREQUESTLIST
-
-Name     : IMAGEATTACH
-Value    : 80h
-Data     : mattach_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of attached image file for display</pre>
-<pre>MSG_FILEATTACH attribute must be set. See Image Types for valid
-mattach_t.type values.</pre>
-<pre>Name     : ANIMATTACH
-Value    : 81h
-Data     : mattach_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of attached graphical animation file for display</pre>
-<pre>MSG_FILEATTACH attribute must be set. See Animation Types for valid
-mattach_t.type values.</pre>
-<pre>Name     : FONTATTACH
-Value    : 82h
-Data     : mattach_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of attached font definition file</pre>
-<pre>MSG_FILEATTACH attribute must be set. See Font Types for valid mattach_t.type
-values.</pre>
-<pre>Name     : SOUNDATTACH
-Value    : 83h
-Data     : mattach_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of attached sound file for playback</pre>
-<pre>MSG_FILEATTACH attribute must be set. See Sound Types for valid mattach_t.type
-values.</pre>
-<pre>Name     : PRESENTATTACH
-Value    : 84h
-Data     : mattach_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of attached presentation definition file</pre>
-<pre>MSG_FILEATTACH attribute must be set. See Present Types for valid
-mattach_t.type values.
-
-Name     : VIDEOATTACH
-Value    : 85h
-Data     : vattach_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of attached interleaved video/sound file</pre>
-<pre>MSG_FILEATTACH attribute must be set. See Video Types for valid
-vattach_t.type values and Video Compression Types for valid vattach_t.comp
-values.</pre>
-<pre>Name     : APPDATAATTACH
-Value    : 86h
-Data     : mattach_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Name of attached application data file for process/display</pre>
-<pre>MSG_FILEATTACH attribute must be set. See Application Data Types for valid
-mattach_t.type values.
-
-Name     : IMAGETRIGGER
-Value    : 90h
-Data     : typestr_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of image file to trigger for display</pre>
-<pre>See Image Types for valid typestr_t.type values.</pre>
-<pre>Name     : ANIMTRIGGER
-Value    : 91h
-Data     : typestr_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of animation file to trigger for display</pre>
-<pre>See Animation Types for valid typestr_t.type values.</pre>
-<pre>Name     : FONTTRIGGER
-Value    : 92h
-Data     : typestr_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of font definition file to trigger</pre>
-<pre>See Font Types for valid typestr_t.type values.</pre>
-<pre>Name     : SOUNDTRIGGER
-Value    : 93h
-Data     : typestr_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of sound file to trigger for playback</pre>
-<pre>See Sound Types for valid typestr_t.type values.</pre>
-<pre>Name     : PRESENTTRIGGER
-Value    : 94h
-Data     : typestr_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of presentation definition file to trigger</pre>
-<pre>See Present Types for valid typestr_t.type values.</pre>
-<pre>Name     : VIDEOTRIGGER
-Value    : 95h
-Data     : typestr_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of interleaved video/sound file to trigger</pre>
-<pre>See Video Types for valid typestr_t.type values.</pre>
-<pre>Name     : APPDATATRIGGER
-Value    : 96h
-Data     : typestr_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of application data file to trigger</pre>
-<pre>See Application Data Types for valid typestr_t.type values.
-
-Name     : FIDOCTRL
-Value    : A0h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Format   : keyword &quot;:&quot; [&quot; &quot;] appdata
-Summary  : FTS/FSC-compliant control information line</pre>
-<pre>Any FidoNet FTS/FSC-compliant control information (&quot;kludge&quot;) line that
-does not have an equivalent representation here. All data not unique to the
-actual control line, including leading and trailing white space, Ctrl-A (01h)
-character and terminating CR must be ommitted. Defined in FTS-0001.</pre>
-<pre>Name     : FIDOAREA
-Value    : A1h
-Data     : ASCII
-Multiple : No
-Required : No
-Summary  : FTN EchoMail conference name.</pre>
-<pre>Defined in FTS-0004.</pre>
-<pre>Name     : FIDOSEENBY
-Value    : A2h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Format   : net&quot;/&quot;node [&quot; &quot;[net&quot;/&quot;]node] [...]
-Summary  : Used to store two-dimensional (net/node) SEEN-BY information</pre>
-<pre>Often used in FTN EchoMail environments. Only the actual SEEN-BY data is stored
-and SEEN-BY: is stripped along with any leading and trailing white space
-characters. Defined in FTS-0004.</pre>
-<pre>Name     : FIDOPATH
-Value    : A3h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Format   : net&quot;/&quot;node [&quot; &quot;[net&quot;/&quot;]node] [...]
-Summary  : Used to store two-dimensional (net/node)</pre>
-<pre>Defined in FTS-0004. ^aPATH: is stripped along with any leading and trailing
-white space characters.
-
-Name     : FIDOMSGID
-Value    : A4h
-Data     : ASCII
-Multiple : No
-Required : No
-Format   : origaddr &quot; &quot; serialno
-Summary  : MSGID field as specified in FTS-0009.</pre>
-<pre>Name     : FIDOREPLYID
-Value    : A5h
-Data     : ASCII
-Multiple : No
-Required : No
-Format   : origaddr &quot; &quot; serialno
-Summary  : REPLY field as specified in FTS-0009.</pre>
-<pre>Name     : FIDOPID
-Value    : A6h
-Data     : ASCII
-Multiple : No
-Required : No
-Format   : pID &quot; &quot; version [&quot; &quot;serialno]
-Summary  : Identification string of program that created this message</pre>
-<pre>Defined FSC-0046. &quot;^aPID:&quot; and any white space is not included.</pre>
-<pre>Name     : FIDOFLAGS
-Value    : A7h
-Data     : ASCII
-Multiple : Yes
-Required : No
-Summary  : Used to store the FTN FLAGS kludge information</pre>
-<pre>Note that all FLAG options that have binary representation in the message
-header must be removed from the FLAGS string prior to storing it. Only the
-actual flags option string is stored and ^aFLAGS is stripped along with any
-leading and trailing white space characters. Defined in FSC-0053.
-
-Name     : RFC822HEADER
-Value    : B0h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Format   : field-name &quot;:&quot; [field-body] [CRLF]
-Summary  : Undefined RFC-822 header field</pre>
-<pre>Internet Message storage format, that does not have an equivalent
-representation here. Folded header fields are allowed. Terminating CRLF may be
-ommited.</pre>
-<pre>Name     : RFC822MSGID
-Value    : B1h
-Data     : ASCII
-Multiple : No
-Required : No
-Format   : &quot;&lt;&quot; addr-spec &quot;&gt;&quot;
-Summary  : Message-ID field as specified in RFC-822.</pre>
-<pre>Name     : RFC822REPLYID
-Value    : B2h
-Data     : ASCII
-Multiple : No
-Required : No
-Format   : &quot;&lt;&quot; addr-spec &quot;&gt;&quot;
-Summary  : In-Reply-To field as specified in RFC-822.
-
-Name     : UNKNOWN
-Value    : F0h
-Data     : undef
-Multiple : Yes
-Required : No
-Summary  : Undefined header field of undefined type</pre>
-<pre>This field is useful for retaining binary header fields (that do not have an
-equivalent representation here) between message storage formats.</pre>
-<pre>Name     : UNKNOWNASCII
-Value    : F1h
-Data     : ASCII
-Multiple : Yes
-Required : No
-Summary  : Undefined header field of type ASCII</pre>
-<pre>This field is useful for retaining ASCII header fields (that do not have an
-equivalent representation here) between message storage formats.</pre>
-<pre>Name     : UNUSED
-Value    : FFh
-Data     : undef
-Multiple : Yes
-Required : No
-Summary  : Unused (deleted) header field</pre>
-<pre>The data contained in this header field is of an unknown type and should not be
-processed.
-</pre>
-<pre>Note:
-----
-Specifically, not defined are the values F000h through FFFFh. These values
-are to be used for user or system defined header fields. Digital Dynamics
-requests that any developers or organizations that wish to have additional
-header fields added to this specification notify Digital Dynamics through any
-of the contact methods listed at the beginning of this document.</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h2><u><a name="Data Field Types:">Data Field Types:</a></u></h2>
-<pre>These are the defined valid values for dfield_t.type:
-</pre>
-<pre>Val Name                Data        Description
---- ----                ----        -----------
-00h TEXT_BODY           mtext_t     Displayable text (body of message).
-                                    Included in duplicate message checking.
-                                    All terminating white space and control
-                                    characters are to be truncated from data
-                                    (except when multiple contiguous CRLFs
-                                    terminate the text, only the last CRLF
-                                    is removed).</pre>
-<pre>01h TEXT_SOUL           mtext_t     Non-displayed text.
-                                    Not normally displayed. Not necessarily
-                                    displayable.
-                                    Included in duplicate message checking.</pre>
-<pre>02h TEXT_TAIL           mtext_t     Displayable text (tag/tear/origin lines,
-                                    etc).
-                                    Not included in duplicate message checking.
-                                    All terminating white space and control
-                                    characters are to be truncated from data.</pre>
-<pre>03h TEXT_WING           mtext_t     Non-displayed text.
-                                    Not normally displayed. Not necessarily
-                                    displayable.
-                                    Not included in duplicate message checking.</pre>
-<pre>10h FTEXT_BODY          ftext_t     Formatted equivalent of TEXT_BODY to be
-                                    displayed in place of TEXT_BODY if format
-                                    is supported. See Image Types for valid
-                                    values of ftext_t.type.</pre>
-<pre>12h FTEXT_TAIL          ftext_t     Formatted equivalent of TEXT_TAIL to be
-                                    displayed in place of TEXT_TAIL if format
-                                    is supported. See Image Types for valid
-                                    values of ftext_t.type.
-
-20h IMAGEEMBED          membed_t    Type and data of embedded raster image file
-                                    for display.
-                                    See Image Types for valid membed.type
-                                    values.</pre>
-<pre>21h ANIMEMBED           membed_t    Type and data of embedded graphical
-                                    animation file for display.
-                                    See Animation Types for valid membed.type
-                                    values.</pre>
-<pre>22h FONTEMBED           membed_t    Type and data of embedded font definition
-                                    file. See Font Types for valid
-                                    membed_t.type values.</pre>
-<pre>23h SOUNDEMBED          membed_t    Type and data of embedded sound file for
-                                    playback.
-                                    See Sound Types for valid membed_t.type
-                                    values.</pre>
-<pre>24h PRESENTEMBED        membed_t    Type and data of embedded presentation
-                                    definition file.
-                                    See Present Types for valid membed_t.type
-                                    values.</pre>
-<pre>25h VIDEOEMBED          vembed_t    Type and data of embedded video/sound file
-                                    for playback.
-                                    See Video Types for valid vembed_t.type
-                                    values.
-                                    See Video Compression Types for valid
-                                    vembed_t.comp values.</pre>
-<pre>26h APPDATAEMBED        membed_t    Type and data of embedded application data
-                                    file for process/display.
-                                    See Application Data Types for valid
-                                    membed_t.type values.</pre>
-<pre>FFh UNUSED              undef       Space allocated for future update/expansion
-</pre>
-<pre>Specifically, not defined are the values F000h through FFFFh. These values
-are to be used for user or system defined data fields. Digital Dynamics
-requests that any developers or organizations that wish to have additional
-data fields added to this specification notify Digital Dynamics through any
-of the contact methods listed at the beginning of this document.</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h2><u><a name="Message Attributes:">Message Attributes:</a></u></h2>
-<pre>These are the bit values for idxrec_t.attr and msghdr_t.attr:</pre>
-<pre>MSG_PRIVATE         (1&lt;&lt;0)  // Private
-MSG_READ            (1&lt;&lt;1)  // Read by addressee
-MSG_PERMANENT       (1&lt;&lt;2)  // Permanent
-MSG_LOCKED          (1&lt;&lt;3)  // Msg is locked, no editing possible
-MSG_DELETE          (1&lt;&lt;4)  // Msg is marked for deletion
-MSG_ANONYMOUS       (1&lt;&lt;5)  // Anonymous author
-MSG_KILLREAD        (1&lt;&lt;6)  // Delete message after it has been read
-MSG_MODERATED       (1&lt;&lt;7)  // This message must be validated before export
-MSG_VALIDATED       (1&lt;&lt;8)  // This message has been validated by a moderator
-</pre>
-<pre><b>Auxiliary Attributes:</b>
-
-These are the bit values for msghdr_t.auxattr:</pre>
-<pre>MSG_FILEREQUEST     (1&lt;&lt;0)  // File request
-MSG_FILEATTACH      (1&lt;&lt;1)  // File(s) attached to Msg
-MSG_TRUNCFILE       (1&lt;&lt;2)  // Truncate file(s) when sent
-MSG_KILLFILE        (1&lt;&lt;3)  // Delete file(s) when sent
-MSG_RECEIPTREQ      (1&lt;&lt;4)  // Return receipt requested
-MSG_CONFIRMREQ      (1&lt;&lt;5)  // Confirmation receipt requested
-MSG_NODISP          (1&lt;&lt;6)  // Msg may not be displayed to user
-</pre>
-<pre><b>Network Attributes:
-</b>
-These are the bit values for msghdr_t.netattr:</pre>
-<pre>MSG_LOCAL           (1&lt;&lt;0)  // Msg created locally
-MSG_INTRANSIT       (1&lt;&lt;1)  // Msg is in-transit
-MSG_SENT            (1&lt;&lt;2)  // Sent to remote
-MSG_KILLSENT        (1&lt;&lt;3)  // Kill when sent
-MSG_ARCHIVESENT     (1&lt;&lt;4)  // Archive when sent
-MSG_HOLD            (1&lt;&lt;5)  // Hold for pick-up
-MSG_CRASH           (1&lt;&lt;6)  // Crash
-MSG_IMMEDIATE       (1&lt;&lt;7)  // Send Msg now, ignore restrictions
-MSG_DIRECT          (1&lt;&lt;8)  // Send directly to destination
-MSG_GATE            (1&lt;&lt;9)  // Send via gateway
-MSG_ORPHAN          (1&lt;&lt;10) // Unknown destination
-MSG_FPU             (1&lt;&lt;11) // Force pickup
-MSG_TYPELOCAL       (1&lt;&lt;12) // Msg is for local use only
-MSG_TYPEECHO        (1&lt;&lt;13) // Msg is for conference distribution
-MSG_TYPENET         (1&lt;&lt;14) // Msg is direct network mail</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h2><u><a name="Translation Types:">Translation Types:</a></u></h2>
-<pre>Definition for values of *.xlat[x]:</pre>
-<pre>XLAT_NONE           0       // No translation/End of translation list
-XLAT_LF2CRLF        1       // Expand sole LF to CRLF
-XLAT_ESCAPED        2       // 7-bit ASCII escaping for ctrl and 8-bit data
-XLAT_HUFFMAN        3       // Static and adaptive Huffman coding compression
-XLAT_LZW            4       // LZW (Lempel-Ziv-Welch) encoding for compression
-                            // Terry Welch, IEEE Computer Vol 17, No 6
-                            // June 1984, pp 8-19
-XLAT_LZC            5       // LZC (modified LZW) encoding for compression
-                            // Unix compress program
-XLAT_RLE            6       // Run length encoding compression
-XLAT_IMPLODE        7       // Implode compression (PKZIP v1.x)
-XLAT_SHRINK         8       // Shrink compression (PKZIP v1.x)
-XLAT_LZH            9       // LZH dynamic Huffman coding
-                            // Haruyasu Yoshizaki, LHarc
-                            // November, 1988</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h2><u><a name="Agent Types:">Agent Types:</a></u></h2>
-<pre>AGENT_PERSON        0       // To or from person
-AGENT_PROCESS       1       // Unknown process, identified by agent name</pre>
-<pre>Agent types E000h through EFFFh are reserved for Synchronet process types
-(defined specifically by Digital Dynamics).</pre>
-<pre><b>Note:</b>
-
-Specifically not defined are agent types F000h through FFFFh. These values
-are to be used for user or system defined agent types. Digital Dynamics
-requests that any developers or organizations that wish to have additional
-agent types added to this specification notify Digital Dynamics through any
-of the contact methods listed at the beginning of this document.</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h2><u><a name="Network Types:">Network Types:</a></u></h2>
-<pre>                            // Net Type             Address Format
-                            // -----------------------------------
-NET_NONE            0       // Locally created      none
-NET_UNKNOWN         1       // Unknown              undef
-NET_FIDO            2       // FTN network          fidoaddr_t
-NET_POSTLINK        3       // PostLink network     none
-NET_QWK             4       // QWK based network    ASCII
-NET_INTERNET        5       // The Internet         ASCII
-NET_WWIV            6       // WWIV based network   ulong
-NET_MHS             7       // MHS network          ASCII</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h2><u><a name="Media Types:">Media Types:</a></u></h2>
-<pre><b>Image Types:</b></pre>
-<pre>IMAGE_UNKNOWN       0x00    // Use image signature header to determine format
-IMAGE_ASC           0x01    // ASCII text/IBM extended ASCII graphics
-IMAGE_ANS           0x02    // ANSI X3.64 terminal escape sequences
-IMAGE_AVT           0x03    // AVATAR terminal escape sequences
-IMAGE_LVI           0x04    // LVI terminal escape sequences
-IMAGE_GIF           0x05    // Compuserve Graphics Interchange Format (GIF)
-IMAGE_TIF           0x06    // Tagged Image Format (AKA TIFF)
-IMAGE_JPG           0x07    // Joint Photographers Electronics Group (JPEG)
-IMAGE_T16           0x08    // TrueVision 16-bit bitmap (TGA)
-IMAGE_T24           0x09    // TrueVision 24-bit bitmap (TGA)
-IMAGE_T32           0x0a    // TrueVision 32-bit bitmpa (TGA)
-IMAGE_PCX           0x0b    // ZSoft PaintBrush graphics
-IMAGE_BMP           0x0c    // Windows bitmap
-IMAGE_RLE           0x0d    // Windows bitmap (compressed)
-IMAGE_DIB           0x0e    // Display independant bitmap
-IMAGE_PCD           0x0f    // Kodak PhotoCD
-IMAGE_G3F           0x10    // Group 3 FAX
-IMAGE_EPS           0x11    // Encapsulated PostScript
-IMAGE_RTF           0x12    // Rich text format
-IMAGE_RIP           0x13    // Remote Imaging Protocol Script (RIPscrip)
-IMAGE_NAP           0x14    // NAPLPS
-IMAGE_CDR           0x15    // Corel Draw!
-IMAGE_CGM           0x16    // Computer graphics metafile
-IMAGE_WMF           0x17    // Windows metafile
-IMAGE_DFX           0x18    // Autodesk AutoCAD
-IMAGE_IFF           0x19    // Amiga Interchange File Format
-</pre>
-<pre><b>Animation Types:</b></pre>
-<pre>ANIM_UNKNOWN        0       // Use file signature header to determine format
-ANIM_FLI            1       // Autodesk animator
-ANIM_FLC            2       // Autodesk
-ANIM_GL             3       // Grasprt
-ANIM_IFF            4       // Amiga Interchange File Format
-</pre>
-<pre><b>Video Types:</b></pre>
-<pre>VIDEO_UNKNOWN       0       // Use file signature header to determine format
-VIDEO_QTIME         1       // Apple Quick-time
-VIDEO_FQTIME        2       // Apple Flattened Quick-time
-VIDEO_AVI           3       // Windows Auto/Video Interleave
-VIDEO_ULT           4       // OS/2 Ultimotion
-
-<b>Video Compression Types:</b></pre>
-<pre>VCOMP_UNKNOWN       0       // Use file signature header to determine codec
-VCOMP_RLE           1       // Apple animation
-VCOMP_SMC           2       // Apple graphics
-VCOMP_RPZA          3       // Apple video
-VCOMP_KLIC          4       // Captain crunch
-VCOMP_CVID          5       // CinePak
-VCOMP_RT21          6       // Intel indeo R2
-VCOMP_IV31          7       // Intel indeo R3
-VCOMP_YVU9          8       // Intel YVU9
-VCOMP_JPEG          9       // JPEG
-VCOMP_MRLE          10      // Microsoft RLE
-VCOMP_MSVC          11      // Microsoft video 1
-</pre>
-<pre><b>Font Types:</b></pre>
-<pre>FONT_UNKNOWN        0       // Use file signature header to determine format
-FONT_TTF            1       // Windows TrueType
-FONT_PFB            2       // PostScript Type 1 Font Binary
-FONT_PFM            3       // PostScript Type 1 Font Metric
-FONT_AMIGA          4       // Amiga Bitmapped
-FONT_AGFA           5       // CompuGraphic Fonts
-</pre>
-<pre><b>Sound Types:</b></pre>
-<pre>SOUND_UNKNOWN       0       // Use file signature header to determine format
-SOUND_MOD           1       // MOD format
-SOUND_VOC           2       // Sound Blaster VOC format
-SOUND_WAV           3       // Windows 3.1 WAV RIFF format
-SOUND_MID           4       // MIDI format
-SOUND_GMID          5       // General MIDI format (standardized patches)
-SOUND_SMP           6       // Turtle Beach SampleVision format
-SOUND_SF            7       // IRCAM format
-SOUND_AU            8       // Sun Microsystems AU format
-SOUND_IFF           9       // Amiga Interchange File Format
-
-<b>Application Data Types:</b></pre>
-<pre>APPDATA_UNKNOWN     0       // Use file signature header to determine format
-APPDATA_WORDPERFECT 1       // WordPerfect Document
-APPDATA_WKS         2       // Lotus 123 Worksheet (?)
-APPDATA_WK1         3       // Lotus 123 Worksheet rev 1
-APPDATA_WK2         4       // Lotus 123 Worksheet rev 2
-APPDATA_WK3         5       // Lotus 123 Worksheet rev 3
-APPDATA_DBF         6       // dBase III data file
-APPDATA_PDX         7       // Paradox data file
-APPDATA_EXCEL       8       // Excel data file
-APPDATA_QUATRO      9       // Borland Quatro Pro file
-APPDATA_WORD        10      // Microsoft Word</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h2><u><a name="Message Storage Pseudo Code">Message Storage Pseudo Code</a></u></h2>
-<pre>The following is a &quot;C like&quot; pseudo code listing example of adding a message to
-an SMB message base. SMBLIB contains C functions to do most of the following
-operations. We are supplying this pseudo code as a general definition of the
-order of required operations in writing to the message base. Many details have
-been left out to simplify the code and to demonstrate only the basic
-principles.</pre>
-<pre>shd = open ( MSGBASE.SHD , READ/WRITE/DENY_NONE )
-sdt = open ( MSGBASE.SDT , READ/WRITE/DENY_NONE )
-sid = open ( MSGBASE.SDT , READ/WRITE/DENY_NONE )</pre>
-<pre>lock ( shd , smbhdr )
-read ( shd , smbstatus )</pre>
-<pre>if ( smbstatus.attr &amp; SMB_HYPERALLOC )
-    msg.hdr.offset = filelength ( sdt )</pre>
-<pre>else {
-    number_of_blocks = length_of_message_data / SDT_BLOCK_LEN
-    if ( length_of_message_data % SDT_BLOCK_LEN )   /* unevenly divisible */
-        number_of_blocks = number_of_blocks + 1</pre>
-<pre>    sda = open ( MSGBASE.SDA , READ/WRITE/DENY_ALL )</pre>
-<pre>    if ( fast_allocation_mode )
-        seek ( sda , END_OF_FILE )</pre>
-<pre>    else {
-        seek ( sda , BEGINNING_OF_FILE )
-        while ( not end_of_file ( sda ) ) {
-            read ( sda , allocated , number_of_blocks * 2 )
-            if ( allocated = 0 ) {
-                seek_backwards ( sda , number_of_blocks * 2 )
-                break
-            }
-        }
-    }</pre>
-<pre>    msg.hdr.offset = ( current_position ( sda ) / 2 ) * SDT_BLOCK_LEN</pre>
-<pre>    allocated = 1</pre>
-<pre>    write ( sda , allocated , number_of_blocks * 2 )</pre>
-<pre>    close ( sda )
-}
-
-seek ( sdt , msg.hdr.offset )</pre>
-<pre>write ( sdt , message_data )</pre>
-<pre>if ( smbstatus.attr &amp; SMB_HYPERALLOC )
-    msg.idx.offset = filelength ( shd )</pre>
-<pre>else {
-    number_of_blocks = length_of_message_header / SHD_BLOCK_LEN
-    if ( length_of_message_header % SHD_BLOCK_LEN )   /* unevenly divisible */
-        number_of_blocks = number_of_blocks + 1</pre>
-<pre>    sha = open ( MSGBASE.SHA , READ/WRITE/DENY_ALL )</pre>
-<pre>    if ( fast_allocation_mode )
-        seek ( sha , END_OF_FILE )</pre>
-<pre>    else {
-        seek ( sha , BEGINNING_OF_FILE )
-        while ( not end_of_file ( sha ) ) {
-            read ( sha , allocated , number_of_blocks )
-            if ( allocated = 0 ) {
-                seek_backwards ( sha , number_of_blocks )
-                break
-            }
-        }
-    }</pre>
-<pre>    msg.idx.offset = ( current_position ( sha ) * SHD_BLOCK_LEN )
-    msg.idx.offset = msg.idx.offset + smbstatus.header_offset</pre>
-<pre>    allocated = 1</pre>
-<pre>    write ( sha , allocated , number_of_blocks )</pre>
-<pre>    close ( sha )
-}</pre>
-<pre>seek ( shd , msg.idx.offset )</pre>
-<pre>msg.hdr.number = smbstatus.last_msg+1</pre>
-<pre>write ( shd , msg.hdr )</pre>
-<pre>smbstatus.total_msgs = smbstatus.total_msgs + 1
-smbstatus.last_msg = msg.hdr.number</pre>
-<pre>write ( shd , smbstatus )</pre>
-<pre>write ( sid , msg.idx )</pre>
-<pre>unlock ( shd , smbstatus )</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h2><u><a name="Message Retrieval Pseudo Code">Message Retrieval Pseudo Code</a></u></h2>
-<pre>shd = open ( MSGBASE.SHD , READ/WRITE/DENY_NONE )
-sdt = open ( MSGBASE.SDT , READ/WRITE/DENY_NONE )
-sid = open ( MSGBASE.SDT , READ/WRITE/DENY_NONE )</pre>
-<pre>read ( sid , msg.idx )</pre>
-<pre>seek ( shd , msg.idx.offset )</pre>
-<pre>lock ( shd , msg.hdr )</pre>
-<pre>read ( shd , msg.hdr )</pre>
-<pre>seek ( sdt , msg.hdr.offset )</pre>
-<pre>read ( sdt , msg.hdr.data_length )</pre>
-<pre>unlock ( shd , msg.hdr )</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h2><u><a name="SMBUTIL">SMBUTIL</a></u></h2>
-<pre>SMBUTIL is a utility that can perform various functions on an SMB message base.
-The primary purpose of SMBUTIL is as an example to C programmers of how to use
-the SMBLIB functions to access and modify an SMB message base. The complete C
-source code for SMBUTIL is included and functions from it can be used or
-modified by developers at their own discretion. The following files make up
-SMBUTIL:</pre>
-<pre>SMBUTIL.EXE     Compiled and linked for 16-bit DOS (ready to run)
-SMBUTIL.C       C functions
-SMBUTIL.H       C definitions and variable prototypes
-SMBUTIL.WAT     Makefile for Watcom C/C++ (type wmake -f smbutil.wat)
-SMBUTIL.BOR     Makefile for Borland C/C++ (type make -f smbutil.bor)</pre>
-<pre>The usage syntax is as follows:</pre>
-<pre>SMBUTIL [/opts] cmd smb_filespec.shd</pre>
-<pre>where cmd is one or more of the following:</pre>
-<pre>       l[n] = list msgs starting at number n
-       r[n] = read msgs starting at number n
-       v[n] = view msg headers starting at number n
-       k[n] = kill (delete) n msgs
-       i&lt;f&gt; = import from text file f
-       s    = display msg base status
-       c    = change msg base status
-       m    = maintain msg base - delete old msgs and msgs over max
-       p[k] = pack msg base (k specifies minimum packable Kbytes)</pre>
-<pre>where opts is one or more of the following:</pre>
-<pre>       a    = always (force) packing
-       z&lt;n&gt; = set time zone (n=min +/- from UT or 'EST','EDT','CST',etc)</pre>
-<pre>and smb_filespec is the base filename or file specification (wildcards) for the
-message base. If wildcards are used, the &quot;.SHD&quot; extension must be specified.</pre>
-<pre>An example command line:</pre>
-<pre>SMBUTIL MP C:\SBBS\DATA\SUBS\*.SHD</pre>
-<pre>would maintain and pack all the message bases found in the C:\SBBS\DATA\SUBS
-directory.</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h2><u><a name="CHKSMB">CHKSMB</a></u></h2>
-<pre>CHKSMB is a utility that performs a comprehensive analysis of a message base
-to find any possible errors and calculate the number of packable bytes. It does
-not &quot;fix&quot; a message base if any errors are found, it only reports the specific
-errors (and exits with a non-zero error level). If any errors are reported,
-packing the message base with SMBUTIL may rebuild the damaged files. If that
-doesn't work, then use FIXSMB as a last resort.</pre>
-<pre>C source code for CHKSMB is also included as an example to programmers of how
-to use SMBLIB functions.</pre>
-<pre>The usage syntax is as follows:</pre>
-<pre>CHKSMB [/opts] smb_filespec.shd</pre>
-<pre>where opts is one or more of the following:</pre>
-<pre>        q   = quiet mode (no beeps)
-        s   = stop after an erred message base (for use with wildcards)
-        p   = pause after an erred message base (wait for key press)
-        t   = don't check for unsupported translation strings (faster)
-        e   = display extended information on corrupted messages</pre>
-<pre>An example command line:</pre>
-<pre>CHKSMB /QP C:\SBBS\DATA\SUBS\*.SHD</pre>
-<pre>would check all the message bases in the C:\SBBS\DATA\SUBS directory, without
-beeping on errors, and pausing after an erred message base.</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h2><u><a name="FIXSMB">FIXSMB</a></u></h2>
-<pre>FIXSMB is a utility that will rebuild the index and allocation files for a
-message base. Since the message headers are not necessarily stored
-sequentially, the order of the messages in the index may be changed when the
-index is rebuilt. Messages are also re-numbered, so only use this program if
-the index is corrupted and the messages are extremely important.</pre>
-<pre>C source code for FIXSMB is also included as an example to programmers of how
-to use SMBLIB functions.</pre>
-<pre>The usage syntax is as follows:</pre>
-<pre>FIXSMB [/M] smb_file</pre>
-<pre>An example command line:</pre>
-<pre>FIXSMB \SBBS\DATA\MAIL</pre>
-<pre>Only use the &quot;/M&quot; command line switch if fixing an older Synchronet e-mail
-message base (created with SBBS v2.1 or earlier). Once the SMB_EMAIL status
-attr is set (&quot;SMBUTIL S&quot; will report a status attr of 1), the &quot;/M&quot; is not
-required.</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h2><u><a name="SMBLIB">SMBLIB</a></u></h2>
-<pre>SMBLIB is a library of C functions for accessing and storing messages in an
-SMB format message base. It can eliminate much of the development time for
-developers that wish to use the library in whole or in part, or use the
-functions as examples for their own message base function library. The library
-consists of the following files:</pre>
-<pre>SMBDEFS.H       Constant definitions, macros, and data types
-SMBLIB.H        Library constants and function prototypes
-SMBLIB.C        Function definitions
-SMBVARS.C       Global variable definitions (doubles as declaration file)</pre>
-<pre>For developers to use this library with their program, they must include the
-&quot;SMBLIB.H&quot; header file at the top of each C file that uses any of the library
-functions, global variables, data types, macros, and constants. This can be
-done by simply adding the following line to each .C file:</pre>
-<pre>#include &quot;smblib.h&quot;</pre>
-<pre>If SMBLIB.H is included, there is no need to include SMBDEFS.H or SMBVARS.C.</pre>
-<pre>To link the library functions and variables with a main program, the files
-SMBVARS.OBJ and SMBLIB.OBJ must be linked with the main program .OBJ files.
-If the operating system is DOS, be sure that all .OBJ files are compiled for
-the same memory model.</pre>
-<pre>Example MAKEFILEs for compiling and linking SMBUTIL with Borland C/C++
-(SMBUTIL.BOR) and Watcom C/C++ (SMBUTIL.WAT) are included.</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h3><u><a name="SMBDEFS.H">SMBDEFS.H</a></u></h3>
-<pre>The SMBDEFS.H file contains important constant definitions and data types (also
-defined in this document). If ever this document and SMBDEFS.H are inconsistent
-with each other, then SMBDEFS.H is to be considered correct and this document
-in error. If such a discrepancy is found, please notify Digital Dynamics so it
-can be corrected in a future revision of the specification.</pre>
-<pre>Most notable of the data types is a structure called smbmsg_t (not defined
-in this document). It contains the fixed and variable portions of a message's
-header record as well as convenience pointers to the sender's name
-(smbmsg_t.to), recipient's name (smbmsg_t.from), network addresses, and more.
-If multiple SENDER header fields are included (for example), then smbmsg_t.to
-will point to the last SENDER header field in the header record. Convenience
-pointers for other data items work in the same fashion if multiple header fields
-of the same type exist in the header record.</pre>
-<pre>Variables of the smbmsg_t data type (and pointers to variables of smbmsg_t
-type) are used as arguments to many of the SMBLIB functions.</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h3><u><a name="SMBVARS.C">SMBVARS.C</a></u></h3>
-<pre>The SMBVARS.C file contains definitions of the global variables used by the
-SMBLIB functions. It is a fairly small file since their are a small number of
-global variables (by design). This file is used for both definitions and
-declarations, so no &quot;extern&quot; declarations need to be made in developers source
-code as long as SMBVARS.C or (preferably) SMBLIB.H is included in the source
-code.</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h3><u><a name="SMBLIB.H">SMBLIB.H</a></u></h3>
-<pre>The SMBLIB.H file contains prototypes of all the functions in the SMBLIB.C
-file. It is necessary to include this file in C source code if any of the
-SMBLIB functions are used. The following C source line will include this file:</pre>
-<pre>#include &quot;smblib.h&quot;</pre>
-<pre>and should be placed near the top of all C source files that use SMBLIB
-functions, variables, constants, or data types.</pre>
-<pre>Function prototypes are necessary for compilers to know the correct calling
-syntax of a function and detect incorrect usage. Prototypes are also useful
-as a quick reference for programmers as to the correct calling syntax of a
-specific function.</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h3><u><a name="SMBLIB.C">SMBLIB.C</a></u></h3>
-<pre>The SMBLIB.C file contains the actual SMBLIB library functions. This source
-file is not a stand alone program, but instead must be compiled and linked
-with a main source file to create the executable program.</pre>
-<pre>The functions in this file are organized in a logical order, but their order
-is actually irrelevant to the compiling, linking, and execution of the
-resulting program.</pre>
-<pre>A comment block precedes each function, explaining what the function does,
-how the passed parameters are used, and what the return code (if any)
-indicates. A more detailed explanation of each function is included here:</pre>
-<pre><b>int smb_open(int retry_time)</b>
-
-The smb_open() function must be called before the message base is accessed
-(read from or written to). The parameter, retry_time, is the maximum number
-of seconds to wait while retrying to lock the message base header. If
-retry_time is 0, then the message base header is not locked or read (this is
-called &quot;Fast Open&quot; and should only be used when speed is more important than
-checking for compatibility and validity upon opening). The global variable
-smb_file must be initialized with the path and base filename of the message
-base. This function returns 0 on success, 1 if the .SDT file could not be
-opened, 2 if the .SHD file could not be opened, and 3 if the .SID file could
-not be opened. If the message base header could not be locked, this function
-returns -1. If the message base ID is incorrect, it returns -2. And if the
-message base is of an incompatible version, it returns -3.</pre>
-<pre>The errno global variable (standard of most C libraries) will most likely
-contain the error code for open failure.</pre>
-<pre><b>int smb_open_da(int retry_time)</b>
-
-The smb_open_da() function is used to open the data block allocation file for
-writing messages to a message base. The parameter, retry_time, is the maximum
-number of seconds to wait while retrying to open the file. This function
-returns 0 on success. -1 is returned if an open error other than &quot;Access
-Denied&quot; is returned from the operating system, and the global variable errno
-will contain the error code. -2 is returned if the retry_time has been
-reached, and -3 is returned if the file descriptor could not be converted to
-a stream by the fdopen() function.</pre>
-<pre>fclose(sda_fp) should be called immediately after all necessary file access
-has been completed.</pre>
-<pre>This function is not used with the Hyper Allocation storage method.
-
-<b>int smb_open_ha(int retry_time)
-</b>
-The smb_open_ha() function is used to open the header block allocation file for
-writing messages to a message base. The parameter, retry_time, is the maximum
-number of seconds to wait while retrying to open the file. This function
-returns 0 on success. -1 is returned if an open error other than &quot;Access
-Denied&quot; is returned from the operating system, and the global variable errno
-will contain the error code. -2 is returned if the retry_time has been
-reached, and -3 is returned if the file descriptor could not be converted to
-a stream by the fdopen() function.</pre>
-<pre>fclose(sha_fp) should be called immediately after all necessary file access
-has been completed.</pre>
-<pre>This function is not used with the Hyper Allocation storage method.</pre>
-<pre><b>int smb_create(ulong max_crcs, ulong max_msgs, ushort max_age, ushort attr, int retry_time)</b>
-
-The smb_create() function is used to create a new message base or reset an
-existing message base. The parameters max_crcs, max_msgs, max_age, and attr
-are used to set the initial status of the message base status header. The
-parameter, retry_time is the maximum number of seconds to wait while retrying
-to lock the message base header. This functions returns 0 on success or 1 if
-the message base header could not be locked.</pre>
-<pre><b>int smb_trunchdr(int retry_time)
-</b>
-The smb_trunchdr() function is used to truncate the header file when packing
-the message base and writing the new header information back to the header
-file. The parameter, retry_time is the maximum number of seconds to wait while
-retrying to truncate the header file. Returns 0 on success, -1 if error was
-other than &quot;Access Denied&quot;, or -2 if retry_time reached.</pre>
-<pre><b>int smb_locksmbhdr(int retry_time)</b></pre>
-<pre>The smb_locksmbhdr() function is used to lock the first message base (status)
-header. The parameter, retry_time is the number of seconds to wait while
-retrying to lock the header. The smb_unlocksmbhdr() function should always be
-used to unlock the header after accessing the message base header (usually
-with smb_getstatus() and/or smb_putstatus()). Returns 0 if successful, -1 if
-unsuccessful.</pre>
-<pre><b>int smb_unlocksmbhdr()
-</b>
-The smb_unlocksmbhdr() function is used to unlock a previously locked message
-base header (using smb_lockmsghdr()). Returns 0 on success, non-zero on
-failure.</pre>
-<pre><b>int smb_getstatus(smbstatus_t *hdr)
-</b>
-The smb_getstatus() function is used to read the status message base header
-into the hdr structure. Returns 0 on success, 1 on failure.</pre>
-<pre><b>int smb_putstatus(smbstatus_t hdr)</b></pre>
-<pre>The smb_putstatus() function is used to write the status information to the
-first message base header. The parameter hdr, contains the status information
-to be written. Returns 0 on success, 1 on failure.</pre>
-<pre><b>int smb_getmsgidx(smbmsg_t *msg)</b>
-
-The smb_getmsgidx() function is used to get the byte offset for a specific
-message header in the message header file based on the message base index.</pre>
-<pre>If msg-&gt;hdr.number is non-zero when this function is called, then the index
-will be searched for this message number. If the message number is found in
-the index, the msg-&gt;idx.offset is set to the byte offset of the message header
-record in the header file and msg-&gt;offset is set to the record offset of the
-index record in the index file, and the function returns 0. If the message
-number is not found in the index, the function returns 1.</pre>
-<pre>If msg-&gt;hdr.number is zero, msg-&gt;idx.offset and msg-&gt;idx.number are obtained
-from the index record at record offset msg-&gt;offset. If msg-&gt;offset is an
-invalid record offset when this function is called, the function returns 1.
-Otherwise, the function returns 0.</pre>
-<pre><b>int smb_getlastidx(idxrec_t *idx)</b>
-
-Reads the last index record of the currently open message base into the
-idxrec_t structure pointed to by idx. Returns 0 if successful, -1 if the index
-is empty or unopened, or -2 if the record can't be read.</pre>
-<pre><b>int smb_getmsghdrlen(smbmsg_t msg)</b>
-
-The smb_getmsghdrlen() function is used to calculate the total length of
-message header msg including both fixed and variable length portions. This
-function returns the length of the header record in bytes.</pre>
-<pre><b>long smb_getmsgdatlen(smbmsg_t msg)</b>
-
-The smb_getmsgdatlen() function is used to calculate the total length of the
-data for message msg. This function returns the length of all data fields
-combined.</pre>
-<pre><b>int smb_lockmsghdr(smbmsg_t msg, int retry_time)</b>
-
-The smb_lockmsghdr() function is used to lock the header record for message
-msg. The parameter retry_time is the maximum number of seconds to wait while
-retrying to lock the header. Returns 0 on success, -1 on failure. The function
-smb_unlockmsghdr() should immediately be called after accessing the message
-header (usually with smb_getmsghdr() or smb_putmsghdr()).
-
-<b>int smb_getmsghdr(smbmsg_t *msg)</b>
-
-The function smb_getmsghdr() is used to read the header record for message
-msg. msg-&gt;idx.offset must be initialized to the byte offset of the header
-record in the header file before this function is called. The function
-smb_freemsgmem() must be called to free the memory allocated by this function
-for the header and data fields. This function returns 0 on success, -1 if
-the fixed portion of the message header record could not be read, -2 if the
-message header ID was incorrect, -3 if memory could not be allocated, -4
-if a data field could not be read, -5 if the fixed length portion of a header
-field could not be read, -6 if the variable length portion of a header field
-could not be read, -7 if one or more of the mandatory header fields (SENDER,
-RECIPIENT, or SUBJECT) are missing, -8 if total_dfields extends beyond the
-end of the header record, or -9 if incompatible header version.</pre>
-<pre>Several convenience pointers in the msg structure are initialized by this
-function to point to the last occurrence of the SENDER (msg-&gt;from), RECIPIENT
-(msg-&gt;to), SUBJECT (msg-&gt;subj), etc.</pre>
-<pre><b>int smb_unlockmsghdr(smbmsg_t msg)</b>
-
-The smb_unlockmsghdr() function is used to unlock a previously locked message
-header (with smb_lockmsghdr()). This function returns 0 on success, non-zero
-on failure.</pre>
-<pre><b>int smb_addcrc(ulong max_crcs, ulong crc, int retry_time)</b>
-
-The smb_addcrc() function is used to add a CRC-32 to the CRC history file
-for a message base, automatically checking for duplicates. The parameter
-max_crcs should be the max_crcs defined in the status header of the message
-base. The parameter crc, is the CRC-32 of the TEXT_BODY and TEXT_SOUL data
-fields for the message. The parameter retry_time is the maximum number of
-seconds to wait when retrying to open the CRC history file.</pre>
-<pre>This function returns -1 if there was an open error, -2 if the retry_time
-was reached, -3 if there was a memory allocation error, 1 if the CRC already
-exists in the CRC history file (indicating a duplicate message), or 0 on
-success (and no duplicate).</pre>
-<pre><b>int smb_hfield(smbmsg_t *msg, ushort type, ushort length, void *data)</b>
-
-The smb_hfield() function is used to add a header field to the structure msg.
-The parameters type, length, and data, must be specified according to the
-header field values listed in this specification. This function returns 0
-on success, non-zero on memory allocation error. The function smb_freemsgmem()
-must be called to free the memory allocated by this function.</pre>
-<pre><b>int smb_dfield(smbmsg_t *msg, ushort type, ulong length)</b>
-
-The smb_dfield() function is used to add a data field to the structure msg.
-The parameters type and length must be specified according to the data field
-values listed in this specification. This function returns 0 on success,
-non-zero on memory allocation error. The function smb_freemsgmem() must be
-called to free the memory allocated by this function.</pre>
-<pre><b>int smb_addmsghdr(smbmsg_t *msg,smbstatus_t *status,int storage,int retry_time)</b>
-
-The smb_addmsghdr() function is used to add a new message header to the message
-header file and update the index file. The msg and status structures are
-updated to reflect the new total messages, last message number, etc. The
-storage parameter is used to indicate the storage method to use (either
-SMB_SELFPACK, SMB_FASTALLOC, or SMB_HYPERALLOC). If the storage type is
-SMB_SELFPACK, the header block allocation file will be searched for unused
-block(s) to store this header. If the storage type is SMB_FASTALLOC or
-SMB_HYPERALLOC, the header is stored at the end of the header file. Returns 0
-on success, non-zero on failure. The parameter retry_time is the maximum number
-of seconds to wait while retrying to lock and open files.</pre>
-<pre><b>int smb_putmsg(smbmsg_t msg)</b>
-
-The smb_putmsg() function calls both the smb_putmsghdr() and smb_putmsgidx()
-functions to write the header and index elements of a message to the
-appropriate files. Returns 0 on success, non-zero on failure.</pre>
-<pre><b>int smb_putmsgidx(smbmsg_t msg)</b>
-
-The smb_putmsgidx() function is used to store a message index in the message
-index file. The message index can be for a new message or an existing
-message. Returns 0 on success, non-zero on failure.</pre>
-<pre><b>int smb_putmsghdr(smbmsg_t msg)</b>
-
-The smb_putmsghdr() function is used to store a message header in the message
-header file. The message header can be for a new message or an existing
-message. Returns 0 on success, non-zero on failure.</pre>
-<pre><b>void smb_freemsgmem(smbmsg_t msg)</b>
-
-Frees allocated memory for the header and data fields in the msg structure.
-This function must be called to free the memory allocated by the functions
-smb_hfield(), smb_dfield(), and smb_getmsghdr().</pre>
-<pre><b>long smb_hdrblocks(ulong length)
-</b>
-The smb_hdrblocks() function is used to calculate the number of blocks
-required to store a message header of length size (in bytes). This function
-returns the number of blocks required.</pre>
-<pre><b>long smb_datblocks(ulong length)</b></pre>
-<pre>The smb_datblocks() function is used to calculate the number of blocks
-required to store message data of length size (in byte). This function returns
-the number of blocks required.
-
-<b>long smb_allochdr(ulong length)</b>
-
-The smb_allochdr() function is used to search for free blocks to store a
-message header of length bytes and mark the free blocks as allocated in the
-header allocation file. This function returns the byte offset to the header
-record or a negative number on error. The function smb_open_ha() should be
-called prior to calling this function and fclose(sha_fp) should be called
-after. The function is called from smb_addmsghdr(), so you probably have no
-need to call this function directly.</pre>
-<pre><b>long smb_fallochdr(ulong length)</b>
-
-The smb_fallochdr() function works exactly the same as the smb_allochdr()
-function except it is much faster because the header allocation file is not
-searched for free blocks. The function is called from smb_addmsghdr(), so you
-probably have no need to call this function directly.</pre>
-<pre><b>long smb_hallochdr(ulong header_offset)
-</b>
-This smb_hallochdr() functions works exactly the same as the smb_fallochdr()
-function except the status.header_offset is passed as the argument and the
-header allocation (.SHA) file is not updated so smb_open_ha() need not be
-called. The function is called from smb_addmsghdr(), so you probably have no
-need to call this function directly.</pre>
-<pre><b>long smb_allocdat(ulong length, ushort headers)</b></pre>
-<pre>The smb_allocdat() function is used to search for free blocks to store length
-amount of data for a message. The parameter headers, indicates the number of
-message headers that are associated with this data. Normally, the headers
-parameter will be 1, unless this message is part of a mass mailing. The offset
-to the allocated data blocks is returned, or a negative value on error. The
-function smb_open_da() should be called prior to calling this function and
-fclose(sda_fp) should be called after.</pre>
-<pre><b>long smb_fallocdat(ulong length, ushort headers)
-</b>
-The smb_fallocdat() function works exactly the same as the smb_allocdat()
-function except it is much faster because the data allocation file is not
-searched for free blocks.</pre>
-<pre><b>long smb_hallocdat()</b>
-
-The smb_hallocdat() function works exactly the same as the smb_hallocdat()
-function except no argument is passed and the data allocation file (.SDA) is
-not updated so smb_open_da() need not be called.
-
-<b>int smb_incdat(ulong offset, ulong length, ushort headers)
-</b>
-The smb_incdat() function is used to increment the header counter in the data
-allocation file for the data starting at the byte offset and length size in
-bytes. The parameter headers, indicates the number of headers to add to the
-current allocation value in the data allocation file. Returns 0 on success,
-non-zero on failure.</pre>
-<pre><b>int smb_freemsg(smbmsg_t msg, smbstatus_t status)
-</b>
-The smb_freemsg() function is used to free the disk space allocated for the
-header and data fields of the message msg. Returns 0 on success, non-zero on
-failure. The parameter, status, must be the current status from the message
-base header for this message base.</pre>
-<pre><b>int smb_freemsgdat(ulong offset, ulong length, ushort headers)</b></pre>
-<pre>The smb_freemsgdat() function is used to decrement the data block allocation
-records in the data allocation file associated with the data in the data file
-by the value of the headers parameter (normally 1). The parameter offset
-indicates the byte offset to the beginning of the message data in the data
-file and the parameter length is the total length of the message data.
-Returns 0 on success, non-zero on failure.</pre>
-<pre><b>int smb_freemsghdr(ulong offset, ulong length)
-</b>
-The smb_freemsghdr() function is used to set the header block allocation
-records in the header allocation file to 0 (indicated non-allocated block).
-The parameter offset indicates the byte offset to the beginning of the header
-record being freed and the parameter length indicates the total length of the
-header record. Returns 0 on success, non-zero on failure.</pre>
-<pre><b>int smb_stack(int op)</b>
-
-The smb_stack() function is used to save and restore message base information
-so that multiple message bases can be open simultaneously. The stack can
-save up to 4 message bases (allowing 5 simultaneously open message bases).
-The stack is a &quot;last in, first out&quot; storage area for open message bases.
-If the op parameter is SMB_STACK_PUSH, smb_stack() will save (push) the current
-message base onto the stack. Calling smb_stack(SMB_STACK_POP) will restore
-(pop) the most recently pushed message base off the stack. Calling
-smb_stack(SMB_STACK_XCHNG) will exchange the most recently pushed message base
-and the current message base (replacing the top of the stack with the current
-message base).</pre>
-<pre><b>void smb_close()
-</b>
-Closes the header, data, and index files for the currently open message base.</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h3><u><a name="Miscellaneous SMBLIB Files">Miscellaneous SMBLIB Files</a></u></h3>
-<pre><b>CRC32.H         C header file for CRC-32 calculations</b>
-
-This file contains a static 32-bit CRC table (crc32tbl[]) and a macro (ucrc32)
-that uses this table to calculate 32-bit CRCs one byte at a time.</pre>
-<pre>Example:</pre>
-<pre>    ulong crc=0xffffffff;</pre>
-<pre>for(i=0;i&lt;length;i++)
-    crc=ucrc32(buf[i],crc);
-crc=~crc;
-</pre>
-<pre><b>CRC16.C         C functions for 16-bit CRC calculations</b></pre>
-<pre>This file contains a function (ucrc16), to calculate 16-bit CRCs one byte at a
-time and a function (crc16) that uses the ucrc16() function to calculate the
-16-bit CRC of an ASCIIZ character string.</pre>
-<pre>Example:</pre>
-<pre>    ushort crc;</pre>
-<pre>crc=crc16(&quot;Text&quot;);
-
-<b>LZH.H           Function prototypes for LZH.C</b>
-
-This file contains function prototypes for the two most important functions
-in LZH.C, lzh_encode() and lzh_decode().</pre>
-<pre>Example:</pre>
-<pre>    uchar str[256],lzh[512];
-    long length;</pre>
-<pre>strcpy(str,&quot;This is a string of text&quot;);
-length=lzh_encode(str,strlen(str),lzh);
-lzh_decode(lzh,length,str);
-</pre>
-<pre><b>LZH.C           C functions for LZH encoding (compression/decompression)</b>
-
-This file contains the functions for encoding and decoding LZH compressed
-data. If the macro LZH_DYNAMIC_BUF is defined when this file is compiled,
-temporary buffers will be dynamically allocated as opposed to static. This
-may be slower than the static buffer method, but frees the allocated memory
-after encoding or decoding. If free memory for your application is an issue,
-then define this macro when compiling this file.</pre>
-<pre>Example (Borland C):</pre>
-<pre>bcc -c -DLZH_DYNAMIC_BUF lzh</pre>
-<pre>Example (Watcom C):</pre>
-<pre>wcc -dLZH_DYNAMIC_BUF lzh</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h2><u><a name="SMBLIB Storage Example">SMBLIB Storage Example</a></u></h2>
-<pre>#include &quot;smblib.h&quot;
-#include &quot;crc16.c&quot;</pre>
-<pre>int main(void)
-{
-    char    str[256]                        // General purpose string
-           ,*msg_text=&quot;Hello, world!&quot;       // Message text
-           ,nul_buf[SDT_BLOCK_LEN]={0}      // NULL initialized buffer
-           ;
-    int     i                               // General purpose integer
-           ,storage=SMB_SELFPACK            // Default storage method
-           ,retry=10                        // Retry for opening/locking files
-           ;
-    ushort  max_age=0                       // Default maximum age of messages
-           ,xlat=XLAT_NONE                  // Translation string
-           ,tzone=PST                       // Time zone
-           ,copies=1                        // Number of copies of this msg
-           ;
-    ulong   max_msgs=500                    // Default max number of msgs
-           ,max_crcs=0                      // Default max crcs
-           ,length                          // Length of msg text
-           ,offset                          // Offset to msg text in data file
-           ;
-    smbmsg_t    msg;                        // Message structure
-    smbstatus_t status;                     // Message base status record</pre>
-<pre>strcpy(smb_file,&quot;MSGBASE&quot;);                 // We'll use &quot;MSGBASE&quot; for the name
-if((i=smb_open(retry))!=0) {                // Can't open!?!
-    printf(&quot;smb_open returned %d\n&quot;,i);
-    return(1); }</pre>
-<pre>if(!filelength(fileno(shd_fp)))             // Message base not created yet
-    smb_create(max_crcs                     // Create with default settings
-              ,max_msgs
-              ,max_age
-              ,storage==SMB_HYPERALLOC
-                    ? SMB_HYPERALLOC : 0    // SMB_EMAIL if this was e-mail
-              ,retry
-              );</pre>
-<pre>if((i=smb_locksmbhdr(retry))!=0) {          // Can't lock status base header
-    printf(&quot;smb_locksmbhdr returned %d\n&quot;,i);
-    smb_close();
-    return(1); }</pre>
-<pre>if((i=smb_getstatus(&amp;status))!=0) {         // Can't read status base header
-    smb_unlocksmbhdr();
-    smb_close();
-    printf(&quot;smb_getstatus returned %d\n&quot;,i);
-    return(1); }</pre>
-<pre>if(status.attr&amp;SMB_HYPERALLOC)
-    storage=SMB_HYPERALLOC;
-else
-    storage=SMB_SELFPACK;</pre>
-<pre>length=strlen(msg_text);                    // Get length of message
-length+=sizeof(xlat);                       // Add length of xlat string</pre>
-<pre>if(storage==SMB_HYPERALLOC)                 // Allocate space for message text
-    offset=smb_hallocdat();
-else {
-    if((i=smb_open_da(retry))!=0) {
-        smb_unlocksmbhdr();
-        printf(&quot;smb_open_da returned %d\n&quot;,i);
-        smb_close();
-        return(1); }
-    if(storage==SMB_FASTALLOC)
-        offset=smb_fallocdat(length,copies);
-    else
-        offset=smb_allocdat(length,copies);
-    fclose(sda_fp); }</pre>
-<pre>fseek(sdt_fp,offset,SEEK_SET);              // Seek to beginning of data block
-fwrite(&amp;xlat,sizeof(xlat),1,sdt_fp);        // Write xlat string
-fwrite(msg_text,strlen(msg_text),1,sdt_fp); // Write message text
-fwrite(nul_buf,SDT_BLOCK_LEN-length         // Write NULLs out to end of block
-    ,1,sdt_fp);
-fflush(sdt_fp);                             // Flush output buffer
-smb_unlocksmbhdr();                         // Unlock status base header</pre>
-<pre>memset(&amp;msg,0,sizeof(smbmsg_t));            // Initialize header to NULL
-memcpy(msg.hdr.id,&quot;SHD\x1a&quot;,4);             // Always set to SHD^Z
-msg.hdr.version=SMB_VERSION;
-msg.hdr.when_written.time=time(NULL);
-msg.hdr.when_written.zone=tzone;
-msg.hdr.when_imported.time=time(NULL);
-msg.hdr.when_imported.zone=tzone;
-msg.hdr.offset=offset;</pre>
-<pre>strcpy(str,&quot;All&quot;);                          // Send message to &quot;All&quot;
-if((i=smb_hfield(&amp;msg,RECIPIENT,strlen(str),str))!=0) {
-    printf(&quot;smb_hfield returned %d\n&quot;,i);
-    smb_freemsgdat(offset,length,copies);
-    smb_close();
-    return(1); }
-strlwr(str);                                // If this were e-mail, idx.to
-msg.idx.to=crc16(str);                      // would be the &quot;to&quot; user number
-
-strcpy(str,&quot;Sysop&quot;);                        // Send message from &quot;Sysop&quot;
-if((i=smb_hfield(&amp;msg,SENDER,strlen(str),str))!=0) {
-    printf(&quot;smb_hfield returned %d\n&quot;,i);
-    smb_freemsgdat(offset,length,copies);
-    smb_freemsgmem(msg);
-    smb_close();
-    return(1); }
-strlwr(str);                                // If this were e-mail, idx.from
-msg.idx.from=crc16(str);                    // would be the &quot;from&quot; user number</pre>
-<pre>strcpy(str,&quot;This is a test&quot;);               // Set the message subject/title
-if((i=smb_hfield(&amp;msg,SUBJECT,strlen(str),str))!=0) {
-    printf(&quot;smb_hfield returned %d\n&quot;,i);
-    smb_freemsgdat(offset,length,copies);
-    smb_freemsgmem(msg);
-    smb_close();
-    return(1); }
-strlwr(str);
-msg.idx.subj=crc16(str);</pre>
-<pre>if((i=smb_dfield(&amp;msg,TEXT_BODY,length))!=0) {
-    printf(&quot;smb_dfield returned %d\n&quot;,i);
-    smb_freemsgdat(offset,length,copies);
-    smb_freemsgmem(msg);
-    smb_close();
-    return(1); }</pre>
-<pre>if((i=smb_addmsghdr(&amp;msg,&amp;status,storage,retry))!=0) {
-    printf(&quot;smb_addmsghdr returned %d\n&quot;,i);
-    smb_freemsgdat(offset,length,copies);
-    smb_freemsgmem(msg);
-    smb_close();
-    return(1); }</pre>
-<pre>smb_freemsgmem(msg);                        // Unnecessary if exiting main()
-smb_close();                                // Unnecessary if exiting main()
-return(0);
-}</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h2><u><a name="SMBLIB Retrieval Example">SMBLIB Retrieval Example</a></u></h2>
-<pre>#include &quot;smblib.h&quot;</pre>
-<pre>int main(void)
-{
-    char        ch;                         // General purpose character
-    int         i,                          // General purpose integer
-                retry=10;                   // Retry for opening/locking files
-    ushort      xlat;                       // Translation string
-    ulong       l;                          // General purpose long integer
-    smbmsg_t    msg;                        // Message structure</pre>
-<pre>strcpy(smb_file,&quot;MSGBASE&quot;);                 // We'll use &quot;MSGBASE&quot; for the name
-if((i=smb_open(retry))!=0) {                // Can't open!?!
-    printf(&quot;smb_open returned %d\n&quot;,i);
-    return(1); }</pre>
-<pre>if(!filelength(fileno(shd_fp))) {           // Message base not created yet
-    printf(&quot;Empty\n&quot;);
-    smb_close();
-    return(0); }</pre>
-<pre>for(msg.offset=0;!ferror(sid_fp);msg.offset++) {</pre>
-<pre>    fseek(sid_fp,msg.offset*sizeof(idxrec_t),SEEK_SET);
-    if(!fread(&amp;msg.idx,1,sizeof(idxrec_t),sid_fp))
-        break;</pre>
-<pre>    if((i=smb_lockmsghdr(msg,retry))!=0) {
-        printf(&quot;smb_lockmsghdr returned %d\n&quot;,i);
-        break; }
-    if((i=smb_getmsghdr(&amp;msg))!=0) {
-        smb_unlockmsghdr(msg);
-        printf(&quot;smb_getmsghdr returned %d\n&quot;,i);
-        break; }
-    if((i=smb_unlockmsghdr(msg))!=0) {
-        smb_freemsgmem(msg);
-        printf(&quot;smb_unlockmsghdr returned %d\n&quot;,i);
-        break; }
-
-    printf(&quot;Subj : %s\n&quot;,msg.subj);
-    printf(&quot;To   : %s\n&quot;,msg.to);
-    printf(&quot;From : %s\n&quot;,msg.from);
-    printf(&quot;Date : %s\n&quot;,ctime((time_t *)&amp;msg.hdr.when_written.time));</pre>
-<pre>    for(i=0;i&lt;msg.hdr.total_dfields;i++)
-        switch(msg.dfield[i].type) {
-            case TEXT_BODY:             // Only show BODY and TAIL data fields
-            case TEXT_TAIL:
-                fseek(sdt_fp,msg.hdr.offset+msg.dfield[i].offset
-                    ,SEEK_SET);
-                fread(&amp;xlat,sizeof(xlat),1,sdt_fp);
-                if(xlat!=XLAT_NONE)     // No translations supported
-                    continue;
-                for(l=sizeof(xlat);l&lt;msg.dfield[i].length;l++) {
-                    ch=fgetc(sdt_fp);
-                    if(ch)
-                        putchar(ch); }
-                printf(&quot;\n&quot;);
-                break; }
-    printf(&quot;\n&quot;);</pre>
-<pre>    smb_freemsgmem(msg); }          // Free memory allocated by smb_getmsghdr()</pre>
-<pre>smb_close();
-return(0);
-}</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h2><u><a name="SMBLIB Performance Issues">SMBLIB Performance Issues</a></u></h2>
-<pre>Since importing messages is the usually the most time consuming task likely
-undertaken by an SMB application, it is also the most susceptible to design
-issues that effect performance.</pre>
-<pre><b><u>Opening and Closing</u></b>
-
-When importing multiple messages for a single message base, it appears logical
-to open the message base, import all the messages, then close it. This indeed
-is preferred over opening and closing the message base for each message.</pre>
-<pre>When importing multiple messages for possibly non-consecutive message bases,
-developers may easily make the mistake of opening and closing the message base
-for each message. This is not necessary and can considerably hinder the
-import performance. The easiest solution is to only close the message base and
-open a new one if the next message to be imported is not for the same message
-base as the previously imported message. Example:</pre>
-<pre>smb_file[0]=0;
-for(i=0;i&lt;total_messages_to_be_imported;i++) {
-    if(stricmp(get_messagebase_for_this_message(i),smb_file)) {
-        if(smb_file[0])     /* We've already opened one */
-            smb_close();
-        strcpy(smb_file,get_messagebase_for_this_message(i));
-        smb_open(10); }
-    /* Import this message */
-    }
-if(smb_file[0])
-    smb_close();
-
-A more advanced method is to keep multiple message bases open at the same time.
-Due to the likely limitation of total file handles on the system, it is
-suggested to keep the number of simultaneously open message bases at or below
-3. SMBLIB includes the function smb_stack() to easily &quot;push&quot; and &quot;pop&quot; message
-bases without closing them (push is the equivalent to &quot;save&quot; and pop is the
-equivalent to &quot;restore&quot;). The downside of this function is that you cannot
-access message bases on the stack without actually popping them off (in reverse
-of the order they were pushed). You can however &quot;exchange&quot; the current message
-base with the message base on the top of the stack (most recently pushed).
-To intelligently juggle more than two open message bases, the developer should
-create their own equivalent of the smb_stack() function so they can access the
-message bases on the stack without popping them off. An example of keeping a
-maximum of two message bases open using smb_stack():</pre>
-<pre>    char last_messagebase[128],new_messagebase[128];</pre>
-<pre>smb_file[0]=0;
-last_messagebase[0]=0;
-for(i=0;i&lt;total_messages_to_be_imported;i++) {
-    strcpy(new_messagebase,get_messagebase_for_this_message(i));
-    if(stricmp(new_messagebase,smb_file)) {     /* Not current message base */
-        if(smb_file[0]) {                       /* We've already opened one */
-            if(!stricmp(new_messagebase,last_messagebase)) { /* Same as last */
-                strcpy(last_messagebase,smb_file);
-                smb_stack(SMB_STACK_XCHNG); }       /* Retore previous base */
-            else {
-                if(last_messagebase[0]) {
-                    smb_stack(SMB_STACK_XCHNG);
-                    smb_close();
-                    strcpy(last_messagebase,new_messagebase); }
-                else {
-                    strcpy(last_messagebase,smb_file);
-                    smb_stack(SMB_STACK_PUSH); }    /* Save current base */
-                strcpy(smb_file,new_messagebase);
-                smb_open(10); } }
-        else {
-            strcpy(smb_file,new_messagebase);
-            smb_open(10); } }
-    /* Import this message */
-    }
-if(smb_file[0])
-    smb_close();
-if(last_messagebase[0]) {
-    smb_stack(SMB_STACK_POP);
-    smb_close(); }
-
-The second example would be of negligible performance gain over the first
-example (6 open operations versus 7) if the messages to import were in the
-following order:</pre>
-<pre>msg[0] --&gt; msgbase[0]       // 0 opened
-msg[1] --&gt; msgbase[1]       // 0 pushed 1 opened
-msg[2] --&gt; msgbase[1]
-msg[3] --&gt; msgbase[2]       // 1 closed 0 popped 0 closed 2 opened
-msg[4] --&gt; msgbase[0]       // 2 pushed 0 opened
-msg[5] --&gt; msgbase[2]       // 0 pushed 2 popped (exchanged)
-msg[6] --&gt; msgbase[3]       // 2 closed 0 popped 0 closed 3 opened
-msg[7] --&gt; msgbase[0]       // 3 pushed 0 opened</pre>
-<pre>The second example would be of significant performance gain over the first
-example (4 open operations versus 8) if the messages to import were in the
-following order:</pre>
-<pre>msg[0] --&gt; msgbase[0]       // 0 opened
-msg[1] --&gt; msgbase[1]       // 0 pushed 1 opened
-msg[2] --&gt; msgbase[0]       // 1 pushed 0 popped (exchanged)
-msg[3] --&gt; msgbase[1]       // 0 pushed 1 popped (exchanged)
-msg[4] --&gt; msgbase[0]       // 1 pushed 0 popped (exchanged)
-msg[5] --&gt; msgbase[2]       // 0 pushed 1 popped (exchanged) 1 closed 2 opened
-msg[6] --&gt; msgbase[3]       // 2 pushed 0 popped (exchanged) 0 closed 3 opened
-msg[7] --&gt; msgbase[2]       // 3 pushed 2 popped (exchanged)</pre>
-<pre>More advanced use of &quot;stack-like&quot; message base file handle storage can easily
-reduce the number of open operations, therefore increasing import performance
-under more adverse message base ordering conditions.
-
-<b><u>Compression</u></b>
-
-If any message data compression features are offered by the application, it
-is important the the application not unnecessarily compress data that will
-not save any storage space. While this may seem an obvious statement, please
-review the following pseudo-code example:</pre>
-<pre>if ( message_data_length &lt; SDT_BLOCK_LEN )
-    // Store uncompressed data
-else {
-    // Compress data
-    if ( ( compressed_data_length / SDT_BLOCK_LEN )
-        &lt; ( message_data_length / SDT_BLOCK_LEN ) ) // Saves a block or more
-        // Store compressed data
-    else
-        // Store uncompressed data
-    }</pre>
-<pre>Since the SMB format stores message data in fixed length blocks, there is no
-point in storing a message in compressed format if it requires the same number
-of blocks as the uncompressed format (i.e. a message that is two blocks in
-length in uncompressed format and only a block and a half in length when
-compressed should not be stored in compressed format since it still requires
-two full blocks of storage). It is important to note that in the above example,
-the length of the data translation string was not taken into account in
-determining the number of required blocks. Also, the smb_datblocks() function
-is normally used in determining the number of required blocks to store a given
-data length and it is a little more involved than simply dividing the length of
-the data by SDT_BLOCK_LEN.</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h2><u><a name="Bibliography">Bibliography</a></u></h2>
-<pre>Title     : The C Programming Language
-Publisher : Prentice Hall
-Author    : Brian W. Kernighan and Dennis M. Ritchie</pre>
-<pre>Document  : ARPANET Request for Comments (RFC) #822
-Title     : Standard for the Format of ARPA Internet text messages
-Publisher : SRI International
-Author    : David H. Crocker, University of Delaware</pre>
-<pre>Document  : FTS-0001
-Publisher : FSC
-Author    : Randy Bush, Pacific Systems Group</pre>
-<pre>Document  : FTS-0004
-Title     : EchoMail Specification
-Publisher : FSC
-Author    : Bob Hartman</pre>
-<pre>Document  : FTS-0009
-Title     : A standard for unique message identifiers and reply chain linkage
-Publisher : FSC
-Author    : Jim Nutt</pre>
-<pre>Document  : FSC-00046
-Title     : A Product Identifier for FidoNet Message Handlers
-Publisher : FSC
-Author    : Joaquim H. Homrighausen</pre>
-<pre>Document  : FSC-00053
-Title     : Specifications for the ^aFLAGS field
-Publisher : FSC
-Author    : Joaquim H. Homrighausen</pre>
-<p><b><a href="#toc">Back to Table of Contents</a></b></p>
-<h2><u><a name="Implementations">Implementations</a></u></h2>
-<pre>Product   : Synchronet Multinode BBS Software
-Developer : Digital Dynamics
-Level     : III
-Version   : 2.20</pre>
-<pre>Product   : Synchronet/FidoNet Import/Export Utility (SBBSFIDO)
-Developer : Digital Dynamics
-Level     : III
-Version   : 2.23</pre>
-<pre>Product   : Synchronet UTI (Universal Text Interface) Driver
-Developer : Digital Dynamics
-Level     : III
-Version   : 2.23</pre>
-<pre>Product   : SBBSecho FidoNet Packet Tosser for Synchronet
-Developer : Digital Dynamics
-Level     : III
-Version   : 1.11</pre>
-<pre>Product   : NetXpress Internet UUCP for Synchronet
-Developer : Merlin Systems
-Level     : II
-Version   : 1.50</pre>
-<pre>Product   : InterEcho FidoNet Packet Tosser
-Developer : InterMail Sales Inc
-Level     : II
-Version   : 1.11</pre>
-<p><a href="#top"><b>Back to Top</b></a><!--webbot bot="Include"
-U-Include="_borders/bottom.htm" TAG="BODY" startspan -->
-
-<hr>
-<p><b><a href="http://www.synchro.net/copyright.html">Copyright</a> � 2000 by </b> <a href="http://www.synchro.net/author.htm"><b>Rob Swindell</b><br>
-</a>
-
-<a href="http://www.synchro.net"><font size="2"><br>
-Synchronet BBS Software</font></a>  <font size="2">  (Synchronet)
-Version 3 is comprised of several documentation,<br>
-library, executable, and <a href="http://www.synchro.net/source.html">source code</a> 
-files, all of which are covered by the<a href="http://www.fsf.org/copyleft/gpl.html">
-<br>
-GNU General Public License</a>  with the exception of the following portions
-covered by<br>
-the <a href="http://www.fsf.org/copyleft/lesser.html">GNU Lesser General Public License</a>:
-SMBLIB and XSDK.<br>
-<br>
-Synchronet Version 2 (for DOS and OS/2) and its source code was released to the<a href="http://www.fsf.org/philosophy/categories.html#PublicDomainSoftware">
-<br>
-Public Domain</a>  by <a href="ftp://vert.synchro.net/main/sbbs/manifest.txt">Digital Dynamics</a> 
-in 1997 and remains Public Domain software today.<br>
-Synchronet Version 3 is not Public Domain software.</font></p>
-<p align="left"><font size="2"><a href="http://www.synchro.net/author.html">Rob Swindell<br>
-</a>PO Box 501<br>Yorba Linda, CA 92885<a href="http://www.synchro.net"><br>
-http://www.synchro.net</a>
-
-</font></p>
-<p align="left"><font size="2">For the complete Copyright Information please
-read the <a href="http://www.synchro.net/copyright.html">Copyright Documentation</a>
-.</font></p>
-
-<!--webbot bot="Include" endspan i-checksum="55766" -->
-
-</body>
-
-</html>
diff --git a/docs/svdmansi.txt b/docs/svdmansi.txt
deleted file mode 100644
index 5f7d4024c9..0000000000
--- a/docs/svdmansi.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-
-SVDMANSI.COM -- OS/2 Virtual DOS Machine ANSI Driver for Synchronet
-
-    This program is a direct replacement for OS2FIX.COM, which,
-although it solves an incompatibility problem between the OS/2 VDM and
-native DOS, leaves the VDM without ANSI support.
-
-    OS2FIX.COM is now obsolete, SVDMANSI is to be used in place of
-it.  If you are not familiar with the way OS2FIX worked: remove the
-line (if any) containing ANSI.SYS from DOS_DEVICE in the DOS session's
-settings, and place a line "SVDMANSI" in the file specified by the
-setting DOS_AUTOEXEC, before any ANSI codes are output to the screen.
-
-    The basic ANSI codes are supported.  Not supported are cursor
-position report (usually only used to detect the presence of an ANSI
-driver, and handled by the BBS itself), and keyboard key redefinition
-(less an omission than a safety feature).  If you have any questions
-or problems with this program, you can send me e-mail on Vertrauen
-(714) 529-9525, or via fidonet:
-                                    Ille Homine Albe @1:103/705
-
-    If you continue to use this program after the 30-day evaluation
-period, please send 5 cents to the Clinton Legal Defense Fund, or
-$1 to the charity of your choice.
diff --git a/docs/syedtfaq.txt b/docs/syedtfaq.txt
deleted file mode 100644
index ae887278f5..0000000000
--- a/docs/syedtfaq.txt
+++ /dev/null
@@ -1,159 +0,0 @@
-	    Answers to Frequently Asked Questions Regarding SyncEdit
-	    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-				  Apr 15, 2000
-				  Rob Swindell
-
-
-What Is It?
-~~~~~~~~~~~
-SyncEdit is an external message editor originally designed for use with
-Synchronet Multinode BBS Software. It was later extended to support other BBS
-packages as well.
-
-
-Authorship
-~~~~~~~~~~
-Robert D. Bouman is the author of SyncEdit. Unfortunately he passed away a few
-years ago. I, Rob Swindell, am the author Synchronet BBS Software and while I
-was given permission to include an unregistered demo version of SyncEdit in
-Synchronet distributions, I am not the author of SyncEdit and have never had
-any official connection with the product. I've decided to create this help file
-to answer all the common questions I get regarding SyncEdit (the most common
-being: "How do I register YOUR product, SyncEdit?").
-
-
-Registration
-~~~~~~~~~~~~
-Since it is no longer possible to purchase SyncEdit registrations, I have
-been including my personal registration key (SYNCEDIT.KEY, registered to
-"Digital Dynamics") with Synchronet distributions since v2.30b. Feel free to
-use this registration key guilt-free, as that's what I think Robert would have
-wanted. If you're using v2.20 or later, you'll need to convert this key to the
-SYNCEDIT.CFG file format by using the KEY2CFG.EXE program (included with the
-SyncEdit archive: SYEDTxxx.ZIP).
-
-
-Y2K Patch
-~~~~~~~~~
-There is a Y2K bug in all known versions of SyncEdit where the year 2000 is
-displayed as 100, causing the status bar to wrap and making the program
-unusable. I've released a group of binary-edited SyncEdit executables (for
-all located versions) that works around this problem: the year is still
-displayed as 100, but the status bar no-longer wraps. The file that includes
-these patched files is SYEDTY2K.ZIP and can be downloaded via Telnet/Zmodem or
-FTP from vert.synchro.net.
-
-
-Configuration
-~~~~~~~~~~~~~
-First, it is very important that you know WHAT VERSION of SyncEdit you're
-trying to get working. You can tell by looking at the file size of your
-SYNCEDIT.EXE in your Synchronet EXEC directory and comparing to the following
-list of known/located released versions:
-
-	166222	1.5.3
-	166570	2.0.0
-	162594	2.0.5
-	164490	2.20A
-	170900	2.50
-	192126	3.00
-	191906	3.05
-
-If the file size of your SYNCEDIT.EXE does not match any of the above, check
-your SyncEdit documentation for the version number or logon to Vertrauen
-(vert.synchro.net) to obtain one of the above versions (and the Y2K patches).
-
-Different versions of SyncEdit require different configurations in SCFG
-(SBBSCTRL->BBS->Configure)->External Programs->External Editors->SYNCEDIT:
-
-v1.0 - v1.5.0
-�������������������������������������������������������������������ͻ
-� Name				  SyncEdit			    �
-� Internal Code 		  SYNCEDIT			    �
-� Local Command Line		  %!syncedit %! %l %f		    �
-� Remote Command Line		  %!syncedit %! %l %f		    �
-� Access Requirements		  ANSI				    �
-� Intercept I/O Interrupts	  Yes <- Versions 1.0 - 1.5.0 only! �
-� Quoted Text			  None				    �
-� QuickBBS Style (MSGTMP)	  No				    �
-� Expand Line Feeds to CRLF	  No				    �
-� BBS Drop File Type		  Synchronet	  XTRN.DAT	    �
-�������������������������������������������������������������������ͼ
-
-
-v1.5.3 - v2.0.5
-�������������������������������������������������������������������ͻ
-� Name				  SyncEdit			    �
-� Internal Code 		  SYNCEDIT			    �
-� Local Command Line		  %!syncedit %! %l %f		    �
-� Remote Command Line		  %!syncedit %! %l %f		    �
-� Access Requirements		  ANSI				    �
-� Intercept I/O Interrupts	  No				    �
-� Quoted Text			  None				    �
-� QuickBBS Style (MSGTMP)	  No				    �
-� Expand Line Feeds to CRLF	  No				    �
-� BBS Drop File Type		  Synchronet	  XTRN.DAT	    �
-�������������������������������������������������������������������ͼ
-
-
-v2.20
-�������������������������������������������������������������������ͻ
-� Name				  SyncEdit			    �
-� Internal Code 		  SYNCEDIT			    �
-� Local Command Line		  %!syncedit %l %f		    �
-� Remote Command Line		  %!syncedit %l %f		    �
-� Access Requirements		  ANSI				    �
-� Intercept I/O Interrupts	  No				    �
-� Quote Text			  None				    �
-� QuickBBS Style Editor (MSGTMP)  No				    �
-� Expand line feeds to CRLF	  No				    �
-� BBS Drop File Type		  Synchronet	  XTRN.DAT	    �
-�������������������������������������������������������������������ͼ
-
-
-v2.50
-�������������������������������������������������������������������ͻ
-� Name				  SyncEdit			    �
-� Internal Code 		  SYNCEDIT			    �
-� Local Command Line		  %!syncedit local %l %f	    �
-� Remote Command Line		  %!syncedit %l %f		    �
-� Access Requirements		  ANSI				    �
-� Intercept I/O Interrupts	  No				    �
-� Quoted Text			  None				    �
-� QuickBBS Style (MSGTMP)	  Yes <- Version 2.5 and up	    �
-� Expand Line Feeds to CRLF	  No				    �
-� BBS Drop File Type		  Synchronet	  XTRN.DAT	    �
-�������������������������������������������������������������������ͼ
-
-
-v3.00 - v3.05
-�������������������������������������������������������������������ͻ
-� Name				  SyncEdit			    �
-� Internal Code 		  SYNCEDIT			    �
-� Local Command Line		  %!syncedit -l -maxlines %l -f %f  �
-� Remote Command Line		  %!syncedit -maxlines %l -f %f     �
-� Access Requirements		  ANSI				    �
-� Intercept I/O Interrupts	  No				    �
-� Quote Text			  None				    �
-� QuickBBS Style Editor (MSGTMP)  Yes				    �
-� Expand line feeds to CRLF	  No				    �
-� BBS Drop File Type		  GAP		  DOOR.SYS	    �
-�������������������������������������������������������������������ͼ
-
-
-SyncEdit v2.20 and higher requires running SETUP.EXE (included in the SyncEdit
-archive: SYEDTxxx.ZIP - should be unzipped with all other SyncEdit files into
-your Synchronet EXEC directory). Example configuration:
-
-   Directory of external files : C:\SBBS\EXEC\
-   User Timeout in Minutes : 3
-   Allow user dictionaries : Yes
-   Memory swap method : EMS
-   Registration code : ****************
-   Registered to : Digital Dynamics
-
-SyncEdit/G configurations not given (use SyncEdit instead).
-
-Hope this information is helpful!
-
--Rob (www.synchro.net)
diff --git a/docs/syncedit.txt b/docs/syncedit.txt
deleted file mode 100644
index 49be2e79a9..0000000000
--- a/docs/syncedit.txt
+++ /dev/null
@@ -1,538 +0,0 @@
-
-
-
-                                     SyncEdit
-                         The Synchronet Full-Screen Editor
-
-
-                        (c) Copyright 1995 Robert D. Bouman
- 
-                                ALL RIGHTS RESERVED
-
-
-                                 Robert D. Bouman
-                                94 W Roosevelt Ave.
-                                Zeeland, MI  49464
-                                        USA
-
-                             Fido:  1:2201/11
-                         Internet:  bouman@macatawa.org
-
-
-
-
-     
-     As this document covers both the freely distributable and registered 
-     versions, not all items apply to the demo version and are identified as 
-     such throughout the document.  
-
-
-
-     �����������������������������������������������������������������������Ŀ 
-     � ����                         Description                         ۲�� �
-     ������������������������������������������������������������������������� 
-
-     This product provides an integrated full-screen ANSI message editor for
-     use with the Synchronet bulletin board package.
-
-
-
-     �����������������������������������������������������������������������Ŀ 
-     � ����                         Disclaimer                          ۲�� �
-     ������������������������������������������������������������������������� 
-
-     The entire SyncEdit package is provided as is and comes with no warranty
-     of any kind, either expressed or implied.  In no event will Robert
-     Bouman be liable for damage resulting from the direct or indirect use of
-     this software.
-
-     The user of these programs bears all risks as to their quality and
-     performance.  
-
-     Users are encouraged to use common sense and back up all important system 
-     files using industry accepted methods before using this or any other
-     newly obtained application.  
-
-
-     �����������������������������������������������������������������������Ŀ 
-     � ����                       Special Thanks                        ۲�� �
-     ������������������������������������������������������������������������� 
-
-     We would like to thank the beta testers and others who have been most
-     instrumental in getting SyncEdit to where it is today.  They have been
-     very helpful in the debugging process and provided numerous suggestions
-     which have been included in SyncEdit.
-
-                   The testers include, in no particular order -
-
-                          Jim Knight of 21st Century
-                          Kelly Wright of Tele-Star
-                          Bill Cronkhite of The Game Room
-
-
-
-     �����������������������������������������������������������������������Ŀ 
-     � ����                       Included Files                        ۲�� �
-     ������������������������������������������������������������������������� 
-
-     HISTORY.TXT        Revision history of SyncEdit
-     REGISTER.FRM       Registration form
-     SYNCEDIT.DOC       What you're reading now, the documentation
-     UPGRADE.DOC        Information on upgrading to this version of SyncEdit.
-     SYNCEDIT.EXE       The executable text editor
-     KEYGEN.EXE         Program to generate key file
-     SYNCEDIT.MAC       Example macro file
-     FEATURES.TXT       List of features included in SyncEdit to date
-        
-     Note:  The dictionary is distributed as a seperate archive, and will not 
-     be used by the editor until a key code is obtained.  The dictionary can
-     be found at various locations as SYEDTDIC.ZIP.
-
-
-
-     �����������������������������������������������������������������������Ŀ 
-     � ����                     System Requirements                     ۲�� �
-     ������������������������������������������������������������������������� 
-
-     An operational Synchronet BBS system, version 2.00 or greater. ANSI
-     emulation is required for the remote user of course, DOS 3.0+, a fossil
-     driver may be needed if you are currently using Digiboard or similar
-     product.  SYNCEDIT SUPPORTS FOSSIL AND DIRECT COMPORT I/O ONLY!
-
-
-
-     �����������������������������������������������������������������������Ŀ 
-     � ����                     Distribution Method                     ۲�� �
-     ������������������������������������������������������������������������� 
-  
-     Freely distributable shareware.  This package may be uploaded, placed in
-     CD-ROM collections, or otherwise be freely disseminated as long as the
-     archive remains intact.  Only reasonable fees may charged for copying or
-     distributing, and no copyright or ownership may be claimed by parties
-     other than Robert Bouman.  This product is NOT in the "public domain".
-  
-     The latest version is always available via file request at 1:2201/11 as
-     SYNCEDIT.  
-
-
-
-     �����������������������������������������������������������������������Ŀ 
-     � ����                         Limitations                         ۲�� �
-     ������������������������������������������������������������������������� 
-
-     The registered version of SyncEdit is designed to operate with a KEY 
-     file, which activates the registered features of the editor.  Operation 
-     of the editor without a key will invoke the editor in demo mode.  A key 
-     file is not distributed with SyncEdit, it can be generated with KEYGEN
-     and a key code from Robert Bouman.
-     
-     The demo version is a very functional editor, with no time limitations or 
-     restrictions on usage except as noted above under "Distribution method".  
-     The demo contains complete block editing and file functions, but the menu 
-     items indicated by a light grey color, SEARCH, SPELL CHECKER, and 
-     GRAPHICS, are not active in the demo version.  Also, the demo does not 
-     allow the use of Sysop definable TAGLINES.  There is a three second delay 
-     upon entry to the editor as well.  
-
-     The key file activates SEARCH, SPELL CHECKING, GRAPHICS, Sysop definable 
-     TAGLINES and removes the entry delay screen.  
-
-     See "Registration" for specifics on how to obtain a key code.
-
-     Both versions of SyncEdit are limited to a maximum of 500 lines of text.  
-
-
-
-     �����������������������������������������������������������������������Ŀ 
-     � ����                        Installation                         ۲�� �
-     ������������������������������������������������������������������������� 
-
-     SyncEdit is installed as an external message editor, and if one is
-     familiar with Synchronet and installing doors, there should be little
-     difficulty. However, it is assumed that the reader is familiar with
-     Synchronet and how to configure the BBS software.
-
-
-                                      Step 1
-
-     Decide where you wish to place the external files, ie the SYNCEDIT.DIC,
-     SYNCEDIT.KEY and TAGLINE files, all of which are only activated by a
-     registered key file.  As mentioned earlier, remember that the dictionary
-     is distributed as a separate archive.
-
-     If you plan on using a different directory from \SBBS\EXEC, create the
-     directory using any valid DOS name and path, with the DOS "MD"    
-     command.
-  
-     If used, copy SYNCEDIT.DIC into the directory you just created, and make
-     a note of the full path and name of this directory as you'll need that
-     information in a moment.  Otherwise, if using the BBS EXEC directory,
-     copy SYNCEDIT.DIC into \SBBS\EXEC.
-
-     When you later get to the step of setting up the editor within 
-     Synchronet, you will need to be sure your second command line argument 
-     points to the directory containing the external files.  
-
-
-                                      Step 2
-     SYNCEDIT.EXE may be installed in any convenient directory, though we
-     suggest the \SBBS\EXEC subdirectory or a directory beneath \SBBS\EXEC
-     called SYNCEDIT.  If you place SYNCEDIT.EXE in a directory that's NOT
-     in your system path statement, then you must provide the full path to
-     this directory on the command line with the executable 
-     (C:\SYNCEDIT\SYNCEDIT %l .. .. ). 
-
-
-                                      Step 3
-     Add SYNCEDIT to your BBS's external on-line programs menu via the
-     Synchronet configuration utility:  External Programs -> External Editors
-
-     Before we get to installing SyncEdit, please note the command line used 
-     with SyncEdit:  
-
-     syncedit [<EXTERNAL DIR>] [<NUM LINES>] [PATH\FILE] 
-                                        or
-     %!syncedit [<EXTERNAL DIR>] [<NUM LINES>] [PATH\FILE] 
-
-
-     A typical command line example might be:  
-
-                          syncedit %! %l %f
-
-     Left to right:  the name of the executable, the path to the external 
-     directory (for the dictionary files, tag files, and SYNCEDIT.KEY), maximum
-     number of lines allowed in the editor, and the optional path\file_name
-     to read into the editor.
-
-     The external directory (first argument) is where the dictionary, and when 
-     obtained, the SYNCEDIT.KEY should be placed.  The external directory 
-     argument MUST be defined, even if you don't have a key file and don't 
-     intend to install the dictionary.  The count of the arguments must be at 
-     least two, with the last item, PATH\FILE_NAME being the only truly
-     optional parameter.  
-
-     Assuming you've placed SYNCEDIT.EXE in the \SBBS\EXEC directory and the 
-     \SBBS\EXEC path is properly defined in your system setup, it shouldn't be 
-     necessary to use the "%!"  in front of the executable name.  However, if 
-     you have difficulty getting SyncEdit to run, try placing the %! at the
-     beginning of the command line as in the second example above.  
-
-     The Synchronet parameter %l may be substituted for NUM LINES.  This is
-     handy if you wish the editor to use the default number of lines as 
-     configured within each of your BBS user levels.  
-
-     Note that in our example we used the path to the \SBBS\EXEC directory as 
-     our external directory (%!), received the maximum editor lines from the 
-     BBS (%l) and received the path & name of the file to read into the editor 
-     from the BBS (%f).  If %f isn't used, SyncEdit will default to reading 
-     the INPUT.MSG text dropped by the BBS in the respective NODE directory.  
-
-     If we wished to use a different external directory, and pass on the 
-     command line a specific number of lines to allow, we could have done 
-     something like:  
-
-                      syncedit c:\sbbs\exec\syncedit\ 80 %f
-
-     This example assumes a directory called "syncedit" exists in the
-     c:\sbbs\exec directory and will be used for our external files.  80
-     is the maximum lines allowed in the editor.  
-
-     We suggest the use of a separate external directory with the 
-     availability of user dictionaries.  Otherwise, the \EXEC directory may
-     become cluttered with dictionary files.
-
-
-     Hit INSERT on a blank line to start the process of adding the editor.  
-
-     Below is an example intended to show a typical setup for SyncEdit, and 
-     should work for the vast majority of users.  Please note, SyncEdit 
-     *requires* the use of the XTRN.DAT drop file so be sure to configure 
-     Synchronet to drop the file as indicated below.
-
-
-                                  SyncEdit Editor
-������������������������������������������������������������������������ͻ
-� Name                            SyncEdit                               �
-� Internal Code                   SYNCEDIT                               �
-� Local Command Line              syncedit %! %l %f                      �
-� Remote Command Line             syncedit %! %l %f                      �
-� Access Requirements             ANSI                                   �
-� Intercept I/O Interrupts        No                                     �
-� Quote Text                      Prompt User                            �
-� QuickBBS Style Editor (MSGTMP)  No                                     �
-� Expand line feeds to CRLF       No                                     �
-� BBS Drop File Type              Synchronet      XTRN.DAT               �
-������������������������������������������������������������������������ͼ
-
-
-     Once again, this example will work if you have the directory where you 
-     placed SYNCEDIT.EXE in your path, and you placed your external files in
-     \SBBS\EXEC.  Otherwise, you will need to modify the above to match
-     your setup.
-
-     If memory is tight, or you experience difficulties, add SyncEdit to your 
-     BBS global swap list.  This is accomplished within the Synchronet 
-     configuration utility.  
-
-
-     That's it, you and your users should now be able to use the editor!  
-
-
-
-     �����������������������������������������������������������������������Ŀ 
-     � ����                      Using the Editor                       ۲�� �
-     ������������������������������������������������������������������������� 
-
-     As SyncEdit contains an extensive built-in help system, we will not go 
-     into great detail here on the commands or how to use the editor.  
-
-     All functions are available from the menu at the top of the screen by 
-     using CTRL-key combinations.  For instance, on-line help is available by 
-     using CTRL-P.  There are also several keyboard shortcuts, such as CTRL-O
-     for quick save, as well as the traditional "slash" commands (/A, /ABT,
-     /N, /S, /?).  Again, be sure to review the help system when you first
-     use the editor for more detailed information.
-
-     The menu bar at the bottom of the editor reflects (left to right):
-  
-                registration information (who the editor is registered to)
-                maximum lines allowed
-                number of lines used
-                insert/delete mode status
-                date
-                time
-
-
-     �����������������������������������������������������������������������Ŀ
-     � ����                    Sysop File Functions                     ۲�� �
-     ������������������������������������������������������������������������� 
-
-     There are two Sysop only commands available from the File menu that are
-     accessible, and visible, only to user groups 90 and above (co-Sysops and
-     Sysops).  These commands are LoadFile and SaveFile which do exactly what
-     their names imply.
-
-     LoadFile reads a separate text file into the current editing session.  
-     This function does not overwrite existing text, but rather inserts the
-     file at the current cursor position.
-
-     SaveFile saves the current text to a file in ASCII format.
-
-     Both LoadFile and SaveFile expect a full DOS path.
-
-
-
-     �����������������������������������������������������������������������Ŀ
-     � ����                      Sysop Hot Keys                         ۲�� �
-     ������������������������������������������������������������������������� 
-
-     Several functions are also available to the sysop both when used locally
-     and when a remote user is using SyncEdit.  They are defined below.
-
-     ALT+C - Allows you to chat with the remote user while they are editing a
-     message.  This function is only available when the user is at the main
-     editing screen.  ALT+C again to return to normal screen.
-
-     ALT+H - Hang up on user and exit from SyncEdit.
-
-     ALT+J - Drop to DOS.  This is available when the user is on-line as well
-     as when the editor is used locally.  It is available when the remote
-     user or local user is in the main editing screen only.
-
-     ALT+K - When this key is pressed, SyncEdit will ignore key strokes from
-     the remote user.  Pressing this key again will return the editor to
-     normal function.
-
-     ALT+D - Drops user to BBS without hanging up on them.
-
-     F1 - Will display a status bar containing the sysop key information from
-     above.
-
-     F9 - Will return the status bar to the normal user information display.
-
-     F10 - Will remove the status bar completly from screen.
-
-     ALT-+/- - Increase or decrease the amount of time the user has in
-     SyncEdit to write or edit a message.
-
-
-     �����������������������������������������������������������������������Ŀ 
-     � ����      Creating TAGLINE Files (registered version only)       ۲�� �
-     ������������������������������������������������������������������������� 
-
-     The registered version of SyncEdit allows for the use of up to 20 
-     different tag lines.  Remember, all the *.TAG files, must be placed in 
-     the external directory pointed to by the first command line argument.  
-
-     Each TAG file may be up to 600 bytes in length.  If these limits are
-     exceed, the file will be truncated.  Tag files may contain both ANSI or
-     ASCII text and must be named using any valid DOS name, with an extension
-     of .TAG.  These names may be descriptive, as in ANSI.TAG, ASCII.TAG,
-     simple as in 1.TAG, 2.TAG, or any other scheme you prefer.  Use
-     desecration when using tag lines, particularly those containing ANSI
-     escape codes as they can quickly become overdone and irritating to
-     readers of your messages (and network administrators).
-
-     If more than one *.TAG file is found, SyncEdit will randomly select
-     a different *.TAG file each time the editor is called by the BBS.  
-     For example, if you have two *.TAG files, the odds are approximately 
-     50-50 that a particular tag file will be used.  If you have three tag 
-     files, the odds are 1 in 3, and so on.  If you only wish to have one tag 
-     line added by the editor, only define one tag file, for example 1.TAG.  
-     If you don't want any tag lines added, simply don't define any.  
-
-     Note, the unregistered "SyncEdit" tear line is not user definable or 
-     modifiable.  The tear line is not appended by the registered version.
-
-
-
-     �����������������������������������������������������������������������Ŀ 
-     � ����                   Sysop (only) Macro Files                  ۲�� �
-     ������������������������������������������������������������������������� 
-
-     For the macros, a file named SYNCEDIT.MAC must be in the external
-     directory.  We have included a basic macro file so you have a reference
-     point for creating your own.
-
-     There is a maximum of 40 macros lines allowed.  If this number is 
-     exceeded, only 40 will be used.  Lines that have a ';' in column one
-     will be skipped, which is primarily used for adding comments to the
-     macro file.  Blank lines are skipped also.  Everything else is   
-     considered a macro line.
-
-     Macro lines 1-10 correspond to F1-F10 on the keyboard; 11-20 to
-     shift+F1-f10; 21-30 to ctrl+F1-F10; and finally 31-40 to alt+F1-F10.  For
-     example, if you have 11 lines that are considered macro lines, then you 
-     can insert those lines into your message by pressing F1-F10 and shift+F1.
-     If you press shirt+F2, the computer will beep telling you that there isn't
-     a macro associated with that key.
-
-     One common use of a macros as implemented within SyncEdit is to allow
-     the Sysop to easily use different signatures, depending on the target
-     audience of the message.
-
-
-
-     �����������������������������������������������������������������������Ŀ
-     � ����                      User Dictionaries                      ۲�� �
-     �������������������������������������������������������������������������
-
-     Any user that is allowed to use SyncEdit will be able to create their own 
-     custom dictionary.  SyncEdit will provide a menu item entitled ADD when 
-     it encounters a word during a spell checking session that it doesn't
-     believe is spelled correctly.  By simply choosing the add option the
-     highlighted word will be added to the users personal dictionary (*not*
-     the master dictionary).  Please note, SyncEdit doesn't delete user
-     dictionaries when there are changes to the BBS database.  Consequently,
-     if a user is deleted from the BBS database, the next person that has
-     the same user number will inherit the old dictionary.
-
-
-
-     �����������������������������������������������������������������������Ŀ 
-     � ����                Registration Cost and Process                ۲�� �
-     ������������������������������������������������������������������������� 
-
-     Registration fee is $20.00 (twenty dollars US).  That's right, only
-     twenty dollars.  This will get you a key code which you can use to
-     generate a customized key file that will activate all the editors
-     features.
-
-     Please review, complete and return the REGISTER.FRM (enclosed).  
-
-     Save yourself the time and expense of calling us to determine if we 
-     accept on-line orders or credit cards.  We don't.  Currently, the only 
-     way to register is to follow the procedure outlined above.  When this 
-     changes, we'll be sure to announce it.  
-
-
-
-     �����������������������������������������������������������������������Ŀ 
-     � ����                          Cautions                           ۲�� �
-     ������������������������������������������������������������������������� 
-
-     This product was designed specifically to interface with the Synchronet 
-     BBS system, and has not been tested with other BBS packages.  Though it 
-     may work with other BBS systems, we make no representation that it will.  
-
-
-
-     �����������������������������������������������������������������������Ŀ 
-     � ����                      Technical Support                      ۲�� �
-     ������������������������������������������������������������������������� 
-
-     Support is provided by calling the SyncEdit support BBS; The Game Room
-     (616)857-3135 and either posting a message to "Playster" in the SyncEdit
-     message section or by sending private e-mail, via FidoNet netmail
-     (1:2201/11) addressed to Robert Bouman or Internet e-mail addressed to
-     bouman@macatawa.org.
-
-     Please note, we will do everything possible to assist folks in getting 
-     the freely distributable version up and running.  However, technical 
-     support is primarily intended for registered users.  They are after all, 
-     our paying customers.  
-
-     Apparent bug reports should be forwarded as identified above.  Please 
-     provide as much detail as possible regarding your difficulty, ie hardware 
-     configuration, BBS setup (paths, etc), and a specific description of the 
-     problem.  
-
-     Suggestions regarding new features, and comments in general are welcome 
-     from all users and should be forwarded as indicated above.  
-
-
-
-     �����������������������������������������������������������������������Ŀ 
-     � ����                      Known "Anomalies"                      ۲�� �
-     ������������������������������������������������������������������������� 
-
-     o SyncEdit is limited to a maximum of 500 lines of text.  If attempts are 
-       made to use more than 500 lines, the editor will continue to load and
-       enter into an editing session.  However, only the first 500 lines of
-       text will actually be edited and saved.
-
-     o There seems to be some incompatibilities when SyncEdit is used under 
-       Novell DOS v7.  In particular, the problem occurs when attempting an
-       editing session from the WFC screen.  Usage of the editor from within
-       the BBS is not generally affected.
-
-     o Due to the spelling library SyncEdit currently uses, there are times
-       the spell checker will flag words as misspelled when in fact the word 
-       is spelled correctly.  This may be most noticeable when adding words to 
-       one's personal dictionary.  We are aware of the problem, but due to the 
-       fact that we don't have the source code to the library we can't easily 
-       correct the problem.  The solution lies in either writing our own 
-       library from scratch or locating another spelling library.  We are 
-       investigating the options are planning to correct this situation in a
-       future release.
-
-
-
-     �����������������������������������������������������������������������Ŀ 
-     � ����                       Upgrade Policy                        ۲�� �
-     ������������������������������������������������������������������������� 
-
-     Registering SyncEdit is a one time ONLY process.  By purchasing the
-     registered version of SyncEdit, you get a life long "subscription" to
-     all future versions of SyncEdit.
-
-
-
-     �����������������������������������������������������������������������Ŀ 
-     � ����                        Miscellaneous                        ۲�� �
-     ������������������������������������������������������������������������� 
-
-     SyncEdit reads either the INPUT.MSG placed in the node directories by
-     the BBS, or the file passed to it from the BBS via the %f parameter,
-     EDITOR.INF, QUOTES.TXT, and Synchronet's drop file XTRN.DAT.  No other
-     files are read from or written to.
-
-     If the LoadFile or SaveFile commands are used, SyncEdit will load and
-     save to the path\file provided by the user.  It does not, however,
-     modify any BBS system files on it's own.
-
-
-     SyncEdit is a trademark of Robert D. Bouman.
-     Synchronet is a trademark of Digital Dynamics.
-     All other brands are trademarks or registered trademarks of their
-     respective companies.
diff --git a/docs/sysop.html b/docs/sysop.html
deleted file mode 100644
index 297877eb8a..0000000000
--- a/docs/sysop.html
+++ /dev/null
@@ -1,287 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<title>Synchronet BBS Software&nbsp; -&nbsp; Sysop Documentation</title>
-</head>
-
-<body>
-<!--webbot bot="Include" U-Include="_borders/top.htm" TAG="BODY" startspan -->
-
-<a href="http://www.synchro.net"><img border="0" src="images/synclogo_fancyred.gif" alt="Synchronet BBS - Multinode Bulletin Board Software" width="626" height="86"></a>
-
-<hr>
-
-<!--webbot bot="Include" endspan i-checksum="23126" -->
-
-<h1>Synchronet System Operator Documentation</h1>
-<p><b><a name="TOC">Sysop Documentation Table of Contents</a></b>
-</p>
-
-<p><a href="features.html">Features</a>
-</p>
-
-<pre>1.  <b>Installation</b><a href="install.html">
-</a>    1.0   <a href="install.html">Installation</a><a href="install.html#Getting Started">
-</a>    1.1   <a href="install.html#GettingStarted">Getting Started
-</a>    1.2   <a href="install.html#GettingHelp">How to Get Help
-</a>    1.3   <a href="install.html#AboutManual">About this Manual</a></pre>
-
-<div align="left">
-
-<pre>2.  <b>Configuration
-</b>    2.0   <a href="system_config.html">System Configuration</a>
-    2.1   <a href="system_config.html#MessageOptions">Message Options
-</a>    2.2   <a href="system_config.html#SystemOptions">System Options</a>
-    2.3   <a href="system_config.html#SystemToggleOptions">Toggle Options</a>
-    2.4   <a href="system_config.html#NewUserValues">New User Values</a>
-    2.5   <a href="system_config.html#AdvancedOptions">Advanced Options</a>
-    2.6   <a href="system_config.html#LoadableModules">Loadable Modules</a>
-    2.7   <a href="system_config.html#SecurityValues">System Security Level Values</a>
-    2.8   <a href="system_config.html#ExpiredAccountValues">Expired Account Values</a>
-    2.9   <a href="system_config.html#QuickValidationValues">Quick Validation Values</a>
-    2.10  <a href="system_config.html#CreatingUserAccountsLocally">Creating User Accounts Locally</a>
-	  2.10.1 <a href="system_config.html#CreatingSysopAccount">Creating a Sysop Account</a>
-	  2.10.2 <a href="system_config.html#CreatingGuestAccount">Creating a Guest Account</a></pre>
-
-</div>
-
-<pre>3.  <b>Adding Nodes to your System</b>
-    3.0   <a href="adding_nodes.html">Adding Nodes</a>
-    3.1   <a href="adding_nodes.html#ConfiguringNodes">Node Configuration</a>
-    3.2   <a href="adding_nodes.html#NodeToggleOptions">Node Toggle Options</a>
-    3.3   <a href="adding_nodes.html#NodeAdvancedOptions">Node Advanced Options</a>
-    3.4   <a href="adding_nodes.html#WFC_NumberKeys">Waiting For Caller Number Key Assignments</a> <b><i><font color="#FF0000">(v2 Only)</font></i></b>
-    3.5   <a href="adding_nodes.html#WFC_FunctionKeys">Waiting For Caller Function Key Assignments</a> <b><i><font color="#FF0000">(v2 Only)</font></i></b></pre>
-
-<pre>4.  <b>Modem and FAX Configuration <i><font color="#FF0000">(v2 Only)</font></i></b>
-    4.0   <a href="modem_setup.html">Modem Setup</a>
-    4.1   <a href="modem_setup.html#UART_Serial/Modem">Installing UART Serial Card/Internal Modems</a>
-    4.2   <a href="modem_setup.html#Shared_IRQ/Non-UART">Installing a Shared IRQ or Non-UART Serial Card</a>
-    4.3   <a href="modem_setup.html#DumbModemConnection">Using a Dumb (NULL) Modem Connection</a>
-    4.4   <a href="modem_setup.html#ModemConfiguration">Modem Configuration</a>
-    4.5   <a href="modem_setup.html#ResultCodes">Modem Result Codes
-</a>    4.6   <a href="modem_setup.html#ToggleOptions">Modem Toggle Options</a>
-    4.7   <a href="modem_setup.html#ControlStrings">Modem Control Strings</a>
-    4.8   <a href="modem_setup.html#AutoConfiguration">Modem Auto-Configuration</a>
-    4.9   <a href="modem_setup.html#CallerIdentification">Caller-ID Support</a>
-    4.10  <a href="modem_setup.html#FAX/ModemSetup">Incoming FAX Support</a></pre>
-
-<pre>5.  <b>Sysop Commands (Remote / Local)</b>
-    5.0   <a href="sysop_commands.html">Sysop Commands</a>
-    5.1   <a href="sysop_commands.html#SysopDefinition">Definition of a Sysop</a>
-    5.2   <a href="sysop_commands.html#MultipleSysops">Multiple Sysops</a>
-    5.3   <a href="sysop_commands.html#LocalSysopCommands">Local Only Sysop Commands</a>
-    5.4   <a href="sysop_commands.html#OnlineSysopCommands">Remote/Local Sysop Commands</a></pre>
-
-<pre>6.  <b>User Management</b>
-    6.0   <a href="user_editor.html">User Editor</a>
-    6.1   <a href="user_editor.html#UsingUserEditLocally">Editing Users Locally
-</a>    6.2   <a href="user_editor.html#UsingUserEditRemotely">Editing Users Remotely</a>
-    6.3   <a href="user_editor.html#UserEditCommands">User Editor Commands Explained</a></pre>
-
-<pre>7.  <b>Access Requirement Strings (ARS) Security</b>
-    7.0   <a href="security.html">ARS Security</a>
-    7.1   <a href="security.html#Introduction">Introduction to ARS</a>
-    7.2   <a href="security.html#Keywords/Symbols">ARS Keywords and Symbols</a>
-    7.3   <a href="security.html#GeneralUsageExamples">ARS General Usage Examples</a>
-    7.4   <a href="security.html#NestingExpressions">Nesting ARS Logic</a>
-    7.5   <a href="security.html#NestedLogicExamples">ARS Nested Logic Examples</a></pre>
-
-<pre>8.  <b>Message Bases</b>
-    8.0   <a href="message_section.html">Message Base</a>	
-    8.2   <a href="message_section.html#ElectronicMail">Electronic Mail
-</a>          8.2.1 <a href="message_section.html#SynchronetMailServer">Internet (SMTP/POP3) Mail Server</a> <b><font color="#FF0000"><i>(v3+ Only)</i></font></b>
-    8.3   <a href="message_section.html#SettingUpMessageBase">Adding Message Bases</a>
-          8.3.1 <a href="message_section.html#CreatingMessageGroups">Creating Message Groups</a>
-          8.3.2   <a href="message_section.html#MessageGroupOptions">Main Options
-</a>          8.3.3 <a href="message_section.html#CreatingMessageSub-boards">Creating Message Sub-Boards</a>
-	  8.3.4   <a href="message_section.html#Sub-boardMainOptions">Main Options</a>
-          8.3.5   <a href="message_section.html#ToggleOptions">Toggle Options</a>
-          8.3.6   <a href="message_section.html#NetworkOptions">Network Options</a>
-          8.3.7   <a href="message_section.html#AdvancedOptions">Advanced Options</a>
-    8.4   <a href="message_section.html#QWKPacketPreviousSoftware">Importing Messages from Your Previous BBS Software</a>
-    8.5   <a href="message_section.html#PostingMessage">Posting</a>
-    8.6   <a href="message_section.html#RemoteQWKFunctions">Remote QWK Functions</a></pre>
-
-<pre>9.  <b>Networking</b>
-    9.0   <a href="networking.html">Networking Message Bases</a>
-    9.1   <a href="networking.html#QWKPacketNetworking">QWK Networking</a>
-          9.1.1 <a href="networking.html#NetworkHubs">Network Hubs</a>
-          9.1.2 <a href="networking.html#NetworkedSub-boards">Networked Sub-Boards</a>
-          9.1.3 <a href="networking.html#ConfiguringQWKNode">Setting up a QWK Node</a>
-          9.1.4 <a href="networking.html#ConfiguringQWKHub">Setting up a QWK Hub
-</a>    9.2   <a href="networking.html#TransferringFilesThroughQWK">Transferring Files via QWK Network</a>
-    9.3   <a href="networking.html#PostLinkNetworking">PostLink Networking</a>
-    9.4   <a href="networking.html#FidoNetNetworking">FidoNet Networking</a>
-          9.4.1 <a href="networking.html#FidoNetUsingSBBSECHOandInterMail">Step-by-Step Setup</a>
-          9.4.2 <a href="networking.html#SendingFidoNetNetMail">Sending FidoNet NetMail</a>
-    9.5   <a href="networking.html#InternetNetworking">Internet Networking</a></pre>
-
-<div align="left">
-
-<pre>10. <b>File Section</b>
-    10.0  <a href="file_section.html">File Transfer Section
-</a>    10.1  <a href="file_section.html#SettingUpFileTransferSection">Setting up the File Section Options</a>
-          10.1.1 <a href="file_section.html#FileOptions">Main Options</a>
-    10.2  <a href="file_section.html#ViewableFiles">Viewable File Types</a>
-    10.3  <a href="file_section.html#TestableFiles">Testable File Types
-</a>    10.4  <a href="file_section.html#DownloadEvents">Download Events</a>
-    10.5  <a href="file_section.html#ExtractableFiles">Extractable File Types</a>
-    10.6  <a href="file_section.html#CompressableFiles">Compressible File Types</a>
-    10.7  <a href="file_section.html#TransferProtocols">Transfer Protocols
-</a>          10.7.1 <a href="file_section.html#FDSZ">FDSZ Protocol</a>
-          10.7.2 <a href="file_section.html#DSZ">DSZ Protocol</a>
-          10.7.3 <a href="file_section.html#HS/Link">HS/Link Protocol</a>
-    10.8  <a href="file_section.html#CreatingFileLibraries">Adding File Libraries</a>
-          10.8.1  <a href="file_section.html#LibraryOptions">Main Options</a>
-    10.9  <a href="file_section.html#CreatingFileDirectories">Adding File Directories</a>
-          10.9.1  <a href="file_section.html#MainDirectoryOptions">Main Options</a>
-          10.9.2  <a href="file_section.html#ToggleOptions">Toggle Options</a>
-          10.9.3  <a href="file_section.html#AdvancedOptions">Advanced Options</a>
-    10.10 <a href="file_section.html#AddingFilesToDatabase">Adding Files to File Sections</a>
-          10.10.1 <a href="file_section.html#CreatingOfflineFileDirectories">Creating an Offline Files Directory</a>
-          10.10.2 <a href="file_section.html#CreatingSysopDirectory">Creating a Sysop Directory</a>
-          10.10.3 <a href="file_section.html#CreatingUser-to-UserDirectory">Creating a User to User Directory</a>
-          10.10.4 <a href="file_section.html#CreatingDefaultUploadDirectory">Creating a Default Upload Directory</a>
-          10.10.5 <a href="file_section.html#SupportingBlindBatchUploads">Supporting Blind Batch Uploads</a>
-    10.11 <a href="file_section.html#CD-ROM/SlowMediaDevices">CD-ROM and other Slow Media Devices</a>
-          10.11.1 <a href="file_section.html#AlternateFilePaths">Using Alternate File Paths
-</a>    10.12 <a href="file_section.html#SynchronetFTPServer">Internet FTP Server</a> <b><font color="#FF0000"><i>(v3+ Only)</i></font></b></pre>
-
-</div>
-
-<pre>11. <b>Chat Section</b>
-    11.0  <a href="chat_section.html">Chat Section Configuration</a>
-    11.1  <a href="chat_section.html#ArtificialChatGurus">Artificial Chat Gurus</a>
-    11.2  <a href="chat_section.html#ChatActions">Multinode Chat Actions</a>
-    11.3  <a href="chat_section.html#MultinodeChatChannels">Multinode Chat Channels</a>
-    11.4  <a href="chat_section.html#ExternalSysopPagers">External Sysop Chat Pagers</a></pre>
-
-<pre>12. <b>External Programs</b>
-    12.0  <a href="external_programs.html">External Programs
-</a>    12.1  <a href="external_programs.html#FixedEvents">External Fixed Events</a>
-    12.2  <a href="external_programs.html#TimedEvents">External Timed Events</a>
-    12.3  <a href="external_programs.html#GlobalSwapList">Global Swap List</a>
-    12.4  <a href="external_programs.html#Native32bitProgramList">Native (32-bit) Program List</a>
-    12.5  <a href="external_programs.html#ExternalEditors">External Editors</a>
-    12.6  <a href="external_programs.html#OnlinePrograms">Adding Online Programs</a>
-    12.7  <a href="external_programs.html#DropFiles">Supported BBS Drop File Types</a>
-    12.8  <a href="external_programs.html#Call-backVerifiers">Callback Verifiers</a>
-    12.9  <a href="external_programs.html#InstallingNewExternalProgram">Installing a New External Program</a>
-    12.10 <a href="external_programs.html#ConfiguringNewExternalProgram">Configuring a New External Program</a>
-    12.11 <a href="external_programs.html#ExampleDoorGameSetups">External Program Setup Examples</a>
-          12.11.1 <a href="external_programs.html#LORD">Legend of the Red Dragon (LORD)</a>
-          12.11.2 <a href="external_programs.html#Usurper">Usurper</a>
-          12.11.3 <a href="external_programs.html#TradeWars2002">Trade Wars 2002
-</a>          12.11.4 <a href="external_programs.html#BRE">Barren Realms Elite
-</a>    12.12 <a href="external_programs.html#InternalGateways">Internet Gateways (Telnet, RLogin, etc.)</a> <b><font color="#FF0000"><i>(v3+ Only)</i></font></b>
-    12.13 <a href="external_programs.html#TroubleshootingExternalPrograms">Troubleshooting External Programs</a></pre>
-
-<pre>13. <b>Text File Section</b>
-    13.0  <a href="textfile_section.html">General Text Files</a>
-    13.1  <a href="textfile_section.html#TextFileOptions">Main Options</a>
-    13.2  <a href="textfile_section.html#AddingTextFiles">Adding Text Files to a Section</a>
-    13.3  <a href="textfile_section.html#976/900NumberBilling">976/900 Number Billing Support</a></pre>
-
-<pre>14. <b>Multinode Information <i><font color="#FF0000">(v2 Only)</font></i></b>
-    14.0  <a href="multnode_config.html">Multinode</a>
-    14.1  <a href="multnode_config.html#LANMethod">The Local Area Network (LAN) Method</a>
-    14.2  <a href="multnode_config.html#MultitaskerMethod">The Multitasker Method</a>
-    14.3  <a href="multnode_config.html#Safe?">Is it Safe to run Multiple Nodes?</a>
-    14.4  <a href="multnode_config.html#MultinodeDESQview">Setting Up Synchronet Under DESQview</a>
-    14.5  <a href="multnode_config.html#MultinodeOS/2">Setting Up Synchronet Under OS/2</a>
-    14.6  <a href="multnode_config.html#MultinodeWindows3.x">Setting Up Synchronet Under Windows 3.x</a>
-    14.7  <a href="multnode_config.html#MultinodeWindows9x">Setting Up Synchronet Under Windows 9x</a>
-    14.8  <a href="multnode_config.html#MultinodeLAN">Setting Up Synchronet on a LAN</a></pre>
-
-<pre>15. <b>Synchronet Utility Reference</b><a href="utility_reference.html">
-</a>    15.1  <a href="utility_reference.html#CHKSMB">CHKSMB</a>	<b>(</b>Checks Message Base for Validity<b>)</b>
-    15.2  <a href="utility_reference.html#FIXSMB">FIXSMB</a>	<b>(</b>Fixes Message Base and Mail Indexes<b>)</b>
-    15.3  <a href="utility_reference.html#SMBUTIL">SMBUTIL</a> 	<b>(</b>Synchronet Message Base Utility<b>)
-</b>    15.4  <a href="utility_reference.html#SMBACTIV">SMBACTIV</a>	<b>(</b>Checks for Active Message Bases<b>)</b>
-    15.5  <a href="utility_reference.html#ADDFILES">ADDFILES</a>	<b>(</b>Importing ASCII File Lists<b>)</b>
-    15.6  <a href="utility_reference.html#FILELIST">FILELIST</a>	<b>(</b>Creating ASCII File Lists<b>)</b>
-    15.7  <a href="utility_reference.html#DUPEFIND">DUPEFIND</a>	<b>(</b>Finds Duplicate Files in Synchronet<b>)</b>
-    15.8  <a href="utility_reference.html#DELFILES">DELFILES</a>	<b>(</b>Deletes Files from File Base<b>)</b>
-    15.9  <a href="utility_reference.html#MLABELS">MLABELS</a> 	<b>(</b>Mailing Labels Creation Util<b>)</b>
-    15.10 <a href="utility_reference.html#QWKNODES">QWKNODES</a>	<b>(</b>Create QWKnet Users/Route/Node Lists<b>)</b>
-    15.11 <a href="utility_reference.html#ALLUSERS">ALLUSERS</a>	<b>(</b>Command Line Bulk User Editor<b>)</b>
-    15.12 <a href="utility_reference.html#AUTONODE">AUTONODE</a>	<b>(</b>Automatic Local Logon Utility<b>) <font color="#FF0000"><i>(v2 Only)</i></font></b>
-    15.13 <a href="utility_reference.html#NODE">NODE</a>		<b>(</b>Node Display/Control Utility<b>)</b>
-    15.14 <a href="utility_reference.html#UTI">UTI Driver</a>	<b>(</b>PostLink Import/Export Utils<b>)</b>
-    15.15 <a href="utility_reference.html#SLOG">SLOG</a>		<b>(</b>Node/System Statistics Viewer<b>)</b>
-    15.16 <a href="utility_reference.html#DSTSEDIT">DSTSEDIT</a>	<b>(</b>Node/System Statistics Editor<b>)</b>
-    15.17 <a href="utility_reference.html#TOTALS">TOTALS</a>	<b>(</b>Credit Gain/Loss Util for Games<b>)</b>
-    15.18 <a href="utility_reference.html#ANS2MSG">ANS2MSG</a> 	<b>(</b>ANSI to Ctrl-A Conversion Utility<b>)</b>
-    15.19 <a href="utility_reference.html#MSG2ANS">MSG2ANS</a> 	<b>(</b>Ctrl-A to ANSI Conversion Utility<b>)</b></pre>
-
-<pre>16. <b>Troubleshooting your System</b>
-    16.0 <a href="troubleshooting.html">Troubleshooting</a></pre>
-
-<pre>17. <b>Customizing your System</b>
-    17.1  <a href="customization.html#MenusAndTextFiles">Menus and Other Text Files</a>
-          17.1.1 <a href="customization.html#Text/Colors">Text Colors</a>
-          17.1.2 <a href="customization.html#NodeActionText">Node Action Text</a>
-          17.1.3 <a href="customization.html#TrashCanFiles">Trash Can Files</a>
-    17.2  <a href="customization.html#MessageVariables">Message Variables</a>
-    17.3  <a href="customization.html#MessageColorCodes">Message Color Codes</a>
-    17.4  <a href="customization.html#SIFQuestionnaireFile">SIF Questionnaire File Format</a>
-    17.5  <a href="customization.html#GURU.DAT">GURU.DAT (Guru Brain) Modifications</a></pre>
-
-<div align="left">
-
-<pre>18. <b>Appendix Information
-</b>    18.1  <a href="appendix.html#Appendix_A">Appendix A</a> : Command Line Specifier Reference<b>
-</b>    18.2  <a href="appendix.html#Appendix_B">Appendix B</a> : Synchronet (SBBS/SCFG) Command Line Options
-    18.3  <a href="appendix.html#Appendix_C">Appendix C</a> : Synchronet Environment Variables<b>
-</b>    18.4  <a href="appendix.html#Appendix_D">Appendix D</a> : Wait for Call Status Display<b> <i><font color="#FF0000">(v2 Only)</font></i>
-</b>    18.5  <a href="appendix.html#Appendix_E">Appendix E</a> : Node Status Display<b>
-</b>    18.6  <a href="appendix.html#Appendix_F">Appendix F</a> : Log File Line Type Specifiers<b>
-</b>    18.7  <a href="appendix.html#Appendix_G">Appendix G</a> : File Formats (Technical Specs for Developers)</pre>
-
-</div>
-
-<pre><b>19. Definitions of Commonly Used Terms
-</b>    19.0  <a href="glossary.html">Glossary</a></pre>
-
-<p><b><a href="#TOC">Back to Table of Contents</a></b></p>
-
-<!--webbot bot="Include" U-Include="_borders/bottom.htm" TAG="BODY" startspan -->
-
-<hr>
-<p><b><a href="http://www.synchro.net/copyright.html">Copyright</a> � 2000 by </b> <a href="http://www.synchro.net/author.htm"><b>Rob Swindell</b><br>
-</a>
-
-<a href="http://www.synchro.net"><font size="2"><br>
-Synchronet BBS Software</font></a>  <font size="2">  (Synchronet)
-Version 3 is comprised of several documentation,<br>
-library, executable, and <a href="http://www.synchro.net/source.html">source code</a> 
-files, all of which are covered by the<a href="http://www.fsf.org/copyleft/gpl.html">
-<br>
-GNU General Public License</a>  with the exception of the following portions
-covered by<br>
-the <a href="http://www.fsf.org/copyleft/lesser.html">GNU Lesser General Public License</a>:
-SMBLIB and XSDK.<br>
-<br>
-Synchronet Version 2 (for DOS and OS/2) and its source code was released to the<a href="http://www.fsf.org/philosophy/categories.html#PublicDomainSoftware">
-<br>
-Public Domain</a>  by <a href="ftp://vert.synchro.net/main/sbbs/manifest.txt">Digital Dynamics</a> 
-in 1997 and remains Public Domain software today.<br>
-Synchronet Version 3 is not Public Domain software.</font></p>
-<p align="left"><font size="2"><a href="http://www.synchro.net/author.html">Rob Swindell<br>
-</a>PO Box 501<br>Yorba Linda, CA 92885<a href="http://www.synchro.net"><br>
-http://www.synchro.net</a>
-
-</font></p>
-<p align="left"><font size="2">For the complete Copyright Information please
-read the <a href="http://www.synchro.net/copyright.html">Copyright Documentation</a>
-.</font></p>
-
-<!--webbot bot="Include" endspan i-checksum="55766" -->
-
-</body>
-
-</html>
diff --git a/docs/sysop_commands.html b/docs/sysop_commands.html
deleted file mode 100644
index b2f5a8d694..0000000000
--- a/docs/sysop_commands.html
+++ /dev/null
@@ -1,476 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<title>Sysop Commands</title>
-</head>
-
-<body>
-
-<!--webbot bot="Include" U-Include="_borders/top.htm" TAG="BODY" startspan -->
-
-<a href="http://www.synchro.net"><img border="0" src="images/synclogo_fancyred.gif" alt="Synchronet BBS - Multinode Bulletin Board Software" width="626" height="86"></a>
-
-<hr>
-
-<!--webbot bot="Include" endspan i-checksum="23126" -->
-
-<p><a name="top"></a><a href="sysop.html#TOC">Back to Table of Contents</a></p>
-
-<h2><a name="SysopDefinition">[5.1] - Sysop Definition</a></h2>
-
-<pre>There is usually one sysop (System Operator) per BBS - the owner and operator
-of the hardware which Synchronet is running on and accepting remote users.
-Quite often systems require more than one sysop and Synchronet is flexible in
-this respect. Within Synchronet, a sysop is defined as any user with a main
-level of 90 or above. Any user that qualifies as a sysop, is prompted with an
-&quot;<b>SY:</b>&quot; to enter the system password at logon. Any time a sysop attempts to
-perform a sysop function that may breach the system security, he is prompted
-with an &quot;<b>SY:</b>&quot; to enter the system password before he can proceed. Users with
-sysop access can cause serious damage to the system. Give out this ability with
-caution.</pre>
-
-<h2><a name="MultipleSysops">[5.2] - Multiple Sysops</a></h2>
-
-<pre>As stated above, any user with a security level of 90 or greater can perform
-sysop functions, &quot;So why have levels 91-99?&quot; you might ask yourself. Well, you
-can still restrict a user with sysop access from accessing Message Groups or
-Sub-boards or File Libraries or Directories by setting the minimum required
-level above that user's level. For example: If you have a remote sysop with a
-security level of 90, you can still have a Message Group or Sub-board with a
-minimum required level of 91. Now this remote sysop will not be able to access
-that Group or Sub-board. While it is true that sysops can edit their own
-and subordinate user's accounts, they can not edit a sysop of higher level's
-account (when calling remotely). A remote sysop can't raise any user's level
-above his own, or add flags or exemptions that he himself doesn't have.</pre>
-
-<h2><a name="LocalSysopCommands">[5.3] - Local Sysop Commands </a><i><font color="#CC0000"><b>(v2
-Only)</b></font></i></h2>
-
-<pre>Most sysop functions will be performed locally, while some sysop functions can
-<u>only</u> be performed locally. The following special key combination are only
-available while online locally (not from the Waiting for Call screen).
-
-<u><b>Macros:</b>
-</u>        All the function keys (F1-F12) and combinations with Shift, Ctrl, and
-        Alt (48 macros total) are available for the sysop. A macro is a short
-        way to enter many keystrokes. Each macro is stored in a separate file
-        in the TEXT directory with a MAC extension. The name reflects which
-        key combination will initiate the macro. For regular F1 through F12,
-        the name is F1.MAC through F12.MAC respectively. For Alt-F1 through
-        Alt-F12 the name is ALT-F1.MAC through ALT-F12, Ctrl-F1 through
-        Ctrl-F12 are named CTRL-F1.MAC through CTRL-F12, and Shift-F1 through
-        Shift-F12 are named SHFT-F1.MAC through SHFT-F12. Each file is a basic
-        ASCII text file with one exception; an extended key combination (such
-        as Alt-D) can be entered by placing a Ctrl-@ (ASCII 0, NULL) in the
-        file followed by the scan code of the key you wish to use.
-
-<b><u>Alt-key combinations:
-</u></b>
-<b>        Alt-U           (User Edit)
-</b>        At any place within Synchronet, pressing Alt-U at the local keyboard 
-        will pop the local console into User Edit while the remote side (if 
-        there is a remote user) will see [WAIT]. Alt-U is available while using
-        the terminal mode as well. See User Edit for more information.
-        See UEDIT command below.
-        
-<b>        Alt-#           (Quick Validation)
-</b>        Pressing Alt and then any of the numbers 0-9 will change the current 
-        users level/flags/exemptions/restrictions/credits and extend their
-        expiration date to the settings for that quick-validation slot set in
-	the system configuration. SCFG-&gt;System-&gt;Toggle Options-&gt;Quick
-	Validation Hot Keys must be set to 'Yes' for this feature to work.
-        
-<b>        Alt-S           (Crazy Cursor Toggle)
-</b>        Pressing Alt-S will toggle the state of the crazy (spinning) cursor,
-        but doesn't change the current user's default settings regarding it.
-
-<b>        Alt-E           (Local I/O Only)
-</b>        If a user is on remotely, this allows the local console to use the BBS
-        while the remote user just sees [WAIT]. Pressing Alt-E again re-enables
-        the remote console.
-
-<b>        Alt-L           (Capture)
-</b>        This starts and stops the local capture of text to a file. If capture
-        is active the status line will reflect this state with a blinking 'C'
-        as the far left character. The file the BBS opens to capture to will be
-        appended if the file already exists. The filename to capture to is
-        prompted for when capture is started. The filename defaults to
-        CAPTURE.TXT in the current node's directory. To direct output to the
-        printer, change the filename to PRN.
-        See ANSCAP command below.
-
-<b>        Alt-Q           (Quiet Remote User)
-</b>        If a user is connected remotely, hitting this key will disable him from
-        being able to enter any keystrokes into the BBS . The user will see all
-        the BBSs output, but any characters sent from his side will not be
-        accepted as input. Hitting Alt-Q again enables remote input again.
-
-<b>        Alt-P           (Sysop Page Off)
-</b>        If someone is currently paging the local sysop (annoying sounds at the
-        local console), hitting Alt-P will turn them off. Scroll-lock toggles
-        local sysop availability.
-
-<b>        Alt-H           (Disconnect)
-</b>        Hangs up on the current user immediately.
-
-<b>        Alt-I           (Interrupt)
-</b>        Hangs up on the current user after displaying a message the node has
-        been closed for maintenance.
-        See INTR command below.
-
-<b>        Alt-A           (Sysop Alert)
-</b>        When the current user logs off the BBS, the local sysop will be alerted
-	by a message and a continuous alarm.
-
-<b>        Alt-R           (Rerun Node)
-</b>        When the current user logs off the BBS, this node will automatically
-        rerun itself.
-        See RERUN command below.
-
-<b>        Alt-X           (Down Node After User Logs Off)
-</b>	Hitting this key combination while the user is in the BBS will toggle
-        the down status of this node. When a node is to be downed, it will
-        be automatically shutdown when the current user logs off.
-        See DOWN command below.
-
-<b>        Alt--           (Subtracts 5 Minutes)
-</b>        Subtracts 5 minutes from the users time allowed online this logon.
-
-<b>        Alt-+           (Add 5 Minutes)
-</b>        Add 5 minutes to the user's time allowed online this logon.
-
-<b>        Alt-N           (Lock Node)
-</b>        Pressing this key will disallow any non-sysops or users without the
-        'N' exemption from logging on after the current user logs off.
-        See LOCK command below.
-
-<b>        Alt-T           (Temp Sysop)
-</b>        Gives the current user sysop status temporarily for this logon. Hitting
-        Alt-T again removes the temp sysop status. This doesn't actually raise
-        the security level of the user to 90, but gives him access to all sysop
-        functions. The status line reflects Temp Sysop state with a blinking
-        asterisk to the far left of the status line.
-
-<b>        Alt-G           (Guru Chat)
-</b>        Pops the user in and out of apparent local chat with the system's guru.
-
-<b>        Alt-C           (Local Chat)
-</b>        Pops the user into chat with the local console.
-
-<b>        Alt-D           (DOS Shell)
-</b>        Pops the local console into DOS. If a user is on remotely, he sees
-        [WAIT] till the local console exits the shell. The sysop can use the
-        'D' command to shell to DOS from the wait for call screen.
-        See DOS command below.
-
-<b>        Alt-Z           (Local Key Menu)
-</b>        Displays the local key menu.
-
-<b>Status Line:<u>
-</u></b>
-        The status line displays one line of user information at any given
-        time. To change the current line, use CTRL and the UP and DOWN arrow
-        keys to scroll through different information lines, or CTRL-HOME to go
-        to the  default (1st) or CTRL-END to go to the last.
-
-        The available status lines are:
-
-         0: UserName SecLevel Password ModemType Birthday Age Sex Phone
-         1: UserName SecLevel RealName/CompanyName &quot;Alt-Z for help&quot;
-         2: UserName SecLevel RealName/CompanyName Age Sex Phone
-         3: UserName SecLevel Location Phone
-	 4: UserName SecLevel Note/Caller-ID Phone
-         5: UserName SecLevel Flags1 Age Sex Phone
-         6: UserName SecLevel Flags1 Expiration
-         7: UserName SecLevel DateFirstOn DateLastOn Expiration
-         8: UserName SecLevel Credits Minutes Expiration
-         9: SecLevel Flags1 Flags2
-        10: Exemptions Restrictions
-        11: ComputerType ModemType ChatHandle
-        12: Address Location ZipCode
-        13: UploadBytes UploadFiles DownloadBytes DownloadFiles LeechCount
-        14: Posts EmailSent FeedbackSent EmailWaiting TotalLogons TotalTimeOn
-        15: NetMailForwardingAddress
-        16: SysopComment
-
-        You can set the default status line number in SCFG-&gt;System-&gt;Advanced
-        options. This will be the default status line that appears until
-        manually scrolled.
-
-        There are status flags on the status line that indicate specific status
-        items. They appear blinking on the left or right edges of the status
-        line. They are defined as:
-
-        C       Local text/ANSI capture is on
-        *       Temporary sysop status
-        A       Alert sysop when user logs off
-        R       Rerun this node when user logs off
-        D       Down this node when user logs off
-        E       Run node daily event when user logs off
-        L       This node is locked for sysop logons only</pre>
-
-<h2><a name="OnlineSysopCommands">[5.4] - Extra Online Sysop Commands</a></h2>
-
-<pre>Most of the additional commands available to sysops online (local or remote)
-are initiated from the main or transfer sections. A menu of the available
-commands can be viewed with the '!' command from the main or transfer sections
-with the Synchronet Classic command shell. Additional sysop commands are
-available in many other sections of the BBS and are displayed after the normal
-menu with the '?' command. All sysop commands from the main or transfer
-sections of the Synchronet Classic command shell begin with a semicolon (';')
-character, end with CR (ENTER), and some have optional parameters (shown in
-square brackets). Users with certain exemptions can use some of these commands
-and have access to the menus via the '!' command using the Synchronet Classic
-command shell. 
-
-
-<b>        UEDIT [x]       (User Edit)
-</b>        This command initiates the User Edit function. If 'x' is specified
-        and is a valid user number, that user will be the current user when
-        User Edit starts, otherwise the user online will be the current user.
-        This command is also available from the transfer menu. Locally, Alt-U
-        is the preferred method of initiating User Edit.
-        See the chapter on User Edit for more information.</pre>
-
-<pre><b>        SPY [n]        	(Spy on Another User) <font color="#CC0000"><i>(v3.00c+ Only)</i></font>
-</b>        This command allows the sysop to remotely monitor or control another node
-	running in the same instance as the node the sysop is logged into.</pre>
-
-<pre><b>        CHUSER          (Change into Another User)
-</b>        This command allows the sysop to temporarily change to another user
-        account. If changing to an account with a higher level, the password
-        of that user must be given. Changing to an account of non-sysop status
-        automatically enables Temp Sysop mode so that the sysop can change back
-        to his/her own account before logging off (a suggested action).
-
-<b>        ANSCAP          (Toggle ANSI Capture Mode) <font color="#CC0000"><i>(v2 Only)</i></font>
-</b>        Normal ANSI escape sequences are not written to the capture file. The
-        sysop can use this command to enable all characters (including ANSI
-        escape sequences) to be written.
-
-<b>        LOCK [x]        (Lock Node)
-</b>        The sysop can use this command to prevent users logging onto a node
-        until the lock is removed. If 'x' is specified, that node's lock
-        status will be toggled, otherwise a list of all nodes is given and
-        the sysop is prompted for the node to lock or unlock. Sysops and
-        users with the 'L' exemption can use this command and log onto locked
-        nodes. A locked node will have an 'L' in parenthesis after the node
-        information in the node listings.
-
-<b>        INTR [x]        (Interrupt Node)
-</b>	This command allows a sysop (or user with the 'I' exemption) to hang up
-        on a user on another node. If the user is currently executing an
-        external program (editors and transfer protocols included), he will
-        not be disconnected until control returns to Synchronet. A message will
-        be displayed telling the user that the node has been temporarily closed
-        for maintenance before carrier is dropped. If 'x' is specified that
-        node's interrupt status will be toggled, otherwise a list of all nodes
-        is displayed and the sysop is prompted for the node who's interrupt
-        state he wishes to toggle. The current interrupt status of a node is
-        reflected by an 'I' in square brackets following the node information
-        line in the node listings.
-
-<b>        DOWN [x]        (Down Node)
-</b>        A sysop can toggle the down status of a node with this command. When
-        a node has the down status (noted by the [D] flag on the node status
-        line) it will be shutdown immediately after the user logs off. If a
-        user is not online, it will shutdown immediately.
-
-<b>        ANON            (Anonymous)
-</b>        This command makes the current node anonymous. Sysops and users with
-        the 'Q' exemption have access to this command. To a sysop, an anonymous
-        node appears normal with the addition of an 'A' in square brackets
-        following the node information line.
-
-<b>        QUIET           (Quiet Mode)
-</b>        Using this command, a sysop (or user with the 'Q' exemption) can make
-        his node appear to be &quot;Waiting for call&quot; to other users of the system.
-        Users with this ability can also make this state their default state
-        upon logon in the user defaults section. Local users can logon in
-        this state with the WFC command SPACE, then 'Z' or user number 1 can
-        logon fast and quiet with the WFC command SPACE, then 'Q'.
-        To a sysop, a node in this state appears normal with the addition of
-        a 'Q' in square brackets following the node information line.
-
-<b>        RERUN [x]       (Rerun Node)
-</b>        This command allows a sysop to rerun any node on the system by
-        specifying the node number on the command line. If there is a user
-        on the node that is to be rerun, the node will not rerun until that
-	user logs off. A node that is going to be rerun is noted with an
-        'R' in square brackets following the node information in node listings.
-
-<b>        DOS             (Shell to DOS)
-</b>        Using this command, a sysop can go straight to the DOS command line
-        locally or remotely. If the sysop is on locally, ALT-D is the
-        preferred method of shelling to DOS. If a local sysop wishes to shell
-        to DOS from the wait for call screen, he can use the 'D' command.
-
-<b>        EDIT [s]        (Edit Text/MSG File)
-</b>        A sysop can edit any ASCII text (and MSG format) files on the system
-        with this command. If 's' is given, it will be used as the filename to
-        be opened or created if it doesn't exist. If 's' is not specified, the
-        filename will be prompted for.
-
-<b>        LOG             (Today's Detail Log)
-</b>        A sysop can view today's detailed log file with this command. This
-        command views the same file as the 'L' wait for call screen command.
-
-<b>        YLOG            (Yesterday's Detail Log)
-</b>        A sysop can view yesterday's detailed log file with this command. This
-        command views the same file as the 'Y' wait for call screen command.
-
-<b>        NS [x]          (Node Statistics)
-</b>        This command will give today's statistics for node 'x' if specified,
-        or the current node.
-
-<b>        SS              (System Statistics)
-</b>        This command will give today's statistics for all nodes combined.
-
-<b>        NLOG [x]        (Node Statistics Log)
-</b>        A sysop can view the history of statistics information for any node on
-        the system. If 'x' is specified, that will be the node who's statistics
-        are viewed, otherwise the current node. Same as 'N' from the wait for
-        call screen.
-
-<b>        SLOG            (System Statistics Log)
-</b>        Using this command, a sysop can view the history of statistics
-        information for the system. Same as 'S' from the wait for call screen.
-
-<b>        MEM             (Available Memory) <font color="#CC0000"><i>(v2 for DOS Only)</i></font>
-</b>        This command displays the amount of memory available to Synchronet and
-        any external programs it executes (without swapping).
-
-<b>        LIST [s]        (View Text/MSG File)
-</b>        A sysop can use this command to view any ASCII text (or MSG format)
-        file on the system. If the filename 's' is not specified, it is
-        prompted for.
-
-<b>	GURU		(View Guru Log)
-</b>        A sysop can use this command to view the GURU.LOG file which contains
-        discussions that users have had with the system guru (GURU.DAT).
-        See GURU.DAT for more information.
-
-<b>        MAIL            (Read All Mail)
-</b>        Using this command (or 'M' from the WFC screen) a sysop can read all
-        the e-mail on the system.
-
-<b>	BULKMAIL	(Send Mass Mailing)
-</b>	Use this command to send a single e-mail message to multiple users.
-
-<b>	CALL [Hub-ID]	(Force QWKnet Call-out)
-</b>	Forces a QWKnet call-out to the hub &quot;Hub-ID&quot; the next time the call-out
-	node is at the WFC screen. Example: CALL VERT
-
-<b>	EXEC [Command]	(Execute a DOS program or Baja module)
-</b>	Execute internal DOS commands (DIR, TYPE, etc.) by prepending
-	&quot;command /c&quot; to your command line. Execute Baja modules by prepending
-	&quot;*&quot; to  the command line. Baja modules must be located in your EXEC
-	directory. Command line specifiers (see appendix A) may be used.
-
-<b>	CHAT
-</b>	Users with the 'C' exemption can use this command to page the sysop.
-
-<b>        OLD             (Search for Files not Downloaded Since New-Scan Date)
-</b>        A sysop can use this command to remove, edit, or move files that were
-        uploaded before the new-scan date (set with the '&amp;P' transfer section
-        command) and have not been downloaded since.
-
-<b>        OLDUL           (Search for Files Uploaded Before New-Scan Date)
-</b>        A sysop can use this command to remove, edit, or move files that were
-        uploaded before the new-scan date (set with the '&amp;P' transfer section
-        command).
-
-<b>        CLOSE           (Search for Files Currently Open)
-</b>        If there are no users online and all nodes are running, there should
-        be no file records open. A sysop can check for open file records with
-	this command. Any file records that are left open erroneously, can be
-        closed with this command. This circumstance should not happen.
-
-<b>        ALTUL [x]       (Alternate File Path Uploads)
-</b>        If there are alternate file paths configured, a sysop can use this
-        command to set the current upload path to one of the alternate file
-        paths. All subsequent upload commands will use the alternate upload
-        path as the storage directory regardless of the storage path specified
-        for the directory being uploaded to. This is a useful command for
-        those who wish to have one directory with files listed from multiple
-        CD-ROMs.
-        See CD-ROM for more information on creating alternate file paths.
-
-<b>        UPLOAD          (Bulk Local Upload)
-</b>        This command searches for files that are on disk, but not in the
-        database of the directory. If any are found, a description is prompted
-        for and the file is then added to the database.
-
-<b>        RESORT          (Re-Sort and/or Compress)
-</b>        A sysop can use this command to re-sort a directory if he has changed
-        the sort order in the directory configuration or can use this command
-        to remove deleted file records from the database to conserve memory and
-        disk space. If there are many deleted files in the database of a
-        directory, performance will also be affected. Deleted file records
-        are used by new uploaded files, but if a substantial amount of files
-        have been removed from a directory, a sysop may wish to use this
-        command.
-
-<b>        OFFLINE         (Search for Offline Files)
-</b>        This command will search the disk for files that are in the database
-        of a directory but not actually on the disk. The sysop can then remove,
-        edit, or move these files to another directory. Offline directories
-        are ignored in this search.
-
-<b>	DIR [s] 	(Directory of Files)
-</b>	This command displays a DOS directory of the path specified. If no
-	path is specified, a directory of the current file transfer directory
-	is displayed.
-
-<b>	GET [s] 	(Download File From Anywhere)
-</b>        A sysop can download a file from any drive or directory on the system
-        by using this command. The file does not have to be in the file
-        database.
-
-<b>	PUT [s] 	(Upload File to Anywhere)
-</b>        A sysop can use this command to upload a file to a local disk without
-        having to add it to the file database.</pre>
-
-<pre>Note: The Baja source code file for these commands is: <b>exec/str_cmds.src</b></pre>
-
-<p><a href="#top"><b>Back to Top</b></a></p>
-
-<!--webbot bot="Include" U-Include="_borders/bottom.htm" TAG="BODY" startspan -->
-
-<hr>
-<p><b><a href="http://www.synchro.net/copyright.html">Copyright</a> � 2000 by </b> <a href="http://www.synchro.net/author.htm"><b>Rob Swindell</b><br>
-</a>
-
-<a href="http://www.synchro.net"><font size="2"><br>
-Synchronet BBS Software</font></a>  <font size="2">  (Synchronet)
-Version 3 is comprised of several documentation,<br>
-library, executable, and <a href="http://www.synchro.net/source.html">source code</a> 
-files, all of which are covered by the<a href="http://www.fsf.org/copyleft/gpl.html">
-<br>
-GNU General Public License</a>  with the exception of the following portions
-covered by<br>
-the <a href="http://www.fsf.org/copyleft/lesser.html">GNU Lesser General Public License</a>:
-SMBLIB and XSDK.<br>
-<br>
-Synchronet Version 2 (for DOS and OS/2) and its source code was released to the<a href="http://www.fsf.org/philosophy/categories.html#PublicDomainSoftware">
-<br>
-Public Domain</a>  by <a href="ftp://vert.synchro.net/main/sbbs/manifest.txt">Digital Dynamics</a> 
-in 1997 and remains Public Domain software today.<br>
-Synchronet Version 3 is not Public Domain software.</font></p>
-<p align="left"><font size="2"><a href="http://www.synchro.net/author.html">Rob Swindell<br>
-</a>PO Box 501<br>Yorba Linda, CA 92885<a href="http://www.synchro.net"><br>
-http://www.synchro.net</a>
-
-</font></p>
-<p align="left"><font size="2">For the complete Copyright Information please
-read the <a href="http://www.synchro.net/copyright.html">Copyright Documentation</a>
-.</font></p>
-
-<!--webbot bot="Include" endspan i-checksum="55766" -->
-
-</body>
-
-</html>
diff --git a/docs/system_config.html b/docs/system_config.html
deleted file mode 100644
index 82043247ba..0000000000
--- a/docs/system_config.html
+++ /dev/null
@@ -1,524 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<title>System Configuration</title>
-</head>
-
-<body>
-
-<!--webbot bot="Include" U-Include="_borders/top.htm" TAG="BODY" startspan -->
-
-<a href="http://www.synchro.net"><img border="0" src="images/synclogo_fancyred.gif" alt="Synchronet BBS - Multinode Bulletin Board Software" width="626" height="86"></a>
-
-<hr>
-
-<!--webbot bot="Include" endspan i-checksum="23126" -->
-
-<p><b><a name="top"></a></b><a href="sysop.html#TOC">Back to Table of Contents</a></p>
-<h2><a name="SystemConfiguration">[2.0] - System Configuration</a></h2>
-<pre>SCFG is the Synchronet Configuration Utility. It is a stand-alone console mode 
-application currently available in the following forms:</pre>
-<ul>
-  <li>
-<pre>SCFG.EXE - 16-bit DOS application</pre>
-  </li>
-  <li>
-<pre>SCFG32.EXE - 32-bit extended-DOS/Win32 application</pre>
-  </li>
-  <li>
-<pre>SCFG4OS2.EXE - 32-bit OS/2 application</pre>
-  </li>
-</ul>
-<pre>To run SCFG from Synchronet for Win32 Control Panel, select <i>Configure</i> from the <i>
-BBS</i> sub-menu on the menu bar.</pre>
-<pre><img border="0" src="images/sbbsctrl_configure.gif" width="301" height="192"></pre>
-<pre>SCFG can be executed from the <b>v2</b> &quot;<i>Waiting for call</i>&quot; screen by 
-hitting '<b>C</b>' or from DOS by typing <b>SCFG</b> from any node directory. 
-Example:</pre>
-<pre><img border="0" src="images/scfg_dos_startup.gif" width="500" height="150"></pre>
-<pre>Once SCFG has initialized, you will see a main menu titled &quot;Configure&quot; which looks 
-something like this:</pre>
-<pre><img border="0" src="images/scfg_main.gif" width="572" height="331">
-			
-To manipulate the light-bar, use the <i>UP</i> and <i>DOWN ARROW</i> keys or type a letter or
-number in the option you wish to highlight. To highlight the first option of
-the menu, hit the <i>HOME</i> key. To highlight the last option of the menu, hit the 
-<i>END</i> key. You'll notice that if you hit <i>UP ARROW</i> key when the light-bar is at the 
-first option of the menu, the last option will become highlighted. This wrap effect 
-also occurs when hitting the DOWN ARROW key when the light-bar is at the last option 
-of the menu. To select the current highlighted option, hit <i>ENTER</i>. To exit SCFG,
-hit the <i>ESC</i> key.</pre>
-<pre>Under &quot;System&quot;, set your system's name (BBS Name), the sysop's name (You), the
-system location (City, State), and system password. The system password you
-enter here will be required for any remote sysop operations and is prompted
-for with an &quot;<b>SY:</b>&quot; prompt. Under &quot;<a href="#Message Options">Message Options</a>&quot;, set your system's QWK ID
-(Up to 8 character BBS name abbreviation). Under &quot;Toggle Options&quot; set
-&quot;Allow Aliases&quot; to &quot;Yes&quot; or &quot;No&quot; depending on if you want users to be known
-by their real names on your BBS or a personal alias.</pre>
-<pre>Remember that at any time within SCFG, you can hit the <i>F1</i> key to get online
-help about the current configuration window. Following is a more specific list
-of the commands available in the SCFG under System options.</pre>
-<h2><b><a name="MessageOptions">[2.1] - </a> </b><a name="MessageOptions"><b>Message Options</b></a>
-<br>
-<br>
-<img border="0" src="images/scfg_msg_options.gif" width="572" height="331"></h2>
-<pre><b>BBS ID for QWK Packets:</b>
-	This is the ID that will be used in QWK packets. It is important that
-	you set this to an abbreviation of your BBS name before users start
-	using the QWK functions of your BBS. Only valid DOS filename characters
-	can be used and the ID must begin with an alphabetic character. This
-	ID will also serve as your system's QWK Network address, should you
-	choose to join a QWK message network.
-
-<b>Local Time Zone:</b>
-	This should be set to the time zone where your BBS is located.
-
-<b>Maximum Retry Time:</b>
-	This is the maximum number of seconds the Synchronet message base
-	library will wait for a locked message base to become unlocked.
-	Under normal conditions, message bases are only left locked for an
-	extremely short period of time.
-
-<b>Maximum QWK Messages:</b>
-	This is the maximum number of messages which will be packed when a
-	QWK packet is created. If the number of new messages to be packed
-	exceeds this, the packing will be stopped after packing this number
-	of messages. Setting this value to 0 sets the number of messages
-	per packet to unlimited. Private e-mail is not included in the total
-	number of messages and QWK network nodes are automatically exempt
-	from this maximum.
-
-<b>Pre-pack QWK Requirements:</b>
-	If this option is used (not blank), Synchronet will pre-pack any new
-	messages into a QWK packet in the DATA\FILE directory for each user
-	that meets this requirement. When that user calls to download their
-	packet, it will automatically extract the pre-packed QWK (if it
-	exists) and append to it. It is mainly intended for QWKnet nodes that
-	feed from your BBS, but can also be used for long distance users that
-	wish to save connect time and always read their messages via QWK.
-
-<b>Purge E-mail by Age:</b>
-	This will allow electronic mail for your users (stored in DATA\MAIL.*)
-	to be purged after a specific number of days (read or unread).
-
-<b>Purge Deleted E-mail:</b>
-	This option can be set to &quot;Daily&quot; or &quot;Immediately&quot;. If set to
-	&quot;Immediately&quot;, e-mail marked for deletion will be physically removed
-	from the e-mail database immediately after the user exits the
-	reading mail menu. If set to &quot;Daily&quot; (the suggested setting), e-mail
-	is marked for deletion isn't physically removed from the database
-	until the automatic daily event executes (sometime after midnight).
-
-<b>Duplicate E-mail Checking:</b>
-	This option allows the setting of a number of message CRCs to be kept
-	to check e-mail to insure that it is not a duplicate of another piece
-	of e-mail. This option should be set to 0 (disabled) unless you
-	specifically want duplicate e-mail disallowed, in which case a value
-	of 2000 should be sufficient.
-
-<b>Allow Anonymous E-mail:</b>
-	Setting this option to Yes will allow users with the 'A' exemption to
-	send anonymous e-mail.
-
-<b>Allow Quoting in E-mail:</b>
-	To allow users to quote from e-mail, this option should be set to Yes.
-
-<b>Allow Uploads in E-mail:</b>
-	To allow users to attach files to e-mail, this option must be set to
-	Yes.
-
-<b>Allow Forwarding to NetMail:</b>
-	If you allow users to send NetMail on your BBS and want to allow your
-	users to set their account to forwarding their e-mail to a NetMail
-	address, set this option to Yes.
-
-<b>Kill Read E-mail:</b>
-	If you would like to have any e-mail that has been read by the
-	recipient automatically deleted by the message base maintenance program
-	(SMBUTIL) set this option to yes.
-
-<b>Users Can View Deleted Messages:</b>
-	This option allows all users or sysops/sub-ops the ability to view
-	messages (posts/e-mail) marked for deletion (and optionally undelete
-	them) before they are permanently removed from the message base.
-
-<b>Extra Attribute Codes...:</b>
-	This option will give you a sub-menu of toggle options. These options
-	tell Synchronet whether or not it should interpret color codes which
-	are supported by other BBS packages.</pre>
-<h2><img border="0" src="images/scfg_msg_attrcodes.gif" width="572" height="331">
-
-			
-<br>
-<br>
-
-			
-<a name="SystemOptions">
-
-			
-[2.2] - System Options</a></h2>
-<pre><img border="0" src="images/scfg_system.gif" width="572" height="331">
-
-<b>BBS Name:</b>
-        This is the name of the BBS.
-
-<b>Location:</b>
-        This is the city, state and/or other pertinent location information.
-
-<b>Operator:</b>
-        This is the name of the system operator. Doesn't have to be the same
-        as user #1.
-
-<b>Password:</b>
-        This is the super-secret system password that only sysops should know.
-
-<b>Users Can Change Password:</b>
-        If you want enhanced system security, it is suggested that you force
-        users to keep the original randomly generated password they were
-        assigned by setting this option to No. If you do allow users to change
-        their passwords, you can make them change their password periodically
-        with this selection.
-
-<b>Days to Preserve Deleted Users:</b>
-        If a user is deleted, his slot will be preserved for this many days
-        since his last logon date. Preserved slots will not be written over
-	by new users. Preserved slots may be undeleted by the sysop.
-
-<b>Maximum Days of Inactivity:</b>
-        If you wish that users that haven't logged on in a certain number of
-        days be automatically deleted, set this value to the maximum number
-        of days a user can be inactive before he is deleted. Users can be
-        exempted from the automatic deletion with the 'P' exemption. Setting
-        this value to 0 disables this feature (Unlimited inactivity).
-
-<b>New User Password:</b>
-        If this field has a value, new users will have to enter this password
-        correctly before being able apply for access.</pre>
-<h2><b><a name="SystemToggleOptions">[2.3] - </a> </b><a name="SystemToggleOptions"><b>System Toggle Options</b></a></h2>
-<pre>Selecting this option will bring you to the following sub-menu:</pre>
-<pre><img border="0" src="images/scfg_system_toggle.gif" width="572" height="331"></pre>
-<pre><b>Allow Aliases:</b>
-        If you wish the users of the BBS to be allowed to use aliases publicly,
-        set this option to Yes.
-
-<b>Allow Time Banking:</b>
-	Set this option to Yes to allow users to store their time in a time
-	bank, or to convert their credits to time via the BBS.
-
-<b>Allow Credit Conversions:</b>
-	Setting this option to Yes will allow users to be able to convert
-	credits to time.
-
-<b>Allow Local Sysop Access <i><font color="#FF0000">(v2 Only)</font></i>:</b>
-	To be able to perform sysop actions locally, this option should be set
-	to Yes.
-
-<b>Allow Remote Sysop Access:</b>
-	To be able to perform sysop actions remotely, this option should be set
-	to Yes.
-
-<b>Echo Passwords Locally <i><font color="#FF0000">(v2 Only)</font></i>:</b>
-	If this option is set to No, all BBS passwords will not be displayed
-	locally (characters will be replaced by an X). This includes passwords
-	entered during logon, passwords in the user editor, as well as
-	passwords normally displayed on the status line.
-
-<b>Require Passwords Locally <i><font color="#FF0000">(v2 Only)</font></i>:</b>
-	If this option is set to No the BBS will not ask for a password to be
-	entered when performing local operations.
-
-<b>Short Sysop Page:
-</b>	If set to Yes, this sysop page will be a short series of beeps,
-	otherwise a continuous sysop page will be used.
-
-<b>Sound Alarm on Error:
-</b>	If the above option (beep locally) is toggled off, but you still wish
-	to have errors produce an audible alarm, you should toggle this option
-	to Yes.
-
-<b>Include Sysop in Statistics:
-</b>        It is suggested that you set this option to No, so that the sysop's
-        activity on the BBS is not included in the usage statistics.
-
-<b>Closed to New Users:
-</b>        If you wish to disallow access to any new users, set this option to
-        Yes.
-
-<b>Use Location In User Lists:
-</b>        If you wish the location (City, State) of the user to be displayed
-        in user listings instead of the user note, set this option to Yes.
-        Setting this option to No will display the user's note (sysop created)
-	if one has been created. The option should be set to Yes if using
-	Caller-ID since the user's note may contain their phone number.
-
-<b>Military (24 hour) Time Format:
-</b>	Use this option to toggle your BBS between 12 and 24 hour time formats.
-
-<b>European Date Format (DD/MM/YY):
-</b>	This option should ONLY be toggle to Yes if you are in a European
-	country which uses this date format. All countries using the MM/DD/YY
-	format should leave this option set to No. If your BBS has been running
-	for any length of time with this option set to No, you should NOT
-	change it to Yes.
-
-<b>User Expires When Out-of-time:
-</b>	Useful for BBSs which charge users based on time, this option, when set
-	to Yes, will set a user to the expired account values once the user's
-	time runs out.
-
-<b>Quick Validation Hot-Keys <i><font color="#FF0000">(v2 Only)</font></i>:
-</b>	If this option is set to No, the quick validation hot keys will be
-	disabled.</pre>
-<h2><b><a name="NewUserValues">[2.4] - </a> </b><a name="NewUserValues"><b>New User Values</b></a>
-</h2>
-<pre><img border="0" src="images/scfg_system_newvalues.gif" width="572" height="331"></pre>
-<pre>This option allows you to modify the security values assigned to a new user
-after he completes his validation feedback. You can also set the number of
-credits and minutes new users start off with. If you have configured an
-alternate command shell or external editors, you may select one of these as the
-default for new users. See User Edit for more information about user account
-values.</pre>
-<pre><img border="0" src="images/scfg_system_newvalues_toggles.gif" width="572" height="331"></pre>
-<pre>The 'Default Toggles' are used to set the account defaults that users will have
-when they log on to the system as a new user. These account defaults can be
-changed by the user at logon, or while on the system from the user defaults
-menu.</pre>
-<pre><img border="0" src="images/scfg_system_newvalues_questions.gif" width="572" height="331"></pre>
-<pre>The 'Question Toggles' are used to enable/disable the different questions which
-new users will be asked when logging on to the BBS. The 'Force Unique...'
-question toggles are used to force users to pick a string that is not being
-used by any of the other users currently in the system user list.</pre>
-<h2><b><a name="AdvancedOptions">[2.5] - Advanced Options</a>
-</b></h2>
-<pre><img border="0" src="images/scfg_system_advanced.gif" width="572" height="331">
-
-<b>New User Magic Word:
-</b>        If this field has a value, it is assumed the sysop would have put
-        some reference to this &quot;magic word&quot; in NEWUSER.MSG and the user
-        will be prompted for this after he enters his own assigned password.
-        If he doesn't enter it correctly, it is assumed he didn't read the
-        text displayed to him and he is disconnected.
-
-<b>Data Directory:
-</b>        This is the path to the directory where all the data files for SBBS
-        are stored. This value should not be changed unless necessary.
-
-<b>Index Directory:
-</b>        This is the path to the directory where all the index files for SBBS
-        are stored. This value should not be changed unless necessary.
-
-<b>Executables Directory:
-</b>        This is the path to the directory where all the executable files for
-        SBBS are store. This value should not be changed unless necessary.
-
-<b>Input SIF Questionnaire:
-</b>        This is the name of a SIF file that resides the text directory that
-        all users will be prompted to answer upon logging on the first time.
-        See SIF for more information.
-
-<b>Output SIF Questionnaire:
-</b>        This is the name of the SIF file that is used by the sysop to view
-        the users' answers to the input SIF questionnaire. If this value is
-        left blank, the input SIF questionnaire is used. This output SIF
-        questionable should be identical to the input SIF with the exception
-        of the text content. See SIF for more information.
-
-<b>Credits Per Dollar:
-</b>        This is the monetary value of a credit (How many credits per dollar).
-        This value should be a power of 2 (1, 2, 4, 8, 16, 32, 64, 128, etc.)
-        since credits are usually converted by 100 kilobyte (102400) blocks.
-        To make a dollar worth two megabytes of credits, set this value to
-        2,097,152 (a megabyte is 1024*1024 or 1048576).
-
-<b>Minutes Per 100k Credits:
-</b>        This is the value of a minute of time online. Credits can be converted
-	to minutes by the user if allowed by the command shell. Credits are
-	only converted in 100k (102400) blocks. This field is the number of
-	minutes to give the user in exchange for the 100k credit block.
-
-<b>Maximum Number of Minutes:
-</b>        This value is the maximum total number of minutes a user can have. If
-        the user has this number of minutes or more, he will not be allowed
-        to convert credits into minutes. A sysop can add minutes to a user's
-        account regardless of this maximum. If this value is set to 0, the
-        user will have no limit on the total number of minutes he can have.
-
-<b>Warning Days Till Expire:</b>
-	When a users account is about to expire, the BBS will begin sending
-	expiration warning messages to the users notifying them this many days
-	in advance.
-
-<b>Default Status Line <i><font color="#FF0000">(v2 Only)</font></i>:</b>
-	This is the number of the status line that will be displayed by default
-	at the bottom of the screen while the user is online.
-
-<b>Last Displayable Node:</b>
-	This is the number of the last node that will be viewable by the users.
-	Any nodes which exist above this number will be &quot;invisible&quot; nodes and
-	cannot be seen by anyone.
-
-<b>First Local Auto-Node <i><font color="#FF0000">(v2 Only)</font></i>:</b>
-	When using the AUTONODE utility, this is the node number to begin
-	searching at for an available (offline) node.
-
-<b>Phone Number Format:</b>
-	This is the format which users will be required to use when entering
-	their phone numbers.
-
-<b>Sysop Chat Requirements:
-</b>	Any user meeting the criteria set here will be able to page the sysop
-	regardless of the status of the sysop availability (Scroll Lock in v2.3).</pre>
-<h2><b><a name="LoadableModules">[2.6] - Loadable Modules</a>
-</b></h2>
-<pre><img border="0" src="images/scfg_system_loadablemods.gif" width="572" height="331">
-
-The Loadable Modules options are used for loading Baja .BIN modules during
-various stages of the BBS operation. Selecting one of the functions
-will prompt you for the name of the Baja module to be used when that event
-occurs. See DOCS\BAJA.DOC for details on creating/modifying loadable modules.
-
-Following is a brief description of when each of the Loadable Modules occur
-during the BBS operation:
-
-<b>Login:</b>
-	This module is <b>REQUIRED</b> for remote and local logins.  Occurs when a
-	user is connected, immediately after the Synchronet copyright notice is
-	displayed.
-
-<b>Logon Event:
-</b>	Occurs immediately after Login (above).
-
-<b>Sync Event:
-</b>	This is a Synchronization Event and occurs each time the BBS performs
-	a node synchronization (e.g. when node messages are received, node
-	status is read, etc...basically continuously while a user is online).
-
-<b>Logoff Event:
-</b>	Occurs ONLY when a user does a slow logoff.  Does NOT occur when users
-	hang up on the BBS or do a fast logoff.
-
-<b>Logout Event:
-</b>	This is an offline event that occurs after a user has disconnected from
-	the BBS, either by logging off or hanging up.
-
-<b>New User Event:
-</b>	Occurs at the end of a new user procedure (e.g. after the user has
-	logged on, left new user feedback, and anything else that is
-	required of a new user).
-
-<b>Expired User:
-</b>	This is an offline event that occurs during Synchronet's internal daily
-	event (after the first caller at the beginning of a new day).</pre>
-<h2><b><a name="SecurityValues">[2.7] - </a> </b><a name="SecurityValues"><b>Security Values</b></a></h2>
-<pre><img border="0" src="images/scfg_system_securityvalues.gif" width="572" height="331"></pre>
-<pre>This option allows you to define the values of the Security Levels (0-99).
-Selecting the desired security level will bring you to another menu similar to
-the following:</pre>
-<pre><img border="0" src="images/scfg_system_securityvalues_0.gif" width="572" height="331"></pre>
-<pre>Here you can modify the corresponding values for that particular security
-level.	These values will be given to ALL users who have the selected security
-level.	Many of these values may be overridden by giving certain users the
-necessary exemptions (if required).</pre>
-<h2><b><a name="ExpiredAccountValues">[2.8] - </a> </b><a name="ExpiredAccountValues"><b>Expired Account Values</b></a>
-</h2>
-<pre><img border="0" src="images/scfg_system_expired.gif" width="572" height="331">
-
-This sub-menu contains the account values for expired user accounts. When
-a user account expires, the information contained here will be applied to
-that user account.</pre>
-<h2><b><a name="QuickValidationValues">[2.9] - </a> </b><a name="QuickValidationValues"><b>Quick Validation Values</b></a></h2>
-<pre><img border="0" src="images/scfg_system_quickval.gif" width="572" height="331">
-
-This is where you define the values of the quick-validation sets (0-9).
-Selecting a level from this list will bring you to another menu similar to the
-following:</pre>
-<pre><img border="0" src="images/scfg_system_quickval_0.gif" width="572" height="331">
-
-These are used to quickly set a user's Level, Flags, Restrictions and
-Exemptions, as well as extend their expiration date and add credits to their
-account.  A user can be quick-validated by hitting Alt-(0-9) while the user is
-online, or with the 'V' command from User Edit.</pre>
-<h2><b><a name="CreatingUserAccountsLocally">[2.10] - </a> </b><a name="CreatingUserAccountsLocally"><b>Creating User Accounts
-Locally</b></a><b> <i><font color="#FF0000">(v2 Only)</font></i></b></h2>
-<pre>Exit the configuration program and run SBBS from your NODE1 directory. When you
-get a menu that says &quot;Synchronet Version xx&quot; (Wait For Call screen), hit
-SPACE BAR to logon. Answer 'Y' to the Logon (Y/N) prompt. At the NN: prompt,
-enter &quot;NEW&quot; to create a new account. Answer the questions until you get to the
-BBS main menu and then logoff the BBS.
-
-Repeat this process for any other user accounts you wish to create. Be sure
-to give out high access levels and exemptions very carefully.</pre>
-<h3><b><a name="CreatingSysopAccount">[2.10.1] - </a> </b><a name="CreatingSysopAccount"><b>Creating a Sysop Account</b></a></h3>
-<pre>Follow the above steps to create a user account. Once you are back at the WFC
-(Wait For Call) screen, press 'U' and go to the account that you've created.
-You should give this account (the main sysop account) all of the different
-flags and exemptions (no restrictions), and a level of 99 (use '?' to help
-find the keys to select the different options).
-
-<b>NOTE:</b> Users with levels of 90 and above have SYSOP access.
-
-   <b><i>TIP:</i></b> To logon from the wait for call screen quickly, hit SPACE, then 'F'
-        for fast sysop (user #1) logon.
-
-   <b><i>TIP:</i></b> To keep your logons from being written to the logon list, turn
-        &quot;Default to quiet mode&quot; on from the Default Configuration menu. If
-        you want users to see that you're online, you can toggle quiet mode
-        off/on with the &quot;;QUIET&quot; sysop command from the Synchronet main menu.</pre>
-<h3><b><a name="CreatingGuestAccount">[2.10.2] - </a> </b><a name="CreatingGuestAccount"><b>Creating a Guest Account</b></a></h3>
-<pre>Follow the above steps to create a user account.  Once you are back at the WFC
-(Wait For Call) screen, press 'U' and go to the account that you've created to
-be used as your Guest account. Change the Real Name field of the account to
-'Guest', and give this account the access that you feel is necessary for a
-Guest user to have (along with any Restrictions that may be necessary). Select
-the Password field, and make it blank (this will allow Guests to log on by
-simply entering GUEST at the NN: prompt without the need for a password).
-
-If you have certain areas on your BBS which are restricted by age, you may wish
-to modify the Birth-date field of the Guest account as necessary.
-
-You may also wish to (from the SCFG program under Nodes-&gt;Node#-&gt;Logon Prompt)
-modify the logon prompts of your nodes to read something along the lines of
-'Enter Name, Number, New, or Guest', so that users will be aware that there is
-a Guest account available for them to use. You can also place a note informing
-users of the Guest account in your BBS's ANSWER screen.</pre>
-<p><a href="#top"><b>Back to Top</b></a></p>
-
-<!--webbot bot="Include" U-Include="_borders/bottom.htm" TAG="BODY" startspan -->
-
-<hr>
-<p><b><a href="http://www.synchro.net/copyright.html">Copyright</a> � 2000 by </b> <a href="http://www.synchro.net/author.htm"><b>Rob Swindell</b><br>
-</a>
-
-<a href="http://www.synchro.net"><font size="2"><br>
-Synchronet BBS Software</font></a>  <font size="2">  (Synchronet)
-Version 3 is comprised of several documentation,<br>
-library, executable, and <a href="http://www.synchro.net/source.html">source code</a> 
-files, all of which are covered by the<a href="http://www.fsf.org/copyleft/gpl.html">
-<br>
-GNU General Public License</a>  with the exception of the following portions
-covered by<br>
-the <a href="http://www.fsf.org/copyleft/lesser.html">GNU Lesser General Public License</a>:
-SMBLIB and XSDK.<br>
-<br>
-Synchronet Version 2 (for DOS and OS/2) and its source code was released to the<a href="http://www.fsf.org/philosophy/categories.html#PublicDomainSoftware">
-<br>
-Public Domain</a>  by <a href="ftp://vert.synchro.net/main/sbbs/manifest.txt">Digital Dynamics</a> 
-in 1997 and remains Public Domain software today.<br>
-Synchronet Version 3 is not Public Domain software.</font></p>
-<p align="left"><font size="2"><a href="http://www.synchro.net/author.html">Rob Swindell<br>
-</a>PO Box 501<br>Yorba Linda, CA 92885<a href="http://www.synchro.net"><br>
-http://www.synchro.net</a>
-
-</font></p>
-<p align="left"><font size="2">For the complete Copyright Information please
-read the <a href="http://www.synchro.net/copyright.html">Copyright Documentation</a>
-.</font></p>
-
-<!--webbot bot="Include" endspan i-checksum="55766" -->
-
-</body>
-
-</html>
diff --git a/docs/text210a.dif b/docs/text210a.dif
deleted file mode 100644
index c6c4ce90ef..0000000000
--- a/docs/text210a.dif
+++ /dev/null
@@ -1,191 +0,0 @@
-Comparing files 200G\TEXT.DAT and 210A\TEXT.DAT
-***** 200G\TEXT.DAT
-"rh\r\n\7You have posted too many times today.\r\n"   TooManyPostsToday
-"\r\7Sorry, Sub-board is full - message NOT saved.\r\n" SubFull (*)
-"n\r\nThe sending of mail is beyond your ability.\r\n" R_Email
-"n\r\nPlease post on some other computer.\r\n"         R_Post
-"n\r\nThanks, but %s doesn't care to hear "\           R_Feedback
-        "from you.\r\n" 
-"nm\r\nSending E-mail to h%s nm#%un\r\n"          Emailing
-***** 210A\TEXT.DAT
-"rh\r\n\7You have posted too many times today.\r\n"   TooManyPostsToday
-"\r\7Sub-board is full - message NOT saved.\r\n"        SubFull (*)
-"n\r\nThe sending of mail is beyond your ability.\r\n" R_Email
-"n\r\nYou can't post messages.\r\n"                    R_Post
-"n\r\nYou can't send E-mail to %s.\r\n"                R_Feedback
-"nm\r\nSending E-mail to h%s nm#%un\r\n"          Emailing
-*****
-
-***** 200G\TEXT.DAT
-"nm\r\nForwarded by h%snm on "\                    ForwardedFrom
-        "h%s\r\n"
-"nm\r\nMail forwarded to h%s nm#%d.n\r\n"         Forwarded
-***** 210A\TEXT.DAT
-"nm\r\nForwarded by h%snm on "\                    ForwardedFrom
-        "h%sn\r\n"
-"nm\r\nMail forwarded to h%s nm#%d.n\r\n"         Forwarded
-*****
-
-***** 200G\TEXT.DAT
-        "h%ung): n"
-"n\r\nCannot reply to anonymous message.\r\n"          CantReplyToAnonMsg
-"ncRE: h%sn\r\n\r\n"                                Regarding
-***** 210A\TEXT.DAT
-        "h%ung): n"
-"n\r\nYou can't reply to an anonymous message.\r\n"    CantReplyToAnonMsg
-"ncRE: h%sn\r\n\r\n"                                Regarding
-*****
-
-***** 200G\TEXT.DAT
-"\r\nNo messages have been posted on %s %s\r\n"         NoMsgsOnSub
-"\r\nncPost  : [h%dnc][h%dnc] h%dnc/h%d"    ZScanPostHdr
-"_\r\nchReading nc[h%unc] %s "\                 ReadingSub
-***** 210A\TEXT.DAT
-"\r\nNo messages have been posted on %s %s\r\n"         NoMsgsOnSub
-"\r\nncPost : [h%unc][h%unc] h%lunc/h%lu"   ZScanPostHdr
-"_\r\nchReading nc[h%unc] %s "\                 ReadingSub
-*****
-
-***** 200G\TEXT.DAT
-"\r\nAre you sure"                                      AreYouSureQ
-"\r\n\r\nYour chatting abilities have disappeared.\r\n" R_Chat
-"RE: Feedback\r\n\r\n"                                  ReFeedback
-***** 210A\TEXT.DAT
-"\r\nAre you sure"                                      AreYouSureQ
-"\r\n\r\nYou can't chat.\r\n"                           R_Chat
-"RE: Feedback\r\n\r\n"                                  ReFeedback
-*****
-
-***** 200G\TEXT.DAT
-"\r\nYou can't post on this sub.\r\n"                   CantPostOnSub
-"\r\n\r\nSorry, you can't access the transfer "\        R_TransferSection
-        "section.\r\n" 
-***** 210A\TEXT.DAT
-"\r\nYou can't post on this sub.\r\n"                   CantPostOnSub
-"\r\n\r\nYou can't access the transfer "\               R_TransferSection
-        "section.\r\n" 
-*****
-
-***** 200G\TEXT.DAT
-        "than %d days.\r\n\r\n"
-"\r\nChoose a new password"                             NewPasswordQ
-"_\r\nyhNew password (4-8 chars): "                  NewPassword
-***** 210A\TEXT.DAT
-        "than %d days.\r\n\r\n"
-"\r\nEnter a different password"                        NewPasswordQ
-"_\r\nyhNew password (4-8 chars): "                  NewPassword
-*****
-
-***** 200G\TEXT.DAT
-"_\r\nyhMagic word: w"                              MagicWordPrompt
-"\r\nSorry, illiterate users aren't given "\            FailedMagicWord
-        "access here.\r\n"
-"Sorry, the system is full."                            SystemFull
-***** 210A\TEXT.DAT
-"_\r\nyhMagic word: w"                              MagicWordPrompt
-"\r\nSorry, that was not the magic word.\r\n"           FailedMagicWord
-"Sorry, the system is full."                            SystemFull
-*****
-
-***** 200G\TEXT.DAT
-"rhiYou call that a password?n"                     PasswordInvalid
-"rhiThat's not very original!n"                     PasswordObvious
-"\r\nnA) IBM (or compatible)\r\nB) Apple\r\nC) "\      ComuterTypeMenu
-***** 210A\TEXT.DAT
-"rhiYou call that a password?n"                     PasswordInvalid
-"rhiThat password is too obvious!n"                 PasswordObvious
-"\r\nnA) IBM (or compatible)\r\nB) Apple\r\nC) "\      ComuterTypeMenu
-*****
-
-***** 200G\TEXT.DAT
-"\r\n_yhNetMail address "\                           EnterNetMailAddress
-        "(Example: Joe Schmoe @1:1/1)\r\n: "
-"nlgSelect h%sng:\r\n\r\n"                        SelectItemHdr
-***** 210A\TEXT.DAT
-"\r\n_yhNetMail address "\                           EnterNetMailAddress
-        "(Example: name@address)\r\n: "
-"nlgSelect h%sng:\r\n\r\n"                        SelectItemHdr
-*****
-
-***** 200G\TEXT.DAT
-"\r\nwhWelcome to Channel %d (c%sw)\r\n\r\nn"      WelcomeToChannelN
-"_whNode %2d: g%sng in multinode chat "\          NodeInMultiChatLocally
-        "channel %d locally.\r\n"       
-***** 210A\TEXT.DAT
-"\r\nwhWelcome to Channel %d (c%sw)\r\n\r\nn"      WelcomeToChannelN
-"_wh%3d  g%sng in multinode chat "\               NodeInMultiChatLocally
-        "channel %d locally.\r\n"       
-*****
-
-***** 200G\TEXT.DAT
-"\r\nCorrect.\r\n"                                      CorrectPassword
-"\r\nWrong password.\r\n"                               WrongPassword
-"Password protect this channel"                         PasswordProtectChanQ
-***** 210A\TEXT.DAT
-"\r\nCorrect.\r\n"                                      CorrectPassword
-"rh\r\nWrong password.\r\n"                           WrongPassword
-"Password protect this channel"                         PasswordProtectChanQ
-*****
-
-***** 200G\TEXT.DAT
-"\r\nnYou've taken too long to log on.\r\n"            TakenTooLongToLogon
-"\r\nnCall back later when you are there.\r\n"         CallBackWhenYoureThere
-"_bh%s (cYb/cnb) ? w"                           YesNoQuestion
-***** 210A\TEXT.DAT
-"\r\nnYou've taken too long to log on.\r\n"            TakenTooLongToLogon
-"\r\nnYou've been inactive too long.\r\n"              CallBackWhenYoureThere
-"_bh%s (cYb/cnb) ? w"                           YesNoQuestion
-*****
-
-***** 200G\TEXT.DAT
-        "Continue"
-"nm\r\nSending NetMail To: h%snm at h%s\r\n"\      NetMailing
-        "              nmFrom: h%snm at h%s\r\n"
-"Remove this sub-board from your new-scan list"         RemoveFromNewScanQ
-***** 210A\TEXT.DAT
-        "Continue"
-"nm\r\nSending NetMail To: h%snm (h%snm)\r\n"\  NetMailing
-        "              From: h%snm (h%snm)\r\n"
-"Remove this sub-board from your new-scan list"         RemoveFromNewScanQ
-*****
-
-***** 200G\TEXT.DAT
-"\r\nEcho is now %s \r\n"                               EchoIsNow
-"\r\nnyhPrivate Chat - bType w/?b for "\          WelcomeToPrivateChat
-        "menu.n\r\n\r\n"
-"\r\nngUploading h%s.REP\r\n"                        UploadingREP
-***** 210A\TEXT.DAT
-"\r\nEcho is now %s \r\n"                               EchoIsNow
-"\r\nnyhPrivate Chat - bCtrl-C to Quitn\r\n\r\n"   WelcomeToPrivateChat
-"\r\nngUploading h%s.REP\r\n"                        UploadingREP
-*****
-
-***** 200G\TEXT.DAT
-"hc%3u nc%-25.25sh%8lu"                            ChatChanLstFmt
-"\r\nYou cannot access that channel.\r\n"               CantAccessThatChannel
-"\r\nYou cannot download from this directory.\r\n"      CantDownloadFromDir
-"_whSearching for duplicates..."                     SearchingForDupes
-***** 210A\TEXT.DAT
-"hc%3u nc%-25.25sh%8lu"                            ChatChanLstFmt
-"\r\nYou can't access that channel.\r\n"                CantAccessThatChannel
-"\r\nYou can't download from this directory.\r\n"       CantDownloadFromDir
-"_whSearching for duplicates..."                     SearchingForDupes
-*****
-
-***** 200G\TEXT.DAT
-"ng(h%dng) %sh\r\n"                               CfgLibLstFmt
-"~Batch download, ~Extended info, ~View file, "\        BatchFlagPrompt
-        "~Skip dir, ~Quit or [More]: "
-"~Batch, ~Extended, ~View, ~Delete, ~Move, "\           SysopBatchFlagPrompt
-        "~Skip dir, ~Quit or [More]: "
-"\r\nDownload attached file: w%sb (%s bytes)"         DownloadAttachedFileQ
-***** 210A\TEXT.DAT
-"ng(h%dng) %sh\r\n"                               CfgLibLstFmt
-"_chListing nc(h%unc) %s "\                     BatchFlagPrompt
-        "(h%unc) %s (h?nc=Menu) (h%lunc Filesnc): n" 
-"nl4  hy[wBy]atch Download  [wVy]iew Content  [wEy]xtended "\
-        "Info  [wPy]revious Files  [wQy]uit  n\r\n"
-"\r\nDownload attached file: w%sb (%s bytes)"         DownloadAttachedFileQ
-*****
-
-
diff --git a/docs/text220a.dif b/docs/text220a.dif
deleted file mode 100644
index 01ca95023c..0000000000
--- a/docs/text220a.dif
+++ /dev/null
@@ -1,167 +0,0 @@
-Comparing files 211A\TEXT.DAT and 220A\TEXT.DAT
-***** 211A\TEXT.DAT
-"\1n\1cSubj : \1h%s\r\n"                                MsgSubj
-"\1n\1cAttr : \1h%s%s%s%s%s%s%s\r\n"                    MsgAttr
-"\1n\1cTo   : \1h%s"                                    MsgTo
-***** 220A\TEXT.DAT
-"\1n\1cSubj : \1h%s\r\n"                                MsgSubj
-"\1n\1cAttr : \1h%s%s%s%s%s%s%s%s%s\r\n"                MsgAttr
-"\1n\1cTo   : \1h%s"                                    MsgTo
-*****
-
-***** 211A\TEXT.DAT
-"rh\r\n\7You have posted too many times today.\r\n"   TooManyPostsToday
-"\r\7Sub-board is full - message NOT saved.\r\n"        SubFull (*)
-"n\r\nThe sending of mail is beyond your ability.\r\n" R_Email
-***** 220A\TEXT.DAT
-"rh\r\n\7You have posted too many times today.\r\n"   TooManyPostsToday
-"\r\7nrhCannot add w%sr to queue - n"             CantAddToQueue
-"n\r\nThe sending of mail is beyond your ability.\r\n" R_Email
-*****
-
-***** 211A\TEXT.DAT
-"\r\nWhich, ~Add, ~Remove, ~Edit, or ~Quit: "           WhichTextFileSysop
-"_\r\ncWhich or h~Qncuit: h"                      WhichTextFile
-"_\r\nyhBefore which file: n"                       AddTextFileBeforeWhich
-***** 220A\TEXT.DAT
-"\r\nWhich, ~Add, ~Remove, ~Edit, or ~Quit: "           WhichTextFileSysop
-"_\r\nncWhich or h~Qncuit: h"                    WhichTextFile
-"_\r\nyhBefore which file: n"                       AddTextFileBeforeWhich
-*****
-
-***** 211A\TEXT.DAT
-"\r\n~Quit or [Next]: "                                 QuitOrNext
-"~Remove, ~Move, ~Edit, ~Quit, or [Next]: "             RExemptRemoveFilePrompt
-"n(%d) %s\r\n"                                         MoveToLibLstFmt
-***** 220A\TEXT.DAT
-"\r\n~Quit or [Next]: "                                 QuitOrNext
-"~Remove, ~Move, ~Edit, ~View, ~Quit, or [Next]: "      RExemptRemoveFilePrompt
-"n(%d) %s\r\n"                                         MoveToLibLstFmt
-*****
-
-***** 211A\TEXT.DAT
-"~Remove, ~Credits only, ~File only, ~Move, ~Edit, "\   SysopRemoveFilePrompt
-        "~Quit, or [Next]: " 
-"~Remove, ~Edit, ~Quit, or [Next]: "                    UserRemoveFilePrompt
-"\r\nFile not there.\r\n"                               FileNotThere
-***** 220A\TEXT.DAT
-"~Remove, ~Credits only, ~File only, ~Move, ~Edit, "\   SysopRemoveFilePrompt
-        "~View, ~Quit, or [Next]: " 
-"~Remove, ~Edit, ~View, ~Quit, or [Next]: "             UserRemoveFilePrompt
-"\r\nFile not there.\r\n"                               FileNotThere
-*****
-
-***** 211A\TEXT.DAT
-        "(%s bytes)n\r\n"
-"wh\r\nFile is already in queue.\r\n"                 FileAlreadyInQueue
-"wh\r\nFile is not online.\r\n"                       FileIsNotOnline
-***** 220A\TEXT.DAT
-        "(%s bytes)n\r\n"
-"wh\r\n%s is already in the queue.\r\n"               FileAlreadyInQueue
-"wh\r\nFile is not online.\r\n"                       FileIsNotOnline
-*****
-
-***** 211A\TEXT.DAT
-        "  Bytes: h%snc  Time: h%s\r\n"
-"\r\nNon-viewable file type.\r\n"                       NonviewableFile
-"rhi%s NOT RECEIVED!n\r\n"                          FileNotReceived
-***** 220A\TEXT.DAT
-        "  Bytes: h%snc  Time: h%s\r\n"
-"\r\nnrhThe sysop has not configured w%sr as a"\   NonviewableFile
-        " viewable file type.\r\n"
-"rhi%s NOT RECEIVED!n\r\n"                          FileNotReceived
-*****
-
-***** 211A\TEXT.DAT
-"\r\nmhChecking Slots..."                             CheckingSlots
-"%-32.32s%-30.30s%-8.8s %-8.8s\r\n"                     UserListFmt
-"\r%d Total users.        \r\n"                         NTotalUsers
-***** 220A\TEXT.DAT
-"\r\nmhChecking Slots..."                             CheckingSlots
-"nh%-32.32snm%-30.30sh%-8.8s nm%-8.8s\r\n"       UserListFmt
-"\r%d Total users.        \r\n"                         NTotalUsers
-*****
-
-***** 211A\TEXT.DAT
-"ncExemption : h%-26s   ncRestricts : h%s\r\n"    UeditExempts
-"\r\n_yhUser edit (%u of %u): n"                    UeditPrompt
-"Restore User"                                          UeditRestoreQ
-***** 220A\TEXT.DAT
-"ncExemption : h%-26s   ncRestricts : h%s\r\n"    UeditExempts
-"\r\n_yhUser edit (w?y=Menu) "\                    UeditPrompt
-        "(w%uy of w%uy): n"
-"Restore User"                                          UeditRestoreQ
-*****
-
-***** 211A\TEXT.DAT
-"\r\nDelete Questionaire"                               DeleteQuestionaireQ
-"-gDefault settings for h%s #%d\r\n\r\nn"           UserDefaultsHdr
-"T) Terminal Mode                 : %s\r\n"             UserDefaultsTerminal
-"E) External Editor               : %s\r\n"             UserDefaultsXeditor
-"L) Screen Length                 : %s\r\n"             UserDefaultsRows
-"X) Expert Menu Mode              : %s\r\n"             UserDefaultsMenuMode
-"P) Screen Pause                  : %s\r\n"             UserDefaultsPause
-"H) Hot Keys                      : %s\r\n"             UserDefaultsHotKey
-"S) Spinning Cursor               : %s\r\n"             UserDefaultsCursor
-"C) Clear Screen Between Messages : %s\r\n"             UserDefaultsCLS
-"N) Ask For New Message/File Scan : %s\r\n"             UserDefaultsAskNScan
-"Y) Ask For Your Un-read Msg Scan : %s\r\n"             UserDefaultsAskSScan
-"F) Automatic New File Scan       : %s\r\n"             UserDefaultsANFS
-"R) Remember Current Sub-board    : %s\r\n"             UserDefaultsRemember
-"B) Batch Download File Flagging  : %s\r\n"             UserDefaultsBatFlag
-"M) Forward E-mail to NetMail     : %s\r\n"             UserDefaultsNetMail
-"K) Command Shell                 : %s\r\n"             UserDefaultsCmdShell
-"D) Default to Quiet Mode         : %s\r\n"             UserDefaultsQuiet
-"W) Change Password\r\n"                                UserDefaultsPassword
-"A) Temporary/QWK Archive Type    : %s\r\n"             UserDefualtsArcType
-"Q) Quit (accept settings)\r\n\r\n"                     UserDefaultsQuit
-"_yhWhich: n"                                       UserDefaultsWhich
-"On"                                                    On
-***** 220A\TEXT.DAT
-"\r\nDelete Questionaire"                               DeleteQuestionaireQ
-"-gDefault settings for hw%s #%d\r\n\r\nn"         UserDefaultsHdr
-"nhTng) Terminal Mode                 : h%s\r\n"   UserDefaultsTerminal
-"nhEng) External Editor               : h%s\r\n"   UserDefaultsXeditor
-"nhLng) Screen Length                 : h%s\r\n"   UserDefaultsRows
-"nhXng) Expert Menu Mode              : h%s\r\n"   UserDefaultsMenuMode
-"nhPng) Screen Pause                  : h%s\r\n"   UserDefaultsPause
-"nhHng) Hot Keys                      : h%s\r\n"   UserDefaultsHotKey
-"nhSng) Spinning Cursor               : h%s\r\n"   UserDefaultsCursor
-"nhCng) Clear Screen Between Messages : h%s\r\n"   UserDefaultsCLS
-"nhNng) Ask For New Message/File Scan : h%s\r\n"   UserDefaultsAskNScan
-"nhYng) Ask For Your Un-read Msg Scan : h%s\r\n"   UserDefaultsAskSScan
-"nhFng) Automatic New File Scan       : h%s\r\n"   UserDefaultsANFS
-"nhRng) Remember Current Sub-board    : h%s\r\n"   UserDefaultsRemember
-"nhBng) Batch Download File Flagging  : h%s\r\n"   UserDefaultsBatFlag
-"nhMng) Forward E-mail to NetMail     : h%s\r\n"   UserDefaultsNetMail
-"nhKng) Command Shell                 : h%s\r\n"   UserDefaultsCmdShell
-"nhDng) Default to Quiet Mode         : h%s\r\n"   UserDefaultsQuiet
-"nhWng) Change Password\r\n"                        UserDefaultsPassword
-"nhAng) Temporary/QWK Archive Type    : h%s\r\n"   UserDefualtsArcType
-"nhZng) Default Download Protocol     : h%s "\     UserDefaultsProtocol
-        "ng%s\r\n"
-"\r\n_gWhich or [hwQng]uit: n"                   UserDefaultsWhich
-"On"                                                    On
-*****
-
-***** 211A\TEXT.DAT
-"No one has logged on today.\r\n"                       NoOneHasLoggedOnToday
-"ghLast few callers:\r\nng"                         LastFewCallers
-"\r\n%-2d %-6lu %-25.25s %-25.25s%02u:%02u %-8.8s %-3d" LastFewCallersFmt
-"\r\nghCallers Today:\r\nng"                        CallersToday
-"_bhDo you mean %s #%u "\                            DoYouMeanThisUserQ
-***** 220A\TEXT.DAT
-"No one has logged on today.\r\n"                       NoOneHasLoggedOnToday
-"ghLast few callers:\r\nng"                         LastFewCallers (*)
-"\r\nnhm%-2d nm%-6lu wh%-25.25s m%-25.25s"\     LastFewCallersFmt
-        "nm%02u:%02u h%-8.8s nm%-3d" 
-"\r\nghCallers Today:ng"                            CallersToday
-"_bhDo you mean %s #%u "\                            DoYouMeanThisUserQ
-*****
-
-***** 211A\TEXT.DAT
-***** 220A\TEXT.DAT
-"YN"                                                    YN
-*****
-
-
diff --git a/docs/text220b.dif b/docs/text220b.dif
deleted file mode 100644
index 74a1fb481a..0000000000
--- a/docs/text220b.dif
+++ /dev/null
@@ -1,22 +0,0 @@
-Comparing files 220A\TEXT.DAT and 220B\TEXT.DAT
-***** 220A\TEXT.DAT
-"Only %d lines left.\r\n"                               025 OnlyNLinesLeft
-"\r\n\r\nOut of bytes.\r\n"                             026 OutOfBytes
-"Invalid line number\r\n"                               027 InvalidLineNumber
-***** 220B\TEXT.DAT
-"Only %d lines left.\r\n"                               025 OnlyNLinesLeft
-"\r\n\r\n\1n\1r\1h\1iOut of bytes.\1n\r\n"              026 OutOfBytes
-"Invalid line number\r\n"                               027 InvalidLineNumber
-*****
-
-***** 220A\TEXT.DAT
-"nh\r\nSaving..."                                     033 Saving
-"\rbSaved w%ub bytes.n\r\n"                         034 SavedNBytes
-"n\r\nWriting Index..."                                035 WritingIndx
-***** 220B\TEXT.DAT
-"nh\r\nSaving..."                                     033 Saving
-"\rbSaved w%lub characters (w%ub lines).n\r\n"    034 SavedNBytss
-"n\r\nWriting Index..."                                035 WritingIndx
-*****
-
-
diff --git a/docs/text230a.dif b/docs/text230a.dif
deleted file mode 100644
index 5581592b48..0000000000
--- a/docs/text230a.dif
+++ /dev/null
@@ -1,106 +0,0 @@
-Comparing files 220B\TEXT.DAT and 230A\TEXT.DAT
-***** 220B\TEXT.DAT
-"_\r\nghMail Waiting:\r\n\r\n"                       046 MailWaitingLstHdr
-"gh%3d: ng%-25.25s h%cng %.47s\r\n"              047 MailWaitingLstFmt
-"_\r\nyhStart with number [w%luy]: w"             048 StartWithN
-***** 230A\TEXT.DAT
-"_\r\nghMail Waiting:\r\n\r\n"                       046 MailWaitingLstHdr
-"gh%3d: ng%-25.25s h%cng %.46s\r\n"              047 MailWaitingLstFmt
-"_\r\nyhStart with number [w%luy]: w"             048 StartWithN
-*****
-
-***** 220B\TEXT.DAT
-"-\r\nghMessages:\r\n\r\nn"                         077 SubMsgLstHdr
-"gh%4lu:ng %-22.22s %-22.22s h%cng %.25s\r\n"    078 SubMsgLstFmt
-"\r\nMake post #%d %s"                                  079 ChangeMsgPurgeQ
-***** 230A\TEXT.DAT
-"-\r\nghMessages:\r\n\r\nn"                         077 SubMsgLstHdr
-"gh%4u:ng %-22.22s %-22.22s h%cng %.25s\r\n"     078 SubMsgLstFmt
-"\r\nMake post #%d %s"                                  079 ChangeMsgPurgeQ
-*****
-
-***** 220B\TEXT.DAT
-"l_chGeneral Text File Sections:\r\n\r\n"           081 TextSectionLstHdr
-"nc<h%dnc> %s\r\n"                                 082 TextSectionLstFmt
-"_\r\ncWhich or h~Qncuit: h"                      083 WhichTextSection
-***** 230A\TEXT.DAT
-"l_chGeneral Text File Sections:\r\n\r\n"           081 TextSectionLstHdr
-"nc<h%ldnc> %s\r\n"                                082 TextSectionLstFmt
-"_\r\ncWhich or h~Qncuit: h"                      083 WhichTextSection
-*****
-
-***** 220B\TEXT.DAT
-"l_ch%s Files:\r\n\r\n"                             084 TextFilesLstHdr
-"ch%3d: nc%s"                                       085 TextFilesLstFmt
-"\r\nWhich, ~Add, ~Remove, ~Edit, or ~Quit: "           086 WhichTextFileSysop
-***** 230A\TEXT.DAT
-"l_ch%s Files:\r\n\r\n"                             084 TextFilesLstHdr
-"ch%3ld: nc%s"                                      085 TextFilesLstFmt
-"\r\nWhich, ~Add, ~Remove, ~Edit, or ~Quit: "           086 WhichTextFileSysop
-*****
-
-***** 220B\TEXT.DAT
-"l-gSub-boards of h%s:\r\n\r\nh"                   131 CfgSubLstHdr
-"ng[h%dng] %-40.40s  h%s\r\n"                     132 CfgSubLstFmt
-"l_ghMessage Groups:\r\n\r\n"                       133 CfgGrpLstHdr
-"ng[h%dng] %sh\r\n"                               134 CfgGrpLstFmt
-"\r\nSub-board to toggle new message scan"\             135 NScanCfgWhichSub
-***** 230A\TEXT.DAT
-"l-gSub-boards of h%s:\r\n\r\nh"                   131 CfgSubLstHdr
-"ng[h%ldng] %-40.40s  h%s\r\n"                    132 CfgSubLstFmt
-"l_ghMessage Groups:\r\n\r\n"                       133 CfgGrpLstHdr
-"ng[h%ldng] %sh\r\n"                              134 CfgGrpLstFmt
-"\r\nSub-board to toggle new message scan"\             135 NScanCfgWhichSub
-*****
-
-***** 220B\TEXT.DAT
-        ", ~All, or ~Quit: "   
-"ng[h%dng] %-40.40s  hc%s\r\n"                   137 SubPtrLstFmt
-"\r\nSet new-scan pointer for which, ~All, or ~Quit: "  138 WhichOrAll
-***** 230A\TEXT.DAT
-        ", ~All, or ~Quit: "   
-"ng[h%ldng] %-40.40s  hc%s\r\n"                  137 SubPtrLstFmt
-"\r\nSet new-scan pointer for which, ~All, or ~Quit: "  138 WhichOrAll
-*****
-
-***** 220B\TEXT.DAT
-"You do not have sufficient access for this node."      388 NoNodeAccess
-"nr\7\r\nSorry, This node is temporarily closed "\    389 NodeLocked
-        "for maintenance.n\r\n"
-***** 230A\TEXT.DAT
-"You do not have sufficient access for this node."      388 NoNodeAccess
-"nr\7\r\nSorry, this node is temporarily closed "\    389 NodeLocked
-        "for maintenance.n\r\n"
-*****
-
-***** 220B\TEXT.DAT
-"\r\nYou can't send messages.\r\n"                      533 R_SendMessages
-"\r\nhyNode, User name, w#yNumber, "\               534 NodeToSendMsgTo
-        "w'yHandle, w^Uyser list, or wAlly: wh"
-***** 230A\TEXT.DAT
-"\r\nYou can't send messages.\r\n"                      533 R_SendMessages
-"\r\nhyNode, Name, w#yNumber, "\                    534 NodeToSendMsgTo
-        "w'yHandle, w^Uyser list, or wAlly: wh"
-*****
-
-***** 220B\TEXT.DAT
-"\r\nnYou've been inactive too long.\r\n"              558 CallBackWhenYoureThere
-"_bh%s (cYb/cnb) ? w"                           559 YesNoQuestion
-"Yes"                                                   560 Yes
-***** 230A\TEXT.DAT
-"\r\nnYou've been inactive too long.\r\n"              558 CallBackWhenYoureThere
-"@EXEC:YESNOBAR@"                                       559 YesNoQuestion
-"Yes"                                                   560 Yes
-*****
-
-***** 220B\TEXT.DAT
-"No"                                                    561 No
-"_bh%s (cyb/cNb) ? w"                           562 NoYesQuestion
-"_rh[Hit a key] "                                    563 Pause
-***** 230A\TEXT.DAT
-"No"                                                    561 No
-"@EXEC:NOYESBAR@"                                       562 NoYesQuestion
-"_rh[Hit a key] "                                    563 Pause
-*****
-
-
diff --git a/docs/textfile_section.html b/docs/textfile_section.html
deleted file mode 100644
index c9f258c20e..0000000000
--- a/docs/textfile_section.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<title>Text File Section</title>
-</head>
-
-<body>
-
-<!--webbot bot="Include" U-Include="_borders/top.htm" TAG="BODY" startspan -->
-
-<a href="http://www.synchro.net"><img border="0" src="images/synclogo_fancyred.gif" alt="Synchronet BBS - Multinode Bulletin Board Software" width="626" height="86"></a>
-
-<hr>
-
-<!--webbot bot="Include" endspan i-checksum="23126" -->
-
-<p><a name="top"></a><a href="sysop.html#TOC">Back to Table of Contents</a></p>
-<h2><a name="TextFileSections">[13.0] - Text File Sections</a></h2>
-<pre>Run the SCFG utility, and select the Text File Sections option from the menu.
-This selection will produce a list of text file sections that the sysop has
-created for users to freely view text files. It is requested that all sysops
-make some or all of the Synchronet documentation available in a text file
-section. At the very minimum, TEXT\SBBS.MSG should be available for users to
-review. You can add and remove sections with the INS and DEL keys. The
-following configuration options are available for each section:</pre>
-<h2><a name="TextFileOptions">[13.1] - Text File Options</a></h2>
-<pre><b>Name:</b>
-        This is a description of the text file section.
-
-<b>Access Requirements:
-</b>        Use this option to set the security requirements to access this file
-        section.
-
-<b>Internal Code:
-</b>        This is an internal code for SBBS to distinguish this text file section
-        from the others on the system. This must be a unique name of up to 8
-        valid DOS filename characters.</pre>
-<h2><a name="AddingTextFiles">[13.2] - Adding Text Files</a></h2>
-<pre>To add files to a text file section, you'll need to log on to the BBS and enter
-the section you would like to add files to.  Here you'll be given a choice to
-add files to the section, you will be prompted for the title of the file, and
-the path/filename. If you do not enter a path for the file, the default path is
-the Synchronet DATA\TEXT directory PLUS the internal code of the text file
-section.</pre>
-<h2><a name="976/900NumberBilling">[13.3] - 976/900 Number Billing</a></h2>
-<pre>There are several methods of implementing 976/900 billing support.
-
-One method, which is internal to Synchronet, is to set up a billing node.
-This method of support requires that you have your own in house 976 or 900
-phone number.  Set up your 976/900 service to bill a lump sum of money
-(e.g. $10.00) after the first 30 seconds of use. In SCFG, under Nodes-&gt;Node#-&gt;
-Advanced Options-&gt;Cost per Call you would enter this charge (where Node# is the
-number of the node which will be attached to the 976/900 line). When a user
-calls this billing node, he/she will be informed that they will be charged for
-the call if they do not hang up, they will then be asked for their user name
-and password.  Once they've entered their account information, the account will
-be credited with a number of credits (determined by the value in System-&gt;
-Advanced Options-&gt;Credits per Dollar). They can now call back on a node which
-is connected to a standard phone line, and they will be able to make use of the
-credits.
-
-Another method, which is cheaper and more popular, but external to Synchronet
-is to use a third party 976/900 service. Once such service is called TABS. This
-method consists of having your users dial a 976/900 line supplied by the
-service. Initially, you are given an external program and a list of codes for
-your BBS. When a user calls the 976/900 service they will be given a code to
-use on your BBS. They then call your BBS, run the external program, and enter
-the code that they were given. Upon entering a valid code, their account is
-immediately credited with a number of credits. You are then periodically mailed
-a check for the accounts which have used the service for account upgrades.
-
-The final method, which is very expensive and very unrealistic, is to simply
-attach all of your pay nodes to a 976/900 number and charge the user by the
-minute for access to the BBS.</pre>
-<p><a href="#top"><b>Back to Top</b></a></p>
-
-<!--webbot bot="Include" U-Include="_borders/bottom.htm" TAG="BODY" startspan -->
-
-<hr>
-<p><b><a href="http://www.synchro.net/copyright.html">Copyright</a> � 2000 by </b> <a href="http://www.synchro.net/author.htm"><b>Rob Swindell</b><br>
-</a>
-
-<a href="http://www.synchro.net"><font size="2"><br>
-Synchronet BBS Software</font></a>  <font size="2">  (Synchronet)
-Version 3 is comprised of several documentation,<br>
-library, executable, and <a href="http://www.synchro.net/source.html">source code</a> 
-files, all of which are covered by the<a href="http://www.fsf.org/copyleft/gpl.html">
-<br>
-GNU General Public License</a>  with the exception of the following portions
-covered by<br>
-the <a href="http://www.fsf.org/copyleft/lesser.html">GNU Lesser General Public License</a>:
-SMBLIB and XSDK.<br>
-<br>
-Synchronet Version 2 (for DOS and OS/2) and its source code was released to the<a href="http://www.fsf.org/philosophy/categories.html#PublicDomainSoftware">
-<br>
-Public Domain</a>  by <a href="ftp://vert.synchro.net/main/sbbs/manifest.txt">Digital Dynamics</a> 
-in 1997 and remains Public Domain software today.<br>
-Synchronet Version 3 is not Public Domain software.</font></p>
-<p align="left"><font size="2"><a href="http://www.synchro.net/author.html">Rob Swindell<br>
-</a>PO Box 501<br>Yorba Linda, CA 92885<a href="http://www.synchro.net"><br>
-http://www.synchro.net</a>
-
-</font></p>
-<p align="left"><font size="2">For the complete Copyright Information please
-read the <a href="http://www.synchro.net/copyright.html">Copyright Documentation</a>
-.</font></p>
-
-<!--webbot bot="Include" endspan i-checksum="55766" -->
-
-</body>
-
-</html>
diff --git a/docs/troubleshooting.html b/docs/troubleshooting.html
deleted file mode 100644
index 3d520facc7..0000000000
--- a/docs/troubleshooting.html
+++ /dev/null
@@ -1,246 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<title>Troubleshooting</title>
-</head>
-
-<body>
-
-<!--webbot bot="Include" U-Include="_borders/top.htm" TAG="BODY" startspan -->
-
-<a href="http://www.synchro.net"><img border="0" src="images/synclogo_fancyred.gif" alt="Synchronet BBS - Multinode Bulletin Board Software" width="626" height="86"></a>
-
-<hr>
-
-<!--webbot bot="Include" endspan i-checksum="23126" -->
-
-<p><a name="top"></a><a href="sysop.html#TOC">Back to Table of Contents</a></p>
-<h2>[16.0] - Troubleshooting</h2>
-<pre>Before contacting Digital Dynamics about any problems you encounter, you
-should check to see if your problem is listed here, as well as do a review of
-the manual.
-
-If you are having problems with a program which is external to Synchronet
-(e.g. doors, add-ons, memory managers, multi-taskers, mail tossers, front-end
-mailers, hardware, etc.) you should contact the manufacturer of that
-particular product.
-
-If all else fails, and you must call Digital Dynamics for help in solving
-your problem, be sure that:
-
-        1) You are at your BBS machine.
-        2) You can duplicate the problem.
-
-<b>Problem :</b> <i>Ymodem-G doesn't work.</i>
-
-<b>Solution:</b> Synchronet is distributed with an unregistered shareware copy of
-	  DSZ.COM to allow the beginning to sysop to start out with the three
-	  basic protocols, Xmodem, Ymodem, and Zmodem. To use Ymodem-G, you
-	  must use a registered copy of DSZ.COM (or EXE).
-	  See DSZ.DOC for more information on registering DSZ.
-
-
-<b>Problem :</b> <i>Can't create QWK packets or temporary archive files.
-</i>
-<b>Solution:</b> Synchronet comes configured for PKZIP as the temporary file (and QWK
-	  packet) compression method. In order for this to function correctly,
-	  you must have a copy of PKZIP.EXE in your SBBS\EXEC directory, or
-	  change the Temporary Archive Command Line to exclude the '%!'
-	  specifier (short hand for the exec directory), or specify the
-	  directory where PKZIP.EXE resides. See Configuration Reference for
-	  more information.
-
-
-<b>Problem :</b> <i>Can't view ZIP files online and can't upload files because they fail
-	  the ZIP integrity test. Can't extract QWK REP packets.</i>
-
-<b>Solution:</b> You must copy PKUNZIP.EXE into your SBBS\EXEC directory, or change
-	  the command lines to reflect the actual location of PKUNZIP.EXE.
-	  See Configuration Reference for more information.
-
-<b>Problem :</b> <i>HS/Link and BiModem don't work. &quot;Bad command or filename&quot; is
-	  displayed when a user tries to use them.</i>
-
-<b>Solution:</b> You need to copy HSLINK.EXE and BIMODEM.COM into your SBBS\EXEC
-	  directory. BiModem must have a BIMODEM.CFG file in each node
-	  directory. Run BICONFIG to create/change the configuration
-	  information stored in BIMODEM.CFG. Refer to the BiModem documentation
-	  for more information on this file and using BICONFIG. One important
-	  note for BiModem configuration is that &quot;Allow remote file requests&quot;
-	  be set to &quot;NO&quot;.
-
-
-<b>Problem :</b> <i>Get a &quot;Removing&quot; file error when starting up SBBS, at logon, and at
-	  logoff sometimes when another node is active.</i>
-
-<b>Solution:</b> You have more than one node using the same directory as the temp
-	  directory. You must have a unique temp directory for each node.
-	  Configure a unique temp directory for each node in the config program
-	  (type SCFG from the node directory or hit 'C' at the wait for call
-	  screen). See Configuration Reference for more information.
-
-
-<b>Problem :</b> <i>When answering calls, Synchronet displays &quot;Unknown result code: xx&quot;
-	  where xx is a decimal number, and hangs up on the caller.
-</i>
-<b>Solution:</b> Add this result code to your node's result code list in the config
-	  program (type SCFG from the node directory or hit 'C' at the wait for
-	  call screen). DO NOT add result codes 0, 2, 3, or 4. Refer to your
-	  modem's manual for the connect speed and average transfer CPS for the
-	  new result code. See Configuration Reference for more information.
-
-
-<b>Problem :</b> <i>When using the ;DOS sysop command, the cursor position does not
-	  follow your keystrokes properly.
-</i>
-<b>Solution:</b> Remove DOSKEY or other DOS command line TSR program from memory. Many
-	  DOS command line utilities redirect DOS output to the BIOS - which in
-	  turn bypasses Synchronet's interception of the DOS output functions.
-	  Some ANSI drivers may also cause this problem. Use the standard DOS
-	  ANSI.SYS for your console driver.
-
-
-<b>Problem :</b> <i>When running external programs under OS/2 that require intercepted
-	  I/O to be displayed remotely (like PKZIP, Synchronet Blackjack,
-	  FEdit, etc) the output does not appear at all remotely and ANSI
-	  escape sequences display as garbage.
-</i>
-<b>Solution:</b> OS/2's DOS console driver has a DOS compatibility bug. Run
-	  SVDMANSI.COM (from the EXEC directory) and remove ANSI.SYS from your
-	  CONFIG.SYS and DOS settings. See SVDMANSI.DOC for more information.
-
-
-<b>Problem :</b> <i>At the WFC screen, Synchronet shows that a node has errors, and I
-	  can't get them to stop showing.</i>
-
-<b>Solution:</b> You must log on to the BBS, and at the main menu prompt type ;ERR,
-	  the errors will be displayed to you, and you will be asked if you
-	  want to clear the critical error counter, answer YES to clear the
-	  errors.
-	  You may also clear the errors using the Synchronet node utility, by
-	  typing NODE ERRORS=0 at the DOS prompt.
-
-
-<b>Problem :</b> <i>One of the BBS nodes will run fine, and then after one or two callers
-	  the modem won't reinitialize (Synchronet returns NO RESPONSE).
-</i>
-<b>Solution:</b> Be sure that the com port on that node is NOT using the same IRQ or
-	  I/O address as any other com port or device in your computer.  Some
-	  motherboards have com ports built onto the board itself, if your
-	  motherboard is like this, and you are not using those ports, you
-	  should make sure they are disabled.
-
-
-<b>Problem :</b> <i>My users see garbage when Synchronet runs from my front-end mailer,
-	  or when they run an external door.</i>
-
-<b>Solution:</b> Check to make sure that the DTE rate that you have set in your front
-	  end mailer or door matches what you have configured for Synchronet.
-	  If you are using a FOSSIL driver, the DTE rate you have set up for
-	  the FOSSIL must be the same as what you have set up for Synchronet
-	  (e.g. if your FOSSIL rate is locked at 38400, then that Synchronet
-	  node must have its port locked at 38400).
-
-
-<b>Problem :</b> <i>I am running a program as a door that was not written to be a BBS
-	  door.  It functions fine locally, but when someone runs the program
-	  remotely their screen remains blank.</i>
-
-<b>Solution:</b> Make sure you have set 'Intercept I/O' turned on for that program,
-	  if there is still nothing displayed to the user, it's likely that
-	  the program uses direct screen writes, which would require the use
-	  of a doorway program for it to be usable via modem.  If the program
-	  uses graphics, it is most likely that you will not be able to use it
-	  remotely.
-
-
-<b>Problem :</b> <i>When posting a message or sending email, the BBS immediately responds
-	  with 'ABORTED' right after I enter a title for the message.</i>
-
-<b>Solution:</b> You have an external editor defined, and that editor is not working
-	  properly.  A couple of reasons an external editor may not function
-	  properly is either not enough memory available for it to run, or
-	  you have used an improper command line for that editor.
-
-
-<b>Problem :</b> <i>I am trying to add another BBS node using DesqView, when I try to
-	  open another window for that node, I get the message 'A Non-Swappable
-	  Window is in the Way'.</i>
-
-<b>Solution:</b> You do not have enough memory available on this machine for another
-	  window to be opened. You should attempt to make more EMS available.
-
-
-<b>Problem :</b> <i>I am running under Windows, when the board runs it says 'Share
-	  Installed' but it then says 'File Locking Failed'.</i>
-
-<b>Solution:</b> You MUST run share from the DOS prompt BEFORE running Windows.
-
-
-<b>Problem :</b> <i>I am receiving sharing violations while Synchronet is running.
-</i>
-<b>Solution:</b> Disable 'Swap to XMS' in the advanced settings for each node using
-	  the SCFG program.
-
-
-<b>Problem :</b> <i>I am receiving errors with an action of &quot;opening&quot; and a doserr
-	  of 04h (as shown in the ERROR.LOG).</i>
-
-<b>Solution:</b> You need to increase the number on the FILES= statement in your
-	  CONFIG.SYS. FILES=20 should be plenty for Synchronet.
-
-
-<b>Problem :</b> <i>I (or a co-sysop) lost carrier while shelled to DOS remotely and
-	  the BBS didn't return to waiting for a call.</i>
-
-<b>Solution:</b> Create two batch files (2.BAT and 3.BAT) in a directory that is
-	  in your DOS search path with one line containing the word &quot;EXIT&quot;.
-
-
-<b>Problem :</b> <i>When typing ;DOS, ;SLOG, or ;NLOG from the main menu I get &quot;Incorrect
-	  DOS version&quot; or nothing at all.
-</i>
-<b>Solution:</b> Make sure the COMMAND.COM for the version of DOS you are running is
-	  in your DOS search path. If multiple copies of COMMAND.COM exist on
-	  your disk drive, make sure they are all for the same version.</pre>
-<p><a href="#top"><b>Back to Top</b></a></p>
-
-<!--webbot bot="Include" U-Include="_borders/bottom.htm" TAG="BODY" startspan -->
-
-<hr>
-<p><b><a href="http://www.synchro.net/copyright.html">Copyright</a> � 2000 by </b> <a href="http://www.synchro.net/author.htm"><b>Rob Swindell</b><br>
-</a>
-
-<a href="http://www.synchro.net"><font size="2"><br>
-Synchronet BBS Software</font></a>  <font size="2">  (Synchronet)
-Version 3 is comprised of several documentation,<br>
-library, executable, and <a href="http://www.synchro.net/source.html">source code</a> 
-files, all of which are covered by the<a href="http://www.fsf.org/copyleft/gpl.html">
-<br>
-GNU General Public License</a>  with the exception of the following portions
-covered by<br>
-the <a href="http://www.fsf.org/copyleft/lesser.html">GNU Lesser General Public License</a>:
-SMBLIB and XSDK.<br>
-<br>
-Synchronet Version 2 (for DOS and OS/2) and its source code was released to the<a href="http://www.fsf.org/philosophy/categories.html#PublicDomainSoftware">
-<br>
-Public Domain</a>  by <a href="ftp://vert.synchro.net/main/sbbs/manifest.txt">Digital Dynamics</a> 
-in 1997 and remains Public Domain software today.<br>
-Synchronet Version 3 is not Public Domain software.</font></p>
-<p align="left"><font size="2"><a href="http://www.synchro.net/author.html">Rob Swindell<br>
-</a>PO Box 501<br>Yorba Linda, CA 92885<a href="http://www.synchro.net"><br>
-http://www.synchro.net</a>
-
-</font></p>
-<p align="left"><font size="2">For the complete Copyright Information please
-read the <a href="http://www.synchro.net/copyright.html">Copyright Documentation</a>
-.</font></p>
-
-<!--webbot bot="Include" endspan i-checksum="55766" -->
-
-</body>
-
-</html>
diff --git a/docs/upgrade.txt b/docs/upgrade.txt
deleted file mode 100644
index 10c2f9f779..0000000000
--- a/docs/upgrade.txt
+++ /dev/null
@@ -1,128 +0,0 @@
-Upgrading to Synchronet BBS for Win32 v3.0c
-===========================================
-
-This is an UPGRADE ONLY, so you must have Synchronet (v2.3 or 
-v3.0b) already installed before you can continue. A full
-Synchronet installation package can be obtained via FTP or 
-Telnet/Zmodem from vert.synchro.net.
-
-This version has been tested with the following operating
-systems:
-
-	o Microsoft Windows 95
-	o Microsoft Windows 95a
-	o Microsoft Windows 95b (OSR2)
-	o Microsoft Windows 98
-	o Microsoft Windows Me
-	o Microsoft Windows NT 3.51
-	o Microsoft Windows NT 4
-	o Microsoft Windows 2000
-
-
-Configuration Files
-~~~~~~~~~~~~~~~~~~~
-The following files will be over-written by this upgrade, so
-if you have customized them, it is highly recommended that you
-make a BACK-UP of the files before continuing this installation:
-
-	SBBS\CTRL\TEXT.DAT		(Text Strings)
-	SBBS\CTRL\GURU.DAT		(Guru Brain)
-	SBBS\CTRL\ATTR.CFG		(Default Colors)
-	SBBS\CTRL\ALIAS.CFG		(Internet Mail Aliases)
-	SBBS\CTRL\FTPALIAS.CFG		(FTP Filename Aliases)
-	SBBS\TEXT\MENU\LOGON.ASC	(Logon Screen)
-	SBBS\TEXT\MENU\EXEMPT.ASC	(Exemption Descriptions)
-	SBBS\TEXT\MENU\EDITOR.ASC	(Internal Editor Menu)
-	SBBS\TEXT\MENU\MSGSCAN.ASC	(Message Scan Menu)
-	SBBS\TEXT\MENU\MAILREAD.ASC	(Mail Read Menu)
-
-Two of the unused lines in CTRL\TEXT.DAT (lines 62 and 74) are
-now used in v3. If you're going to allow auto-logon by IP or
-sending of Internet e-mail, then you'll need to use the TEXT.DAT
-included (or modify your own). If you're still going to be using 
-v2.3c (or earlier), you'll want to eliminate one of the %s's from 
-the MsgAttr line in your TEXT.DAT.
-
-If you do not want these files installed (you're upgrading a
-previous installation of SBBS v3 for example), choose "Custom
-Installation" and disable the "Configuration Files" from the
-install set.
-
-
-Command Shell Updates
-~~~~~~~~~~~~~~~~~~~~~
-The following files will be over-written by this upgrade, so
-if you have customized them, it is highly recommended that you
-make a BACK-UP of the files before continuing this installation:
-
-	SBBS\EXEC\RENEGADE.SRC		(Renegade Command Shell)
-	SBBS\EXEC\RENEGADE.BIN		(Renegade Command Shell)
-
-
-SBBSCTRL
-~~~~~~~~
-SBBSCTRL is the Sysop's console for SBBS v3. You still must use
-SCFG to configure the BBS options shared between the new and old
-versions.
-
-The installation program will create a short-cut to SBBSCTRL.EXE
-on your desktop and in your startup folder (so Synchronet will
-start automatically during boot-up).
-
-
-Update Your Configuration
-~~~~~~~~~~~~~~~~~~~~~~~~~
-Before you run your BBS with v3, you'll need to go through all
-of your command lines in SCFG (SBBSCTRL->BBS->Configure) and
-make sure there aren't any hard-coded relative paths.
-
-For example, you must change SCFG->File Options->Testable Files
-       %!pkzip -z %f < ..\text\zipmsg.txt
-to:    %!pkzip -z %f < %zzipmsg.txt
-
-If you have any Baja modules that assume the current directory
-(use relative paths), they need to be fixed too.
-
-Relative paths in "data directories" in SCFG are okay. Only
-executable command lines need to be changed to absolute paths
-("%n..\xtrn\etc" is okay).
-
-Also, make sure that all of your external programs either use DOS
-I/O interception (XSDK/WWIV doors) or utilize a FOSSIL driver
-(i.e. use FDSZ or CEXYZ instead of DSZ). The COM ports and baud
-rates configured for your doors are irrelevant.
-
-
-Known Issues
-~~~~~~~~~~~~
-o DOSKEY must be loaded in your autoexec.bat for the DOS shell to
-  work right (Windows 95/98)
-o Backspace doesn't work right in DOS shell (Windows 95/98)
-o QNET.BIN doesn't work (see DOVE-NET.ZIP for alternatives)
-o First node (set in SBBSCTRL) configuration is used for all nodes
-  (this is actually intentional, i.e. not a bug)
-o First node's temp directory must be set to "TEMP\"
-
-
-For More Information
-~~~~~~~~~~~~~~~~~~~~
-See DOCS\NTREADME.TXT for instructions on running 
-    Synchronet v3.0 on Windows NT or Windows 2000.
-
-See DOCS\V300_NEW.TXT for list of new features in 
-    Synchronet v3.0.
-
-See DOCS\SBBS3FAQ.TXT for answers to frequently asked
-    questions regarding Synchronet v3.0.
-
-See DOCS\V3CFGFAQ.TXT for answers to frequently asked
-    questions about configuring Synchronet v3.0.
-
-See DOCS\DOVE-NET.ZIP for details on joining DOVE-Net
-    (Synchronet support message network).
-
-Thanks for your interest in Synchronet BBS Software
-(www.synchro.net).
-
-Rob Swindell
-(rob@synchro.net)
diff --git a/docs/user.html b/docs/user.html
deleted file mode 100644
index 3c425467aa..0000000000
--- a/docs/user.html
+++ /dev/null
@@ -1,1363 +0,0 @@
-
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<title>Synchronet BBS Software - User Documentation</title>
-</head>
-
-<body>
-<!--webbot bot="Include" U-Include="_borders/top.htm" TAG="BODY" startspan -->
-
-<a href="http://www.synchro.net"><img border="0" src="images/synclogo_fancyred.gif" alt="Synchronet BBS - Multinode Bulletin Board Software" width="626" height="86"></a>
-
-<hr>
-
-<!--webbot bot="Include" endspan i-checksum="23126" -->
-
-<h1>Synchronet User Documentation</h1>
-<p><b><a name="TOC">Table of Contents</a></b></p>
-<p align="left"><a href="#HowtousetheUserManual">How to use the User's Manual</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#QuickKeySequenceGuides">Quick Key Sequence Guides</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#Nomenclature">Nomenclature</a><br>
-<a href="#LoggingontotheBBS">Logging onto the BBS</a><br>
-<a href="#LoggingofftheBBS">Logging off the BBS</a><br>
-<a href="#DisplayingMenus">Displaying Menus</a><br>
-<a href="#ControlCommands">Control Commands</a><br>
-<a href="#SettingUpYourUserAccount">Setting Up Your User Account</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#AccountDefaultsConfiguration">Account Defaults Configuration</a><br>
-<a href="#ElectronicMailFunctions">Electronic Mail Functions</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#ElectronicMailMenu">Electronic Mail Menu</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size:12.0pt;font-family:&quot;Times New Roman&quot;;
-mso-fareast-font-family:&quot;MS Mincho&quot;;mso-ansi-language:EN-US;mso-fareast-language:
-EN-US;mso-bidi-language:AR-SA"><a href="#SendE-mail">Send Local E-mail</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#SendNetMail">Send Internet Email / NetMail</a></span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ReadMail">Read Mail</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size:12.0pt;font-family:&quot;Times New Roman&quot;;
-mso-fareast-font-family:&quot;MS Mincho&quot;;mso-ansi-language:EN-US;mso-fareast-language:
-EN-US;mso-bidi-language:AR-SA"><a href="#ReadSentMail">Read Sent Mail</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#SendSysopFeedback">Send Sysop Feedback</a><br>
-<a href="#MessageBaseFunctions">Message Base Functions</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#GroupandSubboardSelection">Group and Subboard Selection</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#ReadingMessages">Reading Messages</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#ReadMessages">Read Messages</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#NewMessageScan">New Message Scan</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#Browse">Browse</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#ContinuousNewScan">Continuous New Scan</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#PostingMessages">Posting Messages</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#PostingMessages">Posting a message</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#PrivatemessagevsE-mail">
-Private message vs E-mail</a></span><span style="font-size: 12.0pt; font-family: Times New Roman; mso-fareast-font-family: MS Mincho; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<span style="font-size:12.0pt;font-family:&quot;Times New Roman&quot;;
-mso-fareast-font-family:&quot;MS Mincho&quot;;mso-ansi-language:EN-US;mso-fareast-language:
-EN-US;mso-bidi-language:AR-SA"><a href="#AutoMessage">Auto Message</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#SynchronetMessageEditor">Synchronet Message Editor</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#SlashCommands(/)">Slash Commands</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#Control(Ctrl)Commands">Control (Ctrl) Commands</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#TextAttributes(Ctrl-Axwherexisattribute)">Text Attributes (Ctrl-Ax where x is attribute)</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#QWKMailPacketMenu">QWK Mail Packet Menu</a><br>
-<a href="#ConfigurationCommands">Configuration Commands</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#ConfigurationMenu">Configuration Menu</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#ConvertCreditstoMinutes">Convert Credits to Minutes</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#UnfilteredInputSwitch">Unfiltered Input Switch</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#NewMessageScanListConfiguration">New Message Scan List Configuration</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#NewMessageScanDate/TimePointers">New Message Scan Date/Time Pointers</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#ReinitializeNewScanDate/TimePointers">Reinitialize New Scan Date/Time Pointers</a><br>
-<a href="#OnlineUserInteraction">Online User Interaction</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#UsersOnlineCtrl-U">Users Online &lt;Ctrl-U&gt;</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#ListNodeActivity{/L}">List Node Activity {/L}</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="mso-fareast-font-family:&quot;MS Mincho&quot;"><a href="#SendPrivateMessagetoNodeCtrl-P">Send Private Message to Node &lt;Ctrl-P&gt;</a><o:p>
-</o:p>
-<br>
-<a href="#ChattingFeatures">Chatting Features</a><o:p>
-</o:p>
-<br>
-&nbsp;&nbsp;&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#ChatMenu">Chat Menu</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#Pagingdisable/enable">Paging disable/enable</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#ActivityAlertsdisable/enable">Activity Alerts disable/enable</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#PageSysoptoChat">Page Sysop to Chat</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#TalkwiththeGuru">Talk with the Guru</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#Join/InitiateMultinodeChat">Join/Initiate Multinode Chat</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#PrivateNodetoNodeChat">Private Node to Node Chat</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#ChatCommandPrompt(/fromwithinchat)">Chat Command Prompt (/ from within chat)</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#PageUsertoChat(multinodechatonly)">Page User to Chat (multinode chat only)</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#ChangeChannel(multinodechatonly)">Change Channel (multinode chat only)</a><br>
-<a href="#TextFileSection">Text File Section</a><br>
-<a href="#ExternalServices">External Services</a><br>
-<a href="#UserLists">User Listings</a><br>
-<a href="#Information/Statistics">Information/Statistics</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#InformationCommandMenu">Information Command Menu</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#SystemInformation">System Information</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#VersionInformation">Version Information</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#SubboardInformation">Subboard Information</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#YourAccountStatistics">Your Account Statistics</a><br>
-<a href="#FileTransferSection">File Transfer Section</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#LibraryandDirectorySelection">Library and Directory Selection</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#Wildcards">Wildcards</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#ListingFiles">Listing Files</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#ExtendedFileInformationListing">Extended File Information Listing</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#NewFileScan">New File Scan</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#SearchforFilename">Search for Filename</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#FindTextinDescription">Find Text in Description</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#QuickKeys">Quick Keys</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#FileTransferAreaInformation">File Transfer Area Information</a><o:p>
-</o:p>
-<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#FileTransferInformationMenu">File Transfer Information Menu</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#BBSFileTransferPolicy">BBS File Transfer Policy</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#CurrentDirectoryInformation">Current Directory Information</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#UsersWithAccesstoDirectory">Users With Access to Directory</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#YourFileTransferAccountStatistics">Your File Transfer Account Statistics</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#FileTransferAreaConfiguration">File Transfer Area Configuration</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#FileTransferAreaConfigurationMenu">File Transfer Area Configuration Menu</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#BatchDownloadQuickFileFlagging">Batch Download Quick File Flagging</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#ChangeNewFileScanDate/Time">Change New File Scan Date/Time</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#DownloadingFiles">Downloading Files</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#DownloadFileorFiles">Download File or Files</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#DownloadUsertoUserFile">Download User to User File</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#DownloadOptions">Download Options</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#UploadingFiles">Uploading Files</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#UploadFileorFiles">Upload File or Files</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#UploadUsertoUserFile">Upload User to User File</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#UploadFiletoSysop">Upload File to Sysop</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#UploadProcedures">Upload Procedures</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#Remove/EditFile">Remove / Edit File</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#BatchFileTransfers">Batch File Transfers</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#Batch/BidirectionalCommands">Batch/Bidirectional Commands</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#FileExtraction/TempDirectory">File Extraction / Temp Directory</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#TempDirectoryCommands">Temp Directory Commands</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#ExtractfromarchiveinTempDirectory">Extract from archive in Temp Directory<o:p>
-</o:p>
-</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#AddfilestoTempfile">Add files to Temp file</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<a href="#DownloadTempfile">Download Temp file</a><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#Creatinganddownloadingfilelists">Creating and downloading file lists</a></span></span></span></span></p>
-<p><a href="#TOC"><b>Back to Table of Contents</b></a></p>
-<h2>
-<a name="HowtousetheUserManual">How to use the User's Manual</a></h2>
-<pre><a name="QuickKeySequenceGuides"><b>Quick Key Sequence Guides</b></a>
--------------------------
-Each command title will be followed by a quick key sequence guide. The command 
-sequences are the exact keystrokes to enter from the Main or File Transfer 
-prompt to execute that command without pausing to look at menus. Key sequences 
-to be entered from the Main prompt are enclosed in brackets. For example the 
-Send E-Mail command title will be listed as:</pre>
-<pre>	Send E-Mail [ES]</pre>
-<pre>You would type E then S from the Main Prompt (noted by the brackets) to Send 
-E-Mail. Key sequences to be entered from the File Transfer prompt are enclosed 
-in parenthesis. For example the Find File command title would be listed as:</pre>
-<pre>	Find File (F)</pre>
-<pre>For this command you would type F from the File Transfer prompt (noted by the 
-parenthesis). If a command may be entered from either the Main or File Transfer 
-prompt it will be enclosed in curly brackets. For example the Join Multinode 
-Chat command title would be listed as:</pre>
-<pre>	Join/Initiate Multinode Chat {CJ} </pre>
-<pre>For this command you would type C then J from either the Main or File transfer 
-prompt.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><a name="Nomenclature"><b>Nomenclature</b>
-</a>------------
-Throughout the documentation Carriage Return (or the ENTER key) is referred to 
-as &lt;CR&gt;.</pre>
-<pre>There are two primary prompts on the Synchronet BBS, the Main prompt from the 
-Main section, and the File Transfer prompt, from the File Transfer section. 
-These can be identified by diagrams in the Message Base Functions chapter and 
-the File Transfer Section chapter. When referred to in the documentation the 
-Main and File Transfer prompts are italicized.</pre>
-<pre>Most key strokes referred to in the documentation are highlighted in bold. 
-<a href="#TOC"><b>
-Back to Table of Contents</b></a></pre>
-<h2><a name="LoggingontotheBBS"><b>Logging onto the BBS</b></a>
-</h2>
-<pre>After dialing and connecting to the BBS:</pre>
-<pre>At NN: prompt enter your username or user number. </pre>
-<pre>At the PW: prompt enter your unique user password.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="LoggingofftheBBS"><b>Logging off the BBS</b></a>
-</h2>
-<pre>To logoff the BBS enter O from either the Main prompt or the File Transfer 
-prompt. Enter /O for a quick logoff.
-<a href="#TOC"><b>
-Back to Table of Contents</b></a></pre>
-<h2><a name="DisplayingMenus"><b>Displaying Menus</b></a>
-</h2>
-<pre>Hitting ? from almost any prompt will display a menu of available commands. 
-From inside chat or the Synchronet editor /? will display a menu of the 
-available commands.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="ControlCommands"><b>Control Commands</b></a>
-</h2>
-<pre>Control commands are commands that are available from anywhere on the BBS. 
-Control commands are primarily used to control the scrolling of text at anytime 
-on the system or to abort a command in process such as a file search. Two 
-online user to user commands are also available to list the users currently 
-online or send messages at anytime while on the BBS. Control commands are 
-entered by holding down the Ctrl key and hitting the control letter. For 
-example, to enter the control command Ctrl-S hold down the Ctrl key and strike 
-the S key. The following control commands are available at all times while on 
-the BBS:</pre>
-<pre>&lt;sm heading&gt;Scrolling Text/ Messages/ System Commands	
-	Ctrl-S	Pause scrolling text/messages
-	Ctrl-Q	Continue scrolling text/messages
-	Ctrl-C	Abort scrolling text/messages or a BBS command</pre>
-<pre>&lt;sm heading&gt;Online User Information/Interaction
-	Ctrl-P	Send a private one line message to another user
-	Ctrl-U	List users online</pre>
-<pre>&lt;sm heading&gt;Other Information
-	Ctrl-K	List control commands
-	Ctrl-T	Time online info
-<a href="#TOC"><b>
-Back to Table of Contents</b></a></pre>
-<h2><a name="SettingUpYourUserAccount">Setting Up Your User Account</a>
-</h2>
-<pre><b><a name="AccountDefaultsConfiguration">Account Defaults Configuration</a> [D]</b>
-----------------------------------
-To display and or change your user account defaults hit D from the Main prompt. 
-Your account defaults will be displayed. </pre>
-<pre>A) ANSI Terminal				: Yes, Color
-E) External Editor				: None
-L) Screen Length				: Auto Detect (24)
-K) Command Keys					: Synchronet
-X) Expert Menu Mode				: On
-P) Screen Pause					: Off
-S) Spinning Cursor				: Off
-C) Clear Screen Between Messages		: Off
-N) Prompt for New Message / File Scan		: Off
-F) Auto New File Scan*				: Off
-R) Remember Current Sub-board			: Off
-B) Batch Download File Flagging			: Off
-W) Change Password (if allowed)
-Q) Quit (and accept settings)
- </pre>
-<pre>The A) option toggles ANSI terminal support. The ANSI definition of terminal 
-escape sequences used for text attributes and animation is supported by most 
-communications programs and dumb terminals. If your terminal supports ANSI, 
-this option should be set to &quot;Yes&quot;. You can also tell the system if you have a 
-color or monochrome display with this option.</pre>
-<pre>The E) option selects an external editor as your default message editor. 
-External editors may have more functionality or a command structure that you 
-may prefer over the internal editor. You may only select external editors from 
-a list that the sysop has configured for the system.</pre>
-<pre>The L) option sets how many lines (or rows) your display has. If your terminal 
-or communications program has a status line, you will want this set to the 
-number of lines your terminal can display excluding the status line. If this 
-option is set to &quot;Auto Detect&quot;, the number of screen lines your terminal 
-supports will be automatically detected upon each logon.</pre>
-<pre>The K) option selects an optional command key set. You may select an alternate 
-command key set resembling another BBS type or any command set the sysop has 
-predefined. You may also define your own command set. If you select an 
-alternate command set you will also receive matching menus. However, if you 
-define your own set you will not receive matching menus.</pre>
-<pre>The X) option toggles Expert menu mode on and off. When Expert menu mode is 
-turned off menus automatically appear at each new command prompt. When Expert 
-menu mode is turned on menus only appear as requested with the '?' command. 
-Expert menu mode off is generally referred to as Novice mode.</pre>
-<pre>The P) option toggles screen pausing. When this option is on, every screen full 
-of text displayed to you will pause with a &quot;Hit a key&quot; prompt. When this option 
-is off, the user must use the Ctrl-S and Ctrl-Q commands to pause and unpause 
-scrolling text.</pre>
-<pre>The S) option toggles the spinning cursor on and off</pre>
-<pre>The C) option toggles screen clearing before each message (posts or E-mail) is 
-displayed.</pre>
-<pre>The N) option toggles whether or not the BBS will automatically prompt you for 
-a new message and file scan upon logging on.</pre>
-<pre>The F) option toggles automatic new file scanning  after a New Message Scan All 
-(NA or /N) from the Main Section.</pre>
-<pre>The R) option is used to toggle whether or not the BBS remembers your current 
-subboard each time you logoff.</pre>
-<pre>The B) option is used to toggle the Batch Download File Flagging prompt that is 
-displayed after each screen full of files are listed to you. This function is 
-handy for quickly adding files to the batch download queue without having to 
-type the name of each file. Batch Download File Flagging can be temporarily 
-toggled with the &amp;B command from the Transfer Section.</pre>
-<pre>The W) option is not available on all systems. If the sysop has configured the 
-system so that users can edit their passwords, this option will appear on the 
-menu and allow you to change your current password.</pre>
-<pre><a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="ElectronicMailFunctions">Electronic Mail Functions</a>
-</h2>
-<pre><b><a name="ElectronicMailMenu">Electronic Mail Menu</a> [E]</b>
-------------------------
-Selecting E from the Main prompt brings you to the E-mail Prompt. From here you 
-can read, send, and kill E-mail (mail to and from users on your BBS) and 
-NetMail (mail to and from users on other BBSs). Your E-mail options are:</pre>
-<pre>	S	Send E-mail
-	N	Send NetMail
-	R	Read E-Mail\NetMail
-	K	Read\Kill mail you have sent
-	F	Send feedback to the sysop
-	Q	Quit to the Mail Menu
-	
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="SendE-mail">Send E-mail</a> [ES]</b>
-----------------
-Select Send E-Mail to send a mail message to another user's mailbox. You will 
-be prompted for the user's name or user number. If you don't know the correct 
-spelling for the target user and don't know the user number, you can enter in 
-just part of the user's name and the system will help you find the user's full 
-name. Enter the message title then your message. All Synchronet editor commands 
-are available to you (see Synchronet Message Editor) in the message unless you 
-have selected another (external) editor as your default editor. /S will save 
-and send your message when you are finished.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="SendNetMail">Send NetMail</a> [EN]</b>
------------------
-Select Send NetMail to send a personal message to user on another BBS across a 
-Fidonet style network. This feature works exactly like the Send E-Mail command 
-except that you will be prompted for the user's name and Fidonet address. The 
-syntax is as follows:</pre>
-<pre>	Username @Fidonet Address</pre>
-<pre>	Ex: John Doe  @1:138:110
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="ReadMail">Read Mail</a> [ER]</b>
---------------
-After selecting Read Mail you will receive a list of the mail messages in your 
-mailbox. An *  will be displayed next to any unread mail messages. If you have 
-only one message in your mailbox, that message will be displayed rather than 
-the list. Either event will be followed by the Read Mail prompt. At the Read 
-Mail prompt you have the following commands available:
-	#	read a mail message (where # is the number of the message).
-	&lt;CR&gt;	read the next mail message.
-	- 	read the previous mail message.
-	L	list all mail message titles and authors.
-	R	re-read the current mail message.
-	D	delete the current mail message.
-	A	automatically reply in mail to the author of the current mail message.
-		This will prompt for mail message removal.
-	F	forward the current mail message to another user. This will automatically 
-		remove the mail message from your mailbox.
-	Q	quit the Read Mail prompt and return to the Main prompt.
-	?	display the Read Mail menu
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="ReadSentMail">Read Sent Mail</a> [EK]</b>
--------------------
-After selecting Read Sent Mail you will receive a list of active mail messages 
-you have sent and to whom you have sent them. An * next to a title denotes an 
-unread mail message. If you have only one active mail message that message will 
-be displayed rather than the list. Either event will be followed by the Read 
-Sent Mail prompt. At the Read Sent Mail prompt the following commands are 
-available:</pre>
-<pre>	#	read a sent mail message (where # is the number of the message).
-	&lt;CR&gt;	read the next sent mail message.
-	- 	read the previous sent mail message.
-	L	list all sent mail message titles and recipients.
-	R	re-read the current sent mail message.
-	D	delete the current sent mail message.
-	Q	quit the Read Sent Mail prompt and return to the Main prompt.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="SendSysopFeedback">Send Sysop Feedback</a> [EF]</b>
-------------------------
-Send Sysop Feedback sends a private  message to the Sysop. Again, all 
-Synchronet editor commands are available to you (see Synchronet Message Editor) 
-in the message unless you have selected another (external) editor as your 
-default editor. /S will save and send your feedback when you are finished.</pre>
-<pre><a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="MessageBaseFunctions">Message Base Functions</a>
-</h2>
-<pre>The Synchronet message base is a two level system. It is organized in groups 
-and subboards. A group is a generalized collection of related subboards. 
-Subboards contain specific interest messages. 
-Groups tend to be categories such as Public, Computers, 18 and Over, etc. 
-Subboard categories are more specific such as: Public/Politics, Public/Game 
-Hints,  Computers/Macintosh, Computers/DOS, Fidonet/For Sale, Fidonet/Trekkies, 
-etc. 
-At the Main prompt you can always see your current group and subboard. The Main 
-prompt and the File Transfer prompt can be easily differentiated by the bracket 
-style. The Main prompt uses square brackets [ ] and the File Transfer prompt 
-uses parenthesis ( ). The first name and number is your current group. The 
-second name and number is your current subboard. The clock displays your time 
-left online unless you have a time exemption in which case it will display your 
-time spent  online. ? will display the Main Menu. </pre>
-<pre><a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h3><a name="GroupandSubboardSelection">Group and Subboard Selection</a>
-</h3>
-<pre>There are two ways to select groups and subboards. You can jump to the group 
-and subboard #'s directly or you can jump through the groups and subboards 
-sequentially until you reach the desired selection. If you wish to jump to the 
-group and subboard #'s directly you may want to view a list of groups or 
-subboards first. From the Main prompt enter:</pre>
-<pre>	*	to list all available subboards in your current group
-	/*	to list all available groups</pre>
-<pre>	#	to jump to a new subboard (where # is the subboard number)
-	/#	to jump to a new group (where # is the group number)
-	</pre>
-<pre>	} 	to jump forward to the next subboard
-	{	to jump backward to the previous subboard
-	]	to jump forward to the next group
-	[	to jump backward to the previous group.</pre>
-<pre><a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h3><a name="ReadingMessages">Reading Messages</a>
-</h3>
-<pre>To read messages in a subboard you can either go to the Read Messages prompt or 
-you can scan for new messages. There are three different new scan commands 
-available. All new scan commands can scan either your current subboard, all 
-subboards in your current group, or all subboards in all groups. Remember that 
-the control commands are available at all times while on the BBS to control 
-text scrolling. Ctrl-S to pause, Ctrl-Q to continue, and Ctrl-C to abort. 
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="ReadMessages">Read Messages</a> [R]	</b>
-------------------
-Read Messages, activated by hitting R at the Main prompt, is used to read 
-messages sequentially forward or backward in your current subboard (displayed 
-at the prompt). While reading messages you can also reply to and post messages. 
-The following are the Read Message commands:</pre>
-<pre>	&lt;CR&gt;	Display next message 
-	-	Display previous message 
-	L	Lists message titles and authors.
-	T	Lists message titles and authors of next ten messages
-		(advances current message forward ten messages)
-	R	Re-read current message 
-	F	Searches for specified text in all messages.
-	B	Bypasses remaining messages in current subboard and moves to next
-		subboard in new scan list if applicable.
-	I	Displays information about current subboard
-	Y	Lists posts addressed to you
-	C	Displays remaining messages in current subboard continuously
-		without pausing for a Message Scanning prompt.
-	A	Reply publicly regarding current message.
-	M	Reply privately in mail regarding current message.
-	Z	Reply privately in message area regarding last message.
-	D	Deletes only the last message in current subboard if you are the
-		message's author. 
-	P	Post a message in current subboard (see Synchronet Editor commands)
-	W	Post a private message in current subboard.
-	Q	Quits to Main prompt.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="NewMessageScan">New Message Scan</a> [N]</b>
---------------------
-After selecting New Message Scan you will be prompted to scan for new messages 
-in your current subboard, all subboards in your current group, or all subboards 
-in all groups. Browse and Continuous New Scan will also prompt for these 
-selections.</pre>
-<pre>After each displayed message you are provided a Read Message prompt and may 
-execute any Read Message  commands (See Read Messages). When &lt;CR&gt; is hit after 
-the last message is displayed or the subboard is bypassed (B) the new scan will 
-continue with the next subboard in the new scan list. &quot;Group&quot; and &quot;All&quot; new 
-scans will skip over subboards that do not contain any new messages.</pre>
-<pre>	Quick Keys:
-		New Message Scan Subboard [NS]
-		New Message Scan Group [NG]
-		New Message Scan All [NA]
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="Browse">Browse</a> [B]</b>
-----------
-Browse works exactly like New Scan except on subboards that do not contain any 
-new messages. Unlike New Scan Group, which will skip over a subboard that 
-contains no new messages, Browse will display the last message read in a 
-subboard that contains no new messages and provide you with a Read Message  
-prompt (see Read Messages) allowing you to still read and post messages in that 
-subboard. When &lt;CR&gt; is hit after the last message is displayed or the subboard 
-is bypassed, by hitting B, the browse will continue with the next subboard in 
-the new scan list.</pre>
-<pre>	Quick Keys:
-		Browse Subboard [BS]
-		Browse Group [BG]
-		Browse All [BA]
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="ContinuousNewScan">Continuous New Scan</a> [Z]</b>
------------------------
-Continuous New Scan displays all new messages continuously without providing a 
-Message Scanning prompt.</pre>
-<pre>	Quick Keys:
-		Continuous New Scan Subboard [ZS]
-		Continuous New Scan Group [ZG]
-		Continuous New Scan All [ZA]</pre>
-<pre><a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h3><a name="PostingMessages">Posting Messages</a>
-</h3>
-<pre><b>Posting a message [P]</b>
----------------------
-To post (write) a message in your current subboard hit P from the Main or the 
-Message Scanning prompt. You will also be prompted to post when you pass the 
-last message in your current subboard when reading, new scanning, or browsing. 
-After selecting Post Message you will be prompted whether to make the post 
-private or public. When posting a message all Synchronet Editor commands are 
-available to you (see Synchronet Message Editor) unless you have selected an 
-external editor as your default editor. In which case you should consult the 
-documentation for the external editor you have selected.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><a name="PrivatemessagevsE-mail"><b>Private message vs E-mail</b></a>
--------------------------
-Private Messages cannot be delivered directly into another user's mailbox as 
-can E-mail or NetMail so when ever possible use E-mail and NetMail to send 
-confidential messages to other users. However, QWK style BBS networks do not 
-support NetMail. If you wish to send a confidential message to a user on 
-another BBS through a QWK style network you should use a private message on a 
-subboard. You can tell what types of networks are being utilized on a subboard 
-by hitting I from the read message prompt or [IS] from the main prompt.  
-NetMail is the most convenient and direct way to send confidential messages to 
-users on other BBSs if the BBSs are connected to a Fidonet style network. (see 
-also E-mail and NetMail)</pre>
-<pre><a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="AutoMessage">Auto Message</a> [A]</b>
-----------------
-The auto message is displayed to every user when the user logs on. You may 
-change the Auto Message from the Main prompt by hitting A. Remember that as 
-soon as another user changes the Auto Message your message will be deleted.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h3><a name="SynchronetMessageEditor">Synchronet Message Editor</a>
- </h3>
-<pre>When using the Synchronet Message Editor to post, send mail, or send feedback 
-you have a wealth of powerful message editing functions available. There are 
-two types of editor commands available: Slash (/) commands and Control (Ctrl) 
-commands. </pre>
-<pre>Slash commands are preceded by the forward slash key (/) and must be entered 
-from the beginning of any new line. Control (Ctrl) commands may be entered from 
-any cursor position on any line. </pre>
-<pre>There are two help menus available when in the editor. /? displays all standard 
-message editing commands and /ATTR displays all available text attributes which 
-can set by the Ctrl-A command. Text attributes set with the Ctrl-A command do 
-not become visible until the line is word wrapped or a carriage return &lt;CR&gt; is 
-entered.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><a name="SlashCommands(/)"><b>Slash Commands (/)</b></a>
-------------------
-	/?	Message editor help menu
-	/S	Save message
-	/ABT	Abort message
-	/CLR	Clear message	
-	/L	List message
-	/Lx	List message from line number x
-	/E	Edit last line
-	/Ex	Edit line number x
-	/D	Delete last line
-	/Dx	Delete line number x
-	/I	Insert line before last
-	/Ix	Insert line before line number x
-	/T	Edit message title
-	/ATTR	Text attribute code list
-	
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><a name="Control(Ctrl)Commands"><b>Control (Ctrl) Commands</b></a>
------------------------
-	Ctrl-C		Cancel current line
-	Ctrl-V		Center current line
-	Ctrl-R		Redraw current line
-	Ctrl-X		Delete current line
-	Ctrl-Y	*	Delete to end of line
-	Ctrl-W		Delete word to left
-	Ctrl-D	*	Delete word to right
-	Ctrl-B	*	Move cursor to beginning of line
-	Ctrl-E	*	Move cursor to end of line
-	Ctrl-N	*	Move cursor to next word
-	Ctrl-\	*	Move cursor to previous word
-	Ctrl-F	*	Move cursor position forward one space
-	Ctrl-Bkspc	*	Move cursor position back one space
-	Ctrl-Minus	*	Toggle insert/overwrite mode
-	Ctrl-Ax	*	Toggle new text attribute where x is attribute</pre>
-<pre>* Requires ANSI
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><a name="TextAttributes(Ctrl-Axwherexisattribute)"><b>Text Attributes (Ctrl-Ax where x is attribute)</b></a>
-----------------------------------------------
-	</pre>
-<pre>	K	Black foreground (zero) 0	Black background
-	R	Red foreground		1	Red background
-	G	Green foreground	2	Green background
-	Y	Yellow foreground	3	Yellow background
-	B	Blue foreground		4	Blue background
-	M	Magenta foreground	5	Magenta background
-	C	Cyan foreground		6	Cyan background
-	W	White foreground	7	White background
-	</pre>
-<pre>	H	High intensity
-	I	Blinking
-	N	Normal (reset attributes)
-	P	Insert pause into message
-	L	Insert form feed into message
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h3><b><a name="QWKMailPacketMenu">QWK Mail Packet Menu</a>  [Q]</b>
-	</h3>
-<pre>Hitting Q from the Main prompt accesses the QWK Mail Packet Menu. QWK mail 
-packets are used in conjunction with an offline mail reader. When you download 
-a QWK mail packet all of your new messages in all of the subboards flagged in 
-your newscan list and a list of new uploaded files will be compiled into a QWK 
-file readable by most QWK supported offline mail readers. After logging off the 
-BBS you can read the messages, E-mail, and new files list with your offline 
-reader. You can reply to and post messages from your offline reader and upload 
-the reply packet (.REP) to the BBS and your messages will be posted for you. 
-(see QWK Offline Reader Diagram) There are many offline readers available as 
-shareware and commercial products. The QWK Mail Packet Menu offers the 
-following commands:
-	</pre>
-<pre>	D	Download QWK message packet
-	U	Upload REP reply packet
-	B	Bidirectional simultaneous QWK &amp; REP transfer 
-	Q	Quit to Main prompt</pre>
-<pre>When D or B is selected to download a QWK packet you will be prompted to select 
-a what type of Ctrl-A filtering you wish to employ. Synchronet uses Ctrl-A 
-codes in messages to signify color and other text attributes. </pre>
-<pre>	E	Expand the Ctrl-A codes to ANSI, which is recommended if you wish
-		to display ANSI color and have an ANSI compatible offline reader. 
-	L	Leave the Ctrl-A codes in. In which case you would need an offline
-		reader capable of converting Ctrl-A codes to ANSI. 
-	&lt;CR&gt;	Strip out the Ctrl-A codes, removing the color and other text
-		attributes from the messages.</pre>
-<pre>If you are not sure which method to use the safest bet is to just hit &lt;CR&gt; to 
-strip out the Ctrl-A codes.</pre>
-<pre>Your QWK packet will not contain any messages you have already read since you 
-logged on. If you wish to reset your new message scan pointers back to their 
-state when you logged on use the Reinitialize New Message Scan Pointers [&amp;I] 
-command before downloading your QWK packet. After downloading a QWK packet your 
-New Message Scan Pointers will always be set to the last messages stored in the 
-packet. If you wish to new scan messages while still online after downloading a 
-QWK packet you may wish to use the [&amp;I] or [&amp;P] command before attempting a new 
-message scan. (see Reinitialize New Message Scan Pointers and New Message Scan 
-Date/Time Pointers in next section)
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="ConfigurationCommands">Configuration Commands</a>
-</h2>
-<pre><b><a name="ConfigurationMenu">Configuration Menu</a> [&amp;]</b>
-----------------------
-Hitting &amp; from the Main prompt access the Configuration prompt. Your choices 
-from the Configuration prompt are:</pre>
-<pre>	C	Convert Credits to Minutes
-	R	Unfiltered Input Switch
-	N	New Message Scan Configuration
-	P	New Message Scan Pointers
-	I	Reinitialize Message Pointers
-	Q	Quit to Main Menu
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="ConvertCreditstoMinutes">Convert Credits to Minutes</a> [&amp;C]</b>
--------------------------------
-To convert online credits to online minutes hit C from the Configuration  
-prompt. You cannot convert minutes back to credits.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="UnfilteredInputSwitch">Unfiltered Input Switch</a> [&amp;R]</b>
-----------------------------
-The Unfiltered Input Switch, R from the Configuration prompt, is used to allow 
-text files created offline with control codes, ANSI graphics and colors, and 
-page formatting to be uploaded into a message or a mail message. To toggle 
-unfiltered input ON hit R from the Configuration prompt. The next message you 
-post or mail message you send will allow you to ASCII upload a text file from 
-your computer by executing your terminal program's upload command (often PGUP) 
-and selecting ASCII upload. Save your message by hitting Ctrl-Z. After you save 
-the message the Unfiltered Input Switch will be toggled OFF. 
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="NewMessageScanListConfiguration">New Message Scan List Configuration</a> [&amp;N]</b>
-----------------------------------------
-New Message Scan List Configuration, N from the Configuration prompt, allows 
-you to set which subboards you wish to be scanned in a new scan, browse, or 
-express new scan. When you select New Scan Configuration you will be prompted 
-with a list of groups. Select the group number you wish to view. A list of 
-subboards in the selected group will be displayed. An asterisk * next to a 
-subboard designates the subboard is toggled ON for new scans. To toggle a 
-subboard OFF select the subboard number. To toggle a subboard back ON, select 
-the subboard number again. Hit Q to quit back to the group selection. Select 
-another group or Q to quit back to the Main prompt. Your selections in the New 
-Message Scan List Configuration are saved and remain in effect until the next 
-time you change the settings.</pre>
-<pre><a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="NewMessageScanDate/TimePointers">New Message Scan Date/Time Pointers</a> [&amp;P]</b>
-----------------------------------------
-The New Message Scan Date/Time Pointers, P from the Configuration prompt, 
-allows you to set back the date and time a new scan will begin to look for new 
-messages in a specified subboard. After hitting P from the Configuration prompt 
-select the group number you wish to change or A to change all groups. If an 
-individual group was selected a list of subboards in the selected group will be 
-displayed. Select the subboard you wish to change or hit A to select all 
-subboards in that group. Enter in the new date and time. When finished hit Q to 
-quit back to the group selection. Select another group or Q to quit back to the 
-Main prompt.</pre>
-<pre>The pointer is automatically set to the date and time of the most recently 
-posted message you have read in a subboard each time you read messages.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="ReinitializeNewScanDate/TimePointers">Reinitialize New Scan Date/Time Pointers</a> [&amp;I]</b>
----------------------------------------------
-I from the Configuration prompt resets all your New Message Scan Date/Time 
-Pointers back to the their original values for your current logon. This command 
-is helpful if you have already executed a New Message Scan and then wish to 
-download a QWK message packet containing new messages you have already read 
-online or at any time you wish to reset your new message pointers back to their 
-original state for your current logon. </pre>
-<pre><a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="OnlineUserInteraction">Online User Interaction</a>
-</h2>
-<pre><a name="UsersOnlineCtrl-U"><b>Users Online &lt;Ctrl-U&gt;</b></a>
----------------------
-To list users currently online enter Ctrl-U at any time from any section of the 
-BBS. Users Online lists the user names, which nodes they are logged on to, 
-their connect rate, and what each user's current action is on the BBS.
-<a href="#TOC"><b>
-Back to Table of Contents</b></a></pre>
-<pre><a name="ListNodeActivity{/L}"><b>List Node Activity {/L}</b></a>
------------------------
-List Node Activity, /L from the Main prompt, the File Transfer prompt, or from 
-inside a chat session, lists the current activity of each node on the system. 
-List Node Activity lists all the information of Users Online (Ctrl-U) but also 
-lists inactive nodes and their current state.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><a name="SendPrivateMessagetoNodeCtrl-P"><b>Send Private Message to Node &lt;Ctrl-P&gt;</b></a>
--------------------------------------
-Ctrl-P from anywhere in the BBS will allow you to send a private one line 
-message to another user on another node or all users on the system. After 
-entering Ctrl-P you will see a list of users currently online and their node 
-numbers, enter the node number or A for all users. Then enter your one line 
-message followed by &lt;CR&gt;. Your message will be sent to the user on the node 
-specified or all users on the system. 
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="ChattingFeatures">Chatting Features</a>
-</h2>
-<pre><b><a name="ChatMenu">Chat Menu</a> {C}</b>
--------------
-The Chat Menu, C from the Main or File Transfer prompt, allows you to join or 
-initiate multiuser chat, page the sysop to chat, talk with the system's all 
-knowing Guru, toggle your paging switch ON and OFF, and toggle the activity 
-alert switch ON and OFF. Commands available from the Chat prompt are:
-	D	Disable and enable paging
-	A	Disable and enable activity alerts
-	J	Join or initiate a Multinode chat session
-	P	Private node to node chat initiate/join
-	T	Talk with the system Guru
-	C	Page the sysop to chat
-	Q	Quit to Main prompt</pre>
-<pre>	Ctrl-U	List users online
-	Ctrl-P	Send private message to another user</pre>
-<pre><a href="#TOC"><b>Back to Table of Contents</b></a><a name="Pagingdisable/enable">
-
-<b>Paging disable/enable</b></a><b> {CD}</b>
---------------------------
-Paging disable/enable lets you allow other users to or disallow other users 
-from paging you to chat. The default is Paging enabled. To disable Paging hit D 
-from the Chat prompt. The system will show you your new node status. A (P) 
-after your node status designates Paging is disabled. If there is no (P) after 
-your node status then Paging is enabled (default). If you need to check your's 
-or another user's Paging status use Ctrl-U to list users online and their 
-current status.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="ActivityAlertsdisable/enable">Activity Alerts disable/enable</a> {CA}</b>
------------------------------------
-Activity alerts are messages displayed to you regarding other users activities 
-such as logons and logoffs. The default is for Activity Alerts enabled. If you 
-wish to disable Activity Alerts so they are not displayed to your console hit A 
-from the Chat prompt. To reenable Activity Alerts hit A again from the Chat 
-prompt. The system will show you your new node status. An (A) after your node 
-status designates Activity Alerts are disabled. If there is no (A) after your 
-node status then Activity Alerts are enabled (default). If you need to check 
-your's or another user's Activity Alerts status use Ctrl-U.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="PageSysoptoChat">Page Sysop to Chat</a> {CC}</b>
------------------------
-To page the sysop to chat hit C from the Chat prompt. This will alert the sysop 
-that you wish to chat with him/her if the sysop is available.
-<a href="#TOC"><b>
-Back to Table of Contents</b></a></pre>
-<pre><b><a name="TalkwiththeGuru">Talk with the Guru</a> {CT}</b>
------------------------
-The system Guru is a programmable artificial intelligence engine capable of 
-simulating and understanding human conversation. The guru may be programmed to 
-assist users in BBS usage or purely for entertainment. To enter a conversation 
-with the Guru hit T from the Chat prompt.
-  
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="Join/InitiateMultinodeChat">Join/Initiate Multinode Chat</a> {CJ}</b>
----------------------------------
-Multinode chatting is joined by hitting J from the Chat prompt. You are 
-immediately placed in channel 1 of a 99 channel chat system. From this point 
-any text you type will be sent out on the channel when you press &lt;CR&gt;. Entering 
-a forward slash (/) will enter you into the Chat Command mode (see Chat Command 
-prompt). Remember CTRL-U (list users online) and CTRL-P (send private message 
-to another node) are available from anywhere on the BBS. 
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="PrivateNodetoNodeChat">Private Node to Node Chat</a> {CP}</b>
-------------------------------
-To initiate or join someone in a two way private node to node chat hit P from 
-the Chat prompt. If you are initiating a private chat you will be prompted for 
-the username you wish to chat with. It will page that user to join you. If you 
-have been paged to join someone in a private chat hit P from the Chat Menu and 
-you will be placed in private chat with the user who paged you. Once in a 
-private chat session hit / to acces the Chat Command mode (see Chat Command 
-prompt). All Chat commands are available from within Private Node to Node Chat 
-except /P and /#. An additional command, /E,  is available to toggle local echo 
-off and on so you can invoke split screen chat with your terminal program. For 
-example, with Telix, split screen chat is ALT-Y.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><a name="ChatCommandPrompt(/fromwithinchat)"><b>Chat Command Prompt (/ from within chat)</b></a>
-----------------------------------------
-	</pre>
-<pre>	?	Display Chat Command Menu
-	P	Page another user to chat
-	#	Change channel (where # is the number of the channel)
-	L	List node activity 
-	E	Toggle local echo off/on (private node to node chat only)
-	Q	Quit chat session 
-	</pre>
-<pre>	Ctrl-U	List users online
-	Ctrl-P	Send private message to another user online
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><a name="PageUsertoChat(multinodechatonly)"><b>Page User to Chat (multinode chat only)</b>	</a>	
------------------------------------------
-Enter P from the chat command prompt to page another user online to chat. The 
-targeted user will receive a brief message requesting they join you in 
-multinode chat. 
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><a name="ChangeChannel(multinodechatonly)"><b>Change Channel (multinode chat only)</b></a> 	
---------------------------------------
-You can see what channel you and others are in by listing users, Ctrl-U. If you 
-wish to change to a different channel enter the channel number at the chat 
-command prompt. If there are no other users in the channel you will be prompted 
-to password protect the channel. By password protecting a channel you can 
-create a &quot;private&quot; chat session. Anyone entering a password protected channel 
-will be prompted to enter the password upon joining the channel. If you 
-password protect a channel be sure to send the password to the users you wish 
-to join the channel. Only the first user in the channel has the option of 
-password protecting the channel. The password protection is lifted after the 
-user who protected the channel leaves. The number of channels available to you 
-is determined by the sysop.</pre>
-<pre><a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="TextFileSection">Text File Section</a>
-</h2>
-<pre>The BBS may contain text files available for you to read online. These files 
-may be anything from BBS rules to special interest information to ANSI art. To 
-enter the Text File Section hit G from the Main prompt. The system will display 
-a list of text file areas. These are groups of related text files. Select an 
-area and a list of files contained in that text file area will be displayed or 
-hit Q to quit back to the Main prompt. Each file will be numbered. Enter a 
-number at the prompt to view a file or Q to quit back to the text file area 
-list. Remember that the Ctrl commands are available at all times while on the 
-BBS. Ctrl-S to pause, Ctrl-Q to continue, and Ctrl-C to abort.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="ExternalServices">External Services</a>
-</h2>
-<pre>External services (commonly referred to as Doors) are programs the sysop has 
-added to the system and made available to the users. Programs may be games, 
-database applications, online shopping, date/match making, and virtually 
-thousands of other possible services. Hitting X from the Main prompt will enter 
-you into the External Services menu where you may select from the listed 
-services available. Each service should contain its own online instructions and 
-help. If a service requires a charge for access the rate will be listed next to 
-the title.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2>User Lists</h2>
-<pre><b><a name="UserLists">User Lists</a> [U]</b>
---------------
-To display a list of user accounts on the BBS, users who have access to your 
-current subboard, or a logon list for the day hit U from the Main prompt. You 
-will be prompted for which list you would like to view.</pre>
-<pre>	Quick Keys:
-		User Account List [UU]
-		User Account List of Subboard [US]
-		Logon List for the Day [UL]</pre>
-<pre><a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="Information/Statistics">Information/Statistics</a>
-</h2>
-<pre><b><a name="InformationCommandMenu">Information Command Menu </a>[I]</b>
-----------------------------
-Hitting I from the Main Menu will access the Information Command prompt. 
-Information on the BBS, your user account, and the current subboard can be 
-accessed through the Information Commands.</pre>
-<pre>	I	System information
-	V	Version information on Synchronet
-	S	Information on your current subboard
-	Y	Your user account information and statistics
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="SystemInformation">System Information </a>[II]</b>
------------------------
-To view information regarding the BBS hit I Information Commands prompt. 
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="VersionInformation">Version Information</a> [IV]</b>
-------------------------
-To view information regarding the version of Synchronet your node is running 
-hit V from the Information Commands prompt.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="SubboardInformation">Subboard Information</a> [IS]</b>
--------------------------
-To view information regarding your current subboard hit S from the Information 
-Commands prompt.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="YourAccountStatistics">Your Account Statistics </a>[IY]</b>
-----------------------------
-To view your account statistics hit Y from the Information Commands prompt. 
-Statistics include credits, minutes, uploads, downloads, E-mail, posts, logons, 
-time online, and account expiration date.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h2><a name="FileTransferSection">File Transfer Section</a>
-</h2>
-<pre>The Synchronet File Transfer section is entered from the Main prompt by hitting 
-T. To return to the Main prompt from the File Transfer prompt hit Q. The File 
-Transfer section is organized in the same manner as the Message area; a 
-bi-level hierarchal system with groups and sub groups. In the case of the File 
-Transfer section there are libraries and directories. Libraries are groups of 
-related  directories. 
-Libraries might be organized such as Shareware, Graphics, etc. The Shareware 
-library, for example, may contain directories such as Windows, Business, 
-Utilities, etc. 
-The File Transfer prompt identifies your current library and directory. The 
-first name and number is your current Library. The second name and number is 
-your current directory. ? will display the Main Menu. 
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h3><a name="LibraryandDirectorySelection"><b>Library and Directory Selection</b></a>
-</h3>
-<pre>There are two ways to select libraries and directories. You can jump to the 
-library and directory #'s directly or you can jump through the libraries and 
-directories sequentially until you reach the desired selection. If you wish to 
-jump to the library and directory #'s directly you may want to view a list of 
-libraries and directories first. From the File Transfer prompt enter:</pre>
-<pre>	*	to list all available directories in your current library
-	/*	to list all available libraries</pre>
-<pre>	#	to jump to a new directory (where # is the directory number)
-	/#	to jump to a new library (where # is the library number)</pre>
-<pre>	} 	to jump forward to the next directory
-	{	to jump backward to the previous directory</pre>
-<pre>	]	to jump forward to the next library
-	[	to jump backward to the previous library
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h3><a name="Wildcards"><b>Wildcards</b></a>
-</h3>
-<pre>Many commands in the File Transfer section accept wildcards. Wildcards allow 
-you to search for or list a specific file or files based on part of a filename. 
-Wildcard syntax is entered by typing part of the filename in conjunction with 
-wildcard characters. * will wild the remainder of a filename and/or the 
-remainder of an extension and ? will wild specific character positions. No 
-extension after the filename will wild the entire extension. &lt;CR&gt; for the 
-entire filename will wild the entire filename and select/list all files. When 
-wildcards are accepted the prompt will appear as follows Filespec [*.*]. Some 
-examples of wildcard uses are:</pre>
-<pre>Filespec [*.*]:	FONT?.ZIP	=	FONT1.ZIP or FONT2.ZIP	not FONTMAN.ZIP 
-Filespec [*.*]:	FONT*.ZIP	=	FONTMAN.ZIP or FONT1.ZIP	not LANMAN.ZIP
-Filespec [*.*]:	FONTMAN.Z*	=	FONTMAN.ZIP or FONTMAN.ZOO	not FONTMAN.GIF
-Filespec [*.*]:	&lt;CR&gt;		=	all files 
-Filespec [*.*]:	FONTMAN		=	FONTMAN.ZIP or FONTMAN.GIF	</pre>
-<pre>&lt;heading&gt;
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h3><b><a name="ListingFiles">Listing Files</a>  (L)</b>
-</h3>
-<pre>L from the File Transfer prompt lists files in your current directory. 
-Wildcards may be used.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h3><b><a name="ExtendedFileInformationListing">Extended File Information Listing</a> 
-(E)</b>
-</h3>
-<pre>Hitting E from the File Transfer prompt allows you to list a file or files with 
-extended information. This displays the filename, uploader name, time to 
-download, credit cost, times downloaded, date/time uploaded, file date/time, 
-and last date/time downloaded. If an extended description is included it will 
-also be displayed. Wildcards may be used.
- 
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h3><b><a name="NewFileScan">New File Scan </a>(N)</b>
- </h3>
-<pre>N from the File Transfer prompt lists all new files uploaded since your last 
-logon. The last logon date can be changed with the Change New File Scan 
-Date/Time command (&amp;P). After selecting New File Scan you will be prompted to 
-scan your current directory, all directories in your current library, or all 
-directories in all libraries. </pre>
-<pre>	Quick Keys:
-		New File Scan Current Directory (ND)
-		New File Scan Current Library (NL)
-		New File Scan All Libraries (NA)
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h3><b><a name="SearchforFilename">Search for Filename</a>  (S)</b>
-	</h3>
-<pre>S from the File Transfer prompt allows you to search for a filename in your 
-current directory, all directories in your current library, or all directories 
-in all libraries. Wildcards may be used.
-	</pre>
-<pre>	Quick Keys:
-		Search for Filename Current Directory (SD)
-		Search for Filename Current Library (SL)
-		Search for Filename All Libraries (SA)
-<a href="#TOC"><b>
-Back to Table of Contents</b></a></pre>
-<h3><b><a name="FindTextinDescription">Find Text in Description</a>  (F)</b>
-</h3>
-<pre>F from the File Transfer prompt allows you to list files by searching for a 
-string of text in the file descriptions. Partial words may be used. Wildcards, 
-however, may not be used. You will be prompted to search your current 
-directory, all directories in your current library, or all directories in all 
-libraries. You also will be prompted to expand the search to include extended 
-file descriptions if desired.</pre>
-<pre><b><a name="QuickKeys">Quick Keys</a>:</b>
-------------------------------------------------------
-    Find Text in Description Current Directory (FD)
--------------------------------------------------------
-    Find Text in Description Current Library (FL)
--------------------------------------------------------
-    Find Text in Description All Libraries (FA)
--------------------------------------------------------
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h3><a name="FileTransferAreaInformation">File Transfer Area Information</a>
-</h3>
-<pre><b><a name="FileTransferInformationMenu">File Transfer Information Menu</a> (I)</b>
-----------------------------------
-To access the File Transfer Information prompt hit I from the File Transfer 
-prompt. The following choices are available from the prompt:</pre>
-<pre>	T	File transfer policies
-	D	Current directory information
-	U	User account list with access to current directory
-	Y	Your file transfer statistics
-	Q	Quit back to Main menu 
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="BBSFileTransferPolicy">BBS File Transfer Policy</a> (IT)</b>
------------------------------
-T from the File Transfer Information  prompt displays the BBS's file transfer 
-policies, rates, upload credit system etc.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="CurrentDirectoryInformation">Current Directory Information</a> (ID)</b>
-----------------------------------
-D from the File Transfer Information prompt displays information on your 
-current directory. 
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="UsersWithAccesstoDirectory">Users With Access to Directory</a> (IU)</b>
------------------------------------
-U from the File Transfer Information prompt lists all users with access to your 
-current directory. The list can be sorted alphabetically or numerically by user 
-number.
-<a href="#TOC"><b>
-Back to Table of Contents</b></a></pre>
-<pre><b><a name="YourFileTransferAccountStatistics">Your File Transfer Account Statistics</a> (IY)</b>
-------------------------------------------
-Y from the File Transfer prompt displays your File Transfer account statistics 
-including credits, downloads, and uploads.</pre>
-<pre><a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h3><a name="FileTransferAreaConfiguration">File Transfer Area Configuration</a>
-</h3>
-<pre><b><a name="FileTransferAreaConfigurationMenu">File Transfer Area Configuration Menu</a> (&amp;)</b>
------------------------------------------
-Hit &amp; from the File Transfer prompt to access the File Transfer Area 
-Configuration prompt. From this prompt you have the following choices:</pre>
-<pre>	B	Batch Download File Flagging toggle ON/OFF
-	P	New File Scan pointers
-	Q	Quit to Main Menu
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="BatchDownloadQuickFileFlagging">Batch Download Quick File Flagging </a>(&amp;B)</b>
----------------------------------------
-B from the File Transfer Information prompt toggles Batch Download Quick File 
-Flagging ON and OFF. This feature allows you to add files to your batch 
-download queue quickly and easily by simply with file list commands L, S, F, 
-and N. With Batch File Flagging turned on file listings will list  one page of 
-files at a time displaying a letter next to each file and a prompt at the end 
-of the list. Enter the letters of any files you wish to add to your batch 
-download queue then hit &lt;CR&gt; to continue the listings. Batch Download Quick 
-File Flagging can be set ON as your default in User Defaults (see User 
-Defaults). Remember CTRL-C (abort listing) is available from anywhere on the 
-BBS.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="ChangeNewFileScanDate/Time">Change New File Scan Date/Time</a> (&amp;P)</b>
------------------------------------
-The new file scan date and time is set each time you logoff. If you wish to new 
-scan files from a different date than the last date you logged on, hit P from 
-the File Transfer Information prompt. After entering the new date and time new 
-file scans (ND, NL, and NA) will scan from the new date and time you have set. 
-The new file scan date and time will be reset when you logoff.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h3><a name="DownloadingFiles">Downloading Files</a>
-</h3>
-<pre><b><a name="DownloadFileorFiles">Download File or Files</a> (D)</b>
---------------------------
-To download a file (or files) or add files to the Batch Download queue hit D 
-from the File Transfer prompt. You will be prompted to enter the filename. You 
-may use wildcards.</pre>
-<pre>Filespec [*.*]: filename.ext or wildcards</pre>
-<pre>All file matches in you current directory will be listed one by one with 
-download options after each file (see Download Options). If no matches are 
-found in your current directory the search will automatically expand to all 
-directories in all libraries. If a wildcard was entered the next file in the 
-search will be displayed with download options (see Download Options) after 
-each file is downloaded, entered into the batch/bidirectional queue or skipped.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="DownloadUsertoUserFile">Download User to User File</a> (/D)</b>
--------------------------------
-To download personal user to user file transfer sent to you by another user hit 
-/D from the File Transfer prompt. All user to user files sent to you will be 
-listed one by one with download options (see Download Options) after each file. 
-User to user file transfers may not be allowed on all systems.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><a name="DownloadOptions"><b>Download Options</b></a>
-----------------
-Download options vary depending on which and how many protocols the sysop has 
-installed on the BBS. The most common protocols are Xmodem, Ymodem, Zmodem, and 
-Ymodem-G. The download options are:
-	</pre>
-<pre>	protocol	Download file with selected protocol (usually X, Y, Z, or G).
- 	B		Add file to Batch/Bidirectional Download queue (see Batch
-			File Transfers).
-	Q	Quit to File Transfer prompt and abort search.
-	&lt;CR&gt;	Display next file and download options. Will quit to File
-		Transfer prompt on last file.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h3><a name="UploadingFiles">Uploading Files</a>
-</h3>
-<pre><b><a name="UploadFileorFiles">Upload File or Files</a> (U)</b>
-------------------------
-To upload a file to the current directory or add a file or files to the Batch 
-Upload Queue (see Batch File Transfers) hit U from the File Transfer prompt. 
-You will be prompted for the filename. Now see Upload Procedures.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="UploadUsertoUserFile">Upload User to User File</a> (/U)</b>
------------------------------
-To upload a file to another user or users hit /U from the File Transfer prompt. 
-You will be prompted to enter the filename. After confirming the filename you 
-will be prompted to select the destination user or users. Enter the user's 
-name, user number, or partial name. After the user has been selected you may 
-select additional users or &lt;CR&gt; when finished. User to user file transfers may 
-not be allowed on all systems. Now see Upload Procedures.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="UploadFiletoSysop">Upload File to Sysop</a> (Z)</b>
-------------------------
-To upload a file to the sysop's file directory hit Z from the File Transfer 
-prompt. You will be prompted for the filename. User to sysop file uploads may 
-not be available on all systems. Now see Upload Procedures.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="UploadProcedures">Upload Procedures</a>:</b>
-------------------
-You now may be asked if the file is part of a multiple file set. If the file is 
-not a part of a set (1 of 3 for example) then hit &lt;CR&gt; or N. You may now be 
-asked to rate the file based on its contents. Next you will be prompted to 
-enter the one line file description as you wish it to appear in the file 
-listing. Then you may be asked to enter an extended description. If you do not 
-wish to enter an extended description hit &lt;CR&gt; or N. When entering an extended 
-description all Synchronet editor commands are available to you (see Synchronet 
-Message Editor) in the description unless you have selected another (external) 
-editor as your default editor. /S will save your description when you are 
-finished.</pre>
-<pre>After the extended description you will be prompted with upload options. The 
-upload options are:</pre>
-<pre>	protocol	Upload file with selected protocol (usually X, Y, Z, or G).
- 	B		Add file to Batch Upload queue (except user to user).
-	Q		Quit to File Transfer prompt and abort search.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="Remove/EditFile">Remove / Edit File</a> (R)</b>
-----------------------
-To remove any file or edit the description or extended description of any file 
-you have uploaded on to the BBS hit R from the File Transfer prompt.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h3><a name="BatchFileTransfers"><b>Batch File Transfers</b></a>
-  </h3>
-<pre>You can make uploading and or downloading multiple files much easier by using 
-batch file transfers. In batch file transfers you have two queues (like holding 
-tanks) in which to store files to be transferred. The upload queue holds files 
-to be uploaded and the download queue holds files to be downloaded. To place 
-files into the queues use the standard upload and download commands from the 
-File Transfer prompt but select B for batch instead of a protocol when prompted 
-with upload or download options. The upload and download commands that accept 
-batch transfers are D, U, /D, and Z. The maximum number of files you may store 
-in your batch queues is determined by the sysop.  </pre>
-<pre>An additional option available with batch file transfers is bidirectional file 
-transfers. Bidirectional file transfers allow you to upload and download files 
-simultaneously in the same amount of time it takes to upload or download in one 
-direction. Using bidirectional file transfers you can optimize your time online 
-by virtually doubling your file transfer speed if you are uploading and 
-downloading. To use bidirectional file transfers your communications software 
-must either support bidirectional protocols directly or allow you to add them 
-as external protocols. Currently the two most popular bidirectional protocols 
-are Bimodem and HS/Link. All modems should support bidirectional file transfers 
-without any problem except for US Robotics HST modems in high speed modes. 
-These modems are designed to send high-speed in one direction and 450bps in the 
-other simultaneously. You will not benefit from bidirectional file transfers 
-with this modem at high-speed. If you have a US Robotics Dual Standard modem 
-make sure you are calling in the v.32 or v.32bis mode to utilize bidirectional 
-file transfers.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="Batch/BidirectionalCommands">Batch/Bidirectional Commands</a> (B)</b>
---------------------------------
-To use Batch/Bidirectional commands hit B from the File Transfer prompt. If you 
-have no files in either your upload or download queues you will not be able to 
-use Batch/Bidirectional commands until you add at least one file to one of your 
-queues. Only protocols supporting batch uploads and downloads will be available 
-from these commands. Xmodem for example will not be an option. The 
-Batch/Bidirectional commands are:</pre>
-<pre>	B	Start a bidirectional file transfer
-	U	Upload files from upload queue
-	D	Download files from download queue
- 	L	List files in Upload and Download queues
-	R	Remove a file or files from Upload or Download queues
-	C	Clear (remove all) files from Upload or Download queues
-	Q	Quit to File Transfer prompt
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h3><a name="FileExtraction/TempDirectory">File Extraction / Temp Directory</a>
- </h3>
-<pre>If implemented on the BBS, file extraction allows you to extract files from an 
-archived file (ZIP, ARC, LZH, etc.) and download only the file or files you 
-need from that archive. This can be extremely helpful if you need only one 50k 
-file from a 1MB ZIP file online. </pre>
-<pre>You can even extract files from nested archives. For example if an archive 
-called FONTMAN.ZIP contained two archives within itself, BLUE.ZIP and RED.ZIP 
-and BLUE.ZIP contained two files called FILE1.FON and FILE2.FON you would be 
-able to download just the file FILE1.FON if that were the only file you needed.</pre>
-<pre>All file extraction is done in your Temp Directory. This is an area you may 
-extract files to and download from. You may work on one original archive at a 
-time in the Temp Directory. The Temp Directory may, however, contain many files 
-extracted from the original archive.  </pre>
-<pre>The Temp Directory is also used to create and download a new file scan list or 
-a complete list of all files on the BBS.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b><a name="TempDirectoryCommands">Temp Directory Commands</a> (T)</b>
----------------------------
-Hit T from the File Transfer prompt to access the Temp Directory prompt. From 
-this prompt the following commands are available:</pre>
-<pre>	E	Extract files from an archive into the Temp Directory
-	N	Create a New Files list
-	F	Create a list of all files on the BBS
-	A	Add or create a Temp File 
-	D	Download a Temp File
-	I	Information on files
-	V	View the contents of any archive located in Temp Directory
-	L	List all files in the Temp Directory
-	X	Extract from an archive located in Temp Directory
-	R	Remove file or files from Temp Directory
-	Q	Quit to File Transfer prompt</pre>
-<pre><a name="ExtractfromarchiveinTempDirectory"><b>1) Extract from archive in Temp Directory</b></a>
------------------------------------------
-To extract files from an archive into the Temp Directory hit E from the Temp 
-Directory prompt. Enter the filename you wish to extract from. You may use a 
-wildcard. 
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b>2) <a name="AddfilestoTempfile">Add files to Temp file</a></b>
--------------------------
-To download from the Temp Directory you must first create a Temp File 
-containing any files you wish to download from the Temp Directory. To create a 
-Temp File or add to a Temp File select A from the Temp Directory prompt. You 
-can view the contents on any archives located in the Temp Directory by 
-selecting V from the Temp Directory prompt. If you wish to extract files from a 
-nested archive located in the Temp Directory select X. 
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<pre><b>3) <a name="DownloadTempfile">Download Temp file</a></b>
----------------------
-When your Temp File contains all the files you wish to download select D from 
-the Temp Directory prompt to download the Temp File.</pre>
-<pre><a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-<h3><b><a name="Creatinganddownloadingfilelists">Creating and downloading file lists</a> &nbsp; </b>
- </h3>
-<pre>Entering N from the Temp Directory prompt will create a file listing of all new 
-file uploads called NEWFILES.TXT, and place the file in the Temp Directory. To 
-download the file hit A to create a Temp File then D to download the Temp File. 
-The list is a standard ASCII text file and can be read from any standard text 
-editor or wordprocessor. Remember that creating this file in the Temp Directory 
-will delete any files that are already in the directory. </pre>
-<pre>To create and download a complete file list of all files on the BBS hit F from 
-the Temp Directory prompt. This will create a file called FILELIST.TXT. Then 
-hit A to create a Temp File then D to download the Temp File. Again, creating 
-the FILELIST.TXT will erase all existing files in the Temp Directory.
-
-<a href="#TOC"><b>Back to Table of Contents</b></a></pre>
-
-<!--webbot bot="Include" U-Include="_borders/bottom.htm" TAG="BODY" startspan -->
-
-<hr>
-<p><b><a href="http://www.synchro.net/copyright.html">Copyright</a> � 2000 by </b> <a href="http://www.synchro.net/author.htm"><b>Rob Swindell</b><br>
-</a>
-
-<a href="http://www.synchro.net"><font size="2"><br>
-Synchronet BBS Software</font></a>  <font size="2">  (Synchronet)
-Version 3 is comprised of several documentation,<br>
-library, executable, and <a href="http://www.synchro.net/source.html">source code</a> 
-files, all of which are covered by the<a href="http://www.fsf.org/copyleft/gpl.html">
-<br>
-GNU General Public License</a>  with the exception of the following portions
-covered by<br>
-the <a href="http://www.fsf.org/copyleft/lesser.html">GNU Lesser General Public License</a>:
-SMBLIB and XSDK.<br>
-<br>
-Synchronet Version 2 (for DOS and OS/2) and its source code was released to the<a href="http://www.fsf.org/philosophy/categories.html#PublicDomainSoftware">
-<br>
-Public Domain</a>  by <a href="ftp://vert.synchro.net/main/sbbs/manifest.txt">Digital Dynamics</a> 
-in 1997 and remains Public Domain software today.<br>
-Synchronet Version 3 is not Public Domain software.</font></p>
-<p align="left"><font size="2"><a href="http://www.synchro.net/author.html">Rob Swindell<br>
-</a>PO Box 501<br>Yorba Linda, CA 92885<a href="http://www.synchro.net"><br>
-http://www.synchro.net</a>
-
-</font></p>
-<p align="left"><font size="2">For the complete Copyright Information please
-read the <a href="http://www.synchro.net/copyright.html">Copyright Documentation</a>
-.</font></p>
-
-<!--webbot bot="Include" endspan i-checksum="55766" -->
-
-<pre>&nbsp;</pre>
-
-</body>
-
-</html>
diff --git a/docs/user_editor.html b/docs/user_editor.html
deleted file mode 100644
index a7f385e200..0000000000
--- a/docs/user_editor.html
+++ /dev/null
@@ -1,546 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<title>User Editor</title>
-</head>
-
-<body>
-
-<!--webbot bot="Include" U-Include="_borders/top.htm" TAG="BODY" startspan -->
-
-<a href="http://www.synchro.net"><img border="0" src="images/synclogo_fancyred.gif" alt="Synchronet BBS - Multinode Bulletin Board Software" width="626" height="86"></a>
-
-<hr>
-
-<!--webbot bot="Include" endspan i-checksum="23126" -->
-
-<p><a name="top"></a><a href="sysop.html#TOC">Back to Table of Contents</a></p>
-
-<h2><a name="UsingUserEditLocally">[6.1] - Using User Edit Locally&nbsp;</a></h2>
-
-<pre><b>Graphical Synchronet User Editor <i><font color="#FF0000">(v3+ Only)</font></i></b></pre>
-<pre>The User Editor application can be executed from the menu bar of the Synchronet 
-Control Panel as shown below.
-
-<img border="0" src="images/uedit_v3_exe.gif" width="430" height="151"></pre>
-<pre>Below is a screenshot of the GUI User Editor with a sample user and data
-shown.  How this screen looks will vary depending upon your configuration
-and what data you decide to collect from new users. There are many options
-and settings available in the User Editor and you should spend some time
-getting familiar with this feature.</pre>
-<pre><img border="0" src="images/uedit_v3.gif" width="453" height="403"></pre>
-<pre><b>Online Synchronet User Editor</b>
-
-<b>Alt-U   <i><font color="#FF0000">(v2 Only)</font></i></b>
-	The sysop can locally hit Alt-U at any time within Synchronet to bring
-        up the User Edit function with the user that is online as the current
-        user to edit. After exiting User Edit, the sysop will return to the
-        place where he was prior to hitting Alt-U. </pre>
-<pre><b>U</b>
-	At the Reading Mail or Reading All Mail prompts, hitting 'U' will pop
-	the sysop into User Edit with the author of the previous message as the
-	current user. Hitting 'U' at the Waiting for call screen will start
-	User Edit. Hitting 'U' from the Reading Messages (O)perator menu will
-	start User Edit too.
-
-<b>;UEDIT
-</b>        Typing ';UEDIT' at either the Main or Transfer prompts will also pop
-	the sysop into User Edit and if a user number or name is specified
-	(e.g. ;UEDIT 20 or ;UEDIT BOB), then that user will be the current
-	user.</pre>
-<h2><a name="UsingUserEditRemotely">[6.2] - Using User Edit Remotely</a></h2>
-<pre>When a remote sysop initiates User Edit (with the U or ;UEDIT command), User
-Edit functions a little differently than when a local sysop initiates it.
-A remote sysop cannot raise any user's Level above his own and can't give a
-user any Flags or Exemptions that he/she doesn't have. A remote sysop can not
-edit any information of any users with a Level higher than his own and their
-passwords, real names, and phone numbers aren't displayed to him/her.
-
-<b>User Edit Screen Example:</b>
-
-<font color="#000080">Alias     : The Albatross                   Password     : MYPASS    10/12/91
-Real Name : Joe Schmoe                      Phone number : 714-555-1212
-Address   : 404 N.S. West Ln.               Age/Sex/BD   : 31 M 03/08/61
-Location  : Irvine, Ca                      Zip Code     : 90001
-Note      :                                 Handle       : J Schmoe
-Computer  : 386DX-25 ISA SVGA 4 60 ST506    Modem type   : 14.4/V32
-
-First on  : 07/19/91  Expire    : 12/18/95  Last on   : 09/12/92  20:13
-Time on   : 2831      Today     : 0   105   Last call : 9   90    Extra : 0
-Logons    : 156       Today     : 0   6     Posts     : 39  24    Today : 0
-E-mails   : 22        To sysop  : 3         Waiting   : 0         Today : 0
-
-Uploads   :         3,085 bytes in 1 files
-Downloads :    90,389,401 bytes in 282 files 
-Credits   :     4,007,324 free: 0 (0 per day)
-Minutes   :             0
-
-Sec Level :
-Flags #1  :   CD       L N              Flags #3  : AB  E
-Flags #2  :       G                     Flags #4  :      F H
-Exemption :                             Restricts :
-
-</font><b>User Edit Screen Explanation</b></pre>
-<pre>The 1st line contains either the alias (if aliases are allowed) or the name
-of the user, the user's password, and the date the password was last modified.
-
-The 2nd line contains the user's real name and the user's phone number.
-
-The 3rd line contains address of the user, the user's age, sex, and birthday in
-the form MM/DD/YY or DD/MM/YY if European Date format is enabled.
-
-The 4th line contains the user's location (normally City, State) and Zip
-(or postal) code.
-
-The 5th line contains a public note about the user and the user's chat handle.
-
-The 6th line contains the user's computer description and modem type.
-
-The 7th line contains the user's private comment - only readable or editable
-by a sysop. If there is a '$' after the &quot;Comment&quot; label, then this user has
-a message file currently attached and is view/editable with the '$' command.
-If the comment is blank and there isn't an extended comment, this line is
-blank.
-
-The 8th line contains the date the user was first on, the user's expiration
-date, and the date and time the user was last on. Dates are in the form
-MM/DD/YY or DD/MM/YY if European date format is enabled.
-
-The 9th line contains the total time (in minutes) the user has been online,
-how much time today, the maximum time he is allowed per day, amount of time on
-his most recent call, the maximum time he is allowed per call, and any extra
-time the user may have accumulated through file uploads.
-
-The 10th line contains the total number of logons for this user, the number
-of logons today, the maximum number of logons this user is allowed per day,
-total number of messages posted by this user, the user's current post/call
-ratio, and total posts today.
-
-The 11th line contains the total number of e-mails sent by this user, total
-number of e-mails sent to user #1, number of e-mails currently in user's
-mailbox, and the number of e-mails this user has sent today.
-
-The 12th line contains the user's NetMail forwarding address. If the user
-doesn't have a NetMail forwarding address specified, this line is blank.
-
-The 13th line contains the total number of bytes uploaded by this user and
-the total number of files.
-
-The 14th line contains the total number of bytes downloaded by this user and
-the total number of files. If the user has had any suspected leech downloads,
-the number of leech downloads is displayed here too.
-
-The 15th line contains the number of credits this user currently has. The
-free credits are given on a daily basis as determined by the sysop.
-
-The 16th line contains the amount of time credits this user has (in minutes).
-
-The 18th line contains the user's Security Level.
-
-The 19th line contains the user's Flag Sets 1 and 2 (if any).
-
-The 20th line contains the user's Flag Sets 3 and 4 (if any).
-
-The 21st line contains the user's Exemption and Restriction Flags that are set
-(if any).
-
-The 23rd line contains the User Edit command prompt which contains the number
-of the current user and the total number of user slots on the system.
-
-If the current user is deleted or inactive, then the 1st line will contain a
-string that specifies this status and all other lines will be shifted down one.</pre>
-<h2><a name="UserEditCommands">[6.3] - User Edit Commands</a></h2>
-<pre>As with most Synchronet command prompts, hitting '?' will display a menu
-of commands.</pre>
-<pre>  A  Alias and Chat Handle		 S  Sex (Gender)		      
-  B  Birthday                            T  Set Text Search String           
-  C  Computer                            U  Upload/Download Stats            
-  D  Delete/Deactivate/Restore           V  Validate User                    
-  E  Exemptions                          W  Password                         
-  F  Flags                               X  View Extended Comment            
-  G  Go to a User                        Y  Copy User to Another Slot        
-  H  Edit/Create Extended Comment        Z  Restrictions                     
-  I  Inspect/Edit User's Defaults        ]  Go Up One User                   
-  J  Edit Minutes                        [  Go Down One User                 
-  K  Edit Dates                          }  Search Up                        
-  L  Location and Address                {  Search Down                      
-  M  Security Level                      /  Set ARS Search String            
-  N  Note                                ~  Set Leech Download Counter       
-  O  Comment                             +  Adjust Credits                   
-  P  Phone Number                        *  Adjust Minutes                   
-  Q  Quit to Main Menu                   $  Edit Credits                     
-  R  Real Name                           #  View User Questionnaire          
-
-The available commands are listed below with explanations.
-
-<b>A - Alias and Chat Handle:
-</b>        This command will let you edit the user's alias - a 25 character field
-        that must start with a non numeric character. You can also edit the
-        user's chat handle (an 8 character field) with this command.
-
-<b>B - Birthday
-</b>        You can edit the user's birthday with this command. The form of the
-        date is forced as either MM/DD/YY or DD/MM/YY (depending on the
-        setting of the European date option).
-
-<b>C - Computer Description:
-</b>        You can edit the user's 30 character computer description field with
-        this command.
-
-<b>D - Delete/Deactivate/Restore/Activate:
-</b>        If the current user is at normal status (not deleted or inactive),
-        hitting this command will prompt you if you wish to delete or
-        inactivate this user. If you delete a user, his account will be saved
-        for number of days since his last logon. This number of days is
-        specified by the sysop in the SCFG. After this number of days,
-        a new user may obtain this slot. Inactive slots are the same as deleted
-        ones, except that they are reserved and can't be used by new users.
- 
-        If the current user is deleted or inactive (as specified by the 1st
-        line of the screen), this command will allow you to restore the user
-        to normal status.
-
-<b>E - Exemption Flags:</b>
-        Exemptions are used by the sysop to give user's extended privilege
-        to the system. For example, you might want to give a trustworthy
-        user the right to remove, move, and edit descriptions of all files
-        in the Transfer Section. Normally users can only remove or edit the
-        description of a file they've uploaded, but a user with the 'R'
-        exemption can move any file, remove any file, or edit any file
-        description in the Transfer Section. This ability is normally only
-        given to sysops.
-
-        Using this command you can toggle the state of an Exemption Flag
-        by hitting the corresponding letter. To view a menu of the available
-        exemptions, hit '?' or [ENTER] to stop editing the Exemption Flags.
-
-        The following is a list of the available exemptions and their
-        descriptions ($ indicates that sysops have this capability):
-
-<b>        A - Anonymous
-</b>                Allows user to post and send e-mail anonymously.
-<b>        C - Chat $
-</b>                Allows user to page the local sysop with the ;CHAT command
-                regardless of the sysop availability state (Scroll-Lock).
-<b>        D - Download
-</b>                Allows user to download files even when the user doesn't
-                have enough credits.
-<b>	E - Expire by Time
-</b>		Prevents user account from expiring when the user runs out of
-		time and the SCFG-&gt;System-&gt;Toggle Options-&gt;User Expires When
-		Out of Time is set to YES.
-<b>        F - FidoNet Crash/File Request/Return Receipt NetMail
-</b>                Allows user to send NetMail using title specifiers:
-                &quot;CR:&quot; to over-ride default crash status to ON
-                &quot;FR:&quot; to send file requests (FREQ)
-		&quot;FA:&quot; to send file attachments
-                &quot;RR:&quot; to request a return receipt
-                See Sending FidoNet NetMail for more information.
-<b>        G - Multiple Nodes $
-</b>                Allows user to be logged on to more than one node at a time.
-                This exemption is useful for Guest accounts.
-<b>        I - Interrupt Nodes $
-</b>		Allows user to interrupt (hang up on) other nodes with the
-                ;INTR command.
-<b>        J - Chat Channel Cost
-</b>                User will not be charged credits to change chat channels.
-<b>        L - Logons per day
-</b>                Allows user to logon the system an indefinite number of times
-                per day.
-<b>        M - Modem Rate $
-</b>                Allows user to logon any node at any modem speed regardless
-                of what the minimum modem speed for that node is.
-<b>        N - Node Locking $
-</b>                Allows user to toggle the lock status of any node with the
-                ;LOCK command and log on a locked node.
-<b>        P - Permanent
-</b>                This user account will not be automatically deleted because
-                of inactivity.
-<b>        Q - Quiet/Anonymous Node $
-</b>		Allows user to toggle the quiet or anonymous state of his node
-                with the ;QUIET or ;ANON commands respectively. Nodes that are
-                in quiet mode appear to be &quot;Waiting for call&quot; to the other
-                nodes. Anonymous modes appear to have &quot;UNKNOWN USER&quot; online.
-<b>        R - Remove/Move/Edit Descriptions of Files $
-</b>                Allows user to remove, move, or edit the descriptions of any
-                file in the Transfer Section that the user has access to.
-<b>        S - Send NetMail Cost
-</b>                User will not be charge credits for sending NetMail.
-<b>        T - Time Online
-</b>                Allows the user to remain online indefinitely - no time limit.
-                The inactivity timer remains active.
-<b>        X - External Programs
-</b>                User will not be charged credits to run external.
-
-<b>F - Flags:
-</b>        This command lets you toggle the state of all Flags. Hitting a number
-        will allow you to edit that particular flag set. Hitting '?' will
-        display a menu that is used to remind the sysop of the meaning of each
-        Flag. These menus are located in the TEXT\MENU directory and names are
-        FLAGS1.ASC, FLAGS2.ASC, FLAGS3.ASC, and FLAGS4.ASC. Hitting [ENTER]
-        will end the editing of the flags.
-
-        The Flags in conjunction with the Level can by used by the sysop to
-        limit access to Message Groups, Sub-boards, External Programs,
-        General Text File Sections, Transfer Libraries, and Directories.
-
-<b>G - Go to a User:
-</b>        This command will let you change the current user into another user
-        by entering the user's name, partial name, or number. It should be
-        noted that the fastest way to change the current user is to type the
-        number of the user directly at the User Edit prompt.
-
-<b>H - Edit/Create Extended Comment:
-</b>        This command will let the sysop edit or view an existing extended
-        comment or create a new one. An extended comment is a free-form message
-        file that a sysop creates that contains information pertaining to this
-        user. A '+' after the &quot;Comment:&quot; string on the 5th line of the User
-        Edit screen specifies that an extended comment already exists.
-
-<b>I - Inspect or Edit User's Default Settings:
-</b>        This command will bring up the current user's default settings for
-        ANSI terminal emulation, screen length, screen pausing, spinning
-        cursor, auto new file scan, clear screen after messages, auto menu
-        display, and default QUIET mode (if the user has the 'Q' exemption).
-
-<b>J - Edit Minutes:
-</b>        This command allows the sysop to edit the current user's minute field.
-
-<b>K - Edit Date Fields:
-</b>        The command will let you edit the date fields for this user's last
-        logon, first logon, expiration date, and password modification date.
-        All dates are forced to the form MM/DD/YY or DD/MM/YY if European
-        date format is enabled.
-
-<b>L - Location:
-</b>        This command will allow the sysop to edit the user's address, location,
-        and zip/postal code fields.
-
-<b>M - Security Level:
-</b>        The sysop can edit the user's Security Level with this command. The
-        user's Level is a decimal number in the range 0 to 99. Higher levels
-        indicate higher access. Users with a level of 90 or higher are
-        considered to be sysops. The sysop can use the Level in conjunction
-        with the Flags to limit access to Message Groups, Sub-boards, General
-        Text File Sections, External Programs, Transfer Libraries, and
-        Directories. The Level also determines the user's maximum time online
-        per day, per call, maximum logons per day, and maximum number of lines
-        per message (post or e-mail).
-
-<b>N - Note/Name:
-</b>        If aliases are allowed on the system, this command will allow the sysop
-        to edit the user's public note. This field is displayed next to the
-        user's alias in user listings and the logon list.
-
-        If aliases are not allowed, this command allows the sysop to edit the
-        user's name. The user's name is a 30 character field that must begin
-        with a printable non-numeric character. The first letter of each word
-        in the user's name is forced uppercase.
-
-<b>O - Sysop Comment:
-</b>        This command allows the sysop to edit the private 60 character comment
-        field regarding this user.
-
-<b>P - Phone Number:</b>
-        The sysop can edit the user's phone number.
-
-<b>Q - Quit User Edit:
-</b>        Exits the User Edit function and returns the sysop to where he was
-        prior to initiating User Edit.
-
-<b>R - Real Name (if aliases are allowed):
-</b>        This command allows the sysop to edit the user's real name - a 25
-        character field. The first letter of each word in this field is forced
-        uppercase.
-
-<b>S - Sex:
-</b>        A single uppercase character is used to describe the sex of the user
-        (normally 'M' or 'F'), but can be changed to any uppercase character
-        with this command.
-
-<b>T - Set Text Search String:
-</b>        Use this command to set the text string to search for (using the {
-        and } commands).
-
-<b>U - Upload/Download Statistics:
-</b>        The sysop can edit the user's upload and download statistics with
-        this command. The statistics are the number of bytes and files uploaded
-        and the number of bytes and files downloaded. These are numeric fields.
-
-<b>V - Quick-Validate User:
-</b>        This command will display the ten quick-validation sets (0 to 9)
-        for quickly setting the user's Security Level, Flags, Exemptions,
-        Restrictions, Expiration Date, and/or Credits. The Quick-Validation
-        sets are set by the sysop in SCFG-&gt;System-&gt;Quick-Validation Values.
-
-<b>W - Password:
-</b>        Use this command to change the user's password. The password
-        modification date doesn't change when using this command (use 'K'
-        to change the password modification date).
-
-<b>X - View Extended Comment:
-</b>        This command allows the sysop to the user's extended comment if it
-        exists.
-
-<b>Y - Copy User to Another Slot:
-</b>        This command will copy the user data of the current slot to another
-        valid slot. This will overwrite any user information in the
-        destination slot.
-
-<b>Z - Restriction Flags:
-</b>        A sysop can give a user restrictions from certain sections or features
-        of the BBS by setting one or more valid Restriction Flags. Typing the
-        letter of a restriction will toggle its status, '?' will display a menu
-        of the valid restrictions and [ENTER] will end the flag editing
-        procedure. The valid restrictions and their descriptions follow:
-
-<b>        A - ANSI and Ctrl-A Codes
-</b>                User can't write messages containing either ANSI escape
-                sequences or Ctrl-A attribute codes.
-<b>        B - Beep
-</b>                User can't put beeps (Ctrl-G, ASCII 7) into messages
-                (posts, mail, or chat).
-<b>        C - Chat
-</b>                User can't use any chat functions.
-<b>        D - Download
-</b>                User can't download files.
-<b>        E - E-mail
-</b>                User can't e-mail other users (can still e-mail sysop).
-<b>        F - Forward Mail
-</b>                User can't forward mail.
-<b>        G - Edit Defaults
-</b>                User can't edit their default settings.
-<b>        J - Quoting
-</b>                User can't use internal message quoting.
-<b>        K - Read Sent Mail
-</b>		User can't read/kill sent mail.
-<b>        L - Logon Once a Day
-</b>                User will only be allowed to logon a maximum of once a day
-                regardless of what his Level allows normally.
-<b>        M - Networked Mail
-</b>                Can't send NetMail.
-<b>        N - Networked Subs
-</b>                User can't post on networked sub-boards.
-<b>        P - Post
-</b>                User can't post messages on Sub-Boards.
-<b>        Q - QWK Network Node
-</b>                This user account is used for a QWK Network Node BBS system.
-                This restriction automatically puts the user at the QWK prompt
-                upon logon and no other sections of the BBS are accessible.
-                This restriction also allows the user to upload REP packets
-                containing messages that are from users other than the current
-                user.
-<b>        R - Remove/Edit Descriptions of Files
-</b>                User can't remove or edit file descriptions of files he has
-                uploaded.
-<b>        S - E-mail Sysop
-</b>                User can't send e-mail (feedback) to user #1.
-<b>        T - Transfer Section
-</b>                User can't access the Transfer Section at all.
-<b>        U - Upload
-</b>                User cannot upload files to the Transfer Section.
-<b>        W - Auto-message
-</b>                User cannot write to auto-message.
-<b>        X - External Programs
-</b>                User can't access the external program menu ('X' from Main
-                Menu).
-<b>        Y - Are you sure (y/N) ?
-</b>                The user will be forced to answer Yes prior to performing
-                any function from the Main or Transfer Sections.
-
-<b>] - Move Up One User Slot:
-</b>        Increment the current user number by one. If the current user is
-        the last user, the current user will become user number 1 (wrap).
-
-<b>[ - Move Down One User Slot:
-</b>        Decrement the current user number by one. If the current user is
-        the first user, the current user will become the last user (wrap).
-
-<b>(Number) - Change to User Number:
-</b>        Entering a user number directly at the User Edit command prompt will
-        make that user the current user.
-
-<b>/ - Set Search String:
-</b>        Use this command to set the AR string to search for (using the { and
-	} commands). See the ARS Security chapter for explanation of AR string.
-
-<b>} - Search Forward:
-</b>        Searches from the current user to the last user for the string set by
-	the '/' (ARS) or 'T' (text) command.
-
-<b>{ - Search Backward:
-</b>        Searches from the current user to the first user for the string set by
-	the '/' (ARS) or 'T' (text) command.
-
-<b>~ - Set Leech Download Counter:
-</b>        Every time a user downloads a file and the BBS detects the possible
-        use of a 'leech' protocol, a counter is incremented and the value is
-        displayed on the Downloaded Bytes and Files line if it is not zero. To
-        change the value of this counter, use the '~' command.
-
-<b>+ - Add or Subtract Credits:
-</b>        This command will let you add or subtract credits to/from a user's
-        account. Putting an 'M' after the number will multiply the amount by
-        one megabyte (1,048,576) or a 'K' will multiply the amount by one
-        kilobyte (1024). Placing a '$' will multiply with the number by the
-        number of credits per dollar in the current system configuration.
-        Placing a minus sign before the number will perform a subtraction of
-        credits.
-
-<b>* - Add or Subtract Minutes:
-</b>        This command will let you add or subtract time from the user's minute
-        field. Putting an 'H' after the number will multiply the amount by 60
-        minutes (an hour). Placing a minus sign before the number will perform
-        a subtraction of minutes.
-
-<b>$ - Edit Credits:
-</b>        This command allows you to edit the amount of credits of the current
-        user.
-
-<b># - View SIF Questionnaire:
-</b>        If the sysop has specified a SIF questionnaire in the SCFG and the
-        current user has answered the questionnaire, this command will allow
-        the sysop to view the answered questionnaire. An output SIF (usually
-        an abbreviation of the input SIF) will be used if specified in the
-        SCFG, if not specified the output SIF will be used for viewing.</pre>
-<p><a href="#top"><b>Back to Top</b></a></p>
-
-<!--webbot bot="Include" U-Include="_borders/bottom.htm" TAG="BODY" startspan -->
-
-<hr>
-<p><b><a href="http://www.synchro.net/copyright.html">Copyright</a> � 2000 by </b> <a href="http://www.synchro.net/author.htm"><b>Rob Swindell</b><br>
-</a>
-
-<a href="http://www.synchro.net"><font size="2"><br>
-Synchronet BBS Software</font></a>  <font size="2">  (Synchronet)
-Version 3 is comprised of several documentation,<br>
-library, executable, and <a href="http://www.synchro.net/source.html">source code</a> 
-files, all of which are covered by the<a href="http://www.fsf.org/copyleft/gpl.html">
-<br>
-GNU General Public License</a>  with the exception of the following portions
-covered by<br>
-the <a href="http://www.fsf.org/copyleft/lesser.html">GNU Lesser General Public License</a>:
-SMBLIB and XSDK.<br>
-<br>
-Synchronet Version 2 (for DOS and OS/2) and its source code was released to the<a href="http://www.fsf.org/philosophy/categories.html#PublicDomainSoftware">
-<br>
-Public Domain</a>  by <a href="ftp://vert.synchro.net/main/sbbs/manifest.txt">Digital Dynamics</a> 
-in 1997 and remains Public Domain software today.<br>
-Synchronet Version 3 is not Public Domain software.</font></p>
-<p align="left"><font size="2"><a href="http://www.synchro.net/author.html">Rob Swindell<br>
-</a>PO Box 501<br>Yorba Linda, CA 92885<a href="http://www.synchro.net"><br>
-http://www.synchro.net</a>
-
-</font></p>
-<p align="left"><font size="2">For the complete Copyright Information please
-read the <a href="http://www.synchro.net/copyright.html">Copyright Documentation</a>
-.</font></p>
-
-<!--webbot bot="Include" endspan i-checksum="55766" -->
-
-</body>
-
-</html>
diff --git a/docs/usercom.txt b/docs/usercom.txt
deleted file mode 100644
index 167d1afb1e..0000000000
--- a/docs/usercom.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-USER.COM Documentation
-----------------------
-
-This utility will extract the activity and statistics of a particular user from
-the Synchronet detailed log files.
-
-usage: user <username> <logfiles>
-
-'username' is the name or number of the user whose doings should be extracted.
-           It should be placed in double quotes if the name is more than one
-           word, and is case sensitive.
-'logfiles' is a log filename or list of log files to search (wildcards are ok)
-
-It is useful to redirect the output of USER.COM into a text file for viewing.
-
-Examples:  user "Bill Wagstaff" c:\sbbs\data\logs\07*.log > bwag.txt
-           user 0155 ..\maylogs\*.log ..\junlogs\*.log >rbar.txt
diff --git a/docs/utility_reference.html b/docs/utility_reference.html
deleted file mode 100644
index b4311f7eaa..0000000000
--- a/docs/utility_reference.html
+++ /dev/null
@@ -1,1249 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<title>External Utility Reference</title>
-</head>
-
-<body>
-
-<!--webbot bot="Include" U-Include="_borders/top.htm" TAG="BODY" startspan -->
-
-<a href="http://www.synchro.net"><img border="0" src="images/synclogo_fancyred.gif" alt="Synchronet BBS - Multinode Bulletin Board Software" width="626" height="86"></a>
-
-<hr>
-
-<!--webbot bot="Include" endspan i-checksum="23126" -->
-
-<p><a name="top"></a><a href="sysop.html#TOC">Back to Table of Contents</a></p>
-<h2>[15.1] - <a name="CHKSMB">CHKSMB</a>  - Checks mail/message base for
-validity</h2>
-<pre><b>usage: chksmb [/opts] &lt;filespec.SHD&gt;</b>
-
-opts:
-       s - stop after errored message base
-       p - pause after errored message base
-       q - quiet mode (no beeps while checking)
-
-<b><i>WARNING:</i></b> All BBS nodes should be DOWNed (offline) or inactive when utilizing
-	 the CHKSMB utility.
-
-The purpose of the CHKSMB utility is to insure that mail and/or message bases
-are valid.  If you suspect that your mail, or one of your message bases has
-become corrupted, you can run CHKSMB.  This will inform you of any possible
-corruption, and display information which may be useful in determining the
-cause of the corruption.
-
-Example command line:
-
-	<b>CHKSMB \SBBS\DATA\MAIL \SBBS\DATA\SUBS\*.SHD</b>
-
-to check your e-mail and sub-board data files for possible corruption.
-
-Most mail and/or message bases which are corrupted can be reconstructed
-(fixed) using the SMBUTIL program with the pack option.
-
-Message bases with corrupted index files must be fixed with the FIXSMB program.</pre>
-<h2>[15.2] - <a name="FIXSMB">FIXSMB</a>  - Rebuild Synchronet Message/Mail
-Base</h2>
-<pre><b>usage: fixsmb [/opts] &lt;smb_file&gt;
-</b>
- opts:
-       m - mail format instead of sub-board format
-
-   ex: <b>FIXSMB /M C:\SBBS\DATA\MAIL
-</b>   or: <b>FIXSMB C:\SBBS\DATA\SUBS\DEBATE
-</b>
-Use the FIXSMB utility whenever CHKSMB shows that a message base has become
-corrupted due to problems with the index.</pre>
-<h2>[15.3] - <a name="SMBUTIL">SMBUTIL</a>  - Synchronet Message Base Utility</h2>
-<pre><b>usage: smbutil [/opts] cmd &lt;filespec.SHD&gt;
-</b>
-cmd:
-       l[n] = list msgs starting at number n
-       r[n] = read msgs starting at number n
-       v[n] = view msg headers starting at number n
-       k[n] = kill (delete) n msgs
-       i&lt;f&gt; = import from text file f
-       s    = display msg base status
-       c    = change msg base status
-       m    = maintain msg base - delete old msgs and msgs over max
-       p[k] = pack msg base (k specifies minimum packable Kbytes)
-opts:
-       a    = always pack msg base (disable compression analysis)
-       f    = fast msg creation mode
-       d    = disable duplicate message checking
-       z[n] = set time zone (n=min +/- from UT or 'EST','EDT','CST',etc)
-
-
-The SMBUTIL can be used for several things, but most importantly, it must be
-used for maintaining your Synchronet message base (using the 'm' command). This
-command causes SMBUTIL to mark old messages, and messages over the maximum sub-
-board limit, as deleted so that their spaces can be used by new messages. If
-you are using the 'Hyper Allocation' or 'Fast Allocation' method for your
-message bases, you must also use this utility to pack your message bases (using
-the 'p' command) periodically.  The pack command causes SMBUTIL to compress the
-message bases removing any unused spaces (messages marked as deleted).
-
-SMBUTIL maintenance and/or packing should be done using your daily event (or
-after importing from a network such as FidoNet).  If your message base is using
-the 'Fast Allocation' or 'Hyper Allocation' storage methods, you should run
-maintenance before packing (there is no reason to pack if you do not run
-maintenance!).	If your message base is set up for the 'Self Packing' method,
-you do NOT need to use SMBUTIL to pack, only to perform maintenance.
-
-Example batch file lines for SMBUTIL would read:
-
-for maintenance and packing (100k or more per sub):
-
-<b>	SMBUTIL mp100 \sbbs\data\subs\*.shd
-</b>
-for maintenance only (self-packing sub-boards):
-
-<b>	SMBUTIL m \sbbs\data\subs\*.shd
-</b>
-<b><i>WARNING:</i></b> All BBS nodes should be DOWNed (offline) when using SMBUTIL with the
-	 pack option!  To do this, set the SMBUTIL event to be 'Exclusive' in
-	 the SCFG program.
-
-When using the pack command, SMBUTIL will check to see if it is necessary for
-you to pack your message base, if you want to skip this checking and have it
-unconditionally pack the message base (useful when attempting to repair a
-corrupted message base), you should add the '/a' switch to the command line:
-
-	<b>SMBUTIL /a p \sbbs\data\subs\*.shd
-</b>
-The maintenance and pack commands are likely all that you will ever need to
-SMBUTIL for.</pre>
-<h2>[15.4] - <a name="SMBACTIV">SMBACTIV</a>  - Checks Synchronet Message
-Base Activity</h2>
-<pre>SMBACTIV.EXE is used to create a list of the number of users that are currently
-reading each message area (sub-board) on your BBS. If a message area has a
-very low number of active users, then it may be a waste of disk space and
-memory on your BBS.
-
-Before SMBACTIV is run, you must have your SBBSNODE environment variable set
-to point to a valid node directory. Example:
-
-<b>SET SBBSNODE=C:\SBBS\NODE1
-</b>
-SMBACTIV can be run with no parameters to display a list of all your sub-boards
-and the number of active users. If you wish to keep this list for reference,
-it is a good idea to redirect the output to a file or printer. Example:
-
-<b>SMBACTIV &gt; PRN
-</b>
-You can also specify a maximum number of active users to include in the list
-of sub-boards as a paramter. Example:
-
-<b>SMBACTIV 50
-</b>
-would create a list of all sub-boards that have 50 or less active users. To
-create a list of sub-boards that have no active users, you would use:
-
-<b>SMBACTIV 0</b></pre>
-<h2>[15.5] - <a name="ADDFILES">ADDFILES</a>  - Adds Files to Synchronet File
-Database</h2>
-<pre><b>usage: addfiles code [.alt_path] [/opts] [&quot;*user&quot;] +list [desc_off] [size_off]
-</b>
-   or: <b>addfiles code [.alt_path] [/opts] [&quot;*user&quot;]  file &quot;description&quot;
-</b>
-available opts:
-
-       a    import ASCII only (no extended ASCII)
-       d    delete list after import
-       e    do not import extended descriptions
-       f    include file date in descriptions
-       t    include today's date in descriptions
-       i    include added files in upload statistics
-       n    do not update information for existing files
-       o    update upload date only for existing files
-       u    do not update upload date for existing files
-       z    check for and import FILE_ID.DIZ and DESC.SDI
-       k    keep original short description (not DIZ)
-       s    search for files in directory (no file list)
-       *    use * in place of code for Auto-ADD of FILES.BBS
-            use *filename to Auto-ADD a different filename
-
-example for importing FILES.BBS format:
-<b>       addfiles games +c:\lists\files.bbs
-</b>
-example for importing DIRxx format:
-<b>       addfiles games +c:\lists\dir01 33
-</b>
-
-<b>SBBSNODE DOS Environment variable:</b>
-
-The environment variable SBBSNODE must be set prior to running ADDFILES. Add
-the following line to your AUTOEXEC.BAT:
-
-<b>SET SBBSNODE=C:\SBBS\NODE1</b>
-
-Where, the path to NODE1 reflects the complete path of your NODE1 directory.</pre>
-<h3>Parameter Explanations:</h3>
-<pre><b>dir_code:</b></pre>
-<pre>The dir_code parameter is the first argument and is the internal code of the
-Synchronet file directory you are adding the files to. This parameter is
-not case sensitive. The dir_code parameter is required. Use * for Auto-ADD.
-
-<b>.alt_path:
-</b>
-If the files are located on an alternate file path, you can specify the
-alternate file path number by using the &quot;.x&quot; paramter, where 'x' is the
-number of the alternate path.
-
-<b>/opts:<u>
-</u></b>
-If desired, you may specify a list of options. The available options are:
-
-A - Import ASCII character only (ignore any extended ASCII or control chars)
-D - If you want ADDFILES to delete the file list after importing it
-E - If you want ADDFILES to NOT import extended descriptions
-F - Automatically include the file date in the beginning of the description
-T - Automatically include the today's date in the beginning of the description
-I - Include files that are added in the system's upload statistics
-N - Do not update any information for files already in the database
-O - Only update the upload date for files already in the database
-U - Do not update upload date for files already in the database
-Z - Check for and import FILE_ID.DIZ and DESC.SDI as extended description
-K - Keep original short description (don't override with DIZ)
-S - Search for files in directory (no file list for names and descriptions)
-
-<b>*user:<u>
-</u></b>
-The *user parameter sets the name of the uploader of the files to the
-string following the asterisk. An example would be: &quot;*Digital Man&quot;. If an
-uploader is not specified, files will be added with &quot;-&gt; ADDFILES &lt;-&quot; as the
-uploader. The quotation marks are only necessary for uploader names of more
-than one word. The quotation marks are not used as part of the actual name.
-Example:
-
-*Joe		is OK
-*Joe Doe	is NOT OK
-&quot;*Joe Doe&quot;      is OK
-
-Multiple uploader names can be used if more than one file or file list is being
-added. Example:
-
-<b>ADDFILES GAMES &quot;*Bob&quot; +FILES.BBS &quot;*John Doe&quot; TICTAC.ZIP &quot;tic-tac-toe&quot;
-</b>
-The above command line would add the files listed in FILES.BBS using &quot;Bob&quot;
-as the uploader, and then add TICTAC.ZIP using &quot;John Doe&quot; as the uploader.
-
-<b>file &quot;description&quot;:
-</b>
-You can specify individual filename and description pairs on the command line
-to add. The filename is NOT case sensitive and the description IS. The
-quotation marks are only necessary for descriptions of more than one word.
-Example:
-
-TICTAC.ZIP Tic-Tac-Toe		is OK
-TICTAC.ZIP Tic Tac Toe		is NOT OK
-TICTAC.ZIP &quot;Tic Tac Toe&quot;        is OK
-
-<b>+list [desc_off] [size_off]:<u>
-</u></b>
-An ASCII text file list can be specified for adding to the database. The format
-of the file must be as follows (FILES.BBS lists work best):
-
-Filename and description on single line. Number of spaces between filename and
-	description doesn't matter.
-Filename must contain a period (.).
-	Example: TICTAC.ZIP	 is OK
-		 TICTAC ZIP	 is NOT OK
-		 TICTAC  .ZIP	 is OK
-Lines beginning with control characters or extended ASCII characters
-	are ignored (this includes blank lines).
-Up to 58 characters of description are used.
-Lines following a filename/description line that begin with space are
-	used as additional information for the description, and the entire
-	description is used as an extended description for the file as well.
-
-The name of the file list is specified on the command line after the plus (+)
-character. Example:
-
-<b>ADDFILES GAMES +FILES.BBS
-</b>
-If the file list is not located in the current directory, you must specify
-the complete path to the file list:
-
-<b>ADDFILES GAMES +C:\LISTS\FILES.BBS
-</b>
-If no filename/description pairs are given on the command line and no +list
-parameter is given, ADDFILES will attempt to use a file list with the dir_code
-as the filename and .LST as the extension.
-Example:
-
-<b>ADDFILES GAMES
-</b>
-Would add files to the GAMES directory using GAMES.LST as the file list. If
-GAMES.LST is can not be found, it will look for FILES.BBS in the current
-directory or in the directory's storage path.
-
-If a file list is specified on the command line, but is not found in the
-current directory, the storage path for that directory is searched. If the
-file list exists, it will be imported from there.
-
-<b>desc_off:</b>
-
-If a filelist is specified on the command line, a description offset can be
-specified as the next argument. If used, this parameter will specify at what
-column to start importing the descriptions. For PCBoard DIR file format, you 
-should specify a description offset of 33. Example:
-
-<b>ADDFILES GAMES +DIR10 33
-</b>
-This offset is also used for the importing of any extended description lines.
-size_off:
-
-If a filelist is specified on the command line with a description offset,
-a file size offset can be specified too. If a file size offset is specified,
-the disk does not need to be searched for the size of the file to determine
-the credit value. This is useful for adding lists of files from a CD-ROM
-drive as it speeds up process since the CD does not need to be scanned for
-the file size. This parameter is also useful for importing off-line file
-lists, where the file doesn't actually exist on the drive. For PCBoard DIR
-file format, this offset should be set to 13. Example:
-
-<b>ADDFILES GAMES +DIR10 33 13</b></pre>
-<h2>[15.6] - <a name="FILELIST">FILELIST</a>&nbsp; - Generate Synchronet File
-Directory Listings</h2>
-<pre><b>Description:<u>
-</u></b>
-This utility creates an ASCII text file list of the files in a Synchronet file
-transfer database. This utility is useful for creating file lists for users to
-download, exporting into other programs, or for easy statistics reporting by
-the sysop.
-
-The default output is compatible with the FILES.BBS standard format. Options
-are available for enhancing the output for your needs.
-
-Understand that this is an EXPORT utility and is not necessary for the normal
-execution of Synchronet. This utility exports from the binary indexed file
-databases of Synchronet into ASCII text. If you are looking for a program to
-IMPORT files from ASCII into Synchronet, you need to look for the ADDFILES
-utility for Synchronet. If you are just trying to ADD files to your Synchronet
-database, then you need to read Sysop Commands - specifically the &quot;;UPLOAD&quot;
-sysop transfer section command.
-
-<b>Syntax:</b>
-
-<b>usage: FILELIST [dir_code] [switches] outfile
-</b>
-switches: /LIB name All directories of specified library
-          /ALL      All directories in all libraries
-          /NOT code Exclude specific directory
-          /CAT      Concatenate to existing outfile
-          /PAD      Pad filename with spaces
-          /HDR      Include directory headers
-          /CDT      Include credit value
-          /ULN      Include uploader's name
-          /ULD      Include upload date
-          /DFD      Include DOS file date
-          /DLD      Include download date
-          /DLS      Include total downloads
-          /NOD      Exclude normal descriptions
-          /NOE      Exclude normal descriptions, if extended exists
-          /EXT      Include extended descriptions
-          /JST      Justify extended descriptions under normal
-          /+        Include extended description indicator (+)
-          /-        Include offline file indicator (-)
-          /*        Short-hand for /PAD /HDR /CDT /+ /-</pre>
-<h3>Parameter Descriptions:</h3>
-<pre>Either the &quot;/LIB name&quot;, &quot;/ALL&quot;, or &lt;dir_code&gt; parameter must be included for
-a list to be generated. If you want to create a list of files for a single
-file directory, use that directory's internal code as the first parameter on
-the command line. If you want all directories in a certain library to be in
-the list, use the &quot;/LIB name&quot; switch - where &quot;name&quot; is the short name of the
-library you want to list. If the library short name is more than one word,
-you most puts quotes around the name (e.g. /LIB &quot;short name&quot;). If you want to
-include all the directories on your system in the list, use the &quot;/ALL&quot;
-parameter.
-
-If you want to exclude a specific directory from a library (when using the
-&quot;/LIB&quot; or &quot;/ALL&quot; parameters), use the &quot;/NOT&quot; switch and follow the switch
-with the internal code of the directory to NOT include in the list. If you
-wish to exclude multiple directories, you must use multiple &quot;/NOT&quot; switches.
-
-If you want the list to be appended to an existing file rather than overwrite
-the original file, include the &quot;/CAT&quot; switch on your command line.
-
-The default format for file names is non-padded (FILE.EXT). If you want the
-list to have the filename and extension in separate columns (like the file
-listings inside Synchronet), use the &quot;/PAD&quot; switch, so that &quot;FILE.EXT&quot; will
-be displayed as &quot;FILE    .EXT&quot;.
-
-If you want a small header to be placed at the beginning of each directory,
-include the &quot;/HDR&quot; switch. The header contains the library short name, the
-directory long name, and the total number of files in the directory.
-
-If you want the credit value of the file (normally the same as the file size)
-included in the listing, include the &quot;/CDT&quot; switch on the command line.
-
-If you want the name of the uploader of each file to be included in the list,
-use the &quot;/ULN&quot; switch on the command line.
-
-If you want the date of the upload (in MM/DD/YY format) to be included in the
-list, use the &quot;/ULD&quot; switch on the command line.
-
-If you want the DOS file date to be included in the file listing, use the
-&quot;/DFD&quot; switch on the command line.
-
-If you want the date of the most recent download (in MM/DD/YY format) to be
-included in the list, use the &quot;/DLD&quot; switch on the command line.
-
-If you want the total number of downloads for each file included in the list,
-use the &quot;/DLS&quot; switch on the command line.
-
-If you DO NOT want the normal (58 character) description included in the file
-list, include the &quot;/NOD&quot; switch on the command line.
-
-If you want the normal description to be excluded only if an extended
-description exists, then use the &quot;/NOE&quot; switch. This is useful for generating
-file lists from a directory where the original descriptions were imported
-from an ASCII file list using ADDFILES. When using this switch, you do not
-have to include the &quot;/EXT&quot; switch.
-
-If you want extended descriptions to be included in the file list, use the
-&quot;/EXT&quot; switch on the command line.
-
-If you want extended descriptions to be automatically justified under the
-normal description, include the &quot;/JST&quot; switch on the command line. You do not
-have to include the &quot;/EXT&quot; switch if you use this switch.
-
-If you want the '+' identifiers for extended descriptions to be included in the
-list, use the &quot;/+&quot; switch.
-
-If you want the existence of each file to be verified and non-existent
-(offline) files to be indicated by a '-', use the &quot;/-&quot; switch. This switch
-should NOT be used for CD-ROM directories.
-
-To generate a list most closely resembling the internal Synchronet file listing
-format, use the &quot;/*&quot; switch. It is the same as including the &quot;/HDR&quot;, &quot;/CDT&quot;,
-&quot;/PAD&quot;, &quot;/+&quot;, and &quot;/-&quot; switches.
-
-<b>SBBSNODE Environment Variable:<u>
-</u></b>
-Prior to running FILELIST you must set the SBBSNODE environment variable to
-the path of one of your NODE directories.
-
-Example:
-
-<b>SET SBBSNODE=C:\SBBS\NODE1
-</b>
-<b>Examples:<u>
-</u></b>
-<b>FILES.BBS<u>
-</u></b>
-If you want to create a simple FILES.BBS format listing of your GAMES directory
-(and the directory's internal code is &quot;GAMES&quot;), then use the following command
-line:
-
-<b>FILELIST GAMES FILES.BBS
-</b>
-This command line would create the file &quot;FILES.BBS&quot; in your current DOS
-directory with a list of the filenames and descriptions in your Synchronet
-GAMES file directory. This file could then be imported into another BBS package
-or used by another FILES.BBS compatible program for searching, sorting, moving
-or other file maintenance.
-
-<b>FILELIST.TXT<u>
-</u></b>
-If you want to create a list of all the files on your BBS that closely matches
-the format of the internal Synchronet file listings, use the following command
-line:
-
-<b>FILELIST /* /ALL FILELIST.TXT
-</b>
-This command line would create the file &quot;FILELIST.TXT&quot; in your current DOS
-directory with a list of the filenames, credit values, and descriptions of
-all the files in your Synchronet file transfer database. A header for each file
-directory would be included and the filenames would be padded with spaces for
-easier viewing.
-
-To generate the same list, but include any extended descriptions as well, add
-the &quot;/EXT&quot; switch after the &quot;/ALL&quot; parameter.
-
-
-<b>FILESTAT.TXT<u>
-</u></b>
-If you wanted to create a list of all the files on your BBS with detailed
-statistical information, you may want to use a command line similar to the
-following:
-
-<b>FILELIST /* /ALL /NOD /ULN /ULD /DLD /DLS FILESTAT.TXT
-</b>
-This command line would create a list of the files with the uploader's name,
-the date the file was uploaded, the date of the most recent download, and the
-total number of downloads. The &quot;/NOD&quot; switch would cause the descriptions to be
-excluded from the list. This list could then be used for statistic reports.
-It would be a fairly simple programming task to create a utility that read in
-this generated file and created file popularity graphs or a list of the most
-valued uploaders. The possibilities are endless.
-
-
-<b>NOTE:<u>
-</u></b>
-The functionality of creating file lists is not limited to only this utility.
-There are commands to generate file lists (of both New files and All files)
-from the Temp Directory menu in the Synchronet transfer section. Users can use
-these commands to generate lists for download immediately. Also, QWK packets
-generated in Synchronet contain a file named &quot;NEWFILES.DAT&quot; - an ASCII text
-file containing a list of files uploaded since the user's last logon.
-
-The main advantages of this utility over the internal file list generation
-capabilities of Synchronet are its output format flexibility and compatibility
-with the FILES.BBS standard.</pre>
-<h2>[15.7] - <a name="DUPEFIND">DUPEFIND</a>  - Synchronet Duplicate File
-Finder</h2>
-<pre>DUPEFIND.EXE is used to find duplicate file names in your Synchronet file
-database. This is most useful for CD-ROM installations, where files may be
-duplicated on the CD-ROM and your hard disk. Duplicate files can be a waste
-of memory and disk space on your BBS.
-
-Before DUPEFIND is run, you must have your SBBSNODE environment variable set
-to point to a valid node directory. Example:
-
-<b>SET SBBSNODE=C:\SBBS\NODE1
-</b>
-DUPEFIND can be run with no parameters to search all of your file directories
-in Synchronet for duplicate file names. If you wish to keep this list for
-reference, it is a good idea to redirect the output to a file or printer.
-Example:
-
-<b>DUPEFIND &gt; PRN
-</b>
-You can also specify a starting and ending library number to limit the search
-to certain libraries. Example:
-
-<b>DUPEFIND 1 3
-</b>
-would only search file libraries 1 through 3 for duplicate file names.</pre>
-<h2>[15.8] - <a name="DELFILES">DELFILES</a>  - Removes Files from Synchronet
-File Database</h2>
-<pre><b>   usage: DELFILES &lt;dir_code or * for ALL&gt; [switches]
-</b>
-switches: /LIB name All directories of specified library
-          /NOT code Exclude specific directory
-          /OFF      Remove files that are offline (don't exist on disk)
-          /NOL      Remove files with no link (don't exist in database)
-          /RPT      Report findings only (don't delete any files)
-
-<b>Examples:<u>
-</u></b>
-If you wanted to remove ALL files that are offline (don't exist on disk) you
-would use the command line:
-
-<b>	DELFILES * /OFF
-</b>
-To remove files that exist on the disk but not in the Synchronet file database
-you would use:
-
-<b>	DELFILES * /NOL
-</b>
-Or to simply remove files that match the criteria specified in the SCFG program
-you would use:
-
-<b>	DELFILES *
-</b>
-The /NOT parameter is used to exclude certain directories:
-
-<b>	DELFILES * /NOT GAMES /NOT TEXT
-</b>
-Or you can specify a library name rather than a directory name:
-
-<b>	DELFILES /LIB &lt;library name&gt;
-</b>
-Appending /RPT to the command line will cause DELFILES to generate a report
-of files that would have been removed, but it will not actually remove any
-files.</pre>
-<h2>[15.9] - Synchronet <a name="MLABELS">MLABELS</a>  Utility</h2>
-<pre>The MLABELS utility is used to generate a list of mailing labels from a
-Synchronet user database. Two basic label forms are supported, single
-column (e.g. Avery 4145) and double column (e.g. Avery 4143). Specific
-groups of users to print labels for can be specified by level, flags,
-exemptions, or restrictions. If the BBS is real name based (no aliases), and
-the &quot;Company Name&quot; new user question is toggled on in SCFG, then the company
-name will appear at the top of the address and an ATTN: &lt;User's Name&gt; can
-optionally  be added to the end of the address (with the use of the &quot;/A&quot;
-command line switch).
-
-Syntax:
-
-<b>	MLABELS C:\SBBS\DATA\USER [-required] [/options] &lt;output&gt;
-</b>
-<b>User Data Path<u>
-</u></b>
-The first parameter is the path to your USER.DAT file. The example given is
-the default location of the USER.DAT file (&quot;\SBBS\DATA\USER&quot;).
-
-<b>Requirements<u>
-</u></b>
-The second parameter, &quot;-require&quot; is optional. Use this parameter to specify
-a security requirement for the users to be included. Multiple &quot;-require&quot;
-parameters can be specified, and the syntax is as follows:
-
--L#		set minimum level to # (default is 0)
--M#		set maximum level to # (default is 99)
--F#&lt;flags&gt;	set required flags for flag set # (Default is flag set #1)
--E&lt;flags&gt;	set required exemption flags
--R&lt;flags&gt;       set required restriction flags
-
-The syntax of the -require option is identical to the ALLUSERS utility, so
-please see the chapter on ALLUSERS for examples of how to use this parameter.
-
-<b>Options<u>
-</u></b>
-The next parameter, if specified, are one or more valid option characters
-following the slash '/' character. The available option characters are:
-
-D		Double column labels
-A		Add ATTN: &lt;Alias/Real Name&gt; to the labels
-
-<b>Output<u>
-</u></b>
-The last parameter is the name of the output file. If you want the output
-to go immediately to the printer, specify &quot;PRN&quot; as the output file.
-
-Example:
-
-<b>	MLABELS \SBBS\DATA\USER PRN
-</b>
-If you wish to view the labels before you print them, specify a filename.
-
-Example:
-
-<b>	MLABELS \SBBS\DATA\USER LABELS.TXT
-</b>
-<b>Complete Example</b>
-
-<b>MLABELS \SBBS\DATA\USER -L50 -M59 -FP /DA PRN
-</b>
-The above command line would create a double wide mailing list containing all
-users with security levels between 50 and 59 and flag 'P' from flag set #1,
-and send the output directly to the printer, adding &quot;ATTN: &lt;Alias/Name&gt;&quot;
-to the end of each label.
-
-<b>Example label:</b>
-
-John Doe
-555 Main St.
-Small Town, Ny 01234
-ATTN: Mr. Anonymous</pre>
-<h2>[15.10] - Synchronet <a name="QWKNODES">QWKNODES</a>  Utility</h2>
-<pre><b>usage: qwknodes [/opts] cmds
-</b>
- cmds: r  =  create ROUTE.DAT
-       u  =  create USERS.DAT
-       n  =  create NODES.DAT
-
- opts: f  =  format addresses for nodes that feed from this system
-       a  =  append existing output files
-       t  =  include tag lines in NODES.DAT
-       l  =  include local users in USERS.DAT
-       m# =  maximum message age set to # days
-
-The QWKNODES utility is used to scan through all the messages in all of your
-QWK networked sub-boards and create one or more lists:
-
-<b>ROUTE.DAT<u>
-</u></b>
-The DATA\QNET\ROUTE.DAT file is automatically created and maintained by SBBS.
-It includes the routing necessary to get netmail from your BBS to any other
-QWKnet BBS (using Synchronet's QWKnet extensions) in your QWK network. Entries
-are automatically added, modified, and removed (when out-dated). You can use
-QWKNODES to create this file (by scanning your QWK networked message bases),
-but it isn't normally necessary.
-
-If you are a QWKnet hub and wish to create a ROUTE.DAT for your QWKnet nodes
-(other BBSs that call your BBS for QWKnet messages), you must include the
-/F command line option when creating the file (and DO NOT put that ROUTE.DAT
-in your DATA\QNET directory as the routing information will be incorrect for
-your system). This is a convenience for your QWKnet nodes which allows them to
-immediately send routed QWK netmail (without waiting for SBBS to create the
-ROUTE.DAT automatically while parsing incoming echomail).
-
-<b>USERS.DAT<u>
-</u></b>
-The DATA\QNET\USERS.DAT file (if it exists) is used by SBBS to look-up user
-names on other BBSs in your QWK network when attempting to send e-mail to an
-unknown user name. The QWKNODES utility must be used to create this file (most
-likely via timed event). If the /L command line option is specified when this
-file is created, it will include the names of users that posted from YOUR BBS
-as well as all others in the network (not of any use to SBBS, but informative
-if you wish to create a list of ALL active users in your QWK network). Only
-users who are active in the message bases (on any of the BBSs) will appear in
-the USERS.DAT file.
-
-<b>NODES.DAT<u>
-</u></b>
-While this file is informative (list of all QWKnet nodes that have generated
-messages in your QWKnet sub-boards) it is not used by SBBS currently. If the
-/T command line option is specified when this file is created, it will include
-a copy of each node's tagline in the list in addition to their QWK-ID and
-routing details.
-
-<b>/A<u>
-</u></b>
-The /A option is used to append (concatenate) an existing output file. If this
-option isn't specified any existing output file (ROUTE.DAT, USERS.DAT, or
-NODES.DAT) will be truncated and overwritten.
-
-<b>/M#
-</b>
-The maximum message age option is used to specify a maximum age of messages
-(in days) to include in the list of messages scanned to obtain user/node
-/routing information from (example: /M90 to specify a maximum age of 90 days
-causing QWKNODES to ignore any messages older than 90 days). The default
-behavior is all messages (no maximum age).
-
-<b><i>Note:</i></b> Output files are created in the current directory.
-      While it is possible to create all three output files from one
-      execution of QWKNODES, the U command will cause duplicate entries
-      in the NODES.DAT and ROUTE.DAT files. So it is best to create the
-      USERS.DAT in a separate execution of the QWKNODES utility. Example:
-
-	QWKNODES RN	-&gt; To create ROUTE.DAT and NODES.DAT
-	QWKNODES U	-&gt; To create USERS.DAT</pre>
-<h2>[15.11] - Synchronet <a name="ALLUSERS">ALLUSERS</a>  Utility</h2>
-<pre>ALLUSERS can allow a sysop to modify the security settings for a large number
-of users with one command line. If you're a Synchronet sysop, you may have
-found yourself at one time or another going through the internal User Editor
-searching for users with a certain flag or exemption and changing their level,
-removing an exemption, adding a restriction, etc. The User Editor's ARS search
-facility is very quick and flexible, but having to hand modify each user, even
-with the use of macros, can be very tedious with a large user database.
-
-This program attempts to eliminate the monotony of such a task. With a single
-command line, you can change security levels, add/remove flags, exemptions,
-or restrictions to some or all of the users in your database. The syntax is
-pretty simple:
-
-<b>Syntax<u>
-</u></b>
-<b>ALLUSERS C:\SBBS\DATA\USER -require /modify
-</b>
-
-<b>User Data Path<u>
-</u></b>
-The first parameter, &quot;C:\SBBS\DATA\USER&quot; is the directory where your USER.DAT
-file is located. The example given is the default location of the USER.DAT
-file. If the USER.DAT is in the current directory, the path should be simply
-&quot;.&quot; for current directory. This parameter is not optional.
-
-<b>Requirements<u>
-</u></b>
-The second parameter, &quot;-require&quot; is optional. Use this parameter to specify
-a security requirement for the modifications to follow. Multiple &quot;-require&quot;
-parameters can be specified, and the syntax is as follows:
-
--L#		set minimum level to # (default is 0)
--M#		set maximum level to # (default is 99)
--F#&lt;flags&gt;	set required flags for flag set # (Default is flag set #1)
--E&lt;flags&gt;	set required exemption flags
--R&lt;flags&gt;	set required restriction flags
-
-<b>Examples:</b>
-
--L20  indicates that only users with a level of 20 or higher will be modified
--M80  indicates that only users with a level of 80 or lower will be modified
--FC   indicates that only users with flag 'C' from flag set #1 will be modified
--F3G  indicates that only users with flag 'G' from flag set #3 will be modified
--RA   indicates that only users with the 'A' restriction will be modified
-
-If multiple requirement parameters are specified, they must each begin with
-a dash '-' character and be separated by at least one space.
-
-<b>Examples:</b>
-
--L50 -M59  indicates that only users between level 50 and 59 will be modified
--RB -F2M   indicates that only users with the 'B' restriction and flag 'M' in
-	   flag set #2 will be modified
-
-Multiple required flags may be specified as well.
-
-<b>Example:</b>
-
--F4AC	   indicates that only users with both the 'A' and 'C' flags from
-	   flag set #4 will be modified
--EPLM	   indicates that only users with the 'P', 'L', and 'M' exemptions
-	   will be modified
-
-<b>Modifications
-</b>
-Next on the command line are one or more modification parameters. Each
-modification parameter begins with the slash '/' character. The available
-modification parameters are as follows:
-
-/L#			set level to #
-/F#[+|-]&lt;flags&gt; 	add or remove flags from flag set #
-/E[+|-]&lt;flags&gt;		add or remove exemption flags
-/R[+|-]&lt;flags&gt;		add or remove restriction flags
-
-<b>Examples:</b>
-
-/L20  indicates that all users' levels will be changed to 20
-/FA   indicates that flag 'A' from flag set #1 will be added to all users
-/F3-G indicates that flag 'G' will be removed from flag set #3 for all users
-/E+L  indicates that exemption 'L' will be added to all users
-/R-N  indicates that restriction 'N' will be removed from all users
-
-Flag set #1 is the default, so &quot;/F1+A&quot; and &quot;/F+A&quot; are equivalent.
-Addition of flags (+) is the default, so &quot;/F+A&quot; and &quot;/FA&quot; are equivalent.
-Flags and parameters are not case sensitive, so &quot;/FA&quot; and &quot;/fa&quot; are equivalent.
-
-Multiple modification parameters can be used.
-
-<b>Example:</b>
-
-/L40 /F2-Z   indicates that all users will be set to level 40 and have flag
-	     'Z' from flag set #2 removed
-
-Multiple flags per modification may be specified.
-
-<b>Example:</b>
-
-/RAB	     indicates that both 'A' and 'B' restrictions will be added to
-	     all users.
-
-<b>Complete Examples</b>
-
-To change all level 20 users to level 30, use the following command line:
-
-<b>ALLUSERS C:\SBBS\DATA\USER -L20 -M20 /L30
-</b>
-To give all QWKnet node users the 'M' exemption, use the following command:
-
-<b>ALLUSERS C:\SBBS\DATA\USER -RQ /EM
-</b>
-To give all users below level 90, the 'B' restriction, use the following:
-
-<b>ALLUSERS C:\SBBS\DATA\USER -M89 /RB
-</b>
-To give all users with level 50 or higher, the 'M' and 'L' exemptions:
-
-<b>ALLUSERS C:\SBBS\DATA\USER -L50 /EML
-</b>
-To remove flag 'C' from flag sets #1 and #2 from all users:
-
-<b>ALLUSERS C:\SBBS\DATA\USER /F1-C /F2-C</b></pre>
-<h2>[15.12] - Synchronet <a name="AUTONODE">AUTONODE</a>  Utility</h2>
-<pre>The AUTONODE utility is used for automatically finding an available local
-node for logon and running that node. You set the first local node number
-in SCFG-&gt;System-&gt;Advanced Options-&gt;First Local Auto-Node.
-
-In order for the AUTONODE utility to run, you must first set the SBBSCTRL
-and SBBSNODE environment variables. Add the lines:
-
-<b>SET SBBSCTRL=C:\SBBS\CTRL
-SET SBBSNODE=C:\SBBS\NODE1
-</b>
-to your AUTOEXEC.BAT file. If your CTRL or NODE1 directories are in a different
-locations, then specify the correct paths accordingly.
-
-This utility is useful for systems that have more than one local node. This
-eliminates the need for those users to change into an unused node directory
-and run SBBS. It will automatically find the first unused local node and
-take them to the logon prompt. When they logoff, they will return to the
-DOS prompt.
-
-If for some reason, you do not wish the user to automatically go to a logon
-prompt or to exit back to DOS after logoff, you can specify which command
-line to use when running SBBS. The default is &quot;SBBS L Q&quot;, which tells
-Synchronet to take the user straight to the logon prompt and then quit back
-to DOS.</pre>
-<h2>[15.13] - Synchronet <a name="NODE">Node</a>  Display/Control Utility</h2>
-<pre>The NODE utility can be used to display or control the status of nodes from
-the DOS prompt or via batch files.
-
-<b>usage: node [/debug] [action [on|off]] [node numbers] [...]
-</b>
-actions (default is list):
-
-list        = list status
-anon        = anonymous user
-lock        = locked
-intr        = interrupt
-down        = shut-down
-rerun       = rerun
-event       = run event
-nopage      = page disable
-noalerts    = activity alerts disable
-status=#    = set status value (definition of status values at end of section)
-useron=#    = set useron number
-action=#    = set action value (definition of action values at end of section)
-errors=#    = set error counter
-conn=#      = set connection value
-misc=#      = set misc value
-aux=#       = set aux value
-extaux=#    = set extended aux value
-
-Before the NODE utility can be run, the SBBSCTRL environment variable must
-be set to point to your CTRL directory. Example:
-
-<b>SET SBBSCTRL=C:\SBBS\CTRL</b>
-
-Place this line in your AUTOEXEC.BAT file to automatically set this variable
-at boot-up. It is necessary for the NODE utility to find the shared node
-control files. If your CTRL directory is in a different location, use the
-correct path for the SET command.
-
-If you want to be able to run the NODE utility from any directory, you must
-have the NODE.COM program in one of your DOS search directories. Either copy
-this file into a directory already in your DOS search path, or add your
-Synchronet EXEC directory to your search path in your AUTOEXEC.BAT. Example:
-
-<b>SET PATH=C:\DOS;C:\UTIL;C:\SBBS\EXEC
-</b>
-(DOS and UTIL directory are included for example only).
-
-<b>Running NODE</b>
-
-To run the NODE utility, you must type the word &quot;NODE&quot;, an action (ex: &quot;LOCK&quot;),
-then a list of nodes to take the action on (ex: &quot;1 2 4 5&quot;). If no node numbers
-are specified, it is assumed you wanted to perform the action on ALL nodes.
-
-Some actions can have an option &quot;ON&quot; or &quot;OFF&quot; state specified. Typing &quot;NODE
-LOCK 1&quot; would toggle the &quot;locked&quot; state of node 1. If it were previously off,
-it would be set to on. To be sure you are setting the state to either on or
-off rather than toggling, you may specify on or off (e.g. &quot;NODE LOCK ON 1&quot;
-would set the locked state of node 1 to on).
-
-Some actions are setting a value for the node status. These actions are listed
-with &quot;=#&quot; after the action word. This indicates that you must specify a numeric
-value for that status option (e.g. &quot;NODE USERON=1 5&quot; would set the current
-user number on node 5 to 1).
-
-The optional &quot;/debug&quot; switch can be used to view the current numeric values
-associated with the node status.
-
-<b>Example Usage</b>
-
-Example #1: To list the status of all your nodes, type
-
-<b>NODE LIST</b>
-
-Example #2: To lock node 1, type
-
-<b>NODE LOCK ON 1</b>
-
-Example #3: To unlock nodes 1 and 2, type
-
-<b>NODE LOCK OFF 1 2</b>
-
-Example #4: To set the status of node 3 to &quot;Offline&quot;, type
-
-<b>NODE STATUS=5 3
-</b>
-Example #5: To interrupt and lock node 4, type
-
-<b>NODE INTR ON 4 LOCK ON 4</b>
-
-Example #6: To clear the error counter of all nodes, type
-
-<b>NODE ERRORS=0</b>
-
-Example #7: To toggle the &quot;rerun&quot; status of all nodes, type
-
-<b>NODE RERUN</b>
-
-Example #8: To down node 2, type
-
-<b>NODE DOWN ON 2</b>
-
-<b>Definition of Numeric Values</b>
-
-Possible Node Status Values:
-
-0	Waiting for call
-1	At logon prompt
-2	New user applying for access
-3	User online
-4	User online in quiet mode
-5	Offline
-6	Networking
-7	Waiting for all nodes to become inactive before running timed event
-8	Running timed event
-9	Waiting for timed event node to finish running event
-
-<b>Possible Node Action Values:</b>
-
-0	Main Prompt
-1	Reading Messages
-2	Reading Mail
-3	Sending Mail
-4	Reading G-Files
-5	Reading Sent Mail
-6	Posting Message
-7	Auto-message
-8	Running External Program (aux=program number)
-9	Main Defaults Section
-10	Transfer Prompt
-11	Downloading File (aux=estimated time of transfer completion)
-12	Uploading File
-13	Bi-directional Transfer (aux=estimated time of transfer completion)
-14	Listing Files
-15	Logging on
-16	In Local Chat with Sysop
-17	In Multi-Chat with Other Nodes
-18	In Local Chat with Guru
-19	In Chat Section
-20	Sysop Activity
-21	Transferring QWK packet
-22	In Private Chat (aux=node chatting with)
-23	Paging another node for Private Chat (aux=node being paged)
-24	Retrieving file from a sequential device (aux=device num)
-
-<b>Bits Used in Node Misc:</b>
-
-0       Anonymous User
-1       Locked for sysops only
-2       Interrupted - hang up
-3       Message is waiting for user
-4       Paging disabled
-5       Activity Alert disabled
-6       User data has been updated by another node
-7       Re-run this node when logoff
-8       Must run node event after logoff
-9       Down this node after logoff
-10      Reset private chat
-11	Message is waiting for node</pre>
-<h2>[15.14] - <a name="UTI">UTI</a>  Driver</h2>
-<pre>This UTI driver complies with UTI Driver Specification Rev 2.1 by Kip Compton.
-This driver is for use with PostLink v1.05+ and possibly MegaMail.
-
-Copy the UTI driver files:
-
-	UTIVER.EXE		Returns UTI version number (2)
-	UTILIST.EXE		Generates list of conferences (sub-boards)
-	UTIHIGH.EXE		Returns highest message number in a conference
-	UTILSTRD.EXE		Generates list of message pointers for a user
-	UTIIMPRT.EXE		Imports messages into a conference
-	UTIEXPRT.EXE		Exports messages from a conference
-
-into your PostLink directory, or another directory that is in your DOS search
-path.
-
-The UTIDOOR.EXE program is not part of this driver set, since Synchronet can
-generate a UTIDOOR.TXT file internally.
-
-You may need to know that the conference identifiers, as well as the name of
-each conference, is the same as the Synchronet internal code for each
-conference. This allows you to modify your message base configuration in
-Synchronet without having to immediately &quot;Update&quot; the network or mail software
-conference list to avoid a catastrophe. However, you should still &quot;Update&quot; the
-network or mail software to avoid configuration confusion - especially when
-deleting sub-boards.
-
-<b>ERROR LEVELS</b>
-
-If one of the UTI driver programs exits with an error level, you can define
-the error with the following table. If the UTI driver program exits with an
-unlisted error level, please contact Digital Dynamics.
-
-<b><u>Level	Description</u></b>
-1	Syntax error on command line
-2	Cannot open/create UTI text file
-3	Memory allocation error
-4	Too many messages in a conference to import
-5	Cannot open Synchronet message data file
-6	Cannot open Synchronet message index file
-7	Unrecognized Synchronet sub-board code
-8	Cannot open Synchronet user name data file
-9	Cannot find user name in Synchronet user database
-10	Cannot open Synchronet message pointer index
-
-
-If you get an error 2, 5, 6, 8, or 10, you may want to double check the number
-of files handles you are reserving in your CONFIG.SYS file (FILES=# statement)
-and try increasing it.
-
-If you get an error 3, then you need to make more DOS memory available to the
-UTI driver and the parent program (i.e. PostLink).</pre>
-<h2>[15.15] - <a name="SLOG">System/Node Statistics Log</a>  Viewing Utility</h2>
-<pre><b>Usage: slog [path]
-</b>
-where path is the directory where CSTS.DAB is located. If your SBBSCTRL
-environment variable is set and no path is specified, it will use the system's
-statistics file located in the CTRL directory. To set your SBBSCTRL environment
-variable, add the following line to your AUTOEXEC.BAT:
-
-<b>SET SBBSCTRL=C:\SBBS\CTRL</b>
-
-Make sure the path is the correct path for the Synchronet CTRL directory in
-your configuration.
-
-If you want to list the statistics of a specific node on your system (same as
-using the ;NLOG command from the main menu, or the 'N' WFC command), specify
-the path for that node on the command line. Example:
-
-<b>SLOG C:\SBBS\NODE1</b>
-
-If a path is not specified and the SBBSCTRL environment variable is not set,
-the current directory will be searched for CSTS.DAB.
-
-The output of SLOG can be redirected to a file or printer for easy viewing.
-Example:
-
-<b>SLOG &gt; PRN</b>
-
-or
-
-<b>SLOG &gt; SLOG.TXT</b></pre>
-<h2>[15.16] - <a name="DSTSEDIT">Daily Statistics Editor Documentation</a></h2>
-<pre><b>Description:</b>
-
-DSTSEDIT (Daily Statistics Editor) is used to edit the statistic values of your
-BBS that are stored in the DSTS.DAB file in your CTRL directory. There is also
-a separate DSTS.DAB file in each node directory which stores the statistic 
-values for that individual node. This utility can be used to edit either of the
-two statistic types: System or Node.
-
-<b>Usage:</b>
-
-To edit your system's statistics, you can either run DSTSEDIT with your CTRL
-directory as the current directory, or run DSTSEDIT with the path of the
-CTRL directory as an argument.
-
-	Example: <b>DSTSEDIT C:\SBBS\CTRL</b>
-
-To edit an individual node's statistics, you can either run DSTSEDIT with the
-node's directory as the current directory, or run DSTSEDIT with the node's 
-directory as an argument.
-
-	Example: <b>DSTSEDIT <a href="file:///C:/SBBS/NODE1">C:\SBBS\NODE1</a></b></pre>
-<h2>[15.17] - <a name="TOTALS">TOTALS</a>: External Programs Credit Gain/Loss
-Log Totaling Utility</h2>
-<pre>The TOTALS.COM utility is used to generate a total gain/loss of multiple log
-files created by SBBS external programs that adjust user credits and log the
-adjustments in text files. Each file containing one line that contains the
-gain/loss value in credits. It is a positive value if it had net winnings
-(took more credits than it gave), and negative value if it had a net loss
-(gave away more credits than it took). The Synchronet external programs that
-currently generate such logs (by running the program with the /L option) are
-Synchronet Blackjack, Dice War, and Domain Poker.
-
-<b>usage:</b>	<b>totals &lt;log files [...]&gt;
-</b>
-	examples:
-
-	<b>	totals *.log
-		totals 06*.log 07*.log 080192.log</b></pre>
-<h2>[15.17] - <a name="ANS2MSG">ANS2MSG</a></h2>
-<pre>ANSI to Synchronet Ctrl-A message format conversion utility 
-
-This utility will convert basic non-animated ANSI files into Synchronet Ctrl-A
-code files that can be displayed to color or monochrome ansi users with 
-attractive results as well as non-ansi users. This allows you to use an ANSI
-drawing program (such as TheDraw) to create your menus in ANSI and convert the
-ANSI file to Ctrl-A message format for your .ASC or .MSG version. Or you can
-use the converted file for all users by keeping the ANSI (.ANS) version in
-a directory other than TEXT\MENU.
-
-If, for example, you create a main menu with an ANSI drawing program that you
-want your ASCII and monochrome ANSI users to see with attractive output, use
-ANS2MSG to create the .MON and .ASC versions.
-
-Type: <b>ANS2MSG MAIN.ANS MAIN.MON</b>
-in your TEXT\MENU directory to create the monochrome version. 
-
-Type: <b>ANS2MSG MAIN.ANS MAIN.ASC</b>
-in your TEXT\MENU directory to create the ASCII version.
-
-If you rename MAIN.ANS or move into a directory other than TEXT\MENU, then
-you will not need the .MON version as the .ASC version will be used for all
-terminal types.
-
-This utility is also useful for creating colorful system, newuser, feedback
-and other Synchronet .MSG files for display. For example, create 
-TEXT\SYSTEM.ANS with your favorite ANSI editor and then convert to .MSG by
-typing: <b>ANS2MSG SYSTEM.ANS SYSTEM.MSG</b>
-
-Be aware that ANSI animation codes are NOT supported since there aren't Ctrl-A
-equivalents. The following ANSI codes (preceded by &lt;ESC&gt;[) are supported:
-
-<b>ANSI Code 	Ctrl-A Code	Explanation (* indicates not supported by IBM)</b>
-2J		L		Clear Screen
-#C		7Fh-FFh 	Move cursor right # columns
-0m		N		Normal attribute
-1m		H		High intensity
-2m		N		Low intensity *
-3m		I		Italic *
-4m		I		Underline *
-5m		I		Blink
-6m		I		Rapid Blink *
-7m		H		Reverse Video *
-8m		E		Concealed text *
-30m		K		Foreground black
-31m		R		Foreground red
-32m		G		Foreground green
-33m		Y		Foreground yellow
-34m		B		Foreground blue
-35m		M		Foreground magenta
-36m		C		Foreground cyan
-37m		W		Foreground white
-40m		0		Foreground black
-41m		1		Foreground red
-42m		2		Foreground green
-43m		3		Foreground yellow
-44m		4		Foreground blue
-45m		5		Foreground magenta
-46m		6		Foreground cyan
-47m		7		Foreground white</pre>
-<h2>[15.18] - <a name="MSG2ANS">MSG2ANS</a></h2>
-<pre>Converts Synchronet Ctrl-A file to ANSI escape sequences.
-
-This utility allows you to convert files that use Ctrl-A codes into ANSI files.
-(the opposite of the ANS2MSG utility).
-
-The syntax is: <b>MSG2ANS infile.ext outfile.ext</b>
-
-The extension for the input file will most likely be .ASC or .MSG and the
-output file should be .ANS.
-
-This utility is also useful for viewing files with Synchronet Ctrl-A codes from
-the DOS prompt.
-
-Example: <b>MSG2ANS MAIN.ASC CON</b>
-
-This will read from the Ctrl-A file MAIN.ASC and write to your screen using
-ANSI escape sequences.</pre>
-<p><a href="#top"><b>Back to Top</b></a></p>
-<!--webbot bot="Include" U-Include="_borders/bottom.htm" TAG="BODY" startspan -->
-
-<hr>
-<p><b><a href="http://www.synchro.net/copyright.html">Copyright</a> � 2000 by </b> <a href="http://www.synchro.net/author.htm"><b>Rob Swindell</b><br>
-</a>
-
-<a href="http://www.synchro.net"><font size="2"><br>
-Synchronet BBS Software</font></a>  <font size="2">  (Synchronet)
-Version 3 is comprised of several documentation,<br>
-library, executable, and <a href="http://www.synchro.net/source.html">source code</a> 
-files, all of which are covered by the<a href="http://www.fsf.org/copyleft/gpl.html">
-<br>
-GNU General Public License</a>  with the exception of the following portions
-covered by<br>
-the <a href="http://www.fsf.org/copyleft/lesser.html">GNU Lesser General Public License</a>:
-SMBLIB and XSDK.<br>
-<br>
-Synchronet Version 2 (for DOS and OS/2) and its source code was released to the<a href="http://www.fsf.org/philosophy/categories.html#PublicDomainSoftware">
-<br>
-Public Domain</a>  by <a href="ftp://vert.synchro.net/main/sbbs/manifest.txt">Digital Dynamics</a> 
-in 1997 and remains Public Domain software today.<br>
-Synchronet Version 3 is not Public Domain software.</font></p>
-<p align="left"><font size="2"><a href="http://www.synchro.net/author.html">Rob Swindell<br>
-</a>PO Box 501<br>Yorba Linda, CA 92885<a href="http://www.synchro.net"><br>
-http://www.synchro.net</a>
-
-</font></p>
-<p align="left"><font size="2">For the complete Copyright Information please
-read the <a href="http://www.synchro.net/copyright.html">Copyright Documentation</a>
-.</font></p>
-
-<!--webbot bot="Include" endspan i-checksum="55766" -->
-
-</body>
-
-</html>
diff --git a/docs/v200_new.txt b/docs/v200_new.txt
deleted file mode 100644
index 5b1256b5be..0000000000
--- a/docs/v200_new.txt
+++ /dev/null
@@ -1,174 +0,0 @@
-	      What's new in Synchronet BBS Version 2.00 Revision A
-	      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Programmable Command and Menu Structure
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-o Multiple command 'shells' can be available for you and your users with
-	configurable security access to each
-o Includes Baja {tm} shell/module compiler free ($50 value)
-o Shells can dynamically load and execute third party Baja modules or 
-	external DOS applications/doors automatically or by command
-o Stock command shells include emulations of other BBS packages and a 
-	simplified beginner/first-time user shell
-o Shells are easily modified and recompiled for your user interface preferences
-
-
-Communications
-~~~~~~~~~~~~~~
-o FOSSIL, PC BIOS Int 14h, and PS/2 BIOS Int 14h communications driver support
-	allows the use of virtually any multiport serial card (Intelligent
-	or Non-Intelligent), shared IRQ cards, and non-UART serial devices
-o DTE rates to 115.2K
-o Support for manual hang up (for devices/interfaces lacking DTR support)
-o 12 new high-speed (19.2K-28.8K) modems added to auto-configuration list
-o Supra/Practical Peripherals Caller ID formats supported
-o Configurable number of rings to answer after
-o Invalid/Unrecognized result codes are now logged as critical errors
-o Intelligent answer function detects and recovers from ring-interrupted answer
-	sequences
-o Specific modem result codes can be ignored or defined as "FAX"
-
-
-General
-~~~~~~~
-o New configuration file format (.CNF) for faster BBS initialization, lower
-	storage space requirments, and future expandability
-o Significant reduction in memory requirements for SCFG allowing for larger
-	quantities of sub-boards, directories, etc.
-o "Sticky" menus in SCFG for sysop convenience when editing long lists
-o Local "beep" replacement to eliminate performance over-head and decrease
-	the sysop annoyance factor
-o Optional critical error siren
-o Sysop Manual overhaul/additions (from 188 pages to 273 pages) including
-	many more examples, screen captures, explanatory text, and an index
-o Automatic "maximum" adjustment eliminates need for manual adjustment for
-	maximum values in SCFG
-o Maximum configurable options per SCFG menu increased from 254 to 500
-	(raising the ceiling)
-o Addition of WWIV Color Codes 8 and 9
-o Node activity text can be overridden to include any text and optional
-	user variables (including age, gender, location, etc.)
-o Hot Keys are now optional
-o New user default setting screen can be toggled off by sysop
-o Callers log now contains time logged on
-o User listings now contain date last on
-o Username "look-up" available
-
-
-Security
-~~~~~~~~
-o Current message group, sub-board, file library, and file directory ARS
-	parameters
-o RIP and ANSI ARS parameters to limit access based on terminal support
-o Disallows invalid birth dates, incomplete phone numbers, single word
-	real names, locations without a state, etc.
-o Users can be set to expired account values when out-of-time
-o Quick Validation Hot-Keys can be disabled (default)
-o Configurable maximum posts per day and E-mails per day based on user level
-
-
-External Programs
-~~~~~~~~~~~~~~~~~
-o Ability to swap out of memory almost entirely for any executable from
-	anywhere in the BBS to XMS, EMS, Extended Memory or Disk
-	(no more "Shrinking" or use of SHROOM)
-o Up to 500 configurable timed external events with optional exclusive
-	execution and shortening of users' time online
-o Online External Program (door) sections for organizational purposes
-	and easier manuverability (Group/Sub principle)
-o RIP and ANSI ARS parameters to limit access based on terminal support
-o MODUSER.DAT supports simultaneous addition and removal of flags
-
-
-File Transfers
-~~~~~~~~~~~~~~
-o New storage format lowers storage space requirements, and speeds up searches
-o First line of FILE_ID.DIZ or DESC.SDI imported into short description
-o Viewable, Testable, and Extractable File Types can have ARS parameters
-	specified for limiting to specific users or file areas
-o Download Events for modifying files (e.g. adding comments) just before
-	download (with attached ARS)
-o Up to 500 Compressable File Types can be defined for QWK packet creation
-	and temp archives (with attached ARS, of course)
-o ARS attachment to Transfer Protocols
-o Up to 500 Alternate File Paths 
-o Directory operators definable per directory via ARS
-o Exempted users can be defined for each directory via ARS
-o Credit percentages configurable on a per-directory basis
-o Each directory's data can be stored on any drive, in any DOS directory
-o Upload semaphore files supported on a per-directory basis
-o Sysop can allow blind (unsolicited) batch/bi-dir uploads
-o Uploads can be forced rated using any alphabetic rating scheme
-o Individual directories can be eliminated from duplicate upload name search
-
-
-Message Base
-~~~~~~~~~~~~
-o New storage format lower storage space requirements, increases maximum
-	storage capacity, lowers memory requirements, and speeds up
-	import/export (Download SMB_1*.ZIP for details)
-o Support for moderated sub-boards (via ARS)
-o Sub-board operators definable per sub-board via ARS
-o ARS to restrict users from reading a sub-board while still seeing it
-o Message data can be stored on any drive, in any directory, on a per-sub basis
-o Messages (including E-mail) are purgable by age (via SMBUTIL)
-o Optional and configurable duplicate message checking
-o Operator/Sub-op messages can be automatically permanent
-o Operator/Sub-op can move messages between areas
-o Read messages can be automatically purged
-o Self-packing and Fast Allocation storage methods available for each sub
-o Network Gateway Security
-o Separate EchoMail semaphore file per sub-board
-o Message pointers can be set by date or number of messages from end
-o Bulk E-mail capabilities (via ARS or user names)
-o Start message number specified for message text searches
-o Received mail can be forwarded to multiple users
-o Message listings include "To" user as well as "from" and "subject"
-
-
-QWK
-~~~
-o Incredible speed increase (via SMB)
-o Multiple archive formats supported (user selectable)
-o Automatic inclusion/exclusion of file attachments
-o Optional inclusion of Un-read, All, or No E-mail
-o Optional automatic deletion of E-mail (user configured)
-o Optional exclusion of messages from user
-o Scan configuration and pointer adjustment from QWK menu
-o Inclusion of new files list is optional (user configured)
-o NetMail can be sent by sending to "user@addr"
-o New conference numbering scheme to allow for more subs per group
-o New QWK control messages: YOURS, RESET, RESETALL, FILES, ATTACH, MAIL, OWN
-	, DELMAIL, and CTRL-A
-
-
-Networking
-~~~~~~~~~~
-o Up to 500 FidoNet AKAs supported
-o Optional use of "Default Outbound Address" for Fido/UUCP gateway convenience
-o Separate NetMail and EchoMail semaphore files
-o EchoMail Gateway security to eliminate unintentional gating
-o Pending QWKnet REP packets appended with new messages before call-out
-o Internal support for outbound Internet mail storage with file attachments
-	(SMB compliant UUCP gateway required)
-o Public message base specification (SMB) insures 3rd party developer interest
-	and support for EchoMail programs, gateways, editors, offline readers,
-	etc.
-
-
-Chat
-~~~~
-o Multiple Artificial Gurus - can be separately attached to different chat
-	channels
-o Multiple MultiNode Chat Action sets, separately attached to different chat
-	channels
-o Real-time InterNode Telegrams with store-and-forward if user is offline
-o Real-time key-by-key chat available from anywhere via Ctrl-P
-o Whisper command in MultiNode Chat
-o InterNode messages can be sent by node number, user number, user name, or
-	user chat handle (with search for partial names)
-o Chat options (echo, action commands, pagability, action alerts) are now saved
-	between logons
-
-/* End of V200A.NEW */
-
diff --git a/docs/v210_new.txt b/docs/v210_new.txt
deleted file mode 100644
index bd09e9202d..0000000000
--- a/docs/v210_new.txt
+++ /dev/null
@@ -1,173 +0,0 @@
-	      What's new in Synchronet BBS Version 2.10 Revision A
-              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		      Estimated Date of Release: 02/17/95
-
-General
-~~~~~~~
-o New file sharing method for user database (USER.DAT) significantly improves
-	performance on active multinode systems
-
-o Systems with large quantities of message and files areas will see
-	significantly more free memory inside the BBS with this version
-
-
-Message Base
-~~~~~~~~~~~~
-o SMB level III implementation offers optional real-time message base
-	compression/decompression using LZH algorithm for up to 50% savings on
-	disk space (potentially hundreds of megabytes on some systems)!
-
-o New Hyper Allocation storage method (defined in v1.20 of the SMB
-	specification), twice as fast as "Fast Allocation"!
-
-o Innovative QWK NetMail technology using dynamically maintained route map
-	Send NetMail to User@BBSID from ANY DOVE-Net system (using v2.10)
-	(i.e. "Digital Man@VERT" to send me routed NetMail) No nodelist hassle!
-
-o Automatic detection of circular paths for QWK EchoMail messages (duplicates)
-
-o Optional QWKnet user list (DATA\QNET\USERS.DAT) for automatic address look-up
-
-o Ability to force QWKnet call-outs from within the BBS (;CALL HUBID) and
-	from any node WFC screen
-
-o Internet mail replies from Reading Messages prompt for UUCP gateways
-        (i.e. NetXpress)
-
-o New memory compression allows for significantly greater number of configured
-        message areas in Synchronet
-
-o UTI driver supports long names (>25 chars) for internet addresses
-
-o When quoting messages, tag/origin lines are automatically not quoted
-
-o Out-bound file attachments supported for both FidoNet and Internet NetMail
-
-o 'Direct' FidoNet NetMail status now supported in SCFG
-
-o 'To' field for FidoNet EchoMail now supports up to 35 characters
-
-o 'To' field for PostLink messages now supports up to 60 characters
-
-o 'Subject' field for PostLink messages now supports up to 70 characters
-
-o Crash, Return Receipt, and File Request over-rides now supported in off-line
-	FidoNet NetMail
-
-o Attempted e-mail to user@addr will automatically be interpreted as NetMail
-
-
-Security
-~~~~~~~~
-o Logon via user number can be disabled
-
-o Optionally allow logons via real name or alias
-
-o Optionally prompt for password for all logon attempts
-
-o Keyboard buffer flushed after execution of external programs
-
-o Extended ASCII char 255 stripped from strings (would appear as space)
-
-
-Chat
-~~~~
-o Automatic split-screen private chat for ANSI users with 24 or more rows
-
-o Internode messages received and displayed before logoff when user runs
-        out of time
-
-
-External Programs
-~~~~~~~~~~~~~~~~~
-o External editors can have drop files created automatically
-
-o Baja modules can be executed as doors in place of DOS executables
-
-o External online programs can give the user extra time while in use
-
-o External online programs can be configured to suspend BBS time while in use
-
-o DOOR.SYS is created with user credits (in Kbytes) on line 31 (Download limit)
-
-o If a DOOR.SYS external program is set to modify user data, lines 29 and 30
-	are read back in to update files/bytes downloaded and subtract credits
-
-o External programs can have Synchronet immediately hang-up upon return
-
-o DORINFO1.DEF (always 1 instead of node #) added to available drop file list
-
-o New software development kit (XSDK v2.30) has improved incorporation of
-	intelligent variable time-slicing (IVT) under multitaskers and other
-	enhancements for Synchronet application developers
-
-
-File Transfers
-~~~~~~~~~~~~~~
-o Extended descriptions optionally displayed in normal file listings (&E)
-
-o Batch flagging prompt redisplays page after operations
-
-o Batch flagging prompt allows (P)revious page command to move backwards
-
-o Batch flagging prompt has help bar at top of screen for list command
-
-o Batch flagging prompt has help menu (?) for available commands
-
-o Batch flagging prompt can display library and directory name
-
-o TYPE.BIN included to be used as a viewable file type command for text files
-
-o New-file scan date/time defaults to last new-scan, not from last logon
-
-o Duplicate files (already in database) are rejected on blind uploads
-
-o New memory compression allows for significantly greater number of configured
-        file areas in Synchronet
-
-o New toggle option to allow the inclusion or exclusion of each directory in
-        the Auto-ADDFILES search and import of FILES.BBS (for FDNs or CDROMs)
-
-o New toggle option to allow the inclusion or exclusion of each directory in
-        users' new file scans (for CDROMs)
-
-
-Programmability
-~~~~~~~~~~~~~~~
-o Baja modules can be automatically loaded during logon, logoff, or new users
-
-o Baja modules can be used in place of any executable command line in SCFG
-
-o New Baja function PRINTFILE_STR used to create TYPE.BIN module
-
-o New Baja function REPLACE_TEXT used to replace TEXT.DAT strings in shells
-
-o New Baja functions SET_USER_LEVEL, TOGGLE_USER_FLAG, and SET_USER_STRING
-	used to change or adjust user flags, exemptions, restrictions, level,
-	name, address, etc.
-
-o New Baja functions FILE_ADD_BATCH and FILE_CLEAR_BATCH allow batch download
-	queue manipulation
-
-o New Baja functions GETLINE, GETNUM, and GET_TEMPLATE for extended control
-	over user input
-
-
-Miscellaneous
-~~~~~~~~~~~~~
-o Support for auto-detecting FAX/Modems that return "+FCON" on FAX connections.
-
-o Supra Caller-ID NAME and NMBR strings can be in either order.
-
-
-Revisions Since v2.00a
-~~~~~~~~~~~~~~~~~~~~~~
-o Direct QWK logons with normal user accounts by prepending '*' to the username
-
-o SCFG uses a modem configuration database that is user extensible
-
-o Toggle option for each sub-board to default ON or OFF in users' personal
-        (as opposed to new) message scans
-
-
-/* End of V210A.NEW */
diff --git a/docs/v211_new.txt b/docs/v211_new.txt
deleted file mode 100644
index f770410a7e..0000000000
--- a/docs/v211_new.txt
+++ /dev/null
@@ -1,130 +0,0 @@
-	      What's new in Synchronet BBS Version 2.11 Revision A
-	      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-General
-~~~~~~~
-o Overlay buffer manipulation released 32k of more free memory in SCFG and
-	40k of more free memory in SBBS
-o Forcing the internal daily event ("SBBS F") when using a front-end mailer
-	is no longer necessary
-o Pending QWKnet and PostLink call-outs are performed immediately after user
-	logoff, even when launched from a front-end mailer
-o WFC statistics retrieval many times faster when "Total Msgs/Files on WFC"
-	toggled off in SCFG node toggles
-o User inactivity warning and auto-logoff can be disabled for local logons
-	in SCFG node toggles
-o Local system security can require the input of the system password for WFC
-	and Alt-key commmands
-o Configuration program (SCFG) support multiple levels of automated backup of
-	config files
-o Local keyboard can be completely disabled for the ultimate in local security
-
-
-New Baja Functions
-~~~~~~~~~~~~~~~~~~
-COMPARE_NODE_MISC	Check miscellaneous node attributes
-COMPARE_USER_CHAT	Check user chat settings
-COMPARE_USER_QWK	Check user QWK settings
-TOGGLE_USER_CHAT	Change user chat settings
-TOGGLE_USER_QWK 	Change user QWK settings
-SELECT_SHELL		Allow user to select command shell from list
-SET_SHELL		Set the user's command shell to specific shell
-SELECT_EDITOR		Allow user to select external editor from list
-SET_EDITOR		Set the user's extrnal editor to a specific editor
-MSG_NEW_SCAN_SUB	Force the new scan of the current sub-board
-MSG_SET_GROUP		Set the current message group by short name
-FILE_SET_LIBRARY	Set the current file library by short name
-
-
-Enhanced Baja Functions
-~~~~~~~~~~~~~~~~~~~~~~~
-SET_USER_STRING 	Checks for duplicates, proper syntax, and trash can
-REPLACE_TEXT		Can use command line specifiers in string argument
-LOG			"                                                "
-PRINT			"                                                "
-PRINT_LOCAL		"                                                "
-PRINT_REMOTE		"                                                "
-PRINTFILE		"                                                "
-PRINTFILE_REMOTE	"                                                "
-PRINTFILE_LOCAL 	"                                                "
-CHKFILE 		"                                                "
-EXEC_BIN		"                                                "
-YES_NO			"                                                "
-NO_YES			"                                                "
-MENU			"                                                "
-SETSTR			"                                                "
-SET_MENU_DIR		"                                                "
-SET_MENU_FILE		"                                                "
-COMPARE_STR		"                                                "
-
-
-New ARS Parameters
-~~~~~~~~~~~~~~~~~~
-RANDOM			Random number generation for random access/Baja control
-LASTON			Number of days since last logon
-LOGONS			Total number of logons
-
-
-New Command Line Specifiers
-~~~~~~~~~~~~~~~~~~~~~~~~~~~
-%o			Sysop name
-%q			System QWK ID
-%x			Internal code of user's command shell
-%*			Node number 0 padded to 3 digits
-%1			User number
-%2			User number 0 padded to 2 digits
-%3			User number 0 padded to 3 digits
-%4			etc..
-
-
-Message Base
-~~~~~~~~~~~~
-o Optional Daily QWK Pre-packing (for any user accounts)
-o The automatic forwarding of e-mail to NetMail can be specifically allowed
-	or disallowed in SCFG
-o New toggle option in SCFG to automatically kill e-mail after it has been read
-o QuickBBS/RemoteAccess MSGTMP style external editors now internally supported
-o Unix style (sole LF for newline) external editors now internally supported
-o When posting on a sub-board, any user added tear lines are changed to "-+-"
-o Searches for Personal Messages will now include both Real Name and Alias
-	matches, regardless of how the sub-board is configured in SCFG
-o Searches for Personal Messages now significantly faster
-o Message threading now many times faster
-o Un-read Personal Messages will display with an '!' in message title lists
-o Posting to a username on a local-only sub-board will require a valid username
-o QWK indexes and control files can be toggled off for smaller/faster packets
-o Synchronet QWK extensions (@VIA and @TZ) can be toggled from the QWK menu
-	or via QWK control messages
-o Importing and exporting of Area Files: Synchronet SUBS.TXT format, three
-	flavors of AREAS.BBS, and FIDONET.NA format
-o QWK control messages are now echoed to the user when importing REP packets
-
-QWK Networking
-~~~~~~~~~~~~~~
-o HUBID.QW0 through .QW9 will be imported in addition to .QWK
-o Routed QWK netmail will automatically take shortest route
-
-
-File Transfers
-~~~~~~~~~~~~~~
-o Externalized storage (environment variables SBBSFILENAME and SBBSFILEDESC
-	and files SBBSFILE.NAM and SBBSFILE.DES) of uploaded file names and
-	descriptions allows upload processors to convert/rename files, modify
-	file descriptions, or auto-hatch files into file distribution networks
-o Extended file descriptions in file listings will not be truncated and listed
-	twice on the same screen
-o Importing and exporting of Areas Files: Synchronet DIRS.TXT format and
-	FILEBONE.NA format
-o ADDFILES v2.12 adds "/S" option to search directories for files and import
-	them without requiring a file listing (FILES.BBS)
-
-
-Chat
-~~~~
-o Split-screen private node-to-node chat now has fake cursor in top window
-o Ctrl-P and Ctrl-U are active while in private chat
-o Notification of awaiting messages and telegrams while in split-screen chat
-o Split-screen chat can be toggled off/on by users from the Chat menu
-
-
-/* End of V211A.NEW */
diff --git a/docs/v220_new.txt b/docs/v220_new.txt
deleted file mode 100644
index d934c74965..0000000000
--- a/docs/v220_new.txt
+++ /dev/null
@@ -1,162 +0,0 @@
-                   What's new in Synchronet BBS Version 2.20
-                   =========================================
-
-General
-~~~~~~~
-o Support for WIP (Windows Interface Protocol) terminal programs (DCTERMW.ZIP)
-        by automatically detecting WIP terminals and displaying WIP menus
-o Each security level can be set to expire to a specific security level, the
-        default expired level, or a specific quick-validation set
-o Loadable module can be executed during daily maintenance for each expired
-        user enabling custom expiration options/features
-o New exemption (E) keeps specific users from expiring when their time runs out
-        if the "Expire when out-of-time" option has been enabled in SCFG
-o Expired users are written to the detailed log with a !% line for each user
-o New SBBS command line switch (o) to force all pending events to execute
-        and then immediately exit (for use with Front-end mailers)
-o New system toggle to disallow credit to minute conversions
-o Timed events can be forced by creating a semaphore file in the DATA directory
-        (similar to forced QWKnet call-outs)
-o Number of seconds between checks for node semaphores (down/rerun/event/etc)
-        and seconds between checks for waiting for call statistics can be
-        configured on a per-node basis
-o Each node can be individually toggled to disallow local beeps
-o New user locations can be allowed without commas (between city and state)
-        if the sysop wishes
-o Quick-validation hot-keys require locally input system password if changing
-        a user with level 90 or higher (reduces accidental Quick-validations)
-o If daily statistics database (DSTS.DAB) time stamp is more than 24 hours
-        in the future (apparently corrupted), a critical error is generated
-o Last few callers and callers today listing can be custom colorized and
-        easily removed from the logon procedure for some or all users
-        (number of callers displayed for last few callers is Baja modifiable)
-o Low-priority input toggle available on a per-node basis to fine-tune
-        aggregate system performance under multitasking environments
-o ARS keywords SUB and DIR now support sub-board and directory internal codes
-        (static) as well as the area number (dynamic) for the value argument
-o Doors can be configured for maximum time allowed (in drop file)
-o Waiting for call configuration (SCFG) command line configurable for each node
-o 32-bit DOS and OS/2 versions of the Synchronet configuration (SCFG) program
-o RIP and WIP screens are not displayed locally for a cleaner local console
-o E-7-1 remote terminals are now directly supported by Synchronet
-
-
-Message Networks
-~~~~~~~~~~~~~~~~
-o New FA: (file attachment) status override for sysops and 'F' exempt users
-        to send file attachments from anywhere to multiple addresses
-o Sub-boards can be toggled for "Internet Networked" to allow posts to unknown
-        user names and the 'N' restriction to work properly with NetXpress
-o QWK NetMail imported for an unknown address will be returned to the sender
-        (bounced) with "BADADDR: address" in the subject of the message
-
-
-Message Base
-~~~~~~~~~~~~
-o Moderated messages now show Moderated and Validated attributes
-o When changing message attributes, a hot-key menu interface is used
-o When moving messages between sub-boards, the original message may be left
-        intact (copying messages rather than moving)
-o When deleting messages from a message base, they are only flagged for
-        deletion later by message base maintenance, allowing the user to
-        undelete the message
-o More than 3000-4000 messages per sub-board supported (if memory allows)
-o Messages and text files of any size (no maximum length) can be viewed online
-o File attachments (e-mail) can now be forwarded among users
-o Local posts and e-mail from user #1 may contain @-code variables/actions
-o Sub-boards can be configured with static QWK conference numbers instead of
-        the default dynamic numbering scheme
-
-
-Guru Chat
-~~~~~~~~~
-o New response variables:
-        `O      SysOp's name
-        `S      System name
-        `G      Guru's name
-        `I      System's QWK ID
-        `L      User's level (previously `m)
-        `T      Time
-        `M      Month
-        `W      Day of the week
-        `J      Day of the month
-        `Y      Year
-        `Z      User's zip/postal code
-o AR strings can be used in Guru expressions by enclosing them in brackets
-        e.g. (HELLO&GURU&[LEVEL 90 OR FLAG S])
-o Guru starts conversation in "Local" mode (not multinode chat mode)
-
-
-File Transfers
-~~~~~~~~~~~~~~
-o Non-Synchronet color codes (@-codes, pipe-codes, etc) are now supported in
-        the descriptions of extended file listings (&E toggled ON)
-o Files moved from the upload or sysop directories automatically have their
-        upload date set to the current date so they will appear in new-scans
-o When in novice mode and batch flagging is enabled, file scans clear the
-        screen and display the batch flag command reference at the top of the
-        screen between each group of files
-o File areas can be configured for maximum file age in days for the new
-        file maintenance utility (DELFILES) to purge by upload date, last
-        download date, and/or files not on disk
-o Users can select a default download protocol and enable auto hang-up after
-        download (sysop can configure new user default values for these too)
-o Files placed in the batch download queue, but not downloaded during the call
-        will be automatically added to the batch download queue during the
-        user's next logon
-o File contents can be viewed from the (R)emove/Edit file prompt
-o External programs can place files in the batch download queue by creating a
-        list of files as DATA\FILE\####.DWN (where #### is the user number)
-o File areas can be set to deduct users' time online during uploads (instead
-        of the default behavior of suspending their time while uploading)
-o File areas can be set to award uploaders with minutes instead of credits
-
-
-PCMS (Programmable Command and Menu Structure) Enhancements
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-o Login procedure is controlled by a loadable module instead of hard-coded,
-        allowing custom login protocols and matrix menus
-o Loadable logon module has greater control over logon procedure, assuming
-        responsibility for displaying logon screens, initiating logon events,
-        displaying auto-message, last few callers, etc.
-o Optional synchronization module to be executed whenever nodes and displays
-        are synchronized (very frequently)
-o Optional logout module to be executed offline during logout procedure
-        (after disconnection)
-o Optional expired user module to be executed offline during daily maintenance
-        when users expire
-o Modules can be loaded and executed from anywhere by placing @EXEC:MODNAME@
-        in TEXT.DAT lines (excluding lines with % specifiers), menus, text
-        files, and even e-mail messages (optional)
-o Command shells and modules can use dynamic global and local variables
-        (character strings and 32-bit integers)
-o Direct file i/o operations available for command shells and modules
-o Maximum binary executable size increased from 32k to 64k
-o Read/write access to over 100 internal system string and integer variables
-o Ability to dynamically load alternate TEXT.DAT files allowing complete
-        foreign language and graphical protocol shells
-o Additional TEXT.DAT line to specify which keys are to be used for Yes and No,
-        completing the support necessary for foreign language shells
-o Comments allowed in TEXT.DAT by placing '#' at the beginning of the line
-
-
-Baja Compiler Version 2.00 Enhancements
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-o Compiler supports C-like macros (!define) for pre-processor definition of
-        integer and string constants
-o Compiler supports multi-file projects using a C-like pre-processor directive
-        (!include) for combining multiple source/include files
-o Many enhanced functions
-o New String Manipulation functions
-o New Integer Manipulation functions
-o New Logic/Control Flow functions
-o New Display functions
-o New Input functions
-o New Miscellaneous functions
-o New File Base functions
-o New Chat functions
-o New File I/O functions
-o New File system functions
-o New Directory system functions
-
-/* End of V220A.NEW */
diff --git a/docs/versions.hst b/docs/versions.hst
deleted file mode 100644
index 18286e2742..0000000000
--- a/docs/versions.hst
+++ /dev/null
@@ -1,30 +0,0 @@
-Synchronet Version Number History/Release Dates
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-1A08 05/29/92 First commerical release
-1A09 06/02/92 Bug fixes
-1A10 06/25/92 QWKnet, Alternate file paths, bi-dir QWK/REP, overlaid EXE only
-1A11 07/01/92 Bug fixes
-1A12 07/19/92 DESQview time-slice API, active nodes displayed at WFC, bug fixes
-1A13 08/03/92 Enhanced MODUSER.DAT, enhanced DESQview performance, bug fixes
-1B00 09/25/92 Multiple command sets, private node-to-node chat, FidoNet
-1B01 01/23/93 RIP, PostLink (UTI), quoting, FAX detection, QWKnet file xfers
-1B02 02/05/93 Reads DOOR.SYS
-1B03 03/11/93 Multiple CDROM drives, PCBOARD.SYS and USERS.SYS, Free K per Day
-1B04 04/30/93 EDITOR.INF, QUOTES.TXT, SFDOORS.DAT, CID, QWK FREQs, threading
-1B05 06/01/93 Bug fixes
-1C00 08/26/93 DIZ, ARS, dupe chking, @-Codes, reg key, WIN/OS2 time-slice API
-1C01 11/21/93 DigiBoard, RX flow ctrl, chat actions, file ratios, dumb modems
-1C02 11/30/93 Command line CID info, bug fixes
-200A 06/02/94 SMB, Baja, FOSSIL, 115.2k DTE, swapping, blind uploads, bulkmail
-200B 06/25/94 QWK *logons, STR_CMDS.BIN, bug fixes
-200C 08/20/94 SCFG modem config database, bug fixes, compiled w/Borland C v4.0
-200D 08/21/94 Recompiled with Borland C v3.1
-200E 08/24/94 Bug fix via patch (unsuccessful)
-200F 08/30/94 Bug fixes
-200G 09/09/94 Bug fixes
-210A 02/17/95 LZH compressed msg bases, QWK NetMail, split-screen pvt chat
-211A 03/18/95 Baja enhancements, MSGTMP editors, upload conversions, pre-QWK
-220A 08/31/95 WIP, major Baja enhancements, Multi-TEXT.DAT, SCFG32, LOGIN.BIN
-220B 09/27/95 External editor quote options and unlimited lines, bug fixes
-230A 05/30/97 Final release by Rob Swindell (FREEWARE - unlimited nodes)
diff --git a/docs/versions.txt b/docs/versions.txt
deleted file mode 100644
index 1ec1e1556f..0000000000
--- a/docs/versions.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-Versions of Utilities Included with this Synchronet Package
-===========================================================
-
-The "Filename" column specifies the program filename or sub-directory.
-The "Vers" column indicates the version number of the program.
-The "SBBS" column indicates the SBBS package when the program was last updated.
-The "Description" column is a description of the program.
-
-Filename     Vers  SBBS Description
---------     ----  ---- -------------------------------------------------------
-UTI*	     2.23  220A UTI driver set for PostLink v1.05+
-ADDFILES     2.22  220B Add files to database from DOS prompt or BAT file
-DELFILES     1.01  220B Delete files from database or disk from DOS prompt
-FILELIST     2.10  220A Generate ASCII file listings of file directories
-DUPEFIND     1.01  210A Finds duplciate file names in file directories
-AUTONODE     2.00  200A Find first available node for local logon
-BAJA	     2.01  220B Command shell/module (EXEC\*.SRC) compiler
-NODE	     1.03  1B03 Node display/control utility
-SLOG	     1.01  210A System/node statistics log viewer
-DSTSEDIT     1.01  200A System/node daily statistics editor
-ANS2MSG      1.06  220A ANSI to Ctrl-A conversion utility (for ASC/MSG files)
-MSG2ANS      1.03  200A Ctrl-A to ANSI conversion utility
-MLABELS      2.11  220A Generate mailing labels from Synchronet user data
-TONE	     1.01  200A Tone generation utility (external chat pager)
-DBCS	     1.00  1C01 DigiBoard channel status utility
-USER	     1.00  1A12 Pull specific user logons out of DATA\LOGS\*.LOG files
-ALLUSERS     2.11  220A Bulk command line user editor
-QWKNODES     1.20  220A QWKnet Node/Route/User list generator
-CHKSMB	     1.24  220A Checks Synchronet message base(s) for corruption
-FIXSMB	     1.22  220A Rebuilds Synchronet message base index and alloc files
-SMBUTIL      1.24  220A Message base utility for maintaining and packing
-SMBACTIV     1.00  210A Displays message base activity (users reading subs)
-SYNCEDIT     2.05  220B SyncEdit external message editor (Unregistered)
-SBBSECHO     1.12  220B FidoNet EchoMail import/export program (Unregistered)
-XTRN\SDK     2.34  220B External program software developer's kit (Freeware)
-XTRN\SBJ     2.31  220A Synchronet Blackjack Game with C source code (Freeware)
-XTRN\SBL     1.36  220A Synchronet BBS List Door with C source code (Freeware)
-XTRN\SCB     1.32  220A Synchronet Callback Verifier (Unregistered)
-XTRN\SMM     1.31  220B Synchronet Match Maker (Unregistered)
-XTRN\SCP     2.30  200A Supernet Centipede (Freeware)
-XTRN\DPOKER  1.40  200G Domain Poker Multi-Player Online Game (Unregistered)
diff --git a/exec/Makefile.bor b/exec/Makefile.bor
deleted file mode 100644
index 9ca926d1f3..0000000000
--- a/exec/Makefile.bor
+++ /dev/null
@@ -1,38 +0,0 @@
-# Synchronet Baja Module Makefile (for Borland make)
-
-# Requires Baja v2.20+
-
-# @format.tab-size 8, @format.use-tabs true
-
-# $id$
-
-all : 	bullseye.bin \
-	cntnodes.bin \
-	default.bin \
-	dir.bin \
-	file_io.bin \
-	login.bin \
-	logon.bin \
-	major.bin \
-	matrix.bin \
-	mudgate.bin \
-	noyesbar.bin \
-	pcboard.bin \
-	qnet.bin \
-	ra_emu.bin \
-	renegade.bin \
-	rlogin.bin \
-	sdos.bin \
-	simple.bin \
-	str_cmds.bin \
-	telgate.bin \
-	type.bin \
-	typehtml.bin \
-	unixgate.bin \
-	wildcat.bin \
-	wiplogin.bin \
-	wipshell.bin \
-	yesnobar.bin 
-
-.src.bin:
-	@baja /q $<
diff --git a/exec/Makefile.gnu b/exec/Makefile.gnu
deleted file mode 100644
index 5ed8a5e6cc..0000000000
--- a/exec/Makefile.gnu
+++ /dev/null
@@ -1,38 +0,0 @@
-# Synchronet Baja Module Makefile (GNU make)
-
-# Requires Baja v2.20+
-
-# @format.tab-size 8, @format.use-tabs true
-
-# $id$
-
-all : 	bullseye.bin \
-	cntnodes.bin \
-	default.bin \
-	dir.bin \
-	file_io.bin \
-	login.bin \
-	logon.bin \
-	major.bin \
-	matrix.bin \
-	mudgate.bin \
-	noyesbar.bin \
-	pcboard.bin \
-	qnet.bin \
-	ra_emu.bin \
-	renegade.bin \
-	rlogin.bin \
-	sdos.bin \
-	simple.bin \
-	str_cmds.bin \
-	telgate.bin \
-	type.bin \
-	typehtml.bin \
-	unixgate.bin \
-	wildcat.bin \
-	wiplogin.bin \
-	wipshell.bin \
-	yesnobar.bin 
-
-%.bin : %.src
-	@./baja /q $<
diff --git a/exec/bullseye.src b/exec/bullseye.src
deleted file mode 100644
index 221c143926..0000000000
--- a/exec/bullseye.src
+++ /dev/null
@@ -1,78 +0,0 @@
-# bullseye.src
-
-# Bulletins written in Baja by Rob Swindell
-
-# $Id$
-
-# @format.tab-size 8, @format.use-tabs true
-
-!include file_io.inc
-!include sbbsdefs.inc
-
-# Load the configuration file
-
-int i
-int b
-int file
-int filepos
-int total
-int mode
-str fname
-
-printf "\r\nSynchronet BullsEye! Version 1.00 by Rob Swindell\r\n"
-pause_reset
-set str "%zBULLSEYE.CFG"
-fopen file O_RDONLY str
-if_false
-	printf "\r\n!ERROR %ld opening %s\r\n" _errno str
-	return
-	end_if
-fread_line file str
-copy mode str
-fget_pos file filepos
-
-set total 0
-#print "%l: %s" total str
-:count_bulls
-	fread_line file str
-	#print "%ld: %s" total str
-	if_true	# not end of file
-		add total 1
-		goto count_bulls
-	        end_if
-
-# Display menu, list bulletins, display prompt, etc.
-:menu
-printfile "%zBULLSEYE.ASC"
-print "\1n\r\n\1b\1hEnter number of bulletin to view or press (\1wENTER\1b) to continue: \1w"
-getnum b total
-compare b 1
-if_less
-	return
-	end_if
-fset_pos file filepos
-set i 0
-:next
-fread_line file str
-if_true	# not end of file
-	add i 1
-	compare i b
-	if_equal
-		print "\1n\1l"
-		truncsp str
-		copy fname str
-		compare_substr str ".htm"
-		if_true
-			exec_bin typehtml
-		else
-			printfile_str
-			end_if
-		sprintf str "Node %d %s viewed bulletin #%d: %s" _node_num _useron.alias i fname
-		print_local "%s"
-		clear_abort
-		goto menu
-		end_if
-	goto next
-	end_if
-printf "\r\nInvalid bulletin number: %d" b
-goto menu
diff --git a/exec/chat_sec.src b/exec/chat_sec.src
deleted file mode 100644
index 642e44b7d8..0000000000
--- a/exec/chat_sec.src
+++ /dev/null
@@ -1,92 +0,0 @@
-# chat_sec.src
-
-# Chat Section for any/all Synchronet command shells
-
-# Requires v3.00g or later
-
-!include sbbsdefs.inc
-
-compare_ars rest C
-if_true
-    print "\r\nYou can't chat.\r\n"
-    return
-    end_if
-
-# Set return point for main menu commands (via end_cmd)
-cmd_home
-
-# Display TEXT\MENU\CHAT.* if not in expert mode
-compare_user_misc UM_EXPERT
-if_false
-	menu chat
-	end_if
-
-# Update node status
-node_action node_chat
-async
-print "\r\n\1_\1y\1hChat: \1n"
-getcmd "ACDFIJPQST?\r"
-cmdkey 'S'
-	TOGGLE_USER_CHAT CHAT_SPLITP
-	printf "\1n\r\nPrivate split-screen chat is now: \1h"
-	COMPARE_USER_CHAT CHAT_SPLITP
-	if_true
-		print "ON\1n"
-	else
-		print "OFF\1n"
-		end_if
-	crlf
-	end_cmd
-
-cmdkey 'A'
-	crlf
-	toggle_user_chat CHAT_NOACT
-	toggle_node_misc NODE_AOFF
-	nodelist_users
-	end_cmd
-
-cmdkey 'D'
-	crlf
-	toggle_user_chat CHAT_NOPAGE
-	toggle_node_misc NODE_POFF
-	nodelist_users
-	end_cmd
-
-cmdkey 'F'
-	crlf
-	exec "?finger"
-	end_cmd
-
-cmdkey 'I'
-	crlf
-	exec "?sbbsimsg"
-	end_cmd
-
-cmdkey 'J'
-	multinode_chat
-	end_cmd
-
-cmdkey 'P'
-	private_chat
-	end_cmd
-
-cmdkey 'C'
-	page_sysop
-	if_false
-		page_guru
-		end_if
-	end_cmd
-
-cmdkey 'T'
-	page_guru
-	end_cmd
-
-cmdkey '?'
-	compare_user_misc UM_EXPERT
-	if_true
-		menu "chat"
-		end_if
-	end_cmd
-
-cmd_pop
-return
\ No newline at end of file
diff --git a/exec/cntnodes.src b/exec/cntnodes.src
deleted file mode 100644
index 61648559db..0000000000
--- a/exec/cntnodes.src
+++ /dev/null
@@ -1,56 +0,0 @@
-# cntnodes.src
-
-# Counts number of nodes in use and number of nodes waiting for call
-# Sets global variables NODES_INUSE and NODES_WFC
-
-# $Id$
-
-# @format.tab-size 8, @format.use-tabs true
-
-!include sbbsdefs.inc
-
-int status
-global_int nodes_inuse nodes_wfc
-
-set nodes_inuse 0
-set nodes_wfc 0
-
-# Rewind NODE.DAB (_NODEFILE is a system variable)
-fset_pos _nodefile 0
-
-:read
-	feof _nodefile
-	if_true # End of file
-		goto end
-		end_if
-	# Lock record
-	flock _nodefile NODE_RECORD_LEN
-	if_false # Failed
-		goto end
-		end_if
-	# Read status
-	fread _nodefile status 1
-	if_false # Failed
-		funlock _nodefile NODE_RECORD_LEN
-		goto end
-		end_if
-	# Unlock record
-	fseek _nodefile -1 CUR
-	funlock _nodefile NODE_RECORD_LEN
-	# Skip record
-	fseek _nodefile NODE_RECORD_LEN CUR
-	switch status
-		case NODE_WFC
-			add nodes_wfc 1
-			end_case
-		case NODE_LOGON
-		case NODE_NEWUSER
-		case NODE_INUSE
-		case NODE_QUIET
-			add nodes_inuse 1
-			end_case
-		end_switch
-	goto read
-:end
-printf "Nodes in use=%ld  Waiting for Caller=%ld\r\n" nodes_inuse nodes_wfc
-
diff --git a/exec/default.src b/exec/default.src
deleted file mode 100644
index 3eb5c1a744..0000000000
--- a/exec/default.src
+++ /dev/null
@@ -1,922 +0,0 @@
-# default.src
-
-# Default Command Shell for Synchronet Version 2.00a+
-
-# $Id$
-
-# @format.tab-size 8, @format.use-tabs true
-
-###############################################################################
-# This shell is an imitation of the Version 1c command set/structure	      #
-#									      #
-# It also serves as an example of a complex command shell using the Baja      #
-# command shell language						      #
-#									      #
-###############################################################################
-
-# Tips:
-#
-#	Tabstops should be set to 8 to view/edit this file
-#	If your editor does not support control characters,
-#		use \1 for Ctrl-A codes
-#	All lines starting with # are considered comments and are ignored
-#	Left margins (indents) are not relevant and used only for clarity
-#	Almost everything is not case sensitive with the exception of @-codes
-
-################################# Begins Here #################################
-
-!include sbbsdefs.inc
-
-# Set return point for main menu commands (via end_cmd)
-cmd_home
-
-# Display TEXT\MENU\MAIN.* if not in expert mode
-compare_user_misc UM_EXPERT
-if_false
-	cls
-	menu main
-	end_if
-
-# Update node status
-node_action node_main
-async
-
-inc_main_cmds
-
-# Display main Prompt
-print "-c\r\n� bhMain nc� h"
-compare_ars exempt T
-if_true
-	print "@TUSED@"
-else
-	print "@TLEFT@"
-	end_if
-print " nc[h@GN@nc] @GRP@ [h@SN@nc] @SUB@: n"
-
-# Get key (with / extended commands allowed)
-compare_user_misc UM_COLDKEYS
-if_false
-	getkeye
-else
-	getstrupr 60
-	endif
-
-compare_ars RIP
-if_true
-	getlines
-	end_if
-
-# Do nothing for control keys and space
-cmdkey ^@
-	end_cmd
-cmdkey ^M
-	end_cmd
-cmdkey ^S
-	end_cmd
- cmdkey  "
-	end_cmd
-
-# Write command to log file
-logkey_comma
-
-# Hitting number changes current sub-board
-cmdkey digit
-	compare_user_misc UM_COLDKEYS
-	if_false
-		ungetkey
-		end_if
-	msg_get_sub_num
-	end_cmd
-
-# Hitting /number changes current group
-cmdkey edigit
-	compare_user_misc UM_COLDKEYS
-	if_false
-		ungetkey
-	else
-		shift_str 1
-		end_if
-	msg_get_grp_num
-	end_cmd
-
-# Show the key hit
-compare_user_misc UM_COLDKEYS
-if_false
-	printkey
-	endif
-
-# Next sub-board
-cmdkey >
-	msg_subboard_up
-	end_cmd
-cmdkey }
-	msg_subboard_up
-	end_cmd
-cmdkey +
-	msg_subboard_up
-	end_cmd
-cmdkey =
-	msg_subboard_up
-	end_cmd
-
-# Previous sub-board
-cmdkey <
-	msg_subboard_down
-	end_cmd
-cmdkey {
-	msg_subboard_down
-	end_cmd
-cmdkey -
-	msg_subboard_down
-	end_cmd
-
-# Next group
-cmdkey ]
-	msg_group_up
-	end_cmd
-
-# Previous group
-cmdkey [
-	msg_group_down
-	end_cmd
-
-# String commands start with a semicolon
-cmdkey ;
-	compare_user_misc UM_COLDKEYS
-	if_true
-		shift_str 1
-	else
-		getstrupr 40
-		end_if
-	exec_bin str_cmds
-	end_cmd
-
-cmdkey T
-	chkfile "%zmenu/tmessage.*"
-	if_true
-		menu tmessage
-		end_if
-        call file_transfers
-        end_cmd
-
-compare_user_misc UM_COLDKEYS
-if_false
-	crlf
-	end_if
-pause_reset
-
-# Menu
-cmdkey ?
-	compare_user_misc UM_expert
-	if_true
-		menu main
-		end_if
-	end_cmd
-
-# Sysop Menu
-compare_ars SYSOP or EXEMPT Q or I or N
-if_true
-	cmdkey !
-		menu sysmain
-		end_cmd
-	end_if
-
-# Commands
-
-cmdkey A
-	auto_message
-	end_cmd
-
-cmdkey B
-	print "\r\nchBrowse/New Message Scan\r\n"
-	msg_browse_scan
-	end_cmd
-
-cmdkey C
-	exec_bin chat_sec
-	end_cmd
-
-cmdkey D
-	user_defaults
-	end_cmd
-
-cmdkey E
-	call E-mail
-	end_cmd
-
-cmdkey F
-	print "\r\nchFind Text in Messages\r\n"
-	msg_find_text
-	end_cmd
-
-cmdkey /F
-	msg_find_text_all
-	end_cmd
-
-cmdkey G
-	text_file_section
-	end_cmd
-
-cmdkey I
-	call main_info
-	end_cmd
-
-cmdkey J
-	msg_select_area
-	end_cmd
-
-cmdkey /L
-	nodelist_all
-	end_cmd
-
-cmdkey M
-	minute_bank
-	end_cmd
-
-cmdkey N
-	print "\r\nchNew Message Scan\r\n"
-	msg_new_scan
-	end_cmd
-
-cmdkey /N
-	msg_new_scan_all
-	end_cmd
-
-cmdkey O
-	file_download_batch
-	if_true
-		end_cmd
-                end_if
-	logoff
-	end_cmd
-
-cmdkey /O
-	file_download_batch
-	if_true
-		end_cmd
-                end_if
-	logoff_fast
-	end_cmd
-
-cmdkey P
-	msg_post
-	end_cmd
-
-cmdkey Q
-	msg_qwk
-	end_cmd
-
-cmdkey R
-	msg_read
-	end_cmd
-
-cmdkey S
-	print "\r\nchScan for Messages Posted to You\r\n"
-	msg_your_scan
-	end_cmd
-
-cmdkey /S
-	msg_your_scan_all
-	end_cmd
-
-cmdkey U
-	print "\r\nchList Users\r\n"
-	mnemonics "\r\n~Logons Today, ~Sub-board, or ~All: "
-	getcmd LSA\r
-
-	cmdkey L
-		userlist_logons
-		end_cmd
-	cmdkey S
-		userlist_sub
-		end_cmd
-	cmdkey A
-		userlist_all
-		end_cmd
-
-	# fall-through for CR, Ctrl-C, etc
-	end_cmd
-
-cmdkey /U
-	userlist_all
-	end_cmd
-
-cmdkey X
-	xtrn_section
-	end_cmd
-
-cmdkey Z
-	print "\r\nchContinuous New Message Scan\r\n"
-	msg_cont_scan
-	end_cmd
-
-cmdkey /Z
-	msg_cont_scan_all
-	end_cmd
-
-cmdkey *
-	msg_show_subboards
-	end_cmd
-
-cmdkey /*
-	msg_show_groups
-	end_cmd
-
-cmdkey &
-	call main_cfg
-	end_cmd
-
-cmdkey #
-	print "\r\nchType the actual number, not the symbol.\r\n"
-	end_cmd
-
-cmdkey /#
-	print "\r\nchType the actual number, not the symbol.\r\n"
-        end_cmd
-
-# fall through
-print "\r\nchUnrecognized command."
-compare_user_misc UM_expert
-if_true
-	print " Hit 'i?nch' for a menu."
-	end_if
-crlf
-end_cmd
-
-# shouldn't hit next line
-print "Problem in command shell."
-pause
-hangup
-return
-
-############################### E-mail Section ################################
-
-:e-mail
-cmd_home
-compare_user_misc UM_expert
-if_false
-	menu e-mail
-	end_if
-async
-print "\r\nyhE-mail: n"
-getcmd ?SRFNUKQ\r
-logkey
-
-cmdkey ?
-	compare_user_misc UM_expert
-	if_true
-		menu e-mail
-		end_if
-	end_cmd
-
-cmdkey S
-	print "_\r\nbhE-mail (User name or number): w"
-	getname 25
-	compare_str ""
-	if_true
-		end_cmd
-		end_if
-	compare_str "SYSOP"
-	if_true
-		setstr "1"
-		end_if
-	mail_send
-	end_cmd
-
-cmdkey U
-	print "_\r\nbhE-mail (User name or number): w"
-	getname 25
-	compare_str ""
-	if_true
-		end_cmd
-		end_if
-	compare_str "SYSOP"
-	if_true
-		setstr "1"
-		end_if
-	mail_send_file
-        end_cmd
-
-cmdkey R
-	mail_read
-	end_cmd
-
-cmdkey F
-	setstr "1"
-	mail_send_feedback
-	end_cmd
-
-cmdkey N
-	no_yes "\r\nAttach a file"
-	if_true
-		mail_send_netmail
-	else	
-		mail_send_netfile
-		end_if
-	end_cmd
-
-cmdkey K
-	mail_read_sent
-	end_cmd
-
-cmdkey Q
-	cmd_pop
-	return
-	end_cmd
-
-cmd_pop
-return
-
-############################ Main Info Section	###############################
-
-:main_info
-cmd_home
-compare_user_misc UM_expert
-if_false
-	menu maininfo
-	end_if
-async
-print "\r\nyhInfo: n"
-getcmd ?QISVY\r
-logkey
-
-cmdkey ?
-	compare_user_misc UM_expert
-	if_true
-		menu maininfo
-		end_if
-	end_cmd
-
-cmdkey I
-	info_system
-	end_cmd
-
-cmdkey S
-	info_subboard
-	end_cmd
-
-cmdkey Y
-	info_user
-	end_cmd
-
-cmdkey V
-	info_version
-	end_cmd
-
-cmdkey Q
-	cmd_pop
-	return
-	end_cmd
-
-cmd_pop
-return
-
-########################### Main Config Section  ##############################
-
-:main_cfg
-
-compare_user_misc UM_expert
-if_false
-	menu maincfg
-	end_if
-async
-print "\r\nyhConfig: n"
-getcmd ?QNPIS\r
-logkey
-
-cmdkey ?
-	compare_user_misc UM_expert
-	if_true
-		menu maincfg
-		end_if
-	goto main_cfg
-	end_cmd
-
-cmdkey N
-	msg_new_scan_cfg
-	return
-	end_cmd
-
-cmdkey S
-	msg_your_scan_cfg
-	return
-	end_cmd
-
-cmdkey P
-	msg_ptrs_cfg
-	return
-	end_cmd
-
-cmdkey I
-	msg_ptrs_reinit
-	return
-	end_cmd
-
-return
-
-
-########################### File Transfer Section #############################
-
-:file_transfers
-
-compare_ars file_cmds=0
-if_true
-	compare_user_misc UM_ask_nscan
-	if_true
-		yes_no "\r\n\r\nSearch all libraries for new files"
-		if_true
-			file_new_scan_all
-			end_if
-		end_if
-	end_if
-
-cmd_home
-
-compare_user_misc UM_expert
-if_false
-	cls
-	menu transfer
-	end_if
-
-# Update node status
-node_action node_xfer
-async
-
-inc_file_cmds
-
-# Display main Prompt
-print "-c\r\n� bhFile nc� h"
-compare_ars exempt T
-if_true
-	print "@TUSED@"
-else
-	print "@TLEFT@"
-	end_if
-print " nc(h@LN@nc) @LIB@ (h@DN@nc) @DIR@: n"
-
-# Get key (with / extended commands allowed)
-compare_user_misc UM_COLDKEYS
-if_false
-	getkeye
-else
-	getstrupr 60
-        endif
-
-compare_ars RIP
-if_true
-	getlines
-	end_if
-
-# Do nothing for control keys and space
-cmdkey ^@
-	end_cmd
-cmdkey ^M
-	end_cmd
-cmdkey ^S
-	end_cmd
- cmdkey  "
-	end_cmd
-
-# Write command to log file
-logkey_comma
-
-# Hitting number changes current sub-board
-cmdkey digit
-	compare_user_misc UM_COLDKEYS
-	if_false
-		ungetkey
-                end_if
-	file_get_dir_num
-	end_cmd
-
-# Hitting /number changes current group
-cmdkey edigit
-	compare_user_misc UM_COLDKEYS
-	if_false
-		ungetkey
-	else
-		shift_str 1
-                end_if
-	file_get_lib_num
-	end_cmd
-
-# Show the key hit
-compare_user_misc UM_COLDKEYS
-if_false
-	printkey
-        endif
-
-# Next directory
-cmdkey >
-	file_directory_up
-	end_cmd
-cmdkey }
-	file_directory_up
-	end_cmd
-cmdkey +
-	file_directory_up
-	end_cmd
-cmdkey =
-	file_directory_up
-	end_cmd
-
-# Previous directory
-cmdkey <
-	file_directory_down
-	end_cmd
-cmdkey {
-	file_directory_down
-	end_cmd
-cmdkey -
-	file_directory_down
-	end_cmd
-
-# Next library
-cmdkey ]
-	file_library_up
-	end_cmd
-
-# Previous library
-cmdkey [
-	file_library_down
-	end_cmd
-
-# String commands start with a semicolon
-cmdkey ;
-	compare_user_misc UM_COLDKEYS
-	if_true
-		shift_str 1
-	else
-                getstrupr 40
-		end_if
-	exec_bin str_cmds
-	end_cmd
-
-cmdkey Q
-        cmd_pop
-        return
-        end_cmd
-
-compare_user_misc UM_COLDKEYS
-if_false
-	crlf
-	end_if
-pause_reset
-
-# Menu
-cmdkey ?
-	compare_user_misc UM_expert
-	if_true
-		menu transfer
-		end_if
-	end_cmd
-
-# Sysop Menu
-compare_ars SYSOP
-if_true
-	cmdkey !
-		menu sysxfer
-		end_cmd
-	end_if
-
-# Commands
-
-cmdkey B
-	file_batch_section
-	end_cmd
-
-cmdkey C
-	exec_bin chat_sec
-	end_cmd
-
-cmdkey D
-	print "\r\nchDownload File(s)\r\n"
-	file_download_batch
-	if_true
-		end_cmd
-		end_if
-	getfilespec
-	if_true
-		file_download
-		end_if
-	end_cmd
-
-cmdkey /D
-	print "\r\nchDownload File(s) from User(s)\r\n"
-	file_download_user
-	end_cmd
-
-cmdkey E
-	print "\r\nchList Extended File Information\r\n"
-	getfilespec
-	if_true
-		file_list_extended
-		end_if
-	end_cmd
-
-cmdkey F
-	print "\r\nchFind Text in File Descriptions (no wildcards)\r\n"
-	file_find_text
-	end_cmd
-
-cmdkey /F
-	file_find_text_all
-        end_cmd
-
-cmdkey I
-	call file_info
-	end_cmd
-
-cmdkey J
-	file_select_area
-	end_cmd
-
-cmdkey L
-	setstr *.*
-	file_list
-	end_cmd
-
-cmdkey /L
-	nodelist_all
-	end_cmd
-
-cmdkey N
-	print "\r\nchNew File Scan\r\n"
-	file_new_scan
-	end_cmd
-
-cmdkey /N
-	file_new_scan_all
-	end_cmd
-
-cmdkey O
-	file_download_batch
-	if_true
-		end_cmd
-                end_if
-	logoff
-	end_cmd
-
-cmdkey /O
-	file_download_batch
-	if_true
-		end_cmd
-                end_if
-	logoff_fast
-        end_cmd
-
-cmdkey R
-	print "\r\nchRemove/Edit File(s)\r\n"
-	getfilespec
-	if_true
-		file_remove
-		end_if
-	end_cmd
-
-cmdkey S
-	print "\r\nchSearch for Filename(s)\r\n"
-	file_find_name
-	end_cmd
-
-cmdkey /S
-	file_find_name_all
-	end_cmd
-
-cmdkey T
-	file_temp_section
-	end_cmd
-
-cmdkey U
-	print "\r\nchUpload File\r\n"
-	chkfile "%zmenu/upload.*"
-	if_true
-		menu upload
-		end_if
-	file_upload
-	end_cmd
-
-cmdkey /U
-	print "\r\nchUpload File to User\r\n"
-	file_upload_user
-	end_cmd
-
-cmdkey V
-	print "\r\nchView File(s)\r\n"
-	getfilespec
-	if_true
-		file_view
-		end_if
-	end_cmd
-
-cmdkey Z
-	print "\r\nchUpload File to Sysop\r\n"
-	file_upload_sysop
-	end_cmd
-
-cmdkey *
-	file_show_directories
-	end_cmd
-
-cmdkey /*
-	file_show_libraries
-	end_cmd
-
-cmdkey &
-	:xfercfg
-	compare_user_misc UM_expert
-	if_false
-		menu xfercfg
-		end_if
-	async
-	print "\r\nyhConfig: n"
-	getcmd ?QBEP\r
-	logkey
-
-	cmdkey ?
-		compare_user_misc UM_expert
-		if_true
-			menu xfercfg
-			end_if
-		goto xfercfg
-		end_cmd
-
-	cmdkey P
-		file_ptrs_cfg
-		end_cmd
-
-	cmdkey B
-		toggle_user_misc UM_BATCHFLAG
-		end_cmd
-
-	cmdkey E
-		toggle_user_misc UM_EXTDESC
-                end_cmd
-	end_cmd
-
-cmdkey #
-	print "\r\nchType the actual number, not the symbol.\r\n"
-	end_cmd
-
-cmdkey /#
-	print "\r\nchType the actual number, not the symbol.\r\n"
-        end_cmd
-
-# fall through
-print "\r\nchUnrecognized command."
-compare_user_misc UM_expert
-if_true
-	print " Hit 'i?nch' for a menu."
-	end_if
-crlf
-end_cmd
-
-# shouldn't hit next line
-print "Problem in command shell."
-pause
-hangup
-
-############################ File Info Section	###############################
-
-:file_info
-cmd_home
-compare_user_misc UM_expert
-if_false
-	menu xferinfo
-	end_if
-async
-print "\r\nyhInfo: n"
-getcmd ?TYDUQ\r
-logkey
-
-cmdkey ?
-	compare_user_misc UM_expert
-	if_true
-		menu xferinfo
-		end_if
-	end_cmd
-
-cmdkey T
-	info_xfer_policy
-	end_cmd
-
-cmdkey Y
-	info_user
-	end_cmd
-
-cmdkey D
-	info_directory
-	end_cmd
-
-cmdkey U
-	userlist_dir
-	end_cmd
-
-cmdkey Q
-	cmd_pop
-	return
-	end_cmd
-
-cmd_pop
-return
-
-#end of DEFAULT.SRC
diff --git a/exec/dir.src b/exec/dir.src
deleted file mode 100644
index b02a2eadff..0000000000
--- a/exec/dir.src
+++ /dev/null
@@ -1,110 +0,0 @@
-# dir.src
-
-# Test of Directory System Functions
-
-# $Id$
-
-# @format.tab-size 8, @format.use-tabs true
-
-!include sbbsdefs.inc
-!include dir_attr.inc
-
-int dir fattr flen ftime bytes files i
-str path name attr time date
-
-print "Directory of: "
-getstrupr path 60
-open_dir dir path
-if_false
-	printf "Unable to open %s\r\n" path
-	return
-	end_if
-printf "Directory of %s\r\n\r\n" path
-:next
-	copy i _sys_status
-	and i SS_ABORT
-	compare i 0
-	if_not_equal # Ctrl-C hit
-		print "Aborted.\n"
-		goto end
-		end_if
-	read_dir dir name
-	if_false
-		goto end
-		end_if
-	# Increment file counter
-	add files 1
-	sprintf str "%s\\%s" path name
-	get_file_attrib fattr str
-	get_file_length flen str
-	# Add to total byte counter
-	compare flen 0
-	if_greater
-		add bytes flen
-		end_if
-	get_file_time ftime str
-	ftime_str time "%H:%M:%S" ftime
-	ftime_str date "%m/%d/%y" ftime
-
-	set attr ""
-
-	copy i fattr
-	and i FA_RDONLY
-	compare i 0
-	if_not_equal
-		strcat attr "r"
-	else
-		strcat attr "-"
-		end_if
-
-	copy i fattr
-	and i FA_HIDDEN
-	compare i 0
-	if_not_equal
-		strcat attr "h"
-	else
-		strcat attr "-"
-                end_if
-
-	copy i fattr
-	and i FA_SYSTEM
-	compare i 0
-	if_not_equal
-		strcat attr "s"
-	else
-		strcat attr "-"
-                end_if
-
-	copy i fattr
-	and i FA_LABEL
-	compare i 0
-	if_not_equal
-		strcat attr "l"
-	else
-		strcat attr "-"
-                end_if
-
-	copy i fattr
-	and i FA_DIREC
-	compare i 0
-	if_not_equal
-		strcat attr "d"
-	else
-		strcat attr "-"
-                end_if
-
-	copy i fattr
-	and i FA_ARCH
-	compare i 0
-	if_not_equal
-		strcat attr "a"
-	else
-		strcat attr "-"
-                end_if
-
-	printf "%s %10ld  %s  %s  %s\r\n" attr flen date time name
-	goto next
-:end
-close_dir dir
-printf "\r\n%lu total bytes in %lu files\r\n" bytes files
-
diff --git a/exec/dir_attr.inc b/exec/dir_attr.inc
deleted file mode 100644
index dcd3448721..0000000000
--- a/exec/dir_attr.inc
+++ /dev/null
@@ -1,18 +0,0 @@
-# dir_attr.inc
-
-# Baja include file defining DOS Directory Entry Attribute constants
-# Specifically used with the SET_FILE_ATTRIB and GET_FILE_ATTRIB functions
-
-# $id$
-
-# @format.tab-size 8, @format.use-tabs true
-
-!define FA_NORMAL   0x00
-!define FA_RDONLY   0x01
-!define FA_HIDDEN   0x02
-!define FA_SYSTEM   0x04
-!define FA_LABEL    0x08
-!define FA_DIREC    0x10
-!define FA_ARCH     0x20
-
-# End of DIR_ATTR.INC
diff --git a/exec/dumpobjs.js b/exec/dumpobjs.js
deleted file mode 100644
index 24848eceec..0000000000
--- a/exec/dumpobjs.js
+++ /dev/null
@@ -1,100 +0,0 @@
-// system
-console.clear();
-print("\1hproperties of \1ysystem \1wobject\1n");
-for(i in system)
-	print("system." + i + " = " + system[i]);
-
-// system.stats
-console.clear();
-print("\1hproperties of \1ysystem.stats \1wobject\1n");
-for(i in system.stats)
-	print("system.stats." + i + " = " + system.stats[i]);
-
-// system.node_list[]
-console.clear();
-print("\1helements of \1ysystem.node_list \1warray\1n");
-for(n in system.node_list)
-	for(i in system.node_list[n])
-		print("system.node_list[" + n + "]." + i + " = " + system.node_list[n][i]);
-
-// client
-console.clear();
-print("\1hproperties of \1yclient \1wobject\1n");
-for(i in client)
-	print("client." + i + " = " + client[i]);
-
-// client.socket
-console.clear();
-print("\1hproperties of \1yclient.socket \1wobject\1n");
-for(i in client.socket)
-	print("client.socket." + i + " = " + client.socket[i]);
-
-// server
-console.clear();
-print("\1hproperties of \1yserver \1wobject\1n");
-for(i in server)
-	print("server." + i + " = " + server[i]);
-
-// user
-console.clear();
-print("\1hproperties of \1yuser \1wobject\1n");
-for(i in user)
-	print("user." + i + " = " + user[i]);
-
-// user.stats
-console.clear();
-print("\1hproperties of \1yuser.stats \1wobject\1n");
-for(i in user.stats)
-	print("user.stats." + i + " = " + user.stats[i]);
-
-// user.security
-console.clear();
-print("\1hproperties of \1yuser.security \1wobject\1n");
-for(i in user.security)
-	print("user.security." + i + " = " + user.security[i]);
-
-// msg_area
-console.clear();
-print("\1hproperties of \1ymsg_area \1wobject\1n");
-for(i in msg_area)
-	print("msg_area." + i + " = " + msg_area[i]);
-
-// msg_area.grp_list[]
-print("\1helements of \1ymsg_area.grp_list \1warray\1n");
-for(n in msg_area.grp_list) {
-	for(i in msg_area.grp_list[n])
-		print("msg_area.grp_list[" + n + "]." + i + " = " + msg_area.grp_list[n][i]);
-	for(d in msg_area.grp_list[n].sub_list)
-		for(i in msg_area.grp_list[n].sub_list[d])
-			print("msg_area.grp_list[" + n + "].sub_list[" + d + "]." + i + " = " + 
-				msg_area.grp_list[n].sub_list[d][i]);
-}
-
-// file_area
-console.clear();
-print("\1hproperties of \1yfile_area \1wobject\1n");
-for(i in file_area)
-	print("file_area." + i + " = " + file_area[i]);
-
-// file_area.lib_list[]
-print("\1helements of \1yfile_area.lib_list \1warray\1n");
-for(n in file_area.lib_list) {
-	for(i in file_area.lib_list[n])
-		print("file_area.lib_list[" + n + "]." + i + " = " + file_area.lib_list[n][i]);
-	for(d in file_area.lib_list[n].dir_list)
-		for(i in file_area.lib_list[n].dir_list[d])
-			print("file_area.lib_list[" + n + "].dir_list[" + d + "]." + i + " = " + 
-				file_area.lib_list[n].dir_list[d][i]);
-}
-
-// bbs
-console.clear();
-print("\1hproperties of \1ybbs \1wobject\1n");
-for(i in bbs)
-	print("bbs." + i + " = " + bbs[i]);
-
-// console
-console.clear();
-print("\1hproperties of \1yconsole \1wobject\1n");
-for(i in console)
-	print("console." + i + " = " + console[i]);
diff --git a/exec/errno.inc b/exec/errno.inc
deleted file mode 100644
index 7029d99551..0000000000
--- a/exec/errno.inc
+++ /dev/null
@@ -1,65 +0,0 @@
-# errno.inc
-
-# 	 Defines the system error variable _errno and the error
-# 	 numbers set by system calls. Errors which exist in Unix(tm)
-# 	 but not MSDOS have value -1.
-
-# $id$
-
-# @format.tab-size 8, @format.use-tabs true
-
-!global _ERRNO
-
-!define EZERO 	 0			# Error 0
-!define EINVFNC  1			# Invalid function number
-!define ENOFILE  2			# File not found
-!define ENOPATH  3			# Path not found
-!define ECONTR	 7			# Memory blocks destroyed
-!define EINVMEM  9			# Invalid memory block address
-!define EINVENV 10			# Invalid environment
-!define EINVFMT 11			# Invalid format
-!define EINVACC 12			# Invalid access code
-!define EINVDAT 13			# Invalid data
-!define EINVDRV 15			# Invalid drive specified
-!define ECURDIR 16			# Attempt to remove CurDir
-!define ENOTSAM 17			# Not same device
-!define ENMFILE 18			# No more files
-
-!define ENOENT	 2			# No such file or directory
-!define EMFILE	 4			# Too many open files
-!define EACCES	 5			# Permission denied
-!define EBADF 	 6			# Bad file number
-!define ENOMEM	 8			# Not enough core
-!define EFAULT	14			# Unknown error
-!define ENODEV	15			# No such device
-!define EINVAL	19			# Invalid argument
-!define E2BIG 	20			# Arg list too long
-!define ENOEXEC 21			# Exec format error
-!define EXDEV 	22			# Cross-device link
-!define ENFILE	23			# UNIX - not MSDOS
-!define ECHILD	24			# Unix/DOS
-!define ENOTTY	25			# UNIX - not MSDOS
-!define ETXTBSY 26			# UNIX - not MSDOS
-!define EFBIG 	27			# UNIX - not MSDOS
-!define ENOSPC	28			# UNIX - not MSDOS
-!define ESPIPE	29			# UNIX - not MSDOS
-!define EROFS 	30			# UNIX - not MSDOS
-!define EMLINK	31			# UNIX - not MSDOS
-!define EPIPE 	32			# UNIX - not MSDOS
-!define EDOM	33			# Math argument
-!define ERANGE	34			# Result too large
-!define EEXIST	35			# File already exists
-!define EDEADLOCK 36			# Locking violation
-!define EPERM 	37			# UNIX - not MSDOS
-!define ESRCH 	38			# UNIX - not MSDOS
-!define EINTR 	39			# UNIX - not MSDOS
-!define EIO	40			# UNIX - not MSDOS
-!define ENXIO 	41			# UNIX - not MSDOS
-!define EAGAIN	42			# UNIX - not MSDOS
-!define ENOTBLK 43			# UNIX - not MSDOS
-!define EBUSY 	44			# UNIX - not MSDOS
-!define ENOTDIR 45			# UNIX - not MSDOS
-!define EISDIR	46			# UNIX - not MSDOS
-!define EUCLEAN 47			# UNIX - not MSDOS
-
-# End of ERRNO.INC
diff --git a/exec/examples/dir.js b/exec/examples/dir.js
deleted file mode 100644
index 080b6311d6..0000000000
--- a/exec/examples/dir.js
+++ /dev/null
@@ -1,25 +0,0 @@
-// dir.js
-
-// Example use of global directory() method.
-
-// $Id$
-
-// @format.tab-size 8, @format.use-tabs true
-
-load("sbbsdefs.js");
-
-if (argc==0)
-	path = prompt("Path");
-else
-	path = argv[0];
-if (path==undefined)
-	exit();
-if (path.indexOf('*')<0 && path.indexOf('?')<0)
-	path += "*"; // No pattern specified
-print(path);
-dir = directory(path);
-for (i in dir)  {
-	if(bbs.sys_status&SS_ABORT)
-		break;
-	print(dir[i]);
-}
\ No newline at end of file
diff --git a/exec/examples/socktest.js b/exec/examples/socktest.js
deleted file mode 100644
index 3ca7fc9a89..0000000000
--- a/exec/examples/socktest.js
+++ /dev/null
@@ -1,46 +0,0 @@
-load("sbbsdefs.js");	// CON_RAW_IN
-load("sockdefs.js");	// SO_RCVBUF
-
-printf("tx = %d\r\n",client.socket.getoption(SOL_SOCKET,SO_SNDBUF));
-printf("rx = %d\r\n",client.socket.getoption(SOL_SOCKET,SO_RCVBUF));
-console.status |= CON_RAW_IN;		// Enable RAW input mode (pass-through ctrl chars)
-var socket = new Socket();
-
-socket.debug=true;
-
-if(!socket.bind()) {
-	printf("!bind error %d\r\n",socket.last_error);
-	exit();
-}
-
-var addr=prompt("address");
-var port=Number(prompt("port"));
-
-if(!socket.connect(addr,port)) {
-	printf("!connect error %d\r\n",socket.last_error);
-	exit();
-}
-
-printf("\r\nConnected to %s:%d - Ctrl-] to abort\r\n",addr,port);
-console.pause();
-
-while(socket.is_connected && client.socket.is_connected) {
-	if(socket.data_waiting) {
-		buf = socket.read();
-		client.socket.write(buf);
-		continue;
-	}
-	if((input=console.inkey())!="") {
-		if(input=="\x1d")	/* Ctrl-] */
-			break;
-		socket.write(input);
-		continue;
-	}
-	sleep(1);
-}
-
-console.status &= ~CON_RAW_IN;		// Disable raw input mode
-
-socket.debug=false;
-
-print("\r\nEnd of socktest!\r\n");
\ No newline at end of file
diff --git a/exec/file_io.inc b/exec/file_io.inc
deleted file mode 100644
index 3b20527cce..0000000000
--- a/exec/file_io.inc
+++ /dev/null
@@ -1,32 +0,0 @@
-# file_io.inc
-
-# Baja include file defining various File I/O related constants
-
-# $id$
-
-# @format.tab-size 8, @format.use-tabs true
-
-!define O_RDONLY	 1	# Read only
-!define O_WRONLY	 2	# Write only
-!define O_RDWR		 4	# Read/write
-
-# Flag values for open only
-
-!define O_CREAT     0x0100	# create and open file
-!define O_TRUNC     0x0200	# open with truncation
-!define O_EXCL	    0x0400	# exclusive open
-!define O_APPEND    0x0800	# to end of file
-
-!define O_NOINHERIT 0x80
-!define O_DENYALL   0x10
-!define O_DENYWRITE 0x20
-!define O_DENYREAD  0x30
-!define O_DENYNONE  0x40
-
-# Seek (FSET_POS) constants for 'whence'
-
-!define SEEK_SET    0		# Seek from beginning of file
-!define SEEK_CUR    1		# Seek from current position
-!define SEEK_END    2		# Seek from end of file
-
-# End of FILE_IO.INC
diff --git a/exec/file_io.src b/exec/file_io.src
deleted file mode 100644
index 711f71219d..0000000000
--- a/exec/file_io.src
+++ /dev/null
@@ -1,182 +0,0 @@
-# file_io.src
-
-# Module for performing various i/o operations on a single file
-
-# $Id$
-
-# @format.tab-size 8, @format.use-tabs true
-
-!include file_io.inc
-
-# Variables
-int file
-int len
-int pos
-int time
-int int
-str buf
-str name
-
-# Get filename to open
-print "\r\nFilename: "
-getstr
-copy name str
-fopen file O_RDWR|O_CREAT|O_DENYNONE str
-if_false
-	printf "Failed to open %s\r\n" name
-	return
-	end_if
-
-cmd_home
-fget_length file len
-fget_pos    file pos
-
-crlf
-printf "Filename=%s\r\n" name
-fget_time file time
-time_str str time
-printf "Buf=%s\r\nInt=%ld  Pos=%ld  Len=%ld  Time=%s\r\n" buf int pos len str
-feof file
-if_true
-	print "At EOF\r\n"
-	end_if
-crlf
-print "[R] Read buf       [W] Write buf\r\n"
-print "[G] Get int        [P] Put int\r\n"
-print "[S] Seek           [B] Rewind\r\n"
-print "[L] Lock           [U] Unlock\r\n"
-print "[F] Fprintf        [C] Change len\r\n"
-print "[D] Change date    [Z] End of file\r\n"
-print "[E] ETX Char\r\n"
-crlf
-print "Which or [Q]uit: "
-getkey
-printkey
-crlf
-
-cmdkey Q
-	print "Close: "
-	fclose file
-	call success
-	cmdpop
-	return
-	end_cmd
-
-cmdkey S
-	print "Seek to: "
-	getstr
-	copy pos str
-	fset_pos file pos
-	call success
-	end_cmd
-
-cmdkey B
-	print "Rewinding...\r\n"
-	fset_pos file 0
-	call success
-	end_cmd
-
-
-cmdkey Z
-	print "Seeking to End of File...\r\n"
-	fset_pos file 0 SEEK_END
-	call success
-        end_cmd
-
-cmdkey R
-	print "Length to read: "
-	getstr
-	copy len str
-	fread file buf len
-	call success
-	end_cmd
-
-cmdkey G
-	print "Length to read: "
-	getstr
-	copy len str
-	fread file int len
-	call success
-	end_cmd
-
-cmdkey P
-	print "Length to write: "
-	getstr
-	copy len str
-	print "Int: "
-	getstr
-	copy int str
-	fwrite file int len
-	call success
-	end_cmd
-
-cmdkey W	
-	print "Length to write: "
-	getstr
-	copy len str
-	print "String: "
-	getstr
-	fwrite file str len
-	call success
-	end_cmd
-
-cmdkey F
-	print "String: "
-	getstr
-	fprintf file "%s" str
-	call success
-	end_cmd
-
-cmdkey L
-	print "Length to lock: "
-	getstr
-	copy len str
-	flock file len
-	call success
-	end_cmd
-
-cmdkey U
-	print "Length to unlock: "
-	getstr
-	copy len str
-	funlock file len
-	call success
-	end_cmd
-
-cmdkey C
-	print "New length of file: "
-	getstr
-	copy len str
-	fset_length file len
-	call success
-	end_cmd
-
-cmdkey E
-	yes_no "Use ETX (3) instead of NULL (0) for terminating text"
-	if_true
-		fset_etx 3
-	else
-		fset_etx 0
-		end_if
-	end_cmd
-
-cmdkey D
-	print "New file date (MM/DD/YY): "
-	getstr
-	date_int time str
-	fset_time file time
-	call success
-	end_cmd	
-
-end_cmd
-
-
-# Print "Successful" or "Unsuccessful" based on the current logic state
-:success
-if_true
-	print "Successful\r\n"
-else
-	print "Unsuccessful\r\n"
-	end_if
-return
-
diff --git a/exec/finger.js b/exec/finger.js
deleted file mode 100644
index 8db5f27c66..0000000000
--- a/exec/finger.js
+++ /dev/null
@@ -1,23 +0,0 @@
-// finger.js
-
-// A simple finger client
-
-if(argc>0 && argv[0].indexOf('@')!=-1)
-	dest = argv[0];
-else if((dest = prompt("User (user@hostname)"))==null)
-	exit();
-if((hp = dest.indexOf('@'))==-1) {
-	alert("Invalid user");
-	exit();
-}
-host = dest.slice(hp+1);
-sock = new Socket();
-//sock.debug = true;
-if(!sock.connect(host,79)) 
-	alert("Connection to " + host + " failed with error " + sock.last_error);
-else {
-	sock.send(dest.slice(0,hp)+"\r\n");
-	while(bbs.online && sock.is_connected)
-		print(sock.readline());
-}
-sock.close();
diff --git a/exec/fingerservice.js b/exec/fingerservice.js
deleted file mode 100644
index d97de6e71c..0000000000
--- a/exec/fingerservice.js
+++ /dev/null
@@ -1,254 +0,0 @@
-// fingerservice.js
-
-// Synchronet Service for the Finger protocol (RFC 1288)
-
-// Example configuration (in ctrl/services.cfg):
-
-// Finger		79	0-unlimited	0		fingerservice.js
-
-// Add -n to the configuration line to eliminate user age and gender
-// information from the query results.
-
-// !WARNING!
-// Finger is an open protocol utilizing no forms of authorization
-// or authentication. FINGER IS A KNOWN AND ACCEPTED SECURITY RISK. 
-// Detailed information about your system and its users is made 
-// available to ANYONE using this service. If there is anything in
-// this script that you do not want to be made available to anyone
-// and everyone, please comment-out (using /* and */) that portion
-// of the script.
-
-const VERSION="Synchronet Finger Service Version 1.00a";
-
-var include_age_gender=true;
-
-load("nodedefs.js");
-
-for(i=0;i<argc;i++)
-	if(argv[i].toLowerCase()=="-n")
-		include_age_gender = false;
-
-// Write a string to the client socket
-function write(str)
-{
-	client.socket.send(str);
-}
-
-// Write a crlf terminated string to the client socket
-function writeln(str)
-{
-	write(str + "\r\n");
-}
-
-// Send the contents of a text file to the client socket
-function send_file(fname)
-{
-	f = new File(fname);
-	if(!f.open("r")) 
-		return;
-	txt = f.readAll();
-	f.close();
-	for(l in txt)
-		writeln(txt[l]);
-}
-
-// Returns true if a connection on the local 'port' was succesful
-function test_port(port)
-{
-	sock = new Socket();
-	success = sock.connect("localhost",port);
-	sock.close();
-
-	return(success);
-}
-
-// Get Finger Request (the main entry point) 
-request = client.socket.recvline(128 /*maxlen*/, 10 /*timeout*/);
-
-if(request==null) {
-	log("!TIMEOUT waiting for request");
-	exit();
-}
-
-log(format("client request: '%s'",request));
-
-if(request.substr(0,2).toUpperCase()=="/W")	// "higher level of verbosity"
-	request=request.slice(2);				// ignored...
-
-while(request.charAt(0)==' ')	// skip prepended spaces
-	request=request.slice(1);
-
-if(request=="") {	// no specific user requested, give list of active users
-	log("client requested active user list");
-	write(format("%-25.25s %-31.31s   Time   %7s Node\r\n"
-		,"User","Action",include_age_gender ? "Age Sex":""));
-	var dashes="----------------------------------------";
-	write(format("%-25.25s %-31.31s %8.8s %3.3s %3.3s %4.4s\r\n"
-		,dashes,dashes,dashes
-		,include_age_gender ? dashes : ""
-		,include_age_gender ? dashes : ""
-		,dashes));
-	var user = new User(1);
-	for(n=0;n<system.node_list.length;n++) {
-		if(system.node_list[n].status!=NODE_INUSE)
-			continue;
-		user.number=system.node_list[n].useron;
-		if(system.node_list[n].action==NODE_XTRN && system.node_list[n].aux)
-			action=format("running %s",user.curxtrn);
-		else
-			action=format(NodeAction[system.node_list[n].action]
-							,system.node_list[n].aux);
-		t=time()-user.logontime;
-		write(format("%-25.25s %-31.31s%3u:%02u:%02u %3s %3s %4d\r\n"
-			,user.alias
-			,action
-			,Math.floor(t/(60*60))
-			,Math.floor(t/60)%60
-			,t%60
-			,include_age_gender ? user.age.toString() : ""
-			,include_age_gender ? user.gender : ""
-			,n+1
-			));
-	}
-	exit();
-}
-
-if(request.charAt(0)=='?') {	// Handle "special" requests
-	request=request.slice(1);
-	switch(request.toLowerCase()) {
-
-		case "ver":
-			writeln(VERSION);
-			writeln(server.version);
-			writeln(system.version_notice + system.revision);
-			writeln("Compiled " + system.compiled_when + " with " + system.compiled_with);
-			writeln(system.js_version);
-			writeln(system.os_version);
-			break;
-
-		case "time":
-			writeln(system.timestr() + " " + system.zonestr());
-			break;
-
-		case "logon.lst":
-			send_file(system.data_dir + "logon.lst");
-			break;
-
-		case "auto.msg":
-			send_file(system.data_dir + "msgs/auto.msg");
-			break;
-
-		case "stats":	/* Statistics */
-			for(i in system.stats)
-				writeln(i + " = " + system.stats[i]);
-
-			total	= time()-system.uptime;
-			days	= Math.floor(total/(24*60*60));
-		    if(days) 
-				total%=(24*60*60);
-			hours	= Math.floor(total/(60*60));
-			min		= (Math.floor(total/60))%60;
-			sec		= total%60;
-
-			writeln(format("uptime = %u days, %u hours, %u minutes and %u seconds"
-				,days,hours,min,sec));
-			break;
-
-		case "nodelist":
-			var user = new User(1);
-			for(n=0;n<system.node_list.length;n++) {
-				write(format("Node %2d ",n+1));
-				if(system.node_list[n].status==NODE_INUSE) {
-					user.number=system.node_list[n].useron;
-					write(format("%s (%u %s) ", user.alias, user.age, user.gender));
-					if(system.node_list[n].action==NODE_XTRN && system.node_list[n].aux)
-						write(format("running %s",user.curxtrn));
-					else
-						write(format(NodeAction[system.node_list[n].action],system.node_list[n].aux));
-					t = time()-user.logontime;
-					write(format(" for %u minutes",Math.floor(t/60)));
-				} else
-					write(format(NodeStatus[system.node_list[n].status],system.node_list[n].aux));
-
-				write("\r\n");
-			}			
-			break;
-
-		case "services":	/* Services running on this host */
-			if(test_port(23))
-				writeln("Telnet");
-			if(test_port(513))
-				writeln("RLogin");
-			if(test_port(21))
-				writeln("FTP");
-			if(test_port(25))
-				writeln("SMTP");
-			if(test_port(110))
-				writeln("POP3");
-			if(test_port(119))
-				writeln("NNTP");
-			if(test_port(70))
-				writeln("Gopher");
-			if(test_port(80))
-				writeln("HTTP");
-			if(test_port(113))
-				writeln("IDENT");
-			if(test_port(6667))
-				writeln("IRC");
-			break;
-
-		default:
-			writeln("Supported special requests:");
-			writeln("\tver");
-			writeln("\ttime");
-			writeln("\tstats");
-			writeln("\tservices");
-			writeln("\tnodelist");
-			writeln("\tauto.msg");
-			writeln("\tlogon.lst");
-			log(format("!UNSUPPORTED SPECIAL REQUEST: '%s'",request));
-			break;
-	}
-	exit();
-}
-
-// User info is handled here
-
-var usernum=Number(request);
-if(!usernum) {
-	var at = request.indexOf('@');
-	if(at>0)
-		request = request.substr(0,at-1);
-
-	usernum = system.matchuser(request);
-	if(!usernum) {
-		log(format("!UNKNOWN USER: '%s'",request));
-		exit();
-	}
-}
-var user = new User(usernum);
-if(user == null) {
-	log(format("!INVALID USER NUMBER: %d",usernum));
-	exit();
-}
-
-uname = format("%s #%d",user.alias,user.number);
-write(format("User: %-30s In real life: %s\r\n"
-	  ,uname,user.name));
-write(format("From: %s\r\n",user.location));
-if(include_age_gender) {
-	birth=format("Birth: %s (Age: %u years)"
-		  ,user.birthdate,user.age);
-	write(format("%-42s Gender: %s\r\n"
-		  ,birth,user.gender));
-}
-write(format("Shell: %-34s  Editor: %s\r\n"
-	  ,user.command_shell,user.editor));
-write(format("Last login %s %s\r\nvia %s from %s [%s]\r\n"
-	  ,system.timestr(user.stats.laston_date)
-	  ,system.zonestr()
-	  ,user.connection
-	  ,user.host_name
-	  ,user.ip_address));
-
-/* End of fingerservice.js */
diff --git a/exec/ftp-html.js b/exec/ftp-html.js
deleted file mode 100644
index ba8f8c8c94..0000000000
--- a/exec/ftp-html.js
+++ /dev/null
@@ -1,429 +0,0 @@
-// JavaScript HTML Index for Synchronet FTP Server
-// $id$
-
-var start=new Date();
-var time_stamp=start.valueOf().toString(36);	// Used to defeat caching browsers
-
-load("sbbsdefs.js");	// Synchronet constants
-
-/* Utility Functions */
-
-function writeln(str)
-{
-	write(str + "\r\n");
-}
-
-function date(time)
-{
-	var mon=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
-	var d=new Date(time*1000);
-
-	return(format("%s %02d %d %02d:%02d"
-			,mon[d.getUTCMonth()]
-			,d.getUTCDate()
-			,d.getUTCFullYear()
-			,d.getUTCHours()
-			,d.getUTCMinutes()));
-}
-
-function kbytes(nbytes)
-{
-	return(Math.round(nbytes/1024)+"k");
-}
-
-function secstr(sec)
-{
-	return(format("%02u:%02u",sec/60,sec%60));
-}
-
-var title = system.name + " BBS - FTP Server";
-var font_face = "<font face=Arial,Helvetica,sans-serif>";
-var font_size = 2;	// Change base font size here
-
-writeln('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">');
-writeln("<html>");
-writeln("<head>");
-writeln("<title>");
-writeln(title);
-if (ftp.curdir.name!=undefined)
-	write(" - " + ftp.curdir.name);
-else if(ftp.curlib.description!=undefined)
-	write(" - " + ftp.curlib.description);
-writeln("</title>");
-
-/* META TAGS */
-writeln("<meta name='GENERATOR' content='" + system.version + "'>");
-// The following line is necessary for IBM extended-ASCII in descriptions 
-writeln("<meta http-equiv='Content-Type' content='text/html; charset=IBM437'>");
-
-writeln("</head>");
-writeln("<body bgcolor=teal text=white link=yellow vlink=lime alink=white>");
-writeln(font_face);
-
-/* Go To Select Box */
-writeln("<table width=100%>");
-writeln("<td>");
-writeln("<h1>" + font_face + "<font color=lime>" + title.italics() + "</font></h1>");
-writeln("<td align=right>");
-writeln("<form>");	// Netscape requires this to be in a form <sigh>
-writeln(format(
-	"<select " +
-	"onChange='if(selectedIndex>0) location=options[selectedIndex].value + \"%s\";'>"
-	,"?$" + time_stamp));
-writeln("<option>Go To...</option>");
-writeln(format("<option value=/%s>Root</option>",html_index_file));
-for(l in file_area.lib_list) {
-	writeln(format("<optgroup label=%s>",file_area.lib_list[l].name));
-	writeln(format("<option value=%s> [%s]"
-		,file_area.lib_list[l].link
-		,file_area.lib_list[l].name));
-	for(d in file_area.lib_list[l].dir_list) {
-		writeln(format("<option value=%s>&nbsp&nbsp&nbsp&nbsp %s"
-			,file_area.lib_list[l].dir_list[d].link
-			,file_area.lib_list[l].dir_list[d].name));
-	}
-	writeln("</optgroup>");
-}
-writeln("</select>");
-writeln("</form>");
-writeln("</table>");
-
-var prevdir;
-
-var hdr_font="<font color=silver>";
-var dat_font="<font color=white>";
-
-if(!(user.security.restrictions&UFLAG_G)) {	/* !Guest or Anonymous */
-	/* Logout button */
-	writeln("<table align=right>");
-	writeln("<form>");
-	writeln("<input type=button value=Logout onclick='location=\"ftp://" 
-		+ format("%s/%s?$%s",system.inetaddr,html_index_file,time_stamp)
-		+ "\";'>");
-	writeln("</form>");
-	writeln("</table>");
-
-	/* User Info */
-	writeln("<table nowrap align=left>");
-	writeln(font_face);
-	writeln("<tr><th align=right>"+hdr_font+"User:<th align=left>"+dat_font+user.alias);
-	writeln("<tr><th align=right>"+hdr_font+"Address:<th align=left width=150>"+dat_font+user.ip_address);
-	write("<tr><th align=right>"+hdr_font+"Credits:<th align=left>"+dat_font);
-	if(user.security.exemptions&UFLAG_D)
-		writeln("Exempt");
-	else
-		writeln(kbytes(user.security.credits+user.security.free_credits));
-	write("<tr><th align=right>"+hdr_font+"Time left:<th align=left>"+dat_font);
-	if(user.security.exemptions&UFLAG_T)
-		writeln("Exempt");
-	else
-		writeln(secstr(ftp.time_left));
-	writeln("</table>");
-
-	/* User Stats */
-
-	writeln("<table nowrap>");
-	writeln(font_face);
-	writeln("<tr><th align=right>"+hdr_font+"Logons:<th align=left>"+dat_font+user.stats.total_logons);
-	writeln("<tr><th align=right>"+hdr_font+"Last on:<th align=left>"+date(user.stats.laston_date));
- 	writeln("<tr><th align=right>"+hdr_font+"Uploaded:<th align=left>"+dat_font);
-	writeln(format("%s bytes in %u files"
-		,kbytes(user.stats.bytes_uploaded),user.stats.files_uploaded));
-	writeln("<tr><th align=right>"+hdr_font+"Downloaded:<th align=left>"+dat_font);
-	writeln(format("%s bytes in %u files",kbytes(user.stats.bytes_downloaded)
-		,user.stats.files_downloaded));
-	writeln("</table>");
-	writeln("<br>");
-} else if(ftp.curlib.name==undefined) {	/* Login */
-	writeln("<table align=right>");
-	writeln("<td><input type=button value='New User' onClick='location=\"telnet://" 
-		+ system.inetaddr + "\";'>");
-	writeln("</table>");
-
-	writeln("<form name='login'>");
-	writeln("<table border=1 frame=box rules=none cellpadding=3>");
-	writeln(font_face);
-	writeln("<tr><th valign=top align=left>"+hdr_font+"Name");
-	writeln("<td colspan=2><input type=text name='username' size=25 maxlength=25>");
-	writeln("<tr><th valign=top align=left>"+hdr_font+"Password");
-	writeln("<td><input type=password name='password' size=10 maxlength=25>");
-	writeln("<td align=right><input type=button name='LoginButton' value='Login' onClick='login_event();'>");
-
-	/* Client-Side Script */
-	writeln("<SCRIPT language='JavaScript'>");
-		writeln("<!--");
-		writeln("function login_event() {");
-		write("var url='ftp://'"); 
-		write("+ escape(document.login.username.value) + ':'");
-		write("+ escape(document.login.password.value) + '@'");
-		write(format("+ '%s/%s?$%s'\r\n",system.inetaddr,html_index_file,time_stamp));
-//		writeln("alert(url);");
-		writeln("location = url;");
-		writeln("}");
-		writeln("// -->");
-		writeln("</script>");
-
-	writeln("</table>");
-	writeln("</form>");
-}
-
-/* Virtual Path */
-writeln("<h3>" + hdr_font + "Path: ");
-if(ftp.curlib.name==undefined) 
-	writeln(dat_font + "Root");
-else
-	writeln("Root".link(format("/%s?$%s",html_index_file,time_stamp)));
-if(ftp.curlib.name!=undefined) {
-	if(ftp.curdir.name==undefined)
-		writeln(" / " + dat_font + ftp.curlib.description);
-	else
-		writeln(" / " + ftp.curlib.description.link(format("/%s/%s?$%s"
-			,ftp.curlib.name,html_index_file,time_stamp)));
-}		
-if(ftp.curdir.name!=undefined) 
-	writeln(" / " + dat_font + ftp.curdir.description);
-if(ftp.curdir.settings!=undefined && ftp.curdir.settings&DIR_FREE)
-	write(hdr_font+" - FREE");
-writeln("</h3>");
-
-
-/* Table Attributes */
-var hdr_background="white";
-var hdr_font=format("<font size=%d color=black>",font_size-1);
-var dat_font=format("<font size=%d>",font_size);
-var cell_spacing=""; //"cellspacing=2 cellpadding=2";
-
-/* Directory Listing */
-if(ftp.dir_list.length) {
-
-	writeln("<table " + cell_spacing + " width=33%>");
-	writeln(font_face);
-
-	/* header */
-	writeln("<thead>");
-	writeln("<tr bgcolor=" + hdr_background + ">");
-	writeln("<th>" + hdr_font + "Directory");
-	if(ftp.curlib.name!=undefined) 
-		writeln("<th>" + hdr_font + "Files");
-	writeln("</thead>");
-
-	/* body */
-	writeln("<tbody>");
-	for(i in ftp.dir_list) {
-		writeln("<tr>");
-	
-		/* filename */
-		writeln("<th nowrap align=left>" + dat_font 
-			+ ftp.dir_list[i].description.link(ftp.dir_list[i].link + "?$" + time_stamp));
-
-		if(ftp.curlib.name!=undefined) {
-			writeln("<td align=right><font color=black>" + dat_font + ftp.dir_list[i].size);
-			writeln("<th>" + dat_font + (ftp.dir_list[i].settings&DIR_FREE ? "FREE":""));
-		}
-	}	
-	writeln("</table>");
-	if(ftp.file_list.length)
-		writeln("<br>"); 
-}
-
-/* File Listing */
-if(ftp.file_list.length) {
-
-	/* Sort the list? */
-	switch(ftp.sort) {
-		case "uploader":
-			ftp.file_list.sort(function(a,b) 
-				{ 	if(a.uploader>b.uploader)
-						return(1);
-					if(a.uploader<b.uploader)
-						return(-1);
-					return(0); }
-				);
-			break;
-		case "size":
-			ftp.file_list.sort(function(a,b) 
-				{ return(a.size-b.size); }
-				);
-			break;
-		case "credits":
-			ftp.file_list.sort(function(a,b) 
-				{ return(a.credits-b.credits); }
-				);
-			break;
-		case "time":
-			ftp.file_list.sort(function(a,b) 
-				{ return(a.time.valueOf()-b.time.valueOf()); }
-				);
-			break;
-		case "hits":
-			ftp.file_list.sort(function(a,b) 
-				{ return(a.times_downloaded-b.times_downloaded); }
-				);
-			break;
-	}
-	if(ftp.reverse)
-		ftp.file_list.reverse();
-
-	var show_ext_desc;			/* show extended descriptions */
-	var total_bytes=0;
-	var total_downloads=0;
-	var most_recent=0;
-
-	if (ftp.curdir.name==undefined)
-		show_ext_desc=false;	/* aliased files have no ext desc */
-	else
-		show_ext_desc=user.settings&USER_EXTDESC;
-
-	writeln("<table " + cell_spacing + " width=100%>");
-	writeln(font_face);
-	
-	/* header */
-	writeln("<thead>");
-	writeln("<tr bgcolor=" + hdr_background + ">");
-
-	/* File */
-	writeln(format("<th><a href=%s?sort=name%s$%s>%sFile</a>"
-		,html_index_file
-		,(ftp.sort=="name" && !ftp.reverse) ? "&reverse":"", time_stamp, hdr_font));
-
-	/* Credits or Size */
-	if(ftp.curdir.settings!=undefined && !(ftp.curdir.settings&DIR_FREE))
-		writeln(format("<th><a href=%s?sort=credits%s$%s>%sCredits</a>"
-			,html_index_file
-			,(ftp.sort=="credits" && !ftp.reverse) ? "&reverse" : "", time_stamp, hdr_font));
-	else
-		writeln(format("<th><a href=%s?sort=size%s$%s>%sSize</a>"
-			,html_index_file
-			,(ftp.sort=="size" && !ftp.reverse) ? "&reverse" : "", time_stamp, hdr_font));
-
-	/* Description */
-	write("<th>" + hdr_font + "Description");
-	if(!(user.security.restrictions&UFLAG_G) && ftp.curdir.settings!=undefined) {
-		if(user.settings&USER_EXTDESC)
-			writeln(format(" [%s]"
-				,(hdr_font+"short").link(format("%s?ext=off$%s",html_index_file, time_stamp))));
-		else
-			writeln(format(" [%s]"
-				,(hdr_font+"extended").link(format("%s?ext=on$%s",html_index_file, time_stamp))));
-	}
-
-	/* Date/Time */
-	writeln(format("<th><a href=%s?sort=time%s$%s>%sDate/Time</a>"
-		,html_index_file
-		,(ftp.sort=="time" && !ftp.reverse) ? "&reverse" : "", time_stamp, hdr_font));
-
-	/* Uploader and Hits (downloads) */
-	if(ftp.curdir.name!=undefined) {	/* not valid for aliased files in root */
-		writeln(format("<th><a href=%s?sort=uploader%s$%s>%sUploader</a>"
-			,html_index_file
-			,(ftp.sort=="uploader" && !ftp.reverse) ? "&reverse" : "", time_stamp, hdr_font));
-		writeln(format("<th><a href=%s?sort=hits%s$%s>%sHits</a>"
-			,html_index_file
-			,(ftp.sort=="hits" && !ftp.reverse) ? "&reverse" : "", time_stamp, hdr_font));
-	}
-	writeln("</thead>");
-
-	/* body */
-	writeln("<tbody>");
-	for(i in ftp.file_list) {
-
-		total_downloads+=ftp.file_list[i].times_downloaded;
-		if(ftp.file_list[i].time>most_recent)
-			most_recent=ftp.file_list[i].time;
-
-		writeln("<tr valign=top>");
-
-		/* filename */
-		if(user.security.restrictions&UFLAG_D
-			|| (ftp.curdir.settings!=undefined 
-				&& !(ftp.curdir.settings&DIR_FREE)
-				&& !(user.security.exemptions&UFLAG_D)
-				&& ftp.file_list[i].credits > (user.security.credits+user.security.free_credits))
-			) {
-			write("<td align=left>" + dat_font);
-			writeln(ftp.file_list[i].name.link(
-				"javascript:alert('Sorry, you do not have enough credits to download this file.');"));
-		} else {
-			write("<th align=left>" + dat_font);
-			writeln(ftp.file_list[i].name.link(ftp.file_list[i].link));
-		}
-
-		/* size */
-		write("<td align=right>" + dat_font + "<font color=black>");
-		if(ftp.curdir.settings!=undefined && !(ftp.curdir.settings&DIR_FREE)) {
-			if(!ftp.file_list[i].credits)
-				writeln("<font color=white><b>FREE");
-			else
-				writeln(kbytes(ftp.file_list[i].credits)); 
-			total_bytes+=ftp.file_list[i].credits;
-		} else {
-			writeln(kbytes(ftp.file_list[i].size)); 
-			total_bytes+=ftp.file_list[i].size;
-		}
-
-		/* description */
-		write("<td>" + dat_font);
-		if (show_ext_desc) {
-			if(ftp.file_list[i].settings&FILE_EXTDESC)
-				writeln("<pre>" + ftp.file_list[i].extended_description);
-			else
-				writeln("<tt>" + ftp.file_list[i].description);
-		} else
-			writeln(dat_font + ftp.file_list[i].description);
-
-		/* date/time */
-		writeln("<td align=center nowrap>" + dat_font + "<font color=black>" 
-			+ "<tt>"+ date(ftp.file_list[i].time));
-
-		if(ftp.curdir.name!=undefined) {	/* not valid for aliased files in root */
-			/* uploader */
-			var uploader=ftp.file_list[i].uploader;
-			if (ftp.file_list[i].settings&FILE_ANON)
-				uploader="Anonymous";
-			else if (uploader == "-> ADDFILES <-")
-				uploader="Sysop".link("mailto:sysop@"+system.inetaddr);
-			else if (!(user.security.restrictions&UFLAG_G))	/* ! Guest/Anonymous */
-				uploader=uploader.link("mailto:" + uploader + "@" + system.inetaddr);
-			writeln("<td nowrap>" + dat_font + uploader);
-
-			/* download count */
-			writeln("<td align=right>" + dat_font + "<font color=black>" 
-				+ ftp.file_list[i].times_downloaded);
-		}
-	}
-
-	/* Footer (with totals) */
-	writeln("<tfoot>");
-	writeln(format("<tr bgcolor=%s><th>%s%lu files" +
-		"<th align=right>%s%s<th>%s-<th>%s<font color=black><tt>%s"
-		,hdr_background
-		,hdr_font, ftp.file_list.length
-		,hdr_font, kbytes(total_bytes)
-		,hdr_font
-		,dat_font, date(most_recent)
-		));
-
-	if(ftp.curdir.name!=undefined) 	/* not valid for aliased files in root */
-		writeln(format("<th>%s-<th align=right>%s%lu"
-			,hdr_font
-			,hdr_font, total_downloads
-			));
-
-	writeln("</table>");
-}
-
-if(!ftp.file_list.length && !ftp.dir_list.length)
-	writeln("<br><b>No Files.</b><br>");
-
-/* Footer */
-write(format("<br><font size=%d color=silver>Problems? Ask ",font_size-1));
-write(format("<a href=mailto:sysop@%s>%s</a>.",system.inetaddr,system.operator));
-
-write(format("<br><font size=%d>Dynamically generated ",font_size-1));
-write(format("in %lu milliseconds ", new Date().valueOf()-start.valueOf()));
-write("by <a href=http://www.synchro.net>" + server.version + "</a>");
-writeln("<br>" + Date() + "</font>");
-writeln("</body>");
-writeln("</html>");
-
-/* End of ftp-html.js */
\ No newline at end of file
diff --git a/exec/ftp.src b/exec/ftp.src
deleted file mode 100644
index 6c0aab22de..0000000000
--- a/exec/ftp.src
+++ /dev/null
@@ -1,311 +0,0 @@
-# ftp.src
-
-# FTP Client for Synchronet
-
-# Requires Baja v2.30 and Synchronet v3.00d or later
-
-!include sbbsdefs.inc # _ftp_mode and _socket_error
-
-!define ON	"\1gON"
-!define OFF	"\1rOFF"
-
-int sock port i
-str addr user pass src dest fname
-str pasv_mode hash_mode ascii_mode
-
-set _ftp_mode FTP_ECHO_RSP|FTP_HASH|FTP_PASV
-
-print "\r\n\1h\1ySynchronet \1wFTP Client v1.00 \1y- Copyright 2001 Rob Swindell\1n\r\n\r\n"
-
-compare str ""
-if_false
-	compare_word "*"
-	if_false
-		call socket_connect
-		end_if
-	end_if
-
-loop
-
-print "\1n\1hftp\1n> "
-getstr
-compare str ""
-if_equal
-	continue
-	end_if
-
-compare_word "?"
-if_true
-	compare_all_bits _ftp_mode FTP_HASH
-	if_true
-		set hash_mode ON
-	else
-		set hash_mode OFF
-		end_if
-
-	compare_all_bits _ftp_mode FTP_PASV
-	if_true
-		set pasv_mode ON
-	else
-		set pasv_mode OFF
-		end_if
-
-	compare_all_bits _ftp_mode FTP_ASCII
-	if_true
-		set ascii_mode ON
-	else
-		set ascii_mode OFF
-		end_if
-
-	print  "\r\n\1hCommands are\1n:\r\n\r\n"
-	print  "\1h\1yopen   \1w: \1cstart an FTP session\r\n"
-	print  "\1h\1yclose  \1w: \1cclose an FTP session\r\n"
-	print  "\1h\1ydir    \1w: \1cprint a directory listing\r\n"
-	print  "\1h\1ypwd    \1w: \1cprint working directory\r\n"
-	print  "\1h\1ycd     \1w: \1cchange working directory\r\n"
-	printf "\1h\1yhash   \1w: \1ctoggle hash printing during transfer (currently %s\1c)\r\n" hash_mode
-	printf "\1h\1ypasv   \1w: \1ctoggle passive mode transfers (currently %s\1c)\r\n" pasv_mode
-	printf "\1h\1yascii  \1w: \1ctoggle ASCII (CR/LF) mode transfers (currently %s\1c)\r\n" ascii_mode
-	print  "\1h\1yget    \1w: \1cretrieve (download) file\r\n"
-	print  "\1h\1yput    \1w: \1csend (upload) file\r\n"
-	print  "\1h\1ydelete \1w: \1cdelete (erase) file\r\n"
-	print  "\1h\1yquit   \1w: \1cexit FTP\r\n"
-	crlf
-	continue
-	end_if
-
-compare_word "open"
-if_true
-	shift_str 5
-
-	socket_close sock	# In case there's already a socket open
-
-	call socket_connect
-	continue
-	end_if
-
-compare_str "pasv"
-if_true
-	xor _ftp_mode FTP_PASV
-	compare_all_bits _ftp_mode FTP_PASV
-	print "\1h\1cPassive file transfer mode: "
-	if_true
-		print ON
-	else
-		print OFF
-		end_if
-	crlf
-	continue
-	end_if
-
-compare_str "hash"
-if_true
-	xor _ftp_mode FTP_HASH
-	compare_all_bits _ftp_mode FTP_HASH
-	print "\1h\1cHash mark printing: "
-	if_true
-		print ON
-	else
-		print OFF
-		end_if
-	crlf
-	continue
-	end_if
-
-compare_str "ascii"
-if_true
-	xor _ftp_mode FTP_ASCII
-	compare_all_bits _ftp_mode FTP_ASCII
-	print "\1h\1cASCII file transfer mode: "
-	if_true
-		print ON
-	else
-		print OFF
-		end_if
-	crlf
-	continue
-	end_if
-
-compare_str "quit"
-if_true
-	ftp_logout sock
-	socket_close sock
-	return
-	end_if
-
-compare sock 0
-if_true
-	print "Not connected (use '\1i?\1n' for menu).\r\n"
-	continue
-	end_if
-
-# ALL commands from here on require connection
-
-compare_str "close"
-if_true
-	ftp_logout sock
-	if_false
-		printf "!ftp_logout failed socket_error=%d\r\n" _socket_error
-		end_if
-	socket_close sock
-	continue
-	end_if
-
-compare_word "dir"
-if_true
-	shift_str 4
-	ftp_dir sock str
-	if_false
-		printf "!ftp_dir failed socket_error=%d\r\n" _socket_error
-		end_if
-	continue
-	end_if
-
-compare_str "pwd"
-if_true
-	ftp_pwd sock
-	if_false
-		printf "!ftp_pwd failed socket_error=%d\r\n" _socket_error
-		end_if
-	continue
-	end_if
-
-compare_word "cd"
-if_true
-	shift_str 3
-	compare_str ""
-	if_true
-		print "Directory: "
-		getstr
-		end_if
-	ftp_cwd sock str
-	if_false
-		printf "!ftp_cwd failed socket_error=%d\r\n" _socket_error
-		end_if
-	continue
-	end_if
-
-compare_word "delete"
-if_true
-	shift_str 6
-	compare_str ""
-	if_true
-		print "File: "
-		getstr
-		end_if
-	ftp_delete sock str
-	if_false
-		printf "!ftp_delete failed socket_error=%d\r\n" _socket_error
-		end_if
-	continue
-	end_if
-
-
-compare_word "get"
-if_true
-	shift_str 4
-	compare_str ""
-	if_true
-		print "File: "
-		getstr
-		end_if
-	copy fname str
-	# skip path
-	shift_to_last_char fname '/'
-	if_true
-		shift_str fname 1
-		end_if
-	shift_to_last_char fname '\\'
-	if_true
-		shift_str fname 1
-		end_if
-	set dest "%g"	# temp directory
-	strcat dest fname
-	ftp_get sock str dest
-	if_false
-		printf "!ftp_get failed socket_error=%d\r\n" _socket_error
-		continue
-		end_if
-	copy str dest
-	file_send
-	remove_file dest
-	continue
-	end_if
-
-compare_word "put"
-if_true
-	shift_str 4
-	compare_str ""
-	if_true
-		print "File: "
-		getstr
-		end_if
-	copy dest str
-	copy fname str
-	# skip path
-	shift_to_last_char fname '/'
-	if_true
-		shift_str fname 1
-		end_if
-	shift_to_last_char fname '\\'
-	if_true
-		shift_str fname 1
-		end_if
-	set src "%g"	# temp directory
-	strcat src fname
-	copy str src
-	file_receive	# uses str
-	chkfile src
-	if_false
-		continue
-		end_if
-	printf "ftp: sending %s\r\n" fname
-	ftp_put sock src dest
-	if_false
-		remove_file src
-		printf "!ftp_put failed socket_error=%d\r\n" _socket_error
-		continue
-		end_if
-	remove_file src
-	continue
-	end_if
-
-printf "Invalid command (use '\1i?\1n' for menu).\r\n" str
-
-end_loop
-
-########################################
-# Socket create/open/connect sub-routine
-:socket_connect
-
-socket_open sock
-if_false
-	printf "!socket_open failure socket_error=%d\r\n" _socket_error
-	continue
-	end_if
-
-copy addr str
-compare addr ""
-if_true
-	print "address: "
-	getstr addr
-	end_if
-
-set port 21	# default FTP port
-printf "Connecting to %s ... " addr
-socket_connect sock addr port 
-crlf
-if_false
-	printf "!socket_connect failed socket_error=%d\r\n" _socket_error
-	return
-	end_if
-print "login: "
-getstr user
-print "password: "
-getstr pass 60 K_NOECHO
-crlf
-ftp_login sock user pass
-if_false
-	printf "!ftp_login failed socket_error=%d\r\n" _socket_error
-	end_if
-return
diff --git a/exec/gopherservice.js b/exec/gopherservice.js
deleted file mode 100644
index 626bfa93bd..0000000000
--- a/exec/gopherservice.js
+++ /dev/null
@@ -1,222 +0,0 @@
-// gopherservice.js
-
-// Synchronet Service for the Gopher Protocol (RFC 1436)
-
-// Example configuration (in ctrl/services.cfg):
-
-// Gopher		70	0-unlimited	0		gopherservice.js
-
-load("sbbsdefs.js");
-load("nodedefs.js");
-
-const VERSION = "1.00 Alpha";
-const GOPHER_PORT = 70;
-
-var debug = false;
-var no_anonymous = false;
-
-// Parse arguments
-for(i=0;i<argc;i++)
-	if(argv[i].toLowerCase()=="-d")
-		debug = true;
-
-// Write a string to the client socket
-function write(str)
-{
-	if(0 && debug)
-		log(format("rsp: %s",str));
-	client.socket.send(str);
-}
-
-function writeln(str)
-{
-	write(str + "\r\n");
-}
-
-// Send the contents of a text file to the client socket
-function send_file(fname)
-{
-	f = new File(fname);
-	if(!f.open("r")) 
-		return;
-	txt = f.readAll();
-	f.close();
-	for(l in txt)
-		writeln(strip_ctrl(txt[l]));
-}
-
-var msgbase=null;
-
-if(!login("guest"))	{
-	writeln("Sorry, no Gopher access here.");
-	log("!NO GUEST ACCOUNT CONFIGURED");
-	exit();
-}
-
-
-// Get Request
-request = client.socket.recvline(512 /*maxlen*/, 10 /*timeout*/);
-
-if(request==null) {
-	log("!TIMEOUT waiting for request");
-	exit();
-}
-
-log(format("client request: '%s'",request));
-
-var gopher_plus=false;
-if((term=request.indexOf("\t+"))>=0) {
-	gopher_plus=true;
-	request=request.substr(0,term);
-	writeln("+-2");
-}
-
-if(request=="") { /* blank = "root" */
-	for(g in msg_area.grp_list) 
-		writeln(format("1%s\tgrp:%s\t%s\t%u"
-			,msg_area.grp_list[g].description
-			,msg_area.grp_list[g].name.toLowerCase()
-			,system.inetaddr
-			,GOPHER_PORT
-			));
-/** to-do
-	for(l in file_area.lib_list) 
-		writeln(format("1%s\tlib:%s\t%s\t%u"
-			,file_area.lib_list[l].description
-			,file_area.lib_list[l].name.toLowerCase()
-			,system.inetaddr
-			,GOPHER_PORT
-			));
-**/
-	writeln(format("0%s\t%s\t%s\t%u"
-		,"Node List"
-		,"nodelist"
-		,system.inetaddr
-		,GOPHER_PORT
-		));
-	writeln(format("0%s\t%s\t%s\t%u"
-		,"Logon List"
-		,"logonlist"
-		,system.inetaddr
-		,GOPHER_PORT
-		));
-	writeln(format("0%s\t%s\t%s\t%u"
-		,"Auto-Message"
-		,"automsg"
-		,system.inetaddr
-		,GOPHER_PORT
-		));
-
-	exit();
-}
-
-switch(request) {
-	case "nodelist":
-		var user = new User(1);
-		for(n=0;n<system.node_list.length;n++) {
-			write(format("Node %2d ",n+1));
-			if(system.node_list[n].status==NODE_INUSE) {
-				user.number=system.node_list[n].useron;
-				write(format("%s (%u %s) ", user.alias, user.age, user.gender));
-				if(system.node_list[n].action==NODE_XTRN && system.node_list[n].aux)
-					write(format("running %s",user.curxtrn));
-				else
-					write(format(NodeAction[system.node_list[n].action],system.node_list[n].aux));
-			} else
-				write(format(NodeStatus[system.node_list[n].status],system.node_list[n].aux));
-
-			write("\r\n");
-		}			
-		break;
-	case "logonlist":
-		send_file(system.data_dir + "logon.lst");
-		break;
-
-	case "automsg":
-		send_file(system.data_dir + "msgs/auto.msg");
-		break;
-}
-
-field = request.split(':');
-switch(field[0]) {
-	case "grp":
-		for(g in msg_area.grp_list) 
-			if(msg_area.grp_list[g].name.toLowerCase()==field[1]) {
-				for(s in msg_area.grp_list[g].sub_list)
-					writeln(format("1[%s] %s\tsub:%s\t%s\t%u"
-						,msg_area.grp_list[g].name
-						,msg_area.grp_list[g].sub_list[s].description
-						,msg_area.grp_list[g].sub_list[s].code.toLowerCase()
-						,system.inetaddr
-						,GOPHER_PORT
-						));
-				break;
-			}
-		break;
-	case "lib":
-		for(l in file_area.lib_list) 
-			if(file_area.lib_list[l].name.toLowerCase()==field[1]) {
-				for(d in file_area.lib_list[l].dir_list)
-					writeln(format("1[%s] %s\tdir:%s\t%s\t%u"
-						,file_area.lib_list[l].name
-						,file_area.lib_list[l].dir_list[d].description
-						,file_area.lib_list[l].dir_list[d].code.toLowerCase()
-						,system.inetaddr
-						,GOPHER_PORT
-						));
-				break;
-			}
-		break;
-	case "sub":
-		msgbase = new MsgBase(field[1]);
-		if(Number(field[2])) {
-			hdr=msgbase.get_msg_header(false,Number(field[2]));
-			if(hdr.attr&MSG_DELETE)
-				break;
-			writeln(format("Subj : %s",hdr.subject));
-			writeln(format("To   : %s",hdr.to));
-			writeln(format("From : %s",hdr.from));
-			writeln(format("Date : %s",system.timestr(hdr.when_written_time)));
-			writeln("");
-			body=msgbase.get_msg_body(false,Number(field[2]),true)
-			writeln(body);
-			break;
-		}
-/**
-		msginfo=format("%-25.25s %-25.25s %-25.25s %s"
-				,"Subject"
-				,"From"
-				,"To"
-				,"Date"
-				);
-		writeln(format("0%s\tnull\tnull\tnull\r\n",msginfo));
-**/
-		first = msgbase.first_msg;
-		for(i=msgbase.last_msg;i>=first;i--) {
-			hdr=msgbase.get_msg_header(false,i);
-			if(hdr==null)
-				continue;
-			if(hdr.attr&MSG_DELETE)
-				continue;
-			msginfo=format("%-25.25s %-25.25s %-25.25s %s"
-				,hdr.subject
-				,hdr.from
-				,hdr.to
-				,system.timestr(hdr.when_written_time)
-				);
-			writeln(format("0%s\tsub:%s:%u\t%s\t%u"
-				,msginfo
-				,field[1]
-				,i
-				,system.inetaddr
-				,GOPHER_PORT
-				));
-		}
-		msgbase.close();
-		break;
-	case "dir":
-		/* to-do */
-		break;
-}
-
-/* End of gopherservice.js */
diff --git a/exec/load/nodedefs.js b/exec/load/nodedefs.js
deleted file mode 100644
index 6a07f24930..0000000000
--- a/exec/load/nodedefs.js
+++ /dev/null
@@ -1,146 +0,0 @@
-/* nodedefs.js */
-
-/* Synchronet NODE.DAB var  ants definitions - (mostly bit-fields) */
-
-/* $Id$ */
-
-/****************************************************************************
- * @format.tab-size 4		(Plain Text/Source Code File Header)			*
- * @format.use-tabs true	(see http://www.synchro.net/ptsc_hdr.html)		*
- *																			*
- * Copyright 2001 Rob Swindell - http://www.synchro.net/copyright.html		*
- *																			*
- * This program is free software; you can redistribute it and/or			*
- * modify it under the terms of the GNU General Public License				*
- * as published by the Free Software Foundation; either version 2			*
- * of the License, or (at your option) any later version.					*
- * See the GNU General Public License for more details: gpl.txt or			*
- * http://www.fsf.org/copyleft/gpl.html										*
- *																			*
- * Anonymous FTP access to the most recent released source is available at	*
- * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net	*
- *																			*
- * Anonymous CVS access to the development source and modification history	*
- * is available at cvs.synchro.net:/cvsroot/sbbs, example:					*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs login			*
- *     (just hit return, no password is necessary)							*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs checkout src		*
- *																			*
- * For Synchronet coding style and modification guidelines, see				*
- * http://www.synchro.net/source.html										*
- *																			*
- * You are encouraged to submit any modifications (preferably in Unix diff	*
- * format) via e-mail to mods@synchro.net									*
- *																			*
- * Note: If this box doesn't appear square, then you need to fix your tabs.	*
- ****************************************************************************/
-
-								/********************************************/
- 								/* Legal values for Node.status				*/
-								/********************************************/
-var   NODE_WFC			    =0	/* Waiting for Call							*/
-var   NODE_LOGON            =1	/* at logon prompt							*/
-var   NODE_NEWUSER          =2	/* New user applying						*/
-var   NODE_INUSE            =3	/* In Use									*/
-var   NODE_QUIET            =4	/* In Use - quiet mode						*/
-var   NODE_OFFLINE          =5	/* Offline									*/
-var   NODE_NETTING          =6	/* Networking								*/
-var   NODE_EVENT_WAITING    =7	/* Waiting for all nodes to be inactive		*/
-var   NODE_EVENT_RUNNING    =8	/* Running an external event				*/
-var   NODE_EVENT_LIMBO      =9	/* Allowing another node to run an event	*/		
-var   NODE_LAST_STATUS	    =10	/* Must be last								*/
-								/********************************************/
-
-								/********************************************/
-var NodeStatus		=[			/* Node.status value descriptions			*/
-	 "Waiting for call"			/********************************************/
-	,"At logon prompt"
-	,"New user"
-	,"In-use"
-	,"Waiting for call"
-	,"Offline"
-	,"Networking"
-	,"Waiting for all nodes to become inactive"
-	,"Running external event"
-	,"Waiting for node %d to finish external event"
-	];			
-
-								/********************************************/
-								/* Legal values for Node.action				*/
-								/********************************************/
-var   NODE_MAIN			    =0  /* Main Prompt								*/
-var   NODE_RMSG             =1  /* Reading Messages							*/
-var   NODE_RMAL             =2  /* Reading Mail								*/
-var   NODE_SMAL             =3  /* Sending Mail								*/
-var   NODE_RTXT             =4  /* Reading G-Files							*/
-var   NODE_RSML             =5  /* Reading Sent Mail						*/
-var   NODE_PMSG             =6  /* Posting Message							*/
-var   NODE_AMSG             =7  /* Auto-message								*/
-var   NODE_XTRN             =8  /* Running External Program					*/
-var   NODE_DFLT             =9  /* Main Defaults Section					*/
-var   NODE_XFER             =10 /* Transfer Prompt							*/
-var   NODE_DLNG             =11 /* Downloading File							*/
-var   NODE_ULNG             =12 /* Uploading File							*/
-var   NODE_BXFR             =13 /* Bidirectional Transfer					*/
-var   NODE_LFIL             =14 /* Listing Files							*/
-var   NODE_LOGN             =15 /* Logging on								*/
-var   NODE_LCHT             =16 /* In Local Chat with Sysop					*/
-var   NODE_MCHT             =17 /* In Multi-Chat with Other Nodes			*/
-var   NODE_GCHT             =18 /* In Local Chat with Guru					*/
-var   NODE_CHAT             =19 /* In Chat Section							*/
-var   NODE_SYSP             =20 /* Sysop Activity							*/
-var   NODE_TQWK             =21 /* Transferring QWK packet					*/
-var   NODE_PCHT             =22 /* In Private Chat							*/
-var   NODE_PAGE             =23 /* Paging another node for Private Chat		*/
-var   NODE_RFSD             =24 /* Retrieving file from seq dev (aux=dev)	*/
-var   NODE_LAST_ACTION	    =25	/* Must be last								*/
-								/********************************************/
-
-								/********************************************/
-var NodeAction		=[			/* Node.action value descriptions			*/
-	 "at main menu"				/********************************************/
-	,"reading messages"
-	,"reading mail"
-	,"sending mail"
-	,"reading text files"
-	,"reading sent mail"
-	,"posting message"
-	,"posting auto-message"
-	,"at external program menu"
-	,"changing defaults"
-	,"at transfer menu"
-	,"downloading"
-	,"uploading"
-	,"transferring bidirectional"
-	,"listing files"
-	,"logging on"
-	,"in local chat with %s"
-	,"in multinode chat"
-	,"chatting with %s"
-	,"in chat section"
-	,"performing sysop activities"
-	,"transferring QWK packet"
-	,"in private chat with node %u"
-	,"paging node %u for private chat"
-	,"retrieving from device #%d"
-	];
-
-								/********************************************/
-                                /* Bit values for Node.misc					*/
-								/********************************************/
-var   NODE_ANON		=(1<<0)     /* Anonymous User							*/
-var   NODE_LOCK   	=(1<<1)     /* Locked for sysops only					*/
-var   NODE_INTR   	=(1<<2)     /* Interrupted - hang up					*/
-var   NODE_MSGW   	=(1<<3)     /* Message is waiting (old way)				*/
-var   NODE_POFF   	=(1<<4)     /* Page disabled							*/
-var   NODE_AOFF   	=(1<<5)     /* Activity Alert disabled					*/
-var   NODE_UDAT   	=(1<<6)     /* User data has been updated				*/
-var   NODE_RRUN   	=(1<<7)     /* Re-run this node when log off			*/
-var   NODE_EVENT  	=(1<<8)     /* Must run node event after log off		*/
-var   NODE_DOWN   	=(1<<9)     /* Down this node after logoff				*/
-var   NODE_RPCHT  	=(1<<10)    /* Reset private chat						*/
-var   NODE_NMSG   	=(1<<11)    /* Node message waiting (new way)			*/
-var   NODE_EXT    	=(1<<12)    /* Extended info on node action				*/
-var   NODE_LCHAT	=(1<<13)    /* Being pulled into local chat				*/
-								/********************************************/
-
diff --git a/exec/load/sbbsdefs.js b/exec/load/sbbsdefs.js
deleted file mode 100644
index a49ea72df3..0000000000
--- a/exec/load/sbbsdefs.js
+++ /dev/null
@@ -1,517 +0,0 @@
-/* sbbsdefs.js */
-
-/* Synchronet Object Model var  ants definitions - (mostly bit-fields) */
-
-/* $Id$ */
-
-/****************************************************************************
- * @format.tab-size 4		(Plain Text/Source Code File Header)			*
- * @format.use-tabs true	(see http://www.synchro.net/ptsc_hdr.html)		*
- *																			*
- * Copyright 2001 Rob Swindell - http://www.synchro.net/copyright.html		*
- *																			*
- * This program is free software; you can redistribute it and/or			*
- * modify it under the terms of the GNU General Public License				*
- * as published by the Free Software Foundation; either version 2			*
- * of the License, or (at your option) any later version.					*
- * See the GNU General Public License for more details: gpl.txt or			*
- * http://www.fsf.org/copyleft/gpl.html										*
- *																			*
- * Anonymous FTP access to the most recent released source is available at	*
- * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net	*
- *																			*
- * Anonymous CVS access to the development source and modification history	*
- * is available at cvs.synchro.net:/cvsroot/sbbs, example:					*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs login			*
- *     (just hit return, no password is necessary)							*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs checkout src		*
- *																			*
- * For Synchronet coding style and modification guidelines, see				*
- * http://www.synchro.net/source.html										*
- *																			*
- * You are encouraged to submit any modifications (preferably in Unix diff	*
- * format) via e-mail to mods@synchro.net									*
- *																			*
- * Note: If this box doesn't appear square, then you need to fix your tabs.	*
- ****************************************************************************/
-
-load("nodedefs.js");
-
-/* Would rather use const than var, but end up with redeclaration errors.	*/
-
-							    /********************************************/
-							    /* system.settings							*/
-							    /********************************************/
-var   SYS_CLOSED	=(1<<0) 	/* System is closed to New Users		    */
-var   SYS_SYSSTAT	=(1<<1) 	/* Sysops activity included in statistics	*/
-var   SYS_NOBEEP	=(1<<2) 	/* No beep sound locally					*/
-var   SYS_PWEDIT	=(1<<3) 	/* Allow users to change their passwords	*/
-var   SYS_RA_EMU	=(1<<4) 	/* Reverse R/A commands at msg read prompt	*/
-var   SYS_ANON_EM	=(1<<5) 	/* Allow anonymous e-mail					*/
-var   SYS_LISTLOC	=(1<<6) 	/* Use location of caller in user lists 	*/
-var   SYS_WILDCAT	=(1<<7) 	/* Expand Wildcat color codes in messages	*/
-var   SYS_PCBOARD	=(1<<8) 	/* Expand PCBoard color codes in messages	*/
-var   SYS_WWIV 		=(1<<9) 	/* Expand WWIV color codes in messages		*/
-var   SYS_CELERITY	=(1<<10)	/* Expand Celerity color codes in messages	*/
-var   SYS_RENEGADE	=(1<<11)	/* Expand Renegade color codes in messages	*/
-var   SYS_ECHO_PW	=(1<<12)	/* Echo passwords locally					*/
-var   SYS_REQ_PW	=(1<<13)	/* Require passwords locally				*/
-var   SYS_L_SYSOP	=(1<<14)	/* Allow local sysop logon/commands 		*/
-var   SYS_R_SYSOP	=(1<<15)	/* Allow remote sysop logon/commands		*/
-var   SYS_QUOTE_EM	=(1<<16)	/* Allow quoting of e-mail					*/
-var   SYS_EURODATE	=(1<<17)	/* Europian date format (DD/MM/YY)			*/
-var   SYS_MILITARY	=(1<<18)	/* Military time format 					*/
-var   SYS_TIMEBANK	=(1<<19)	/* Allow time bank functions				*/
-var   SYS_FILE_EM	=(1<<20)	/* Allow file attachments in E-mail 		*/
-var   SYS_SHRTPAGE	=(1<<21)	/* Short sysop page 						*/
-var   SYS_TIME_EXP	=(1<<22)	/* Set to expired values if out-of-time 	*/
-var   SYS_FASTMAIL	=(1<<23)	/* Fast e-mail storage mode 				*/
-var   SYS_QVALKEYS	=(1<<24)	/* Quick validation keys enabled			*/
-var   SYS_ERRALARM	=(1<<25)	/* Error beeps on							*/
-var   SYS_FWDTONET	=(1<<26)	/* Allow forwarding of e-mail to netmail	*/
-var   SYS_DELREADM	=(1<<27)	/* Delete read mail automatically			*/
-var   SYS_NOCDTCVT	=(1<<28)	/* No credit to minute conversions allowed	*/
-var   SYS_DELEMAIL	=(1<<29)	/* Physically remove deleted e-mail immed.	*/
-var   SYS_USRVDELM	=(1<<30)	/* Users can see deleted msgs				*/
-var   SYS_SYSVDELM	=(1<<31)	/* Sysops can see deleted msgs				*/
-					    		/********************************************/
-
-						    	/********************************************/
-    							/* bbs.sys_status							*/
-							    /********************************************/
-var   SS_UNUSED		=(1<<0)		/* Unused          							*/
-var   SS_INITIAL	=(1<<1)		/* The bbs data has been initialized.       */
-var   SS_TMPSYSOP	=(1<<2)		/* Temporary Sysop Status					*/
-var   SS_USERON		=(1<<3)		/* A User is logged on to the BBS			*/
-var   SS_LCHAT		=(1<<4)		/* Local chat in progress					*/
-var   SS_CAP		=(1<<5)		/* Capture is on							*/
-var   SS_ANSCAP		=(1<<6)		/* Capture ANSI codes too					*/
-var   SS_FINPUT		=(1<<7)		/* Using file for input 					*/
-var   SS_COMISR		=(1<<8)		/* Com port ISR is installed				*/
-var   SS_DAILY		=(1<<9)		/* Execute System Daily Event on logoff 	*/
-var   SS_INUEDIT	=(1<<10)	/* Inside Alt-Useredit section 				*/
-var   SS_ABORT		=(1<<11)	/* Global abort input or output flag		*/
-var   SS_SYSPAGE	=(1<<12)	/* Paging sysop								*/
-var   SS_SYSALERT	=(1<<13)	/* Notify sysop when users hangs up			*/
-var   SS_GURUCHAT	=(1<<14)	/* Guru chat in progress					*/
-var   SS_UNUSED2	=(1<<15)	/* not used in v3 (used to be SS_NODEDAB)	*/
-var   SS_EVENT		=(1<<16)	/* Time shortened due to upcoming event		*/
-var   SS_PAUSEON	=(1<<17)	/* Pause on, overriding user default		*/
-var   SS_PAUSEOFF	=(1<<18)	/* Pause off, overriding user default		*/
-var   SS_IN_CTRLP	=(1<<19)	/* Inside ctrl-p send node message func		*/
-var   SS_NEWUSER	=(1<<20)	/* New User online 							*/
-var   SS_MDMDEBUG	=(1<<21)	/* Modem debug output						*/
-var   SS_NEST_PF	=(1<<22)	/* Nested in printfile function				*/
-var   SS_DCDHIGH	=(1<<23)	/* Assume DCD is high always				*/
-var   SS_SPLITP		=(1<<24)	/* Split-screen private chat				*/
-var   SS_NEWDAY		=(1<<25)	/* Date changed while online				*/
-var   SS_RLOGIN		=(1<<26)	/* Current login via BSD RLogin				*/
-var   SS_FILEXFER	=(1<<27)	/* File transfer in progress, halt spy		*/
-					    		/********************************************/
-
-						    	/********************************************/
-								/* bbs.startup_options						*/
-						    	/********************************************/
-var   BBS_OPT_KEEP_ALIVE		=(1<<0)	/* Send keep-alives					*/
-var   BBS_OPT_XTRN_MINIMIZED	=(1<<1)	/* Run externals minimized			*/
-var   BBS_OPT_AUTO_LOGON		=(1<<2)	/* Auto-logon via IP				*/
-var   BBS_OPT_DEBUG_TELNET		=(1<<3)	/* Debug telnet commands			*/
-var   BBS_OPT_SYSOP_AVAILABLE	=(1<<4)	/* Available for chat				*/
-var   BBS_OPT_ALLOW_RLOGIN		=(1<<5)	/* Allow logins via BSD RLogin		*/
-var   BBS_OPT_USE_2ND_RLOGIN	=(1<<6)	/* Use 2nd username in BSD RLogin	*/
-var   BBS_OPT_NO_QWK_EVENTS		=(1<<7)	/* Don't run QWK-related events		*/
-var   BBS_OPT_NO_HOST_LOOKUP	=(1<<11)/* Don't lookup hostname			*/
-var   BBS_OPT_NO_JAVASCRIPT		=(1<<29)/* JavaScript disabled				*/
-var   BBS_OPT_LOCAL_TIMEZONE	=(1<<30)/* Don't force UCT/GMT				*/
-var   BBS_OPT_MUTE				=(1<<31)/* Mute sounds						*/
-						    	/*******************************************/
-
-						    	/********************************************/
-								/* bbs.online								*/
-						    	/********************************************/
-var   ON_LOCAL		=1	 		/* Online locally (events only in v3)		*/
-var   ON_REMOTE		=2 			/* Online remotely							*/
-						    	/********************************************/
-
-							    /********************************************/
-							    /* console.status							*/
-							    /********************************************/
-var   CON_R_ECHO	=(1<<0)		/* Echo remotely							*/
-var   CON_R_ECHOX	=(1<<1)		/* Echo X's to remote user					*/
-var   CON_R_INPUT  	=(1<<2)		/* Accept input remotely					*/
-var   CON_L_ECHO	=(1<<3)		/* Echo locally              				*/
-var   CON_L_ECHOX	=(1<<4)		/* Echo X's locally							*/
-var   CON_L_INPUT  	=(1<<5)		/* Accept input locally						*/
-var   CON_RAW_IN   	=(1<<8)		/* Raw input mode - no editing capabilities */
-var   CON_ECHO_OFF 	=(1<<10)	/* Remote & Local echo disabled for ML/MF	*/
-var   CON_UPARROW  	=(1<<11)	/* Up arrow hit - move up one line			*/
-var   CON_NO_INACT  =(1<<13)	/* User inactivity detection disabled		*/
-					    		/********************************************/
-
-							    /********************************************/
-							    /* console.attributes, also used for ansi()	*/
-							    /********************************************/
-var   BLINK			=0x80		/* blink bit */
-var   HIGH			=0x08		/* high intensity foreground bit */
-
-							    /* foreground colors */
-var   BLACK			=0			/* dark colors (HIGH bit unset) */
-var   BLUE			=1
-var   GREEN			=2
-var   CYAN			=3
-var   RED			=4
-var   MAGENTA		=5
-var   BROWN			=6
-var   LIGHTGRAY		=7
-var   DARKGRAY		=8			/* light colors (HIGH bit set) */
-var   LIGHTBLUE		=9
-var   LIGHTGREEN	=10
-var   LIGHTCYAN		=11
-var   LIGHTRED		=12
-var   LIGHTMAGENTA	=13
-var   YELLOW		=14
-var   WHITE			=15
-
-							    /* background colors */
-var   ANSI_NORMAL	=0x100		/* special value for ansi() */
-var   BG_BLACK		=0x200		/* special value for ansi() */
-var   BG_BLUE		=(BLUE<<4)
-var   BG_GREEN		=(GREEN<<4)
-var   BG_CYAN		=(CYAN<<4)
-var   BG_RED		=(RED<<4)
-var   BG_MAGENTA	=(MAGENTA<<4)
-var   BG_BROWN		=(BROWN<<4)
-var   BG_LIGHTGRAY	=(LIGHTGRAY<<4)
-						
-					    		/********************************************/
-						    	/* user.settings							*/
-							    /********************************************/
-var   USER_DELETED  =(1<<0) 	/* Deleted user slot						*/
-var   USER_ANSI		=(1<<1) 	/* Supports ANSI terminal emulation			*/
-var   USER_COLOR	=(1<<2) 	/* Send color codes 						*/
-var   USER_RIP 		=(1<<3) 	/* Supports RIP terminal emulation			*/
-var   USER_PAUSE	=(1<<4) 	/* Pause on every screen full				*/
-var   USER_SPIN		=(1<<5) 	/* Spinning cursor - Same as K_SPIN			*/
-var   USER_INACTIVE	=(1<<6) 	/* Inactive user slot						*/
-var   USER_EXPERT	=(1<<7) 	/* Expert menu mode 						*/
-var   USER_ANFSCAN 	=(1<<8) 	/* Auto New file scan						*/
-var   USER_CLRSCRN 	=(1<<9) 	/* Clear screen before each message			*/
-var   USER_QUIET	=(1<<10)	/* Quiet mode upon logon					*/
-var   USER_BATCHFLAG=(1<<11)	/* File list allow batch dl flags			*/
-var   USER_NETMAIL 	=(1<<12)	/* Forward e-mail to fidonet addr			*/
-var   USER_CURSUB	=(1<<13)	/* Remember current sub-board/dir			*/
-var   USER_ASK_NSCAN=(1<<14)	/* Ask for newscanning upon logon			*/
-var   USER_NO_EXASCII=(1<<15)	/* Don't send extended ASCII				*/
-var   USER_ASK_SSCAN=(1<<16)	/* Ask for messages to you at logon			*/
-var   USER_AUTOTERM	=(1<<17)	/* Autodetect terminal type 				*/
-var   USER_COLDKEYS	=(1<<18)	/* No hot-keys								*/
-var   USER_EXTDESC 	=(1<<19)	/* Extended file descriptions				*/
-var   USER_AUTOHANG	=(1<<20)	/* Auto-hang-up after transfer				*/
-var   USER_WIP 		=(1<<21)	/* Supports WIP terminal emulation			*/
-var   USER_AUTOLOGON=(1<<22)	/* AutoLogon via IP							*/
-					    		/********************************************/
-
-					    		/********************************************/
-								/* user.qwk_settings 						*/
-					    		/********************************************/
-var   QWK_FILES		=(1<<0) 	/* Include new files list					*/
-var   QWK_EMAIL		=(1<<1) 	/* Include unread e-mail					*/
-var   QWK_ALLMAIL	=(1<<2) 	/* Include ALL e-mail						*/
-var   QWK_DELMAIL	=(1<<3) 	/* Delete e-mail after download 			*/
-var   QWK_BYSELF	=(1<<4) 	/* Include messages from self				*/
-var   QWK_UNUSED	=(1<<5) 	/* Currently unused 						*/
-var   QWK_EXPCTLA	=(1<<6) 	/* Expand ctrl-a codes to ascii 			*/
-var   QWK_RETCTLA	=(1<<7) 	/* Retain ctrl-a codes						*/
-var   QWK_ATTACH	=(1<<8) 	/* Include file attachments 				*/
-var   QWK_NOINDEX	=(1<<9) 	/* Do not create index files in QWK			*/
-var   QWK_TZ		=(1<<10)	/* Include "@TZ" time zone in msgs			*/
-var   QWK_VIA 		=(1<<11)	/* Include "@VIA" seen-bys in msgs			*/
-var   QWK_NOCTRL	=(1<<12)	/* No extraneous control files				*/
-					    		/********************************************/
-
-					    		/********************************************/
-								/* user.chat_settings						*/
-					    		/********************************************/
-var   CHAT_ECHO		=(1<<0)		/* Multinode chat echo						*/
-var   CHAT_ACTION	=(1<<1)		/* Chat actions 							*/
-var   CHAT_NOPAGE	=(1<<2)		/* Can't be paged                           */
-var   CHAT_NOACT	=(1<<3)		/* No activity alerts						*/
-var   CHAT_SPLITP	=(1<<4)		/* Split screen private chat				*/
-					    		/********************************************/
-
-
-/************************************************************************/
-/* Valid flags for user.security.exempt/restrict/flags					*/
-/************************************************************************/
-var   UFLAG_A		=(1<<0)
-var   UFLAG_B		=(1<<1)
-var   UFLAG_C		=(1<<2)
-var   UFLAG_D		=(1<<3)
-var   UFLAG_E		=(1<<4)
-var   UFLAG_F		=(1<<5)
-var   UFLAG_G		=(1<<6)
-var   UFLAG_H		=(1<<7)
-var   UFLAG_I		=(1<<8)
-var   UFLAG_J		=(1<<9)
-var   UFLAG_K		=(1<<10)
-var   UFLAG_L		=(1<<11)
-var   UFLAG_M		=(1<<12)
-var   UFLAG_N		=(1<<13)
-var   UFLAG_O		=(1<<14)
-var   UFLAG_P		=(1<<15)
-var   UFLAG_Q		=(1<<16)
-var   UFLAG_R		=(1<<17)
-var   UFLAG_S		=(1<<18)
-var   UFLAG_T		=(1<<19)
-var   UFLAG_U		=(1<<20)
-var   UFLAG_V		=(1<<21)
-var   UFLAG_W		=(1<<22)
-var   UFLAG_X		=(1<<23)
-var   UFLAG_Y		=(1<<24)
-var   UFLAG_Z		=(1<<25)
-
-						    	/********************************************/
-    							/* Bits in 'mode' for getkey and getstr     */
-							    /********************************************/
-var   K_UPPER 		=(1<<0)		/* Converts all letters to upper case		*/
-var   K_UPRLWR		=(1<<1)		/* Upper/Lower case automatically			*/
-var   K_NUMBER		=(1<<2)		/* Allow numbers only						*/
-var   K_WRAP		=(1<<3)		/* Allows word wrap 						*/
-var   K_MSG			=(1<<4)		/* Allows ANSI, ^N ^A ^G					*/
-var   K_SPIN		=(1<<5)		/* Spinning cursor (same as SPIN)			*/
-var   K_LINE		=(1<<6)		/* Input line (inverse color)				*/
-var   K_EDIT		=(1<<7)		/* Edit string passed						*/
-var   K_CHAT		=(1<<8)		/* In chat multi-chat						*/
-var   K_NOCRLF		=(1<<9)		/* Don't print CRLF after string input      */
-var   K_ALPHA 		=(1<<10)	/* Only allow alphabetic characters 		*/
-var   K_GETSTR		=(1<<11)	/* getkey called from getstr()				*/
-var   K_LOWPRIO		=(1<<12)	/* low priority input						*/
-var   K_NOEXASC		=(1<<13)	/* No extended ASCII allowed				*/
-var   K_E71DETECT	=(1<<14)	/* Detect E-7-1 terminal type				*/
-var   K_AUTODEL		=(1<<15)	/* Auto-delete text (used with K_EDIT)		*/
-var   K_COLD		=(1<<16)	/* Possible cold key mode					*/
-var   K_NOECHO		=(1<<17)	/* Don't echo input                         */
-var   K_TAB			=(1<<18)	/* Treat TAB key as CR						*/
-					    		/********************************************/
-						
-						    	/********************************************/
-    							/* Bits in 'mode' for putmsg and printfile  */
-							    /********************************************/
-var   P_NOABORT  	=(1<<0)		/* Disallows abortion of a message          */
-var   P_SAVEATR		=(1<<1)		/* Save the new current attributres after	*/
-					    		/* msg has printed */
-var   P_NOATCODES	=(1<<2)		/* Don't allow @ codes                      */
-var   P_OPENCLOSE	=(1<<3)		/* Open and close the file					*/
-							    /********************************************/
-
-    							/********************************************/
-							    /* system.new_user_questions				*/
-							    /********************************************/
-var   UQ_ALIASES	=(1<<0) 	/* Ask for alias							*/
-var   UQ_LOCATION	=(1<<1) 	/* Ask for location 						*/
-var   UQ_ADDRESS	=(1<<2) 	/* Ask for address							*/
-var   UQ_PHONE		=(1<<3) 	/* Ask for phone number 					*/
-var   UQ_HANDLE		=(1<<4) 	/* Ask for chat handle						*/
-var   UQ_DUPHAND	=(1<<5) 	/* Search for duplicate handles 			*/
-var   UQ_SEX		=(1<<6) 	/* Ask for sex								*/
-var   UQ_BIRTH		=(1<<7) 	/* Ask for birth date						*/
-var   UQ_COMP 		=(1<<8) 	/* Ask for computer type					*/
-var   UQ_MC_COMP	=(1<<9) 	/* Multiple choice computer type			*/
-var   UQ_REALNAME	=(1<<10)	/* Ask for real name						*/
-var   UQ_DUPREAL	=(1<<11)	/* Search for duplicate real names			*/
-var   UQ_COMPANY	=(1<<12)	/* Ask for company name 					*/
-var   UQ_NOEXASC	=(1<<13)	/* Don't allow ex-ASCII in user text		*/
-var   UQ_CMDSHELL	=(1<<14)	/* Ask for command shell					*/
-var   UQ_XEDIT		=(1<<15)	/* Ask for external editor					*/
-var   UQ_NODEF		=(1<<16)	/* Don't ask for default settings			*/
-var   UQ_NOCOMMAS	=(1<<17)	/* Do not require commas in location		*/
-					    		/********************************************/
-				
-							    /********************************************/
-							    /* node.settings							*/
-							    /********************************************/
-var   NM_ANSALARM	=(1<<0)		/* Alarm locally on answer					*/
-var   NM_WFCSCRN	=(1<<1)		/* Wait for call screen                     */
-var   NM_WFCMSGS	=(1<<2)		/* Include total messages/files on WFC		*/
-var   NM_LCL_EDIT	=(1<<3)		/* Use local editor to create messages		*/
-var   NM_EMSOVL		=(1<<4)		/* Use expanded memory of overlays			*/
-var   NM_WINOS2		=(1<<5)		/* Use Windows/OS2 time slice API call		*/
-var   NM_INT28		=(1<<6)		/* Make int 28 DOS idle calls				*/
-var   NM_NODV 		=(1<<7)		/* Don't detect and use DESQview API        */
-var   NM_NO_NUM		=(1<<8)		/* Don't allow logons by user number        */
-var   NM_LOGON_R	=(1<<9)		/* Allow logons by user real name			*/
-var   NM_LOGON_P	=(1<<10)	/* Secure logons (always ask for password)	*/
-var   NM_NO_LKBRD	=(1<<11)	/* No local keyboard (at all)				*/
-var   NM_SYSPW		=(1<<12)	/* Protect WFC keys and Alt keys with SY:	*/
-var   NM_NO_INACT	=(1<<13)	/* No local inactivity alert/logoff 		*/
-var   NM_NOBEEP		=(1<<14)	/* Don't beep locally                       */
-var   NM_LOWPRIO	=(1<<15)	/* Always use low priority input			*/
-var   NM_7BITONLY	=(1<<16)	/* Except 7-bit input only (E71 terminals)	*/
-var   NM_RESETVID	=(1<<17)	/* Reset video mode between callers?		*/
-var   NM_NOPAUSESPIN=(1<<18)	/* No spinning cursor at pause prompt		*/
-					    		/********************************************/
-
-						    	/********************************************/
-							    /* netmail_misc								*/
-							    /********************************************/
-var   NMAIL_ALLOW 	=(1<<0)		/* Allow NetMail							*/
-var   NMAIL_CRASH 	=(1<<1)		/* Default netmail to crash					*/
-var   NMAIL_HOLD	=(1<<2)		/* Default netmail to hold					*/
-var   NMAIL_KILL	=(1<<3)		/* Default netmail to kill after sent		*/
-var   NMAIL_ALIAS 	=(1<<4)		/* Use Aliases in NetMail					*/
-var   NMAIL_FILE	=(1<<5)		/* Allow file attachments					*/
-var   NMAIL_DIRECT	=(1<<6)		/* Default netmail to direct				*/
-					    		/********************************************/
-
-    							/********************************************/
-							    /* Bit values for sub[x].settings			*/
-							    /********************************************/
-var   SUB_QNET		=(1<<3) 	/* Sub-board is netted via QWK network		*/
-var   SUB_PNET		=(1<<4) 	/* Sub-board is netted via PostLink			*/
-var   SUB_FIDO		=(1<<5) 	/* Sub-board is netted via FidoNet			*/
-var   SUB_PRIV		=(1<<6) 	/* Allow private posts on sub				*/
-var   SUB_PONLY		=(1<<7) 	/* Private posts only						*/
-var   SUB_ANON		=(1<<8) 	/* Allow anonymous posts on sub				*/
-var   SUB_AONLY		=(1<<9) 	/* Anonymous only							*/
-var   SUB_NAME		=(1<<10)	/* Must use real names						*/
-var   SUB_DEL 		=(1<<11)	/* Allow users to delete messages			*/
-var   SUB_DELLAST	=(1<<12)	/* Allow users to delete last msg only		*/
-var   SUB_FORCED	=(1<<13)	/* Sub-board is forced scanning				*/
-var   SUB_NOTAG		=(1<<14)	/* Don't add tag or origin lines			*/
-var   SUB_TOUSER	=(1<<15)	/* Prompt for to user on posts				*/
-var   SUB_ASCII		=(1<<16)	/* ASCII characters only					*/
-var   SUB_QUOTE		=(1<<17)	/* Allow online quoting						*/
-var   SUB_NSDEF		=(1<<18)	/* New-Scan on by default					*/
-var   SUB_INET		=(1<<19)	/* Sub-board is netted via Internet			*/
-var   SUB_FAST		=(1<<20)	/* Fast storage mode						*/
-var   SUB_KILL		=(1<<21)	/* Kill read messages automatically			*/
-var   SUB_KILLP		=(1<<22)	/* Kill read pvt messages automatically		*/
-var   SUB_SYSPERM	=(1<<23)	/* Sysop messages are permament				*/
-var   SUB_GATE		=(1<<24)	/* Gateway between Network types			*/
-var   SUB_LZH 		=(1<<25)	/* Use LZH compression for msgs				*/
-var   SUB_SSDEF		=(1<<26)	/* Default ON for Scan for Your msgs		*/
-var   SUB_HYPER		=(1<<27)	/* Hyper allocation							*/
-					    		/********************************************/
-
-    							/********************************************/
-                                /* Bit values for dir[x].settings			*/
-							    /********************************************/
-var   DIR_FCHK		=(1<<0) 	/* Check for file existance					*/
-var   DIR_RATE		=(1<<1) 	/* Force uploads to be rated G,R, or X		*/
-var   DIR_MULT		=(1<<2) 	/* Ask for multi-disk numbering				*/
-var   DIR_DUPES		=(1<<3) 	/* Search this dir for upload dupes			*/
-var   DIR_FREE		=(1<<4) 	/* Free downloads							*/
-var   DIR_TFREE		=(1<<5) 	/* Time to download is free					*/
-var   DIR_CDTUL		=(1<<6) 	/* Credit Uploads							*/
-var   DIR_CDTDL		=(1<<7) 	/* Credit Downloads							*/
-var   DIR_ANON		=(1<<8) 	/* Anonymous uploads						*/
-var   DIR_AONLY		=(1<<9) 	/* Anonymous only							*/
-var   DIR_ULDATE	=(1<<10)	/* Include upload date in listing			*/
-var   DIR_DIZ 		=(1<<11)	/* FILE_ID.DIZ and DESC.SDI support			*/
-var   DIR_NOSCAN	=(1<<12)	/* Don't new-scan this directory			*/
-var   DIR_NOAUTO	=(1<<13)	/* Don't auto-add this directory			*/
-var   DIR_ULTIME	=(1<<14)	/* Deduct time during uploads				*/
-var   DIR_CDTMIN	=(1<<15)	/* Give uploader minutes instead of cdt		*/
-var   DIR_SINCEDL	=(1<<16)	/* Purge based on days since last dl		*/
-var   DIR_MOVENEW	=(1<<17)	/* Files marked as new when moved			*/
-					    		/********************************************/
-				
-    							/********************************************/
-				                /* Bit values for file.settings				*/
-							    /********************************************/
-var   FILE_EXTDESC	=(1<<0)     /* Extended description exists				*/
-var   FILE_ANON 	=(1<<1)		/* Anonymous upload							*/
-					    		/********************************************/
-
-					    		/********************************************/
-								/* Bits in the mode of bbs.exec()           */
-					    		/********************************************/
-var   EX_SH			=(1<<0)		/* Use system shell to load other process   */
-var   EX_OUTR		=(1<<1)		/* Copy DOS output to remote                */
-var   EX_OUTL 		=(1<<2)		/* Use _lputc() for local DOS output		*/
-var   EX_INR		=(1<<3)		/* Trap int 16h keyboard input requests     */
-var   EX_WWIV 		=(1<<4)		/* Expand WWIV color codes to ANSI sequence */
-var   EX_SWAP 		=(1<<5)		/* Swap out for this external				*/
-var   EX_POPEN		=(1<<7)		/* Leave COM port open						*/
-var   EX_OFFLINE	=(1<<8)		/* Run this program offline					*/
-var   EX_NATIVE		=(1<<9)		/* Native 32-bit application				*/
-var   EX_BG			=(1<<10)	/* Back-ground/detached process				*/
-var   EX_BIN		=(1<<11)	/* Binary mode (no Unix LF to CR/LF)		*/
-					    		/********************************************/
-
-					    		/********************************************/
-								/* Values for bbs.user_event()				*/
-					    		/********************************************/
-var   EVENT_LOGON	=1			/* Execute during logon sequence			*/
-var   EVENT_LOGOFF	=2			/* Execute during logoff sequence			*/
-var   EVENT_NEWUSER	=3			/* Execute during newuser app.				*/
-var   EVENT_BIRTHDAY=4			/* Execute on birthday						*/
-					    		/********************************************/
-
-					    		/********************************************/
-								/* Bits in mode of bbs.telnet_gate()		*/
-					    		/********************************************/
-var   TG_ECHO		=(1<<0)		/* Turn on telnet echo						*/
-var   TG_CRLF		=(1<<1)		/* Expand sole CR to CRLF					*/
-var   TG_LINEMODE	=(1<<2)		/* Send entire lines only					*/
-var   TG_NODESYNC	=(1<<3)		/* Call Nodesync, get msgs, etc.			*/
-var   TG_CTRLKEYS	=(1<<4)		/* Interpret ^P ^U ^T, etc locally			*/
-var   TG_PASSTHRU	=(1<<5)		/* Pass-through telnet commands/responses	*/
-var   TG_RLOGIN		=(1<<6)		/* Use BSD RLogin protocol					*/
-					    		/********************************************/
-
-					    		/********************************************/
-								/* Bits in console.telnet_mode				*/
-					    		/********************************************/
-var   TELNET_MODE_BIN_RX=(1<<0) /* Binary receive (no CR to CRLF xlat)		*/
-var   TELNET_MODE_ECHO	=(1<<1)	/* Echo remotely							*/
-var   TELNET_MODE_GATE	=(1<<2)	/* Pass-through telnet commands/responses	*/
-					    		/********************************************/
-
-								/* Message attributes */
-var MSG_PRIVATE 		=(1<<0)
-var MSG_READ			=(1<<1)
-var MSG_PERMANENT		=(1<<2)
-var MSG_LOCKED			=(1<<3)
-var MSG_DELETE			=(1<<4)
-var MSG_ANONYMOUS		=(1<<5)
-var MSG_KILLREAD		=(1<<6)
-var MSG_MODERATED		=(1<<7)
-var MSG_VALIDATED		=(1<<8)
-var MSG_REPLIED			=(1<<9)	// User replied to this message
-
-								/* Auxillary header attributes */
-var MSG_FILEREQUEST 	=(1<<0)	// File request
-var MSG_FILEATTACH		=(1<<1)	// File(s) attached to Msg
-var MSG_TRUNCFILE		=(1<<2)	// Truncate file(s) when sent
-var MSG_KILLFILE		=(1<<3)	// Delete file(s) when sent
-var MSG_RECEIPTREQ		=(1<<4)	// Return receipt requested
-var MSG_CONFIRMREQ		=(1<<5)	// Confirmation receipt requested
-var MSG_NODISP			=(1<<6)	// Msg may not be displayed to user
-
-								/* Message network attributes */
-var MSG_LOCAL			=(1<<0)	// Msg created locally
-var MSG_INTRANSIT		=(1<<1)	// Msg is in-transit
-var MSG_SENT			=(1<<2)	// Sent to remote
-var MSG_KILLSENT		=(1<<3)	// Kill when sent
-var MSG_ARCHIVESENT 	=(1<<4)	// Archive when sent
-var MSG_HOLD			=(1<<5)	// Hold for pick-up
-var MSG_CRASH			=(1<<6)	// Crash
-var MSG_IMMEDIATE		=(1<<7)	// Send Msg now, ignore restrictions
-var MSG_DIRECT			=(1<<8)	// Send directly to destination
-var MSG_GATE			=(1<<9)	// Send via gateway
-var MSG_ORPHAN			=(1<<10)// Unknown destination
-var MSG_FPU 			=(1<<11)// Force pickup
-var MSG_TYPELOCAL		=(1<<12)// Msg is for local use only
-var MSG_TYPEECHO		=(1<<13)// Msg is for conference distribution
-var MSG_TYPENET 		=(1<<14)// Msg is direct network mail
-
-								/* Net types */
-var NET_NONE			=0		// Local message	
-var NET_UNKNOWN			=1		// Networked, but unknown type
-var NET_FIDO			=2		// FidoNet
-var NET_POSTLINK		=3		// PostLink
-var NET_QWK				=4		// QWK
-var NET_INTERNET		=5		// NNTP
-var NET_WWIV			=6		// WWIV
-var NET_MHS				=7		// MHS
diff --git a/exec/load/sockdefs.js b/exec/load/sockdefs.js
deleted file mode 100644
index 1745d820fb..0000000000
--- a/exec/load/sockdefs.js
+++ /dev/null
@@ -1,127 +0,0 @@
-/* sockdefs.js */
-
-/*
- * Constants and structures defined by the internet system,
- * Per RFC 790, September 1981, taken from the BSD file netinet/in.h.
- */
-
-/* $Id$ */
-
-/*
- * Protocols
- */
-var IPPROTO_IP              =0               /* dummy for IP */
-var IPPROTO_ICMP            =1               /* control message protocol */
-var IPPROTO_IGMP            =2               /* internet group management protocol */
-var IPPROTO_GGP             =3               /* gateway^2 (deprecated) */
-var IPPROTO_TCP             =6               /* tcp */
-var IPPROTO_PUP             =12              /* pup */
-var IPPROTO_UDP             =17              /* user datagram protocol */
-var IPPROTO_IDP             =22              /* xns idp */
-var IPPROTO_ND              =77              /* UNOFFICIAL net disk proto */
-
-var IPPROTO_RAW             =255             /* raw IP packet */
-var IPPROTO_MAX             =256
-
-/*
- * Port/socket numbers: network standard functions
- */
-var IPPORT_ECHO             =7
-var IPPORT_DISCARD          =9
-var IPPORT_SYSTAT           =11
-var IPPORT_DAYTIME          =13
-var IPPORT_NETSTAT          =15
-var IPPORT_FTP              =21
-var IPPORT_TELNET           =23
-var IPPORT_SMTP             =25
-var IPPORT_TIMESERVER       =37
-var IPPORT_NAMESERVER       =42
-var IPPORT_WHOIS            =43
-var IPPORT_MTP              =57
-
-/*
- * Port/socket numbers: host specific functions
- */
-var IPPORT_TFTP             =69
-var IPPORT_RJE              =77
-var IPPORT_FINGER           =79
-var IPPORT_TTYLINK          =87
-var IPPORT_SUPDUP           =95
-
-/*
- * UNIX TCP sockets
- */
-var IPPORT_EXECSERVER       =512
-var IPPORT_LOGINSERVER      =513
-var IPPORT_CMDSERVER        =514
-var IPPORT_EFSSERVER        =520
-
-/*
- * UNIX UDP sockets
- */
-var IPPORT_BIFFUDP          =512
-var IPPORT_WHOSERVER        =513
-var IPPORT_ROUTESERVER      =520
-                                        /* 520+1 also used */
-
-/*
- * Ports < IPPORT_RESERVED are reserved for
- * privileged processes (e.g. root).
- */
-var IPPORT_RESERVED         =1024
-
-/*
- * Types
- */
-var SOCK_STREAM     =1               /* stream socket */
-var SOCK_DGRAM      =2               /* datagram socket */
-var SOCK_RAW        =3               /* raw-protocol interface */
-var SOCK_RDM        =4               /* reliably-delivered message */
-var SOCK_SEQPACKET  =5               /* sequenced packet stream */
-
-/*
- * Option flags per-socket.
- */
-var SO_DEBUG        =0x0001          /* turn on debugging info recording */
-var SO_ACCEPTCONN   =0x0002          /* socket has had listen() */
-var SO_REUSEADDR    =0x0004          /* allow local address reuse */
-var SO_KEEPALIVE    =0x0008          /* keep connections alive */
-var SO_DONTROUTE    =0x0010          /* just use interface addresses */
-var SO_BROADCAST    =0x0020          /* permit sending of broadcast msgs */
-var SO_USELOOPBACK  =0x0040          /* bypass hardware when possible */
-var SO_LINGER       =0x0080          /* linger on close if data present */
-var SO_OOBINLINE    =0x0100          /* leave received OOB data in line */
-
-var SO_DONTLINGER   =(~SO_LINGER)
-
-/*
- * Additional options.
- */
-var SO_SNDBUF       =0x1001          /* send buffer size */
-var SO_RCVBUF       =0x1002          /* receive buffer size */
-var SO_SNDLOWAT     =0x1003          /* send low-water mark */
-var SO_RCVLOWAT     =0x1004          /* receive low-water mark */
-var SO_SNDTIMEO     =0x1005          /* send timeout */
-var SO_RCVTIMEO     =0x1006          /* receive timeout */
-var SO_ERROR        =0x1007          /* get error status and clear */
-var SO_TYPE         =0x1008          /* get socket type */
-
-/*
- * WinSock 2 extension -- new options
- */
-var SO_GROUP_ID       =0x2001      /* ID of a socket group */
-var SO_GROUP_PRIORITY =0x2002      /* the relative priority within a group*/
-var SO_MAX_MSG_SIZE   =0x2003      /* maximum message size */
-var SO_PROTOCOL_INFOA =0x2004      /* WSAPROTOCOL_INFOA structure */
-var SO_PROTOCOL_INFOW =0x2005      /* WSAPROTOCOL_INFOW structure */
-var PVD_CONFIG        =0x3001          /* configuration info for service provider */
-
-/*
- * TCP options.
- */
-var TCP_NODELAY     =0x0001
-
-/*
- * Level number for (get/set)sockopt() to apply to socket itself.
- */
-var SOL_SOCKET      =0xffff          /* options for socket level */
diff --git a/exec/login.src b/exec/login.src
deleted file mode 100644
index 9e4f989a66..0000000000
--- a/exec/login.src
+++ /dev/null
@@ -1,90 +0,0 @@
-# login.src
-
-# Login module for Synchronet BBS v2.2+
-
-# $Id$
-
-# @format.tab-size 8, @format.use-tabs true
-
-!include sbbsdefs.inc
-
-logout
-
-node_status NODE_LOGON
-
-compare_ars WIP
-if_true
-	exec_bin WIPLOGIN
-	return
-	end_if
-
-int c
-int guest
-
-set str "Guest"
-matchuser guest str		# save Guest account number in guest
-
-:top
-compare c 10
-if_greater_or_equal
-	hangup
-	return
-	end_if
-
-compare guest 0	# Guest account?
-if_greater
-	print "\r\n\1nEnter Name, Number, '\1hNew\1n', or '\1hGuest\1n'\r\nNN: "
-else
-	print "\r\n\1nEnter Name, Number, or '\1hNew\1n'\r\nNN: "
-	end_if
-getstr str 25 K_UPRLWR|K_LOWPRIO|K_E71DETECT|K_TAB
-truncsp str
-compare_str ""
-if_true
-	add c 1
-	goto top
-	end_if
-compare_str "GUEST"
-if_true
-	setstr "%q"
-	compare_str "VERTx"
-	if_true
-		no_yes "Are you a registered Synchronet owner"
-		if_false
-			print "\r\n\1h\1rLogon as \1wNEW\1r to create your account.\r\n"
-			goto top
-			end_if
-		end_if
-	setstr "Guest"
-	end_if
-compare_str "NEW"
-if_true
-	setstr "%q"
-	compare_str "VERTx"
-	if_true
-		yes_no "Are you calling just to download the Synchronet DEMO"
-		if_true
-			setstr "Guest"
-			login "PW: "
-			if_true
-				logon
-				if_true
-					return
-					end_if
-				end_if
-			end_if
-		end_if
-	newuser
-	logon
-	return
-	end_if
-login "PW: "
-if_true
-	logon
-	if_true
-		return
-		end_if
-	end_if
-add c 2
-goto top
-
diff --git a/exec/logon.src b/exec/logon.src
deleted file mode 100644
index 1f96b71ab5..0000000000
--- a/exec/logon.src
+++ /dev/null
@@ -1,154 +0,0 @@
-# logon.src
-
-# Synchronet v2.20 Logon Module
-
-# $Id$
-
-# @format.tab-size 8, @format.use-tabs true
-
-!include sbbsdefs.inc
-
-or _node_misc NM_NOPAUSESPIN	# Disable spinning cursor at pause prompts
-
-compare_ars rest G
-if_true
-	:get_name
-	print "\1y\1hFor our records, please enter your full name: \1w"
-	getname 25
-	compare_str ""
-	if_true
-		goto get_name
-		end_if
-	log "Guest: "
-	logstr
-	set_user_string user_string_realname
-	
-	:get_loc
-	print "\1y\1hPlease enter your location (City, State): \1w"
-	getname 30
-	compare_str ""
-	if_true
-		goto get_loc
-		end_if
-	log "  "
-	logstr
-	set_user_string user_string_location
-
-#	:get_phone
-#	print "\1y\1hPlease enter your voice telephone number: "
-#	get_template nnn-nnn-nnnn
-#	compare_str ""
-#	if_true
-#		goto get_phone
-#		end_if
-#	log "  "
-#	logstr
-#	set_user_string user_string_phone
-	log "\r\n"
-	:get_mag
-	print "yhWhere did you hear about this BBS?\r\n: w"
-	getstr 70
-	compare_str ""
-	if_true
-		goto get_mag
-		end_if
-	logstr
-	log "\r\n"
-	end_if
-
-#compare_ars rest G or rest X or flag S
-#if_false
-#	no_yes Do you want to enter the \1cSynchronet Match Maker\1b
-#	if_false
-#		exec_xtrn smm
-#		end_if
-#	end_if
-
-# Force split-screen chat on ANSI users
-compare_user_misc UM_ANSI
-if_true
-	compare_user_chat CHAT_SPLITP
-	if_false
-		toggle_user_chat CHAT_SPLITP
-		end_if
-	end_if
-
-# Inactivity exemption
-compare_ars exempt H
-if_true
-	or _console CON_NO_INACT
-	end_if
-
-###############################################################################
-# Replaces the 2.1 Logon stuff
-##############################
-int i
-
-# Logon screens
-
-compare_ars LOCAL
-if_true
-	goto logon_event
-	end_if
-
-sprintf str "logon%ld" _useron.level
-chkfile "%zmenu/%s.*"
-if_true
-        menu "%s"
-        end_if
-
-set i 0
-:logon_screens
-	add i 1
-	compare i 1
-	if_equal
-		set str "logon"
-	else
-		sprintf str "logon%ld" i
-		end_if
-	chkfile "%zmenu/%s.*"
-	if_false
-		goto logon_event
-		end_if
-	menu "%s"
-	compare_user_misc UM_WIP
-	if_true
-		getkey
-		end_if
-	goto logon_screens
-
-:logon_event
-cls
-user_event event_logon
-
-# Last few callers
-clear_abort
-cls
-str logonlst
-set logonlst "%jlogon.lst"
-get_file_length i logonlst
-compare i 1
-if_less
-	print "\1n\1g\1hYou are the first caller of the day!\r\n"
-else
-	print "\1n\1g\1hLast few callers:\1n\r\n"
-	printtail logonlst P_NOATCODES 4
-	crlf
-	endif
-
-# Auto-message
-setstr "%jmsgs/auto.msg"
-get_file_length i str
-compare i 0 
-if_greater
-	printfile str P_NOATCODES
-	crlf
-	end_if
-
-# Automatically set shell to WIPSHELL
-compare_user_misc UM_WIP
-if_true
-	setstr "WIPSHELL"
-	set_shell
-	end_if
-
diff --git a/exec/major.src b/exec/major.src
deleted file mode 100644
index c58e73c745..0000000000
--- a/exec/major.src
+++ /dev/null
@@ -1,349 +0,0 @@
-# major.src
-
-# MajorBBS Clone Command Shell for Synchronet
-
-# $Id$
-
-# @format.tab-size 8, @format.use-tabs true
-
-!include sbbsdefs.inc
-
-:main
-cmd_home
-menu major/main
-getstr 10
-compare_str ""
-if_true
-	end_cmd
-	end_if
-ungetstr
-getkey
-node_action node_main
-logkey_comma
-
-cmdkey ?
-	end_cmd
-
-cmdkey T
-	exec_bin chat_sec
-	end_cmd
-
-cmdkey I
-	text_file_section
-	end_cmd
-
-cmdkey F
-	call message
-	end_cmd
-
-cmdkey E
-	cmd_home
-	menu major/email
-	getstr 10
-	compare_str ""
-	if_true
-		end_cmd
-		end_if
-	ungetstr
-	getkey
-        logkey
-
-	cmdkey R
-		mail_read
-		end_cmd
-
-	cmdkey W
-		print "_\r\nbhE-mail (User name or number): w"
-		getname 25
-		compare_str ""
-		if_true
-			end_cmd
-			end_if
-		compare_str "SYSOP"
-		if_true
-			setstr "1"
-			end_if
-		mail_send
-		end_cmd
-
-	cmdkey S
-		no_yes "\r\nAttach a file"
-		if_true
-			mail_send_netmail
-		else
-			mail_send_netfile
-			end_if
-		end_cmd
-
-	cmdkey U
-		print "_\r\nbhE-mail (User name or number): w"
-		getname 25
-		compare_str ""
-		if_true
-			end_cmd
-			end_if
-		compare_str "SYSOP"
-		if_true
-			setstr "1"
-			end_if
-		mail_send_file
-		end_cmd
-
-	cmdkey E
-		mail_read_sent
-		end_cmd
-
-	cmdkey X
-		cmd_pop
-		end_cmd
-
-	end_cmd
-
-cmdkey L
-	call transfers
-	end_cmd
-
-cmdkey D
-	xtrn_section
-	end_cmd
-
-cmdkey A
-	cmd_home
-	menu major/userdefs
-	getstr 10
-	compare_str ""
-	if_true
-		end_cmd
-		end_if
-	ungetstr
-	getkey
-        logkey
-
-	cmdkey S
-		info_user
-		end_cmd
-
-	cmdkey A
-		user_defaults
-		end_cmd
-
-	cmdkey X
-		cmd_pop
-		end_cmd
-
-	end_cmd
-
-cmdkey R
-	print "\r\nchList Users\r\n"
-	mnemonics "\r\n~Logons Today, ~Sub-board, or ~All: "
-	getcmd LSA\r
-
-	cmdkey L
-		userlist_logons
-		end_cmd
-	cmdkey S
-		userlist_sub
-		end_cmd
-	cmdkey A
-		userlist_all
-		end_cmd
-
-	# fall-through for CR, Ctrl-C, etc
-        end_cmd
-
-cmdkey S
-	compare_ars SYSOP or exempt Q or I or N
-	if_true
-		call sysop
-		end_if
-	end_cmd
-
-cmdkey X
-	file_download_batch
-	if_true
-		end_cmd
-                end_if
-	logoff
-	end_cmd
-
-end_cmd
-
-############################### Message Section ###############################
-
-:message
-cmd_home
-menu major/msg
-getstr 10
-compare_str ""
-if_true
-	end_cmd
-        end_if
-ungetstr
-getkey
-
-# Update node status
-node_action node_main
-logkey_comma
-
-cmdkey ?
-	end_cmd
-
-cmdkey X
-	cmd_pop
-	return
-	end_cmd
-
-cmdkey R
-	msg_read
-	end_cmd
-
-cmdkey W
-	msg_post
-	end_cmd
-
-cmdkey Q
-	cmd_home
-	menu major/quickscn
-	getstr 10
-	compare_str ""
-	if_true
-		end_cmd
-		end_if
-	ungetstr
-	getkey
-        logkey
-
-	cmdstr S
-                msg_new_scan
-                end_cmd
-
-	cmdstr L
-		msg_your_scan
-                end_cmd
-
-	cmdstr K
-		msg_find_text
-                end_cmd
-
-	cmdstr C
-		cmd_home
-		menu maincfg
-		async
-		print "\r\nyhConfig: n"
-		getcmd ?QNPIS
-		logkey
-
-		cmdkey ?
-			compare_ars expert
-			if_true
-				menu maincfg
-				end_if
-			end_cmd
-
-		cmdkey N
-			msg_new_scan_cfg
-			end_cmd
-
-		cmdkey S
-			msg_your_scan_cfg
-			end_cmd
-
-		cmdkey P
-			msg_ptrs_cfg
-			end_cmd
-
-		cmdkey I
-			msg_ptrs_reinit
-			end_cmd
-
-		cmdkey Q
-			cmd_pop
-			end_cmd
-
-		end_cmd
-        cmd_pop
-        end_cmd
-
-cmdkey T
-	exec_bin chat_sec
-	end_cmd
-
-cmdkey S
-	msg_select_area
-	end_cmd
-
-cmdkey F
-	call transfers
-        end_cmd
-
-cmd_pop
-return
-
-############################ Transfer Menu Commands ###########################
-:transfers
-cmd_home
-menu major/file
-getstr 10
-compare_str ""
-if_true
-	end_cmd
-	end_if
-ungetstr
-getkey
-logkey
-
-cmdkey F
-	print "\r\nchList Files\r\n"
-	getfilespec
-	if_true
-		file_list
-		end_if
-	end_cmd
-
-cmdkey D
-	print "\r\nchDownload File(s)\r\n"
-	file_download_batch
-	if_true
-		end_cmd
-                end_if
-	getfilespec
-	if_true
-		file_download
-		end_if
-	end_cmd
-
-cmdkey U
-	print "\r\nchUpload File\r\n"
-	chkfile "%zmenu/upload.*"
-	if_true
-		menu upload
-                end_if
-	file_upload
-	end_cmd
-
-cmdkey S
-	file_select_area
-	end_cmd
-
-cmdkey X
-	cmd_pop
-	return
-	end_cmd
-
-end_cmd
-
-############################## Sysop Commands #################################
-
-:sysop
-menu sysmain
-print "n\r\nchSelect an option (or X to exit): n"
-getstrupr 40
-
-compare_str "X"
-if_true
-        return
-	end_if
-
-exec_bin str_cmds
-goto sysop
-
diff --git a/exec/matrix.src b/exec/matrix.src
deleted file mode 100644
index 0ac3c0142f..0000000000
--- a/exec/matrix.src
+++ /dev/null
@@ -1,172 +0,0 @@
-# matrix.src
-
-# Light-bar answer module for Synchronet BBS v2.2+
-
-# $Id$
-
-# @format.tab-size 8, @format.use-tabs true
-
-!include sbbsdefs.inc
-!define LAST 2
-logout
-node_status NODE_LOGON
-
-compare_ars WIP
-if_true
-	exec_bin WIPLOGIN
-	return
-        end_if
-
-int c m
-
-:top
-compare c 10
-if_greater_or_equal
-	hangup
-	return
-	end_if
-
-# Trigger scripts with old style prompt
-print "NN: "
-pause_reset
-cls
-cmd_home
-compare_user_misc UM_ANSI
-if_true
-	print "\x1b[H"
-else
-	cls
-        end_if
-
-print "                        "
-print "4yh"
-print "������������������������������ͻn\r\n"
-print "                        "
-print "4yh"
-print "�         Logon Matrix         �nb��n\r\n"
-print "                        "
-print "4yh"
-print "������������������������������͹nb��n\r\n"
-print "                        4yh� "
-compare m 0
-	if_equal
-		print "7bh"
-	else
-		print " 4wh"
-	end_if
-print " Existing User Account     "
-print "4y �nb��n\r\n                        4yh� "
-compare m 1
-	if_equal
-		print "7bh"
-	else
-		print " 4wh"
-	end_if
-print " New User Account          "
-print "4y �nb��n\r\n                        4yh� "
-compare m 2
-	if_equal
-		print "7bh"
-	else
-		print " 4wh"
-	end_if
-print " Guest User Account        "
-print "4y �nb��n\r\n                        4yh"
-print "������������������������������ͼnb��n\r\nnb"
-print "                         "
-print " ��������������������������������n\r\n"
-
-#sync
-getkey
-
-# Down Arrow, Ctrl-J or 'D'
-cmdkeys ^JD
-	add m 1
-	compare m LAST
-	if_greater
-		set m 0
-		end_if
-	pause_reset
-	end_cmd
-
-# Up Arrow, Ctrl-^ or 'U'
-cmdkeys ^^U
-	sub m 1
-	compare m 0
-	if_less
-		set m LAST
-		end_if
-	pause_reset
-	end_cmd
-
-# Home or Ctrl-B
-cmdkey ^B
-	set m 0
-	end_cmd
-
-# End of Ctrl-E
-cmdkey ^E
-	set m LAST
-        end_cmd
-
-cmdkeys ABCDEFGHIJKLMNOPQRSTUVWXYZ*
-	ungetkey
-	cmd_pop
-	end_cmd
-
-switch m
-	case 0
-		cls
-		print "Login: "
-		getstr str 25 K_UPRLWR|K_LOWPRIO|K_E71DETECT
-		truncsp str
-		compare_str ""
-		if_true
-			add c 1
-			goto top
-			end_if
-		login "PW: "
-		if_true
-			logon
-			if_true
-				return
-				end_if
-			end_if
-		pause
-		add c 2
-		goto top
-		end_case
-	case 1
-		setstr "%q"
-		compare_str "VERT"
-		if_true
-			yes_no Are you calling just to download Synchronet BBS software
-			if_true
-				setstr "Guest"
-				login "PW: "
-				if_true
-					logon
-					if_true
-						return
-						end_if
-					end_if
-				end_if
-			end_if
-		newuser
-		logon
-		return
-		end_case
-
-	case 2
-		setstr "guest"
-		login "PW: "
-		if_true
-			logon
-			if_true
-				return
-				end_if
-			end_if
-		end_case
-	end_switch
-goto top
-
diff --git a/exec/mudgate.src b/exec/mudgate.src
deleted file mode 100644
index 6b85412150..0000000000
--- a/exec/mudgate.src
+++ /dev/null
@@ -1,13 +0,0 @@
-# mudgate.src
-
-# $Id$
-
-# @format.tab-size 8, @format.use-tabs true
-
-!include sbbsdefs.inc
-
-printf "\r\n\1h\1hPress \1yCtrl-]\1w for a control menu anytime.\r\n\r\n"
-pause
-printf "\1h\1yConnecting to MUD: \1w%s\1n\r\n" str
-telnet_gate str TG_ECHO|TG_CRLF|TG_LINEMODE|TG_NODESYNC|TG_CTRLKEYS
-cls
diff --git a/exec/nntpservice.js b/exec/nntpservice.js
deleted file mode 100644
index 7695843de4..0000000000
--- a/exec/nntpservice.js
+++ /dev/null
@@ -1,441 +0,0 @@
-// nntpservice.js
-
-// Synchronet Service for the Network News Transfer Protocol (RFC 977)
-
-// Example configuration (in ctrl/services.cfg):
-
-// NNTP		119	0-unlimited	0		nntpservice.js
-
-// Tested clients:
-//					Microsoft Outlook Express 6
-//					Netscape Communicator 4.77
-
-load("sbbsdefs.js");
-
-const VERSION = "1.00 Alpha";
-
-var debug = false;
-var no_anonymous = false;
-
-// Parse arguments
-for(i=0;i<argc;i++)
-	if(argv[i].toLowerCase()=="-d")
-		debug = true;
-	else if(argv[i].toLowerCase()=="-na")
-		no_anonymous = true;
-
-// Write a string to the client socket
-function write(str)
-{
-	if(debug)
-		log(format("rsp: %s",str));
-	client.socket.send(str);
-}
-
-function writeln(str)
-{
-	write(str + "\r\n");
-}
-
-var username='';
-var msgbase=null;
-var selected=null;
-var current_article=0;
-
-writeln(format("200 %s News (Synchronet NNTP Service v%s)",system.name,VERSION));
-
-if(!no_anonymous)	
-	login("guest");	// Login as guest/anonymous by default
-
-while(client.socket.is_connected) {
-
-	// Get Request
-	cmdline = client.socket.recvline(512 /*maxlen*/, 300 /*timeout*/);
-
-	if(cmdline==null) {
-		log("!TIMEOUT waiting for request");
-		exit();
-	}
-
-	if(cmdline=="") 	/* ignore blank commands */
-		continue;
-
-	log(format("cmd: %s",cmdline));
-
-	cmd=cmdline.split(' ');
-
-	switch(cmd[0].toUpperCase()) {
-		case "AUTHINFO":
-			switch(cmd[1].toUpperCase()) {
-				case "USER":
-					username='';
-					for(i=2;cmd[i]!=undefined;i++) {
-						if(i>2)
-							username+=' ';
-						username+=cmd[i];
-					}
-					writeln("381 More authentication required");
-					break;
-				case "PASS":
-					if(login(username,cmd[2])) 
-						writeln("281 Authentication successful");
-					else
-						writeln("502 Authentication failure");
-					break;
-				default:
-					writeln("500 Syntax error or unknown command");
-					break;
-			}
-			continue;
-		case "MODE":
-			writeln("200 Hello, you can post");
-			continue;
-		case "QUIT":
-			writeln("205 closing connection - goodbye!");
-			exit();
-			break;
-	}
-
-	if(!logged_in) {
-		writeln("502 Authentication required");
-		continue;
-	}
-
-	/* These commands require login/authentication */
-	switch(cmd[0].toUpperCase()) {
-
-		case "LIST":
-			writeln("215 list of newsgroups follows");
-			for(g in msg_area.grp_list) 
-				for(s in msg_area.grp_list[g].sub_list) {
-					msgbase=new MsgBase(msg_area.grp_list[g].sub_list[s].code);
-					writeln(format("%s %u %u %s"
-						,msg_area.grp_list[g].sub_list[s].newsgroup
-						,msgbase.last_msg
-						,msgbase.first_msg
-						,msg_area.grp_list[g].sub_list[s].can_post ? "y" : "n"
-						));
-					msgbase.close();
-				}
-			writeln(".");	// end of list
-			break;
-
-		case "NEWGROUPS":
-			writeln("231 list of new newsgroups follows");
-			writeln(".");	// end of list
-			break;
-
-		case "GROUP":
-			found=false;
-			for(g in msg_area.grp_list) 
-				for(s in msg_area.grp_list[g].sub_list) 
-					if(msg_area.grp_list[g].sub_list[s].newsgroup.toLowerCase()==cmd[1].toLowerCase()) {
-						found=true;
-						msgbase=new MsgBase(msg_area.grp_list[g].sub_list[s].code);
-						selected=msg_area.grp_list[g].sub_list[s];
-					}
-			if(found)
-				writeln(format("211 %u %u %u %s group selected"
-					,msgbase.total_msgs	// articles in group
-					,msgbase.first_msg
-					,msgbase.last_msg
-					,selected.newsgroup
-					));
-			else {
-				writeln("411 no such news group");
-				log("!no such group");
-			}
-			break;
-
-		case "XOVER":
-			if(msgbase==null) {
-				writeln("412 no news group selected");
-				break;
-			}
-			writeln("224 Overview information follows");
-			var first, last;
-			if(cmd[1].indexOf('-')>=0)	{ /* range */
-				range=cmd[1].split('-');
-				first=Number(range[0]);
-				last=Number(range[1]);
-			} else
-				first=last=Number(cmd[1]);
-			for(i=first;i<=last;i++) {
-				hdr=msgbase.get_msg_header(false,i);
-				if(hdr==null)
-					continue;
-				if(hdr.attr&MSG_DELETE)	/* marked for deletion */
-					continue;
-				writeln(format("%u\t%s\t%s\t%s\t%s\t%s\t%u\t%u"
-					,i
-					,hdr.subject
-					,hdr.from
-					,system.timestr(hdr.when_written_time)
-					,hdr.id			// message-id
-					,hdr.reply_id	// references
-					,hdr.data_length	// byte count
-					,Math.round(hdr.data_length/79)+1	// line count
-					));
-			}
-			writeln(".");	// end of list
-			break;
-
-		case "XHDR":
-			if(msgbase==null) {
-				writeln("412 no news group selected");
-				break;
-			}
-			writeln("221 Header follows");
-			var first, last;
-			if(cmd[2].indexOf('-')>=0)	{ /* range */
-				range=cmd[2].split('-');
-				first=Number(range[0]);
-				last=Number(range[1]);
-			} else
-				first=last=Number(cmd[2]);
-			for(i=first;i<=last;i++) {
-				hdr=msgbase.get_msg_header(false,i);
-				if(hdr==null)
-					continue;
-				if(hdr.attr&MSG_DELETE)	/* marked for deletion */
-					continue;
-				var field="";
-				switch(cmd[1].toLowerCase()) {	/* header */
-					case "subject":
-						field=hdr.subject;
-						break;
-					case "from":
-						field=hdr.from;
-						break;
-					case "reply-to":
-						field=hdr.reply_to;
-						break;
-					case "date":
-						field=system.timestr(hdr.when_written_time);
-						break;
-					case "message-id":
-						field=hdr.id;
-						break;
-					case "references":
-						field=hdr.reply_id;
-						break;
-					case "lines":
-						field=Math.round(hdr.data_length/79)+1;
-						break;
-				}
-
-				writeln(format("%u %s",i,field.toString()));
-			}
-			writeln(".");	// end of list
-			break;
-
-		case "ARTICLE":
-		case "HEAD":
-		case "BODY":
-			if(cmd[1]!='') {
-				if(cmd[1].indexOf('<')>=0)		/* message-id */
-					current_article=Number(cmd[1].slice(1,-1));
-				else 
-					current_article=Number(cmd[1]);
-			}
-			if(current_article<1) {
-				writeln("420 no current article has been selected");
-				break;
-			}
-
-			hdr=null;
-			body=null;
-			hdr=msgbase.get_msg_header(false,current_article);
-			if(cmd[0].toUpperCase()!="HEAD") 
-				body=msgbase.get_msg_body(false,current_article
-					,true /* remove ctrl-a codes */);
-
-/* Eliminate dupe loops 
-			if(user.security.restrictions&UFLAG_Q && hdr!=null) 
-*/
-			if(hdr==null) {
-				writeln("430 no such arctile found");
-				break;
-			}
-			if(hdr.attr&MSG_MODERATED && !(hdr.attr&MSG_VALIDATED)) {
-				writeln("430 unvalidated message");
-				break;
-			}
-			if(hdr.attr&MSG_DELETE) {
-				writeln("430 deleted message");
-				break;
-			}
-			if(hdr.attr&MSG_PRIVATE 
-				&& hdr.to.toLowerCase()!=user.alias.toLowerCase() 
-				&& hdr.to.toLowerCase()!=user.name.toLowerCase()) {
-				writeln("430 private message");
-				break;
-			}
-
-			switch(cmd[0].toUpperCase()) {
-				case "ARTICLE":
-					writeln(format("220 %s article retrieved - head and body follow",hdr.id));
-					break;
-				case "HEAD":
-					writeln(format("221 %s article retrieved - header follows",hdr.id));
-					break;
-				case "BODY":
-					writeln(format("222 %s article retrieved - body follows",hdr.id));
-					break;
-			}
-
-			if(cmd[0].toUpperCase()!="BODY") {
-				if(hdr.from_net_type)
-					writeln(format("From: \"%s\" <%s@%s>"
-						,hdr.from,hdr.from,hdr.from_net_addr));
-				else if(hdr.from.indexOf(' ')>0)
-					writeln(format("From: \"%s\"@%s"
-						,hdr.from,system.inetaddr));
-				else
-					writeln(format("From: %s@%s"
-						,hdr.from,system.inetaddr));
-				writeln("Subject: " + hdr.subject);
-				writeln("Message-ID: " + hdr.id);
-				writeln("Date: " + system.timestr(hdr.when_written_time));
-				writeln("References: " + hdr.reply_id);
-				writeln("Newsgroups: " + selected.newsgroup);
-			}
-			if(hdr!=null && body!=null)	/* both, separate with blank line */
-				writeln("");
-			if(body!=null) 
-				write(body);
-			writeln(".");
-			break;
-
-		case "NEXT":
-		case "LAST":
-			if(msgbase==null) {
-				writeln("412 no news group selected");
-				break;
-			}
-			if(current_article<1) {
-				writeln("420 no current article has been selected");
-				break;
-			}
-			if(cmd[0].toUpperCase()=="NEXT")
-				current_article++;
-			else
-				current_article--;
-			writeln(format("223 %u %u article retrieved - request text separately"
-				,current_article
-				,current_article
-				));
-   			break;
-
-		case "POST":
-/**
-			if(!selected.can_post) {
-				writeln("440 posting not allowed");
-				break;
-			}
-**/
-			writeln("340 send article to be posted. End with <CR-LF>.<CR-LF>");
-
-			var hdr=new Object();
-			if(!(user.security.restrictions&(UFLAG_G|UFLAG_Q))) {	// !Guest and !Network Node
-				hdr.from=user.alias;
-				hdr.from_ext=user.number;
-			}
-
-			var posted=false;
-			var header=true;
-			var body="";
-			var newsgroups=new Array();
-			while(client.socket.is_connected) {
-
-				line = client.socket.recvline(512 /*maxlen*/, 300 /*timeout*/);
-
-				if(line==null) {
-					log("!TIMEOUT waiting for text line");
-					break;
-				}
-
-				//log(format("msgtxt: %s",line));
-
-				if(line==".") {
-					log("End of message text");
-					break;
-				}
-				if(line=="" && header) {
-					header=false;
-					continue;
-				}
-
-				if(!header) {	/* Body text, append to 'body' */
-					if(line.charAt(0)=='.')
-						line=line.slice(1);		// Skip prepended dots
-					body += line;
-					body += "\r\n";
-					continue;
-				}
-				log(line);
-
-				/* Parse header lines */
-				if((sp=line.indexOf(':'))==-1)
-					continue;
-
-				data=line.slice(sp+1);
-				while(data.charAt(0)==' ')	// skip prepended spaces
-					data=data.slice(1);
-
-				line=line.substr(0,sp);
-				while(line.charAt(0)==' ')	// skip prepended spaces
-					line=line.slice(1);
-
-				switch(line.toLowerCase()) {
-					case "from":
-						if(user.security.restrictions&(UFLAG_G|UFLAG_Q)) // Guest or Network Node
-							hdr.from=data;
-						break;
-					case "subject":
-						hdr.subject=data;
-						break;
-					case "newsgroups":
-						newsgroups=data.split(',');
-						break;
-				}
-			}
-
-            for(n in newsgroups) 
-    			for(g in msg_area.grp_list) 
-				    for(s in msg_area.grp_list[g].sub_list) 
-					    if(msg_area.grp_list[g].sub_list[s].newsgroup.toLowerCase()
-							==newsgroups[n].toLowerCase()) {
-						    if(!msg_area.grp_list[g].sub_list[s].can_post)
-							    continue;
-
-						    if(msgbase!=null) {
-							    msgbase.close();
-							    delete msgbase;
-						    }
-						    if(msg_area.grp_list[g].sub_list[s].settings&SUB_NAME
-							    && !(user.security.restrictions&(UFLAG_G|UFLAG_Q)))
-							    hdr.from=user.name;	// Use real names
-
-						    msgbase=new MsgBase(msg_area.grp_list[g].sub_list[s].code);
-						    if(msgbase.save_msg(hdr,body)) {
-							    log(format("%s posted a message on %s",user.alias,newsgroups[n]));
-							    writeln("240 article posted ok");
-							    posted=true;
-						    } else 
-							    log(format("!ERROR saving mesage: %s",msgbase.last_error));
-					    }
-			if(!posted) {
-				log("!post failure");
-				writeln("441 posting failed");
-			}
-   			break;
-
-		default:
-			writeln("500 Syntax error or unknown command");
-			log("!unknown command");
-			break;
-	}
-}
-
-/* End of nntpservice.js */
diff --git a/exec/nodedefs.inc b/exec/nodedefs.inc
deleted file mode 100644
index 5b8d739563..0000000000
--- a/exec/nodedefs.inc
+++ /dev/null
@@ -1,86 +0,0 @@
-# nodedefs.inc
-
-# Baja include file for NODE.DAB (_NODEFILE) field values
-
-# $id$
-
-# @format.tab-size 8, @format.use-tabs true
-
-					# Possible values for node STATUS
-!define NODE_WFC		0	# Waiting for Call
-!define NODE_LOGON		1	# at logon prompt
-!define NODE_NEWUSER		2	# New user applying
-!define NODE_INUSE		3	# In Use
-!define NODE_QUIET		4	# In Use - quiet mode
-!define NODE_OFFLINE		5	# Offline
-!define NODE_NETTING		6	# Networking
-!define NODE_EVENT_WAITING	7	# Waiting for all nodes to be inactive
-!define NODE_EVENT_RUNNING	8	# Running an external event
-!define NODE_EVENT_LIMBO	9	# Allowing another node to run an event
-
-				# Bit values for node MISC
-!define NODE_ANON	.0	# Anonymous User
-!define NODE_LOCK	.1	# Locked for sysops only
-!define NODE_INTR	.2	# Interrupted - hang up
-!define NODE_MSGW	.3	# Message is waiting (old way
-!define NODE_POFF	.4	# Page disabled
-!define NODE_AOFF	.5	# Activity Alert disabled
-!define NODE_UDAT	.6	# User data has been updated
-!define NODE_RRUN	.7	# Re-run this node when log off
-!define NODE_EVENT	.8	# Must run node event after log off
-!define NODE_DOWN	.9	# Down this node after logoff
-!define NODE_RPCHT	.10	# Reset private chat
-!define NODE_NMSG	.11	# Node message waiting (new way
-!define NODE_EXT	.12	# Extended info on node action
-
-				# Possible values for node ACTION
-!define NODE_MAIN	0	# Main Prompt
-!define NODE_RMSG	1	# Reading Messages
-!define NODE_RMAL	2	# Reading Mail
-!define NODE_SMAL	3	# Sending Mail
-!define NODE_RTXT	4	# Reading G-Files
-!define NODE_RSML	5	# Reading Sent Mail
-!define NODE_PMSG	6	# Posting Message
-!define NODE_AMSG	7	# Auto-message
-!define NODE_XTRN	8	# Running External Program
-!define NODE_DFLT	9	# Main Defaults Section
-!define NODE_XFER	10	# Transfer Prompt
-!define NODE_DLNG	11	# Downloading File
-!define NODE_ULNG	12	# Uploading File
-!define NODE_BXFR	13	# Bidirectional Transfer
-!define NODE_LFIL	14	# Listing Files
-!define NODE_LOGN	15	# Logging on
-!define NODE_LCHT	16	# In Local Chat with Sysop
-!define NODE_MCHT	17	# In Multi-Chat with Other Nodes
-!define NODE_GCHT	18	# In Local Chat with Guru
-!define NODE_CHAT	19	# In Chat Section
-!define NODE_SYSP	20	# Sysop Activity
-!define NODE_TQWK	21	# Transferring QWK packet
-!define NODE_PCHT	22	# In Private Chat
-!define NODE_PAGE	23	# Paging another node for Private Chat
-!define NODE_RFSD	24	# Retrieving file from seq dev (aux=dev
-
-# Record format:
-#
-# Field 	Length		Description
-# -----------------------------------------
-# status	1		Current Status of Node
-# errors	1		Number of Critical Errors
-# action	1		Action User is doing on Node
-# useron	2		Number of User on Node
-# connection	2		Current Connection (DCE) rate of Node
-# misc		2		Miscellaneous bits for node
-# aux		2		Auxillary word for node
-# extaux	4		Extended aux dword for node
-
-!define NODE_STATUS_OFFSET	0	# Offset to node status
-!define NODE_ERRORS_OFFSET	1	# Offset to node errors
-!define NODE_ACTION_OFFSET	2	# Offset to node action
-!define NODE_USERON_OFFSET	3	# Offest to node useron
-!define NODE_CONNECTION_OFFSET	5	# Offset to node connection
-!define NODE_MISC_OFFSET	7	# Offset to node misc
-!define NODE_AUX_OFFSET 	9	# Offset to node aux
-!define NODE_EXTAUX_OFFSET	11	# Offset to node extaux
-!define NODE_RECORD_LEN 	15	# Length of node record
-
-# End of NODEDEFS.INC
diff --git a/exec/nodelist-html.js b/exec/nodelist-html.js
deleted file mode 100644
index a061d6c808..0000000000
--- a/exec/nodelist-html.js
+++ /dev/null
@@ -1,154 +0,0 @@
-// nodelist-html.js
-
-// Synchronet Service for sending a periodic HTML node list
-
-var refresh_rate=10	/* seconds */
-var start=new Date();
-
-load("nodedefs.js");
-
-var include_age_gender=true;
-var include_location=false;
-
-// Parse arguments
-for(i=0;i<argc;i++)
-	switch(argv[i].toLowerCase()) {
-		case "-r":
-			refresh_rate=Number(argv[++i]);
-			break;
-		case "-n":
-			include_age_gender=false;
-			break;
-		case "-l":
-			include_location=true;
-			break;
-	}
-
-// Write a string to the client socket
-function write(str)
-{
-	client.socket.send(str);
-}
-
-function writeln(str)
-{
-	write(str + "\r\n");
-}
-
-// Get HTTP Request
-while(client.socket.data_waiting) {
-	request = client.socket.recvline(128 /*maxlen*/, 3 /*timeout*/);
-
-	if(request==null) 
-		break;
-
-//	log(format("client request: '%s'",request));
-}
-
-// HTML Header
-writeln("<html>");
-writeln("<head>");
-writeln(format("<title>%s BBS - Node List</title>",system.name));
-writeln(format("<meta http-equiv=refresh content=%d>",refresh_rate));
-writeln("</head>");
-
-writeln("<body bgcolor=teal text=white link=yellow vlink=lime alink=white>");
-writeln("<font face=Arial,Helvetica,sans-serif>");
-
-// Login Button - Modified by RuneMaster of RuneKeep BBS
-writeln("<table border=0 width=100%>");
-writeln("<tr>");
-writeln("<td align=left>");
-writeln("<font color='lime'>");
-writeln(format("<h1><i>%s BBS - Node List</i></h1>",system.name));
-writeln("</font>");
-writeln("</td>");
-writeln("<td align=right>");
-writeln("<form>");
-writeln("<input type=button value='Login' onClick='location=\"telnet://"
-        + system.inetaddr + "\";'>");
-writeln("</form>");
-writeln("</td>");
-writeln("</tr>");
-writeln("</table>");
-
-// Table
-writeln("<table border=0 width=100%>");
-
-// Header
-writeln("<thead>");
-writeln("<tr bgcolor=white>");
-font_color = "<font color=black>";
-
-write(format("<th align=center width=7%>%sNode",font_color));
-write(format("<th align=center width=20%>%sUser",font_color));
-write(format("<th align=left>%sAction/Status",font_color));
-if(include_location) 
-	write(format("<th align=left>%sLocation",font_color));
-if(include_age_gender) {
-	write(format("<th align=center width=7%>%sAge",font_color));
-	write(format("<th align=center width=10%>%sGender\r\n",font_color));
-}
-write(format("<th align=center width=10%>%sTime\r\n",font_color));
-writeln("</thead>");
-
-writeln("<tbody>");
-var user = new User(1);
-for(n=0;n<system.node_list.length;n++) {
-	write("<tr>");
-	write(format("<td align=right><font size=-1>%d",n+1));
-	if(system.node_list[n].status==NODE_INUSE) {
-		user.number=system.node_list[n].useron;
-		if(system.node_list[n].action==NODE_XTRN && system.node_list[n].aux)
-			action=format("running %s",user.curxtrn);
-		else
-			action=format(NodeAction[system.node_list[n].action]
-				,system.node_list[n].aux);
-		write(format(
-			"<td align=center><a href=mailto:%s>%s</a>"
-			,user.email
-			,user.alias
-			));
-		write(format(
-			"<td><font color=yellow>%s"
-			,action
-			));
-		if(include_location)
-			write(format(
-				"<td align=left>%s"
-				,user.location
-				));
-		if(include_age_gender) 
-			write(format(
-				"<td align=center>%d<td align=center>%s"
-				,user.age
-				,user.gender
-				));
-		t=time()-user.logontime;
-        if(t&0x80000000) t=0;
-		write(format(
-			"<td align=center>%u:%02u:%02u"
-			,Math.floor(t/(60*60))
-			,Math.floor(t/60)%60
-			,t%60
-			));
-	} else {
-		action=format(NodeStatus[system.node_list[n].status],system.node_list[n].aux);
-		write(format("<td><td>%s",action));
-	}
-	write("\r\n");
-}
-writeln("</tbody>");
-writeln("</table>");
-
-writeln("<p><font color=silver><font size=-2>");
-writeln(format("Auto-refresh in %d seconds",refresh_rate));
-write(format("<br>Dynamically generated in %lu milliseconds "
-	  ,new Date().valueOf()-start.valueOf()));
-write("by <a href=http://www.synchro.net>" + system.version_notice + "</a>");
-writeln("<br>" + system.timestr());
-
-writeln("</body>");
-writeln("</html>");
-sleep(1000);
-/* End of nodelist-html.js */
diff --git a/exec/nodelist.js b/exec/nodelist.js
deleted file mode 100644
index a7bdb9d388..0000000000
--- a/exec/nodelist.js
+++ /dev/null
@@ -1,16 +0,0 @@
-// nodelist.js
-
-load("nodedefs.js");
-
-var user = new User(1);
-for(n=0;n<system.node_list.length;n++) {
-	printf("Node %2d ",n+1);
-	if(system.node_list[n].status==NODE_INUSE) {
-		user.number=system.node_list[n].useron;
-		printf("%s (%u %s) ", user.alias, user.age, user.gender);
-		printf(NodeAction[system.node_list[n].action],system.node_list[n].aux);
-	} else
-		printf(NodeStatus[system.node_list[n].status],system.node_list[n].aux);
-
-	printf("\r\n");
-}
\ No newline at end of file
diff --git a/exec/noyesbar.src b/exec/noyesbar.src
deleted file mode 100644
index d95398e439..0000000000
--- a/exec/noyesbar.src
+++ /dev/null
@@ -1,58 +0,0 @@
-# noyesbar.src
-
-# Sep 28 1995 - Digital Man
-
-# $id$
-
-# @format.tab-size 8, @format.use-tabs true
-
-!include sbbsdefs.inc # _question
-
-str tmp
-
-copy tmp str
-setstr "N"
-compare_strn 2 _question "\r\n"
-if_true
-	crlf
-	shift_str _question 2
-	end_if
-printf "nbh[c�b] y%s? " _question
-:top
-compare_str "N"
-if_equal
-	print "h4w[No]nbh Yes "
-else
-	print "nbh No 4w[Yes]"
-	end_if
-getkey
-print "\b\b\b\b\b\b\b\b\b\1n\1h\1>"
-compare_key ^M
-if_true
-	ungetstr
-	copy str tmp
-	return
-	end_if
-
-compare_keys "YN"
-if_true
-	ungetkey
-	copy str tmp
-	return
-	end_if
-
-compare_key ^@
-if_true
-	copy str tmp
-	return
-	end_if
-
-# Toggle
-compare_str "Y"
-if_true
-	setstr "N"
-else
-	setstr "Y"
-	end_if
-goto top
-
diff --git a/exec/pcboard.src b/exec/pcboard.src
deleted file mode 100644
index 74be99d656..0000000000
--- a/exec/pcboard.src
+++ /dev/null
@@ -1,373 +0,0 @@
-# pcboard.src
-
-# PCBoard v15.1 menu/command emulation
-
-# $Id$
-
-# @format.tab-size 8, @format.use-tabs true
-
-!include sbbsdefs.inc
-
-menu pcboard/welcome
-
-cmd_home
-compare_ars expert
-if_false
-	cls
-	menu pcboard/brdm
-	end_if
-node_action node_main
-async
-print "n\r\nyh(r@MINLEFT@y min. left) @GRP@ (@GN@) @SUB@ (@SN@) "
-print "Command? n"
-getstr 60
-
-compare_str ""
-if_true
-	end_cmd
-	end_if
-
-cmdstr ?
-	compare_ars expert
-	if_true
-		cls
-		menu pcboard/brdm
-		end_if
-	end_cmd
-
-cmdstr HELP
-	compare_ars expert
-	if_true
-		cls
-		menu pcboard/brdm
-		end_if
-	end_cmd
-
-cmdstr F
-	file_select_area
-	if_true
-		setstr "*.*"
-		file_list
-		end_if
-	end_cmd
-
-cmdstr EXT
-	file_select_area
-	if_true
-		setstr "*.*"
-		file_list_extended
-		end_if
-	end_cmd
-
-cmdstr VIEW
-	getfilespec
-	if_true
-		file_view
-		end_if
-	end_cmd
-
-cmdstr BATCH
-	file_batch_section
-	end_cmd
-
-cmdstr REMOVE
-	getfilespec
-	if_true
-		file_remove
-		end_if
-	end_cmd
-
-cmdstr D
-	file_download_batch
-	if_true
-		end_cmd
-                end_if
-	getfilespec
-	if_true
-		file_download
-		end_if
-	end_cmd
-
-cmdstr U
-	chkfile "%zmenu/upload.*"
-	if_true
-		menu upload
-                end_if
-	file_upload
-	end_cmd
-
-cmdstr L
-	file_find_name
-	end_cmd
-
-cmdstr N
-	print "\r\nbhUse c@LASTNEW@b for new file scan date"
-	yes_no ""
-	if_false
-		file_ptrs_cfg
-		if_false
-			end_cmd
-			end_if
-		end_if
-	file_new_scan
-        end_cmd
-
-cmdstr Z
-	file_find_text
-	end_cmd
-
-cmdstr T
-	file_temp_section
-	end_cmd
-
-cmdstr C
-	setstr "1"
-	mail_send_feedback
-	crlf
-	end_cmd
-
-cmdstr Y
-	msg_your_scan
-	end_cmd
-
-cmdstr TS
-	msg_find_Text
-	end_cmd
-
-cmdstr QWK
-	msg_qwk
-	end_cmd
-
-cmdstr AUTO
-	auto_message
-	end_cmd
-
-cmdstr SELECT
-	msg_new_scan_cfg
-	end_cmd
-
-cmdstr A
-	msg_ptrs_cfg
-	end_cmd
-
-cmdstr R
-	msg_read
-	end_cmd
-
-cmdstr S
-	info_system
-	end_cmd
-
-cmdstr E
-	msg_post
-	end_cmd
-
-cmdstr RN
-	msg_new_scan
-	end_Cmd
-
-cmdstr RC
-	msg_cont_scan
-	end_cmd
-
-cmdstr JOIN
-	msg_select_area
-	end_cmd
-
-compare_word "JOIN "
-if_true
-	shift_str 5
-	msg_set_area
-	end_cmd
-	end_if
-
-cmdstr J
-	msg_select_area
-	end_cmd
-
-cmdstr M
-	call e-mail
-	end_cmd
-
-cmdstr X
-	toggle_user_misc UM_EXPERT
-	print "\r\nExpert mode is now: "
-	compare_ars EXPERT
-	if_true
-		print "ON"
-	else
-		print "OFF"
-		end_if
-	crlf
-	end_cmd
-
-cmdstr B
-	text_file_section
-	end_cmd
-
-cmdstr V
-	info_user
-	end_cmd
-
-cmdstr G
-	file_download_batch
-	if_true
-		end_cmd
-                end_if
-	logoff
-	end_cmd
-
-cmdstr W
-	user_defaults
-	end_cmd
-
-cmdstr O
-	page_sysop
-	end_cmd
-
-cmdstr P
-	private_message
-	end_cmd
-
-cmdstr I
-	menu ../ANSWER
-	menu pcboard/welcome
-	end_cmd
-
-cmdstr WHO
-	nodelist_users
-	end_cmd
-
-cmdstr CHAT
-	exec_bin chat_sec
-	end_cmd
-
-cmdstr NEWS
-	menu logon
-	end_cmd
-
-cmdstr DOOR
-	xtrn_section
-        end_cmd
-
-cmdstr OPEN
-	xtrn_section
-	end_cmd
-
-compare_word "OPEN "
-if_true
-	shift_str 5
-	xtrn_exec
-	end_cmd
-        end_if
-
-compare_word "USER "
-if_true
-	shift_str 5
-	crlf
-	finduser
-	if_true
-		print "yhVerified: w"
-		printstr
-		crlf
-                end_if
-	end_cmd
-	end_If
-
-cmdstr USER
-	print "\r\nyhUsername search string (Enter=List Conferences Users): w"
-        getname 25
-	compare_str ""
-	if_true
-		userlist_sub
-	else
-		crlf
-		finduser
-		if_true
-			print "yhVerified: w"
-			printstr
-			crlf
-			end_if
-		end_cmd
-		end_If
-	end_cmd
-
-print "\r\nrhInvalid Entry!  Please try again, @FIRST@ ...\r\n"
-end_cmd
-
-:e-mail
-cmd_home
-compare_ars expert
-if_false
-	menu e-mail
-	end_if
-async
-print "\r\nyhE-mail: n"
-getcmd ?SRFNUKQ\r
-logkey
-
-cmdkey ?
-	compare_ars expert
-	if_true
-		menu e-mail
-		end_if
-	end_cmd
-
-cmdkey S
-	print "_\r\nbhE-mail (User name or number): w"
-	getname 25
-	compare_str ""
-	if_true
-		end_cmd
-		end_if
-	compare_str "SYSOP"
-	if_true
-		setstr "1"
-		end_if
-	mail_send
-	end_cmd
-
-cmdkey U
-	print "_\r\nbhE-mail (User name or number): w"
-	getname 25
-	compare_str ""
-	if_true
-		end_cmd
-		end_if
-	compare_str "SYSOP"
-	if_true
-		setstr "1"
-		end_if
-	mail_send_file
-        end_cmd
-
-cmdkey R
-	mail_read
-	end_cmd
-
-cmdkey F
-	setstr "1"
-	mail_send_feedback
-	end_cmd
-
-cmdkey N
-	no_yes "\r\nAttach a file"
-	if_true
-		mail_send_netmail
-	else
-		mail_send_netfile
-		end_if
-	end_cmd
-
-cmdkey K
-	mail_read_sent
-	end_cmd
-
-cmdkey Q
-	cmd_pop
-	return
-	end_cmd
-
-cmd_pop
-return
-
diff --git a/exec/pnet.bat b/exec/pnet.bat
deleted file mode 100755
index 5dfe3eebfa..0000000000
--- a/exec/pnet.bat
+++ /dev/null
@@ -1,3 +0,0 @@
-@echo off
-cd \postlink
-postlink caller.cfg
diff --git a/exec/qnet-ftp.src b/exec/qnet-ftp.src
deleted file mode 100644
index 5812b2198b..0000000000
--- a/exec/qnet-ftp.src
+++ /dev/null
@@ -1,177 +0,0 @@
-# qnet-ftp.src
-
-# $Id$
-
-# @format.tab-size 8, @format.use-tabs true
-
-###############################################################################
-#	  Baja module for performing FTP-based QWKnet call-outs		      #
-#	        Requires Synchronet v3.00d and Baja v2.30		      #
-#			Developed 2001 by Rob Swindell 			      #
-###############################################################################
-
-# Usage: *QNET-FTP HUBID ADDRESSS PASSWORD
-# Example: *QNET-FTP VERT vert.synchro.net YOURPASS
-
-# You may use the qnet-ftp.bin module INSTEAD of your normal ftp/script
-# QWKnet call-out routine (exec/vert.bat). You can do this by changing
-#
-# SCFG->Networks->QWK->Hubs->VERT->Call-out Command Line to:
-#
-# *QNET-FTP VERT vert.synchro.net YOURPASS
-#
-# The asterisk is important! YOURPASS is your QWKnet password here on Vertrauen. 
-#
-# No modification or recompilation of this module should be necessary.
-
-!include sbbsdefs.inc
-!include file_io.inc
-
-# Must be FIRST function call (or module will immediately terminate)
-set _online ON_LOCAL
-
-# Variables
-int i argc argv sock port
-str tmp rep qwk hubid addr user password 
-str cmdline
-
-set _ftp_mode FTP_PASV
-
-# Process command line arguments
-set hubid ""
-set addr ""
-set password ""
-
-# Display command line
-copy cmdline str
-lprintf "QNET-FTP: %s" cmdline
-set argc 0
-:process_args
-compare_str ""
-if_true
-	goto end_args
-	end_if
-sprintf tmp "%.1s" str
-shift_str 1
-compare tmp " "
-if_true
-	add argc 1
-	goto process_args
-	end_if
-switch argc
-	case 0
-		strcat hubid tmp
-		end_case
-	case 1
-		strcat addr tmp
-		end_case
-	case 2
-		strcat password tmp
-		end_case
-	default
-		goto usage
-	end_switch
-goto process_args
-
-:usage
-lprintf "QNET-FTP: !INCORRECT USAGE: %s" cmdline
-return
-
-:end_args
-compare hubid ""
-if_true
-	goto usage
-	end_if
-compare addr ""
-if_true
-	goto usage
-	end_if
-compare password ""
-if_true
-	goto usage
-	end_if
-
-sprintf rep "%%j%s.rep" hubid
-sprintf qwk "%%j%s.qwk" hubid
-chkfile qwk
-if_true
-	lprintf "QNET-FTP: %s already exists!" qwk
-	set i 0
-	:check_qwk
-	sprintf qwk "%%j%s.QW%ld" hubid i
-	chkfile qwk
-	if_true
-		lprintf "QNET-FTP: %s already exists!" qwk
-		add i 1
-		compare i 10
-		if_equal
-			goto exit
-			end_if
-		goto check_qwk
-		end_if
-	end_if
-
-socket_open sock
-if_false
-	lprintf "QNET-FTP: !socket_open failure socket_error=%d" _socket_error
-	goto exit
-	end_if
-
-set port 21	# default FTP port
-lprintf "QNET-FTP: Connecting to %s ... " addr
-socket_connect sock addr port 
-crlf
-if_false
-	lprintf "QNET-FTP: !socket_connect failed socket_error=%d" _socket_error
-	goto exit
-	end_if
-lprintf "QNET-FTP: Connected to %s" addr
-
-set user "%q"
-lprintf "QNET-FTP: Logging in as '%s' (PW: '%s')" user password
-ftp_login sock user password
-if_false
-	lprintf "QNET-FTP: !ftp_login failed socket_error=%d" _socket_error
-	goto exit
-	end_if
-
-lprintf "QNET-FTP: Logged in successfully"
-
-chkfile rep
-if_true
-	###################
-	# Send REP packet #
-	###################
-	lprintf "QNET-FTP: Sending REP packet: %s" rep
-
-	sprintf str "%s.rep" hubid
-
-	ftp_put sock rep str
-	if_false
-		lprintf "QNET-FTP: !ftp_put failed socket_error=%d\r\n" _socket_error
-	else
-		lprintf "QNET-FTP: REP packet sent successfully"
-		end_if
-
-	remove_file rep
-	end_if
-
-#######################
-# Download QWK packet #
-#######################
-sprintf str "%s.qwk" hubid
-lprintf "QNET-FTP: Downloading QWK Packet: %s" str
-ftp_get sock str qwk
-if_true
-	lprintf "QNET-FTP: Downloaded %s successfully" str
-else
-	lprintf "QNET-FTP: %s NOT downloaded (no new messages?)" str
-	end_if
-
-#################
-# Exit routine	#
-#################
-:exit
-lprintf "QNET-FTP: Done."
-
-# End of QNET-FTP.SRC
diff --git a/exec/qnet.bat b/exec/qnet.bat
deleted file mode 100755
index b0294e15b2..0000000000
--- a/exec/qnet.bat
+++ /dev/null
@@ -1,3 +0,0 @@
-@echo off
-cd \telix
-telix sqnet q
diff --git a/exec/qnet.slt b/exec/qnet.slt
deleted file mode 100644
index e05859e863..0000000000
--- a/exec/qnet.slt
+++ /dev/null
@@ -1,29 +0,0 @@
-// Main QWK Networking SALT script for calling Synchronet QWK Network Hub(s)
-
-main()
-{
-
-// These two paths need to point to your SBBS\DATA directory
-
-copystr("C:\SBBS\DATA",_down_dir,0,40);
-copystr("C:\SBBS\DATA",_up_dir,0,40);
-
-// Add additional call lines for other systems
-// the first parameter must be sbbsqnet, the second is the HUB's system ID,
-// the third is phone number list, the fourth is your logon name (should be
-// same as your system's QWKID), the fifth is your password, and the sixth is
-// the maximum retry count
-
-// The phone number list can either contain a list of dialing directory
-// entries, or a manual phone number preceeded by an 'M'.
-// Example; both of the following are valid phone number lists:
-// "1 2 3" and "m1-714-529-9525"
-// You can only have one number per hub using the manual dial method.
-
-call("sbbsqnet","VERT","m1-714-529-9721","QWKID","password","3");
-
-cputs_tr("~~ATM0H1^M");
-
-exittelix(0,0);
-}
-
diff --git a/exec/qnet.src b/exec/qnet.src
deleted file mode 100644
index 784219740f..0000000000
--- a/exec/qnet.src
+++ /dev/null
@@ -1,481 +0,0 @@
-# qnet.src
-
-# $Id$
-
-# @format.tab-size 8, @format.use-tabs true
-
-###############################################################################
-#		  Baja module for performing QWKnet call-outs		      #
-#		   Requires Synchronet v2.3 and Baja v2.10		      #
-#			Copyright 1996 Digital Dynamics 		      #
-###############################################################################
-
-# Usage: *QNET HUBID PHONE PASSWORD ATTEMPTS
-# Example: *QNET VERT 1-714-529-9721 YOURPASS 100
-
-# You may use the QNET.BIN module INSTEAD of your normal terminal/script
-# QWKnet call-out routine. You can do this by changing
-#
-# SCFG->Networks->QWK->Hubs->VERT->Call-out Command Line to:
-#
-# *QNET VERT 1-714-529-9721 YOURPASS 100
-#
-# The asterisk is important! 100 is the number of dial attempts, YOURPASS is
-# your QWKnet password here on Vertrauen. Remove 1-714 if you're in the 714
-# area code.
-#
-# No modification or recompilation of this module should be necessary.
-
-!include sbbsdefs.inc
-!include file_io.inc
-
-# Constants (change for your preferences)
-
-!define INIT_ATTEMPTS 5
-!define MAX_INACTIVITY	  30	# 30 seconds of host inactivity
-
-# Must be FIRST function call (or module will immediately terminate)
-set _online ON_LOCAL
-# print_local "QNET.SRC\r\n"
-# Force DCD to be assumed HIGH and user online and NO screen pausing
-or _sys_status SS_DCDHIGH|SS_USERON|SS_PAUSEOFF
-# Turn off the ^C status flag
-not _sys_status SS_ABORT
-# Set console for Local Input/Output only
-set _console CON_L_INPUT|CON_L_ECHO
-
-# Make sure there is a COM port configured
-compare _DTE_RATE 0
-if_equal
-	print "BAJAQNET: No COM port configured.\7\r\n\r\n"
-	pause
-	return
-	end_if
-
-# Variables
-int i start connect end logfile argc argv attempt result
-str tmp rep qwk log hubid phone password attempts
-
-# Mark beginning time
-time start
-set connect 0
-
-# Process command line arguments
-set hubid ""
-set phone ""
-set password ""
-set attempts ""
-
-set _lncntr 0
-cls
-strupr str
-# Display command line
-print "BAJAQNET: %s\r\n"
-set argc 0
-:process_args
-compare_str ""
-if_true
-	goto end_args
-	end_if
-sprintf tmp "%.1s" str
-shift_str 1
-compare tmp " "
-if_true
-	add argc 1
-	goto process_args
-	end_if
-switch argc
-	case 0
-		strcat hubid tmp
-		end_case
-	case 1
-		strcat phone tmp
-		end_case
-	case 2
-		strcat password tmp
-		end_case
-	case 3
-		strcat attempts tmp
-		end_case
-	default
-		goto usage
-	end_switch
-goto process_args
-
-:usage
-crlf
-print "Usage: QNET hubid phone password attempts\r\n\r\n"
-print "Example: QNET VERT 1-714-529-9721 YOURPASS 100\r\n\r\n\7"
-pause
-return
-
-:end_args
-compare hubid ""
-if_true
-	goto usage
-	end_if
-compare phone ""
-if_true
-	goto usage
-	end_if
-compare password ""
-if_true
-	goto usage
-	end_if
-compare attempts ""
-if_true
-	goto usage
-	end_if
-
-sprintf log "%%j/%s.log" hubid
-sprintf rep "%%j/%s.rep" hubid
-sprintf qwk "%%j/%s.qwk" hubid
-chkfile qwk
-if_true
-	printf "\7BAJAQNET: %s already exists!\r\n" qwk
-	set i 0
-	:check_qwk
-	sprintf qwk "%%j%s.QW%ld" hubid i
-	chkfile qwk
-	if_true
-		printf "\7BAJAQNET: %s already exists!\r\n" qwk
-		add i 1
-		compare i 10
-		if_equal
-			goto exit
-			end_if
-		goto check_qwk
-		end_if
-	end_if
-
-fopen logfile O_WRONLY|O_APPEND|O_CREAT log
-if_false
-	printf "\7BAJAQNET: Error (%d) opening %s\r\n" _errno log
-	goto exit
-	end_if
-
-time_str str start
-fprintf logfile "BAJAQNET: Launched: %s\r\n" str
-
-# Required for receiving responses from modem
-set _online ON_REMOTE
-or _console CON_R_INPUT
-
-set attempt 0
-:init
-call flush_input
-add attempt 1
-compare attempt INIT_ATTEMPTS
-if_greater
-	setstr "BAJAQNET: Modem initialization failed!\r\n"
-	print str
-	fwrite logfile str
-	goto exit
-        end_if
-print "BAJAQNET: Initializing modem\r\n"
-
-print_remote "ATX4E0H0M0V0\r"
-getstr str 80 K_NOECHO
-if_false
-	print "BAJAQNET: No response\r\n"
-	goto exit
-	end_if
-compare_str "0"
-if_false
-	print "BAJAQNET: Modem returned %s\r\n"
-	goto init
-	end_if
-
-set attempt 0
-:dial
-add attempt 1
-compare attempt attempts
-if_greater
-	fprintf logfile "BAJAQNET: No connect after %s attempts\r\n" attempts
-	goto exit
-	end_if
-printf "BAJAQNET: Dialing %s at %s (Attempt: %ld of %s)\r\n" hubid phone attempt attempts
-mswait 1000
-copy str phone
-print_remote "ATDT%s\r"
-getstr str 80 K_NOECHO
-if_false
-	goto exit
-	end_if
-print "BAJAQNET: "
-copy result str
-switch result
-	case 0
-		print "Modem responded with '%s'\r\n"
-		fprintf logfile "BAJAQNET: Modem repsoned with '%s'\r\n" str
-		goto dial
-	case 2
-		print "RING\r\n"
-		goto dial
-	case 3
-		print "NO CARRIER\r\n"
-		goto dial
-	case 4
-		print "ERROR\r\n"
-		goto dial
-	case 6
-		print "NO DIALTONE\r\n"
-		goto dial
-	case 7
-		print "BUSY\r\n"
-		goto dial
-	case 8
-		print "NO ANSWER\r\n"
-		goto dial
-	default
-		print "Connection established (Result Code: %s)\r\n"
-		time connect
-		ftime_str str "%X" connect
-		fprintf logfile "BAJAQNET: Connected: %s\r\n" str
-	end_switch
-
-# Normal use of DCD
-not _sys_status SS_DCDHIGH
-# Wait a second
-mswait 1000
-# Send ESC ESC for front-end mailers
-print_remote "\x1b\x1b"
-# Wait for NN: prompt
-print "BAJAQNET: Waiting for NN: prompt "
-setstr "NN:"
-call waitfor
-print " \r\n"
-# Notify Hub of Script Type and Version
-print_remote "Baja Qnet Version 1.10"
-mswait 2000
-# Send our QWK ID
-print_remote "\24%q\r"
-# Wait for PW: prompt
-print "BAJAQNET: Waiting for PW: prompt "
-setstr "PW:"
-call waitfor
-print " \r\n"
-# Send our PASSWORD
-copy str password
-print_remote "%s\r"
-# Wait for QWK: prompt
-print "BAJAQNET: Waiting for QWK: prompt "
-setstr "QWK:"
-call waitfor
-print " \r\n"
-
-chkfile rep
-if_true
-	###################
-	# Send REP packet #
-	###################
-	print "BAJAQNET: Sending REP packet\r\n"
-	print_remote "UZN"
-	mswait 1000
-	call flush_input
-	send_file_via Z rep
-	get_file_length i rep
-	sprintf str "BAJAQNET: Upload of REP packet (%lu bytes) " i
-	print str
-	fwrite logfile str
-	if_true
-		print "successful\r\n"
-		fprintf logfile "successful\r\n"
-		remove_file rep
-	else
-		print "\7UNSUCCESSFUL!\r\n"
-		fprintf logfile "UNSUCCESSFUL!\r\n"
-		end_if
-	#mswait 1000
-	#call flush_input
-	# Wait for QWK: prompt
-	print "BAJAQNET: Waiting for QWK: prompt "
-	setstr "QWK:"
-	call waitfor
-	print " \r\n"
-	end_if
-
-#######################
-# Download QWK packet #
-#######################
-print "BAJAQNET: Scanning for new messages "
-int sm nm ss
-
-print_remote "DL"
-setstr "PROTOCOL OR "
-call waitfor
-print " \r\n"
-if_false
-	setstr "BAJAQNET: No new messages.\r\n"
-	print str
-	fwrite logfile str
-	print_remote "Q"
-	goto exit
-	end_if
-print "BAJAQNET: Receiving QWK packet\r\n"
-print_remote "ZN"
-mswait 1000
-call flush_input
-receive_file_via Z qwk
-sprintf str "BAJAQNET: Download of QWK packet "
-print_local "%s"
-fwrite logfile str
-chkfile qwk
-if_true
-	get_file_length i qwk
-	sprintf str "(%lu bytes) successful\r\n" i
-else
-	setstr "UNSUCCESSFUL!\r\n"
-	end_if
-print_local "%s"
-fwrite logfile str
-mswait 2000
-copy _sys_misc sm
-copy _node_misc nm
-print_remote "Q"
-goto exit
-
-###############################################################################
-# Wait for a specific text string (contained in current command string)       #
-# Automatically hits ENTER for HIT A KEY prompts			      #
-# Times-out after 30 seconds of host inactivity 			      #
-# Sets logic state to TRUE if the string is located and returns 	      #
-# Sets logic state to FALSE if QWK: is found before the string and returns    #
-###############################################################################
-:waitfor
-str waitforstr waitforbuf
-int cursor t1 t2
-copy waitforstr str
-:waitfor_reset
-set waitforbuf ""
-:waitfor_nextchar
-time t1
-:waitfor_checkinput
-inkey
-if_false
-	time t2
-	sub t2 t1
-	compare t2 MAX_INACTIVITY
-	if_greater
-		goto timeout
-		end_if
-	goto waitfor_checkinput
-	end_if
-
-# Control key?
-compare_keys "^M^J^L^G^H"
-if_true
-	:spin_cursor
-	and cursor 3
-	switch cursor
-		case 0
-			print_local "-"
-			end_case
-		case 1
-			print_local "\\"
-			end_case
-		case 2
-			print_local "|"
-			end_case
-		case 3
-			print_local "/"
-			end_case
-		end_switch
-	print_local "\b"
-	add cursor 1
-	# Clear input buffer and continue
-	goto waitfor_reset
-	end_if
-
-ungetkey
-:waitfor_additional
-inkey
-if_true
-	compare_keys "^M^J^L^G^H"
-	if_true
-		# Clear ungetkey buffer
-		setstr "\r"
-		ungetstr
-		getstr str 0 K_NOECHO
-		goto spin_cursor
-		end_if
-	ungetkey
-	goto waitfor_additional
-	end_if
-setstr "\r"
-ungetstr
-getstr str 128 K_NOECHO
-if_false
-        fprintf logfile "getstr returned FALSE\r\n"
-	setlogic FALSE
-	return
-	end_if
-strcat waitforbuf str
-# Handle Pause Prompt
-compare_substr waitforbuf "HIT A KEY"
-if_true
-        fprintf logfile "received hit a key prompt\r\n"
-	print_remote "\r"
-	goto waitfor_reset
-	end_if
-# Handle ANSI Cursor Position Request
-compare_substr waitforbuf "[6n"
-if_true
-	print_remote "\r"
-	goto waitfor_reset
-	end_if
-# Return TRUE if string found
-compare_substr waitforbuf waitforstr
-if_true
-	setlogic TRUE
-	return
-	end_if
-# Return FALSE if QWK: prompt found instead
-compare waitforbuf "QWK: "
-if_true
-	setlogic FALSE
-        return
-        end_if
-
-goto waitfor_nextchar
-
-
-#####################################################################
-# Flush (remove, do not process) any characters in the input buffer #
-#####################################################################
-:flush_input
-inkey
-if_true # Flush input buffer
-        goto flush_input
-        end_if
-return
-
-###################################################
-# Timeout routine (falls-through to Exit routine) #
-###################################################
-:timeout
-print_local "\r\nBAJAQNET: \7Time-out!\7\r\n"
-fprintf logfile "BAJAQNET: Time-out\r\n"
-
-#################
-# Exit routine	#
-#################
-:exit
-print_local "BAJAQNET: Exiting...\r\n"
-# Mark ending time
-time end
-time_str str end
-fprintf logfile "BAJAQNET: Terminated: %s\r\n" str
-compare connect 0
-if_not_equal
-	copy i end
-	sub i connect
-	second_str tmp i
-	fprintf logfile "BAJAQNET: Time online: %s\r\n" tmp
-	end_if
-hangup
-not _sys_status SS_DCDHIGH
-mswait 2000
-return
-
-# End of QNET.SRC
diff --git a/exec/ra_emu.src b/exec/ra_emu.src
deleted file mode 100644
index 46b3951a7d..0000000000
--- a/exec/ra_emu.src
+++ /dev/null
@@ -1,11 +0,0 @@
-# ra_emu.src
-
-# Emulate RemoteAccess, Renegade, etc. Mail/Message Prompts
-
-# $Id$
-
-# @format.tab-size 8, @format.use-tabs true
-
-!include sbbsdefs.inc
-
-or _sys_misc SM_RA_EMU
diff --git a/exec/renegade.src b/exec/renegade.src
deleted file mode 100644
index ff51c9a9ef..0000000000
--- a/exec/renegade.src
+++ /dev/null
@@ -1,872 +0,0 @@
-# renegade.src
-
-# $Id$
-
-# @format.tab-size 8, @format.use-tabs true
-
-!include sbbsdefs.inc
-
-################################# Begins Here #################################
-or _sys_misc SM_RA_EMU  # Swap Msg ReRead/Reply commands
-:main
-# Set return point for main menu commands (via end_cmd)
-cmd_home
-
-# Display text/menu/main.* if not in expert mode
-compare_ars expert
-if_false
-	cls
-	menu renegade/main
-	end_if
-
-# Update node status
-node_action node_main
-async
-
-# Display main Prompt
-compare_ars exempt T
-if_true
-	print "n\r\nbhTime Used: [c@TUSED@b]  "
-else
-	print "n\r\nbhTime Left: [c@TLEFT@b]  "
-	end_if
-
-print "bh(c?b=cHelpb)\r\nMain Menu m: n"
-
-# Get key (with / extended commands allowed)
-compare_user_misc UM_COLDKEYS
-if_false
-	getkeye
-else
-	getstrupr 60
-        endif
-
-# Do nothing for control keys and space
-cmdkey ^@
-	end_cmd
-cmdkey ^M
-	end_cmd
-cmdkey ^S
-	end_cmd
- cmdkey  "
-	end_cmd
-
-# Write command to log file
-logkey_comma
-
-# Show the key hit
-compare_user_misc UM_COLDKEYS
-if_false
-	printkey
-        endif
-
-cmdkey F
-	cmd_pop
-	goto file_transfers
-        end_cmd
-
-compare_user_misc UM_COLDKEYS
-if_false
-	crlf
-	end_if
-pause_reset
-
-# Menu
-cmdkey ?
-	compare_ars expert
-	if_true
-		cls
-		menu renegade/main
-		end_if
-	end_cmd
-
-# Sysop Menu
-compare_ars SYSOP or exempt Q or I or N
-if_true
-	cmdkey *
-		call sysop
-		end_cmd
-	end_if
-
-# Commands
-
-cmdkey A
-	auto_message
-	end_cmd
-
-cmdkey C
-	exec_bin chat_sec
-	end_cmd
-
-cmdkey E
-	cmd_pop
-	goto E-mail
-	end_cmd
-
-cmdkey G
-        file_download_batch
-        if_true
-                end_cmd
-                end_if
-        logoff
-        end_cmd
-
-cmdkey /G
-        file_download_batch
-        if_true
-                end_cmd
-                end_if
-        logoff_fast
-        end_cmd
-
-cmdkey I
-	call main_info
-	end_cmd
-
-cmdkey W
-	nodelist_users
-	end_cmd
-
-cmdkey L
-	userlist_logons
-	end_cmd
-
-cmdkey /L
-	nodelist_all
-	end_cmd
-
-cmdkey $
-	minute_bank
-	end_cmd
-
-cmdkey M
-	cmd_pop
-	goto message
-	end_cmd
-
-cmdkey N
-	setstr "1"
-	mail_send_feedback
-	end_cmd
-
-cmdkey O
-        xtrn_section
-        end_cmd
-
-cmdkey P
-        user_defaults
-        end_cmd
-
-cmdkey !
-	msg_qwk
-	end_cmd
-
-cmdkey S
-	text_file_section
-	end_cmd
-
-cmdkey U
-	userlist_all
-	end_cmd
-
-cmdkey X
-	toggle_user_misc UM_expert
-	end_cmd
-
-cmdkey Y
-	info_user
-	end_cmd
-
-# fall through
-print "\r\nchUnrecognized command."
-compare_ars expert
-if_true
-	print " Hit 'i?nch' for a menu."
-	end_if
-crlf
-end_cmd
-
-# shouldn't hit next line
-print "Problem in command shell."
-pause
-hangup
-
-############################### E-mail Section ################################
-
-:e-mail
-cmd_home
-compare_ars expert
-if_false
-	cls
-	menu renegade/email
-	end_if
-async
-compare_ars exempt T
-if_true
-	print "n\r\nbhTime Used: [c@TUSED@b]  "
-else
-	print "n\r\nbhTime Left: [c@TLEFT@b]  "
-	end_if
-
-print "bh(c?b=cHelpb)\r\nEmail Menu m: n"
-
-# Get key (with / extended commands allowed)
-compare_user_misc UM_COLDKEYS
-if_false
-	getkeye
-else
-	getstrupr 60
-        endif
-
-# Do nothing for control keys and space
-cmdkey ^@
-	end_cmd
-cmdkey ^M
-	end_cmd
-cmdkey ^S
-	end_cmd
- cmdkey  "
-        end_cmd
-
-logkey
-
-# Show the key hit
-compare_user_misc UM_COLDKEYS
-if_false
-	printkey
-        endif
-
-compare_user_misc UM_COLDKEYS
-if_false
-	crlf
-	end_if
-pause_reset
-
-cmdkey ?
-	compare_ars expert
-	if_true
-		cls
-		menu renegade/email
-		end_if
-	end_cmd
-
-cmdkey E
-	print "_\r\nbhE-mail (User name or number): w"
-	getname 25
-	compare_str ""
-	if_true
-		end_cmd
-		end_if
-	compare_str "SYSOP"
-	if_true
-		setstr "1"
-		end_if
-	mail_send
-	end_cmd
-
-cmdkey R
-	mail_read
-	end_cmd
-
-cmdkey V
-	mail_read_sent
-	end_cmd
-
-cmdkey Q
-	cmd_pop
-	goto main
-	end_cmd
-
-cmdkey G
-        file_download_batch
-        if_true
-                end_cmd
-                end_if
-        logoff
-        end_cmd
-
-cmdkey /G
-        file_download_batch
-        if_true
-                end_cmd
-                end_if
-        logoff_fast
-        end_cmd
-
-# fall through
-print "\r\nchUnrecognized command."
-compare_ars expert
-if_true
-	print " Hit 'i?nch' for a menu."
-	end_if
-crlf
-end_cmd
-
-
-########################### Main Config Section  ##############################
-
-:main_cfg
-
-compare_ars expert
-if_false
-	menu maincfg
-	end_if
-async
-print "\r\nyhConfig: n"
-getcmd ?QNPIS\r
-logkey
-
-cmdkey ?
-	compare_ars expert
-	if_true
-		menu maincfg
-		end_if
-	goto main_cfg
-	end_cmd
-
-cmdkey N
-	msg_new_scan_cfg
-	return
-	end_cmd
-
-cmdkey S
-	msg_your_scan_cfg
-	return
-	end_cmd
-
-cmdkey P
-	msg_ptrs_cfg
-	return
-	end_cmd
-
-cmdkey I
-	msg_ptrs_reinit
-	return
-	end_cmd
-
-return
-
-########################### File Transfer Section #############################
-
-:file_transfers
-
-cmd_home
-
-compare_ars expert
-if_false
-	cls
-	menu renegade/transfer
-	end_if
-
-# Update node status
-node_action node_xfer
-async
-
-# Display main Prompt
-print "n\r\nbh[@LIB@ @DIR@]\r\n"
-compare_ars exempt T
-if_true
-	print "bhTime Used: [c@TUSED@b]  "
-else
-	print "bhTime Left: [c@TLEFT@b]  "
-	end_if
-
-print "bh(c?b=cHelpb)\r\nFile Menu m: n"
-
-# Get key (with / extended commands allowed)
-compare_user_misc UM_COLDKEYS
-if_false
-	getkeye
-else
-	getstrupr 60
-        endif
-
-# Do nothing for control keys and space
-cmdkey ^@
-	end_cmd
-cmdkey ^M
-	end_cmd
-cmdkey ^S
-	end_cmd
- cmdkey  "
-        end_cmd
-
-# Write command to log file
-logkey_comma
-
-# Hitting number changes current sub-board
-cmdkey digit
-	compare_user_misc UM_COLDKEYS
-	if_false
-		ungetkey
-                end_if
-	file_get_dir_num
-	end_cmd
-
-# Hitting /number changes current group
-cmdkey edigit
-	compare_user_misc UM_COLDKEYS
-	if_false
-		ungetkey
-	else
-		shift_str 1
-                end_if
-	file_get_lib_num
-	end_cmd
-
-# Show the key hit
-compare_user_misc UM_COLDKEYS
-if_false
-	printkey
-        endif
-
-# Next library
-cmdkey ]
-	file_directory_up
-	end_cmd
-
-# Previous library
-cmdkey [
-	file_directory_down
-	end_cmd
-
-cmdkey Q
-	cmd_pop
-	goto main
-        end_cmd
-
-compare_user_misc UM_COLDKEYS
-if_false
-	crlf
-	end_if
-pause_reset
-
-# Menu
-cmdkey ?
-	compare_ars expert
-	if_true
-		cls
-		menu renegade/transfer
-		end_if
-	end_cmd
-
-# Commands
-
-cmdkey E
-	file_batch_section
-	end_cmd
-
-cmdkey C
-	exec_bin chat_sec
-	end_cmd
-
-cmdkey D
-	print "\r\nchDownload File(s)\r\n"
-	file_download_batch
-	if_true
-		end_cmd
-		end_if
-	getfilespec
-	if_true
-		file_download
-		end_if
-	end_cmd
-
-cmdkey /D
-	file_download_user
-	end_cmd
-
-cmdkey F
-	print "\r\nchFind Text in File Descriptions (no wildcards)\r\n"
-	file_find_text
-	end_cmd
-
-cmdkey /F
-	file_find_text_all
-	end_cmd
-
-cmdkey A
-	file_show_directories
-	end_cmd
-
-cmdkey /*
-	file_show_libraries
-	end_cmd
-
-cmdkey J
-	file_select_area
-	end_cmd
-
-cmdkey L
-	print "\r\nchList Files\r\n"
-	getfilespec
-	if_true
-		file_list
-		end_if
-	end_cmd
-
-cmdkey /L
-	nodelist_all
-	end_cmd
-
-cmdkey M
-	cmd_pop
-	goto message
-	end_cmd
-
-cmdkey N
-	print "\r\nchNew File Scan\r\n"
-	file_new_scan
-	end_cmd
-
-cmdkey /N
-	file_new_scan_all
-	end_cmd
-
-cmdkey G
-	file_download_batch
-	if_true
-		end_cmd
-                end_if
-	logoff
-	end_cmd
-
-cmdkey /G
-	file_download_batch
-	if_true
-		end_cmd
-                end_if
-	logoff_fast
-        end_cmd
-
-cmdkey S
-	print "\r\nchSearch for Filename(s)\r\n"
-	file_find_name
-	end_cmd
-
-cmdkey /S
-	file_find_name_all
-	end_cmd
-
-cmdkey /A
-	file_temp_section
-	end_cmd
-
-cmdkey U
-	print "\r\nchUpload File\r\n"
-	chkfile "%zmenu/upload.*"
-	if_true
-		menu upload
-                end_if
-	file_upload
-	end_cmd
-
-cmdkey /U
-	file_upload_user
-	end_cmd
-
-cmdkey V
-	print "\r\nchView File(s)\r\n"
-	getfilespec
-	if_true
-		file_view
-		end_if
-	end_cmd
-
-cmdkey P
-	file_ptrs_cfg
-	end_cmd
-
-cmdkey Y
-	info_user
-	end_cmd
-
-cmdkey Z
-	print "\r\nchUpload File to Sysop\r\n"
-	file_upload_sysop
-	end_cmd
-
-cmdkey #
-	print "\r\nncEnter the number of the directory to change to.\r\n"
-	end_cmd
-
-cmdkey /#
-	print "\r\nncEnter the number of the library to change to.\r\n"
-        end_cmd
-
-# fall through
-print "\r\nchUnrecognized command."
-compare_ars expert
-if_true
-	print " Hit 'i?nch' for a menu."
-	end_if
-crlf
-end_cmd
-
-# shouldn't hit next line
-print "Problem in command shell."
-pause
-hangup
-
-############################### Message Section ###############################
-
-:message
-cmd_home
-compare_ars expert
-if_false
-	cls
-	menu renegade/message
-	end_if
-
-# Update node status
-node_action node_main
-async
-
-# Display main Prompt
-print "n\r\nbh[@GRP@ @SUB@]\r\n"
-compare_ars exempt T
-if_true
-	print "bhTime Used: [c@TUSED@b]  "
-else
-	print "bhTime Left: [c@TLEFT@b]  "
-	end_if
-
-print "bh(c?b=cHelpb)\r\nMessage Menu m: n"
-
-# Get key (with / extended commands allowed)
-compare_user_misc UM_COLDKEYS
-if_false
-	getkeye
-else
-	getstrupr 60
-        endif
-
-# Do nothing for control keys and space
-cmdkey ^@
-	end_cmd
-cmdkey ^M
-	end_cmd
-cmdkey ^S
-	end_cmd
- cmdkey  "
-	end_cmd
-
-# Write command to log file
-logkey_comma
-
-# Hitting number changes current sub-board
-cmdkey digit
-	compare_user_misc UM_COLDKEYS
-	if_false
-		ungetkey
-                end_if
-	msg_get_sub_num
-	end_cmd
-
-# Hitting /number changes current group
-cmdkey edigit
-	compare_user_misc UM_COLDKEYS
-	if_false
-		ungetkey
-	else
-		shift_str 1
-                end_if
-	msg_get_grp_num
-        end_cmd
-
-# Show the key hit
-compare_user_misc UM_COLDKEYS
-if_false
-	printkey
-        endif
-
-cmdkey ?
-        compare_ars expert
-        if_true
-		cls
-                menu renegade/message
-                end_if
-        end_cmd
-
-cmdkey Q
-	cmd_pop
-        goto main
-        end_cmd
-
-cmdkey [
-	msg_subboard_down
-	end_cmd
-
-cmdkey ]
-	msg_subboard_up
-	end_cmd
-
-compare_user_misc UM_COLDKEYS
-if_false
-	crlf
-	end_if
-pause_reset
-
-cmdkey A
-	msg_show_subboards
-	end_cmd
-
-cmdkey /A
-	msg_show_groups
-	end_cmd
-
-cmdkey C
-	exec_bin chat_sec
-	end_cmd
-
-cmdkey /L
-	nodelist_all
-	end_cmd
-
-cmdkey N
-	msg_new_scan
-	end_cmd
-
-cmdkey R
-	msg_read
-	end_cmd
-
-cmdkey P
-	msg_post
-	end_cmd
-
-cmdkey F
-	cmd_pop
-	goto file_transfers
-	end_cmd
-
-cmdkey S
-	print "\r\nchSearch for Text in Messages\r\n"
-	msg_find_text
-        end_cmd
-
-cmdkey U
-	userlist_sub
-	end_cmd
-
-cmdkey G
-	file_download_batch
-	if_true
-		end_cmd
-                end_if
-	logoff
-	end_cmd
-
-cmdkey /G
-	file_download_batch
-	if_true
-		end_cmd
-                end_if
-	logoff_fast
-        end_cmd
-
-cmdkey E
-	print "_\r\nbhE-mail (User name or number): w"
-	getname 25
-	compare_str ""
-	if_true
-		end_cmd
-		end_if
-	compare_str "SYSOP"
-	if_true
-		setstr "1"
-		end_if
-	mail_send
-        end_cmd
-
-cmdkey J
-	msg_select_area
-        end_cmd
-
-cmdkey Y
-	msg_your_scan
-	end_cmd
-
-cmdkey Z
-	call main_cfg
-	end_cmd
-
-cmdkey #
-	print "\r\nncEnter the number of the sub-board to change to.\r\n"
-	end_cmd
-
-cmdkey /#
-	print "\r\nncEnter the number of the message group to change to.\r\n"
-        end_cmd
-
-# fall through
-print "\r\nchUnrecognized command."
-compare_ars expert
-if_true
-	print " Hit 'i?nch' for a menu."
-	end_if
-crlf
-end_cmd
-
-############################## Sysop Commands #################################
-
-:sysop
-cmd_home
-menu sysmain
-print "n\r\nchSelect an option (or Q to quit): n"
-getstrupr 40
-
-cmdstr "Q"
-        cmd_pop
-        return
-        end_cmd
-
-exec_bin str_cmds
-
-end_cmd
-
-
-############################ Main Info Section  ###############################
-
-:main_info
-cmd_home
-compare_ars expert
-if_false
-	menu maininfo
-	end_if
-async
-print "\r\nyhInfo: n"
-getcmd ?QISVY\r
-logkey
-
-cmdkey ?
-	compare_ars expert
-	if_true
-		menu maininfo
-		end_if
-	end_cmd
-
-cmdkey I
-	info_system
-	end_cmd
-
-cmdkey S
-	info_subboard
-	end_cmd
-
-cmdkey Y
-	info_user
-	end_cmd
-
-cmdkey V
-	info_version
-	end_cmd
-
-cmdkey Q
-	cmd_pop
-	return
-	end_cmd
-
-cmd_pop
-return
-
diff --git a/exec/rlogin.src b/exec/rlogin.src
deleted file mode 100644
index 49c7075c5c..0000000000
--- a/exec/rlogin.src
+++ /dev/null
@@ -1,15 +0,0 @@
-# rlogin.src
-
-# Telnet Gateway using RLogin protocol - Requires v3.00c
-
-# $Id$
-
-# @format.tab-size 8, @format.use-tabs true
-
-!include sbbsdefs.inc
-
-printf "\r\n\1h\1hPress \1yCtrl-]\1w for a control menu anytime.\r\n\r\n"
-pause
-printf "\1h\1yConnecting to: \1w%s\1n\r\n" str
-telnet_gate str TG_RLOGIN
-cls
diff --git a/exec/sbbsdefs.inc b/exec/sbbsdefs.inc
deleted file mode 100644
index 571f1b399c..0000000000
--- a/exec/sbbsdefs.inc
+++ /dev/null
@@ -1,361 +0,0 @@
-# sbbsdefs.inc
-
-# Baja include file defining various Synchronet related constants
-
-# $id$
-
-# @format.tab-size 8, @format.use-tabs true
-
-!include nodedefs.inc
-!include userdefs.inc
-!include errno.inc
-
-				# System toggle options (_SYS_MISC)
-!define SM_CLOSED	.0	# System is clsoed to New Users
-!define SM_SYSSTAT	.1	# Sysops activity included in statistics
-!define SM_NOBEEP	.2	# No beep sound locally
-!define SM_PWEDIT	.3	# Allow users to change their passwords
-!define SM_RA_EMU	.4	# Reverse R/A read message/mail command keys
-!define SM_ANON_EM	.5	# Allow anonymous e-mail
-!define SM_LISTLOC	.6	# Use location of caller in user lists
-!define SM_WILDCAT	.7	# Expand Wildcat color codes in messages
-!define SM_PCBOARD	.8	# Expand PCBoard color codes in messages
-!define SM_WWIV 	.9	# Expand WWIV color codes in messages
-!define SM_CELERITY	.10	# Expand Celerity color codes in messages
-!define SM_RENEGADE	.11	# Expand Renegade color codes in messages
-!define SM_ECHO_PW	.12	# Echo passwords locally
-!define SM_REQ_PW	.13	# Require passwords locally
-!define SM_L_SYSOP	.14	# Allow local sysop logon/commands
-!define SM_R_SYSOP	.15	# Allow remote sysop logon/commands
-!define SM_QUOTE_EM	.16	# Allow quoting of e-mail
-!define SM_EURODATE	.17	# Europian date format (DD/MM/YY
-!define SM_MILITARY	.18	# Military time format
-!define SM_TIMEBANK	.19	# Allow time bank functions
-!define SM_FILE_EM	.20	# Allow file attachments in E-mail
-!define SM_SHRTPAGE	.21	# Short sysop page
-!define SM_TIME_EXP	.22	# Set to expired values if out-of-time
-!define SM_FASTMAIL	.23	# Fast e-mail storage mode
-!define SM_QVALKEYS	.24	# Quick validation keys enabled
-!define SM_ERRALARM	.25	# Error beeps on
-!define SM_FWDTONET	.26	# Allow forwarding of e-mail to netmail
-!define SM_DELREADM	.27	# Delete read mail automatically
-!define SM_NOCDTCVT	.28	# No credit to minute conversions allowed
-
-				# Node toggle options (_NODE_MISC)
-!define NM_ANSALARM	.0	# Alarm locally on answer
-!define NM_WFCSCRN	.1	# Wait for call screen
-!define NM_WFCMSGS	.2	# Include total messages/files on WFC
-!define NM_LCL_EDIT	.3	# Use local editor to create messages
-!define NM_EMSOVL	.4	# Use expanded memory of overlays
-!define NM_WINOS2	.5	# Use Windows/OS2 time slice API call
-!define NM_INT28	.6	# Make int 28 DOS idle calls
-!define NM_NODV 	.7	# Don't detect and use DESQview API
-!define NM_NO_NUM	.8	# Don't allow logons by user number
-!define NM_LOGON_R	.9	# Allow logons by user real name
-!define NM_LOGON_P	.10	# Secure logons (always ask for password
-!define NM_NO_LKBRD	.11	# No local keyboard (at all
-!define NM_SYSPW	.12	# Protect WFC keys and Alt keys with SY:
-!define NM_NO_INACT	.13	# No local inactivity alert/logoff
-!define NM_NOBEEP	.14	# Don't beep locally
-!define NM_LOWPRIO	.15	# Always use low priority input
-!define NM_7BITONLY	.16	# Except 7-bit input only (E71 terminals
-!define NM_NOPAUSESPIN	.17	# No spinning cursor at pause prompt
-
-				# New user question toggles (_UQ)
-!define UQ_ALIASES      .0      # Ask for alias
-!define UQ_LOCATION     .1      # Ask for location
-!define UQ_ADDRESS      .2      # Ask for address
-!define UQ_PHONE        .3      # Ask for phone number
-!define UQ_HANDLE       .4      # Ask for chat handle
-!define UQ_DUPHAND      .5      # Search for duplicate handles
-!define UQ_SEX          .6      # Ask for sex
-!define UQ_BIRTH        .7      # Ask for birth date
-!define UQ_COMP         .8      # Ask for computer type
-!define UQ_MC_COMP      .9      # Multiple choice computer type
-!define UQ_REALNAME     .10     # Ask for real name
-!define UQ_DUPREAL      .11     # Search for duplicate real names
-!define UQ_COMPANY      .12     # Ask for company name
-!define UQ_NOEXASC      .13     # Don't allow ex-ASCII in user text
-!define UQ_CMDSHELL     .14     # Ask for command shell
-!define UQ_XEDIT        .15     # Ask for external editor
-!define UQ_NODEF        .16     # Don't ask for default settings
-!define UQ_NOCOMMAS     .17     # Do not require commas in location
-
-
-				# FidoNet netmail toggles (_NETMAIL_MISC)
-!define NMAIL_ALLOW	.0	# Allow NetMail
-!define NMAIL_CRASH	.1	# Default netmail to crash
-!define NMAIL_HOLD	.2	# Default netmail to hold
-!define NMAIL_KILL	.3	# Default netmail to kill after sent
-!define NMAIL_ALIAS	.4	# Use Aliases in NetMail
-!define NMAIL_FILE	.5	# Allow file attachments
-!define NMAIL_DIRECT	.6	# Default netmail to direct
-
-				# Console I/O status (_CONSOLE)
-!define CON_R_ECHO	.0	# Echo remotely
-!define CON_R_ECHOX	.1	# Echo X's to remote user
-!define CON_R_INPUT	.2	# Accept input remotely
-!define CON_L_ECHO	.3	# Echo locally
-!define CON_L_ECHOX	.4	# Echo X's locally
-!define CON_L_INPUT	.5	# Accept input locally
-!define CON_RAW_IN	.8	# Raw input mode - no editing capabilities
-!define CON_ECHO_OFF	.10	# Remote & Local echo disabled for ML/MF
-!define CON_UPARROW	.11	# Up arrow hit - move up one line
-!define CON_NO_INACT	.13	# Disable user inactivity detection
-
-				# String lengths
-
-!define LEN_FDESC	58	# File description
-!define LEN_TITLE	70	# Message title
-!define LEN_CID 	25	# Caller ID (phone number
-!define LEN_ARSTR	40	# Max length of Access Requirement string
-!define LEN_CHATACTCMD	 9	# Chat action command
-!define LEN_CHATACTOUT	65	# Chat action output string
-
-
-				# Online status (0=offline) (_ONLINE)
-!define ON_LOCAL	1	# Online locally
-!define ON_REMOTE	2	# Online remotely
-
-				# System status bits (_SYS_STATUS)
-!define SS_LOGOPEN	.0	# Node's Log file is open
-!define SS_INITIAL	.1	# The bbs data has been initialized.
-!define SS_TMPSYSOP	.2	# Temporary Sysop Status
-!define SS_USERON	.3	# A User is logged on to the BBS
-!define SS_LCHAT	.4	# Local chat in progress
-!define SS_CAP		.5	# Capture is on
-!define SS_ANSCAP	.6	# Capture ANSI codes too
-!define SS_FINPUT	.7	# Using file for input
-!define SS_COMISR	.8	# Com port ISR is installed
-!define SS_DAILY	.9	# Execute System Daily Event on logoff
-!define SS_INUEDIT	.10	# Inside Alt-Useredit section
-!define SS_ABORT	.11	# Global abort input or output flag
-!define SS_SYSPAGE	.12	# Paging sysop
-!define SS_SYSALERT	.13	# Notify sysop when users hangs up
-!define SS_GURUCHAT	.14	# Guru chat in progress
-!define SS_NODEDAB	.15	# NODE.DAB operations are okay
-!define SS_EVENT	.16	# Time shortened due to upcoming event
-!define SS_PAUSEON	.17	# Pause on, overriding user default
-!define SS_PAUSEOFF	.18	# Pause off, overriding user default
-!define SS_IN_CTRLP	.19	# Inside ctrl-p send node message func
-!define SS_NEWUSER	.20	# New User online
-!define SS_MDMDEBUG	.21	# Modem debug output
-!define SS_NEST_PF	.22	# Nested in printfile function
-!define SS_DCDHIGH	.23	# Assume DCD is high always
-!define SS_SPLITP	.24	# Split-screen private chat
-!define SS_RLOGIN	.26	# RLogin session (not telnet)
-
-				# Bits in 'mode' for GETSTR function
-!define K_UPPER 	.0	# Converts all letters to upper case
-!define K_UPRLWR	.1	# Upper/Lower case automatically
-!define K_NUMBER	.2	# Allow numbers only
-!define K_WRAP		.3	# Allows word wrap
-!define K_MSG		.4	# Allows ANSI, ^N ^A ^G
-!define K_SPIN		.5	# Spinning cursor (same as SPIN
-!define K_LINE		.6	# Input line (inverse color
-!define K_EDIT		.7	# Edit string passed
-!define K_CHAT		.8	# In chat multi-chat
-!define K_NOCRLF	.9	# Don't print CRLF after string input
-!define K_ALPHA 	.10	# Only allow alphabetic characters
-!define K_GETSTR	.11	# getkey called from getstr
-!define K_LOWPRIO	.12	# low priority input
-!define K_NOEXASC	.13	# No extended ASCII allowed
-!define K_E71DETECT	.14	# Detect E-7-1 terminal type
-!define K_AUTODEL	.15	# Auto-delete text (used with K_EDIT
-!define K_COLD		.16	# Possible cold key mode
-!define K_NOECHO	.17	# Don't echo input
-!define K_TAB		.18	# Treat TAB as CR
-
-				# Bits in 'mode' for PRINTFILE function
-!define P_NOABORT	.0	# Disallows abortion of a message
-!define P_SAVEATR	.1	# Save the new current attributres after
-				# msg has printed.
-!define P_NOATCODES	.2	# Don't allow @ codes
-!define P_OPENCLOSE	.3	# Open and close the file
-
-
-				# Values for USER_EVENT function
-!define EVENT_NONE      0       # Only accessible by menu
-!define EVENT_LOGON	1	# Execute during logon sequence
-!define EVENT_NEWUSER	2	# Execute during newuser app.
-!define EVENT_BIRTHDAY	3	# Execute on birthday
-!define EVENT_LOGOFF	4	# Execute during normal logoff
-
-!define TG_ECHO		.0	# Turn on telnet echo
-!define TG_CRLF		.1	# Expand sole CR to CRLF
-!define TG_LINEMODE	.2	# Send entire lines only
-!define TG_NODESYNC	.3	# Call Nodesync, get msgs, etc.		
-!define TG_CTRLKEYS	.4	# Interpret ^P ^U ^T, etc locally
-!define TG_PASSTHRU	.5	# Pass-through telnet commands/responses
-!define TG_RLOGIN	.6	# Use BSD RLogin protocol
-
-				# Bits for _FTP_MODE
-!define FTP_ECHO_CMD	.0	# Echo commands to user (debug)
-!define FTP_ECHO_RSP	.1	# Echo reply/response lines to user
-!define FTP_PASV	.2	# Use passive transfer mode
-!define FTP_ASCII	.3	# Use ASCII transfer mode
-!define FTP_HASH	.4	# Print hash marks during transfers
-
-!define BBS_OPT_KEEP_ALIVE	.0	# Send keep-alives					
-!define BBS_OPT_XTRN_MINIMIZED	.1	# Run externals minimized			
-!define BBS_OPT_AUTO_LOGON	.2	# Auto-logon via IP				
-!define BBS_OPT_DEBUG_TELNET	.3	# Debug telnet commands			
-!define BBS_OPT_SYSOP_AVAILABLE	.4	# Available for chat				
-!define BBS_OPT_ALLOW_RLOGIN	.5	# Allow logins via BSD RLogin		
-!define BBS_OPT_USE_2ND_RLOGIN	.6	# Use 2nd username in BSD RLogin	
-!define BBS_OPT_NO_QWK_EVENTS	.7	# Don't run QWK-related events		
-!define BBS_OPT_NO_HOST_LOOKUP	.11
-!define BBS_OPT_LOCAL_TIMEZONE	.30	# Don't force UCT/GMT				
-!define BBS_OPT_MUTE		.31	# Mute sounds						
-
-################################
-# System Variable Declarations #
-################################
-
-				# String variables
-!global _USERON.ALIAS
-!global _USERON.NAME
-!global _USERON.HANDLE
-!global _USERON.COMP
-!global _USERON.NOTE
-!global _USERON.ADDRESS
-!global _USERON.LOCATION
-!global _USERON.ZIPCODE
-!global _USERON.PASS
-!global _USERON.BIRTH
-!global _USERON.PHONE
-!global _USERON.MODEM
-!global _USERON.NETMAIL
-!global _USERON.TMPEXT
-!global _USERON.COMMENT
-!global _CONNECTION
-!global _CAP_FNAME
-!global _CID
-!global _COMSPEC
-!global _QUESTION
-
-				# Integer variables
-!global _USERON.NUMBER
-!global _USERON.ULS
-!global _USERON.DLS
-!global _USERON.POSTS
-!global _USERON.EMAILS
-!global _USERON.FBACKS
-!global _USERON.ETODAY
-!global _USERON.PTODAY
-!global _USERON.TIMEON
-!global _USERON.TEXTRA
-!global _USERON.LOGONS
-!global _USERON.TTODAY
-!global _USERON.TLAST
-!global _USERON.LTODAY
-!global _USERON.XEDIT
-!global _USERON.SHELL
-!global _USERON.LEVEL
-!global _USERON.SEX
-!global _USERON.ROWS
-!global _USERON.PROT
-!global _USERON.LEECH
-!global _USERON.MISC
-!global _USERON.QWK
-!global _USERON.CHAT
-!global _USERON.FLAGS1
-!global _USERON.FLAGS2
-!global _USERON.FLAGS3
-!global _USERON.FLAGS4
-!global _USERON.EXEMPT
-!global _USERON.REST
-!global _USERON.ULB
-!global _USERON.DLB
-!global _USERON.CDT
-!global _USERON.MIN
-!global _USERON.FREECDT
-!global _USERON.FIRSTON
-!global _USERON.LASTON
-!global _USERON.EXPIRE
-!global _USERON.PWMOD
-!global _USERON.NS_TIME
-!global _CUR_RATE
-!global _CUR_CPS
-!global _DTE_RATE
-!global _LNCNTR
-!global _TOS
-!global _ROWS
-!global _AUTOTERM
-!global _CONSOLE
-!global _ANSWERTIME
-!global _LOGONTIME
-!global _NS_TIME
-!global _LAST_NS_TIME
-!global _ONLINE
-!global _SYS_STATUS
-!global _SYS_MISC
-!global _SYS_PSNUM
-!global _SYS_TIMEZONE
-!global _SYS_PWDAYS
-!global _SYS_DELDAYS
-!global _SYS_AUTODEL
-!global _SYS_NODES
-!global _SYS_EXP_WARN
-!global _SYS_LASTNODE
-!global _SYS_AUTONODE
-!global _NODE_SCRNLEN
-!global _NODE_SCRNBLANK
-!global _NODE_MISC
-!global _NODE_VALUSER
-!global _NODE_IVT
-!global _NODE_SWAP
-!global _NODE_MINBPS
-!global _NODE_NUM
-!global _NEW_LEVEL
-!global _NEW_FLAGS1
-!global _NEW_FLAGS2
-!global _NEW_FLAGS3
-!global _NEW_FLAGS4
-!global _NEW_EXEMPT
-!global _NEW_REST
-!global _NEW_CDT
-!global _NEW_MIN
-!global _NEW_SHELL
-!global _NEW_MISC
-!global _NEW_EXPIRE
-!global _NEW_PROT
-!global _EXPIRED_LEVEL
-!global _EXPIRED_FLAGS1
-!global _EXPIRED_FLAGS2
-!global _EXPIRED_FLAGS3
-!global _EXPIRED_FLAGS4
-!global _EXPIRED_EXEMPT
-!global _EXPIRED_REST
-!global _MIN_DSPACE
-!global _CDT_MIN_VALUE
-!global _CDT_PER_DOLLAR
-!global _LEECH_PCT
-!global _LEECH_SEC
-!global _NETMAIL_COST
-!global _NETMAIL_MISC
-!global _INETMAIL_COST
-!global _INETMAIL_MISC
-!global _LOGON_ULB
-!global _LOGON_DLB
-!global _LOGON_ULS
-!global _LOGON_DLS
-!global _LOGON_POSTS
-!global _LOGON_EMAILS
-!global _LOGON_FBACKS
-!global _POSTS_READ
-!global _LOGFILE
-!global _NODEFILE
-!global _NODE_EXT
-!global _TIMELEFT
-!global _MAX_MINUTES
-!global _MAX_QWKMSGS
-!global _UQ
-!global _ERRORLEVEL
-!global _WORDWRAP
-!global _FTP_MODE
-!global _CLIENT_SOCKET
-!global _SOCKET_ERROR
-!global _STARTUP_OPTIONS
-
-# End of SBBSDEFS.INC
diff --git a/exec/sbbshelp.dab b/exec/sbbshelp.dab
deleted file mode 100644
index b0be5b2efd..0000000000
--- a/exec/sbbshelp.dab
+++ /dev/null
@@ -1,170 +0,0 @@
-��������� Synchronet Local Keyboard Commands ����������                     (*
- 
-t
-o
-g
-g
-l
-e
-)                     �� *A
-l
-t
--
-N
- 
-Lock This Node                              �� *A
-l
-t
--
-R
- 
-Rerun This Node After Logoff                ��  A
-l
-t
--
-H
- 
-Hang up on User Immediately                 �� *A
-l
-t
--
-I
- 
-Interrupt (Hang up) User with Message       �� *A
-l
-t
--
-A
- 
-Alert Sysop After Logoff                    �� *A
-l
-t
--
-Q
- 
-Disable/Enable Remote Keyboard (Quiet User) ��  A
-l
-t
--
-U
- 
-User Editor (Display [WAIT] Remotely)       �� *A
-l
-t
--
-E
- 
-Local I/O Only (Display [WAIT] Remotely)    �� *A
-l
-t
--
-T
- 
-Temporary Sysop Status                      ��  A
-l
-t
--
-D
- 
-Shell to DOS (Display [WAIT] Remotely)      �� *A
-l
-t
--
-L
- 
-Turn Local Text/ANSI Capture On/Off         �� *A
-l
-t
--
-C
- 
-Pop User in and out of Local Sysop Chat     �� *A
-l
-t
--
-G
- 
-Pop User in and out of Local Guru Chat      ��  A
-l
-t
--
-P
- 
-Turn Chat Page Off                          �� *A
-l
-t
--
-X
- 
-Exit to DOS After Logoff (Down Node)        ��  A
-l
-t
--
-+
- 
-Add 5 Minutes to User's Time                ��  A
-l
-t
--
--
- 
-Subtract 5 Minutes from User's Time         ��  A
-l
-t
--
-0
- 
-through A
-l
-t
--
-9
- 
-Quick Validation              ��  P
-a
-g
-e
- 
-U
-p
- 
-ASCII Upload                              ��  C
-t
-r
-l
--
-U
-p
-,
- 
-D
-n
-,
- 
-H
-o
-m
-e
-,
- 
-a
-n
-d
- 
-E
-n
-d
- 
-to Scroll Status Line  �� *S
-c
-r
-o
-l
-l
--
-l
-o
-c
-k
- 
-On if Sysop is Available for Chat     �������������������������������������������������������
\ No newline at end of file
diff --git a/exec/sbbsimsg.js b/exec/sbbsimsg.js
deleted file mode 100644
index 3d3f6faae2..0000000000
--- a/exec/sbbsimsg.js
+++ /dev/null
@@ -1,316 +0,0 @@
-// sbbsimsg.js
-
-load("sbbsdefs.js");
-load("nodedefs.js");
-
-// Global vars
-var imsg_user;
-var last_user=0;
-
-print("\1n\1hSynchronet \1cInstant Message \1wModule \1nv1.00 Alpha\r\n");
-
-// Parse arguments
-for(i=0;i<argc;i++)
-	if(argv[i].toLowerCase()=="-l") {
-		list_users(true);
-		exit();
-	}
-
-// Read the list of systems into list array
-fname = system.ctrl_dir + "sbbsimsg.lst";
-
-f = new File(fname);
-if(!f.open("r")) {
-	alert("Error opening " + fname);
-	exit();
-}
-
-list = f.readAll();
-f.close();
-for(line=0;;) {
-	if(list[line]==null)
-		break;
-	while(list[line].charAt(0)==' ')		// skip prepended spaces
-		list[line]=list[line].slice(1);
-	if(list[line].charAt(0)==';' ||			// comment
-		list[line]==system.inetaddr) {		// local system
-		list.splice(line,1);				// ignore
-		continue;
-	}
-	sp=list[line].indexOf(' ');
-	tab=list[line].indexOf('\t');
-	if(tab>0 && tab<sp)
-		sp=tab;
-	if(sp>0)								// truncate at first space or tab
-		list[line]=list[line].slice(0,sp);
-	line++;
-}
-
-
-// Truncate space off end of string
-function truncsp(str)
-{
-	var len;
-
-	while((len=str.length)!=0 && str.charAt(len-1)==' ')
-		str=str.slice(0,-1);
-
-	return(str);
-}
-
-function list_users(show)
-{
-	imsg_user = new Array();
-	var users=0;
-
-	print("\1m\1hListing Systems and Users (Ctrl-C to Abort)...\r\n");
-
-	for(i=0;list[i]!=null && !(bbs.sys_status&SS_ABORT);i++) {
-
-		if(show) {
-			console.line_counter=0;	// defeat pause
-			printf("\1n\1h%-25.25s\1n ",list[i]);
-		}
-
-		sock = new Socket();
-		if(!sock.connect(list[i],79)) {
-			log(format("!Finger connection to %s FAILED with error %d"
-				,list[i],sock.last_error));
-			alert("system not available");
-			list.splice(i,1);
-			i--;
-			continue;
-		}
-		sock.send("\r\n");	// Get list of active users
-		var response=new Array();
-		while(bbs.online && sock.is_connected) {
-			str=sock.readline();
-			if(str==null)
-				break;
-			response.push(truncsp(str));
-		}
-		sock.close();
-
-
-		// Skip header
-		while(response.length && response[0].charAt(0)!='-')
-			response.shift();
-		if(response.length && response[0].charAt(0)=='-')
-			response.shift();	// Delete the separator line
-		while(response.length && !response[0].length)
-			response.shift();	// Delete any blank lines
-
-		if(!response.length) {
-			if(show)
-				print();
-			continue;
-		}
-
-		if(show) {
-			str = format("%lu user%s",response.length,response.length==1 ? "":"s");
-			printf("\1g\1h%-40s Age Sex\r\n",str);
-		}
-
-		for(j in response) {
-			if(response[j]=="")
-				continue;
-
-			if(show) {
-				console.line_counter=0;	// defeat pause
-				print(format("\1h\1y%.25s\1n\1g %.48s"
-					,response[j],response[j].slice(26)));
-			}
-			var u = new Object;
-			u.host = list[i];
-			u.name = format("%.25s",response[j]);
-			u.name = truncsp(u.name);
-			imsg_user.push(u);
-			users++;
-		}
-	}
-	printf("\1m\1h%lu systems and %lu users listed.\r\n",i+1,users);
-
-}
-
-function send_msg(dest, msg)
-{
-
-	if((hp = dest.indexOf('@'))==-1) {
-		alert("Invalid user");
-		exit();
-	}
-	host = dest.slice(hp+1);
-
-	printf("\1h\1ySending...\r\1w");
-	sock = new Socket();
-	//sock.debug = true;
-	do {
-		if(!sock.connect(host,25)) {
-			alert("Connection to " + host + " failed with error " + sock.last_error);
-			break;
-		}
-
-		if(Number((rsp=sock.recvline()).slice(0,3))!=220) {
-			alert("Invalid connection response:\r\n" + rsp);
-			break;
-		}
-		sock.send("HELO "+system.inetaddr+"\r\n");
-		if(Number((rsp=sock.recvline()).slice(0,3))!=250) {
-			alert("Invalid HELO response: " + rsp);
-			break;
-		}
-		sock.send("SOML FROM: "+user.email+"\r\n");
-		if(Number((rsp=sock.recvline()).slice(0,3))!=250) {
-			alert("Invalid SOML response: " + rsp);
-			break;
-		}
-		sock.send("RCPT TO: "+dest+"\r\n");
-		if(Number((rsp=sock.recvline()).slice(0,3))!=250) {
-			alert("Invalid RCPT TO response: " + rsp);
-			break;
-		}
-		sock.send("DATA\r\n");
-		if(Number((rsp=sock.recvline()).slice(0,3))!=354) {
-			alert("Invalid DATA response: " + rsp);
-			break;
-		}
-		sock.send(msg);
-		sock.send("\r\n.\r\n");
-		if(Number((rsp=sock.recvline()).slice(0,3))!=250) {
-			alert("Invalid end of message response: " + rsp);
-			break;
-		}
-		sock.send("QUIT\r\n");
-		print("Message delivered successfully.");
-
-	} while(0);
-
-	sock.close();
-}
-
-function getmsg()
-{
-	var lines=0;
-	var msg="";
-	const max_lines = 5;
-
-	printf("\1n\1g\1h%lu\1n\1g lines maximum (blank line ends)\r\n",max_lines);
-	while(bbs.online && lines<max_lines) {
-		console.print("\1n: \1h");
-		mode=0;
-		if(lines+1<max_lines)
-			mode|=K_WRAP;
-		str=console.getstr(76, mode);
-		if(str=="")
-			break;
-		msg+=str;
-		msg+="\r\n";
-		lines++;
-	}
-
-	if(!lines || !bbs.online || bbs.sys_status&SS_ABORT)
-		return("");
-
-	return(msg);
-}
-
-list_users(true);	// Needed to initialize imsg_user[]
-console.crlf();
-
-var key;
-while(bbs.online) {
-	console.line_counter=0;	// defeat pause
-	console.print("\1n\1h\1bInter-BBS: ");
-	console.mnemonics("~Telegram, ~Message, ~List, or ~Quit: ");
-	bbs.sys_status&=~SS_ABORT;
-	while(bbs.online && !(bbs.sys_status&SS_ABORT)) {
-		key=console.inkey(K_UPPER);
-		if(key=='Q' || key=='L' || key=='T' || key=='M' || key=='\r')
-			break;
-		if(system.node_list[bbs.node_num-1].misc&(NODE_MSGW|NODE_NMSG)) {
-			console.line_counter=0;	// defeat pause
-			console.saveline();
-			console.crlf();
-			bbs.nodesync();
-			console.crlf();
-			console.restoreline();
-		}
-	}
-//	printf("key=%s\r\n",key);
-	switch(key) {
-		case 'L':
-			print("\1h\1cList\r\n");
-			list_users(true);
-			console.crlf();
-			break;
-		case 'T':
-			printf("\1h\1cTelegram\r\n\r\n");
-			printf("\1n\1h\1y(user@hostname): \1w");
-			if(imsg_user.length)
-				dest=format("%s@%s",imsg_user[last_user].name,imsg_user[last_user].host);
-			else
-				dest="";
-			dest=console.getstr(dest,64,K_EDIT|K_AUTODEL);
-			if(dest==null || dest=='' || bbs.sys_status&SS_ABORT)
-				break;
-			if((msg=getmsg())=='')
-				break;
-			send_msg(dest,msg);
-			console.crlf();
-			break;
-		case 'M':
-			print("\1h\1cMessage\r\n");
-			if(!imsg_user.length) {
-				alert("No users!\r\n");
-				break;
-			}
-			done=false;
-			while(bbs.online && !done) {
-				printf("\r\1n\1h\x11\1n-[\1hQ\1nuit]-\1h\x10 \1y%-25s \1c%s\1>"
-					,imsg_user[last_user].name,imsg_user[last_user].host);
-				switch(console.getkey(K_UPPER|K_NOECHO)) {
-					case '+':
-					case '>':
-					case ']':
-					case '\x06':	/* right arrow */
-					case 'N':
-					case '\n':		/* dn arrrow */
-						last_user++;
-						if(last_user>=imsg_user.length)
-							last_user=0;
-						break;
-
-					case '-':
-					case '<':
-					case '[':
-					case '\x1d':	/* left arrow */
-					case 'P':
-					case '\x1e':	/* up arrow */
-						last_user--;
-						if(last_user<0)
-							last_user=imsg_user.length-1;
-						break;
-					case '\x1b':	/* ESC */
-					case 'Q':
-						printf("\r\1>");
-						done=true;
-						break;
-					case '\r':
-						done=true;
-						dest=format("%s@%s"
-							,imsg_user[last_user].name,imsg_user[last_user].host);
-						printf("\r\1n\1cSending message to \1h%s\1>\r\n",dest);
-						if((msg=getmsg())=='')
-							break;
-						send_msg(dest,msg);
-						console.crlf();
-						break;
-				}
-			}
-			break;
-		default:
-			print("\1h\1cQuit");
-			exit();
-			break;
-	}
-}
diff --git a/exec/sbbsqnet.rs b/exec/sbbsqnet.rs
deleted file mode 100644
index b7c55b450f..0000000000
--- a/exec/sbbsqnet.rs
+++ /dev/null
@@ -1,36 +0,0 @@
-; Synchronet QWK Network Robocom Script
-;
-; User account must have 'Q' restriction on host system
-;
-; If path to Synchronet data dir is incorrect, change it
-
-TITLE "Synchronet QWK Network Packet Exchange"
-
-WHEN "Hit a key" SEND "^M"                      ; if pause, hit enter
-WHEN "No new messages" GOTO END			; if no new messages
-
-WAITFOR "NN:" FAILURE GOTO END                  ; wait for NN: prompt
-SEND "%BBS13%^M"                                ; send login name
-WAITFOR "PW:" FAILURE GOTO END                  ; wait for PW: prompt
-SEND "%BBS7%^M"                                 ; send password
-IF NOT EXIST "%REPDIR%%ID%.REP" GOTO DOWNLOAD
-WAITFOR "QWK: " FAILURE GOTO END                ; QWK prompt
-SEND "U"                                        ; Upload
-WAITFOR "Protocol" FAILURE GOTO END
-SEND "ZN"					; Zmodem, don't hang up
-UPLOAD "%REPDIR%%ID%.REP"
-ERASE "%REPDIR%%ID%.REP"
-:DOWNLOAD
-WAITFOR "QWK: " FAILURE GOTO END                ; QWK prompt
-SEND "DL"                                      	; Download, leave codes in
-TIMEOUT 300
-WAITFOR "Protocol" FAILURE GOTO END
-SEND "ZN"					; Zmodem, don't hang up
-DOWNLOAD "%QWKDIR%%ID%.QWK"
-
-:END
-SEND "Q"                                        ; Logoff
-DELAY 5
-HANGUP
-EXIT
-
diff --git a/exec/sbbsqnet.scr b/exec/sbbsqnet.scr
deleted file mode 100644
index 82280da0f9..0000000000
--- a/exec/sbbsqnet.scr
+++ /dev/null
@@ -1,91 +0,0 @@
-;Logon to Synchronet and transfer QWK packets using Zmodem
-;This script file is for use with Qmodem!
-GRAPHICS ANSI
-TURNOFF NOISE
-STRING SYSNAME PHONE ACCOUNT PASS RETRY DATADIR REP QWK INFO
-
-ASSIGN SYSNAME "XXXX"                  ; System being called
-ASSIGN PHONE "XXXXXXX^M"               ; System phone number
-ASSIGN ACCOUNT "XXXXXX^M"              ; Account on system
-ASSIGN PASS "XXXXXXXX^M"               ; Password
-ASSIGN RETRY "20"                      ; # of times to retry
-ASSIGN DATADIR "\SYNCHRO\DATA"         ; Download directory
-ASSIGN REP "$DATADIR\$SYSNAME.REP"     ; REP is the name of the REPLY packet
-ASSIGN QWK "$DATADIR\$SYSNAME.QWK"     ; QWK is the name of the QWK packet
-ASSIGN INFO "$DATADIR\$SYSNAME.LOG"    ; INFO is the name of the LOG file
-
-
-
-CLRSCR                                  ; Clear the screen
-
-LOG $INFO                               ; Open the log file
-STAMP Qmodem QWK log opened
-DISPLAYLN "SBBSQNET: Initialized "      ; Display this line
-
-DISPLAYLN "SBBSQNET: Calling $SYSNAME"  ; Information line
-STAMP Calling $SYSNAME
-
-DISPLAYLN "SBBSQNET: Dialing $PHONE"    ; Information line
-DELAY 1000
-SEND "ATM0^M"
-        WHEN "BUSY" LOOP
-        WHEN "NO DIAL TONE" LOOP
-        TIMEOUT 45 LOOP
-
-LOOP:
-        DECR RETRY
-        IF "$RETRY" = "0" ENDQWK
-        DELAY 1000
-        SEND "ATDT $PHONE"
-        WAITFOR "CONNECT"
-        DELAY 2000
-        IF $ONLINE DONE
-
-GOTO LOOP
-
-DONE:
-
-TIMEOUT 600 ENDQWK                      ; wait up to 10 minutes for sucess
-WHEN "HIT A KEY" "^M"
-WAITFOR "NN:"
-SEND    "^M"
-WAITFOR "NN:"
-SEND    "$ACCOUNT"
-DELAY   100
-WAITFOR "PW:"
-SEND    "$PASS"
-WAITFOR "QWK:"
-
-EXIST $REP UPREP                        ; If the reply exists, send it
-
-RECEIVE:
-        STAMP Download QWK packet
-        DELAY 1000
-        SEND "DL"
-        WHEN "No New Messages" ENDQWK
-        WAITFOR "PROTOCOL"
-        SEND "ZN"
-        DOWNLOAD Z $QWK
-        WAITFOR "QWK:"
-        SEND "Q"
-
-ENDQWK:
-        SEND "Q"
-        HANGUP
-        STAMP Qmodem QWK log closed
-        TURNOFF LOG
-        SYSTEM X
-
-UPREP:
-        STAMP Upload REPly packet
-        DELAY 1000
-        SEND "UZN"
-        WAITFOR "Start Transfer Now"
-        UPLOAD Z $REP
-        IF $SUCCESS DELREP
-        GOTO RECEIVE
-
-DELREP:
-        DOS "del $REP^M"
-        WAITFOR "QWK:"
-        GOTO RECEIVE
diff --git a/exec/sbbsqnet.slt b/exec/sbbsqnet.slt
deleted file mode 100644
index 70226769e1..0000000000
--- a/exec/sbbsqnet.slt
+++ /dev/null
@@ -1,138 +0,0 @@
-//	Logon to Synchronet and transfer QWK packets using Zmodem
-//	Version 2.00 (updated 09/17/95)
-
-//	This script should need no modification for most Synchronet hubs.
-//	The 'login name' node account must have the 'Q' restriction set on
-//	the hub (call-out to) system.
-//	arg1=system id
-//	arg2=dial list
-//	arg3=login name
-//	arg4=password
-//	arg5=retry count
-
-main(str arg1, str arg2, str arg3, str arg4, str arg5)
-{
-	str path[128],tmp[128];
-	int t,tmark,tstat,nn,pw,pause,qwk,prot,qwkcnt=0;
-
-_zmod_auto=0;	// Disable auto-zmodem (causing problems for many Qnet sysops)
-_zmod_rcrash=0; // Disable zmodem receive crash recovery (resume)
-clear_scr();
-printsc("SBBSQNET: Initialized ");
-t=curtime();
-date(t,tmp);
-printsc(tmp);
-printsc(" ");
-time(t,tmp);
-prints(tmp);
-
-copystr(_up_dir,path,0,80);
-strcat(path,"\");
-strcat(path,arg1);
-strcat(path,".LOG");
-printsc("SBBSQNET: ");
-if(usagelog(path)==-1)
-	printsc("ERROR OPENING ");
-else
-	printsc("Opened ");
-prints(path);
-
-copystr(_up_dir,path,0,80);
-strcat(path,"\");
-strcat(path,arg1);
-strcat(path,".REP");
-
-if(filesize(path)>0) {
-	printsc("SBBSQNET: Attempting to send ");
-	prints(path); }
-
-printsc("SBBSQNET: ");
-copystr("Calling ",tmp,0,80);
-strcat(tmp,arg1);
-prints(tmp);
-ustamp(tmp,1,1);
-
-printsc("SBBSQNET: Dialing ");
-prints(arg2);
-if(redial(arg2,stoi(arg5),1)==-1) {	// Dialing error
-	ustamp("Dial error.",1,1);
-	return; }
-if(not carrier()) {
-	ustamp("No answer.",1,1);
-	return; }
-
-nn=track("NN:",0);
-pw=track("PW:",0);
-qwk=track("QWK:",0);
-prot=track("PROTOCOL OR ",1);
-pause=track("HIT A KEY",1);
-
-tmark=timer_start(18000);		// wait up to 30 minutes for sucess
-while(not time_up(tmark)) {
-	if(not carrier()) {
-		ustamp("No carrier.",1,1);
-		break; }
-	terminal();
-	tstat=track_hit(0);		// check for track hit
-
-	if(tstat==nn) { 		// NN: prompt
-					// Show hub that we're a script
-		cputs("Telix Qnet Version 2.00");
-		delay(10);		// one second
-		cputs("^X");            // clear any garbage
-		cputs(arg3);		// send login name
-		cputs("^M"); }
-
-	else if(tstat==pw) {		// PW: prompt
-		delay(1);
-		cputs(arg4);		// send password
-		cputs("^M"); }
-
-	else if(tstat==pause)		// Hit a key
-		cputs("^M");
-
-	else if(tstat==qwk) {		// QWK prompt
-		delay(1);
-		qwkcnt=qwkcnt+1;
-		if(qwkcnt==1) {
-			if(filesize(path)>0) {
-				cputs("UZN");
-				delay(10);
-				terminal();
-				flushbuf();
-				if(send('Z',path)>=0) {         // successful
-					copystr("DEL ",tmp,0,4);
-					strcat(tmp,path);
-					dos(tmp,0); } } 	// delete REP
-			else qwkcnt=2; }
-		if(qwkcnt==2) {
-			cputs("DL");
-			while(not time_up(tmark)) {
-				if(not carrier())
-					break;
-				terminal();
-				tstat=track_hit(0);
-				if(tstat==qwk) {
-					qwkcnt=3;
-					break; }
-				if(tstat==prot) {
-					cputs("ZN");
-					delay(10);
-					terminal();
-					flushbuf();
-					receive('Z',"");
-					break; } } }
-		if(qwkcnt==3) {
-			cputs("Q");
-			break; } } }
-delay(10);
-terminal();
-if(time_up(tmark)) {
-	prints("SBBSQNET: Timeout.");
-	ustamp("Timeout.",1,1); }
-hangup();
-timer_free(tmark);		// free timer channel
-track_free(0);			// free track channels
-usagelog("*CLOSE*");            // close log file
-}
-
diff --git a/exec/sdos.src b/exec/sdos.src
deleted file mode 100644
index 43f34ebb91..0000000000
--- a/exec/sdos.src
+++ /dev/null
@@ -1,684 +0,0 @@
-# sdos.src
-
-# DOS shell for Synchronet version 2 systems
-
-# $Id$
-
-# @format.tab-size 8, @format.use-tabs true
-
-# Thanks to Yojimbo for the BDOS shell that inspired this one
-
-!include sbbsdefs.inc
-
-# Give a bogus DOS error so they think they're in real DOS
-print "nSpecified COMMAND search directory bad\r\n\r\n"
-print "Microsoft(R) MS-DOS(R) Version 5.00\r\n"
-print "             (C)Copyright Microsoft Corp 1981-1991.\r\n"
-
-:root
-cmd_home
-
-# Update node status
-node_action node_main
-async
-
-inc_main_cmds
-
-call display_prompt
-print ">n"
-getstr 128
-logstr
-
-compare_word "cd"
-if_true
-	shift_str 2
-	compare_word " "
-	if_true
-		shift_str 1
-		end_if
-	compare_word "\\"
-	if_true
-		shift_str 1
-		end_if
-	compare_word "mail"
-	if_true
-		cmd_pop
-		goto mail
-		end_if
-	compare_word "files"
-	if_true
-		cmd_pop
-		goto files
-		end_if
-	print "Invalid directory\r\n"
-	end_cmd
-	end_if
-
-cmdstr "dir"
-	menu sdos/root
-	end_cmd
-
-call global
-end_cmd
-
-:display_prompt
-
-pause_reset
-print "n\r\nC:\\"
-return
-
-
-##############################################################################
-# This is where we go when it's not a valid command
-# Let's really try to act like DOS now (i.e. fake 'em out)
-##############################################################################
-
-:global
-
-# Just <CR>, so ignore
-compare_str ""
-if_true
-	return
-	end_if
-
-# String commands start with a semicolon
-compare_word ";"
-if_true
-	shift_str 1
-	exec_bin str_cmds
-	return
-	end_if
-
-compare_str "sysop"
-if_true
-	menu sysmain
-	return
-	end_if
-
-compare_str "type"
-if_True
-	print "Required paramater missing\r\n"
-	return
-	end_if
-
-compare_word "type "
-if_true
-	shift_str 5
-	call type
-	return
-	end_if
-
-# Global BBS commands
-compare_str "chat"
-if_true
-	exec_bin chat_sec
-	return
-	end_if
-
-compare_str "open"
-if_true
-	print "External program name missing\r\n"
-	return
-        end_if
-
-compare_word "open "
-if_true
-	shift_str 5
-	xtrn_exec
-	return
-	end_if
-
-compare_str "doors"
-if_true
-	xtrn_section
-	return
-	end_if
-
-compare_str "gfiles"
-if_true
-	text_file_section
-	return
-	end_if
-
-compare_str "automsg"
-if_true
-	auto_message
-	return
-	end_if
-
-compare_str "setup"
-if_true
-	user_defaults
-	return
-	end_if
-
-compare_str "logoff"
-if_true
-	file_download_batch
-	if_true
-		return
-                end_if
-	logoff
-	return
-	end_if
-
-compare_str "ver"
-if_True
-	info_version
-	return
-	end_if
-
-compare_str "exit"
-if_true
-	logoff_fast
-	return
-	end_if
-
-# DOS Stuff
-compare_word "dir"
-if_true
-	shift_str 3
-	compare_word " "
-	if_true
-		shift_str 1
-		end_if
-	compare_str ".."
-	if_true
-		menu sdos/root
-		return
-		end_if
-	compare_word ".."
-	if_true
-		shift_str 2
-		end_if
-	compare_str ""
-	if_true
-		menu sdos/root
-		return
-		end_if
-	compare_word "\\"
-	if_true
-		shift_str 1
-		end_if
-	compare_str ""
-	if_true
-		menu sdos/root
-		return
-		end_if
-	compare_word "files"
-	if_true
-		menu sdos/files
-		return
-		end_if
-	compare_word "mail"
-	if_true
-		menu sdos/mail
-		return
-		end_if
-	shift_str 1
-	compare_word ":"
-	if_true
-		print "Invalid drive specification\r\n"
-		return
-		end_if
-	print "\r\n Volume in drive C is BBS\r\n"
-	print " Volume Serial Number is 9156-8BEA\r\n"
-	print "Invalid directory\r\n"
-	return
-	end_if
-
-# Fake environment
-compare_str "set"
-if_true
-	print "COMSPEC=C:\\COMMAND.COM\r\n"
-	print "PROMPT=$p$g\r\n"
-	print "PATH=C:\\\r\n"
-	print "SBBSCTRL=C:\\SBBS\\CTRL\r\n"
-	print "SBBSNODE=C:\\BBS\\NODE@NODE@\\\r\n"
-	print "SBBSNNUM=@NODE@\r\n"
-	return
-	end_if
-
-# Pretend we set it
-compare_word "set "
-if_true
-	return
-	end_if
-
-# Echo
-compare_str "echo"
-if_true
-	print "ECHO is on\r\n"
-	return
-	end_if
-
-compare_word "echo "
-if_true
-	shift_str 5
-	printstr
-	crlf
-	return
-	end_if
-
-# Del, Erase, Copy
-compare_str "del"
-if_true
-	print "Required parameter missing\r\n"
-	return
-        end_if
-
-compare_word "del "
-if_true
-	print "Sharing violation\r\n"
-	return
-	end_if
-
-compare_str "erase"
-if_true
-	print "Required parameter missing\r\n"
-	return
-        end_if
-
-compare_word "erase "
-if_true
-	print "Sharing violation\r\n"
-	return
-	end_if
-
-compare_str "copy"
-if_true
-	print "Required parameter missing\r\n"
-	return
-        end_if
-
-compare_word "copy "
-if_true
-	print "Sharing violation\r\n"
-	return
-        end_if
-
-# Changing drive letter?
-
-shift_str 1
-compare_word ":"
-if_true
-        print "Invalid drive specification\r\n"
-        return
-        end_if
-print "Bad command or file name\r\n"
-return
-
-:files
-
-cmd_home
-call display_prompt
-
-print "FILES>n"
-getstr 128
-logstr
-
-compare_word "cd"
-if_true
-	shift_str 2
-	compare_word " "
-	if_true
-		shift_str 1
-		end_if
-	compare_str ".."
-	if_true
-		cmd_pop
-		goto root
-		end_if
-	compare_word ".."
-	if_true
-		shift_str 2
-                end_if
-	compare_str "\\"
-	if_true
-		cmd_pop
-		goto root
-		end_if
-	compare_str "\\mail"
-	if_true
-		cmd_pop
-		goto mail
-                end_if
-	print "Invalid directory\r\n"
-	end_cmd
-        end_if
-
-cmdstr "dir"
-	menu sdos/files
-	end_cmd
-
-cmdstr "batch"
-	file_batch_section
-	end_cmd
-
-cmdstr "download"
-	file_download_batch
-	if_true
-		end_cmd
-		end_if
-	getfilespec
-	if_true
-		file_download
-		end_if
-        end_cmd
-
-compare_word "download "
-if_true
-	shift_str 9
-	file_download
-	end_cmd
-	end_if
-
-cmdstr "extended"
-	getfilespec
-	if_true
-		file_list_extended
-		end_if
-        end_cmd
-
-compare_word "extended "
-if_true
-	shift_str 9
-	file_list_extended
-	end_cmd
-	end_If
-
-cmdstr "find"
-	file_find_text
-	end_cmd
-
-cmdstr "area"
-	file_select_area
-	end_cmd
-
-cmdstr "list"
-	getfilespec
-	if_true
-		file_list
-		end_if
-        end_cmd
-
-compare_word "list "
-if_true
-	shift_str 5
-	file_list
-	end_cmd
-	end_if
-
-cmdstr "newscan"
-	file_new_scan
-	end_cmd
-
-cmdstr "remove"
-	getfilespec
-	if_true
-		file_remove
-		end_if
-        end_cmd
-
-compare_word "remove "
-if_True
-	shift_str 7
-	file_remove
-	end_cmd
-	end_if
-
-cmdstr "search"
-	file_find_name
-	end_cmd
-
-cmdstr "temp"
-	file_temp_section
-	end_cmd
-
-cmdstr "upload"
-	chkfile "%zmenu/upload.*"
-	if_true
-		menu upload
-		end_if
-	file_upload
-        end_cmd
-
-cmdstr "view"
-	getfilespec
-	if_true
-		file_view
-		end_if
-        end_cmd
-
-compare_word "view "
-if_True
-	shift_str 5
-	file_view
-	end_cmd
-	end_if
-
-cmdstr "config"
-	file_ptrs_cfg
-	end_cmd
-
-call global
-end_cmd
-
-:type
-
-compare_word nodes
-if_true
-	nodelist_all
-	return
-	end_if
-
-compare_word logon
-if_true
-	userlist_logons
-	return
-	end_if
-
-compare_word users
-if_true
-	userlist_all
-	return
-	end_if
-
-compare_word system
-if_true
-	info_system
-	return
-	end_if
-
-compare_word your
-if_true
-	info_user
-	return
-	end_if
-
-print "File not found - "
-printstr
-crlf
-return
-
-
-:mail
-
-cmd_home
-
-# Update node status
-node_action node_main
-async
-
-inc_main_cmds
-
-call display_prompt
-
-print "MAIL>n"
-getstr 128
-logstr
-
-compare_word "cd"
-if_true
-	shift_str 2
-	compare_word " "
-	if_true
-		shift_str 1
-		end_if
-	compare_str ".."
-	if_true
-		cmd_pop
-		goto root
-                end_if
-	compare_word ".."
-	if_true
-		shift_str 2
-		end_if
-	compare_str "\\"
-	if_true
-		cmd_pop
-		goto root
-		end_if
-	compare_str "\\files"
-	if_true
-		cmd_pop
-		goto files
-		end_if
-	print "Invalid directory\r\n"
-	end_cmd
-        end_if
-
-cmdstr "dir"
-	menu sdos/mail
-	end_cmd
-
-cmdstr "config"
-	call main_cfg
-	end_cmd
-
-cmdstr "send"
-	print "_\r\nbhE-mail (User name or number): w"
-	getname 25
-	compare_str ""
-	if_true
-		end_cmd
-		end_if
-	compare_str "SYSOP"
-	if_true
-		setstr "1"
-		end_if
-	mail_send
-        end_cmd
-
-cmdstr "sendfile"
-	print "_\r\nbhE-mail (User name or number): w"
-	getname 25
-	compare_str ""
-	if_true
-		end_cmd
-		end_if
-	compare_str "SYSOP"
-	if_true
-		setstr "1"
-		end_if
-	mail_send_file
-        end_cmd
-
-cmdstr "read"
-	mail_read
-	end_cmd
-
-cmdstr "feedback"
-	setstr "1"
-	mail_send_feedback
-	end_cmd
-
-cmdstr "netmail"
-	no_yes "\r\nAttach a file"
-	if_true
-		mail_send_netmail
-	else
-		mail_send_netfile
-		end_if
-	end_cmd
-
-cmdstr "readsent"
-	mail_read_sent
-        end_cmd
-
-cmdstr "area"
-	msg_select_area
-	end_cmd
-
-cmdstr "post"
-	msg_post
-	end_cmd
-
-cmdstr "newscan"
-	msg_new_scan
-	end_cmd
-
-cmdstr "find"
-	msg_find_text
-	end_cmd
-
-cmdstr "yourmsgs"
-	msg_your_scan
-	end_cmd
-
-cmdstr "qwk"
-	msg_qwk
-	end_cmd
-
-cmdstr "readmsgs"
-	msg_read
-	end_Cmd
-
-
-call global
-end_cmd
-
-########################### Main Config Section  ##############################
-
-:main_cfg
-
-compare_user_misc UM_expert
-if_false
-	menu maincfg
-	end_if
-async
-print "\r\nyhConfig: n"
-getcmd ?QNPIS\r
-logkey
-
-cmdkey ?
-	compare_user_misc UM_expert
-	if_true
-		menu maincfg
-		end_if
-	goto main_cfg
-	end_cmd
-
-cmdkey N
-	msg_new_scan_cfg
-	return
-	end_cmd
-
-cmdkey S
-	msg_your_scan_cfg
-	return
-	end_cmd
-
-cmdkey P
-	msg_ptrs_cfg
-	return
-	end_cmd
-
-cmdkey I
-	msg_ptrs_reinit
-	return
-	end_cmd
-
-return
-
-# End of SDOS.SRC
diff --git a/exec/sendmsg.js b/exec/sendmsg.js
deleted file mode 100644
index d8011797c1..0000000000
--- a/exec/sendmsg.js
+++ /dev/null
@@ -1,60 +0,0 @@
-// sendmsg.js
-
-// Send a short message (telegram) to a user on another Synchronet system
-// Requires v3.10f or later
-
-if(argc>0 && argv[0].indexOf('@')!=-1)
-	dest = argv[0];
-else if((dest = prompt("User (user@hostname)"))==null)
-	exit();
-if((hp = dest.indexOf('@'))==-1) {
-	alert("Invalid user");
-	exit();
-}
-if((msg = prompt("Message"))==null)
-	exit();
-host = dest.slice(hp+1);
-sock = new Socket();
-//sock.debug = true;
-do {
-	if(!sock.connect(host,25)) {
-		alert("Connection to " + host + " failed with error " + sock.last_error);
-		break;
-	}
-
-	if(Number((rsp=sock.recvline()).slice(0,3))!=220) {
-		alert("Invalid connection response:\r\n" + rsp);
-		break;
-	}
-	sock.send("HELO "+system.inetaddr+"\r\n");
-	if(Number((rsp=sock.recvline()).slice(0,3))!=250) {
-		alert("Invalid HELO response: " + rsp);
-		break;
-	}
-	sock.send("SOML FROM: "+user.email+"\r\n");
-	if(Number((rsp=sock.recvline()).slice(0,3))!=250) {
-		alert("Invalid SOML response: " + rsp);
-		break;
-	}
-	sock.send("RCPT TO: "+dest+"\r\n");
-	if(Number((rsp=sock.recvline()).slice(0,3))!=250) {
-		alert("Invalid RCPT TO response: " + rsp);
-		break;
-	}
-	sock.send("DATA\r\n");
-	if(Number((rsp=sock.recvline()).slice(0,3))!=354) {
-		alert("Invalid DATA response: " + rsp);
-		break;
-	}
-	sock.send(msg);
-	sock.send("\r\n.\r\n");
-	if(Number((rsp=sock.recvline()).slice(0,3))!=250) {
-		alert("Invalid end of message response: " + rsp);
-		break;
-	}
-	sock.send("QUIT\r\n");
-	print("Message delivered successfully.");
-
-} while(0);
-
-sock.close();
diff --git a/exec/simple.src b/exec/simple.src
deleted file mode 100644
index 4b64ab88c5..0000000000
--- a/exec/simple.src
+++ /dev/null
@@ -1,380 +0,0 @@
-# simple.src
-
-# Simple Synchronet Command Shell - for beginner/first-time users
-
-# $Id$
-
-# @format.tab-size 8, @format.use-tabs true
-
-!include sbbsdefs.inc
-
-replace_text 563 "\1n\1h\1b{\1wContinue? Yes/No\1b} "
-
-# Set return point for main menu commands (via end_cmd)
-cmd_home
-# Update node status
-node_action node_main
-cls
-async
-
-menu simple/main
-menu simple/prompt
-print "n"
-
-getstrupr 10
-crlf
-pause_reset
-
-# Write command to log file
-logstr
-
-# Commands
-
-cmdstr C
-	exec_bin chat_sec
-	end_cmd
-
-cmdstr CHAT
-	exec_bin chat_sec
-	end_cmd
-
-cmdstr Q
-	msg_qwk
-	end_cmd
-
-# Send Post/Email menu
-cmdstr S
-	cmd_home
-	cls
-        async
-	menu simple/sendmsg
-	menu simple/prompt
-	print "n"
-	getstrupr 10
-	crlf
-	pause_reset
-
-      # Send Email
-	cmdstr E
-		call sendmail
-		end_cmd
-
-	cmdstr EMAIL
-		call sendmail
-		end_cmd
-
-      # Post Message
-	cmdstr P
-		call postmessage
-		end_cmd
-
-	cmdstr POST
-		call postmessage
-		end_cmd
-
-      # Send NetMail
-	cmdstr N
-		call sendnetmail
-		end_cmd
-
-	cmdstr NETMAIL
-		call sendnetmail
-		end_cmd
-
-      # Quit back to main
-	cmdstr Q
-		cmd_pop
-		end_cmd
-end_cmd
-
-# Read messages/mail menu
-cmdstr R
-	cmd_home
-	cls
-	async
-	menu simple/readmsg
-	menu simple/prompt
-	print "n"
-	getstrupr 10
-	crlf
-	pause_reset
-
-      # Read your Email
-	cmdstr E
-		mail_read
-		end_cmd
-
-	cmdstr EMAIL
-		mail_read
-		end_cmd
-
-      # Read your sent Email
-	cmdstr F
-		mail_read_sent
-		end_cmd
-
-      # Read messages in a conference
-	cmdstr A
-		msg_select_area
-		if_true
-			msg_read
-			end_if
-		end_cmd
-
-	cmdstr ALL
-		msg_read
-		end_cmd
-
-      # Bulletins
-	cmdstr B
-		text_file_section
-		end_cmd
-
-      # Read all new messages
-	cmdstr N
-		print "lbhScanning for new messages...\r\n"
-		msg_new_scan_all
-		end_cmd
-
-	cmdstr NEW
-		print "lbhScanning for new messages...\r\n"
-		msg_new_scan_all
-		end_cmd
-
-      # Read all new messages TO: YOU
-	cmdstr Y
-		print "lbhScanning for your messages...\r\n"
-		msg_your_scan_all
-		end_cmd
-
-	cmdstr YOU
-		print "lbhScanning for your messages...\r\n"
-		msg_your_scan_all
-		end_cmd
-
-	cmdstr YOUR
-		print "lbhScanning for your messages...\r\n"
-		msg_your_scan_all
-		end_cmd
-
-	cmdstr C
-	       call msg_cfg
-	       end_cmd
-
-      # Quit back to main menu
-	cmdstr Q
-		cmd_pop
-		end_cmd
-end_cmd
-
-#Open door menu
-cmdstr O
-	xtrn_section
-	end_cmd
-
-cmdstr OPEN
-	xtrn_section
-	end_cmd
-
-cmdstr DOOR
-	xtrn_section
-	end_cmd
-
-cmdstr DOORS
-	xtrn_section
-	end_cmd
-
-#Account config (user defaults)
-cmdstr A
-	user_defaults
-	end_cmd
-
-#Page another user
-cmdstr P
-	private_message
-	pause_reset
-	end_cmd
-
-#List users online
-cmdstr L
-	cls
-	nodelist_users
-	end_cmd
-
-#List files
-cmdstr F
-	cmd_home
-	cls
-	async
-	menu simple/filelist
-	menu simple/prompt
-	print "n"
-	getstrupr 10
-	crlf
-        pause_reset
-
-	cmdstr A
-		file_select_area
-		if_false
-			end_cmd
-			end_if
-		setstr "*.*"
-		file_list
-		end_cmd
-
-	cmdstr N
-		print "\r\nbhUse c@NEWFILETIME@b for new file scan "
-		yes_no "date/time"
-		if_false
-			file_ptrs_cfg
-			if_false
-				end_cmd
-				end_if
-			end_if
-		file_new_scan_all
-		end_cmd
-
-	cmdstr F
-		print "\r\nchFind Text in File Descriptions (no wildcards)\r\n"
-		file_find_text_all
-		end_cmd
-
-	cmdstr S
-		print "\r\nchSearch for Filename(s)\r\n"
-		file_find_name_all
-		end_cmd
-
-      # Quit back to main menu
-	cmdstr Q
-		cmd_pop
-		end_cmd
-end_cmd
-
-
-#Download file
-cmdstr D
-	file_download_batch
-	if_true
-		end_cmd
-		end_if
-	print "\r\nEnter the filename or wildcard to download\r\n"
-	getfilespec
-	if_true
-		file_download
-		endif
-	end_cmd
-
-#Upload a file
-cmdstr U
-	file_select_area
-	if_false
-		end_cmd
-		end_if
-	chkfile "%ztext/menu/upload.*"
-	if_true
-		menu upload
-                end_if
-	file_upload
-	end_cmd
-
-#Logoff
-cmdstr G
-	call logoffbbs
-	end_cmd
-
-cmdstr BYE
-	call logoffbbs
-	end_cmd
-
-cmdstr GOODBYE
-	call logoffbbs
-	end_cmd
-
-cmdstr OFF
-	call logoffbbs
-	end_cmd
-
-cmdstr LOGOFF
-	call logoffbbs
-	end_cmd
-
-#fall through
-end_cmd
-
-:logoffbbs
-file_download_batch
-if_false
-	logoff
-	endif
-return
-
-:sendmail
-print "\r\nbhSend E-mail to (User name or number): n"
-getname 25
-compare_str ""
-if_true
-	return
-	end_if
-compare_str "SYSOP"
-if_true
-	setstr "1"
-	end_if
-no_yes "\r\nAttach a file"
-if_false
-	mail_send_file
-else
-	mail_send
-	end_if
-return
-
-:sendnetmail
-no_yes "\r\nAttach a file"
-if_false
-	mail_send_netfile
-else
-	mail_send_netmail
-	end_if
-return
-
-
-:postmessage
-msg_select_area
-if_true
-	msg_post
-	end_if
-return
-
-########################### Msg Config Section	##############################
-
-:msg_cfg
-
-menu MAINCFG
-async
-print "\r\nyhCommand: n"
-getstrupr 10
-logkey
-
-cmdkey N
-	msg_new_scan_cfg
-	return
-	end_cmd
-
-cmdkey S
-	msg_your_scan_cfg
-	return
-	end_cmd
-
-cmdkey P
-	msg_ptrs_cfg
-	return
-	end_cmd
-
-cmdkey I
-	msg_ptrs_reinit
-	return
-	end_cmd
-
-return
-
-
-#end of SIMPLE.SRC
diff --git a/exec/socktest.src b/exec/socktest.src
deleted file mode 100644
index 263dfe903d..0000000000
--- a/exec/socktest.src
+++ /dev/null
@@ -1,63 +0,0 @@
-!include sbbsdefs.inc
-
-int sock len
-str buf
-
-socket_open sock
-if_false
-	print "open failure\r\n"
-	return
-	end_if
-setstr "cvs.synchro.net"
-socket_connect sock str 23
-if_false
-	print "connect failure\r\n"
-	return
-	end_if
-
-or _console CON_RAW_IN
-loop
-
-	inchar
-	if_true
-		compare_key ^]
-		if_equal
-			break
-			end_if
-		copy_char buf
-		socket_write sock buf
-		if_false
-			print "\r\nError writing to socket\r\n"
-			break
-			end_if
-		continue
-		end_if
-
-	socket_check sock
-	if_false
-		print "\r\nSocket disconnected\r\n"
-		break
-		end_if
-
-	socket_nread sock len
-	if_false
-		print "\r\nError getting read length\r\n"
-		break
-		end_if
-
-	compare len 0
-	if_equal
-		continue
-		end_if
-
-#	printf "reading %d" len
-
-	socket_read sock buf len
-	if_true
-		pause_reset
-		print buf
-		end_if
-	end_loop
-
-socket_close sock
-xor _console CON_RAW_IN
\ No newline at end of file
diff --git a/exec/sound.js b/exec/sound.js
deleted file mode 100644
index f84d052285..0000000000
--- a/exec/sound.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/* sound.js */
-
-/* Plays a sound (WAV) file on the local (server) sound system */
-
-/* Sound filename must be specified on the command-line */
-
-sound(argv[0]);
\ No newline at end of file
diff --git a/exec/str_cmds.src b/exec/str_cmds.src
deleted file mode 100644
index d2e3b87df4..0000000000
--- a/exec/str_cmds.src
+++ /dev/null
@@ -1,453 +0,0 @@
-# str_cmds.src
-
-# Global String Command Module for Synchronet
-
-# $Id$
-
-# @format.tab-size 8, @format.use-tabs true
-
-# This is NOT a command shell, DO NOT add to SCFG->Command Shells
-
-# This module is loaded from command shells with the EXEC_BIN function
-
-# It contains mostly sysop commands (i.e. ;ERR)
-
-# The command string must be the current string (obtained with SETSTR, GETSTR
-# or similar function) before this module is loaded.
-
-!include nodedefs.inc
-!include file_io.inc
-
-str fname
-int file
-
-# Remove any trailing spaces
-
-truncsp str
-
-logstr
-compare_ars SYSOP
-if_true
-	# Change node action to "sysop activities"
-	node_action NODE_SYSP
-	sync
-
-	######################## SYSOP Functions ##############################
-
-	compare_str "ERR"
-	if_true
-		error_log
-		return
-		end_if
-
-	compare_str "GURU"
-	if_true
-		guru_log
-		return
-		end_if
-
-	compare_str "CHUSER"
-	if_true
-		change_user
-		return
-		end_if
-
-	compare_str "ANSCAP"
-	if_true
-		ansi_capture
-		return
-		end_if
-
-	compare_word "LIST"
-	if_true
-		chksyspass
-		if_true
-			shift_str 4
-			call get_arg
-			printfile_str
-			end_if
-		return
-		end_if
-
-	compare_str "EDIT"
-	if_true
-		edit_text_file
-		return
-		end_if
-
-	compare_str "LOG"
-	if_true
-		system_log
-		return
-		end_if
-
-	compare_str "MEM"
-	if_true
-		show_mem
-		return
-		end_if
-
-	compare_str "YLOG"
-	if_true
-		system_ylog
-		return
-		end_if
-
-	compare_str "SS"
-	if_true
-		system_stats
-		return
-		end_if
-
-	compare_word "NS"
-        if_true
-		shift_str 2
-		compare_word " "
-		if_true
-			shift_str 1
-			end_if
-		node_stats
-		return
-                end_if
-
-	compare_word "EXEC"
-	if_true
-		chksyspass
-		if_true
-			shift_str 4
-			call get_arg
-			exec_int %s
-			end_if
-		return
-		end_if
-
-	compare_word "FOSSIL"
-	if_true
-		chksyspass
-		if_true
-			shift_str 6
-			call get_arg
-			exec %s
-			end_if
-		return
-		end_if
-
-	compare_word "CALL"
-	if_true
-		chksyspass
-		if_true
-			shift_str 4
-			call get_arg
-			set fname "%jqnet/%s.now"
-			fopen file O_WRONLY|O_CREAT|O_DENYNONE fname
-			if_true
-				fclose file
-				end_if
-			end_if
-		return
-		end_if
-
-	compare_word "NODE"
-	if_true
-		strlwr str
-		exec_int %!%s
-		return
-		end_if
-
-	compare_word "DOWN"
-	if_true
-		shift_str 4
-		call get_arg
-		exec_int %!node down %s
-		return
-                end_if
-
-	compare_word "RERUN"
-	if_true
-		shift_str 5
-		call get_arg
-		exec_int %!node rerun %s
-		return
-                end_if
-
-	compare_str "SLOG"
-	if_true
-		exec_int %!slog /p
-		return
-		end_if
-
-	compare_str "NLOG"
-        if_true
-		exec_int %!slog %n /p
-		return
-		end_if
-
-	compare_word "NLOG "
-        if_true
-		shift_str 5
-		exec_int %!slog %n../node%s /p
-		return
-                end_if
-
-	compare_word "UEDIT"
-        if_true
-		shift_str 5
-		compare_word " "
-		if_true
-			shift_str 1
-			end_if
-                user_edit
-		return
-                end_if
-
-	compare_str "MAIL"
-	if_true
-		mail_read_all
-		return
-		end_if
-
-        compare_str "BULKMAIL"
-        if_true
-		print "\r\nEnter ARS matches to send mail to or [CR] to send "
-		print "by name/number\r\nARS to match: "
-		getstrupr 40
-                mail_send_bulk
-		return
-                end_if
-
-	compare_str "DOS"	# DOS/Windows shell
-	if_true
-		chksyspass
-		if_true
-			exec_int "command.com"
-			end_if
-		return
-		end_if
-
-	compare_str "SHELL"	# Unix shell (-i for interactive)
-	if_true
-		chksyspass
-		if_true
-			compare_ars "UNIX"
-			if_true
-				exec_int "%y -i"	
-			else
-				exec_int "%y"	
-				end_if
-			end_if	
-		return
-		end_if
-
-	compare_word "SPY"
-	if_true
-		chksyspass
-		if_true
-			shift_str 3
-			call get_arg
-			crlf
-			spy
-			if_true
-				print "\1n\r\nSpy session complete.\r\n"
-				end_if
-			end_if
-		return
-		end_if
-
-	compare_str "DIR"	# directory of current lib/dir
-	if_true
-		chksyspass
-		if_true
-			exec_int command /c dir %f /p
-			end_if
-		return
-                end_if
-
-	compare_word "LOAD"
-	if_true
-		shift_str 4
-		call get_arg
-		load_text %s
-		return
-		end_if
-
-	compare_word "DIR"	# directory of user specified location
-	if_true
-		chksyspass
-		if_true
-			shift_str 3
-			call get_arg
-			exec_int command /c dir %s /p
-			end_if
-		return
-		end_if
-
-	compare_word "UPLOAD"
-	if_true
-		shift_str 7
-		file_upload_bulk
-		return
-		end_if
-
-	compare_word "ALTUL"
-	if_true
-		shift_str 6
-		file_set_alt_path
-		return
-		end_if
-
-	compare_word "RESORT"
-	if_true
-		shift_str 7
-		file_resort_directory
-		return
-		end_if
-
-	compare_word "OLDUL"
-	if_true
-		shift_str 6
-		file_find_old_uploads
-		return
-		end_if
-
-	compare_word "OLD"
-	if_true
-		shift_str 4
-		file_find_old
-		return
-		end_if
-
-	compare_word "OFFLINE"
-	if_true
-		shift_str 8
-		file_find_offline
-		return
-		end_if
-
-	compare_word "CLOSE"
-	if_true
-		shift_str 6
-		file_find_open
-		return
-		end_if
-
-	compare_word "GET"
-	if_true
-		shift_str 3
-		compare_word " "
-		if_true
-			shift_str 1
-			end_if
-		compare_str ""
-		if_true
-			print "\r\nPath and filename: "
-			getstr 60
-			compare_str ""
-			if_true
-				return
-				end_if
-			end_if
-		file_get
-		return
-		end_if
-
-	compare_word "PUT"
-	if_true
-		shift_str 3
-		compare_word " "
-		if_true
-			shift_str 1
-			end_if
-		compare_str ""
-		if_true
-			print "\r\nPath and filename: "
-			getstr 60
-			compare_str ""
-			if_true
-				return
-                                end_if
-			end_if
-		file_put
-		return
-		end_if
-        end_if
-
-############################# Exemption Functions #############################
-
-
-# Quiet Node
-compare_ars exempt Q
-if_true
-	compare_str "QUIET"
-	if_true
-		compare_ars QUIET
-		if_true
-			exec_int %!node status=3 %#
-		else
-			exec_int %!node status=4 %#
-			end_if
-		return
-		end_if
-
-	compare_str "ANON"
-	if_true
-		toggle_node_misc NODE_ANON
-		exec_int %!node list %#
-		return
-		end_if
-	end_if
-
-# Lock Node
-compare_ars exempt N
-if_true
-        compare_word "LOCK"
-        if_true
-                shift_str 4
-		call get_arg
-                exec_int %!node lock %s
-		return
-                end_if
-	end_if
-
-# Interrupt Node
-compare_ars exempt I
-if_true
-	compare_word "INTR"
-        if_true
-                shift_str 4
-		call get_arg
-                exec_int %!node intr %s
-                return
-                end_if
-	end_if
-
-# Chat
-compare_ars exempt C
-if_true
-	compare_str "CHAT"
-	if_true
-		page_sysop
-		return
-		end_if
-	end_if
-
-compare_str "POFF"
-if_true
-	toggle_node_misc NODE_POFF
-	end_if
-
-# None of the above (unrecognized)
-return
-
-### Generic routine to ask user for parameter if one wasn't specified ###
-
-:get_arg
-	compare_word " "
-	if_true
-		shift_str 1
-		end_if
-	compare_str ""
-	if_true
-		print "Parameter(s): "
-		getstr
-		end_if
-return
diff --git a/exec/telgate.src b/exec/telgate.src
deleted file mode 100644
index 56365fc012..0000000000
--- a/exec/telgate.src
+++ /dev/null
@@ -1,13 +0,0 @@
-# telgate.src
-
-# $Id$
-
-# @format.tab-size 8, @format.use-tabs true
-
-!include sbbsdefs.inc
-
-printf "\r\n\1h\1hPress \1yCtrl-]\1w for a control menu anytime.\r\n\r\n"
-pause
-printf "\1h\1yConnecting to: \1w%s\1n\r\n" str
-telnet_gate str 0
-cls
diff --git a/exec/textdat.js b/exec/textdat.js
deleted file mode 100644
index d3928b6904..0000000000
--- a/exec/textdat.js
+++ /dev/null
@@ -1,9 +0,0 @@
-load("sbbsdefs.js");	// SS_ABORT
-
-for(i=1;!(bbs.sys_status&SS_ABORT);i++) {
-	str = bbs.text(i);
-	if(str==null)
-		break;
-	// console.line_counter=0; /* uncomment to display continuously */
-	printf("\1n\1h%d: \1n%s\1n\r\n",i,str);
-}
\ No newline at end of file
diff --git a/exec/tone/battle.ton b/exec/tone/battle.ton
deleted file mode 100644
index b100c46906..0000000000
--- a/exec/tone/battle.ton
+++ /dev/null
@@ -1,32 +0,0 @@
-: Battle Hymn of Republic  |
-t  2
-s  5
-v Mine \
-f4 133
-v eyes \
-f4 160
-v have \
-f4 100
-v seen \
-f4 160
-v the \
-D4 100
-v glor\
-d4 160
-v y \
-f4 100
-v of \
-A4 160
-v the \
-c5 100
-v com\
-d5 160
-v ing \
-d5 100
-v of \
-d5 160
-v the \
-c5 100
-v lord.\
-A4 200
-v
\ No newline at end of file
diff --git a/exec/tone/bouree.ton b/exec/tone/bouree.ton
deleted file mode 100644
index 7e9ac3b7d7..0000000000
--- a/exec/tone/bouree.ton
+++ /dev/null
@@ -1,21 +0,0 @@
-: Bouree                   |
-t  2
-b3 80
-c4 80
-d4 160
-g3 80
-F3 80
-g3 160
-g4 160
-F4 160 
-e4 80
-F4 80
-d4 160
-a3 80
-b3 80
-c4 160
-F3 80
-e3 80
-F3 160
-d4 160
-b3 160
diff --git a/exec/tone/buffgals.ton b/exec/tone/buffgals.ton
deleted file mode 100644
index 179146650f..0000000000
--- a/exec/tone/buffgals.ton
+++ /dev/null
@@ -1,22 +0,0 @@
-: Buffalo Gals             |
-s  5
-c3 100
-c3 100
-c3 200
-e3 200
-g3 100
-g3 100
-a3 133
-g3 200
-g3 133
-e3 200
-r 200
-g3 133
-f3 200
-f3 133
-d3 200
-r 200
-a3 133
-g3 200
-g3 133
-e3 200
diff --git a/exec/tone/camptown.ton b/exec/tone/camptown.ton
deleted file mode 100644
index 9d0b420597..0000000000
--- a/exec/tone/camptown.ton
+++ /dev/null
@@ -1,22 +0,0 @@
-: Camptown Races           |
-s  5
-t  2
-a3 100
-a3 100
-F3 100
-a3 100
-b3 100
-a3 100
-F3 200
-F3 100
-e3 300
-F3 100
-e3 200
-r 15
-a3 100
-a3 100
-F3 100 
-a3 100
-b3 100
-a3 100
-F3 200
diff --git a/exec/tone/clown.ton b/exec/tone/clown.ton
deleted file mode 100644
index 956ab30aab..0000000000
--- a/exec/tone/clown.ton
+++ /dev/null
@@ -1,33 +0,0 @@
-t 200
-c5 2
-p -.50
-b4 2
-p -.50
-A4 1
-p -.50
-b4 1
-p -.50
-A4 1
-p -.50
-a4 1
-p -.50
-G4 2
-p -.50
-g4 2
-p -.50
-F4 2
-p -.50
-g4 1
-p -.10
-g4 1
-p -.10
-g4 1
-p -.10
-g4 1
-p -.10
-g4 1
-p -.10
-g4 1
-p -.10
-g4 1
-
diff --git a/exec/tone/ent.ton b/exec/tone/ent.ton
deleted file mode 100644
index da3eea3f71..0000000000
--- a/exec/tone/ent.ton
+++ /dev/null
@@ -1,299 +0,0 @@
-: Now we're going to set-up and play a song
-
-Visual		The Entertainer
-
-pitch	323.50	All commands can be abreviated with just one character
-t	200
-s	10
-:r	 10	 Rest before we begin
-
-:intro
-
-o	6
-
-d	1
-e	1
-c	1
-o      -1
-a	2
-b	1
-g	1
-r	1
-
-d	1
-e	1
-c	1
-o      -1
-a	2
-b	1
-g	1
-r	1
-
-d	1
-e	1
-c	1
-o      -1
-a	2
-b	1
-a	1
-G	1
-g	2
-r	2
-
-g5	1
-r	1
-
-: begin
-o	5
-
-d4	1
-D4	1
-e4	1
-c5	2
-e4	1
-c5	2
-e4	1
-c5      3
-
-a3	1
-r	1
-g3	1
-
-c	1
-d	1
-D	1
-e	1
-c	1
-d	1
-e	2
-b4	1
-d	2
-c	1
-
-r	1
-
-g3	1
-r	1
-g3	1
-r	1
-
-d4	1
-D4	1
-e4	1
-c5	2
-e4	1
-c5	2
-e4	1
-c5      3
-
-a3	1
-r	1
-g3      1
-r	1
-
-a4	1
-g4	1
-F4	1
-a4	1
-c5	1
-e5	2
-d5	1
-c5	1
-b4	1
-d5	1
-
-r	1
-g3	1
-r	1
-a3	1
-r	1
-
-d4	1
-D4	1
-e4	1
-c5	2
-e4	1
-c5	2
-e4	1
-c5      3
-
-a3	1
-r	1
-g3      1
-
-c	1
-d	1
-D	1
-e	1
-c	1
-d	1
-e	2
-b4	1
-d	2
-c	1
-
-r	1
-
-g3	1
-r	1
-g3	1
-r       1
-
-c	1
-d	1
-e	1
-c	1
-d	1
-e       2
-
-c	1
-d	1
-c	1
-e	1
-c	1
-d	1
-e	2
-
-c	1
-d	1
-c	1
-e	1
-c	1
-d	1
-e       2
-b4	1
-d	2
-c       1
-
-r	1
-g3	1
-r	1
-a3	1
-r       1
-
-: repeat
-
-d4	1
-D4	1
-e4	1
-c5	2
-e4	1
-c5	2
-e4	1
-c5      3
-
-a3	1
-r	1
-g3	1
-
-c	1
-d	1
-D	1
-e	1
-c	1
-d	1
-e	2
-b4	1
-d	2
-c	1
-
-r	1
-
-g3	1
-r	1
-g3	1
-r	1
-
-d4	1
-D4	1
-e4	1
-c5	2
-e4	1
-c5	2
-e4	1
-c5      3
-
-a3	1
-r	1
-g3      1
-r	1
-
-a4	1
-g4	1
-F4	1
-a4	1
-c5	1
-e5	2
-d5	1
-c5	1
-b4	1
-d5	1
-
-r	1
-g3	1
-r	1
-a3	1
-r	1
-
-d4	1
-D4	1
-e4	1
-c5	2
-e4	1
-c5	2
-e4	1
-c5      3
-
-a3	1
-r	1
-g3      1
-
-c	1
-d	1
-D	1
-e	1
-c	1
-d	1
-e	2
-b4	1
-d	2
-c	1
-
-r	1
-
-g3	1
-r	1
-g3	1
-r       1
-
-c	1
-d	1
-e	1
-c	1
-d	1
-e       2
-
-c	1
-d	1
-c	1
-e	1
-c	1
-d	1
-e	2
-
-c	1
-d	1
-c	1
-e	1
-c	1
-d	1
-e       2
-b4	1
-d	2
-c       1
-
-r	1
-g3	1
-r	1
-c3	1
-
diff --git a/exec/tone/example.ton b/exec/tone/example.ton
deleted file mode 100644
index e3ec4579fd..0000000000
--- a/exec/tone/example.ton
+++ /dev/null
@@ -1,539 +0,0 @@
-: Example TONE (.TON) file
-  All lines starting with non-alphanumeric characters are ignored.
-
-: We're going to set the timer count value (in milliseconds).  The first word
-  of the line must begin with a 'T' (not case sensitive).  Following the 'T'
-  word (or letter) must be some amount of white space (tabs or space) then
-  a number to use for the timer count value.  The default timer count value
-  is 1 millisecond.
-
-Time 		200
-
-: The colons you see at the beginning of the comment paragraphs are not
-  necessary.  They are only used to visually separate comments from tone 
-  command lines.  A space, tab, or any other non-alphanumeric character would
-  work just as well.
-
-: Now we're going to display some text on the monitor using the 'V' (visual)
-  command.  The first word of the line must begin with a 'V' (not case 
-  sensitive).  Some amount of white space must follow the 'V' word (or letter)
-  then text to be displayed to the user.  If you do not wish a new line to be
-  automatically displayed, append a backslash (\) to the end of the line.
-
-Visual		This is the beginning of our example TONE file.
-Visual		This text will be displayed on the same line as \
-Visual		this text.
-
-: Now we're going to play some tones. Tones may be specified by note letter 
-  (and optional octave number) or exact frequency (in Hz).  We'll begin with
-  a natural 'a' (440Hz) for 1 second (1000 milliseconds).  Tone lines have two
-  parameters, the note (or exact frequency) and duration (in time counts).
-  Since our time counter value is now 200, we will need a time count of 5 to
-  produce a 1 second duration (5 counts multiplied by 200 milliseconds equals 
-  1 second.)
-
-a 5
-
-: The note is still playing right now and will continue to play until we make
-  another tone, give a rest command, or give a quit command. 
-
-: Notice that we used a lower case 'a'. Note letters ARE case sensitive. Lower
-  case notes are naturals and upper case notes are sharps.
-
-: Now we're going to specify the same note by specifying the exact frequency
-  (in HZ) of 440, for the same duration.
-
-440 5
-
-: There will be no audible change caused by the above command because we were
-  already hearing the same frequency. What you will hear is a 2 second 'a',
-  unaware that we actually played two 1 second 'a's.
-
-: To stop the note from sounding, we are now going to give a rest command.
-  Rest commands can be specified with a word starting with the letter 'R'
-  (not case sensitive) or by specifying a frequency of 0.  Some amount of
-  white space must follow, then a duration (in time counts).  The following
-  rest command is specifying 1 second of silence.
-
-Rest 5
-
-: To produce an automatic sound-off or pause between notes, we must specify
-  a stacato duration (in milliseconds).  This helps the listener to distinguish
-  between notes played of the same frequency.  If you do not specify a stacato
-  duration, the result is legato (smooth transition between notes). 
-
-: The stacato command must begin with the 'S' character (not case sensitive)
-  followed by white space then the duration (in milliseconds).  The default 
-  duration is 0 (disabled).
-  
-Stacato 10
-
-: To play notes from octaves other than the default octave (4), you can either
-  change the current default octave (with the Octave command) or specify the
-  octave with the note.  To play a low C for 1 second, we will use the
-  following command:
-
-c1 5
-
-: When we don't specify the octave number, the default octave is used.  To
-  change the default octave number, we can use the following command:
-
-Octave 3
-
-Visual		Now we will play a C major scale (octave 3):
-
-c 2		Comments can follow any command (except Visual)
-d 2
-e 2
-f 2
-g 2
-a 2
-b 2
-
-: To adjust the current default octave, we can use the plus (+) and minus
-  (-) symbols:
-
-Octave +1
-
-Visual		Another C major scale (now in octave 4).
-
-c 2
-d 2
-e 2
-f 2
-g 2
-a 2
-b 2
-
-Visual		Rest a little
-
-Rest 5
-
-: When specifying notes, the sounded frequency is based on a default pitch for
-  middle C.  The default starts at 523.50Hz but can be adjusted with the Pitch
-  command.  This is useful for created de-tuning or bend effects.  The Pitch
-  command can be used to specify a default pitch or adjust the current default
-  pitch up (+) or down (-).
-
-Visual		Now for a pitch variation example.
-
-: Lower timer count value and disable stacto for a smooth transition between
-  pitches
-
-Time 40
-Stacato 0
-
-: Starting at a3 and ascend gradually.
-
-a3 1
-p  +.10
-a3 1
-p  +.10
-a3 1
-p  +.10
-a3 1
-p  +.10
-a3 1
-p  +.10
-a3 1
-p  +.10
-a3 1
-p  +.10
-a3 1
-p  +.10
-a3 1
-p  +.10
-a3 1
-p  +.10
-a3 1
-p  +.10
-a3 1
-p  +.10
-a3 1
-p  +.10
-a3 1
-p  +.10
-a3 1
-p  +.10 	Kind of repetitive, huh?
-a3 1
-p  +.10
-a3 1
-p  +.10
-a3 1
-p  +.10
-a3 1
-p  +.10
-a3 1
-p  +.10
-a3 1
-p  +.10
-a3 1
-p  +.10
-a3 1
-p  +.10
-a3 1
-p  +.10
-a3 1
-p  +.10
-a3 1
-p  +.10
-a3 1
-p  +.10
-a3 1
-p  +.10
-a3 1
-p  +.10
-a3 1
-p  +.10
-
-: Now descend quickly
-
-a3 1
-p  -1.0
-a3 1
-p  -1.0
-a3 1
-p  -1.0
-a3 1
-p  -1.0
-a3 1
-p  -1.0
-a3 1
-p  -1.0
-a3 1
-p  -1.0
-a3 1
-p  -1.0
-a3 1
-p  -1.0
-a3 1
-p  -1.0
-a3 1
-p  -1.0
-a3 1
-p  -1.0
-a3 1
-p  -1.0
-a3 1
-p  -1.0
-a3 1
-p  -1.0
-a3 1
-p  -1.0
-a3 1
-p  -1.0
-a3 1
-p  -1.0
-a3 1
-p  -1.0
-a3 1
-p  -1.0
-a3 1
-p  -1.0
-a3 1
-p  -1.0
-a3 1
-p  -1.0
-a3 1
-p  -1.0
-
-: Now we're going to set-up and play a song
-
-Visual		The Entertainer
-
-pitch	323.50	All commands can be abreviated with just one character
-t	200
-s	10
-r	10	Rest before we begin
-
-:intro
-
-o	6
-
-d	1
-e	1
-c	1
-o      -1
-a	2
-b	1
-g	1
-r	1
-
-d	1
-e	1
-c	1
-o      -1
-a	2
-b	1
-g	1
-r	1
-
-d	1
-e	1
-c	1
-o      -1
-a	2
-b	1
-a	1
-G	1
-g	2
-r	2
-
-g5	1
-r	1
-
-: begin
-o	5
-
-d4	1
-D4	1
-e4	1
-c5	2
-e4	1
-c5	2
-e4	1
-c5      3
-
-a3	1
-r	1
-g3	1
-
-c	1
-d	1
-D	1
-e	1
-c	1
-d	1
-e	2
-b4	1
-d	2
-c	1
-
-r	1
-
-g3	1
-r	1
-g3	1
-r	1
-
-d4	1
-D4	1
-e4	1
-c5	2
-e4	1
-c5	2
-e4	1
-c5      3
-
-a3	1
-r	1
-g3      1
-r	1
-
-a4	1
-g4	1
-F4	1
-a4	1
-c5	1
-e5	2
-d5	1
-c5	1
-b4	1
-d5	1
-
-r	1
-g3	1
-r	1
-a3	1
-r	1
-
-d4	1
-D4	1
-e4	1
-c5	2
-e4	1
-c5	2
-e4	1
-c5      3
-
-a3	1
-r	1
-g3      1
-
-c	1
-d	1
-D	1
-e	1
-c	1
-d	1
-e	2
-b4	1
-d	2
-c	1
-
-r	1
-
-g3	1
-r	1
-g3	1
-r       1
-
-c	1
-d	1
-e	1
-c	1
-d	1
-e       2
-
-c	1
-d	1
-c	1
-e	1
-c	1
-d	1
-e	2
-
-c	1
-d	1
-c	1
-e	1
-c	1
-d	1
-e       2
-b4	1
-d	2
-c       1
-
-r	1
-g3	1
-r	1
-a3	1
-r       1
-
-: repeat
-
-d4	1
-D4	1
-e4	1
-c5	2
-e4	1
-c5	2
-e4	1
-c5      3
-
-a3	1
-r	1
-g3	1
-
-c	1
-d	1
-D	1
-e	1
-c	1
-d	1
-e	2
-b4	1
-d	2
-c	1
-
-r	1
-
-g3	1
-r	1
-g3	1
-r	1
-
-d4	1
-D4	1
-e4	1
-c5	2
-e4	1
-c5	2
-e4	1
-c5      3
-
-a3	1
-r	1
-g3      1
-r	1
-
-a4	1
-g4	1
-F4	1
-a4	1
-c5	1
-e5	2
-d5	1
-c5	1
-b4	1
-d5	1
-
-r	1
-g3	1
-r	1
-a3	1
-r	1
-
-d4	1
-D4	1
-e4	1
-c5	2
-e4	1
-c5	2
-e4	1
-c5      3
-
-a3	1
-r	1
-g3      1
-
-c	1
-d	1
-D	1
-e	1
-c	1
-d	1
-e	2
-b4	1
-d	2
-c	1
-
-r	1
-
-g3	1
-r	1
-g3	1
-r       1
-
-c	1
-d	1
-e	1
-c	1
-d	1
-e       2
-
-c	1
-d	1
-c	1
-e	1
-c	1
-d	1
-e	2
-
-c	1
-d	1
-c	1
-e	1
-c	1
-d	1
-e       2
-b4	1
-d	2
-c       1
-
-r	1
-g3	1
-r	1
-c3	1
-
-
diff --git a/exec/tone/funeral.ton b/exec/tone/funeral.ton
deleted file mode 100644
index 4fc170cd21..0000000000
--- a/exec/tone/funeral.ton
+++ /dev/null
@@ -1,14 +0,0 @@
-: Funeral March-Marionette |
-t  2
-s  10
-a2 93
-d3 93
-r 70
-d3 93
-d3 93
-C3 93
-b2 93
-C3 93
-r 70
-d3 93
-e3 93
diff --git a/exec/tone/furelise.ton b/exec/tone/furelise.ton
deleted file mode 100644
index 8eeda90f2c..0000000000
--- a/exec/tone/furelise.ton
+++ /dev/null
@@ -1,20 +0,0 @@
-: Fur Elise                |
-t  2
-s  5
-e4 133
-D4 133
-e4 133
-b3 133
-d4 133
-c4 133
-a3 200
-r 100
-c3 133
-e3 133
-a3 133
-b3 200
-r 100
-e3 133
-G2 133
-b3 133
-c4 200
diff --git a/exec/tone/goodnite.ton b/exec/tone/goodnite.ton
deleted file mode 100644
index e42405d592..0000000000
--- a/exec/tone/goodnite.ton
+++ /dev/null
@@ -1,22 +0,0 @@
-: Good-night, Ladies       |
-s  5
-e4 420
-c4 420
-g3 140
-c4 840
-r 210
-e4 420
-c4 420
-d4 140
-d4 840
-r 210
-e4 420
-c4 420
-f4 140
-f4 840
-f4 140
-e4 280
-c4 140
-d4 280
-b3 140
-c4 840
diff --git a/exec/tone/hatdance.ton b/exec/tone/hatdance.ton
deleted file mode 100644
index 9ed6d6db7a..0000000000
--- a/exec/tone/hatdance.ton
+++ /dev/null
@@ -1,17 +0,0 @@
-: Mexican Hat Dance        |
-d3 160
-F3 160
-r 120
-d3 160
-F3 160
-r 120
-d3 160
-F3 320
-r 240
-d3 160
-F3 160
-G3 160
-F3 160
-f3 320
-F3 160
-G3 240
diff --git a/exec/tone/humor.ton b/exec/tone/humor.ton
deleted file mode 100644
index e2f612ddc6..0000000000
--- a/exec/tone/humor.ton
+++ /dev/null
@@ -1,18 +0,0 @@
-: Humoresque               |
-s  5
-g2 210
-a2 140
-g2 210
-a2 140
-b2 210
-d3 140
-e3 210
-d3 140
-g3 210
-F3 140
-a3 210
-g3 140
-F3 210
-a3 140
-g3 210
-e3 210
diff --git a/exec/tone/jeanie.ton b/exec/tone/jeanie.ton
deleted file mode 100644
index 8cea3248c5..0000000000
--- a/exec/tone/jeanie.ton
+++ /dev/null
@@ -1,14 +0,0 @@
-: Jeanie with Light Brown  |
-t  2
-s  5
-d4 200
-c4 300
-a3 100
-A3 100
-a3 100
-g3 100
-f3 100
-a3 200
-c3 100
-d3 100
-f3 300
diff --git a/exec/tone/la_cuca.ton b/exec/tone/la_cuca.ton
deleted file mode 100644
index 954127d5ed..0000000000
--- a/exec/tone/la_cuca.ton
+++ /dev/null
@@ -1,21 +0,0 @@
-: La Cucaracha             |
-s  10
-d3 133
-d3 133
-d3 133
-g3 400
-b3 200
-r 100
-d3 133
-d3 133
-d3 133
-g3 400
-b3 200
-r 200
-g3 133
-g3 133
-F3 133
-F3 133
-e3 133
-e3 133
-d3 400
diff --git a/exec/tone/maplerag.ton b/exec/tone/maplerag.ton
deleted file mode 100644
index 9db8f29dd3..0000000000
--- a/exec/tone/maplerag.ton
+++ /dev/null
@@ -1,24 +0,0 @@
-: Maple Leaf Rag           |
-t  2
-s  2
-b3 80
-d4 80
-g3 80
-b3 80
-d4 160
-F3 80
-d4 80
-F3 80
-a3 80
-d4 240
-r  80
-b3 80
-d4 80
-g3 80
-b3 80
-d4 160
-F3 80
-d4 80
-F3 80
-a3 80
-d4 240
diff --git a/exec/tone/march.ton b/exec/tone/march.ton
deleted file mode 100644
index f22e3cb844..0000000000
--- a/exec/tone/march.ton
+++ /dev/null
@@ -1,21 +0,0 @@
-: March - Nutcracker Suite |
-s  5
-t  2
-d4 200
-d4  70
-d4  70
-d4  70
-e4 200
-e4 200
-F4 200
-d4 200
-e4 400
-d4 200
-d4  70
-d4  70
-d4  70
-e4 200
-e4 200
-F4 200
-d4 200
-e4 266
diff --git a/exec/tone/mary.ton b/exec/tone/mary.ton
deleted file mode 100644
index e36108d088..0000000000
--- a/exec/tone/mary.ton
+++ /dev/null
@@ -1,57 +0,0 @@
-: Mary had a little lamb
-s 50
-v  Mar\
-e4 500
-v  y \
-d4 100
-v  had \ 
-c4 300
-v  a \
-d4 300
-v  lit\
-e4 300
-v  tle \
-e4 300
-v  lamb, \
-e4 800
-v  lit\
-d4 300
-v  tle \
-d4 300
-v  lamb, \  
-d4 800
-v  lit\
-e4 300
-v  tle \
-g4 300
-v  lamb.\
-g4 800
-v
-
-v  Mar\
-e4 500
-v  y \
-d4 100
-v  had \  
-c4 300
-v  a \
-d4 300
-v  lit\
-e4 300
-v  tle \
-e4 300
-v  lamb, \ 
-e4 300
-v  her \
-e4 300
-v  fleece \
-d4 300
-v  was \
-d4 300
-v  white \
-e4 300
-v  as \
-d4 300
-v  snow.\
-c4 1000
-v
diff --git a/exec/tone/mountai.ton b/exec/tone/mountai.ton
deleted file mode 100644
index e5e5a9a178..0000000000
--- a/exec/tone/mountai.ton
+++ /dev/null
@@ -1,14 +0,0 @@
-: Comin' round the mountain|
-t  2
-s  5
-d3 106
-e3 106
-g3 106
-g3 106
-g3 106
-g3 106
-e3 106
-d3 106
-b2 106
-d3 106
-g3 320
diff --git a/exec/tone/sakura.ton b/exec/tone/sakura.ton
deleted file mode 100644
index f785f956f4..0000000000
--- a/exec/tone/sakura.ton
+++ /dev/null
@@ -1,17 +0,0 @@
-: Sakura                   |
-s  10
-t  2
-a2 140
-a2 140
-b2 280
-a2 140
-a2 140
-b2 280
-a2 140
-b2 140
-c3 140
-b2 140
-a2 140
-b2 70
-a2 70
-f2 280
diff --git a/exec/tone/sleeping.ton b/exec/tone/sleeping.ton
deleted file mode 100644
index fcd520d2fe..0000000000
--- a/exec/tone/sleeping.ton
+++ /dev/null
@@ -1,42 +0,0 @@
-: Are You Sleeping?        |
-t  2
-s  1
-g3 200
-a3 200
-b3 200
-g3 200
-g3 200
-a3 200
-b3 200
-g3 200
-b3 200
-c4 200
-d4 390
-r  10
-b3 200
-c4 200
-d4 390
-r  10
-d4 100
-e4 100
-d4 100
-c4 100
-b3 200
-g3 190
-r  10
-
-d4 100
-e4 100
-d4 100
-c4 100
-b3 200
-g3 190
-r  10
-
-g3 200
-d3 200
-g3 400
-
-g3 200
-d3 200
-g3 400
diff --git a/exec/tone/susanna.ton b/exec/tone/susanna.ton
deleted file mode 100644
index 526756a0e4..0000000000
--- a/exec/tone/susanna.ton
+++ /dev/null
@@ -1,18 +0,0 @@
-: Oh! Susanna              |
-t  2
-s  5
-g3 100
-a3 100
-b3 133
-d4 133
-d4 133
-e4 133
-d4 133
-b3 133
-g3 160
-a3 100
-b3 133
-b3 133
-a3 133
-g3 133
-a3 200
diff --git a/exec/tone/swinglow.ton b/exec/tone/swinglow.ton
deleted file mode 100644
index 733377797f..0000000000
--- a/exec/tone/swinglow.ton
+++ /dev/null
@@ -1,17 +0,0 @@
-: Swing low, Sweet Chariot |
-t  3
-s  10
-a2 140
-f2 280
-a2 140
-f2 186
-f2 93
-d2 93
-c2 186
-f2 93
-f2 93
-f2 93
-f2 93
-a2 93
-c3 93
-c3 140
diff --git a/exec/tone/symph_40.ton b/exec/tone/symph_40.ton
deleted file mode 100644
index 361ae2c464..0000000000
--- a/exec/tone/symph_40.ton
+++ /dev/null
@@ -1,23 +0,0 @@
-: Symphony #40             |
-t  2
-s  10
-D3 110
-d3 110
-d3 132
-D3 110
-d3 110
-d3 132
-D3 110
-d3 110
-d3 132
-A3 110
-r 82
-A3 110
-a3 110
-g3 132
-g3 110
-f3 110
-D3 132
-D3 110
-d3 110
-c3 132
diff --git a/exec/tone/tdc.ton b/exec/tone/tdc.ton
deleted file mode 100644
index 68979d4dc3..0000000000
--- a/exec/tone/tdc.ton
+++ /dev/null
@@ -1,190 +0,0 @@
-: Twelve days of Christmas
-
-Stacato 5
-Timing	80
-Rest	8
-v	On \
-c4	2
-v	the \
-c4	2
-v	twelfth \
-c4   	4
-v	day \
-f4   	2
-v	of \
-f4   	2
-v	Christ\
-f4   	4
-v	mas \
-e4   	2
-v	my \
-f4   	2
-v	true \
-g4   	2
-v	love \
-a4   	2
-v	gave \
-A4   	2
-v	to \
-g4   	2
-v	me\
-a4   	4
-Rest 	4
-v
-
-v	Twelve \
-c5	2
-v	De\
-c5	2
-v	scrip\
-g4	2
-v	tor \
-a4	2
-v	Type\
-A4	2
-v	-Codes,\
-g4	4
-v
-
-v	E\
-g4	2
-v	lev\
-c5	2
-v	en \
-c5	2
-v	Point\
-g4	2
-v	ers \
-a4   	2
-v	Point\
-A4   	2
-v	ing,\
-g4   	2
-v
-
-v	Ten \
-c5   	4
-v	Pipe\
-g4   	2
-v	lines \ 
-a4   	2
-v	Pip\
-A4   	2
-v	ing,\
-g4   	2
-v
-
-v	Nine \
-c5   	4
-v	Page \
-g4   	2
-v	Frames \
-a4   	2
-v	Pag\
-A4   	2
-v	ing,\
-g4   	2
-v
-
-v	Eight \
-c5	4
-v	Bits \
-g4	2
-v	A\
-a4	2
-v	'Shift\
-A4	2
-v	ing,\
-g4	2
-v
-
-v	Sev\
-c5	2
-v	en \
-c5	2
-v	Swans \
-g4	2
-v	A\
-a4	2
-v	'Swim\
-A4	2
-v	ming,\
-g4	2
-v
-
-v	Six \
-c5	4
-v	Sig\
-g4	2
-v	nals \
-a4	2
-v	Pend\
-A4	2
-v	ing,\
-g4	2
-v
-
-v	FIVE \
-c5	8
-v	TRAP \
-d5	4
-b4	4
-v	GATES!\
-c5	8
-a3	2
-g3	2
-a3	2
-A3	2
-v
-
-v	Four \
-c5	2
-A4	2
-v	Far \
-a4	2
-g4	2
-v	Calls,\
-f4	4
-v
-
-v	Three \
-A4	4
-v	Short \
-d4	4
-v	Jumps,\
-f4	4
-v
-
-v	Two \
-g4	2
-f4	2
-v	Tur\
-e4	2
-v	tle \
-d4	2
-v	Doves,\
-c4	4
-v
-
-v	And \
-a4	2
-v	a \
-A4   	2
-v	Task State \
-c5   	4
-v	Seg\
-d5   	2
-v	ment \
-A4   	2
-v	with \
-a4   	2
-v	a \
-f4   	2
-v	Bit \
-g4   	4
-v	Map\
-f4   	8
-Rest 	4
-v	.\
-f2   	3
-v
diff --git a/exec/tone/trapeze.ton b/exec/tone/trapeze.ton
deleted file mode 100644
index 3312e67891..0000000000
--- a/exec/tone/trapeze.ton
+++ /dev/null
@@ -1,21 +0,0 @@
-: Man on Flying Trapeze    |
-s  5
-f3 220
-f3 220
-A3 220
-c4 220
-d4 220
-D4 220
-d4 220
-d4 220
-c4 220
-g3 220
-c4 440
-e3 220
-f3 220
-a3 220
-A3 220
-c4 220
-d4 220
-c4 220
-A3 440
diff --git a/exec/tone/weasel.ton b/exec/tone/weasel.ton
deleted file mode 100644
index f5215e9bc0..0000000000
--- a/exec/tone/weasel.ton
+++ /dev/null
@@ -1,17 +0,0 @@
-: Pop! Goes the Weasel     |
-s  1
-g2 200
-g2 133
-a2 200
-a2 133
-b2 133
-d3 100
-b2 133
-g2 200
-d2 133
-g2 200
-g2 133
-a2 200
-a2 133
-b2 266
-g2 200
diff --git a/exec/tone/yankee.ton b/exec/tone/yankee.ton
deleted file mode 100644
index 2ba754fc80..0000000000
--- a/exec/tone/yankee.ton
+++ /dev/null
@@ -1,15 +0,0 @@
-: Yankee Doodle            |
-c3 220
-c3 220
-d3 220
-e3 220
-c3 220
-e3 220
-d3 220
-g2 220
-c3 220
-c3 220
-d3 220
-e3 220
-c3 440
-b2 220
diff --git a/exec/type.src b/exec/type.src
deleted file mode 100644
index 7122da9949..0000000000
--- a/exec/type.src
+++ /dev/null
@@ -1,7 +0,0 @@
-# type.src
-
-# $Id$
-
-# @format.tab-size 8, @format.use-tabs true
-
-printfile_str
diff --git a/exec/typehtml.src b/exec/typehtml.src
deleted file mode 100644
index 8455e05d49..0000000000
--- a/exec/typehtml.src
+++ /dev/null
@@ -1,469 +0,0 @@
-# typehtml.c
-
-# Synchronet Baja Modules to Display HTML files to TTY/ANSI users
-
-# $Id$
-
-# Created October 09, 2000 by Rob Swindell
-
-# Requires Baja v2.20+
-
-# @format.tab-size 8, @format.use-tabs true
-
-!include file_io.inc
-!include sbbsdefs.inc
-
-# Color Attributes for HTML type styles
-!define NORMAL		"\1N\1H"
-!define HEADING1	"\1H\1Y"
-!define HEADING2	"\1H\1C"
-!define HEADING3	"\1H\1M"
-!define HEADING4	"\1H\1G"
-!define HEADING5	"\1H\1B"	
-!define HEADING6	"\1H\1R"
-!define BOLD		"\1H\1C\x014"
-!define ITALIC		"\1H\1G\x012"
-!define UNDERLINE	"\1H\1W\x016"
-!define STRIKE_THROUGH	"\1N\1K\x017"
-!define LIST_ITEM 	"    \1H\1Wo \1G"
-
-!define RIGHT_MARGIN	79
-	
-str 	filename		# HTML filename
-str	tmpfname		# Temporary filename
-str	href
-int	i
-int	ch
-int	len
-int	t
-int	start
-int 	htmlfile 
-int	tmpfile
-int	hlevel			# header level
-int	col			# current cursor column
-int	last_line_len		# length of last line printed
-int	lines			# total lines printed
-int	printing		# printing on
-int	newline			# new line read from html file
-
-copy filename str
-
-compare_str ""
-if_true
-	print "usage: typehtml <filename>\r\n"
-	return
-	end_if
-
-# Open HTML input file
-fopen htmlfile O_RDONLY|O_DENYNONE filename
-if_false
-	printf "!Error %d opening %s\r\n" _ERRNO filename
-	return
-	end_if
-
-# Open Ctrl-A output file
-set tmpfname "%gHTML.ASC"
-fopen tmpfile O_WRONLY|O_CREAT|O_TRUNC tmpfname
-if_false
-	printf "!Error %d creating %s\r\n" _ERRNO tmpfname
-	return
-	end_if
-
-set col 0		# reset column counter
-set last_line_len 0	# reset last line length
-set lines 0		# reset line counter
-set printing 1		# printing by default
-
-print "Converting HTML"
-time start
-
-:next_line
-	print "."
-
-	# Read a line 
-	fread_line htmlfile str
-	if_false # end of file
-		fclose htmlfile
-		fclose tmpfile
-		time t
-		sub t start
-#		printf "%d seconds" t
-#		pause
-		cls
-		printfile tmpfname P_NOATCODES
-		return
-		end_if
-
-	set newline 1
-
-	# truncate whitespace off end
-	truncsp str
-
-	# truncate whitespace off front
-	call skip_whitespace
-
-	:next_char
-		compare_first_char str 0
-		if_true
-			goto next_line
-			end_if
-
-		compare_substr str "<"
-		if_false
-			compare col 0
-			if_true
-				call skip_whitespace
-				end_if
-			set i RIGHT_MARGIN
-			sub i col
-			compare i 0
-			if_equal
-				call crlf
-				set i RIGHT_MARGIN
-				end_if
-			strlen len str
-			compare i len
-			if_greater
-				copy i len
-				end_if
-			fprintf tmpfile "%.*s" i str
-			shift_str str i
-			add col i
-			compare col RIGHT_MARGIN
-			if_greater_or_equal
-				call crlf
-				end_if
-			goto next_char
-			end_if
-
-		compare_first_char str '<'
-		if_false
-			compare printing 1
-			if_true
-				# handle word wrap
-				compare newline 1
-				if_equal
-					compare col 0
-					if_not_equal
-						fprintf tmpfile " "	
-						add col 1
-						end_if
-					end_if
-				set newline 0
-
-				# don't start lines with white-space
-				compare col 0
-				if_true
-					compare_first_char str ' '		
-					end_if
-				if_false
-					fwrite tmpfile str 1
-					add col 1
-					compare col RIGHT_MARGIN
-					if_greater_or_equal
-						call crlf
-						end_if
-					end_if
-				end_if
-			shift_str 1
-			goto next_char
-			end_if
-
-		shift_str 1	# skip <
-
-		# Title
-		compare_word "TITLE>"
-		if_true
-			set printing 0
-			call find_close_bracket
-			goto next_char
-			end_if
-		compare_word "/TITLE>"
-		if_true
-			set printing 1
-			call find_close_bracket
-			goto next_char
-			end_if
-
-
-		# List item
-		compare_word "LI>"
-		if_false
-			compare_word "LI "
-			end_if
-		if_true
-			compare col 0
-			if_not_equal
-				call crlf
-				end_if
-			fprintf tmpfile LIST_ITEM
-			set col 6
-			call find_close_bracket
-			goto next_char
-			end_if
-
-		# Strike-through
-		compare_word "S>"
-		if_false
-			compare_word "STRIKE>"
-			end_if
-		if_true
-			fprintf tmpfile STRIKE_THROUGH
-			call find_close_bracket
-			goto next_char
-			end_if
-
-		# Bold
-		compare_word "B>"
-		if_false
-			compare_word "STRONG>"
-			end_if
-		if_true
-			fprintf tmpfile BOLD
-			call find_close_bracket
-			goto next_char
-			end_if
-
-		# Italics
-		compare_word "I>"
-		if_false
-			compare_word "EM>"
-			end_if
-		if_true
-			fprintf tmpfile ITALIC
-			call find_close_bracket
-			goto next_char
-			end_if
-
-		# Underline
-		compare_word "U>"
-		if_false
-			compare_word "U>"
-			end_if
-		if_true
-			fprintf tmpfile UNDERLINE
-			call find_close_bracket
-			goto next_char
-			end_if
-
-
-		# Attribute off
-		compare_word "/S>"
-		if_false
-			compare_word "/STRIKE>"
-			end_if
-		if_false
-			compare_word "/B>"
-			end_if
-		if_false
-			compare_word "/STRONG>"
-			end_if
-		if_false
-			compare_word "/I>"
-			end_if
-		if_false
-			compare_word "/EM>"
-			end_if
-		if_false
-			compare_word "/U>"
-			end_if
-		if_true
-			fprintf tmpfile NORMAL
-			call find_close_bracket
-			goto next_char
-			end_if
-
-		# Table cell
-		compare_word "TD>"
-		if_false
-			compare_word "TD "
-			end_if
-		if_true
-			# visually separate cells
-			compare col 0
-			if_greater
-				fprintf tmpfile " "	
-				add col 1
-				end_if
-			call find_close_bracket
-			goto next_char
-			end_if
-			
-
-		# Dumb CR/LF block	
-		compare_word "BR>"
-		if_false
-			compare_word "BR "
-			end_if
-		if_false
-			compare_word "P>"
-			end_if
-		if_false
-			compare_word "P "
-			end_if
-		if_false
-			compare_word "TR>"
-			end_if
-		if_false
-			compare_word "TR "	
-			end_if
-		if_true
-			call crlf
-			call find_close_bracket
-			goto next_char
-			end_if
-	
-
-		# Intelligent CR/LF block (force single blank line)
-		compare_word "/UL>"
-		if_false
-			compare_word "/OL>"
-			end_if
-		if_false
-			compare_word "/DIR>"
-			end_if
-		if_false
-			compare_word "/MENU>"
-			end_if
-		if_true
-			fprintf tmpfile NORMAL
-			end_if
-		if_false
-			compare_word "H"
-			if_true
-				shift_str 1
-				copy hlevel str
-				compare hlevel 0 
-				if_greater
-					switch hlevel
-						case 1
-							fprintf tmpfile HEADING1
-							end_case
-						case 2
-							fprintf tmpfile HEADING2
-							end_case
-						case 3
-							fprintf tmpfile HEADING3
-							end_case
-						case 4
-							fprintf tmpfile HEADING4
-							end_case
-						case 5
-							fprintf tmpfile HEADING5
-							end_case
-						default
-							fprintf tmpfile HEADING6
-							end_case
-						end_switch
-					setlogic TRUE
-				else
-					setlogic FALSE
-					end_if
-				end_if
-			end_if
-		if_false
-			compare_word "/H"
-			if_true
-				shift_str 2
-				copy hlevel str
-				compare hlevel 0 
-				if_greater
-					fprintf tmpfile NORMAL
-					setlogic TRUE
-				else
-					setlogic FALSE
-					end_if					
-				end_if
-			end_if
-		if_true
-			compare lines 0
-			if_equal
-				compare col 0
-				end_if
-			if_greater
-				compare last_line_len 0
-				if_equal
-					compare col 0
-					end_if
-				if_not_equal
-					call crlf
-					call crlf
-					end_if
-				end_if
-			call find_close_bracket
-			goto next_char
-			end_if
-		
-		# Hyper-link
-		compare_word "A HREF="
-		if_true
-			shift_str 7
-			set href ""
-			:copy_href
-				compare_first_char str '>'
-				if_false
-					copy_first_char ch str
-					strcat href ch
-					shift_str 1
-					goto copy_href
-					end_if
-			end_if
-
-		# Show hyper-link
-		compare_word "/A>"
-		if_true
-			compare href ""
-			if_false
-				strlen i href
-				add i 3
-				add col i
-				compare col RIGHT_MARGIN
-				if_equal_or_greater
-					call crlf
-					sub i 1
-					copy col i
-				else
-					fprintf tmpfile " "
-					end_if					
-				fprintf tmpfile "<%s>" href
-				end_if
-			set href ""
-			end_if
-
-		call find_close_bracket
-		goto next_char
-			
-return
-
-# Carriage-return/Line-feed with column reset
-:crlf
-	copy last_line_len col
-	fprintf tmpfile "\r\n"
-	set col 0
-	add lines 1
-	return
-
-# Shift str past first close bracket
-:find_close_bracket
-	compare_first_char str 0
-	if_true
-		return
-		end_if
-
-	compare_first_char str '>'
-	shift_str 1
-	if_false
-		goto find_close_bracket
-		end_if	
-	return
-
-:skip_whitespace
-	compare_first_char str ' '
-	if_false
-		compare_first_char str '\t'
-		end_if
-	if_true
-		shift_str 1
-		goto skip_whitespace
-		end_if
-	return
diff --git a/exec/unixgate.src b/exec/unixgate.src
deleted file mode 100644
index cc7df5d8cc..0000000000
--- a/exec/unixgate.src
+++ /dev/null
@@ -1,15 +0,0 @@
-# unixgate.src
-
-# Telnet Gateway for Unix servers - Requires v3.00c
-
-# $Id$
-
-# @format.tab-size 8, @format.use-tabs true
-
-!include sbbsdefs.inc
-
-printf "\r\n\1h\1hPress \1yCtrl-]\1w for a control menu anytime.\r\n\r\n"
-pause
-printf "\1h\1yConnecting to: \1w%s\1n\r\n" str
-telnet_gate str TG_PASSTHRU
-cls
diff --git a/exec/userdefs.inc b/exec/userdefs.inc
deleted file mode 100644
index d90c38993d..0000000000
--- a/exec/userdefs.inc
+++ /dev/null
@@ -1,160 +0,0 @@
-# userdefs.inc
-
-# Baja include file defining various Synchronet USER related constants
-
-# $id$
-
-# @format.tab-size 8, @format.use-tabs true
-
-!define LEN_ALIAS	25	# User alias
-!define LEN_NAME        25      # User name
-!define LEN_HANDLE       8      # User chat handle
-!define LEN_NOTE        30      # User note
-!define LEN_COMP        30      # User computer description
-!define LEN_COMMENT     60      # User comment
-!define LEN_NETMAIL     60      # NetMail forwarding address
-!define LEN_PASS         8      # User password
-!define LEN_PHONE       12      # User phone number
-!define LEN_BIRTH        8      # Birthday in MM/DD/YY format
-!define LEN_ADDRESS     30      # User address
-!define LEN_LOCATION    30      # Location (City, State
-!define LEN_ZIPCODE     10      # Zip/Postal code
-!define LEN_MODEM        8      # User modem type description
-
-#**************************************************************************
-# This is a list of offsets into the USER.DAT file for different variables
-# that are stored (for each user
-#**************************************************************************
-!define U_ALIAS 	0			# Offset to alias
-!define U_NAME		U_ALIAS+LEN_ALIAS	# Offset to name
-!define U_HANDLE	U_NAME+LEN_NAME
-!define U_NOTE		U_HANDLE+LEN_HANDLE+2
-!define U_COMP		U_NOTE+LEN_NOTE
-!define U_COMMENT	U_COMP+LEN_COMP+2
-
-!define U_NETMAIL	U_COMMENT+LEN_COMMENT+2
-
-!define U_ADDRESS	U_NETMAIL+LEN_NETMAIL+2
-!define U_LOCATION	U_ADDRESS+LEN_ADDRESS
-!define U_ZIPCODE	U_LOCATION+LEN_LOCATION
-
-!define U_PASS		U_ZIPCODE+LEN_ZIPCODE+2
-!define U_PHONE 	U_PASS+8		# Offset to phone-number
-!define U_BIRTH 	U_PHONE+12		# Offset to users birthday
-!define U_MODEM 	U_BIRTH+8
-!define U_LASTON	U_MODEM+8
-!define U_FIRSTON	U_LASTON+8
-!define U_EXPIRE	U_FIRSTON+8
-!define U_PWMOD 	U_EXPIRE+8
-
-!define U_LOGONS	U_PWMOD+8+2
-!define U_LTODAY	U_LOGONS+5
-!define U_TIMEON	U_LTODAY+5
-!define U_TEXTRA	U_TIMEON+5
-!define U_TTODAY	U_TEXTRA+5
-!define U_TLAST 	U_TTODAY+5
-!define U_POSTS 	U_TLAST+5
-!define U_EMAILS	U_POSTS+5
-!define U_FBACKS	U_EMAILS+5
-!define U_ETODAY	U_FBACKS+5
-!define U_PTODAY	U_ETODAY+5
-
-!define U_ULB		U_PTODAY+5+2
-!define U_ULS		U_ULB+10
-!define U_DLB		U_ULS+5
-!define U_DLS		U_DLB+10
-!define U_CDT		U_DLS+5
-!define U_MIN		U_CDT+10
-
-!define U_LEVEL 	U_MIN+10+2		# Offset to Security Level
-!define U_FLAGS1	U_LEVEL+2		# Offset to Flags
-!define U_TL		U_FLAGS1+8		# Offset to unused field
-!define U_FLAGS2	U_TL+2
-!define U_EXEMPT	U_FLAGS2+8
-!define U_REST		U_EXEMPT+8
-!define U_ROWS		U_REST+8+2	# Number of Rows on user's monitor
-!define U_SEX		U_ROWS+2	# Sex, Del, ANSI, color etc.
-!define U_MISC		U_SEX+1 	# Miscellaneous flags in 8byte hex
-!define U_OLDXEDIT	U_MISC+8	# External editor  Version 1 method
-!define U_LEECH 	U_OLDXEDIT+2	# two hex digits - leech attempt count
-!define U_CURSUB	U_LEECH+2	# Current sub  internal code
-!define U_CURDIR	U_CURSUB+8	# Current dir  internal code
-!define U_CMDSET	U_CURDIR+8	# unused
-!define U_MAIN_CMD	U_CMDSET+2+2	# unused
-!define U_XFER_CMD	U_MAIN_CMD+40	# unused
-!define U_SCAN_CMD	U_XFER_CMD+40+2 # unused
-!define U_MAIL_CMD	U_SCAN_CMD+40	# unused
-!define U_FREECDT	U_MAIL_CMD+40+2
-!define U_FLAGS3	U_FREECDT+10	# Flag set #3
-!define U_FLAGS4	U_FLAGS3+8	# Flag set #4
-!define U_XEDIT 	U_FLAGS4+8	# External editor  code
-!define U_SHELL 	U_XEDIT+8	# Command shell  code
-!define U_QWK		U_SHELL+8	# QWK settings
-!define U_TMPEXT	U_QWK+8 	# QWK extension
-!define U_CHAT		U_TMPEXT+3	# Chat settings
-!define U_NS_TIME	U_CHAT+8	# New-file scan date/time
-!define U_PROT		U_NS_TIME+8	# Default transfer protocol
-!define U_UNUSED	U_PROT+1
-!define U_LEN		U_UNUSED+28+2
-
-
-!define UM_DELETED	.0	# Bit values for user.misc
-!define UM_ANSI 	.1	# Supports ANSI terminal emulation
-!define UM_COLOR	.2	# Send color codes
-!define UM_RIP		.3	# Supports RIP terminal emulation
-!define UM_UPAUSE	.4	# Pause on every screen full
-!define UM_SPIN 	.5	# Spinning cursor - Same as K_SPIN
-!define UM_INACTIVE	.6	# Inactive user slot
-!define UM_EXPERT	.7	# Expert menu mode
-!define UM_ANFSCAN	.8	# Auto New file scan
-!define UM_CLRSCRN	.9	# Clear screen before each message
-!define UM_QUIET	.10	# Quiet mode upon logon
-!define UM_BATCHFLAG	.11	# File list allow batch dl flags
-!define UM_NETMAIL	.12	# Forward e-mail to fidonet addr
-!define UM_CURSUB	.13	# Remember current sub-board/dir
-!define UM_ASK_NSCAN	.14	# Ask for newscanning upon logon
-!define UM_NO_EXASCII	.15	# Don't send extended ASCII
-!define UM_ASK_SSCAN	.16	# Ask for messages to you at logon
-!define UM_AUTOTERM	.17	# Autodetect terminal type
-!define UM_COLDKEYS	.18	# No hot-keys
-!define UM_EXTDESC	.19	# Extended file descriptions
-!define UM_AUTOHANG	.20	# Auto-hang-up after transfer
-!define UM_WIP		.21	# Supports WIP terminal emulation
-                                # Bits in user.qwk
-!define QWK_FILES	.0	# Include new files list
-!define QWK_EMAIL	.1	# Include unread e-mail
-!define QWK_ALLMAIL	.2	# Include ALL e-mail
-!define QWK_DELMAIL	.3	# Delete e-mail after download
-!define QWK_BYSELF	.4	# Include messages from self
-!define QWK_UNUSED	.5	# Currently unused
-!define QWK_EXPCTLA	.6	# Expand ctrl-a codes to ascii
-!define QWK_RETCTLA	.7	# Retain ctrl-a codes
-!define QWK_ATTACH	.8	# Include file attachments
-!define QWK_NOINDEX	.9	# Do not create index files in QWK
-!define QWK_TZ		.10	# Include "@TZ" time zone in msgs
-!define QWK_VIA 	.11	# Include "@VIA" seen-bys in msgs
-!define QWK_NOCTRL	.12	# No extraneous control files
-                                # Bits in user.chat
-!define CHAT_ECHO	.0	# Multinode chat echo
-!define CHAT_ACTION	.1	# Chat actions
-!define CHAT_NOPAGE	.2	# Can't be paged
-!define CHAT_NOACT	.3	# No activity alerts
-!define CHAT_SPLITP	.4	# Split screen private chat
-
-                                # For use with SET_USER_STRING function
-!define USER_STRING_ALIAS	0
-!define USER_STRING_REALNAME	1
-!define USER_STRING_HANDLE	2
-!define USER_STRING_COMPUTER	3
-!define USER_STRING_NOTE	4
-!define USER_STRING_ADDRESS	5
-!define USER_STRING_LOCATION	6
-!define USER_STRING_ZIPCODE	7
-!define USER_STRING_PASSWORD	8
-!define USER_STRING_BIRTHDAY	9
-!define USER_STRING_PHONE	10
-!define USER_STRING_MODEM	11
-!define USER_STRING_COMMENT	12
-!define USER_STRING_NETMAIL	13	# Requires v3 (03/02/00) or later
-
-# End of USERDEFS.INC
diff --git a/exec/userlist.js b/exec/userlist.js
deleted file mode 100644
index 096220deb5..0000000000
--- a/exec/userlist.js
+++ /dev/null
@@ -1,18 +0,0 @@
-load("sbbsdefs.js");
-
-var lastuser=system.stats.total_users;
-var user = new User(1);
-
-for(i=1;i<=lastuser;i++) {
-	user.number=i;
-	if(user.settings&USER_DELETED)
-		continue;
-	printf("%d/%d ",i,lastuser);
-	printf("%-30s %-30s %s\r\n"
-		,user.alias
-		,user.location
-		,user.connection
-		);
-	if(bbs.sys_status&SS_ABORT)
-		break;
-}	
\ No newline at end of file
diff --git a/exec/wildcat.src b/exec/wildcat.src
deleted file mode 100644
index 6bcd1aefdf..0000000000
--- a/exec/wildcat.src
+++ /dev/null
@@ -1,645 +0,0 @@
-# wildcat.src
-
-# $id$
-
-# @format.tab-size 8, @format.use-tabs true
-
-!include sbbsdefs.inc
-
-:main
-cmd_home
-async
-compare_ars expert
-if_false
-	clear_abort
-	menu WILDCAT\MAIN
-	print "\r\nwhCommand >>? n"
-else
-	print "\r\nyh@GRP@ @SUB@, wMAIN MENUy: ? n"
-	end_if
-
-node_action node_main
-
-getcmd 1AEMHUQCNFTJGPIYWVSBDR?\r
-
-# Write command to log file
-logkey_comma
-
-# Commands
-cmdkey ?
-	compare_ars expert
-	if_true
-		menu WILDCAT\MAIN
-		end_if
-	end_cmd
-cmdkey M
-	cmd_pop
-	goto message
-	end_cmd
-cmdkey U
-	print "\r\nchList Users\r\n"
-	mnemonics "\r\n~Logons Today, ~Sub-board, or ~All: "
-	getcmd LSA\r
-	cmdkey L
-		userlist_logons
-		end_cmd
-	cmdkey S
-		userlist_sub
-		end_cmd
-	cmdkey A
-		userlist_all
-		end_cmd
-	end_cmd
-
-cmdkey N
-	menu LOGON
-	pause
-	end_cmd
-
-cmdkey C
-	setstr "1"
-	mail_send_feedback
-	end_cmd
-cmdkey F
-	cmd_pop
-	goto transfers
-	end_cmd
-cmdkey T
-	chat_section
-	end_cmd
-cmdkey J
-	msg_select_area
-	end_cmd
-cmdkey G
-	file_download_batch
-	if_true
-		end_cmd
-                end_if
-	compare_ars expert
-	if_false
-		logoff
-	else
-		logoff_fast
-		end_if
-	end_cmd
-
-cmdkey P
-	page_sysop
-	pause
-	end_cmd
-
-cmdkey I
-	menu ..\ANSWER
-	pause
-	end_cmd
-
-cmdkey Y
-	user_defaults
-	end_cmd
-
-cmdkey W
-	nodelist_users
-	crlf
-	pause
-	end_cmd
-
-cmdkey S
-	info_system
-	crlf
-	pause
-	end_cmd
-
-cmdkey B
-	text_file_section
-	end_cmd
-
-cmdkey D
-	xtrn_section
-	end_cmd
-
-cmdkey E
-	call E-mail
-	end_cmd
-
-cmdkey A
-	auto_message
-	end_cmd
-
-cmdkey V
-	print "\r\nyhUsername search string: w"
-	getname 25
-	finduser
-	if_true
-		print "yhVerified: w"
-		printstr
-		crlf
-		end_if
-	end_cmd
-
-cmdkey H
-	toggle_user_misc UM_EXPERT
-	print "\r\nExpert mode is now: "
-	compare_ars EXPERT
-	if_true
-		print "ON"
-	else
-		print "OFF"
-		end_if
-	crlf
-        end_cmd
-
-cmdkey 1
-	compare_ars SYSOP or exempt Q or I or N
-	if_true
-		cmd_pop
-		goto sysop
-		end_if
-	end_cmd
-
-cmdkey R
-	info_user
-	pause
-	end_cmd
-
-end_cmd
-
-############################### E-mail Section ################################
-
-:e-mail
-cmd_home
-compare_ars expert
-if_false
-	menu E-MAIL
-	end_if
-async
-print "\r\nyhE-mail: n"
-getcmd ?SRFNUKQ\r
-logkey
-
-cmdkey ?
-	compare_ars expert
-	if_true
-		menu E-MAIL
-		end_if
-	end_cmd
-
-cmdkey S
-	print "_\r\nbhE-mail (User name or number): w"
-	getname 25
-	compare_str ""
-	if_true
-		end_cmd
-		end_if
-	compare_str "SYSOP"
-	if_true
-		setstr "1"
-		end_if
-	mail_send
-	end_cmd
-
-cmdkey U
-	print "_\r\nbhE-mail (User name or number): w"
-	getname 25
-	compare_str ""
-	if_true
-		end_cmd
-		end_if
-	compare_str "SYSOP"
-	if_true
-		setstr "1"
-		end_if
-	mail_send_file
-        end_cmd
-
-cmdkey R
-	mail_read
-	end_cmd
-
-cmdkey F
-	setstr "1"
-	mail_send_feedback
-	end_cmd
-
-cmdkey N
-	no_yes "\r\nAttach a file"
-	if_true
-		mail_send_netmail
-	else
-		mail_send_netfile
-		end_if
-	end_cmd
-
-cmdkey K
-	mail_read_sent
-	end_cmd
-
-cmdkey Q
-	cmd_pop
-	return
-	end_cmd
-
-cmd_pop
-return
-
-################################ File Section #################################
-
-:transfers
-cmd_home
-async
-compare_ars expert
-if_false
-	clear_abort
-	menu WILDCAT\FILE
-	print "\r\nwhCommand >>? n"
-else
-	print "\r\nyh@LIB@ @DIR@, wFILE MENUy: ? n"
-	end_if
-
-# Update node status
-node_action node_xfer
-getcmd 1QLDUNVMSGPIJEFH?\r
-logkey_comma
-
-cmdkey ?
-	compare_ars expert
-	if_true
-		menu WILDCAT\FILE
-		end_if
-	end_cmd
-
-cmdkey H
-	toggle_user_misc UM_EXPERT
-	print "\r\nExpert mode is now: "
-	compare_ars EXPERT
-	if_true
-		print "ON"
-	else
-		print "OFF"
-		end_if
-	crlf
-        end_cmd
-
-cmdkey Q
-	cmd_pop
-	goto main
-	end_cmd
-
-cmdkey L
-	setstr "*.*"
-	file_list
-        end_cmd
-
-cmdkey D
-	print "\r\nchDownload File(s)\r\n"
-	file_download_batch
-	if_true
-		end_cmd
-                end_if
-	getfilespec
-	if_true
-		file_download
-		end_if
-        end_cmd
-
-cmdkey U
-	print "\r\nchUpload File\r\n"
-	chkfile "..\text\menu\upload.*"
-	if_true
-		menu upload
-                end_if
-	file_upload
-	end_cmd
-
-cmdkey N
-	print "\r\nbhUse c@NEWFILETIME@b for new file scan date/time"
-	yes_no ""
-	if_false
-		file_ptrs_cfg
-		if_false
-			end_cmd
-			end_if
-		end_if
-	file_new_scan
-	end_cmd
-
-cmdkey V
-	print "\r\nchView File(s)\r\n"
-	getfilespec
-	if_true
-		file_view
-		end_if
-        end_cmd
-
-cmdkey M
-	cmd_pop
-	goto message
-	end_cmd
-
-cmdkey S
-	print "\r\nchSearch for Filename(s)\r\n"
-	file_find_name
-        end_cmd
-
-cmdkey G
-	file_download_batch
-	if_true
-		end_cmd
-                end_if
-	compare_ars expert
-	if_false
-		logoff
-	else
-		logoff_fast
-		end_if
-	end_cmd
-
-cmdkey P
-	info_user
-	pause
-	end_cmd
-
-cmdkey I
-	print "\r\nchList Extended File Information\r\n"
-	getfilespec
-	if_true
-		file_list_extended
-		end_if
-        end_cmd
-
-cmdkey J
-	file_select_area
-        end_cmd
-
-cmdkey E
-	file_batch_section
-        end_cmd
-
-cmdkey F
-	info_xfer_policy
-	pause
-	cls
-	info_directory
-	end_cmd
-
-cmdkey 1
-	compare_ars SYSOP or exempt Q or I or N
-	if_true
-		cmd_pop
-		goto sysop
-		end_if
-        end_cmd
-
-end_cmd
-
-############################### Message Section ###############################
-
-:message
-cmd_home
-async
-compare_ars expert
-if_false
-	clear_abort
-	menu WILDCAT\MSG
-	print "\r\nwhCommand >>? n"
-else
-	print "\r\nyh@GRP@ @SUB@, wMESSAGE MENUy: ? n"
-	end_if
-
-# Update node status
-node_action node_main
-getcmd 1GREFSQCUHJT?\r
-logkey_comma
-
-cmdkey ?
-	compare_ars expert
-	if_true
-		menu WILDCAT\MSG
-		end_if
-	end_cmd
-
-cmdkey Q
-	cmd_pop
-	goto main
-	end_cmd
-
-cmdkey R
-	cmd_home
-	print "n\r\nyhReading Messages: [wNy]ew messages, [wSy]earch, "
-	print "[wUy]nread personal,\r\n"
-	print "[wJy]oin, or [wENTERy] to quit? "
-	getstr 5
-	logkey
-
-	cmdstr N
-		msg_new_scan
-		end_cmd
-
-	cmdstr S
-		msg_find_text
-		end_cmd
-
-	cmdstr U
-		msg_your_scan
-		end_cmd
-
-	cmdstr J
-		msg_select_area
-		end_cmd
-
-	cmdstr ""
-		cmd_pop
-		end_cmd
-	print "Invalid command.\r\n"
-	cmd_pop
-	end_cmd
-
-cmdkey E
-	msg_select_area
-	if_true
-		msg_post
-		end_if
-	end_cmd
-
-cmdkey F
-	cmd_pop
-	goto transfers
-	end_cmd
-
-cmdkey S
-	print "\r\nchSearch for Text in Messages\r\n"
-	msg_find_text
-        end_cmd
-
-cmdkey C
-	print "\r\nchCheck for Messages Posted to You\r\n"
-	msg_your_scan
-        end_cmd
-
-cmdkey U
-	cmd_home
-	compare_ars expert
-	if_false
-		menu MAINCFG
-		end_if
-	async
-	print "\r\nyhConfig: n"
-	getcmd ?QNPIS
-	logkey
-
-	cmdkey ?
-		compare_ars expert
-		if_true
-			menu MAINCFG
-			end_if
-		end_cmd
-
-	cmdkey N
-		msg_new_scan_cfg
-		end_cmd
-
-	cmdkey S
-		msg_your_scan_cfg
-		end_cmd
-
-	cmdkey P
-		msg_ptrs_cfg
-		end_cmd
-
-	cmdkey I
-		msg_ptrs_reinit
-		end_cmd
-
-	cmdkey Q
-		cmd_pop
-		end_cmd
-
-	end_cmd
-
-cmdkey H
-	toggle_user_misc UM_EXPERT
-	print "\r\nExpert mode is now: "
-	compare_ars EXPERT
-	if_true
-		print "ON"
-	else
-		print "OFF"
-		end_if
-	crlf
-        end_cmd
-
-cmdkey J
-	msg_select_area
-        end_cmd
-
-cmdkey T
-	msg_qwk
-        end_cmd
-
-cmdkey G
-	file_download_batch
-	if_true
-		end_cmd
-                end_if
-	compare_ars expert
-	if_false
-		logoff
-	else
-		logoff_fast
-		end_if
-        end_cmd
-
-cmdkey 1
-	compare_ars SYSOP or exempt Q or I or N
-	if_true
-		cmd_pop
-		goto sysop
-		end_if
-        end_cmd
-
-end_cmd
-
-################################ Sysop Section ################################
-
-:sysop
-cmd_home
-async
-compare_ars expert
-if_false
-	clear_abort
-	menu WILDCAT\SYSOP
-	print "\r\nwhCommand >>? n"
-else
-	print "\r\nyh@GRP@ @SUB@, wSYSOP MENUy: ? n"
-	end_if
-
-# Update node status
-node_action node_main
-getcmd JUQ?NFD1G2A\r
-logkey_comma
-
-cmdkey ?
-	compare_ars expert
-	if_true
-		menu WILDCAT\SYSOP
-		end_if
-	end_cmd
-
-cmdkey J
-	msg_select_area
-        end_cmd
-
-cmdkey U
-	chksyspass
-	if_true
-		setstr "1"
-		user_edit
-		end_if
-	end_cmd
-
-cmdkey Q
-	cmd_pop
-	goto main
-	end_cmd
-
-cmdkey F
-	cmd_pop
-	goto transfers
-	end_cmd
-
-cmdkey D
-	chksyspass
-	if_true
-		exec_int command
-		end_if
-	end_cmd
-
-cmdkey 1
-	cmd_pop
-	goto message
-	end_cmd
-
-cmdkey G
-	file_download_batch
-	if_true
-		end_cmd
-                end_if
-	compare_ars expert
-	if_false
-		logoff
-	else
-		logoff_fast
-		end_if
-        end_cmd
-
-cmdkey 2
-	cmd_pop
-	goto transfers
-	end_cmd
-
-cmdkey A
-	exec_int command /c %!SLOG
-	end_cmd
-
-end_cmd
-
-
diff --git a/exec/wiplogin.src b/exec/wiplogin.src
deleted file mode 100644
index d4f3152e3e..0000000000
--- a/exec/wiplogin.src
+++ /dev/null
@@ -1,126 +0,0 @@
-# wiplogin.src
-
-# $Id$
-
-# ANSWER.WIP requires button press
-
-# @format.tab-size 8, @format.use-tabs true
-
-!include sbbsdefs.inc
-
-getkey
-
-#########################
-# TEXT.DAT Replacements #
-#########################
-
-replace_text 48  "@MENU:NUMBER@"
-replace_text 83  "@MENU:NUMBER@"
-replace_text 86  "@MENU:NUMBER@"
-replace_text 87  "@MENU:NUMBER@"
-replace_text 268 ""
-replace_text 292 ""
-replace_text 384 "@MENU:NUMBER@"
-replace_text 494 "@MENU:KEYBOARD@"
-replace_text 503 "@MENU:NUMBER@"
-replace_text 506 ""
-replace_text 559 "@MENU:YESNO@"
-replace_text 560 ""
-replace_text 561 ""
-replace_text 562 "@MENU:NOYES@"
-replace_text 563 "@MENU:PAUSE@"
-replace_text 570 ""
-replace_text 652 "@MENU:NUMBER@"
-replace_text 653 "@MENU:NUMBER@"
-replace_text 654 "@MENU:NUMBER@"
-replace_text 655 "@MENU:NUMBER@"
-
-##############
-# Login Menu #
-##############
-
-int c m
-
-:top
-compare c 10
-if_greater_or_equal
-	hangup
-	return
-	end_if
-
-cmd_home
-clear_abort
-cls
-printfile "%zmenu/login.wip"
-sync
-print_local "\r\n[WIP] Login Menu: "
-
-getkey
-logkey_comma
-
-cmdkey L
-	print_local "Login\r\n"
-	print_local "Enter name: "
-	printfile "%zmenu/namepass.wip"
-	getstr str 25 K_UPRLWR|K_LOWPRIO|K_NOECHO
-	truncsp str
-	compare_str ""
-	if_true
-		add c 1
-		end_cmd
-		end_if
-	print_local "Password: "
-	login ""
-	getkey
-	if_true
-		logon
-		if_true
-			return
-			end_if
-		end_if
-	pause
-	add c 2
-	end_cmd
-
-cmdkey N
-	print_local "New\r\n"
-	setstr "%q"
-	compare_str "VERT"
-	if_true
-		yes_no "Are you calling just to download Synchronet BBS software"
-		if_true
-			setstr "Guest"
-			login "Password: "
-			if_true
-				logon
-				if_true
-					return
-					end_if
-				end_if
-			end_if
-		end_if
-	newuser
-	logon
-	return
-	end_cmd
-
-cmdkey G
-	print_local "Guest\r\n"
-	setstr "guest"
-	login "Password: "
-	if_true
-		logon
-		if_true
-			return
-			end_if
-		end_if
-	end_cmd
-
-cmdkey H
-	print_local "Hang-up\r\n"
-	hangup
-	return
-	end_cmd
-
-end_cmd
-
diff --git a/exec/wipshell.src b/exec/wipshell.src
deleted file mode 100644
index e9bd26cfa6..0000000000
--- a/exec/wipshell.src
+++ /dev/null
@@ -1,378 +0,0 @@
-# wipshell.src
-
-# WIP Windows Interface Protocol {tm} Durand Communications Networks, Inc.
-# Command Shell for Synchronet Multinode BBS Software
-
-# $Id$
-
-# @format.tab-size 8, @format.use-tabs true
-
-!include sbbsdefs.inc
-
-compare_user_misc UM_COLDKEYS
-if_true
-	toggle_user_misc UM_COLDKEYS
-	end_if
-
-str tmp
-
-cmd_home
-clear_abort
-cls
-printfile_remote "%zmenu/wipmain.wip"
-node_action NODE_MAIN
-inc_main_cmds
-sync
-print_local "[WIP] Main Menu: "
-
-getkey
-logkey_comma
-
-cmdkey C
-	print_local "Chat\r\n"
-        exec_bin chat_sec
-        end_cmd
-
-cmdkey D
-	print_local "Default Settings\r\n"
-        user_defaults
-        end_cmd
-
-cmdkey E
-	print_local "E-mail\r\n"
-	cmd_home
-	clear_abort
-	cls
-	printfile_remote "%zmenu/e-mail.wip"
-	sync
-	print_local "\r\n[WIP] E-mail Menu: "
-	getkey
-	logkey
-	cmdkey S
-		print_local "Send\r\n"
-		call sendmail
-		end_cmd
-	cmdkey F
-		print_local "Feedback\r\n"
-		setstr "1"
-		mail_send
-		end_cmd
-	cmdkey R
-		print_local "Read\r\n"
-		mail_read
-		end_cmd
-	cmdkey K
-		print_local "Kill\r\n"
-		mail_read_sent
-		end_cmd
-	cmdkey N
-		print_local "NetMail\r\n"
-		call sendnetmail
-		end_cmd
-	cmdkey Q
-		print_local "Quit\r\n"
-		cmd_pop
-		end_cmd
-	end_cmd
-
-cmdkey I
-	print_local "Info\r\n"
-	cmd_home
-	clear_abort
-	cls
-	printfile_remote "%zmenu/info.wip"
-	sync
-	print_local "\r\n[WIP] Info Menu: "
-	getkey
-	logkey
-	cmdkey T
-		print_local "Text Files\r\n"
-		text_file_section
-		end_cmd
-	cmdkey I
-		print_local "System\r\n"
-		info_system
-		end_cmd
-	cmdkey Y
-		print_local "Your Stats\r\n"
-		info_user
-		end_cmd
-	cmdkey L
-		print_local "Callers\r\n"
-		userlist_logons
-		end_cmd
-	cmdkey U
-		print_local "User List\r\n"
-		userlist_all
-                end_cmd
-	cmdkey Q
-		print_local "Quit\r\n"
-		cmd_pop
-		end_cmd
-	end_cmd
-
-cmdkey M
-	print_local "Messages\r\n"
-	cmd_home
-	clear_abort
-	cls
-	printfile_remote "%zmenu/msgs.wip"
-	sync
-	print_local "\r\n[WIP] Messages Menu: "
-	getkey
-	logkey
-	cmdkey C
-		print_local "Configure\r\n"
-		call msg_cfg
-		end_cmd
-	cmdkey R
-		print_local "Read\r\n"
-		msg_select_area
-		if_true
-			msg_read
-			end_if
-                end_cmd
-	cmdkey N
-		print_local "New Scan\r\n"
-		msg_new_scan_all
-                end_cmd
-	cmdkey P
-		print_local "Post\r\n"
-		msg_select_area
-		if_true
-			msg_post
-			end_if
-		end_cmd
-	cmdkey Q
-		print_local "QWK\r\n"
-		msg_qwk
-		end_cmd
-	cmdkey X
-		print_local "Quit\r\n"
-		cmd_pop
-		end_cmd
-	end_cmd
-
-
-cmdkey O
-	print_local "Logoff\r\n"
-	call logoffbbs
-	end_cmd
-
-cmdkey S
-	print_local "Match Maker\r\n"
-	exec_xtrn SMM
-	end_cmd
-
-cmdkey X
-	print_local "Doors\r\n"
-        xtrn_section
-        end_cmd
-
-cmdkey F
-	call file_transfers
-	end_cmd
-
-end_cmd
-
-# End of main menu loop
-
-:sendmail
-print "\r\nbhSend E-mail to (User name or number): n"
-getname 25
-compare_str ""
-if_true
-	return
-	end_if
-compare_str "SYSOP"
-if_true
-	setstr "1"
-	end_if
-no_yes "\r\nAttach a file"
-if_false
-	mail_send_file
-else
-	mail_send
-	end_if
-return
-
-:sendnetmail
-no_yes "\r\nAttach a file"
-if_false
-	mail_send_netfile
-else
-	mail_send_netmail
-	end_if
-return
-
-:msg_cfg
-cmd_home
-clear_abort
-cls
-printfile "%zmenu/msgcfg.wip"
-sync
-print_local "\r\n[WIP] Message Scan Config: "
-getkey
-logkey
-cmdkey N
-	print_local "New Scan\r\n"
-	msg_new_scan_cfg
-	end_cmd
-
-cmdkey P
-	print_local "Pointers\r\n"
-	msg_ptrs_cfg
-	end_cmd
-
-cmdkey I
-	print_local "Re-init\r\n"
-	msg_ptrs_reinit
-	end_cmd
-cmd_pop
-return
-
-:file_transfers
-
-cmd_home
-clear_abort
-cls
-printfile_remote "%zmenu/wipfile.wip"
-node_action NODE_XFER
-inc_file_cmds
-sync
-print_local "[WIP] File Menu: "
-
-getkey
-logkey_comma
-
-cmdkey B
-	print_local "Batch\r\n"
-	file_batch_section
-	end_cmd
-
-cmdkey C
-	print_local "Config\r\n"
-	menu XFERCFG
-	async
-	print "\r\nyhConfig: n"
-	getcmd ?QBEP\r
-	logkey
-
-	cmdkey P
-		file_ptrs_cfg
-		end_cmd
-
-	cmdkey B
-		toggle_user_misc UM_BATCHFLAG
-		end_cmd
-
-	cmdkey E
-		toggle_user_misc UM_EXTDESC
-                end_cmd
-        end_cmd
-
-
-cmdkey D
-	print_local "Download\r\n"
-	file_download_batch
-	if_true
-		end_cmd
-		end_if
-	getfilespec
-	if_true
-		file_download
-		end_if
-        end_cmd
-
-cmdkey E
-	print_local "File Info\r\n"
-	getfilespec
-	if_true
-		file_list_extended
-		end_if
-        end_cmd
-
-cmdkey F
-	print_local "Find Text\r\n"
-	file_find_text_all
-	end_cmd
-
-cmdkey L
-	print_local "List Files\r\n"
-	file_select_area
-	if_false
-		end_cmd
-		end_if
-	setstr "*.*"
-	file_list
-        end_cmd
-
-cmdkey N
-	print_local "New Files\r\n"
-	date_str tmp _ns_time
-	sprintf str "bhUse c%sb for new file scan date/time" tmp
-	yes_no "%s"
-	if_false
-		file_ptrs_cfg
-		if_false
-			end_cmd
-			end_if
-		end_if
-	file_new_scan_all
-	end_cmd
-
-cmdkey R
-	print_local "Remove Files\r\n"
-	getfilespec
-	if_true
-		file_remove
-		end_if
-        end_cmd
-
-cmdkey S
-	print_local "Search for Filename\r\n"
-	file_find_name_all
-        end_cmd
-
-cmdkey U
-	print_local "Upload\r\n"
-	no_yes "Upload file to Sysop only"
-	if_false
-		file_upload_user
-		end_cmd
-		end_if
-	file_select_area
-	if_false
-		end_cmd
-		end_if
-	chkfile "%ztext/menu/upload.*"
-	if_true
-		menu upload
-                end_if
-	file_upload
-        end_cmd
-
-cmdkey V
-	print_local "View file\r\n"
-	getfilespec
-	if_true
-		file_view
-		end_if
-        end_cmd
-cmdpop
-return
-
-
-
-:logoffbbs
-file_download_batch
-if_false
-	logoff
-	end_if
-return
-
-
-
-# End of WIPSHELL.SRC
-
-
diff --git a/exec/yesnobar.src b/exec/yesnobar.src
deleted file mode 100644
index 6f9603a636..0000000000
--- a/exec/yesnobar.src
+++ /dev/null
@@ -1,58 +0,0 @@
-# yesnobar.src
-
-# Sep 28 1995 - Digital Man
-
-# $id $
-
-# @format.tab-size 8, @format.use-tabs true
-
-!include sbbsdefs.inc # _question
-
-str tmp
-
-copy tmp str
-setstr "Y"
-compare_strn 2 _question "\r\n"
-if_true
-	crlf
-	shift_str _question 2
-	end_if
-printf "nbh[c�b] y%s? " _question
-:top
-compare_str "Y"
-if_equal
-	print "h4w[Yes]nbh No "
-else
-	print "nbh Yes 4w[No]"
-	end_if
-getkey
-print "\b\b\b\b\b\b\b\b\b\1n\1h\1>"
-compare_key ^M
-if_true
-	ungetstr
-	copy str tmp
-	return
-	end_if
-
-compare_keys "YN"
-if_true
-	ungetkey
-	copy str tmp
-	return
-	end_if
-
-compare_key ^@
-if_true
-	copy str tmp
-	return
-	end_if
-
-# Toggle
-compare_str "Y"
-if_true
-	setstr "N"
-else
-	setstr "Y"
-	end_if
-goto top
-
diff --git a/node1/node.cnf b/node1/node.cnf
deleted file mode 100644
index a5a4342bbb16cda5e4c84b5c42155d6669878302..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3504
zcmZQ%@XJq0RWM{A3?d>TbfGwcuxbJ-gqRo@7#Wxds3IuM$e_bWP!ZJ>s4C`U7MCcf
zrcupAQVr76i*XJK@`)i;A56WTUQCE<L<rgXLtK3W$kq&V1O+rS2K4k|QW8rNV^WKX
z@{9Cx^3#bm5>0=4X;CRD+8NOF=j5m7=N0Sa6qgX|fKhb=8Um_{g?XtIM3$;z0Y&-;
z)bpd3kA?t+Az;J6#h|KKoSc@fpqj0qU!q!0p@E~?=^6t6N5O~=0S0D<A500HkTmBQ
zqUIKCU~3R;WNT<-;c5_O5MiR`Y^dg91d*pT=@{Z_7)DIb1BXK#LtH{|ND(FM7~*T-
wL6QBAMA?H|5i0{DGXtm(BgtTFU;t6a%CLbYkHOFg%I9K8;C#klWCG;^0O}1t?EnA(

diff --git a/node1/sbbs.bat b/node1/sbbs.bat
deleted file mode 100755
index aa2b0bd10a..0000000000
--- a/node1/sbbs.bat
+++ /dev/null
@@ -1 +0,0 @@
-@..\exec\sbbs %1 %2 %3 %4 %5
\ No newline at end of file
diff --git a/node1/sbbs.cmd b/node1/sbbs.cmd
deleted file mode 100755
index e791768435..0000000000
--- a/node1/sbbs.cmd
+++ /dev/null
@@ -1 +0,0 @@
-@..\exec\sbbs4os2 %1 %2 %3 %4 %5
\ No newline at end of file
diff --git a/node1/scfg.bat b/node1/scfg.bat
deleted file mode 100755
index b406a1245e..0000000000
--- a/node1/scfg.bat
+++ /dev/null
@@ -1 +0,0 @@
-@..\exec\scfg ..\ctrl %1 %2 %3
\ No newline at end of file
diff --git a/node1/scfg.cmd b/node1/scfg.cmd
deleted file mode 100755
index 7b1905b433..0000000000
--- a/node1/scfg.cmd
+++ /dev/null
@@ -1 +0,0 @@
-@..\exec\scfg4os2 ..\ctrl %1 %2 %3
\ No newline at end of file
diff --git a/node2/node.cnf b/node2/node.cnf
deleted file mode 100644
index a5a4342bbb16cda5e4c84b5c42155d6669878302..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3504
zcmZQ%@XJq0RWM{A3?d>TbfGwcuxbJ-gqRo@7#Wxds3IuM$e_bWP!ZJ>s4C`U7MCcf
zrcupAQVr76i*XJK@`)i;A56WTUQCE<L<rgXLtK3W$kq&V1O+rS2K4k|QW8rNV^WKX
z@{9Cx^3#bm5>0=4X;CRD+8NOF=j5m7=N0Sa6qgX|fKhb=8Um_{g?XtIM3$;z0Y&-;
z)bpd3kA?t+Az;J6#h|KKoSc@fpqj0qU!q!0p@E~?=^6t6N5O~=0S0D<A500HkTmBQ
zqUIKCU~3R;WNT<-;c5_O5MiR`Y^dg91d*pT=@{Z_7)DIb1BXK#LtH{|ND(FM7~*T-
wL6QBAMA?H|5i0{DGXtm(BgtTFU;t6a%CLbYkHOFg%I9K8;C#klWCG;^0O}1t?EnA(

diff --git a/node2/sbbs.bat b/node2/sbbs.bat
deleted file mode 100755
index aa2b0bd10a..0000000000
--- a/node2/sbbs.bat
+++ /dev/null
@@ -1 +0,0 @@
-@..\exec\sbbs %1 %2 %3 %4 %5
\ No newline at end of file
diff --git a/node2/sbbs.cmd b/node2/sbbs.cmd
deleted file mode 100755
index e791768435..0000000000
--- a/node2/sbbs.cmd
+++ /dev/null
@@ -1 +0,0 @@
-@..\exec\sbbs4os2 %1 %2 %3 %4 %5
\ No newline at end of file
diff --git a/node2/scfg.bat b/node2/scfg.bat
deleted file mode 100755
index b406a1245e..0000000000
--- a/node2/scfg.bat
+++ /dev/null
@@ -1 +0,0 @@
-@..\exec\scfg ..\ctrl %1 %2 %3
\ No newline at end of file
diff --git a/node2/scfg.cmd b/node2/scfg.cmd
deleted file mode 100755
index 7b1905b433..0000000000
--- a/node2/scfg.cmd
+++ /dev/null
@@ -1 +0,0 @@
-@..\exec\scfg4os2 ..\ctrl %1 %2 %3
\ No newline at end of file
diff --git a/node3/node.cnf b/node3/node.cnf
deleted file mode 100644
index a5a4342bbb16cda5e4c84b5c42155d6669878302..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3504
zcmZQ%@XJq0RWM{A3?d>TbfGwcuxbJ-gqRo@7#Wxds3IuM$e_bWP!ZJ>s4C`U7MCcf
zrcupAQVr76i*XJK@`)i;A56WTUQCE<L<rgXLtK3W$kq&V1O+rS2K4k|QW8rNV^WKX
z@{9Cx^3#bm5>0=4X;CRD+8NOF=j5m7=N0Sa6qgX|fKhb=8Um_{g?XtIM3$;z0Y&-;
z)bpd3kA?t+Az;J6#h|KKoSc@fpqj0qU!q!0p@E~?=^6t6N5O~=0S0D<A500HkTmBQ
zqUIKCU~3R;WNT<-;c5_O5MiR`Y^dg91d*pT=@{Z_7)DIb1BXK#LtH{|ND(FM7~*T-
wL6QBAMA?H|5i0{DGXtm(BgtTFU;t6a%CLbYkHOFg%I9K8;C#klWCG;^0O}1t?EnA(

diff --git a/node3/sbbs.bat b/node3/sbbs.bat
deleted file mode 100755
index aa2b0bd10a..0000000000
--- a/node3/sbbs.bat
+++ /dev/null
@@ -1 +0,0 @@
-@..\exec\sbbs %1 %2 %3 %4 %5
\ No newline at end of file
diff --git a/node3/sbbs.cmd b/node3/sbbs.cmd
deleted file mode 100755
index e791768435..0000000000
--- a/node3/sbbs.cmd
+++ /dev/null
@@ -1 +0,0 @@
-@..\exec\sbbs4os2 %1 %2 %3 %4 %5
\ No newline at end of file
diff --git a/node3/scfg.bat b/node3/scfg.bat
deleted file mode 100755
index b406a1245e..0000000000
--- a/node3/scfg.bat
+++ /dev/null
@@ -1 +0,0 @@
-@..\exec\scfg ..\ctrl %1 %2 %3
\ No newline at end of file
diff --git a/node3/scfg.cmd b/node3/scfg.cmd
deleted file mode 100755
index 7b1905b433..0000000000
--- a/node3/scfg.cmd
+++ /dev/null
@@ -1 +0,0 @@
-@..\exec\scfg4os2 ..\ctrl %1 %2 %3
\ No newline at end of file
diff --git a/node4/node.cnf b/node4/node.cnf
deleted file mode 100644
index a5a4342bbb16cda5e4c84b5c42155d6669878302..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3504
zcmZQ%@XJq0RWM{A3?d>TbfGwcuxbJ-gqRo@7#Wxds3IuM$e_bWP!ZJ>s4C`U7MCcf
zrcupAQVr76i*XJK@`)i;A56WTUQCE<L<rgXLtK3W$kq&V1O+rS2K4k|QW8rNV^WKX
z@{9Cx^3#bm5>0=4X;CRD+8NOF=j5m7=N0Sa6qgX|fKhb=8Um_{g?XtIM3$;z0Y&-;
z)bpd3kA?t+Az;J6#h|KKoSc@fpqj0qU!q!0p@E~?=^6t6N5O~=0S0D<A500HkTmBQ
zqUIKCU~3R;WNT<-;c5_O5MiR`Y^dg91d*pT=@{Z_7)DIb1BXK#LtH{|ND(FM7~*T-
wL6QBAMA?H|5i0{DGXtm(BgtTFU;t6a%CLbYkHOFg%I9K8;C#klWCG;^0O}1t?EnA(

diff --git a/node4/sbbs.bat b/node4/sbbs.bat
deleted file mode 100755
index aa2b0bd10a..0000000000
--- a/node4/sbbs.bat
+++ /dev/null
@@ -1 +0,0 @@
-@..\exec\sbbs %1 %2 %3 %4 %5
\ No newline at end of file
diff --git a/node4/sbbs.cmd b/node4/sbbs.cmd
deleted file mode 100755
index e791768435..0000000000
--- a/node4/sbbs.cmd
+++ /dev/null
@@ -1 +0,0 @@
-@..\exec\sbbs4os2 %1 %2 %3 %4 %5
\ No newline at end of file
diff --git a/node4/scfg.bat b/node4/scfg.bat
deleted file mode 100755
index b406a1245e..0000000000
--- a/node4/scfg.bat
+++ /dev/null
@@ -1 +0,0 @@
-@..\exec\scfg ..\ctrl %1 %2 %3
\ No newline at end of file
diff --git a/node4/scfg.cmd b/node4/scfg.cmd
deleted file mode 100755
index 7b1905b433..0000000000
--- a/node4/scfg.cmd
+++ /dev/null
@@ -1 +0,0 @@
-@..\exec\scfg4os2 ..\ctrl %1 %2 %3
\ No newline at end of file
diff --git a/src/cleanall.bat b/src/cleanall.bat
deleted file mode 100755
index acefc679cd..0000000000
--- a/src/cleanall.bat
+++ /dev/null
@@ -1,96 +0,0 @@
-@echo off
-rem
-rem Deletes all intermediate files for Synchronet projects - Rob Swindell
-rem
-echo y | del stp\*.obj > nul
-echo y | del stp\*.map > nul
-echo y | del stp\*.exe > nul
-echo y | del tone\*.obj > nul
-echo y | del tone\*.map > nul
-echo y | del tone\*.exe > nul
-echo y | del sbbs\dos > nul
-echo y | del sbbs\os2 > nul
-echo y | del sbbs\w32 > nul
-echo y | del sbbs\addfiles\dos > nul
-echo y | del sbbs\addfiles\dosx > nul
-echo y | del sbbs\addfiles\nt > nul
-echo y | del sbbs\addfiles\os2 > nul
-echo y | del sbbs\allusers\*.obj > nul
-echo y | del sbbs\allusers\*.map > nul
-echo y | del sbbs\allusers\*.exe > nul
-echo y | del sbbs\baja\*.obj > nul
-echo y | del sbbs\baja\*.map > nul
-echo y | del sbbs\baja\*.exe > nul
-echo y | del sbbs\dcdwatch\*.obj > nul
-echo y | del sbbs\dcdwatch\*.map > nul
-echo y | del sbbs\dcdwatch\*.exe > nul
-echo y | del sbbs\delfiles\dos > nul
-echo y | del sbbs\delfiles\dosx > nul
-echo y | del sbbs\delfiles\nt > nul
-echo y | del sbbs\delfiles\os2 > nul
-echo y | del sbbs\dstsedit\*.obj > nul
-echo y | del sbbs\dstsedit\*.map > nul
-echo y | del sbbs\dstsedit\*.exe > nul
-echo y | del sbbs\dupefind\dos > nul
-echo y | del sbbs\dupefind\dosx > nul
-echo y | del sbbs\dupefind\nt > nul
-echo y | del sbbs\dupefind\os2 > nul
-echo y | del sbbs\echo\*.obj > nul
-echo y | del sbbs\echo\*.map > nul
-echo y | del sbbs\echo\*.exe > nul
-echo y | del sbbs\echo\dos > nul
-echo y | del sbbs\echo\dos4G > nul
-echo y | del sbbs\echo\nt > nul
-echo y | del sbbs\echo\os2 > nul
-echo y | del sbbs\execsbbs\dos > nul
-echo y | del sbbs\execsbbs\os2 > nul
-echo y | del sbbs\filelist\dos > nul
-echo y | del sbbs\filelist\dosx > nul
-echo y | del sbbs\filelist\nt > nul
-echo y | del sbbs\filelist\os2 > nul
-echo y | del sbbs\install\dos > nul
-echo y | del sbbs\install\os2 > nul
-echo y | del sbbs\mlabels\*.obj > nul
-echo y | del sbbs\mlabels\*.map > nul
-echo y | del sbbs\mlabels\*.exe > nul
-echo y | del sbbs\node\dos > nul
-echo y | del sbbs\node\os2 > nul
-echo y | del sbbs\qwknodes\*.obj > nul
-echo y | del sbbs\qwknodes\*.map > nul
-echo y | del sbbs\qwknodes\*.exe > nul
-echo y | del sbbs\sbl\*.obj > nul
-echo y | del sbbs\sbl\*.map > nul
-echo y | del sbbs\sbl\*.exe > nul
-echo y | del sbbs\sbj\*.obj > nul
-echo y | del sbbs\sbj\*.map > nul
-echo y | del sbbs\sbj\*.exe > nul
-echo y | del sbbs\scb\*.obj > nul
-echo y | del sbbs\scb\*.map > nul
-echo y | del sbbs\scb\*.exe > nul
-echo y | del sbbs\scfg\dos > nul
-echo y | del sbbs\scfg\dos32 > nul
-echo y | del sbbs\scfg\os2 > nul
-echo y | del sbbs\slog\dos > nul
-echo y | del sbbs\slog\os2 > nul
-echo y | del sbbs\smb\chksmb\dos > nul
-echo y | del sbbs\smb\chksmb\os2 > nul
-echo y | del sbbs\smb\fixsmb\dos > nul
-echo y | del sbbs\smb\fixsmb\os2 > nul
-echo y | del sbbs\smb\smbutil\dos > nul
-echo y | del sbbs\smb\smbutil\dos4G > nul
-echo y | del sbbs\smb\smbutil\nt > nul
-echo y | del sbbs\smb\smbutil\os2 > nul
-echo y | del sbbs\smbactiv\dos > nul
-echo y | del sbbs\smbactiv\dosx > nul
-echo y | del sbbs\smbactiv\nt > nul
-echo y | del sbbs\smbactiv\os2 > nul
-echo y | del sbbs\smm\*.obj > nul
-echo y | del sbbs\smm\*.map > nul
-echo y | del sbbs\smm\*.exe > nul
-echo y | del sbbs\uti\*.obj > nul
-echo y | del sbbs\uti\*.map > nul
-echo y | del sbbs\uti\*.exe > nul
-echo y | del sbbs\execdos\*.obj > nul
-echo y | del sbbs\execdos\*.map > nul
-echo y | del sbbs\execdos\*.exe > nul
-
diff --git a/src/makeall.bat b/src/makeall.bat
deleted file mode 100755
index b73207ac58..0000000000
--- a/src/makeall.bat
+++ /dev/null
@@ -1,121 +0,0 @@
-@echo off
-rem
-rem Makes all Borland for DOS Synchronet projects - April 1997 Rob Swindell
-rem
-cd sbbs
-make %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-make -DW32 %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd scfg
-make %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-make -DDOS32 %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\addfiles
-make -fmakefile.bc %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\allusers
-call make.bat %1 %2 %3 %4 %5 
-if errorlevel 1 goto err
-cd ..\baja
-call make.bat %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\delfiles
-make -fmakefile.bc %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\dstsedit
-call make.bat %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\dupefind
-make -fmakefile.bc %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\echo
-make %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\execdos
-call make.bat %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\execsbbs
-call make.bat %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\filelist
-make -fmakefile.bc %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\install
-make %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\mlabels
-call make.bat %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\node
-call make.bat %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\qwknodes
-call make.bat %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\sbj
-make %1 %2 %3 %4 %5 
-if errorlevel 1 goto err
-cd ..\sbl
-make %1 %2 %3 %4 %5 
-if errorlevel 1 goto err
-call makeio.bat %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\scb
-make %1 %2 %3 %4 %5 
-if errorlevel 1 goto err
-make -fscbcfg.mak %1 %2 %3 %4 %5 
-if errorlevel 1 goto err
-cd ..\slog
-call make.bat %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\smb
-cd chksmb
-make %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\fixsmb
-make %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\smbutil
-make -fmakefile.bc %1 %2 %3 %4 %5 
-if errorlevel 1 goto err
-cd ..
-cd ..\smbactiv
-make -fmakefile.bc %1 %2 %3 %4 %5 
-if errorlevel 1 goto err
-cd ..\smm
-make %1 %2 %3 %4 %5 
-if errorlevel 1 goto err
-make -fsmmcfg.mak %1 %2 %3 %4 %5 
-if errorlevel 1 goto err
-call makeio.bat %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-call makephot.bat  %1 %2 %3 %4 %5 
-if errorlevel 1 goto err
-call makeutil.batn %1 %2 %3 %4 %5 
-if errorlevel 1 goto err
-cd ..\uti
-make %1 %2 %3 %4 %5 
-if errorlevel 1 goto err
-rem
-rem Non-Synchronet specific stuff
-rem
-cd ..\
-cd ..\tone
-call make.bat %1 %2 %3 %4 %5 
-if errorlevel 1 goto err
-cd ..\stp
-call make.bat %1 %2 %3 %4 %5 
-if errorlevel 1 goto err
-rem
-rem End of makes
-rem
-cd ..
-goto end
-:err
-rem Error occurred
-echo.
-echo There was an error!
-echo.
-:end
diff --git a/src/makeall.cmd b/src/makeall.cmd
deleted file mode 100755
index bff08dcdc7..0000000000
--- a/src/makeall.cmd
+++ /dev/null
@@ -1,63 +0,0 @@
-@echo off
-rem
-rem Makes all Borland for OS/2 Synchronet projects - April 1997 Rob Swindell
-rem
-cd sbbs
-make %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd scfg
-make %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\addfiles
-make -fmakefile.bc %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\baja
-call make.cmd %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\delfiles
-make -fmakefile.bc %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\dupefind
-make -fmakefile.bc %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\echo
-make %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\execsbbs
-call make.cmd %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\filelist
-make -fmakefile.bc %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\install
-make %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\node
-call make.cmd %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\slog
-call make.cmd %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\smb
-cd chksmb
-make %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\fixsmb
-make %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\smbutil
-make -fmakefile.bc %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..
-cd ..\smbactiv
-make -fmakefile.bc %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-rem End of makes
-cd ..\..
-goto end
-:err
-rem Error occurred
-echo.
-echo There was an error!
-echo.
-:end
diff --git a/src/sbbs2/addfiles/addfiles.c b/src/sbbs2/addfiles/addfiles.c
deleted file mode 100644
index 3a878b3461..0000000000
--- a/src/sbbs2/addfiles/addfiles.c
+++ /dev/null
@@ -1,1668 +0,0 @@
-/* ADDFILES.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* Program to add files to a Synchronet file database */
-
-#include "sbbs.h"
-
-#define ADDFILES_VER "2.24"
-
-char tmp[256];
-char *crlf="\r\n";
-
-#ifdef __TURBOC__
-unsigned _stklen=16000;
-#else
-unsigned _stacksize=16000;
-#endif
-
-int cur_altpath=0;
-
-long files=0,removed=0,mode=0;
-
-#define DEL_LIST	(1L<<0)
-#define NO_EXTEND	(1L<<1)
-#define FILE_DATE	(1L<<2)
-#define TODAYS_DATE (1L<<3)
-#define FILE_ID 	(1L<<4)
-#define NO_UPDATE	(1L<<5)
-#define NO_NEWDATE	(1L<<6)
-#define ASCII_ONLY	(1L<<7)
-#define UL_STATS	(1L<<8)
-#define ULDATE_ONLY (1L<<9)
-#define KEEP_DESC	(1L<<10)
-#define AUTO_ADD	(1L<<11)
-#define SEARCH_DIR	(1L<<12)
-#define SYNC_LIST	(1L<<13)
-#define KEEP_SPACE	(1L<<14)
-
-#ifndef __FLAT__
-/****************************************************************************/
-/* This function reads files that are potentially larger than 32k.  		*/
-/* Up to one megabyte of data can be read with each call.                   */
-/****************************************************************************/
-long lread(int file, char HUGE16 *buf,long bytes)
-{
-	long count;
-
-for(count=bytes;count>32767;count-=32767,buf+=32767)
-	if(read(file,(char *)buf,32767)!=32767)
-		return(-1L);
-if(read(file,(char *)buf,(int)count)!=count)
-	return(-1L);
-return(bytes);
-}
-
-/****************************************************************************/
-/* This function writes files that are potentially larger than 32767 bytes  */
-/* Up to one megabytes of data can be written with each call.				*/
-/****************************************************************************/
-long lwrite(int file, char HUGE16 *buf, long bytes)
-{
-
-	long count;
-
-for(count=bytes;count>32767;count-=32767,buf+=32767)
-	if(write(file,(char *)buf,32767)!=32767)
-		return(-1L);
-if(write(file,(char *)buf,(int)count)!=count)
-	return(-1L);
-return(bytes);
-}
-#endif
-
-long lputs(char FAR16 *str)
-{
-    char tmp[256];
-    int i,j,k;
-
-j=strlen(str);
-for(i=k=0;i<j;i++)      /* remove CRs */
-    if(str[i]==CR && str[i+1]==LF)
-        continue;
-    else
-        tmp[k++]=str[i];
-tmp[k]=0;
-return(fputs(tmp,stdout));
-}
-
-/****************************************************************************/
-/* Returns string for 2 digit hex+ numbers up to 575						*/
-/****************************************************************************/
-char *hexplus(uint num, char *str)
-{
-sprintf(str,"%03x",num);
-str[0]=num/0x100 ? 'f'+(num/0x10)-0xf : str[1];
-str[1]=str[2];
-str[2]=0;
-return(str);
-}
-
-
-/****************************************************************************/
-/* Places into 'strout', 'strin' starting at 'start' and ending at			*/
-/* 'start'+'length'   														*/
-/****************************************************************************/
-void putrec(char *strout,int start,int length,char *strin)
-{
-	int i=0,j;
-
-j=strlen(strin);
-while(i<j && i<length)
-	strout[start++]=strin[i++];
-while(i++<length)
-	strout[start++]=ETX;
-}
-
-/****************************************************************************/
-/* Performs printf() through local assembly routines                        */
-/* Called from everywhere                                                   */
-/****************************************************************************/
-int lprintf(char *fmat, ...)
-{
-	va_list argptr;
-	char sbuf[256];
-	int chcount;
-
-va_start(argptr,fmat);
-chcount=vsprintf(sbuf,fmat,argptr);
-va_end(argptr);
-lputs(sbuf);
-return(chcount);
-}
-
-/****************************************************************************/
-/* Truncates white-space chars off end of 'str' and terminates at first tab */
-/****************************************************************************/
-void truncsp(char *str)
-{
-	int c;
-
-str[strcspn(str,"\t")]=0;
-c=strlen(str);
-while(c && (uchar)str[c-1]<=SP) c--;
-str[c]=0;
-}
-
-/****************************************************************************/
-/* Puts a backslash on path strings 										*/
-/****************************************************************************/
-void backslash(char *str)
-{
-    int i;
-
-i=strlen(str);
-if(i && str[i-1]!='\\') {
-    str[i]='\\'; str[i+1]=0; }
-}
-
-/****************************************************************************/
-/* Checks the disk drive for the existence of a file. Returns 1 if it       */
-/* exists, 0 if it doesn't.                                                 */
-/****************************************************************************/
-char fexist(char *filespec)
-{
-	struct find_t f;
-	uint i;
-
-i=_dos_findfirst(filespec,_A_NORMAL,&f);
-#ifdef __WATCOMC__
-_dos_findclose(&f);
-#endif
-if(!i)
-    return(1);
-return(0);
-}
-
-/****************************************************************************/
-/* Returns the time/date of the file in 'filespec' in time_t (unix) format  */
-/****************************************************************************/
-long fdate(char *filespec)
-{
-	int 	file;
-	ushort	fd,ft;
-	struct	tm t;
-
-if((file=nopen(filespec,O_RDONLY))==-1)
-	return(0);
-_dos_getftime(file,&fd,&ft);
-close(file);
-memset(&t,0,sizeof(t));
-t.tm_year=((fd&0xfe00)>>9)+80;
-t.tm_mon=((fd&0x01e0)>>5)-1;
-t.tm_mday=fd&0x1f;
-t.tm_hour=(ft&0xf800)>>11;
-t.tm_min=(ft&0x07e0)>>5;
-t.tm_sec=(ft&0x001f)<<1;
-return(mktime(&t));
-}
-
-/*****************************************************************************/
-/* Returns command line generated from instr with %c replacments             */
-/*****************************************************************************/
-char *cmdstr(char *instr, char *fpath, char *fspec, char *outstr)
-{
-    static char cmd[128];
-    char str[256];
-    int i,j,len;
-
-len=strlen(instr);
-for(i=j=0;i<len && j<128;i++) {
-    if(instr[i]=='%') {
-        i++;
-        cmd[j]=0;
-        switch(toupper(instr[i])) {
-            case 'F':   /* File path */
-                strcat(cmd,fpath);
-                break;
-            case 'G':   /* Temp directory */
-                if(temp_dir[0]!='\\' && temp_dir[1]!=':')
-                    strcat(cmd,node_dir);
-                strcat(cmd,temp_dir);
-                break;
-            case 'N':   /* Node Directory (same as SBBSNODE environment var) */
-                strcat(cmd,node_dir);
-                break;
-            case 'S':   /* File Spec */
-                strcat(cmd,fspec);
-                break;
-            case '!':   /* EXEC Directory */
-                if(exec_dir[0]!='\\' && exec_dir[1]!=':')
-                    strcat(cmd,node_dir);
-                strcat(cmd,exec_dir);
-                break;
-            case '#':   /* Node number (same as SBBSNNUM environment var) */
-                sprintf(str,"%d",node_num);
-                strcat(cmd,str);
-                break;
-            case '%':   /* %% for percent sign */
-                strcat(cmd,"%");
-                break;
-            default:    /* unknown specification */
-                break; }
-        j=strlen(cmd); }
-    else
-        cmd[j++]=instr[i]; }
-cmd[j]=0;
-
-return(cmd);
-}
-
-
-/****************************************************************************/
-/* Converts unix time format (long - time_t) into a char str MM/DD/YY		*/
-/****************************************************************************/
-char *unixtodstr(time_t unix, char *str)
-{
-	struct tm *t;
-
-if(!unix)
-	strcpy(str,"00/00/00");
-else {
-	t=gmtime(&unix);
-	sprintf(str,"%02u/%02u/%02u",t->tm_mon+1,t->tm_mday
-		,TM_YEAR(t->tm_year)); }
-return(str);
-}
-
-/****************************************************************************/
-/* Network open function. Opens all files DENYALL and retries LOOP_NOPEN    */
-/* number of times if the attempted file is already open or denying access	*/
-/* for some other reason.	All files are opened in BINARY mode.			*/
-/****************************************************************************/
-int nopen(char *str, int access)
-{
-	char logstr[256];
-	int file,share,count=0;
-
-if(access==O_RDONLY) share=SH_DENYWR;
-	else share=SH_DENYRW;
-while(((file=sopen(str,O_BINARY|access,share,S_IWRITE))==-1)
-	&& errno==EACCES && count++<LOOP_NOPEN);
-if(file==-1 && errno==EACCES)
-	lputs("\7\r\nNOPEN: ACCESS DENIED\r\n\7");
-return(file);
-}
-
-/****************************************************************************/
-/* This function performs an nopen, but returns a file stream with a buffer */
-/* allocated.																*/
-/****************************************************************************/
-FILE *fnopen(int *file, char *str, int access)
-{
-	char mode[128];
-	FILE *stream;
-
-if(access&O_WRONLY) access|=O_RDWR; 	/* fdopen can't open WRONLY */
-
-if(((*file)=nopen(str,access))==-1)
-	return(NULL);
-
-if(access&O_APPEND) {
-	if(access&(O_RDONLY|O_RDWR))
-		strcpy(mode,"a+");
-	else
-		strcpy(mode,"a"); }
-else {
-	if(access&(O_WRONLY|O_RDWR))
-		strcpy(mode,"r+");
-	else
-		strcpy(mode,"r"); }
-stream=fdopen((*file),mode);
-if(stream==NULL) {
-	close(*file);
-	return(NULL); }
-setvbuf(stream,NULL,_IOFBF,16*1024);
-return(stream);
-}
-
-void allocfail(uint size)
-{
-lprintf("\7Error allocating %u bytes of memory.\r\n",size);
-bail(1);
-}
-
-void bail(int code)
-{
-exit(code);
-}
-
-/****************************************************************************/
-/* Returns the length of the file in 'filespec'                             */
-/****************************************************************************/
-long flength(char *filespec)
-{
-	struct find_t f;
-	uint i;
-
-i=_dos_findfirst(filespec,_A_NORMAL,&f);
-#ifdef __WATCOMC__
-_dos_findclose(&f);
-#endif
-if(!i)
-	return(f.size);
-return(-1L);
-}
-
-/****************************************************************************/
-/* Turns FILE.EXT into FILE    .EXT                                         */
-/* Called from upload                                                       */
-/****************************************************************************/
-char *padfname(char *filename, char *str)
-{
-    char c,d;
-
-for(c=0;c<8;c++)
-    if(filename[c]=='.' || !filename[c]) break;
-    else str[c]=filename[c];
-d=c;
-if(filename[c]=='.') c++;
-while(d<8)
-    str[d++]=SP;
-str[d++]='.';
-while(d<12)
-    if(!filename[c]) break;
-    else str[d++]=filename[c++];
-while(d<12)
-    str[d++]=SP;
-str[d]=0;
-return(str);
-}
-
-/****************************************************************************/
-/* Turns FILE    .EXT into FILE.EXT                                         */
-/****************************************************************************/
-char *unpadfname(char *filename, char *str)
-{
-    char c,d;
-
-for(c=0,d=0;c<strlen(filename);c++)
-    if(filename[c]!=SP) str[d++]=filename[c];
-str[d]=0;
-return(str);
-}
-
-/****************************************************************************/
-/* Checks  directory data file for 'filename' (must be padded). If found,   */
-/* it returns the 1, else returns 0.                                        */
-/* Called from upload and bulkupload                                        */
-/****************************************************************************/
-char findfile(uint dirnum, char *filename)
-{
-	char str[256],c,fname[128],HUGE16 *ixbbuf;
-    int file;
-    ulong length,l;
-
-strcpy(fname,filename);
-for(c=8;c<12;c++)   /* Turn FILENAME.EXT into FILENAMEEXT */
-    fname[c]=fname[c+1];
-sprintf(str,"%s%s.IXB",dir[dirnum]->data_dir,dir[dirnum]->code);
-if((file=nopen(str,O_RDONLY))==-1) return(0);
-length=filelength(file);
-if(!length) {
-    close(file);
-    return(0); }
-if((ixbbuf=(char *)MALLOC(length))==NULL) {
-    close(file);
-	printf("ERR_ALLOC %s %lu\n",str,length);
-    return(0); }
-if(lread(file,ixbbuf,length)!=length) {
-    close(file);
-	FREE((char *)ixbbuf);
-    return(0); }
-close(file);
-for(l=0;l<length;l+=F_IXBSIZE) {
-    for(c=0;c<11;c++)
-        if(fname[c]!=ixbbuf[l+c]) break;
-    if(c==11) break; }
-FREE((char *)ixbbuf);
-if(l<length)
-    return(1);
-return(0);
-}
-
-
-/****************************************************************************/
-/* Adds the data for struct filedat to the directory's data base.           */
-/* changes the .datoffset field only                                        */
-/****************************************************************************/
-char addfiledat(file_t *f)
-{
-	char str[256],fdat[F_LEN+1],fname[128],idx[128],c,HUGE16 *ixbbuf;
-    int i,file;
-    ulong length,l,uldate;
-
-/************************/
-/* Add data to DAT File */
-/************************/
-sprintf(str,"%s%s.DAT",dir[f->dir]->data_dir,dir[f->dir]->code);
-if((file=nopen(str,O_RDWR|O_CREAT))==-1) {
-	printf("ERROR opening %s\n",str);
-	return(0); }
-length=filelength(file);
-if(length==0L)
-    l=0L;
-else {
-    if(length%F_LEN) {
-        close(file);
-		printf("ERR_LEN %s %lu\n",str,length);
-		return(0); }
-    for(l=0;l<length;l+=F_LEN) {    /* Find empty slot */
-        lseek(file,l,SEEK_SET);
-        read(file,&c,1);
-        if(c==ETX) break; } }
-putrec(fdat,F_CDT,7,ultoa(f->cdt,tmp,10));
-putrec(fdat,F_CDT+7,2,crlf);
-putrec(fdat,F_DESC,LEN_FDESC,f->desc);
-putrec(fdat,F_DESC+LEN_FDESC,2,crlf);
-putrec(fdat,F_ULER,LEN_ALIAS+5,f->uler);
-putrec(fdat,F_ULER+LEN_ALIAS+5,2,crlf);
-putrec(fdat,F_TIMESDLED,5,ultoa(f->timesdled,tmp,10));
-putrec(fdat,F_TIMESDLED+5,2,crlf);
-putrec(fdat,F_OPENCOUNT,3,itoa(f->opencount,tmp,10));
-putrec(fdat,F_OPENCOUNT+3,2,crlf);
-fdat[F_MISC]=f->misc+SP;
-putrec(fdat,F_ALTPATH,2,hexplus(f->altpath,tmp));
-putrec(fdat,F_ALTPATH+2,2,crlf);
-f->datoffset=l;
-idx[0]=l&0xff;          /* Get offset within DAT file for IXB file */
-idx[1]=(l>>8)&0xff;
-idx[2]=(l>>16)&0xff;
-lseek(file,l,SEEK_SET);
-if(write(file,fdat,F_LEN)!=F_LEN) {
-    close(file);
-	return(0); }
-length=filelength(file);
-close(file);
-if(length%F_LEN)
-	printf("ERR_LEN %s %lu\n",str,length);
-
-/*******************************************/
-/* Update last upload date/time stamp file */
-/*******************************************/
-sprintf(str,"%s%s.DAB",dir[f->dir]->data_dir,dir[f->dir]->code);
-if((file=nopen(str,O_WRONLY|O_CREAT))==-1)
-	printf("ERR_OPEN %s\r\n",str);
-else {
-	uldate=time(NULL);
-	write(file,&uldate,4);
-    close(file); }
-
-/************************/
-/* Add data to IXB File */
-/************************/
-strcpy(fname,f->name);
-for(i=8;i<12;i++)   /* Turn FILENAME.EXT into FILENAMEEXT */
-    fname[i]=fname[i+1];
-sprintf(str,"%s%s.IXB",dir[f->dir]->data_dir,dir[f->dir]->code);
-if((file=nopen(str,O_RDWR|O_CREAT))==-1) {
-	printf("ERR_OPEN %s\n",str);
-	return(0); }
-length=filelength(file);
-if(length) {    /* IXB file isn't empty */
-    if(length%F_IXBSIZE) {
-        close(file);
-		printf("ERR_LEN %s %lu\n",str,length);
-		return(0); }
-	if((ixbbuf=(char *)MALLOC(length))==NULL) {
-        close(file);
-		printf("ERR_ALLOC %s %lu\n",str,length);
-		return(0); }
-	if(lread(file,ixbbuf,length)!=length) {
-        close(file);
-		printf("ERR_READ %s %lu\n",str,length);
-		FREE((char *)ixbbuf);
-		return(0); }
-/************************************************/
-/* Sort by Name or Date, Assending or Decending */
-/************************************************/
-    if(dir[f->dir]->sort==SORT_NAME_A || dir[f->dir]->sort==SORT_NAME_D) {
-        for(l=0;l<length;l+=F_IXBSIZE) {
-            for(i=0;i<12 && fname[i]==ixbbuf[l+i];i++);
-			if(i==12) { 	/* file already in directory index */
-                close(file);
-				printf("ERR_CHK %s\n",fname);
-				FREE((char *)ixbbuf);
-				return(0); }
-            if(dir[f->dir]->sort==SORT_NAME_A && fname[i]<ixbbuf[l+i])
-                break;
-            if(dir[f->dir]->sort==SORT_NAME_D && fname[i]>ixbbuf[l+i])
-                break; } }
-    else {  /* sort by date */
-        for(l=0;l<length;l+=F_IXBSIZE) {
-            uldate=(ixbbuf[l+15]|((long)ixbbuf[l+16]<<8)
-                |((long)ixbbuf[l+17]<<16)|((long)ixbbuf[l+18]<<24));
-            if(dir[f->dir]->sort==SORT_DATE_A && f->dateuled>uldate)
-                break;
-            if(dir[f->dir]->sort==SORT_DATE_D && f->dateuled<uldate)
-                break; } }
-    lseek(file,l,SEEK_SET);
-    if(write(file,fname,11)!=11) {  /* Write filename to IXB file */
-        close(file);
-		FREE((char *)ixbbuf);
-		return(0); }
-    if(write(file,idx,3)!=3) {  /* Write DAT offset into IXB file */
-        close(file);
-		FREE((char *)ixbbuf);
-		return(0); }
-    write(file,&f->dateuled,sizeof(time_t));
-    write(file,&f->datedled,4);              /* Write 0 for datedled */
-	if(lwrite(file,&ixbbuf[l],length-l)!=length-l) { /* Write rest of IXB */
-        close(file);
-		FREE((char *)ixbbuf);
-		return(0); }
-	FREE((char *)ixbbuf); }
-else {              /* IXB file is empty... No files */
-    if(write(file,fname,11)!=11) {  /* Write filename it IXB file */
-        close(file);
-		return(0); }
-    if(write(file,idx,3)!=3) {  /* Write DAT offset into IXB file */
-        close(file);
-		return(0); }
-    write(file,&f->dateuled,sizeof(time_t));
-    write(file,&f->datedled,4); }
-length=filelength(file);
-close(file);
-if(length%F_IXBSIZE)
-	printf("ERR_LEN %s %lu\n",str,length);
-return(1);
-}
-
-void putextdesc(uint dirnum, ulong datoffset, char *ext)
-{
-	char str[256],nulbuf[512];
-	int file;
-
-sprintf(str,"%s%s.EXB",dir[dirnum]->data_dir,dir[dirnum]->code);
-if((file=nopen(str,O_WRONLY|O_CREAT))==-1)
-	return;
-lseek(file,0L,SEEK_END);
-while(filelength(file)<(datoffset/F_LEN)*512L)
-    write(file,nulbuf,512);
-lseek(file,(datoffset/F_LEN)*512L,SEEK_SET);
-write(file,ext,512);
-close(file);
-}
-
-/****************************************************************************/
-/* Gets file data from dircode.IXB file										*/
-/* Need fields .name and .dir filled.                                       */
-/* only fills .offset, .dateuled, and .datedled                             */
-/****************************************************************************/
-void getfileixb(file_t *f)
-{
-	uchar HUGE16 *ixbbuf,str[256],fname[128];
-	int file;
-	ulong l,length;
-
-sprintf(str,"%s%s.IXB",dir[f->dir]->data_dir,dir[f->dir]->code);
-if((file=nopen(str,O_RDONLY))==-1) {
-	printf("ERR_OPEN %s\n",str);
-	return; }
-length=filelength(file);
-if(length%F_IXBSIZE) {
-	close(file);
-	printf("ERR_LEN %s\n");
-	return; }
-if((ixbbuf=(uchar HUGE16 *)MALLOC(length))==NULL) {
-	close(file);
-	printf("ERR_ALLOC %s\n",str);
-	return; }
-if(lread(file,ixbbuf,length)!=length) {
-	close(file);
-	FREE((char *)ixbbuf);
-	printf("ERR_READ %s\n",str);
-	return; }
-close(file);
-strcpy(fname,f->name);
-for(l=8;l<12;l++)	/* Turn FILENAME.EXT into FILENAMEEXT */
-	fname[l]=fname[l+1];
-for(l=0;l<length;l+=F_IXBSIZE) {
-	sprintf(str,"%11.11s",ixbbuf+l);
-	if(!strcmp(str,fname))
-		break; }
-if(l>=length) {
-	printf("getfileixb: ERR_CHK %s\n",fname);
-	FREE((char *)ixbbuf);
-	return; }
-l+=11;
-f->datoffset=ixbbuf[l]|((long)ixbbuf[l+1]<<8)|((long)ixbbuf[l+2]<<16);
-f->dateuled=ixbbuf[l+3]|((long)ixbbuf[l+4]<<8)
-	|((long)ixbbuf[l+5]<<16)|((long)ixbbuf[l+6]<<24);
-f->datedled=ixbbuf[l+7]|((long)ixbbuf[l+8]<<8)
-	|((long)ixbbuf[l+9]<<16)|((long)ixbbuf[l+10]<<24);
-FREE((char *)ixbbuf);
-}
-
-/****************************************************************************/
-/* Puts filedata into DIR_code.DAT file                                     */
-/* Called from removefiles                                                  */
-/****************************************************************************/
-void putfiledat(file_t f)
-{
-    char buf[F_LEN+1],str[256];
-    int file;
-    long length;
-
-putrec(buf,F_CDT,7,ultoa(f.cdt,tmp,10));
-putrec(buf,F_CDT+7,2,crlf);
-putrec(buf,F_DESC,LEN_FDESC,f.desc);
-putrec(buf,F_DESC+LEN_FDESC,2,crlf);
-putrec(buf,F_ULER,LEN_ALIAS+5,f.uler);
-putrec(buf,F_ULER+LEN_ALIAS+5,2,crlf);
-putrec(buf,F_TIMESDLED,5,itoa(f.timesdled,tmp,10));
-putrec(buf,F_TIMESDLED+5,2,crlf);
-putrec(buf,F_OPENCOUNT,3,itoa(f.opencount,tmp,10));
-putrec(buf,F_OPENCOUNT+3,2,crlf);
-buf[F_MISC]=f.misc+SP;
-putrec(buf,F_ALTPATH,2,hexplus(f.altpath,tmp));
-putrec(buf,F_ALTPATH+2,2,crlf);
-sprintf(str,"%s%s.DAT",dir[f.dir]->data_dir,dir[f.dir]->code);
-if((file=nopen(str,O_WRONLY))==-1) {
-	printf("ERR_OPEN %s\n",str);
-    return; }
-length=filelength(file);
-if(length%F_LEN) {
-    close(file);
-	printf("ERR_LEN %s\n",str);
-    return; }
-if(f.datoffset>length) {
-    close(file);
-	printf("ERR_LEN %s\n",str);
-    return; }
-lseek(file,f.datoffset,SEEK_SET);
-if(write(file,buf,F_LEN)!=F_LEN) {
-    close(file);
-	printf("ERR_WRITE %s\n",str);
-    return; }
-length=filelength(file);
-close(file);
-if(length%F_LEN)
-	printf("ERR_LEN %s\n",str);
-}
-
-/****************************************************************************/
-/* Update the upload date for the file 'f'                                  */
-/****************************************************************************/
-void update_uldate(file_t f)
-{
-	char str[256],fname[128];
-	int i,file;
-	long l,length;
-
-/*******************/
-/* Update IXB File */
-/*******************/
-sprintf(str,"%s%s.IXB",dir[f.dir]->data_dir,dir[f.dir]->code);
-if((file=nopen(str,O_RDWR))==-1) {
-	printf("ERR_OPEN %s\n",str);
-    return; }
-length=filelength(file);
-if(length%F_IXBSIZE) {
-    close(file);
-	printf("ERR_LEN %s\n",str);
-    return; }
-strcpy(fname,f.name);
-for(i=8;i<12;i++)   /* Turn FILENAME.EXT into FILENAMEEXT */
-    fname[i]=fname[i+1];
-for(l=0;l<length;l+=F_IXBSIZE) {
-    read(file,str,F_IXBSIZE);      /* Look for the filename in the IXB file */
-    str[11]=0;
-    if(!strcmp(fname,str)) break; }
-if(l>=length) {
-    close(file);
-	printf("ERR_CHK %s\n",f.name);
-    return; }
-lseek(file,l+14,SEEK_SET);
-write(file,&f.dateuled,4);	/* Write the current time stamp for datedled */
-close(file);
-
-/*******************************************/
-/* Update last upload date/time stamp file */
-/*******************************************/
-sprintf(str,"%s%s.DAB",dir[f.dir]->data_dir,dir[f.dir]->code);
-if((file=nopen(str,O_WRONLY|O_CREAT))==-1)
-	printf("ERR_OPEN %s\r\n",str);
-else {
-	write(file,&f.dateuled,4);
-    close(file); }
-
-}
-
-
-void strip_ctrl(char *str)
-{
-	char tmp[1024];
-	int i,j,k;
-
-k=strlen(str);
-for(i=j=0;i<k;i++)
-	if(j && str[i]==SP && tmp[j-1]==SP && (mode&KEEP_SPACE))
-		tmp[j++]=str[i];
-	else if(j && str[i]<=SP && tmp[j-1]==SP)
-		continue;
-	else if(i && !isalnum(str[i]) && str[i]==str[i-1])
-		continue;
-	else if((uchar)str[i]>=SP)
-		tmp[j++]=str[i];
-	else if(str[i]==TAB || (str[i]==CR && str[i+1]==LF))
-		tmp[j++]=SP;
-tmp[j]=0;
-strcpy(str,tmp);
-}
-
-
-void strip_exascii(char *str)
-{
-	char tmp[1024];
-	int i,j,k;
-
-k=strlen(str);
-for(i=j=0;i<k;i++)
-	if(!(str[i]&0x80))
-		tmp[j++]=str[i];
-tmp[j]=0;
-strcpy(str,tmp);
-}
-
-/****************************************************************************/
-/* Updates dstst.dab file													*/
-/****************************************************************************/
-void updatestats(ulong size)
-{
-    char str[256];
-    int i,file;
-	ulong l;
-
-sprintf(str,"%sDSTS.DAB",ctrl_dir);
-if((file=nopen(str,O_RDWR))==-1) {
-	printf("ERR_OPEN %s\n",str);
-	return; }
-lseek(file,20L,SEEK_SET);	/* Skip timestamp, logons and logons today */
-read(file,&l,4);			/* Uploads today		 */
-l++;
-lseek(file,-4L,SEEK_CUR);
-write(file,&l,4);
-read(file,&l,4);			/* Upload bytes today	 */
-l+=size;
-lseek(file,-4L,SEEK_CUR);
-write(file,&l,4);
-close(file);
-}
-
-void addlist(char *inpath, file_t f, char dskip, char sskip)
-{
-	uchar str[256],fname[256],listpath[256],filepath[256]
-		,curline[256],nextline[256],*p,exist,ext[1024],tmpext[513];
-	int i,file;
-	long l;
-	FILE *stream;
-	struct find_t ff;
-
-if(mode&SEARCH_DIR) {
-	strcpy(str,cur_altpath ? altpath[cur_altpath-1] : dir[f.dir]->path);
-	if(str[0]=='.') {
-		sprintf(tmp,"%s%s",node_dir,str);
-		strcpy(str,tmp); }
-	strcat(str,"*.*");
-	printf("Searching %s\n\n",str);
-	for(i=_dos_findfirst(str,0,&ff);!i;i=_dos_findnext(&ff)) {
-		strupr(ff.name);
-		sprintf(filepath,"%s%s",cur_altpath ? altpath[cur_altpath-1]
-            : dir[f.dir]->path,ff.name);
-        if(filepath[0]=='.') { /* relative path */
-            sprintf(tmp,"%s%s",node_dir,filepath);
-            strcpy(filepath,tmp); }
-		f.misc=0;
-		f.desc[0]=0;
-		f.cdt=flength(filepath);
-		padfname(ff.name,f.name);
-		printf("%s  %10lu  %s\n"
-			,f.name,f.cdt,unixtodstr(fdate(filepath),str));
-		exist=findfile(f.dir,f.name);
-		if(exist) {
-			if(mode&NO_UPDATE)
-				continue;
-			getfileixb(&f);
-			if(mode&ULDATE_ONLY) {
-				f.dateuled=time(NULL);
-				update_uldate(f);
-				continue; } }
-
-		if(mode&FILE_DATE) {		/* get the file date and put into desc */
-			unixtodstr(fdate(filepath),f.desc);
-			strcat(f.desc,"  "); }
-
-		if(mode&TODAYS_DATE) {		/* put today's date in desc */
-			unixtodstr(time(NULL),f.desc);
-			strcat(f.desc,"  "); }
-
-		if(mode&FILE_ID) {
-			for(i=0;i<total_fextrs;i++)
-				if(!stricmp(fextr[i]->ext,f.name+9))
-					break;
-			if(i<total_fextrs) {
-				sprintf(tmp,"%sFILE_ID.DIZ",temp_dir);
-				remove(tmp);
-				system(cmdstr(fextr[i]->cmd,filepath,"FILE_ID.DIZ",NULL));
-				if(!fexist(tmp)) {
-					sprintf(tmp,"%sDESC.SDI",temp_dir);
-					remove(tmp);
-					system(cmdstr(fextr[i]->cmd,filepath,"DESC.SDI",NULL)); }
-				if((file=nopen(tmp,O_RDONLY))!=-1) {
-					memset(ext,0,513);
-					read(file,ext,512);
-					for(i=512;i;i--)
-						if(ext[i-1]>SP)
-							break;
-					ext[i]=0;
-					if(mode&ASCII_ONLY)
-						strip_exascii(ext);
-					if(!(mode&KEEP_DESC)) {
-						sprintf(tmpext,"%.256s",ext);
-						strip_ctrl(tmpext);
-						for(i=0;tmpext[i];i++)
-							if(isalpha(tmpext[i]))
-								break;
-						sprintf(f.desc,"%.*s",LEN_FDESC,tmpext+i);
-						for(i=0;f.desc[i]>=SP && i<LEN_FDESC;i++)
-							;
-						f.desc[i]=0; }
-					close(file);
-					f.misc|=FM_EXTDESC; } } }
-
-		f.dateuled=time(NULL);
-		f.altpath=cur_altpath;
-		strip_ctrl(f.desc);
-		if(mode&ASCII_ONLY)
-			strip_exascii(f.desc);
-		if(exist) {
-			putfiledat(f);
-			if(!(mode&NO_NEWDATE))
-				update_uldate(f); }
-		else
-			addfiledat(&f);
-		if(f.misc&FM_EXTDESC) {
-			truncsp(ext);
-			putextdesc(f.dir,f.datoffset,ext); }
-
-		if(mode&UL_STATS)
-			updatestats(f.cdt);
-		files++; }
-#ifdef __WATCOMC__
-   _dos_findclose(&ff);
-#endif
-	return; }
-
-
-strcpy(listpath,inpath);
-if((stream=fnopen(&file,listpath,O_RDONLY))==NULL) {
-	sprintf(listpath,"%s%s",cur_altpath ? altpath[cur_altpath-1]
-			: dir[f.dir]->path,inpath);
-	if(listpath[0]=='.') { /* relative path */
-		sprintf(str,"%s%s",node_dir,listpath);
-		strcpy(listpath,str); }
-	if((stream=fnopen(&file,listpath,O_RDONLY))==NULL) {
-		printf("Can't open: %s\n"
-			   "        or: %s\n",inpath,listpath);
-		return; } }
-
-printf("Adding %s to %s %s\n\n"
-	,listpath,lib[dir[f.dir]->lib]->sname,dir[f.dir]->sname);
-
-fgets(nextline,255,stream);
-while(!feof(stream) && !ferror(stream)) {
-	f.misc=0;
-	f.desc[0]=0;
-	strcpy(curline,nextline);
-	nextline[0]=0;
-	fgets(nextline,255,stream);
-	truncsp(curline);
-	if(curline[0]<=SP || (uchar)curline[0]>=0x7e)
-		continue;
-	printf("%s\n",curline);
-	strcpy(fname,curline);
-
-	p=strchr(fname,'.');
-	if(!p || p==fname || p>fname+8)    /* no dot or invalid dot location */
-		continue;
-	p=strchr(p,SP);
-	if(p) *p=0;
-	else				   /* no space after filename? */
-		continue;
-	strupr(fname);
-	strcpy(fname,unpadfname(fname,tmp));
-
-	padfname(fname,f.name);
-	if(strcspn(f.name,"\\/|<>+[]:=\";,")!=strlen(f.name))
-		continue;
-
-    for(i=0;i<12;i++)
-        if(f.name[i]<SP || (uchar)f.name[i]>0x7e)
-            break;
-
-	if(i<12)					/* Ctrl chars or EX-ASCII in filename? */
-		continue;
-	exist=findfile(f.dir,f.name);
-    if(exist) {
-        if(mode&NO_UPDATE)
-            continue;
-		getfileixb(&f);
-		if(mode&ULDATE_ONLY) {
-			f.dateuled=time(NULL);
-			update_uldate(f);
-			continue; } }
-
-	sprintf(filepath,"%s%s",cur_altpath ? altpath[cur_altpath-1]
-		: dir[f.dir]->path,fname);
-	if(filepath[0]=='.') { /* relative path */
-		sprintf(tmp,"%s%s",node_dir,filepath);
-		strcpy(filepath,tmp); }
-
-	if(mode&FILE_DATE) {		/* get the file date and put into desc */
-		l=fdate(filepath);
-		unixtodstr(l,f.desc);
-		strcat(f.desc,"  "); }
-
-	if(mode&TODAYS_DATE) {		/* put today's date in desc */
-		l=time(NULL);
-		unixtodstr(l,f.desc);
-		strcat(f.desc,"  "); }
-
-	if(dskip && strlen(curline)>=dskip) p=curline+dskip;
-	else {
-		p++;
-		while(*p==SP) p++; }
-	sprintf(tmp,"%.*s",LEN_FDESC-strlen(f.desc),p);
-	strcat(f.desc,tmp);
-
-	if(nextline[0]==SP || strlen(p)>LEN_FDESC) {	/* ext desc */
-		if(!(mode&NO_EXTEND)) {
-			memset(ext,0,513);
-			f.misc|=FM_EXTDESC;
-			sprintf(ext,"%s\r\n",p); }
-
-		if(nextline[0]==SP) {
-			strcpy(str,nextline);				   /* tack on to end of desc */
-			p=str+dskip;
-			i=LEN_FDESC-strlen(f.desc);
-			if(i>1) {
-				p[i-1]=0;
-				truncsp(p);
-				if(p[0]) {
-					strcat(f.desc," ");
-					strcat(f.desc,p); } } }
-
-		while(!feof(stream) && !ferror(stream) && strlen(ext)<512) {
-			if(nextline[0]!=SP)
-				break;
-			truncsp(nextline);
-			printf("%s\n",nextline);
-			if(!(mode&NO_EXTEND)) {
-				f.misc|=FM_EXTDESC;
-				p=nextline+dskip;
-				while(*p==SP) p++;
-				strcat(ext,p);
-				strcat(ext,"\r\n"); }
-			nextline[0]=0;
-			fgets(nextline,255,stream); } }
-
-
-	if(sskip) l=atol(fname+sskip);
-	else {
-		l=flength(filepath);
-		if(l<1L) {
-			printf("%s not found.\n",filepath);
-			continue; } }
-
-	if(mode&FILE_ID) {
-        for(i=0;i<total_fextrs;i++)
-            if(!stricmp(fextr[i]->ext,f.name+9))
-                break;
-        if(i<total_fextrs) {
-            sprintf(tmp,"%sFILE_ID.DIZ",temp_dir);
-            remove(tmp);
-			system(cmdstr(fextr[i]->cmd,filepath,"FILE_ID.DIZ",NULL));
-            if(!fexist(tmp)) {
-                sprintf(tmp,"%sDESC.SDI",temp_dir);
-                remove(tmp);
-				system(cmdstr(fextr[i]->cmd,filepath,"DESC.SDI",NULL)); }
-			if((file=nopen(tmp,O_RDONLY))!=-1) {
-				memset(ext,0,513);
-				read(file,ext,512);
-				for(i=512;i;i--)
-					if(ext[i-1]>SP)
-						break;
-				ext[i]=0;
-				if(mode&ASCII_ONLY)
-					strip_exascii(ext);
-				if(!(mode&KEEP_DESC)) {
-					sprintf(tmpext,"%.256s",ext);
-					strip_ctrl(tmpext);
-					for(i=0;tmpext[i];i++)
-						if(isalpha(tmpext[i]))
-							break;
-					sprintf(f.desc,"%.*s",LEN_FDESC,tmpext+i);
-					for(i=0;f.desc[i]>=SP && i<LEN_FDESC;i++)
-						;
-					f.desc[i]=0; }
-				close(file);
-				f.misc|=FM_EXTDESC; } } }
-
-	f.cdt=l;
-	f.dateuled=time(NULL);
-	f.altpath=cur_altpath;
-	strip_ctrl(f.desc);
-	if(mode&ASCII_ONLY)
-		strip_exascii(f.desc);
-	if(exist) {
-		putfiledat(f);
-		if(!(mode&NO_NEWDATE))
-			update_uldate(f); }
-	else
-		addfiledat(&f);
-	if(f.misc&FM_EXTDESC) {
-		truncsp(ext);
-		putextdesc(f.dir,f.datoffset,ext); }
-
-	if(mode&UL_STATS)
-		updatestats(l);
-	files++; }
-fclose(stream);
-if(mode&DEL_LIST && !(mode&SYNC_LIST)) {
-	printf("\nDeleting %s\n",listpath);
-	remove(listpath); }
-
-}
-
-/***********************/
-/* Hex-plus to integer */
-/***********************/
-uint hptoi(char *str)
-{
-	char tmp[128];
-	uint i;
-
-if(!str[1] || toupper(str[0])<='F')
-	return(strtol(str,0,16));
-strcpy(tmp,str);
-tmp[0]='F';
-i=strtol(tmp,0,16)+((toupper(str[0])-'F')*0x10);
-return(i);
-}
-
-/****************************************************************************/
-/* Places into 'strout' CR or ETX terminated string starting at             */
-/* 'start' and ending at 'start'+'length' or terminator from 'strin'        */
-/****************************************************************************/
-void getrec(char *strin,int start,int length,char *strout)
-{
-    int i=0,stop;
-
-stop=start+length;
-while(start<stop) {
-    if(strin[start]==ETX)
-        break;
-    strout[i++]=strin[start++]; }
-strout[i]=0;
-}
-
-
-/****************************************************************************/
-/* Gets filedata from dircode.DAT file										*/
-/* Need fields .name ,.dir and .offset to get other info    				*/
-/* Does not fill .dateuled or .datedled fields.                             */
-/****************************************************************************/
-void getfiledat(file_t *f)
-{
-	char buf[F_LEN+1],str[256];
-	int file;
-	long length;
-
-sprintf(str,"%s%s.DAT",dir[f->dir]->data_dir,dir[f->dir]->code);
-if((file=nopen(str,O_RDONLY))==-1) {
-	printf("ERR_OPEN %s\n",str);
-	return; }
-length=filelength(file);
-if(f->datoffset>length) {
-	close(file);
-	printf("ERR_LEN %s %lu\n",str,length);
-	return; }
-if(length%F_LEN) {
-	close(file);
-	printf("ERR_LEN %s %lu\n",str,length);
-	return; }
-lseek(file,f->datoffset,SEEK_SET);
-if(read(file,buf,F_LEN)!=F_LEN) {
-    close(file);
-	printf("ERR_READ %s %lu\n",str,F_LEN);
-	return; }
-close(file);
-getrec(buf,F_ALTPATH,2,str);
-f->altpath=hptoi(str);
-getrec(buf,F_CDT,7,str);
-f->cdt=atol(str);
-f->timetodl=0;
-
-getrec(buf,F_DESC,LEN_FDESC,f->desc);
-getrec(buf,F_ULER,LEN_ALIAS,f->uler);
-getrec(buf,F_TIMESDLED,5,str);
-f->timesdled=atoi(str);
-getrec(buf,F_OPENCOUNT,3,str);
-f->opencount=atoi(str);
-if(buf[F_MISC]!=ETX)
-	f->misc=buf[F_MISC]-SP;
-else
-	f->misc=0;
-}
-
-/****************************************************************************/
-/* Removes any files in the user transfer index (XFER.IXT) that match the   */
-/* specifications of dest, or source user, or filename or any combination.  */
-/****************************************************************************/
-void rmuserxfers(int fromuser, int destuser, char *fname)
-{
-    char str[256],*ixtbuf;
-    int file;
-    long l,length;
-
-sprintf(str,"%sXFER.IXT",data_dir);
-if(!fexist(str))
-    return;
-if(!flength(str)) {
-    remove(str);
-    return; }
-if((file=nopen(str,O_RDONLY))==-1) {
-	printf("ERR_OPEN %s\n",str);
-    return; }
-length=filelength(file);
-if((ixtbuf=(char *)MALLOC(length))==NULL) {
-    close(file);
-	printf("ERR_ALLOC %s\n",str,length);
-    return; }
-if(read(file,ixtbuf,length)!=length) {
-    close(file);
-	FREE(ixtbuf);
-	printf("ERR_READ %s %lu\n",str,length);
-    return; }
-close(file);
-if((file=nopen(str,O_WRONLY|O_TRUNC))==-1) {
-	FREE(ixtbuf);
-	printf("ERR_OPEN %s\n",str);
-    return; }
-for(l=0;l<length;l+=24) {
-    if(fname!=NULL && fname[0]) {               /* fname specified */
-        if(!strncmp(ixtbuf+l+5,fname,12)) {     /* this is the file */
-            if(destuser && fromuser) {          /* both dest and from user */
-                if(atoi(ixtbuf+l)==destuser && atoi(ixtbuf+l+18)==fromuser)
-                    continue; }                 /* both match */
-            else if(fromuser) {                 /* from user */
-                if(atoi(ixtbuf+l+18)==fromuser) /* matches */
-                    continue; }
-            else if(destuser) {                 /* dest user */
-                if(atoi(ixtbuf+l)==destuser)    /* matches */
-                    continue; }
-            else continue; } }                  /* no users, so match */
-    else if(destuser && fromuser) {
-        if(atoi(ixtbuf+l+18)==fromuser && atoi(ixtbuf+l)==destuser)
-            continue; }
-    else if(destuser && atoi(ixtbuf+l)==destuser)
-        continue;
-    else if(fromuser && atoi(ixtbuf+l+18)==fromuser)
-        continue;
-    write(file,ixtbuf+l,24); }
-close(file);
-FREE(ixtbuf);
-}
-
-
-
-/****************************************************************************/
-/* Removes DAT and IXB entries for the file in the struct 'f'               */
-/****************************************************************************/
-void removefiledat(file_t f)
-{
-	char c,str[256],ixbname[12],HUGE16 *ixbbuf,fname[13];
-    int file;
-    ulong l,length;
-
-strcpy(fname,f.name);
-for(c=8;c<12;c++)   /* Turn FILENAME.EXT into FILENAMEEXT */
-    fname[c]=fname[c+1];
-sprintf(str,"%s%s.IXB",dir[f.dir]->data_dir,dir[f.dir]->code);
-if((file=nopen(str,O_RDONLY))==-1) {
-	printf("ERR_OPEN %s\n",str);
-    return; }
-length=filelength(file);
-if(!length) {
-	close(file);
-	return; }
-if((ixbbuf=(char *)MALLOC(length))==0) {
-    close(file);
-	printf("ERR_ALLOC %s %lu\n",str,length);
-    return; }
-if(lread(file,ixbbuf,length)!=length) {
-    close(file);
-	printf("ERR_READ %s %lu\n",str,length);
-	FREE((char *)ixbbuf);
-    return; }
-close(file);
-if((file=nopen(str,O_WRONLY|O_TRUNC))==-1) {
-	printf("ERR_OPEN %s\n",str);
-    return; }
-for(l=0;l<length;l+=F_IXBSIZE) {
-    for(c=0;c<11;c++)
-        ixbname[c]=ixbbuf[l+c];
-    ixbname[c]=0;
-    if(strcmp(ixbname,fname))
-		if(lwrite(file,&ixbbuf[l],F_IXBSIZE)!=F_IXBSIZE) {
-            close(file);
-			printf("ERR_WRITE %s %lu\n",str,F_IXBSIZE);
-			FREE((char *)ixbbuf);
-            return; } }
-FREE((char *)ixbbuf);
-close(file);
-sprintf(str,"%s%s.DAT",dir[f.dir]->data_dir,dir[f.dir]->code);
-if((file=nopen(str,O_WRONLY))==-1) {
-	printf("ERR_OPEN %s\n",str);
-    return; }
-lseek(file,f.datoffset,SEEK_SET);
-c=ETX;          /* If first char of record is ETX, record is unused */
-if(write(file,&c,1)!=1) { /* So write a D_T on the first byte of the record */
-    close(file);
-	printf("ERR_WRITE %s 1",str);
-    return; }
-close(file);
-if(f.dir==user_dir)  /* remove file from index */
-    rmuserxfers(0,0,f.name);
-
-}
-
-
-void synclist(char *inpath, int dirnum)
-{
-	uchar str[1024],fname[256],listpath[256], HUGE16 *ixbbuf,*p;
-	int i,file,found;
-	long l,m,length;
-	FILE *stream;
-	file_t f;
-
-sprintf(str,"%s%s.IXB",dir[dirnum]->data_dir,dir[dirnum]->code);
-if((file=nopen(str,O_RDONLY))==-1) {
-	printf("ERR_OPEN %s\n",str);
-	return; }
-length=filelength(file);
-if(length%F_IXBSIZE) {
-	close(file);
-	printf("ERR_LEN %s\n");
-	return; }
-if((ixbbuf=(uchar HUGE16 *)MALLOC(length))==NULL) {
-	close(file);
-	printf("ERR_ALLOC %s\n",str);
-	return; }
-if(lread(file,ixbbuf,length)!=length) {
-	close(file);
-	FREE((char *)ixbbuf);
-	printf("ERR_READ %s\n",str);
-	return; }
-close(file);
-
-strcpy(listpath,inpath);
-if((stream=fnopen(&file,listpath,O_RDONLY))==NULL) {
-	sprintf(listpath,"%s%s",cur_altpath ? altpath[cur_altpath-1]
-			: dir[dirnum]->path,inpath);
-	if(listpath[0]=='.') { /* relative path */
-		sprintf(str,"%s%s",node_dir,listpath);
-		strcpy(listpath,str); }
-	if((stream=fnopen(&file,listpath,O_RDONLY))==NULL) {
-		printf("Can't open: %s\n"
-			   "        or: %s\n",inpath,listpath);
-		return; } }
-
-printf("\nSynchronizing %s with %s %s\n\n"
-	,listpath,lib[dir[dirnum]->lib]->sname,dir[dirnum]->sname);
-
-for(l=0;l<length;l+=F_IXBSIZE) {
-	m=l;
-	for(i=0;i<12 && l<length;i++)
-		if(i==8)
-			str[i]='.';
-		else
-			str[i]=ixbbuf[m++]; 	/* Turns FILENAMEEXT into FILENAME.EXT */
-	str[i]=0;
-	unpadfname(str,fname);
-	rewind(stream);
-	found=0;
-	while(!found) {
-		if(!fgets(str,1000,stream))
-			break;
-		truncsp(str);
-		p=strchr(str,SP);
-		if(p) *p=0;
-		if(!stricmp(str,fname))
-			found=1; }
-	if(found)
-		continue;
-	padfname(fname,f.name);
-	printf("%s not found in list - ",f.name);
-	f.dir=dirnum;
-	f.datoffset=ixbbuf[m]|((long)ixbbuf[m+1]<<8)|((long)ixbbuf[m+2]<<16);
-	getfiledat(&f);
-	if(f.opencount) {
-		printf("currently OPEN by %u users\n",f.opencount);
-		continue; }
-	removefiledat(f);
-	sprintf(str,"%s%s"
-		,f.altpath>0 && f.altpath<=altpaths ? altpath[f.altpath-1]
-		: dir[f.dir]->path,fname);
-	if(str[0]=='.') {
-		sprintf(tmp,"%s%s",node_dir,str);
-        strcpy(str,tmp); }
-	if(remove(str))
-		printf("Error removing %s\n",str);
-	removed++;
-	printf("Removed from database\n"); }
-
-if(mode&DEL_LIST) {
-	printf("\nDeleting %s\n",listpath);
-	remove(listpath); }
-}
-
-char *usage="\nusage: addfiles code [.alt_path] [/opts] [\"*user\"] +list "
-			 "[desc_off] [size_off]"
-	"\n   or: addfiles code [.alt_path] [/opts] [\"*user\"]  file "
-		"\"description\"\n"
-	"\navailable opts:"
-	"\n       a    import ASCII only (no extended ASCII)"
-	"\n       b    synchronize database with file list (use with caution)"
-	"\n       c    do not remove extra spaces from file description"
-	"\n       d    delete list after import"
-	"\n       e    do not import extended descriptions"
-	"\n       f    include file date in descriptions"
-	"\n       t    include today's date in descriptions"
-	"\n       i    include added files in upload statistics"
-	"\n       n    do not update information for existing files"
-	"\n       o    update upload date only for existing files"
-	"\n       u    do not update upload date for existing files"
-	"\n       z    check for and import FILE_ID.DIZ and DESC.SDI"
-	"\n       k    keep original short description (not DIZ)"
-	"\n       s    search directory for files (no file list)"
-	"\n"
-	"\nAuto-ADD:   use * in place of code for Auto-ADD of FILES.BBS"
-	"\n            use *filename to Auto-ADD a different filename"
-	"\n"
-	;
-
-/*********************/
-/* Entry point (duh) */
-/*********************/
-int main(int argc, char **argv)
-{
-	uchar str[256],str2[256],*p,exist,listgiven=0,namegiven=0,ext[513]
-		,auto_name[13]="FILES.BBS";
-	int i,j,k,file;
-	long l;
-	read_cfg_text_t txt;
-	file_t f;
-
-putenv("TZ=UCT0");
-_fmode=O_BINARY;
-setvbuf(stdout,NULL,_IONBF,0);
-
-fprintf(stderr,"\nADDFILES Version %s (%s) - Adds files to Synchronet "
-	"Filebase\n"
-	,ADDFILES_VER
-#if defined(__OS2__)
-	,"OS/2"
-#elif defined(__NT__)
-    ,"Win32"
-#elif defined(__DOS4G__)
-	,"DOS4G"
-#elif defined(__FLAT__)
-	,"DOS32"
-#else
-	,"DOS16"
-#endif
-	);
-
-if(argc<2) {
-	printf(usage);
-	return(1); }
-
-p=getenv("SBBSNODE");
-if(p==NULL) {
-	printf("\nSBBSNODE environment variable not set.\n");
-	printf("\nExample: SET SBBSNODE=C:\\SBBS\\NODE1\n");
-	exit(1); }
-
-putenv("TZ=UCT0");
-
-strcpy(node_dir,p);
-if(node_dir[strlen(node_dir)-1]!='\\')
-	strcat(node_dir,"\\");
-
-txt.openerr="\7\nError opening %s for read.\n";
-txt.reading="\nReading %s...";
-txt.readit="\rRead %s       ";
-txt.allocerr="\7\nError allocating %u bytes of memory\n";
-txt.error="\7\nERROR: Offset %lu in %s\r\n\n";
-
-read_node_cfg(txt);
-if(ctrl_dir[0]=='.') {   /* Relative path */
-	strcpy(str,ctrl_dir);
-	sprintf(ctrl_dir,"%s%s",node_dir,str); }
-read_main_cfg(txt);
-if(data_dir[0]=='.') {   /* Relative path */
-	strcpy(str,data_dir);
-	sprintf(data_dir,"%s%s",node_dir,str); }
-if(temp_dir[1]!=':' && temp_dir[0]!='\\') {
-	strcpy(str,temp_dir);
-	sprintf(temp_dir,"%s%s",node_dir,str); }
-read_file_cfg(txt);
-printf("\n\n");
-
-if(argv[1][0]=='*') {
-	if(argv[1][1])
-		sprintf(auto_name,"%.12s",argv[1]+1);
-	mode|=AUTO_ADD;
-	i=0; }
-else {
-	for(i=0;i<total_dirs;i++)
-		if(!stricmp(dir[i]->code,argv[1]))
-			break;
-
-	if(i>=total_dirs) {
-		printf("Directory code '%s' not found.\n",argv[1]);
-		exit(1); } }
-
-memset(&f,0,sizeof(file_t));
-f.dir=i;
-strcpy(f.uler,"-> ADDFILES <-");
-
-for(j=2;j<argc;j++) {
-	if(argv[j][0]=='*')     /* set the uploader name */
-		sprintf(f.uler,"%.25s",argv[j]+1);
-	else if(argv[j][0]=='/') {      /* options */
-		for(i=1;i<strlen(argv[j]);i++)
-			switch(toupper(argv[j][i])) {
-				case 'A':
-					mode|=ASCII_ONLY;
-					break;
-				case 'B':
-					mode|=(SYNC_LIST|NO_UPDATE);
-					break;
-				case 'C':
-					mode|=KEEP_SPACE;
-					break;
-				case 'D':
-					mode|=DEL_LIST;
-					break;
-				case 'E':
-					mode|=NO_EXTEND;
-					break;
-				case 'I':
-					mode|=UL_STATS;
-					break;
-				case 'Z':
-					mode|=FILE_ID;
-					break;
-				case 'K':
-					mode|=KEEP_DESC;	 /* Don't use DIZ for short desc */
-					break;
-				case 'N':
-					mode|=NO_UPDATE;
-					break;
-				case 'O':
-					mode|=ULDATE_ONLY;
-					break;
-				case 'U':
-					mode|=NO_NEWDATE;
-					break;
-				case 'F':
-					mode|=FILE_DATE;
-					break;
-				case 'T':
-					mode|=TODAYS_DATE;
-					break;
-				case 'S':
-					mode|=SEARCH_DIR;
-					break;
-				default:
-					printf(usage);
-					return(1); } }
-	else if(argv[j][0]=='+') {      /* filelist - FILES.BBS */
-		listgiven=1;
-		if(isdigit(argv[j+1][0])) { /* skip x characters before description */
-			if(isdigit(argv[j+2][0])) { /* skip x characters before size */
-				addlist(argv[j]+1,f,atoi(argv[j+1]),atoi(argv[j+2]));
-				j+=2; }
-			else {
-				addlist(argv[j]+1,f,atoi(argv[j+1]),0);
-				j++; } }
-		else
-			addlist(argv[j]+1,f,0,0);
-		if(mode&SYNC_LIST)
-			synclist(argv[j]+1,f.dir); }
-	else if(argv[j][0]=='.') {      /* alternate file path */
-		cur_altpath=atoi(argv[j]+1);
-		if(cur_altpath>altpaths) {
-			printf("Invalid alternate path.\n");
-			exit(1); } }
-	else {
-		namegiven=1;
-		padfname(argv[j],f.name);
-		f.desc[0]=0;
-		strupr(f.name);
-		if(j+1==argc) {
-			printf("%s no description given.\n",f.name);
-			continue; }
-		sprintf(str,"%s%s",cur_altpath ? altpath[cur_altpath-1]
-			: dir[f.dir]->path,argv[j]);
-		if(str[0]=='.') {
-			sprintf(tmp,"%s%s",node_dir,str);
-			strcpy(str,tmp); }
-		if(mode&FILE_DATE)
-			sprintf(f.desc,"%s  ",unixtodstr(fdate(str),tmp));
-		if(mode&TODAYS_DATE)
-			sprintf(f.desc,"%s  ",unixtodstr(time(NULL),tmp));
-		sprintf(tmp,"%.*s",LEN_FDESC-strlen(f.desc),argv[++j]);
-		strcpy(f.desc,tmp);
-		l=flength(str);
-		if(l==-1) {
-			printf("%s not found.\n",str);
-			continue; }
-		exist=findfile(f.dir,f.name);
-		if(exist) {
-			if(mode&NO_UPDATE)
-				continue;
-			getfileixb(&f);
-			if(mode&ULDATE_ONLY) {
-				f.dateuled=time(NULL);
-				update_uldate(f);
-				continue; } }
-		f.cdt=l;
-		f.dateuled=time(NULL);
-		f.altpath=cur_altpath;
-		strip_ctrl(f.desc);
-		if(mode&ASCII_ONLY)
-			strip_exascii(f.desc);
-		printf("%s %7lu %s\n",f.name,f.cdt,f.desc);
-		if(mode&FILE_ID) {
-			for(i=0;i<total_fextrs;i++)
-				if(!stricmp(fextr[i]->ext,f.name+9))
-					break;
-			if(i<total_fextrs) {
-				sprintf(tmp,"%sFILE_ID.DIZ",temp_dir);
-				remove(tmp);
-				system(cmdstr(fextr[i]->cmd,str,"FILE_ID.DIZ",NULL));
-				if(!fexist(tmp)) {
-					sprintf(tmp,"%sDESC.SDI",temp_dir);
-					remove(tmp);
-					system(cmdstr(fextr[i]->cmd,str,"DESC.SDI",NULL)); }
-				if((file=nopen(tmp,O_RDONLY))!=-1) {
-					memset(ext,0,513);
-					read(file,ext,512);
-					if(!(mode&KEEP_DESC)) {
-						sprintf(f.desc,"%.*s",LEN_FDESC,ext);
-						for(i=0;f.desc[i]>=SP && i<LEN_FDESC;i++)
-							;
-						f.desc[i]=0; }
-					close(file);
-					f.misc|=FM_EXTDESC; } } }
-		if(exist) {
-			putfiledat(f);
-			if(!(mode&NO_NEWDATE))
-				update_uldate(f); }
-		else
-			addfiledat(&f);
-
-		if(f.misc&FM_EXTDESC)
-			putextdesc(f.dir,f.datoffset,ext);
-
-		if(mode&UL_STATS)
-			updatestats(l);
-		files++; } }
-
-if(mode&AUTO_ADD) {
-	for(i=0;i<total_dirs;i++) {
-		if(dir[i]->misc&DIR_NOAUTO)
-			continue;
-		f.dir=i;
-		if(mode&SEARCH_DIR) {
-			addlist("",f,0,0);
-			continue; }
-        sprintf(str,"%s.LST",dir[f.dir]->code);
-        if(flength(str)>0L) {
-			printf("Auto-adding %s\n",str);
-            addlist(str,f,0,0);
-			if(mode&SYNC_LIST)
-				synclist(str,i);
-            continue; }
-		sprintf(str,"%s%s",dir[f.dir]->path,auto_name);
-		if(str[0]=='.') {
-			sprintf(tmp,"%s%s",node_dir,str);
-			strcpy(str,tmp); }
-		if(flength(str)>0L) {
-			printf("Auto-adding %s\n",str);
-			addlist(str,f,0,0);
-			if(mode&SYNC_LIST)
-				synclist(str,i);
-			continue; } } }
-
-else {
-	if(!listgiven && !namegiven) {
-		sprintf(str,"%s.LST",dir[f.dir]->code);
-		if(flength(str)<=0L)
-			strcpy(str,"FILES.BBS");
-		addlist(str,f,0,0);
-		if(mode&SYNC_LIST)
-			synclist(str,f.dir); } }
-
-printf("\n%lu file(s) added.",files);
-if(removed)
-	printf("\n%lu files(s) removed.",removed);
-printf("\n");
-return(0);
-}
-
diff --git a/src/sbbs2/addfiles/makeall.bat b/src/sbbs2/addfiles/makeall.bat
deleted file mode 100755
index d68900c3d3..0000000000
--- a/src/sbbs2/addfiles/makeall.bat
+++ /dev/null
@@ -1,11 +0,0 @@
-@echo off
-wmake OS=DOS %1 %2 %3 %4 %5
-if errorlevel 1 goto end
-wmake OS=DOSX %1 %2 %3 %4 %5
-if errorlevel 1 goto end
-wmake OS=OS2 %1 %2 %3 %4 %5
-if errorlevel 1 goto end
-wmake OS=NT %1 %2 %3 %4 %5
-if errorlevel 1 goto end
-:end
-
diff --git a/src/sbbs2/addfiles/makefile b/src/sbbs2/addfiles/makefile
deleted file mode 100644
index f83c75e37a..0000000000
--- a/src/sbbs2/addfiles/makefile
+++ /dev/null
@@ -1,89 +0,0 @@
-############################################
-# Makefile for Synchronet ADDFILES Utility #
-# For use with Watcom C/C++ 		   #
-############################################
-
-!ifndef OS
-OS	= DOS
-!endif
-
-!ifeq OS DOS
-CC	= *wcc
-!else
-CC	= *wcc386
-!endif
-
-LD	= *wlink
-INCLUDE = \watcom\h;\watcom\h\os2;..;..\smb;..\rio
-
-
-!ifeq OS DOS
-CFLAGS	= -I$(INCLUDE) -s -fh=$*.pch -bt=$(OS) -fo=$(OS)\ -ml
-!else
-CFLAGS	= -I$(INCLUDE) -s -fh=$*.pch -bt=$(OS) -fo=$(OS)\
-!endif
-
-!ifeq OS DOS
-SYSTEM  = DOS
-!endif
-!ifeq OS OS2
-SYSTEM  = OS2V2
-!endif
-!ifeq OS DOSX
-SYSTEM  = DOS4G
-!endif
-!ifeq OS NT
-SYSTEM	= NT
-!endif
-
-LFLAGS  = option stack=16k system $(SYSTEM)
-
-MAIN	= $(OS)\addfiles.exe
-OBJS	= $(OS)\addfiles.obj $(OS)\scfgvars.obj $(OS)\scfglib1.obj &
-	  $(OS)\ars.obj $(OS)\scfglib2.obj
-HEADERS = ..\sbbs.h ..\sbbsdefs.h ..\gen_defs.h ..\scfgvars.c
-
-# Implicit C Compile Rule
-.c.obj:
-	@echo Compiling (I) $[@ to $^@ ...
-	$(CC) $(CFLAGS) $[@
-
-# Main EXE Link Rule
-$(MAIN): $(OBJS) 
-    	@echo Linking $< ...
-	$(LD) $(LFLAGS) file { $(OBJS) }
-
-# Global Variables
-$(OS)\scfgvars.obj: ..\scfgvars.c ..\sbbsdefs.h
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) $[@
-
-# ARS
-$(OS)\ars.obj: ..\ars.c ..\ars_defs.h
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) $[@
-
-# Shared Functions
-$(OS)\scfglib1.obj: ..\scfglib1.c ..\sbbs.h ..\sbbsdefs.h ..\scfgvars.c &
-	..\scfglib.h
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) &
--DNO_MSGS_CFG &
--DNO_TEXT_CFG &
--DNO_XTRN_CFG &
--DNO_CMDS_CFG &
--DNO_CHAT_CFG &
-$[@
-
-# Shared Functions
-$(OS)\scfglib2.obj: ..\scfglib2.c ..\sbbs.h ..\sbbsdefs.h ..\scfgvars.c &
-	..\scfglib.h
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) &
--DNO_MSGS_CFG &
--DNO_TEXT_CFG &
--DNO_XTRN_CFG &
--DNO_CMDS_CFG &
--DNO_CHAT_CFG &
-$[@
-
diff --git a/src/sbbs2/addfiles/makefile.bc b/src/sbbs2/addfiles/makefile.bc
deleted file mode 100644
index 892ff8a196..0000000000
--- a/src/sbbs2/addfiles/makefile.bc
+++ /dev/null
@@ -1,76 +0,0 @@
-############################################
-# Makefile for Synchronet ADDFILES Utility #
-# For use with Borland C++ for DOS or OS/2 #
-############################################
-
-# Macros
-CC	= bcc
-LD	= tlink
-!ifdef __OS2__
-OS	= OS2
-INCLUDE = c:\bcos2\include;..;..\smb;..\rio
-LIB	= c:\bcos2\lib
-CFLAGS  = -N -d -C -I$(INCLUDE)
-LFLAGS  = -c
-!else
-OS	= DOS
-INCLUDE = \bc31\include;..;..\smb;..\rio
-LIB	= \bc31\lib
-MODEL	= l
-CFLAGS	= -N -d -C -m$(MODEL) -I$(INCLUDE)
-LFLAGS	= -n -c
-!endif
-MAIN	= $(OS)\addfiles.exe
-OBJS	= $(OS)\addfiles.obj $(OS)\scfgvars.obj $(OS)\scfglib1.obj \
-	  $(OS)\scfglib2.obj $(OS)\ars.obj
-HEADERS = ..\sbbs.h ..\sbbsdefs.h ..\gen_defs.h ..\scfgvars.c
-
-# Implicit C Compile Rule
-{.}.c.obj:
-	@echo Compiling (I) $< to $@ ...
-	$(CC) $(CFLAGS) -n$(OS) -c $<
-
-# Main EXE Link Rule
-$(MAIN): $(OBJS) 
-    	@echo Linking $< ...
-!ifdef __OS2__
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c02.obj $(OBJS)
-+, $*, $*, $(LIB)\os2.lib $(LIB)\c2.lib
-!else
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c0$(MODEL).obj $(OBJS)
-+, $*, $*, $(LIB)\c$(MODEL).lib $(LIB)\math$(MODEL).lib $(LIB)\emu.lib
-!endif
-
-# Global Variables
-$(OS)\scfgvars.obj: ..\scfgvars.c ..\sbbsdefs.h
-	@echo Compiling ..\$&.c to $< ...
-	$(CC) $(CFLAGS) -c -n$(OS) ..\$&.c
-
-# ARS
-$(OS)\ars.obj: ..\ars.c ..\ars_defs.h
-        @echo Compiling ..\$&.c to $< ...
-        $(CC) $(CFLAGS) -c -n$(OS) ..\$&.c
-
-# Shared Functions
-$(OS)\scfglib1.obj: ..\sbbs.h ..\sbbsdefs.h ..\scfglib1.c ..\scfgvars.c
-        @echo Compiling ..\$&.c to $< ...
-        $(CC) $(CFLAGS) -c -n$(OS) @&&!
--DNO_MSGS_CFG
--DNO_TEXT_CFG
--DNO_XTRN_CFG 
--DNO_CMDS_CFG
--DNO_CHAT_CFG
-! ..\$&.c
-
-# Shared Functions
-$(OS)\scfglib2.obj: ..\sbbs.h ..\sbbsdefs.h ..\scfglib2.c ..\scfgvars.c
-        @echo Compiling ..\$&.c to $< ...
-        $(CC) $(CFLAGS) -c -n$(OS) @&&!
--DNO_MSGS_CFG
--DNO_TEXT_CFG
--DNO_XTRN_CFG 
--DNO_CMDS_CFG
--DNO_CHAT_CFG
-! ..\$&.c
diff --git a/src/sbbs2/allusers/allusers.c b/src/sbbs2/allusers/allusers.c
deleted file mode 100644
index f64638bb23..0000000000
--- a/src/sbbs2/allusers/allusers.c
+++ /dev/null
@@ -1,367 +0,0 @@
-/* ALLUSERS.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/****************************************************************************/
-/* Makes global changes to Synchronet user database (USER.DAT)				*/
-/* Compatible with Version 2.1 of Synchronet BBS Software					*/
-/****************************************************************************/
-
-#include <io.h>
-#include <share.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <sys/stat.h>
-
-#include "sbbsdefs.h"
-
-int  min=0,max=99;
-long reqflags[4]={0},reqrest=0,reqexempt=0;
-
-char *usage=
-"\nusage: allusers [data\\user path] [[-require] [...]] "
-	"/modify [[/modify] [...]]\n"
-"\nwhere require is one of:\n"
-"       L#                  set minimum level to # (default=0)\n"
-"       M#                  set maximum level to # (default=99)\n"
-"       F#<flags>           set required flags from flag set #\n"
-"       E<flags>            set required exemptions\n"
-"       R<flags>            set required restrictions\n"
-"\nwhere modify is one of:\n"
-"       L#                  change security level to #\n"
-"       F#[+|-]<flags>      add or remove flags from flag set #\n"
-"       E[+|-]<flags>       add or remove exemption flags\n"
-"       R[+|-]<flags>       add or remove restriction flags\n"
-"\nExamples:\n"
-"       ALLUSERS -L30 /FA   add 'A' to flag set #1 for all level 30+ users\n"
-"       ALLUSERS /F3-G      remove 'G' from flag set #3 for all users\n"
-"       ALLUSERS -F2B /E-P  remove 'P' exemption for all users with FLAG '2B'\n"
-"       ALLUSERS /R+W       add 'W' restriction for all users\n"
-;
-
-/****************************************************************************/
-/* Attempts to lock a user record, retries for up to 10 seconds 			*/
-/* Returns 0 on success, -1 on failure										*/
-/****************************************************************************/
-int lockuser(FILE *stream, ulong offset)
-{
-	time_t start;
-
-if(lock(fileno(stream),offset,U_LEN)==0)
-	return(0);
-start=time(NULL);
-while(1) {
-	if(lock(fileno(stream),offset,U_LEN)==0)
-		return(0);
-	if(time(NULL)-start>=10L)
-		break; }
-return(-1);
-}
-
-/****************************************************************************/
-/* Converts an ASCII Hex string into an ulong								*/
-/****************************************************************************/
-ulong ahtoul(char *str)
-{
-	ulong l,val=0;
-
-while((l=(*str++)|0x20)!=0x20)
-	val=(l&0xf)+(l>>6&1)*9+val*16;
-return(val);
-}
-
-/****************************************************************************/
-/* Truncates white-space chars off end of 'str' and terminates at first tab */
-/****************************************************************************/
-void truncsp(char *str)
-{
-	char c;
-
-str[strcspn(str,"\t")]=0;
-c=strlen(str);
-while(c && (uchar)str[c-1]<=SP) c--;
-str[c]=0;
-}
-
-/****************************************************************************/
-/* Returns bytes offset into user record for flag set # 'set'               */
-/****************************************************************************/
-long getflagoff(int set)
-{
-switch(set) {
-	default:
-		return(U_FLAGS1);
-	case 2:
-		return(U_FLAGS2);
-	case 3:
-		return(U_FLAGS3);
-	case 4:
-		return(U_FLAGS4); }
-}
-
-/****************************************************************************/
-/* Checks a user record against the requirements set on the command line	*/
-/* Returns 1 if the user meets the requirements (or no requirements were	*/
-/* specified) or 0 if the user does not meet any of the requirements.		*/
-/****************************************************************************/
-int chkuser(FILE *stream, long offset)
-{
-	char str[128];
-	int i;
-
-if(min || max!=99) {			/* Check security level */
-	fseek(stream,offset+U_LEVEL,SEEK_SET);
-	if(!fread(str,2,1,stream))
-		return(0);
-	str[2]=0;
-	i=atoi(str);
-	if(i<min || i>max)			/* not within range */
-		return(0); }			/* so skip this user */
-
-for(i=0;i<4;i++)
-	if(reqflags[i]) {
-		fseek(stream,offset+getflagoff(i+1),SEEK_SET);
-		if(!fread(str,8,1,stream))
-			return(0);
-		str[8]=0;
-		truncsp(str);
-		if((ahtoul(str)&reqflags[i])!=reqflags[i])
-			return(0); }	/* doesn't have 'em all */
-
-if(reqrest) {
-	fseek(stream,offset+U_REST,SEEK_SET);
-	if(!fread(str,8,1,stream))
-		return(0);
-	str[8]=0;
-	truncsp(str);
-	if((ahtoul(str)&reqrest)!=reqrest)
-		return(0); }
-
-if(reqexempt) {
-	fseek(stream,offset+U_REST,SEEK_SET);
-	if(!fread(str,8,1,stream))
-		return(0);
-	str[8]=0;
-	truncsp(str);
-	if((ahtoul(str)&reqexempt)!=reqexempt)
-        return(0); }
-
-return(1);
-}
-
-int main(int argc, char **argv)
-{
-	char	dir[128],str[128];
-	int 	i,j,k,file,set,sub,mod;
-	long	l,f,flags,flagoff,length,offset;
-	FILE	*stream;
-
-printf("\nALLUSERS v2.10 - Bulk User Editor for Synchronet User Database\n");
-
-if(argc<2) {
-	printf(usage);
-	exit(1); }
-dir[0]=0;
-for(i=1;i<argc;i++) {
-	flags=flagoff=sub=mod=0;
-	if(argv[i][0]=='-')
-		switch(toupper(argv[i][1])) {
-			case 'L':                       /* Set minimum sec level */
-				min=atoi(argv[i]+2);
-				break;
-			case 'M':                       /* Set maximum sec level */
-				max=atoi(argv[i]+2);
-				break;
-			case 'F':                       /* Set required flags */
-				j=3;
-				set=1;
-				if(isdigit(argv[i][2]))
-					set=argv[i][2]&0xf;
-				else
-					j=2;
-				for(;argv[i][j];j++)
-                    if(isalpha(argv[i][j]))
-						reqflags[set-1]|=FLAG(toupper(argv[i][j]));
-				break;
-			case 'R':                       /* Set required restrictions */
-				for(j=2;argv[i][j];j++)
-                    if(isalpha(argv[i][j]))
-						reqrest|=FLAG(toupper(argv[i][j]));
-				break;
-			case 'E':                       /* Set required exemptions */
-				for(j=2;argv[i][j];j++)
-                    if(isalpha(argv[i][j]))
-						reqexempt|=FLAG(toupper(argv[i][j]));
-                break;
-			default:						/* Unrecognized include */
-				printf(usage);
-                exit(1); }
-
-	else if(argv[i][0]=='/')
-		switch(toupper(argv[i][1])) {
-			case 'F':   /* flags */
-				j=3;
-				set=1;
-				if(isdigit(argv[i][2]))
-					set=argv[i][2]&0xf;
-				else
-					j=2;
-				if(argv[i][j]=='+')
-					j++;
-				else if(argv[i][j]=='-') {
-					j++;
-					sub=1; }
-				for(;argv[i][j];j++)
-                    if(isalpha(argv[i][j]))
-                        flags|=FLAG(toupper(argv[i][j]));
-				sprintf(str,"%sUSER.DAT",dir);
-				if((file=sopen(str,O_RDWR|O_BINARY,SH_DENYNO))==-1) {
-					printf("Error opening %s\n",str);
-					exit(1); }
-				if((stream=fdopen(file,"w+b"))==NULL) {
-					printf("Error opening %s\n",str);
-					exit(1); }
-				setvbuf(stream,NULL,_IOFBF,2048);
-				length=filelength(file);
-				printf("\n%s Flags %s Set #%d\n",sub ? "Removing":"Adding"
-					,sub ? "from":"to",set);
-				for(offset=0;offset<length;offset+=U_LEN) {
-					printf("%lu of %lu (%u modified)\r"
-						,(offset/U_LEN)+1,length/U_LEN,mod);
-					if(lockuser(stream,offset)) {
-						printf("Error locking offset %lu\n",offset);
-						continue; }
-					if(!chkuser(stream,offset)) {
-						unlock(fileno(stream),offset,U_LEN);
-						continue; }
-					flagoff=getflagoff(set);
-					fseek(stream,offset+flagoff,SEEK_SET);
-					fread(str,8,1,stream);
-					str[8]=0;
-					truncsp(str);
-					l=f=ahtoul(str);
-					if(sub)
-						l&=~flags;
-					else
-						l|=flags;
-					if(l==f) {	/* no change */
-						unlock(fileno(stream),offset,U_LEN);
-						continue; }
-					mod++;
-					sprintf(str,"%lx",l);
-					while(strlen(str)<8)
-						strcat(str,"\3");
-					fseek(stream,offset+flagoff,SEEK_SET);
-					fwrite(str,8,1,stream);
-					unlock(fileno(stream),offset,U_LEN); }
-				fclose(stream);
-				printf("\n");
-				break;
-		   case 'E':    /* Exemptions */
-				flagoff=U_EXEMPT;
-		   case 'R':    /* Restrictions */
-				if(!flagoff)
-					flagoff=U_REST;
-				j=2;
-				if(argv[i][j]=='+')
-					j++;
-				else if(argv[i][j]=='-') {
-					j++;
-					sub=1; }
-				for(;argv[i][j];j++)
-                    if(isalpha(argv[i][j]))
-                        flags|=FLAG(toupper(argv[i][j]));
-				sprintf(str,"%sUSER.DAT",dir);
-				if((file=sopen(str,O_RDWR|O_BINARY,SH_DENYNO))==-1) {
-					printf("Error opening %s\n",str);
-					exit(1); }
-				if((stream=fdopen(file,"w+b"))==NULL) {
-					printf("Error opening %s\n",str);
-					exit(1); }
-				setvbuf(stream,NULL,_IOFBF,2048);
-				length=filelength(file);
-				printf("\n%s %s\n"
-					,sub ? "Removing":"Adding"
-					,flagoff==U_REST ? "Restrictions":"Exemptions");
-				for(offset=0;offset<length;offset+=U_LEN) {
-					printf("%lu of %lu (%u modified)\r"
-						,(offset/U_LEN)+1,length/U_LEN,mod);
-					if(lockuser(stream,offset)) {
-						printf("Error locking offset %lu\n",offset);
-                        continue; }
-					if(!chkuser(stream,offset)) {
-						unlock(fileno(stream),offset,U_LEN);
-						continue; }
-					fseek(stream,offset+flagoff,SEEK_SET);
-					fread(str,8,1,stream);
-					str[8]=0;
-					truncsp(str);
-					l=f=ahtoul(str);
-					if(sub)
-						l&=~flags;
-					else
-						l|=flags;
-					if(l==f) {	/* no change */
-						unlock(fileno(stream),offset,U_LEN);
-						continue; }
-					mod++;
-					sprintf(str,"%lx",l);
-					while(strlen(str)<8)
-						strcat(str,"\3");
-					fseek(stream,offset+flagoff,SEEK_SET);
-					fwrite(str,8,1,stream);
-					unlock(fileno(stream),offset,U_LEN); }
-				fclose(stream);
-				printf("\n");
-                break;
-		   case 'L':    /* Level */
-				j=atoi(argv[i]+2);
-				if(j>99)
-					j=99;
-				if(j<0)
-					j=0;
-				sprintf(str,"%sUSER.DAT",dir);
-				if((file=sopen(str,O_RDWR|O_BINARY,SH_DENYNO))==-1) {
-					printf("Error opening %s\n",str);
-					exit(1); }
-				if((stream=fdopen(file,"w+b"))==NULL) {
-					printf("Error opening %s\n",str);
-					exit(1); }
-				setvbuf(stream,NULL,_IOFBF,2048);
-				length=filelength(file);
-				printf("\nChanging Levels\n");
-				for(offset=0;offset<length;offset+=U_LEN) {
-					printf("%lu of %lu (%u modified)\r"
-						,(offset/U_LEN)+1,length/U_LEN,mod);
-					if(lockuser(stream,offset)) {
-						printf("Error locking offset %lu\n",offset);
-                        continue; }
-					if(!chkuser(stream,offset)) {
-						unlock(fileno(stream),offset,U_LEN);
-						continue; }
-					fseek(stream,offset+U_LEVEL,SEEK_SET);
-					fread(str,2,1,stream);
-					str[2]=0;
-					truncsp(str);
-					if(atoi(str)==j) {		/* no change */
-						unlock(fileno(stream),offset,U_LEN);
-						continue; }
-					sprintf(str,"%02u",j);
-					fseek(stream,offset+U_LEVEL,SEEK_SET);
-					fwrite(str,2,1,stream);
-					unlock(fileno(stream),offset,U_LEN);
-					mod++; }
-				fclose(stream);
-				printf("\n");
-                break;
-			default:
-				printf(usage);
-				exit(1); }
-	else {
-		strcpy(dir,argv[i]);
-		if(dir[strlen(dir)-1]!='\\' && dir[strlen(dir)-1]!=':')
-			strcat(dir,"\\"); } }
-return(0);
-}
diff --git a/src/sbbs2/allusers/make.bat b/src/sbbs2/allusers/make.bat
deleted file mode 100755
index 402dbfbb19..0000000000
--- a/src/sbbs2/allusers/make.bat
+++ /dev/null
@@ -1,2 +0,0 @@
-@echo off
-bcc -I.. -w-pro allusers.c
diff --git a/src/sbbs2/ans2msg/ans2msg.c b/src/sbbs2/ans2msg/ans2msg.c
deleted file mode 100644
index 7ef485826b..0000000000
--- a/src/sbbs2/ans2msg/ans2msg.c
+++ /dev/null
@@ -1,155 +0,0 @@
-/* ANS2MSG.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* Convert ANSI messages to Synchronet .MSG (Ctrl-A code) format */
-
-#include <stdio.h>
-#include <conio.h>
-
-int main(int argc, char **argv)
-{
-	char esc,n[25],ni;
-	int i,ch;
-	FILE *in,*out;
-
-if(argc<3) {
-	printf("\nANS2MSG v1.06\n");
-	printf("\nusage: ans2msg infile.ans outfile.msg\n");
-	exit(0); }
-
-if((in=fopen(argv[1],"rb"))==NULL) {
-	printf("\nerror opening %s\n",argv[1]);
-	exit(1); }
-
-if((out=fopen(argv[2],"wb"))==NULL) {
-	printf("\nerror opening %s\n",argv[2]);
-	exit(1); }
-
-esc=0;
-while((ch=fgetc(in))!=EOF) {
-	if(ch=='[' && esc) {    /* ANSI escape sequence */
-		ni=0;				/* zero number index */
-		while((ch=fgetc(in))!=EOF) {
-			if(isdigit(ch)) {			/* 1 digit */
-				n[ni]=ch&0xf;
-				ch=fgetc(in);
-				if(ch==EOF)
-					break;
-				if(isdigit(ch)) {		/* 2 digits */
-					n[ni]*=10;
-					n[ni]+=ch&0xf;
-					ch=fgetc(in);
-					if(ch==EOF)
-						break;
-					if(isdigit(ch)) {	/* 3 digits */
-						n[ni]*=10;
-						n[ni]+=ch&0xf;
-						ch=fgetc(in); } }
-				ni++; }
-			if(ch==';')
-				continue;
-			switch(ch) {
-				case '=':
-				case '?':
-					ch=fgetc(in);	   /* First digit */
-					if(isdigit(ch)) ch=fgetc(in);	/* l or h ? */
-					if(isdigit(ch)) ch=fgetc(in);
-					if(isdigit(ch)) fgetc(in);
-					break;
-				case 'J':
-					if(n[0]==2) 					/* clear screen */
-						fputs("\1l",out);           /* ctrl-al */
-					break;
-				case 'K':
-					fputs("\1>",out);               /* clear to eol */
-					break;
-				case 'm':
-					for(i=0;i<ni;i++) {
-						fputc(1,out);				/* ctrl-ax */
-						switch(n[i]) {
-							default:
-							case 0:
-							case 2: 				/* no attribute */
-								fputc('n',out);
-								break;
-							case 1: 				/* high intensity */
-								fputc('h',out);
-								break;
-							case 3:
-							case 4:
-							case 5: 				/* blink */
-							case 6:
-							case 7:
-								fputc('i',out);
-								break;
-							case 8: 				/* concealed */
-								fputc('e',out);
-								break;
-							case 30:
-								fputc('k',out);
-								break;
-							case 31:
-								fputc('r',out);
-								break;
-							case 32:
-								fputc('g',out);
-								break;
-							case 33:
-								fputc('y',out);
-								break;
-							case 34:
-								fputc('b',out);
-								break;
-							case 35:
-								fputc('m',out);
-								break;
-							case 36:
-								fputc('c',out);
-								break;
-							case 37:
-								fputc('w',out);
-								break;
-							case 40:
-								fputc('0',out);
-								break;
-							case 41:
-								fputc('1',out);
-								break;
-							case 42:
-								fputc('2',out);
-								break;
-							case 43:
-								fputc('3',out);
-								break;
-							case 44:
-								fputc('4',out);
-								break;
-							case 45:
-								fputc('5',out);
-								break;
-							case 46:
-								fputc('6',out);
-								break;
-							case 47:
-								fputc('7',out);
-								break; } }
-					break;
-				case 'C':
-					fprintf(out,"\1%c",0x7f+n[0]);
-					break;
-				default:
-					printf("Unsupported ANSI code '%c'\r\n",ch);
-					break; }
-			break; }	/* end of while */
-		esc=0;
-		continue; } 	/* end of ANSI expansion */
-	if(ch=='\x1b')
-		esc=1;
-	else {
-		esc=0;
-		fputc(ch,out); } }
-fcloseall();
-return(0);
-}
-
diff --git a/src/sbbs2/ars.c b/src/sbbs2/ars.c
deleted file mode 100644
index f9dff33a27..0000000000
--- a/src/sbbs2/ars.c
+++ /dev/null
@@ -1,502 +0,0 @@
-/* ARS.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#ifdef __WATCOMC__
-	#include <malloc.h>
-#else
-	#include <alloc.h>
-#endif
-#include "ars_defs.h"
-
-#ifdef SBBS
-#include "sbbs.h"
-#endif
-
-char *arstr(ushort *count, char *str)
-{
-	static char *nular="";
-	char ar[256],*p;
-	uint i,j,n,artype=AR_LEVEL,not=0,equal=0,x;
-
-for(i=j=0;str[i];i++) {
-    if(str[i]==SP)
-        continue;
-
-    if(str[i]=='(') {
-        if(not)
-            ar[j++]=AR_NOT;
-        not=equal=0;
-        ar[j++]=AR_BEGNEST;
-        continue; }
-
-    if(str[i]==')') {
-        ar[j++]=AR_ENDNEST;
-        continue; }
-
-    if(str[i]=='|') {
-        ar[j++]=AR_OR;
-        continue; }
-    
-    if(str[i]=='!') {
-        not=1;
-        continue; }
-
-    if(str[i]=='=') {
-        equal=1;
-        continue; }
-
-    if(str[i]=='&')
-        continue;
-
-    if(isalpha(str[i])) {
-        if(!strncmp(str+i,"OR",2)) {
-            ar[j++]=AR_OR;
-            i++;
-            continue; }
-
-        if(!strncmp(str+i,"AND",3)) {    /* AND is ignored */
-            i+=2;
-            continue; }
-
-        if(!strncmp(str+i,"NOT",3)) {
-            not=1;
-            i+=2;
-            continue; }
-
-        if(!strncmp(str+i,"EQUAL TO",8)) {
-            equal=1;
-            i+=7;
-            continue; }
-
-        if(!strncmp(str+i,"EQUAL",5)) {
-            equal=1;
-            i+=4;
-            continue; }
-
-        if(!strncmp(str+i,"EQUALS",6)) {
-            equal=1;
-            i+=5;
-            continue; } }
-
-    if(str[i]=='$') {
-        switch(str[i+1]) {
-            case 'A':
-                artype=AR_AGE;
-                break;
-            case 'B':
-                artype=AR_BPS;
-                break;
-            case 'C':
-                artype=AR_CREDIT;
-                break;
-            case 'D':
-                artype=AR_UDFR;
-                break;
-            case 'E':
-                artype=AR_EXPIRE;
-                break;
-            case 'F':
-                artype=AR_FLAG1;
-                break;
-            case 'G':
-                artype=AR_LOCAL;
-				if(not)
-					ar[j++]=AR_NOT;
-				not=0;
-				ar[j++]=artype;
-                break;
-            case 'H':
-                artype=AR_SUB;
-                break;
-            case 'I':
-                artype=AR_LIB;
-                break;
-            case 'J':
-                artype=AR_DIR;
-                break;
-            case 'K':
-                artype=AR_UDR;
-                break;
-            case 'L':
-                artype=AR_LEVEL;
-                break;
-            case 'M':
-                artype=AR_GROUP;
-                break;
-            case 'N':
-                artype=AR_NODE;
-                break;
-            case 'O':
-                artype=AR_TUSED;
-                break;
-            case 'P':
-                artype=AR_PCR;
-                break;
-			case 'Q':
-				artype=AR_RANDOM;
-				break;
-            case 'R':
-                artype=AR_TLEFT;
-                break;
-            case 'S':
-                artype=AR_SEX;
-                break;
-            case 'T':
-                artype=AR_TIME;
-                break;
-            case 'U':
-                artype=AR_USER;
-                break;
-			case 'V':
-				artype=AR_LOGONS;
-				break;
-            case 'W':
-                artype=AR_DAY;
-                break;
-            case 'X':
-                artype=AR_EXEMPT;
-                break;
-			case 'Y':   /* Days since last on */
-				artype=AR_LASTON;
-				break;
-            case 'Z':
-                artype=AR_REST;
-                break;
-            case '[':
-                artype=AR_ANSI;
-				if(not)
-					ar[j++]=AR_NOT;
-				not=0;
-				ar[j++]=artype;
-                break;
-            case '0':
-                artype=AR_NULL;
-                break;
-            case '*':
-                artype=AR_RIP;
-				if(not)
-					ar[j++]=AR_NOT;
-				not=0;
-				ar[j++]=artype;
-                break;
-
-            }
-        i++;
-        continue; }
-
-    if(isalpha(str[i])) {
-        n=i;
-        if(!strncmp(str+i,"AGE",3)) {
-            artype=AR_AGE;
-            i+=2; }
-        else if(!strncmp(str+i,"BPS",3)) {
-            artype=AR_BPS;
-            i+=2; }
-        else if(!strncmp(str+i,"PCR",3)) {
-            artype=AR_PCR;
-            i+=2; }
-        else if(!strncmp(str+i,"SEX",3)) {
-            artype=AR_SEX;
-            i+=2; }
-        else if(!strncmp(str+i,"UDR",3)) {
-            artype=AR_UDR;
-            i+=2; }
-        else if(!strncmp(str+i,"DAY",3)) {
-            artype=AR_DAY;
-            i+=2; }
-        else if(!strncmp(str+i,"RIP",3)) {
-            artype=AR_RIP;
-			if(not)
-                ar[j++]=AR_NOT;
-            not=0;
-			ar[j++]=artype;
-			i+=2; }
-		else if(!strncmp(str+i,"WIP",3)) {
-			artype=AR_WIP;
-			if(not)
-                ar[j++]=AR_NOT;
-            not=0;
-			ar[j++]=artype;
-            i+=2; }
-		else if(!strncmp(str+i,"OS2",3)) {
-			artype=AR_OS2;
-			if(not)
-                ar[j++]=AR_NOT;
-            not=0;
-			ar[j++]=artype;
-            i+=2; }
-		else if(!strncmp(str+i,"DOS",3)) {
-			artype=AR_DOS;
-			if(not)
-                ar[j++]=AR_NOT;
-            not=0;
-			ar[j++]=artype;
-            i+=2; }
-		else if(!strncmp(str+i,"SUBCODE",7)) {
-            artype=AR_SUBCODE;
-            i+=6; }
-        else if(!strncmp(str+i,"SUB",3)) {
-            artype=AR_SUB;
-            i+=2; }
-		else if(!strncmp(str+i,"LIB",3)) {
-            artype=AR_LIB;
-            i+=2; }
-		else if(!strncmp(str+i,"DIRCODE",7)) {
-            artype=AR_DIRCODE;
-            i+=6; }
-        else if(!strncmp(str+i,"DIR",3)) {
-            artype=AR_DIR;
-            i+=2; }
-		else if(!strncmp(str+i,"ANSI",4)) {
-            artype=AR_ANSI;
-			if(not)
-				ar[j++]=AR_NOT;
-            not=0;
-			ar[j++]=artype;
-            i+=3; }
-        else if(!strncmp(str+i,"UDFR",4)) {
-            artype=AR_UDFR;
-            i+=3; }
-        else if(!strncmp(str+i,"FLAG",4)) {
-            artype=AR_FLAG1;
-            i+=3; }
-        else if(!strncmp(str+i,"NODE",4)) {
-            artype=AR_NODE;
-            i+=3; }
-        else if(!strncmp(str+i,"NULL",4)) {
-            artype=AR_NULL;
-            i+=3; }
-        else if(!strncmp(str+i,"USER",4)) {
-            artype=AR_USER;
-            i+=3; }
-        else if(!strncmp(str+i,"TIME",4)) {
-            artype=AR_TIME;
-            i+=3; }
-        else if(!strncmp(str+i,"REST",4)) {
-            artype=AR_REST;
-            i+=3; }
-        else if(!strncmp(str+i,"LEVEL",5)) {
-            artype=AR_LEVEL;
-            i+=4; }
-        else if(!strncmp(str+i,"TLEFT",5)) {
-            artype=AR_TLEFT;
-            i+=4; }
-        else if(!strncmp(str+i,"TUSED",5)) {
-            artype=AR_TUSED;
-            i+=4; }
-        else if(!strncmp(str+i,"LOCAL",5)) {
-            artype=AR_LOCAL;
-			if(not)
-				ar[j++]=AR_NOT;
-			not=0;
-			ar[j++]=artype;
-            i+=4; }
-        else if(!strncmp(str+i,"GROUP",5)) {
-            artype=AR_GROUP;
-            i+=4; }
-        else if(!strncmp(str+i,"EXPIRE",6)) {
-			artype=AR_EXPIRE;
-            i+=5; }
-		else if(!strncmp(str+i,"EXPERT",6)) {
-			artype=AR_EXPERT;
-			if(not)
-                ar[j++]=AR_NOT;
-            not=0;
-			ar[j++]=artype;
-            i+=5; }
-		else if(!strncmp(str+i,"SYSOP",5)) {
-			artype=AR_SYSOP;
-			if(not)
-                ar[j++]=AR_NOT;
-            not=0;
-			ar[j++]=artype;
-			i+=4; }
-		else if(!strncmp(str+i,"QUIET",5)) {
-			artype=AR_QUIET;
-			if(not)
-                ar[j++]=AR_NOT;
-            not=0;
-			ar[j++]=artype;
-            i+=4; }
-        else if(!strncmp(str+i,"EXEMPT",6)) {
-            artype=AR_EXEMPT;
-            i+=5; }
-		else if(!strncmp(str+i,"RANDOM",6)) {
-			artype=AR_RANDOM;
-            i+=5; }
-		else if(!strncmp(str+i,"LASTON",6)) {
-			artype=AR_LASTON;
-            i+=5; }
-		else if(!strncmp(str+i,"LOGONS",6)) {
-			artype=AR_LOGONS;
-            i+=5; }
-        else if(!strncmp(str+i,"CREDIT",6)) {
-            artype=AR_CREDIT;
-            i+=5; }
-		else if(!strncmp(str+i,"MAIN_CMDS",9)) {
-			artype=AR_MAIN_CMDS;
-			i+=8; }
-		else if(!strncmp(str+i,"FILE_CMDS",9)) {
-			artype=AR_FILE_CMDS;
-            i+=8; }
-        if(n!=i)            /* one of the above */
-            continue; }
-
-    if(not)
-        ar[j++]=AR_NOT;
-    if(equal)
-        ar[j++]=AR_EQUAL;
-    not=equal=0;
-
-    if(artype==AR_FLAG1 && isdigit(str[i])) {   /* flag set specified */
-        switch(str[i]) {
-            case '2':
-                artype=AR_FLAG2;
-                break;
-            case '3':
-                artype=AR_FLAG3;
-                break;
-            case '4':
-                artype=AR_FLAG4;
-                break; }
-        continue; }
-
-	if(artype==AR_SUB && !isdigit(str[i]))
-		artype=AR_SUBCODE;
-	if(artype==AR_DIR && !isdigit(str[i]))
-		artype=AR_DIRCODE;
-
-    ar[j++]=artype;
-    if(isdigit(str[i])) {
-        if(artype==AR_TIME) {
-            n=atoi(str+i)*60;
-            p=strchr(str+i,':');
-            if(p)
-                n+=atoi(p+1);
-			*((short *)(ar+j))=n;
-            j+=2;
-            while(isdigit(str[i+1]) || str[i+1]==':') i++;
-            continue; }
-		n=atoi(str+i);
-        switch(artype) {
-            case AR_DAY:
-                if(n>6)     /* not past saturday */
-                    n=6;
-            case AR_AGE:    /* byte operands */
-            case AR_PCR:
-            case AR_UDR:
-            case AR_UDFR:
-            case AR_NODE:
-            case AR_LEVEL:
-            case AR_TLEFT:
-            case AR_TUSED:
-                ar[j++]=n;
-                break;
-            case AR_BPS:    /* int operands */
-                if(n<300)
-                    n*=100;
-			case AR_MAIN_CMDS:
-			case AR_FILE_CMDS:
-            case AR_EXPIRE:
-            case AR_CREDIT:
-            case AR_USER:
-			case AR_RANDOM:
-			case AR_LASTON:
-			case AR_LOGONS:
-				*((short *)(ar+j))=n;
-                j+=2;
-                break;
-            case AR_GROUP:
-            case AR_LIB:
-            case AR_DIR:
-            case AR_SUB:
-                if(n) n--;              /* convert to 0 base */
-				*((short *)(ar+j))=n;
-                j+=2;
-                break;
-            default:                    /* invalid numeric AR type */
-                j--;
-                break; }
-        while(isdigit(str[i+1])) i++;
-        continue; }
-	if(artype==AR_SUBCODE || artype==AR_DIRCODE) {
-		for(n=0;n<8
-			&& str[i]
-			&& str[i]!=SP
-			&& str[i]!='('
-			&& str[i]!=')'
-			&& str[i]!='='
-			&& str[i]!='|'
-			;n++)
-			ar[j++]=str[i++];
-		ar[j++]=0;
-		continue; }
-    switch(artype) {
-        case AR_FLAG1:
-        case AR_FLAG2:
-        case AR_FLAG3:
-        case AR_FLAG4:
-        case AR_EXEMPT:
-        case AR_SEX:
-        case AR_REST:
-            ar[j++]=str[i];
-            break;
-#ifdef SBBS
-        case AR_SUB:
-            for(n=0;n<total_subs;n++)
-                if(!strnicmp(str+i,sub[n]->code,strlen(sub[n]->code)))
-                    break;
-            if(n<total_subs) {
-				*((short *)(ar+j))=n;
-                j+=2; }
-            else        /* Unknown sub-board */
-                j--;
-            while(isalpha(str[i+1])) i++;
-            break;
-        case AR_DIR:
-            for(n=0;n<total_dirs;n++)
-                if(!strnicmp(str+i,dir[n]->code,strlen(dir[n]->code)))
-                    break;
-            if(n<total_dirs) {
-				*((short *)(ar+j))=n;
-                j+=2; }
-            else        /* Unknown directory */
-                j--;
-            while(isalpha(str[i+1])) i++;
-            break;
-#endif
-        case AR_DAY:
-            if(str[i]=='S' && str[i+1]=='U')            /* Sunday */
-                ar[j++]=0;
-            else if(str[i]=='M')                        /* Monday */
-                ar[j++]=1;
-            else if(str[i]=='T' && str[i+1]=='U')       /* Tuesday */
-                ar[j++]=2;
-            else if(str[i]=='W')                        /* Wednesday */
-                ar[j++]=3;
-            else if(str[i]=='T' && str[i+1]=='H')       /* Thursday */
-                ar[j++]=4;
-            else if(str[i]=='F')                        /* Friday */
-                ar[j++]=5;
-            else ar[j++]=6;                             /* Saturday */
-            while(isalpha(str[i+1])) i++;
-            break;
-            } }
-if(!j)
-	return(nular);	/* Save memory */
-
-ar[j++]=AR_NULL;
-/** DEBUG stuff
-for(i=0;i<j;i++)
-    lprintf("%02X ",(uint)ar[i]);
-lputs("\r\n");
-***/
-if((p=(char *)MALLOC(j))==NULL)
-    return(NULL);
-memcpy(p,ar,j);
-if(count)
-	(*count)=j;
-return(p);
-}
-
diff --git a/src/sbbs2/ars_defs.h b/src/sbbs2/ars_defs.h
deleted file mode 100644
index 2782811b82..0000000000
--- a/src/sbbs2/ars_defs.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* ARS_DEFS.H */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#ifndef _ARS_DEFS_H
-#define _ARS_DEFS_H
-
-/************************************************************************/
-/* Synchronet Access Requirement Strings fucntion prototypes and type	*/
-/* definitions															*/
-/************************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-#include "gen_defs.h"
-
-char *arstr(ushort *count, char *str);
-
-enum {                              /* Access requirement binaries */
-     AR_NULL
-    ,AR_OR
-    ,AR_NOT
-    ,AR_EQUAL
-    ,AR_BEGNEST
-    ,AR_ENDNEST
-    ,AR_LEVEL
-    ,AR_AGE
-    ,AR_BPS
-    ,AR_NODE
-    ,AR_TLEFT
-    ,AR_TUSED
-    ,AR_USER
-	,AR_TIME
-    ,AR_PCR
-	,AR_FLAG1
-	,AR_FLAG2
-	,AR_FLAG3
-	,AR_FLAG4
-	,AR_EXEMPT
-	,AR_REST
-    ,AR_SEX
-	,AR_UDR
-	,AR_UDFR
-	,AR_EXPIRE
-	,AR_CREDIT
-	,AR_DAY
-	,AR_ANSI
-	,AR_RIP
-	,AR_LOCAL
-	,AR_GROUP
-	,AR_SUB
-	,AR_LIB
-	,AR_DIR
-	,AR_EXPERT
-	,AR_SYSOP
-	,AR_QUIET
-	,AR_MAIN_CMDS
-	,AR_FILE_CMDS
-	,AR_RANDOM
-	,AR_LASTON
-	,AR_LOGONS
-	,AR_WIP
-	,AR_SUBCODE
-	,AR_DIRCODE
-	,AR_OS2
-	,AR_DOS
-    };
-
-#endif		/* Don't add anything after this line */
diff --git a/src/sbbs2/atcodes.c b/src/sbbs2/atcodes.c
deleted file mode 100644
index cd1ff94258..0000000000
--- a/src/sbbs2/atcodes.c
+++ /dev/null
@@ -1,514 +0,0 @@
-#line 1 "ATCODES.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-#include "cmdshell.h"
-
-extern char *wday[];    /* 3 char days of week */
-char question[128];
-
-int syncatcodes(char *sp, int len)
-{
-	char str2[128],*tp;
-
-/* Synchronet Specific */
-
-if(!strncmp(sp,"SETSTR:",7))
-    strcpy(main_csi.str,sp+7);
-
-else if(!strncmp(sp,"EXEC:",5))
-	exec_bin(sp+5,&main_csi);
-
-else if(!strncmp(sp,"MENU:",5))
-    menu(sp+5);
-
-else if(!strncmp(sp,"TYPE:",5))
-    printfile(cmdstr(sp+5,nulstr,nulstr,str2),0);
-
-else if(!strcmp(sp,"QUESTION"))
-    bputs(question);
-
-else if(!strncmp(sp,"NAME-L",6))
-    bprintf("%-*.*s",len,len,useron.alias);
-
-else if(!strncmp(sp,"NAME-R",6))
-    bprintf("%*.*s",len,len,useron.alias);
-
-else if(!strcmp(sp,"HANDLE"))
-    bputs(useron.handle);
-
-else if(!strcmp(sp,"CID") || !strcmp(sp,"IP"))
-    bputs(cid);
-
-else if(!strcmp(sp,"GRP"))
-    bputs(usrgrps ? grp[usrgrp[curgrp]]->sname : nulstr);
-
-else if(!strncmp(sp,"GRP-L",5))
-    bprintf("%-*.*s",len,len,usrgrps ? grp[usrgrp[curgrp]]->sname : nulstr);
-
-else if(!strncmp(sp,"GRP-R",5))
-    bprintf("%*.*s",len,len,usrgrps ? grp[usrgrp[curgrp]]->sname : nulstr);
-
-else if(!strcmp(sp,"GRPL"))
-    bputs(usrgrps ? grp[usrgrp[curgrp]]->lname : nulstr);
-
-else if(!strncmp(sp,"GRPL-L",6))
-    bprintf("%-*.*s",len,len,usrgrps ? grp[usrgrp[curgrp]]->lname : nulstr);
-
-else if(!strncmp(sp,"GRPL-R",6))
-    bprintf("%*.*s",len,len,usrgrps ? grp[usrgrp[curgrp]]->lname : nulstr);
-
-else if(!strcmp(sp,"GN"))
-    bprintf("%u",usrgrps ? curgrp+1 : 0);
-
-else if(!strcmp(sp,"GL"))
-    bprintf("%-4u",usrgrps ? curgrp+1 : 0);
-
-else if(!strcmp(sp,"GR"))
-    bprintf("%4u",usrgrps ? curgrp+1 : 0);
-
-else if(!strcmp(sp,"SUB"))
-    bputs(usrgrps ? sub[usrsub[curgrp][cursub[curgrp]]]->sname : nulstr);
-
-else if(!strncmp(sp,"SUB-L",5))
-    bprintf("%-*.*s",len,len,usrgrps
-        ? sub[usrsub[curgrp][cursub[curgrp]]]->sname : nulstr);
-
-else if(!strncmp(sp,"SUB-R",5))
-    bprintf("%*.*s",len,len,usrgrps
-        ? sub[usrsub[curgrp][cursub[curgrp]]]->sname : nulstr);
-
-else if(!strcmp(sp,"SUBL"))
-    bputs(usrgrps  ? sub[usrsub[curgrp][cursub[curgrp]]]->lname : nulstr);
-
-else if(!strncmp(sp,"SUBL-L",6))
-    bprintf("%-*.*s",len,len,usrgrps
-        ? sub[usrsub[curgrp][cursub[curgrp]]]->lname : nulstr);
-
-else if(!strncmp(sp,"SUBL-R",6))
-    bprintf("%*.*s",len,len,usrgrps
-        ? sub[usrsub[curgrp][cursub[curgrp]]]->lname : nulstr);
-
-else if(!strcmp(sp,"SN"))
-    bprintf("%u",usrgrps ? cursub[curgrp]+1 : 0);
-
-else if(!strcmp(sp,"SL"))
-    bprintf("%-4u",usrgrps ? cursub[curgrp]+1 : 0);
-
-else if(!strcmp(sp,"SR"))
-    bprintf("%4u",usrgrps ? cursub[curgrp]+1 : 0);
-
-else if(!strcmp(sp,"LIB"))
-    bputs(usrlibs ? lib[usrlib[curlib]]->sname : nulstr);
-
-else if(!strncmp(sp,"LIB-L",5))
-    bprintf("%-*.*s",len,len,usrlibs ? lib[usrlib[curlib]]->sname : nulstr);
-
-else if(!strncmp(sp,"LIB-R",5))
-    bprintf("%*.*s",len,len,usrlibs ? lib[usrlib[curlib]]->sname : nulstr);
-
-else if(!strcmp(sp,"LIBL"))
-    bputs(usrlibs ? lib[usrlib[curlib]]->lname : nulstr);
-
-else if(!strncmp(sp,"LIBL-L",6))
-    bprintf("%-*.*s",len,len,usrlibs ? lib[usrlib[curlib]]->lname : nulstr);
-
-else if(!strncmp(sp,"LIBL-R",6))
-    bprintf("%*.*s",len,len,usrlibs ? lib[usrlib[curlib]]->lname : nulstr);
-
-else if(!strcmp(sp,"LN"))
-    bprintf("%u",usrlibs ? curlib+1 : 0);
-
-else if(!strcmp(sp,"LL"))
-    bprintf("%-4u",usrlibs ? curlib+1 : 0);
-
-else if(!strcmp(sp,"LR"))
-    bprintf("%4u",usrlibs  ? curlib+1 : 0);
-
-else if(!strcmp(sp,"DIR"))
-    bputs(usrlibs ? dir[usrdir[curlib][curdir[curlib]]]->sname :nulstr);
-
-else if(!strncmp(sp,"DIR-L",5))
-    bprintf("%-*.*s",len,len,usrlibs
-        ? dir[usrdir[curlib][curdir[curlib]]]->sname : nulstr);
-
-else if(!strncmp(sp,"DIR-R",5))
-    bprintf("%*.*s",len,len,usrlibs
-        ? dir[usrdir[curlib][curdir[curlib]]]->sname : nulstr);
-
-else if(!strcmp(sp,"DIRL"))
-    bputs(usrlibs ? dir[usrdir[curlib][curdir[curlib]]]->lname : nulstr);
-
-else if(!strncmp(sp,"DIRL-L",6))
-    bprintf("%-*.*s",len,len,usrlibs
-        ? dir[usrdir[curlib][curdir[curlib]]]->lname : nulstr);
-
-else if(!strncmp(sp,"DIRL-R",6))
-    bprintf("%*.*s",len,len,usrlibs
-        ? dir[usrdir[curlib][curdir[curlib]]]->lname : nulstr);
-
-else if(!strcmp(sp,"DN"))
-    bprintf("%u",usrlibs ? curdir[curlib]+1 : 0);
-
-else if(!strcmp(sp,"DL"))
-    bprintf("%-4u",usrlibs ? curdir[curlib]+1 : 0);
-
-else if(!strcmp(sp,"DR"))
-    bprintf("%4u",usrlibs ? curdir[curlib]+1 : 0);
-
-else if(!strcmp(sp,"NOACCESS")) {
-    if(noaccess_str==text[NoAccessTime])
-        bprintf(noaccess_str,noaccess_val/60,noaccess_val%60);
-    else if(noaccess_str==text[NoAccessDay])
-        bprintf(noaccess_str,wday[noaccess_val]);
-    else
-        bprintf(noaccess_str,noaccess_val); }
-
-else if(!strcmp(sp,"LAST")) {
-    tp=strrchr(useron.alias,SP);
-    if(tp) tp++;
-    else tp=useron.alias;
-    bputs(tp); }
-
-else if(!strcmp(sp,"REAL")) {
-    strcpy(str2,useron.name);
-    tp=strchr(str2,SP);
-    if(tp) *tp=0;
-    bputs(str2); }
-
-else if(!strcmp(sp,"FIRSTREAL")) {
-    strcpy(str2,useron.name);
-    tp=strchr(str2,SP);
-    if(tp) *tp=0;
-    bputs(str2); }
-
-else if(!strcmp(sp,"LASTREAL")) {
-    tp=strrchr(useron.name,SP);
-    if(tp) tp++;
-    else tp=useron.name;
-    bputs(tp); }
-
-else if(!strcmp(sp,"MAILW"))
-	bprintf("%u",getmail(useron.number,0));
-
-else if(!strcmp(sp,"MAILP"))
-	bprintf("%u",getmail(useron.number,1));
-
-else if(!strncmp(sp,"MAILW:",6))
-	bprintf("%u",getmail(atoi(sp+6),0));
-
-else if(!strncmp(sp,"MAILP:",6))
-	bprintf("%u",getmail(atoi(sp+6),1));
-
-else return(0);
-
-return(len);
-}
-
-/****************************************************************************/
-/* Returns 0 if invalid @ code. Returns length of @ code if valid.          */
-/****************************************************************************/
-int atcodes(char *instr)
-{
-	char	str[64],str2[64],*p,*tp,*sp;
-    int     i,len;
-	long	l;
-    stats_t stats;
-    node_t  node;
-    struct  dfree d;
-
-sprintf(str,"%.40s",instr);
-tp=strchr(str+1,'@');
-if(!tp)                 /* no terminating @ */
-    return(0);
-sp=strchr(str+1,SP);
-if(sp && sp<tp)         /* space before terminating @ */
-    return(0);
-len=(tp-str)+1;
-(*tp)=0;
-sp=(str+1);
-
-if(!strcmp(sp,"VER"))
-    bputs(VERSION);
-
-else if(!strcmp(sp,"REV"))
-	bprintf("%c",REVISION);
-
-else if(!strcmp(sp,"BBS") || !strcmp(sp,"BOARDNAME"))
-    bputs(sys_name);
-
-else if(!strcmp(sp,"BAUD") || !strcmp(sp,"BPS"))
-	bprintf("%lu",cur_rate);
-
-else if(!strcmp(sp,"CONN"))
-	bputs(connection);
-
-else if(!strcmp(sp,"SYSOP"))
-    bputs(sys_op);
-
-else if(!strcmp(sp,"LOCATION"))
-	bputs(sys_location);
-
-else if(!strcmp(sp,"NODE"))
-    bprintf("%u",node_num);
-
-else if(!strcmp(sp,"TNODE"))
-    bprintf("%u",sys_nodes);
-
-else if(!strcmp(sp,"TIME") || !strcmp(sp,"SYSTIME")) {
-    now=time(NULL);
-    unixtodos(now,&date,&curtime);
-    bprintf("%02d:%02d %s"
-        ,curtime.ti_hour==0 ? 12
-        : curtime.ti_hour>12 ? curtime.ti_hour-12
-        : curtime.ti_hour, curtime.ti_min, curtime.ti_hour>11 ? "pm":"am"); }
-
-else if(!strcmp(sp,"DATE") || !strcmp(sp,"SYSDATE")) {
-    now=time(NULL);
-    bputs(unixtodstr(now,str2)); }
-
-else if(!strcmp(sp,"TMSG")) {
-	l=0;
-    for(i=0;i<total_subs;i++)
-		l+=getposts(i); 		/* l=total posts */
-    bprintf("%lu",l); }
-
-else if(!strcmp(sp,"TUSER"))
-    bprintf("%u",lastuser());
-
-else if(!strcmp(sp,"TFILE")) {
-	l=0;
-    for(i=0;i<total_dirs;i++)
-        l+=getfiles(i);
-    bprintf("%lu",l); }
-
-else if(!strcmp(sp,"TCALLS") || !strcmp(sp,"NUMCALLS")) {
-    getstats(0,&stats);
-    bprintf("%lu",stats.logons); }
-
-else if(!strcmp(sp,"PREVON") || !strcmp(sp,"LASTCALLERNODE")
-    || !strcmp(sp,"LASTCALLERSYSTEM"))
-    bputs(lastuseron);
-
-else if(!strcmp(sp,"CLS"))
-    CLS;
-
-else if(!strcmp(sp,"PAUSE") || !strcmp(sp,"MORE"))
-    pause();
-
-else if(!strcmp(sp,"NOPAUSE") || !strcmp(sp,"POFF"))
-    sys_status^=SS_PAUSEOFF;
-
-else if(!strcmp(sp,"PON") || !strcmp(sp,"AUTOMORE"))
-    sys_status^=SS_PAUSEON;
-
-/* NOSTOP */
-
-/* STOP */
-
-else if(!strcmp(sp,"BELL") || !strcmp(sp,"BEEP"))
-    outchar(7);
-
-// else if(!strcmp(sp,"EVENT"))
-//	  bputs(sectostr(sys_eventtime,str2));
-
-/* LASTCALL */
-
-else if(!strncmp(sp,"NODE",4)) {
-    i=atoi(sp+4);
-    if(i && i<=sys_nodes) {
-        getnodedat(i,&node,0);
-        printnodedat(i,node); } }
-
-else if(!strcmp(sp,"WHO"))
-    whos_online(1);
-
-/* User Codes */
-
-else if(!strcmp(sp,"USER") || !strcmp(sp,"ALIAS") || !strcmp(sp,"NAME"))
-    bputs(useron.alias);
-
-else if(!strcmp(sp,"FIRST")) {
-    strcpy(str2,useron.alias);
-    tp=strchr(str2,SP);
-    if(tp) *tp=0;
-    bputs(str2); }
-
-else if(!strcmp(sp,"PHONE") || !strcmp(sp,"HOMEPHONE")
-    || !strcmp(sp,"DATAPHONE") || !strcmp(sp,"DATA"))
-    bputs(useron.phone);
-
-else if(!strcmp(sp,"ADDR1"))
-    bputs(useron.address);
-
-else if(!strcmp(sp,"FROM"))
-    bputs(useron.location);
-
-else if(!strcmp(sp,"CITY")) {
-    strcpy(str2,useron.location);
-    p=strchr(str2,',');
-    if(p) {
-        *p=0;
-        bputs(str2); } }
-
-else if(!strcmp(sp,"STATE")) {
-    p=strchr(useron.location,',');
-    if(p) {
-        p++;
-        if(*p==SP)
-            p++;
-        bputs(p); } }
-
-else if(!strcmp(sp,"CPU") || !strcmp(sp,"HOST"))
-    bputs(useron.comp);
-
-else if(!strcmp(sp,"BDATE"))
-    bputs(useron.birth);
-
-else if(!strcmp(sp,"CALLS") || !strcmp(sp,"NUMTIMESON"))
-    bprintf("%u",useron.logons);
-
-else if(!strcmp(sp,"MEMO"))
-    bputs(unixtodstr(useron.pwmod,str2));
-
-else if(!strcmp(sp,"SEC") || !strcmp(sp,"SECURITY"))
-    bprintf("%u",useron.level);
-
-else if(!strcmp(sp,"SINCE"))
-    bputs(unixtodstr(useron.firston,str2));
-
-else if(!strcmp(sp,"TIMEON") || !strcmp(sp,"TIMEUSED")) {
-	now=time(NULL);
-	bprintf("%u",(now-logontime)/60); }
-
-else if(!strcmp(sp,"TUSED")) {              /* Synchronet only */
-	now=time(NULL);
-	bputs(sectostr(now-logontime,str2)+1); }
-
-else if(!strcmp(sp,"TLEFT")) {              /* Synchronet only */
-	gettimeleft();
-	bputs(sectostr(timeleft,str2)+1); }
-
-else if(!strcmp(sp,"TPERD"))                /* Synchronet only */
-    bputs(sectostr(level_timeperday[useron.level],str)+1);
-
-else if(!strcmp(sp,"TPERC"))                /* Synchronet only */
-    bputs(sectostr(level_timepercall[useron.level],str)+1);
-
-else if(!strcmp(sp,"TIMELIMIT"))
-    bprintf("%u",level_timepercall[useron.level]);
-
-else if(!strcmp(sp,"MINLEFT") || !strcmp(sp,"LEFT") || !strcmp(sp,"TIMELEFT")) {
-	gettimeleft();
-	bprintf("%u",timeleft/60); }
-
-else if(!strcmp(sp,"LASTON"))
-    bputs(timestr(&useron.laston));
-
-else if(!strcmp(sp,"LASTDATEON"))
-    bputs(unixtodstr(useron.laston,str2));
-
-else if(!strcmp(sp,"LASTTIMEON")) {
-    unixtodos(useron.laston,&date,&curtime);
-    bprintf("%02d:%02d %s"
-        ,curtime.ti_hour==0 ? 12
-        : curtime.ti_hour>12 ? curtime.ti_hour-12
-        : curtime.ti_hour, curtime.ti_min, curtime.ti_hour>11 ? "pm":"am"); }
-
-else if(!strcmp(sp,"MSGLEFT") || !strcmp(sp,"MSGSLEFT"))
-    bprintf("%u",useron.posts);
-
-else if(!strcmp(sp,"MSGREAD"))
-    bprintf("%u",posts_read);
-
-else if(!strcmp(sp,"FREESPACE")) {
-    if(temp_dir[1]==':')
-        i=temp_dir[0]-'A'+1;
-    else i=0;
-    getdfree(i,&d);
-    if(d.df_sclus!=0xffff)
-        bprintf("%lu",(ulong)d.df_bsec*(ulong)d.df_sclus*(ulong)d.df_avail); }
-
-else if(!strcmp(sp,"UPBYTES"))
-    bprintf("%lu",useron.ulb);
-
-else if(!strcmp(sp,"UPK"))
-    bprintf("%lu",useron.ulb/1024L);
-
-else if(!strcmp(sp,"UPS") || !strcmp(sp,"UPFILES"))
-    bprintf("%u",useron.uls);
-
-else if(!strcmp(sp,"DLBYTES"))
-    bprintf("%lu",useron.dlb);
-
-else if(!strcmp(sp,"DOWNK"))
-    bprintf("%lu",useron.dlb/1024L);
-
-else if(!strcmp(sp,"DOWNS") || !strcmp(sp,"DLFILES"))
-    bprintf("%u",useron.dls);
-
-else if(!strcmp(sp,"LASTNEW"))
-    bputs(unixtodstr(ns_time,str2));
-
-else if(!strcmp(sp,"NEWFILETIME"))
-	bputs(timestr(&ns_time));
-
-/* MAXDL */
-
-else if(!strcmp(sp,"MAXDK") || !strcmp(sp,"DLKLIMIT") || !strcmp(sp,"KBLIMIT"))
-    bprintf("%lu",level_freecdtperday[useron.level]/1024L);
-
-else if(!strcmp(sp,"DAYBYTES"))     /* amt of free cdts used today */
-    bprintf("%lu",level_freecdtperday[useron.level]-useron.freecdt);
-
-else if(!strcmp(sp,"BYTELIMIT"))
-    bprintf("%lu",level_freecdtperday[useron.level]);
-
-else if(!strcmp(sp,"KBLEFT"))
-    bprintf("%lu",(useron.cdt+useron.freecdt)/1024L);
-
-else if(!strcmp(sp,"BYTESLEFT"))
-    bprintf("%lu",useron.cdt+useron.freecdt);
-
-else if(!strcmp(sp,"CONF"))
-    bprintf("%s %s"
-		,usrgrps ? grp[usrgrp[curgrp]]->sname :nulstr
-		,usrgrps ? sub[usrsub[curgrp][cursub[curgrp]]]->sname : nulstr);
-
-else if(!strcmp(sp,"CONFNUM"))
-    bprintf("%u %u",curgrp+1,cursub[curgrp]+1);
-
-else if(!strcmp(sp,"NUMDIR"))
-	bprintf("%u %u",usrlibs ? curlib+1 : 0,usrlibs ? curdir[curlib]+1 : 0);
-
-else if(!strcmp(sp,"EXDATE") || !strcmp(sp,"EXPDATE"))
-    bputs(unixtodstr(useron.expire,str2));
-
-else if(!strcmp(sp,"EXPDAYS")) {
-    now=time(NULL);
-	l=useron.expire-now;
-	if(l<0)
-		l=0;
-	bprintf("%u",l/(1440L*60L)); }
-
-else if(!strcmp(sp,"MEMO1"))
-    bputs(useron.note);
-
-else if(!strcmp(sp,"MEMO2") || !strcmp(sp,"COMPANY"))
-    bputs(useron.name);
-
-else if(!strcmp(sp,"ZIP"))
-	bputs(useron.zipcode);
-
-else if(!strcmp(sp,"HANGUP"))
-    hangup();
-
-else
-	return(syncatcodes(sp,len));
-
-return(len);
-}
-
-
-
diff --git a/src/sbbs2/autonode/autonode.c b/src/sbbs2/autonode/autonode.c
deleted file mode 100644
index f8bdde37e4..0000000000
--- a/src/sbbs2/autonode/autonode.c
+++ /dev/null
@@ -1,193 +0,0 @@
-/* AUTONODE.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include <io.h>
-#include <dir.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <process.h>
-#include <sys\stat.h>
-
-#define uchar unsigned char
-#define uint unsigned int
-#define ulong unsigned long
-#define LOOP_NODEDAB 100    /* Retries on NODE.DAB locking/unlocking    */
-
-typedef struct {						/* Node information kept in NODE.DAB */
-	uchar	status,						/* Current Status of Node */
-			errors,						/* Number of Critical Errors */
-			action;						/* Action User is doing on Node */
-	uint	useron,						/* User on Node */
-			connection,					/* Connection rate of Node */
-			misc,						/* Miscellaneous bits for node */
-			aux;						/* Auxillary word for node */
-	ulong	extaux;						/* Extended aux dword for node */
-            } node_t;
-
-enum {								/* Node Status */
-	 NODE_WFC			        	/* Waiting for Call */
-	,NODE_LOGON                  	/* at logon prompt */
-	,NODE_NEWUSER         			/* New user applying */
-	,NODE_INUSE			 			/* In Use */
-	,NODE_QUIET			 			/* In Use - quiet mode */
-	,NODE_OFFLINE		 			/* Offline */
-	,NODE_NETTING		 			/* Networking */
-	,NODE_EVENT_WAITING				/* Waiting for all nodes to be inactive */
-	,NODE_EVENT_RUNNING				/* Running an external event */
-	,NODE_EVENT_LIMBO				/* Allowing another node to run an event */
-    };
-
-int nodefile;
-
-void main();
-void getnodedat(uchar number, node_t *node, char lockit);
-void putnodedat(uchar number, node_t node);
-void truncsp(char *str);
-
-void main(int argc,char *argv[])
-{
-	FILE *fp;
-	char str[256],nodepath[256],*p
-		,sbbs_ctrl[256],sbbs_node[256],path[MAXPATH]
-		,*arg[10]={NULL};
-	int file,num_nodes,autonode,disk,x,y;
-	node_t node;
-
-printf("\nSynchronet AUTONODE v2.00\n");
-
-	if(!strcmp(argv[1],"/?")) {
-		printf("\nUsage: AUTONODE [file] [args,...]");
-		printf("\n\nWhere [file]     is the name of the file to run and");
-		printf("\n      [args,...] are the command line arguments to use");
-		printf("\n\nNOTE: The default command line is 'SBBS l q'\n");
-		return; }
-	p=getenv("SBBSCTRL");
-	if(!p) {
-		printf("\n\7You must set the SBBSCTRL environment variable first.");
-		printf("\n\nExample: SET SBBSCTRL=C:\\SBBS\\CTRL\n");
-		return; }
-	sprintf(sbbs_ctrl,"%.40s",p);
-	strupr(sbbs_ctrl);
-	if(sbbs_ctrl[strlen(sbbs_ctrl)-1]!='\\')
-		strcat(sbbs_ctrl,"\\");
-	p=getenv("SBBSNODE");
-	if(!p) {
-		printf("\n\7You must set the SBBSNODE environment variable first.");
-		printf("\n\nExample: SET SBBSNODE=C:\\SBBS\\NODE1\n");
-        return; }
-	sprintf(sbbs_node,"%.40s",p);
-	strupr(sbbs_node);
-	if(sbbs_node[strlen(sbbs_node)-1]!='\\')
-		strcat(sbbs_node,"\\");
-
-	sprintf(str,"%sNODE.DAB",sbbs_ctrl);
-	if((nodefile=open(str,O_RDWR|O_BINARY|O_DENYNONE))==-1) {
-        printf("Error opening %s",str); exit(1); }
-
-	sprintf(str,"%sMAIN.CNF",sbbs_ctrl);
-	if((file=open(str,O_RDONLY|O_DENYNONE|O_BINARY))==-1) {
-		printf("Error opening %s",str);
-		exit(1); }
-	lseek(file,227L,SEEK_SET);
-	read(file,&num_nodes,2);
-	printf("\nNumber of Available Nodes = %d",num_nodes);
-	lseek(file,64L*(long)num_nodes,SEEK_CUR);
-	lseek(file,328L,SEEK_CUR);
-	read(file,&autonode,2);
-	printf("\nNumber of First Autonode  = %d",autonode);
-	for(x=autonode;x<=num_nodes;x++) {
-		printf("\nChecking Node #%d",x);
-		getnodedat(x,&node,1);
-		if(node.status==NODE_OFFLINE) {
-			printf("\nFOUND! Node #%d is OFFLINE\n",x);
-			node.status=NODE_WFC;
-			putnodedat(x,node);
-			lseek(file,(229L+((long)(x-1)*64L)),SEEK_SET);
-			read(file,nodepath,128);
-			truncsp(nodepath);
-			if(nodepath[strlen(nodepath)-1]=='\\')
-				nodepath[strlen(nodepath)-1]=0; 	/* remove '\' */
-			if(nodepath[0]=='.')
-				sprintf(path,"%s%s",sbbs_node,nodepath);
-			else strcpy(path,nodepath);
-			if(path[1]==':')
-				setdisk(path[0]-'A');
-			if(chdir(path)) {
-				printf("\nError changing into '%s'",path);
-				getnodedat(x,&node,1);
-				node.status=NODE_OFFLINE;
-				putnodedat(x,node);
-				exit(1); }
-			if(argc==1) {
-				execl(getenv("COMSPEC"),getenv("COMSPEC"),"/c","SBBS","l","q",
-					NULL); }
-			else {
-				arg[0]=argv[0];
-				strcpy(str,"/c"); arg[1]=str;
-				for(x=1;x<argc;x++) arg[1+x]=argv[x];
-				execv(getenv("COMSPEC"),arg); }
-			getnodedat(x,&node,1);
-			node.status=NODE_OFFLINE;
-			putnodedat(x,node);
-			return; } }
-	printf("\n\n\7All local nodes are in use!\n");
-}
-
-/****************************************************************************/
-/* Reads the data for node number 'number' into the structure 'node'        */
-/* from NODE.DAB															*/
-/* if lockit is non-zero, locks this node's record. putnodedat() unlocks it */
-/****************************************************************************/
-void getnodedat(uchar number, node_t *node, char lockit)
-{
-	char str[256];
-	int count=0;
-
-number--;	/* make zero based */
-while(count<LOOP_NODEDAB) {
-	lseek(nodefile,(long)number*sizeof(node_t),SEEK_SET);
-	if(lockit
-		&& lock(nodefile,(long)number*sizeof(node_t),sizeof(node_t))==-1) {
-		count++;
-		continue; }
-	if(read(nodefile,node,sizeof(node_t))==sizeof(node_t))
-		break;
-	count++; }
-if(count==LOOP_NODEDAB)
-	printf("\7Error unlocking and reading NODE.DAB\n");
-}
-
-/****************************************************************************/
-/* Write the data from the structure 'node' into NODE.DAB  					*/
-/* getnodedat(num,&node,1); must have been called before calling this func  */
-/*          NOTE: ------^   the indicates the node record has been locked   */
-/****************************************************************************/
-void putnodedat(uchar number, node_t node)
-{
-	char str[256];
-	int count;
-
-number--;	/* make zero based */
-lseek(nodefile,(long)number*sizeof(node_t),SEEK_SET);
-if(write(nodefile,&node,sizeof(node_t))!=sizeof(node_t)) {
-	unlock(nodefile,(long)number*sizeof(node_t),sizeof(node_t));
-	printf("\7Error writing NODE.DAB for node %u\n",number+1);
-	return; }
-unlock(nodefile,(long)number*sizeof(node_t),sizeof(node_t));
-}
-/****************************************************************************/
-/* Truncates white-space chars off end of 'str' and terminates at first tab */
-/****************************************************************************/
-void truncsp(char *str)
-{
-	char c;
-
-str[strcspn(str,"\t")]=0;
-c=strlen(str);
-while(c && str[c-1]<=32) c--;
-str[c]=0;
-}
diff --git a/src/sbbs2/baja/baja.c b/src/sbbs2/baja/baja.c
deleted file mode 100644
index 32fee55011..0000000000
--- a/src/sbbs2/baja/baja.c
+++ /dev/null
@@ -1,3115 +0,0 @@
-/* BAJA.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include <io.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <fcntl.h>
-#include <share.h>
-#include <alloc.h>
-#include "cmdshell.h"
-#include "ars_defs.h"
-#include "crc32.h"
-
-unsigned _stklen=20000; 		  /* Set stack size in code, not header */
-
-char **label_name=NULL
-	,**goto_file=NULL
-	,**goto_label=NULL
-	,**call_file=NULL
-	,**call_label=NULL;
-
-ulong *var_name=NULL,vars=0;
-
-char **define_str=NULL
-	,**define_val=NULL;
-
-char *linestr="%s %d: %s\n";
-char tmp[256];
-
-uint *label_indx=NULL
-	,*goto_indx=NULL
-	,*goto_line=NULL
-	,*call_indx=NULL
-	,*call_line=NULL;
-
-uint display=0,line=0,labels=0,gotos=0,calls=0,defines=0,case_sens=0;
-
-FILE *out=NULL;
-
-void bail(void)
-{
-if(out)
-	chsize(fileno(out),0);
-}
-
-/****************************************************************************/
-/* Truncates white-space chars off end of 'str' and terminates at first tab */
-/****************************************************************************/
-void truncsp(char *str)
-{
-	int c;
-
-c=strlen(str);
-while(c && str[c-1]<=SP) c--;
-str[c]=0;
-}
-
-/****************************************************************************/
-/* Converts an ASCII Hex string into an ulong                       */
-/****************************************************************************/
-ulong ahtoul(char *str)
-{
-	ulong l,val=0;
-
-while((l=(*str++)|0x20)!=0x20)
-	val=(l&0xf)+(l>>6&1)*9+val*16;
-return(val);
-}
-
-/* C Escape char */
-
-uchar cesc(char ch)
-{
-switch(ch) {
-	case 'r':
-		return(CR);
-	case 'n':
-		return(LF);
-	case 't':
-		return(TAB);
-	case 'b':
-		return(BS);
-	case 'a':
-		return(7);
-	case 'f':
-		return(FF);
-	case 'v':
-		return(11);
-	default:
-		return(ch); }
-}
-
-long val(char *src, char *p)
-{
-	static int inside;
-	long l;
-
-if(isdigit(*p) || *p=='-')      /* Dec, Hex, or Oct */
-	l=strtol(p,&p,0);
-else if(*p=='\'') {  /* Char */
-	p++;
-	if(*p=='\\') {
-		p++;
-		l=cesc(*p); }
-	else
-		l=*p;
-	p++; }
-else if(*p=='.')    /* Bit */
-	l=1L<<strtol(p+1,&p,0);
-else {
-	printf("SYNTAX ERROR (expecting integer constant):\n");
-	printf(linestr,src,line,*p ? p : "<end of line>");
-	exit(1);
-	return(0); }
-if(inside) {
-	return(l); }
-inside=1;
-while(*p)
-	switch(*(p++)) {
-		case '+':
-			l+=val(src,p);
-			break;
-		case '-':
-			l-=val(src,p);
-			break;
-		case '*':
-			l*=val(src,p);
-			break;
-		case '/':
-			l/=val(src,p);
-			break;
-		case '%':
-			l%=val(src,p);
-			break;
-		case '&':
-			l&=val(src,p);
-			break;
-		case '|':
-			l|=val(src,p);
-			break;
-		case '~':
-			l&=~val(src,p);
-			break;
-		case '^':
-			l^=val(src,p);
-			break;
-		case '>':
-			if(*p=='>') {
-				p++;
-				l>>=val(src,p); }
-			break;
-		case '<':
-			if(*p=='<') {
-				p++;
-				l<<=val(src,p); }
-			break;
-		case SP:
-		case '#':
-			inside=0;
-			return(l); }
-inside=0;
-return(l);
-}
-
-
-void writecstr(uchar *p)
-{
-	char str[1024];
-	int j=0,inquotes=0;
-
-while(*p) {
-	if(*p=='"') {   /* ignore quotes */
-		if(inquotes)
-			break;
-		inquotes=1;
-		p++;
-		continue; }
-	if(*p=='\\')    { /* escape */
-		p++;
-		if(isdigit(*p)) {
-			str[j]=atoi(p); 		/* decimal, NOT octal */
-			if(isdigit(*(++p))) 	/* skip up to 3 digits */
-				if(isdigit(*(++p)))
-					p++;
-			j++;
-			continue; }
-		switch(*(p++)) {
-			case 'x':
-				tmp[0]=*(p++);
-                tmp[1]=0;
-				if(isxdigit(*p)) {	/* if another hex digit, skip too */
-					tmp[1]=*(p++);
-                    tmp[2]=0; }
-				str[j]=(char)ahtoul(tmp);
-                break;
-			case 'r':
-				str[j]=CR;
-				break;
-			case 'n':
-				str[j]=LF;
-				break;
-			case 't':
-				str[j]=TAB;
-				break;
-			case 'b':
-				str[j]=BS;
-				break;
-			case 'a':
-				str[j]=7;	/* BEL */
-				break;
-			case 'f':
-				str[j]=FF;
-				break;
-			case 'v':
-				str[j]=11;	/* VT */
-				break;
-			default:
-				str[j]=*(p-1);
-				break; }
-		j++;
-		continue; }
-	str[j++]=*(p++); }
-str[j]=0;
-fwrite(str,1,j+1,out);
-}
-
-void writestr(uchar *p)
-{
-	char str[1024];
-	int j=0;
-
-while(*p) {
-	if(*p=='"') {   /* ignore quotes */
-		p++;
-		continue; }
-	if(*p=='\\' && *(p+1)=='"' && *(p+2))
-		p++;
-	str[j++]=*(p++); }
-str[j]=0;
-fwrite(str,1,j+1,out);
-}
-
-/****************************************************************************/
-/* Returns 32-crc of string (not counting terminating NULL) 				*/
-/****************************************************************************/
-ulong crc32(char *str)
-{
-	int i=0;
-	ulong crc=0xffffffffUL;
-
-	while(str[i])
-		crc=ucrc32(str[i++],crc);
-	crc=~crc;
-	return(crc);
-}
-
-void cvttab(char *str)
-{
-	int i;
-
-for(i=0;str[i];i++)
-	if(str[i]==TAB)
-		str[i]=SP;
-}
-
-void newvar(uchar *in)
-{
-	uchar name[128];
-	long i,l;
-
-sprintf(name,"%.80s",in);
-if(!case_sens)
-	strupr(name);
-l=crc32(name);
-for(i=0;i<vars;i++)
-	if(var_name[i]==l)
-		break;
-if(i<vars)
-	return;
-if((var_name=(ulong *)REALLOC(var_name,sizeof(long)*(vars+1)))==NULL) {
-	printf("Too many (%lu) variables!\r\n",vars);
-	exit(1); }
-var_name[vars]=l;
-if(display)
-	printf("newvar(%08lX)=%s\n",l,in);
-vars++;
-}
-
-void writecrc(uchar *src, uchar *in)
-{
-	uchar name[128];
-	long i,l;
-
-sprintf(name,"%.80s",in);
-if(!case_sens)
-	strupr(name);
-if(!stricmp(name,"STR") || !name[0])
-	l=0;
-else {
-	l=crc32(name);
-
-	for(i=0;i<vars;i++)
-		if(var_name[i]==l)
-			break;
-	if(i==vars) {
-		printf("SYNTAX ERROR (expecting variable name):\n");
-		printf(linestr,src,line,*in ? in : "<end of line>");
-		exit(1); }
-
-		}
-fwrite(&l,4,1,out);
-}
-
-long isvar(uchar *arg)
-{
-	uchar name[128],*p;
-	long i,l;
-
-if(!arg || !*arg)
-	return(0);
-
-sprintf(name,"%.80s",arg);
-if((p=strchr(name,SP))!=NULL)	// Truncate at first space
-	*p=0;
-if(!case_sens)
-	strupr(name);
-l=crc32(name);
-
-for(i=0;i<vars;i++)
-	if(var_name[i]==l)
-		break;
-if(i==vars)
-	return(0);
-return(l);
-}
-
-int str_cmp(char *s1, char *s2)
-{
-if(case_sens)
-	return(strcmp(s1,s2));
-return(stricmp(s1,s2));
-}
-
-void expdefs(uchar *line)
-{
-	uchar str[512],*p,*sp,sav[2]={0};
-	int i;
-
-str[0]=0;
-for(p=line;*p;p++) {
-	if(*p==SP) {
-		strcat(str," ");
-		continue; }
-
-	if(*p=='"') {               /* Skip quoted text */
-		sp=strchr(p+1,'"');
-		if(sp) *sp=0;
-		strcat(str,p);
-		if(!sp)
-			break;
-		strcat(str,"\"");
-		p+=strlen(p);
-		continue; }
-
-	for(sp=p;*sp;sp++)
-		if(!isalnum(*sp) && *sp!='_')
-			break;
-	sav[0]=*sp; 		/* Save delimiter */
-	sav[1]=0;
-	*sp=0;
-	for(i=0;i<defines;i++)
-		if(!str_cmp(define_str[i],p))
-			break;
-	if(i<defines)
-		strcat(str,define_val[i]);
-	else
-		strcat(str,p);
-	if(!sav[0]) 		/* Last argument */
-		break;
-	p+=strlen(p);
-	strcat(str,sav);	/* Restore delimiter */
-	}
-strcpy(line,str);
-}
-
-
-
-void compile(char *src)
-{
-	uchar str[1024],save[1024],*p,*sp,*tp,*arg,*arg2,*arg3,*ar,ch;
-    ushort i,j;
-	long l,v,savline;
-	FILE *in;
-
-strupr(src);
-if((in=fopen(src,"rb"))==NULL) {
-    printf("error opening %s for read\n",src);
-    exit(1); }
-line=0;
-
-while(!feof(in) && !ferror(in)) {
-    if(!fgets(str,1000,in))
-        break;
-    truncsp(str);
-    cvttab(str);
-    line++;
-    strcpy(save,str);
-    p=str;
-    while(*p && *p<=SP)   /* look for beginning of command */
-        p++;
-    if(!*p)
-        continue;
-    if(*p=='#')             /* remarks start with # */
-        continue;
-	expdefs(p); 			/* expand defines */
-	if(display)
-		printf("%s\n",p);
-    sp=strchr(p,SP);
-    arg=arg2=arg3="";
-    if(sp) {
-        *sp=0;
-        arg=sp+1;
-        while(*arg && *arg<=SP) arg++;
-        sp=strchr(arg,SP);
-        if(sp) {
-            arg2=sp+1;
-            while(*arg2 && *arg2<=SP) arg2++;
-            sp=strchr(arg2,SP);
-            if(sp) {
-                arg3=sp+1;
-                while(*arg3 && *arg3<=SP) arg3++; } } }
-
-	if(!stricmp(p,"!INCLUDE")) {
-		savline=line;
-		sp=strchr(arg,SP);
-		if(sp) *sp=0;
-		compile(arg);
-		line=savline;
-		continue; }
-
-	if(!stricmp(p,"!DEFINE")) {                     /* define */
-		sp=strchr(arg,SP);
-		if(sp)
-			*sp=0;
-		else
-			break;
-		tp=strrchr(arg2,'\"');
-		if(!tp)
-			tp=arg2;
-		sp=strchr(tp,'#');
-		if(sp)
-            *sp=0;
-        truncsp(arg2);
-		if((define_str=(char **)REALLOC(define_str,sizeof(char *)*defines+1))
-            ==NULL) {
-			printf("Too many defines.\r\n");
-            exit(1); }
-		if((define_str[defines]=(char *)MALLOC(strlen(arg)+1))==NULL) {
-			printf("Too many defines.\r\n");
-            exit(1); }
-		if((define_val=(char **)REALLOC(define_val,sizeof(char *)*defines+1))
-            ==NULL) {
-			printf("Too many defines.\r\n");
-            exit(1); }
-		if((define_val[defines]=(char *)MALLOC(strlen(arg2)+1))==NULL) {
-			printf("Too many defines.\r\n");
-            exit(1); }
-		strcpy(define_str[defines],arg);
-		strcpy(define_val[defines],arg2);
-		defines++;
-        continue; }
-
-	if(!stricmp(p,"!GLOBAL")) {             /* declare global variables */
-		if(!*arg) break;
-		for(p=arg;*p && *p!='#';) {
-            sp=strchr(p,SP);
-            if(sp) *sp=0;
-			newvar(p);
-            if(!sp)
-                break;
-            p=sp+1;
-            while(*p && *p<=SP)
-                p++; }
-        continue; }
-
-	if(!stricmp(p,"PATCH")) {
-        if(!*arg) break;
-        p=arg;
-        while(*p) {
-            while(*p && *p<=SP) p++;
-            tmp[0]=*p++;
-            tmp[1]=*p++;
-            tmp[2]=0;
-            if(!tmp[0])
-                break;
-            ch=ahtoul(tmp);
-            fputc(ch,out); }
-        continue; }
-
-	if(!stricmp(p,"SHOW_VARS")) {
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(SHOW_VARS,out);
-        continue; }
-
-	if(!stricmp(p,"COMPARE_ARS")) {
-        if(!*arg) break;
-        strupr(arg);
-        ar=arstr(&i,arg);
-        fprintf(out,"%c%c",CS_COMPARE_ARS,(uchar)i);
-        fwrite(ar,i,1,out);
-        FREE(ar);
-        continue; }
-
-	if(!stricmp(p,"CHKSYSPASS")) {
-        fprintf(out,"%c",CS_CHKSYSPASS);
-        continue; }
-	if(!stricmp(p,"INFO_SYSTEM")) {
-        fprintf(out,"%c",CS_INFO_SYSTEM);
-        continue; }
-	if(!stricmp(p,"INFO_SUBBOARD")) {
-        fprintf(out,"%c",CS_INFO_SUBBOARD);
-        continue; }
-	if(!stricmp(p,"INFO_DIRECTORY")) {
-        fprintf(out,"%c",CS_INFO_DIRECTORY);
-        continue; }
-	if(!stricmp(p,"INFO_VERSION")) {
-        fprintf(out,"%c",CS_INFO_VERSION);
-        continue; }
-	if(!stricmp(p,"INFO_USER")) {
-        fprintf(out,"%c",CS_INFO_USER);
-        continue; }
-	if(!stricmp(p,"INFO_XFER_POLICY")) {
-        fprintf(out,"%c",CS_INFO_XFER_POLICY);
-        continue; }
-	if(!stricmp(p,"LOGKEY")) {
-        fprintf(out,"%c",CS_LOGKEY);
-        continue; }
-	if(!stricmp(p,"LOGKEY_COMMA")) {
-        fprintf(out,"%c",CS_LOGKEY_COMMA);
-        continue; }
-	if(!stricmp(p,"LOGSTR")) {
-        fprintf(out,"%c",CS_LOGSTR);
-        continue; }
-
-	if(!stricmp(p,"ONLINE")) {
-		fprintf(out,"%c%c",CS_ONE_MORE_BYTE,CS_ONLINE);
-		continue; }
-	if(!stricmp(p,"OFFLINE")) {
-		fprintf(out,"%c%c",CS_ONE_MORE_BYTE,CS_OFFLINE);
-		continue; }
-	if(!stricmp(p,"NEWUSER")) {
-		fprintf(out,"%c%c",CS_ONE_MORE_BYTE,CS_NEWUSER);
-        continue; }
-	if(!stricmp(p,"LOGON")) {
-		fprintf(out,"%c%c",CS_ONE_MORE_BYTE,CS_LOGON);
-        continue; }
-	if(!stricmp(p,"LOGOUT")) {
-		fprintf(out,"%c%c",CS_ONE_MORE_BYTE,CS_LOGOUT);
-        continue; }
-	if(!stricmp(p,"EXIT")) {
-		fprintf(out,"%c%c",CS_ONE_MORE_BYTE,CS_EXIT);
-        continue; }
-
-	if(!stricmp(p,"USER_EVENT")) {
-		if(!*arg)
-			break;
-		if((l=isvar(arg))!=0) {
-            fputc(CS_USE_INT_VAR,out);
-            fwrite(&l,4,1,out); // variable
-			fputc(2,out);		// int offset
-            fputc(1,out);       // int length
-            ch=0; }             // place holder
-        else
-            ch=val(src,arg);
-		fprintf(out,"%c%c",CS_TWO_MORE_BYTES,CS_USER_EVENT);
-		fwrite(&ch,1,1,out);
-		continue; }
-
-	if(!stricmp(p,"PUT_NODE")) {
-		fprintf(out,"%c",CS_PUT_NODE);
-		continue; }
-	if(!stricmp(p,"SYNC")) {
-        fprintf(out,"%c",CS_SYNC);
-        continue; }
-	if(!stricmp(p,"ASYNC")) {
-        fprintf(out,"%c",CS_ASYNC);
-        continue; }
-	if(!stricmp(p,"RIOSYNC")) {
-        fprintf(out,"%c",CS_RIOSYNC);
-        continue; }
-	if(!stricmp(p,"GETTIMELEFT")) {
-        fprintf(out,"%c",CS_GETTIMELEFT);
-        continue; }
-	if(!stricmp(p,"SAVELINE")) {
-        fprintf(out,"%c",CS_SAVELINE);
-        continue; }
-	if(!stricmp(p,"RESTORELINE")) {
-        fprintf(out,"%c",CS_RESTORELINE);
-        continue; }
-	if(!stricmp(p,"IF_TRUE") || !stricmp(p,"IF_EQUAL")) {
-        fprintf(out,"%c",CS_IF_TRUE);
-        continue; }
-	if(!stricmp(p,"IF_FALSE") || !stricmp(p,"IF_NOT_EQUAL")) {
-        fprintf(out,"%c",CS_IF_FALSE);
-        continue; }
-	if(!stricmp(p,"IF_GREATER")) {
-        fprintf(out,"%c",CS_IF_GREATER);
-        continue; }
-	if(!stricmp(p,"IF_GREATER_OR_EQUAL")
-		|| !stricmp(p,"IF_EQUAL_OR_GREATER")) {
-        fprintf(out,"%c",CS_IF_GREATER_OR_EQUAL);
-        continue; }
-	if(!stricmp(p,"IF_LESS")) {
-        fprintf(out,"%c",CS_IF_LESS);
-        continue; }
-	if(!stricmp(p,"IF_LESS_OR_EQUAL")
-		|| !stricmp(p,"IF_EQUAL_OR_LESS")) {
-        fprintf(out,"%c",CS_IF_LESS_OR_EQUAL);
-        continue; }
-	if(!stricmp(p,"ENDIF") || !stricmp(p,"END_IF")) {
-        fprintf(out,"%c",CS_ENDIF);
-        continue; }
-	if(!stricmp(p,"ELSE")) {
-        fprintf(out,"%c",CS_ELSE);
-        continue; }
-    if(p[0]==':') {                     /* :label */
-		p++;
-		sp=strchr(p,SP);
-		if(sp)
-			*sp=0;
-		for(i=0;i<labels;i++)
-			if(!stricmp(label_name[i],p))
-				break;
-		if(i<labels) {
-			printf("SYNTAX ERROR (duplicate label name):\n");
-			printf(linestr,src,line,p);
-			exit(1); }
-        if((label_name=(char **)REALLOC(label_name,sizeof(char *)*labels+1))
-            ==NULL) {
-			printf("Too many labels.\n");
-            exit(1); }
-        if((label_indx=(uint *)REALLOC(label_indx,sizeof(int)*labels+1))
-            ==NULL) {
-			printf("Too many labels.\n");
-            exit(1); }
-		if((label_name[labels]=(char *)MALLOC(strlen(p)+1))==NULL) {
-            printf("Too many labels.\r\n");
-            exit(1); }
-		strcpy(label_name[labels],p);
-        label_indx[labels]=ftell(out);
-        labels++;
-        continue; }
-	if(!stricmp(p,"GOTO")) {           /* goto */
-        if(!*arg) break;
-		sp=strchr(arg,SP);
-		if(sp)
-			*sp=0;
-        if((goto_label=(char **)REALLOC(goto_label,sizeof(char *)*gotos+1))
-            ==NULL) {
-            printf("Too many gotos.\r\n");
-            exit(1); }
-		if((goto_file=(char **)REALLOC(goto_file,sizeof(char *)*gotos+1))
-            ==NULL) {
-            printf("Too many gotos.\r\n");
-            exit(1); }
-        if((goto_indx=(uint *)REALLOC(goto_indx,sizeof(int)*gotos+1))
-            ==NULL) {
-            printf("Too many gotos.\r\n");
-            exit(1); }
-        if((goto_line=(uint *)REALLOC(goto_line,sizeof(int)*gotos+1))
-            ==NULL) {
-            printf("Too many gotos.\r\n");
-            exit(1); }
-        if((goto_label[gotos]=(char *)MALLOC(strlen(arg)+1))==NULL) {
-            printf("Too many gotos.\r\n");
-            exit(1); }
-		if((goto_file[gotos]=(char *)MALLOC(strlen(str)+1))==NULL) {
-            printf("Too many gotos.\r\n");
-            exit(1); }
-        strcpy(goto_label[gotos],arg);
-		strcpy(goto_file[gotos],str);
-        goto_indx[gotos]=ftell(out);
-        goto_line[gotos]=line;
-        gotos++;
-        fprintf(out,"%c%c%c",CS_GOTO,0xff,0xff);
-        continue; }
-	if(!stricmp(p,"CALL")) {          /* call */
-        if(!*arg) break;
-		sp=strchr(arg,SP);
-		if(sp)
-            *sp=0;
-		if((call_label=(char **)REALLOC(call_label,sizeof(char *)*(calls+1)))
-            ==NULL) {
-            printf("Too many calls.\r\n");
-            exit(1); }
-		if((call_file=(char **)REALLOC(call_file,sizeof(char *)*(calls+1)))
-            ==NULL) {
-            printf("Too many calls.\r\n");
-            exit(1); }
-		if((call_indx=(uint *)REALLOC(call_indx,sizeof(int)*(calls+1)))
-            ==NULL) {
-            printf("Too many calls.\r\n");
-            exit(1); }
-		if((call_line=(uint *)REALLOC(call_line,sizeof(int)*(calls+1)))
-            ==NULL) {
-            printf("Too many calls.\r\n");
-            exit(1); }
-        if((call_label[calls]=(char *)MALLOC(strlen(arg)+1))==NULL) {
-            printf("Too many calls.\r\n");
-            exit(1); }
-		if((call_file[calls]=(char *)MALLOC(strlen(src)+1))==NULL) {
-            printf("Too many calls.\r\n");
-            exit(1); }
-
-        strcpy(call_label[calls],arg);
-		strcpy(call_file[calls],src);
-        call_indx[calls]=ftell(out);
-        call_line[calls]=line;
-        calls++;
-        fprintf(out,"%c%c%c",CS_CALL,0xff,0xff);
-        continue; }
-
-	if(!stricmp(p,"RETURN")) {
-        fprintf(out,"%c",CS_RETURN);
-        continue; }
-	if(!stricmp(p,"CMD_HOME")) {
-        fprintf(out,"%c",CS_CMD_HOME);
-        continue; }
-	if(!stricmp(p,"CMDKEY")) {
-        if(!*arg) break;
-		if(!stricmp(arg,"DIGIT"))
-            ch=CS_DIGIT;
-		else if(!stricmp(arg,"EDIGIT"))
-            ch=CS_EDIGIT;
-		else
-            ch=toupper(*arg);
-        if(ch=='/')
-            ch=*(arg+1)|0x80;   /* high bit indicates slash required */
-        else if(ch=='^' && *(arg+1)>=0x40)
-            ch=*(arg+1)-0x40;   /* ctrl char */
-		else if(ch=='\\')
-            ch=cesc(*(arg+1));
-		else if(ch=='\'')
-            ch=*(arg+1);
-        fprintf(out,"%c%c",CS_CMDKEY,ch);
-        continue; }
-	if(!stricmp(p,"SETLOGIC") || !stricmp(p,"SET_LOGIC")) {
-        if(!*arg) break;
-		if(!stricmp(arg,"TRUE") || !stricmp(arg,"EQUAL"))
-            ch=LOGIC_TRUE;
-		else if(!stricmp(arg,"GREATER"))
-            ch=LOGIC_GREATER;
-		else if(!stricmp(arg,"LESS"))
-            ch=LOGIC_LESS;
-        else
-            ch=LOGIC_FALSE;
-        fprintf(out,"%c%c",CS_SETLOGIC,ch);
-        continue; }
-
-	if(!stricmp(p,"DEFINE_STR_VAR") || !stricmp(p,"STR")) {
-        if(!*arg) break;
-		for(p=arg;*p && *p!='#';) {
-            sp=strchr(p,SP);
-            if(sp) *sp=0;
-            fputc(CS_VAR_INSTRUCTION,out);
-			fputc(DEFINE_STR_VAR,out);
-			newvar(p);
-			writecrc(src,p);
-            if(!sp)
-                break;
-            p=sp+1;
-            while(*p && *p<=SP)
-                p++; }
-        continue; }
-	if(!stricmp(p,"DEFINE_INT_VAR") || !stricmp(p,"INT")) {
-        if(!*arg) break;
-		for(p=arg;*p && *p!='#';) {
-            sp=strchr(p,SP);
-            if(sp) *sp=0;
-            fputc(CS_VAR_INSTRUCTION,out);
-            fputc(DEFINE_INT_VAR,out);
-			newvar(p);
-			writecrc(src,p);
-            if(!sp)
-                break;
-            p=sp+1;
-            while(*p && *p<=SP)
-                p++; }
-		continue; }
-	if(!stricmp(p,"DEFINE_GLOBAL_STR_VAR") || !stricmp(p,"GLOBAL_STR")) {
-        if(!*arg) break;
-		for(p=arg;*p && *p!='#';) {
-            sp=strchr(p,SP);
-            if(sp) *sp=0;
-            fputc(CS_VAR_INSTRUCTION,out);
-			fputc(DEFINE_GLOBAL_STR_VAR,out);
-			newvar(p);
-			writecrc(src,p);
-            if(!sp)
-                break;
-            p=sp+1;
-            while(*p && *p<=SP)
-                p++; }
-        continue; }
-	if(!stricmp(p,"DEFINE_GLOBAL_INT_VAR") || !stricmp(p,"GLOBAL_INT")) {
-        if(!*arg) break;
-		for(p=arg;*p && *p!='#';) {
-            sp=strchr(p,SP);
-            if(sp) *sp=0;
-            fputc(CS_VAR_INSTRUCTION,out);
-			fputc(DEFINE_GLOBAL_INT_VAR,out);
-			newvar(p);
-			writecrc(src,p);
-            if(!sp)
-                break;
-            p=sp+1;
-            while(*p && *p<=SP)
-                p++; }
-        continue; }
-
-	if(!stricmp(p,"LOGIN")) {
-		if(!*arg) break;
-		fputc(CS_STR_FUNCTION,out);
-		fputc(CS_LOGIN,out);
-		writecstr(arg);
-		continue; }
-
-	if(!stricmp(p,"LOAD_TEXT")) {
-		if(!*arg) break;
-		fputc(CS_STR_FUNCTION,out);
-		fputc(CS_LOAD_TEXT,out);
-		writestr(arg);
-        continue; }
-
-	if(!stricmp(p,"SET_STR_VAR")
-		|| (!stricmp(p,"SET") && strchr(arg,'"'))) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(SET_STR_VAR,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		writecstr(arg2);
-        continue; }
-	if(!stricmp(p,"CAT_STR_VAR")
-		|| (!stricmp(p,"STRCAT") && strchr(arg,'"'))) {
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(CAT_STR_VAR,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		writecstr(arg2);
-        continue; }
-	if((!stricmp(p,"STRSTR") || !stricmp(p,"COMPARE_SUBSTR"))
-		&& strchr(arg,'"')) {
-        fputc(CS_VAR_INSTRUCTION,out);
-		fputc(STRSTR_VAR,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		writecstr(arg2);
-        continue; }
-	if(!stricmp(p,"STRSTR") || !stricmp(p,"COMPARE_SUBSTR")) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-		fputc(STRSTR_VARS,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		writecrc(src,arg2);
-        continue; }
-	if(!stricmp(p,"CAT_STR_VARS") || !stricmp(p,"STRCAT")) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(CAT_STR_VARS,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		writecrc(src,arg2);
-        continue; }
-	if(!stricmp(p,"FORMAT") || !stricmp(p,"SPRINTF")) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(FORMAT_STR_VAR,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);					/* Write destination variable */
-        p++;
-        while(*p && *p<=SP) p++;
-        arg=p;
-        p=strrchr(arg,'"');
-        if(!p)
-            break;
-        *p=0;
-        p++;
-        while(*p && *p<=SP) p++;
-        writecstr(arg);                 /* Write string */
-        l=ftell(out);
-        fputc(0,out);                   /* Write total number of args */
-        i=0;
-        while(p && *p) {
-            arg=p;
-            p=strchr(arg,SP);
-            if(p) {
-                *p=0;
-                p++; }
-			writecrc(src,arg);
-            i++; }
-        fseek(out,l,SEEK_SET);
-        fputc((char)i,out);
-        fseek(out,i*4,SEEK_CUR);
-        continue; }
-
-	if(!stricmp(p,"STRFTIME") || !stricmp(p,"FTIME_STR")) {
-        if(!*arg || !*arg2 || !*arg3) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(FORMAT_TIME_STR,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);					/* Write destination variable */
-        p++;
-        while(*p && *p<=SP) p++;
-        arg=p;
-        p=strrchr(arg,'"');
-        if(!p)
-            break;
-        *p=0;
-        writecstr(arg);                 /* Write string */
-		p++;
-		while(*p && *p<=SP) p++;
-		writecrc(src,p);
-        continue; }
-
-	if(!stricmp(p,"TIME_STR")) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(TIME_STR,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		writecrc(src,arg2);
-        continue; }
-
-	if(!stricmp(p,"DATE_STR")) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(DATE_STR,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		writecrc(src,arg2);
-        continue; }
-
-	if(!stricmp(p,"SECOND_STR")) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(SECOND_STR,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		writecrc(src,arg2);
-        continue; }
-
-
-	if(!stricmp(p,"SET_INT_VAR")
-		|| (!stricmp(p,"SET") && *arg2!='"')) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(SET_INT_VAR,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		l=val(src,arg2);
-        fwrite(&l,4,1,out);
-        continue; }
-
-	if(!stricmp(p,"COMPARE_STR_VAR") ||
-		(!stricmp(p,"COMPARE") && *arg2=='"')) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(COMPARE_STR_VAR,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		writecstr(arg2);
-        continue; }
-
-	if(!stricmp(p,"COMPARE_STRN_VAR") ||
-		((!stricmp(p,"STRNCMP") || !stricmp(p,"COMPARE_STRN"))
-            && *arg3 && strchr(arg3,'"'))) {
-		if((l=isvar(arg))!=0) {
-			fputc(CS_USE_INT_VAR,out);
-			fwrite(&l,4,1,out); // variable
-			fputc(2,out);		// int offset
-			fputc(1,out);		// int length
-			i=0; }				// place holder
-		else
-			i=val(src,arg);
-		fputc(CS_VAR_INSTRUCTION,out);
-        fputc(STRNCMP_VAR,out);
-		fwrite(&i,1,1,out); /* Length */
-        p=strchr(arg2,SP);
-        if(!p)
-            break;
-        *p=0;
-        p++;
-        while(*p && *p<=SP) p++;
-		writecrc(src,arg2);
-        writecstr(p);
-        continue; }
-
-	if(!stricmp(p,"COMPARE_STRN_VARS") || !stricmp(p,"STRNCMP")
-		|| !stricmp(p,"COMPARE_STRN")) {
-        if(!*arg || !*arg2 || !*arg3)
-            break;
-		if((l=isvar(arg))!=0) {
-			fputc(CS_USE_INT_VAR,out);
-			fwrite(&l,4,1,out); // variable
-			fputc(2,out);		// int offset
-			fputc(1,out);		// int length
-			i=0; }				// place holder
-		else
-			i=val(src,arg);
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(STRNCMP_VARS,out);
-
-        fwrite(&i,1,1,out); /* Length */
-        p=strchr(arg2,SP);
-        if(!p)
-            break;
-        *p=0;
-        p++;
-        while(*p && *p<=SP) p++;
-		writecrc(src,arg2);
-		writecrc(src,p);
-        continue; }
-
-	if(!stricmp(p,"COMPARE_INT_VAR") ||
-		(!stricmp(p,"COMPARE")
-			&& (isdigit(*arg2) || atol(arg2) || *arg2=='\'' || *arg2=='.'))) {
-        if(!*arg) break;
-
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(COMPARE_INT_VAR,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		l=val(src,arg2);
-        fwrite(&l,4,1,out);
-        continue; }
-
-	if(!stricmp(p,"COMPARE")) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(COMPARE_VARS,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		writecrc(src,arg2);
-        continue; }
-	if(!stricmp(p,"COPY")) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(COPY_VAR,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		writecrc(src,arg2);
-        continue; }
-	if(!stricmp(p,"SWAP")) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(SWAP_VARS,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		writecrc(src,arg2);
-        continue; }
-
-	if(!stricmp(p,"TIME")) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(TIME_INT_VAR,out);
-		writecrc(src,arg);
-        continue; }
-
-	if(!stricmp(p,"DATE_INT")) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(DATE_STR_TO_INT,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		writecrc(src,arg2);
-        continue; }
-
-	if(!stricmp(p,"CRC16")) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-		fputc(CRC16_TO_INT,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		writecrc(src,arg2);
-        continue; }
-
-	if(!stricmp(p,"CRC32")) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-		fputc(CRC32_TO_INT,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		writecrc(src,arg2);
-        continue; }
-
-	if(!stricmp(p,"CHKSUM")) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-		fputc(CHKSUM_TO_INT,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		writecrc(src,arg2);
-        continue; }
-
-	if(!stricmp(p,"ADD_INT_VAR")
-		|| (!stricmp(p,"ADD")
-			&& (isdigit(*arg2) || atol(arg2) || *arg2=='\'' || *arg2=='.'))) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(ADD_INT_VAR,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		l=val(src,arg2);
-        if(!l)
-            break;
-        fwrite(&l,4,1,out);
-        continue; }
-	if(!stricmp(p,"ADD_INT_VARS") || !stricmp(p,"ADD")) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(ADD_INT_VARS,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		writecrc(src,arg2);
-        continue; }
-
-	if(!stricmp(p,"SUB_INT_VAR")
-		|| (!stricmp(p,"SUB")
-			&& (isdigit(*arg2) || atol(arg2) || *arg2=='\'' || *arg2=='.'))) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(SUB_INT_VAR,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		l=val(src,arg2);
-        if(!l)
-            break;
-        fwrite(&l,4,1,out);
-        continue; }
-	if(!stricmp(p,"SUB_INT_VARS") || !stricmp(p,"SUB")) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(SUB_INT_VARS,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		writecrc(src,arg2);
-        continue; }
-
-	if(!stricmp(p,"MUL_INT_VAR")
-		|| (!stricmp(p,"MUL")
-			&& (isdigit(*arg2) || atol(arg2) || *arg2=='\'' || *arg2=='.'))) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(MUL_INT_VAR,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		l=val(src,arg2);
-        if(!l)
-            break;
-        fwrite(&l,4,1,out);
-        continue; }
-	if(!stricmp(p,"MUL_INT_VARS") || !stricmp(p,"MUL")) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(MUL_INT_VARS,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		writecrc(src,arg2);
-        continue; }
-
-	if(!stricmp(p,"DIV_INT_VAR")
-		|| (!stricmp(p,"DIV")
-			&& (isdigit(*arg2) || atol(arg2) || *arg2=='\'' || *arg2=='.'))) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(DIV_INT_VAR,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		l=val(src,arg2);
-        if(!l)
-            break;
-        fwrite(&l,4,1,out);
-        continue; }
-	if(!stricmp(p,"DIV_INT_VARS") || !stricmp(p,"DIV")) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(DIV_INT_VARS,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		writecrc(src,arg2);
-        continue; }
-
-	if(!stricmp(p,"MOD_INT_VAR")
-		|| (!stricmp(p,"MOD")
-			&& (isdigit(*arg2) || atol(arg2) || *arg2=='\'' || *arg2=='.'))) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-		fputc(MOD_INT_VAR,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		l=val(src,arg2);
-        if(!l)
-            break;
-        fwrite(&l,4,1,out);
-        continue; }
-	if(!stricmp(p,"MOD_INT_VARS") || !stricmp(p,"MOD")) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-		fputc(MOD_INT_VARS,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		writecrc(src,arg2);
-        continue; }
-
-	if(!stricmp(p,"AND_INT_VAR")
-		|| (!stricmp(p,"AND")
-			&& (isdigit(*arg2) || atol(arg2) || *arg2=='\'' || *arg2=='.'))) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(AND_INT_VAR,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		l=val(src,arg2);
-        fwrite(&l,4,1,out);
-        continue; }
-	if(!stricmp(p,"AND_INT_VARS") || !stricmp(p,"AND")) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(AND_INT_VARS,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		writecrc(src,arg2);
-        continue; }
-
-	if(!stricmp(p,"OR_INT_VAR")
-		|| (!stricmp(p,"OR")
-			&& (isdigit(*arg2) || atol(arg2) || *arg2=='\'' || *arg2=='.'))) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(OR_INT_VAR,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		l=val(src,arg2);
-        fwrite(&l,4,1,out);
-        continue; }
-	if(!stricmp(p,"OR_INT_VARS") || !stricmp(p,"OR")) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(OR_INT_VARS,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		writecrc(src,arg2);
-        continue; }
-
-	if(!stricmp(p,"NOT_INT_VAR")
-		|| (!stricmp(p,"NOT")
-			&& (isdigit(*arg2) || atol(arg2) || *arg2=='\'' || *arg2=='.'))) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(NOT_INT_VAR,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		l=val(src,arg2);
-        fwrite(&l,4,1,out);
-        continue; }
-	if(!stricmp(p,"NOT_INT_VARS") || !stricmp(p,"NOT")) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(NOT_INT_VARS,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		writecrc(src,arg2);
-        continue; }
-
-	if(!stricmp(p,"XOR_INT_VAR")
-		|| (!stricmp(p,"XOR")
-			&& (isdigit(*arg2) || atol(arg2) || *arg2=='\'' || *arg2=='.'))) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(XOR_INT_VAR,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		l=val(src,arg2);
-        fwrite(&l,4,1,out);
-        continue; }
-	if(!stricmp(p,"XOR_INT_VARS") || !stricmp(p,"XOR")) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(XOR_INT_VARS,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		writecrc(src,arg2);
-        continue; }
-
-	if(!stricmp(p,"RANDOM_INT_VAR") || !stricmp(p,"RANDOM")) {
-        if(!*arg) break;
-		if((l=isvar(arg2))!=0) {
-            fputc(CS_USE_INT_VAR,out);
-            fwrite(&l,4,1,out); // variable
-			fputc(6,out);		// int offset
-			fputc(4,out);		// int length
-			l=0; }				// place holder
-		else
-			l=val(src,arg2);
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(RANDOM_INT_VAR,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-        fwrite(&l,4,1,out);
-        continue; }
-
-	if(!stricmp(p,"SWITCH")) {
-        if(!*arg) break;
-        fputc(CS_SWITCH,out);
-		writecrc(src,arg);
-        continue; }
-	if(!stricmp(p,"END_SWITCH")) {
-        fputc(CS_END_SWITCH,out);
-        continue; }
-	if(!stricmp(p,"CASE")) {
-        if(!*arg) break;
-        fputc(CS_CASE,out);
-		l=val(src,arg);
-        fwrite(&l,4,1,out);
-        continue; }
-	if(!stricmp(p,"DEFAULT")) {
-        fputc(CS_DEFAULT,out);
-        continue; }
-	if(!stricmp(p,"END_CASE")) {
-        fputc(CS_END_CASE,out);
-        continue; }
-
-	if(!stricmp(p,"PRINT") && !strchr(arg,'"') && !strchr(arg,'\\')
-        && !strchr(arg,SP)) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(PRINT_VAR,out);
-		writecrc(src,arg);
-        continue; }
-
-	if(!stricmp(p,"PRINTF")) {
-        if(!*arg) break;
-        fputc(CS_VAR_INSTRUCTION,out);
-        fputc(VAR_PRINTF,out);
-        p=strrchr(arg,'"');
-        if(!p)
-            break;
-        *p=0;
-        p++;
-        while(*p && *p<=SP) p++;
-        writecstr(arg);                 /* Write string */
-        l=ftell(out);
-        fputc(0,out);                   /* Write total number of args */
-        i=0;
-        while(p && *p) {
-            arg=p;
-            p=strchr(arg,SP);
-            if(p) {
-                *p=0;
-                p++; }
-			writecrc(src,arg);
-            i++; }
-        fseek(out,l,SEEK_SET);
-        fputc((char)i,out);
-        fseek(out,i*4,SEEK_CUR);
-        continue; }
-
-	if(!stricmp(p,"FOPEN")) {
-		if(!*arg || !*arg2 || !*arg3) break;
-		if((l=isvar(arg2))!=0) {
-            fputc(CS_USE_INT_VAR,out);
-            fwrite(&l,4,1,out); // variable
-			fputc(6,out);		// int offset
-			fputc(2,out);		// int length
-			i=0; }				// place holder
-		else
-			i=val(src,arg2);
-
-        fputc(CS_FIO_FUNCTION,out);
-		if(*arg3=='"')
-			fputc(FIO_OPEN,out);
-		else
-			fputc(FIO_OPEN_VAR,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-        p=strchr(arg2,SP);
-        if(!p)
-            break;
-        *p=0;
-        p++;
-        fwrite(&i,2,1,out);
-        while(*p && *p<=SP) p++;
-		if(*p=='"')
-			writestr(p);
-		else
-			writecrc(src,p);
-        continue; }
-	if(!stricmp(p,"FCLOSE")) {
-        if(!*arg) break;
-        fputc(CS_FIO_FUNCTION,out);
-        fputc(FIO_CLOSE,out);
-		writecrc(src,arg);
-        continue; }
-	if(!stricmp(p,"FFLUSH")) {
-        if(!*arg) break;
-        fputc(CS_FIO_FUNCTION,out);
-		fputc(FIO_FLUSH,out);
-		writecrc(src,arg);
-        continue; }
-	if(!stricmp(p,"FREAD")) {
-        if(!*arg) break;
-
-        fputc(CS_FIO_FUNCTION,out);
-        if(!*arg3 || isdigit(*arg3) || atoi(arg3))
-            fputc(FIO_READ,out);
-        else
-            fputc(FIO_READ_VAR,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);			/* File handle */
-        p=strchr(arg2,SP);
-        if(p)
-            *p=0;
-		writecrc(src,arg2); 		/* Variable */
-		if(isdigit(*arg3))
-			i=val(src,arg3);	 /* Length */
-		else
-			i=0;
-		if(i || !*arg3)
-            fwrite(&i,2,1,out);
-        else
-			writecrc(src,arg3);
-        continue; }
-	if(!stricmp(p,"FWRITE")) {
-        if(!*arg) break;
-        fputc(CS_FIO_FUNCTION,out);
-        if(!*arg3 || isdigit(*arg3) || atoi(arg3))
-            fputc(FIO_WRITE,out);
-        else
-            fputc(FIO_WRITE_VAR,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);			/* File handle */
-        p=strchr(arg2,SP);
-        if(p)
-            *p=0;
-		writecrc(src,arg2); 		/* Variable */
-		if(isdigit(*arg3))
-			i=val(src,arg3);	 /* Length */
-		else
-			i=0;
-		if(i || !*arg3)
-            fwrite(&i,2,1,out);
-        else
-			writecrc(src,arg3);
-        continue; }
-	if(!stricmp(p,"FGET_LENGTH")
-		|| !stricmp(p,"FGETLENGTH")
-		|| !stricmp(p,"GETFLENGTH")) {
-        if(!*arg || !*arg2) break;
-        fputc(CS_FIO_FUNCTION,out);
-        fputc(FIO_GET_LENGTH,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);			/* File handle */
-		writecrc(src,arg2); 		/* Variable */
-        continue; }
-	if(!stricmp(p,"FREAD_LINE")) {
-        if(!*arg || !*arg2) break;
-        fputc(CS_FIO_FUNCTION,out);
-		fputc(FIO_READ_LINE,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);			/* File handle */
-		writecrc(src,arg2); 		/* Variable */
-        continue; }
-	if(!stricmp(p,"FEOF")) {
-        if(!*arg) break;
-        fputc(CS_FIO_FUNCTION,out);
-        fputc(FIO_EOF,out);
-		writecrc(src,arg);
-        continue; }
-	if(!stricmp(p,"FGET_POS")) {
-        if(!*arg || !*arg2) break;
-        fputc(CS_FIO_FUNCTION,out);
-        fputc(FIO_GET_POS,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);			/* File handle */
-		writecrc(src,arg2); 		/* Variable */
-        continue; }
-	if(!stricmp(p,"FSET_POS") || !stricmp(p,"FSEEK")) {
-        if(!*arg) break;
-        fputc(CS_FIO_FUNCTION,out);
-        if(isdigit(*arg2) || atol(arg2))
-            fputc(FIO_SEEK,out);
-        else
-            fputc(FIO_SEEK_VAR,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);			/* File handle */
-        p=strchr(arg2,SP);
-        if(p)
-            *p=0;
-        if(atol(arg2) || isdigit(*arg2)) {
-			l=val(src,arg2);
-            fwrite(&l,4,1,out); }
-        else
-			writecrc(src,arg2); 		/* Offset variable */
-        i=0;
-        if(p) {
-            p++;
-            while(*p && *p<=SP) p++;
-            i=atoi(p);
-			if(!stricmp(p,"CUR"))
-                i=SEEK_CUR;
-			else if(!stricmp(p,"END"))
-                i=SEEK_END; }
-        fwrite(&i,2,1,out);
-        continue; }
-	if(!stricmp(p,"FLOCK")) {
-        if(!*arg) break;
-        fputc(CS_FIO_FUNCTION,out);
-        if(isdigit(*arg2) || atol(arg2))
-            fputc(FIO_LOCK,out);
-        else
-            fputc(FIO_LOCK_VAR,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);			/* File handle */
-        if(atol(arg2) || isdigit(*arg2)) {
-			l=val(src,arg2);
-            if(!l)
-                break;
-            fwrite(&l,4,1,out); }
-        else
-			writecrc(src,arg2); 	/* Length variable */
-        continue; }
-	if(!stricmp(p,"FUNLOCK")) {
-        if(!*arg) break;
-        fputc(CS_FIO_FUNCTION,out);
-        if(isdigit(*arg2) || atol(arg2))
-            fputc(FIO_UNLOCK,out);
-        else
-            fputc(FIO_UNLOCK_VAR,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);			/* File handle */
-        if(atol(arg2) || isdigit(*arg2)) {
-			l=val(src,arg2);
-            if(!l)
-                break;
-            fwrite(&l,4,1,out); }
-        else
-			writecrc(src,arg2); 		/* Length variable */
-        continue; }
-	if(!stricmp(p,"FSET_LENGTH")) {
-        if(!*arg) break;
-        fputc(CS_FIO_FUNCTION,out);
-        if(isdigit(*arg2) || atol(arg2))
-            fputc(FIO_SET_LENGTH,out);
-        else
-            fputc(FIO_SET_LENGTH_VAR,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);			/* File handle */
-        if(atol(arg2) || isdigit(*arg2)) {
-			l=val(src,arg2);
-            fwrite(&l,4,1,out); }
-        else
-			writecrc(src,arg2); 		/* Length variable */
-        continue; }
-	if(!stricmp(p,"FPRINTF")) {
-        if(!*arg) break;
-        fputc(CS_FIO_FUNCTION,out);
-        fputc(FIO_PRINTF,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);					/* Write destination variable */
-        p++;
-        while(*p && *p<=SP) p++;
-        arg=p;
-        p=strrchr(arg,'"');
-        if(!p)
-            break;
-        *p=0;
-        p++;
-        while(*p && *p<=SP) p++;
-        writecstr(arg);                 /* Write string */
-        l=ftell(out);
-        fputc(0,out);                   /* Write total number of args */
-        i=0;
-        while(p && *p) {
-            arg=p;
-            p=strchr(arg,SP);
-            if(p) {
-                *p=0;
-                p++; }
-			writecrc(src,arg);
-            i++; }
-        fseek(out,l,SEEK_SET);
-        fputc((char)i,out);
-        fseek(out,i*4,SEEK_CUR);
-        continue; }
-	if(!stricmp(p,"FSET_ETX")) {
-        if(!*arg) break;
-		if((l=isvar(arg))!=0) {
-            fputc(CS_USE_INT_VAR,out);
-            fwrite(&l,4,1,out); // variable
-            fputc(2,out);       // int offset
-            fputc(1,out);       // int length
-			ch=0; } 			// place holder
-		else
-			ch=val(src,arg);
-
-        fputc(CS_FIO_FUNCTION,out);
-        fputc(FIO_SET_ETX,out);
-        fwrite(&ch,1,1,out);
-        continue; }
-	if(!stricmp(p,"FGET_TIME")) {
-        if(!*arg || !*arg2) break;
-        fputc(CS_FIO_FUNCTION,out);
-        fputc(FIO_GET_TIME,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);			/* File handle */
-		writecrc(src,arg2); 		/* Variable */
-        continue; }
-	if(!stricmp(p,"FSET_TIME")) {
-        if(!*arg || !*arg2) break;
-        fputc(CS_FIO_FUNCTION,out);
-        fputc(FIO_SET_TIME,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);			/* File handle */
-		writecrc(src,arg2); 		/* Variable */
-        continue; }
-	if(!stricmp(p,"REMOVE_FILE")) {
-		if(!*arg) break;
-		fputc(CS_FIO_FUNCTION,out);
-		fputc(REMOVE_FILE,out);
-		writecrc(src,arg);			/* Str var */
-		continue; }
-	if(!stricmp(p,"RENAME_FILE")) {
-		if(!*arg || !*arg2) break;
-		fputc(CS_FIO_FUNCTION,out);
-		fputc(RENAME_FILE,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);			/* str var */
-		writecrc(src,arg2); 		/* str var */
-        continue; }
-	if(!stricmp(p,"COPY_FILE")) {
-		if(!*arg || !*arg2) break;
-		fputc(CS_FIO_FUNCTION,out);
-		fputc(COPY_FILE,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);			/* str var */
-		writecrc(src,arg2); 		/* str var */
-        continue; }
-	if(!stricmp(p,"MOVE_FILE")) {
-		if(!*arg || !*arg2) break;
-		fputc(CS_FIO_FUNCTION,out);
-		fputc(MOVE_FILE,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);			/* str var */
-		writecrc(src,arg2); 		/* str var */
-        continue; }
-	if(!stricmp(p,"GET_FILE_ATTRIB")) {
-		if(!*arg || !*arg2) break;
-		fputc(CS_FIO_FUNCTION,out);
-		fputc(GET_FILE_ATTRIB,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);			/* str var */
-		writecrc(src,arg2); 		/* int var */
-        continue; }
-	if(!stricmp(p,"SET_FILE_ATTRIB")) {
-		if(!*arg || !*arg2) break;
-		fputc(CS_FIO_FUNCTION,out);
-		fputc(SET_FILE_ATTRIB,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);			/* str var */
-		writecrc(src,arg2); 		/* int var */
-        continue; }
-	if(!stricmp(p,"RMDIR") || !stricmp(p,"REMOVE_DIR")) {
-		if(!*arg) break;
-		fputc(CS_FIO_FUNCTION,out);
-		fputc(REMOVE_DIR,out);
-		writecrc(src,arg);			/* Str var */
-        continue; }
-	if(!stricmp(p,"MKDIR") || !stricmp(p,"MAKE_DIR")) {
-		if(!*arg) break;
-		fputc(CS_FIO_FUNCTION,out);
-		fputc(MAKE_DIR,out);
-		writecrc(src,arg);			/* Str var */
-        continue; }
-	if(!stricmp(p,"CHDIR") || !stricmp(p,"CHANGE_DIR")) {
-		if(!*arg) break;
-		fputc(CS_FIO_FUNCTION,out);
-		fputc(CHANGE_DIR,out);
-		writecrc(src,arg);			/* Str var */
-        continue; }
-	if(!stricmp(p,"OPEN_DIR")) {
-		if(!*arg || !*arg2) break;
-		fputc(CS_FIO_FUNCTION,out);
-		fputc(OPEN_DIR,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);			/* int var */
-		writecrc(src,arg2); 		/* str var */
-        continue; }
-	if(!stricmp(p,"READ_DIR")) {
-		if(!*arg || !*arg2) break;
-		fputc(CS_FIO_FUNCTION,out);
-		fputc(READ_DIR,out);
-        p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);			/* int var */
-		writecrc(src,arg2); 		/* str var */
-        continue; }
-	if(!stricmp(p,"REWIND_DIR")) {
-		if(!*arg) break;
-		fputc(CS_FIO_FUNCTION,out);
-		fputc(REWIND_DIR,out);
-		writecrc(src,arg);			/* int var */
-        continue; }
-	if(!stricmp(p,"CLOSE_DIR")) {
-		if(!*arg) break;
-		fputc(CS_FIO_FUNCTION,out);
-		fputc(CLOSE_DIR,out);
-		writecrc(src,arg);			/* int var */
-        continue; }
-
-	if(!stricmp(p,"NODE_ACTION")) {
-        if(!*arg) break;
-		if((l=isvar(arg))!=0) {
-            fputc(CS_USE_INT_VAR,out);
-            fwrite(&l,4,1,out); // variable
-			fputc(1,out);		// int offset
-            fputc(1,out);       // int length
-			ch=0; } 			// place holder
-		else
-			ch=val(src,arg);
-
-        fprintf(out,"%c%c",CS_NODE_ACTION,ch);
-        continue; }
-	if(!stricmp(p,"NODE_STATUS")) {
-        if(!*arg) break;
-		if((l=isvar(arg))!=0) {
-            fputc(CS_USE_INT_VAR,out);
-            fwrite(&l,4,1,out); // variable
-			fputc(1,out);		// int offset
-            fputc(1,out);       // int length
-			ch=0; } 			// place holder
-		else
-            ch=val(src,arg);
-
-		fprintf(out,"%c%c",CS_NODE_STATUS,ch);
-		continue; }
-	if(!stricmp(p,"END_CMD") || !stricmp(p,"ENDCMD")) {
-		fprintf(out,"%c",CS_END_CMD);
-		continue; }
-	if(!stricmp(p,"CMD_POP") || !stricmp(p,"CMDPOP")) {
-		fprintf(out,"%c",CS_CMD_POP);
-		continue; }
-	if(!stricmp(p,"CLS")) {
-        fprintf(out,"%c",CS_CLS);
-        continue; }
-	if(!stricmp(p,"CRLF")) {
-        fprintf(out,"%c",CS_CRLF);
-        continue; }
-	if(!stricmp(p,"PAUSE")) {
-        fprintf(out,"%c",CS_PAUSE);
-        continue; }
-	if(!stricmp(p,"PAUSE_RESET")) {
-        fprintf(out,"%c",CS_PAUSE_RESET);
-        continue; }
-	if(!stricmp(p,"CLEAR_ABORT")) {
-        fprintf(out,"%c",CS_CLEAR_ABORT);
-        continue; }
-	if(!stricmp(p,"GETLINES")) {
-        fprintf(out,"%c",CS_GETLINES);
-        continue; }
-	if(!stricmp(p,"GETFILESPEC")) {
-        fprintf(out,"%c",CS_GETFILESPEC);
-        continue; }
-	if(!stricmp(p,"FINDUSER")) {
-        fprintf(out,"%c",CS_FINDUSER);
-        continue; }
-
-	if(!stricmp(p,"LOG")) {
-        if(!*arg) break;
-        fprintf(out,"%c",CS_LOG);
-        writecstr(arg);
-        continue; }
-	if(!stricmp(p,"MNEMONICS")) {
-        if(!*arg) break;
-        fprintf(out,"%c",CS_MNEMONICS);
-        writecstr(arg);
-        continue; }
-	if(!stricmp(p,"PRINT")) {
-        if(!*arg) break;
-        fprintf(out,"%c",CS_PRINT);
-        writecstr(arg);
-        continue; }
-	if(!stricmp(p,"PRINT_LOCAL")) {
-        if(!*arg) break;
-        fprintf(out,"%c",CS_PRINT_LOCAL);
-        writecstr(arg);
-        continue; }
-	if(!stricmp(p,"PRINT_REMOTE")) {
-        if(!*arg) break;
-        fprintf(out,"%c",CS_PRINT_REMOTE);
-        writecstr(arg);
-        continue; }
-	if(!stricmp(p,"PRINTFILE")) {
-        if(!*arg) break;
-		if(*arg=='"') {
-			fprintf(out,"%c",CS_PRINTFILE);
-			writestr(arg); }
-		else {
-			if((l=isvar(arg2))!=0) {
-				fputc(CS_USE_INT_VAR,out);
-				fwrite(&l,4,1,out); // variable
-				fputc(6,out);		// int offset
-				fputc(2,out);		// int length
-				i=0; }				// place holder
-			else
-				i=val(src,arg2);
-
-			fprintf(out,"%c%c",CS_VAR_INSTRUCTION,PRINTFILE_VAR_MODE);
-			p=strchr(arg,SP);
-			if(p) *p=0;
-			writecrc(src,arg);
-			fwrite(&i,2,1,out); }
-		continue; }
-	if(!stricmp(p,"PRINTTAIL")) {
-		if(!*arg || !*arg2)
-			break;
-		if((l=isvar(arg3))!=0) {
-            fputc(CS_USE_INT_VAR,out);
-            fwrite(&l,4,1,out); // variable
-			fputc(8,out);		// int offset
-            fputc(1,out);       // int length
-			j=0; }				// place holder
-		else
-			j=val(src,arg3);
-
-		fprintf(out,"%c%c",CS_VAR_INSTRUCTION,PRINTTAIL_VAR_MODE);
-		p=strchr(arg,SP);
-		if(p) *p=0;
-		writecrc(src,arg);
-		i=val(src,arg2);
-		fwrite(&i,2,1,out);
-		fwrite(&j,1,1,out);
-		continue; }
-
-	if(!stricmp(p,"PRINTFILE_STR")) {
-        fprintf(out,"%c",CS_PRINTFILE_STR);
-        continue; }
-	if(!stricmp(p,"PRINTFILE_LOCAL")) {
-        if(!*arg) break;
-        fprintf(out,"%c",CS_PRINTFILE_LOCAL);
-		writestr(arg);
-        continue; }
-	if(!stricmp(p,"PRINTFILE_REMOTE")) {
-        if(!*arg) break;
-        fprintf(out,"%c",CS_PRINTFILE_REMOTE);
-		writestr(arg);
-        continue; }
-	if(!stricmp(p,"EXEC")) {
-        if(!*arg) break;
-        fprintf(out,"%c",CS_EXEC);
-		writestr(arg);
-        continue; }
-	if(!stricmp(p,"EXEC_INT")) {
-        if(!*arg) break;
-        fprintf(out,"%c",CS_EXEC_INT);
-		writestr(arg);
-        continue; }
-	if(!stricmp(p,"EXEC_BIN")) {
-        if(!*arg) break;
-        fprintf(out,"%c",CS_EXEC_BIN);
-		writestr(arg);
-        continue; }
-	if(!stricmp(p,"EXEC_XTRN")) {
-        if(!*arg) break;
-        fprintf(out,"%c",CS_EXEC_XTRN);
-		writestr(arg);
-        continue; }
-
-	if(!stricmp(p,"SELECT_SHELL")) {
-        fprintf(out,"%c",CS_SELECT_SHELL);
-        continue; }
-	if(!stricmp(p,"SET_SHELL")) {
-        fprintf(out,"%c",CS_SET_SHELL);
-        continue; }
-	if(!stricmp(p,"SELECT_EDITOR")) {
-        fprintf(out,"%c",CS_SELECT_EDITOR);
-        continue; }
-	if(!stricmp(p,"SET_EDITOR")) {
-        fprintf(out,"%c",CS_SET_EDITOR);
-        continue; }
-
-	if(!stricmp(p,"YES_NO")) {
-        if(!*arg) break;
-        fprintf(out,"%c",CS_YES_NO);
-        writecstr(arg);
-        continue; }
-	if(!stricmp(p,"NO_YES")) {
-        if(!*arg) break;
-        fprintf(out,"%c",CS_NO_YES);
-        writecstr(arg);
-        continue; }
-	if(!stricmp(p,"MENU")) {
-        if(!*arg) break;
-        fprintf(out,"%c",CS_MENU);
-		writestr(arg);
-        continue; }
-	if(!stricmp(p,"SET_MENU_DIR")) {
-        if(!*arg) break;
-        fprintf(out,"%c",CS_SET_MENU_DIR);
-		writestr(arg);
-        continue; }
-	if(!stricmp(p,"SET_MENU_FILE")) {
-        if(!*arg) break;
-        fprintf(out,"%c",CS_SET_MENU_FILE);
-		writestr(arg);
-        continue; }
-	if(!stricmp(p,"SEND_FILE_VIA")) {
-		if(!*arg || !*arg2) break;
-		if(*arg2=='"') {
-			fprintf(out,"%c%c%c",CS_VAR_INSTRUCTION,SEND_FILE_VIA,*arg);
-			writestr(arg2); }
-		else {
-			fprintf(out,"%c%c%c",CS_VAR_INSTRUCTION,SEND_FILE_VIA_VAR,*arg);
-			writecrc(src,arg2); }
-        continue; }
-	if(!stricmp(p,"RECEIVE_FILE_VIA")) {
-		if(!*arg || !*arg2) break;
-		if(*arg2=='"') {
-			fprintf(out,"%c%c%c",CS_VAR_INSTRUCTION,RECEIVE_FILE_VIA,*arg);
-			writestr(arg2); }
-		else {
-			fprintf(out,"%c%c%c",CS_VAR_INSTRUCTION,RECEIVE_FILE_VIA_VAR,*arg);
-			writecrc(src,arg2); }
-        continue; }
-	if(!stricmp(p,"CHKFILE")) {
-        if(!*arg) break;
-		if(*arg=='"') {
-			fprintf(out,"%c",CS_CHKFILE);
-			writestr(arg); }
-		else {
-			fprintf(out,"%c%c",CS_VAR_INSTRUCTION,CHKFILE_VAR);
-			writecrc(src,arg); }
-        continue; }
-	if(!stricmp(p,"GET_FILE_LENGTH")) {
-		if(!*arg || !*arg2)
-			break;
-		fprintf(out,"%c%c",CS_VAR_INSTRUCTION,FLENGTH_TO_INT);
-		p=strchr(arg,SP);
-		if(p) *p=0;
-		writecrc(src,arg);
-		writecrc(src,arg2);
-		continue; }
-	if(!stricmp(p,"GET_FILE_TIME")) {
-		if(!*arg || !*arg2)
-			break;
-		fprintf(out,"%c%c",CS_VAR_INSTRUCTION,FTIME_TO_INT);
-		p=strchr(arg,SP);
-		if(p) *p=0;
-		writecrc(src,arg);
-		writecrc(src,arg2);
-        continue; }
-	if(!stricmp(p,"CHARVAL")) {
-		if(!*arg || !*arg2)
-			break;
-		fprintf(out,"%c%c",CS_VAR_INSTRUCTION,CHARVAL_TO_INT);
-		p=strchr(arg,SP);
-		if(p) *p=0;
-		writecrc(src,arg);
-		writecrc(src,arg2);
-        continue; }
-	if(!stricmp(p,"SETSTR")) {
-        if(!*arg) break;
-        fprintf(out,"%c",CS_SETSTR);
-        writecstr(arg);
-        continue; }
-	if(!stricmp(p,"COMPARE_STR")) {
-        if(!*arg) break;
-        fprintf(out,"%c",CS_COMPARE_STR);
-        writecstr(arg);
-        continue; }
-	if(!stricmp(p,"GET_TEMPLATE")) {
-        if(!*arg) break;
-        fprintf(out,"%c",CS_GET_TEMPLATE);
-		writestr(arg);
-        continue; }
-	if(!stricmp(p,"READ_SIF")) {
-        if(!*arg) break;
-        fprintf(out,"%c",CS_READ_SIF);
-		writestr(arg);
-        continue; }
-	if(!stricmp(p,"CREATE_SIF")) {
-        if(!*arg) break;
-        fprintf(out,"%c",CS_CREATE_SIF);
-		writestr(arg);
-        continue; }
-	if(!stricmp(p,"TRASHCAN")) {
-        if(!*arg) break;
-        fprintf(out,"%c",CS_TRASHCAN);
-		writestr(arg);
-        continue; }
-	if(!stricmp(p,"CMDSTR")) {
-        if(!*arg) break;
-        fprintf(out,"%c",CS_CMDSTR);
-        writecstr(arg);
-        continue; }
-	if(!stricmp(p,"CMDKEYS")) {
-        if(!*arg) break;
-        fprintf(out,"%c",CS_CMDKEYS);
-		for(p=arg;*p && *p!='#';p++) {
-            ch=*p;
-			if(ch=='"')
-				continue;
-            if(ch=='/') {
-                p++;
-                ch=*p|0x80; }  /* high bit indicates slash required */
-            else if(ch=='^' && *(p+1)>=0x40) {
-                p++;
-                ch=*p;
-                ch-=0x40; }
-			else if(ch=='\\') {
-				p++;
-				ch=cesc(*p); }
-            fputc(ch,out); }
-        fputc(0,out);
-        continue; }
-	if(!stricmp(p,"COMPARE_WORD")) {
-        if(!*arg) break;
-        fprintf(out,"%c",CS_COMPARE_WORD);
-        writecstr(arg);
-        continue; }
-	if(!stricmp(p,"GETSTR")) {
-        p=strchr(arg,SP);
-        if(p) *p=0;
-		if((!*arg || isdigit(*arg) || !stricmp(arg,"STR")) && !*arg3)
-			fprintf(out,"%c%c",CS_GETSTR,atoi(arg) ? atoi(arg)
-				: *arg2 ? atoi(arg2) : 128);
-        else {
-			if((l=isvar(arg2))!=0) {
-				fputc(CS_USE_INT_VAR,out);
-				fwrite(&l,4,1,out); // variable
-				fputc(6,out);		// int offset
-				fputc(1,out);		// int length
-				i=0; }				// place holder
-			else if(*arg2)
-				i=val(src,arg2);
-			else
-				i=0;
-
-			fprintf(out,"%c%c",CS_VAR_INSTRUCTION
-				,*arg3 ? GETSTR_MODE : GETSTR_VAR);
-			writecrc(src,arg);
-	
-            if(!i) i=128;
-			fwrite(&i,1,1,out);
-			if(*arg3) {
-				l=val(src,arg3);
-				fwrite(&l,4,1,out); } }
-        continue; }
-	if(!stricmp(p,"GETNUM")) {
-        if(!*arg) break;
-        p=strchr(arg,SP);
-        if(p) *p=0;
-        if(isdigit(*arg)) {
-			i=val(src,arg);
-			fprintf(out,"%c",CS_GETNUM);
-            fwrite(&i,2,1,out); }
-        else {
-			if((l=isvar(arg2))!=0) {
-				fputc(CS_USE_INT_VAR,out);
-				fwrite(&l,4,1,out); // variable
-				fputc(6,out);		// int offset
-				fputc(2,out);		// int length
-				i=0; }				// place holder
-			else
-				i=val(src,arg2);
-
-            fprintf(out,"%c%c",CS_VAR_INSTRUCTION,GETNUM_VAR);
-			writecrc(src,arg);
-            fwrite(&i,2,1,out); }
-        continue; }
-	if(!stricmp(p,"MSWAIT")) {
-        if(!*arg) break;
-		if((l=isvar(arg))!=0) {
-			fputc(CS_USE_INT_VAR,out);
-			fwrite(&l,4,1,out); // variable
-			fputc(1,out);		// int offset
-			fputc(2,out);		// int length
-			i=0; }				// place holder
-		else
-			i=val(src,arg);
-
-        fprintf(out,"%c",CS_MSWAIT);
-        fwrite(&i,2,1,out);
-        continue; }
-	if(!stricmp(p,"GETLINE")) {
-        p=strchr(arg,SP);
-        if(p) *p=0;
-        if(!*arg || isdigit(*arg))
-            fprintf(out,"%c%c",CS_GETLINE,*arg ? atoi(arg) :128);
-        else {
-			if((l=isvar(arg2))!=0) {
-				fputc(CS_USE_INT_VAR,out);
-				fwrite(&l,4,1,out); // variable
-				fputc(6,out);		// int offset
-				fputc(1,out);		// int length
-				i=0; }				// place holder
-			else
-                i=val(src,arg2);
-
-            fprintf(out,"%c%c",CS_VAR_INSTRUCTION,GETLINE_VAR);
-			writecrc(src,arg);
-            if(!i) i=128;
-            fwrite(&i,1,1,out); }
-        continue; }
-	if(!stricmp(p,"GETSTRUPR")) {
-        p=strchr(arg,SP);
-        if(p) *p=0;
-        if(!*arg || isdigit(*arg))
-            fprintf(out,"%c%c",CS_GETSTRUPR,*arg ? atoi(arg) :128);
-        else {
-			if((l=isvar(arg2))!=0) {
-				fputc(CS_USE_INT_VAR,out);
-				fwrite(&l,4,1,out); // variable
-				fputc(6,out);		// int offset
-				fputc(1,out);		// int length
-				i=0; }				// place holder
-			else
-                i=val(src,arg2);
-
-            fprintf(out,"%c%c",CS_VAR_INSTRUCTION,GETSTRUPR_VAR);
-			writecrc(src,arg);
-            if(!i) i=128;
-            fwrite(&i,1,1,out); }
-        continue; }
-	if(!stricmp(p,"GETNAME")) {
-        p=strchr(arg,SP);
-        if(p) *p=0;
-        if(!*arg || isdigit(*arg))
-            fprintf(out,"%c%c",CS_GETNAME,*arg ? atoi(arg) :25);
-        else {
-			if((l=isvar(arg2))!=0) {
-				fputc(CS_USE_INT_VAR,out);
-				fwrite(&l,4,1,out); // variable
-				fputc(6,out);		// int offset
-				fputc(1,out);		// int length
-				i=0; }				// place holder
-			else
-				i=atoi(arg2);
-
-            fprintf(out,"%c%c",CS_VAR_INSTRUCTION,GETNAME_VAR);
-			writecrc(src,arg);
-            if(!i) i=128;
-            fwrite(&i,1,1,out); }
-        continue; }
-	if(!stricmp(p,"SHIFT_STR")) {
-        if(!*arg) break;
-        p=strchr(arg,SP);
-        if(p) *p=0;
-        if(!*arg || isdigit(*arg))
-            fprintf(out,"%c%c",CS_SHIFT_STR,atoi(arg));
-        else {
-			if((l=isvar(arg2))!=0) {
-				fputc(CS_USE_INT_VAR,out);
-				fwrite(&l,4,1,out); // variable
-				fputc(6,out);		// int offset
-				fputc(1,out);		// int length
-				i=0; }				// place holder
-			else
-                i=atoi(arg2);
-
-            fprintf(out,"%c%c",CS_VAR_INSTRUCTION,SHIFT_STR_VAR);
-			writecrc(src,arg);
-            if(!i) i=128;
-            fwrite(&i,1,1,out); }
-        continue; }
-	if(!stricmp(p,"TRUNCSP")) {
-		fprintf(out,"%c%c",CS_VAR_INSTRUCTION,TRUNCSP_STR_VAR);
-		writecrc(src,arg);
-        continue; }
-	if(!stricmp(p,"STRIP_CTRL")) {
-		fprintf(out,"%c%c",CS_VAR_INSTRUCTION,STRIP_CTRL_STR_VAR);
-		writecrc(src,arg);
-        continue; }
-	if(!stricmp(p,"STRUPR")) {
-        fprintf(out,"%c%c",CS_VAR_INSTRUCTION,STRUPR_VAR);
-		writecrc(src,arg);
-        continue; }
-	if(!stricmp(p,"STRLWR")) {
-        fprintf(out,"%c%c",CS_VAR_INSTRUCTION,STRLWR_VAR);
-		writecrc(src,arg);
-        continue; }
-	if(!stricmp(p,"STRLEN")) {
-        if(!*arg) break;
-        fprintf(out,"%c%c",CS_VAR_INSTRUCTION,STRLEN_INT_VAR);
-		p=strchr(arg,SP);
-        if(!p)
-            break;
-        *p=0;
-		writecrc(src,arg);
-		writecrc(src,arg2);
-        continue; }
-	if(!stricmp(p,"REPLACE_TEXT")) {
-        if(!*arg || !*arg2) break;
-		if((l=isvar(arg))!=0) {
-			fputc(CS_USE_INT_VAR,out);
-			fwrite(&l,4,1,out); // variable
-			fputc(1,out);		// int offset
-			fputc(2,out);		// int length
-			i=0; }				// place holder
-		else
-			i=val(src,arg);
-
-        fprintf(out,"%c",CS_REPLACE_TEXT);
-        fwrite(&i,2,1,out);
-        writecstr(arg2);
-        continue; }
-	if(!stricmp(p,"REVERT_TEXT")) {
-        if(!*arg) break;
-		if(!stricmp(arg,"ALL"))
-            i=0xffff;
-		else {
-			if((l=isvar(arg))!=0) {
-				fputc(CS_USE_INT_VAR,out);
-				fwrite(&l,4,1,out); // variable
-				fputc(1,out);		// int offset
-				fputc(2,out);		// int length
-				i=0; }				// place holder
-			else
-				i=val(src,arg); }
-
-        fprintf(out,"%c",CS_REVERT_TEXT);
-        fwrite(&i,2,1,out);
-        continue; }
-	if(!stricmp(p,"TOGGLE_USER_MISC")
-		|| !stricmp(p,"COMPARE_USER_MISC")) {
-        if(!*arg) break;
-
-		if((l=isvar(arg))!=0) {
-			fputc(CS_USE_INT_VAR,out);
-			fwrite(&l,4,1,out); // variable
-			fputc(1,out);		// int offset
-			fputc(4,out);		// int length
-			l=0; }				// place holder
-		else
-			l=val(src,arg);
-
-		if(!stricmp(p,"TOGGLE_USER_MISC"))
-            fprintf(out,"%c",CS_TOGGLE_USER_MISC);
-        else
-            fprintf(out,"%c",CS_COMPARE_USER_MISC);
-        fwrite(&l,4,1,out);
-        continue; }
-
-	if(!stricmp(p,"TOGGLE_USER_CHAT")
-		|| !stricmp(p,"COMPARE_USER_CHAT")) {
-        if(!*arg) break;
-
-		if((l=isvar(arg))!=0) {
-			fputc(CS_USE_INT_VAR,out);
-			fwrite(&l,4,1,out); // variable
-			fputc(1,out);		// int offset
-			fputc(4,out);		// int length
-			l=0; }				// place holder
-		else
-			l=val(src,arg);
-
-		if(!stricmp(p,"TOGGLE_USER_CHAT"))
-            fprintf(out,"%c",CS_TOGGLE_USER_CHAT);
-        else
-            fprintf(out,"%c",CS_COMPARE_USER_CHAT);
-        fwrite(&l,4,1,out);
-        continue; }
-
-	if(!stricmp(p,"TOGGLE_USER_QWK")
-		|| !stricmp(p,"COMPARE_USER_QWK")) {
-        if(!*arg) break;
-
-		if((l=isvar(arg))!=0) {
-			fputc(CS_USE_INT_VAR,out);
-			fwrite(&l,4,1,out); // variable
-			fputc(1,out);		// int offset
-			fputc(4,out);		// int length
-			l=0; }				// place holder
-		else
-			l=val(src,arg);
-
-		if(!stricmp(p,"TOGGLE_USER_QWK"))
-            fprintf(out,"%c",CS_TOGGLE_USER_QWK);
-        else
-            fprintf(out,"%c",CS_COMPARE_USER_QWK);
-        fwrite(&l,4,1,out);
-        continue; }
-
-	if(!stricmp(p,"TOGGLE_NODE_MISC")
-		|| !stricmp(p,"COMPARE_NODE_MISC")) {
-        if(!*arg) break;
-
-		if((l=isvar(arg))!=0) {
-			fputc(CS_USE_INT_VAR,out);
-			fwrite(&l,4,1,out); // variable
-			fputc(1,out);		// int offset
-			fputc(2,out);		// int length
-			i=0; }				// place holder
-		else
-			i=val(src,arg);
-
-		if(!stricmp(p,"TOGGLE_NODE_MISC"))
-            fprintf(out,"%c",CS_TOGGLE_NODE_MISC);
-        else
-            fprintf(out,"%c",CS_COMPARE_NODE_MISC);
-        fwrite(&i,2,1,out);
-        continue; }
-
-	if(!stricmp(p,"TOGGLE_USER_FLAG")) {
-        if(!*arg) break;
-        p=arg;
-        fprintf(out,"%c%c",CS_TOGGLE_USER_FLAG,toupper(*p++));
-        while(*p && *p<=SP) p++;
-        fprintf(out,"%c",toupper(*p));
-        continue; }
-
-	if(!stricmp(p,"SET_USER_LEVEL")) {
-        if(!*arg) break;
-
-		if((l=isvar(arg))!=0) {
-			fputc(CS_USE_INT_VAR,out);
-			fwrite(&l,4,1,out); // variable
-			fputc(1,out);		// int offset
-			fputc(1,out);		// int length
-			ch=0; } 			// place holder
-		else
-			ch=val(src,arg);
-
-		fprintf(out,"%c%c",CS_SET_USER_LEVEL,ch);
-        continue; }
-
-	if(!stricmp(p,"SET_USER_STRING")) {
-        if(!*arg) break;
-
-		if((l=isvar(arg))!=0) {
-			fputc(CS_USE_INT_VAR,out);
-			fwrite(&l,4,1,out); // variable
-			fputc(1,out);		// int offset
-			fputc(1,out);		// int length
-			ch=0; } 			// place holder
-		else
-			ch=val(src,arg);
-
-        fprintf(out,"%c%c",CS_SET_USER_STRING,ch);
-        continue; }
-
-
-	if(!stricmp(p,"ADJUST_USER_CREDITS")) {
-        if(!*arg) break;
-
-		if((l=isvar(arg))!=0) {
-			fputc(CS_USE_INT_VAR,out);
-			fwrite(&l,4,1,out); // variable
-			fputc(1,out);		// int offset
-			fputc(2,out);		// int length
-			i=0; }			   // place holder
-		else
-			i=val(src,arg);
-
-        fprintf(out,"%c",CS_ADJUST_USER_CREDITS);
-        fwrite(&i,2,1,out);
-        continue; }
-
-	if(!stricmp(p,"ADJUST_USER_MINUTES")) {
-        if(!*arg) break;
-
-		if((l=isvar(arg))!=0) {
-			fputc(CS_USE_INT_VAR,out);
-			fwrite(&l,4,1,out); // variable
-			fputc(1,out);		// int offset
-			fputc(2,out);		// int length
-			i=0; }				// place holder
-		else
-			i=val(src,arg);
-
-        fprintf(out,"%c",CS_ADJUST_USER_MINUTES);
-        fwrite(&i,2,1,out);
-        continue; }
-
-	if(!stricmp(p,"SHOW_MEM")) {
-        fprintf(out,"%c",CS_SHOW_MEM);
-        continue; }
-	if(!stricmp(p,"GURU_LOG")) {
-        fprintf(out,"%c",CS_GURU_LOG);
-        continue; }
-	if(!stricmp(p,"ERROR_LOG")) {
-        fprintf(out,"%c",CS_ERROR_LOG);
-        continue; }
-	if(!stricmp(p,"SYSTEM_LOG")) {
-        fprintf(out,"%c",CS_SYSTEM_LOG);
-        continue; }
-	if(!stricmp(p,"SYSTEM_YLOG")) {
-        fprintf(out,"%c",CS_SYSTEM_YLOG);
-        continue; }
-	if(!stricmp(p,"SYSTEM_STATS")) {
-        fprintf(out,"%c",CS_SYSTEM_STATS);
-        continue; }
-	if(!stricmp(p,"NODE_STATS")) {
-        fprintf(out,"%c",CS_NODE_STATS);
-        continue; }
-	if(!stricmp(p,"CHANGE_USER")) {
-        fprintf(out,"%c",CS_CHANGE_USER);
-        continue; }
-	if(!stricmp(p,"ANSI_CAPTURE")) {
-        fprintf(out,"%c",CS_ANSI_CAPTURE);
-        continue; }
-	if(!stricmp(p,"LIST_TEXT_FILE")) {
-        fprintf(out,"%c",CS_LIST_TEXT_FILE);
-        continue; }
-	if(!stricmp(p,"EDIT_TEXT_FILE")) {
-        fprintf(out,"%c",CS_EDIT_TEXT_FILE);
-        continue; }
-
-
-	if(!stricmp(p,"COMPARE_KEY")) {
-		if(!stricmp(arg,"DIGIT"))
-            ch=CS_DIGIT;
-		else if(!stricmp(arg,"EDIGIT"))
-            ch=CS_EDIGIT;
-        else
-            ch=toupper(*arg);
-        if(ch=='/')
-            ch=(*arg)|0x80;   /* high bit indicates slash required */
-		else if(ch=='^' && (*(arg+1))>=0x40)
-			ch=(*(arg+1))-0x40;   /* ctrl char */
-		else if(ch=='\\')
-			ch=cesc(*(arg+1));
-		else if(ch=='\'')
-			ch=*(arg+1);
-        fprintf(out,"%c%c",CS_COMPARE_KEY,ch);
-        continue; }
-	if(!stricmp(p,"COMPARE_KEYS")) {
-        fputc(CS_COMPARE_KEYS,out);
-		for(p=arg;*p && *p!='#';p++) {
-            ch=*p;
-			if(ch=='"')
-				continue;
-            if(ch=='/') {
-                p++;
-                ch=*p|0x80; }  /* high bit indicates slash required */
-            else if(ch=='^' && *(p+1)>=0x40) {
-                p++;
-                ch=*p;
-                ch-=0x40; }
-			else if(ch=='\\') {
-				p++;
-				ch=cesc(*p); }
-            fputc(ch,out); }
-        fputc(0,out);
-        continue; }
-	if(!stricmp(p,"GETCMD")) {
-        fprintf(out,"%c",CS_GETCMD);
-        writecstr(arg);
-        continue; }
-	if(!stricmp(p,"INKEY")) {
-        fprintf(out,"%c",CS_INKEY);
-        continue; }
-	if(!stricmp(p,"GETKEY")) {
-        fprintf(out,"%c",CS_GETKEY);
-        continue; }
-	if(!stricmp(p,"GETKEYE")) {
-        fprintf(out,"%c",CS_GETKEYE);
-        continue; }
-	if(!stricmp(p,"UNGETKEY")) {
-        fprintf(out,"%c",CS_UNGETKEY);
-        continue; }
-	if(!stricmp(p,"UNGETSTR")) {
-        fprintf(out,"%c",CS_UNGETSTR);
-        continue; }
-	if(!stricmp(p,"PRINTKEY")) {
-        fprintf(out,"%c",CS_PRINTKEY);
-        continue; }
-	if(!stricmp(p,"PRINTSTR")) {
-        fprintf(out,"%c",CS_PRINTSTR);
-        continue; }
-
-    /* FUNCTIONS */
-
-	if(!stricmp(p,"NODELIST_ALL")) {
-        fprintf(out,"%c",CS_NODELIST_ALL);
-        continue; }
-	if(!stricmp(p,"NODELIST_USERS")) {
-        fprintf(out,"%c",CS_NODELIST_USERS);
-        continue; }
-
-	if(!stricmp(p,"USERLIST_ALL")) {
-        fprintf(out,"%c",CS_USERLIST_ALL);
-        continue; }
-	if(!stricmp(p,"USERLIST_SUB")) {
-        fprintf(out,"%c",CS_USERLIST_SUB);
-        continue; }
-	if(!stricmp(p,"USERLIST_DIR")) {
-        fprintf(out,"%c",CS_USERLIST_DIR);
-        continue; }
-	if(!stricmp(p,"USERLIST_LOGONS")) {
-        fprintf(out,"%c",CS_USERLIST_LOGONS);
-        continue; }
-
-	if(!stricmp(p,"HANGUP")) {
-        fprintf(out,"%c",CS_HANGUP);
-        continue; }
-
-	if(!stricmp(p,"LOGOFF")) {
-        fprintf(out,"%c",CS_LOGOFF);
-        continue; }
-
-	if(!stricmp(p,"LOGOFF_FAST")) {
-        fprintf(out,"%c",CS_LOGOFF_FAST);
-        continue; }
-
-	if(!stricmp(p,"AUTO_MESSAGE")) {
-        fprintf(out,"%c",CS_AUTO_MESSAGE);
-        continue; }
-
-	if(!stricmp(p,"MINUTE_BANK")) {
-        fprintf(out,"%c",CS_MINUTE_BANK);
-        continue; }
-
-	if(!stricmp(p,"USER_EDIT")) {
-        fprintf(out,"%c",CS_USER_EDIT);
-        continue; }
-
-	if(!stricmp(p,"USER_DEFAULTS")) {
-        fprintf(out,"%c",CS_USER_DEFAULTS);
-        continue; }
-
-	if(!stricmp(p,"PAGE_SYSOP")) {
-        fprintf(out,"%c",CS_PAGE_SYSOP);
-        continue; }
-	if(!stricmp(p,"PAGE_GURU")) {
-        fprintf(out,"%c",CS_PAGE_GURU);
-        continue; }
-
-	if(!stricmp(p,"PRIVATE_CHAT")) {
-        fprintf(out,"%c",CS_PRIVATE_CHAT);
-        continue; }
-
-	if(!stricmp(p,"PRIVATE_MESSAGE")) {
-        fprintf(out,"%c",CS_PRIVATE_MESSAGE);
-        continue; }
-
-	if(!stricmp(p,"MAIL_READ")) {
-        fprintf(out,"%c",CS_MAIL_READ);
-        continue; }
-	if(!stricmp(p,"MAIL_READ_SENT")) {       /* Kill/read sent mail */
-        fprintf(out,"%c",CS_MAIL_READ_SENT);
-        continue; }
-	if(!stricmp(p,"MAIL_READ_ALL")) {
-        fprintf(out,"%c",CS_MAIL_READ_ALL);
-        continue; }
-	if(!stricmp(p,"MAIL_SEND")) {       /* Send E-mail */
-        fprintf(out,"%c",CS_MAIL_SEND);
-        continue; }
-	if(!stricmp(p,"MAIL_SEND_FEEDBACK")) {       /* Feedback */
-        fprintf(out,"%c",CS_MAIL_SEND_FEEDBACK);
-        continue; }
-	if(!stricmp(p,"MAIL_SEND_NETMAIL")) {
-        fprintf(out,"%c",CS_MAIL_SEND_NETMAIL);
-        continue; }
-	if(!stricmp(p,"MAIL_SEND_NETFILE")) {
-        fprintf(out,"%c",CS_MAIL_SEND_NETFILE);
-        continue; }
-	if(!stricmp(p,"MAIL_SEND_FILE")) {   /* Upload Attached File to E-mail */
-        fprintf(out,"%c",CS_MAIL_SEND_FILE);
-        continue; }
-	if(!stricmp(p,"MAIL_SEND_BULK")) {
-        fprintf(out,"%c",CS_MAIL_SEND_BULK);
-        continue; }
-
-
-	if(!stricmp(p,"MSG_SET_AREA")) {
-        fprintf(out,"%c",CS_MSG_SET_AREA);
-        continue; }
-	if(!stricmp(p,"MSG_SET_GROUP")) {
-        fprintf(out,"%c",CS_MSG_SET_GROUP);
-        continue; }
-	if(!stricmp(p,"MSG_SELECT_AREA")) {
-        fprintf(out,"%c",CS_MSG_SELECT_AREA);
-        continue; }
-	if(!stricmp(p,"MSG_SHOW_GROUPS")) {
-        fprintf(out,"%c",CS_MSG_SHOW_GROUPS);
-        continue; }
-	if(!stricmp(p,"MSG_SHOW_SUBBOARDS")) {
-        fprintf(out,"%c",CS_MSG_SHOW_SUBBOARDS);
-        continue; }
-	if(!stricmp(p,"MSG_GROUP_UP")) {
-        fprintf(out,"%c",CS_MSG_GROUP_UP);
-        continue; }
-	if(!stricmp(p,"MSG_GROUP_DOWN")) {
-        fprintf(out,"%c",CS_MSG_GROUP_DOWN);
-        continue; }
-	if(!stricmp(p,"MSG_SUBBOARD_UP")) {
-        fprintf(out,"%c",CS_MSG_SUBBOARD_UP);
-        continue; }
-	if(!stricmp(p,"MSG_SUBBOARD_DOWN")) {
-        fprintf(out,"%c",CS_MSG_SUBBOARD_DOWN);
-        continue; }
-	if(!stricmp(p,"MSG_GET_SUB_NUM")) {
-        fprintf(out,"%c",CS_MSG_GET_SUB_NUM);
-        continue; }
-	if(!stricmp(p,"MSG_GET_GRP_NUM")) {
-        fprintf(out,"%c",CS_MSG_GET_GRP_NUM);
-        continue; }
-	if(!stricmp(p,"MSG_READ")) {
-        fprintf(out,"%c",CS_MSG_READ);
-        continue; }
-	if(!stricmp(p,"MSG_POST")) {
-        fprintf(out,"%c",CS_MSG_POST);
-        continue; }
-	if(!stricmp(p,"MSG_QWK")) {
-        fprintf(out,"%c",CS_MSG_QWK);
-        continue; }
-	if(!stricmp(p,"MSG_PTRS_CFG")) {
-        fprintf(out,"%c",CS_MSG_PTRS_CFG);
-        continue; }
-	if(!stricmp(p,"MSG_PTRS_REINIT")) {
-        fprintf(out,"%c",CS_MSG_PTRS_REINIT);
-        continue; }
-	if(!stricmp(p,"MSG_NEW_SCAN_CFG")) {
-        fprintf(out,"%c",CS_MSG_NEW_SCAN_CFG);
-        continue; }
-	if(!stricmp(p,"MSG_NEW_SCAN")) {
-        fprintf(out,"%c",CS_MSG_NEW_SCAN);
-        continue; }
-	if(!stricmp(p,"MSG_NEW_SCAN_SUB")) {
-        fprintf(out,"%c",CS_MSG_NEW_SCAN_SUB);
-        continue; }
-	if(!stricmp(p,"MSG_NEW_SCAN_ALL")) {
-        fprintf(out,"%c",CS_MSG_NEW_SCAN_ALL);
-        continue; }
-	if(!stricmp(p,"MSG_CONT_SCAN")) {
-        fprintf(out,"%c",CS_MSG_CONT_SCAN);
-        continue; }
-	if(!stricmp(p,"MSG_CONT_SCAN_ALL")) {
-        fprintf(out,"%c",CS_MSG_CONT_SCAN_ALL);
-        continue; }
-	if(!stricmp(p,"MSG_BROWSE_SCAN")) {
-        fprintf(out,"%c",CS_MSG_BROWSE_SCAN);
-        continue; }
-	if(!stricmp(p,"MSG_BROWSE_SCAN_ALL")) {
-        fprintf(out,"%c",CS_MSG_BROWSE_SCAN_ALL);
-        continue; }
-	if(!stricmp(p,"MSG_FIND_TEXT")) {
-        fprintf(out,"%c",CS_MSG_FIND_TEXT);
-        continue; }
-	if(!stricmp(p,"MSG_FIND_TEXT_ALL")) {
-        fprintf(out,"%c",CS_MSG_FIND_TEXT_ALL);
-        continue; }
-	if(!stricmp(p,"MSG_YOUR_SCAN_CFG")) {
-        fprintf(out,"%c",CS_MSG_YOUR_SCAN_CFG);
-        continue; }
-	if(!stricmp(p,"MSG_YOUR_SCAN")) {
-        fprintf(out,"%c",CS_MSG_YOUR_SCAN);
-        continue; }
-	if(!stricmp(p,"MSG_YOUR_SCAN_ALL")) {
-        fprintf(out,"%c",CS_MSG_YOUR_SCAN_ALL);
-        continue; }
-	if(!stricmp(p,"CHAT_SECTION")) {
-        fprintf(out,"%c",CS_CHAT_SECTION);
-        continue; }
-	if(!stricmp(p,"TEXT_FILE_SECTION")) {
-        fprintf(out,"%c",CS_TEXT_FILE_SECTION);
-        continue; }
-	if(!stricmp(p,"XTRN_EXEC")) {
-        fprintf(out,"%c",CS_XTRN_EXEC);
-        continue; }
-	if(!stricmp(p,"XTRN_SECTION")) {
-        fprintf(out,"%c",CS_XTRN_SECTION);
-        continue; }
-
-	if(!stricmp(p,"FILE_SET_AREA")) {
-        fprintf(out,"%c",CS_FILE_SET_AREA);
-        continue; }
-	if(!stricmp(p,"FILE_SET_LIBRARY")) {
-        fprintf(out,"%c",CS_FILE_SET_LIBRARY);
-        continue; }
-	if(!stricmp(p,"FILE_SELECT_AREA")) {
-        fprintf(out,"%c",CS_FILE_SELECT_AREA);
-        continue; }
-	if(!stricmp(p,"FILE_SHOW_LIBRARIES")) {
-        fprintf(out,"%c",CS_FILE_SHOW_LIBRARIES);
-        continue; }
-	if(!stricmp(p,"FILE_SHOW_DIRECTORIES")) {
-        fprintf(out,"%c",CS_FILE_SHOW_DIRECTORIES);
-        continue; }
-	if(!stricmp(p,"FILE_LIBRARY_UP")) {
-        fprintf(out,"%c",CS_FILE_LIBRARY_UP);
-        continue; }
-	if(!stricmp(p,"FILE_LIBRARY_DOWN")) {
-        fprintf(out,"%c",CS_FILE_LIBRARY_DOWN);
-        continue; }
-	if(!stricmp(p,"FILE_DIRECTORY_UP")) {
-        fprintf(out,"%c",CS_FILE_DIRECTORY_UP);
-        continue; }
-	if(!stricmp(p,"FILE_DIRECTORY_DOWN")) {
-        fprintf(out,"%c",CS_FILE_DIRECTORY_DOWN);
-        continue; }
-	if(!stricmp(p,"FILE_GET_DIR_NUM")) {
-        fprintf(out,"%c",CS_FILE_GET_DIR_NUM);
-        continue; }
-	if(!stricmp(p,"FILE_GET_LIB_NUM")) {
-        fprintf(out,"%c",CS_FILE_GET_LIB_NUM);
-        continue; }
-	if(!stricmp(p,"FILE_UPLOAD")) {
-        fprintf(out,"%c",CS_FILE_UPLOAD);
-        continue; }
-	if(!stricmp(p,"FILE_UPLOAD_USER")) {
-        fprintf(out,"%c",CS_FILE_UPLOAD_USER);
-        continue; }
-	if(!stricmp(p,"FILE_UPLOAD_BULK")) {
-        fprintf(out,"%c",CS_FILE_UPLOAD_BULK);
-        continue; }
-	if(!stricmp(p,"FILE_UPLOAD_SYSOP")) {
-        fprintf(out,"%c",CS_FILE_UPLOAD_SYSOP);
-        continue; }
-	if(!stricmp(p,"FILE_RESORT_DIRECTORY")) {
-        fprintf(out,"%c",CS_FILE_RESORT_DIRECTORY);
-        continue; }
-	if(!stricmp(p,"FILE_SET_ALT_PATH")) {
-        fprintf(out,"%c",CS_FILE_SET_ALT_PATH);
-        continue; }
-	if(!stricmp(p,"FILE_GET")) {
-        fprintf(out,"%c",CS_FILE_GET);
-        continue; }
-	if(!stricmp(p,"FILE_SEND")) {
-        fprintf(out,"%c",CS_FILE_SEND);
-        continue; }
-	if(!stricmp(p,"FILE_PUT")) {
-        fprintf(out,"%c",CS_FILE_PUT);
-        continue; }
-	if(!stricmp(p,"FILE_FIND_OLD")) {
-        fprintf(out,"%c",CS_FILE_FIND_OLD);
-        continue; }
-	if(!stricmp(p,"FILE_FIND_OPEN")) {
-        fprintf(out,"%c",CS_FILE_FIND_OPEN);
-        continue; }
-	if(!stricmp(p,"FILE_FIND_OFFLINE")) {
-        fprintf(out,"%c",CS_FILE_FIND_OFFLINE);
-        continue; }
-	if(!stricmp(p,"FILE_FIND_OLD_UPLOADS")) {
-        fprintf(out,"%c",CS_FILE_FIND_OLD_UPLOADS);
-        continue; }
-	if(!stricmp(p,"FILE_DOWNLOAD")) {
-        fprintf(out,"%c",CS_FILE_DOWNLOAD);
-        continue; }
-	if(!stricmp(p,"FILE_DOWNLOAD_USER")) {
-        fprintf(out,"%c",CS_FILE_DOWNLOAD_USER);
-        continue; }
-	if(!stricmp(p,"FILE_DOWNLOAD_BATCH")) {
-        fprintf(out,"%c",CS_FILE_DOWNLOAD_BATCH);
-        continue; }
-	if(!stricmp(p,"FILE_REMOVE")) {
-        fprintf(out,"%c",CS_FILE_REMOVE);
-        continue; }
-	if(!stricmp(p,"FILE_LIST")) {
-        fprintf(out,"%c",CS_FILE_LIST);
-        continue; }
-	if(!stricmp(p,"FILE_LIST_EXTENDED")) {
-        fprintf(out,"%c",CS_FILE_LIST_EXTENDED);
-        continue; }
-	if(!stricmp(p,"FILE_VIEW")) {
-        fprintf(out,"%c",CS_FILE_VIEW);
-        continue; }
-	if(!stricmp(p,"FILE_FIND_TEXT")) {
-        fprintf(out,"%c",CS_FILE_FIND_TEXT);
-        continue; }
-	if(!stricmp(p,"FILE_FIND_TEXT_ALL")) {
-        fprintf(out,"%c",CS_FILE_FIND_TEXT_ALL);
-        continue; }
-	if(!stricmp(p,"FILE_FIND_NAME")) {
-        fprintf(out,"%c",CS_FILE_FIND_NAME);
-        continue; }
-	if(!stricmp(p,"FILE_FIND_NAME_ALL")) {
-        fprintf(out,"%c",CS_FILE_FIND_NAME_ALL);
-        continue; }
-	if(!stricmp(p,"FILE_BATCH_SECTION")) {
-        fprintf(out,"%c",CS_FILE_BATCH_SECTION);
-        continue; }
-	if(!stricmp(p,"FILE_TEMP_SECTION")) {
-        fprintf(out,"%c",CS_FILE_TEMP_SECTION);
-        continue; }
-	if(!stricmp(p,"FILE_NEW_SCAN")) {
-        fprintf(out,"%c",CS_FILE_NEW_SCAN);
-        continue; }
-	if(!stricmp(p,"FILE_NEW_SCAN_ALL")) {
-        fprintf(out,"%c",CS_FILE_NEW_SCAN_ALL);
-        continue; }
-	if(!stricmp(p,"FILE_NEW_SCAN_CFG")) {
-        fprintf(out,"%c",CS_FILE_NEW_SCAN_CFG);
-        continue; }
-	if(!stricmp(p,"FILE_PTRS_CFG")) {
-        fprintf(out,"%c",CS_FILE_PTRS_CFG);
-        continue; }
-	if(!stricmp(p,"FILE_BATCH_ADD")) {
-        fprintf(out,"%c",CS_FILE_BATCH_ADD);
-        continue; }
-	if(!stricmp(p,"FILE_BATCH_ADD_LIST")) {
-		fprintf(out,"%c",CS_FILE_BATCH_ADD_LIST);
-        continue; }
-	if(!stricmp(p,"FILE_BATCH_CLEAR")) {
-        fprintf(out,"%c",CS_FILE_BATCH_CLEAR);
-        continue; }
-
-	if(!stricmp(p,"INC_MAIN_CMDS")) {
-        fprintf(out,"%c",CS_INC_MAIN_CMDS);
-        continue; }
-	if(!stricmp(p,"INC_FILE_CMDS")) {
-        fprintf(out,"%c",CS_INC_FILE_CMDS);
-        continue; }
-
-	break; }
-
-
-if(!feof(in)) {
-	printf("SYNTAX ERROR:\n");
-	printf(linestr,src,line,save);
-    exit(1); }
-fclose(in);
-}
-
-char *usage="\n"
-			"usage: baja [/opts] file[.src]\n"
-			"\n"
-			" opts: /d display debug during compile\n"
-			"       /c case sensitive variables, labels, and macros\n"
-			"       /o set output directory (e.g. /o\\sbbs\\exec)\n"
-			;
-int main(int argc, char **argv)
-{
-	uchar str[128],src[128]="",*p,outdir[128]="",outfname[128]="";
-	int i,j;
-
-printf("\nBAJA v2.10 � Synchronet Shell/Module Compiler � "
-	"Developed 1995-97 Rob Swindell\n");
-
-for(i=1;i<argc;i++)
-	if(argv[i][0]=='/')
-		switch(toupper(argv[i][1])) {
-			case 'D':
-				display=1;
-				break;
-			case 'C':
-				case_sens=1;
-				break;
-			case 'O':
-				strcpy(outdir,argv[i]+2);
-				break;
-			default:
-				printf(usage);
-				exit(1); }
-	else
-		strcpy(src,argv[i]);
-
-if(!src[0]) {
-	printf(usage);
-	exit(1); }
-
-strupr(src);
-strcpy(str,src);
-if(!strchr(str,'.'))
-	sprintf(src,"%s.SRC",str);
-
-strcpy(str,src);
-p=strrchr(str,'.');
-if(p)
-	*p=0;
-strcat(str,".BIN");
-
-if(outdir[0]) {
-	p=strrchr(str,'\\');
-	if(!p)
-		p=strrchr(str,':');
-	if(p)
-		strcpy(outfname,p+1);
-	else
-		strcpy(outfname,str);
-	if(outdir[strlen(outdir)-1]!='\\'
-		&& outdir[strlen(outdir)-1]!=':')
-		strcat(outdir,"\\");
-	sprintf(str,"%s%s",outdir,outfname); }
-
-if((out=fopen(str,"wb"))==NULL) {
-	printf("error opening %s for write\n",str);
-	exit(1); }
-
-atexit(bail);
-
-printf("\nCompiling %s...\n",src);
-
-compile(src);
-
-/****************************/
-/* Resolve GOTOS and CALLS */
-/****************************/
-
-printf("Resolving labels...\n");
-
-for(i=0;i<gotos;i++) {
-	for(j=0;j<labels;j++)
-		if(!stricmp(goto_label[i],label_name[j]))
-			break;
-	if(j>=labels) {
-		printf("%s line %d: label (%s) not found.\n"
-			,goto_file[i],goto_line[i],goto_label[i]);
-		exit(1); }
-	fseek(out,(long)(goto_indx[i]+1),SEEK_SET);
-	fwrite(&label_indx[j],2,1,out); }
-
-for(i=0;i<calls;i++) {
-	for(j=0;j<labels;j++)
-		if((!case_sens
-			&& !strnicmp(call_label[i],label_name[j],strlen(call_label[i])))
-		|| (case_sens
-			&& !strncmp(call_label[i],label_name[j],strlen(call_label[i]))))
-			break;
-	if(j>=labels) {
-		printf("%s line %d: label (%s) not found.\n"
-			,call_file[i],call_line[i],call_label[i]);
-		exit(1); }
-	fseek(out,(long)(call_indx[i]+1),SEEK_SET);
-	fwrite(&label_indx[j],2,1,out); }
-
-fclose(out);
-out=NULL; /* so bail() won't truncate */
-
-printf("\nDone.\n");
-return(0);
-}
-
-
-
diff --git a/src/sbbs2/baja/make.bat b/src/sbbs2/baja/make.bat
deleted file mode 100755
index 8f77b60e3d..0000000000
--- a/src/sbbs2/baja/make.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-bcc -ml -N -lm -I..;..\smb baja.c ..\ars.c
-if errorlevel 1 goto end
-bcc32 -WX -N -lm -I..;..\smb -ebaja32.exe baja.c ..\ars.c
-:end
diff --git a/src/sbbs2/baja/make.cmd b/src/sbbs2/baja/make.cmd
deleted file mode 100755
index 34625ae386..0000000000
--- a/src/sbbs2/baja/make.cmd
+++ /dev/null
@@ -1,2 +0,0 @@
-@echo off
-bcc -N -I..;..\smb -eBAJA4OS2.EXE baja.c ..\ars.c
diff --git a/src/sbbs2/bulkmail.c b/src/sbbs2/bulkmail.c
deleted file mode 100644
index 0d6bd83a10..0000000000
--- a/src/sbbs2/bulkmail.c
+++ /dev/null
@@ -1,219 +0,0 @@
-#line 1 "BULKMAIL.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-
-int bulkmailhdr(int usernum, smbmsg_t *msg, ushort msgattr, ulong offset
-    , ulong length, char *title)
-{
-    char str[256];
-    int i,j;
-    node_t node;
-
-memset(msg,0,sizeof(smbmsg_t));
-memcpy(msg->hdr.id,"SHD\x1a",4);
-msg->hdr.version=smb_ver();
-msg->hdr.attr=msg->idx.attr=msgattr;
-msg->hdr.when_written.time=msg->hdr.when_imported.time=time(NULL);
-msg->hdr.when_written.zone=msg->hdr.when_imported.zone=sys_timezone;
-msg->hdr.offset=msg->idx.offset=offset;
-
-username(usernum,str);
-smb_hfield(msg,RECIPIENT,strlen(str),str);
-strlwr(str);
-
-sprintf(str,"%u",usernum);
-smb_hfield(msg,RECIPIENTEXT,strlen(str),str);
-msg->idx.to=usernum;
-
-strcpy(str,useron.alias);
-smb_hfield(msg,SENDER,strlen(str),str);
-strlwr(str);
-
-sprintf(str,"%u",useron.number);
-smb_hfield(msg,SENDEREXT,strlen(str),str);
-msg->idx.from=useron.number;
-
-strcpy(str,title);
-smb_hfield(msg,SUBJECT,strlen(str),str);
-strlwr(str);
-msg->idx.subj=crc16(str);
-
-smb_dfield(msg,TEXT_BODY,length);
-
-j=smb_addmsghdr(&smb,msg,SMB_SELFPACK);
-if(j)
-    return(j);
-
-// smb_incdat(&smb,offset,length,1); Remove 04/15/96
-lncntr=0;
-bprintf("Bulk Mailed %s #%d\r\n",username(usernum,tmp),usernum);
-sprintf(str,"Bulk Mailed %s #%d",username(usernum,tmp),usernum);
-logline("E+",str);
-useron.emails++;
-logon_emails++;
-useron.etoday++;
-for(i=1;i<=sys_nodes;i++) { /* Tell user, if online */
-    getnodedat(i,&node,0);
-    if(node.useron==usernum && !(node.misc&NODE_POFF)
-        && (node.status==NODE_INUSE || node.status==NODE_QUIET)) {
-        sprintf(str,text[EmailNodeMsg],node_num,useron.alias);
-        putnmsg(i,str);
-        break; } }
-if(i>sys_nodes) {   /* User wasn't online, so leave short msg */
-    sprintf(str,text[UserSentYouMail],useron.alias);
-    putsmsg(usernum,str); }
-return(0);
-}
-
-void bulkmail(uchar *ar)
-{
-	char	str[256],str2[256],msgpath[256],title[LEN_TITLE+1],ch
-			,buf[SDT_BLOCK_LEN],found=0;
-	ushort	xlat=XLAT_NONE,msgattr=0;
-	int 	i,j,k,x,file;
-	long	l,msgs=0;
-	ulong	length,offset;
-	FILE	*instream;
-	user_t	user;
-	smbmsg_t msg;
-
-memset(&msg,0,sizeof(smbmsg_t));
-
-title[0]=0;
-action=NODE_SMAL;
-nodesync();
-
-if(sys_misc&SM_ANON_EM && (SYSOP || useron.exempt&FLAG('A'))
-    && !noyes(text[AnonymousQ]))
-	msgattr|=MSG_ANONYMOUS;
-
-sprintf(msgpath,"%sINPUT.MSG",node_dir);
-sprintf(str2,"Bulk Mailing");
-if(!writemsg(msgpath,nulstr,title,WM_EMAIL,0,str2)) {
-    bputs(text[Aborted]);
-    return; }
-
-bputs(text[WritingIndx]);
-CRLF;
-
-if((i=smb_stack(&smb,SMB_STACK_PUSH))!=0) {
-	errormsg(WHERE,ERR_OPEN,"MAIL",i);
-	return; }
-sprintf(smb.file,"%sMAIL",data_dir);
-smb.retry_time=smb_retry_time;
-if((i=smb_open(&smb))!=0) {
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_OPEN,smb.file,i);
-	return; }
-
-if(filelength(fileno(smb.shd_fp))<1) {	 /* Create it if it doesn't exist */
-	smb.status.max_crcs=mail_maxcrcs;
-	smb.status.max_msgs=MAX_SYSMAIL;
-	smb.status.max_age=mail_maxage;
-	smb.status.attr=SMB_EMAIL;
-	if((i=smb_create(&smb))!=0) {
-		smb_close(&smb);
-		smb_stack(&smb,SMB_STACK_POP);
-		errormsg(WHERE,ERR_CREATE,smb.file,i);
-		return; } }
-
-length=flength(msgpath)+2;	 /* +2 for translation string */
-
-if(length&0xfff00000UL) {
-	smb_close(&smb);
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_LEN,smb.file,length);
-    return; }
-
-if((i=smb_open_da(&smb))!=0) {
-	smb_close(&smb);
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_OPEN,smb.file,i);
-	return; }
-if(sys_misc&SM_FASTMAIL)
-	offset=smb_fallocdat(&smb,length,1);
-else
-	offset=smb_allocdat(&smb,length,1);
-smb_close_da(&smb);
-
-if((file=open(msgpath,O_RDONLY|O_BINARY))==-1
-	|| (instream=fdopen(file,"rb"))==NULL) {
-	smb_freemsgdat(&smb,offset,length,1);
-	smb_close(&smb);
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_OPEN,msgpath,O_RDONLY|O_BINARY);
-	return; }
-
-setvbuf(instream,NULL,_IOFBF,2*1024);
-fseek(smb.sdt_fp,offset,SEEK_SET);
-xlat=XLAT_NONE;
-fwrite(&xlat,2,1,smb.sdt_fp);
-x=SDT_BLOCK_LEN-2;				/* Don't read/write more than 255 */
-while(!feof(instream)) {
-	memset(buf,0,x);
-	j=fread(buf,1,x,instream);
-	if((j!=x || feof(instream)) && buf[j-1]==LF && buf[j-2]==CR)
-		buf[j-1]=buf[j-2]=0;
-	fwrite(buf,j,1,smb.sdt_fp);
-	x=SDT_BLOCK_LEN; }
-fflush(smb.sdt_fp);
-fclose(instream);
-
-j=lastuser();
-x=0;
-
-if(*ar)
-	for(i=1;i<=j;i++) {
-		user.number=i;
-		getuserdat(&user);
-		if(user.misc&(DELETED|INACTIVE))
-			continue;
-		if(chk_ar(ar,user)) {
-			if(found)
-				smb_freemsgmem(&msg);
-			x=bulkmailhdr(i,&msg,msgattr,offset,length,title);
-			if(x)
-				break;
-			msgs++;
-			found=1; } }
-else
-	while(1) {
-		bputs(text[EnterAfterLastDestUser]);
-		if(!getstr(str,LEN_ALIAS,K_UPRLWR))
-			break;
-		if((i=finduser(str))!=0) {
-			if(found)
-				smb_freemsgmem(&msg);
-			x=bulkmailhdr(i,&msg,msgattr,offset,length,title);
-			if(x)
-				break;
-			msgs++; }
-		found=1; }
-
-if((i=smb_open_da(&smb))!=0) {
-	smb_close(&smb);
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_OPEN,smb.file,i);
-	return; }
-if(!msgs)
-	smb_freemsgdat(&smb,offset,length,1);
-else if(msgs>1)
-	smb_incdat(&smb,offset,length,msgs-1);
-smb_close_da(&smb);
-
-smb_close(&smb);
-smb_stack(&smb,SMB_STACK_POP);
-
-smb_freemsgmem(&msg);
-if(x) {
-	smb_freemsgdat(&smb,offset,length,1);
-	errormsg(WHERE,ERR_WRITE,smb.file,x);
-	return; }
-
-putuserrec(useron.number,U_EMAILS,5,itoa(useron.emails,tmp,10));
-putuserrec(useron.number,U_ETODAY,5,itoa(useron.etoday,tmp,10));
-}
-
-
diff --git a/src/sbbs2/chat.c b/src/sbbs2/chat.c
deleted file mode 100644
index 1621dd7955..0000000000
--- a/src/sbbs2/chat.c
+++ /dev/null
@@ -1,1715 +0,0 @@
-#line 1 "CHAT.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/****************************************/
-/* Local and Node-to-Node Chat routines */
-/****************************************/
-
-#include "sbbs.h"
-
-#define PCHAT_LEN 1000		/* Size of Private chat file */
-
-int getnodetopage(int all, int telegram);
-
-
-char *weekday[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday"
-				,"Saturday"};
-char *month[]={"January","February","March","April","May","June"
-			,"July","August","September","October","November","December"};
-
-
-/****************************************************************************/
-/* Chat between local keyboard and remote user on current node.				*/
-/* Called from inkey (inkey is then re-entrant)								*/
-/****************************************************************************/
-void localchat()
-{
-	uchar	str[256],act;
-	int con=console;	/* save console state */
-	time_t 	beg=time(NULL);
-
-console&=~(CON_L_ECHOX|CON_R_ECHOX);	/* turn off X's */
-console|=(CON_L_ECHO|CON_R_ECHO);		/* make sure echo is enabled */
-nosound();
-sys_status&=~SS_SYSPAGE;
-act=action;					/* save the user's current action */
-action=NODE_LCHT;
-bprintf(text[SysopIsHere],sys_op);
-while(sys_status&SS_LCHAT && online) {
-	SYNC;
-	getstr(str,78,K_WRAP|K_MSG); }
-bputs(text[EndOfChat]);
-now=time(NULL);
-if(!(sys_status&SS_USERON))
-	answertime=now;
-starttime+=now-beg;   /* credit user for time in chat */
-RESTORELINE;
-action=act;
-console=con;					/* restore console */
-}
-
-void sysop_page(void)
-{
-	int i;
-
-for(i=0;i<total_pages;i++)
-	if(chk_ar(page[i]->ar,useron))
-		break;
-if(i<total_pages) {
-	bprintf(text[PagingGuru],sys_op);
-	external(cmdstr(page[i]->cmd,nulstr,nulstr,NULL)
-		,page[i]->misc&IO_INTS ? EX_OUTL|EX_OUTR|EX_INR
-			: EX_OUTL); }
-else if(sys_misc&SM_SHRTPAGE) {
-	bprintf(text[PagingGuru],sys_op);
-	for(i=0;i<10 && !lkbrd(1);i++) {
-		beep(1000,200);
-		mswait(200);
-		outchar('.'); }
-	CRLF; }
-else {
-	sys_status^=SS_SYSPAGE;
-	bprintf(text[SysopPageIsNow]
-		,sys_status&SS_SYSPAGE ? text[ON] : text[OFF]);
-	nosound();	}
-}
-
-/****************************************************************************/
-/* Returns 1 if user online has access to channel "channum"                 */
-/****************************************************************************/
-char chan_access(uint cnum)
-{
-
-if(!total_chans || cnum>=total_chans || !chk_ar(chan[cnum]->ar,useron)) {
-	bputs(text[CantAccessThatChannel]);
-	return(0); }
-if(!(useron.exempt&FLAG('J')) && chan[cnum]->cost>useron.cdt+useron.freecdt) {
-	bputs(text[NotEnoughCredits]);
-	return(0); }
-return(1);
-}
-
-void privchat(void)
-{
-	uchar	str[128],ch,c,*p,localbuf[5][81],remotebuf[5][81]
-			,localline=0,remoteline=0,localchar=0,remotechar=0
-			,*sep="\1w\1h�����[\1i\1r%c\1n\1h]���Ĵ "
-				"\1yPrivate Chat - \1rCtrl-C to Quit \1y- "
-				"Time Left: \1g%-8s\1w"
-				" �����[\1i\1b%c\1n\1h]�����";
-	int 	in,out,i,j,n,done,echo=1,x,y,activity;
-	node_t	node;
-
-n=getnodetopage(0,0);
-if(!n)
-	return;
-if(n==node_num) {
-	bputs(text[NoNeedToPageSelf]);
-	return; }
-getnodedat(n,&node,0);
-if(node.action==NODE_PCHT && node.aux!=node_num) {
-	bprintf(text[NodeNAlreadyInPChat],n);
-	return; }
-if((node.action!=NODE_PAGE || node.aux!=node_num)
-	&& node.misc&NODE_POFF && !SYSOP) {
-	bprintf(text[CantPageNode],node.misc&NODE_ANON
-		? text[UNKNOWN_USER] : username(node.useron,tmp));
-	return; }
-if(node.action!=NODE_PAGE) {
-	bprintf("\r\n\1n\1mPaging \1h%s #%u\1n\1m for private chat\r\n"
-		,node.misc&NODE_ANON ? text[UNKNOWN_USER] : username(node.useron,tmp)
-		,node.useron);
-	sprintf(str,text[NodePChatPageMsg]
-		,node_num,thisnode.misc&NODE_ANON
-			? text[UNKNOWN_USER] : useron.alias);
-	putnmsg(n,str);
-	sprintf(str,"Paged %s on node %d to private chat"
-		,username(node.useron,tmp),n);
-	logline("C",str); }
-
-getnodedat(node_num,&thisnode,1);
-thisnode.action=action=NODE_PAGE;
-thisnode.aux=n;
-putnodedat(node_num,thisnode);
-
-if(node.action!=NODE_PAGE || node.aux!=node_num) {
-	bprintf(text[WaitingForNodeInPChat],n);
-	while(online && !(sys_status&SS_ABORT)) {
-		getnodedat(n,&node,0);
-		if((node.action==NODE_PAGE || node.action==NODE_PCHT)
-			&& node.aux==node_num) {
-			bprintf(text[NodeJoinedPrivateChat]
-				,n,node.misc&NODE_ANON ? text[UNKNOWN_USER]
-					: username(node.useron,tmp));
-			break; }
-		if(!inkey(0))
-			mswait(1);
-		action=NODE_PAGE;
-		checkline();
-		gettimeleft();
-		SYNC; } }
-
-getnodedat(node_num,&thisnode,1);
-thisnode.action=action=NODE_PCHT;
-putnodedat(node_num,thisnode);
-
-if(!online || sys_status&SS_ABORT)
-	return;
-
-if(useron.chat&CHAT_SPLITP && useron.misc&ANSI && rows>=24)
-	sys_status|=SS_SPLITP;
-/*
-if(!(useron.misc&EXPERT))
-	menu("PRIVCHAT");
-*/
-
-if(!(sys_status&SS_SPLITP))
-	bputs(text[WelcomeToPrivateChat]);
-
-sprintf(str,"%sCHAT.DAB",node_dir);
-if((out=open(str,O_RDWR|O_DENYNONE|O_CREAT|O_BINARY
-	,S_IREAD|S_IWRITE))==-1) {
-	errormsg(WHERE,ERR_OPEN,str,O_RDWR|O_DENYNONE|O_CREAT);
-	return; }
-
-sprintf(str,"%sCHAT.DAB",node_path[n-1]);
-if(!fexist(str))		/* Wait while it's created for the first time */
-	mswait(2000);
-if((in=open(str,O_RDWR|O_DENYNONE|O_CREAT|O_BINARY
-	,S_IREAD|S_IWRITE))==-1) {
-	close(out);
-	errormsg(WHERE,ERR_OPEN,str,O_RDWR|O_DENYNONE|O_CREAT);
-	return; }
-
-if((p=(char *)MALLOC(PCHAT_LEN))==NULL) {
-	close(in);
-	close(out);
-	errormsg(WHERE,ERR_ALLOC,str,PCHAT_LEN);
-	return; }
-memset(p,0,PCHAT_LEN);
-write(in,p,PCHAT_LEN);
-write(out,p,PCHAT_LEN);
-FREE(p);
-lseek(in,0L,SEEK_SET);
-lseek(out,0L,SEEK_SET);
-
-getnodedat(node_num,&thisnode,1);
-thisnode.misc&=~NODE_RPCHT; 		/* Clear "reset pchat flag" */
-putnodedat(node_num,thisnode);
-
-getnodedat(n,&node,1);
-node.misc|=NODE_RPCHT;				/* Set "reset pchat flag" */
-putnodedat(n,node); 				/* on other node */
-
-									/* Wait for other node */
-									/* to acknowledge and reset */
-while(online && !(sys_status&SS_ABORT)) {
-	getnodedat(n,&node,0);
-	if(!(node.misc&NODE_RPCHT))
-		break;
-	getnodedat(node_num,&thisnode,0);
-	if(thisnode.misc&NODE_RPCHT)
-		break;
-	checkline();
-	gettimeleft();
-	SYNC;
-	inkey(0);
-	mswait(1); }
-
-
-action=NODE_PCHT;
-SYNC;
-
-if(sys_status&SS_SPLITP) {
-	lncntr=0;
-	CLS;
-	ANSI_SAVE();
-	GOTOXY(1,13);
-	bprintf(sep
-		,thisnode.misc&NODE_MSGW ? 'T':SP
-		,sectostr(timeleft,tmp)
-		,thisnode.misc&NODE_NMSG ? 'M':SP);
-	CRLF; }
-
-done=0;
-
-while(online && !(sys_status&SS_ABORT) && !done) {
-	RIOSYNC(0);
-	lncntr=0;
-	if(sys_status&SS_SPLITP)
-		lbuflen=0;
-	action=NODE_PCHT;
-	if(!localchar) {
-		if(sys_status&SS_SPLITP) {
-			getnodedat(node_num,&thisnode,0);
-			if(thisnode.misc&NODE_INTR)
-				break;
-			if(thisnode.misc&NODE_UDAT && !(useron.rest&FLAG('G'))) {
-				getuserdat(&useron);
-				getnodedat(node_num,&thisnode,1);
-				thisnode.misc&=~NODE_UDAT;
-				putnodedat(node_num,thisnode); } }
-		else
-			nodesync(); }
-	activity=0;
-	if((ch=inkey(K_GETSTR))!=0) {
-		activity=1;
-		if(echo)
-			attr(color[clr_chatlocal]);
-		else
-			lclatr(color[clr_chatlocal]);
-		if(ch==BS) {
-			if(localchar) {
-				if(echo)
-					bputs("\b \b");
-				else
-					lputs("\b \b");
-				localchar--;
-				localbuf[localline][localchar]=0; } }
-		else if(ch==TAB) {
-			if(echo)
-				outchar(SP);
-			else
-				lputc(SP);
-			localbuf[localline][localchar]=SP;
-			localchar++;
-			while(localchar<78 && localchar%8) {
-				if(echo)
-					outchar(SP);
-				else
-					lputc(SP);
-				localbuf[localline][localchar++]=SP; } }
-		else if(ch>=SP || ch==CR) {
-			if(ch!=CR) {
-				if(echo)
-					outchar(ch);
-				else
-					lputc(ch);
-				localbuf[localline][localchar]=ch; }
-
-			if(ch==CR || (localchar>68 && ch==SP) || ++localchar>78) {
-
-				localbuf[localline][localchar]=0;
-				localchar=0;
-
-				if(sys_status&SS_SPLITP && lclwy()==24) {
-					GOTOXY(1,13);
-					bprintf(sep
-						,thisnode.misc&NODE_MSGW ? 'T':SP
-						,sectostr(timeleft,tmp)
-						,thisnode.misc&NODE_NMSG ? 'M':SP);
-					attr(color[clr_chatlocal]);
-					for(x=13,y=0;x<rows;x++,y++) {
-						bprintf("\x1b[%d;1H\x1b[K",x+1);
-						if(y<=localline)
-							bprintf("%s\r\n",localbuf[y]); }
-					GOTOXY(1,15+localline);
-					localline=0; }
-				else {
-					if(localline>=4)
-						for(i=0;i<4;i++)
-							memcpy(localbuf[i],localbuf[i+1],81);
-					else
-						localline++;
-					if(echo) {
-						CRLF;
-						if(sys_status&SS_SPLITP)
-							bputs("\x1b[K"); }
-					else
-						lputs(crlf); }
-				// SYNC;
-				} }
-
-		read(out,&c,1);
-		lseek(out,-1L,SEEK_CUR);
-		if(!c)		/* hasn't wrapped */
-			write(out,&ch,1);
-		else {
-			if(!tell(out))
-				lseek(out,0L,SEEK_END);
-			lseek(out,-1L,SEEK_CUR);
-			ch=0;
-			write(out,&ch,1);
-			lseek(out,-1L,SEEK_CUR); }
-		if(tell(out)>=PCHAT_LEN)
-			lseek(out,0L,SEEK_SET);
-		}
-	else while(online) {
-		if(!(sys_status&SS_SPLITP))
-			remotechar=localchar;
-		if(tell(in)>=PCHAT_LEN)
-			lseek(in,0L,SEEK_SET);
-		ch=0;
-		read(in,&ch,1);
-		lseek(in,-1L,SEEK_CUR);
-		if(!ch) break;					  /* char from other node */
-		activity=1;
-		x=lclwx();
-		y=lclwy();
-		if(sys_status&SS_SPLITP)
-			ANSI_RESTORE();
-		attr(color[clr_chatremote]);
-		if(sys_status&SS_SPLITP)
-			bputs("\b \b");             /* Delete fake cursor */
-		if(ch==BS) {
-			if(remotechar) {
-				bputs("\b \b");
-				remotechar--;
-				remotebuf[remoteline][remotechar]=0; } }
-		else if(ch==TAB) {
-			outchar(SP);
-			remotebuf[remoteline][remotechar]=SP;
-			remotechar++;
-			while(remotechar<78 && remotechar%8) {
-				outchar(SP);
-				remotebuf[remoteline][remotechar++]=SP; } }
-		else if(ch>=SP || ch==CR) {
-			if(ch!=CR) {
-				outchar(ch);
-				remotebuf[remoteline][remotechar]=ch; }
-
-			if(ch==CR || (remotechar>68 && ch==SP) || ++remotechar>78) {
-
-				remotebuf[remoteline][remotechar]=0;
-				remotechar=0;
-
-				if(sys_status&SS_SPLITP && lclwy()==12) {
-					CRLF;
-					bprintf(sep
-						,thisnode.misc&NODE_MSGW ? 'T':SP
-						,sectostr(timeleft,tmp)
-						,thisnode.misc&NODE_NMSG ? 'M':SP);
-					attr(color[clr_chatremote]);
-					for(i=0;i<12;i++) {
-						bprintf("\x1b[%d;1H\x1b[K",i+1);
-						if(i<=remoteline)
-							bprintf("%s\r\n",remotebuf[i]); }
-					remoteline=0;
-					GOTOXY(1,6); }
-				else {
-					if(remoteline>=4)
-						for(i=0;i<4;i++)
-							memcpy(remotebuf[i],remotebuf[i+1],81);
-					else
-						remoteline++;
-					if(echo) {
-						CRLF;
-						if(sys_status&SS_SPLITP)
-							bputs("\x1b[K"); }
-					else
-						lputs(crlf); } } }
-		if(sys_status&SS_SPLITP) {
-			bputs("\1i_\1n");  /* Fake cursor */
-			ANSI_SAVE();
-			GOTOXY(x,y); }
-		ch=0;
-		write(in,&ch,1);
-
-		if(!(sys_status&SS_SPLITP))
-			localchar=remotechar;
-		}
-	if(!activity) { 						/* no activity so chk node.dab */
-		getnodedat(n,&node,0);
-		if((node.action!=NODE_PCHT && node.action!=NODE_PAGE)
-			|| node.aux!=node_num) {
-			bprintf(text[NodeLeftPrivateChat]
-				,n,node.misc&NODE_ANON ? text[UNKNOWN_USER]
-				: username(node.useron,tmp));
-			break; }
-		getnodedat(node_num,&thisnode,0);
-		if(thisnode.misc&NODE_RPCHT) {		/* pchat has been reset */
-			lseek(in,0L,SEEK_SET);			/* so seek to beginning */
-			lseek(out,0L,SEEK_SET);
-			getnodedat(node_num,&thisnode,1);
-			thisnode.misc&=~NODE_RPCHT;
-			putnodedat(node_num,thisnode); }
-		mswait(0); }
-	checkline();
-	gettimeleft(); }
-if(sys_status&SS_SPLITP)
-	CLS;
-sys_status&=~SS_SPLITP;
-close(in);
-close(out);
-}
-
-/****************************************************************************/
-/* The chat section                                                         */
-/****************************************************************************/
-void chatsection()
-{
-	uchar	line[256],str[256],ch,c,done,no_rip_menu
-			,usrs,preusrs,qusrs,*gurubuf=NULL,channel,savch,*p
-			,pgraph[400],buf[400]
-			,usr[MAX_NODES],preusr[MAX_NODES],qusr[MAX_NODES];
-	int 	file,in,out;
-	long	i,j,k,n;
-	node_t 	node;
-
-action=NODE_CHAT;
-if(useron.misc&(RIP|WIP) || !(useron.misc&EXPERT))
-    menu("CHAT");
-ASYNC;
-bputs(text[ChatPrompt]);
-while(online) {
-	no_rip_menu=0;
-	ch=getkeys("ACDJPQST?\r",0);
-	if(ch>SP)
-		logch(ch,0);
-	switch(ch) {
-		case 'S':
-			useron.chat^=CHAT_SPLITP;
-			putuserrec(useron.number,U_CHAT,8
-                ,ltoa(useron.chat,str,16));
-			bprintf("\r\nPrivate split-screen chat is now: %s\r\n"
-				,useron.chat&CHAT_SPLITP ? text[ON]:text[OFF]);
-			break;
-		case 'A':
-			CRLF;
-			useron.chat^=CHAT_NOACT;
-			putuserrec(useron.number,U_CHAT,8
-				,ltoa(useron.chat,str,16));
-			getnodedat(node_num,&thisnode,1);
-			thisnode.misc^=NODE_AOFF;
-			printnodedat(node_num,thisnode);
-			putnodedat(node_num,thisnode);
-			no_rip_menu=1;
-			break;
-		case 'D':
-			CRLF;
-			useron.chat^=CHAT_NOPAGE;
-			putuserrec(useron.number,U_CHAT,8
-                ,ltoa(useron.chat,str,16));
-			getnodedat(node_num,&thisnode,1);
-			thisnode.misc^=NODE_POFF;
-			printnodedat(node_num,thisnode);
-			putnodedat(node_num,thisnode);
-			no_rip_menu=1;
-			break;
-		case 'J':
-			if(!chan_access(0))
-				break;
-			if(useron.misc&(RIP|WIP) ||!(useron.misc&EXPERT))
-				menu("MULTCHAT");
-			getnodedat(node_num,&thisnode,1);
-			bputs(text[WelcomeToMultiChat]);
-			channel=thisnode.aux=1;		/* default channel 1 */
-			putnodedat(node_num,thisnode);
-			bprintf(text[WelcomeToChannelN],channel,chan[0]->name);
-			if(gurubuf) {
-				FREE(gurubuf);
-				gurubuf=NULL; }
-			if(chan[0]->misc&CHAN_GURU && chan[0]->guru<total_gurus
-				&& chk_ar(guru[chan[0]->guru]->ar,useron)) {
-				sprintf(str,"%s%s.DAT",ctrl_dir,guru[chan[0]->guru]->code);
-				if((file=nopen(str,O_RDONLY))==-1) {
-					errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-					break; }
-				if((gurubuf=MALLOC(filelength(file)+1))==NULL) {
-					close(file);
-					errormsg(WHERE,ERR_ALLOC,str,filelength(file)+1);
-					break; }
-				read(file,gurubuf,filelength(file));
-				gurubuf[filelength(file)]=0;
-				close(file); }
-			usrs=0;
-			for(i=1;i<=sys_nodes && i<=sys_lastnode;i++) {
-				if(i==node_num)
-					continue;
-				getnodedat(i,&node,0);
-				if(node.action!=NODE_MCHT || node.status!=NODE_INUSE)
-					continue;
-				if(node.aux && (node.aux&0xff)!=channel)
-					continue;
-				printnodedat(i,node);
-				preusr[usrs]=usr[usrs++]=i; }
-			preusrs=usrs;
-			if(gurubuf)
-				bprintf(text[NodeInMultiChatLocally]
-					,sys_nodes+1,guru[chan[channel-1]->guru]->name,channel);
-			bputs(text[YoureOnTheAir]);
-			done=0;
-			while(online && !done) {
-				checkline();
-				gettimeleft();
-				action=NODE_MCHT;
-				qusrs=usrs=0;
-            	for(i=1;i<=sys_nodes;i++) {
-					if(i==node_num)
-						continue;
-					getnodedat(i,&node,0);
-					if(node.action!=NODE_MCHT
-						|| (node.aux && channel && (node.aux&0xff)!=channel))
-						continue;
-					if(node.status==NODE_QUIET)
-						qusr[qusrs++]=i;
-					else if(node.status==NODE_INUSE)
-						usr[usrs++]=i; }
-				if(preusrs>usrs) {
-					if(!usrs && channel && chan[channel-1]->misc&CHAN_GURU
-						&& chan[channel-1]->guru<total_gurus)
-						bprintf(text[NodeJoinedMultiChat]
-							,sys_nodes+1,guru[chan[channel-1]->guru]->name
-							,channel);
-					outchar(7);
-					for(i=0;i<preusrs;i++) {
-						for(j=0;j<usrs;j++)
-							if(preusr[i]==usr[j])
-								break;
-						if(j==usrs) {
-							getnodedat(preusr[i],&node,0);
-							if(node.misc&NODE_ANON)
-								sprintf(str,"%.80s",text[UNKNOWN_USER]);
-							else
-								username(node.useron,str);
-							bprintf(text[NodeLeftMultiChat]
-								,preusr[i],str,channel); } } }
-				else if(preusrs<usrs) {
-					if(!preusrs && channel && chan[channel-1]->misc&CHAN_GURU
-						&& chan[channel-1]->guru<total_gurus)
-						bprintf(text[NodeLeftMultiChat]
-							,sys_nodes+1,guru[chan[channel-1]->guru]->name
-							,channel);
-					outchar(7);
-					for(i=0;i<usrs;i++) {
-						for(j=0;j<preusrs;j++)
-							if(usr[i]==preusr[j])
-								break;
-						if(j==preusrs) {
-							getnodedat(usr[i],&node,0);
-                            if(node.misc&NODE_ANON)
-								sprintf(str,"%.80s",text[UNKNOWN_USER]);
-							else
-								username(node.useron,str);
-							bprintf(text[NodeJoinedMultiChat]
-								,usr[i],str,channel); } } }
-                preusrs=usrs;
-				for(i=0;i<usrs;i++)
-					preusr[i]=usr[i];
-				attr(color[clr_multichat]);
-				SYNC;
-				sys_status&=~SS_ABORT;
-				if((ch=inkey(0))!=0 || wordwrap[0]) {
-					if(ch=='/') {
-						bputs(text[MultiChatCommandPrompt]);
-						strcpy(str,"ACELWQ?*");
-						if(SYSOP)
-							strcat(str,"0");
-						i=getkeys(str,total_chans);
-						if(i&0x80000000L) {  /* change channel */
-							savch=i&~0x80000000L;
-							if(savch==channel)
-								continue;
-							if(!chan_access(savch-1))
-								continue;
-							bprintf(text[WelcomeToChannelN]
-								,savch,chan[savch-1]->name);
-
-							usrs=0;
-							for(i=1;i<=sys_nodes;i++) {
-								if(i==node_num)
-									continue;
-								getnodedat(i,&node,0);
-								if(node.action!=NODE_MCHT
-									|| node.status!=NODE_INUSE)
-									continue;
-								if(node.aux && (node.aux&0xff)!=savch)
-									continue;
-								printnodedat(i,node);
-								if(node.aux&0x1f00) {	/* password */
-									bprintf(text[PasswordProtected]
-										,node.misc&NODE_ANON
-										? text[UNKNOWN_USER]
-										: username(node.useron,tmp));
-									if(!getstr(str,8,K_UPPER|K_ALPHA|K_LINE))
-										break;
-									if(strcmp(str,unpackchatpass(tmp,node)))
-										break;
-										bputs(text[CorrectPassword]);  }
-								preusr[usrs]=usr[usrs++]=i; }
-							if(i<=sys_nodes) {	/* failed password */
-								bputs(text[WrongPassword]);
-								continue; }
-							if(gurubuf) {
-								FREE(gurubuf);
-								gurubuf=NULL; }
-							if(chan[savch-1]->misc&CHAN_GURU
-								&& chan[savch-1]->guru<total_gurus
-								&& chk_ar(guru[chan[savch-1]->guru]->ar,useron
-								)) {
-								sprintf(str,"%s%s.DAT",ctrl_dir
-									,guru[chan[savch-1]->guru]->code);
-                                if((file=nopen(str,O_RDONLY))==-1) {
-                                    errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-                                    break; }
-                                if((gurubuf=MALLOC(filelength(file)+1))==NULL) {
-                                    close(file);
-									errormsg(WHERE,ERR_ALLOC,str
-										,filelength(file)+1);
-                                    break; }
-                                read(file,gurubuf,filelength(file));
-                                gurubuf[filelength(file)]=0;
-                                close(file); }
-							preusrs=usrs;
-							if(gurubuf)
-								bprintf(text[NodeInMultiChatLocally]
-									,sys_nodes+1
-									,guru[chan[savch-1]->guru]->name
-									,savch);
-							channel=savch;
-							if(!usrs && chan[savch-1]->misc&CHAN_PW
-								&& !noyes(text[PasswordProtectChanQ])) {
-								bputs(text[PasswordPrompt]);
-								if(getstr(str,8,K_UPPER|K_ALPHA|K_LINE)) {
-									getnodedat(node_num,&thisnode,1);
-									thisnode.aux=channel;
-									packchatpass(str,&thisnode); }
-								else {
-									getnodedat(node_num,&thisnode,1);
-									thisnode.aux=channel; } }
-							else {
-								getnodedat(node_num,&thisnode,1);
-								thisnode.aux=channel; }
-							putnodedat(node_num,thisnode);
-							bputs(text[YoureOnTheAir]);
-							if(chan[channel-1]->cost
-								&& !(useron.exempt&FLAG('J')))
-								subtract_cdt(chan[channel-1]->cost); }
-						else switch(i) {	/* other command */
-							case '0':	/* Global channel */
-								if(!SYSOP)
-									break;
-                            	usrs=0;
-								for(i=1;i<=sys_nodes;i++) {
-									if(i==node_num)
-										continue;
-									getnodedat(i,&node,0);
-									if(node.action!=NODE_MCHT
-										|| node.status!=NODE_INUSE)
-										continue;
-									printnodedat(i,node);
-									preusr[usrs]=usr[usrs++]=i; }
-								preusrs=usrs;
-								getnodedat(node_num,&thisnode,1);
-								thisnode.aux=channel=0;
-								putnodedat(node_num,thisnode);
-								break;
-							case 'A':   /* Action commands */
-								useron.chat^=CHAT_ACTION;
-								bprintf("\r\nAction commands are now %s\r\n"
-									,useron.chat&CHAT_ACTION
-									? text[ON]:text[OFF]);
-								putuserrec(useron.number,U_CHAT,8
-                                    ,ltoa(useron.chat,str,16));
-								break;
-							case 'C':   /* List of action commands */
-								CRLF;
-								for(i=0;i<total_chatacts;i++) {
-									if(chatact[i]->actset
-										!=chan[channel-1]->actset)
-										continue;
-									bprintf("%-*.*s",LEN_CHATACTCMD
-										,LEN_CHATACTCMD,chatact[i]->cmd);
-									if(!((i+1)%8)) {
-										CRLF; }
-									else
-										bputs(" "); }
-								CRLF;
-								break;
-							case 'E':   /* Toggle echo */
-								useron.chat^=CHAT_ECHO;
-								bprintf(text[EchoIsNow]
-									,useron.chat&CHAT_ECHO
-									? text[ON]:text[OFF]);
-								putuserrec(useron.number,U_CHAT,8
-                                    ,ltoa(useron.chat,str,16));
-								break;
-							case 'L':	/* list nodes */
-								CRLF;
-								for(i=1;i<=sys_nodes && i<=sys_lastnode;i++) {
-									getnodedat(i,&node,0);
-									printnodedat(i,node); }
-								CRLF;
-								break;
-							case 'W':   /* page node(s) */
-								j=getnodetopage(0,0);
-								if(!j)
-									break;
-								for(i=0;i<usrs;i++)
-									if(usr[i]==j)
-										break;
-								if(i>=usrs) {
-									bputs(text[UserNotFound]);
-									break; }
-
-								bputs(text[NodeMsgPrompt]);
-								if(!getstr(line,66,K_LINE|K_MSG))
-									break;
-
-								sprintf(buf,text[ChatLineFmt]
-									,thisnode.misc&NODE_ANON
-									? text[AnonUserChatHandle]
-									: useron.handle
-									,node_num,'*',line);
-								strcat(buf,crlf);
-								if(useron.chat&CHAT_ECHO)
-									bputs(buf);
-								putnmsg(j,buf);
-								break;
-							case 'Q':	/* quit */
-								done=1;
-								break;
-							case '*':
-								sprintf(str,"%sMENU\\CHAN.*",text_dir);
-								if(fexist(str))
-									menu("CHAN");
-								else {
-									bputs(text[ChatChanLstHdr]);
-									bputs(text[ChatChanLstTitles]);
-									if(total_chans>=10) {
-										bputs("     ");
-										bputs(text[ChatChanLstTitles]); }
-									CRLF;
-									bputs(text[ChatChanLstUnderline]);
-									if(total_chans>=10) {
-										bputs("     ");
-										bputs(text[ChatChanLstUnderline]); }
-									CRLF;
-									if(total_chans>=10)
-										j=(total_chans/2)+(total_chans&1);
-									else
-										j=total_chans;
-									for(i=0;i<j && !msgabort();i++) {
-										bprintf(text[ChatChanLstFmt],i+1
-											,chan[i]->name
-											,chan[i]->cost);
-										if(total_chans>=10) {
-											k=(total_chans/2)
-												+i+(total_chans&1);
-											if(k<total_chans) {
-												bputs("     ");
-												bprintf(text[ChatChanLstFmt]
-													,k+1
-													,chan[k]->name
-													,chan[k]->cost); } }
-										CRLF; }
-									CRLF; }
-								break;
-							case '?':	/* menu */
-								menu("MULTCHAT");
-								break;	} }
-					else {
-						ungetkey(ch);
-						j=0;
-						pgraph[0]=0;
-						while(j<5) {
-							if(!getstr(line,66,K_WRAP|K_MSG|K_CHAT))
-								break;
-							if(j) {
-								sprintf(str,text[ChatLineFmt]
-									,thisnode.misc&NODE_ANON
-									? text[AnonUserChatHandle]
-									: useron.handle
-									,node_num,':',nulstr);
-								sprintf(tmp,"%*s",bstrlen(str),nulstr);
-								strcat(pgraph,tmp); }
-							strcat(pgraph,line);
-							strcat(pgraph,crlf);
-							if(!wordwrap[0])
-								break;
-							j++; }
-						if(pgraph[0]) {
-							if(useron.chat&CHAT_ACTION) {
-								for(i=0;i<total_chatacts;i++) {
-									if(chatact[i]->actset
-										!=chan[channel-1]->actset)
-                                        continue;
-									sprintf(str,"%s ",chatact[i]->cmd);
-									if(!strnicmp(str,pgraph,strlen(str)))
-										break;
-									sprintf(str,"%.*s"
-										,LEN_CHATACTCMD+2,pgraph);
-									str[strlen(str)-2]=0;
-									if(!stricmp(chatact[i]->cmd,str))
-										break; }
-
-								if(i<total_chatacts) {
-									p=pgraph+strlen(str);
-									n=atoi(p);
-									for(j=0;j<usrs;j++) {
-										getnodedat(usr[j],&node,0);
-										if(usrs==1) /* no need to search */
-											break;
-										if(n) {
-											if(usr[j]==n)
-												break;
-											continue; }
-										username(node.useron,str);
-										if(!strnicmp(str,p,strlen(str)))
-											break;
-										getuserrec(node.useron,U_HANDLE
-											,LEN_HANDLE,str);
-										if(!strnicmp(str,p,strlen(str)))
-											break; }
-									if(!usrs
-										&& chan[channel-1]->guru<total_gurus)
-										strcpy(str
-										,guru[chan[channel-1]->guru]->name);
-									else if(j>=usrs)
-										strcpy(str,"everyone");
-									else if(node.misc&NODE_ANON)
-										strcpy(str,text[UNKNOWN_USER]);
-									else
-										username(node.useron,str);
-
-									/* Display on same node */
-									bprintf(chatact[i]->out
-										,thisnode.misc&NODE_ANON
-										? text[UNKNOWN_USER] : useron.alias
-										,str);
-									CRLF;
-
-									if(usrs && j<usrs) {
-										/* Display to dest user */
-										sprintf(buf,chatact[i]->out
-											,thisnode.misc&NODE_ANON
-											? text[UNKNOWN_USER] : useron.alias
-											,"you");
-										strcat(buf,crlf);
-										putnmsg(usr[j],buf); }
-
-
-									/* Display to all other users */
-									sprintf(buf,chatact[i]->out
-										,thisnode.misc&NODE_ANON
-										? text[UNKNOWN_USER] : useron.alias
-										,str);
-									strcat(buf,crlf);
-
-									for(i=0;i<usrs;i++) {
-										if(i==j)
-											continue;
-										getnodedat(usr[i],&node,0);
-										putnmsg(usr[i],buf); }
-									for(i=0;i<qusrs;i++) {
-										getnodedat(qusr[i],&node,0);
-										putnmsg(qusr[i],buf); }
-									continue; } }
-
-							sprintf(buf,text[ChatLineFmt]
-								,thisnode.misc&NODE_ANON
-								? text[AnonUserChatHandle]
-								: useron.handle
-								,node_num,':',pgraph);
-							if(useron.chat&CHAT_ECHO)
-								bputs(buf);
-							for(i=0;i<usrs;i++) {
-								getnodedat(usr[i],&node,0);
-								putnmsg(usr[i],buf); }
-							for(i=0;i<qusrs;i++) {
-								getnodedat(qusr[i],&node,0);
-								putnmsg(qusr[i],buf); }
-							if(!usrs && channel && gurubuf
-								&& chan[channel-1]->misc&CHAN_GURU)
-								guruchat(pgraph,gurubuf,chan[channel-1]->guru);
-								} } }
-				else
-					mswait(1);
-				if(sys_status&SS_ABORT)
-					break; }
-			lncntr=0;
-			break;
-		case 'P':   /* private node-to-node chat */
-            privchat();
-            break;
-		case 'C':
-			no_rip_menu=1;
-			ch=kbd_state(); 	 /* Check scroll lock */
-			if(ch&16 || (sys_chat_ar[0] && chk_ar(sys_chat_ar,useron))
-				|| useron.exempt&FLAG('C')) {
-				sysop_page();
-				break; }
-			bprintf(text[SysopIsNotAvailable],sys_op);
-			if(total_gurus && chk_ar(guru[0]->ar,useron)) {
-				sprintf(str,text[ChatWithGuruInsteadQ],guru[0]->name);
-				if(!yesno(str))
-					break; }
-			else
-				break;
-		case 'T':
-			if(!total_gurus) {
-				bprintf(text[SysopIsNotAvailable],"The Guru");
-				break; }
-			if(total_gurus==1 && chk_ar(guru[0]->ar,useron))
-				i=0;
-			else {
-				for(i=0;i<total_gurus;i++)
-					uselect(1,i,nulstr,guru[i]->name,guru[i]->ar);
-				i=uselect(0,0,0,0,0);
-				if(i<0)
-					break; }
-			if(gurubuf)
-				FREE(gurubuf);
-			sprintf(str,"%s%s.DAT",ctrl_dir,guru[i]->code);
-			if((file=nopen(str,O_RDONLY))==-1) {
-				errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-				return; }
-			if((gurubuf=MALLOC(filelength(file)+1))==NULL) {
-				close(file);
-				errormsg(WHERE,ERR_ALLOC,str,filelength(file)+1);
-				return; }
-			read(file,gurubuf,filelength(file));
-			gurubuf[filelength(file)]=0;
-			close(file);
-			localguru(gurubuf,i);
-			no_rip_menu=1;
-			FREE(gurubuf);
-			gurubuf=NULL;
-			break;
-		case '?':
-			if(useron.misc&EXPERT)
-				menu("CHAT");
-			break;
-		default:	/* 'Q' or <CR> */
-			lncntr=0;
-			if(gurubuf)
-				FREE(gurubuf);
-			return; }
-	action=NODE_CHAT;
-	if(!(useron.misc&EXPERT) || useron.misc&WIP
-		|| (useron.misc&RIP && !no_rip_menu)) {
-#if 0
-		sys_status&=~SS_ABORT;
-		if(lncntr) {
-			SYNC;
-			CRLF;
-			if(lncntr)			/* CRLF or SYNC can cause pause */
-				pause(); }
-#endif
-		menu("CHAT"); }
-	ASYNC;
-	bputs(text[ChatPrompt]); }
-if(gurubuf)
-	FREE(gurubuf);
-}
-
-int getnodetopage(int all, int telegram)
-{
-	static	uchar last[26];
-	char	str[128];
-	int 	i,j;
-	ulong	l;
-	node_t	node;
-
-if(!lastnodemsg)
-	last[0]=0;
-if(lastnodemsg) {
-	getnodedat(lastnodemsg,&node,0);
-    if(node.status!=NODE_INUSE && !SYSOP)
-		lastnodemsg=1; }
-for(j=0,i=1;i<=sys_nodes && i<=sys_lastnode;i++) {
-	getnodedat(i,&node,0);
-	if(i==node_num)
-		continue;
-	if(node.status==NODE_INUSE || (SYSOP && node.status==NODE_QUIET)) {
-		if(!lastnodemsg)
-			lastnodemsg=i;
-		j++; } }
-
-if(!last[0])
-	sprintf(last,"%u",lastnodemsg);
-
-if(!j && !telegram) {
-    bputs(text[NoOtherActiveNodes]);
-	return(0); }
-
-if(all)
-	sprintf(str,text[NodeToSendMsgTo],lastnodemsg);
-else
-	sprintf(str,text[NodeToPrivateChat],lastnodemsg);
-mnemonics(str);
-
-strcpy(str,last);
-getstr(str,25,K_UPRLWR|K_LINE|K_EDIT|K_AUTODEL);
-if(sys_status&SS_ABORT)
-	return(0);
-if(!str[0])
-	return(0);
-
-j=atoi(str);
-if(j && j<=sys_lastnode && j<=sys_nodes) {
-	getnodedat(j,&node,0);
-	if(node.status!=NODE_INUSE && !SYSOP) {
-		bprintf(text[NodeNIsNotInUse],j);
-		return(0); }
-	if(telegram && node.misc&(NODE_POFF|NODE_ANON) && !SYSOP) {
-		bprintf(text[CantPageNode],node.misc&NODE_ANON
-			? text[UNKNOWN_USER] : username(node.useron,tmp));
-		return(0); }
-	strcpy(last,str);
-	if(telegram)
-		return(node.useron);
-	return(j); }
-if(all && !stricmp(str,"ALL"))
-	return(-1);
-
-if(str[0]=='\'') {
-	j=userdatdupe(0,U_HANDLE,LEN_HANDLE,str+1,0);
-	if(!j) {
-		bputs(text[UnknownUser]);
-		return(0); } }
-else if(str[0]=='#')
-    j=atoi(str+1);
-else
-	j=finduser(str);
-if(!j)
-	return(0);
-if(j>lastuser())
-	return(0);
-getuserrec(j,U_MISC,8,tmp);
-l=ahtoul(tmp);
-if(l&(DELETED|INACTIVE)) {              /* Deleted or Inactive User */
-    bputs(text[UnknownUser]);
-	return(0); }
-
-for(i=1;i<=sys_nodes && i<=sys_lastnode;i++) {
-	getnodedat(i,&node,0);
-	if((node.status==NODE_INUSE || (SYSOP && node.status==NODE_QUIET))
-		&& node.useron==j) {
-		if(telegram && node.misc&NODE_POFF && !SYSOP) {
-			bprintf(text[CantPageNode],node.misc&NODE_ANON
-				? text[UNKNOWN_USER] : username(node.useron,tmp));
-			return(0); }
-		if(telegram)
-			return(j);
-		strcpy(last,str);
-		return(i); } }
-if(telegram) {
-	strcpy(last,str);
-	return(j); }
-bputs(text[UserNotFound]);
-return(0);
-}
-
-
-/****************************************************************************/
-/* Sending single line messages between nodes                               */
-/****************************************************************************/
-void nodemsg()
-{
-	static	inside;
-	char	str[256],line[256],buf[512],logbuf[512],ch;
-	int 	i,j,usernumber,done=0;
-	node_t	node,savenode;
-
-if(inside>1)	/* nested once only */
-	return;
-sys_status|=SS_IN_CTRLP;
-getnodedat(node_num,&savenode,0);
-inside++;
-wordwrap[0]=0;
-while(online && !done) {
-	if(useron.rest&FLAG('C')) {
-		bputs(text[R_SendMessages]);
-		break; }
-	SYNC;
-	mnemonics(text[PrivateMsgPrompt]);
-	sys_status&=~SS_ABORT;
-	while(online) { 	 /* Watch for incoming messages */
-		ch=toupper(inkey(0));
-		if(ch && strchr("TMCQ\r",ch))
-			break;
-		if(sys_status&SS_ABORT)
-			break;
-		if(online==ON_REMOTE && rioctl(IOSTATE)&ABORT) {
-			sys_status|=SS_ABORT;
-			break; }
-		getnodedat(node_num,&thisnode,0);
-		if(thisnode.misc&(NODE_MSGW|NODE_NMSG)) {
-			SAVELINE;
-			CRLF;
-			if(thisnode.misc&NODE_NMSG)
-				getnmsg();
-			if(thisnode.misc&NODE_MSGW)
-				getsmsg(useron.number);
-			CRLF;
-			RESTORELINE; }
-		else
-			nodesync();
-		gettimeleft();
-		checkline(); }
-
-	if(!online || sys_status&SS_ABORT) {
-		sys_status&=~SS_ABORT;
-		CRLF;
-		break; }
-
-	switch(toupper(ch)) {
-		case 'T':   /* Telegram */
-			bputs("Telegram\r\n");
-			usernumber=getnodetopage(0,1);
-			if(!usernumber)
-				break;
-
-			if(usernumber==1 && useron.rest&FLAG('S')) { /* ! val fback */
-				bprintf(text[R_Feedback],sys_op);
-				break; }
-			if(usernumber!=1 && useron.rest&FLAG('E')) {
-				bputs(text[R_Email]);
-				break; }
-			now=time(NULL);
-			bprintf("\1n\r\n\1mSending telegram to \1h%s #%u\1n\1m (Max 5 "
-				"lines, Blank line ends):\r\n\r\n\1g\1h"
-				,username(usernumber,tmp),usernumber);
-			sprintf(buf,"\1n\1g\7Telegram from \1n\1h%s\1n\1g on %s:\r\n\1h"
-				,thisnode.misc&NODE_ANON ? text[UNKNOWN_USER] : useron.alias
-				,timestr(&now));
-			i=0;
-			logbuf[0]=0;
-			while(online && i<5) {
-				bprintf("%4s",nulstr);
-				if(!getstr(line,70,K_WRAP|K_MSG))
-					break;
-				sprintf(str,"%4s%s\r\n",nulstr,line);
-				strcat(buf,str);
-				if(line[0])
-					strcat(logbuf,line);
-				i++; }
-			if(!i)
-				break;
-			if(sys_status&SS_ABORT) {
-				CRLF;
-				break; }
-			putsmsg(usernumber,buf);
-			sprintf(str,"Sent telegram to %s #%u"
-				,username(usernumber,tmp),usernumber);
-			logline("C",str);
-			logline(nulstr,logbuf);
-			bprintf("\1n\1mTelegram sent to \1h%s\r\n"
-				,username(usernumber,tmp));
-			break;
-		case 'M':   /* Message */
-			bputs("Message\r\n");
-			i=getnodetopage(1,0);
-			if(!i)
-				break;
-			if(i!=-1) {
-				getnodedat(i,&node,0);
-				usernumber=node.useron;
-				if(node.misc&NODE_POFF && !SYSOP)
-					bprintf(text[CantPageNode],node.misc&NODE_ANON
-						? text[UNKNOWN_USER] : username(node.useron,tmp));
-				else {
-					bprintf("\r\n\1n\1mSending message to \1h%s\r\n"
-						,node.misc&NODE_ANON ? text[UNKNOWN_USER]
-						: username(node.useron,tmp));
-					bputs(text[NodeMsgPrompt]);
-					if(!getstr(line,69,K_LINE))
-						break;
-					sprintf(buf,text[NodeMsgFmt],node_num
-						,thisnode.misc&NODE_ANON
-							? text[UNKNOWN_USER] : useron.alias,line);
-					putnmsg(i,buf);
-					if(!(node.misc&NODE_ANON))
-						bprintf("\r\n\1n\1mMessage sent to \1h%s #%u\r\n"
-							,username(usernumber,tmp),usernumber);
-					sprintf(str,"Sent message to %s on node %d:"
-						,username(usernumber,tmp),i);
-					logline("C",str);
-					logline(nulstr,line); } }
-			else {	/* ALL */
-				bputs(text[NodeMsgPrompt]);
-				if(!getstr(line,70,K_LINE))
-					break;
-				sprintf(buf,text[AllNodeMsgFmt],node_num
-					,thisnode.misc&NODE_ANON
-						? text[UNKNOWN_USER] : useron.alias,line);
-				for(i=1;i<=sys_nodes;i++) {
-					if(i==node_num)
-						continue;
-					getnodedat(i,&node,0);
-					if((node.status==NODE_INUSE
-						|| (SYSOP && node.status==NODE_QUIET))
-						&& (SYSOP || !(node.misc&NODE_POFF)))
-						putnmsg(i,buf); }
-				logline("C","Sent message to all nodes");
-				logline(nulstr,line); }
-			break;
-		case 'C':   /* Chat */
-			bputs("Chat\r\n");
-			if(action==NODE_PCHT) { /* already in pchat */
-				done=1;
-				break; }
-			privchat();
-			action=savenode.action;
-			break;
-		default:
-			bputs("Quit\r\n");
-			done=1;
-			break; } }
-inside--;
-if(!inside)
-	sys_status&=~SS_IN_CTRLP;
-getnodedat(node_num,&thisnode,1);
-thisnode.action=action=savenode.action;
-thisnode.aux=savenode.aux;
-thisnode.extaux=savenode.extaux;
-putnodedat(node_num,thisnode);
-}
-
-/****************************************************************************/
-/* The guru will respond from the 'guru' buffer to 'line'                   */
-/****************************************************************************/
-void guruchat(char *line, char *gurubuf, int gurunum)
-{
-	char	str[256],cstr[256],*ptr,c,*answer[100],answers,theanswer[769]
-			,mistakes=1,hu=0;
-	int 	i,j,k,file;
-	long 	len;
-	struct	tm *tm;
-
-now=time(NULL);
-tm=localtime(&now);
-
-for(i=0;i<100;i++) {
-	if((answer[i]=MALLOC(513))==NULL) {
-		errormsg(WHERE,ERR_ALLOC,nulstr,513);
-		while(i) {
-			i--;
-			FREE(answer[i]); }
-		sys_status&=~SS_GURUCHAT;
-		return; } }
-ptr=gurubuf;
-len=strlen(gurubuf);
-strupr(line);
-j=strlen(line);
-k=0;
-for(i=0;i<j;i++) {
-	if(!isalnum(line[i]) && !k)	/* beginning non-alphanumeric */
-		continue;
-	if(!isalnum(line[i]) && line[i]==line[i+1])	/* redundant non-alnum */
-		continue;
-	if(!isalnum(line[i]) && line[i+1]=='?')	/* fix "WHAT ?" */
-		continue;
-	cstr[k++]=line[i]; }
-cstr[k]=0;
-while(--k) {
-	if(!isalnum(cstr[k]))
-		continue;
-	break; }
-if(k<1) {
-	for(i=0;i<100;i++)
-		FREE(answer[i]);
-	return; }
-if(cstr[k+1]=='?')
-	k++;
-cstr[k+1]=0;
-while(*ptr && ptr<gurubuf+len) {
-	if(*ptr=='(') {
-		ptr++;
-		if(!guruexp(&ptr,cstr)) {
-			while(*ptr && *ptr!='(' && ptr<gurubuf+len)
-				ptr++;
-			continue; } }
-	else {
-		while(*ptr && *ptr!=LF && ptr<gurubuf+len) /* skip LF after ')' */
-			ptr++;
-		ptr++;
-		answers=0;
-		while(*ptr && answers<100 && ptr<gurubuf+len) {
-			i=0;
-			while(*ptr && *ptr!=CR && i<512 && ptr<gurubuf+len) {
-				answer[answers][i]=*ptr;
-				ptr++;
-				i++;
-				if(*ptr=='\\' && *(ptr+1)==CR) {	/* multi-line answer */
-					ptr+=3;	/* skip \CRLF */
-					answer[answers][i++]=CR;
-					answer[answers][i++]=LF; } }
-			answer[answers][i]=0;
-			if(!strlen(answer[answers]) || answer[answers][0]=='(') {
-				ptr-=strlen(answer[answers]);
-				break; }
-			ptr+=2;	/* skip CRLF */
-			answers++; }
-		if(answers==100)
-			while(*ptr && *ptr!='(' && ptr<gurubuf+len)
-				ptr++;
-		i=random(answers);
-		for(j=0,k=0;j<strlen(answer[i]);j++) {
-			if(answer[i][j]=='`') {
-				j++;
-				theanswer[k]=0;
-				switch(toupper(answer[i][j])) {
-					case 'A':
-						if(sys_status&SS_USERON)
-							strcat(theanswer,useron.alias);
-						else
-							strcat(theanswer,text[UNKNOWN_USER]);
-						break;
-					case 'B':
-						if(sys_status&SS_USERON)
-							strcat(theanswer,useron.birth);
-						else
-							strcat(theanswer,"00/00/00");
-						break;
-					case 'C':
-                    	if(sys_status&SS_USERON)
-							strcat(theanswer,useron.comp);
-						else
-							strcat(theanswer,"PC Jr.");
-						break;
-					case 'D':
-                    	if(sys_status&SS_USERON)
-							strcat(theanswer,ultoac(useron.dlb,tmp));
-						else
-							strcat(theanswer,"0");
-						break;
-					case 'G':
-						strcat(theanswer,guru[gurunum]->name);
-						break;
-					case 'H':
-						hu=1;
-						break;
-					case 'I':
-						strcat(theanswer,sys_id);
-						break;
-					case 'J':
-						sprintf(tmp,"%u",tm->tm_mday);
-						break;
-					case 'L':
-                    	if(sys_status&SS_USERON)
-							strcat(theanswer,itoa(useron.level,tmp,10));
-						else
-							strcat(theanswer,"0");
-						break;
-					case 'M':
-						strcat(theanswer,month[tm->tm_mon]);
-						break;
-					case 'N':   /* Note */
-                    	if(sys_status&SS_USERON)
-							strcat(theanswer,useron.note);
-						else
-							strcat(theanswer,text[UNKNOWN_USER]);
-						break;
-					case 'O':
-						strcat(theanswer,sys_op);
-						break;
-					case 'P':
-                    	if(sys_status&SS_USERON)
-							strcat(theanswer,useron.phone);
-						else
-							strcat(theanswer,"000-000-0000");
-						break;
-					case 'Q':
-							sys_status&=~SS_GURUCHAT;
-						break;
-					case 'R':
-                    	if(sys_status&SS_USERON)
-							strcat(theanswer,useron.name);
-						else
-							strcat(theanswer,text[UNKNOWN_USER]);
-						break;
-					case 'S':
-						strcat(theanswer,sys_name);
-						break;
-					case 'T':
-						sprintf(tmp,"%u:%02u",tm->tm_hour>12 ? tm->tm_hour-12
-							: tm->tm_hour,tm->tm_min);
-						strcat(theanswer,tmp);
-						break;
-					case 'U':
-                    	if(sys_status&SS_USERON)
-							strcat(theanswer,ultoac(useron.ulb,tmp));
-						else
-							strcat(theanswer,"0");
-						break;
-					case 'W':
-						strcat(theanswer,weekday[tm->tm_wday]);
-						break;
-					case 'Y':   /* Current year */
-						sprintf(tmp,"%u",1900+tm->tm_year);
-						strcat(theanswer,tmp);
-						break;
-					case 'Z':
-						if(sys_status&SS_USERON)
-							strcat(theanswer,useron.zipcode);
-                        else
-							strcat(theanswer,"90210");
-						break;
-					case '$':   /* Credits */
-                    	if(sys_status&SS_USERON)
-							strcat(theanswer,ultoac(useron.cdt,tmp));
-						else
-							strcat(theanswer,"0");
-						break;
-					case '#':
-                    	if(sys_status&SS_USERON)
-							strcat(theanswer,itoa(getage(useron.birth)
-								,tmp,10));
-						else
-							strcat(theanswer,"0");
-						break;
-					case '!':
-						mistakes=!mistakes;
-						break;
-					case '_':
-						mswait(500);
-						break; }
-				k=strlen(theanswer); }
-			else
-				theanswer[k++]=answer[i][j]; }
-		theanswer[k]=0;
-		mswait(500+random(1000));	 /* thinking time */
-		if(action!=NODE_MCHT) {
-			for(i=0;i<k;i++) {
-				if(mistakes && theanswer[i]!=theanswer[i-1] &&
-					((!isalnum(theanswer[i]) && !random(100))
-					|| (isalnum(theanswer[i]) && !random(30)))) {
-					c=j=random(3)+1;	/* 1 to 3 chars */
-					if(c<strcspn(theanswer+(i+1),"\0., "))
-						c=j=1;
-					while(j) {
-						outchar(97+random(26));
-						mswait(25+random(150));
-						j--; }
-					if(random(100)) {
-						mswait(100+random(300));
-						while(c) {
-							bputs("\b \b");
-							mswait(50+random(50));
-							c--; } } }
-				outchar(theanswer[i]);
-				if(theanswer[i]==theanswer[i+1])
-					mswait(25+random(50));
-				else
-					mswait(25+random(150));
-				if(theanswer[i]==SP)
-					mswait(random(50)); } }
-		else {
-			mswait(strlen(theanswer)*100);
-			bprintf(text[ChatLineFmt],guru[gurunum]->name
-				,sys_nodes+1,':',theanswer); }
-		CRLF;
-		sprintf(str,"%sGURU.LOG",data_dir);
-		if((file=nopen(str,O_WRONLY|O_CREAT|O_APPEND))==-1)
-			errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_APPEND);
-		else {
-			if(action==NODE_MCHT) {
-				sprintf(str,"[Multi] ");
-				write(file,str,strlen(str)); }
-			sprintf(str,"%s:\r\n",sys_status&SS_USERON
-				? useron.alias : "UNKNOWN");
-			write(file,str,strlen(str));
-			write(file,line,strlen(line));
-			if(action!=NODE_MCHT)
-				write(file,crlf,2);
-			sprintf(str,"%s:\r\n",guru[gurunum]->name);
-			write(file,str,strlen(str));
-			write(file,theanswer,strlen(theanswer));
-			write(file,crlf,2);
-			close(file); }
-		if(hu)
-			hangup();
-		break; } }
-for(i=0;i<100;i++)
-	FREE(answer[i]);
-}
-
-/****************************************************************************/
-/* An expression from the guru's buffer 'ptrptr' is evaluated and true or   */
-/* false is returned.                                                       */
-/****************************************************************************/
-char guruexp(char **ptrptr, char *line)
-{
-	char	c,*cp,str[256],true=0,and=0,or=0,nest,*ar;
-
-if((**ptrptr)==')') {	/* expressions of () are always true */
-	(*ptrptr)++;
-	return(1); }
-while((**ptrptr)!=')' && (**ptrptr)) {
-	if((**ptrptr)=='[') {
-		(*ptrptr)++;
-		sprintf(str,"%.128s",*ptrptr);
-		while(**ptrptr && (**ptrptr)!=']')
-            (*ptrptr)++;
-        (*ptrptr)++;
-		cp=strchr(str,']');
-		if(cp) *cp=0;
-		ar=arstr(NULL,str);
-		c=chk_ar(ar,useron);
-		if(ar[0]!=AR_NULL)
-			FREE(ar);
-		if(!c && and) {
-			true=0;
-            break; }
-		if(c && or) {
-			true=1;
-			break; }
-		if(c)
-			true=1;
-		continue; }
-	if((**ptrptr)=='(') {
-		(*ptrptr)++;
-		c=guruexp(&(*ptrptr),line);
-		if(!c && and) {
-			true=0;
-			break; }
-		if(c && or) {
-			true=1;
-			break; }
-		if(c)
-			true=1;	}
-	if((**ptrptr)==')')
-		break;
-	c=0;
-	while((**ptrptr) && isspace(**ptrptr))
-		(*ptrptr)++;
-	while((**ptrptr)!='|' && (**ptrptr)!='&' && (**ptrptr)!=')' &&(**ptrptr)) {
-		str[c++]=(**ptrptr);
-		(*ptrptr)++; }
-	str[c]=0;
-	if((**ptrptr)=='|') {
-		if(!c && true)
-			break;
-		and=0;
-		or=1; }
-	else if((**ptrptr)=='&') {
-		if(!c && !true)
-			break;
-		and=1;
-		or=0; }
-	if(!c) {				/* support ((exp)op(exp)) */
-		(*ptrptr)++;
-		continue; }
-	if((**ptrptr)!=')')
-		(*ptrptr)++;
-	c=0;					/* c now used for start line flag */
-	if(str[strlen(str)-1]=='^') {	/* ^signifies start of line only */
-		str[strlen(str)-1]=0;
-		c=1; }
-	if(str[strlen(str)-1]=='~') {	/* ~signifies non-isolated word */
-		str[strlen(str)-1]=0;
-		cp=strstr(line,str);
-		if(c && cp!=line)
-			cp=0; }
-	else {
-		cp=strstr(line,str);
-		if(cp && c) {
-			if(cp!=line || isalnum(*(cp+strlen(str))))
-				cp=0; }
-		else {	/* must be isolated word */
-			while(cp)
-				if((cp!=line && isalnum(*(cp-1)))
-					|| isalnum(*(cp+strlen(str))))
-					cp=strstr(cp+strlen(str),str);
-				else
-					break; } }
-	if(!cp && and) {
-		true=0;
-		break; }
-	if(cp && or) {
-		true=1;
-		break; }
-	if(cp)
-		true=1; }
-nest=0;
-while((**ptrptr)!=')' && (**ptrptr)) {		/* handle nested exp */
-	if((**ptrptr)=='(')						/* (TRUE|(IGNORE)) */
-		nest++;
-	(*ptrptr)++;
-	while((**ptrptr)==')' && nest && (**ptrptr)) {
-		nest--;
-		(*ptrptr)++; } }
-(*ptrptr)++;	/* skip over ')' */
-return(true);
-}
-
-/****************************************************************************/
-/* Guru chat with the appearance of Local chat with sysop.                  */
-/****************************************************************************/
-void localguru(char *gurubuf, int gurunum)
-{
-	char	ch,str[256];
-	int 	con=console;		 /* save console state */
-
-if(sys_status&SS_GURUCHAT || !total_gurus)
-	return;
-sys_status|=SS_GURUCHAT;
-console&=~(CON_L_ECHOX|CON_R_ECHOX);	/* turn off X's */
-console|=(CON_L_ECHO|CON_R_ECHO);					/* make sure echo is on */
-if(action==NODE_CHAT) {	/* only page if from chat section */
-	bprintf(text[PagingGuru],guru[gurunum]->name);
-	ch=random(25)+25;
-	while(ch--) {
-		mswait(200);
-		outchar('.'); } }
-bprintf(text[SysopIsHere],guru[gurunum]->name);
-getnodedat(node_num,&thisnode,1);
-thisnode.aux=gurunum;
-putnodedat(node_num,thisnode);
-attr(color[clr_chatlocal]);
-guruchat("HELLO",gurubuf,gurunum);
-while(online && (sys_status&SS_GURUCHAT)) {
-	checkline();
-	action=NODE_GCHT;
-	SYNC;
-	if((ch=inkey(0))!=0) {
-		ungetkey(ch);
-		attr(color[clr_chatremote]);
-		if(getstr(str,78,K_WRAP|K_CHAT)) {
-			attr(color[clr_chatlocal]);
-			guruchat(str,gurubuf,gurunum); } }
-	else
-		mswait(1); }
-bputs(text[EndOfChat]);
-sys_status&=~SS_GURUCHAT;
-console=con;				/* restore console state */
-}
-
-/****************************************************************************/
-/* Packs the password 'pass' into 5bit ASCII inside node_t. 32bits in 		*/
-/* node.extaux, and the other 8bits in the upper byte of node.aux			*/
-/****************************************************************************/
-void packchatpass(char *pass, node_t *node)
-{
-	char	bits;
-	int		i,j;
-
-node->aux&=~0xff00;		/* clear the password */
-node->extaux=0L;
-if((j=strlen(pass))==0) /* there isn't a password */
-	return;
-node->aux|=(int)((pass[0]-64)<<8);  /* 1st char goes in low 5bits of aux */
-if(j==1)	/* password is only one char, we're done */
-	return;
-node->aux|=(int)((pass[1]-64)<<13); /* low 3bits of 2nd char go in aux */
-node->extaux|=(long)((pass[1]-64)>>3); /* high 2bits of 2nd char go extaux */
-bits=2;
-for(i=2;i<j;i++) {	/* now process the 3rd char through the last */
-	node->extaux|=(long)((long)(pass[i]-64)<<bits);
-	bits+=5; }
-}
-
-/****************************************************************************/
-/* Unpacks the password 'pass' from the 5bit ASCII inside node_t. 32bits in */
-/* node.extaux, and the other 8bits in the upper byte of node.aux			*/
-/****************************************************************************/
-char *unpackchatpass(char *pass, node_t node)
-{
-	char 	bits;
-	int 	i;
-
-pass[0]=(node.aux&0x1f00)>>8;
-pass[1]=((node.aux&0xe000)>>13)|((node.extaux&0x3)<<3);
-bits=2;
-for(i=2;i<8;i++) {
-	pass[i]=(node.extaux>>bits)&0x1f;
-	bits+=5; }
-pass[8]=0;
-for(i=0;i<8;i++)
-	if(pass[i])
-		pass[i]+=64;
-return(pass);
-}
diff --git a/src/sbbs2/chk_ar.c b/src/sbbs2/chk_ar.c
deleted file mode 100644
index ee82da2a01..0000000000
--- a/src/sbbs2/chk_ar.c
+++ /dev/null
@@ -1,509 +0,0 @@
-#line 1 "CHK_AR.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-
-int ar_exp(char **ptrptr, user_t user)
-{
-	uint len,true=1,not,or,equal,artype=AR_LEVEL,n,i,age;
-	ulong l;
-	struct tm *gm;
-
-for(;(**ptrptr);(*ptrptr)++) {
-
-	if((**ptrptr)==AR_ENDNEST)
-		break;
-
-	not=or=equal=0;
-
-	if((**ptrptr)==AR_OR) {
-        or=1;
-		(*ptrptr)++; }
-	
-	if((**ptrptr)==AR_NOT) {
-		not=1;
-		(*ptrptr)++; }
-
-	if((**ptrptr)==AR_EQUAL) {
-        equal=1;
-        (*ptrptr)++; }
-
-	if((true && or) || (!true && !or))
-		break;
-
-	if((**ptrptr)==AR_BEGNEST) {
-		(*ptrptr)++;
-		if(ar_exp(ptrptr,user))
-			true=!not;
-		else
-			true=not;
-		while((**ptrptr)!=AR_ENDNEST && (**ptrptr)) /* in case of early exit */
-			(*ptrptr)++;
-		if(!(**ptrptr))
-			break;
-		continue; }
-
-	artype=(**ptrptr);
-	switch(artype) {
-		case AR_ANSI:				/* No arguments */
-		case AR_RIP:
-		case AR_WIP:
-		case AR_LOCAL:
-		case AR_EXPERT:
-		case AR_SYSOP:
-		case AR_QUIET:
-		case AR_OS2:
-		case AR_DOS:
-			break;
-		default:
-			(*ptrptr)++;
-			break; }
-
-	n=(**ptrptr);
-	i=(*(short *)*ptrptr);
-	switch(artype) {
-		case AR_LEVEL:
-			if((equal && user.level!=n) || (!equal && user.level<n))
-				true=not;
-			else
-				true=!not;
-			if(!true) {
-				noaccess_str=text[NoAccessLevel];
-				noaccess_val=n; }
-			break;
-		case AR_AGE:
-			age=getage(user.birth);
-			if((equal && age!=n) || (!equal && age<n))
-				true=not;
-			else
-				true=!not;
-			if(!true) {
-				noaccess_str=text[NoAccessAge];
-                noaccess_val=n; }
-			break;
-		case AR_BPS:
-			if((equal && cur_rate!=i) || (!equal && cur_rate<i))
-				true=not;
-			else
-				true=!not;
-			(*ptrptr)++;
-			if(!true) {
-				noaccess_str=text[NoAccessBPS];
-				noaccess_val=i; }
-			break;
-		case AR_ANSI:
-			if(!(user.misc&ANSI))
-				true=not;
-			else true=!not;
-			break;
-		case AR_RIP:
-			if(!(user.misc&RIP))
-				true=not;
-			else true=!not;
-            break;
-		case AR_WIP:
-			if(!(user.misc&WIP))
-				true=not;
-			else true=!not;
-            break;
-		case AR_OS2:
-			#ifndef __OS2__
-				true=not;
-			#else
-				true=!not;
-			#endif
-			break;
-		case AR_DOS:
-			#ifdef __FLAT__
-				true=not;
-			#else
-				true=!not;
-			#endif
-			break;
-		case AR_EXPERT:
-			if(!(user.misc&EXPERT))
-				true=not;
-			else true=!not;
-            break;
-		case AR_SYSOP:
-			if(!SYSOP)
-				true=not;
-			else true=!not;
-            break;
-		case AR_QUIET:
-			if(thisnode.status!=NODE_QUIET)
-				true=not;
-			else true=!not;
-            break;
-		case AR_LOCAL:
-			if(online!=ON_LOCAL)
-				true=not;
-			else true=!not;
-            break;
-		case AR_DAY:
-			now=time(NULL);
-			gm=localtime(&now); 	  /* Qnet call out based on time */
-			if((equal && gm->tm_wday!=n) || (!equal && gm->tm_wday<n))
-				true=not;
-			else
-				true=!not;
-			if(!true) {
-				noaccess_str=text[NoAccessDay];
-				noaccess_val=n; }
-			break;
-		case AR_CREDIT:
-			l=(ulong)i*1024UL;
-			if((equal && user.cdt+user.freecdt!=l)
-				|| (!equal && user.cdt+user.freecdt<l))
-				true=not;
-			else
-				true=!not;
-			(*ptrptr)++;
-			if(!true) {
-				noaccess_str=text[NoAccessCredit];
-				noaccess_val=l; }
-			break;
-		case AR_NODE:
-			if((equal && node_num!=n) || (!equal && node_num<n))
-				true=not;
-			else
-				true=!not;
-			if(!true) {
-				noaccess_str=text[NoAccessNode];
-                noaccess_val=n; }
-			break;
-		case AR_USER:
-			if((equal && user.number!=i) || (!equal && user.number<i))
-				true=not;
-			else
-				true=!not;
-			(*ptrptr)++;
-			if(!true) {
-				noaccess_str=text[NoAccessUser];
-				noaccess_val=i; }
-			break;
-		case AR_GROUP:
-			if((equal
-				&& (cursubnum<0 || cursubnum>=total_subs
-					|| sub[cursubnum]->grp!=i))
-				|| (!equal && cursubnum>=0 && cursubnum<total_subs
-					&& sub[cursubnum]->grp<i))
-				true=not;
-			else
-				true=!not;
-			(*ptrptr)++;
-			if(!true) {
-				noaccess_str=text[NoAccessGroup];
-				noaccess_val=i+1; }
-            break;
-		case AR_SUB:
-			if((equal && cursubnum!=i) || (!equal && cursubnum<i))
-				true=not;
-			else
-				true=!not;
-			(*ptrptr)++;
-			if(!true) {
-				noaccess_str=text[NoAccessSub];
-				noaccess_val=i+1; }
-            break;
-		case AR_SUBCODE:
-			if(cursubnum<0 || cursubnum>=total_subs
-				|| strcmp(sub[cursubnum]->code,*ptrptr))
-				true=not;
-			else
-				true=!not;
-			while(*(*ptrptr))
-				(*ptrptr)++;
-			if(!true)
-				noaccess_str=text[NoAccessSub];
-			break;
-		case AR_LIB:
-			if((equal
-				&& (curdirnum<0 || curdirnum>=total_dirs
-					|| dir[curdirnum]->lib!=i))
-				|| (!equal && curdirnum>=0 && curdirnum<total_dirs
-					&& dir[curdirnum]->lib<i))
-				true=not;
-			else
-				true=!not;
-			(*ptrptr)++;
-			if(!true) {
-				noaccess_str=text[NoAccessLib];
-				noaccess_val=i+1; }
-            break;
-		case AR_DIR:
-			if((equal && curdirnum!=i) || (!equal && curdirnum<i))
-				true=not;
-			else
-				true=!not;
-			(*ptrptr)++;
-			if(!true) {
-				noaccess_str=text[NoAccessDir];
-				noaccess_val=i+1; }
-            break;
-		case AR_DIRCODE:
-			if(curdirnum<0 || curdirnum>=total_dirs
-				|| strcmp(dir[curdirnum]->code,*ptrptr))
-				true=not;
-			else
-				true=!not;
-			while(*(*ptrptr))
-				(*ptrptr)++;
-			if(!true)
-				noaccess_str=text[NoAccessSub];
-            break;
-		case AR_EXPIRE:
-			now=time(NULL);
-			if(!user.expire || now+((long)i*24L*60L*60L)>user.expire)
-				true=not;
-			else
-				true=!not;
-			(*ptrptr)++;
-			if(!true) {
-				noaccess_str=text[NoAccessExpire];
-				noaccess_val=i; }
-			break;
-		case AR_RANDOM:
-			n=random(i+1);
-			if((equal && n!=i) || (!equal && n<i))
-				true=not;
-			else
-				true=!not;
-			(*ptrptr)++;
-			break;
-		case AR_LASTON:
-			now=time(NULL);
-			if((now-user.laston)/(24L*60L*60L)<i)
-				true=not;
-			else
-				true=!not;
-			(*ptrptr)++;
-			break;
-		case AR_LOGONS:
-			if((equal && user.logons!=i) || (!equal && user.logons<i))
-				true=not;
-			else
-				true=!not;
-			(*ptrptr)++;
-			break;
-		case AR_MAIN_CMDS:
-			if((equal && main_cmds!=i) || (!equal && main_cmds<i))
-				true=not;
-			else
-				true=!not;
-			(*ptrptr)++;
-            break;
-		case AR_FILE_CMDS:
-			if((equal && xfer_cmds!=i) || (!equal && xfer_cmds<i))
-				true=not;
-			else
-				true=!not;
-			(*ptrptr)++;
-            break;
-		case AR_TLEFT:
-			if(timeleft/60<n)
-				true=not;
-			else
-				true=!not;
-			if(!true) {
-				noaccess_str=text[NoAccessTimeLeft];
-                noaccess_val=n; }
-			break;
-		case AR_TUSED:
-			if((time(NULL)-logontime)/60<n)
-				true=not;
-			else
-				true=!not;
-			if(!true) {
-				noaccess_str=text[NoAccessTimeUsed];
-                noaccess_val=n; }
-			break;
-		case AR_TIME:
-			now=time(NULL);
-			unixtodos(now,&date,&curtime);
-			if((curtime.ti_hour*60)+curtime.ti_min<i)
-				true=not;
-			else
-				true=!not;
-			(*ptrptr)++;
-			if(!true) {
-				noaccess_str=text[NoAccessTime];
-				noaccess_val=i; }
-			break;
-		case AR_PCR:
-			if(user.logons>user.posts
-				&& (!user.posts || 100/(user.logons/user.posts)<n))
-				true=not;
-			else
-				true=!not;
-			if(!true) {
-				noaccess_str=text[NoAccessPCR];
-                noaccess_val=n; }
-			break;
-		case AR_UDR:	/* up/download byte ratio */
-			l=user.dlb;
-			if(!l) l=1;
-			if(user.dlb>user.ulb
-				&& (!user.ulb || 100/(l/user.ulb)<n))
-				true=not;
-			else
-				true=!not;
-			if(!true) {
-				noaccess_str=text[NoAccessUDR];
-                noaccess_val=n; }
-			break;
-		case AR_UDFR:	/* up/download file ratio */
-			i=user.dls;
-			if(!i) i=1;
-			if(user.dls>user.uls
-				&& (!user.uls || 100/(i/user.uls)<n))
-				true=not;
-			else
-				true=!not;
-			if(!true) {
-				noaccess_str=text[NoAccessUDFR];
-                noaccess_val=n; }
-            break;
-		case AR_FLAG1:
-			if((!equal && !(user.flags1&FLAG(n)))
-				|| (equal && user.flags1!=FLAG(n)))
-				true=not;
-			else
-				true=!not;
-			if(!true) {
-				noaccess_str=text[NoAccessFlag1];
-                noaccess_val=n; }
-			break;
-		case AR_FLAG2:
-			if((!equal && !(user.flags2&FLAG(n)))
-				|| (equal && user.flags2!=FLAG(n)))
-				true=not;
-			else
-				true=!not;
-			if(!true) {
-				noaccess_str=text[NoAccessFlag2];
-                noaccess_val=n; }
-            break;
-		case AR_FLAG3:
-			if((!equal && !(user.flags3&FLAG(n)))
-				|| (equal && user.flags3!=FLAG(n)))
-				true=not;
-			else
-				true=!not;
-			if(!true) {
-				noaccess_str=text[NoAccessFlag3];
-                noaccess_val=n; }
-            break;
-		case AR_FLAG4:
-			if((!equal && !(user.flags4&FLAG(n)))
-				|| (equal && user.flags4!=FLAG(n)))
-				true=not;
-			else
-				true=!not;
-			if(!true) {
-				noaccess_str=text[NoAccessFlag4];
-                noaccess_val=n; }
-            break;
-		case AR_REST:
-			if((!equal && !(user.rest&FLAG(n)))
-				|| (equal && user.rest!=FLAG(n)))
-				true=not;
-			else
-				true=!not;
-			if(!true) {
-				noaccess_str=text[NoAccessRest];
-                noaccess_val=n; }
-            break;
-		case AR_EXEMPT:
-			if((!equal && !(user.exempt&FLAG(n)))
-				|| (equal && user.exempt!=FLAG(n)))
-				true=not;
-			else
-				true=!not;
-			if(!true) {
-				noaccess_str=text[NoAccessExempt];
-                noaccess_val=n; }
-            break;
-		case AR_SEX:
-			if(user.sex!=n)
-				true=not;
-			else
-				true=!not;
-			if(!true) {
-				noaccess_str=text[NoAccessSex];
-                noaccess_val=n; }
-			break; } }
-return(true);
-}
-
-int chk_ar(char *str, user_t user)
-{
-	char *p;
-
-if(str==NULL)
-	return(1);
-p=str;
-return(ar_exp(&p,user));
-}
-
-
-/****************************************************************************/
-/* This function fills the usrsub, usrsubs, usrgrps, curgrp, and cursub     */
-/* variables based on the security clearance of the current user (useron)   */
-/****************************************************************************/
-void getusrsubs()
-{
-    uint i,j,k,l;
-
-for(j=0,i=0;i<total_grps;i++) {
-    if(!chk_ar(grp[i]->ar,useron))
-        continue;
-    for(k=0,l=0;l<total_subs;l++) {
-        if(sub[l]->grp!=i) continue;
-        if(!chk_ar(sub[l]->ar,useron))
-            continue;
-        usrsub[j][k++]=l; }
-    usrsubs[j]=k;
-    if(!k)          /* No subs accessible in group */
-        continue;
-    usrgrp[j++]=i; }
-usrgrps=j;
-while((curgrp>=usrgrps || !usrsubs[curgrp]) && curgrp) curgrp--;
-while(cursub[curgrp]>=usrsubs[curgrp] && cursub[curgrp]) cursub[curgrp]--;
-}
-
-/****************************************************************************/
-/* This function fills the usrdir, usrdirs, usrlibs, curlib, and curdir     */
-/* variables based on the security clearance of the current user (useron)   */
-/****************************************************************************/
-void getusrdirs()
-{
-    uint i,j,k,l;
-
-if(useron.rest&FLAG('T')) {
-    usrlibs=0;
-    return; }
-for(j=0,i=0;i<total_libs;i++) {
-    if(!chk_ar(lib[i]->ar,useron))
-        continue;
-    for(k=0,l=0;l<total_dirs;l++) {
-        if(dir[l]->lib!=i) continue;
-        if(!chk_ar(dir[l]->ar,useron))
-            continue;
-        usrdir[j][k++]=l; }
-    usrdirs[j]=k;
-    if(!k)          /* No dirs accessible in lib */
-        continue;
-    usrlib[j++]=i; }
-usrlibs=j;
-while((curlib>=usrlibs || !usrdirs[curlib]) && curlib) curlib--;
-while(curdir[curlib]>=usrdirs[curlib] && curdir[curlib]) curdir[curlib]--;
-}
-
-int dir_op(uint dirnum)
-{
-return(SYSOP || (dir[dirnum]->op_ar[0] && chk_ar(dir[dirnum]->op_ar,useron)));
-}
-
-
diff --git a/src/sbbs2/cmdshell.h b/src/sbbs2/cmdshell.h
deleted file mode 100644
index 8ec3c4e299..0000000000
--- a/src/sbbs2/cmdshell.h
+++ /dev/null
@@ -1,586 +0,0 @@
-/* CMDSHELL.H */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "gen_defs.h"
-
-/******************************/
-/* Instructions and Functions */
-/******************************/
-enum {
-
-/* Single byte instructions */
-
-	 CS_IF_TRUE=0			// Same as IF_EQUAL
-	,CS_IF_FALSE			// Same as IF_NOT_EQUAL
-	,CS_ELSE
-	,CS_ENDIF
-	,CS_CMD_HOME
-	,CS_CMD_POP
-	,CS_END_CMD
-	,CS_RETURN
-	,CS_GETKEY
-	,CS_GETKEYE
-	,CS_UNGETKEY
-	,CS_UNGETSTR
-	,CS_PRINTKEY
-	,CS_PRINTSTR
-	,CS_HANGUP
-	,CS_SYNC
-	,CS_ASYNC
-	,CS_CHKSYSPASS
-	,CS_LOGKEY
-	,CS_LOGKEY_COMMA
-	,CS_LOGSTR
-	,CS_CLS
-	,CS_CRLF
-	,CS_PAUSE
-	,CS_PAUSE_RESET
-	,CS_GETLINES
-	,CS_GETFILESPEC
-	,CS_FINDUSER
-	,CS_CLEAR_ABORT
-	,CS_SELECT_SHELL
-	,CS_SET_SHELL
-	,CS_SELECT_EDITOR
-	,CS_SET_EDITOR			// 0x20
-	,CS_INKEY
-	,CS_RIOSYNC
-	,CS_GETTIMELEFT
-	,CS_SAVELINE
-	,CS_RESTORELINE
-	,CS_IF_GREATER
-	,CS_IF_GREATER_OR_EQUAL
-	,CS_IF_LESS
-	,CS_IF_LESS_OR_EQUAL
-	,CS_DEFAULT 			// 0x2a
-	,CS_END_SWITCH
-	,CS_END_CASE
-	,CS_PUT_NODE
-	,CS_ONE_MORE_BYTE=0x2f
-
-/* Two byte instructions */
-
-	,CS_CMDKEY=0x30
-	,CS_NODE_ACTION
-	,CS_GETSTR
-	,CS_GETNAME
-	,CS_GETSTRUPR
-	,CS_SHIFT_STR
-	,CS_COMPARE_KEY
-	,CS_SETLOGIC
-	,CS_SET_USER_LEVEL
-	,CS_SET_USER_STRING
-	,CS_GETLINE 			// 0x3a
-	,CS_NODE_STATUS
-	,CS_TWO_MORE_BYTES=0x3f
-
-/* Three byte instructions */
-
-	,CS_GOTO=0x40
-	,CS_CALL
-	,CS_TOGGLE_NODE_MISC
-	,CS_ADJUST_USER_CREDITS
-	,CS_TOGGLE_USER_FLAG
-	,CS_GETNUM
-	,CS_COMPARE_NODE_MISC
-	,CS_MSWAIT
-	,CS_ADJUST_USER_MINUTES
-	,CS_REVERT_TEXT
-	,CS_THREE_MORE_BYTES=0x4f
-
-/* String arg instructions */
-
-	,CS_MENU=0x50
-	,CS_PRINT
-	,CS_PRINT_LOCAL
-	,CS_PRINT_REMOTE
-	,CS_PRINTFILE
-	,CS_PRINTFILE_LOCAL
-	,CS_PRINTFILE_REMOTE
-	,CS_YES_NO
-    ,CS_NO_YES
-	,CS_COMPARE_STR
-	,CS_COMPARE_WORD		// 0x5a
-	,CS_EXEC
-	,CS_EXEC_INT
-	,CS_EXEC_BIN
-	,CS_EXEC_XTRN
-	,CS_GETCMD
-	,CS_LOG 				// 0x60
-	,CS_MNEMONICS
-	,CS_SETSTR
-	,CS_SET_MENU_DIR
-	,CS_SET_MENU_FILE
-	,CS_CMDSTR
-	,CS_CHKFILE
-	,CS_GET_TEMPLATE
-	,CS_TRASHCAN
-	,CS_CREATE_SIF
-	,CS_READ_SIF			// 0x6a
-	,CS_CMDKEYS
-	,CS_COMPARE_KEYS
-	,CS_STR_FUNCTION=0x6f
-
-/* Var length instructions */
-
-	,CS_COMPARE_ARS=0x70
-	,CS_TOGGLE_USER_MISC
-	,CS_COMPARE_USER_MISC
-	,CS_REPLACE_TEXT
-	,CS_TOGGLE_USER_CHAT
-	,CS_COMPARE_USER_CHAT
-	,CS_TOGGLE_USER_QWK
-	,CS_COMPARE_USER_QWK
-	,CS_SWITCH
-	,CS_CASE
-	,CS_USE_INT_VAR 		// 0x7a
-
-/* File I/O Functions */
-
-	,CS_FIO_FUNCTION=0x7e
-
-/* Variable instruction sub-ops */
-
-	,CS_VAR_INSTRUCTION=0x7f
-
-/* Functions */
-
-	,CS_MAIL_READ=0x80
-	,CS_MAIL_READ_SENT
-	,CS_MAIL_READ_ALL
-	,CS_MAIL_SEND
-	,CS_MAIL_SEND_BULK
-	,CS_MAIL_SEND_FILE
-	,CS_MAIL_SEND_FEEDBACK
-	,CS_MAIL_SEND_NETMAIL
-	,CS_MAIL_SEND_NETFILE
-	,CS_LOGOFF
-    ,CS_LOGOFF_FAST
-	,CS_AUTO_MESSAGE
-	,CS_MSG_SET_AREA
-	,CS_MSG_SELECT_AREA
-	,CS_MSG_SHOW_GROUPS
-    ,CS_MSG_SHOW_SUBBOARDS
-	,CS_MSG_GROUP_UP			// 0x90
-    ,CS_MSG_GROUP_DOWN
-    ,CS_MSG_SUBBOARD_UP
-    ,CS_MSG_SUBBOARD_DOWN
-	,CS_MSG_GET_SUB_NUM
-	,CS_MSG_GET_GRP_NUM
-	,CS_MSG_READ
-	,CS_MSG_POST
-	,CS_MSG_QWK
-	,CS_MSG_PTRS_CFG
-	,CS_MSG_PTRS_REINIT
-	,CS_MSG_NEW_SCAN_CFG
-	,CS_MSG_NEW_SCAN
-	,CS_MSG_NEW_SCAN_ALL
-	,CS_MSG_CONT_SCAN
-	,CS_MSG_CONT_SCAN_ALL
-	,CS_MSG_BROWSE_SCAN 		// 0xA0
-	,CS_MSG_BROWSE_SCAN_ALL
-	,CS_MSG_FIND_TEXT
-	,CS_MSG_FIND_TEXT_ALL
-	,CS_MSG_YOUR_SCAN_CFG
-	,CS_MSG_YOUR_SCAN
-	,CS_MSG_YOUR_SCAN_ALL
-	,CS_MSG_NEW_SCAN_SUB
-	,CS_MSG_SET_GROUP
-	,CS_MSG_UNUSED4
-	,CS_MSG_UNUSED3
-	,CS_MSG_UNUSED2
-	,CS_MSG_UNUSED1
-	,CS_FILE_SET_AREA
-	,CS_FILE_SELECT_AREA
-	,CS_FILE_SHOW_LIBRARIES
-	,CS_FILE_SHOW_DIRECTORIES	// 0xB0
-	,CS_FILE_LIBRARY_UP
-	,CS_FILE_LIBRARY_DOWN
-	,CS_FILE_DIRECTORY_UP
-	,CS_FILE_DIRECTORY_DOWN
-	,CS_FILE_GET_DIR_NUM
-	,CS_FILE_GET_LIB_NUM
-	,CS_FILE_LIST
-	,CS_FILE_LIST_EXTENDED
-	,CS_FILE_VIEW
-	,CS_FILE_UPLOAD
-	,CS_FILE_UPLOAD_USER
-	,CS_FILE_UPLOAD_SYSOP
-	,CS_FILE_DOWNLOAD
-	,CS_FILE_DOWNLOAD_USER
-	,CS_FILE_DOWNLOAD_BATCH
-	,CS_FILE_REMOVE 			//0xC0
-	,CS_FILE_BATCH_SECTION
-	,CS_FILE_TEMP_SECTION
-	,CS_FILE_NEW_SCAN_CFG
-	,CS_FILE_NEW_SCAN
-	,CS_FILE_NEW_SCAN_ALL
-	,CS_FILE_FIND_TEXT
-	,CS_FILE_FIND_TEXT_ALL
-	,CS_FILE_FIND_NAME
-	,CS_FILE_FIND_NAME_ALL
-	,CS_FILE_PTRS_CFG
-	,CS_FILE_BATCH_ADD
-	,CS_FILE_BATCH_CLEAR
-	,CS_FILE_SET_LIBRARY
-	,CS_FILE_SEND				//Like file_get, but no password needed
-	,CS_FILE_BATCH_ADD_LIST
-	,CS_FILE_UNUSED1			//0xD0
-	,CS_NODELIST_ALL
-	,CS_NODELIST_USERS
-	,CS_CHAT_SECTION
-	,CS_USER_DEFAULTS
-	,CS_USER_EDIT
-	,CS_TEXT_FILE_SECTION
-	,CS_INFO_SYSTEM
-	,CS_INFO_SUBBOARD
-	,CS_INFO_DIRECTORY
-	,CS_INFO_USER
-	,CS_INFO_VERSION
-	,CS_INFO_XFER_POLICY
-	,CS_XTRN_EXEC
-	,CS_XTRN_SECTION
-	,CS_USERLIST_SUB
-	,CS_USERLIST_DIR			//0xE0
-	,CS_USERLIST_ALL
-    ,CS_USERLIST_LOGONS
-	,CS_PAGE_SYSOP
-    ,CS_PRIVATE_CHAT
-    ,CS_PRIVATE_MESSAGE
-	,CS_MINUTE_BANK
-	,CS_GURU_LOG
-	,CS_ERROR_LOG
-	,CS_SYSTEM_LOG
-	,CS_SYSTEM_YLOG
-	,CS_SYSTEM_STATS
-	,CS_NODE_STATS
-	,CS_SHOW_MEM
-	,CS_CHANGE_USER
-	,CS_ANSI_CAPTURE
-	,CS_LIST_TEXT_FILE			//0xF0
-	,CS_EDIT_TEXT_FILE
-	,CS_FILE_SET_ALT_PATH
-	,CS_FILE_RESORT_DIRECTORY
-	,CS_FILE_GET
-	,CS_FILE_PUT
-	,CS_FILE_UPLOAD_BULK
-	,CS_FILE_FIND_OLD
-	,CS_FILE_FIND_OPEN
-	,CS_FILE_FIND_OFFLINE
-	,CS_FILE_FIND_OLD_UPLOADS
-	,CS_INC_MAIN_CMDS
-	,CS_INC_FILE_CMDS
-	,CS_PRINTFILE_STR
-	,CS_PAGE_GURU				//0xFE
-	
-	};
-
-	/* Variable instructions (sub-op-code) */
-
-enum {
-
-	 SHOW_VARS						// Show all variables
-	,PRINT_VAR						// Print a single variable
-	,VAR_PRINTF 					// Print a formated line of text
-	,VAR_RESERVED_4
-	,VAR_RESERVED_3
-	,VAR_RESERVED_2
-	,VAR_RESERVED_1
-	,DEFINE_STR_VAR 				// Define Local Variable
-	,DEFINE_INT_VAR
-	,VAR_RESERVED_A4
-	,VAR_RESERVED_A3
-	,VAR_RESERVED_A2
-	,VAR_RESERVED_A1
-	,DEFINE_GLOBAL_STR_VAR			// Define Global Variable
-	,DEFINE_GLOBAL_INT_VAR
-	,VAR_RESERVED_B4
-	,VAR_RESERVED_B3	// 0x10
-	,VAR_RESERVED_B2
-	,VAR_RESERVED_B1
-	,SET_STR_VAR					// Set string variable
-	,SET_INT_VAR					// Set integer variable
-	,VAR_RESERVED_C4
-	,VAR_RESERVED_C3
-	,VAR_RESERVED_C2
-	,VAR_RESERVED_C1
-	,COMPARE_STR_VAR				// Compare string variable (static)
-	,COMPARE_INT_VAR				// Compare integer variable (static)
-	,STRNCMP_VAR					// Compare n chars of str var (static)
-	,STRSTR_VAR 					// Sub-string compare of str var (static)
-	,VAR_RESERVED_D2
-	,VAR_RESERVED_D1
-	,COMPARE_VARS					// Compare two variables
-	,STRNCMP_VARS		// 0x20 	// Compare n chars of str vars (dynamic)
-	,STRSTR_VARS					// Sub-string compare between two str vars
-	,VAR_RESERVED_E2
-	,VAR_RESERVED_E1
-	,COPY_VAR						// Copy from one variable to another
-	,VAR_RESERVED_F4
-	,VAR_RESERVED_F3
-	,VAR_RESERVED_F2
-	,VAR_RESERVED_F1
-	,SWAP_VARS						// Swap two variables
-	,VAR_RESERVED_G4
-	,VAR_RESERVED_G3
-	,VAR_RESERVED_G2
-	,VAR_RESERVED_G1
-	,CAT_STR_VAR					// Concatenate string variable (static)
-    ,CAT_STR_VARS                   // Concatenate strint variable (dynamic)
-	,FORMAT_STR_VAR 	// 0x30 	// Format string variable
-	,TIME_STR						// Write formated date/time to string
-	,DATE_STR						// Write MM/DD/YY to string
-	,FORMAT_TIME_STR				// Create custom date/time string
-	,SECOND_STR 					// Create a string in format hh:mm:ss
-	,STRUPR_VAR 					// Convert string to upper case
-	,STRLWR_VAR 					// Convert string to lower case
-	,ADD_INT_VAR					// Add to int variable (static)
-	,ADD_INT_VARS					// Add to int variable (dynamic)
-	,VAR_RESERVED_I4
-	,VAR_RESERVED_I3
-	,VAR_RESERVED_I2
-	,VAR_RESERVED_I1
-	,SUB_INT_VAR					// Subtract from int variable (static)
-	,SUB_INT_VARS					// Subtract from int variable (dynamic)
-	,VAR_RESERVED_J4
-	,VAR_RESERVED_J3	// 0x40
-	,VAR_RESERVED_J2
-	,VAR_RESERVED_J1
-	,MUL_INT_VAR					// Multiply int variable (static)
-	,MUL_INT_VARS					// Multiply int variable (dynamic)
-	,VAR_RESERVED_K4
-	,VAR_RESERVED_K3
-	,VAR_RESERVED_K2
-	,VAR_RESERVED_K1
-	,DIV_INT_VAR					// Divide int variable (static)
-	,DIV_INT_VARS					// Divide int variable (dynamic)
-	,MOD_INT_VAR
-	,MOD_INT_VARS
-	,VAR_RESERVED_L2
-	,VAR_RESERVED_L1
-	,AND_INT_VAR					// Bit-wise AND int variable (static)
-	,AND_INT_VARS		// 0x50 	// Bit-wise AND int variable (dynamic)
-	,VAR_RESERVED_M4
-	,VAR_RESERVED_M3
-	,VAR_RESERVED_M2
-	,VAR_RESERVED_M1
-	,OR_INT_VAR 					// Bit-wise OR int variable (static)
-	,OR_INT_VARS					// Bit-wise OR int variable (dynamic)
-	,VAR_RESERVED_N4
-	,VAR_RESERVED_N3
-	,VAR_RESERVED_N2
-	,VAR_RESERVED_N1
-	,NOT_INT_VAR					// Bit-wise NOT int variable (static)
-	,NOT_INT_VARS					// Bit-wise NOT int variable (dynamic)
-	,VAR_RESERVED_O4
-	,VAR_RESERVED_O3
-	,VAR_RESERVED_O2
-	,VAR_RESERVED_O1	// 0x60
-	,XOR_INT_VAR					// XOR int variable (static)
-	,XOR_INT_VARS					// XOR int variable (dynamic)
-	,VAR_RESERVED_P4
-	,VAR_RESERVED_P3
-	,VAR_RESERVED_P2
-	,VAR_RESERVED_P1
-	,RANDOM_INT_VAR 				// Set integer to random number
-	,TIME_INT_VAR					// Set integer to current time/date
-	,DATE_STR_TO_INT				// Convert a date string to integer
-	,STRLEN_INT_VAR 				// Set integer to length of str
-	,CRC16_TO_INT					// Get CRC-16 of str var
-	,CRC32_TO_INT					// Get CRC-32 of str var
-	,FLENGTH_TO_INT 				// Put length of str var file into int
-	,CHARVAL_TO_INT 				// Put character val of str var into int
-	,GETNUM_VAR 					// Get number
-	,GETSTR_VAR 		// 0x70 	// Get string
-	,GETNAME_VAR					// Get string (upper/lower)
-	,GETSTRUPR_VAR					// Get string (upper)
-	,GETLINE_VAR					// Get string (input bar/line)
-	,SHIFT_STR_VAR					// Shift str in variable
-	,GETSTR_MODE					// Get string with various modes
-	,TRUNCSP_STR_VAR				// Truncate space off end of str var
-	,CHKFILE_VAR
-	,PRINTFILE_VAR_MODE 			// Printfile str var with mode
-	,PRINTTAIL_VAR_MODE 			// Print tail-end of str var with mode
-	,CHKSUM_TO_INT					// Get CHKSUM of str var
-	,STRIP_CTRL_STR_VAR 			// Strip ctrl chars from str var
-	,SEND_FILE_VIA					// Send file (static) via protocol
-	,SEND_FILE_VIA_VAR				// Send file (dynamic) via protocol
-	,FTIME_TO_INT					// Put time of str var file into int
-	,RECEIVE_FILE_VIA				// Receive file (static) via protocol
-	,RECEIVE_FILE_VIA_VAR			// Receive file (dynamic) via protocol
-	};
-
-									// More string arg functions
-enum {
-	 CS_LOGIN						// Login/password prompt
-	,CS_LOAD_TEXT					// Load alternative TEXT.DAT
-	};
-
-enum {								// More single byte instructions
-	 CS_ONLINE						// Online execution only
-	,CS_OFFLINE 					// Offline execution allowed
-	,CS_NEWUSER 					// New user procedure
-	,CS_LOGON						// Logon procedure
-	,CS_LOGOUT						// Logout procedure
-	,CS_EXIT						// Exit current module immediately
-	};
-
-enum {								// More two byte instructions
-	 CS_USER_EVENT					// External user event
-	};
-
-enum {
-	 FIO_OPEN						// Open file (static filename)
-	,FIO_CLOSE						// Close file
-	,FIO_READ						// Read from file
-	,FIO_READ_VAR					// Read from file, variable # of bytes
-	,FIO_WRITE						// Write to file
-	,FIO_WRITE_VAR					// Write to file, variable # of bytes
-	,FIO_GET_LENGTH 				// Get length
-	,FIO_EOF						// Set logic to TRUE if eof
-	,FIO_GET_POS					// Get current file position
-	,FIO_SEEK						// Seek within file
-	,FIO_SEEK_VAR					// Seek within file, variable offset
-	,FIO_LOCK						// Lock a region
-	,FIO_LOCK_VAR					// Lock a region, variable length
-	,FIO_UNLOCK 					// Unlock a region
-	,FIO_UNLOCK_VAR 				// Unlock a region, variable length
-	,FIO_SET_LENGTH 				// Change size
-	,FIO_SET_LENGTH_VAR 			// Change size, variable length
-	,FIO_PRINTF 					// Write formated string to file
-	,FIO_SET_ETX					// Set end-of-text character
-	,FIO_GET_TIME					// Gets the current date/time of file
-	,FIO_SET_TIME					// Sets the current date/time of file
-	,FIO_OPEN_VAR					// Open a file (dynamic filename)
-	,FIO_READ_LINE					// Read a single line from file
-	,FIO_FLUSH						// Flush buffered output to disk
-	,FIO_UNUSED8
-	,FIO_UNUSED7
-	,FIO_UNUSED6
-	,FIO_UNUSED5
-	,FIO_UNUSED4
-	,FIO_UNUSED3
-	,FIO_UNUSED2
-	,FIO_UNUSED1
-	,REMOVE_FILE					// Remove a file
-	,RENAME_FILE					// Rename a file
-	,COPY_FILE						// Copy a file to another file
-	,MOVE_FILE						// Move a file to another file
-	,GET_FILE_ATTRIB				// Get file attributes
-	,SET_FILE_ATTRIB				// Set file attributes
-	,MAKE_DIR						// Make directory
-	,CHANGE_DIR 					// Change current directory
-	,REMOVE_DIR 					// Remove directory
-	,OPEN_DIR						// Open a directory
-	,READ_DIR						// Read a directory entry
-	,REWIND_DIR 					// Rewind an open directory
-	,CLOSE_DIR						// Close an open directory
-	};
-
-enum {
-	 USER_STRING_ALIAS
-	,USER_STRING_REALNAME
-	,USER_STRING_HANDLE
-	,USER_STRING_COMPUTER
-	,USER_STRING_NOTE
-	,USER_STRING_ADDRESS
-	,USER_STRING_LOCATION
-	,USER_STRING_ZIPCODE
-	,USER_STRING_PASSWORD
-	,USER_STRING_BIRTHDAY
-	,USER_STRING_PHONE
-	,USER_STRING_MODEM
-	,USER_STRING_COMMENT
-
-	};
-
-#define CS_ONE_BYTE 	CS_IF_TRUE
-#define CS_TWO_BYTE 	CS_CMDKEY
-#define CS_THREE_BYTE	CS_GOTO
-#define CS_ASCIIZ		CS_MENU
-#define CS_MISC 		CS_COMPARE_ARS
-#define CS_FUNCTIONS	CS_MAIL_READ
-#define CS_ELSEORENDIF	0xff
-#define CS_NEXTCASE 	0xfe
-
-#define CS_DIGIT		0xff
-#define CS_EDIGIT		0xfe
-
-									/* Bits for csi_t.misc */
-#define CS_IN_SWITCH	(1L<<0) 	/* Inside active switch statement */
-#define CS_OFFLINE_EXEC (1L<<1) 	/* Offline execution */
-
-#define MAX_RETS	50	/* maximum nested call depth */
-#define MAX_CMDRETS 50	/* maximum nested cmd depth */
-#define MAX_STRVARS 26
-#define MAX_INTVARS 26
-#define MAX_STRLEN	81
-#define MAX_FOPENS	10	/* maximum open files */
-#define MAX_SYSVARS 16	/* maximum system variable saves */
-
-#define LOGIC_LESS		-1
-#define LOGIC_EQUAL 	0
-#define LOGIC_GREATER	1
-#define LOGIC_TRUE		LOGIC_EQUAL
-#define LOGIC_FALSE 	LOGIC_LESS
-
-typedef struct {					/* Command shell image */
-
-	uchar	*cs,					/* Command shell image */
-			*ip,					/* Instruction pointer */
-			cmd,					/* Current command key */
-			etx,					/* End-of-text character */
-			*str,					/* Current string */
-			*ret[MAX_RETS], 		/* Return address stack */
-			rets,					/* Returns on stack */
-			*cmdret[MAX_CMDRETS],	/* Command return address stack */
-			cmdrets,				/* Command returns on stack */
-			**str_var;				/* String variables */
-
-
-	int 	logic,					/* Current logic */
-			files;					/* Open files */
-
-	FILE	*file[MAX_FOPENS];		/* Each file ptr */
-
-	uint	str_vars,				/* Total number of string variables */
-			int_vars;				/* Total number of integer variables */
-
-	long	retval, 				/* Return value */
-			misc,					/* Misc bits */
-			switch_val, 			/* Current switch value */
-			*int_var,				/* Integer variables */
-			*str_var_name,			/* String variable names (CRC-32) */
-			*int_var_name;			/* Integer variable names (CRC-32) */
-
-	ulong	length; 				/* Length of image */
-
-	} csi_t;
-
-extern uint global_str_vars;
-extern char **global_str_var;
-extern long *global_str_var_name;
-extern uint global_int_vars;
-extern long *global_int_var;
-extern long *global_int_var_name;
-extern csi_t main_csi;
-extern char *sysvar_p[MAX_SYSVARS];
-extern int sysvar_pi;
-extern long sysvar_l[MAX_SYSVARS];
-extern int sysvar_li;
-
-int exec(csi_t *csi);
-int exec_function(csi_t *csi);
-int exec_misc(csi_t *csi, uchar *path);
-int execmsg(csi_t *csi);
-int execfile(csi_t *csi);
-long exec_bin(uchar *mod, csi_t *csi);
-void clearvars(csi_t *bin);
-void freevars(csi_t *bin);
-char **getstrvar(csi_t *bin, long name);
-long *getintvar(csi_t *bin, long name);
-char *copystrvar(csi_t *csi, char *p, char *str);
-void skipto(csi_t *csi, uchar inst);
-
-/* End of CMDSHELL.H */
diff --git a/src/sbbs2/comio.c b/src/sbbs2/comio.c
deleted file mode 100644
index 510a415ddf..0000000000
--- a/src/sbbs2/comio.c
+++ /dev/null
@@ -1,354 +0,0 @@
-#line 1 "COMIO.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/***********************************/
-/* COM port and modem i/o routines */
-/***********************************/
-
-#include "sbbs.h"
-
-#ifndef __FLAT__
-extern mswtyp;
-#endif
-
-extern char term_ret;
-extern uint addrio;
-
-/****************************************************************************/
-/* Outputs a NULL terminated string to the COM port verbatim				*/
-/* Called from functions putmsg, getstr and color							*/
-/****************************************************************************/
-void putcom(char *str)
-{
-	ulong	l=0;
-
-while(str[l])
-	putcomch(str[l++]);
-}
-
-/****************************************************************************/
-/* Outputs a single character to the COM port								*/
-/****************************************************************************/
-void putcomch(char ch)
-{
-	char 	lch;
-	int 	i=0;
-
-if(!com_port)
-	return;
-while(outcom(ch)&TXBOF && i<1440) {	/* 3 minute pause delay */
-    if(lkbrd(1)) {
-		lch=lkbrd(0);	/* ctrl-c */
-		if(lch==3) {
-			lputs("local abort (putcomch)\r\n");
-			i=1440;
-			break; }
-		ungetkey(lch); }
-	if(!DCDHIGH)
-		break;
-	i++;
-	if(sys_status&SS_SYSPAGE)
-		beep(i,80);
-	else
-		mswait(80); }
-if(i==1440) {						/* timeout - beep flush outbuf */
-	i=rioctl(TXBC);
-	lprintf("timeout(putcomch) %04X %04X\r\n",i,rioctl(IOFO));
-	outcom(7);
-	lputc(7);
-	rioctl(IOCS|PAUSE); }
-}
-
-/****************************************************************************/
-/* Sends string of characters to COM port. Interprets ^M and ~ (pause)		*/
-/* Called from functions waitforcall and offhook							*/
-/****************************************************************************/
-void mdmcmd(char *str)
-{
-	int 	i=0;
-	uint	lch;
-
-if(mdm_misc&MDM_DUMB)
-	return;
-if(sys_status&SS_MDMDEBUG)
-	lputs("\r\nModem command  : ");
-while(str[i]) {
-	if(str[i]=='~')
-		mswait(DELAY_MDMTLD);
-	else {
-		if(i && str[i-1]=='^' && str[i]!='^')  /* control character */
-			putcomch(toupper(str[i])-64);
-		else if(str[i]!='^' || (i && str[i-1]=='^'))
-			putcomch(str[i]);
-		if(sys_status&SS_MDMDEBUG)
-			lputc(str[i]); }
-	i++; }
-putcomch(CR);
-i=0;
-while(rioctl(TXSYNC|(1<<8)) && i<10) { /* wait for modem to receive all chars */
-	if(lkbrd(1)) {
-		lch=lkbrd(0);	/* ctrl-c */
-		if(lch==0x2e03) {
-			lputs("local abort (mdmcmd)\r\n");
-			break; }
-		if(lch==0xff00)
-			bail(1);
-		ungetkey(lch); }
-	i++; }
-if(i==10) {
-	i=rioctl(TXBC);
-	lprintf("\r\ntimeout(mdmcmd) %04X %04X\r\n",i,rioctl(IOFO)); }
-if(sys_status&SS_MDMDEBUG)
-	lputs(crlf);
-}
-
-/****************************************************************************/
-/* Returns CR terminated string from the COM port. 							*/
-/* Called from function waitforcall 										*/
-/****************************************************************************/
-char getmdmstr(char *str, int sec)
-{
-	uchar	j=0,ch;
-	uint	lch;
-	time_t	start;
-
-if(sys_status&SS_MDMDEBUG)
-	lputs("Modem response : ");
-start=time(NULL);
-while(time(NULL)-start<sec && j<81) {
-	if(lkbrd(1)) {
-		lch=lkbrd(0);	/* ctrl-c */
-		if(lch==0x2e03 || lch==3) {
-			lputs("local abort (getmdmstr)\r\n");
-			break; }
-		if(lch==0xff00)
-			bail(1);
-		ungetkey(lch); }
-	if((ch=incom())==CR && j) {
-		if(mdm_misc&MDM_VERBAL)
-			incom();	/* LF */
-		break; }
-	if(ch && (ch<0x20 || ch>0x7f)) { /* ignore ctrl characters and ex-ascii */
-		if(sys_status&SS_MDMDEBUG)
-			lprintf("[%02X]",ch);
-		continue; }
-	if(ch) {
-		str[j++]=ch;
-		if(sys_status&SS_MDMDEBUG)
-			lputc(ch); }
-	else mswait(0); }
-mswait(500);
-str[j]=0;
-if(sys_status&SS_MDMDEBUG)
-	lputs(crlf);
-return(j);
-}
-
-/****************************************************************************/
-/* Drops DTR (if COM port used), clears KEY and COM Buffers and other vars	*/
-/* Called from functions checkline, getkey, inkey, main, waitforcall,		*/
-/* main_sec, xfer_sec, gettimeleft and newuser								*/
-/****************************************************************************/
-void hangup()
-{
-	char	str1[256],str2[256],c;
-	uint	i;
-
-rioctl(MSR);
-if(!term_ret && com_port && (rioctl(IOSTATE)&DCD)) {  /* if carrier detect */
-	riosync(0);
-	mswait(DELAY_HANGUP);		 /* wait for modem buffer to clear */
-	if(mdm_misc&MDM_NODTR)
-		mdmcmd(mdm_hang);
-	else {
-		lputs("\r\nDropping DTR...");
-		if(dtr(15))  {			/* drop dtr, wait 15 seconds for dcd to drop */
-			lputs("\rDropping DTR Failed");
-			logline("@!","Dropping DTR Failed");
-			mdmcmd(mdm_hang); } }
-	mswait(110);
-	rioctl(MSR);
-	if(rioctl(IOSTATE)&DCD) {
-		mswait(5000);
-		rioctl(MSR);
-		if(rioctl(IOSTATE)&DCD) {
-			lputs("\r\nDCD high after hang up");
-			logline("@!","DCD high after hang up");
-			mswait(5000); } } }
-if(sys_status&SS_CAP) {	/* Close capture if open */
-	fclose(capfile);
-#ifdef __MSDOS__
-	freedosmem=farcoreleft(); /* fnopen allocates memory and fclose frees */
-#endif
-	sys_status^=SS_CAP; }
-if(sys_status&SS_FINPUT) { /* Close file input if open */
-	close(inputfile);
-	sys_status^=SS_FINPUT; }
-
-keybufbot=keybuftop=online=console=0;
-sys_status&=~(SS_TMPSYSOP|SS_LCHAT|SS_SYSPAGE|SS_ABORT);
-nosound();
-if(com_port)
-	dtr(1);
-}
-
-/****************************************************************************/
-/* Sends 'off-hook' string to modem to pick up phone (if COM port used)		*/
-/* Called from function waitforcall											*/
-/****************************************************************************/
-void offhook()
-{
-if(com_port && !(mdm_misc&MDM_DUMB)) {
-	mdmcmd(mdm_offh);
-	rioctl(TXSYNC|(2<<8));	/* wait up 2 seconds for modem to receive */
-	}
-}
-
-/****************************************************************************/
-/* Checks to see if remote user has hung up.								*/
-/* Called from function getkey												*/
-/****************************************************************************/
-void checkline()
-{
-if(online!=ON_REMOTE) return;
-if(!DCDHIGH) {
-	lprintf("\r\nHung up");
-	logline(nulstr,"Hung up");
-	hangup(); }
-}
-
-/****************************************************************************/
-/* Syncronizes the remote and local machines before command prompts         */
-/****************************************************************************/
-void riosync(char abortable)
-{
-	int 	i=0;
-
-if(useron.misc&(RIP|WIP))	/* don't allow abort with RIP or WIP */
-	abortable=0;		/* mainly because of ANSI cursor posistion response */
-if(sys_status&SS_ABORT)	/* no need to sync if already aborting */
-	return;
-if(online==ON_REMOTE && console&CON_R_ECHO) {
-	while(rioctl(TXSYNC|(1<<8)) && i<180) { /* three minutes till tx buf empty */
-		if(sys_status&SS_SYSPAGE)
-			beep(i,10);
-		if(lkbrd(1))
-			break;
-		if(abortable && rioctl(RXBC)) { 	/* incoming characer */
-			rioctl(IOFO);					/* flush output */
-			sys_status|=SS_ABORT;			/* set abort flag so no pause */
-			break; }						/* abort sync */
-		if(!DCDHIGH)
-			break;
-		mswait(0);
-		i++; }
-	if(i==180) {
-		i=rioctl(TXBC);
-		lprintf("timeout(sync) %04X %04X\r\n",i,rioctl(IOFO));
-		outcom(7);
-		lputc(7);
-		rioctl(IOCS|PAUSE); }
-	if(rioctl(IOSTATE)&ABORT)
-		sys_status|=SS_ABORT;
-	rioctl(IOCS|ABORT); }
-}
-
-/*****************************************************************************/
-/* Initializes com i/o routines and sets baud rate                           */
-/*****************************************************************************/
-void comini()
-{
-	int 	i;
-#ifndef __FLAT__
-	uint	base=0xffff;
-#endif
-
-if(sys_status&SS_COMISR)	/* Already installed */
-	return;
-lprintf("\r\nInitializing COM port %u: ",com_port);
-#ifndef __FLAT__
-switch(com_base) {
-	case 0xb:
-		lputs("PC BIOS");
-		break;
-	case 0xd:
-		lputs("DigiBoard");
-		break;
-	case 0xe:
-		lputs("PS/2 BIOS");
-		break;
-	case 0xf:
-		lputs("FOSSIL");
-		break;
-	case 0:
-		base=com_port;
-		lputs("UART I/O (BIOS), ");
-		if(com_irq)
-            lprintf("IRQ %d",com_irq);
-        else lputs("default IRQ");
-		break;
-	default:
-		base=com_base;
-		lprintf("UART I/O %Xh, ",com_base);
-		if(com_irq)
-            lprintf("IRQ %d",com_irq);
-        else lputs("default IRQ");
-        break; }
-
-if(base==0xffff)
-	lprintf(" channel %u",com_irq);
-i=rioini(base,com_irq);
-#else
-#ifdef __OS2__
-if(rio_handle!=-1)	// Already opened, prolly passed to SBBS4OS2 via cmd line
-	lprintf("handle %d",rio_handle);
-#endif
-i=rioini(com_port,0);
-#endif
-if(i) {
-	lprintf(" - Failed! (%d)\r\n",i);
-	bail(1); }
-i=0;
-if(mdm_misc&MDM_CTS)
-	i=CTSCK;
-if(mdm_misc&MDM_RTS)
-	i|=RTSCK;
-if(i)
-	rioctl(IOSM|i); /* set cts checking if hardware flow control */
-
-#ifndef __FLAT__
-rioctl(TSTYPE|mswtyp);	 /* set time-slice API type */
-#endif
-
-rioctl(CPTON);			/* ctrl-p translation */
-
-if(addrio) {
-	lprintf("\r\nAdditional rioctl: %04Xh",addrio);
-	rioctl(addrio); }
-
-sys_status|=SS_COMISR;
-}
-
-/****************************************************************************/
-/* Sets the current baud rate to either the current connect rate or the 	*/
-/* DTE rate 																*/
-/****************************************************************************/
-void setrate()
-{
-	int i;
-
-if(online==ON_REMOTE && !(mdm_misc&MDM_STAYHIGH))
-	dte_rate=cur_rate;
-else
-	dte_rate=com_rate;
-lprintf("\r\nSetting DTE rate: %lu baud",dte_rate);
-#ifdef __FLAT__
-if((i=setbaud(dte_rate))!=0) {
-#else
-if((i=setbaud((uint)(dte_rate&0xffffL)))!=0) {
-#endif
-	lprintf(" - Failed! (%d)\r\n",i);
-	bail(1); }
-lputs(crlf);
-}
diff --git a/src/sbbs2/con_hi.c b/src/sbbs2/con_hi.c
deleted file mode 100644
index be01d3b7f3..0000000000
--- a/src/sbbs2/con_hi.c
+++ /dev/null
@@ -1,796 +0,0 @@
-#line 1 "CON_HI.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-
-extern char question[128];
-
-char *mnestr;
-
-/****************************************************************************/
-/* Waits for remote or local user to input a CR terminated string. 'length' */
-/* is the maximum number of characters that getstr will allow the user to   */
-/* input into the string. 'mode' specifies upper case characters are echoed */
-/* or wordwrap or if in message input (^A sequences allowed). ^W backspaces */
-/* a word, ^X backspaces a line, ^Gs, BSs, TABs are processed, LFs ignored. */
-/* ^N non-destructive BS, ^V center line. Valid keys are echoed.            */
-/****************************************************************************/
-int getstr(char *strout, int maxlen, long mode)
-{
-    int i,l,x,z;    /* i=current position, l=length, j=printed chars */
-                    /* x&z=misc */
-    uchar ch,str1[256],str2[256],ins=0,atr;
-
-console&=~CON_UPARROW;
-sys_status&=~SS_ABORT;
-if(mode&K_LINE && useron.misc&ANSI && !(mode&K_NOECHO)) {
-    attr(color[clr_inputline]);
-    for(i=0;i<maxlen;i++)
-        outchar(SP);
-    bprintf("\x1b[%dD",maxlen); }
-if(wordwrap[0]) {
-    strcpy(str1,wordwrap);
-    wordwrap[0]=0; }
-else str1[0]=0;
-if(mode&K_EDIT)
-    strcat(str1,strout);
-if(strlen(str1)>maxlen)
-    str1[maxlen]=0;
-atr=curatr;
-if(!(mode&K_NOECHO)) {
-	if(mode&K_AUTODEL && str1[0]) {
-		i=(color[clr_inputline]&0x77)<<4;
-		i|=(color[clr_inputline]&0x77)>>4;
-		attr(i); }
-	rputs(str1);
-	if(mode&K_EDIT && !(mode&(K_LINE|K_AUTODEL)) && useron.misc&ANSI)
-		bputs("\x1b[K");  /* destroy to eol */ }
-
-i=l=strlen(str1);
-if(mode&K_AUTODEL && str1[0] && !(mode&K_NOECHO)) {
-	ch=getkey(mode|K_GETSTR);
-    attr(atr);
-    if(isprint(ch) || ch==0x7f) {
-        for(i=0;i<l;i++)
-            bputs("\b \b");
-        i=l=0; }
-    else {
-        for(i=0;i<l;i++)
-            outchar(BS);
-        rputs(str1);
-        i=l; }
-	if(ch!=SP && ch!=TAB)
-		ungetkey(ch); }
-
-while(!(sys_status&SS_ABORT) && (ch=getkey(mode|K_GETSTR))!=CR && online) {
-	if(sys_status&SS_ABORT)
-		break;
-	if(ch==LF) /* Ctrl-J same as CR */
-		break;
-	if(ch==TAB && !(mode&K_WRAP))	/* TAB same as CR */
-		break;
-	if(!i && mode&K_UPRLWR && (ch==SP || ch==TAB))
-		continue;	/* ignore beginning white space if upper/lower */
-    if(mode&K_E71DETECT && ch==(CR|0x80) && l>1) {
-        if(strstr(str1,"��")) {
-            bputs("\r\n\r\nYou must set your terminal to NO PARITY, "
-                "8 DATA BITS, and 1 STOP BIT (N-8-1).\7\r\n");
-            return(0); } }
-    switch(ch) {
-        case 1: /* Ctrl-A for ANSI */
-            if(!(mode&K_MSG) || useron.rest&FLAG('A') || i>maxlen-3)
-                break;
-            if(ins) {
-                if(l<maxlen)
-                    l++;
-                for(x=l;x>i;x--)
-                    str1[x]=str1[x-1];
-                rprintf("%.*s",l-i,str1+i);
-                rprintf("\x1b[%dD",l-i);
-                if(i==maxlen-1)
-                    ins=0; }
-            outchar(str1[i++]=1);
-            break;
-        case 2: /* Ctrl-B Beginning of Line */
-			if(useron.misc&ANSI && i && !(mode&K_NOECHO)) {
-                bprintf("\x1b[%dD",i);
-                i=0; }
-            break;
-        case 4: /* Ctrl-D Delete word right */
-            if(i<l) {
-                x=i;
-                while(x<l && str1[x]!=SP) {
-                    outchar(SP);
-                    x++; }
-                while(x<l && str1[x]==SP) {
-                    outchar(SP);
-                    x++; }
-                bprintf("\x1b[%dD",x-i);   /* move cursor back */
-                z=i;
-                while(z<l-(x-i))  {             /* move chars in string */
-                    outchar(str1[z]=str1[z+(x-i)]);
-                    z++; }
-                while(z<l) {                    /* write over extra chars */
-                    outchar(SP);
-                    z++; }
-                bprintf("\x1b[%dD",z-i);
-                l-=x-i; }                       /* l=new length */
-            break;
-        case 5: /* Ctrl-E End of line */
-			if(useron.misc&ANSI && i<l) {
-                bprintf("\x1b[%dC",l-i);  /* move cursor to eol */
-                i=l; }
-            break;
-        case 6: /* Ctrl-F move cursor forewards */
-            if(i<l && (useron.misc&ANSI)) {
-                bputs("\x1b[C");   /* move cursor right one */
-                i++; }
-            break;
-        case 7:
-            if(!(mode&K_MSG))
-                break;
-            if(useron.rest&FLAG('B')) {
-                if (i+6<maxlen) {
-                    if(ins) {
-                        for(x=l+6;x>i;x--)
-                            str1[x]=str1[x-6];
-                        if(l+5<maxlen)
-                            l+=6;
-                        if(i==maxlen-1)
-                            ins=0; }
-                    str1[i++]='(';
-                    str1[i++]='b';
-                    str1[i++]='e';
-                    str1[i++]='e';
-                    str1[i++]='p';
-                    str1[i++]=')';
-					if(!(mode&K_NOECHO))
-						bputs("(beep)"); }
-                if(ins)
-                    redrwstr(str1,i,l,0);
-                break; }
-             if(ins) {
-                if(l<maxlen)
-                    l++;
-                for(x=l;x>i;x--)
-                    str1[x]=str1[x-1];
-                if(i==maxlen-1)
-                    ins=0; }
-             if(i<maxlen) {
-                str1[i++]=7;
-				if(!(mode&K_NOECHO))
-					outchar(7); }
-             break;
-        case 14:    /* Ctrl-N Next word */
-            if(i<l && (useron.misc&ANSI)) {
-                x=i;
-                while(str1[i]!=SP && i<l)
-                    i++;
-                while(str1[i]==SP && i<l)
-                    i++;
-                bprintf("\x1b[%dC",i-x); }
-            break;
-        case 0x1c:    /* Ctrl-\ Previous word */
-			if(i && (useron.misc&ANSI) && !(mode&K_NOECHO)) {
-                x=i;
-                while(str1[i-1]==SP && i)
-                    i--;
-                while(str1[i-1]!=SP && i)
-                    i--;
-                bprintf("\x1b[%dD",x-i); }
-            break;
-        case 18:    /* Ctrl-R Redraw Line */
-			if(!(mode&K_NOECHO))
-				redrwstr(str1,i,l,0);
-            break;
-        case TAB:
-            if(!(i%TABSIZE)) {
-                if(ins) {
-                    if(l<maxlen)
-                        l++;
-                    for(x=l;x>i;x--)
-                        str1[x]=str1[x-1];
-                    if(i==maxlen-1)
-                        ins=0; }
-                str1[i++]=SP;
-				if(!(mode&K_NOECHO))
-					outchar(SP); }
-            while(i<maxlen && i%TABSIZE) {
-                if(ins) {
-                    if(l<maxlen)
-                        l++;
-                    for(x=l;x>i;x--)
-                        str1[x]=str1[x-1];
-                    if(i==maxlen-1)
-                        ins=0; }
-                str1[i++]=SP;
-				if(!(mode&K_NOECHO))
-					outchar(SP); }
-			if(ins && !(mode&K_NOECHO))
-                redrwstr(str1,i,l,0);
-            break;
-        case BS:
-            if(!i)
-                break;
-            i--;
-            l--;
-            if(i!=l) {              /* Deleting char in middle of line */
-                outchar(BS);
-                z=i;
-                while(z<l)  {       /* move the characters in the line */
-                    outchar(str1[z]=str1[z+1]);
-                    z++; }
-                outchar(SP);        /* write over the last char */
-                bprintf("\x1b[%dD",(l-i)+1); }
-			else if(!(mode&K_NOECHO))
-                bputs("\b \b");
-            break;
-        case 22:    /* Ctrl-V   Center line */
-            str1[l]=0;
-            l=bstrlen(str1);
-            if(!l) break;
-            for(x=0;x<(maxlen-l)/2;x++)
-                str2[x]=SP;
-            str2[x]=0;
-            strcat(str2,str1);
-            strcpy(strout,str2);
-            l=strlen(strout);
-			if(mode&K_NOECHO)
-				return(l);
-            if(mode&K_MSG)
-                redrwstr(strout,i,l,K_MSG);
-            else {
-                while(i--)
-                    bputs("\b");
-                bputs(strout);
-                if(mode&K_LINE)
-                    attr(LIGHTGRAY); }
-            CRLF;
-            return(l);
-        case 23:    /* Ctrl-W   Delete word left */
-            if(i<l) {
-                x=i;                            /* x=original offset */
-                while(i && str1[i-1]==SP) {
-                    outchar(BS);
-                    i--; }
-                while(i && str1[i-1]!=SP) {
-                    outchar(BS);
-                    i--; }
-                z=i;                            /* i=z=new offset */
-                while(z<l-(x-i))  {             /* move chars in string */
-                    outchar(str1[z]=str1[z+(x-i)]);
-                    z++; }
-                while(z<l) {                    /* write over extra chars */
-                    outchar(SP);
-                    z++; }
-                bprintf("\x1b[%dD",z-i);        /* back to new x corridnant */
-                l-=x-i; }                       /* l=new length */
-            else {
-                while(i && str1[i-1]==SP) {
-                    i--;
-                    l--;
-					if(!(mode&K_NOECHO))
-						bputs("\b \b"); }
-                while(i && str1[i-1]!=SP) {
-                    i--;
-                    l--;
-					if(!(mode&K_NOECHO))
-						bputs("\b \b"); } }
-            break;
-        case 24:    /* Ctrl-X   Delete entire line */
-			if(mode&K_NOECHO)
-				l=0;
-			else {
-				while(i<l) {
-					outchar(SP);
-					i++; }
-				while(l) {
-					l--;
-					bputs("\b \b"); } }
-            i=0;
-            break;
-        case 25:    /* Ctrl-Y   Delete to end of line */
-			if(useron.misc&ANSI && !(mode&K_NOECHO)) {
-                bputs("\x1b[K");
-                l=i; }
-            break;
-        case 31:    /* Ctrl-Minus       Toggles Insert/Overwrite */
-			if(!(useron.misc&ANSI) || mode&K_NOECHO)
-                break;
-            if(ins) {
-                ins=0;
-                redrwstr(str1,i,l,0); }
-            else if(i<l) {
-                ins=1;
-				bprintf("\x1b[s\x1b[%dC",79-lclwx());    /* save pos  */
-                z=curatr;                                /* and got to EOL */
-                attr(z|BLINK|HIGH);
-                outchar('�');
-                attr(z);
-                bputs("\x1b[u"); }  /* restore pos */
-            break;
-        case 0x1e:  /* Ctrl-^ */
-            if(!(mode&K_EDIT))
-                break;
-            if(i>l)
-                l=i;
-            str1[l]=0;
-            strcpy(strout,str1);
-			if((stripattr(strout) || ins) && !(mode&K_NOECHO))
-                redrwstr(strout,i,l,K_MSG);
-			if(mode&K_LINE && !(mode&K_NOECHO))
-				attr(LIGHTGRAY);
-            console|=CON_UPARROW;
-            return(l);
-        case 0x1d:  /* Ctrl-]  Reverse Cursor Movement */
-			if(i && (useron.misc&ANSI) && !(mode&K_NOECHO)) {
-                bputs("\x1b[D");   /* move cursor left one */
-                i--; }
-            break;
-        case 0x7f:  /* Ctrl-BkSpc (DEL) Delete current char */
-            if(i==l)
-                break;
-            l--;
-            z=i;
-            while(z<l)  {       /* move the characters in the line */
-                outchar(str1[z]=str1[z+1]);
-                z++; }
-            outchar(SP);        /* write over the last char */
-            bprintf("\x1b[%dD",(l-i)+1);
-            break;
-        default:
-            if(mode&K_WRAP && i==maxlen && ch>=SP && !ins) {
-                str1[i]=0;
-				if(ch==SP && !(mode&K_CHAT)) { /* don't wrap a space */ 
-					strcpy(strout,str1);	   /* as last char */
-					if(stripattr(strout) && !(mode&K_NOECHO))
-                        redrwstr(strout,i,l,K_MSG);
-					if(!(mode&K_NOECHO))
-						CRLF;
-                    return(i); }
-                x=i-1;
-                z=1;
-                wordwrap[0]=ch;
-                while(str1[x]!=SP && x)
-                    wordwrap[z++]=str1[x--];
-                if(x<(maxlen/2)) {
-                    wordwrap[1]=0;  /* only wrap one character */
-                    strcpy(strout,str1);
-					if(stripattr(strout) && !(mode&K_NOECHO))
-                        redrwstr(strout,i,l,K_MSG);
-					if(!(mode&K_NOECHO))
-						CRLF;
-                    return(i); }
-                wordwrap[z]=0;
-				if(!(mode&K_NOECHO))
-					while(z--) {
-						bputs("\b \b");
-						i--; }
-                strrev(wordwrap);
-                str1[x]=0;
-                strcpy(strout,str1);
-				if(stripattr(strout) && !(mode&K_NOECHO))
-					redrwstr(strout,i,x,mode);
-				if(!(mode&K_NOECHO))
-					CRLF;
-                return(x); }
-            if(i<maxlen && ch>=SP) {
-                if(mode&K_UPRLWR)
-                    if(!i || (i && (str1[i-1]==SP || str1[i-1]=='-'
-                        || str1[i-1]=='.' || str1[i-1]=='_')))
-                        ch=toupper(ch);
-                    else
-                        ch=tolower(ch);
-                if(ins) {
-                    if(l<maxlen)    /* l<maxlen */
-                        l++;
-                    for(x=l;x>i;x--)
-                        str1[x]=str1[x-1];
-					rprintf("%.*s",l-i,str1+i);
-					rprintf("\x1b[%dD",l-i);
-					if(i==maxlen-1) {
-						bputs("  \b\b");
-						ins=0; } }
-                str1[i++]=ch;
-				if(!(mode&K_NOECHO))
-					outchar(ch); } }
-    if(i>l)
-        l=i;
-    if(mode&K_CHAT && !l)
-        return(0); }
-if(!online)
-    return(0);
-if(i>l)
-    l=i;
-str1[l]=0;
-if(!(sys_status&SS_ABORT)) {
-    strcpy(strout,str1);
-	if((stripattr(strout) || ins) && !(mode&K_NOECHO))
-        redrwstr(strout,i,l,K_MSG); }
-else
-    l=0;
-if(mode&K_LINE && !(mode&K_NOECHO)) attr(LIGHTGRAY);
-if(!(mode&(K_NOCRLF|K_NOECHO))) {
-    outchar(CR);
-    if(!(mode&K_MSG && sys_status&SS_ABORT))
-        outchar(LF);
-    lncntr=0; }
-return(l);
-}
-
-/****************************************************************************/
-/* Hot keyed number input routine.                                          */
-/* Returns a valid number between 1 and max, 0 if no number entered, or -1  */
-/* if the user hit 'Q' or ctrl-c                                            */
-/****************************************************************************/
-long getnum(ulong max)
-{
-    uchar ch,n=0;
-	long i=0;
-
-while(online) {
-	ch=getkey(K_UPPER);
-    if(ch>0x7f)
-        continue;
-	if(ch=='Q') {
-		outchar('Q');
-		if(useron.misc&COLDKEYS)
-			ch=getkey(K_UPPER);
-		if(ch==BS) {
-			bputs("\b \b");
-			continue; }
-        CRLF;
-        lncntr=0;
-        return(-1); }
-    else if(sys_status&SS_ABORT) {
-        CRLF;
-        lncntr=0;
-        return(-1); }
-    else if(ch==CR) {
-        CRLF;
-        lncntr=0;
-        return(i); }
-    else if(ch==BS && n) {
-        bputs("\b \b");
-        i/=10;
-        n--; }
-	else if(isdigit(ch) && (i*10L)+(ch&0xf)<=max && (ch!='0' || n)) {
-		i*=10L;
-        n++;
-        i+=ch&0xf;
-        outchar(ch);
-		if(i*10L>max && !(useron.misc&COLDKEYS)) {
-            CRLF;
-            lncntr=0;
-            return(i); } } }
-return(0);
-}
-
-/*****************************************************************************/
-/* Displays or erases [WAIT] message                                         */
-/*****************************************************************************/
-void waitforsysop(char on)
-{
-    static saveatr;
-    int i,j;
-
-if(on) {
-	saveatr=curatr;
-    bputs(text[Wait]);
-    lclatr(LIGHTGRAY);
-    return; }
-j=bstrlen(text[Wait]);
-attr(saveatr);
-for(i=0;i<j;i++)
-    bputs("\b \b");
-}
-
-/****************************************************************************/
-/* Returns 1 if a is a valid ctrl-a code, 0 if it isn't.                    */
-/****************************************************************************/
-char validattr(char a)
-{
-
-switch(toupper(a)) {
-    case '-':   /* clear        */
-    case '_':   /* clear        */
-    case 'B':   /* blue     fg  */
-    case 'C':   /* cyan     fg  */
-    case 'G':   /* green    fg  */
-    case 'H':   /* high     fg  */
-    case 'I':   /* blink        */
-    case 'K':   /* black    fg  */
-    case 'L':   /* cls          */
-    case 'M':   /* magenta  fg  */
-    case 'N':   /* normal       */
-    case 'P':   /* pause        */
-    case 'R':   /* red      fg  */
-    case 'W':   /* white    fg  */
-    case 'Y':   /* yellow   fg  */
-    case '0':   /* black    bg  */
-    case '1':   /* red      bg  */
-    case '2':   /* green    bg  */
-    case '3':   /* brown    bg  */
-    case '4':   /* blue     bg  */
-    case '5':   /* magenta  bg  */
-    case '6':   /* cyan     bg  */
-    case '7':   /* white    bg  */
-		return(1); }
-return(0);
-}
-
-/****************************************************************************/
-/* Strips invalid Ctrl-Ax sequences from str                                */
-/* Returns number of ^A's in line                                           */
-/****************************************************************************/
-char stripattr(char *strin)
-{
-    uchar str[256];
-    uchar a,c,d,e;
-
-e=strlen(strin);
-for(a=c=d=0;c<e;c++) {
-    if(strin[c]==1) {
-        a++;
-        if(!validattr(strin[c+1])) {
-            c++;
-            continue; } }
-    str[d++]=strin[c]; }
-str[d]=0;
-strcpy(strin,str);
-return(a);
-}
-
-/****************************************************************************/
-/* Redraws str using i as current cursor position and l as length           */
-/****************************************************************************/
-void redrwstr(char *strin, int i, int l, char mode)
-{
-    char str[256],c;
-
-sprintf(str,"%-*.*s",l,l,strin);
-c=i;
-while(c--)
-    outchar(BS);
-if(mode&K_MSG)
-    bputs(str);
-else
-    rputs(str);
-if(useron.misc&ANSI) {
-    bputs("\x1b[K");
-    if(i<l)
-        bprintf("\x1b[%dD",l-i); }
-else {
-    while(c<79) { /* clear to end of line */
-        outchar(SP);
-        c++; }
-    while(c>l) { /* back space to end of string */
-        outchar(BS);
-        c--; } }
-}
-
-/****************************************************************************/
-/* Outputs a string highlighting characters preceeded by a tilde            */
-/****************************************************************************/
-void mnemonics(char *str)
-{
-    char *ctrl_a_codes;
-    long l;
-
-if(!strchr(str,'~')) {
-	mnestr=str;
-	bputs(str);
-	return; }
-ctrl_a_codes=strchr(str,1);
-if(!ctrl_a_codes) {
-	if(str[0]=='@' && str[strlen(str)-1]=='@' && !strchr(str,SP)) {
-		mnestr=str;
-		bputs(str);
-		return; }
-	attr(color[clr_mnelow]); }
-l=0L;
-while(str[l]) {
-    if(str[l]=='~' && str[l+1]) {
-        if(!(useron.misc&ANSI))
-            outchar('(');
-        l++;
-        if(!ctrl_a_codes)
-            attr(color[clr_mnehigh]);
-        outchar(str[l]);
-        l++;
-        if(!(useron.misc&ANSI))
-            outchar(')');
-        if(!ctrl_a_codes)
-            attr(color[clr_mnelow]); }
-    else {
-        if(str[l]==1) {             /* ctrl-a */
-            ctrl_a(str[++l]);       /* skip the ctrl-a */
-            l++; }                  /* skip the attribute code */
-        else
-            outchar(str[l++]); } }
-if(!ctrl_a_codes)
-    attr(color[clr_mnecmd]);
-}
-
-/****************************************************************************/
-/* Prompts user for Y or N (yes or no) and CR is interpreted as a Y         */
-/* Returns 1 for Y or 0 for N                                               */
-/* Called from quite a few places                                           */
-/****************************************************************************/
-char yesno(char *str)
-{
-    char ch;
-
-strcpy(question,str);
-SYNC;
-if(useron.misc&WIP) {
-	strip_ctrl(question);
-	menu("YESNO"); }
-else
-	bprintf(text[YesNoQuestion],str);
-while(online) {
-	if(sys_status&SS_ABORT)
-		ch=text[YN][1];
-	else
-		ch=getkey(K_UPPER|K_COLD);
-	if(ch==text[YN][0] || ch==CR) {
-		if(bputs(text[Yes]))
-			CRLF;
-        lncntr=0;
-        return(1); }
-	if(ch==text[YN][1]) {
-		if(bputs(text[No]))
-			CRLF;
-        lncntr=0;
-        return(0); } }
-return(1);
-}
-
-/****************************************************************************/
-/* Prompts user for N or Y (no or yes) and CR is interpreted as a N         */
-/* Returns 1 for N or 0 for Y                                               */
-/* Called from quite a few places                                           */
-/****************************************************************************/
-char noyes(char *str)
-{
-    char ch;
-
-strcpy(question,str);
-SYNC;
-if(useron.misc&WIP) {
-	strip_ctrl(question);
-	menu("NOYES"); }
-else
-	bprintf(text[NoYesQuestion],str);
-while(online) {
-	if(sys_status&SS_ABORT)
-		ch=text[YN][1];
-	else
-		ch=getkey(K_UPPER|K_COLD);
-	if(ch==text[YN][1] || ch==CR) {
-		if(bputs(text[No]))
-			CRLF;
-        lncntr=0;
-        return(1); }
-	if(ch==text[YN][0]) {
-		if(bputs(text[Yes]))
-			CRLF;
-        lncntr=0;
-        return(0); } }
-return(1);
-}
-
-/****************************************************************************/
-/* Waits for remote or local user to hit a key that is contained inside str.*/
-/* 'str' should contain uppercase characters only. When a valid key is hit, */
-/* it is echoed (upper case) and is the return value.                       */
-/* Called from quite a few functions                                        */
-/****************************************************************************/
-long getkeys(char *str, ulong max)
-{
-	uchar ch,n=0,c;
-	ulong i=0;
-
-strupr(str);
-while(online) {
-	ch=getkey(K_UPPER);
-    if(max && ch>0x7f)  /* extended ascii chars are digits to isdigit() */
-        continue;
-    if(sys_status&SS_ABORT) {   /* return -1 if Ctrl-C hit */
-        attr(LIGHTGRAY);
-        CRLF;
-        lncntr=0;
-        return(-1); }
-    if(ch && !n && (strchr(str,ch))) {  /* return character if in string */
-		outchar(ch);
-		if(useron.misc&COLDKEYS && ch>SP) {
-			while(online && !(sys_status&SS_ABORT)) {
-				c=getkey(0);
-				if(c==CR || c==BS)
-					break; }
-			if(sys_status&SS_ABORT) {
-				CRLF;
-				return(-1); }
-			if(c==BS) {
-				bputs("\b \b");
-				continue; } }
-		attr(LIGHTGRAY);
-        CRLF;
-        lncntr=0;
-        return(ch); }
-    if(ch==CR && max) {             /* return 0 if no number */
-        attr(LIGHTGRAY);
-        CRLF;
-        lncntr=0;
-        if(n)
-			return(i|0x80000000L);		 /* return number plus high bit */
-        return(0); }
-    if(ch==BS && n) {
-        bputs("\b \b");
-        i/=10;
-        n--; }
-    else if(max && isdigit(ch) && (i*10)+(ch&0xf)<=max && (ch!='0' || n)) {
-        i*=10;
-        n++;
-        i+=ch&0xf;
-        outchar(ch);
-		if(i*10>max && !(useron.misc&COLDKEYS)) {
-            attr(LIGHTGRAY);
-            CRLF;
-            lncntr=0;
-			return(i|0x80000000L); } } }
-return(-1);
-}
-
-void center(char *str)
-{
-	 int i,j;
-
-j=bstrlen(str);
-for(i=0;i<(80-j)/2;i++)
-	outchar(SP);
-bputs(str);
-CRLF;
-}
-
-
-int uselect(int add, int n, char *title, char *item, char *ar)
-{
-	static uint total,num[500];
-	char str[128];
-	int i,t;
-
-if(add) {
-	if(ar && !chk_ar(ar,useron))
-		return(0);
-	if(!total)
-		bprintf(text[SelectItemHdr],title);
-	num[total++]=n;
-	bprintf(text[SelectItemFmt],total,item);
-	return(0); }
-
-if(!total)
-	return(-1);
-
-for(i=0;i<total;i++)
-	if(num[i]==n)
-		break;
-if(i==total)
-	i=0;
-sprintf(str,text[SelectItemWhich],i+1);
-mnemonics(str);
-i=getnum(total);
-t=total;
-total=0;
-if(i<0)
-	return(-1);
-if(!i) {					/* User hit ENTER, use default */
-	for(i=0;i<t;i++)
-		if(num[i]==n)
-			return(num[i]);
-	if(n<t)
-		return(num[n]);
-	return(-1); }
-return(num[i-1]);
-}
diff --git a/src/sbbs2/con_in.c b/src/sbbs2/con_in.c
deleted file mode 100644
index 8458335ccd..0000000000
--- a/src/sbbs2/con_in.c
+++ /dev/null
@@ -1,663 +0,0 @@
-#line 1 "CON_IN.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-
-#define LAST_STAT_LINE 16
-
-#ifdef __WIN32__
-
-#include <windows.h>
-
-uint lkbrd(int mode)
-{
-	uint c;
-
-if(mode)
-	return(kbhit());
-c=getch();
-if(!c)
-	c=(getch()<<8);
-return(c);
-}
-
-int  lclaes(void)
-{
-return(0);
-}
-
-#elif defined(__OS2__)
-
-void fixkbdmode(void)
-{
-	KBDINFO 	kbd;
-
-/* Disable Ctrl-C/Ctrl-P processing by OS/2 */
-KbdGetStatus(&kbd,0);
-if(kbd.fsMask&KEYBOARD_ASCII_MODE) {
-    kbd.fsMask|=KEYBOARD_BINARY_MODE;
-    kbd.fsMask&=~KEYBOARD_ASCII_MODE;
-    KbdSetStatus(&kbd,0); }
-}
-
-uint lkbrd(int leave)
-{
-	KBDKEYINFO	key;
-
-if(leave)
-	KbdPeek(&key,0);
-else
-	KbdCharIn(&key,IO_NOWAIT,0);
-if(!(key.fbStatus&KBDTRF_FINAL_CHAR_IN))
-	return(0);
-if(!(key.fbStatus&0x02) || key.chScan==0xE0)
-	return(key.chChar);
-return(key.chScan<<8);
-}
-
-#endif
-
-/****************************************************************************/
-/* Returns character if a key has been hit locally or remotely and responds */
-/* to local ctrl/function keys. Does not print character. 					*/
-/* Called from functions getkey, msgabort and main_sec						*/
-/****************************************************************************/
-char inkey(int mode)
-{
-	static inside;
-	uchar str[512],*scrnbuf,x,y,c,atr,*gurubuf,ch=0,*helpbuf;
-	int file,con=console;
-	uint i,j;
-	long l,length;
-
-if(!(node_misc&NM_NO_LKBRD) && (lkbrd(1) || sys_status&SS_FINPUT)) {
-	if(sys_status&SS_FINPUT) {
-		if(lkbrd(1)==0xff00) {
-			close(inputfile);
-			sys_status^=SS_FINPUT;
-			return(0); }
-		if(read(inputfile,&c,1)!=1) {
-            close(inputfile);
-			sys_status^=SS_FINPUT;
-			return(0); }
-		if(c)	/* Regular character */
-		   i=c;
-		else {	/* Scan code */
-			if(read(inputfile,&c,1)!=1) {
-				close(inputfile);
-				sys_status^=SS_FINPUT;
-				return(0); }
-			i=c<<8; } }
-	else
-		i=lkbrd(0);
-	if(sys_status&SS_LCHAT && curatr!=color[clr_chatlocal])
-		attr(color[clr_chatlocal]);
-	if(i&0xff)
-		ch=i&0xff;
-	else {				 /* Alt or Function key hit */
-		i>>=8;
-		/*		 F1 - F10			Shift-F1 - Alt-F10			F11 - Alt-F12	*/
-		if((i>=0x3b &&i<=0x44) || (i>=0x54 &&i<=0x71) || (i>=0x85 &&i<=0x8c)) {
-			if(sys_status&SS_FINPUT)
-				return(0);							/* MACROS */
-			sprintf(str,"%s%sF%d.MAC",text_dir
-				,i<0x45 || (i>=0x85 && i<=0x86) ? nulstr
-				:i<0x5e || (i>=0x87 && i<=0x88) ? "SHFT-"
-				:i<0x68 || (i>=0x89 && i<=0x8a) ? "CTRL-" : "ALT-"
-				,i<0x45 ? i-0x3a : i<0x5e ? i-0x53 : i<0x68 ? i-0x5d
-				:i<0x72 ? i-0x67 : i<0x87 ? i-0x7a : i<0x89 ? i-0x7c
-				:i<0x8b ? i-0x7e : i-0x80);
-			if((inputfile=nopen(str,O_RDONLY))!=-1)
-				sys_status|=SS_FINPUT;
-			return(0); }
-		if(i>=0x78 && i<=0x81) {			/* Alt-# Quick Validation */
-			if(!(sys_status&SS_USERON)		/* can't quick-validate if not */
-				|| !useron.number
-				|| !(sys_misc&SM_QVALKEYS)) { /* or not valid user number */
-				beep(100,500);					 /* online yet */
-				nosound();
-				return(0); }
-			if((node_misc&NM_SYSPW || SYSOP) && !chksyspass(1))
-				return(0);
-			beep(1000,100);
-			beep(1500,100);
-			nosound();
-			if(i==0x81)
-				i=0;
-			else
-				i-=0x77;
-			useron.level=val_level[i];
-			useron.flags1=val_flags1[i];
-			useron.flags2=val_flags2[i];
-			useron.flags3=val_flags3[i];
-			useron.flags4=val_flags4[i];
-			useron.exempt=val_exempt[i];
-			useron.rest=val_rest[i];
-			now=time(NULL);
-			if(useron.expire<now && val_expire[i])
-				useron.expire=now+((long)val_expire[i]*24L*60L*60L);
-			else
-				useron.expire+=((long)val_expire[i]*24L*60L*60L);
-			putuserrec(useron.number,U_LEVEL,2,itoa(useron.level,str,10));
-			putuserrec(useron.number,U_FLAGS1,8,ultoa(useron.flags1,str,16));
-			putuserrec(useron.number,U_FLAGS2,8,ultoa(useron.flags2,str,16));
-			putuserrec(useron.number,U_FLAGS3,8,ultoa(useron.flags3,str,16));
-			putuserrec(useron.number,U_FLAGS4,8,ultoa(useron.flags4,str,16));
-			putuserrec(useron.number,U_EXEMPT,8
-				,ultoa(useron.exempt,str,16));
-			putuserrec(useron.number,U_REST,8
-				,ultoa(useron.rest,str,16));
-			putuserrec(useron.number,U_EXPIRE,8
-				,ultoa(useron.expire,str,16));
-			useron.cdt=adjustuserrec(useron.number,U_CDT,10,val_cdt[i]);
-			statusline();
-			return(0); }
-		switch(i) {
-			case 0x16:	  /* Alt-U	- Runs Uedit local only with user online */
-				sprintf(str,"%.*s",lbuflen,lbuf);
-				waitforsysop(1);
-				if((scrnbuf=MALLOC((node_scrnlen*80L)*2L))==NULL) {
-					errormsg(WHERE,ERR_ALLOC,nulstr,(node_scrnlen*80L)*2L);
-					return(CR); }
-				gettext(1,1,80,node_scrnlen-1,scrnbuf);
-				x=lclwx();
-				y=lclwy();
-				console&=~(CON_R_ECHO|CON_R_INPUT);
-				i=(sys_status&SS_TMPSYSOP);
-				if(!SYSOP) sys_status|=SS_TMPSYSOP;
-				useredit(0,1);
-				if(!i) sys_status&=~SS_TMPSYSOP;
-				lputc(FF);
-				puttext(1,1,80,node_scrnlen-1,scrnbuf);
-				FREE(scrnbuf);
-				lclxy(x,y);
-				statusline();
-				if(online==ON_REMOTE)
-					rioctl(IOFI);					/* flush input buffer */
-				console=con;
-				waitforsysop(0);
-				strcpy(lbuf,str);
-				lbuflen=strlen(lbuf);
-				return(0);
-			case 0x1f:	  /* Alt-S	- Toggles Spinning Cursor */
-				useron.misc^=SPIN;
-				return(0);
-			case 0x12:	  /* Alt-E	 - Toggle Remote echo and input */
-				if(online!=ON_REMOTE) return(0);
-				if(console&CON_R_ECHO) {
-					beep(500,50);
-					beep(1000,50);
-                    nosound();
-					waitforsysop(1);
-					console&=~(CON_R_ECHO|CON_R_INPUT);
-					j=bstrlen(text[Wait]);
-					for(i=0;i<j;i++)
-						bputs("\b \b"); }
-				else {
-					beep(1000,50);
-					beep(500,50);
-                    nosound();
-					j=bstrlen(text[Wait]);
-					for(i=0;i<j;i++)
-						outchar(SP);
-					console|=(CON_R_ECHO|CON_R_INPUT);
-					rioctl(IOFI);				/* flush input buffer */
-					waitforsysop(0); }
-				return(0);
-			case 0x10:	  /* Alt-Q	 - Toggles remote input */
-				if(online!=ON_REMOTE)
-					return(0);
-				console^=CON_R_INPUT;
-				if(console&CON_R_INPUT) {
-					beep(1000,50);
-					beep(500,50);
-                    nosound();
-					rioctl(IOSM|PAUSE|ABORT); }
-				else {
-					beep(500,50);
-					beep(1000,50);
-					nosound();
-					rioctl(IOCM|PAUSE|ABORT); }
-				rioctl(IOFI);			/* flush input buffer */
-				return(0);
-			case 0x19:		/* Alt-P   - Turns off sysop page */
-				nosound();
-				sys_status&=~SS_SYSPAGE;
-				return(0);
-			case 0x23:		/* Alt-H   - Hangs up on user */
-				hangup();
-				return(0);
-			case 0x1e:		/* Alt-A   - Alert Sysop when User's done */
-				sys_status^=SS_SYSALERT;
-				statusline();
-				return(0);
-			case 0x82:		/* Alt--   - Sub Time (5 min) */
-				starttime-=300;
-				return(0);
-			case 0x83:		/* Alt-+   - Add time (5 min)*/
-				starttime+=300;
-				return(0);
-			case 0x14:		/* Alt-T   - Temp SysOp */
-				if(!(sys_status&SS_TMPSYSOP) && node_misc&NM_SYSPW
-					&& !chksyspass(1))
-					return(0);
-				if(sys_misc&SM_L_SYSOP)
-					sys_status^=SS_TMPSYSOP;
-				statusline();
-				return(0);
-			case 0x2c:		/* Alt-Z	- Menu of local keys */
-				if((scrnbuf=MALLOC((node_scrnlen*80L)*2L))==NULL) {
-					errormsg(WHERE,ERR_ALLOC,nulstr,(node_scrnlen*80L)*2L);
-					return(CR); }
-				gettext(1,1,80,node_scrnlen,scrnbuf);
-				sprintf(str,"%sSBBSHELP.DAB",exec_dir);
-				if((file=nopen(str,O_RDONLY))==-1)
-					lputs("\7Can't open SBBSHELP");
-				else {
-					length=filelength(file);
-					if((helpbuf=MALLOC(length))==NULL)
-						lputs("\7Can't allocate for SBBSHELP");
-					else {
-						read(file,helpbuf,length);
-						close(file);
-						puttext(13,1,66,24,helpbuf);
-						FREE(helpbuf); } }
-				while(!lkbrd(1)) mswait(1);
-				if(lkbrd(1)==0x2c00)	/* suck up the alt-z */
-					lkbrd(0);
-				puttext(1,1,80,node_scrnlen,scrnbuf);
-				FREE(scrnbuf);
-                return(0);
-			case 0x2e:		/* Alt-C	- Sysop Chat */
-				if(sys_status&SS_LCHAT) {
-					sys_status^=SS_LCHAT;
-					return(CR); }
-				else {
-					sys_status|=SS_LCHAT;
-					SAVELINE;
-					localchat();
-					return(0); }
-			case 0x2d:	/* Alt-X exit after logoff */
-				getnodedat(node_num,&thisnode,1);
-				thisnode.misc^=NODE_DOWN;
-				putnodedat(node_num,thisnode);
-				statusline();
-				return(0);
-			case 0x47:	/* Home - Same as Ctrl-B */
-				return(2);	/* ctrl-b beginning of line */
-			case 0x8d:	/* Ctrl-Up Arrow - decrement statusline */
-				if(statline) {
-					statline--;
-					statusline(); }
-				return(0);
-			case 0x77:	/* Ctrl-Home up - top of status line info */
-				statline=1;
-				statusline();
-				return(0);
-			case 0x4b:		/* Left Arrow - same as ctrl-] */
-				return(0x1d);
-			case 0x4d:		/* Right Arrow - same as ctrl-f */
-				return(6);
-			case 0x48:		/* Up arrow - same as ctrl-^ */
-				return(0x1e);
-			case 0x50:		/* Down arrow - same as Ctrl-J */
-				return(LF);
-			case 0x4f:	  /* End	  - same as Ctrl-E */
-				return(5);	/* ctrl-e - end of line */
-			case 0x91:	  /* Ctrl-Dn Arrow - increment statusline */
-				if(statline<LAST_STAT_LINE) {
-					statline++;
-					statusline(); }
-				return(0);
-			case 0x75:	/* Ctrl-End - end of status line info */
-				statline=LAST_STAT_LINE;
-				statusline();
-				return(0);
-			case 0x52:	/* Insert */
-				return(0x1f);	/* ctrl-minus - insert mode */
-			case 0x53:	/* Delete */
-				return(0x7f);	/* ctrl-bkspc - del cur char */
-			case 0x26:	/* Alt-L  - Capture to cap_fname */
-				if(lclaes())
-					return(0);
-				if(sys_status&SS_CAP) {
-					sys_status^=SS_CAP;
-					fclose(capfile);
-#ifdef __MSDOS__
-					freedosmem=farcoreleft();	/* fclose frees memory */
-#endif
-					statusline();
-					return(0); }
-				x=lclwx();
-				y=lclwy();
-				atr=lclatr(LIGHTGRAY<<4);
-				STATUSLINE;
-				lclxy(1,node_scrnlen);
-				lputs("  Filename: ");
-				lputc(CLREOL);
-				console&=~(CON_R_INPUT|CON_R_ECHO);
-				getstr(cap_fname,40,K_UPPER|K_EDIT);
-				TEXTWINDOW;
-				lclxy(x,y);
-				lclatr(atr);
-                console=con;
-				if(cap_fname[0] &&
-					(capfile=fopen(cap_fname,"a"))==NULL)
-					bprintf("Couldn't open %s.\r\n",cap_fname);
-				else if(cap_fname[0]) {
-#ifdef __MSDOS__
-					freedosmem=farcoreleft();	/* fnopen allocates memory */
-#endif
-					sys_status|=SS_CAP; }
-				statusline();
-				return(0);
-			case 0x17:	/* Alt-I  - Interrupt node now */
-				getnodedat(node_num,&thisnode,1);
-				thisnode.misc^=NODE_INTR;
-				putnodedat(node_num,thisnode);
-				return(0);
-			case 0x13:	/* Alt-R  - Rerun node when caller hangs up */
-				getnodedat(node_num,&thisnode,1);
-				thisnode.misc^=NODE_RRUN;
-				putnodedat(node_num,thisnode);
-				statusline();
-				return(0);
-			case 0x31:	/* Alt-N  - Lock this node */
-				getnodedat(node_num,&thisnode,1);
-				thisnode.misc^=NODE_LOCK;
-				putnodedat(node_num,thisnode);
-				statusline();
-				return(0);
-			case 0x22:	/* Alt-G  - Guru Chat */
-				if(sys_status&SS_GURUCHAT) {
-					sys_status&=~SS_GURUCHAT;
-					return(CR); }
-				if(!total_gurus)
-					break;
-				for(i=0;i<total_gurus;i++)
-					if(chk_ar(guru[i]->ar,useron))
-						break;
-				if(i>=total_gurus)
-					i=0;
-				sprintf(str,"%s%s.DAT",ctrl_dir,guru[i]->code);
-				if((file=nopen(str,O_RDONLY))==-1) {
-					errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-					return(0); }
-				if((gurubuf=MALLOC(filelength(file)+1L))==NULL) {
-					close(file);
-					errormsg(WHERE,ERR_ALLOC,str,filelength(file)+1L);
-					return(0); }
-				read(file,gurubuf,filelength(file));
-				gurubuf[filelength(file)]=0;
-				close(file);
-				localguru(gurubuf,i);
-				FREE(gurubuf);
-				return(CR);
-			case 0x20:	/* Alt-D - Shell to DOS */
-				sprintf(str,"%.*s",lbuflen,lbuf);
-				waitforsysop(1);
-				if((scrnbuf=MALLOC((node_scrnlen*80L)*2L))==NULL) {
-					errormsg(WHERE,ERR_ALLOC,nulstr,(node_scrnlen*80L)*2L);
-					return(CR); }
-				gettext(1,1,80,node_scrnlen,scrnbuf);
-				lclatr(LIGHTGRAY);
-				x=lclwx();
-				y=lclwy();
-				lclini(node_scrnlen);
-				lputc(FF);
-				if(!(node_misc&NM_SYSPW) || chksyspass(1))
-					external(comspec,0);
-				lclini(node_scrnlen-1);
-				puttext(1,1,80,node_scrnlen,scrnbuf);
-				FREE(scrnbuf);
-				lclxy(x,y);
-				if(online==ON_REMOTE)
-					rioctl(IOFI);	/* flush input buffer */
-				waitforsysop(0);
-				strcpy(lbuf,str);
-				lbuflen=strlen(lbuf);
-				timeout=time(NULL);
-				return(0);
-			case 0x49:	/* PgUp - local ASCII upload */
-				if(sys_status&SS_FINPUT || lclaes() || inside)
-					return(0);
-				inside=1;
-				x=lclwx();
-				y=lclwy();
-				atr=lclatr(LIGHTGRAY<<4);
-				STATUSLINE;
-				lclxy(1,node_scrnlen);
-				lputs("  Filename: ");
-				lputc(CLREOL);
-				console&=~(CON_R_INPUT|CON_R_ECHO);
-				getstr(str,60,K_UPPER);
-				if(str[0] && (inputfile=nopen(str,O_RDONLY))!=-1)
-					sys_status|=SS_FINPUT;
-				statusline();
-				lclxy(x,y);
-				lclatr(atr);
-				console=con;
-				inside=0;
-				return(0);
-			case 0xff:	/* ctrl-break - bail immediately */
-				lputs("\r\nTerminate BBS (y/N) ? ");
-				while((i=lkbrd(0))==0);
-				if(toupper(i&0xff)=='Y') {  /* Ctrl-brk yes/no */
-					lputs("Yes\r\n");
-					bail(0); }
-				lputs("No\r\n");
-				sys_status|=SS_ABORT;
-				return(0); }
-		return(0); } }
-
-if(!ch && console&CON_R_INPUT && rioctl(RXBC)) {
-	if(sys_status&SS_LCHAT && curatr!=color[clr_chatremote])
-		attr(color[clr_chatremote]);
-	ch=incom();
-	if(node_misc&NM_7BITONLY
-		&& (!(sys_status&SS_USERON) || useron.misc&NO_EXASCII))
-		ch&=0x7f; }
-if(ch)
-	timeout=time(NULL);
-if(ch==3) {  /* Ctrl-C Abort */
-	sys_status|=SS_ABORT;
-	if(mode&K_SPIN) /* back space once if on spinning cursor */
-		bputs("\b \b");
-	return(0); }
-if(ch==26 && action!=NODE_PCHT) {	 /* Ctrl-Z toggle raw input mode */
-    if(mode&K_SPIN)
-        bputs("\b ");
-    SAVELINE;
-	attr(LIGHTGRAY);
-    CRLF;
-    bputs(text[RawMsgInputModeIsNow]);
-    if(console&CON_RAW_IN)
-        bputs(text[OFF]);
-    else
-        bputs(text[ON]);
-    console^=CON_RAW_IN;
-    CRLF;
-	CRLF;
-    RESTORELINE;
-    lncntr=0;
-	if(action!=NODE_MAIN && action!=NODE_XFER)
-		return(26);
-	return(0); }
-if(console&CON_RAW_IN)	{ /* ignore ctrl-key commands if in raw mode */
-	if(!ch && (!(mode&K_GETSTR) || mode&K_LOWPRIO || node_misc&NM_LOWPRIO))
-		mswait(0);
-	return(ch);
-}
-if(ch<SP) { 				/* Control chars */
-	if(ch==LF)				/* ignore LF's in not in raw mode */
-		return(0);
-	if(ch==15) {	/* Ctrl-O toggles pause temporarily */
-		useron.misc^=UPAUSE;
-		return(0); }
-	if(ch==0x10) {	/* Ctrl-P Private node-node comm */
-		if(!(sys_status&SS_USERON))
-			return(0);			 /* keep from being recursive */
-		if(mode&K_SPIN)
-			bputs("\b ");
-		if(sys_status&SS_SPLITP) {
-			if((scrnbuf=MALLOC((24L*80L)*2L))==NULL) {
-				errormsg(WHERE,ERR_ALLOC,nulstr,(24L*80L)*2L);
-				return(CR); }
-			gettext(1,1,80,24,scrnbuf);
-			x=lclwx();
-			y=lclwy();
-			CLS; }
-		else {
-			SAVELINE;
-			attr(LIGHTGRAY);
-			CRLF; }
-		nodesync(); 	/* read any waiting messages */
-		nodemsg();		/* send a message */
-		SYNC;
-		if(sys_status&SS_SPLITP) {
-			lncntr=0;
-			CLS;
-			for(i=0;i<((24*80)-1)*2;i+=2) {
-				if(scrnbuf[i+1]!=curatr)
-					attr(scrnbuf[i+1]);
-				outchar(scrnbuf[i]); }
-			FREE(scrnbuf);
-			GOTOXY(x,y); }
-		else {
-			CRLF;
-			RESTORELINE; }
-		lncntr=0;
-		return(0); }
-
-	if(ch==21) { /* Ctrl-U Users online */
-		if(!(sys_status&SS_USERON))
-			return(0);
-		if(mode&K_SPIN)
-			bputs("\b ");
-		if(sys_status&SS_SPLITP) {
-			if((scrnbuf=MALLOC((24L*80L)*2L))==NULL) {
-				errormsg(WHERE,ERR_ALLOC,nulstr,(24L*80L)*2L);
-				return(CR); }
-			gettext(1,1,80,24,scrnbuf);
-			x=lclwx();
-			y=lclwy();
-			CLS; }
-        else {
-			SAVELINE;
-			attr(LIGHTGRAY);
-			CRLF; }
-		whos_online(1); 	/* list users */
-		ASYNC;
-		if(sys_status&SS_SPLITP) {
-			CRLF;
-			nodesync();
-			pause();
-			CLS;
-			for(i=0;i<((24*80)-1)*2;i+=2) {
-				if(scrnbuf[i+1]!=curatr)
-					attr(scrnbuf[i+1]);
-				outchar(scrnbuf[i]); }
-			FREE(scrnbuf);
-			GOTOXY(x,y); }
-		else {
-			CRLF;
-            RESTORELINE; }
-		lncntr=0;
-		return(0); }
-	if(ch==20 && !(sys_status&SS_SPLITP)) { /* Ctrl-T Time information */
-		if(!(sys_status&SS_USERON))
-			return(0);
-		if(mode&K_SPIN)
-			bputs("\b ");
-		SAVELINE;
-		attr(LIGHTGRAY);
-		now=time(NULL);
-		bprintf(text[TiLogon],timestr(&logontime));
-		bprintf(text[TiNow],timestr(&now));
-		bprintf(text[TiTimeon]
-			,sectostr(now-logontime,tmp));
-		bprintf(text[TiTimeLeft]
-			,sectostr(timeleft,tmp));
-		SYNC;
-		RESTORELINE;
-		lncntr=0;
-		return(0); }
-	if(ch==11 && !(sys_status&SS_SPLITP)) {  /*  Ctrl-k Control key menu */
-		if(!(sys_status&SS_USERON))
-			return(0);
-		if(mode&K_SPIN)
-			bputs("\b ");
-		SAVELINE;
-		attr(LIGHTGRAY);
-		lncntr=0;
-		bputs(text[ControlKeyMenu]);
-		ASYNC;
-		RESTORELINE;
-		lncntr=0;
-		return(0); }
-
-	if(ch==ESC && console&CON_R_INPUT) {
-		for(i=0;i<20 && !rioctl(RXBC);i++)
-			mswait(1);
-		if(i==20)
-			return(ESC);
-		ch=incom();
-		if(ch!='[') {
-			ungetkey(ESC);
-			ungetkey(ch);
-			return(0); }
-		i=j=0;
-		autoterm|=ANSI; 			/* <ESC>[x means they have ANSI */
-		if(!(useron.misc&ANSI) && useron.misc&AUTOTERM && sys_status&SS_USERON
-			&& useron.number) {
-			useron.misc|=ANSI;
-			putuserrec(useron.number,U_MISC,8,ultoa(useron.misc,str,16)); }
-		while(i<10 && j<30) {		/* up to 3 seconds */
-			if(rioctl(RXBC)) {
-				ch=incom();
-				if(ch!=';' && !isdigit(ch) && ch!='R') {    /* other ANSI */
-					switch(ch) {
-						case 'A':
-							return(0x1e);	/* ctrl-^ (up arrow) */
-						case 'B':
-							return(LF); 	/* ctrl-j (dn arrow) */
-						case 'C':
-							return(0x6);	/* ctrl-f (rt arrow) */
-						case 'D':
-							return(0x1d);	/* ctrl-] (lf arrow) */
-						case 'H':
-							return(0x2);	/* ctrl-b (beg line) */
-						case 'K':
-							return(0x5);	/* ctrl-e (end line) */
-						}
-					ungetkey(ESC);
-					ungetkey('[');
-					for(j=0;j<i;j++)
-						ungetkey(str[j]);
-					ungetkey(ch);
-					return(0); }
-				if(ch=='R') {       /* cursor position report */
-					if(i && !(useron.rows)) {	/* auto-detect rows */
-						str[i]=0;
-						rows=atoi(str);
-						if(rows<5 || rows>99) rows=24; }
-					return(0); }
-				str[i++]=ch; }
-			else {
-				mswait(100);
-				j++; } }
-
-		ungetkey(ESC);		/* should only get here if time-out */
-		ungetkey('[');
-		for(j=0;j<i;j++)
-			ungetkey(str[j]);
-		return(0); }
-
-		}	/* end of control chars */
-
-if(!ch && (!(mode&K_GETSTR) || mode&K_LOWPRIO || node_misc&NM_LOWPRIO))
-	mswait(0);
-return(ch);
-}
-
diff --git a/src/sbbs2/con_mid.c b/src/sbbs2/con_mid.c
deleted file mode 100644
index 1925c4d173..0000000000
--- a/src/sbbs2/con_mid.c
+++ /dev/null
@@ -1,813 +0,0 @@
-#line 1 "CON_MID.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-
-extern char *wday[];	/* 3 char days of week */
-
-/****************************************************************************/
-/* Waits for remote or local user to hit a key. Inactivity timer is checked */
-/* and hangs up if inactive for 4 minutes. Returns key hit, or uppercase of */
-/* key hit if mode&K_UPPER or key out of KEY BUFFER. Does not print key.    */
-/* Called from functions all over the place.                                */
-/****************************************************************************/
-char getkey(long mode)
-{
-	char ch,coldkey,c=0,spin=random(5);
-
-if(!online)
-    return(0);
-sys_status&=~SS_ABORT;
-if((sys_status&SS_USERON || action==NODE_DFLT) && !(mode&K_GETSTR))
-    mode|=(useron.misc&SPIN);
-lncntr=0;
-timeout=time(NULL);
-if(mode&K_SPIN)
-    outchar(' ');
-do {
-    checkline();    /* check to make sure remote user is still online */
-	if(online==ON_REMOTE && console&CON_R_INPUT && rioctl(IOSTATE)&ABORT) {
-        rioctl(IOCS|ABORT);
-        sys_status|=SS_ABORT;
-        if(mode&K_SPIN) /* back space once if on spinning cursor */
-            bputs("\b \b");
-        return(0); }
-	if(sys_status&SS_SYSPAGE)
-		beep(random(800),100);
-    if(mode&K_SPIN)
-        switch(spin) {
-            case 0:
-                switch(c++) {
-                    case 0:
-                        outchar(BS);
-                        outchar('�');
-                        break;
-                    case 10:
-                        outchar(BS);
-                        outchar('/');
-                        break;
-                    case 20:
-                        outchar(BS);
-                        outchar('�');
-                        break;
-                    case 30:
-                        outchar(BS);
-                        outchar('\\');
-                        break;
-                    case 40:
-                        c=0;
-                        break;
-                    default:
-                        if(!inDV && !(node_misc&NM_WINOS2))
-							mswait(DELAY_SPIN);
-                        break;  }
-                break;
-            case 1:
-                switch(c++) {
-                    case 0:
-                        outchar(BS);
-                        outchar('�');
-                        break;
-                    case 10:
-                        outchar(BS);
-                        outchar('�');
-                        break;
-                    case 20:
-                        outchar(BS);
-                        outchar('�');
-                        break;
-                    case 30:
-                        outchar(BS);
-                        outchar('�');
-                        break;
-                    case 40:
-                        outchar(BS);
-                        outchar('�');
-                        break;
-                    case 50:
-                        outchar(BS);
-                        outchar('�');
-                        break;
-                    case 60:
-                        c=0;
-                        break;
-                    default:
-                        if(!inDV && !(node_misc&NM_WINOS2))
-							mswait(DELAY_SPIN);
-                        break;  }
-                break;
-            case 2:
-                switch(c++) {
-                    case 0:
-                        outchar(BS);
-                        outchar('-');
-                        break;
-                    case 10:
-                        outchar(BS);
-                        outchar('=');
-                        break;
-                    case 20:
-                        outchar(BS);
-                        outchar('�');
-                        break;
-                    case 30:
-                        outchar(BS);
-                        outchar('=');
-                        break;
-                    case 40:
-                        c=0;
-                        break;
-                    default:
-                        if(!inDV && !(node_misc&NM_WINOS2))
-							mswait(DELAY_SPIN);
-                        break;  }
-                break;
-            case 3:
-                switch(c++) {
-                    case 0:
-                        outchar(BS);
-                        outchar('�');
-                        break;
-                    case 10:
-                        outchar(BS);
-                        outchar('�');
-                        break;
-                    case 20:
-                        outchar(BS);
-                        outchar('�');
-                        break;
-                    case 30:
-                        outchar(BS);
-                        outchar('�');
-                        break;
-                    case 40:
-                        c=0;
-                        break;
-                    default:
-                        if(!inDV && !(node_misc&NM_WINOS2))
-							mswait(DELAY_SPIN);
-                        break;  }
-                break;
-            case 4:
-                switch(c++) {
-                    case 0:
-                        outchar(BS);
-                        outchar('�');
-                        break;
-                    case 10:
-                        outchar(BS);
-                        outchar('�');
-                        break;
-                    case 20:
-                        outchar(BS);
-                        outchar('�');
-                        break;
-                    case 30:
-                        outchar(BS);
-                        outchar('�');
-                        break;
-                    case 40:
-                        c=0;
-                        break;
-                    default:
-                        if(!inDV && !(node_misc&NM_WINOS2))
-							mswait(DELAY_SPIN);
-                        break;  }
-                break; }
-    if(keybuftop!=keybufbot) {
-        ch=keybuf[keybufbot++];
-        if(keybufbot==KEY_BUFSIZE)
-            keybufbot=0; }
-    else
-        ch=inkey(mode);
-    if(sys_status&SS_ABORT)
-        return(0);
-    now=time(NULL);
-    if(ch) {
-        if(mode&K_NUMBER && isprint(ch) && !isdigit(ch))
-            continue;
-        if(mode&K_ALPHA && isprint(ch) && !isalpha(ch))
-            continue;
-        if(mode&K_NOEXASC && ch&0x80)
-            continue;
-        if(mode&K_SPIN)
-            bputs("\b \b");
-		if(mode&K_COLD && ch>SP && useron.misc&COLDKEYS) {
-			if(mode&K_UPPER)
-				outchar(toupper(ch));
-			else
-				outchar(ch);
-			while((coldkey=inkey(mode))==0 && online && !(sys_status&SS_ABORT))
-				checkline();
-			bputs("\b \b");
-			if(coldkey==BS)
-				continue;
-			if(coldkey>SP)
-				ungetkey(coldkey); }
-        if(mode&K_UPPER)
-            return(toupper(ch));
-        return(ch); }
-    if(sys_status&SS_USERON && !(sys_status&SS_LCHAT)) gettimeleft();
-    else if(online &&
-        ((node_dollars_per_call && now-answertime>SEC_BILLING)
-        || (now-answertime>SEC_LOGON && !(sys_status&SS_LCHAT)))) {
-        console&=~(CON_R_ECHOX|CON_L_ECHOX);
-        console|=(CON_R_ECHO|CON_L_ECHO);
-        bputs(text[TakenTooLongToLogon]);
-        hangup(); }
-	if(sys_status&SS_USERON && online && (timeleft/60)<(5-timeleft_warn)
-		&& !SYSOP && !(sys_status&SS_LCHAT)) {
-        timeleft_warn=5-(timeleft/60);
-        SAVELINE;
-		attr(LIGHTGRAY);
-        bprintf(text[OnlyXminutesLeft]
-			,((ushort)timeleft/60)+1,(timeleft/60) ? "s" : nulstr);
-        RESTORELINE; }
-
-	if(online==ON_LOCAL && node_misc&NM_NO_INACT)
-		timeout=now;
-	if(now-timeout>=sec_warn) { 					/* warning */
-        if(sys_status&SS_USERON) {
-            SAVELINE;
-            bputs(text[AreYouThere]); }
-        else
-            bputs("\7\7");
-		while(!inkey(0) && online && now-timeout>=sec_warn) {
-            now=time(NULL);
-			if(now-timeout>=sec_hangup) {
-                if(online==ON_REMOTE) {
-                    console|=CON_R_ECHO;
-                    console&=~CON_R_ECHOX; }
-                bputs(text[CallBackWhenYoureThere]);
-                logline(nulstr,"Inactive");
-                hangup();
-                return(0); }
-            mswait(100); }
-        if(sys_status&SS_USERON) {
-            bputs("\r\1n\1>");
-            RESTORELINE; }
-        timeout=now; }
-
-    } while(online);
-return(0);
-}
-
-/****************************************************************************/
-/* This function lists users that are online.                               */
-/* If listself is true, it will list the current node.                      */
-/* Returns number of active nodes (not including current node).             */
-/****************************************************************************/
-int whos_online(char listself)
-{
-    int i,j;
-    node_t node;
-
-CRLF;
-bputs(text[NodeLstHdr]);
-for(j=0,i=1;i<=sys_nodes && i<=sys_lastnode;i++) {
-    getnodedat(i,&node,0);
-    if(i==node_num) {
-        if(listself)
-            printnodedat(i,node);
-        continue; }
-    if(node.status==NODE_INUSE || (SYSOP && node.status==NODE_QUIET)) {
-        printnodedat(i,node);
-        if(!lastnodemsg)
-            lastnodemsg=i;
-        j++; } }
-if(!j)
-    bputs(text[NoOtherActiveNodes]);
-return(j);
-}
-
-/****************************************************************************/
-/* Displays the information for node number 'number' contained in 'node'    */
-/****************************************************************************/
-void printnodedat(uint number, node_t node)
-{
-    uint i;
-    char hour,mer[3];
-
-attr(color[clr_nodenum]);
-bprintf("%3d  ",number);
-attr(color[clr_nodestatus]);
-switch(node.status) {
-    case NODE_WFC:
-        bputs("Waiting for call");
-        break;
-    case NODE_OFFLINE:
-        bputs("Offline");
-        break;
-    case NODE_NETTING:
-        bputs("Networking");
-        break;
-    case NODE_LOGON:
-        bputs("At logon prompt");
-        break;
-    case NODE_EVENT_WAITING:
-        bputs("Waiting for all nodes to become inactive");
-        break;
-    case NODE_EVENT_LIMBO:
-        bprintf("Waiting for node %d to finish external event",node.aux);
-        break;
-    case NODE_EVENT_RUNNING:
-        bputs("Running external event");
-        break;
-    case NODE_NEWUSER:
-        attr(color[clr_nodeuser]);
-        bputs("New user");
-        attr(color[clr_nodestatus]);
-        bputs(" applying for access ");
-        if(!node.connection)
-            bputs("Locally");
-        else
-            bprintf("at %ubps",node.connection);
-        break;
-    case NODE_QUIET:
-        if(!SYSOP) {
-            bputs("Waiting for call");
-            break; }
-    case NODE_INUSE:
-		if(node.misc&NODE_EXT) {
-			getnodeext(number,tmp);
-			bputs(tmp);
-			break; }
-        attr(color[clr_nodeuser]);
-        if(node.misc&NODE_ANON && !SYSOP)
-            bputs("UNKNOWN USER");
-        else
-            bputs(username(node.useron,tmp));
-        attr(color[clr_nodestatus]);
-        bputs(" ");
-        switch(node.action) {
-            case NODE_MAIN:
-                bputs("at main menu");
-                break;
-            case NODE_RMSG:
-                bputs("reading messages");
-                break;
-            case NODE_RMAL:
-                bputs("reading mail");
-                break;
-            case NODE_RSML:
-                bputs("reading sent mail");
-                break;
-            case NODE_RTXT:
-                bputs("reading text files");
-                break;
-            case NODE_PMSG:
-                bputs("posting message");
-                break;
-            case NODE_SMAL:
-                bputs("sending mail");
-                break;
-            case NODE_AMSG:
-                bputs("posting auto-message");
-                break;
-            case NODE_XTRN:
-                if(!node.aux)
-                    bputs("at external program menu");
-                else {
-                    bputs("running ");
-                    i=node.aux-1;
-					if(SYSOP || chk_ar(xtrn[i]->ar,useron))
-                        bputs(xtrn[node.aux-1]->name);
-                    else
-                        bputs("external program"); }
-                break;
-            case NODE_DFLT:
-                bputs("changing defaults");
-                break;
-            case NODE_XFER:
-                bputs("at transfer menu");
-                break;
-            case NODE_RFSD:
-                bprintf("retrieving from device #%d",node.aux);
-                break;
-            case NODE_DLNG:
-                bprintf("downloading");
-                break;
-            case NODE_ULNG:
-                bputs("uploading");
-                break;
-            case NODE_BXFR:
-                bputs("transferring bidirectional");
-                break;
-            case NODE_LFIL:
-                bputs("listing files");
-                break;
-            case NODE_LOGN:
-                bputs("logging on");
-                break;
-            case NODE_LCHT:
-                bprintf("in local chat with %s",sys_op);
-                break;
-            case NODE_MCHT:
-                if(node.aux) {
-                    bprintf("in multinode chat channel %d",node.aux&0xff);
-                    if(node.aux&0x1f00) { /* password */
-                        outchar('*');
-                        if(SYSOP)
-                            bprintf(" %s",unpackchatpass(tmp,node)); } }
-                else
-                    bputs("in multinode global chat channel");
-                break;
-            case NODE_PAGE:
-                bprintf("paging node %u for private chat",node.aux);
-                break;
-            case NODE_PCHT:
-                bprintf("in private chat with node %u",node.aux);
-                break;
-            case NODE_GCHT:
-				i=node.aux;
-				if(i>=total_gurus)
-					i=0;
-				bprintf("chatting with %s",guru[i]->name);
-                break;
-            case NODE_CHAT:
-                bputs("in chat section");
-                break;
-            case NODE_TQWK:
-                bputs("transferring QWK packet");
-                break;
-            case NODE_SYSP:
-                bputs("performing sysop activities");
-                break;
-            default:
-                bputs(itoa(node.action,tmp,10));
-                break;  }
-        if(!node.connection)
-            bputs(" locally");
-        else
-            bprintf(" at %ubps",node.connection);
-        if(node.action==NODE_DLNG) {
-            if(sys_misc&SM_MILITARY) {
-                hour=node.aux/60;
-                mer[0]=0; }
-            else if((node.aux/60)>=12) {
-                if(node.aux/60==12)
-                    hour=12;
-                else
-                    hour=(node.aux/60)-12;
-                strcpy(mer,"pm"); }
-            else {
-                if((node.aux/60)==0)    /* 12 midnite */
-                    hour=12;
-                else hour=node.aux/60;
-                strcpy(mer,"am"); }
-            bprintf(" ETA %02d:%02d %s"
-                ,hour,node.aux%60,mer); }
-        break; }
-i=NODE_LOCK;
-if(node.status==NODE_INUSE || SYSOP)
-	i|=NODE_POFF|NODE_AOFF|NODE_MSGW|NODE_NMSG;
-if(node.misc&i) {
-    bputs(" (");
-	if(node.misc&(i&NODE_AOFF))
-        outchar('A');
-    if(node.misc&NODE_LOCK)
-        outchar('L');
-	if(node.misc&(i&(NODE_MSGW|NODE_NMSG)))
-        outchar('M');
-	if(node.misc&(i&NODE_POFF))
-        outchar('P');
-    outchar(')'); }
-if(SYSOP && ((node.misc
-    &(NODE_ANON|NODE_UDAT|NODE_INTR|NODE_RRUN|NODE_EVENT|NODE_DOWN))
-    || node.status==NODE_QUIET)) {
-    bputs(" [");
-    if(node.misc&NODE_ANON)
-        outchar('A');
-    if(node.misc&NODE_INTR)
-        outchar('I');
-    if(node.misc&NODE_RRUN)
-        outchar('R');
-    if(node.misc&NODE_UDAT)
-        outchar('U');
-    if(node.status==NODE_QUIET)
-        outchar('Q');
-    if(node.misc&NODE_EVENT)
-        outchar('E');
-    if(node.misc&NODE_DOWN)
-        outchar('D');
-    outchar(']'); }
-if(node.errors && SYSOP) {
-    attr(color[clr_err]);
-	bprintf(" %d error%c",node.errors, node.errors>1 ? 's' : '\0' ); }
-attr(LIGHTGRAY);
-CRLF;
-}
-
-/****************************************************************************/
-/* Prints/updates the local status line (line #25) with the user/system     */
-/* information. Which info depends on value of statline.                    */
-/* Called from several functions                                            */
-/****************************************************************************/
-void statusline()
-{
-    int row,col,atr;
-    char tmp1[128],tmp2[256],tmp3[256],age;
-
-#ifndef __OS2__
-if(lclaes())
-    return;
-#endif
-col=lclwx();
-row=lclwy();
-STATUSLINE;
-lclxy(1,node_scrnlen);
-age=getage(useron.birth);
-if(sys_status&(SS_CAP|SS_TMPSYSOP)) {
-    atr=lclatr((LIGHTGRAY<<4)|BLINK);
-    sys_status&SS_CAP ? lputc('C') : lputc(SP);
-    sys_status&SS_TMPSYSOP ? lputc('*') : lputc(SP);
-    lclatr(LIGHTGRAY<<4); }
-else {
-    atr=lclatr(LIGHTGRAY<<4);
-    lputs("  "); }
-switch(statline) {
-    case -1:
-        lputs("Terminal:  Alt-X Exit  Alt-D DOS  Alt-H Hangup  "
-            "Alt-L Logon  Alt-U User Edit");
-        break;
-    case 0:     /* Alias ML Password Modem Birthday Age Sex Phone */
-        lprintf("%-24.24s %02d %-8.8s %-8.8s %-8.8s %02d %c %s"
-            ,useron.alias,useron.level,sys_misc&SM_ECHO_PW ? useron.pass:"XXXX"
-            ,useron.modem,useron.birth,age,useron.sex,useron.phone);
-        break;
-    case 1:     /* Alias ML RealName Alt-Z for Help */
-        lprintf("%-24.24s %02d %-25.25s  "
-            ,useron.alias,useron.level,useron.name);
-        lputs("Alt-Z for Help");
-        break;
-    case 2:     /* Alias ML RealName Age Sex Phone */
-        lprintf("%-24.24s %02d %-25.25s  %02d %c %s"
-            ,useron.alias,useron.level,useron.name,age,useron.sex,useron.phone);
-        break;
-    case 3:     /* Alias ML Location Phone */
-        lprintf("%-24.24s %02d %-30.30s  %s"
-            ,useron.alias,useron.level,useron.location,useron.phone);
-        break;
-    case 4:     /* Alias ML Note Phone */
-        lprintf("%-24.24s %02d %-30.30s  %s"
-            ,useron.alias,useron.level,useron.note,useron.phone);
-        break;
-    case 5:     /* Alias ML MF Age Sex Phone */
-        lprintf("%-24.24s %02d %-26.26s %02d %c %s"
-            ,useron.alias,useron.level,ltoaf(useron.flags1,tmp1)
-            ,age,useron.sex,useron.phone);
-        break;
-    case 6:     /* Alias ML MF Expiration */
-        lprintf("%-24.24s %02d %-26.26s Exp: %s"
-            ,useron.alias,useron.level,ltoaf(useron.flags1,tmp1)
-            ,unixtodstr(useron.expire,tmp2));
-        break;
-    case 7:     /* Alias ML Firston Laston Expire */
-        lprintf("%-24.24s %02d First: %s Last: %s Exp: %s"
-            ,useron.alias,useron.level,unixtodstr(useron.firston,tmp1)
-            ,unixtodstr(useron.laston,tmp2),unixtodstr(useron.expire,tmp3));
-        break;
-    case 8:     /* Alias Credits Minutes Expire */
-        lprintf("%-24.24s Cdt: %-13.13s Min: %-10luExp: %s"
-            ,useron.alias,ultoac(useron.cdt,tmp1),useron.min
-            ,unixtodstr(useron.expire,tmp2));
-        break;
-    case 9:    /* Exemptions Restrictions */
-        lprintf("  Exempt:%-26.26s   Restrict:%s"
-            ,ltoaf(useron.exempt,tmp1),ltoaf(useron.rest,tmp2));
-        break;
-    case 10:    /* Computer Modem Handle*/
-        lprintf("Comp: %-30.30s  Modem: %-8.8s  Handle: %s"
-            ,useron.comp,connection,useron.handle);
-        break;
-    case 11:    /* StreetAddress Location Zip */
-        lprintf("%-30.30s %-30.30s %s"
-            ,useron.address,useron.location,useron.zipcode);
-        break;
-    case 12:    /* UploadBytes Uploads DownloadBytes Downloads Leeches */
-        lprintf("Uloads: %-13.13s / %-5u Dloads: %-13.13s / %-5u Leech: %u"
-            ,ultoac(useron.ulb,tmp1),useron.uls
-            ,ultoac(useron.dlb,tmp2),useron.dls,useron.leech);
-        break;
-    case 13:    /* Posts Emails Fbacks Waiting Logons Timeon */
-        lprintf("P: %-5u E: %-5u F: %-5u W: %-5u L: %-5u T: %-5u"
-            ,useron.posts,useron.emails,useron.fbacks,getmail(useron.number,0)
-            ,useron.logons,useron.timeon);
-        break;
-    case 14:    /* NetMail forwarding address */
-        lprintf("NetMail: %s",useron.netmail);
-        break;
-    case 15:    /* Comment */
-        lprintf("Comment: %s",useron.comment);
-        break;
-        }
-lputc(CLREOL);
-lclxy(75,lclwy());
-getnodedat(node_num,&thisnode,0);
-if(sys_status&SS_SYSALERT
-    || thisnode.misc&(NODE_RRUN|NODE_DOWN|NODE_LOCK|NODE_EVENT)) {
-    lclatr((LIGHTGRAY<<4)|BLINK);
-    sys_status&SS_SYSALERT ? lputc('A'):lputc(SP);
-    thisnode.misc&NODE_RRUN ? lputc('R'):lputc(SP);
-    thisnode.misc&NODE_DOWN ? lputc('D'):lputc(SP);
-    thisnode.misc&NODE_LOCK ? lputc('L'):lputc(SP);
-    thisnode.misc&NODE_EVENT ? lputc('E'):lputc(SP); }
-TEXTWINDOW;
-lclxy(col,row);
-lclatr(atr);
-}
-
-/****************************************************************************/
-/* Prints PAUSE message and waits for a key stoke                           */
-/****************************************************************************/
-void pause()
-{
-	char	ch;
-	uchar	tempattrs=curatr; /* was lclatr(-1) */
-	int 	i,j;
-	long	l=K_UPPER;
-
-RIOSYNC(0);
-if(sys_status&SS_ABORT)
-    return;
-lncntr=0;
-if(online==ON_REMOTE)
-    rioctl(IOFI);
-bputs(text[Pause]);
-j=bstrlen(text[Pause]);
-if(sys_status&SS_USERON && !(useron.misc&NO_EXASCII) && !(useron.misc&WIP))
-	l|=K_SPIN;
-
-ch=getkey(l);
-if(ch==text[YN][1] || ch=='Q')
-	sys_status|=SS_ABORT;
-else if(ch==LF)
-	lncntr=rows-2;	/* down arrow == display one more line */
-if(text[Pause][0]!='@')
-	for(i=0;i<j;i++)
-		bputs("\b \b");
-getnodedat(node_num,&thisnode,0);
-nodesync();
-attr(tempattrs);
-}
-
-void getlines()
-{
-if(useron.misc&ANSI && !useron.rows         /* Auto-detect rows */
-    && online==ON_REMOTE) {                 /* Remote */
-    SYNC;   
-    putcom("\x1b[s\x1b[99B\x1b[6n\x1b[u");
-    while(online && !rioctl(RXBC) && !lkbrd(1))
-        checkline();
-    inkey(0); }
-
-}
-
-
-/****************************************************************************/
-/* Prints a file remotely and locally, interpreting ^A sequences, checks    */
-/* for pauses, aborts and ANSI. 'str' is the path of the file to print      */
-/* Called from functions menu and text_sec                                  */
-/****************************************************************************/
-void printfile(char *str, int mode)
-{
-	char HUGE16 *buf;
-	int file,wip=0,rip=0;
-	long length,savcon=console;
-	FILE *stream;
-
-if(strstr(str,".WIP"))
-	wip=1;
-if(strstr(str,".RIP"))
-	rip=1;
-
-if(mode&P_NOABORT || wip || rip) {
-	if(online==ON_REMOTE && console&CON_R_ECHO) {
-        rioctl(IOCM|ABORT);
-        rioctl(IOCS|ABORT); }
-    sys_status&=~SS_ABORT; }
-
-if(!tos && !wip && !rip)
-	CRLF;
-
-if((stream=fnopen(&file,str,O_RDONLY))==NULL) {
-    bputs(text[FileNotFound]);
-    if(SYSOP) bputs(str);
-    CRLF;
-	return; }
-
-if(wip || rip || !(console&CON_L_ECHO)) {
-	if(online!=ON_REMOTE || !(console&CON_R_ECHO)) {
-		fclose(stream);
-		return; }
-	console&=~CON_L_ECHO;
-	lprintf("PRINTFILE (Remote Only): %s\r\n",str);  }
-if(mode&P_OPENCLOSE) {
-	length=filelength(file);
-	if((buf=MALLOC(length+1L))==NULL) {
-		close(file);
-		console=savcon;
-		errormsg(WHERE,ERR_ALLOC,str,length+1L);
-		return; }
-	buf[lread(file,buf,length)]=0;
-	fclose(stream);
-	putmsg(buf,mode);
-	FREE((char *)buf); }
-else {
-	putmsg_fp(stream,filelength(file),mode);
-	fclose(stream); }
-if((mode&P_NOABORT || wip || rip) && online==ON_REMOTE) {
-    SYNC;
-    rioctl(IOSM|ABORT); }
-if(rip)
-	getlines();
-console=savcon;
-}
-
-void printtail(char *str, int lines, int mode)
-{
-	char HUGE16 *buf,HUGE16 *p;
-	int file,cur=0;
-	ulong length,l;
-
-if(mode&P_NOABORT) {
-    if(online==ON_REMOTE) {
-        rioctl(IOCM|ABORT);
-        rioctl(IOCS|ABORT); }
-    sys_status&=~SS_ABORT; }
-strupr(str);
-if(!tos) {
-    CRLF; }
-if((file=nopen(str,O_RDONLY))==-1) {
-    bputs(text[FileNotFound]);
-    if(SYSOP) bputs(str);
-    CRLF;
-	return; }
-length=filelength(file);
-if((buf=MALLOC(length+1L))==NULL) {
-    close(file);
-	errormsg(WHERE,ERR_ALLOC,str,length+1L);
-	return; }
-l=lread(file,buf,length);
-buf[l]=0;
-close(file);
-p=(buf+l)-1;
-if(*p==LF) p--;
-while(*p && p>buf) {
-	if(*p==LF)
-		cur++;
-	if(cur>=lines) {
-		p++;
-		break; }
-	p--; }
-putmsg(p,mode);
-if(mode&P_NOABORT && online==ON_REMOTE) {
-    SYNC;
-    rioctl(IOSM|ABORT); }
-FREE((char *)buf);
-}
-
-/****************************************************************************/
-/* Prints the menu number 'menunum' from the text directory. Checks for ^A  */
-/* ,ANSI sequences, pauses and aborts. Usually accessed by user inputing '?'*/
-/* Called from every function that has an available menu.                   */
-/* The code definitions are as follows:                                     */
-/****************************************************************************/
-void menu(char *code)
-{
-    char str[256],path[256];
-    int c,i,l;
-
-sys_status&=~SS_ABORT;
-if(menu_file[0])
-	strcpy(path,menu_file);
-else {
-	sprintf(str,"%sMENU\\",text_dir);
-	if(menu_dir[0]) {
-		strcat(str,menu_dir);
-		strcat(str,"\\"); }
-	strcat(str,code);
-	strcat(str,".");
-	sprintf(path,"%s%s",str,useron.misc&WIP ? "WIP":"RIP");
-	if(!(useron.misc&(RIP|WIP)) || !fexist(path)) {
-		sprintf(path,"%sMON",str);
-		if((useron.misc&(COLOR|ANSI))!=ANSI || !fexist(path)) {
-			sprintf(path,"%sANS",str);
-			if(!(useron.misc&ANSI) || !fexist(path))
-				sprintf(path,"%sASC",str); } } }
-
-printfile(path,P_OPENCLOSE);
-}
-
-/****************************************************************************/
-/* Puts a character into the input buffer                                   */
-/****************************************************************************/
-void ungetkey(char ch)
-{
-
-keybuf[keybuftop++]=ch;
-if(keybuftop==KEY_BUFSIZE)
-    keybuftop=0;
-}
-
diff --git a/src/sbbs2/con_out.c b/src/sbbs2/con_out.c
deleted file mode 100644
index 6384088dd9..0000000000
--- a/src/sbbs2/con_out.c
+++ /dev/null
@@ -1,1043 +0,0 @@
-#line 1 "CON_OUT.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/**********************************************************************/
-/* Functions that pertain to console i/o - color, strings, chars etc. */
-/* Called from functions everywhere                                   */
-/**********************************************************************/
-
-#include "sbbs.h"
-
-extern char *mnestr;
-
-/***************************************************/
-/* Seven bit table for EXASCII to ASCII conversion */
-/***************************************************/
-char *sbtbl="CUeaaaaceeeiiiAAEaAooouuyOUcLYRfaiounNao?--24!<>"
-			"###||||++||++++++--|-+||++--|-+----++++++++##[]#"
-			"abrpEout*ono%0ENE+><rj%=o..+n2* ";
-
-char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
-char *mon[]={"Jan","Feb","Mar","Apr","May","Jun"
-            ,"Jul","Aug","Sep","Oct","Nov","Dec"};
-
-uchar outchar_esc=0;
-
-#ifdef __WIN32__
-
-int lclatr(int atr)
-{
-
-textattr(atr);
-return(curatr);
-}
-
-void lputc(ch)
-{
-switch(ch) {
-    case CLREOL:
-		clreol();
-        break;
-    case FF:
-		clrscr();
-        break;
-    case TAB:
-		if(!(wherex()%8))
-			putchar(SP);
-		while(wherex()%8)
-			putchar(SP);
-        break;
-    default:
-		putchar(ch);
-		break; }
-}
-
-#endif
-
-#ifdef __OS2__
-
-HEV con_out_sem;					/* Console command semaphore */
-
-#define CON_OUT_BUFLEN		8192	/* Console output (ANSI) buffer */
-#define CON_BLK_BUFLEN		4096	/* Console block (all same atr) buffer */
-
-uchar conoutbuf[CON_OUT_BUFLEN];
-uchar conblkbuf[CON_BLK_BUFLEN];
-volatile uint  conblkcnt=0;
-volatile uint  conoutbot=0;
-volatile uint  conouttop=0;
-
-uchar lcl_curatr=LIGHTGRAY;
-
-/****************************************************************************/
-/* Prints one block of text (all same attribute) at current cursor position */
-/****************************************************************************/
-void print_conblkbuf()
-{
-conblkbuf[conblkcnt]=0;
-cputs(conblkbuf);
-conblkcnt=0;
-}
-
-void con_outch(int ch)
-{
-	static uchar ansi_esc;
-	static uchar ansi_curval;
-	static uchar ansi_val[3];
-	static uchar ansi_x;
-	static uchar ansi_y;
-    int x,y;
-
-if(ch==ESC) {
-    ansi_esc=1;
-	ansi_val[0]=ansi_val[1]=ansi_val[2]=ansi_curval=0;
-    return; }
-
-if(ansi_esc==1) {           /* Received ESC already */
-    if(ch=='[') {
-        ansi_esc++;
-        return; }
-	ansi_esc=ansi_val[0]=ansi_val[1]=ansi_val[2]=ansi_curval=0; }
-
-if(ansi_esc==2) {           /* Received ESC[ already */
-
-    if(isdigit(ch)) {
-		if(ansi_curval>2) ansi_curval=0;
-        ansi_val[ansi_curval]*=10;
-        ansi_val[ansi_curval]+=ch&0xf;
-        return; }
-
-    if(ch==';') {
-        ansi_curval++;
-        return; }
-
-    /* looks like valid ANSI, so purge the output block */
-    if(conblkcnt)
-        print_conblkbuf();
-    switch(ch) {
-        case 'A': // Move cursor up
-            y=wherey();
-            if(ansi_val[0])
-                y-=ansi_val[0];
-            else
-                y--;
-            if(y<1) y=1;
-            gotoxy(wherex(),y);
-            break;
-        case 'B': // Move cursor down
-            y=wherey();
-            if(ansi_val[0])
-                y+=ansi_val[0];
-            else
-                y++;
-            if(y>node_scrnlen) y=node_scrnlen;
-            gotoxy(wherex(),y);
-            break;
-        case 'C': // Move cursor right
-            x=wherex();
-            if(ansi_val[0])
-                x+=ansi_val[0];
-            else
-                x++;
-            if(x>80) x=80;
-            gotoxy(x,wherey());
-            break;
-        case 'D': // Move cursor left
-            x=wherex();
-            if(ansi_val[0])
-                x-=ansi_val[0];
-            else
-                x--;
-            if(x<1) x=1;
-            gotoxy(x,wherey());
-            break;
-        case 'J': // clear screen
-            if(ansi_val[0]==2)
-                clrscr();
-            break;
-        case 'K': // clearn from cursor to end of line
-            clreol();
-            break;
-        case 'H': // Position cursor
-        case 'f':
-            y=ansi_val[0];
-            x=ansi_val[1];
-            if(x<1) x=1;
-            if(x>80) x=80;
-            if(y<1) y=1;
-            if(y>node_scrnlen) y=node_scrnlen;
-            gotoxy(x,y);
-            break;
-		case 's': // Save cursor position
-			ansi_x=wherex();
-			ansi_y=wherey();
-			break;
-		case 'u': // Restore cursor position
-			if(ansi_x)
-				gotoxy(ansi_x,ansi_y);
-			break;
-        case 'm': // Select character attributes
-            for(x=0;x<=ansi_curval;x++)
-                switch(ansi_val[x]) {
-                    case 0: // no special attributes
-                    case 8: // concealed text (no display)
-                        lcl_curatr=LIGHTGRAY;
-                        break;
-                    case 1: // high intensity
-                    case 3: // italic
-                    case 4: // underline
-                        lcl_curatr|=HIGH;
-                        break;
-                    case 2: // low intensity
-                        lcl_curatr&=~HIGH;
-                        break;
-                    case 5: // blink
-                    case 6: // rapid blink
-                    case 7: // reverse video
-                        lcl_curatr|=BLINK;
-                        break;
-                    case 30: // foreground black
-                        lcl_curatr&=0xf8;
-                        lcl_curatr|=BLACK;
-                        break;
-                    case 31: // foreground red
-                        lcl_curatr&=0xf8;
-                        lcl_curatr|=RED;
-                        break;
-                    case 32: // foreground green
-                        lcl_curatr&=0xf8;
-                        lcl_curatr|=GREEN;
-                        break;
-                    case 33: // foreground yellow
-                        lcl_curatr&=0xf8;
-                        lcl_curatr|=BROWN;
-                        break;
-                    case 34: // foreground blue
-                        lcl_curatr&=0xf8;
-                        lcl_curatr|=BLUE;
-                        break;
-                    case 35: // foreground magenta
-                        lcl_curatr&=0xf8;
-                        lcl_curatr|=MAGENTA;
-                        break;
-                    case 36: // foreground cyan
-                        lcl_curatr&=0xf8;
-                        lcl_curatr|=CYAN;
-                        break;
-                    case 37: // foreground white
-                        lcl_curatr&=0xf8;
-                        lcl_curatr|=LIGHTGRAY;
-                        break;
-                    case 40: // background black
-                        lcl_curatr&=0x8f;
-                        lcl_curatr|=(BLACK<<4);
-                        break;
-                    case 41: // background red
-                        lcl_curatr&=0x8f;
-                        lcl_curatr|=(RED<<4);
-                        break;
-                    case 42: // background green
-                        lcl_curatr&=0x8f;
-                        lcl_curatr|=(GREEN<<4);
-                        break;
-                    case 43: // background yellow
-                        lcl_curatr&=0x8f;
-                        lcl_curatr|=(BROWN<<4);
-                        break;
-                    case 44: // background blue
-                        lcl_curatr&=0x8f;
-                        lcl_curatr|=(BLUE<<4);
-                        break;
-                    case 45: // background magenta
-                        lcl_curatr&=0x8f;
-                        lcl_curatr|=(MAGENTA<<4);
-                        break;
-                    case 46: // background cyan
-                        lcl_curatr&=0x8f;
-                        lcl_curatr|=(CYAN<<4);
-                        break;
-                    case 47: // background white
-                        lcl_curatr&=0x8f;
-                        lcl_curatr|=(LIGHTGRAY<<4);
-                        break; }
-			textattr(lcl_curatr);
-            break; }
-
-	ansi_esc=ansi_val[0]=ansi_val[1]=ansi_val[2]=ansi_curval=0;
-    return; }
-
-if(conblkcnt+1>=CON_BLK_BUFLEN)
-    print_conblkbuf();
-switch(ch) {
-    case CLREOL:
-		if(conblkcnt) print_conblkbuf();
-		clreol();
-        break;
-    case FF:
-		if(conblkcnt) print_conblkbuf();
-        clrscr();
-        break;
-    case TAB:
-		if(conblkcnt) print_conblkbuf();
-		if(!(wherex()%8))
-			putch(SP);
-		while(wherex()%8)
-			putch(SP);
-        break;
-    default:
-		conblkbuf[conblkcnt++]=ch;
-        break; }
-}
-
-
-/****************************************************************************/
-/* Thread that services the console output buffer (conoutbuf) which 		*/
-/* contains ANSI escape sequences											*/
-/* All output is for the text window (mirroring the remote console) 		*/
-/****************************************************************************/
-void con_out_thread(void *unused)
-{
-	int i,top,cnt;
-	ulong l;
-
-while(1) {
-	/* mswait(1);	Removed 12/99 via Enigma */
-	if(conoutbot==conouttop) {
-		DosWaitEventSem(con_out_sem,10000);  /* every 10 seconds */
-		DosResetEventSem(con_out_sem,&l);
-        continue; }
-	top=conouttop;
-	if(top<conoutbot)
-		cnt=CON_OUT_BUFLEN-conoutbot;
-	else
-		cnt=top-conoutbot;
-	for(i=conoutbot;i<conoutbot+cnt;i++)
-		con_outch(conoutbuf[i]);
-	conoutbot=i;
-	if(conblkcnt)
-		print_conblkbuf();
-	if(conoutbot==CON_OUT_BUFLEN)
-		conoutbot=0; }
-}
-
-
-
-void outcon(char ch)
-{
-	int i=conouttop+1;
-
-if(i==CON_OUT_BUFLEN)
-	i=0;
-while(conoutbot==i) // Wait for thread to service queue
-	mswait(1);
-conoutbuf[conouttop++]=ch;
-if(conouttop==CON_OUT_BUFLEN)
-	conouttop=0;
-DosPostEventSem(con_out_sem);	 // Enable output
-}
-
-int outcon_pending()
-{
-if(conoutbot!=conouttop)
-	return(1);
-if(conblkcnt) {
-	print_conblkbuf();
-	return(1); }
-return(0);
-}
-
-int conaes()
-{
-return(outchar_esc==2);
-}
-
-void lputc(int ch)
-{
-
-while(outcon_pending())
-	mswait(1);
-switch(ch) {
-    case CLREOL:
-		clreol();
-        break;
-    case FF:
-		clrscr();
-        break;
-    case TAB:
-		if(!(wherex()%8))
-			putch(SP);
-		while(wherex()%8)
-			putch(SP);
-        break;
-    default:
-		putch(ch);
-		break; }
-}
-
-long lputs(char *str)
-{
-while(outcon_pending())
-	mswait(1);
-return(cputs(str));
-}
-
-int lclwx(void)
-{
-while(outcon_pending())
-	mswait(1);
-return(wherex());
-}
-
-int lclwy(void)
-{
-while(outcon_pending())
-	mswait(1);
-return(wherey());
-}
-
-void lclxy(int x, int y)
-{
-while(outcon_pending())
-	mswait(1);
-gotoxy(x,y);
-}
-
-int lclatr(int x)
-{
-	int i;
-
-while(conoutbot!=conouttop) 	/* wait for output buf to empty */
-	mswait(1);
-if(x==-1)
-	return(lcl_curatr);
-
-textattr(x);
-i=lcl_curatr;
-lcl_curatr=x;
-return(i);		/* Return previous attribute */
-}
-
-#endif
-
-/****************************************************************************/
-/* Outputs a NULL terminated string locally and remotely (if applicable)    */
-/* Handles ctrl-a characters                                                */
-/****************************************************************************/
-int bputs(char *str)
-{
-	int i;
-    ulong l=0;
-
-while(str[l]) {
-    if(str[l]==1) {             /* ctrl-a */
-        ctrl_a(str[++l]);       /* skip the ctrl-a */
-		l++;					/* skip the attribute code */
-		continue; }
-	if(str[l]=='@') {           /* '@' */
-		if(str==mnestr			/* Mnemonic string or */
-			|| (str>=text[0]	/* Straight out of TEXT.DAT */
-				&& str<=text[TOTAL_TEXT-1])) {
-			i=atcodes(str+l);		/* return 0 if not valid @ code */
-			l+=i;					/* i is length of code string */
-			if(i)					/* if valid string, go to top */
-				continue; }
-		for(i=0;i<TOTAL_TEXT;i++)
-			if(str==text[i])
-				break;
-		if(i<TOTAL_TEXT) {		/* Replacement text */
-			//lputc(7);
-			i=atcodes(str+l);
-			l+=i;
-			if(i)
-				continue; } }
-	outchar(str[l++]); }
-return(l);
-}
-
-/****************************************************************************/
-/* Outputs a NULL terminated string locally and remotely (if applicable)    */
-/* Does not expand ctrl-a characters (raw)                                  */
-/* Max length of str is 64 kbytes                                           */
-/****************************************************************************/
-int rputs(char *str)
-{
-    ulong l=0;
-
-while(str[l])
-    outchar(str[l++]);
-return(l);
-}
-
-/****************************************************************************/
-/* Performs printf() through local assembly routines                        */
-/* Called from everywhere                                                   */
-/****************************************************************************/
-int lprintf(char *fmat, ...)
-{
-	va_list argptr;
-	char sbuf[256];
-	int chcount;
-
-va_start(argptr,fmat);
-chcount=vsprintf(sbuf,fmat,argptr);
-va_end(argptr);
-lputs(sbuf);
-return(chcount);
-}
-
-/****************************************************************************/
-/* Performs printf() using bbs bputs function								*/
-/****************************************************************************/
-int bprintf(char *fmt, ...)
-{
-	va_list argptr;
-	char sbuf[1024];
-
-if(!strchr(fmt,'%'))
-	return(bputs(fmt));
-va_start(argptr,fmt);
-vsprintf(sbuf,fmt,argptr);
-va_end(argptr);
-return(bputs(sbuf));
-}
-
-/****************************************************************************/
-/* Performs printf() using bbs rputs function								*/
-/****************************************************************************/
-int rprintf(char *fmt, ...)
-{
-	va_list argptr;
-	char sbuf[1024];
-
-va_start(argptr,fmt);
-vsprintf(sbuf,fmt,argptr);
-va_end(argptr);
-return(rputs(sbuf));
-}
-
-/****************************************************************************/
-/* Outputs character locally and remotely (if applicable), preforming echo  */
-/* translations (X's and r0dent emulation) if applicable.					*/
-/****************************************************************************/
-void outchar(char ch)
-{
-	char lch;
-	int i;
-
-if(console&CON_ECHO_OFF)
-	return;
-if(ch==ESC)
-	outchar_esc=1;
-else if(outchar_esc==1) {
-	if(ch=='[')
-		outchar_esc++;
-	else
-		outchar_esc=0; }
-else
-	outchar_esc=0;
-if(useron.misc&NO_EXASCII && ch&0x80)
-	ch=sbtbl[(uchar)ch^0x80];  /* seven bit table */
-if(ch==FF && lncntr>1 && !tos) {
-	lncntr=0;
-	CRLF;
-	pause();
-	while(lncntr && online && !(sys_status&SS_ABORT))
-		pause(); }
-if(sys_status&SS_CAP	/* Writes to Capture File */
-	&& (sys_status&SS_ANSCAP || (ch!=ESC && !lclaes())))
-	fwrite(&ch,1,1,capfile);
-if(console&CON_L_ECHO) {
-	if(console&CON_L_ECHOX && (uchar)ch>=SP)
-		outcon('X');
-	else if(node_misc&NM_NOBEEP && ch==7);	 /* Do nothing if beep */
-	else if(ch==7) {
-			beep(2000,110);
-			nosound(); }
-	else outcon(ch); }
-if(online==ON_REMOTE && console&CON_R_ECHO) {
-	if(console&CON_R_ECHOX && (uchar)ch>=SP)
-		ch='X';
-	i=0;
-	while(outcom(ch)&TXBOF && i<1440) { /* 3 minute pause delay */
-
-        if(lkbrd(1)) {
-			lch=lkbrd(0);	/* ctrl-c */
-			if(lch==3) {
-				lputs("local abort (outchar)\r\n");
-				i=1440;
-				break; }
-			ungetkey(lch); }
-		if(!DCDHIGH)
-			break;
-		i++;
-		if(sys_status&SS_SYSPAGE)
-			beep(i,80);
-		else
-			mswait(80); }
-	if(i==1440) {							/* timeout - beep flush outbuf */
-		i=rioctl(TXBC);
-		lprintf("timeout(outchar) %04X %04X\r\n",i,rioctl(IOFO));
-		outcom(7);
-		lputc(7);
-		rioctl(IOCS|PAUSE); } }
-if(ch==LF) {
-	lncntr++;
-	lbuflen=0;
-	tos=0; }
-else if(ch==FF) {
-	lncntr=0;
-	lbuflen=0;
-	tos=1; }
-
-else {
-	if(!lbuflen)
-		latr=curatr;
-	if(lbuflen<LINE_BUFSIZE)
-		lbuf[lbuflen++]=ch; }
-
-if(lncntr==rows-1 && ((useron.misc&UPAUSE && !(sys_status&SS_PAUSEOFF))
-	|| sys_status&SS_PAUSEON)) {
-	lncntr=0;
-	pause(); }
-
-}
-
-
-/****************************************************************************/
-/* performs the correct attribute modifications for the Ctrl-A code			*/
-/****************************************************************************/
-void ctrl_a(char x)
-{
-	int i,j;
-	char tmp1[128],atr=curatr;
-
-if(x && (uchar)x<ESC) {    /* Ctrl-A through Ctrl-Z for users with MF only */
-	if(!(useron.flags1&FLAG(x+64)))
-		console^=(CON_ECHO_OFF);
-	return; }
-if((uchar)x>=0x7f) {
-	if(useron.misc&ANSI)
-		bprintf("\x1b[%uC",(uchar)x-0x7f);
-	else
-		for(i=0;i<(uchar)x-0x7f;i++)
-			outchar(SP);
-	return; }
-switch(toupper(x)) {
-	case '!':   /* level 10 or higher */
-		if(useron.level<10)
-			console^=CON_ECHO_OFF;
-		break;
-	case '@':   /* level 20 or higher */
-		if(useron.level<20)
-			console^=CON_ECHO_OFF;
-        break;
-	case '#':   /* level 30 or higher */
-		if(useron.level<30)
-			console^=CON_ECHO_OFF;
-        break;
-	case '$':   /* level 40 or higher */
-		if(useron.level<40)
-			console^=CON_ECHO_OFF;
-        break;
-	case '%':   /* level 50 or higher */
-		if(useron.level<50)
-			console^=CON_ECHO_OFF;
-        break;
-	case '^':   /* level 60 or higher */
-		if(useron.level<60)
-			console^=CON_ECHO_OFF;
-        break;
-	case '&':   /* level 70 or higher */
-		if(useron.level<70)
-			console^=CON_ECHO_OFF;
-        break;
-	case '*':   /* level 80 or higher */
-		if(useron.level<80)
-			console^=CON_ECHO_OFF;
-        break;
-	case '(':   /* level 90 or higher */
-		if(useron.level<90)
-			console^=CON_ECHO_OFF;
-        break;
-	case ')':   /* turn echo back on */
-		console&=~CON_ECHO_OFF;
-		break;
-	case '-':								/* turn off all attributes if */
-		if(atr&(HIGH|BLINK|(LIGHTGRAY<<4)))	/* high intensity, blink or */
-			attr(LIGHTGRAY);				/* background bits are set */
-		break;
-	case '_':								/* turn off all attributes if */
-		if(atr&(BLINK|(LIGHTGRAY<<4)))		/* blink or background is set */
-			attr(LIGHTGRAY);
-		break;
-	case 'P':	/* Pause */
-		pause();
-		break;
-	case 'Q':   /* Pause reset */
-		lncntr=0;
-		break;
-	case 'T':   /* Time */
-		now=time(NULL);
-		unixtodos(now,&date,&curtime);
-		bprintf("%02d:%02d %s"
-			,curtime.ti_hour==0 ? 12
-			: curtime.ti_hour>12 ? curtime.ti_hour-12
-			: curtime.ti_hour, curtime.ti_min, curtime.ti_hour>11 ? "pm":"am");
-		break;
-	case 'D':   /* Date */
-		now=time(NULL);
-		bputs(unixtodstr(now,tmp1));
-		break;
-	case ',':   /* Delay 1/10 sec */
-		mswait(100);
-		break;
-	case ';':   /* Delay 1/2 sec */
-		mswait(500);
-		break;
-	case '.':   /* Delay 2 secs */
-		mswait(2000);
-		break;
-	case 'S':   /* Synchronize */
-		ASYNC;
-		break;
-	case 'L':	/* CLS (form feed) */
-		CLS;
-		break;
-	case '>':   /* CLREOL */
-		if(useron.misc&ANSI)
-			bputs("\x1b[K");
-		else {
-			i=j=lclwx();
-			while(i++<79)
-				outchar(SP);
-			while(j++<79)
-				outchar(BS); }
-		break;
-	case '<':   /* Non-destructive backspace */
-		outchar(BS);
-		break;
-	case '[':   /* Carriage return */
-		outchar(CR);
-		break;
-	case ']':   /* Line feed */
-		outchar(LF);
-		break;
-	case 'A':   /* Ctrl-A */
-		outchar(1);
-		break;
-	case 'H': 	/* High intensity */
-		atr|=HIGH;
-		attr(atr);
-		break;
-	case 'I':	/* Blink */
-		atr|=BLINK;
-		attr(atr);
-		break;
-	case 'N': 	/* Normal */
-		attr(LIGHTGRAY);
-		break;
-	case 'R':
-		atr=(atr&0xf8)|RED;
-		attr(atr);
-		break;
-	case 'G':
-		atr=(atr&0xf8)|GREEN;
-		attr(atr);
-		break;
-	case 'B':
-		atr=(atr&0xf8)|BLUE;
-		attr(atr);
-		break;
-    case 'W':	/* White */
-		atr=(atr&0xf8)|LIGHTGRAY;
-		attr(atr);
-		break;
-    case 'C':
-		atr=(atr&0xf8)|CYAN;
-		attr(atr);
-		break;
-	case 'M':
-		atr=(atr&0xf8)|MAGENTA;
-		attr(atr);
-		break;
-	case 'Y':   /* Yellow */
-		atr=(atr&0xf8)|BROWN;
-		attr(atr);
-		break;
-    case 'K':	/* Black */
-		atr=(atr&0xf8)|BLACK;
-		attr(atr);
-		break;
-    case '0':	/* Black Background */
-		atr=(atr&0x8f)|(BLACK<<4);
-		attr(atr);
-		break;
-	case '1':	/* Red Background */
-		atr=(atr&0x8f)|(RED<<4);
-		attr(atr);
-		break;
-	case '2':	/* Green Background */
-		atr=(atr&0x8f)|(GREEN<<4);
-		attr(atr);
-		break;
-	case '3':	/* Yellow Background */
-		atr=(atr&0x8f)|(BROWN<<4);
-		attr(atr);
-		break;
-	case '4':	/* Blue Background */
-		atr=(atr&0x8f)|(BLUE<<4);
-		attr(atr);
-		break;
-	case '5':	/* Magenta Background */
-		atr=(atr&0x8f)|(MAGENTA<<4);
-		attr(atr);
-		break;
-	case '6':	/* Cyan Background */
-		atr=(atr&0x8f)|(CYAN<<4);
-		attr(atr);
-		break;
-	case '7':	/* White Background */
-		atr=(atr&0x8f)|(LIGHTGRAY<<4);
-		attr(atr);
-		break; }
-}
-
-/***************************************************************************/
-/* Changes local and remote text attributes accounting for monochrome      */
-/***************************************************************************/
-/****************************************************************************/
-/* Sends ansi codes to change remote ansi terminal's colors                 */
-/* Only sends necessary codes - tracks remote terminal's current attributes */
-/* through the 'curatr' variable                                            */
-/****************************************************************************/
-void attr(int atr)
-{
-
-if(!(useron.misc&ANSI))
-    return;
-if(!(useron.misc&COLOR)) {  /* eliminate colors if user doesn't have them */
-    if(atr&LIGHTGRAY)       /* if any foreground bits set, set all */
-        atr|=LIGHTGRAY;
-    if(atr&(LIGHTGRAY<<4))  /* if any background bits set, set all */
-        atr|=(LIGHTGRAY<<4);
-    if(atr&LIGHTGRAY && atr&(LIGHTGRAY<<4))
-        atr&=~LIGHTGRAY;    /* if background is solid, foreground is black */
-    if(!atr)
-        atr|=LIGHTGRAY; }   /* don't allow black on black */
-if(curatr==atr) /* text hasn't changed. don't send codes */
-    return;
-
-if((!(atr&HIGH) && curatr&HIGH) || (!(atr&BLINK) && curatr&BLINK)
-    || atr==LIGHTGRAY) {
-    bputs("\x1b[0m");
-    curatr=LIGHTGRAY; }
-
-if(atr==LIGHTGRAY)                  /* no attributes */
-    return;
-
-if(atr&BLINK) {                     /* special attributes */
-    if(!(curatr&BLINK))
-        bputs(ansi(BLINK)); }
-if(atr&HIGH) {
-    if(!(curatr&HIGH))
-        bputs(ansi(HIGH)); }
-
-if((atr&0x7)==BLACK) {              /* foreground colors */
-    if((curatr&0x7)!=BLACK)
-        bputs(ansi(BLACK)); }
-else if((atr&0x7)==RED) {
-    if((curatr&0x7)!=RED)
-        bputs(ansi(RED)); }
-else if((atr&0x7)==GREEN) {
-    if((curatr&0x7)!=GREEN)
-        bputs(ansi(GREEN)); }
-else if((atr&0x7)==BROWN) {
-    if((curatr&0x7)!=BROWN)
-        bputs(ansi(BROWN)); }
-else if((atr&0x7)==BLUE) {
-    if((curatr&0x7)!=BLUE)
-        bputs(ansi(BLUE)); }
-else if((atr&0x7)==MAGENTA) {
-    if((curatr&0x7)!=MAGENTA)
-        bputs(ansi(MAGENTA)); }
-else if((atr&0x7)==CYAN) {
-    if((curatr&0x7)!=CYAN)
-        bputs(ansi(CYAN)); }
-else if((atr&0x7)==LIGHTGRAY) {
-    if((curatr&0x7)!=LIGHTGRAY)
-        bputs(ansi(LIGHTGRAY)); }
-
-if((atr&0x70)==(BLACK<<4)) {        /* background colors */
-    if((curatr&0x70)!=(BLACK<<4))
-        bputs("\x1b[40m"); }
-else if((atr&0x70)==(RED<<4)) {
-    if((curatr&0x70)!=(RED<<4))
-        bputs(ansi(RED<<4)); }
-else if((atr&0x70)==(GREEN<<4)) {
-    if((curatr&0x70)!=(GREEN<<4))
-        bputs(ansi(GREEN<<4)); }
-else if((atr&0x70)==(BROWN<<4)) {
-    if((curatr&0x70)!=(BROWN<<4))
-        bputs(ansi(BROWN<<4)); }
-else if((atr&0x70)==(BLUE<<4)) {
-    if((curatr&0x70)!=(BLUE<<4))
-        bputs(ansi(BLUE<<4)); }
-else if((atr&0x70)==(MAGENTA<<4)) {
-    if((curatr&0x70)!=(MAGENTA<<4))
-        bputs(ansi(MAGENTA<<4)); }
-else if((atr&0x70)==(CYAN<<4)) {
-    if((curatr&0x70)!=(CYAN<<4))
-        bputs(ansi(CYAN<<4)); }
-else if((atr&0x70)==(LIGHTGRAY<<4)) {
-    if((curatr&0x70)!=(LIGHTGRAY<<4))
-        bputs(ansi(LIGHTGRAY<<4)); }
-
-curatr=atr;
-}
-
-/****************************************************************************/
-/* Returns the ANSI code to obtain the value of atr. Mixed attributes		*/
-/* high intensity colors, or background/forground cobinations don't work.   */
-/* A call to attr is more appropriate, being it is intelligent				*/
-/****************************************************************************/
-char *ansi(char atr)
-{
-
-switch(atr) {
-	case (char)BLINK:
-		return("\x1b[5m");
-	case HIGH:
-		return("\x1b[1m");
-	case BLACK:
-		return("\x1b[30m");
-	case RED:
-		return("\x1b[31m");
-	case GREEN:
-		return("\x1b[32m");
-	case BROWN:
-		return("\x1b[33m");
-	case BLUE:
-		return("\x1b[34m");
-	case MAGENTA:
-		return("\x1b[35m");
-	case CYAN:
-		return("\x1b[36m");
-	case LIGHTGRAY:
-		return("\x1b[37m");
-	case (RED<<4):
-		return("\x1b[41m");
-	case (GREEN<<4):
-		return("\x1b[42m");
-	case (BROWN<<4):
-		return("\x1b[43m");
-	case (BLUE<<4):
-		return("\x1b[44m");
-	case (MAGENTA<<4):
-		return("\x1b[45m");
-	case (CYAN<<4):
-		return("\x1b[46m");
-	case (LIGHTGRAY<<4):
-		return("\x1b[47m"); }
-
-return("-Invalid use of ansi()-");
-}
-
-
-/****************************************************************************/
-/* Checks to see if user has hit Pause or Abort. Returns 1 if user aborted. */
-/* If the user hit Pause, waits for a key to be hit.                        */
-/* Emulates remote XON/XOFF flow control on local console                   */
-/* Preserves SS_ABORT flag state, if already set.                           */
-/* Called from various listing procedures that wish to check for abort      */
-/****************************************************************************/
-char msgabort()
-{
-    char ch;
-
-if(sys_status&SS_SYSPAGE)
-	beep(random(800),1);
-if(lkbrd(1)) {
-    ch=inkey(0);
-    if(sys_status&SS_ABORT) {                   /* ^c */
-        keybufbot=keybuftop=0;
-        return(1); }
-    else if(ch==17 && online==ON_REMOTE)    /* ^q */
-        rioctl(IOCS|PAUSE);
-    else if(ch==19)                         /* ^s */
-        while(online) {
-            if((ch=inkey(0))!=0) {
-                if(ch==17)  /* ^q */
-                    return(0);
-                ungetkey(ch); }
-             if(sys_status&SS_ABORT) { /* ^c */
-                keybufbot=keybuftop=0;
-                return(1); }
-             checkline(); }
-    else if(ch)
-        ungetkey(ch); }
-checkline();
-if(sys_status&SS_ABORT)
-    return(1);
-if(online==ON_REMOTE && rioctl(IOSTATE)&ABORT) {
-    rioctl(IOCS|ABORT);
-    sys_status|=SS_ABORT;
-    return(1); }
-if(!online)
-    return(1);
-return(0);
-}
-
-
-/****************************************************************************/
-/* Takes the value 'sec' and makes a string the format HH:MM:SS             */
-/****************************************************************************/
-char *sectostr(uint sec,char *str)
-{
-    uchar hour,min,sec2;
-
-hour=(sec/60)/60;
-min=(sec/60)-(hour*60);
-sec2=sec-((min+(hour*60))*60);
-sprintf(str,"%2.2d:%2.2d:%2.2d",hour,min,sec2);
-return(str);
-}
-
-
-/****************************************************************************/
-/* Generates a 24 character ASCII string that represents the time_t pointer */
-/* Used as a replacement for ctime()                                        */
-/****************************************************************************/
-char *timestr(time_t *intime)
-{
-    static char str[256];
-    char mer[3],hour;
-    struct tm *gm;
-
-gm=localtime(intime);
-if(gm==NULL) {
-	strcpy(str,"Invalid Time");
-	return(str); }
-if(sys_misc&SM_MILITARY) {
-    sprintf(str,"%s %s %02d %4d %02d:%02d:%02d"
-        ,wday[gm->tm_wday],mon[gm->tm_mon],gm->tm_mday,1900+gm->tm_year
-        ,gm->tm_hour,gm->tm_min,gm->tm_sec);
-    return(str); }
-if(gm->tm_hour>=12) {
-    if(gm->tm_hour==12)
-        hour=12;
-    else
-        hour=gm->tm_hour-12;
-    strcpy(mer,"pm"); }
-else {
-    if(gm->tm_hour==0)
-        hour=12;
-    else
-        hour=gm->tm_hour;
-    strcpy(mer,"am"); }
-sprintf(str,"%s %s %02d %4d %02d:%02d %s"
-    ,wday[gm->tm_wday],mon[gm->tm_mon],gm->tm_mday,1900+gm->tm_year
-    ,hour,gm->tm_min,mer);
-return(str);
-}
-
diff --git a/src/sbbs2/data.c b/src/sbbs2/data.c
deleted file mode 100644
index 537358a8bf..0000000000
--- a/src/sbbs2/data.c
+++ /dev/null
@@ -1,177 +0,0 @@
-#line 1 "DATA.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/**************************************************************/
-/* Functions that store and retrieve data from disk or memory */
-/**************************************************************/
-
-#include "sbbs.h"
-
-/****************************************************************************/
-/* Looks for a perfect match amoung all usernames (not deleted users)		*/
-/* Returns the number of the perfect matched username or 0 if no match		*/
-/* Called from functions waitforcall and newuser							*/
-/****************************************************************************/
-uint matchuser(char *str)
-{
-	int file;
-	char str2[256],c;
-	ulong l,length;
-	FILE *stream;
-
-sprintf(str2,"%sUSER\\NAME.DAT",data_dir);
-if((stream=fnopen(&file,str2,O_RDONLY))==NULL)
-	return(0);
-length=filelength(file);
-for(l=0;l<length;l+=LEN_ALIAS+2) {
-	fread(str2,LEN_ALIAS+2,1,stream);
-	for(c=0;c<LEN_ALIAS;c++)
-		if(str2[c]==ETX) break;
-	str2[c]=0;
-	if(!stricmp(str,str2)) {
-		fclose(stream);
-		return((l/(LEN_ALIAS+2))+1); } }
-fclose(stream);
-return(0);
-}
-
-/****************************************************************************/
-/* Looks for close or perfect matches between str and valid usernames and  	*/
-/* numbers and prompts user for near perfect matches in names.				*/
-/* Returns the number of the matched user or 0 if unsuccessful				*/
-/* Called from functions main_sec, useredit and readmailw					*/
-/****************************************************************************/
-uint finduser(char *instr)
-{
-	int file,i;
-	char str[128],str2[256],str3[256],ynq[25],c,pass=1;
-	ulong l,length;
-	FILE *stream;
-
-i=atoi(instr);
-if(i>0) {
-	username(i,str2);
-	if(str2[0] && strcmp(str2,"DELETED USER"))
-		return(i); }
-strcpy(str,instr);
-strupr(str);
-sprintf(str3,"%sUSER\\NAME.DAT",data_dir);
-if(flength(str3)<1L)
-	return(0);
-if((stream=fnopen(&file,str3,O_RDONLY))==NULL) {
-	errormsg(WHERE,ERR_OPEN,str3,O_RDONLY);
-	return(0); }
-sprintf(ynq,"%.2s",text[YN]);
-ynq[2]='Q';
-ynq[3]=0;
-length=filelength(file);
-while(pass<3) {
-	fseek(stream,0L,SEEK_SET);	/* seek to beginning for each pass */
-	for(l=0;l<length;l+=LEN_ALIAS+2) {
-		if(!online) break;
-		fread(str2,LEN_ALIAS+2,1,stream);
-		for(c=0;c<LEN_ALIAS;c++)
-			if(str2[c]==ETX) break;
-		str2[c]=0;
-		if(!c)		/* deleted user */
-			continue;
-		strcpy(str3,str2);
-		strupr(str2);
-		if(pass==1 && !strcmp(str,str2)) {
-			fclose(stream);
-			return((l/(LEN_ALIAS+2))+1); }
-		if(pass==2 && strstr(str2,str)) {
-			bprintf(text[DoYouMeanThisUserQ],str3
-				,(uint)(l/(LEN_ALIAS+2))+1);
-			c=getkeys(ynq,0);
-			if(sys_status&SS_ABORT) {
-				fclose(stream);
-				return(0); }
-			if(c==text[YN][0]) {
-				fclose(stream);
-				return((l/(LEN_ALIAS+2))+1); }
-			if(c=='Q') {
-				fclose(stream);
-				return(0); } } }
-	pass++; }
-bputs(text[UnknownUser]);
-fclose(stream);
-return(0);
-}
-
-/****************************************************************************/
-/* Returns the number of files in the directory 'dirnum'                    */
-/****************************************************************************/
-int getfiles(uint dirnum)
-{
-	char str[256];
-	long l;
-
-sprintf(str,"%s%s.IXB",dir[dirnum]->data_dir,dir[dirnum]->code);
-l=flength(str);
-if(l>0L)
-	return(l/F_IXBSIZE);
-return(0);
-}
-
-/****************************************************************************/
-/* Returns the number of user transfers in XFER.IXT for either a dest user  */
-/* source user, or filename.												*/
-/****************************************************************************/
-int getuserxfers(int fromuser, int destuser, char *fname)
-{
-	char str[256];
-	int file,found=0;
-	FILE *stream;
-
-sprintf(str,"%sXFER.IXT",data_dir);
-if(!fexist(str))
-	return(0);
-if(!flength(str)) {
-	remove(str);
-	return(0); }
-if((stream=fnopen(&file,str,O_RDONLY))==NULL) {
-	errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-	return(0); }
-while(!ferror(stream)) {
-	if(!fgets(str,81,stream))
-		break;
-	str[22]=0;
-	if(fname!=NULL && fname[0] && !strncmp(str+5,fname,12))
-			found++;
-	else if(fromuser && atoi(str+18)==fromuser)
-			found++;
-	else if(destuser && atoi(str)==destuser)
-			found++; }
-fclose(stream);
-return(found);
-}
-
-/****************************************************************************/
-/* Returns the number of the last user in USER.DAT (deleted ones too)		*/
-/* Called from function useredit											*/
-/****************************************************************************/
-uint lastuser()
-{
-	char str[256];
-	long length;
-
-sprintf(str,"%sUSER\\USER.DAT",data_dir);
-if((length=flength(str))>0)
-	return((uint)(length/U_LEN));
-return(0);
-}
-
-/****************************************************************************/
-/* Returns the number of files in the database for 'dir'					*/
-/****************************************************************************/
-uint gettotalfiles(uint dirnum)
-{
-	char str[81];
-
-sprintf(str,"%s%s.IXB",dir[dirnum]->data_dir,dir[dirnum]->code);
-return((uint)(flength(str)/F_IXBSIZE));
-}
-
-
diff --git a/src/sbbs2/data_ovl.c b/src/sbbs2/data_ovl.c
deleted file mode 100644
index 95f81f1d47..0000000000
--- a/src/sbbs2/data_ovl.c
+++ /dev/null
@@ -1,439 +0,0 @@
-#line 1 "DATA_OVL.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-
-/****************************************************************************/
-/* Writes into user.number's slot in USER.DAT data in structure 'user'      */
-/* Called from functions newuser, useredit and main                         */
-/****************************************************************************/
-void putuserdat(user_t user)
-{
-    int i,file;
-    char userdat[U_LEN+1],str[U_LEN+1];
-    node_t node;
-
-if(!user.number) {
-    errormsg(WHERE,ERR_CHK,"user number",0);
-    return; }
-memset(userdat,ETX,U_LEN);
-putrec(userdat,U_ALIAS,LEN_ALIAS+5,user.alias);
-putrec(userdat,U_NAME,LEN_NAME,user.name);
-putrec(userdat,U_HANDLE,LEN_HANDLE,user.handle);
-putrec(userdat,U_HANDLE+LEN_HANDLE,2,crlf);
-
-putrec(userdat,U_NOTE,LEN_NOTE,user.note);
-putrec(userdat,U_COMP,LEN_COMP,user.comp);
-putrec(userdat,U_COMP+LEN_COMP,2,crlf);
-
-putrec(userdat,U_COMMENT,LEN_COMMENT,user.comment);
-putrec(userdat,U_COMMENT+LEN_COMMENT,2,crlf);
-
-putrec(userdat,U_NETMAIL,LEN_NETMAIL,user.netmail);
-putrec(userdat,U_NETMAIL+LEN_NETMAIL,2,crlf);
-
-putrec(userdat,U_ADDRESS,LEN_ADDRESS,user.address);
-putrec(userdat,U_LOCATION,LEN_LOCATION,user.location);
-putrec(userdat,U_ZIPCODE,LEN_ZIPCODE,user.zipcode);
-putrec(userdat,U_ZIPCODE+LEN_ZIPCODE,2,crlf);
-
-putrec(userdat,U_PASS,LEN_PASS,user.pass);
-putrec(userdat,U_PHONE,LEN_PHONE,user.phone);
-putrec(userdat,U_BIRTH,LEN_BIRTH,user.birth);
-putrec(userdat,U_MODEM,LEN_MODEM,user.modem);
-putrec(userdat,U_LASTON,8,ultoa(user.laston,str,16));
-putrec(userdat,U_FIRSTON,8,ultoa(user.firston,str,16));
-putrec(userdat,U_EXPIRE,8,ultoa(user.expire,str,16));
-putrec(userdat,U_PWMOD,8,ultoa(user.pwmod,str,16));
-putrec(userdat,U_PWMOD+8,2,crlf);
-
-putrec(userdat,U_LOGONS,5,itoa(user.logons,str,10));
-putrec(userdat,U_LTODAY,5,itoa(user.ltoday,str,10));
-putrec(userdat,U_TIMEON,5,itoa(user.timeon,str,10));
-putrec(userdat,U_TEXTRA,5,itoa(user.textra,str,10));
-putrec(userdat,U_TTODAY,5,itoa(user.ttoday,str,10));
-putrec(userdat,U_TLAST,5,itoa(user.tlast,str,10));
-putrec(userdat,U_POSTS,5,itoa(user.posts,str,10));
-putrec(userdat,U_EMAILS,5,itoa(user.emails,str,10));
-putrec(userdat,U_FBACKS,5,itoa(user.fbacks,str,10));
-putrec(userdat,U_ETODAY,5,itoa(user.etoday,str,10));
-putrec(userdat,U_PTODAY,5,itoa(user.ptoday,str,10));
-putrec(userdat,U_PTODAY+5,2,crlf);
-
-putrec(userdat,U_ULB,10,ultoa(user.ulb,str,10));
-putrec(userdat,U_ULS,5,itoa(user.uls,str,10));
-putrec(userdat,U_DLB,10,ultoa(user.dlb,str,10));
-putrec(userdat,U_DLS,5,itoa(user.dls,str,10));
-putrec(userdat,U_CDT,10,ultoa(user.cdt,str,10));
-putrec(userdat,U_MIN,10,ultoa(user.min,str,10));
-putrec(userdat,U_MIN+10,2,crlf);
-
-putrec(userdat,U_LEVEL,2,itoa(user.level,str,10));
-putrec(userdat,U_FLAGS1,8,ultoa(user.flags1,str,16));
-putrec(userdat,U_TL,2,nulstr);	/* unused */
-putrec(userdat,U_FLAGS2,8,ultoa(user.flags2,str,16));
-putrec(userdat,U_EXEMPT,8,ultoa(user.exempt,str,16));
-putrec(userdat,U_REST,8,ultoa(user.rest,str,16));
-putrec(userdat,U_REST+8,2,crlf);
-
-putrec(userdat,U_ROWS,2,itoa(user.rows,str,10));
-userdat[U_SEX]=user.sex;
-userdat[U_PROT]=user.prot;
-putrec(userdat,U_MISC,8,ultoa(user.misc,str,16));
-putrec(userdat,U_LEECH,2,itoa(user.leech,str,16));
-
-putrec(userdat,U_CURSUB,8,user.cursub);
-putrec(userdat,U_CURDIR,8,user.curdir);
-
-// putrec(userdat,U_CMDSET,2,itoa(user.cmdset,str,16)); /* Unused */
-putrec(userdat,U_CMDSET+2,2,crlf);
-
-putrec(userdat,U_XFER_CMD+LEN_XFER_CMD,2,crlf);
-
-putrec(userdat,U_MAIL_CMD+LEN_MAIL_CMD,2,crlf);
-
-putrec(userdat,U_FREECDT,10,ultoa(user.freecdt,str,10));
-
-putrec(userdat,U_FLAGS3,8,ultoa(user.flags3,str,16));
-putrec(userdat,U_FLAGS4,8,ultoa(user.flags4,str,16));
-
-if(user.xedit)
-	putrec(userdat,U_XEDIT,8,xedit[user.xedit-1]->code);
-else
-	putrec(userdat,U_XEDIT,8,nulstr);
-
-putrec(userdat,U_SHELL,8,shell[user.shell]->code);
-
-putrec(userdat,U_QWK,8,ultoa(user.qwk,str,16));
-putrec(userdat,U_TMPEXT,3,user.tmpext);
-putrec(userdat,U_CHAT,8,ultoa(user.chat,str,16));
-putrec(userdat,U_NS_TIME,8,ultoa(user.ns_time,str,16));
-
-putrec(userdat,U_UNUSED,29,crlf);
-putrec(userdat,U_UNUSED+29,2,crlf);
-
-sprintf(str,"%sUSER\\USER.DAT",data_dir);
-if((file=nopen(str,O_WRONLY|O_CREAT|O_DENYNONE))==-1) {
-	errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_DENYNONE);
-	return; }
-
-/***		This shouldn't be necessary
-if(filelength(file)<(long)((long)user.number*U_LEN))
-    lseek(file,0L,SEEK_END);
-else
-***/
-
-lseek(file,(long)((long)((long)user.number-1)*U_LEN),SEEK_SET);
-
-i=0;
-while(i<LOOP_NODEDAB
-	&& lock(file,(long)((long)(user.number-1)*U_LEN),U_LEN)==-1) {
-	if(i>10)
-		mswait(55);
-	i++; }
-
-if(i>=LOOP_NODEDAB) {
-	close(file);
-	errormsg(WHERE,ERR_LOCK,"USER.DAT",user.number);
-    return; }
-
-if(write(file,userdat,U_LEN)!=U_LEN) {
-	unlock(file,(long)((long)(user.number-1)*U_LEN),U_LEN);
-    close(file);
-    errormsg(WHERE,ERR_WRITE,str,U_LEN);
-    return; }
-unlock(file,(long)((long)(user.number-1)*U_LEN),U_LEN);
-close(file);
-for(i=1;i<=sys_nodes;i++) { /* instant user data update */
-    if(i==node_num)
-        continue;
-    getnodedat(i,&node,0);
-    if(node.useron==user.number && (node.status==NODE_INUSE
-        || node.status==NODE_QUIET)) {
-        getnodedat(i,&node,1);
-        node.misc|=NODE_UDAT;
-        putnodedat(i,node);
-        break; } }
-}
-
-
-/****************************************************************************/
-/* Puts 'name' into slot 'number' in USER\\NAME.DAT							*/
-/****************************************************************************/
-void putusername(int number, char *name)
-{
-	char str[256];
-	int file;
-	long length,l;
-
-sprintf(str,"%sUSER\\NAME.DAT",data_dir);
-if((file=nopen(str,O_RDWR|O_CREAT))==-1) {
-	errormsg(WHERE,ERR_OPEN,str,O_RDWR|O_CREAT);
-	return; }
-length=filelength(file);
-if(length && length%(LEN_ALIAS+2)) {
-	close(file);
-	errormsg(WHERE,ERR_LEN,str,length);
-	return; }
-if(length<(((long)number-1)*(LEN_ALIAS+2))) {
-	sprintf(str,"%*s",LEN_ALIAS,nulstr);
-	strset(str,ETX);
-	strcat(str,crlf);
-	lseek(file,0L,SEEK_END);
-	while(filelength(file)<((long)number*(LEN_ALIAS+2)))
-		write(file,str,(LEN_ALIAS+2)); }
-lseek(file,(long)(((long)number-1)*(LEN_ALIAS+2)),SEEK_SET);
-putrec(str,0,LEN_ALIAS,name);
-putrec(str,LEN_ALIAS,2,crlf);
-write(file,str,LEN_ALIAS+2);
-close(file);
-}
-
-/****************************************************************************/
-/* Fills the 'ptr' element of the each element of the sub[] array of sub_t  */
-/* and the sub_misc and sub_ptr global variables                            */
-/* Called from function main                                                */
-/****************************************************************************/
-void getmsgptrs()
-{
-	char	str[256];
-	ushort	ch;
-	uint	i;
-	int 	file;
-	long	length;
-	FILE	*stream;
-
-now=time(NULL);
-if(!useron.number)
-    return;
-bputs(text[LoadingMsgPtrs]);
-sprintf(str,"%sUSER\\PTRS\\%4.4u.IXB",data_dir,useron.number);
-if((stream=fnopen(&file,str,O_RDONLY))==NULL) {
-	for(i=0;i<total_subs;i++) {
-		sub_ptr[i]=sub[i]->ptr=sub_last[i]=sub[i]->last=0;
-		if(sub[i]->misc&SUB_NSDEF)
-			sub[i]->misc|=SUB_NSCAN;
-		else
-			sub[i]->misc&=~SUB_NSCAN;
-		if(sub[i]->misc&SUB_SSDEF)
-			sub[i]->misc|=SUB_SSCAN;
-		else
-			sub[i]->misc&=~SUB_SSCAN;
-		sub_misc[i]=sub[i]->misc; }
-	bputs(text[LoadedMsgPtrs]);
-	return; }
-length=filelength(file);
-for(i=0;i<total_subs;i++) {
-	if(length<(sub[i]->ptridx+1)*10L) {
-		sub[i]->ptr=sub[i]->last=0L;
-		if(sub[i]->misc&SUB_NSDEF)
-			sub[i]->misc|=SUB_NSCAN;
-		else
-			sub[i]->misc&=~SUB_NSCAN;
-		if(sub[i]->misc&SUB_SSDEF)
-			sub[i]->misc|=SUB_SSCAN;
-		else
-			sub[i]->misc&=~SUB_SSCAN; }
-	else {
-		fseek(stream,(long)sub[i]->ptridx*10L,SEEK_SET);
-		fread(&sub[i]->ptr,4,1,stream);
-		fread(&sub[i]->last,4,1,stream);
-		fread(&ch,2,1,stream);
-		if(ch&5)	/* Either bit 0 or 2 */
-			sub[i]->misc|=SUB_NSCAN;
-		else
-			sub[i]->misc&=~SUB_NSCAN;
-		if(ch&2)
-			sub[i]->misc|=SUB_SSCAN;
-		else
-			sub[i]->misc&=~SUB_SSCAN;
-		if(ch&0x100)
-			sub[i]->misc|=SUB_YSCAN;
-		else
-			sub[i]->misc&=~SUB_YSCAN; }
-	sub_ptr[i]=sub[i]->ptr;
-	sub_last[i]=sub[i]->last;
-    sub_misc[i]=sub[i]->misc; }
-fclose(stream);
-bputs(text[LoadedMsgPtrs]);
-}
-
-/****************************************************************************/
-/* Writes to DATA\USER\PTRS\xxxx.DAB the msgptr array for the current user	*/
-/* Called from functions main and newuser                                   */
-/****************************************************************************/
-void putmsgptrs()
-{
-	char	str[256];
-	ushort	idx,ch;
-	uint	i,j;
-	int 	file;
-	ulong	l=0L,length;
-
-if(!useron.number)
-    return;
-sprintf(str,"%sUSER\\PTRS\\%4.4u.IXB",data_dir,useron.number);
-if((file=nopen(str,O_WRONLY|O_CREAT))==-1) {
-	errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT);
-	return; }
-length=filelength(file);
-for(i=0;i<total_subs;i++) {
-	if(sub[i]->ptr==sub_ptr[i] && sub[i]->last==sub_last[i]
-		&& length>=((long)(sub[i]->ptridx+1)*10)
-		&& ((sub[i]->misc&(SUB_NSCAN|SUB_SSCAN|SUB_YSCAN))
-			==(sub_misc[i]&(SUB_NSCAN|SUB_SSCAN|SUB_YSCAN))))
-        continue;
-	while(filelength(file)<(long)(sub[i]->ptridx)*10) {
-        lseek(file,0L,SEEK_END);
-		idx=tell(file)/10;
-		for(j=0;j<total_subs;j++)
-			if(sub[j]->ptridx==idx)
-				break;
-        write(file,&l,4);
-        write(file,&l,4);
-		ch=0xff;					/* default to scan ON for new sub */
-		if(j<total_subs) {
-			if(!(sub[j]->misc&SUB_NSCAN))
-				ch&=~5;
-			if(!(sub[j]->misc&SUB_SSCAN))
-				ch&=~2;
-			if(sub[j]->misc&SUB_YSCAN)
-				ch|=0x100; }
-		write(file,&ch,2); }
-	lseek(file,(long)((long)(sub[i]->ptridx)*10),SEEK_SET);
-    write(file,&(sub[i]->ptr),4);
-	write(file,&(sub[i]->last),4);
-	ch=0xff;
-	if(!(sub[i]->misc&SUB_NSCAN))
-		ch&=~5;
-	if(!(sub[i]->misc&SUB_SSCAN))
-		ch&=~2;
-	if(sub[i]->misc&SUB_YSCAN)
-		ch|=0x100;
-	write(file,&ch,2); }
-close(file);
-if(!flength(str))				/* Don't leave 0 byte files */
-	remove(str);
-}
-
-/****************************************************************************/
-/* Checks for a duplicate user filed starting at user record offset         */
-/* 'offset', reading in 'datlen' chars, comparing to 'str' for each user    */
-/* except 'usernumber' if it is non-zero. Comparison is NOT case sensitive. */
-/* del is 1 if the search is to included deleted/inactive users 0 otherwise */
-/* Returns the usernumber of the dupe if found, 0 if not                    */
-/****************************************************************************/
-uint userdatdupe(uint usernumber, uint offset, uint datlen, char *dat
-    , char del)
-{
-    char str[256];
-    int i,file;
-    long l,length;
-
-truncsp(dat);
-sprintf(str,"%sUSER\\USER.DAT",data_dir);
-if((file=nopen(str,O_RDONLY|O_DENYNONE))==-1)
-    return(0);
-length=filelength(file);
-bputs(text[SearchingForDupes]);
-for(l=0;l<length && online;l+=U_LEN) {
-	checkline();
-    if(usernumber && l/U_LEN==usernumber-1)
-        continue;
-    lseek(file,l+offset,SEEK_SET);
-	i=0;
-	while(i<LOOP_NODEDAB && lock(file,l,U_LEN)==-1) {
-		if(i>10)
-			mswait(55);
-		i++; }
-
-	if(i>=LOOP_NODEDAB) {
-		close(file);
-		errormsg(WHERE,ERR_LOCK,"USER.DAT",l);
-		return(0); }
-
-    read(file,str,datlen);
-    for(i=0;i<datlen;i++)
-        if(str[i]==ETX) break;
-    str[i]=0;
-    truncsp(str);
-    if(!stricmp(str,dat)) {
-        if(!del) {      /* Don't include deleted users in search */
-            lseek(file,l+U_MISC,SEEK_SET);
-            read(file,str,8);
-            getrec(str,0,8,str);
-			if(ahtoul(str)&(DELETED|INACTIVE)) {
-				unlock(file,l,U_LEN);
-				continue; } }
-		unlock(file,l,U_LEN);
-        close(file);
-        bputs(text[SearchedForDupes]);
-		return((l/U_LEN)+1); }
-	else
-		unlock(file,l,U_LEN); }
-close(file);
-bputs(text[SearchedForDupes]);
-return(0);
-}
-
-
-/****************************************************************************/
-/* Removes any files in the user transfer index (XFER.IXT) that match the   */
-/* specifications of dest, or source user, or filename or any combination.  */
-/****************************************************************************/
-void rmuserxfers(int fromuser, int destuser, char *fname)
-{
-    char str[256],*ixtbuf;
-    int file;
-    long l,length;
-
-sprintf(str,"%sXFER.IXT",data_dir);
-if(!fexist(str))
-    return;
-if(!flength(str)) {
-    remove(str);
-    return; }
-if((file=nopen(str,O_RDONLY))==-1) {
-    errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-    return; }
-length=filelength(file);
-if((ixtbuf=(char *)MALLOC(length))==NULL) {
-    close(file);
-    errormsg(WHERE,ERR_ALLOC,str,length);
-    return; }
-if(read(file,ixtbuf,length)!=length) {
-    close(file);
-	FREE(ixtbuf);
-    errormsg(WHERE,ERR_READ,str,length);
-    return; }
-close(file);
-if((file=nopen(str,O_WRONLY|O_TRUNC))==-1) {
-	FREE(ixtbuf);
-    errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_TRUNC);
-    return; }
-for(l=0;l<length;l+=24) {
-    if(fname!=NULL && fname[0]) {               /* fname specified */
-        if(!strncmp(ixtbuf+l+5,fname,12)) {     /* this is the file */
-            if(destuser && fromuser) {          /* both dest and from user */
-                if(atoi(ixtbuf+l)==destuser && atoi(ixtbuf+l+18)==fromuser)
-                    continue; }                 /* both match */
-            else if(fromuser) {                 /* from user */
-                if(atoi(ixtbuf+l+18)==fromuser) /* matches */
-                    continue; }
-            else if(destuser) {                 /* dest user */
-                if(atoi(ixtbuf+l)==destuser)    /* matches */
-                    continue; }
-            else continue; } }                  /* no users, so match */
-    else if(destuser && fromuser) {
-        if(atoi(ixtbuf+l+18)==fromuser && atoi(ixtbuf+l)==destuser)
-            continue; }
-    else if(destuser && atoi(ixtbuf+l)==destuser)
-        continue;
-    else if(fromuser && atoi(ixtbuf+l+18)==fromuser)
-        continue;
-    write(file,ixtbuf+l,24); }
-close(file);
-FREE(ixtbuf);
-}
-
diff --git a/src/sbbs2/dcdwatch/dcdwatch.c b/src/sbbs2/dcdwatch/dcdwatch.c
deleted file mode 100644
index 6ee6a3fa42..0000000000
--- a/src/sbbs2/dcdwatch/dcdwatch.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/* DCDWATCH.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* Program to execute another program, but terminate if carrier detect is	*/
-/* lost */
-
-/* Compile small memory model */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <process.h>
-#include <dos.h>
-#include <io.h>
-#include <alloc.h>
-
-extern unsigned _heaplen=2048;
-
-#define uint unsigned int
-
-#pragma warn -par
-
-char hungup=0;
-uint far *msr;
-
-void interrupt (*old_int21)(void);
-
-struct	REGPACK r;
-
-void interrupt new_int21(uint bp, uint di, uint si, uint ds, uint es,
-	uint dx, uint cx, uint bx, uint ax, uint ip, uint cs, uint flags)
-{
-
-r.r_ax=ax;
-r.r_bx=bx;
-r.r_cx=cx;
-r.r_dx=dx;
-r.r_bp=bp;
-r.r_si=si;
-r.r_di=di;
-r.r_flags=flags;
-r.r_ds=ds;
-r.r_es=es;
-
-intr(0xaa,&r);
-
-ax=r.r_ax;
-bx=r.r_bx;
-cx=r.r_cx;
-dx=r.r_dx;
-bp=r.r_bp;
-si=r.r_si;
-di=r.r_di;
-flags=r.r_flags;
-ds=r.r_ds;
-es=r.r_es;
-
-if(!(*(msr)&0x8000) && !hungup) {
-    hungup=1;
-	r.r_ax=0x4c00;
-	intr(0xaa,&r); }					 /* so exit */
-}
-
-#pragma warn +par
-
-
-int main(int argc, char **argv)
-{
-	char str[256],*arg[30],*comspec;
-	int i;
-	FILE *stream;
-
-if(argc<3) {
-	printf("usage: %%!dcdwatch %%& <program> <arguments>\n");
-	exit(1) ;}
-
-msr=(uint far *)atol(argv[1]);
-
-if((stream=fopen("INTRSBBS.DAT","r"))!=NULL) {
-	fgets(str,81,stream);
-	msr=(uint far *)atol(str);
-	fclose(stream);
-	remove("INTRSBBS.DAT"); }
-
-if(msr) {
-	old_int21=getvect(0x21);
-	setvect(0xAA,old_int21);
-	setvect(0x21,new_int21); }
-
-comspec=getenv("COMSPEC");
-
-arg[0]=comspec;
-arg[1]="/c";
-for(i=2;i<30;i++)
-	arg[i]=argv[i];
-
-i=spawnvp(P_WAIT,arg[0],arg);
-
-if(msr)
-	setvect(0x21,old_int21);
-return(i);
-}
diff --git a/src/sbbs2/delfiles/delfiles.c b/src/sbbs2/delfiles/delfiles.c
deleted file mode 100644
index e4f45ffe7d..0000000000
--- a/src/sbbs2/delfiles/delfiles.c
+++ /dev/null
@@ -1,763 +0,0 @@
-#line 1 "DELFILES.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-
-#define DELFILES_VER "1.01"
-
-char tmp[256];
-
-#define MAX_NOTS	25
-
-#define ALL 	(1L<<0)
-#define OFFLINE (1L<<1)
-#define NO_LINK (1L<<2)
-#define REPORT	(1L<<3)
-
-void bail(int code)
-{
-exit(code);
-}
-
-long lputs(char FAR16 *str)
-{
-    char tmp[256];
-	int i,j,k;
-
-j=strlen(str);
-for(i=k=0;i<j;i++)      /* remove CRs */
-    if(str[i]==CR && str[i+1]==LF)
-        continue;
-    else
-        tmp[k++]=str[i];
-tmp[k]=0;
-return(fputs(tmp,stdout));
-}
-
-/****************************************************************************/
-/* Performs printf() through local assembly routines                        */
-/* Called from everywhere                                                   */
-/****************************************************************************/
-int lprintf(char *fmat, ...)
-{
-	va_list argptr;
-	char sbuf[256];
-	int chcount;
-
-va_start(argptr,fmat);
-chcount=vsprintf(sbuf,fmat,argptr);
-va_end(argptr);
-lputs(sbuf);
-return(chcount);
-}
-
-/****************************************************************************/
-/* Truncates white-space chars off end of 'str' and terminates at first tab */
-/****************************************************************************/
-void truncsp(char *str)
-{
-	int c;
-
-str[strcspn(str,"\t")]=0;
-c=strlen(str);
-while(c && (uchar)str[c-1]<=SP) c--;
-str[c]=0;
-}
-
-/****************************************************************************/
-/* Puts a backslash on path strings 										*/
-/****************************************************************************/
-void backslash(char *str)
-{
-    int i;
-
-i=strlen(str);
-if(i && str[i-1]!='\\') {
-    str[i]='\\'; str[i+1]=0; }
-}
-
-/****************************************************************************/
-/* Network open function. Opens all files DENYALL and retries LOOP_NOPEN    */
-/* number of times if the attempted file is aREADy open or denying access  */
-/* for some other reason.	All files are opened in BINARY mode.			*/
-/****************************************************************************/
-int nopen(char *str, int access)
-{
-	char logstr[256];
-	int file,share,count=0;
-
-if(access==O_RDONLY) share=SH_DENYWR;
-	else share=SH_DENYRW;
-while(((file=sopen(str,O_BINARY|access,share,S_IWRITE))==-1)
-	&& errno==EACCES && count++<LOOP_NOPEN);
-if(file==-1 && errno==EACCES)
-	lputs("\7\r\nNOPEN: ACCESS DENIED\r\n\7");
-return(file);
-}
-
-/****************************************************************************/
-/* This function performs an nopen, but returns a file stream with a buffer */
-/* allocated.																*/
-/****************************************************************************/
-FILE *fnopen(int *file, char *str, int access)
-{
-	char mode[128];
-	FILE *stream;
-
-if(((*file)=nopen(str,access))==-1) {
-	printf("nopen -1\n");
-	return(NULL); }
-
-if(access&O_APPEND) {
-	if(access&O_RDONLY)
-		strcpy(mode,"a+");
-	else
-		strcpy(mode,"a"); }
-else {
-	if(access&O_WRONLY)
-		strcpy(mode,"r+");
-	else
-		strcpy(mode,"r"); }
-stream=fdopen((*file),mode);
-if(stream==NULL) {
-	printf("fdopen NULL mode='%s'\n",mode);
-	close(*file);
-	return(NULL); }
-setvbuf(stream,NULL,_IOFBF,16*1024);
-return(stream);
-}
-
-/****************************************************************************/
-/* Checks the disk drive for the existence of a file. Returns 1 if it       */
-/* exists, 0 if it doesn't.                                                 */
-/****************************************************************************/
-char fexist(char *filespec)
-{
-	struct find_t f;
-	uint i;
-
-i=_dos_findfirst(filespec,_A_NORMAL,&f);
-#ifdef __WATCOMC__
-_dos_findclose(&f);
-#endif
-if(!i)
-    return(1);
-return(0);
-}
-
-/****************************************************************************/
-/* Returns the length of the file in 'filespec'                             */
-/****************************************************************************/
-long flength(char *filespec)
-{
-	struct find_t f;
-	uint i;
-
-i=_dos_findfirst(filespec,_A_NORMAL,&f);
-#ifdef __WATCOMC__
-_dos_findclose(&f);
-#endif
-if(!i)
-	return(f.size);
-return(-1L);
-}
-
-#ifndef __FLAT__
-/****************************************************************************/
-/* This function reads files that are potentially larger than 32k.  		*/
-/* Up to one megabyte of data can be read with each call.                   */
-/****************************************************************************/
-long lread(int file, char HUGE16 *buf,long bytes)
-{
-	long count;
-
-for(count=bytes;count>32767;count-=32767,buf+=32767)
-	if(read(file,(char *)buf,32767)!=32767)
-		return(-1L);
-if(read(file,(char *)buf,(int)count)!=count)
-	return(-1L);
-return(bytes);
-}
-
-/****************************************************************************/
-/* This function writes files that are potentially larger than 32767 bytes  */
-/* Up to one megabytes of data can be written with each call.				*/
-/****************************************************************************/
-long lwrite(int file, char HUGE16 *buf, long bytes)
-{
-
-	long count;
-
-for(count=bytes;count>32767;count-=32767,buf+=32767)
-	if(write(file,(char *)buf,32767)!=32767)
-		return(-1L);
-if(write(file,(char *)buf,(int)count)!=count)
-	return(-1L);
-return(bytes);
-}
-#endif
-
-/****************************************************************************/
-/* Removes any files in the user transfer index (XFER.IXT) that match the   */
-/* specifications of dest, or source user, or filename or any combination.  */
-/****************************************************************************/
-void rmuserxfers(int fromuser, int destuser, char *fname)
-{
-    char str[256],*ixtbuf;
-    int file;
-    long l,length;
-
-sprintf(str,"%sXFER.IXT",data_dir);
-if(!fexist(str))
-    return;
-if(!flength(str)) {
-    remove(str);
-    return; }
-if((file=nopen(str,O_RDONLY))==-1) {
-	printf("ERROR opening %s\r\n",str);
-    return; }
-length=filelength(file);
-if((ixtbuf=(char *)MALLOC(length))==NULL) {
-    close(file);
-	printf("ERROR allocating %lu bytes for %s\r\n",length,str);
-    return; }
-if(read(file,ixtbuf,length)!=length) {
-    close(file);
-	FREE(ixtbuf);
-	printf("ERROR reading %lu bytes from %s\r\n",length,str);
-    return; }
-close(file);
-if((file=nopen(str,O_WRONLY|O_TRUNC))==-1) {
-	FREE(ixtbuf);
-	printf("ERROR opening %s\r\n",str);
-    return; }
-for(l=0;l<length;l+=24) {
-    if(fname!=NULL && fname[0]) {               /* fname specified */
-        if(!strncmp(ixtbuf+l+5,fname,12)) {     /* this is the file */
-            if(destuser && fromuser) {          /* both dest and from user */
-                if(atoi(ixtbuf+l)==destuser && atoi(ixtbuf+l+18)==fromuser)
-                    continue; }                 /* both match */
-            else if(fromuser) {                 /* from user */
-                if(atoi(ixtbuf+l+18)==fromuser) /* matches */
-                    continue; }
-            else if(destuser) {                 /* dest user */
-                if(atoi(ixtbuf+l)==destuser)    /* matches */
-                    continue; }
-            else continue; } }                  /* no users, so match */
-    else if(destuser && fromuser) {
-        if(atoi(ixtbuf+l+18)==fromuser && atoi(ixtbuf+l)==destuser)
-            continue; }
-    else if(destuser && atoi(ixtbuf+l)==destuser)
-        continue;
-    else if(fromuser && atoi(ixtbuf+l+18)==fromuser)
-        continue;
-    write(file,ixtbuf+l,24); }
-close(file);
-FREE(ixtbuf);
-}
-
-/****************************************************************************/
-/* Removes DAT and IXB entries for the file in the struct 'f'               */
-/****************************************************************************/
-void removefiledat(file_t f)
-{
-	char c,str[256],ixbname[12],HUGE16 *ixbbuf,fname[13];
-	int file;
-	ulong l,length;
-
-strcpy(fname,f.name);
-for(c=8;c<12;c++)   /* Turn FILENAME.EXT into FILENAMEEXT */
-    fname[c]=fname[c+1];
-sprintf(str,"%s%s.IXB",dir[f.dir]->data_dir,dir[f.dir]->code);
-if((file=nopen(str,O_RDONLY))==-1) {
-	printf("ERROR opening %s\r\n",str);
-    return; }
-length=filelength(file);
-if(!length) {
-	close(file);
-	return; }
-if((ixbbuf=(char *)MALLOC(length))==0) {
-    close(file);
-	printf("ERROR allocating %lu bytes for %s\r\n",length,str);
-    return; }
-if(lread(file,ixbbuf,length)!=length) {
-    close(file);
-	printf("ERROR reading %lu bytes from %s\r\n",length,str);
-	FREE((char *)ixbbuf);
-    return; }
-close(file);
-if((file=nopen(str,O_WRONLY|O_TRUNC))==-1) {
-	printf("ERROR opening %s\r\n",str);
-    return; }
-for(l=0;l<length;l+=F_IXBSIZE) {
-    for(c=0;c<11;c++)
-        ixbname[c]=ixbbuf[l+c];
-    ixbname[c]=0;
-    if(strcmp(ixbname,fname))
-		if(lwrite(file,&ixbbuf[l],F_IXBSIZE)!=F_IXBSIZE) {
-            close(file);
-			printf("ERROR writing %lu bytes to %s\r\n",F_IXBSIZE,str);
-			FREE((char *)ixbbuf);
-            return; } }
-FREE((char *)ixbbuf);
-close(file);
-sprintf(str,"%s%s.DAT",dir[f.dir]->data_dir,dir[f.dir]->code);
-if((file=nopen(str,O_WRONLY))==-1) {
-	printf("ERROR opening %s\r\n",str);
-    return; }
-lseek(file,f.datoffset,SEEK_SET);
-c=ETX;          /* If first char of record is ETX, record is unused */
-if(write(file,&c,1)!=1) { /* So write a D_T on the first byte of the record */
-    close(file);
-	printf("ERROR writing to %s\r\n",str);
-    return; }
-close(file);
-if(f.dir==user_dir)  /* remove file from index */
-    rmuserxfers(0,0,f.name);
-}
-
-/****************************************************************************/
-/* Places into 'strout' CR or ETX terminated string starting at             */
-/* 'start' and ending at 'start'+'length' or terminator from 'strin'        */
-/****************************************************************************/
-void getrec(char *strin,int start,int length,char *strout)
-{
-    int i=0,stop;
-
-stop=start+length;
-while(start<stop) {
-    if(strin[start]==ETX)
-        break;
-    strout[i++]=strin[start++]; }
-strout[i]=0;
-}
-
-/****************************************************************************/
-/* Turns FILE    .EXT into FILE.EXT                                         */
-/****************************************************************************/
-char *unpadfname(char *filename, char *str)
-{
-    char c,d;
-
-for(c=0,d=0;c<strlen(filename);c++)
-    if(filename[c]!=SP) str[d++]=filename[c];
-str[d]=0;
-return(str);
-}
-
-/****************************************************************************/
-/* Returns the time/date of the file in 'filespec' in time_t (unix) format  */
-/****************************************************************************/
-long fdate(char *filespec)
-{
-	int 	file;
-#ifdef __WATCOMC__
-	unsigned short ft,fd;
-#else
-	unsigned ft,fd;
-#endif
-	struct	tm t;
-
-if((file=nopen(filespec,O_RDONLY))==-1)
-	return(0);
-_dos_getftime(file,&fd,&ft);
-close(file);
-memset(&t,0,sizeof(t));
-t.tm_year=((fd&0xfe00)>>9)+80;
-t.tm_mon=((fd&0x01e0)>>5)-1;
-t.tm_mday=fd&0x1f;
-t.tm_hour=(ft&0xf800)>>11;
-t.tm_min=(ft&0x07e0)>>5;
-t.tm_sec=(ft&0x001f)<<1;
-return(mktime(&t));
-}
-
-/****************************************************************************/
-/* Converts an ASCII Hex string into an ulong                               */
-/****************************************************************************/
-ulong ahtoul(char *str)
-{
-    ulong l,val=0;
-
-while((l=(*str++)|0x20)!=0x20)
-    val=(l&0xf)+(l>>6&1)*9+val*16;
-return(val);
-}
-
-uint hptoi(char *str)
-{
-	char tmp[128];
-	uint i;
-
-if(!str[1] || toupper(str[0])<='F')
-	return(ahtoul(str));
-strcpy(tmp,str);
-tmp[0]='F';
-i=ahtoul(tmp)+((toupper(str[0])-'F')*0x10);
-return(i);
-}
-
-/****************************************************************************/
-/* Gets filedata from dircode.DAT file										*/
-/* Need fields .name ,.dir and .offset to get other info    				*/
-/* Does not fill .dateuled or .datedled fields.                             */
-/****************************************************************************/
-void getfiledat(file_t *f)
-{
-	char buf[F_LEN+1],str[256],tmp[256];
-	int file;
-	long length;
-
-sprintf(str,"%s%s.DAT",dir[f->dir]->data_dir,dir[f->dir]->code);
-if((file=nopen(str,O_RDONLY))==-1) {
-	printf("ERROR opening %s\r\n",str);
-	return; }
-length=filelength(file);
-if(f->datoffset>length) {
-	close(file);
-	printf("ERROR %s filelength %ld is less than offset\r\n",str,length);
-	return; }
-if(length%F_LEN) {
-	close(file);
-	printf("ERROR %s filelength %ld is not evenly divisible\r\n",str,length);
-	return; }
-lseek(file,f->datoffset,SEEK_SET);
-if(read(file,buf,F_LEN)!=F_LEN) {
-	close(file);
-	printf("ERROR reading %ld bytes from %s\r\n",F_LEN,str);
-	return; }
-close(file);
-getrec(buf,F_ALTPATH,2,str);
-f->altpath=hptoi(str);
-getrec(buf,F_CDT,7,str);
-f->cdt=atol(str);
-
-if(!f->size) {					/* only read disk if this is null */
-	if(dir[f->dir]->misc&DIR_FCHK) {
-		sprintf(str,"%s%s"
-			,f->altpath>0 && f->altpath<=altpaths ? altpath[f->altpath-1]
-			: dir[f->dir]->path,unpadfname(f->name,tmp));
-		f->size=flength(str);
-		f->date=fdate(str); }
-	else {
-		f->size=f->cdt;
-		f->date=0; } }
-//if((f->size>0L) && cur_cps)
-//	  f->timetodl=(f->size/(ulong)cur_cps);
-//else
-	f->timetodl=0;
-
-getrec(buf,F_DESC,LEN_FDESC,f->desc);
-getrec(buf,F_ULER,LEN_ALIAS,f->uler);
-getrec(buf,F_TIMESDLED,5,str);
-f->timesdled=atoi(str);
-getrec(buf,F_OPENCOUNT,3,str);
-f->opencount=atoi(str);
-if(buf[F_MISC]!=ETX)
-	f->misc=buf[F_MISC]-SP;
-else
-	f->misc=0;
-}
-
-/****************************************************************************/
-/* Checks  directory data file for 'filename' (must be padded). If found,   */
-/* it returns the 1, else returns 0.                                        */
-/* Called from upload and bulkupload                                        */
-/****************************************************************************/
-char findfile(uint dirnum, char *filename)
-{
-	char str[256],c,fname[128],HUGE16 *ixbbuf;
-    int file;
-    ulong length,l;
-
-strcpy(fname,filename);
-for(c=8;c<12;c++)   /* Turn FILENAME.EXT into FILENAMEEXT */
-    fname[c]=fname[c+1];
-sprintf(str,"%s%s.IXB",dir[dirnum]->data_dir,dir[dirnum]->code);
-if((file=nopen(str,O_RDONLY))==-1) return(0);
-length=filelength(file);
-if(!length) {
-    close(file);
-    return(0); }
-if((ixbbuf=(char *)MALLOC(length))==NULL) {
-    close(file);
-	printf("ERR_ALLOC %s %lu\n",str,length);
-    return(0); }
-if(lread(file,ixbbuf,length)!=length) {
-    close(file);
-	FREE((char *)ixbbuf);
-    return(0); }
-close(file);
-for(l=0;l<length;l+=F_IXBSIZE) {
-    for(c=0;c<11;c++)
-        if(fname[c]!=ixbbuf[l+c]) break;
-    if(c==11) break; }
-FREE((char *)ixbbuf);
-if(l<length)
-    return(1);
-return(0);
-}
-
-/****************************************************************************/
-/* Turns FILE.EXT into FILE    .EXT                                         */
-/* Called from upload                                                       */
-/****************************************************************************/
-char *padfname(char *filename, char *str)
-{
-    char c,d;
-
-for(c=0;c<8;c++)
-    if(filename[c]=='.' || !filename[c]) break;
-    else str[c]=filename[c];
-d=c;
-if(filename[c]=='.') c++;
-while(d<8)
-    str[d++]=SP;
-str[d++]='.';
-while(d<12)
-    if(!filename[c]) break;
-    else str[d++]=filename[c++];
-while(d<12)
-    str[d++]=SP;
-str[d]=0;
-return(str);
-}
-
-void main(int argc, char **argv)
-{
-	char str[256],fname[256],not[MAX_NOTS][9],nots=0,*p;
-	uchar HUGE16 *ixbbuf;
-	int i,j,dirnum,libnum,file;
-	ulong l,m,n,length;
-	long misc=0;
-	time_t now;
-	read_cfg_text_t txt;
-	file_t workfile;
-	struct find_t ff;
-
-putenv("TZ=UCT0");
-_fmode=O_BINARY;
-setvbuf(stdout,NULL,_IONBF,0);
-
-fprintf(stderr,"\nDELFILES Version %s (%s) - Removes files from Synchronet "
-	"Filebase\n"
-	,DELFILES_VER
-#if defined(__OS2__)
-	,"OS/2"
-#elif defined(__NT__)
-    ,"Win32"
-#elif defined(__DOS4G__)
-	,"DOS4G"
-#elif defined(__FLAT__)
-	,"DOS32"
-#else
-	,"DOS16"
-#endif
-	);
-
-if(argc<2) {
-	printf("\n   usage: DELFILES <dir_code or * for ALL> [switches]\n");
-	printf("\nswitches: /LIB name All directories of specified library\n");
-    printf("          /NOT code Exclude specific directory\n");
-	printf("          /OFF      Remove files that are offline "
-		"(don't exist on disk)\n");
-	printf("          /NOL      Remove files with no link "
-		"(don't exist in database)\n");
-	printf("          /RPT      Report findings only "
-		"(don't delete any files)\n");
-	exit(0); }
-
-p=getenv("SBBSNODE");
-if(p==NULL) {
-	printf("\nSBBSNODE environment variable not set.\n");
-	printf("\nExample: SET SBBSNODE=C:\\SBBS\\NODE1\n");
-	exit(1); }
-
-putenv("TZ=UCT0");
-
-strcpy(node_dir,p);
-if(node_dir[strlen(node_dir)-1]!='\\')
-	strcat(node_dir,"\\");
-
-txt.openerr="\7\nError opening %s for read.\n";
-txt.reading="\nReading %s...";
-txt.readit="\rRead %s       ";
-txt.allocerr="\7\nError allocating %u bytes of memory\n";
-txt.error="\7\nERROR: Offset %lu in %s\r\n\n";
-
-read_node_cfg(txt);
-if(ctrl_dir[0]=='.') {   /* Relative path */
-	strcpy(str,ctrl_dir);
-	sprintf(ctrl_dir,"%s%s",node_dir,str); }
-read_main_cfg(txt);
-if(data_dir[0]=='.') {   /* Relative path */
-	strcpy(str,data_dir);
-	sprintf(data_dir,"%s%s",node_dir,str); }
-if(temp_dir[1]!=':' && temp_dir[0]!='\\') {
-	strcpy(str,temp_dir);
-	sprintf(temp_dir,"%s%s",node_dir,str); }
-read_file_cfg(txt);
-printf("\n\n");
-
-dirnum=libnum=-1;
-if(argv[1][0]=='*')
-	misc|=ALL;
-else if(argv[1][0]!='/') {
-	strupr(argv[1]);
-	for(i=0;i<total_dirs;i++)
-		if(!stricmp(argv[1],dir[i]->code))
-			break;
-	if(i>=total_dirs) {
-		printf("\nDirectory code '%s' not found.\n",argv[1]);
-		exit(1); }
-	dirnum=i; }
-for(i=1;i<argc;i++) {
-	if(!stricmp(argv[i],"/LIB")) {
-		if(dirnum!=-1) {
-			printf("\nBoth directory code and /LIB parameters were used.\n");
-			exit(1); }
-		i++;
-		if(i>=argc) {
-			printf("\nLibrary short name must follow /LIB parameter.\n");
-			exit(1); }
-		strupr(argv[i]);
-		for(j=0;j<total_libs;j++)
-			if(!stricmp(lib[j]->sname,argv[i]))
-				break;
-		if(j>=total_libs) {
-			printf("\nLibrary short name '%s' not found.\n",argv[i]);
-			exit(1); }
-		libnum=j; }
-	else if(!stricmp(argv[i],"/NOT")) {
-		if(nots>=MAX_NOTS) {
-			printf("\nMaximum number of /NOT options (%u) exceeded.\n"
-				,MAX_NOTS);
-			exit(1); }
-		i++;
-		if(i>=argc) {
-			printf("\nDirectory internal code must follow /NOT parameter.\n");
-            exit(1); }
-		sprintf(not[nots++],"%.8s",argv[i]); }
-	else if(!stricmp(argv[i],"/OFF"))
-		misc|=OFFLINE;
-	else if(!stricmp(argv[i],"/NOL"))
-		misc|=NO_LINK;
-	else if(!stricmp(argv[i],"/RPT"))
-		misc|=REPORT;
-	else if(!stricmp(argv[i],"/ALL")) {
-		if(dirnum!=-1) {
-			printf("\nBoth directory code and /ALL parameters were used.\n");
-            exit(1); }
-		if(libnum!=-1) {
-			printf("\nBoth library name and /ALL parameters were used.\n");
-			exit(1); }
-		misc|=ALL; } }
-
-for(i=0;i<total_dirs;i++) {
-	if(!(misc&ALL) && i!=dirnum && dir[i]->lib!=libnum)
-		continue;
-	for(j=0;j<nots;j++)
-		if(!stricmp(not[j],dir[i]->code))
-			break;
-	if(j<nots)
-        continue;
-
-	if(misc&NO_LINK && dir[i]->misc&DIR_FCHK) {
-		strcpy(tmp,dir[i]->path);
-		if(tmp[0]=='.') {
-			sprintf(str,"%s%s",node_dir,tmp);
-			strcpy(tmp,str); }
-		sprintf(str,"%s*.*",tmp);
-		printf("\nSearching %s for unlinked files\n",str);
-		for(j=_dos_findfirst(str,_A_NORMAL,&ff);!j
-			;j=_dos_findnext(&ff)) {
-			strupr(ff.name);
-			padfname(ff.name,str);
-			if(!findfile(i,str)) {
-				sprintf(str,"%s%s",tmp,ff.name);
-				printf("Removing %s (not in database)\n",ff.name);
-				if(!(misc&REPORT) && remove(str))
-					printf("Error removing %s\n",str); } }
-#ifdef __WATCOMC__
-		_dos_findclose(&ff);
-#endif
-	}
-
-	if(!dir[i]->maxage && !(misc&OFFLINE))
-		continue;
-
-	printf("\nScanning %s %s\n",lib[dir[i]->lib]->sname,dir[i]->lname);
-
-	sprintf(str,"%s%s.IXB",dir[i]->data_dir,dir[i]->code);
-	if((file=nopen(str,O_RDONLY))==-1)
-		continue;
-    l=filelength(file);
-	if(!l) {
-		close(file);
-		continue; }
-	if((ixbbuf=(char *)MALLOC(l))==NULL) {
-		close(file);
-		printf("\7ERR_ALLOC %s %lu\n",str,l);
-        continue; }
-	if(read(file,ixbbuf,l)!=l) {
-		close(file);
-		printf("\7ERR_READ %s %lu\n",str,l);
-		FREE((char *)ixbbuf);
-		continue; }
-    close(file);
-
-	m=0L;
-	now=time(NULL);
-	while(m<l) {
-		memset(&workfile,0,sizeof(file_t));
-		for(j=0;j<12 && m<l;j++)
-			if(j==8)
-				fname[j]='.';
-			else
-				fname[j]=ixbbuf[m++];
-		fname[j]=0;
-		strcpy(workfile.name,fname);
-		unpadfname(workfile.name,fname);
-		workfile.dir=i;
-		sprintf(str,"%s%s"
-			,workfile.altpath>0 && workfile.altpath<=altpaths
-				? altpath[workfile.altpath-1]
-			: dir[workfile.dir]->path,fname);
-		if(str[0]=='.') {
-			sprintf(tmp,"%s%s",node_dir,str);
-			strcpy(str,tmp); }
-		workfile.datoffset=ixbbuf[m]|((long)ixbbuf[m+1]<<8)
-			|((long)ixbbuf[m+2]<<16);
-		workfile.dateuled=(ixbbuf[m+3]|((long)ixbbuf[m+4]<<8)
-			|((long)ixbbuf[m+5]<<16)|((long)ixbbuf[m+6]<<24));
-		workfile.datedled=(ixbbuf[m+7]|((long)ixbbuf[m+8]<<8)
-			|((long)ixbbuf[m+9]<<16)|((long)ixbbuf[m+10]<<24));
-		m+=11;
-		if(dir[i]->maxage && dir[i]->misc&DIR_SINCEDL && workfile.datedled
-			&& (now-workfile.datedled)/86400L>dir[i]->maxage) {
-				printf("Deleting %s (%ld days since last download)\n",fname
-					,(now-workfile.datedled)/86400L);
-				getfiledat(&workfile);
-				if(!(misc&REPORT)) {
-					removefiledat(workfile);
-					if(remove(str))
-						printf("Error removing %s\n",str); } }
-		else if(dir[i]->maxage
-			&& !(workfile.datedled && dir[i]->misc&DIR_SINCEDL)
-			&& (now-workfile.dateuled)/86400L>dir[i]->maxage) {
-				printf("Deleting %s (uploaded %ld days ago)\n",fname
-					,(now-workfile.dateuled)/86400L);
-				getfiledat(&workfile);
-				if(!(misc&REPORT)) {
-					removefiledat(workfile);
-					if(remove(str))
-						printf("Error removing %s\n",str); } }
-		else if(misc&OFFLINE && dir[i]->misc&DIR_FCHK && !fexist(str)) {
-				printf("Removing %s (doesn't exist)\n",fname);
-				getfiledat(&workfile);
-				if(!(misc&REPORT))
-					removefiledat(workfile); } }
-
-	FREE((char *)ixbbuf); }
-}
diff --git a/src/sbbs2/delfiles/makeall.bat b/src/sbbs2/delfiles/makeall.bat
deleted file mode 100755
index d68900c3d3..0000000000
--- a/src/sbbs2/delfiles/makeall.bat
+++ /dev/null
@@ -1,11 +0,0 @@
-@echo off
-wmake OS=DOS %1 %2 %3 %4 %5
-if errorlevel 1 goto end
-wmake OS=DOSX %1 %2 %3 %4 %5
-if errorlevel 1 goto end
-wmake OS=OS2 %1 %2 %3 %4 %5
-if errorlevel 1 goto end
-wmake OS=NT %1 %2 %3 %4 %5
-if errorlevel 1 goto end
-:end
-
diff --git a/src/sbbs2/delfiles/makefile b/src/sbbs2/delfiles/makefile
deleted file mode 100644
index 4b9781ebda..0000000000
--- a/src/sbbs2/delfiles/makefile
+++ /dev/null
@@ -1,89 +0,0 @@
-############################################
-# Makefile for Synchronet DELFILES Utility #
-# For use with Watcom C/C++ 		   #
-############################################
-
-!ifndef OS
-OS	= DOS
-!endif
-
-!ifeq OS DOS
-CC	= *wcc
-!else
-CC	= *wcc386
-!endif
-
-LD	= *wlink
-INCLUDE = \watcom\h;\watcom\h\os2;..;..\smb;..\rio
-
-
-!ifeq OS DOS
-CFLAGS	= -I$(INCLUDE) -s -fh=$*.pch -bt=$(OS) -fo=$(OS)\ -ml
-!else
-CFLAGS	= -I$(INCLUDE) -s -fh=$*.pch -bt=$(OS) -fo=$(OS)\
-!endif
-
-!ifeq OS DOS
-SYSTEM  = DOS
-!endif
-!ifeq OS OS2
-SYSTEM  = OS2V2
-!endif
-!ifeq OS DOSX
-SYSTEM  = DOS4G
-!endif
-!ifeq OS NT
-SYSTEM	= NT
-!endif
-
-LFLAGS  = option stack=16k system $(SYSTEM)
-
-MAIN	= $(OS)\delfiles.exe
-OBJS	= $(OS)\delfiles.obj $(OS)\scfgvars.obj $(OS)\scfglib1.obj &
-	  $(OS)\ars.obj $(OS)\scfglib2.obj
-HEADERS = ..\sbbs.h ..\sbbsdefs.h ..\gen_defs.h ..\scfgvars.c
-
-# Implicit C Compile Rule
-.c.obj:
-	@echo Compiling (I) $[@ to $^@ ...
-	$(CC) $(CFLAGS) $[@
-
-# Main EXE Link Rule
-$(MAIN): $(OBJS) 
-    	@echo Linking $< ...
-	$(LD) $(LFLAGS) file { $(OBJS) }
-
-# Global Variables
-$(OS)\scfgvars.obj: ..\scfgvars.c ..\sbbsdefs.h
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) $[@
-
-# ARS
-$(OS)\ars.obj: ..\ars.c ..\ars_defs.h
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) $[@
-
-# Shared Functions
-$(OS)\scfglib1.obj: ..\scfglib1.c ..\sbbs.h ..\sbbsdefs.h ..\scfgvars.c &
-	..\scfglib.h
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) &
--DNO_MSGS_CFG &
--DNO_TEXT_CFG &
--DNO_XTRN_CFG &
--DNO_CMDS_CFG &
--DNO_CHAT_CFG &
-$[@
-
-# Shared Functions
-$(OS)\scfglib2.obj: ..\scfglib2.c ..\sbbs.h ..\sbbsdefs.h ..\scfgvars.c &
-	..\scfglib.h
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) &
--DNO_MSGS_CFG &
--DNO_TEXT_CFG &
--DNO_XTRN_CFG &
--DNO_CMDS_CFG &
--DNO_CHAT_CFG &
-$[@
-
diff --git a/src/sbbs2/delfiles/makefile.bc b/src/sbbs2/delfiles/makefile.bc
deleted file mode 100644
index 2350abeb74..0000000000
--- a/src/sbbs2/delfiles/makefile.bc
+++ /dev/null
@@ -1,77 +0,0 @@
-############################################
-# Makefile for Synchronet ADDFILES Utility #
-# For use with Borland C++ for DOS or OS/2 #
-############################################
-
-# Macros
-CC	= bcc
-LD	= tlink
-!ifdef __OS2__
-OS	= OS2
-INCLUDE = c:\bcos2\include;..;..\smb;..\rio
-LIB	= c:\bcos2\lib
-CFLAGS  = -N -d -C -I$(INCLUDE)
-LFLAGS  = -c
-!else
-OS	= DOS
-INCLUDE = \bc31\include;..;..\smb;..\rio
-LIB	= \bc31\lib
-MODEL	= l
-CFLAGS	= -N -d -C -m$(MODEL) -I$(INCLUDE)
-LFLAGS	= -n -c
-!endif
-MAIN	= $(OS)\delfiles.exe
-OBJS	= $(OS)\delfiles.obj $(OS)\scfgvars.obj $(OS)\scfglib1.obj \
-	  $(OS)\ars.obj $(OS)\scfglib2.obj
-HEADERS = ..\sbbs.h ..\sbbsdefs.h ..\gen_defs.h ..\scfgvars.c
-
-# Implicit C Compile Rule
-{.}.c.obj:
-	@echo Compiling (I) $< to $@ ...
-	$(CC) $(CFLAGS) -n$(OS) -c $<
-
-# Main EXE Link Rule
-$(MAIN): $(OBJS) 
-    	@echo Linking $< ...
-!ifdef __OS2__
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c02.obj $(OBJS)
-+, $*, $*, $(LIB)\os2.lib $(LIB)\c2.lib
-!else
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c0$(MODEL).obj $(OBJS)
-+, $*, $*, $(LIB)\c$(MODEL).lib $(LIB)\math$(MODEL).lib $(LIB)\emu.lib
-!endif
-
-# Global Variables
-$(OS)\scfgvars.obj: ..\scfgvars.c ..\sbbsdefs.h
-	@echo Compiling ..\$&.c to $< ...
-	$(CC) $(CFLAGS) -c -n$(OS) ..\$&.c
-
-# ARS
-$(OS)\ars.obj: ..\ars.c ..\ars_defs.h
-        @echo Compiling ..\$&.c to $< ...
-        $(CC) $(CFLAGS) -c -n$(OS) ..\$&.c
-
-# Shared Functions
-$(OS)\scfglib1.obj: ..\sbbs.h ..\sbbsdefs.h ..\scfglib1.c ..\scfgvars.c
-        @echo Compiling ..\$&.c to $< ...
-        $(CC) $(CFLAGS) -c -n$(OS) @&&!
--DNO_MSGS_CFG
--DNO_TEXT_CFG
--DNO_XTRN_CFG 
--DNO_CMDS_CFG
--DNO_CHAT_CFG
-! ..\$&.c
-
-# Shared Functions
-$(OS)\scfglib2.obj: ..\sbbs.h ..\sbbsdefs.h ..\scfglib2.c ..\scfgvars.c
-        @echo Compiling ..\$&.c to $< ...
-        $(CC) $(CFLAGS) -c -n$(OS) @&&!
--DNO_MSGS_CFG
--DNO_TEXT_CFG
--DNO_XTRN_CFG 
--DNO_CMDS_CFG
--DNO_CHAT_CFG
-! ..\$&.c
-
diff --git a/src/sbbs2/dos/rciol.obj b/src/sbbs2/dos/rciol.obj
deleted file mode 100644
index 9d4feb5ec5850d5991c8a550c0527ceac20db4a6..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 9339
zcmZqRX5cJJ&dkrza}4%%nWoLaz~<r}<R2Qq;^G+M$l~np;>s1|?CI|lAL1Gj!Ws_}
zWpncM4|Z`pH-n3T(Sd=1fq|WoQDg=?gU2c%Ru;x!5bM4I8#AN8EEWc)|IBd{#2FZv
z*y3}tlZsN385r2&GxL)3bNzW3R!!h#U}R>CFUrhMDyU#!NQ0>?C@o2@Vq{>8&q>ZH
zuei>@@Di#rJE^3yV7>x_;DjcKnaMfjmG?nr<|OA-RIUcI3Q9|gl~@?qLAn!Di~le{
zn3;K*Ah&`=ONyR@L^I1Wl1p-G`54$iZph5bi~(sY%FItL$@$2}z#gApT9TZf+rY!X
z5nr5Il9X7Q!Xn7P5}#61)GNrq-NC}Zu!!;Ef*J;9P%t24X$DmWZ-!|MI*bua8(0!J
z4+u4=I#@7xHx%$N2r(!!7%?1TT)@DvVF5#X<NyEc44j<*k+s9vaKZooUobN;z_|>Z
zU={!Wi!-cV#K*u~!N9}7$iT?Jz`)3G3?$HkB(Mu4FoA(d0IFic50Jnl0l2`%rwjZU
zn5QT(@-VRYOE567gAIohEKF>Stjz4W9*$1VF2$u@-aft#0cmh)tc)*nvKWr&GB7b+
zXF8(Kz{C{8e8iA}iK&PAh%o~b(^BRmrVLC>hnbI<GcYkdWIkfaz{K>6`G_?G6B9Gb
z5nBc(CLWd}_6$r+k}O9Y8JL*lS&leEC|3yO4xv23M$cIApP7k)VaI==?i**t{v9Y`
zJ;uhsAQ0O9rrV8;>q!aQg*P2)3=IEHRPxIiALzTWpoN9&Kq=D(3He0~3|sim3j8|*
zlJBr%VA#TZR=~=PfuV?{%Z!0x3)5MFPB8`sqbCa(82%lIJ>8|oz|e4p@vK-Wv+;q`
zHV;Zc#xofm09ob77R!C0lz9ik|Hq7{OZfsoYR`)8VBk5c7;!pa3;S6`t^=hkAUfhS
zNPQUFzf&Dz3=9@x3=G9AU1AIj-EJKJPAp<z==#tFathN~0pkO)r=ga^>Co;sV4?0X
zHm+}_EFdGGicarP;Ov%TVCdpwV9?@YV5ngGchKnVS%Jgf*cccXA)&$ma+Z}E14EHe
zDgO>eHjqumC%eTM7|seD{>R3^aCip;ieM)nC>%h_K#D+)En+$=a5!uq1A{6%1M`P2
zk+{Pk@3^tqGBB31y<lK?$-n@zkfp?;!H$7}u}Hjx`6UB`O>_zSKRyPA*GdyW)__E$
zOT~;2EMj0-3`74wyw^1oY<SCEN;yE0$nZL5f(?5q&klAzkk8Hvy!M%3!&wq*!%@n&
zfPsPQK#3pNP_qd(JYdUT+fA_Hg0Pe(z+7C+5%7Y6;RORj#1?P>?PO#)D*$rE7AAC$
zfkGVQdZv;?3m6zw*f(-$oiKX4LxCYMU=}E)M?`kXF)&!jF)$QedGz}A1sj8+Gd5Pm
zN=E-d;yMOh7rNRR7?=)}aCALjI>2;*=?K%Ij&=ry*UN0IOL;*7!dlD%vikK@u>W>5
zFzn=KaJFE7@Vm5mHy?xcP3GJGmoqRpgRCfKeaXOJd>dq<4M(|0DSLw&14GB_$2N@R
z0!8c%d<+a6udjiOVSjzzhNYAT<l+t<#zhPaulL)qmV#9@yxwBNUb+DyRREG&q9a$d
zz=oqpT8FD>h7CvYlot#P8(A(r0x9X|Is{VE_=14}#Qg#0z65i)4wNwcJ7K}bz);M*
zfPrBV4nar)0LM)!)4u~<Hx@83XdNzQG6Ki#LsSW-!^q~nK8#m(DXJ{O(4K`G=EN}{
z;T2$Hp0993PJoelp286m0Y>JT3P<b&7@21%9B~q0WS*;V#0w%A0HGoT7@21&9EpYS
zQX$$WLa40}xt$R0`yteE0Y>K83P;XD47&wU@(3dMR)CRtj>3^25bD1GBl7}<qwHYb
zQEssIqx@hEM`gecJgN-gX@IpK)d4%=s5wM~EkuJ0M9v2y7z7c7xcX=u*bzsQAf}{2
z<njd=nO7;awlOd<F)_AwGB7c@G9B%O*f$02q}DkMOiZOrN0)$kM^}TX)^!k-+XWbz
z7b_gyCBVqMMB(UO0Y>I!3P%qJFfy-DIC>PU^5`XqeGef{`Uv6u1XFFy3`|V!jBUIO
zOiWUY$3(z_$0WcmYm;MOVp3#mQ)FObiefwl^7I^qV}=kVAWzR#IA#su*@HD4^9H;6
zSRh#NTp|M#Qx)T}Ofc_QE<{Nq*ty3#!OlH48$vCG2(E!po4~F<woQPMd85Ly(*lgl
z2NjN80L!&q1$+9~ZHT_7U>_a(1ff7anxk->8O%G*1))Gbnxk+Wl)&aF99IPkwp%eU
zG37EIcLei}dw{8SUx*+moy}1=9u5(VVqjuA%XA!++?FUDPX|Z%@f-*Rin!Sd$BP6Q
znU^XYuL1k-ILLo96ppumJ>A|84!ZU(u&a-QB6W$v@fqM0a(p3#S_byY@r@83C^ly*
z9Nz=60hEMiD;z%pQF0z^=JBf#i$E!PhQjf?5J6CaUZQXul%QuR9RCIuOjy9c!t|RN
zTu{GcU|0xaEMQ=;VJc;YWO@ksl7S(#`wd&S8%K8>Ti*erZ)#oQT$f5jolDt!4zMx^
z^c@He0vDxG(XXF$yRmhLaj?gpUU-(_e5hV$X!o12aJFtYHtquzW(ye@O8G#AaYKn9
z_kj}jmkbQt2TD|T{Qv)wfdN#MGMDm#iufH2{AWeBu$~n$z727kL+Ne39ytaE;{%YY
zWf8czTFk((gMp#%fZBp&hK<aZUZ`+zurV<FJ9+8FzXM$lAS%_m<h&Tv7PK%x8VKJW
zUxZ5RVAS5}>ar^^_^jf$3yZ*&$#HiM1l=9S)_vK#BBuE_OR-e*V`k>tYTe@8mrD6w
zGBE7^2XgT4zyDwVc*(#Z$G)F|;kYXkBg3TClNxOQm$L6*WnOK3U^T=?f?HU2|M`Db
z#5P2-^d#74JN`4D6|wpMI-xs^1EhwbbWhL@Mz*seQ4N3CiWh+zC|h{WiZuM;DV`0g
ztvlsF9%VTzvPI7LHi&apWDDn6ksXYzo0-pw>|l`YzHwFrB))@D8p7DZ4ATC;lx_E4
zkW1S@em>5|!0`XS@qw2N3?Lht53z!%E;kMp{!+HCV=9a+%r=~*OdFUMF)*y)*rmX*
znWKbt*8+yk1t4`!D(p-*I^-A_HZo4UbRb|61H;5O3TzAvTnFC;O@6_^0J0vWuIJQl
za2SH3vH1|on?(!^8@S(jZD4-qwZZ+J7mWYL$?1*CheZqwAa!pSGcZI&zxj4q>F_(4
zD_@6#WI!gUFoPNjAl|zLaHE~xaIrBkyaS0kEnr}H*L;W>)DC*1%J`4#$UEcPubFp)
z{0d0}5Yl5Y1H)wY__)~99q>eHqgX81b;IcY#m69%xW4IuYU-B^3>7B-&Qx$MWME)s
z12=ybGB79|DKUBhNu>-WtP2?!UT1CLIx8}HAp--~w~9FC!>^<Momt4hP!bGL3|8W9
zeBib7zcUp!r952U7BVnYg0jGCL#}TX3OoM)Z((C#C{Y2YfD-l>3=AfWuf<+4Fl-Sz
zEApCmHv>brJC`>5YfxSUJDWp|fdSMu@O{np?TUgL*k0Bb3=FR&KsCEU2_MK0+?Pt&
zyxyoV@ic(iooe6!14(}XwPqR~^K%^r1>Ea(-;OYO&Ix5c!T>G}j)2O=g$gZf;Iill
zrvM}KLWLtdV7V541}3I9<|9Jjf~G|hTqm^1fK|50gDa*MB?wOyOq~HW;;R^sfQmpD
zh9ji{jLh*2E%gjcOw-s}Kvmdlwj-d@E{ov^s0xc?Xj#O-#B_u02&klwV>q&wfr%-U
z<p`*x4`Vn2s<$H;j_eR%WR7AuvRi<WIhx_fJ^@DNB8C$OSr{3QTohnrHf1<+M}U#p
zg5k)00Y+v^h9h4E7@3V2z?HWd!%+?aM&?|GR&E9+rUl$b1q2wGCor@MgGz7iqoC?+
zl0d5o0~6C#wpLK#e}k>niGhjfBkNIj0Y>IHhNJNUjLcaKN1GwkG>G700Y>H&hNH^`
z7@5-;j&2cPWX@nXdPabeIf3CQs1#0OXng|q*3p*&jLc;WM?uAJ7(?q91}3K0Y)3)O
z3Kxc>pk{>|!!c0-MrIF&W9kBo%w7z~3<MaNeHe~e3NSLqFdPF_pD_$=pbk<g_c2f{
z%E55VUx1OBi{V%Z0~1pXZ(BG66H^`cv1kECW*3HIpcaHb!!c0R<HvBUUVxF=m*E)5
z@oo&q+QDu)Hd%m?IgH`hT!;pcA2=9}ftn6n49C`kZExEIF%wkLdNCXW)j2T?#|}a?
zfSL||497stCVz%w4+I#Q-58ENhR8jG7!C3CF_5R@7><M5OK}Xxg&3HaHgdL$GB7bM
zVh2~dNesu81Q?l{7}`N;XA%2x4FN{xP=<C;7c-mdxUm2z<d1_wqJrVLvj8J=1;cSr
zCEUbtJQS?*cnm}k)PhK00N1yD497v94r4gp3fA7<&A`OO%iTVSfr%-b>o}-c(ZbNa
z6fAgrod6?q1jBJqVsmCV4oY4T4DE*)n3x2)j)Pi<5e&ycRjV7raZmz_W;hP=Z3IL6
zV+JOsFPz6gzAa}s{sx>nkAqTO2ty30YW>b$!V2o6M0`8KSOUtzpyCPK-YwyN0qO&A
z%P}yN9%(qk_<BDmW52!+%G$w@j15tDmg`&P$%ZFPrAI)Sd_P3$_4eP!2S8c4L>^rC
z?aN`<$;_bECGrAXmvX&eU{JFXDf#&5%}WLbP+y4ae~BW<Xg{OdTu(~)Kuq_p`&{2D
zL5>2I+QtW7Gw=BS|Mhv}1MO^(5+>^Pp$axo9rBtDRHit+>3Yz{#=!7;O{FN9@6_;z
zv52pf)%d`>*E2S_zcW7YTEpncn~f}&UVxnTTDn7xf#LN_F!`A4Nd+62b#noz<NcC>
z0WNZU0RzM9H<NdWGyFSW@vMZW;XhN6aOp;ncW*$N2}?l*EvQ)KK2UiSq<UZ1kqQHl
z9Al|j*NctJN-vFXUwU!j@`V@0Y$}ZZ4s`wK(1UcCL4Mo8zyc~uL5}9WRKn%urDFdM
zTmynU{KE*;nt1&lLcIXH@zF~Lh7F)@A!YbD$VRSj6(S&){x9JT00kzv7B)T*0q(v3
zFZlr}_`zLB<`NZ9Pmuqx@$Cf+3@eyQn6@*n5GY}8I4!V30Youvkvl7Lcn1SNs2Klt
zn5l$m1LL>D5UH~whoRObAnZ|LEC~cz&Qj_X92UNhfuWnl+J&pwY75g@k%lLHB^;nc
z_n!^ij<R7cRR^mrQ3wR}_g^qDut$Ot3JchYrK~#`#m|bw$3;gR1`9yyEannfkS3-Q
zF&n{Ba7Xs<Ye5^~Qg)C|rq^uyz;zGY<0_0Ldm)WEt|t|GAf5k9)Pp8L4CDtXYj~ot
zgOQ<x(Ie_Gv=*GSkbyz_P}Jdt3=D_o1PA>BdGqZGg%UYXi{RT8rN`fn2$TwbJI++f
z1F@}$rTG=>yQt{7huOB6o>gRvVm~Yw)OV}<@)p&zic#_)gSZb=@PREYWe=LPMc}MR
z)NTfb<L+!G3_F+vHU_<5U}*mgBJQCoz7;fSiy&Na99VJ4oL`;pT*e1F**o2tI^9|3
z9`0u0K2Rdj9m70l3Udn!0~1p>cMGWZw1fMIpa3ItB*PI<mm`d!MVf($DV^(xBDnB6
z0_rP9G8{1yU}Sb?I07o|A{ma@fD6(V9|k5SH|`@L;1UMhwGCr9k;KBt*iry4!CJ~0
zn3zh0S{lKH>Jd<p7tR2#U!56_fO-?okowh)`v|Bv0j*Js7><B?!p;mwPJm1ABcLu+
zIm3|~;6fZ+Z~8JE`3EjykFp3bGKVl6<r83J&Sp3&45nHo!1f(g5MX4^VK@rvJLNF6
zg2ww+3LFLXo#Gjef~rp!hNGa~ZXCnWU~nCG6x3VFVmMkQz{s4+aI_9mi#9=OQBbSE
zjiGfm#Ar}+V2Z*~P{(hY!ckBOoyE|)9U`}jfr;rR`_VlNOiat!kM3h&V%o%h^Z)}B
z(<6?fpwgR-<LD7k2bJUKF$N|kb&jJa7?_w8IFFtJ72E7b&wv^+97oSFFfj?SAHBf9
z#1zkd^b!LTlRwANE1;e!$I)vHOiU{{j^1EkVp_|2^cDjX(|?YmcNmzMwsIW3$H2sN
zn&apLP&L7M^brFS(@&10pxWM#^XM~(BVItLR}ktAgn9>|K0v5X5DL^FSk8I$8v_&5
zOwOY}Ky4JxqrVuKm_BoWn+I_W$3UYFVGQ67cp1Yn&~QT-!!gisLl(m^EpQzN?s-Qr
z9J2sdXU9N83K0y)^1w}%W1!w=8N)G9w=<IA7$}e{7><E@m{APJK!IGuaBPJDBXbGE
zu?=ADZ971Y;BMQ^z{IqJ8(ir}G8{VwvFJL4x(A^^o$LsPV;{hY``B+Vb(|5Ls@p;7
zUx?>8XcVW6p<RT5iK&_ExH#BJ$K}C^8(iCGF|>omhqJkkyMkL!$3f|(1yaAeF&qaC
zi$pLS2Q?;J7}|?Kttal|Qz52++AmoQ$5%n@10{`H-0h$=p~-Xn5Jbr-use@~T;0NO
z2vjqF=H}?GVd-LYx31wTVlw{US;O+5hwH%MpNG3;tYf%}zjw!Qbk{I-ASqz_&+_AN
z0Jv7Jlu=<SmFQ-%1`V4D1c6E<uQxnQprJdacTo|C!@}9-Kso@@FBlm1F);jk!2lkj
zE#hx@^7jP;!(8_GIM}eW(Sg?=Lc8D02@7ZYg=imGfDGmOR_XNZ2urCpsOXmAzFn&I
z?Fdt;DoE;$ib9Eu)0=M>l-L*;RtS^|fCRhT*xs?n$IXp3I&iwn4OEI3CBJ_68)`Yo
zq=%p~SD{22WRBPt#x6HDP)*QK!m@?q^-+-RulIvn6#Jnq3R%bqD@X>UeGy0>JJ^iU
zgKAc?B@Z6metqQkP6md)gWwj3SPp1F7N%ST5|{#De}VLanj0@cjT5mPhLUTK&Trv(
z{UIPYFeofsPOnc6(h=-F<>UnFA%Z*v>J+wLT)|l4rosp6*011s(|)nk5Y%OqV_^7p
zoTXIz+hLXxEgR-iHHb?=^$yGH;t3#{>9r@QLjC*N2~@|uws{@%+8R`Ca@Yu$+_w=d
zc?791idjJs2b#FyI#4OD!c-y*iP<7<uQw`x!6v+OdfR?+g+hrma-G8ms&hCYW)v}k
zyP;sWuV5?{1BHMpKmTF|2GFQ5cm(_<#CsbQ-dSBJVS1(@A0HPL869z6F%&U6Qp))f
zG~@9f)IK^;@(mQw!lmzRm`XT67IXbCc?=!_Sp*r27bwx&!C-t=5j0uw@4zO;vx*x)
zT}M!x2h<DK12ObKELeXWWFB*g4v1nZ5dcT@0tN=PHntYf!0!f4EM0ix1FwTX?Id5&
z^aIz)lF#1`3Y3U}Tmy<9uzfoijY0DqXBEF4WG*=mmjamvv55z6)1npz@Z12nD|^4;
zk6<}Z34g;MffBBUKa6FpdjIvn!%UFG5EdQ`&RU>087Mp(&M?mTFUP=8A_Ov)u`~}P
z2o`yr4r&pBvu24JsO`j3!oP!=q2V!ODL4iEe(lEftpb$zKpBaJTXT*q^AS)f8O?CS
zO@NVkn!*uZNDT<;Ped~uNd(t<Eg1|<OvzkFvcW}5OFp>RIZ_NR-&(2}n3yzqjzG%O
zBh$fxM`nRbv?Gha#m*5>x1xpN2x!FBjo}EW5Q<<p0vc*{VQ2wW6udkwpgJL&>j<Ri
zJOUb@EMqtd>Ig<MoRnf=WNg&{SM06Y;BL!NeXuo0K?BKU3@3d-3P9tJB|_kV<4A_1
zpb|2Yp%v5|;O1$q0##8wM<;{((nmpVbYVC;Ux1Ohl;J3->*@ySx|T5<-3)G7fCq<5
z7><H^co7V(pt^7YcPnT_^(^<%n-IG}W5kgRM_)jA@4<cWW31p1YU5yFV&djG25KWj
zF&qPp6+|-}12qn&D1fV|Xn5V^DZt3w!q5h4*SzLF25J?!FdRz&yX+Wf)Z32XSe5`I
zb0NbqkdGV~+CXLg6y9TH;LdT|3<f49W&XB#3`|S~{Kr5|ngE7lpaIe_hGU>sK`6_y
zy#kEP0g%pW0Hl|i&(H>{$V<78-4S7A2KQK*7>+$<U}6eqIR>huBUz5UXJBF~<8K4i
z%5~hwK%=Aq49EV0jXKTD!pL|WG>R}&;W%jcAddmui7n+mE-Aps%))S7R)CS2jo~<G
z9K=8X+?TE6J`QTn1uz`97hz-u_g$G7+C9L%>f@m9dp^VQD2QfI701TVo(z!#jUxvz
zoX!PV3F^b=F&wW3yW;qCuzQa$0LSTZP?a6Wa2(V;3S>AAs<{Ihj_&~31sWX*WH=7$
zr3W$`KLrv3HSYo$j$Z~R(&M1v;Yfz#ufP%64r+j8a~=N<j>x$S_A@cP=RZ)&-SC*P
zWL1M7o5O4EIlsVlB1;z|B>RD?mlvSUoQ*&!Cs?S2X@lI{hBUVQQPJ^n^0DX7%Yh5^
z;J}~&kUUc<J0!Pq+OU_ff(MI1!i*)}pz%H#Ca_4u6OIyVP{wXJ1GYz?l;y10YgVwv
zQnvqm3=E~$K_hT#3=DsFurolW@4!02L_|bXWVHNwP}#(NsX__d#xG$3bsa#1sa*$c
zgo>?aTzoLOyPbjI;)9D1z?~-UOC@UEr<xBjzu{?^^Xpyvskht*N`wR2PrXs8e-}B|
z_|guBhu=S5d~kTK@d4<p=we7=&h@Rr3N+Uz#BlM&#TVY**6a^{l^S&LLCR;w627j3
z8(A+s;9)j;a#rNEQ<okC1E_q2^hk}n`4||uPnNRA8XxdDees1YLt-g&!<mN35DPyC
zbYFzH>0SG&i1!fJfI<p1rWt$sWoY-Ca5iwsx<3azg35iVA{-Q;|4TtLvmmcCmV5(I
z%q1E-7+BAWOl)}kugi^1h2Ms$n2GB~zz#;%vmy~TOhpl04;mgel!m^x2X(<Fg4G1r
zFcmQw9oWKlR^;_<NO+b6dA(8j*OkWB@PxnN4^uHa*O7Nd2VUEO3g34Pj~hxwz-<6f
zn*r1|`0?no(Sg?rJB1k3x<Fzew>6Z!0S`{dmb`oP^52=#M;rckJ!q(7V=NH{4U|CY
zaPXw!A_j&C_W0P-0Sg%zRxp+@oz>uaQo_B0rBq-CgTPtQh{G$GN?3O^h@I7sIQ$Yc
zs2%L0U|^zeXsT~%^8f#;IR%VIqy!k50~uNrKuvS*7G+3*tqbnC9B~EbA8@fBz;Faq
z?6WYOi37Fz8IPoZa~inV4`Mh2>R~nT906s&`3grsos<BEBYh%_%tt^2mq83IGZ{cF
z<RhSVXe7fK(2!CC&zV&WOiT?tXV!zMBcPG9IEEvjX__oZO~Au&1T-<j$8ZERdgQ_Y
zo<HPa0C%P07><Gl0gV`rT0we7py|#mNarb);V5Y0DUAU<N9e+E6x0e1V>r2lg^}^-
zT5!E{6f{~I#?T6Cxd#g!1x*oUF&u@q+(E;+ZjcT`IYS$0g+_@`8)#zd3nzG1uABip
ykXRzr2J&||cUv*ocWq^$J`?9LP$)z)90T>(q96l_ISg$ezb;~D=wf1EC;<Q|S?8Ak

diff --git a/src/sbbs2/dstsedit/dstsedit.c b/src/sbbs2/dstsedit/dstsedit.c
deleted file mode 100644
index 87cf898f7e..0000000000
--- a/src/sbbs2/dstsedit/dstsedit.c
+++ /dev/null
@@ -1,227 +0,0 @@
-/* DSTSEDIT.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include <dos.h>
-#include <dir.h>
-#include <stdio.h>
-#include <io.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <stdlib.h>
-
-#include "..\sbbsdefs.h"
-
-/****************************************************************************/
-/* Network open function. Opens all files DENYALL and retries LOOP_NOPEN    */
-/* number of times if the attempted file is already open or denying access  */
-/* for some other reason.	All files are opened in BINARY mode.			*/
-/****************************************************************************/
-int nopen(char *str, int access)
-{
-	char logstr[256];
-	int file,share,count=0;
-
-if(access==O_RDONLY) share=O_DENYWRITE;
-	else share=O_DENYALL;
-while(((file=open(str,O_BINARY|share|access,S_IWRITE))==-1)
-	&& errno==EACCES && count++<LOOP_NOPEN)
-#ifndef __OS2__
-    if(count>10)
-        delay(50);
-#else
-	;
-#endif
-if(file==-1 && errno==EACCES)
-	puts("\7\r\nNOPEN: ACCESS DENIED\r\n\7");
-return(file);
-}
-
-/****************************************************************************/
-/* Converts a date string in format MM/DD/YY into unix time format			*/
-/****************************************************************************/
-time_t dstrtounix(char *str)
-{
-	struct time curtime;
-	struct date date;
-
-if(!strcmp(str,"00/00/00"))
-	return(0);
-curtime.ti_hour=curtime.ti_min=curtime.ti_sec=0;
-if(str[6]<'7')
-	date.da_year=2000+((str[6]&0xf)*10)+(str[7]&0xf);
-else
-	date.da_year=1900+((str[6]&0xf)*10)+(str[7]&0xf);
-date.da_mon=((str[0]&0xf)*10)+(str[1]&0xf);
-date.da_day=((str[3]&0xf)*10)+(str[4]&0xf);
-return(dostounix(&date,&curtime));
-}
-
-/****************************************************************************/
-/* Converts unix time format (long - time_t) into a char str MM/DD/YY		*/
-/****************************************************************************/
-char *unixtodstr(time_t unix, char *str)
-{
-	struct time curtime;
-	struct date date;
-
-if(!unix)
-	strcpy(str,"00/00/00");
-else {
-	unixtodos(unix,&date,&curtime);
-	if((unsigned)date.da_mon>12) {	  /* DOS leap year bug */
-		date.da_mon=1;
-		date.da_year++; }
-	if((unsigned)date.da_day>31)
-		date.da_day=1;
-	sprintf(str,"%02u/%02u/%02u",date.da_mon,date.da_day
-		,date.da_year>=2000 ? date.da_year-2000 : date.da_year-1900); }
-return(str);
-}
-
-
-int main(int argc, char **argv)
-{
-	char ch, str[512], path[256]
-		,*lst="%c) %-25s: %13lu\n"
-		,*nv="\nNew value: ";
-	int file;
-	stats_t stats;
-	time_t t;
-
-if(argc>1)
-	strcpy(path,argv[1]);
-else
-	getcwd(path,MAXDIR);
-if(path[strlen(path)-1]!='\\')
-	strcat(path,"\\");
-
-sprintf(str,"%sDSTS.DAB",path);
-if((file=nopen(str,O_RDONLY))==-1) {
-	printf("Can't open %s\r\n",str);
-	exit(1); }
-read(file,&t,4L);
-if(read(file,&stats,sizeof(stats_t))!=sizeof(stats_t)) {
-	close(file);
-	printf("Error reading %u bytes from %s\r\n",sizeof(stats_t),str);
-	exit(1); }
-close(file);
-while(1) {
-	clrscr();
-	printf("Synchronet Daily Statistics Editor v1.01\r\n\r\n");
-	printf("S) %-25s: %13s\n","Date Stamp",unixtodstr(t,str));
-	printf(lst,'L',"Total Logons",stats.logons);
-	printf(lst,'O',"Logons Today",stats.ltoday);
-	printf(lst,'T',"Total Time on",stats.timeon);
-	printf(lst,'I',"Time on Today",stats.ttoday);
-	printf(lst,'U',"Uploaded Files Today",stats.uls);
-	printf(lst,'B',"Uploaded Bytes Today",stats.ulb);
-	printf(lst,'D',"Downloaded Files Today",stats.dls);
-	printf(lst,'W',"Downloaded Bytes Today",stats.dlb);
-	printf(lst,'P',"Posts Today",stats.ptoday);
-	printf(lst,'E',"E-Mails Today",stats.etoday);
-	printf(lst,'F',"Feedback Today",stats.ftoday);
-	printf("%c) %-25s: %13u\r\n",'N',"New Users Today",stats.nusers);
-
-	printf("Q) Quit and save changes\r\n");
-	printf("X) Quit and don't save changes\r\n");
-
-	printf("\r\nWhich: ");
-
-	ch=toupper(getch());
-	printf("%c\r\n",ch);
-
-	switch(ch) {
-		case 'S':
-			printf("Date stamp (MM/DD/YY): ");
-			gets(str);
-			if(str[0])
-				t=dstrtounix(str);
-			break;
-		case 'L':
-			printf(nv);
-			gets(str);
-			if(str[0])
-				stats.logons=atol(str);
-			break;
-		case 'O':
-			printf(nv);
-			gets(str);
-			if(str[0])
-				stats.ltoday=atol(str);
-			break;
-		case 'T':
-			printf(nv);
-			gets(str);
-			if(str[0])
-				stats.timeon=atol(str);
-			break;
-		case 'I':
-			printf(nv);
-			gets(str);
-			if(str[0])
-				stats.ttoday=atol(str);
-			break;
-		case 'U':
-			printf(nv);
-			gets(str);
-			if(str[0])
-				stats.uls=atol(str);
-			break;
-		case 'B':
-			printf(nv);
-			gets(str);
-			if(str[0])
-				stats.ulb=atol(str);
-			break;
-		case 'D':
-			printf(nv);
-			gets(str);
-			if(str[0])
-				stats.dls=atol(str);
-            break;
-		case 'W':
-			printf(nv);
-			gets(str);
-			if(str[0])
-				stats.dlb=atol(str);
-            break;
-		case 'P':
-			printf(nv);
-			gets(str);
-			if(str[0])
-				stats.ptoday=atol(str);
-            break;
-		case 'E':
-			printf(nv);
-			gets(str);
-			if(str[0])
-				stats.etoday=atol(str);
-            break;
-		case 'F':
-			printf(nv);
-			gets(str);
-			if(str[0])
-				stats.ftoday=atol(str);
-            break;
-		case 'N':
-			printf(nv);
-			gets(str);
-			if(str[0])
-				stats.nusers=atoi(str);
-			break;
-		case 'Q':
-			sprintf(str,"%sDSTS.DAB",path);
-			if((file=nopen(str,O_WRONLY))==-1) {
-				printf("Error opening %s\r\n",str);
-				exit(1); }
-			write(file,&t,4L);
-			write(file,&stats,sizeof(stats_t));
-			close(file);
-		case 'X':
-			exit(0);
-		default:
-			putchar(7);
-			break; } }
-}
diff --git a/src/sbbs2/dstsedit/make.bat b/src/sbbs2/dstsedit/make.bat
deleted file mode 100755
index b2a462a029..0000000000
--- a/src/sbbs2/dstsedit/make.bat
+++ /dev/null
@@ -1,2 +0,0 @@
-@echo off
-bcc -I.. -w-pro dstsedit.c
diff --git a/src/sbbs2/dupefind/dupefind.c b/src/sbbs2/dupefind/dupefind.c
deleted file mode 100644
index 4d86818218..0000000000
--- a/src/sbbs2/dupefind/dupefind.c
+++ /dev/null
@@ -1,311 +0,0 @@
-/* DUPEFIND.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-#include "crc32.h"
-
-#define DUPEFIND_VER "1.01"
-
-void bail(int code)
-{
-exit(code);
-}
-/****************************************************************************/
-/* Returns 32-crc of string (not counting terminating NULL) 				*/
-/****************************************************************************/
-ulong crc32(char *str)
-{
-	int i=0;
-	ulong crc=0xffffffffUL;
-
-	while(str[i])
-		crc=ucrc32(str[i++],crc);
-	crc=~crc;
-	return(crc);
-}
-long lputs(char FAR16 *str)
-{
-    char tmp[256];
-    int i,j,k;
-
-j=strlen(str);
-for(i=k=0;i<j;i++)      /* remove CRs */
-    if(str[i]==CR && str[i+1]==LF)
-        continue;
-    else
-        tmp[k++]=str[i];
-tmp[k]=0;
-return(fputs(tmp,stderr));
-}
-
-/****************************************************************************/
-/* Network open function. Opens all files DENYALL and retries LOOP_NOPEN    */
-/* number of times if the attempted file is already open or denying access	*/
-/* for some other reason.	All files are opened in BINARY mode.			*/
-/****************************************************************************/
-int nopen(char *str, int access)
-{
-	char logstr[256];
-	int file,share,count=0;
-
-if(access==O_RDONLY) share=SH_DENYWR;
-	else share=SH_DENYRW;
-while(((file=sopen(str,O_BINARY|access,share,S_IWRITE))==-1)
-	&& errno==EACCES && count++<LOOP_NOPEN);
-if(file==-1 && errno==EACCES)
-	lputs("\7\r\nNOPEN: ACCESS DENIED\r\n\7");
-return(file);
-}
-
-/****************************************************************************/
-/* Performs printf() through local assembly routines                        */
-/* Called from everywhere                                                   */
-/****************************************************************************/
-int lprintf(char *fmat, ...)
-{
-	va_list argptr;
-	char sbuf[256];
-	int chcount;
-
-va_start(argptr,fmat);
-chcount=vsprintf(sbuf,fmat,argptr);
-va_end(argptr);
-lputs(sbuf);
-return(chcount);
-}
-
-/****************************************************************************/
-/* This function performs an nopen, but returns a file stream with a buffer */
-/* allocated.																*/
-/****************************************************************************/
-FILE *fnopen(int *file, char *str, int access)
-{
-	char mode[128];
-	FILE *stream;
-
-if(access&O_WRONLY) access|=O_RDWR; 	/* fdopen can't open WRONLY */
-
-if(((*file)=nopen(str,access))==-1)
-	return(NULL);
-
-if(access&O_APPEND) {
-	if(access&(O_RDONLY|O_RDWR))
-		strcpy(mode,"a+");
-	else
-		strcpy(mode,"a"); }
-else {
-	if(access&(O_WRONLY|O_RDWR))
-		strcpy(mode,"r+");
-	else
-		strcpy(mode,"r"); }
-stream=fdopen((*file),mode);
-if(stream==NULL) {
-	close(*file);
-	return(NULL); }
-setvbuf(stream,NULL,_IOFBF,16*1024);
-return(stream);
-}
-
-/****************************************************************************/
-/* Puts a backslash on path strings 										*/
-/****************************************************************************/
-void backslash(char *str)
-{
-    int i;
-
-i=strlen(str);
-if(i && str[i-1]!='\\') {
-    str[i]='\\'; str[i+1]=0; }
-}
-/****************************************************************************/
-/* Truncates white-space chars off end of 'str' and terminates at first tab */
-/****************************************************************************/
-void truncsp(char *str)
-{
-	int c;
-
-str[strcspn(str,"\t")]=0;
-c=strlen(str);
-while(c && (uchar)str[c-1]<=SP) c--;
-str[c]=0;
-}
-char *display_filename(ushort dir_num,ushort fil_off)
-{
-	static char str[256];
-	char fname[13];
-    int file;
-
-    sprintf(str,"%s%s.IXB",dir[dir_num]->data_dir,dir[dir_num]->code);
-    if((file=nopen(str,O_RDONLY))==-1)
-        return("UNKNOWN");
-	lseek(file,(long)(22*(fil_off-1)),SEEK_SET);
-    read(file,fname,11);
-    close(file);
-
-    sprintf(str,"%-8.8s.%c%c%c",fname,fname[8],fname[9],fname[10]);
-    return(str);
-}
-
-void main(int argc,char **argv)
-{
-	char str[256],*ixbbuf,*p;
-	ulong **fcrc,*foundcrc,total_found=0L;
-	ushort i,j,k,h,g,start_lib=0,end_lib=0,found=-1;
-	int file;
-    long l,m;
-    read_cfg_text_t txt;
-
-putenv("TZ=UCT0");
-_fmode=O_BINARY;
-setvbuf(stdout,NULL,_IONBF,0);
-
-fprintf(stderr,"\nDUPEFIND Version %s (%s) - Synchronet Duplicate File "
-	"Finder\n"
-	,DUPEFIND_VER
-#if defined(__OS2__)
-	,"OS/2"
-#elif defined(__NT__)
-    ,"Win32"
-#elif defined(__DOS4G__)
-	,"DOS4G"
-#elif defined(__FLAT__)
-	,"DOS32"
-#else
-	,"DOS16"
-#endif
-	);
-
-    p=getenv("SBBSNODE");
-    if(p==NULL) {
-		fprintf(stderr,"\nSBBSNODE environment variable must be set.\n");
-		fprintf(stderr,"\nExample: SET SBBSNODE=C:\\SBBS\\NODE1\n");
-        exit(1); }
-
-	if(!stricmp(argv[1],"/?") || !stricmp(argv[1],"?")) {
-		fprintf(stderr,"\n");
-		fprintf(stderr,"usage: DUPEFIND [start] [end]\n");
-		fprintf(stderr,"where: [start] is the starting library number to check\n");
-		fprintf(stderr,"       [end]   is the final library number to check\n");
-		return; }
-
-
-    strcpy(node_dir,p);
-    if(node_dir[strlen(node_dir)-1]!='\\')
-        strcat(node_dir,"\\");
-
-    txt.openerr="\7\nError opening %s for read.\n";
-    txt.reading="\nReading %s...";
-    txt.readit="\rRead %s       ";
-    txt.allocerr="\7\nError allocating %u bytes of memory\n";
-    txt.error="\7\nERROR: Offset %lu in %s\r\n\n";
-
-    read_node_cfg(txt);
-    if(ctrl_dir[0]=='.') {
-        strcpy(str,ctrl_dir);
-		sprintf(ctrl_dir,"%s%s",node_dir,str);
-		if(_fullpath(str,ctrl_dir,40))
-            strcpy(ctrl_dir,str); }
-	backslash(ctrl_dir);
-    read_main_cfg(txt);
-    if(data_dir[0]=='.') {
-        strcpy(str,data_dir);
-		sprintf(data_dir,"%s%s",node_dir,str);
-		if(_fullpath(str,data_dir,40))
-			strcpy(data_dir,str); }
-    backslash(data_dir);
-    read_file_cfg(txt);
-	lputs("\n");
-
-	start_lib=0;
-	end_lib=total_libs-1;
-	if(argc>1)
-		start_lib=end_lib=atoi(argv[1])-1;
-	if(argc>2)
-        end_lib=atoi(argv[2])-1;
-
-	if((fcrc=(ulong **)MALLOC(total_dirs*sizeof(ulong *)))==NULL) {
-		printf("Not enough memory for CRCs.\r\n");
-		exit(1); }
-
-	for(i=0;i<total_dirs;i++) {
-		fprintf(stderr,"Reading directory index %u of %u\r",i+1,total_dirs);
-        sprintf(str,"%s%s.IXB",dir[i]->data_dir,dir[i]->code);
-		if((file=nopen(str,O_RDONLY))==-1) {
-			fcrc[i]=(ulong *)MALLOC(1*sizeof(ulong));
-            fcrc[i][0]=0;
-			continue; }
-        l=filelength(file);
-		if(!l || (dir[i]->lib<start_lib || dir[i]->lib>end_lib)) {
-            close(file);
-			fcrc[i]=(ulong *)MALLOC(1*sizeof(ulong));
-			fcrc[i][0]=0;
-            continue; }
-		if((fcrc[i]=(ulong *)MALLOC((l/22+2)*sizeof(ulong)))==NULL) {
-            printf("Not enough memory for CRCs.\r\n");
-            exit(1); }
-		fcrc[i][0]=(ulong)(l/22);
-        if((ixbbuf=(char *)MALLOC(l))==NULL) {
-            close(file);
-            printf("\7Error allocating memory for index %s.\r\n",str);
-            continue; }
-        if(read(file,ixbbuf,l)!=l) {
-            close(file);
-            printf("\7Error reading %s.\r\n",str);
-			FREE(ixbbuf);
-            continue; }
-        close(file);
-		j=1;
-		m=0L;
-		while(m<l) {
-			sprintf(str,"%-11.11s",(ixbbuf+m));
-			strupr(str);
-			fcrc[i][j++]=crc32(str);
-			m+=22; }
-		FREE(ixbbuf); }
-	lputs("\n");
-
-	foundcrc=0L;
-	for(i=0;i<total_dirs;i++) {
-		if(dir[i]->lib<start_lib || dir[i]->lib>end_lib)
-			continue;
-		lprintf("Scanning %s %s\n",lib[dir[i]->lib]->sname,dir[i]->sname);
-		for(k=1;k<fcrc[i][0];k++) {
-			for(j=i+1;j<total_dirs;j++) {
-				if(dir[j]->lib<start_lib || dir[j]->lib>end_lib)
-					continue;
-				for(h=1;h<fcrc[j][0];h++) {
-					if(fcrc[i][k]==fcrc[j][h]) {
-						if(found!=k) {
-							found=k;
-							for(g=0;g<total_found;g++) {
-								if(foundcrc[g]==fcrc[i][k])
-									g=total_found+1; }
-							if(g==total_found) {
-								++total_found;
-								if((foundcrc=(ulong *)REALLOC(foundcrc
-									,total_found*sizeof(ulong)))==NULL) {
-								printf("Out of memory reallocating\r\n");
-								exit(1); } }
-							else
-								found=0;
-							printf("\n%-12s is located in : %-*s  %s\n"
-								   "%-12s           and : %-*s  %s\n"
-								,display_filename(i,k)
-								,LEN_GSNAME
-								,lib[dir[i]->lib]->sname
-								,dir[i]->sname
-								,""
-								,LEN_GSNAME
-								,lib[dir[j]->lib]->sname
-								,dir[j]->sname
-								); }
-						else
-							printf("%-12s           and : %-*s  %s\n"
-								,""
-								,LEN_GSNAME
-								,lib[dir[j]->lib]->sname
-								,dir[j]->sname
-								); } } } } }
-}
-
diff --git a/src/sbbs2/dupefind/makeall.bat b/src/sbbs2/dupefind/makeall.bat
deleted file mode 100755
index d68900c3d3..0000000000
--- a/src/sbbs2/dupefind/makeall.bat
+++ /dev/null
@@ -1,11 +0,0 @@
-@echo off
-wmake OS=DOS %1 %2 %3 %4 %5
-if errorlevel 1 goto end
-wmake OS=DOSX %1 %2 %3 %4 %5
-if errorlevel 1 goto end
-wmake OS=OS2 %1 %2 %3 %4 %5
-if errorlevel 1 goto end
-wmake OS=NT %1 %2 %3 %4 %5
-if errorlevel 1 goto end
-:end
-
diff --git a/src/sbbs2/dupefind/makefile b/src/sbbs2/dupefind/makefile
deleted file mode 100644
index 9af7a2f85f..0000000000
--- a/src/sbbs2/dupefind/makefile
+++ /dev/null
@@ -1,89 +0,0 @@
-############################################
-# Makefile for Synchronet DUPEFIND Utility #
-# For use with Watcom C/C++ 		   #
-############################################
-
-!ifndef OS
-OS	= DOS
-!endif
-
-!ifeq OS DOS
-CC	= *wcc
-!else
-CC	= *wcc386
-!endif
-
-LD	= *wlink
-INCLUDE = \watcom\h;\watcom\h\os2;..;..\smb;..\rio
-
-
-!ifeq OS DOS
-CFLAGS	= -I$(INCLUDE) -s -fh=$*.pch -bt=$(OS) -fo=$(OS)\ -ml
-!else
-CFLAGS	= -I$(INCLUDE) -s -fh=$*.pch -bt=$(OS) -fo=$(OS)\
-!endif
-
-!ifeq OS DOS
-SYSTEM  = DOS
-!endif
-!ifeq OS OS2
-SYSTEM  = OS2V2
-!endif
-!ifeq OS DOSX
-SYSTEM  = DOS4G
-!endif
-!ifeq OS NT
-SYSTEM	= NT
-!endif
-
-LFLAGS  = option stack=16k system $(SYSTEM)
-
-MAIN	= $(OS)\dupefind.exe
-OBJS	= $(OS)\dupefind.obj $(OS)\scfgvars.obj $(OS)\scfglib1.obj &
-	  $(OS)\ars.obj $(OS)\scfglib2.obj
-HEADERS = ..\sbbs.h ..\sbbsdefs.h ..\gen_defs.h ..\scfgvars.c
-
-# Implicit C Compile Rule
-.c.obj:
-	@echo Compiling (I) $[@ to $^@ ...
-	$(CC) $(CFLAGS) $[@
-
-# Main EXE Link Rule
-$(MAIN): $(OBJS) 
-    	@echo Linking $< ...
-	$(LD) $(LFLAGS) file { $(OBJS) }
-
-# Global Variables
-$(OS)\scfgvars.obj: ..\scfgvars.c ..\sbbsdefs.h
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) $[@
-
-# ARS
-$(OS)\ars.obj: ..\ars.c ..\ars_defs.h
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) $[@
-
-# Shared Functions
-$(OS)\scfglib1.obj: ..\scfglib1.c ..\sbbs.h ..\sbbsdefs.h ..\scfgvars.c &
-	..\scfglib.h
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) &
--DNO_MSGS_CFG &
--DNO_TEXT_CFG &
--DNO_XTRN_CFG &
--DNO_CMDS_CFG &
--DNO_CHAT_CFG &
-$[@
-
-# Shared Functions
-$(OS)\scfglib2.obj: ..\scfglib2.c ..\sbbs.h ..\sbbsdefs.h ..\scfgvars.c &
-	..\scfglib.h
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) &
--DNO_MSGS_CFG &
--DNO_TEXT_CFG &
--DNO_XTRN_CFG &
--DNO_CMDS_CFG &
--DNO_CHAT_CFG &
-$[@
-
diff --git a/src/sbbs2/dupefind/makefile.bc b/src/sbbs2/dupefind/makefile.bc
deleted file mode 100644
index 22b00d8a8e..0000000000
--- a/src/sbbs2/dupefind/makefile.bc
+++ /dev/null
@@ -1,74 +0,0 @@
-############################################
-# Makefile for Synchronet FILELIST Utility #
-# For use with Borland C++ for DOS or OS/2 #
-############################################
-
-# Macros
-CC      = bcc
-LD      = tlink
-!ifdef __OS2__
-OS	= OS2
-INCLUDE = c:\bcos2\include;..;..\smb;..\rio
-LIB	= c:\bcos2\lib
-CFLAGS  = -d -C -I$(INCLUDE)
-LFLAGS  = -c
-!else
-OS	= DOS
-INCLUDE = \bc31\include;..;..\smb;..\rio
-LIB	= \bc31\lib
-MODEL   = l
-CFLAGS	= -d -N -C -m$(MODEL) -I$(INCLUDE)
-LFLAGS  = -n -c
-!endif
-MAIN	= $(OS)\dupefind.exe
-OBJS	= $(OS)\dupefind.obj $(OS)\scfgvars.obj $(OS)\scfglib1.obj \
-	  $(OS)\scfglib2.obj $(OS)\ars.obj
-HEADERS = ..\sbbs.h ..\sbbsdefs.h ..\scfgvars.c
-
-# Implicit C Compile Rule
-{.}.c.obj:
-        @echo Compiling (I) $< to $@ ...
-        $(CC) $(CFLAGS) -n$(OS) -c $< 
-
-# Main EXE Link Rule
-$(MAIN): $(OBJS) 
-	@echo Linking $< ...
-!ifdef __OS2__
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c02.obj $(OBJS)
-+, $*, $*, $(LIB)\os2.lib $(LIB)\c2.lib
-!else
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c0$(MODEL).obj $(OBJS)   
-+, $*, $*, $(LIB)\c$(MODEL).lib $(LIB)\math$(MODEL).lib $(LIB)\emu.lib
-!endif
-
-# Global Variables
-$(OS)\scfgvars.obj: ..\scfgvars.c ..\sbbsdefs.h
-        @echo Compiling ..\$&.c to $< ...
-        $(CC) $(CFLAGS) -c -n$(OS) ..\$&.c
-
-# Global Variables
-$(OS)\ars.obj: ..\ars.c ..\ars_defs.h
-        @echo Compiling ..\$&.c to $< ...
-        $(CC) $(CFLAGS) -c -n$(OS) ..\$&.c
-
-# Shared Functions
-$(OS)\scfglib1.obj: ..\sbbs.h ..\sbbsdefs.h ..\scfglib1.c ..\scfgvars.c
-        @echo Compiling ..\$&.c to $< ...
-        $(CC) $(CFLAGS) -c -n$(OS) @&&!
--DNO_MSGS_CFG
--DNO_XTRN_CFG 
--DNO_TEXT_CFG
--DNO_CHAT_CFG
-! ..\$&.c
-
-# Shared Functions
-$(OS)\scfglib2.obj: ..\sbbs.h ..\sbbsdefs.h ..\scfglib2.c ..\scfgvars.c
-        @echo Compiling ..\$&.c to $< ...
-        $(CC) $(CFLAGS) -c -n$(OS) @&&!
--DNO_MSGS_CFG
--DNO_XTRN_CFG 
--DNO_TEXT_CFG
--DNO_CHAT_CFG
-! ..\$&.c
diff --git a/src/sbbs2/echo/docs/fidostep.doc b/src/sbbs2/echo/docs/fidostep.doc
deleted file mode 100644
index c6bf69e6df..0000000000
--- a/src/sbbs2/echo/docs/fidostep.doc
+++ /dev/null
@@ -1,321 +0,0 @@
-Step-by-Step instructions for setting up FidoNet using SBBSecho and InterMail
-=============================================================================
-
-One of the most difficult tasks that the novice sysop will encounter is the
-setting up of FidoNet.	These instructions will take you step by step through
-the process of setting up FidoNet on your BBS.	Be warned that these steps are
-very basic, just enough to get FidoNet up and running on your system, but it
-may still be necessary for you to refer to the documentation which accompanies
-the programs referred to in these steps.  For any advanced operations you will
-definitely need to refer to the documentation of programs referred to in these
-steps.	If you know of anyone who is already on FidoNet that is willing to help
-you out, by all means ask them for their help!
-
-NOTE that while it doesn't cost anything to have a node number (for sending
-and receiving netmail) or to receive local conferences, there is usually a
-nominal fee (called "cost recovery") to receive conferences from the FidoNet
-backbone or files from the FidoNet filebone.
-
- 1) First of all you will need to obtain a copy of FidoNet's Policy 4 document
-    (the filename is usually POLICY4.ZIP or POLICY4.TXT), a recent nodelist
-    (usually named NODELIST.???), AND a front-end mailer program.  All three of
-    these can normally be downloaded from any local BBS which carries FidoNet
-    (if not, an e-mail to the sysop of a FidoNet BBS can usually point you in
-    the right direction).  There are several front-end mailers available such
-    as FrontDoor, InterMail, D'Bridge, SEAdog, Dutchie, BinkleyTerm, and Portal
-    of Power to name a few (the latter two are referred to as "FLO-Style"
-    mailers and the others are referred to as "Attach-Style" mailers).  Most
-    front-end mailers offer a limited evaluation version which you can try out
-    before you decide to purchase the program.
-
- 2) Read the Policy 4 document, it will give you information about FidoNet as
-    well as some specifics on how to obtain a node number for your system.
-
- 3) If you do not plan to run InterMail (or FrontDoor which is very similar)
-    you must set up the front-end mailer you plan to use by following the
-    directions which accompany the program and then skip to step number 9.
-    The documentation will also tell you how to "compile" the nodelist file
-    you've downloaded so that your front-end mailer can use it.  Use the
-    temporary address specified in Policy 4 when specifying your node address
-    in the front-end mailer.
-
-Setting up InterMail v2.xx or FrontDoor v2.xx
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- 4) Install InterMail per IM.DOC (included with InterMail).
-
-    a) If using FrontDoor, follow the FD.DOC file and substitute the letters FD
-       where ever you see an IM in this section.
-
- 5) Copy the MAILER.BAT included with SBBSecho and the EXEBBS.BAT from the
-    Synchronet DOCS directory into the InterMail directory (C:\IM).
-
- 6) Change into the InterMail directory, run IMSETUP, and perform the
-    following:
-
-    a) Under Global->Address->Main, enter your FidoNet address (or the
-       temporary address specified in Policy 4 until such time as you have
-       received your own address).
-
-    b) Under Global->Filenames, verify that the paths are set similar to the
-       following:
-
-  ������������������������������������������������������� Filenames and paths �
-  �									      �
-  � System    C:\IM\SYSTEM\	  (or C:\FD\ for FrontDoor)		      �
-  � Netmail   C:\IM\MAIL\						      �
-  � Files     C:\IM\INBOUND\						      �
-  � Sec Files C:\IM\INBOUND\						      �
-  �*Packets   C:\IM\PACKETS\						      �
-  �*Log file  C:\IM\IM.LOG						      �
-  � Banner								      �
-  � Nodelist  C:\IM\NODELIST\						      �
-  � In-event								      �
-  � Hudsonfmt								      �
-  � Wildcat!								      �
-  � Swapping  C:\IM\							      �
-  � Semaphore C:\IM\							      �
-  �									      �
-  � * = Must be unique for each Mail Server				      �
-  ���������������������������������������������������������������������������ͼ
-
-    c) Under Modem->Advanced Setup->Connect Strings set ALL "BBSexit" levels
-       to 100.	(For FrontDoor under Mailer->Errorlevels set all baud rates to
-       100, Received Mail to 50, and Create .BAT file to Yes).
-
-    d) Under Manager->Events, make sure all your events are set to exit when
-       mail is received (under Event Behavior). This allows for the immediate
-       importation of new messages into the BBS.
-
-    e) Under Manager->Events, add the following event:
-
-  ���������������������������������������������������������������������� Edit �
-  � Tag 	X							      �
-  � Days	-------A						      �
-  � Modifier	Ignore eventbase (*)					      �
-  � Start time	04:30							      �
-  � Length	00:01							      �
-  � Errorlevel	75							      �
-  � Not used								      �
-  � Behavior								      �
-  � Use alias	1:103/705						      �
-  � Retry delay 0							      �
-  � Comment	Synchronet exclusive event				      �
-  ���������������������������������������������������������������������������ĺ
-  � Event tag A..YZ - eXternal event, errorlevel is required		      �
-  ���������������������������������������������������������������������������ͼ
-
-    f) Under Mailer->Misc, set "Trigger exit upon receipt of netmail" and
-       "Upon receipt of ANY file" to Yes. This will allow for the immediate
-       importation of NetMail and any File Distribution Echoes you may carry.
-
-    g) Under Modem->Hardware, set "Lower DTR when busy" to "No".
-
-    h) Under Modem->Command strings, set the "Down" string to "ATM0H1|".
-
-    i) Exit IMSETUP.
-
- 7) Unarc the nodelist file (NODELIST.???) that you downloaded previously
-    into your nodelist directory.
-
- 8) Now run IMNC to compile the nodelist.
-
-Settup up FidoNet in SCFG
-~~~~~~~~~~~~~~~~~~~~~~~~~
- 9) Run SCFG from one of your node directories, or hit 'C' from the waiting for
-    caller screen.  Then select Networks->FidoNet EchoMail and NetMail.
-    You'll then be brought to a menu that should be set up similar to this:
-
-	  �[�][?]���������������������������������������������������ͻ
-	  �		  FidoNet EchoMail and NetMail		     �
-	  ����������������������������������������������������������͹
-	  � �System Addresses		1:103/705		     �
-	  � �Default Outbound Address	No			     �
-	  � �Default Origin Line				     �
-	  � �NetMail Semaphore		C:\IM\IMRESCAN.NOW	     �
-	  � �EchoMail Semaphore 	C:\IM\IMEXIT.025	     �
-	  � �Inbound File Directory	C:\IM\INBOUND\		     �
-	  � �EchoMail Base Directory				     �
-	  � �NetMail Directory		C:\IM\MAIL\		     �
-	  � �Allow Sending of NetMail	Yes			     �
-	  � �Allow File Attachments	Yes			     �
-	  � �Send NetMail Using Alias	No			     �
-	  � �NetMail Defaults to Crash	No			     �
-	  � �NetMail Defaults to Direct No			     �
-	  � �NetMail Defaults to Hold	No			     �
-	  � �Kill NetMail After Sent	Yes			     �
-	  � �Cost to Send NetMail	102400			     �
-	  ����������������������������������������������������������ͼ
-
-    a) For FrontDoor the NetMail Semaphore file should be set to
-       C:\FD\FDRESCAN.NOW and the EchoMail Semaphore file should be set
-       to C:\FD\FDEXIT.025.
-
-    b) For FrontDoor version 2.11, the EchoMail Semaphore file should be
-       set to C:\FD\FDXIT.025.
-
-    c) For FrontDoor version 2.20 (commercial, multinode), the EchoMail
-       Semaphore file should be set to C:\FD\FDXIT#.025, where # is the
-       node number (0 based).
-
-10) Set your address to your system's FidoNet address (or the temporary address
-    specified in Policy 4 until such time as you have received your own
-    address).  This is the address used for sending and receiving NetMail. It
-    will also be used as the default address for message sub-boards.
-
-11) Create an origin line for your system that most likely contains your BBS
-    name and phone number.
-
-12) Following is an overview of the remaining options available on this menu:
-
-    a) System Addresses:
-       This option will bring you to a sub-menu to allow you to configure
-       different addresses (AKAs) for your system. Following is an example
-       for a BBS configured for two fido type networks.
-
-			 �[�][?]���������������������ͻ
-			 �	System Addresses      �
-			 ����������������������������͹
-			 � �Main     1:103/705	      �
-			 � �AKA 1    1:103/706	      �
-			 � �AKA 2    85:805/205       �
-			 � �			      �
-			 ����������������������������ͼ
-
-    b) Default Outbound Address:
-       When a user sends netmail, this is the 'send to' address that is used
-       as a default (useful for FidoNet<->Internet gateways).
-
-    c) NetMail Semaphore:
-       This is the name of the trigger file which will cause your front-end
-       mailer to exit and scan for outgoing netmail.
-
-    d) EchoMail Semaphore:
-       This is the name of the trigger file which will cause your front-end
-       mailer to exit and scan for outgoing echomail.
-
-    e) Inbound File Directory:
-       This is the name of the directory where your front-end mailer stores
-       incoming files.
-
-    f) EchoMail Base Directory:
-       This is the base directory for your echomail subdirectories
-
-    g) NetMail Directory:
-       This is the name of the directory where your front-end mailer looks for
-       and places netmail.
-
-    h) Allow Sending of NetMail:
-       When set to 'Yes' users can send netmail from your system.
-
-    i) Allow File Attachments:
-       When set to 'Yes' users can send netmail file attachments from your
-       system.
-
-    j) Send NetMail Using Alias:
-       When set to 'Yes' the user alias will be used (rather than their
-       real name) on outgoing netmail.
-
-    k) NetMail Defaults to Crash:
-       If set to 'Yes' netmail sent from your system will default to crash
-       status (send immediately and directly).
-
-    l) NetMail Defaults to Direct:
-       If set to 'Yes' netmail sent from your system will default to direct
-       status (send directly).
-
-    m) NetMail Defaults to Hold:
-       If set to 'Yes', netmail sent from your system will default to hold
-       status.
-
-    n) Kill NetMail After Sent:
-       Setting this to 'Yes' will delete outgoing netmail after it has been
-       sent.
-
-    o) Cost to Send NetMail:
-       This is the cost (in credits) that a user will be charged when sending
-       netmail.
-
-13) Setup SBBSecho by running the ECHOCFG program and reading the documentation
-    for information on the available options.
-
-    a) Under Paths...->Outbound Directory be sure to enter the path where
-       outgoing mail packets and bundles should be placed (ie: C:\IM\OUTBOUND).
-
-    b) Select the appropriate Mailer Type.
-
-    c) Enter your registration number (if you are a registered owner of the
-       SBBSecho program).
-
-14) Once you have done this you must now run the file MAILER.BAT (if using an
-    Attach-Style mailer) to use Synchronet with your front-end mailer.
-    MAILER.BAT must be run from your front-end mailer's directory (e.g. C:\IM).
-    You will no longer run the file SBBS.BAT to start this node (if you run a
-    multi-node system, you will still use SBBS.BAT to start those nodes which
-    are not using a front-end mailer).
-
-    a) If you are NOT using InterMail as your front-end mailer, be sure to
-       modify your MAILER.BAT file to reflect the front-end mailer that you
-       are using.
-
-15) Follow the instructions given in the Policy 4 document to determine who
-    you should send netmail to in order to obtain your own node number.
-
-16) Now, from your front end mailer, send a netmail to this person following
-    the instructions contained in the Policy 4 document.  Once you have done
-    this and the netmail has been sent, you should patiently await a netmail
-    reply containing your node number and the node number of your hub (where
-    you will send/receive your echomail and netmail to/from).
-
-17) Once you have received your node number, you'll want to replace the
-    temporary node number you used in your front-end mailer as well as in
-    SCFG->Networks->FidoNet Echomail and Netmail->System Addresses to it.
-
-18) Send your hub a message with the Area Manager (for the backbone <echomail>)
-    and Areafix (for the filebone <files>) passwords you wish to use on their
-    systems.  You will need to remember these passwords as you will be using
-    them to do remote maintenance (such as adding and removing conferences and
-    file areas that you wish to receive).
-
-19) Your hub should respond with Area Manager instructions and a list of areas
-    available for you to connect to.  If not, contact your hub for more
-    information.
-
-20) Look through the list of areas available to you and determine which
-    conferences you'd like to carry.  In SCFG->Message Areas create a
-    message group(s) for the conferences you'd like to carry.  When setting
-    up a sub-board for a conference, be sure to use the "Area Tag" name
-    given in the area list as the sub-board Short Name.
-
-    a) Under Network Options... for each sub-board toggle the FidoNet
-       Echomail option toggled to YES.
-
-    b) If the conference requires a different address, configure the address
-       under Network Options...
-
-    c) If you allow aliases on your system, under Toggle Options... set Use
-       Real Names to YES.
-
-    d) If you are unfamiliar with adding message groups and/or sub-boards,
-       consult that section of the Synchronet System Operator's Manual.
-
-    e) For a more complete list of conferences available on the FidoNet
-       backbone you may wish to download the file FIDONET.NA from either your
-       hub or a local FidoNet BBS.  This file contains a list of ALL
-       conferences carried on the backbone.
-
-21) Once you have set up all of the conferences you'd like to carry, you'll
-    need to go to SCFG->Message Areas-><group>->Export Areas...->AREAS.BBS
-    (SBBSecho) to create an AREAS.BBS file for SBBSecho to use.
-
-22) Now following the Area Manager instructions, send a message to your hub's
-    Area Manager and turn on all of the conferences you wish to carry.	Note
-    that there are some administrative conferences for FidoNet that your
-    users shouldn't be able to read or post on, and some that even you
-    shouldn't post on, there is also usually a "test" conference which you may
-    want to set up to post messages on and insure that echomail is being sent
-    and received properly.
-
-23) That's about all there is to it.  You are now set up on FidoNet and should
-    be able to send and receive FidoNet echomail and netmail.
-
-
diff --git a/src/sbbs2/echo/docs/man.c b/src/sbbs2/echo/docs/man.c
deleted file mode 100644
index f87fa9b3c9..0000000000
--- a/src/sbbs2/echo/docs/man.c
+++ /dev/null
@@ -1,189 +0,0 @@
-/* MAN.C */
-
-/* Synchronet docs convert to paged format for printing */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <dos.h>
-#include <io.h>
-#include <alloc.h>
-
-/****************************************************************************/
-/* Truncates white-space chars off end of 'str' and terminates at first tab */
-/****************************************************************************/
-void truncsp(char *str)
-{
-	char c;
-
-str[strcspn(str,"\t")]=0;
-c=strlen(str);
-while(c && (unsigned char)str[c-1]<=32) c--;
-str[c]=0;
-}
-
-int main(int argc, char **argv)
-{
-	char str[256],str2[256],infile[128],outfile[128],idxfile[128]
-		,*invbuf,*outvbuf,*idxvbuf,*tempvbuf,*p,*p2
-		,chap[128]="SBBSecho"
-		,pagetag[250][9]
-		,idxtag[512][9];
-	int i,j,page=1,line=0,pagetags=0,idxtags=0;
-	long pageidx[250],idx[512],l;
-	FILE *in, *out, *index, *tempfile;
-
-if(argc<3) {
-	printf("usage: man infile outfile indexfile\r\n");
-	exit(1); }
-
-strcpy(infile,argv[1]);
-strcpy(outfile,argv[2]);
-strcpy(idxfile,argv[3]);
-
-if((in=fopen(infile,"rb"))==NULL) {
-	printf("error opening %s\r\n",infile);
-	exit(1); }
-
-if((out=fopen(outfile,"wb"))==NULL) {
-	printf("error opening %s\r\n",outfile);
-    exit(1); }
-
-//if((index=fopen(idxfile,"rb"))==NULL) {
-//	  printf("error opening %s\r\n",idxfile);
-//	  exit(1); }
-
-//if((tempfile=fopen("TEMPFILE","w+b"))==NULL) {
-//	  printf("error opening TEMPFILE\r\n");
-//	  exit(1); }
-
-if((invbuf=(char *)malloc(8*1024))==NULL) {
-	printf("error allocating input buffer\n");
-	exit(1); }
-
-if((outvbuf=(char *)malloc(8*1024))==NULL) {
-	printf("error allocating output buffer\n");
-    exit(1); }
-
-//if((idxvbuf=(char *)malloc(8*1024))==NULL) {
-//	  printf("error allocating index buffer\n");
-//	  exit(1); }
-
-//if((tempvbuf=(char *)malloc(8*1024))==NULL) {
-//	  printf("error allocating temp buffer\n");
-//	  exit(1); }
-
-setvbuf(in,invbuf,_IOFBF,8*1024);
-setvbuf(out,outvbuf,_IOFBF,8*1024);
-//setvbuf(index,idxvbuf,_IOFBF,8*1024);
-//setvbuf(tempfile,tempvbuf,_IOFBF,8*1024);
-
-//while(!ferror(index) && !feof(index)) {
-//	  p=fgets(str,128,index);
-//	  fputs(str,tempfile);
-//	  while((p2=strstr(str,"@@"))!=NULL) {
-//		  p2[0]=32;
-//		  p2[1]=32;
-//		  sprintf(idxtag[idxtags],"%-.8s",p2+2);
-//		  idx[idxtags++]=ftell(index)-strlen(p2); } }
-
-while(!ferror(in) && !feof(in)) {
-	p=fgets(str,128,in);
-	if(str[0]=='&' && str[1]=='&') {
-		truncsp(str+2);
-		strcpy(chap,str+2);
-		continue; }
-	if(str[0]=='$' && str[1]=='$') {
-		truncsp(str+2);
-
-//		  for(i=0;i<idxtags;i++) {
-//			  if(!stricmp(str+2,idxtag[i])) {
-//				  fseek(tempfile,idx[i],SEEK_SET);
-//				  sprintf(str2,"%-10d",page);
-//				  fprintf(tempfile,"%s",str2); } }
-
-		for(i=0;i<pagetags;i++)
-			if(!stricmp(str+2,pagetag[i]))
-				break;
-		if(i<pagetags) {
-			l=ftell(out);
-			fseek(out,pageidx[i]-1,SEEK_SET);
-			sprintf(str,"%10d",page);
-			for(i=0;i<10;i++)
-				if(str[i]==0x20)
-					str[i]='.';
-			fprintf(out,"%s",str);
-			fseek(out,l,SEEK_SET); }
-		continue; }
-
-	line++;
-	if(!p)
-		break;
-	if(!p || str[0]==0xc || line==55) {
-		while(line<55) {
-			fprintf(out,"\r\n");
-			line++; }
-		line=1;
-		if(page!=1) 	/* no tag on page 1 */
-			fprintf(out,"\r\n___________________________________________"
-				"____________________________________\r\n"
-				"%-35s %3u %39s"
-				,"SBBSecho",page,chap);
-		fprintf(out,"\r\n\xc\r\n\r\n");
-		page++; }
-
-	if((p2=strstr(str,"@@"))!=NULL) {
-        sprintf(pagetag[pagetags],"%-.8s",p2+2);
-        pageidx[pagetags++]=ftell(out)+(p2-str)+1; }
-
-	if(!p)
-		break;
-	if(str[0]!=0xc)
-		fprintf(out,"%s",str);
-	else
-		line=0;
-		}
-
-//fseek(tempfile,0L,SEEK_SET);
-//while(!ferror(tempfile) && !feof(tempfile)) {
-//	  j=0;
-//	  p=fgets(str2,128,tempfile);
-//	  for(i=0;i<strlen(str2);i++) {
-//		  str[j++]=str2[i];
-//		  if(str2[i]==',') {
-//			  i++;
-//			  str[j++]=str2[i++];
-//			  while(1) {
-//				  if(str2[i]>32 && isdigit(str2[i]))
-//					  str[j++]=str2[i++];
-//				  else
-//					  break; }
-//			  while(str2[i++]==32);
-//			  i-=2; } }
-//	  str[j]=0;
-
-//	  line++;
-//	  if(!p || str[0]==0xc || line==55) {
-//		  while(line<55) {
-//			  fprintf(out,"\r\n");
-//			  line++; }
-//		  line=1;
-//		  if(page!=1)	  /* no tag on page 1 */
-//			  fprintf(out,"\r\n\t___________________________________________"
-//				  "____________________________________\r\n"
-//				  "\t%-35s %3u %39s"
-//				  ,"Synchronet",page,"Index");
-//		  fprintf(out,"\r\n\xc\r\n\r\n");
-//		  page++; }
-
-//	  if(!p)
-//		  break;
-//	  if(str[0]!=0xc)
-//		  fprintf(out,"\t%s",str);
-//	else
-//		  line=0;
-//		  }
-return(0);
-}
-
-
diff --git a/src/sbbs2/echo/docs/sbbsecho.src b/src/sbbs2/echo/docs/sbbsecho.src
deleted file mode 100644
index 61366df30d..0000000000
--- a/src/sbbs2/echo/docs/sbbsecho.src
+++ /dev/null
@@ -1,838 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-				    SBBSecho
-				  Version 1.22
-				Updated 02/15/96
-
-	       FidoNet Packet Tosser for Synchronet BBS Version 2
-
-			Copyright 1995 Digital Dynamics
-
-                                  PO Box 501
-                             Yorba Linda, CA 92686
-
-		 Voice: 714-529-6328   BBS: 714-529-9525 V.32/V.32bis
-		   FAX: 714-529-9721	    714-529-9547 V.FC
-                  Fido: 1:103/705      ftp: netcom.com /pub/sb/sbbs
-
-
-Table of Contents
-=================
-&&Contents
-
-Introduction....................................................@@INTRO___
-Terminology.....................................................@@TERMS___
-Installation....................................................@@INSTALL_
-AREAS.BBS Format................................................@@AREASBBS
-Configuration...................................................@@CONFIG__
-Running SBBSecho................................................@@EXECUTE_
-Command Line Switches...........................................@@SWITCHES
-Area Manager Remote Commands....................................@@AREAFIX_
-
-Introduction
-============
-&&Introduction
-$$INTRO___
-
-SBBSecho is a full-blown FTN echomail program (tosser/scanner) for Synchronet
-BBS version 2. SBBSecho is level III implementation of the SMB v2.00
-specification including support for HyperAllocated and LZH compressed message
-bases.
-
-It is intended to replace FTSC-1 (*.MSG) compatible echomail programs (GEcho,
-Squish, FastEcho, Alexi/Mail, etc.) and SBBSFIDO with a single program
-incorporating the standard features of echomail programs without the .MSG
-phase (consuming disk space and time).
-
-You will not need to use SBBSFIDO (*.MSG import/export utility for Synchronet)
-or any echomail programs after you have installed SBBSecho.
-
-Terminology
-============
-&&Terminology
-$$TERMS___
-
-FTN
-~~~
-FidoNet Technology Network: Any network using FidoNet standards for addressing,
-mail packets, mail sessions, node lists, etc.
-
-Zones, Nets, Nodes, and Points?
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-FTN node addresses are like phone numbers, they are made up of multiple
-components (four to be exact). The components are: zone, net, node, and point.
-Each component is specified by a decimal (base-10) number, separated by symbols
-(no spaces):
-
-	Zone:Net/Node.Point
-
-The zone represents the continent (if FidoNet) or the network number (if other
-FTN network). All FidoNet nodes in North America have a zone 1 address. When
-the zone is specified in an address, it is the first component and must be
-followed by a colon. If the zone is not present in an address, the local
-system's zone is assumed.
-
-The net represents the network number of the FTN node. Duplicate net numbers
-may exist between zones. If the net number is not present, the local system's
-net is assumed.
-
-The node number specifies an exact FTN node within a network. The node number
-is the only required element of an FTN node address.
-
-The point is an optional component which specifies a sub-node that does not
-directly receive mail and is also not listed in the main FTN node list, but
-instead gets all its mail from its boss-node (zone:net/node.0). When the point
-is not specified, 0 (zero) is assumed (i.e. 1:2/3 and 1:2/3.0 are identical)
-which indicates the system is not a point node address.
-
-A 2D (2 dimensional) address refers to an FTN address containing just the
-net and node numbers (i.e. 103/705).
-
-A 3D (3 dimensional) address refers to an FTN address containing the zone,
-net, and node numbers (i.e. 1:103/705), specifically excluding the point number
-if it exists.
-
-A 4D (4 dimensional) address refers to an FTN address containing the zone,
-net, node, and optional point numbers (i.e. 1:103/705.1).
-
-A 5D (5 dimensional) address refers to an FTN address consisting of a standard
-3D or 4D address with an appended "@domain" (i.e. 1:103/705@fidonet.org).
-
-Attach or FLO Mailer?
-~~~~~~~~~~~~~~~~~~~~~
-If you are using FrontDoor, InterMail, D'bridge, SEAdog, Dutchie, or any other
-ArcMail *.MSG attach-style mailer, you are using what we will refer to as an
-"Attach Mailer".
-
-If you are using BinkleyTerm, Portal of Power, or any other FLO/CLO/HLO/DLO
-style mailer, you are using what we will refer to as a "FLO Mailer".
-
-Both types are supported equally by SBBSecho.
-
-NetMail
-~~~~~~~
-Point-to-point (usually person-to-person) direct or routed messages.
-
-EchoMail
-~~~~~~~~
-Group or conference messages of a particular subject matter. Usually
-distributed on a regional or continental (e.g. FidoNet Zone 1 backbone) scale.
-FTN style echomail areas have a unique area tag (name) associated with them to
-distinguish each area from the others.
-
-Packet
-~~~~~~
-An FTN packet is a group of one or more messages contained in a single
-uncompressed file. Packets may contain echomail and/or netmail messages.
-Packets usually have a .PKT extension, although outbound NetMail packets for
-FLO Mailers will have .?UT extensions (where ? is either O, C, D, or H). The
-first eight characters of the filename may be anything, but are usually decimal
-digits representing the date and time the packet was created. SBBSecho creates
-temporary outbound packet files with a .PK_ extension and then renames them to
-.PKT when they're completed. If you find any .PK_ files in your outbound
-directory, don't worry. SBBSecho will find them the next time it is run and
-continue packing them and sending them on their way.
-
-Bundle
-~~~~~~
-An FTN bundle is a single file archive of one or more (usually compressed)
-packets. Bundles will have file extensions where the first two characters
-represent the day of the week the bundle was created (MO, TU, WE, TH, FR, SA,
-and SU) and the third character of the extension is a number or letter. The
-first eight characters of the filename may be anything, but are usually
-hexadecimal digits representing the FTN node address (or relative address) of
-the system that created the bundle. SBBSecho changes the file extension of bad
-inbound bundles to .MO_, .MO-, or .MO.
-
-Areafix/Area Manager
-~~~~~~~~~~~~~~~~~~~~
-Areafix is a synonym for area manager (the very first FTN area manager
-program was called AreaFix). Area manager capabilities (remote adding/removing
-of areas, changing compression type, etc) are built into SBBSecho, so therefore
-no external area manager program is required. If you are not an FTN hub, then
-the area manager portion of SBBSecho will probably not get any use on your
-system.
-
-Installation
-============
-&&Installing SBBSecho
-$$INSTALL_
-
-To begin, copy the SBBSECHO.EXE, ECHOCFG.EXE, and AREAMGR.HLP files into your
-Synchronet EXEC directory (usually C:\SBBS\EXEC), copy the SBBSECHO.CFG file
-into your Synchronet CTRL directory (usually C:\SBBS\CTRL), and copy the
-SBBSECHO.DOC file into your Synchronet DOCS directory (usually C:\SBBS\DOCS).
-
-If you plan on using the 32-bit DOS, OS/2, or Windows 95/NT version of
-SBBSecho, you will need to put the appropriate SBBSECHO.EXE file into your
-Synchronet EXEC directory (unzip OS2.ZIP for the OS/2 version, DOS4G.ZIP for
-the 32-bit DOS version, or WIN32.ZIP for the Windows 95/NT version). If
-you get memory allocation errors running the 16-bit DOS version or desire
-improved performance, you will want to run one of the 32-bit versions.
-
-Add the SBBSCTRL and SBBSNODE environment variables to your AUTOEXEC.BAT.
-Example:
-
-SET SBBSCTRL=C:\SBBS\CTRL
-SET SBBSNODE=C:\SBBS\NODE1
-
-Note: The node number used for the SBBSNODE environment variable is not
-      important, use your NODE1 directory.
-
-These environment variables must be present for SBBSECHO and ECHOCFG to
-function correctly. Type "SET" at the DOS prompt to be sure they are listed
-correctly.
-
-You will also need to modify your existing MAILER.BAT (or FDRUN.BAT, IMRUN.BAT,
-etc) file to accomodate the use of SBBSecho, or replace it with the MAILER.BAT
-included with SBBSecho. If this is your first time setting up FidoNet, you will
-not currently have a MAILER.BAT file set up, so use the one that is included
-and modify it so that it reflects the proper drive letters and directories.
-
-Next, SBBSecho expects to find the file AREAS.BBS in your Synchronet DATA
-directory (usually C:\SBBS\DATA) unless you have overridden the default name
-and/or location using the ECHOCFG program.  The format of this file is very
-similar to the standard AREAS.BBS (which many echomail programs use, or can
-at least export their native area file to this format - i.e. GEcho's GSETUP).
-
-SCFG can also export your sub-boards to AREAS.BBS, but you're probably better
-off modifying the AREAS.BBS file you're already using (if you are) or
-converting your current echomail program's area file to AREAS.BBS. This is
-because SCFG assumes the sub-board short name will be the same as the area's
-tag (as shown in your echo list), but this may not always be the case - unless
-you imported an AREAS.BBS or FIDONET.NA file into SCFG to begin with).
-
-AREAS.BBS Format
-================
-&&AREAS.BBS Format
-$$AREASBBS
-
-Lines beginning with a semicolon (;) are considered comments, and are ignored.
-
-Each line is in the following format:
-
-CODE	TAG	UPLINKS
-
-Where:
-	CODE is the internal code of the sub-board. Any unrecognized internal
-		codes are considered "Passthru" (not imported to your BBS).
-
-	TAG is the FidoNet tag as shown in your echo list (i.e. FIDONET.NA).
-		If this is '*', then it will be considered a "badecho" area
-		and will receive all messages for areas not otherwise specified
-		in this file.
-
-	UPLINKS is a list of FidoNet addresses which you wish to export mail
-		to. At the very least, your hub's address should be listed
-		here. Your address should NOT be listed here. If multiple
-		addresses are specified, you should specify the full 3D address
-		for each.
-
-AREAS.BBS Example:
-
-SBBS		SYNCHRONET	1:3615/50
-SYNCDATA	SYNCDATA	1:3615/50
-SYNC_SYS	SYNC_SYSOPS	1:3615/50
-
-The amount of spacing between each element in the line is not important. Each
-line can be up to 1000 characters in length.
-
-So if your OLD AREAS.BBS file is in .MSG format (for example):
-
-C:\FD\ECHO\SBBS 	SYNCHRONET	1:3615/50
-
-It must be changed to match the example given above!
-
-Configuration
-=============
-&&Configuring SBBSecho
-$$CONFIG__
-
-In order to set up SBBSecho for your system you must run the included ECHOCFG
-program. It should already be located in your EXEC directory. You may want to
-put your EXEC directory in your DOS search path so you can execute SBBSECHO and
-ECHOCFG from any drive and directory on your system.
-
-Multiple configuration files can be used (but isn't usually required) for
-multi-mailer systems. The default configuration filename is SBBSECHO.CFG
-located in your Synchronet CTRL directory. You can override this by specifying
-the name and location of the configuration file on the SBBSECHO and ECHOCFG
-command lines. Example:
-
-ECHOCFG D:\ECHO1.CFG
-SBBSECHO D:\ECHO1.CFG
-
-If you do not specify a configuration file, ECHOCFG and SBBSECHO will use
-SBBSECHO.CFG located in your Synchronet CTRL directory.
-
-Upon running ECHOCFG you will be brought to the main menu of the configuration
-program. The path and filename of the configuration file being modified will
-appear at the top of the menu. Following are screen captures of available menus
-within the configuration program and an explanation of the options contained on
-each of them.
-
-	      �[�][?]�������������������������������������������ͻ
-	      � 	   C:\SBBS\CTRL\SBBSECHO.CFG		 �
-	      ��������������������������������������������������͹
-	      � �Mailer Type			FrontDoor/Attach �
-	      � �Maximum Packet Size		250K		 �
-	      � �Maximum Bundle Size		250K		 �
-	      � �Areafix Failure Notification	User #1 	 �
-	      � �Registration Number		UNREGISTERED	 �
-	      � �Nodes...					 �
-	      � �Paths...					 �
-	      � �Log Options... 				 �
-	      � �Toggle Options...				 �
-	      � �Archive Programs...				 �
-	      � �Additional Echo Lists...			 �
-	      ��������������������������������������������������ͼ
-
-Mailer Type:
-	Selecting this option will toggle between the mailer types supported
-	by SBBSecho, either FrontDoor (message attach) type mailers or Binkley
-	(FLO file) type mailers.  Choose the one that matches your front-end
-	mailer type.
-
-Maximum Packet Size:
-	This option allows you to set the maximum size of each outgoing
-	echomail packet.
-
-Maximum Bundle Size:
-	Mail packets are normally packed into what are called "bundles" (unless
-	a node is set up to receive uncompressed mail packets).  This option
-	allows you to specify the maximum size of each outgoing mail bundle.
-
-Areafix Failure Notification:
-	This is the user number of the person where notification of Areafix
-	failures should be sent.  Such failures include nodes which are not
-	configured for areafix, nodes using incorrect areafix passwords, and
-	the like.  Setting this to 0 will disable this option.
-
-Registration Number:
-	Upon registering SBBSecho with Digital Dynamics, you will be given a
-	registration number.  You should select this option and enter the
-	registration number you are given here.  If you have not yet registered
-	the program, this should say "Unregistered".
-
-Nodes...
-	This option allows you to add, remove, and configure nodes that you
-	will be sending mail to.  Selecting this option will bring you to
-	a sub-menu which will look similar to the following:
-
-				 �[�][?]�����ͻ
-				 �    Nodes   �
-				 ������������͹
-				 � �ALL       �
-				 � �1:100/ALL �
-				 � �1:200/300 �
-				 � �2:ALL     �
-				 � �	      �
-				 ������������ͼ
-
-	At the Nodes... sub-menu, pressing the INSert key will allow you to
-	add a new node, pressing the DELete key will remove the currently
-	highlighted node number, and pressing ENTER on the currently
-	highlighted node will allow you to edit the options for that particular
-	node from a menu like the following (note that the node number you are
-	editing appears at the top of the window):
-
-		    �[�][?]�������������������������������ͻ
-		    �		    1:200/300		   �
-		    ��������������������������������������͹
-		    � �Address		    1:200/300	   �
-		    � �Archive Type	    ZIP 	   �
-		    � �Packet Type	    2+		   �
-		    � �Packet Password			   �
-		    � �Areafix Password 		   �
-		    � �Areafix Flags			   �
-		    � �Status		    None	   �
-		    � �Direct		    No		   �
-		    � �Passive		    No		   �
-		    � �Send Notify List     No		   �
-		    ��������������������������������������ͼ
-
-	Address:
-		This is the address of the node you are editing, selecting it
-		will allow you to change this to a different address. Using
-		the "ALL" wildcard in place of one of the address components
-		will allow you to configure settings for all nodes that meet
-		that specication (e.g. all nodes in zone 1 can be specified
-		as 1:ALL or all nodes in zone 1, net 103 can be specified
-		as 1:103/ALL).
-
-	Archive Type:
-		This is the compression type to be used when packing mail
-		bundles for this node.	Selecting this option will allow you
-		to choose from a menu of currently configured archive types,
-		like the following:
-
-			       �[�][?]���������ͻ
-			       �  Archive Type	�
-			       ����������������͹
-			       � �ZIP		�
-			       � �ARC		�
-			       � �LZH		�
-			       � �ARJ		�
-			       � �PAK		�
-			       � �SQZ		�
-			       � �ZOO		�
-			       � �None		�
-			       ����������������ͼ
-
-		Selecting "None" will specify that this node is to receive
-		uncompressed packets (no bundles).
-
-	Packet Type:
-		This is the packet type that will be used when creating mail
-		packets for this node. The default packet type used by SBBSecho
-		is 2+.	If you are a "point" address (e.g. 1:100/100.1) you
-		should use either a type 2+ or 2.2 packet since type 2 packets
-		do not support point numbers. Selecting this option will allow
-		you to choose from a menu of currently supported packet types:
-
-			       �[�][?]��������ͻ
-			       �  Packet Type  �
-			       ���������������͹
-			       � �2+	       �
-			       � �2.2	       �
-			       � �2	       �
-			       ���������������ͼ
-
-	Packet Password:
-		This is a password that will be placed into each outgoing mail
-		packet for this node.  Passwords are normally used for extra
-		security when sending and receiving mail packets.  This node
-		must also have the same packet password defined for your
-		address and SBBSecho must be set up for secure operation (set
-		in the 'Toggle Options' sub-menu) in order for this feature to
-		function properly.
-
-	Areafix Password:
-		This is the password that will be required by this node (in
-		the subject field) when it sends messages to the area manager
-		(AreaFix).
-
-	Areafix Flags:
-		When additional echo lists have been defined (from the
-		'Additional Echo Lists...' sub-menu) these flags determine
-		which echo lists can be used by this node when processing area
-		manager add requests.
-
-	Status:
-		This option determines the netmail status that will be set
-		when SBBSecho sends out an areafix message or a file attach.
-		Selecting this option toggles between None, Crash, and Hold
-		status.
-
-	Direct:
-		When set to 'Yes' this option will add a Direct kludge line
-		to messages that SBBSecho sends out (or create DLO/DUT files
-		for FLO mailers).
-
-	Passive:
-		Setting this option to 'Yes' will prevent messages from being
-		sent to this node without the need for altering the AREAS.BBS
-		file.  This is useful for temporarily shutting off the messages
-		to this node.  This option can be toggled on and off remotely
-		via an area manager request.
-
-	Send Notify List:
-                This determines whether or not this node is sent a Notify List
-                when using that command line option in SBBSecho.
-                A Notify List is a netmail sent to the system operator of the
-                node showing options set for the node as well as connected
-                areas.
-
-Paths...
-	This option allows you to configure the paths and filenames which are
-	used by SBBSecho.  Selecting this option will bring you to the
-	following sub-menu:
-
-	  �[�][?]���������������������������������������������������ͻ
-	  �		       Paths and Filenames		     �
-	  ����������������������������������������������������������͹
-	  � �Inbound Directory		    <Specified in SCFG>      �
-	  � �Secure Inbound (optional)	    None Specified	     �
-	  � �Outbound Directory 	    C:\IM\OUTBOUND\	     �
-	  � �Area File			    SCFG->DATA\AREAS.BBS     �
-	  � �Log File			    SCFG->DATA\SBBSECHO.LOG  �
-	  ����������������������������������������������������������ͼ
-
-	Inbound Directory:
-		This is the directory where SBBSecho should look for inbound
-		mail packets.  This is normally taken from whatever has been
-		set in the SCFG program.
-
-	Secure Inbound (optional):
-		This is an optional directory where SBBSecho should look for
-		secure inbound mail packets.
-
-	Outbound Directory:
-		This is the directory where SBBSecho will place outgoing mail
-		packets and bundles.
-
-	Area File:
-		This is the path and filename of the file that SBBSecho will
-		use as it's AREAS.BBS file.  By default SBBSecho looks for
-		the file AREAS.BBS in the data directory defined in SCFG.
-
-	Log File:
-		This is the path and filename of the file that SBBSecho will
-		use when logging events.  By default SBBSecho uses the file
-		SBBSECHO.LOG in the data directory defined in SCFG.
-
-Log Options...
-	This list allows you to toggle what events SBBSecho should place into
-	the logfile.  Selecting this option will bring you to the following
-	sub-menu:
-
-		  �[�][?]����������������������������������ͻ
-		  �		  Log Options		    �
-		  �����������������������������������������͹
-		  � �ALL				    �
-		  � �NONE				    �
-		  � �DEFAULT				    �
-		  � �Ignored NetMail Messages		No  �
-		  � �NetMail for Unknown Users		No  �
-		  � �Areafix NetMail Messages		Yes �
-		  � �Imported NetMail Messages		Yes �
-		  � �Packing Out-bound NetMail		Yes �
-		  � �Routing Out-bound NetMail		Yes �
-		  � �In-bound Packet Information	Yes �
-		  � �In-bound Security Violations	Yes �
-		  � �In-bound Grunged Messages		Yes �
-		  � �Disallowed Private EchoMail	Yes �
-		  � �Circular EchoMail Messages 	No  �
-		  � �Duplicate EchoMail Messages	No  �
-		  � �Area Totals			Yes �
-		  � �Over-All Totals			Yes �
-		  �����������������������������������������ͼ
-
-	Selecting ALL, NONE, or DEFAULT will toggle all of the options to
-	'Yes', 'No', or to their default states, respectively.
-
-
-Toggle Options...
-	These options allow you to toggle various features in SBBSecho.
-	Selecting this option will bring you to the following sub-menu:
-
-	   �[�][?]�������������������������������������������������ͻ
-	   �			 Toggle Options 		    �
-	   ��������������������������������������������������������͹
-	   � �Secure Operation					Yes �
-	   � �Swap for Executables				Yes �
-	   � �Fuzzy Zone Operation				No  �
-	   � �Store PATH Lines in Message Base			Yes �
-	   � �Store SEEN-BY Lines in Message Base		Yes �
-	   � �Store Unknown Kludge Lines in Message Base	Yes �
-	   � �Allow Nodes to Add Areas in the AREAS.BBS List	Yes �
-	   ��������������������������������������������������������ͼ
-
-	Secure Operation:
-		When set to 'Yes', SBBSecho will compare the origin of any
-		incoming mail packets to the nodes in the AREAS.BBS file
-		as messages are imported.  If a packet password has been
-		defined for that node, it will also be compared to the
-		password contained in the mail packet.	Packets and messages
-		failing this security will not be imported.
-
-	Swap for Executables:
-		SBBSecho relies on external executable programs for extracting
-		and compressing mail bundles.  This option tells SBBSecho to
-		swap out of memory when running any of these executables,
-		giving the executable programs more free memory to run in.
-		This option is only used in the 16-bit DOS flavor of SBBSecho.
-
-	Fuzzy Zone Operation:
-		Some mail programs do not create netmail messages with zone
-		information (INTL kludge line) or may only do so when sending
-		between zones. This is a problem for systems that receive
-		netmail for multiple addresses with different zones (AKAs with
-		different zone numbers). Setting this option to "Yes" allows
-		SBBSecho to guess what the correct originating and destination
-		zone is based on the net and node portions of the destination
-		address in netmail message.
-
-	Store PATH Lines in Message Base:
-		When set to 'Yes', SBBSecho will store the PATH lines from
-		incoming echomail in the Synchronet message base headers (not
-		the body text). This option is useful for troubleshooting
-		routing/duplicate message problems.
-
-	Store SEEN-BY Lines in Message Base:
-		When set to 'Yes', SBBSecho will store the SEEN-BY lines from
-		incoming echomail in the Synchronet message base headers (not
-		the body text).  This option is useful for troubleshooting
-		routing/duplicate message problems.
-
-	Store Unknown Kludge Lines in Message Base:
-		When set to 'Yes', SBBSecho will store any unknown kludge lines
-		from incoming echomail in the Synchronet message base headers.
-		This option is useful for troubleshooting problems.
-
-	Allow Nodes to Add Areas in the AREAS.BBS List:
-		When set to 'Yes', SBBSecho will allow nodes to add areas
-		(via area manager) which are listed in the AREAS.BBS list.
-		When set to 'No', SBBSecho will only allow nodes to add areas
-		from any additionally configured echo lists which they have
-		access to.
-
-Archive Programs...
-	This option allows you to add or remove archive programs from SBBSecho.
-	Selecting this option will bring you to the following menu:
-
-			     �[�][?]�������������ͻ
-			     �	Archive Programs  �
-			     ��������������������͹
-			     � �ZIP		  �
-			     � �ARC		  �
-			     � �LZH		  �
-			     � �ARJ		  �
-			     � �PAK		  �
-			     � �SQZ		  �
-			     � �ZOO		  �
-			     � �		  �
-			     ��������������������ͼ
-
-	At the Archive Programs... sub-menu, pressing the INSert key will allow
-	you to add a new archive program. Pressing the DELete key will remove
-	the currently highlighted archive program. And pressing ENTER on the
-	currently highlighted archive program will allow you to edit the
-	options for that particular prgram from a menu like the following (note
-	that the name of the archive program you are editing appears at the top
-	of the window):
-
-	  �[�][?]���������������������������������������������������ͻ
-	  �			       ZIP			     �
-	  ����������������������������������������������������������͹
-	  � �Packer Name	  ZIP				     �
-	  � �Hexadecimal ID	  504B				     �
-	  � �Offset to Hex ID	  0				     �
-	  � �Pack Command Line	  PKZIP %f %s			     �
-	  � �Unpack Command Line  PKUNZIP %f %s 		     �
-	  ����������������������������������������������������������ͼ
-
-	Packer Name:
-		This is the name that will be used to reference this particular
-		archiving program.  This is also the name that should be used
-		by nodes using areamanger to change their compression type
-		remotely.
-
-	Hexadecimal ID:
-		This is a hexadecimal identifier that SBBSecho should look for
-		when determining the compression type used on incoming bundles.
-		In this example we are looking for the ID 'PK', '50' is the
-		hexadecimal value for the letter 'P' and '4B' is the
-		hexadecimal value for the letter 'K'.
-
-	Offset to Hex ID:
-		This is the byte offset (from the beginning of the file) where
-		the hexadecimal ID for this archive program can be located.
-		In this example we are looking at an offset of 0 bytes from the
-		beginning of the file.
-
-	Pack Command Line:
-		This is the command line used by this archiving program for
-		compressing files.  The '%f' command line specifier will expand
-		to the name of the compressed file, the '%s' command line
-		specifier will expand to the name of the file being compressed.
-
-	Unpack Command Line:
-		This is the command line used by the archiving program for
-		UNcompressing files.  The '%f' command line specifier will
-		expand to the name of the compressed file, the '%s' command
-		line specifier will expand to the path where the file is
-		being extracted to.
-
-Additional Echo Lists...
-	This option allows you to add and remove additional echo lists which
-	can be used by SBBSecho for area manager add requests.	Normally these
-	will be used in addition to your AREAS.BBS file.  If you have the
-	toggle option 'Allow Nodes to Add Areas in the AREAS.BBS List' set to
-	'No', you MUST create at least one additional echo list if you wish
-	to allow other nodes to add areas via area manager requests.
-
-	Selecting this option will bring you to a sub-menu listing any
-	additional echo lists you currently have defined:
-
-			  �[�][?]������������������ͻ
-			  �  Additional Echo Lists  �
-			  �������������������������͹
-			  � �C:\BACKBONE\FIDONET.NA �
-			  � �			    �
-			  �������������������������ͼ
-
-	Pressing the INSert key will allow you to add a new echo list, pressing
-	the DELete key will remove the currently highlighted echo list, and
-	pressing ENTER on the currently highlighted echo list will allow you to
-	edit information about that list:
-
-	  �[�][?]���������������������������������������������������ͻ
-	  �			    Echo List			     �
-	  ����������������������������������������������������������͹
-	  � �Echo List Path/Name  C:\BACKBONE\FIDONET.NA	     �
-	  � �Hub Address	  None				     �
-	  � �Forward Password	  None				     �
-	  � �Forward Requests	  No				     �
-	  � �Echo List Flags	  BACK				     �
-	  ����������������������������������������������������������ͼ
-
-	Echo List Path/Name:
-		This is the full path and filename of the echo list you are
-		defining.  This list should contain the areatag names of areas,
-		one per line, with any comments seperated from the areatag by
-		at least one space.
-
-	Hub Address:
-		This is the address of the hub of the conferences contained
-		in this list.  If an area is remotely added from this list
-		(using Areafix) this address is automatically added to the
-                AREAS.BBS file.
-
-	Forward Password:
-		This is the area manager password to use when forwarding
-		requests.
-
-	Forward Requests:
-		Setting this option to 'Yes' will cause SBBSecho to send a
-		request to the Hub Address specified to turn on an area from
-		this list.  This happens when users remotely add areas using
-		Areafix and is not necessary if you are already receiving the
-		conferences in this list (ie: from Planet Connect).
-
-
-	Echo List Flags:
-		These are the flags required for a node to be able to gain
-		access to this particular echo list.  These flags are defined
-		for each node from the 'Nodes...' sub-menu.
-
-		Selecting this option will bring you to a sub-menu where you
-		may add and remove flags for this echo list.
-
-			     �[�][?]������������ͻ
-			     �	Echo List Flags  �
-			     �������������������͹
-			     � �BACK		 �
-			     � �		 �
-			     �������������������ͼ
-
-Running SBBSecho
-================
-&&Running SBBSecho
-$$EXECUTE_
-
-The command line for executing SBBSECHO is very similar to SBBSFIDO, although
-some command line switches have been eliminated.
-
-We suggest you use the following command lines:
-
-For importing:
-
-	C:\SBBS\EXEC\SBBSECHO /LES!
-
-For exporting (Attach Mailer):
-
-	C:\SBBS\EXEC\SBBSECHO /LIN
-
-For exporting (FLO Mailer):
-
-	C:\SBBS\EXEC\SBBSECHO /LINF
-
-Remove all references to SBBSFIDO from your batch files (if you have any).
-See the included MAILER.BAT as an example.
-
-Command Lines Switches
-======================
-&&Command Lines Switches
-$$SWITCHES
-
-usage: sbbsecho [cfg_file] [/switches] [sub_code]
-
-where: cfg_file is the filename of config file (default is ctrl\sbbsecho.cfg)
-       sub_code is the internal code for a sub-board (default is ALL subs)
-
-SBBSecho will execute normally (for Attach Mailer operation) with NO command
-line switches required. Command lines switches are used to cause SBBSecho to
-_do_ or _not_ do specific operations. When used, command line switches
-are prepended by a slash (/) character. Multiple switches can be specified
-in one grouping (multiple /switch sets are supported, but not required).
-Switch letters are not case sensitive. The available switch letters and their
-descriptions are:
-
-P: Do not import inbound packets or extract inbound bundles
-X: Do not delete inbound packets (*.PKT) after they're imported
-N: Do not import inbound netmail (packetized netmail and *.MSG)
-D: Do not delete inbound netmail (*.MSG) after they're imported
-I: Do not import inbound echomail
-E: Do not export outbound echomail
-M: Ignore echomail pointers (export all locally created echomail messages)
-U: Update echomail pointers only (export no echomail messages)
-T: Do not update echomail pointers (test export)
-H: Export all echomail messages (including messages imported from FidoNet)
-J: Ignore recieved bit on netmail (import even though flagged as received)
-L: Create log file (data\sbbsecho.log)
-R: Create report of import totals (text\sbbsecho.msg)
-B: Import locally created netmail too (ignore the local flag)
-A: Export ASCII characters only (override individual sub-board ex-ASCII strip)
-F: Create packets for outbound netmail (necessary for FLO Mailer operation)
-G: Generate notify lists
-Y: Import netmail for unknown users to sysop (user #1)
-O: Import all netmail regardless of destination address (unless flagged local)
-S: Import private echomail override (strip private flag)
-=: Change existing tear lines to === when exporting
-!: Notify users via telegram of received echomail messages
-
-AREAFIX Commands
-================
-&&Areafix Commands
-$$AREAFIX_
-
-Remote area manager, or areafix, commands are used by uplinks to be able to
-turn echo areas off and on, list currently connected areas, and more.
-
-The following text is from the file AREAMGR.HLP which, after installation of
-SBBSecho, should be located in your Synchronet EXEC directory.	It lists the
-area manager commands available to the nodes which have been configured using
-the ECHOCFG program:
-
-Address all requests to 'SBBSecho' or 'AreaFix' (without quotes).
-Your Area Manager password goes on the subject line.
-
-In the body of the message to Area Manager:
-
-[+]<areaname>         Connect an area
--<areaname>           Disconnect an area
-%HELP                 Request this message
-%LIST                 Request a list of areas available to you
-%QUERY                Request a list of areas to which you are connected
-%UNLINKED             Request a list of areas to which you are not connected
-%COMPRESSION <type>   Change the compression type (ARC/ARJ/LZH/PAK/SQZ/ZIP/ZOO)
-%PASSWORD <password>  Change your AreaMgr password
-%RESCAN 	      Request a rescan of newly added areas
-%ACTIVE 	      Reconnect all temporarily disconnected areas
-%PASSIVE	      Temporarily disconnect all connected areas
-%FROM <address>       Remote maintenance, must be the first command
-%+ALL		      Connect all available areas
-%-ALL		      Disconnect all areas
-[---]                 Everything below the tear line is ignored
-
-NOTE: A compression type of NONE is also supported for uncompressed packets.
-
-
diff --git a/src/sbbs2/echo/echocfg.c b/src/sbbs2/echo/echocfg.c
deleted file mode 100644
index e7f1b3eb31..0000000000
--- a/src/sbbs2/echo/echocfg.c
+++ /dev/null
@@ -1,1127 +0,0 @@
-/* ECHOCFG.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* Portions written by Allen Christiansen 1994-1996 						*/
-
-#include <uifc.h>
-#include <sys\stat.h>
-#include "gen_defs.h"
-#include "sbbsdefs.h"
-#include "sbbsecho.h"
-
-char **opt;
-
-void bail(int code);
-void main();
-char fexist(char *filespec);
-char *faddrtoa(faddr_t addr);
-
-uchar node_swap=1;
-long misc=0;
-config_t cfg;
-
-unsigned _stklen=16000;
-
-void bail(int code)
-{
-
-if(code)
-	getch();
-uifcbail();
-exit(code);
-}
-
-#define lprintf cprintf
-
-void main(int argc, char **argv)
-{
-	char str[256],*p;
-	int i,j,k,x,file,dflt,nodeop=0;
-	FILE *stream;
-	echolist_t savlistcfg;
-	nodecfg_t savnodecfg;
-	arcdef_t savarcdef;
-
-fprintf(stderr,"\nSBBSecho Configuration  Version %s  Developed 1995-1997 "
-	"Rob Swindell\n\n",SBBSECHO_VER);
-
-memset(&cfg,0,sizeof(config_t));
-if(argc>1)
-	strcpy(str,argv[1]);
-else {
-	p=getenv("SBBSCTRL");
-	if(!p) {
-		p=getenv("SBBSNODE");
-		if(!p) {
-            printf("usage: echocfg [cfg_file]\n");
-			exit(1); }
-		strcpy(str,p);
-        if(str[strlen(str)-1]!='\\')
-            strcat(str,"\\");
-		strcat(str,"..\\CTRL\\SBBSECHO.CFG"); }
-	else {
-		strcpy(str,p);
-		if(str[strlen(str)-1]!='\\')
-			strcat(str,"\\");
-		strcat(str,"SBBSECHO.CFG"); } }
-strcpy(cfg.cfgfile,str);
-strupr(cfg.cfgfile);
-
-read_cfg();
-
-savnum=0;
-if((opt=(char **)MALLOC(sizeof(char *)*300))==NULL) {
-	cputs("memory allocation error\r\n");
-	bail(1); }
-for(i=0;i<300;i++)
-	if((opt[i]=(char *)MALLOC(MAX_OPLN))==NULL) {
-		cputs("memory allocation error\r\n");
-        bail(1); }
-uifcini();
-sprintf(str,"SBBSecho Configuration v%s",SBBSECHO_VER);
-uscrn(str);
-
-dflt=0;
-while(1) {
-	helpbuf=
-" SBBSecho Configuration \r\n\r\n"
-"Move through the various options using the arrow keys.  Select the\r\n"
-"highlighted options by pressing ENTER.\r\n\r\n";
-	i=0;
-	sprintf(opt[i++],"%-30.30s %s","Mailer Type"
-		,misc&FLO_MAILER ? "Binkley/FLO":"FrontDoor/Attach");
-	sprintf(opt[i++],"%-30.30s %luK","Maximum Packet Size"
-		,cfg.maxpktsize/1024UL);
-	sprintf(opt[i++],"%-30.30s %luK","Maximum Bundle Size"
-		,cfg.maxbdlsize/1024UL);
-	if(cfg.notify)
-		sprintf(str,"User #%u",cfg.notify);
-	else
-		strcpy(str,"Disabled");
-	sprintf(opt[i++],"%-30.30s %s","Areafix Failure Notification",str);
-	sprintf(opt[i++],"Nodes...");
-	sprintf(opt[i++],"Paths...");
-	sprintf(opt[i++],"Log Options...");
-	sprintf(opt[i++],"Toggle Options...");
-	sprintf(opt[i++],"Archive Programs...");
-	sprintf(opt[i++],"Additional Echo Lists...");
-	opt[i][0]=NULL;
-	switch(ulist(WIN_ORG|WIN_MID|WIN_ACT|WIN_ESC,0,0,52,&dflt,0
-	,cfg.cfgfile,opt)) {
-
-		case 0:
-			misc^=FLO_MAILER;
-			break;
-
-		case 1:
-helpbuf=
-" Maximum Packet Size \r\n\r\n"
-"This is the maximum file size that SBBSecho will create when placing\r\n"
-"outgoing messages into packets.  The default size is 250k.\r\n";
-            sprintf(str,"%lu",cfg.maxpktsize);
-            uinput(WIN_MID|WIN_BOT,0,0,"Maximum Packet Size",str
-                ,9,K_EDIT|K_NUMBER);
-            cfg.maxpktsize=atol(str);
-            break;
-
-		case 2:
-helpbuf=
-" Maximum Bundle Size \r\n\r\n"
-"This is the maximum file size that SBBSecho will create when placing\r\n"
-"outgoing packets into bundles.  The default size is 250k.\r\n";
-            sprintf(str,"%lu",cfg.maxbdlsize);
-            uinput(WIN_MID|WIN_BOT,0,0,"Maximum Bundle Size",str
-                ,9,K_EDIT|K_NUMBER);
-            cfg.maxbdlsize=atol(str);
-            break;
-
-		case 3:
-helpbuf=
-" Areafix Failure Notification \r\n\r\n"
-"Setting this option to a user number (usually #1), enables the\r\n"
-"automatic notification of that user, via e-mail, of failed areafix\r\n"
-"attempts. Setting this option to 0, disables this feature.\r\n";
-			sprintf(str,"%u",cfg.notify);
-			uinput(WIN_MID|WIN_BOT,0,0,"Areafix Notification User Number",str
-				,5,K_EDIT|K_NUMBER);
-			cfg.notify=atoi(str);
-			break;
-
-		case 4:
-helpbuf=
-" Nodes... \r\n\r\n"
-"From this menu you can configure the area manager options for your\r\n"
-"uplink nodes.\r\n";
-			i=0;
-			while(1) {
-				for(j=0;j<cfg.nodecfgs;j++)
-					strcpy(opt[j],faddrtoa(cfg.nodecfg[j].faddr));
-				opt[j][0]=0;
-				i=ulist(WIN_ORG|WIN_INS|WIN_DEL|WIN_ACT|WIN_GET|WIN_PUT
-					|WIN_INSACT|WIN_DELACT|WIN_XTR
-					,0,0,0,&i,0,"Nodes",opt);
-				if(i==-1)
-					break;
-				if((i&MSK_ON)==MSK_INS) {
-					i&=MSK_OFF;
-					str[0]=0;
-helpbuf=
-" Address \r\n\r\n"
-"This is the FidoNet style address of the node you wish to add\r\n";
-					if(uinput(WIN_MID,0,0
-						,"Node Address (ALL wildcard allowed)",str
-						,25,K_EDIT)<1)
-						continue;
-					if((cfg.nodecfg=(nodecfg_t *)REALLOC(cfg.nodecfg
-						,sizeof(nodecfg_t)*(cfg.nodecfgs+1)))==NULL) {
-						printf("\nMemory Allocation Error\n");
-                        exit(1); }
-					for(j=cfg.nodecfgs;j>i;j--)
-						memcpy(&cfg.nodecfg[j],&cfg.nodecfg[j-1]
-                            ,sizeof(nodecfg_t));
-					cfg.nodecfgs++;
-					memset(&cfg.nodecfg[i],0,sizeof(nodecfg_t));
-					cfg.nodecfg[i].faddr=atofaddr(str);
-					continue; }
-
-				if((i&MSK_ON)==MSK_DEL) {
-					i&=MSK_OFF;
-					cfg.nodecfgs--;
-					if(cfg.nodecfgs<=0) {
-						cfg.nodecfgs=0;
-						continue; }
-					for(j=i;j<cfg.nodecfgs;j++)
-						memcpy(&cfg.nodecfg[j],&cfg.nodecfg[j+1]
-							,sizeof(nodecfg_t));
-					if((cfg.nodecfg=(nodecfg_t *)REALLOC(cfg.nodecfg
-						,sizeof(nodecfg_t)*(cfg.nodecfgs)))==NULL) {
-						printf("\nMemory Allocation Error\n");
-						exit(1); }
-					continue; }
-				if((i&MSK_ON)==MSK_GET) {
-					i&=MSK_OFF;
-					memcpy(&savnodecfg,&cfg.nodecfg[i],sizeof(nodecfg_t));
-					continue; }
-				if((i&MSK_ON)==MSK_PUT) {
-					i&=MSK_OFF;
-					memcpy(&cfg.nodecfg[i],&savnodecfg,sizeof(nodecfg_t));
-					continue; }
-				while(1) {
-helpbuf=
-" Node Options \r\n\r\n"
-"These are the configurable options available for this node.\r\n";
-					j=0;
-					sprintf(opt[j++],"%-20.20s %s","Address"
-						,faddrtoa(cfg.nodecfg[i].faddr));
-					sprintf(opt[j++],"%-20.20s %s","Archive Type"
-						,cfg.nodecfg[i].arctype>cfg.arcdefs ?
-						"None":cfg.arcdef[cfg.nodecfg[i].arctype].name);
-					sprintf(opt[j++],"%-20.20s %s","Packet Type"
-						,cfg.nodecfg[i].pkt_type==PKT_TWO ? "2"
-						:cfg.nodecfg[i].pkt_type==PKT_TWO_TWO ? "2.2":"2+");
-					sprintf(opt[j++],"%-20.20s %s","Packet Password"
-						,cfg.nodecfg[i].pktpwd);
-					sprintf(opt[j++],"%-20.20s %s","Areafix Password"
-						,cfg.nodecfg[i].password);
-					str[0]=0;
-					for(k=0;k<cfg.nodecfg[i].numflags;k++) {
-						strcat(str,cfg.nodecfg[i].flag[k].flag);
-						strcat(str," "); }
-					sprintf(opt[j++],"%-20.20s %s","Areafix Flags",str);
-					sprintf(opt[j++],"%-20.20s %s","Status"
-						,cfg.nodecfg[i].attr&ATTR_CRASH ? "Crash"
-						:cfg.nodecfg[i].attr&ATTR_HOLD ? "Hold" : "None");
-					sprintf(opt[j++],"%-20.20s %s","Direct"
-						,cfg.nodecfg[i].attr&ATTR_DIRECT ? "Yes":"No");
-					sprintf(opt[j++],"%-20.20s %s","Passive"
-						,cfg.nodecfg[i].attr&ATTR_PASSIVE ? "Yes":"No");
-					sprintf(opt[j++],"%-20.20s %s","Send Notify List"
-                        ,cfg.nodecfg[i].attr&SEND_NOTIFY ? "Yes" : "No");
-					if(misc&FLO_MAILER)
-						sprintf(opt[j++],"%-20.20s %s","Route To"
-							,cfg.nodecfg[i].route.zone
-							? faddrtoa(cfg.nodecfg[i].route) : "Disabled");
-					opt[j][0]=0;
-					k=ulist(WIN_MID|WIN_ACT,0,0,40,&nodeop,0
-						,faddrtoa(cfg.nodecfg[i].faddr),opt);
-					if(k==-1)
-						break;
-					switch(k) {
-						case 0:
-helpbuf=
-" Address \r\n\r\n"
-"This is the FidoNet style address of this node.\r\n";
-							strcpy(str,faddrtoa(cfg.nodecfg[i].faddr));
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Node Address (ALL wildcard allowed)",str
-								,25,K_EDIT|K_UPPER);
-							cfg.nodecfg[i].faddr=atofaddr(str);
-							break;
-						case 1:
-helpbuf=
-" Archive Type \r\n\r\n"
-"This is the compression type that will be used for compressing packets\r\n"
-"to and decompressing packets from this node.\r\n";
-							for(j=0;j<cfg.arcdefs;j++)
-								strcpy(opt[j],cfg.arcdef[j].name);
-							strcpy(opt[j++],"None");
-							opt[j][0]=0;
-							if(cfg.nodecfg[i].arctype<j)
-								j=cfg.nodecfg[i].arctype;
-							k=ulist(WIN_RHT|WIN_SAV,0,0,0,&j,0
-								,"Archive Type",opt);
-							if(k==-1)
-								break;
-							if(k>=cfg.arcdefs)
-								cfg.nodecfg[i].arctype=0xffff;
-							else
-								cfg.nodecfg[i].arctype=k;
-							break;
-						case 2:
-helpbuf=
-" Packet Type \r\n\r\n"
-"This is the packet header type that will be used in mail packets to\r\n"
-"this node.  SBBSecho defaults to using type 2.2.\r\n";
-							j=0;
-							strcpy(opt[j++],"2+");
-							strcpy(opt[j++],"2.2");
-							strcpy(opt[j++],"2");
-							opt[j][0]=0;
-							j=cfg.nodecfg[i].pkt_type;
-							k=ulist(WIN_RHT|WIN_SAV,0,0,0,&j,0,"Packet Type"
-								,opt);
-							if(k==-1)
-								break;
-							cfg.nodecfg[i].pkt_type=k;
-							break;
-						case 3:
-helpbuf=
-" Packet Password \r\n\r\n"
-"This is an optional password that SBBSecho will place into packets\r\n"
-"destined for this node.\r\n";
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Packet Password (optional)"
-								,cfg.nodecfg[i].pktpwd,8,K_EDIT|K_UPPER);
-							break;
-						case 4:
-helpbuf=
-" Areafix Password \r\n\r\n"
-"This is the password that will be used by this node when doing remote\r\n"
-"areamanager functions.\r\n";
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Areafix Password"
-								,cfg.nodecfg[i].password,8,K_EDIT|K_UPPER);
-							break;
-						case 5:
-helpbuf=
-" Areafix Flag \r\n\r\n"
-"This is a flag to to be given to this node allowing access to one or\r\n"
-"more of the configured echo lists\r\n";
-							while(1) {
-								for(j=0;j<cfg.nodecfg[i].numflags;j++)
-									strcpy(opt[j],cfg.nodecfg[i].flag[j].flag);
-								opt[j][0]=0;
-								k=ulist(WIN_SAV|WIN_INS|WIN_DEL|WIN_ACT|
-									WIN_XTR|WIN_INSACT|WIN_DELACT|WIN_RHT
-									,0,0,0,&k,0,"Areafix Flags",opt);
-								if(k==-1)
-									break;
-								if((k&MSK_ON)==MSK_INS) {
-									k&=MSK_OFF;
-									str[0]=0;
-									if(uinput(WIN_MID|WIN_SAV,0,0
-										,"Areafix Flag",str,4
-										,K_EDIT|K_UPPER)<1)
-										continue;
-									if((cfg.nodecfg[i].flag=(flag_t *)
-										REALLOC(cfg.nodecfg[i].flag
-										,sizeof(flag_t)*
-										(cfg.nodecfg[i].numflags+1)))==NULL) {
-										printf("\nMemory Allocation Error\n");
-										exit(1); }
-									for(j=cfg.nodecfg[i].numflags;j>i;j--)
-										memcpy(&cfg.nodecfg[i].flag[j]
-											,&cfg.nodecfg[i].flag[j-1]
-											,sizeof(flag_t));
-									cfg.nodecfg[i].numflags++;
-									memset(&cfg.nodecfg[i].flag[k].flag
-										,0,sizeof(flag_t));
-									strcpy(cfg.nodecfg[i].flag[k].flag,str);
-									continue; }
-
-								if((k&MSK_ON)==MSK_DEL) {
-									k&=MSK_OFF;
-									cfg.nodecfg[i].numflags--;
-									if(cfg.nodecfg[i].numflags<=0) {
-										cfg.nodecfg[i].numflags=0;
-										continue; }
-									for(j=k;j<cfg.nodecfg[i].numflags;j++)
-										strcpy(cfg.nodecfg[i].flag[j].flag
-											,cfg.nodecfg[i].flag[j+1].flag);
-									if((cfg.nodecfg[i].flag=(flag_t *)
-										REALLOC(cfg.nodecfg[i].flag
-										,sizeof(flag_t)*
-										(cfg.nodecfg[i].numflags)))==NULL) {
-										printf("\nMemory Allocation Error\n");
-										exit(1); }
-									continue; }
-								strcpy(str,cfg.nodecfg[i].flag[k].flag);
-								uinput(WIN_MID|WIN_SAV,0,0,"Areafix Flag"
-									,str,4,K_EDIT|K_UPPER);
-								strcpy(cfg.nodecfg[i].flag[k].flag,str);
-								continue; }
-							break;
-						case 6:
-							if(cfg.nodecfg[i].attr&ATTR_CRASH) {
-								cfg.nodecfg[i].attr^=ATTR_CRASH;
-								cfg.nodecfg[i].attr|=ATTR_HOLD;
-								break; }
-							if(cfg.nodecfg[i].attr&ATTR_HOLD) {
-								cfg.nodecfg[i].attr^=ATTR_HOLD;
-								break; }
-							cfg.nodecfg[i].attr|=ATTR_CRASH;
-							break;
-						case 7:
-							cfg.nodecfg[i].attr^=ATTR_DIRECT;
-							break;
-						case 8:
-							cfg.nodecfg[i].attr^=ATTR_PASSIVE;
-							break;
-						case 9:
-							cfg.nodecfg[i].attr^=SEND_NOTIFY;
-							break;
-						case 10:
-helpbuf=
-" Route To \r\n\r\n"
-"When using a FLO type mailer, this is the node number of an address\r\n"
-"to route mail to for this node.\r\n";
-							strcpy(str,faddrtoa(cfg.nodecfg[i].route));
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Node Address to Route To",str
-								,25,K_EDIT);
-								if(str[0])
-									cfg.nodecfg[i].route=atofaddr(str);
-                            break;
-							} } }
-			break;
-
-		case 5:
-helpbuf=
-" Paths... \r\n\r\n"
-"From this menu you can configure the paths that SBBSecho will use\r\n"
-"when importing and exporting.\r\n";
-			j=0;
-			while(1) {
-				i=0;
-				sprintf(opt[i++],"%-30.30s %s","Inbound Directory"
-					,cfg.inbound[0] ? cfg.inbound : "<Specified in SCFG>");
-				sprintf(opt[i++],"%-30.30s %s","Secure Inbound (optional)"
-					,cfg.secure[0] ? cfg.secure : "None Specified");
-				sprintf(opt[i++],"%-30.30s %s","Outbound Directory"
-					,cfg.outbound);
-				sprintf(opt[i++],"%-30.30s %s","Area File"
-					,cfg.areafile[0] ? cfg.areafile
-					: "SCFG->DATA\\AREAS.BBS");
-				sprintf(opt[i++],"%-30.30s %s","Log File"
-					,cfg.logfile[0] ? cfg.logfile
-					: "SCFG->DATA\\SBBSECHO.LOG");
-				opt[i][0]=NULL;
-				j=ulist(WIN_MID|WIN_ACT,0,0,60,&j,0
-					,"Paths and Filenames",opt);
-				if(j==-1)
-					break;
-				switch(j) {
-					case 0:
-helpbuf=
-" Inbound Directory \r\n\r\n"
-"This is the complete path (drive and directory) where your front\r\n"
-"end mailer stores, and where SBBSecho will look for, incoming message\r\n"
-"bundles and packets.";
-						uinput(WIN_MID|WIN_SAV,0,0,"Inbound",cfg.inbound
-							,50,K_EDIT|K_UPPER);
-						break;
-
-					case 1:
-helpbuf=
-" Secure Inbound Directory \r\n\r\n"
-"This is the complete path (drive and directory) where your front\r\n"
-"end mailer stores, and where SBBSecho will look for, incoming message\r\n"
-"bundles and packets for SECURE sessions.";
-						uinput(WIN_MID|WIN_SAV,0,0,"Secure Inbound",cfg.secure
-							,50,K_EDIT|K_UPPER);
-						break;
-
-					case 2:
-helpbuf=
-" Outbound Directory \r\n\r\n"
-"This is the complete path (drive and directory) where your front\r\n"
-"end mailer will look for, and where SBBSecho will place, outgoing\r\n"
-"message bundles and packets.";
-						uinput(WIN_MID|WIN_SAV,0,0,"Outbound",cfg.outbound
-							,50,K_EDIT|K_UPPER);
-						break;
-
-					case 3:
-helpbuf=
-" Area File \r\n\r\n"
-"This is the complete path (drive, directory, and filename) of the\r\n"
-"file SBBSecho will use as your AREAS.BBS file.";
-						uinput(WIN_MID|WIN_SAV,0,0,"Areafile",cfg.areafile
-							,50,K_EDIT|K_UPPER);
-						break;
-
-					case 4:
-helpbuf=
-" Log File \r\n\r\n"
-"This is the complete path (drive, directory, and filename) of the\r\n"
-"file SBBSecho will use to log information each time it is run.";
-						uinput(WIN_MID|WIN_SAV,0,0,"Logfile",cfg.logfile
-							,50,K_EDIT|K_UPPER);
-						break; } }
-			break;
-		case 6:
-helpbuf=
-" Log Options \r\n"
-"\r\n"
-"Each loggable item can be toggled off or on from this menu. You must run\r\n"
-"SBBSecho with the /L command line option for any of these items to be\r\n"
-"logged.";
-			j=0;
-			while(1) {
-				i=0;
-				strcpy(opt[i++],"ALL");
-				strcpy(opt[i++],"NONE");
-				strcpy(opt[i++],"DEFAULT");
-				sprintf(opt[i++],"%-35.35s%-3.3s","Ignored NetMail Messages"
-					,cfg.log&LOG_IGNORED ? "Yes":"No");
-				sprintf(opt[i++],"%-35.35s%-3.3s","NetMail for Unknown Users"
-					,cfg.log&LOG_UNKNOWN ? "Yes":"No");
-				sprintf(opt[i++],"%-35.35s%-3.3s","Areafix NetMail Messages"
-					,cfg.log&LOG_AREAFIX ? "Yes":"No");
-				sprintf(opt[i++],"%-35.35s%-3.3s","Imported NetMail Messages"
-					,cfg.log&LOG_IMPORTED ? "Yes":"No");
-				sprintf(opt[i++],"%-35.35s%-3.3s","Packing Out-bound NetMail"
-					,cfg.log&LOG_PACKING ? "Yes":"No");
-				sprintf(opt[i++],"%-35.35s%-3.3s","Routing Out-bound NetMail"
-					,cfg.log&LOG_ROUTING ? "Yes":"No");
-				sprintf(opt[i++],"%-35.35s%-3.3s","In-bound Packet Information"
-					,cfg.log&LOG_PACKETS ? "Yes":"No");
-				sprintf(opt[i++],"%-35.35s%-3.3s","In-bound Security Violations"
-					,cfg.log&LOG_SECURITY ? "Yes":"No");
-				sprintf(opt[i++],"%-35.35s%-3.3s","In-bound Grunged Messages"
-					,cfg.log&LOG_GRUNGED ? "Yes":"No");
-				sprintf(opt[i++],"%-35.35s%-3.3s","Disallowed Private EchoMail"
-					,cfg.log&LOG_PRIVATE ? "Yes":"No");
-				sprintf(opt[i++],"%-35.35s%-3.3s","Circular EchoMail Messages"
-                    ,cfg.log&LOG_CIRCULAR ? "Yes":"No");
-				sprintf(opt[i++],"%-35.35s%-3.3s","Duplicate EchoMail Messages"
-					,cfg.log&LOG_DUPES ? "Yes":"No");
-				sprintf(opt[i++],"%-35.35s%-3.3s","Area Totals"
-					,cfg.log&LOG_AREA_TOTALS ? "Yes":"No");
-				sprintf(opt[i++],"%-35.35s%-3.3s","Over-All Totals"
-					,cfg.log&LOG_TOTALS ? "Yes":"No");
-				opt[i][0]=NULL;
-				j=ulist(0,0,0,43,&j,0,"Log Options",opt);
-				if(j==-1)
-					break;
-				switch(j) {
-					case 0:
-						cfg.log=~0L;
-						break;
-					case 1:
-						cfg.log=0;
-						break;
-					case 2:
-						cfg.log=LOG_DEFAULTS;
-						break;
-					case 3:
-						cfg.log^=LOG_IGNORED;
-						break;
-					case 4:
-						cfg.log^=LOG_UNKNOWN;
-                        break;
-					case 5:
-						cfg.log^=LOG_AREAFIX;
-                        break;
-					case 6:
-						cfg.log^=LOG_IMPORTED;
-                        break;
-					case 7:
-						cfg.log^=LOG_PACKING;
-                        break;
-					case 8:
-						cfg.log^=LOG_ROUTING;
-                        break;
-					case 9:
-						cfg.log^=LOG_PACKETS;
-                        break;
-					case 10:
-						cfg.log^=LOG_SECURITY;
-                        break;
-					case 11:
-						cfg.log^=LOG_GRUNGED;
-                        break;
-					case 12:
-						cfg.log^=LOG_PRIVATE;
-                        break;
-					case 13:
-						cfg.log^=LOG_CIRCULAR;
-                        break;
-					case 14:
-						cfg.log^=LOG_DUPES;
-                        break;
-					case 15:
-						cfg.log^=LOG_AREA_TOTALS;
-                        break;
-					case 16:
-						cfg.log^=LOG_TOTALS;
-						break; } }
-            break;
-
-
-		case 7:
-helpbuf=
-"Secure Operation tells SBBSecho to check the AREAS.BBS file to insure\r\n"
-"    that the packet origin exists there as well as check the password of\r\n"
-"    that node (if configured).\r\n\r\n"
-"Swap for Executables tells SBBSecho whether or not it should swap\r\n"
-"    out of memory when executing external executables.\r\n\r\n"
-"Fuzzy Zone Operation when set to yes if SBBSecho receives an inbound\r\n"
-"    netmail with no international zone information, it will compare the\r\n"
-"    net/node of the destination to the net/node information in your AKAs\r\n"
-"    and assume the zone of a matching AKA.\r\n\r\n"
-"Store PATH/SEEN-BY/Unkown Kludge Lines in Message Base allows you to\r\n"
-"    determine whether or not SBBSecho will store this information from\r\n"
-"    incoming messages in the Synchronet message base.\r\n\r\n"
-"Allow Nodes to Add Areas in the AREAS.BBS List when set to YES allows\r\n"
-"    uplinks to add areas listed in the AREAS.BBS file\r\n";
-			j=0;
-			while(1) {
-				i=0;
-				sprintf(opt[i++],"%-50.50s%-3.3s","Secure Operation"
-					,misc&SECURE ? "Yes":"No");
-				sprintf(opt[i++],"%-50.50s%-3.3s","Swap for Executables"
-					,node_swap ? "Yes":"No");
-				sprintf(opt[i++],"%-50.50s%-3.3s","Fuzzy Zone Operation"
-					,misc&FUZZY_ZONE ? "Yes":"No");
-				sprintf(opt[i++],"%-50.50s%-3.3s","Store PATH Lines in "
-					"Message Base",misc&STORE_SEENBY ? "Yes":"No");
-				sprintf(opt[i++],"%-50.50s%-3.3s","Store SEEN-BY Lines in "
-					"Message Base",misc&STORE_PATH ? "Yes":"No");
-				sprintf(opt[i++],"%-50.50s%-3.3s","Store Unknown Kludge Lines "
-					"in Message Base",misc&STORE_KLUDGE ? "Yes":"No");
-				sprintf(opt[i++],"%-50.50s%-3.3s","Allow Nodes to Add Areas "
-					"in the AREAS.BBS List",misc&ELIST_ONLY?"No":"Yes");
-				sprintf(opt[i++],"%-50.50s%-3.3s","Kill/Ignore Empty NetMail "
-					"Messages",misc&KILL_EMPTY_MAIL ? "Yes":"No");
-				opt[i][0]=NULL;
-				j=ulist(0,0,0,60,&j,0,"Toggle Options",opt);
-				if(j==-1)
-					break;
-				switch(j) {
-					case 0:
-						misc^=SECURE;
-						break;
-					case 1:
-						if(node_swap)
-							node_swap=0;
-						else
-							node_swap=1;
-						break;
-					case 2:
-						misc^=FUZZY_ZONE;
-						break;
-					case 3:
-						misc^=STORE_SEENBY;
-						break;
-					case 4:
-						misc^=STORE_PATH;
-						break;
-					case 5:
-						misc^=STORE_KLUDGE;
-						break;
-					case 6:
-						misc^=ELIST_ONLY;
-						break;
-					case 7:
-						misc^=KILL_EMPTY_MAIL;
-						} }
-            break;
-		case 8:
-helpbuf=
-" Archive Programs \r\n\r\n"
-"These are the archiving programs (types) which are available for\r\n"
-"compressing outgoing packets.\r\n";
-			i=0;
-			while(1) {
-				for(j=0;j<cfg.arcdefs;j++)
-					sprintf(opt[j],"%-30.30s",cfg.arcdef[j].name);
-				opt[j][0]=0;
-				i=ulist(WIN_ORG|WIN_INS|WIN_DEL|WIN_ACT|WIN_GET|WIN_PUT
-					|WIN_INSACT|WIN_DELACT|WIN_XTR
-					,0,0,0,&i,0,"Archive Programs",opt);
-				if(i==-1)
-					break;
-				if((i&MSK_ON)==MSK_INS) {
-					i&=MSK_OFF;
-					str[0]=0;
-helpbuf=
-" Packer Name \r\n\r\n"
-"This is the identifying name of the archiving program\r\n";
-					if(uinput(WIN_MID,0,0
-						,"Packer Name",str,25,K_EDIT|K_UPPER)<1)
-						continue;
-					if((cfg.arcdef=(arcdef_t *)REALLOC(cfg.arcdef
-						,sizeof(arcdef_t)*(cfg.arcdefs+1)))==NULL) {
-						printf("\nMemory Allocation Error\n");
-                        exit(1); }
-					for(j=cfg.arcdefs;j>i;j--)
-						memcpy(&cfg.arcdef[j],&cfg.arcdef[j-1]
-							,sizeof(arcdef_t));
-						strcpy(cfg.arcdef[j].name
-							,cfg.arcdef[j-1].name);
-					cfg.arcdefs++;
-					memset(&cfg.arcdef[i],0,sizeof(arcdef_t));
-					strcpy(cfg.arcdef[i].name,str);
-					continue; }
-
-				if((i&MSK_ON)==MSK_DEL) {
-					i&=MSK_OFF;
-					cfg.arcdefs--;
-					if(cfg.arcdefs<=0) {
-						cfg.arcdefs=0;
-						continue; }
-					for(j=i;j<cfg.arcdefs;j++)
-						memcpy(&cfg.arcdef[j],&cfg.arcdef[j+1]
-							,sizeof(arcdef_t));
-					if((cfg.arcdef=(arcdef_t *)REALLOC(cfg.arcdef
-						,sizeof(arcdef_t)*(cfg.arcdefs)))==NULL) {
-						printf("\nMemory Allocation Error\n");
-						exit(1); }
-					continue; }
-				if((i&MSK_ON)==MSK_GET) {
-					i&=MSK_OFF;
-					memcpy(&savarcdef,&cfg.arcdef[i],sizeof(arcdef_t));
-					continue; }
-				if((i&MSK_ON)==MSK_PUT) {
-					i&=MSK_OFF;
-					memcpy(&cfg.arcdef[i],&savarcdef,sizeof(arcdef_t));
-					continue; }
-				while(1) {
-					j=0;
-					sprintf(opt[j++],"%-20.20s %s","Packer Name"
-						,cfg.arcdef[i].name);
-					sprintf(opt[j++],"%-20.20s %s","Hexadecimal ID"
-						,cfg.arcdef[i].hexid);
-					sprintf(opt[j++],"%-20.20s %u","Offset to Hex ID"
-						,cfg.arcdef[i].byteloc);
-					sprintf(opt[j++],"%-20.20s %s","Pack Command Line"
-						,cfg.arcdef[i].pack);
-					sprintf(opt[j++],"%-20.20s %s","Unpack Command Line"
-						,cfg.arcdef[i].unpack);
-					opt[j][0]=0;
-					sprintf(str,"%.30s",cfg.arcdef[i].name);
-					k=ulist(WIN_MID|WIN_ACT,0,0,60,&nodeop,0,str,opt);
-					if(k==-1)
-						break;
-					switch(k) {
-						case 0:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Packer Name",cfg.arcdef[i].name,25
-								,K_EDIT|K_UPPER);
-							break;
-						case 1:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Hexadecimal ID",cfg.arcdef[i].hexid,25
-								,K_EDIT|K_UPPER);
-                            break;
-						case 2:
-							sprintf(str,"%u",cfg.arcdef[i].byteloc);
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Offset to Hex ID",str,5
-								,K_NUMBER|K_EDIT);
-							cfg.arcdef[i].byteloc=atoi(str);
-							break;
-						case 3:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Pack Command Line",cfg.arcdef[i].pack,50
-								,K_EDIT);
-                            break;
-						case 4:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Unpack Command Line",cfg.arcdef[i].unpack,50
-								,K_EDIT);
-                            break;
-							} } }
-            break;
-		case 9:
-helpbuf=
-" Additional Echo Lists \r\n\r\n"
-"This feature allows you to specify echo lists (in addition to your\r\n"
-"AREAS.BBS file) for SBBSecho to search for area add requests.\r\n";
-			i=0;
-			while(1) {
-				for(j=0;j<cfg.listcfgs;j++)
-					sprintf(opt[j],"%-50.50s",cfg.listcfg[j].listpath);
-				opt[j][0]=0;
-				i=ulist(WIN_ORG|WIN_INS|WIN_DEL|WIN_ACT|WIN_GET|WIN_PUT
-					|WIN_INSACT|WIN_DELACT|WIN_XTR
-					,0,0,0,&i,0,"Additional Echo Lists",opt);
-				if(i==-1)
-					break;
-				if((i&MSK_ON)==MSK_INS) {
-					i&=MSK_OFF;
-					str[0]=0;
-helpbuf=
-" Echo List \r\n\r\n"
-"This is the path and filename of the echo list file you wish\r\n"
-"to add.\r\n";
-					if(uinput(WIN_MID|WIN_SAV,0,0
-						,"Echo List Path/Name",str,50,K_EDIT|K_UPPER)<1)
-						continue;
-					if((cfg.listcfg=(echolist_t *)REALLOC(cfg.listcfg
-						,sizeof(echolist_t)*(cfg.listcfgs+1)))==NULL) {
-						printf("\nMemory Allocation Error\n");
-                        exit(1); }
-					for(j=cfg.listcfgs;j>i;j--)
-						memcpy(&cfg.listcfg[j],&cfg.listcfg[j-1]
-							,sizeof(echolist_t));
-					cfg.listcfgs++;
-					memset(&cfg.listcfg[i],0,sizeof(echolist_t));
-					strcpy(cfg.listcfg[i].listpath,str);
-					continue; }
-
-				if((i&MSK_ON)==MSK_DEL) {
-					i&=MSK_OFF;
-					cfg.listcfgs--;
-					if(cfg.listcfgs<=0) {
-						cfg.listcfgs=0;
-						continue; }
-					for(j=i;j<cfg.listcfgs;j++)
-						memcpy(&cfg.listcfg[j],&cfg.listcfg[j+1]
-							,sizeof(echolist_t));
-					if((cfg.listcfg=(echolist_t *)REALLOC(cfg.listcfg
-						,sizeof(echolist_t)*(cfg.listcfgs)))==NULL) {
-						printf("\nMemory Allocation Error\n");
-						exit(1); }
-					continue; }
-				if((i&MSK_ON)==MSK_GET) {
-					i&=MSK_OFF;
-					memcpy(&savlistcfg,&cfg.listcfg[i],sizeof(echolist_t));
-					continue; }
-				if((i&MSK_ON)==MSK_PUT) {
-					i&=MSK_OFF;
-					memcpy(&cfg.listcfg[i],&savlistcfg,sizeof(echolist_t));
-					continue; }
-				while(1) {
-					j=0;
-					sprintf(opt[j++],"%-20.20s %.19s","Echo List Path/Name"
-						,cfg.listcfg[i].listpath);
-					sprintf(opt[j++],"%-20.20s %s","Hub Address"
-						,(cfg.listcfg[i].forward.zone) ?
-						 faddrtoa(cfg.listcfg[i].forward) : "None");
-					sprintf(opt[j++],"%-20.20s %s","Forward Password"
-						,(cfg.listcfg[i].password[0]) ?
-						 cfg.listcfg[i].password : "None");
-					sprintf(opt[j++],"%-20.20s %s","Forward Requests"
-						,(cfg.listcfg[i].misc&NOFWD) ? "No" : "Yes");
-					str[0]=0;
-					for(k=0;k<cfg.listcfg[i].numflags;k++) {
-						strcat(str,cfg.listcfg[i].flag[k].flag);
-						strcat(str," "); }
-					sprintf(opt[j++],"%-20.20s %s","Echo List Flags",str);
-					opt[j][0]=0;
-					k=ulist(WIN_MID|WIN_ACT,0,0,60,&nodeop,0,"Echo List",opt);
-					if(k==-1)
-						break;
-					switch(k) {
-						case 0:
-							strcpy(str,cfg.listcfg[i].listpath);
-							if(uinput(WIN_MID|WIN_SAV,0,0
-								,"Echo List Path/Name",str,50
-								,K_EDIT|K_UPPER)<1)
-								continue;
-							strcpy(cfg.listcfg[i].listpath,str);
-							break;
-						case 1:
-							if(cfg.listcfg[i].forward.zone)
-								strcpy(str,faddrtoa(cfg.listcfg[i].forward));
-							else
-								str[0]=0;
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Hub Address",str
-								,25,K_EDIT);
-							if(str[0])
-								cfg.listcfg[i].forward=atofaddr(str);
-							else
-								memset(&cfg.listcfg[i].forward,0
-									,sizeof(faddr_t));
-							break;
-						case 2:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Password to use when forwarding requests"
-								,cfg.listcfg[i].password,25,K_EDIT|K_UPPER);
-							break;
-						case 3:
-                            cfg.listcfg[i].misc^=NOFWD;
-							if(cfg.listcfg[i].misc&NOFWD)
-								cfg.listcfg[i].password[0]=0;
-                            break;
-						case 4:
-							while(1) {
-								for(j=0;j<cfg.listcfg[i].numflags;j++)
-									strcpy(opt[j],cfg.listcfg[i].flag[j].flag);
-								opt[j][0]=0;
-								x=ulist(WIN_SAV|WIN_INS|WIN_DEL|WIN_ACT|
-									WIN_XTR|WIN_INSACT|WIN_DELACT|WIN_RHT
-									,0,0,0,&x,0,"Echo List Flags",opt);
-								if(x==-1)
-									break;
-								if((x&MSK_ON)==MSK_INS) {
-									x&=MSK_OFF;
-									str[0]=0;
-helpbuf=
-" Echo List Flag \r\n\r\n"
-"These flags determine which nodes have access to the current\r\n"
-"echolist file\r\n";
-									if(uinput(WIN_MID|WIN_SAV,0,0
-										,"Echo List Flag",str,4
-										,K_EDIT|K_UPPER)<1)
-										continue;
-									if((cfg.listcfg[i].flag=(flag_t *)
-										REALLOC(cfg.listcfg[i].flag
-										,sizeof(flag_t)*
-										(cfg.listcfg[i].numflags+1)))==NULL) {
-										printf("\nMemory Allocation Error\n");
-										exit(1); }
-									for(j=cfg.listcfg[i].numflags;j>x;j--)
-										memcpy(&cfg.listcfg[i].flag[j]
-											,&cfg.listcfg[i].flag[j-1]
-											,sizeof(flag_t));
-									cfg.listcfg[i].numflags++;
-									memset(&cfg.listcfg[i].flag[x].flag
-										,0,sizeof(flag_t));
-									strcpy(cfg.listcfg[i].flag[x].flag,str);
-									continue; }
-
-								if((x&MSK_ON)==MSK_DEL) {
-									x&=MSK_OFF;
-									cfg.listcfg[i].numflags--;
-									if(cfg.listcfg[i].numflags<=0) {
-										cfg.listcfg[i].numflags=0;
-										continue; }
-									for(j=x;j<cfg.listcfg[i].numflags;j++)
-										strcpy(cfg.listcfg[i].flag[j].flag
-											,cfg.listcfg[i].flag[j+1].flag);
-									if((cfg.listcfg[i].flag=(flag_t *)
-										REALLOC(cfg.listcfg[i].flag
-										,sizeof(flag_t)*
-										(cfg.listcfg[i].numflags)))==NULL) {
-										printf("\nMemory Allocation Error\n");
-										exit(1); }
-									continue; }
-								strcpy(str,cfg.listcfg[i].flag[x].flag);
-helpbuf=
-" Echo List Flag \r\n\r\n"
-"These flags determine which nodes have access to the current\r\n"
-"echolist file\r\n";
-									uinput(WIN_MID|WIN_SAV,0,0,"Echo List Flag"
-										,str,4,K_EDIT|K_UPPER);
-									strcpy(cfg.listcfg[i].flag[x].flag,str);
-									continue; }
-							break;
-							} } }
-            break;
-
-		case -1:
-helpbuf=
-" Save Configuration File \r\n\r\n"
-"Select Yes to save the config file, No to quit without saving,\r\n"
-"or hit  ESC  to go back to the menu.\r\n\r\n";
-			i=0;
-			strcpy(opt[0],"Yes");
-			strcpy(opt[1],"No");
-			opt[2][0]=0;
-			i=ulist(WIN_MID,0,0,0,&i,0,"Save Config File",opt);
-			if(i==-1) break;
-			if(i) bail(0);
-			if((file=open(cfg.cfgfile
-				,O_WRONLY|O_BINARY|O_CREAT|O_DENYALL|O_TRUNC,S_IWRITE))==-1) {
-				textattr(LIGHTGRAY);
-				clrscr();
-				lprintf("Error opening %s\r\n",cfg.cfgfile);
-				bail(1); }
-			if((stream=fdopen(file,"wb"))==NULL) {
-				textattr(LIGHTGRAY);
-				clrscr();
-				lprintf("Error fdopen %s\r\n",cfg.cfgfile);
-				bail(1); }
-			if(!node_swap)
-				fprintf(stream,"NOSWAP\r\n");
-			if(cfg.notify)
-				fprintf(stream,"NOTIFY %u\r\n",cfg.notify);
-			if(misc&SECURE)
-				fprintf(stream,"SECURE_ECHOMAIL\r\n");
-			if(misc&KILL_EMPTY_MAIL)
-				fprintf(stream,"KILL_EMPTY\r\n");
-			if(misc&STORE_SEENBY)
-				fprintf(stream,"STORE_SEENBY\r\n");
-			if(misc&STORE_PATH)
-				fprintf(stream,"STORE_PATH\r\n");
-			if(misc&STORE_KLUDGE)
-				fprintf(stream,"STORE_KLUDGE\r\n");
-			if(misc&FUZZY_ZONE)
-				fprintf(stream,"FUZZY_ZONE\r\n");
-			if(misc&FLO_MAILER)
-				fprintf(stream,"FLO_MAILER\r\n");
-			if(misc&ELIST_ONLY)
-				fprintf(stream,"ELIST_ONLY\r\n");
-			if(cfg.areafile[0])
-				fprintf(stream,"AREAFILE %s\r\n",cfg.areafile);
-			if(cfg.logfile[0])
-				fprintf(stream,"LOGFILE %s\r\n",cfg.logfile);
-			if(cfg.log!=LOG_DEFAULTS) {
-				if(cfg.log==0xffffffffUL)
-					fprintf(stream,"LOG ALL\r\n");
-				else if(cfg.log==0L)
-					fprintf(stream,"LOG NONE\r\n");
-				else
-					fprintf(stream,"LOG %08lX\r\n",cfg.log); }
-			if(cfg.inbound[0])
-				fprintf(stream,"INBOUND %s\r\n",cfg.inbound);
-			if(cfg.secure[0])
-				fprintf(stream,"SECURE_INBOUND %s\r\n",cfg.secure);
-			if(cfg.outbound[0])
-				fprintf(stream,"OUTBOUND %s\r\n",cfg.outbound);
-			if(cfg.maxbdlsize!=DFLT_BDL_SIZE)
-				fprintf(stream,"ARCSIZE %lu\r\n",cfg.maxbdlsize);
-			if(cfg.maxpktsize!=DFLT_PKT_SIZE)
-				fprintf(stream,"PKTSIZE %lu\r\n",cfg.maxpktsize);
-			for(i=j=0;i<cfg.nodecfgs;i++)
-				if(cfg.nodecfg[i].attr&SEND_NOTIFY) {
-					if(!j) fprintf(stream,"SEND_NOTIFY");
-                    fprintf(stream," %s",faddrtoa(cfg.nodecfg[i].faddr));
-                    j++; }
-			if(j) fprintf(stream,"\r\n");
-			for(i=j=0;i<cfg.nodecfgs;i++)
-                if(cfg.nodecfg[i].attr&ATTR_HOLD) {
-                    if(!j) fprintf(stream,"HOLD");
-                    fprintf(stream," %s",faddrtoa(cfg.nodecfg[i].faddr));
-                    j++; }
-            if(j) fprintf(stream,"\r\n");
-			for(i=j=0;i<cfg.nodecfgs;i++)
-                if(cfg.nodecfg[i].attr&ATTR_DIRECT) {
-                    if(!j) fprintf(stream,"DIRECT");
-                    fprintf(stream," %s",faddrtoa(cfg.nodecfg[i].faddr));
-                    j++; }
-            if(j) fprintf(stream,"\r\n");
-			for(i=j=0;i<cfg.nodecfgs;i++)
-				if(cfg.nodecfg[i].attr&ATTR_CRASH) {
-					if(!j) fprintf(stream,"CRASH");
-					fprintf(stream," %s",faddrtoa(cfg.nodecfg[i].faddr));
-					j++; }
-			if(j) fprintf(stream,"\r\n");
-			for(i=j=0;i<cfg.nodecfgs;i++)
-				if(cfg.nodecfg[i].attr&ATTR_PASSIVE) {
-					if(!j) fprintf(stream,"PASSIVE");
-					fprintf(stream," %s",faddrtoa(cfg.nodecfg[i].faddr));
-                    j++; }
-			if(j) fprintf(stream,"\r\n");
-
-			for(i=0;i<cfg.nodecfgs;i++)
-				if(cfg.nodecfg[i].pktpwd[0])
-					fprintf(stream,"PKTPWD %s %s\r\n"
-						,faddrtoa(cfg.nodecfg[i].faddr),cfg.nodecfg[i].pktpwd);
-
-			for(i=0;i<cfg.nodecfgs;i++)
-				if(cfg.nodecfg[i].pkt_type)
-					fprintf(stream,"PKTTYPE %s %s\r\n"
-						,cfg.nodecfg[i].pkt_type==PKT_TWO_TWO ? "2.2":"2"
-						,faddrtoa(cfg.nodecfg[i].faddr));
-
-			for(i=0;i<cfg.arcdefs;i++)
-				fprintf(stream,"PACKER %s %u %s\r\n  PACK %s\r\n"
-					"  UNPACK %s\r\nEND\r\n"
-					,cfg.arcdef[i].name
-					,cfg.arcdef[i].byteloc
-					,cfg.arcdef[i].hexid
-					,cfg.arcdef[i].pack
-					,cfg.arcdef[i].unpack
-					);
-			for(i=0;i<cfg.arcdefs;i++) {
-				for(j=k=0;j<cfg.nodecfgs;j++)
-					if(cfg.nodecfg[j].arctype==i) {
-						if(!k)
-							fprintf(stream,"%-10s %s","USEPACKER"
-								,cfg.arcdef[i].name);
-						k++;
-						fprintf(stream," %s",faddrtoa(cfg.nodecfg[j].faddr)); }
-				if(k)
-					fprintf(stream,"\r\n"); }
-
-			for(i=j=0;i<cfg.nodecfgs;i++)
-				if(cfg.nodecfg[i].arctype==0xffff) {
-					if(!j)
-						fprintf(stream,"%-10s %s","USEPACKER","NONE");
-					j++;
-					fprintf(stream," %s",faddrtoa(cfg.nodecfg[i].faddr)); }
-			if(j)
-				fprintf(stream,"\r\n");
-
-			for(i=0;i<cfg.listcfgs;i++) {
-				fprintf(stream,"%-10s","ECHOLIST");
-				if(cfg.listcfg[i].password[0])
-					fprintf(stream," FORWARD %s %s"
-						,faddrtoa(cfg.listcfg[i].forward)
-						,cfg.listcfg[i].password);
-				else if(cfg.listcfg[i].misc&NOFWD &&
-					cfg.listcfg[i].forward.zone)
-					fprintf(stream," HUB %s"
-						,faddrtoa(cfg.listcfg[i].forward));
-                fprintf(stream," %s",cfg.listcfg[i].listpath);
-                for(j=0;j<cfg.listcfg[i].numflags;j++)
-                    fprintf(stream," %s",cfg.listcfg[i].flag[j].flag);
-                fprintf(stream,"\r\n"); }
-
-			for(i=0;i<cfg.nodecfgs;i++)
-				if(cfg.nodecfg[i].password[0]) {
-					fprintf(stream,"%-10s %s %s","AREAFIX"
-						,faddrtoa(cfg.nodecfg[i].faddr)
-						,cfg.nodecfg[i].password);
-					for(j=0;j<cfg.nodecfg[i].numflags;j++)
-						fprintf(stream," %s",cfg.nodecfg[i].flag[j].flag);
-					fprintf(stream,"\r\n"); }
-
-			for(i=0;i<cfg.nodecfgs;i++)
-				if(cfg.nodecfg[i].route.zone) {
-					fprintf(stream,"%-10s %s","ROUTE_TO"
-						,faddrtoa(cfg.nodecfg[i].route));
-					fprintf(stream," %s"
-						,faddrtoa(cfg.nodecfg[i].faddr));
-					for(j=i+1;j<cfg.nodecfgs;j++)
-						if(!memcmp(&cfg.nodecfg[j].route,&cfg.nodecfg[i].route
-							,sizeof(faddr_t))) {
-							fprintf(stream," %s"
-								,faddrtoa(cfg.nodecfg[j].faddr));
-							cfg.nodecfg[j].route.zone=0; }
-					fprintf(stream,"\r\n"); }
-
-			fclose(stream);
-			bail(0);
-	}
-}
-}
-/****************************************************************************/
-/* Checks the disk drive for the existance of a file. Returns 1 if it 		*/
-/* exists, 0 if it doesn't.													*/
-/* Called from upload														*/
-/****************************************************************************/
-char fexist(char *filespec)
-{
-	struct ffblk f;
-
-if(findfirst(filespec,&f,0)==NULL)
-	return(1);
-return(0);
-}
diff --git a/src/sbbs2/echo/echocfg.mak b/src/sbbs2/echo/echocfg.mak
deleted file mode 100644
index 6af1ffce79..0000000000
--- a/src/sbbs2/echo/echocfg.mak
+++ /dev/null
@@ -1,34 +0,0 @@
-
-# Macros
-CC	= bcc
-LD	= tlink
-UIFC	= ..\..\uifc
-MSWAIT	= ..\..\mswait
-INCLUDE = \bc45\include;$(UIFC);..;..\smb
-LIB	= \bc45\lib
-MODEL	= l
-CFLAGS  = -d -C -m$(MODEL) -I$(INCLUDE) -w-pro
-LDFLAGS = /n /c
-OBJS	= $(MSWAIT)\dos\mswait$(MODEL).obj uifc.obj read_cfg.obj
-HEADERS = $(UIFC)\uifc.h sbbsecho.h
-
-# Implicit C Compile Rule
-.c.obj:
-    	@echo Compiling $*.c to $*.obj ...
-	$(CC) $(CFLAGS) -c $*.c
-
-# Main EXE Link Rule
-echocfg.exe: $(OBJS) echocfg.obj
-    	@echo Linking $< ...
-	$(LD) $(LDFLAGS) @&&!
-$(LIB)\c0$(MODEL) $(OBJS) echocfg.obj
-!, $*, $*, $(LIB)\c$(MODEL).lib $(LIB)\math$(MODEL).lib $(LIB)\emu.lib
-
-
-# All .obj modules
-echocfg.obj: $(HEADERS)
-
-uifc.obj: $(UIFC)\uifc.h $(UIFC)\uifc.c
-	@echo Compiling $(UIFC)\$*.c to $*.obj ...
-	$(CC) $(CFLAGS) -c $(UIFC)\$*.c
-
diff --git a/src/sbbs2/echo/makeall.bat b/src/sbbs2/echo/makeall.bat
deleted file mode 100755
index d6b6d6ff75..0000000000
--- a/src/sbbs2/echo/makeall.bat
+++ /dev/null
@@ -1,9 +0,0 @@
-@echo off
-make
-if errorlevel 1 goto end
-wmake -f sbbsecho.wat OS=OS2
-if errorlevel 1 goto end
-wmake -f sbbsecho.wat OS=DOS4G
-if errorlevel 1 goto end
-wmake -f sbbsecho.wat OS=NT
-:end
\ No newline at end of file
diff --git a/src/sbbs2/echo/makecfg.bat b/src/sbbs2/echo/makecfg.bat
deleted file mode 100755
index 5f6ed1e474..0000000000
--- a/src/sbbs2/echo/makecfg.bat
+++ /dev/null
@@ -1 +0,0 @@
-@make -fechocfg %1 %2 %3 %4
diff --git a/src/sbbs2/echo/makefile b/src/sbbs2/echo/makefile
deleted file mode 100644
index 82f3398b87..0000000000
--- a/src/sbbs2/echo/makefile
+++ /dev/null
@@ -1,94 +0,0 @@
-############################################
-# Makefile for Synchronet SBBSecho Utility #
-# For use with Borland C++ for DOS or OS/2 #
-############################################
-
-# Macros
-
-!ifdef __OS2__
-OS	= OS2
-CC	= c:\bcos2\bin\bcc
-LD	= c:\bcos2\bin\tlink
-INCLUDE = c:\bcos2\include;..;..\smb;..\rio
-LIB	= c:\bcos2\lib
-CFLAGS  = -d -C -I$(INCLUDE) -w-prot
-LFLAGS  = -c
-
-!elif $d(DOSX)
-OS	= DOSX
-CC	= \bc4\bin\bcc32
-LD    	= \bc4\bin\tlink32
-INCLUDE = \bc4\include;..;..\smb;..\rio
-LIB	= \bc4\lib
-CFLAGS	= -w-pro -d -C -WX -I$(INCLUDE) -w-prot
-LFLAGS  = -Tpe -ax -n -c -L$(LIB)
-
-!else
-OS	= DOS
-CC	= \bc45\bin\bcc
-LD	= \bc45\bin\tlink
-INCLUDE = \bc45\include;..\smb;..\rio;..
-LIB	= \bc45\lib
-MODEL	= l
-CFLAGS	= -d -C -m$(MODEL) -I$(INCLUDE) -DLZH_DYNAMIC_BUF -DSMB_GETMSGTXT -w-pro
-
-LFLAGS	= -c -L$(LIB)
-!endif
-MAIN	= $(OS)\sbbsecho.exe
-OBJS	= $(OS)\sbbsecho.obj $(OS)\scfgvars.obj $(OS)\scfglib1.obj \
-	  $(OS)\smblib.obj $(OS)\ars.obj $(OS)\lzh.obj \
-	  $(OS)\read_cfg.obj
-HEADERS = ..\sbbsdefs.h ..\scfgvars.c ..\smb\smbdefs.h ..\smb\smblib.h 
-
-# Implicit C Compile Rule
-{.}.c.obj:
-	@echo Compiling (I) $< to $@ ...
-        $(CC) $(CFLAGS) -n$(OS) -c $<
-
-# Main EXE Link Rule
-$(MAIN): $(OBJS) $(HEADERS)
-    	@echo Linking $< ...
-!ifdef __OS2__
-	$(LD) $(LFLAGS) @&&+
-c02.obj $(OBJS)
-+, $*, $*, os2.lib c2.lib
-!elif $d(DOSX)
-	$(LD) $(LFLAGS) @&&+
-c0X32.obj $(OBJS)
-+, $*, $*, DPMI32 CW32
-!else
-	$(LD) $(LFLAGS) @&&+
-c0$(MODEL) $(OBJS)
-+, $*, $*, ..\..\spawno\spawnl.lib mathl emu cl
-!endif
-
-# Global Variables
-$(OS)\scfgvars.obj: ..\scfgvars.c ..\sbbsdefs.h
-	@echo Compiling ..\$&.c to $< ...
-	$(CC) $(CFLAGS) -c -n$(OS) ..\$&.c
-
-# Shared Functions
-$(OS)\scfglib1.obj: ..\sbbsdefs.h ..\scfglib1.c ..\scfgvars.c
-        @echo Compiling ..\$&.c to $< ...
-        $(CC) $(CFLAGS) -c -n$(OS) @&&!
--DNO_FILE_CFG
--DNO_XTRN_CFG
--DNO_CMDS_CFG
--DNO_CHAT_CFG
-! ..\$&.c
-
-$(OS)\smblib.obj: ..\smb\smblib.c ..\smb\smblib.h ..\smb\smbdefs.h
-	@echo Compiling SMBLIB ...
-	$(CC) -DSMB_GETMSGTXT $(CFLAGS) -n$(OS) -c ..\smb\smblib.c
-
-$(OS)\lzh.obj: ..\smb\lzh.c ..\smb\lzh.h
-        @echo Compiling LZH ...
-	$(CC) $(CFLAGS) -n$(OS) -c ..\smb\lzh.c
-
-$(OS)\ars.obj: ..\ars.c ..\ars_defs.h 
-        @echo Compiling ..\$&.c to $< ...
-	$(CC) $(CFLAGS) -n$(OS) -c ..\ars.c
-
-$(OS)\sbbsecho.obj: sbbsecho.c sbbsecho.h
-	@echo Compiling $&.c to $< ...
-	$(CC) $(CFLAGS) -n$(OS) -c sbbsecho.c
diff --git a/src/sbbs2/echo/read_cfg.c b/src/sbbs2/echo/read_cfg.c
deleted file mode 100644
index 0db669b236..0000000000
--- a/src/sbbs2/echo/read_cfg.c
+++ /dev/null
@@ -1,681 +0,0 @@
-/* READ_CFG.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* Portions written by Allen Christiansen 1994-1996 						*/
-
-#include <dos.h>
-#include <mem.h>
-#include <time.h>
-#include <errno.h>
-#include <stdio.h>
-#include <conio.h>
-#include <ctype.h>
-#include <fcntl.h>
-#include <share.h>
-#include <malloc.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <string.h>
-#include <process.h>
-#include <sys\stat.h>
-
-#include "crc32.h"
-#include "sbbsdefs.h"
-#include "sbbsecho.h"
-
-#ifdef __WATCOMC__
-    #define O_DENYNONE SH_DENYNO
-#endif
-
-extern uchar node_swap;
-extern long misc;
-extern config_t cfg;
-
-/****************************************************************************/
-/* Network open function. Opens all files DENYALL and retries LOOP_NOPEN    */
-/* number of times if the attempted file is already open or denying access  */
-/* for some other reason.   All files are opened in BINARY mode.            */
-/****************************************************************************/
-int nopen(char *str, int access)
-{
-    char logstr[256];
-    int file,share,count=0;
-
-if(access&O_DENYNONE) {
-	access&=~O_DENYNONE;
-	share=SH_DENYNO; }
-else if(access==O_RDONLY) share=SH_DENYWR;
-else share=SH_DENYRW;
-while(((file=sopen(str,O_BINARY|access,share,S_IWRITE))==-1)
-    && errno==EACCES && count++<LOOP_NOPEN);
-if(file==-1 && errno==EACCES)
-    printf("\7\nNOPEN: ACCESS DENIED\n\7");
-return(file);
-}
-
-/****************************************************************************/
-/* This function performs an nopen, but returns a file stream with a buffer */
-/* allocated.                                                               */
-/****************************************************************************/
-FILE *fnopen(int *file, char *str, int access)
-{
-    char mode[128];
-    FILE *stream;
-
-if(access&O_WRONLY) {
-	access&=~O_WRONLY;
-	access|=O_RDWR; }	 /* fdopen can't open WRONLY */
-
-if(((*file)=nopen(str,access))==-1)
-    return(NULL);
-
-if(access&O_APPEND) {
-	if(access&(O_RDONLY|O_RDWR))
-        strcpy(mode,"a+");
-    else
-        strcpy(mode,"a"); }
-else {
-	if(access&(O_WRONLY|O_RDWR))
-        strcpy(mode,"r+");
-    else
-        strcpy(mode,"r"); }
-stream=fdopen((*file),mode);
-if(stream==NULL) {
-	printf("\7\nFDOPEN(%s) FAILED\n",mode);
-    close(*file);
-    return(NULL); }
-setvbuf(stream,NULL,_IOFBF,16*1024);
-return(stream);
-}
-/******************************************************************************
- Here we take a string and put a terminator in place of the first TAB or SPACE
-******************************************************************************/
-char *cleanstr(char *instr)
-{
-	int i;
-
-for(i=0;instr[i];i++)
-	if((uchar)instr[i]<=SP)
-		break;
-instr[i]=0;
-return(instr);
-}
-/****************************************************************************/
-/* Returns the FidoNet address kept in str as ASCII.                        */
-/****************************************************************************/
-faddr_t atofaddr(char *instr)
-{
-	char *p,str[51];
-    faddr_t addr;
-
-sprintf(str,"%.50s",instr);
-cleanstr(str);
-if(!stricmp(str,"ALL")) {
-	addr.zone=addr.net=addr.node=addr.point=0xffff;
-	return(addr); }
-addr.zone=addr.net=addr.node=addr.point=0;
-if((p=strchr(str,':'))!=NULL) {
-	if(!strnicmp(str,"ALL:",4))
-		addr.zone=0xffff;
-	else
-		addr.zone=atoi(str);
-	p++;
-	if(!strnicmp(p,"ALL",3))
-		addr.net=0xffff;
-	else
-		addr.net=atoi(p); }
-else {
-#ifdef SCFG
-    if(total_faddrs)
-        addr.zone=faddr[0].zone;
-    else
-#endif
-        addr.zone=1;
-    addr.net=atoi(str); }
-if(!addr.zone)              /* no such thing as zone 0 */
-    addr.zone=1;
-if((p=strchr(str,'/'))!=NULL) {
-	p++;
-	if(!strnicmp(p,"ALL",3))
-		addr.node=0xffff;
-	else
-		addr.node=atoi(p); }
-else {
-	if(!addr.net) {
-#ifdef SCFG
-		if(total_faddrs)
-			addr.net=faddr[0].net;
-		else
-#endif
-			addr.net=1; }
-	addr.node=atoi(str); }
-if((p=strchr(str,'.'))!=NULL) {
-	p++;
-	if(!strnicmp(p,"ALL",3))
-		addr.point=0xffff;
-	else
-		addr.point=atoi(p); }
-return(addr);
-}
-
-/****************************************************************************/
-/* Returns an ASCII string for FidoNet address 'addr'                       */
-/****************************************************************************/
-char *faddrtoa(faddr_t addr)
-{
-    static char str[25];
-	char tmp[25];
-
-if(addr.zone==0xffff)
-	strcpy(str,"ALL");
-else {
-	sprintf(str,"%u:",addr.zone);
-	if(addr.net==0xffff)
-		strcat(str,"ALL");
-	else {
-		sprintf(tmp,"%u/",addr.net);
-		strcat(str,tmp);
-		if(addr.node==0xffff)
-			strcat(str,"ALL");
-		else {
-			sprintf(tmp,"%u",addr.node);
-			strcat(str,tmp);
-			if(addr.point==0xffff)
-				strcat(str,".ALL");
-			else if(addr.point) {
-				sprintf(tmp,".%u",addr.point);
-				strcat(str,tmp); } } } }
-return(str);
-}
-/******************************************************************************
- This function returns the number of the node in the SBBSECHO.CFG file which
- matches the address passed to it (or cfg.nodecfgs if no match).
- ******************************************************************************/
-int matchnode(faddr_t addr, int exact)
-{
-	int i;
-
-if(exact!=2) {
-	for(i=0;i<cfg.nodecfgs;i++) 				/* Look for exact match */
-		if(!memcmp(&cfg.nodecfg[i].faddr,&addr,sizeof(faddr_t)))
-			break;
-	if(exact || i<cfg.nodecfgs)
-		return(i); }
-
-for(i=0;i<cfg.nodecfgs;i++) 					/* Look for point match */
-	if(cfg.nodecfg[i].faddr.point==0xffff
-		&& addr.zone==cfg.nodecfg[i].faddr.zone
-		&& addr.net==cfg.nodecfg[i].faddr.net
-		&& addr.node==cfg.nodecfg[i].faddr.node)
-		break;
-if(i<cfg.nodecfgs)
-    return(i);
-
-for(i=0;i<cfg.nodecfgs;i++) 					/* Look for node match */
-	if(cfg.nodecfg[i].faddr.node==0xffff
-		&& addr.zone==cfg.nodecfg[i].faddr.zone
-		&& addr.net==cfg.nodecfg[i].faddr.net)
-		break;
-if(i<cfg.nodecfgs)
-    return(i);
-
-for(i=0;i<cfg.nodecfgs;i++) 					/* Look for net match */
-	if(cfg.nodecfg[i].faddr.net==0xffff
-		&& addr.zone==cfg.nodecfg[i].faddr.zone)
-		break;
-if(i<cfg.nodecfgs)
-	return(i);
-
-for(i=0;i<cfg.nodecfgs;i++) 					/* Look for total wild */
-	if(cfg.nodecfg[i].faddr.zone==0xffff)
-        break;
-return(i);
-}
-/****************************************************************************/
-/* Returns 32-crc of string (not counting terminating NULL) 				*/
-/****************************************************************************/
-ulong crc32(char *str)
-{
-	int i=0;
-	ulong crc=0xffffffffUL;
-
-	while(str[i])
-		crc=ucrc32(str[i++],crc);
-	crc=~crc;
-	return(crc);
-}
-
-void read_cfg()
-{
-	uchar str[1025],tmp[512],*p,*tp;
-	short attr;
-	int i,j,file;
-	FILE *stream;
-	faddr_t addr,route_addr;
-
-
-/****** READ IN SBBSECHO.CFG FILE *******/
-
-printf("\n\nReading %s\n",cfg.cfgfile);
-if((stream=fnopen(&file,cfg.cfgfile,O_RDONLY))==NULL) {
-    printf("Unable to open %s for read.\n",cfg.cfgfile);
-    exit(1); }
-
-cfg.maxpktsize=DFLT_PKT_SIZE;
-cfg.maxbdlsize=DFLT_BDL_SIZE;
-cfg.badecho=-1;
-cfg.log=LOG_DEFAULTS;
-
-while(1) {
-    if(!fgets(str,256,stream))
-        break;
-    truncsp(str);
-    p=str;
-    while(*p && *p<=SP) p++;
-    if(*p==';')
-        continue;
-    sprintf(tmp,"%-.25s",p);
-    tp=strchr(tmp,SP);
-    if(tp)
-        *tp=0;                              /* Chop off at space */
-    strupr(tmp);                            /* Convert code to uppercase */
-    while(*p>SP) p++;                       /* Skip code */
-    while(*p && *p<=SP) p++;                /* Skip white space */
-
-    if(!strcmp(tmp,"PACKER")) {             /* Archive Definition */
-		if((cfg.arcdef=(arcdef_t *)REALLOC(cfg.arcdef
-            ,sizeof(arcdef_t)*(cfg.arcdefs+1)))==NULL) {
-			printf("\nError allocating %u bytes of memory for arcdef #%u.\n"
-                ,sizeof(arcdef_t)*(cfg.arcdefs+1),cfg.arcdefs+1);
-            exit(1); }
-        sprintf(cfg.arcdef[cfg.arcdefs].name,"%-.25s",p);
-        tp=cfg.arcdef[cfg.arcdefs].name;
-        while(*tp && *tp>SP) tp++;
-        *tp=0;
-        while(*p && *p>SP) p++;
-        while(*p && *p<=SP) p++;
-        cfg.arcdef[cfg.arcdefs].byteloc=atoi(p);
-        while(*p && *p>SP) p++;
-        while(*p && *p<=SP) p++;
-        sprintf(cfg.arcdef[cfg.arcdefs].hexid,"%-.25s",p);
-        tp=cfg.arcdef[cfg.arcdefs].hexid;
-        while(*tp && *tp>SP) tp++;
-        *tp=0;
-        while(fgets(str,256,stream) && strnicmp(str,"END",3)) {
-            p=str;
-            while(*p && *p<=SP) p++;
-            if(!strnicmp(p,"PACK ",5)) {
-                p+=5;
-                while(*p && *p<=SP) p++;
-                sprintf(cfg.arcdef[cfg.arcdefs].pack,"%-.80s",p);
-                truncsp(cfg.arcdef[cfg.arcdefs].pack);
-                continue; }
-            if(!strnicmp(p,"UNPACK ",7)) {
-                p+=7;
-                while(*p && *p<=SP) p++;
-                sprintf(cfg.arcdef[cfg.arcdefs].unpack,"%-.80s",p);
-                truncsp(cfg.arcdef[cfg.arcdefs].unpack); } }
-        ++cfg.arcdefs;
-        continue; }
-
-	if(!strcmp(tmp,"REGNUM"))
-		continue;
-
-	if(!strcmp(tmp,"NOTIFY")) {
-		cfg.notify=atoi(cleanstr(p));
-		continue; }
-
-	if(!strcmp(tmp,"LOG")) {
-		cleanstr(p);
-		if(!stricmp(p,"ALL"))
-			cfg.log=0xffffffffUL;
-		else if(!stricmp(p,"DEFAULT"))
-			cfg.log=LOG_DEFAULTS;
-		else if(!stricmp(p,"NONE"))
-			cfg.log=0L;
-		else
-			cfg.log=strtol(cleanstr(p),0,16);
-		continue; }
-
-    if(!strcmp(tmp,"NOSWAP")) {
-        node_swap=0;
-        continue; }
-
-	if(!strcmp(tmp,"SECURE_ECHOMAIL")) {
-		misc|=SECURE;
-		continue; }
-
-    if(!strcmp(tmp,"CHECKMEM")) {
-        misc|=CHECKMEM;
-        continue; }
-
-    if(!strcmp(tmp,"STORE_SEENBY")) {
-        misc|=STORE_SEENBY;
-        continue; }
-
-    if(!strcmp(tmp,"STORE_PATH")) {
-        misc|=STORE_PATH;
-        continue; }
-
-    if(!strcmp(tmp,"STORE_KLUDGE")) {
-        misc|=STORE_KLUDGE;
-        continue; }
-
-    if(!strcmp(tmp,"FUZZY_ZONE")) {
-        misc|=FUZZY_ZONE;
-        continue; }
-
-	if(!strcmp(tmp,"FAST_OPEN")) {
-		continue; }
-
-    if(!strcmp(tmp,"FLO_MAILER")) {
-        misc|=FLO_MAILER;
-        continue; }
-
-	if(!strcmp(tmp,"ELIST_ONLY")) {
-		misc|=ELIST_ONLY;
-		continue; }
-
-	if(!strcmp(tmp,"KILL_EMPTY")) {
-		misc|=KILL_EMPTY_MAIL;
-		continue; }
-
-    if(!strcmp(tmp,"AREAFILE")) {
-        sprintf(cfg.areafile,"%-.80s",cleanstr(p));
-        continue; }
-
-    if(!strcmp(tmp,"LOGFILE")) {
-        sprintf(cfg.logfile,"%-.80s",cleanstr(p));
-        continue; }
-
-    if(!strcmp(tmp,"INBOUND")) {            /* Inbound directory */
-        sprintf(cfg.inbound,"%-.80s",cleanstr(p));
-        if(cfg.inbound[strlen(cfg.inbound)-1]!='\\')
-            strcat(cfg.inbound,"\\");
-        continue; }
-
-    if(!strcmp(tmp,"SECURE_INBOUND")) {     /* Secure Inbound directory */
-        sprintf(cfg.secure,"%-.80s",cleanstr(p));
-        if(cfg.secure[strlen(cfg.secure)-1]!='\\')
-            strcat(cfg.secure,"\\");
-        continue; }
-
-    if(!strcmp(tmp,"OUTBOUND")) {           /* Outbound directory */
-        sprintf(cfg.outbound,"%-.80s",cleanstr(p));
-        if(cfg.outbound[strlen(cfg.outbound)-1]!='\\')
-            strcat(cfg.outbound,"\\");
-        continue; }
-
-    if(!strcmp(tmp,"ARCSIZE")) {            /* Maximum bundle size */
-        cfg.maxbdlsize=atol(p);
-        continue; }
-
-    if(!strcmp(tmp,"PKTSIZE")) {            /* Maximum packet size */
-        cfg.maxpktsize=atol(p);
-        continue; }
-
-    if(!strcmp(tmp,"USEPACKER")) {          /* Which packer to use */
-		if(!*p)
-			continue;
-		strcpy(str,p);
-		p=str;
-		while(*p && *p>SP) p++;
-		if(!*p)
-			continue;
-		*p=0;
-		p++;
-		for(i=0;i<cfg.arcdefs;i++)
-			if(!strnicmp(cfg.arcdef[i].name,str
-				,strlen(cfg.arcdef[i].name)))
-				break;
-		if(i==cfg.arcdefs)				/* i = number of arcdef til done */
-			i=0xffff;					/* Uncompressed type if not found */
-		while(*p) {
-			while(*p && *p<=SP) p++;
-			if(!*p)
-				break;
-			addr=atofaddr(p);
-			while(*p && *p>SP) p++;
-			j=matchnode(addr,1);
-			if(j==cfg.nodecfgs) {
-				cfg.nodecfgs++;
-				if((cfg.nodecfg=(nodecfg_t *)REALLOC(cfg.nodecfg
-					,sizeof(nodecfg_t)*(j+1)))==NULL) {
-					printf("\nError allocating memory for nodecfg #%u.\n"
-						,j+1);
-					exit(1); }
-				memset(&cfg.nodecfg[j],0,sizeof(nodecfg_t));
-				cfg.nodecfg[j].faddr=addr; }
-			cfg.nodecfg[j].arctype=i; } }
-
-    if(!strcmp(tmp,"PKTPWD")) {         /* Packet Password */
-        if(!*p)
-            continue;
-        addr=atofaddr(p);
-        while(*p && *p>SP) p++;         /* Skip address */
-        while(*p && *p<=SP) p++;        /* Find beginning of password */
-		j=matchnode(addr,1);
-        if(j==cfg.nodecfgs) {
-            cfg.nodecfgs++;
-            if((cfg.nodecfg=(nodecfg_t *)REALLOC(cfg.nodecfg
-                ,sizeof(nodecfg_t)*(j+1)))==NULL) {
-				printf("\nError allocating memory for nodecfg #%u.\n"
-                    ,j+1);
-                exit(1); }
-            memset(&cfg.nodecfg[j],0,sizeof(nodecfg_t));
-            cfg.nodecfg[j].faddr=addr; }
-        sprintf(cfg.nodecfg[j].pktpwd,"%.8s",p); }
-
-	if(!strcmp(tmp,"PKTTYPE")) {            /* Packet Type to Use */
-		if(!*p)
-			continue;
-		strcpy(str,p);
-		p=str;
-		while(*p && *p>SP) p++;
-		*p=0;
-		p++;
-		while(*p) {
-			while(*p && *p<=SP) p++;
-			if(!*p)
-				break;
-			addr=atofaddr(p);
-			while(*p && *p>SP) p++;
-			j=matchnode(addr,1);
-			if(j==cfg.nodecfgs) {
-				cfg.nodecfgs++;
-				if((cfg.nodecfg=(nodecfg_t *)REALLOC(cfg.nodecfg
-					,sizeof(nodecfg_t)*(j+1)))==NULL) {
-					printf("\nError allocating memory for nodecfg #%u.\n"
-						,j+1);
-					exit(1); }
-				memset(&cfg.nodecfg[j],0,sizeof(nodecfg_t));
-				cfg.nodecfg[j].faddr=addr; }
-			if(!strcmp(str,"2+"))
-				cfg.nodecfg[j].pkt_type=PKT_TWO_PLUS;
-			else if(!strcmp(str,"2.2"))
-				cfg.nodecfg[j].pkt_type=PKT_TWO_TWO;
-			else if(!strcmp(str,"2"))
-				cfg.nodecfg[j].pkt_type=PKT_TWO; } }
-
-	if(!strcmp(tmp,"SEND_NOTIFY")) {    /* Nodes to send notify lists to */
-		while(*p) {
-            while(*p && *p<=SP) p++;
-            if(!*p)
-                break;
-            addr=atofaddr(p);
-            while(*p && *p>SP) p++;
-			j=matchnode(addr,1);
-            if(j==cfg.nodecfgs) {
-                cfg.nodecfgs++;
-                if((cfg.nodecfg=(nodecfg_t *)REALLOC(cfg.nodecfg
-                    ,sizeof(nodecfg_t)*(j+1)))==NULL) {
-					printf("\nError allocating memory for nodecfg #%u.\n"
-                        ,j+1);
-                    exit(1); }
-                memset(&cfg.nodecfg[j],0,sizeof(nodecfg_t));
-                cfg.nodecfg[j].faddr=addr; }
-			cfg.nodecfg[j].attr|=SEND_NOTIFY; } }
-
-    if(!strcmp(tmp,"PASSIVE")
-        || !strcmp(tmp,"HOLD")
-        || !strcmp(tmp,"CRASH")
-        || !strcmp(tmp,"DIRECT")) {         /* Set node attributes */
-        if(!strcmp(tmp,"PASSIVE"))
-            attr=ATTR_PASSIVE;
-        else if(!strcmp(tmp,"CRASH"))
-            attr=ATTR_CRASH;
-        else if(!strcmp(tmp,"HOLD"))
-            attr=ATTR_HOLD;
-        else if(!strcmp(tmp,"DIRECT"))
-            attr=ATTR_DIRECT;
-        while(*p) {
-            while(*p && *p<=SP) p++;
-            if(!*p)
-                break;
-            addr=atofaddr(p);
-            while(*p && *p>SP) p++;
-			j=matchnode(addr,1);
-            if(j==cfg.nodecfgs) {
-                cfg.nodecfgs++;
-                if((cfg.nodecfg=(nodecfg_t *)REALLOC(cfg.nodecfg
-                    ,sizeof(nodecfg_t)*(j+1)))==NULL) {
-					printf("\nError allocating memory for nodecfg #%u.\n"
-                        ,j+1);
-                    exit(1); }
-                memset(&cfg.nodecfg[j],0,sizeof(nodecfg_t));
-                cfg.nodecfg[j].faddr=addr; }
-            cfg.nodecfg[j].attr|=attr; } }
-
-	if(!strcmp(tmp,"ROUTE_TO")) {
-		while(*p && *p<=SP) p++;
-		if(*p) {
-			route_addr=atofaddr(p);
-			while(*p && *p>SP) p++; }
-        while(*p) {
-            while(*p && *p<=SP) p++;
-            if(!*p)
-                break;
-            addr=atofaddr(p);
-            while(*p && *p>SP) p++;
-			j=matchnode(addr,1);
-            if(j==cfg.nodecfgs) {
-                cfg.nodecfgs++;
-                if((cfg.nodecfg=(nodecfg_t *)REALLOC(cfg.nodecfg
-                    ,sizeof(nodecfg_t)*(j+1)))==NULL) {
-					printf("\nError allocating memory for nodecfg #%u.\n"
-                        ,j+1);
-                    exit(1); }
-                memset(&cfg.nodecfg[j],0,sizeof(nodecfg_t));
-                cfg.nodecfg[j].faddr=addr; }
-			cfg.nodecfg[j].route=route_addr; } }
-
-    if(!strcmp(tmp,"AREAFIX")) {            /* Areafix stuff here */
-		if(!*p)
-			continue;
-		addr=atofaddr(p);
-		i=matchnode(addr,1);
-		if(i==cfg.nodecfgs) {
-			cfg.nodecfgs++;
-			if((cfg.nodecfg=(nodecfg_t *)REALLOC(cfg.nodecfg
-				,sizeof(nodecfg_t)*(i+1)))==NULL) {
-				printf("\nError allocating memory for nodecfg #%u.\n"
-					,i+1);
-				exit(1); }
-			memset(&cfg.nodecfg[i],0,sizeof(nodecfg_t));
-			cfg.nodecfg[i].faddr=addr; }
-		cfg.nodecfg[i].flag=NULL;
-		while(*p && *p>SP) p++; 		/* Get to the end of the address */
-		while(*p && *p<=SP) p++;		/* Skip over whitespace chars */
-		tp=p;
-		while(*p && *p>SP) p++; 		/* Find end of password 	*/
-		*p=0;							/* and terminate the string */
-		++p;
-		sprintf(cfg.nodecfg[i].password,"%-.25s",tp);
-		while(*p && *p<=SP) p++;		/* Search for more chars */
-		if(!*p) 						/* Nothing else there */
-			continue;
-		while(*p) {
-			tp=p;
-			while(*p && *p>SP) p++; 	/* Find end of this flag */
-			*p=0;						/* and terminate it 	 */
-			++p;
-			for(j=0;j<cfg.nodecfg[i].numflags;j++)
-				if(!strnicmp(cfg.nodecfg[i].flag[j].flag,tp
-					,strlen(cfg.nodecfg[i].flag[j].flag)))
-					break;
-			if(j==cfg.nodecfg[i].numflags) {
-				if((cfg.nodecfg[i].flag=
-					(flag_t *)REALLOC(cfg.nodecfg[i].flag
-					,sizeof(flag_t)*(j+1)))==NULL) {
-					printf("\nError allocating memory for nodecfg #%u "
-						"flag #%u.\n",cfg.nodecfgs,j+1);
-					exit(1); }
-				cfg.nodecfg[i].numflags++;
-				sprintf(cfg.nodecfg[i].flag[j].flag,"%.4s",tp); }
-			while(*p && *p<=SP) p++; } }
-
-    if(!strcmp(tmp,"ECHOLIST")) {           /* Echolists go here */
-		if((cfg.listcfg=(echolist_t *)REALLOC(cfg.listcfg
-			,sizeof(echolist_t)*(cfg.listcfgs+1)))==NULL) {
-			printf("\nError allocating memory for echolist cfg #%u.\n"
-				,cfg.listcfgs+1);
-			exit(1); }
-		memset(&cfg.listcfg[cfg.listcfgs],0,sizeof(echolist_t));
-		++cfg.listcfgs;
-		/* Need to forward requests? */
-		if(!strnicmp(p,"FORWARD ",8) || !strnicmp(p,"HUB ",4)) {
-			if(!strnicmp(p,"HUB ",4))
-				cfg.listcfg[cfg.listcfgs-1].misc|=NOFWD;
-            while(*p && *p>SP) p++;
-            while(*p && *p<=SP) p++;
-            if(*p)
-				cfg.listcfg[cfg.listcfgs-1].forward=atofaddr(p);
-            while(*p && *p>SP) p++;
-			while(*p && *p<=SP) p++;
-			if(*p && !(cfg.listcfg[cfg.listcfgs-1].misc&NOFWD)) {
-				tp=p;
-				while(*p && *p>SP) p++;
-				*p=0;
-				++p;
-				while(*p && *p<=SP) p++;
-				sprintf(cfg.listcfg[cfg.listcfgs-1].password,"%.71s",tp); } }
-		else
-			cfg.listcfg[cfg.listcfgs-1].misc|=NOFWD;
-		if(!*p)
-			continue;
-		tp=p;
-		while(*p && *p>SP) p++;
-		*p=0;
-		p++;
-
-		sprintf(cfg.listcfg[cfg.listcfgs-1].listpath,"%-.128s",tp);
-		cfg.listcfg[cfg.listcfgs-1].numflags=0;
-		cfg.listcfg[cfg.listcfgs-1].flag=NULL;
-		while(*p && *p<=SP) p++;		/* Skip over whitespace chars */
-		while(*p) {
-			tp=p;
-			while(*p && *p>SP) p++; 	/* Find end of this flag */
-			*p=0;						/* and terminate it 	 */
-			++p;
-			for(j=0;j<cfg.listcfg[cfg.listcfgs-1].numflags;j++)
-				if(!strnicmp(cfg.listcfg[cfg.listcfgs-1].flag[j].flag,tp
-					,strlen(cfg.listcfg[cfg.listcfgs-1].flag[j].flag)))
-					break;
-			if(j==cfg.listcfg[cfg.listcfgs-1].numflags) {
-				if((cfg.listcfg[cfg.listcfgs-1].flag=
-					(flag_t *)REALLOC(cfg.listcfg[cfg.listcfgs-1].flag
-					,sizeof(flag_t)*(j+1)))==NULL) {
-					printf("\nError allocating memory for listcfg #%u "
-						"flag #%u.\n",cfg.listcfgs,j+1);
-					exit(1); }
-				cfg.listcfg[cfg.listcfgs-1].numflags++;
-				sprintf(cfg.listcfg[cfg.listcfgs-1].flag[j].flag,"%.4s",tp); }
-			while(*p && *p<=SP) p++; } }
-
-//    printf("Unrecognized line in SBBSECHO.CFG file.\n");
-}
-fclose(stream);
-printf("\n");
-}
-
diff --git a/src/sbbs2/echo/sbbsecho.c b/src/sbbs2/echo/sbbsecho.c
deleted file mode 100644
index dad5ece110..0000000000
--- a/src/sbbs2/echo/sbbsecho.c
+++ /dev/null
@@ -1,5060 +0,0 @@
-/* SBBSECHO.C */
-
-/* Developed 1990-2000 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885	*/
-
-/* Portions written by Allen Christiansen 1994-1996 						*/
-
-/* Synchronet FidoNet EchoMail Scanning/Tossing and NetMail Tossing Utility */
-
-#include <dos.h>
-#include <mem.h>
-#include <time.h>
-#include <errno.h>
-#include <stdio.h>
-#include <conio.h>
-#include <ctype.h>
-#include <fcntl.h>
-#include <share.h>
-#include <malloc.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <string.h>
-#include <process.h>
-#include <sys\stat.h>
-
-#include "sbbsdefs.h"
-#include "smblib.h"
-#include "scfglib.h"
-#define GLOBAL extern	/* turn vars.c and scfgvars.c files into headers */
-#include "scfgvars.c"
-#include "post.h"
-#include "lzh.h"
-#include "sbbsecho.h"
-
-extern long crc32tbl[];
-ulong crc32(char *str);
-
-#ifndef __FLAT__
-	#include "..\..\spawno\spawno.h"
-#endif
-
-#ifdef __TURBOC__
-    unsigned _stklen=20000;
-#endif
-
-#ifdef __WATCOMC__
-    #define O_DENYNONE SH_DENYNO
-#endif
-
-char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
-char *mon[]={"Jan","Feb","Mar","Apr","May","Jun"
-            ,"Jul","Aug","Sep","Oct","Nov","Dec"};
-
-smb_t *smb,*email;
-long misc=(IMPORT_PACKETS|IMPORT_NETMAIL|IMPORT_ECHOMAIL|EXPORT_ECHOMAIL
-			|DELETE_NETMAIL|DELETE_PACKETS);
-ulong netmail=0;
-char tmp[256],pkt_type=0;
-faddr_t sys_faddr;
-config_t cfg;
-int nodefile,secure,cur_smb=0;
-FILE *fidologfile=NULL;
-two_two_t two_two;
-two_plus_t two_plus;
-
-#ifdef __WATCOMC__
-/******************************************************************************
- A DOS to Unix function - because WATCOM doesn't have one
-******************************************************************************/
-time_t dostounix(struct date *d,struct time *t)
-{
-	struct tm tm;
-
-tm.tm_sec=t->ti_sec;
-tm.tm_min=t->ti_min;
-tm.tm_hour=t->ti_hour;
-tm.tm_mday=d->da_day;
-tm.tm_mon=(d->da_mon-1);
-tm.tm_year=d->da_year-1900;
-tm.tm_isdst=0;
-
-return(mktime(&tm));
-}
-#endif
-
-#ifndef __NT__
-#define delfile(x) remove(x)
-#else
-int delfile(char *filename)
-{
-	int i=0;
-
-while(remove(filename) && i++<120)	/* Wait up to 60 seconds to delete file */
-	delay(500); 					/* for Win95 bug fix */
-return(i);
-}
-#endif
-
-/******************************************************************************
- This turns the DOS file date garbage into a long
-******************************************************************************/
-long ddtol(ushort ftim, ushort fdat)
-{
-    struct date date;
-    struct time time;
-
-    date.da_year=((fdat&0xfe00)>>9)+1980;
-    date.da_mon=((fdat&0x01e0)>>5);
-    date.da_day=(fdat&0x001f);
-    time.ti_hour=((ftim&0xf800)>>11);
-    time.ti_min=((ftim&0x07e0)>>5);
-    time.ti_sec=((ftim&0x001f)<<1);
-    time.ti_hund=0;
-    return(dostounix(&date,&time));
-}
-void checkmem(void)
-{
-#ifdef __WATCOMC__
-	char *p=NULL;
-	long size=640L*1024L,over;
-
-	while(size>0) {
-		p=(char *)LMALLOC(size);
-		if(p)
-			break;
-		size-=1024L; }
-
-	printf("\nAvailable Memory = %ld bytes",size);
-	if(p)
-		LFREE(p);
-#elif !defined(__OS2__)
-	printf("\nAvailable Memory = %ld bytes",farcoreleft());
-#endif
-}
-
-/**********************/
-/* Log print function */
-/**********************/
-void logprintf(char *str, ...)
-{
-    va_list argptr;
-    char buf[256];
-    time_t now;
-    struct tm *gm;
-
-if(!(misc&LOGFILE) || fidologfile==NULL)
-    return;
-va_start(argptr,str);
-vsprintf(buf,str,argptr);
-va_end(argptr);
-now=time(NULL);
-gm=localtime(&now);
-fseek(fidologfile,0L,SEEK_END);
-fprintf(fidologfile,"%02u/%02u/%02u %02u:%02u:%02u %s\r\n"
-    ,gm->tm_mon+1,gm->tm_mday,TM_YEAR(gm->tm_year),gm->tm_hour,gm->tm_min,gm->tm_sec
-    ,buf);
-fflush(fidologfile);
-}
-
-/****************************************************************************/
-/* Puts a backslash on path strings                                         */
-/****************************************************************************/
-void backslash(char *str)
-{
-    int i;
-
-i=strlen(str);
-if(i && str[i-1]!='\\') {
-    str[i]='\\'; str[i+1]=0; }
-}
-
-/*****************************************************************************/
-/* Returns command line generated from instr with %c replacments             */
-/*****************************************************************************/
-char *cmdstr(char *instr, char *fpath, char *fspec)
-{
-    static char cmd[128];
-    char str[256],str2[128];
-    int i,j,len;
-
-len=strlen(instr);
-for(i=j=0;i<len && j<128;i++) {
-    if(instr[i]=='%') {
-        i++;
-        cmd[j]=0;
-        switch(toupper(instr[i])) {
-            case 'F':   /* File path */
-                strcat(cmd,fpath);
-                break;
-            case 'G':   /* Temp directory */
-                if(temp_dir[0]!='\\' && temp_dir[1]!=':') {
-                    strcpy(str,node_dir);
-                    strcat(str,temp_dir);
-                    if(_fullpath(str2,str,40))
-                        strcpy(str,str2);
-                    backslash(str);
-                    strcat(cmd,str);}
-                else
-                    strcat(cmd,temp_dir);
-                break;
-            case 'J':
-                if(data_dir[0]!='\\' && data_dir[1]!=':') {
-                    strcpy(str,node_dir);
-                    strcat(str,data_dir);
-                    if(_fullpath(str2,str,40))
-                        strcpy(str,str2);
-                    backslash(str);
-                    strcat(cmd,str); }
-                else
-                    strcat(cmd,data_dir);
-                break;
-            case 'K':
-                if(ctrl_dir[0]!='\\' && ctrl_dir[1]!=':') {
-                    strcpy(str,node_dir);
-                    strcat(str,ctrl_dir);
-                    if(_fullpath(str2,str,40))
-                        strcpy(str,str2);
-                    backslash(str);
-                    strcat(cmd,str); }
-                else
-                    strcat(cmd,ctrl_dir);
-                break;
-            case 'N':   /* Node Directory (same as SBBSNODE environment var) */
-                strcat(cmd,node_dir);
-                break;
-            case 'O':   /* SysOp */
-                strcat(cmd,sys_op);
-                break;
-            case 'Q':   /* QWK ID */
-                strcat(cmd,sys_id);
-                break;
-            case 'S':   /* File Spec */
-                strcat(cmd,fspec);
-                break;
-            case '!':   /* EXEC Directory */
-                if(exec_dir[0]!='\\' && exec_dir[1]!=':') {
-                    strcpy(str,node_dir);
-                    strcat(str,exec_dir);
-                    if(_fullpath(str2,str,40))
-                        strcpy(str,str2);
-                    backslash(str);
-                    strcat(cmd,str); }
-                else
-                    strcat(cmd,exec_dir);
-                break;
-            case '#':   /* Node number (same as SBBSNNUM environment var) */
-                sprintf(str,"%d",node_num);
-                strcat(cmd,str);
-                break;
-            case '*':
-                sprintf(str,"%03d",node_num);
-                strcat(cmd,str);
-                break;
-            case '%':   /* %% for percent sign */
-                strcat(cmd,"%");
-                break;
-            default:    /* unknown specification */
-				printf("ERROR Checking Command Line '%s'\n",instr);
-				logprintf("ERROR line %d Checking Command Line '%s'",__LINE__
-					,instr);
-				exit(1);
-                break; }
-        j=strlen(cmd); }
-    else
-        cmd[j++]=instr[i]; }
-cmd[j]=0;
-
-return(cmd);
-}
-
-/****************************************************************************/
-/* Runs an external program directly using spawnvp							*/
-/****************************************************************************/
-int execute(char *cmdline)
-{
-	char c,d,e,cmdlen,*arg[30],str[256];
-	int i;
-
-strcpy(str,cmdline);
-arg[0]=str;	/* point to the beginning of the string */
-cmdlen=strlen(str);
-for(c=0,d=1,e=0;c<cmdlen;c++,e++)	/* Break up command line */
-	if(str[c]==SP) {
-		str[c]=0;			/* insert nulls */
-		arg[d++]=str+c+1;	/* point to the beginning of the next arg */
-		e=0; }
-arg[d]=0;
-#ifndef __FLAT__
-if(node_swap) {
-	printf("Swapping...\n");
-	i=spawnvpo(".\\",(const char *)arg[0],(const char **)arg); }
-else
-#endif
-	i=spawnvp(P_WAIT,arg[0],arg);
-return(i);
-}
-/******************************************************************************
- Returns the system address with the same zone as the address passed
-******************************************************************************/
-faddr_t getsysfaddr(short zone)
-{
-	int i;
-	faddr_t sysfaddr;
-
-sysfaddr.zone=sysfaddr.net=sysfaddr.node=1;
-sysfaddr.point=0;
-if(!total_faddrs)
-	return(sys_faddr);
-sysfaddr=faddr[0];
-if(total_faddrs==1)
-	return(sysfaddr);
-for(i=0;i<total_faddrs;i++)
-	if(faddr[i].zone==zone)
-		return(faddr[i]);
-return(sysfaddr);
-}
-/******************************************************************************
- This function creates or appends on existing Binkley compatible .?LO file
- attach file.
- Returns 0 on success.
-******************************************************************************/
-int write_flofile(char *attachment, faddr_t dest)
-{
-	char fname[256],outbound[128],str[128],ch;
-	ushort attr=0;
-	int i,file;
-	FILE *stream;
-
-i=matchnode(dest,0);
-if(i<cfg.nodecfgs)
-    attr=cfg.nodecfg[i].attr;
-
-if(attr&ATTR_CRASH) ch='C';
-else if(attr&ATTR_HOLD) ch='H';
-else if(attr&ATTR_DIRECT) ch='D';
-else ch='F';
-if(dest.zone==faddr[0].zone)		/* Default zone, use default outbound */
-	strcpy(outbound,cfg.outbound);
-else								/* Inter-zone outbound is OUTBOUND.XXX */
-	sprintf(outbound,"%.*s.%03X\\"
-		,strlen(cfg.outbound)-1,cfg.outbound,dest.zone);
-if(dest.point) {					/* Point destination is OUTBOUND\*.PNT */
-	sprintf(str,"%04X%04X.PNT"
-		,dest.net,dest.node);
-	strcat(outbound,str); }
-if(outbound[strlen(outbound)-1]=='\\')
-	outbound[strlen(outbound)-1]=0;
-mkdir(outbound);
-strcat(outbound,"\\");
-if(dest.point)
-	sprintf(fname,"%s%08X.%cLO",outbound,dest.point,ch);
-else
-	sprintf(fname,"%s%04X%04X.%cLO",outbound,dest.net,dest.node,ch);
-if((stream=fnopen(&file,fname,O_WRONLY|O_CREAT))==NULL) {
-	printf("\7ERROR opening %s %s\n",fname,sys_errlist[errno]);
-	logprintf("ERROR line %d opening %s %s",__LINE__,fname,sys_errlist[errno]);
-	return(-1); }
-
-fseek(stream,0L,SEEK_END);
-fprintf(stream,"^%s\r\n",attachment);
-fclose(stream);
-return(0);
-}
-
-/******************************************************************************
- This function will create a netmail message (.MSG format).
- If file is non-zero, will set file attachment bit (for bundles).
- Returns 0 on success.
-******************************************************************************/
-int create_netmail(char *to,char *subject,char *body,faddr_t dest,int file)
-{
-	FILE *fstream;
-	char str[256],fname[256];
-	ushort attr=0;
-	int fmsg;
-	uint i;
-	static uint startmsg;
-	time_t t;
-	faddr_t	faddr;
-	fmsghdr_t hdr;
-	struct tm *tm;
-
-if(!startmsg) startmsg=1;
-i=matchnode(dest,0);
-if(i<cfg.nodecfgs) {
-	attr=cfg.nodecfg[i].attr;
-	if(!attr) {
-		i=matchnode(dest,2);
-		if(i<cfg.nodecfgs)
-			attr=cfg.nodecfg[i].attr; } }
-
-do {
-	for(i=startmsg;i;i++) {
-		sprintf(fname,"%s%u.MSG",netmail_dir,i);
-		if(!fexist(fname))
-			break; }
-	if(!i) {
-		printf("\7%s directory full!\n",netmail_dir);
-		logprintf("Directory full: %s",netmail_dir);
-		return(-1); }
-	startmsg=i+1;
-	strupr(fname);
-	if((fstream=fnopen(&fmsg,fname,O_RDWR|O_CREAT))==NULL) {
-		printf("\7ERROR opening %s %s\n",fname,sys_errlist[errno]);
-		logprintf("ERROR line %d opening %s %s",__LINE__,fname,sys_errlist[errno]);
-		return(-1); }
-
-	faddr=getsysfaddr(dest.zone);
-	memset(&hdr,0,sizeof(fmsghdr_t));
-	hdr.origzone=faddr.zone;
-	hdr.orignet=faddr.net;
-	hdr.orignode=faddr.node;
-	hdr.origpoint=faddr.point;
-	hdr.destzone=dest.zone;
-	hdr.destnet=dest.net;
-	hdr.destnode=dest.node;
-	hdr.destpoint=dest.point;
-
-	hdr.attr=(FIDO_PRIVATE|FIDO_KILLSENT|FIDO_LOCAL);
-	if(file)
-		hdr.attr|=FIDO_FILE;
-
-	if(attr&ATTR_HOLD)
-		hdr.attr|=FIDO_HOLD;
-	if(attr&ATTR_CRASH)
-		hdr.attr|=FIDO_CRASH;
-
-	sprintf(hdr.from,"SBBSecho");
-
-	t=time(NULL);
-	tm=gmtime(&t);
-	sprintf(hdr.time,"%02u %3.3s %02u  %02u:%02u:%02u"
-		,tm->tm_mday,mon[tm->tm_mon],TM_YEAR(tm->tm_year)
-		,tm->tm_hour,tm->tm_min,tm->tm_sec);
-
-	if(to)
-		sprintf(hdr.to,"%s",to);
-	else
-		sprintf(hdr.to,"SYSOP");
-
-	sprintf(hdr.subj,"%.71s",subject);
-
-	fwrite(&hdr,sizeof(fmsghdr_t),1,fstream);
-	sprintf(str,"\1INTL %u:%u/%u %u:%u/%u\r"
-		,hdr.destzone,hdr.destnet,hdr.destnode
-		,hdr.origzone,hdr.orignet,hdr.orignode);
-	fwrite(str,strlen(str),1,fstream);
-	if(attr&ATTR_DIRECT) {
-		fwrite("\1FLAGS DIR",10,1,fstream);
-		if(file)
-			fwrite(" KFS\r",5,1,fstream);
-		else
-			fwrite("\r",1,1,fstream); }
-	if(hdr.destpoint) {
-		sprintf(str,"\1TOPT %u\r",hdr.destpoint);
-		fwrite(str,strlen(str),1,fstream); }
-	if(hdr.origpoint) {
-		sprintf(str,"\1FMPT %u\r",hdr.origpoint);
-		fwrite(str,strlen(str),1,fstream); }
-	if(!file || (!(attr&ATTR_DIRECT) && file))
-		fwrite(body,strlen(body)+1,1,fstream);	/* Write additional NULL */
-	else
-		fwrite("\0",1,1,fstream);               /* Write NULL */
-	fclose(fstream);
-} while(!fexist(fname));
-return(0);
-}
-
-/******************************************************************************
- This function takes the contents of 'infile' and puts it into a netmail
- message bound for addr.
-******************************************************************************/
-void file_to_netmail(FILE *infile,char *title,faddr_t addr,char *to)
-{
-	char *buf,*p;
-	long l,m,len;
-
-l=len=ftell(infile);
-if(len>8192L)
-	len=8192L;
-rewind(infile);
-if((buf=(char *)MALLOC(len+1))==NULL) {
-	printf("ERROR allocating %lu bytes for file to netmail buffer.\n",len);
-	logprintf("ERROR line %d allocating %lu for file to netmail buf",__LINE__
-		,len);
-	return; }
-while((m=fread(buf,1,(len>8064L) ? 8064L:len,infile))>0) {
-	buf[m]=0;
-	if(l>8064L && (p=strrchr(buf,'\n'))!=NULL) {
-		p++;
-		if(*p) {
-			*p=0;
-			p++;
-			fseek(infile,-1L,SEEK_CUR);
-			while(*p) { 			/* Seek back to end of last line */
-				p++;
-				fseek(infile,-1L,SEEK_CUR); } } }
-	if(ftell(infile)<l)
-		strcat(buf,"\r\nContinued in next message...\r\n");
-	create_netmail(to,title,buf,addr,0); }
-FREE(buf);
-}
-/******************************************************************************
- This function sends a notify list to applicable nodes, this list includes the
- settings configured for the node, as well as a list of areas the node is
- connected to.
-******************************************************************************/
-void notify_list(void)
-{
-	FILE *tmpf;
-	char str[256];
-	int i,j,k;
-
-for(k=0;k<cfg.nodecfgs;k++) {
-
-	if(!(cfg.nodecfg[k].attr&SEND_NOTIFY))
-		continue;
-
-	if((tmpf=tmpfile())==NULL) {
-		printf("\7ERROR couldn't open tmpfile.\n");
-		logprintf("ERROR line %d couldn't open tmpfile",__LINE__);
-		return; }
-
-	fprintf(tmpf,"Following are the options set for your system and a list "
-		"of areas\r\nyou are connected to.  Please make sure everything "
-		"is correct.\r\n\r\n");
-	fprintf(tmpf,"Packet Type       %s\r\n"
-		,cfg.nodecfg[k].pkt_type==PKT_TWO ? "2"
-		:cfg.nodecfg[k].pkt_type==PKT_TWO_TWO ? "2.2":"2+");
-	fprintf(tmpf,"Archive Type      %s\r\n"
-		,(cfg.nodecfg[k].arctype>cfg.arcdefs) ?
-		 "None":cfg.arcdef[cfg.nodecfg[k].arctype].name);
-	fprintf(tmpf,"Mail Status       %s\r\n"
-		,cfg.nodecfg[k].attr&ATTR_CRASH ? "Crash"
-		:cfg.nodecfg[k].attr&ATTR_HOLD ? "Hold" : "None");
-	fprintf(tmpf,"Direct            %s\r\n"
-		,cfg.nodecfg[k].attr&ATTR_DIRECT ? "Yes":"No");
-	fprintf(tmpf,"Passive           %s\r\n"
-		,cfg.nodecfg[k].attr&ATTR_PASSIVE ? "Yes":"No");
-	fprintf(tmpf,"Remote AreaMgr    %s\r\n\r\n"
-		,cfg.nodecfg[k].password[0] ? "Yes" : "No");
-
-	fprintf(tmpf,"Connected Areas\r\n---------------\r\n");
-	for(i=0;i<cfg.areas;i++) {
-		sprintf(str,"%s\r\n",cfg.area[i].name);
-		if(str[0]=='*')
-			continue;
-		for(j=0;j<cfg.area[i].uplinks;j++)
-			if(!memcmp(&cfg.nodecfg[k].faddr,&cfg.area[i].uplink[j]
-				,sizeof(faddr_t)))
-				break;
-		if(j<cfg.area[i].uplinks)
-			fprintf(tmpf,"%s",str); }
-
-	if(ftell(tmpf))
-		file_to_netmail(tmpf,"SBBSecho Notify List",cfg.nodecfg[k].faddr,0);
-	fclose(tmpf); }
-}
-/******************************************************************************
- This function creates a netmail to addr showing a list of available areas (0),
- a list of connected areas (1), or a list of removed areas (2).
-******************************************************************************/
-void netmail_arealist(char type,faddr_t addr)
-{
-	FILE *stream,*tmpf;
-	char str[256],temp[256],title[81],match,*p;
-	int file,i,j,k,x,y;
-
-if(!type)
-	strcpy(title,"List of Available Areas");
-else if(type==1)
-	strcpy(title,"List of Connected Areas");
-else
-	strcpy(title,"List of Unlinked Areas");
-
-if((tmpf=tmpfile())==NULL) {
-	printf("\7ERROR couldn't open tmpfile.\n");
-	logprintf("ERROR line %d couldn't open tmpfile",__LINE__);
-	return; }
-
-if(type==1 || (type!=1 && !(misc&ELIST_ONLY))) {
-	for(i=0;i<cfg.areas;i++) {
-		sprintf(str,"%s\r\n",cfg.area[i].name);
-		if(type) {
-			for(j=0;j<cfg.area[i].uplinks;j++)
-				if(!memcmp(&addr,&cfg.area[i].uplink[j],sizeof(faddr_t)))
-					break;
-			if((type==1 && j<cfg.area[i].uplinks) ||
-				(type==2 && j==cfg.area[i].uplinks))
-					fprintf(tmpf,"%s",str); }
-		else
-			fprintf(tmpf,"%s",str); } }
-
-if(!type) {
-	i=matchnode(addr,0);
-	if(i<cfg.nodecfgs) {
-		for(j=0;j<cfg.listcfgs;j++) {
-			match=0;
-			for(k=0;k<cfg.listcfg[j].numflags;k++) {
-				if(match) break;
-				for(x=0;x<cfg.nodecfg[i].numflags;x++)
-					if(!stricmp(cfg.listcfg[j].flag[k].flag
-						,cfg.nodecfg[i].flag[x].flag)) {
-						if((stream=fnopen(&file
-							,cfg.listcfg[j].listpath,O_RDONLY))==NULL) {
-							printf("\7ERROR couldn't open %s.\n"
-								,cfg.listcfg[j].listpath);
-							logprintf("ERROR line %d couldn't open %s %s"
-								,__LINE__,cfg.listcfg[j].listpath
-								,sys_errlist[errno]);
-							match=1;
-							break; }
-						while(!feof(stream)) {
-							if(!fgets(str,255,stream))
-								break;
-							truncsp(str);
-							strcat(str,"\r\n");
-							p=str;
-							while(*p && *p<=SP) p++;
-							if(*p==';')     /* Ignore Comment Lines */
-								continue;
-							strcpy(temp,p);
-							p=temp;
-							while(*p && *p>SP) p++;
-							*p=0;
-							if(!(misc&ELIST_ONLY)) {
-								for(y=0;y<cfg.areas;y++)
-									if(!stricmp(cfg.area[y].name,temp))
-										break;
-								if(y==cfg.areas)
-									fprintf(tmpf,"%s",str); }
-							else
-								fprintf(tmpf,"%s",str); }
-						fclose(stream);
-						match=1;
-						break; } } } } }
-
-if(!ftell(tmpf))
-	create_netmail(0,title,"None.",addr,0);
-else
-	file_to_netmail(tmpf,title,addr,0);
-fclose(tmpf);
-}
-/******************************************************************************
- Imitation of Borland's tempnam function because Watcom doesn't have it
-******************************************************************************/
-//#ifdef __WATCOMC__
-char *tempname(char *dir, char *prefix)
-{
-	char str[256],*p;
-	int i;
-
-for(i=0;i<1000;i++) {
-	sprintf(str,"%s%s%03u.$$$",dir,prefix,i);
-	if(!fexist(str))
-		break; }
-if(i>=1000) {
-	logprintf("tempnam: too many files");
-	return(NULL); }
-p=malloc(strlen(str)+1);
-if(!p) {
-	logprintf("tempnam: couldn't malloc %u",strlen(str)+1);
-	return(NULL); }
-strcpy(p,str);
-return(p);
-}
-//#endif
-
-char check_elists(char *areatag,faddr_t addr)
-{
-	FILE *stream;
-	char str[1025],quit=0,match=0,*p;
-	int i,j,k,x,file;
-
-i=matchnode(addr,0);
-if(i<cfg.nodecfgs) {
-	for(j=0;j<cfg.listcfgs;j++) {
-		quit=0;
-		for(k=0;k<cfg.listcfg[j].numflags;k++) {
-			if(quit) break;
-			for(x=0;x<cfg.nodecfg[i].numflags;x++)
-				if(!stricmp(cfg.listcfg[j].flag[k].flag
-					,cfg.nodecfg[i].flag[x].flag)) {
-					if((stream=fnopen(&file
-						,cfg.listcfg[j].listpath,O_RDONLY))==NULL) {
-						printf("\7ERROR couldn't open %s.\n"
-							,cfg.listcfg[j].listpath);
-						logprintf("ERROR line %d opening %s"
-							,__LINE__,cfg.listcfg[j].listpath);
-						quit=1;
-						break; }
-					while(!feof(stream)) {
-						if(!fgets(str,255,stream))
-							break;
-						truncsp(str);
-						strcat(str,"\r\n");
-						p=str;
-						while(*p && *p<=SP) p++;
-						if(*p==';')     /* Ignore Comment Lines */
-							continue;
-						strcpy(str,p);
-						p=str;
-						while(*p && *p>SP) p++;
-						*p=0;
-						if(!stricmp(areatag,str)) {
-							match=1;
-							break; } }
-					fclose(stream);
-					quit=1;
-					if(match)
-						return(match);
-					break; } } } }
-return(match);
-}
-/******************************************************************************
- Used by AREAFIX to add/remove/change areas in the areas file
-******************************************************************************/
-void alter_areas(area_t add_area,area_t del_area,faddr_t addr)
-{
-	FILE *nmfile,*afilein,*afileout,*reqfile,*fwdfile;
-	char str[1025],fields[1025],field1[81],field2[81],field3[81]
-		,drive[3],dir[66],name[9],ext[5],outpath[128]
-		,*outname,*p,*tp,nomatch=0,match=0;
-	int i,j,k,x,y,file;
-	ulong tagcrc;
-
-_splitpath(cfg.areafile,drive,dir,name,ext);
-sprintf(outpath,"%s%s",drive,dir);
-if((outname=tempname(outpath,"AREAS"))==NULL) {
-	printf("\7ERROR creating temp file name for %s.\n",outpath);
-	logprintf("ERROR tempnam(%s,AREAS)",outpath);
-	return; }
-if((nmfile=tmpfile())==NULL) {
-	printf("\7ERROR couldn't open NetMail temp file.\n");
-	logprintf("ERROR in tmpfile()");
-	free(outname);
-	return; }
-if((afileout=fopen(outname,"w+b"))==NULL) {
-	printf("\7ERROR couldn't open %s.\n",outname);
-	logprintf("ERROR line %d opening %s %s",__LINE__,outname
-		,sys_errlist[errno]);
-	fclose(nmfile);
-	free(outname);
-    return; }
-if((afilein=fnopen(&file,cfg.areafile,O_RDONLY))==NULL) {
-	printf("\7ERROR couldn't open %s.\n",cfg.areafile);
-	logprintf("ERROR line %d opening %s %s",__LINE__,cfg.areafile
-		,sys_errlist[errno]);
-	fclose(afileout);
-	fclose(nmfile);
-	free(outname);
-	return; }
-while(!feof(afilein)) {
-	if(!fgets(fields,1024,afilein))
-		break;
-	truncsp(fields);
-	strcat(fields,"\r\n");
-	p=fields;
-	while(*p && *p<=SP) p++;
-	if(*p==';') {    /* Skip Comment Lines */
-		fprintf(afileout,"%s",fields);
-		continue; }
-	sprintf(field1,"%-.81s",p);         /* Internal Code Field */
-	tp=field1;
-	while(*tp && *tp>SP) tp++;
-	*tp=0;
-	while(*p && *p>SP) p++;
-	while(*p && *p<=SP) p++;
-	sprintf(field2,"%-.81s",p);         /* Areatag Field */
-	tp=field2;
-	while(*tp && *tp>SP) tp++;
-	*tp=0;
-	while(*p && *p>SP) p++;
-	while(*p && *p<=SP) p++;
-	if((tp=strchr(p,';'))!=NULL) {
-		sprintf(field3,"%-.81s",p);     /* Comment Field (if any) */
-		while(*tp && *tp>SP) tp++;
-		*tp=0; }
-	else
-		field3[0]=0;
-	if(del_area.tags) { 				/* Check for areas to remove */
-		for(i=0;i<del_area.tags;i++) {
-			if(!stricmp(del_area.tag[i],field2) ||
-				!stricmp(del_area.tag[0],"-ALL"))     /* Match Found */
-				break; }
-		if(i<del_area.tags) {
-			for(i=0;i<cfg.areas;i++) {
-				if(!stricmp(field2,cfg.area[i].name)) {
-					for(j=0;j<cfg.area[i].uplinks;j++)
-						if(!memcmp(&cfg.area[i].uplink[j],&addr
-							,sizeof(faddr_t)))
-							break;
-					if(j==cfg.area[i].uplinks &&
-						stricmp(del_area.tag[0],"-ALL")) {
-						fprintf(afileout,"%s",fields);
-						fprintf(nmfile,"%s not connected.\r\n",field2);
-						break; }
-
-					/* Added 12/4/95 to remove uplink from connected uplinks */
-
-					for(k=j;k<cfg.area[i].uplinks-1;k++)
-						memcpy(&cfg.area[i].uplink[k],&cfg.area[i].uplink[k+1]
-							,sizeof(faddr_t));
-					--cfg.area[i].uplinks;
-					if((cfg.area[i].uplink=(faddr_t *)
-						REALLOC(cfg.area[i].uplink,sizeof(faddr_t)
-						*(cfg.area[i].uplinks)))==NULL) {
-						printf("ERROR allocating memory for area #%u "
-							"uplinks.\n",i+1);
-						logprintf("ERROR line %d allocating memory for area "
-							"#%u uplinks.\n",__LINE__,i+1);
-						exit(1); }
-
-					fprintf(afileout,"%-16s%-23s ",field1,field2);
-					for(j=0;j<cfg.area[i].uplinks;j++) {
-						if(!memcmp(&cfg.area[i].uplink[j],&addr
-							,sizeof(faddr_t)))
-							continue;
-						fprintf(afileout,"%s "
-							,faddrtoa(cfg.area[i].uplink[j])); }
-					if(field3[0])
-						fprintf(afileout,"%s",field3);
-					fprintf(afileout,"\r\n");
-					fprintf(nmfile,"%s removed.\r\n",field2);
-					break; } }
-			if(i==cfg.areas)			/* Something screwy going on */
-				fprintf(afileout,"%s",fields);
-			continue; } }				/* Area match so continue on */
-	if(add_area.tags) { 				/* Check for areas to add */
-		for(i=0;i<add_area.tags;i++)
-			if(!stricmp(add_area.tag[i],field2) ||
-				!stricmp(add_area.tag[0],"+ALL"))      /* Match Found */
-				break;
-		if(i<add_area.tags) {
-			if(stricmp(add_area.tag[i],"+ALL"))
-				add_area.tag[i][0]=0;  /* So we can check other lists */
-			for(i=0;i<cfg.areas;i++) {
-				if(!stricmp(field2,cfg.area[i].name)) {
-					for(j=0;j<cfg.area[i].uplinks;j++)
-						if(!memcmp(&cfg.area[i].uplink[j],&addr
-							,sizeof(faddr_t)))
-							break;
-					if(j<cfg.area[i].uplinks) {
-						fprintf(afileout,"%s",fields);
-						fprintf(nmfile,"%s already connected.\r\n",field2);
-						break; }
-					if(misc&ELIST_ONLY && !check_elists(field2,addr)) {
-						fprintf(afileout,"%s",fields);
-						break; }
-
-					/* Added 12/4/95 to add uplink to connected uplinks */
-
-					++cfg.area[i].uplinks;
-					if((cfg.area[i].uplink=(faddr_t *)
-						REALLOC(cfg.area[i].uplink,sizeof(faddr_t)
-						*(cfg.area[i].uplinks)))==NULL) {
-						printf("ERROR allocating memory for area #%u "
-							"uplinks.\n",i+1);
-						logprintf("ERROR line %d allocating memory for area "
-							"#%u uplinks.\n",__LINE__,i+1);
-                        exit(1); }
-					memcpy(&cfg.area[i].uplink[j],&addr,sizeof(faddr_t));
-
-					fprintf(afileout,"%-16s%-23s ",field1,field2);
-					for(j=0;j<cfg.area[i].uplinks;j++)
-						fprintf(afileout,"%s "
-							,faddrtoa(cfg.area[i].uplink[j]));
-#if 0 // Removed (02/26/96) rrs
-					fprintf(afileout,"%s ",faddrtoa(addr));
-#endif
-					if(field3[0])
-						fprintf(afileout,"%s",field3);
-					fprintf(afileout,"\r\n");
-					fprintf(nmfile,"%s added.\r\n",field2);
-					break; } }
-			if(i==cfg.areas)			/* Something screwy going on */
-				fprintf(afileout,"%s",fields);
-			continue; } 				/* Area match so continue on */
-		nomatch=1; }					/* This area wasn't in there */
-	fprintf(afileout,"%s",fields); }    /* No match so write back line */
-fclose(afilein);
-if(nomatch || (add_area.tags && !stricmp(add_area.tag[0],"+ALL"))) {
-	i=matchnode(addr,0);
-	if(i<cfg.nodecfgs) {
-		for(j=0;j<cfg.listcfgs;j++) {
-			match=0;
-			for(k=0;k<cfg.listcfg[j].numflags;k++) {
-				if(match) break;
-				for(x=0;x<cfg.nodecfg[i].numflags;x++)
-					if(!stricmp(cfg.listcfg[j].flag[k].flag
-						,cfg.nodecfg[i].flag[x].flag)) {
-						if((fwdfile=tmpfile())==NULL) {
-							printf("\7ERROR couldn't open forwarding temp "
-								"file.\n");
-							logprintf("ERROR line %d opening forward temp "
-								"file",__LINE__);
-							match=1;
-							break; }
-						if((afilein=fnopen(&file
-							,cfg.listcfg[j].listpath,O_RDONLY))==NULL) {
-							printf("\7ERROR couldn't open %s.\n"
-								,cfg.listcfg[j].listpath);
-							logprintf("ERROR line %d opening %s"
-								,__LINE__,cfg.listcfg[j].listpath);
-							fclose(fwdfile);
-							match=1;
-							break; }
-						while(!feof(afilein)) {
-							if(!fgets(str,255,afilein))
-								break;
-							truncsp(str);
-							strcat(str,"\r\n");
-							p=str;
-							while(*p && *p<=SP) p++;
-							if(*p==';')     /* Ignore Comment Lines */
-								continue;
-							strcpy(str,p);
-							p=str;
-							while(*p && *p>SP) p++;
-							*p=0;
-							if(!stricmp(add_area.tag[0],"+ALL")) {
-								sprintf(fields,"%.1024s",str);
-								tagcrc=crc32(strupr(fields));
-								for(y=0;y<cfg.areas;y++)
-									if(tagcrc==cfg.area[y].tag)
-										break;
-								if(y<cfg.areas)
-									continue; }
-							for(y=0;y<add_area.tags;y++)
-								if((!stricmp(add_area.tag[y],str) &&
-									add_area.tag[y][0]) ||
-									!stricmp(add_area.tag[0],"+ALL"))
-									break;
-							if(y<add_area.tags) {
-								fprintf(afileout,"%-16s%-23s","P",str);
-								if(cfg.listcfg[j].forward.zone)
-									fprintf(afileout," %s"
-										,faddrtoa(cfg.listcfg[j].forward));
-								fprintf(afileout," %s\r\n",faddrtoa(addr));
-								fprintf(nmfile,"%s added.\r\n",str);
-								if(stricmp(add_area.tag[0],"+ALL"))
-									add_area.tag[y][0]=0;
-								if(!(cfg.listcfg[j].misc&NOFWD)
-									&& cfg.listcfg[j].forward.zone)
-									fprintf(fwdfile,"%s\r\n",str); } }
-						fclose(afilein);
-						if(!(cfg.listcfg[j].misc&NOFWD) && ftell(fwdfile)>0)
-							file_to_netmail(fwdfile,cfg.listcfg[j].password
-								,cfg.listcfg[j].forward,"Areafix");
-						fclose(fwdfile);
-						match=1;
-                        break; } } } } }
-if(add_area.tags && stricmp(add_area.tag[0],"+ALL")) {
-	for(i=0;i<add_area.tags;i++)
-		if(add_area.tag[i][0])
-			fprintf(nmfile,"%s not found.\r\n",add_area.tag[i]); }
-if(!ftell(nmfile))
-	create_netmail(0,"Area Change Request","No changes made.",addr,0);
-else
-	file_to_netmail(nmfile,"Area Change Request",addr,0);
-fclose(nmfile);
-fclose(afileout);
-if(delfile(cfg.areafile))					/* Delete AREAS.BBS */
-	logprintf("ERROR line %d removing %s %s",__LINE__,cfg.areafile
-		,sys_errlist[errno]);
-if(rename(outname,cfg.areafile))		   /* Rename new AREAS.BBS file */
-	logprintf("ERROR line %d renaming %s to %s",__LINE__,outname,cfg.areafile);
-free(outname);
-}
-/******************************************************************************
- Used by AREAFIX to add/remove/change uplink info in the configuration file
- old = the old setting for this option, new = what the setting is changing to
- option = 0 for compression type change
-		  1 for areafix password change
-		  2 to set this node to passive
-		  3 to set this node to active (remove passive)
-******************************************************************************/
-void alter_config(faddr_t addr,char *old,char *new,char option)
-{
-	FILE *outfile,*cfgfile;
-	char str[257],outpath[128],tmp[257],tmp2[257],*outname,*p,*tp
-		,drive[3],dir[66],name[9],ext[5],match=0;
-	int i,j,k,file;
-	faddr_t taddr;
-
-i=matchnode(addr,0);				  /* i = config number from here on */
-_splitpath(cfg.cfgfile,drive,dir,name,ext);
-sprintf(outpath,"%s%s",drive,dir);
-if((outname=tempname(outpath,"CFG"))==NULL) {
-	printf("\7ERROR creating temporary file name for %s.\n",outpath);
-	logprintf("ERROR tempnam(%s,CFG)",outpath);
-	return; }
-if((outfile=fopen(outname,"w+b"))==NULL) {
-	printf("\7ERROR couldn't open %s.\n",outname);
-	logprintf("ERROR line %d opening %s %s",__LINE__,outname
-		,sys_errlist[errno]);
-	free(outname);
-    return; }
-if((cfgfile=fnopen(&file,cfg.cfgfile,O_RDONLY))==NULL) {
-	printf("\7ERROR couldn't open %s.\n",cfg.cfgfile);
-	logprintf("ERROR line %d opening %s",__LINE__,cfg.cfgfile
-		,sys_errlist[errno]);
-	fclose(outfile);
-	free(outname);
-	return; }
-
-while(!feof(cfgfile)) {
-	if(!fgets(str,256,cfgfile))
-		break;
-	truncsp(str);
-	p=str;
-	while(*p && *p<=SP) p++;
-	if(*p==';') {
-		fprintf(outfile,"%s\r\n",str);
-        continue; }
-	sprintf(tmp,"%-.25s",p);
-	tp=strchr(tmp,SP);
-	if(tp)
-		*tp=0;								/* Chop off at space */
-	strupr(tmp);							/* Convert code to uppercase */
-	while(*p>SP) p++;						/* Skip code */
-    while(*p && *p<=SP) p++;                /* Skip white space */
-
-	if(option==0 && !strcmp(tmp,"USEPACKER")) {     /* Change Compression */
-		if(!*p)
-			continue;
-		strcpy(tmp2,p);
-		p=tmp2;
-		while(*p && *p>SP) p++;
-		*p=0;
-		p++;
-		if(!stricmp(new,tmp2)) {   /* Add to new definition */
-			fprintf(outfile,"%-10s %s %s %s\r\n",tmp,tmp2
-				,faddrtoa(cfg.nodecfg[i].faddr)
-				,(*p) ? p : "");
-			match=1;
-			continue; }
-		else if(!stricmp(old,tmp2)) {	/* Remove from old def */
-			for(j=k=0;j<cfg.nodecfgs;j++) {
-				if(j==i)
-					continue;
-				if(!stricmp(cfg.arcdef[cfg.nodecfg[j].arctype].name,tmp2)) {
-					if(!k) {
-						fprintf(outfile,"%-10s %s",tmp,tmp2);
-						k++; }
-					fprintf(outfile," %s"
-						,faddrtoa(cfg.nodecfg[j].faddr)); } }
-			fprintf(outfile,"\r\n");
-			continue; } }
-
-	if(option==1 && !strcmp(tmp,"AREAFIX")) {       /* Change Password */
-		if(!*p)
-			continue;
-		taddr=atofaddr(p);
-		if(!memcmp(&cfg.nodecfg[i].faddr,&taddr,sizeof(faddr_t))) {
-			while(*p && *p>SP) p++; 	/* Skip over address */
-			while(*p && *p<=SP) p++;	/* Skip over whitespace */
-			while(*p && *p>SP) p++; 	/* Skip over password */
-			while(*p && *p<=SP) p++;	/* Skip over whitespace */
-			fprintf(outfile,"%-10s %s %s %s\r\n",tmp
-				,faddrtoa(cfg.nodecfg[i].faddr),new,p);
-			continue; } }
-
-	if(option>1 && !strcmp(tmp,"PASSIVE")) {        /* Toggle Passive Areas */
-		match=1;
-		for(j=k=0;j<cfg.nodecfgs;j++) {
-			if(option==2 && j==i) {
-				if(!k) fprintf(outfile,"%-10s",tmp);
-				fprintf(outfile," %s",faddrtoa(cfg.nodecfg[j].faddr));
-				k++;
-				continue; }
-			if(option==3 && j==i)
-				continue;
-			if(cfg.nodecfg[j].attr&ATTR_PASSIVE) {
-				if(!k) fprintf(outfile,"%-10s",tmp);
-				fprintf(outfile," %s",faddrtoa(cfg.nodecfg[j].faddr));
-				k++; } }
-		if(k) fprintf(outfile,"\r\n");
-		continue; }
-	fprintf(outfile,"%s\r\n",str); }
-
-if(!match) {
-	if(option==0)
-		fprintf(outfile,"%-10s %s %s\r\n","USEPACKER",new
-			,faddrtoa(cfg.nodecfg[i].faddr));
-	if(option==2)
-		fprintf(outfile,"%-10s %s\r\n","PASSIVE"
-			,faddrtoa(cfg.nodecfg[i].faddr)); }
-
-fclose(cfgfile);
-fclose(outfile);
-if(delfile(cfg.cfgfile))
-	logprintf("ERROR line %d removing %s %s",__LINE__,cfg.cfgfile
-		,sys_errlist[errno]);
-if(rename(outname,cfg.cfgfile))
-	logprintf("ERROR line %d renaming %s to %s",__LINE__,outname,cfg.cfgfile);
-free(outname);
-}
-/******************************************************************************
- Used by AREAFIX to process any '%' commands that come in via netmail
-******************************************************************************/
-void command(char *instr,faddr_t addr)
-{
-	FILE *stream,*tmpf;
-	char str[256],temp[256],match,*buf,*p;
-	int  file,i,j,node;
-	long l;
-	area_t add_area,del_area;
-
-node=matchnode(addr,0);
-if(node>=cfg.nodecfgs)
-	return;
-memset(&add_area,0,sizeof(area_t));
-memset(&del_area,0,sizeof(area_t));
-strupr(instr);
-if((p=strstr(instr,"HELP"))!=NULL) {
-	sprintf(str,"%s%sAREAMGR.HLP",(exec_dir[0]=='.') ? node_dir:"",exec_dir);
-	if(!fexist(str))
-		return;
-	if((stream=fnopen(&file,str,O_RDONLY))==NULL) {
-		printf("\7ERROR couldn't open %s.\n",str);
-		logprintf("ERROR line %d opening %s %s",__LINE__,str
-			,sys_errlist[errno]);
-		return; }
-	l=filelength(file);
-	if((buf=(char *)LMALLOC(l+1L))==NULL) {
-		printf("ERROR line %d allocating %lu bytes for %s\n",__LINE__,l,str);
-		return; }
-	fread(buf,l,1,stream);
-	fclose(stream);
-	buf[l]=0;
-	create_netmail(0,"Area Manager Help",buf,addr,0);
-	LFREE(buf);
-	return; }
-
-if((p=strstr(instr,"LIST"))!=NULL) {
-	netmail_arealist(0,addr);
-	return; }
-
-if((p=strstr(instr,"QUERY"))!=NULL) {
-	netmail_arealist(1,addr);
-	return; }
-
-if((p=strstr(instr,"UNLINKED"))!=NULL) {
-	netmail_arealist(2,addr);
-	return; }
-
-if((p=strstr(instr,"COMPRESSION"))!=NULL) {
-	while(*p && *p>SP) p++;
-	while(*p && *p<=SP) p++;
-	for(i=0;i<cfg.arcdefs;i++)
-		if(!stricmp(p,cfg.arcdef[i].name))
-			break;
-	if(!stricmp(p,"NONE"))
-		i=0xffff;
-	if(i==cfg.arcdefs) {
-		if((tmpf=tmpfile())==NULL) {
-			printf("\7ERROR couldn't open tmpfile.\n");
-			logprintf("ERROR line %d opening tmpfile()",__LINE__);
-			return; }
-		fprintf(tmpf,"Compression type unavailable.\r\n\r\n"
-			"Available types are:\r\n");
-		for(i=0;i<cfg.arcdefs;i++)
-			fprintf(tmpf,"                     %s\r\n",cfg.arcdef[i].name);
-		file_to_netmail(tmpf,"Compression Type Change",addr,0);
-		fclose(tmpf);
-		LFREE(buf);
-		return; }
-	alter_config(addr,cfg.arcdef[cfg.nodecfg[node].arctype].name
-		,cfg.arcdef[i].name,0);
-	cfg.nodecfg[node].arctype=i;
-	sprintf(str,"Compression type changed to %s.",cfg.arcdef[i].name);
-	create_netmail(0,"Compression Type Change",str,addr,0);
-	return; }
-
-if((p=strstr(instr,"PASSWORD"))!=NULL) {
-	while(*p && *p>SP) p++;
-	while(*p && *p<=SP) p++;
-	sprintf(temp,"%-.25s",p);
-	p=temp;
-	while(*p && *p>SP) p++;
-	*p=0;
-	if(node==cfg.nodecfgs)		   /* Should never happen */
-		return;
-	if(!stricmp(temp,cfg.nodecfg[node].password)) {
-		sprintf(str,"Your password was already set to %s."
-			,cfg.nodecfg[node].password);
-		create_netmail(0,"Password Change Request",str,addr,0);
-		return; }
-	alter_config(addr,cfg.nodecfg[node].password,temp,1);
-	sprintf(str,"Your password has been changed from %s to %.25s."
-		,cfg.nodecfg[node].password,temp);
-	sprintf(cfg.nodecfg[node].password,"%.25s",temp);
-	create_netmail(0,"Password Change Request",str,addr,0);
-	return; }
-
-if((p=strstr(instr,"RESCAN"))!=NULL) {
-	export_echomail("",addr);
-	create_netmail(0,"Rescan Areas"
-		,"All connected areas carried by your hub have been rescanned."
-		,addr,0);
-	return; }
-
-if((p=strstr(instr,"ACTIVE"))!=NULL) {
-	if(!(cfg.nodecfg[node].attr&ATTR_PASSIVE)) {
-		create_netmail(0,"Reconnect Disconnected Areas"
-			,"Your areas are already connected.",addr,0);
-		return; }
-	alter_config(addr,0,0,3);
-	create_netmail(0,"Reconnect Disconnected Areas"
-		,"Temporarily disconnected areas have been reconnected.",addr,0);
-	return; }
-
-if((p=strstr(instr,"PASSIVE"))!=NULL) {
-	if(cfg.nodecfg[node].attr&ATTR_PASSIVE) {
-		create_netmail(0,"Temporarily Disconnect Areas"
-			,"Your areas are already temporarily disconnected.",addr,0);
-		return; }
-	alter_config(addr,0,0,2);
-	create_netmail(0,"Temporarily Disconnect Areas"
-		,"Your areas have been temporarily disconnected.",addr,0);
-	return; }
-
-if((p=strstr(instr,"FROM"))!=NULL);
-
-if((p=strstr(instr,"+ALL"))!=NULL) {
-	if((add_area.tag=(char **)REALLOC(add_area.tag
-		,sizeof(char *)*add_area.tags+1))==NULL) {
-		printf("ERROR allocating memory for add area tag #%u.\n"
-			,add_area.tags+1);
-		logprintf("ERROR line %d allocating memory for add area tag #%u"
-			,__LINE__,add_area.tags+1);
-		exit(1); }
-	if((add_area.tag[add_area.tags]=(char *)LMALLOC(strlen(instr)+1))==NULL) {
-		printf("ERROR allocating memory for add area tag #%u.\n"
-			,add_area.tags+1);
-		logprintf("ERROR line %d allocating memory for add area tag #%u"
-			,__LINE__,add_area.tags+1);
-        exit(1); }
-	strcpy(add_area.tag[add_area.tags],instr);
-	add_area.tags++;
-	alter_areas(add_area,del_area,addr);
-	for(i=0;i<add_area.tags;i++)
-		LFREE(add_area.tag[i]);
-	FREE(add_area.tag);
-	return; }
-
-if((p=strstr(instr,"-ALL"))!=NULL) {
-	if((del_area.tag=(char **)REALLOC(del_area.tag
-		,sizeof(char *)*del_area.tags+1))==NULL) {
-		printf("ERROR allocating memory for del area tag #%u.\n"
-			,del_area.tags+1);
-		logprintf("ERROR line %d allocating memory for del area tag #%u"
-			,__LINE__,del_area.tags+1);
-		exit(1); }
-	if((del_area.tag[del_area.tags]=(char *)LMALLOC(strlen(instr)+1))==NULL) {
-		printf("ERROR allocating memory for del area tag #%u.\n"
-			,del_area.tags+1);
-		logprintf("ERROR line %d allocating memory for del area tag #%u"
-			,__LINE__,del_area.tags+1);
-        exit(1); }
-	strcpy(del_area.tag[del_area.tags],instr);
-	del_area.tags++;
-	alter_areas(add_area,del_area,addr);
-	for(i=0;i<del_area.tags;i++)
-		LFREE(del_area.tag[i]);
-	FREE(del_area.tag);
-	return; }
-}
-/******************************************************************************
- This is where we're gonna process any netmail that comes in for areafix.
- Returns text for message body for the local sysop if necessary.
-******************************************************************************/
-char *process_areafix(faddr_t addr,char HUGE16 *inbuf,char *password)
-{
-	static char body[512],str[81];
-	char *p,*tp,action,percent=0;
-	int i;
-	ulong l,m;
-	area_t add_area,del_area;
-
-p=(char *)inbuf;
-
-while(*p==1) {				/* Skip kludge lines 11/05/95 */
-	while(*p && *p!=CR)
-		p++;				/* Skip meat */
-	if(*p)
-		p++; }				/* Skip CR */
-
-#if 0 // Removed 11/05/95
-while(*p && (tp=strchr(p,'\1'))!=NULL) {    /* Remove ^A kludge lines */
-	p=tp;
-	while(*p && *p!=CR) p++; }
-if(*p==CR)
-	p++;
-#endif
-
-if(((tp=strstr(p,"---\r"))!=NULL || (tp=strstr(p,"--- "))!=NULL) &&
-	(*(tp-1)==10 || *(tp-1)==13))
-	*tp=0;
-
-if(!strnicmp(p,"%FROM",5)) {    /* Remote Remote Maintenance (must be first) */
-	sprintf(str,"%.80s",p+6);
-	if((tp=strchr(str,CR))!=NULL)
-		*tp=0;
-	logprintf("Remote maintenance for %s requested via %s",str,faddrtoa(addr));
-	addr=atofaddr(str); }
-
-i=matchnode(addr,0);
-if(i==cfg.nodecfgs) {
-	sprintf(body,"Your node is not configured for Areafix, please "
-		"contact your hub.\r\n");
-	create_netmail(0,"Areafix Request",body,addr,0);
-	sprintf(body,"An areafix request was made by node %s.\r\nThis node "
-		"is not currently configured for areafix.\r\n",faddrtoa(addr));
-	return(body); }
-
-if(stricmp(cfg.nodecfg[i].password,password)) {
-    create_netmail(0,"Areafix Request","Invalid Password.",addr,0);
-    sprintf(body,"Node %s attempted an areafix request using an invalid "
-        "password.\r\nThe password attempted was %s.\r\nThe correct password "
-        "for this node is %s.\r\n",faddrtoa(addr),password
-		,(cfg.nodecfg[i].password[0]) ? cfg.nodecfg[i].password
-		 : "[None Defined]");
-    return(body); }
-
-m=strlen(p);
-add_area.tags=0;
-add_area.tag=NULL;
-del_area.tags=0;
-del_area.tag=NULL;
-for(l=0;l<m;l++) {
-	while(*(p+l) && *(p+l)<=SP) l++;
-	if(!(*(p+l))) break;
-	if(*(p+l)=='+' || *(p+l)=='-' || *(p+l)=='%') {
-		action=*(p+l);
-		l++; }
-	else
-		action='+';
-	sprintf(str,"%.80s",p+l);
-	if((tp=strchr(str,CR))!=NULL)
-		*tp=0;
-	switch(action) {
-		case '+':                       /* Add Area */
-			if((add_area.tag=(char **)REALLOC(add_area.tag
-				,sizeof(char *)*add_area.tags+1))==NULL) {
-				printf("ERROR allocating memory for add area tag #%u.\n"
-					,add_area.tags+1);
-				logprintf("ERROR line %d allocating memory for add area "
-					"tag #%u",__LINE__,add_area.tags+1);
-				exit(1); }
-			if((add_area.tag[add_area.tags]=(char *)LMALLOC(strlen(str)+1))
-				==NULL) {
-				printf("ERROR allocating memory for add area tag #%u.\n"
-					,add_area.tags+1);
-				logprintf("ERROR line %d allocating memory for add area "
-					"tag #%u",__LINE__,add_area.tags+1);
-                exit(1); }
-			strcpy(add_area.tag[add_area.tags],str);
-			add_area.tags++;
-			break;
-		case '-':                       /* Remove Area */
-			if((del_area.tag=(char **)REALLOC(del_area.tag
-				,sizeof(char *)*del_area.tags+1))==NULL) {
-				printf("ERROR allocating memory for del area tag #%u.\n"
-					,del_area.tags+1);
-				logprintf("ERROR line %d allocating memory for del area "
-					"tag #%u",__LINE__,del_area.tags+1);
-				exit(1); }
-			if((del_area.tag[del_area.tags]=(char *)LMALLOC(strlen(str)+1))
-				==NULL) {
-				printf("ERROR allocating memory for del area tag #%u.\n"
-					,del_area.tags+1);
-				logprintf("ERROR line %d allocating memory for del area "
-					"tag #%u",__LINE__,del_area.tags+1);
-				exit(1); }
-			strcpy(del_area.tag[del_area.tags],str);
-			del_area.tags++;
-			break;
-		case '%':                       /* Process Command */
-			command(str,addr);
-			percent++;
-			break; }
-
-	while(*(p+l) && *(p+l)!=CR) l++; }
-
-if(!percent && !add_area.tags && !del_area.tags) {
-	create_netmail(0,"Areafix Request","No commands to process.",addr,0);
-	sprintf(body,"Node %s attempted an areafix request with an empty message "
-		"body or with no valid commands.\r\n",faddrtoa(addr));
-    return(body); }
-if(add_area.tags || del_area.tags)
-	alter_areas(add_area,del_area,addr);
-if(add_area.tags) {
-	for(i=0;i<add_area.tags;i++)
-		LFREE(add_area.tag[i]);
-	FREE(add_area.tag); }
-if(del_area.tags) {
-	for(i=0;i<del_area.tags;i++)
-		LFREE(del_area.tag[i]);
-	FREE(del_area.tag); }
-return(0);
-}
-/******************************************************************************
- This function will compare the archive signatures defined in the CFG file and
- extract 'infile' using the appropriate de-archiver.
-******************************************************************************/
-int unpack(char *infile)
-{
-	FILE *stream;
-	char str[256],tmp[3];
-	int i,j,k,ch,file;
-
-if((stream=fnopen(&file,infile,O_RDONLY))==NULL) {
-	printf("\7ERROR couldn't open %s.\n",infile);
-	logprintf("ERROR line %d opening %s %s",__LINE__,infile
-		,sys_errlist[errno]);
-	exit(1); }
-for(i=0;i<cfg.arcdefs;i++) {
-	str[0]=0;
-	fseek(stream,cfg.arcdef[i].byteloc,SEEK_SET);
-	for(j=0;j<strlen(cfg.arcdef[i].hexid)/2;j++) {
-		ch=fgetc(stream);
-		if(ch==EOF) {
-			i=cfg.arcdefs;
-			break; }
-		sprintf(tmp,"%02X",ch);
-		strcat(str,tmp); }
-	if(!stricmp(str,cfg.arcdef[i].hexid))
-		break; }
-fclose(stream);
-
-if(i==cfg.arcdefs) {
-	printf("\7ERROR couldn't determine filetype of %s.\n",infile);
-	logprintf("ERROR line %d determining filetype of %s",__LINE__,infile);
-	return(1); }
-
-j=execute(cmdstr(cfg.arcdef[i].unpack,infile
-	,secure ? cfg.secure : cfg.inbound));
-if(j) {
-	printf("\7ERROR %d (%d) executing %s\n"
-		,j,errno,cmdstr(cfg.arcdef[i].unpack,infile
-			,secure ? cfg.secure : cfg.inbound));
-	logprintf("ERROR %d (%d) line %d executing %s"
-		,j,errno,__LINE__,cmdstr(cfg.arcdef[i].unpack,infile
-            ,secure ? cfg.secure : cfg.inbound));
-	return(j); }
-return(0);
-}
-/******************************************************************************
- This function will check the 'dest' for the type of archiver to use (as
- defined in the CFG file) and compress 'srcfile' into 'destfile' using the
- appropriate archive program.
-******************************************************************************/
-void pack(char *srcfile,char *destfile,faddr_t dest)
-{
-	int i,j;
-	uint use=0;
-
-i=matchnode(dest,0);
-if(i<cfg.nodecfgs)
-	use=cfg.nodecfg[i].arctype;
-
-j=execute(cmdstr(cfg.arcdef[use].pack,destfile,srcfile));
-if(j) {
-	printf("\7ERROR %d (%d) executing %s\n"
-		,j,errno,cmdstr(cfg.arcdef[use].pack,destfile,srcfile));
-	logprintf("ERROR %d (%d) line %d executing %s"
-		,j,errno,__LINE__,cmdstr(cfg.arcdef[use].pack,destfile,srcfile)); }
-}
-
-char attachment(char *bundlename,faddr_t dest,char cleanup)
-{
-	FILE *fidomsg,*stream;
-	char str[1025],path[512],fname[129],*p;
-	int last,fmsg,file,error=0L;
-	long fncrc,*mfncrc=0L,num_mfncrc=0L;
-	struct find_t ff;
-    attach_t attach;
-	fmsghdr_t hdr;
-
-sprintf(fname,"%sBUNDLES.SBE",cfg.outbound);
-if((stream=fnopen(&file,fname,O_RDWR|O_CREAT))==NULL) {
-    printf("\7ERROR opening %s %s\n",fname,sys_errlist[errno]);
-    logprintf("ERROR line %d opening %s %s",__LINE__,fname,sys_errlist[errno]);
-	return(1); }
-
-if(cleanup==2) {				/* Check for existance in BUNDLES.SBE */
-	while(!feof(stream)) {
-		if(!fread(&attach,1,sizeof(attach_t),stream))
-			break;
-		if(!stricmp(attach.fname,bundlename)) {
-			fclose(stream);
-			return(1); } }
-	fclose(stream);
-	return(0); }
-
-if(cleanup==1) {				/* Create netmail attaches */
-
-if(!filelength(file)) {
-	fclose(stream);
-	return(0); }
-								/* Get attach names from existing MSGs */
-sprintf(str,"%s*.MSG",netmail_dir);
-for(last=_dos_findfirst(str,0,&ff);!last;last=_dos_findnext(&ff)) {
-	sprintf(path,"%s%s",netmail_dir,ff.name);
-	strupr(path);
-	if((fidomsg=fnopen(&fmsg,path,O_RDWR))==NULL) {
-		printf("\7ERROR opening %s\n",path);
-		logprintf("ERROR line %d opening %s %s",__LINE__,path
-			,sys_errlist[errno]);
-		continue; }
-	if(filelength(fmsg)<sizeof(fmsghdr_t)) {
-		printf("\7ERROR %s has invalid length of %u bytes\n",path
-			,filelength(fmsg));
-		logprintf("ERROR line %d %s has invalid length of %u bytes"
-			,__LINE__,path,filelength(fmsg));
-		fclose(fidomsg);
-		continue; }
-	if(fread(&hdr,sizeof(fmsghdr_t),1,fidomsg)!=1) {
-		fclose(fidomsg);
-		printf("\7ERROR reading %u bytes from %s"
-			,sizeof(fmsghdr_t),path);
-		logprintf("ERROR line %d reading %u bytes from %s"
-			,__LINE__,sizeof(fmsghdr_t),path);
-		continue; }
-	fclose(fidomsg);
-	if(!(hdr.attr&FIDO_FILE))		/* Not a file attach */
-		continue;
-	num_mfncrc++;
-	if((p=strrchr(hdr.subj,'\\'))!=NULL)
-		p++;
-	else
-		p=hdr.subj;
-	if((mfncrc=(long *)REALLOC(mfncrc,num_mfncrc*sizeof(long)))==NULL) {
-		printf("ERROR allocating %lu bytes for bundle name crc.\n"
-			,num_mfncrc*sizeof(long));
-		logprintf("ERROR line %d allocating %lu for bundle name crc"
-			,__LINE__,num_mfncrc*sizeof(long));
-		continue; }
-	mfncrc[num_mfncrc-1]=crc32(strupr(p)); }
-
-    while(!feof(stream)) {
-		if(!fread(&attach,1,sizeof(attach_t),stream))
-            break;
-        sprintf(str,"%s%s",cfg.outbound,attach.fname);
-		if(!fexist(str))
-			continue;
-		fncrc=crc32(strupr(attach.fname));
-		for(last=0;last<num_mfncrc;last++)
-			if(mfncrc[last]==fncrc)
-				break;
-		if(last==num_mfncrc)
-			if(create_netmail(0,str,"\1FLAGS KFS\r",attach.dest,1))
-				error=1; }
-	if(!error)				/* don't truncate if an error occured */
-		chsize(file,0L);
-    fclose(stream);
-	if(num_mfncrc)
-		FREE(mfncrc);
-#ifdef __WATCOMC__
-   _dos_findclose(&ff);
-#endif
-	return(0); }
-
-while(!feof(stream)) {
-	if(!fread(&attach,1,sizeof(attach_t),stream))
-        break;
-    if(!stricmp(attach.fname,bundlename)) {
-        fclose(stream);
-		return(0); } }
-
-memcpy(&attach.dest,&dest,sizeof(faddr_t));
-strcpy(attach.fname,bundlename);
-fwrite(&attach,sizeof(attach_t),1,stream);
-fclose(stream);
-return(0);
-}
-
-/******************************************************************************
- This function is called when a message packet has reached it's maximum size.
- It places packets into a bundle until that bundle is full, at which time the
- last character of the extension increments (1 thru 0 and then A thru Z).  If
- all bundles have reached their maximum size remaining packets are placed into
- the Z bundle.
-******************************************************************************/
-void pack_bundle(char *infile,faddr_t dest)
-{
-	char str[256],fname[256],outbound[128],day[3],ch,*p;
-	int i,j,file,node;
-	time_t now;
-
-node=matchnode(dest,0);
-strcpy(str,infile);
-str[strlen(str)-1]='T';
-if(rename(infile,str))				   /* Change .PK_ file to .PKT file */
-	logprintf("ERROR line %d renaming %s to %s",__LINE__,infile,str);
-infile[strlen(infile)-1]='T';
-time(&now);
-sprintf(day,"%-.2s",ctime(&now));
-strupr(day);
-if(misc&FLO_MAILER) {
-	if(node<cfg.nodecfgs && cfg.nodecfg[node].route.zone)
-		dest=cfg.nodecfg[node].route;
-	if(dest.zone==faddr[0].zone)	/* Default zone, use default outbound */
-		strcpy(outbound,cfg.outbound);
-	else							/* Inter-zone outbound is OUTBOUND.XXX */
-		sprintf(outbound,"%.*s.%03X\\"
-			,strlen(cfg.outbound)-1,cfg.outbound,dest.zone);
-	if(dest.point) {				/* Point destination is OUTBOUND\*.PNT */
-		sprintf(str,"%04X%04X.PNT"
-			,dest.net,dest.node);
-		strcat(outbound,str); }
-	}
-else
-	strcpy(outbound,cfg.outbound);
-if(outbound[strlen(outbound)-1]=='\\')
-    outbound[strlen(outbound)-1]=0;
-mkdir(outbound);
-strcat(outbound,"\\");
-
-if(node<cfg.nodecfgs)
-	if(cfg.nodecfg[node].arctype==0xffff) {    /* Uncompressed! */
-		if(misc&FLO_MAILER)
-			i=write_flofile(infile,dest);
-		else
-			i=create_netmail(0,infile,"\1FLAGS KFS\r",dest,1);
-		if(i) exit(1);
-		return; }
-
-sprintf(fname,"%s%04hX%04hX.%s",outbound,(short)(faddr[0].net-dest.net)
-	,(short)(faddr[0].node-dest.node),day);
-if(dest.point && !(misc&FLO_MAILER))
-	sprintf(fname,"%s%04hXP%03hX.%s",outbound,0,(short)dest.point,day);
-for(i='0';i<='Z';i++) {
-	if(i==':')
-		i='A';
-	sprintf(str,"%s%c",fname,i);
-	if(flength(str)==0)
-		if(delfile(str))
-			logprintf("ERROR line %d removing %s %s",__LINE__,str
-				,sys_errlist[errno]);
-	if(fexist(str)) {
-		if((p=strrchr(str,'\\'))!=NULL)
-			p++;
-		else
-			p=str;
-		if(flength(str)>=cfg.maxbdlsize)
-			continue;
-		file=sopen(str,O_WRONLY,SH_DENYRW);
-		if(file==-1)		/* Can't open?!? Probably being sent */
-			continue;
-		close(file);
-		if(!attachment(p,dest,2))
-			attachment(p,dest,0);
-		pack(infile,str,dest);
-		if(delfile(infile))
-			logprintf("ERROR line %d removing %s %s",__LINE__,infile
-				,sys_errlist[errno]);
-		return; }
-	else {
-		if(misc&FLO_MAILER)
-			j=write_flofile(str,dest);
-		else {
-			if((p=strrchr(str,'\\'))!=NULL)
-				p++;
-			else
-				p=str;
-			j=attachment(p,dest,0); }
-        if(j)
-            exit(1);
-		pack(infile,str,dest);
-		if(delfile(infile))
-			logprintf("ERROR line %d removing %s %s",__LINE__,infile
-				,sys_errlist[errno]);
-		return; } }
-
-pack(infile,str,dest);	/* Won't get here unless all bundles are full */
-}
-
-/******************************************************************************
- This function checks the inbound directory for the first bundle it finds, it
- will then unpack and delete the bundle.  If no bundles exist this function
- returns a 0, otherwise a 1 is returned.
-******************************************************************************/
-int unpack_bundle(void)
-{
-	char str[256];
-	static char fname[256];
-	int i,j;
-	static struct find_t ff;
-
-for(i=0;i<7;i++) {
-	sprintf(str,"%s*.%s?",secure ? cfg.secure : cfg.inbound
-		,(i==0) ? "SU" : (i==1) ? "MO" : (i==2) ? "TU" : (i==3) ? "WE" : (i==4)
-		? "TH" : (i==5) ? "FR" : "SA");
-	if(!ff.name[0])
-		j=_dos_findfirst(str,0,&ff);
-	else {
-		j=_dos_findnext(&ff);
-		if(j) {
-#ifdef __WATCOMC__
-			_dos_findclose(&ff);
-#endif
-			j=_dos_findfirst(str,0,&ff); } }
-	if(!j) {
-		sprintf(fname,"%s%s",secure ? cfg.secure : cfg.inbound,ff.name);
-		if(unpack(fname)) {
-			if((ddtol(ff.wr_time,ff.wr_date)+(48L*60L*60L))>time(NULL)) {
-				strcpy(str,fname);
-				str[strlen(str)-2]='_';
-				if(fexist(str))
-					str[strlen(str)-2]='-';
-				if(fexist(str))
-					delfile(str);
-				if(rename(fname,str))
-					logprintf("ERROR line %d renaming %s to %s"
-						,__LINE__,fname,str); } }
-		else if(delfile(fname))
-			logprintf("ERROR line %d removing %s %s",__LINE__,fname
-				,sys_errlist[errno]);
-		return(1); } }
-
-#ifdef __WATCOMC__
-_dos_findclose(&ff);
-#endif
-return(0);
-}
-
-
-/******************************************************************************
- Displays characters locally
-******************************************************************************/
-long lputs(char *str)
-{
-    char tmp[256];
-    int i,j,k;
-
-
-j=strlen(str);
-for(i=k=0;i<j;i++)      /* remove CRs */
-    if(str[i]==CR && str[i+1]==LF)
-        continue;
-    else
-        tmp[k++]=str[i];
-tmp[k]=0;
-return(fputs(tmp,stdout));
-}
-
-/******************************************/
-/* CRC-16 routines required for SMB index */
-/******************************************/
-
-/***********************************************)**********************)*****/
-/* Updates 16-bit "rcrc" with character 'ch'                                */
-/****************************************************************************/
-void ucrc16(uchar ch, ushort *rcrc) {
-	ushort i, cy;
-    uchar nch=ch;
- 
-for (i=0; i<8; i++) {
-    cy=*rcrc & 0x8000;
-    *rcrc<<=1;
-    if (nch & 0x80) *rcrc |= 1;
-    nch<<=1;
-    if (cy) *rcrc ^= 0x1021; }
-}
-
-/****************************************************************************/
-/* Returns 16-crc of string (not counting terminating NULL) 				*/
-/****************************************************************************/
-ushort crc16(char *str)
-{
-	int 	i=0;
-	ushort	crc=0;
-
-ucrc16(0,&crc);
-while(str[i])
-	ucrc16(str[i++],&crc);
-ucrc16(0,&crc);
-ucrc16(0,&crc);
-return(crc);
-}
-
-/****************************************************************************/
-/* Performs printf() through local assembly routines                        */
-/* Called from everywhere                                                   */
-/****************************************************************************/
-int lprintf(char *fmat, ...)
-{
-	va_list argptr;
-	char sbuf[256];
-	int chcount;
-
-va_start(argptr,fmat);
-chcount=vsprintf(sbuf,fmat,argptr);
-va_end(argptr);
-lputs(sbuf);
-return(chcount);
-}
-
-/****************************************************************************/
-/* Reads the data for node number 'number' into the structure 'node'        */
-/* from NODE.DAB															*/
-/* if lockit is non-zero, locks this node's record. putnodedat() unlocks it */
-/****************************************************************************/
-void getnodedat(uint number, node_t *node, char lockit)
-{
-	char str[256];
-	int count=0;
-
-number--;	/* make zero based */
-while(count<LOOP_NODEDAB) {
-	lseek(nodefile,(long)number*sizeof(node_t),SEEK_SET);
-	if(lockit
-		&& lock(nodefile,(long)number*sizeof(node_t),sizeof(node_t))==-1) {
-		count++;
-		continue; }
-	if(read(nodefile,node,sizeof(node_t))==sizeof(node_t))
-		break;
-	count++; }
-if(count==LOOP_NODEDAB) {
-	printf("\7ERROR unlocking and reading NODE.DAB\n");
-	logprintf("ERROR line %d unlocking and reading NODE.DAB",__LINE__); }
-}
-
-/****************************************************************************/
-/* Write the data from the structure 'node' into NODE.DAB  					*/
-/* getnodedat(num,&node,1); must have been called before calling this func  */
-/*          NOTE: ------^   the indicates the node record has been locked   */
-/****************************************************************************/
-void putnodedat(uint number, node_t node)
-{
-	char str[256];
-	int count;
-
-number--;	/* make zero based */
-lseek(nodefile,(long)number*sizeof(node_t),SEEK_SET);
-if(write(nodefile,&node,sizeof(node_t))!=sizeof(node_t)) {
-	unlock(nodefile,(long)number*sizeof(node_t),sizeof(node_t));
-	printf("\7ERROR writing NODE.DAB for node %u\n",number+1);
-	logprintf("ERROR line %d writing NODE.DAB for node %u",__LINE__,number+1);
-	return; }
-unlock(nodefile,(long)number*sizeof(node_t),sizeof(node_t));
-}
-
-/****************************************************************************/
-/* Creates a short message for 'usernumber' than contains 'strin'			*/
-/****************************************************************************/
-void putsmsg(int usernumber, char *strin)
-{
-	char str[256];
-	int file,i;
-    node_t node;
-
-sprintf(str,"%sMSGS\\%4.4u.MSG",data_dir,usernumber);
-if((file=nopen(str,O_WRONLY|O_CREAT|O_APPEND))==-1) {
-	printf("\7ERROR opening/creating %s for create/append access\n",str);
-	logprintf("ERROR line %d opening/creating %s",__LINE__,str);
-	return; }
-i=strlen(strin);
-if(write(file,strin,i)!=i) {
-	close(file);
-	printf("\7ERROR writing %u bytes to %s\n",i,str);
-	logprintf("ERROR line %d writing to %s",__LINE__,str);
-	return; }
-close(file);
-for(i=1;i<=sys_nodes;i++) {		/* flag node if user on that msg waiting */
-	getnodedat(i,&node,0);
-	if(node.useron==usernumber
-		&& (node.status==NODE_INUSE || node.status==NODE_QUIET)
-		&& !(node.misc&NODE_MSGW)) {
-		getnodedat(i,&node,1);
-		node.misc|=NODE_MSGW;
-        putnodedat(i,node); } }
-}
-
-/****************************************************************************/
-/* Converts an ASCII Hex string into an ulong                       */
-/****************************************************************************/
-ulong ahtoul(char *str)
-{
-	ulong l,val=0;
-
-while((l=(*str++)|0x20)!=0x20)
-	val=(l&0xf)+(l>>6&1)*9+val*16;
-return(val);
-}
-
-/****************************************************************************/
-/* Truncates white-space chars off end of 'str' and terminates at first tab */
-/****************************************************************************/
-void truncsp(char *str)
-{
-	int c;
-
-c=strlen(str);
-while(c && (uchar)str[c-1]<=SP) c--;
-str[c]=0;
-}
-
-
-void remove_re(char *str)
-{
-while(!strnicmp(str,"RE:",3)) {
-	strcpy(str,str+3);
-	while(str[0]==SP)
-		strcpy(str,str+1); }
-}
-
-/****************************************************************************/
-/* Moves or copies a file from one dir to another                           */
-/* both 'src' and 'dest' must contain full path and filename                */
-/* returns 0 if successful, -1 if error                                     */
-/****************************************************************************/
-int mv(char *src, char *dest, char copy)
-{
-	char buf[4096],str[256];
-	int  ind,outd;
-	long length,chunk=4096,l;
-#ifdef __WATCOMC__
-	unsigned short ftime,fdate;
-#else
-	unsigned ftime,fdate;
-#endif
-    FILE *inp,*outp;
-
-if(!strcmp(src,dest))	/* source and destination are the same! */
-	return(0);
-if(!fexist(src)) {
-	logprintf("MV ERROR: Source doesn't exist '%s",src);
-	return(-1); }
-if(!copy && fexist(dest)) {
-	logprintf("MV ERROR: Destination already exists '%s'",dest);
-	return(-1); }
-if(!copy && ((src[1]!=':' && dest[1]!=':')
-	|| (src[1]==':' && dest[1]==':' && toupper(src[0])==toupper(dest[0])))) {
-	if(rename(src,dest)) {						/* same drive, so move */
-		logprintf("MV ERROR: Error renaming %s to %s",src,dest);
-		return(-1); }
-	return(0); }
-if((ind=nopen(src,O_RDONLY))==-1) {
-	logprintf("MV ERROR: ERR_OPEN %s",src);
-	return(-1); }
-if((inp=fdopen(ind,"rb"))==NULL) {
-	close(ind);
-	logprintf("MV ERROR: ERR_FDOPEN %s",str);
-	return(-1); }
-setvbuf(inp,NULL,_IOFBF,8*1024);
-if((outd=nopen(dest,O_WRONLY|O_CREAT|O_TRUNC))==-1) {
-	fclose(inp);
-	logprintf("MV ERROR: ERR_OPEN %s",dest);
-	return(-1); }
-if((outp=fdopen(outd,"wb"))==NULL) {
-	close(outd);
-	fclose(inp);
-	logprintf("MV ERROR: ERR_FDOPEN %s",str);
-	return(-1); }
-setvbuf(outp,NULL,_IOFBF,8*1024);
-length=filelength(ind);
-l=0L;
-while(l<length) {
-	if(l+chunk>length)
-		chunk=length-l;
-	fread(buf,chunk,1,inp);
-	fwrite(buf,chunk,1,outp);
-	l+=chunk; }
-_dos_getftime(ind,&fdate,&ftime);
-_dos_setftime(outd,fdate,ftime);
-fclose(inp);
-fclose(outp);
-if(!copy && delfile(src)) {
-	logprintf("ERROR line %d removing %s %s",__LINE__,src,sys_errlist[errno]);
-	return(-1); }
-return(0);
-}
-
-/****************************************************************************/
-/* Returns the total number of msgs in the sub-board and sets 'ptr' to the  */
-/* date of the last message in the sub (0) if no messages.					*/
-/****************************************************************************/
-ulong getlastmsg(uint subnum, ulong *ptr, time_t *t)
-{
-	char str[256];
-	int i;
-	smb_t smbfile;
-
-if(subnum>=total_subs) {
-	printf("\nERROR getlastmsg, subnum=%d\n",subnum);
-	logprintf("ERROR line %d getlastmsg %d",__LINE__,subnum);
-	exit(1); }
-sprintf(smbfile.file,"%s%s",sub[subnum]->data_dir,sub[subnum]->code);
-smbfile.retry_time=smb_retry_time;
-if((i=smb_open(&smbfile))!=0) {
-	printf("ERROR %d opening %s\n",i,smbfile.file);
-	logprintf("ERROR %d line %d opening %s",i,__LINE__,smbfile.file);
-	return(0); }
-
-if(!filelength(fileno(smbfile.shd_fp))) {			/* Empty base */
-	if(ptr) (*ptr)=0;
-	smb_close(&smbfile);
-	return(0); }
-#if 0	// Not necessary with SMBLIB v2.0
-if((i=smb_locksmbhdr(&smbfile))!=0) {
-	smb_close(&smbfile);
-	printf("ERROR %d locking %s\n",i,smbfile.file);
-	logprintf("ERROR %d line %d locking %s smbhdr",i,__LINE__
-		,smbfile.file);
-	return(0); }
-if((i=smb_getstatus(&smbfile))!=0) {
-	smb_unlocksmbhdr(&smbfile);
-	smb_close(&smbfile);
-	printf("ERROR %d reading %s\n",i,smbfile.file);
-	logprintf("ERROR %d line %d reading %s",i,__LINE__,smbfile.file);
-	return(0); }
-smb_unlocksmbhdr(&smbfile);
-#endif
-smb_close(&smbfile);
-if(ptr) (*ptr)=smbfile.status.last_msg;
-return(smbfile.status.total_msgs);
-}
-
-
-ulong loadmsgs(post_t HUGE16 **post, ulong ptr)
-{
-	int i;
-	long l=0,total;
-	idxrec_t idx;
-
-
-if((i=smb_locksmbhdr(&smb[cur_smb]))!=0) {
-	printf("ERROR %d locking %s\n",i,smb[cur_smb].file);
-	logprintf("ERROR %d line %d locking %s",i,__LINE__,smb[cur_smb].file);
-	return(0L); }
-
-/* total msgs in sub */
-total=filelength(fileno(smb[cur_smb].sid_fp))/sizeof(idxrec_t);
-
-if(!total) {			/* empty */
-	smb_unlocksmbhdr(&smb[cur_smb]);
-    return(0); }
-
-if(((*post)=(post_t HUGE16 *)LMALLOC(sizeof(post_t)*total))    /* alloc for max */
-	==NULL) {
-	smb_unlocksmbhdr(&smb[cur_smb]);
-	printf("ERROR allocating %lu bytes for %s\n",sizeof(post_t *)*total
-		,smb[cur_smb].file);
-	logprintf("ERROR line %d allocating %lu bytes for %s",__LINE__
-		,sizeof(post_t *)*total,smb[cur_smb].file);
-    return(0); }
-
-fseek(smb[cur_smb].sid_fp,0L,SEEK_SET);
-while(!feof(smb[cur_smb].sid_fp)) {
-	if(!fread(&idx,sizeof(idxrec_t),1,smb[cur_smb].sid_fp))
-        break;
-
-	if(idx.number<=ptr || idx.attr&MSG_DELETE)
-		continue;
-
-	if(idx.attr&MSG_MODERATED && !(idx.attr&MSG_VALIDATED))
-		break;
-
-	(*post)[l].offset=idx.offset;
-	(*post)[l].number=idx.number;
-	(*post)[l].to=idx.to;
-	(*post)[l].from=idx.from;
-    (*post)[l].subj=idx.subj;
-	l++; }
-smb_unlocksmbhdr(&smb[cur_smb]);
-if(!l)
-	LFREE(*post);
-return(l);
-}
-
-void allocfail(uint size)
-{
-printf("\7ERROR allocating %u bytes of memory.\n",size);
-bail(1);
-}
-
-void bail(int code)
-{
-exit(code);
-}
-
-/****************************************************************************/
-/* Returns the length of the file in 'filespec'                             */
-/****************************************************************************/
-long flength(char *filespec)
-{
-	struct find_t f;
-	uint i;
-
-i=_dos_findfirst(filespec,0,&f);
-#ifdef __WATCOMC__
-_dos_findclose(&f);
-#endif
-if(!i)
-	return(f.size);
-return(-1L);
-}
-
-/****************************************************************************/
-/* Checks the disk drive for the existence of a file. Returns 1 if it       */
-/* exists, 0 if it doesn't.                                                 */
-/* Called from upload                                                       */
-/****************************************************************************/
-char fexist(char *filespec)
-{
-	struct find_t f;
-	uint i;
-
-i=_dos_findfirst(filespec,0,&f);
-#ifdef __WATCOMC__
-_dos_findclose(&f);
-#endif
-if(!i)
-    return(1);
-return(0);
-}
-
-typedef struct {
-	ulong	alias,
-			real;
-			} username_t;
-
-/****************************************************************************/
-/* Note: Wrote another version of this function that read all userdata into */
-/****************************************************************************/
-/* Looks for a perfect match amoung all usernames (not deleted users)		*/
-/* Returns the number of the perfect matched username or 0 if no match		*/
-/* Called from functions waitforcall and newuser							*/
-/* memory then scanned it from memory... took longer - always.              */
-/****************************************************************************/
-ulong matchname(char *inname)
-{
-	static ulong total_users;
-	static username_t *username;
-	ulong last_user;
-	int userdat,i;
-	char str[256],name[LEN_NAME+1],alias[LEN_ALIAS+1],c;
-	ulong l,crc;
-
-if(!total_users) {		/* Load CRCs */
-	fprintf(stderr,"\n%-25s","Loading user names...");
-	sprintf(str,"%sUSER\\USER.DAT",data_dir);
-	if((userdat=nopen(str,O_RDONLY|O_DENYNONE))==-1)
-		return(0);
-	last_user=filelength(userdat)/U_LEN;
-	for(total_users=0;total_users<last_user;total_users++) {
-		printf("%5ld\b\b\b\b\b",total_users);
-		if((username=(username_t *)REALLOC(username
-			,(total_users+1L)*sizeof(username_t)))==NULL)
-            break;
-		username[total_users].alias=0;
-		username[total_users].real=0;
-		i=0;
-		while(i<LOOP_NODEDAB
-			&& lock(userdat,(long)((long)(total_users)*U_LEN)+U_ALIAS
-				,LEN_ALIAS+LEN_NAME)==-1)
-			i++;
-		if(i>=LOOP_NODEDAB) {	   /* Couldn't lock USER.DAT record */
-			logprintf("ERROR locking USER.DAT record #%ld",total_users);
-            continue; }
-		lseek(userdat,(long)((long)(total_users)*U_LEN)+U_ALIAS,SEEK_SET);
-		read(userdat,alias,LEN_ALIAS);
-		read(userdat,name,LEN_NAME);
-		lseek(userdat,(long)(((long)total_users)*U_LEN)+U_MISC,SEEK_SET);
-		read(userdat,tmp,8);
-		for(c=0;c<8;c++)
-			if(tmp[c]==ETX || tmp[c]==CR) break;
-		tmp[c]=0;
-		unlock(userdat,(long)((long)(total_users)*U_LEN)+U_ALIAS
-			,LEN_ALIAS+LEN_NAME);
-		if(ahtoul(tmp)&DELETED)
-			continue;
-		for(c=0;c<LEN_ALIAS;c++)
-			if(alias[c]==ETX || alias[c]==CR) break;
-		alias[c]=0;
-		strupr(alias);
-		for(c=0;c<LEN_NAME;c++)
-            if(name[c]==ETX || name[c]==CR) break;
-        name[c]=0;
-        strupr(name);
-		username[total_users].alias=crc32(alias);
-		username[total_users].real=crc32(name); }
-	close(userdat);
-	fprintf(stderr,"     \b\b\b\b\b");  // Clear counter
-	fprintf(stderr,
-		"\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"
-		"%25s"
-		"\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"
-		,""); }
-
-strcpy(str,inname);
-strupr(str);
-crc=crc32(str);
-for(l=0;l<total_users;l++)
-	if((crc==username[l].alias || crc==username[l].real))
-		return(l+1);
-return(0);
-}
-
-/****************************************************************************/
-/* Converts goofy FidoNet time format into Unix format						*/
-/****************************************************************************/
-time_t fmsgtime(char *str)
-{
-	char month[4];
-	struct tm tm;
-
-memset(&tm,0,sizeof(tm));
-if(isdigit(str[1])) {	/* Regular format: "01 Jan 86  02:34:56" */
-	tm.tm_mday=atoi(str);
-	sprintf(month,"%3.3s",str+3);
-	if(!stricmp(month,"jan"))
-		tm.tm_mon=0;
-	else if(!stricmp(month,"feb"))
-		tm.tm_mon=1;
-	else if(!stricmp(month,"mar"))
-		tm.tm_mon=2;
-	else if(!stricmp(month,"apr"))
-		tm.tm_mon=3;
-	else if(!stricmp(month,"may"))
-		tm.tm_mon=4;
-	else if(!stricmp(month,"jun"))
-		tm.tm_mon=5;
-	else if(!stricmp(month,"jul"))
-		tm.tm_mon=6;
-	else if(!stricmp(month,"aug"))
-		tm.tm_mon=7;
-	else if(!stricmp(month,"sep"))
-		tm.tm_mon=8;
-	else if(!stricmp(month,"oct"))
-		tm.tm_mon=9;
-	else if(!stricmp(month,"nov"))
-		tm.tm_mon=10;
-	else
-		tm.tm_mon=11;
-	tm.tm_year=atoi(str+7);
-	if(tm.tm_year<Y2K_2DIGIT_WINDOW)
-		tm.tm_year+=100;
-	tm.tm_hour=atoi(str+11);
-	tm.tm_min=atoi(str+14);
-	tm.tm_sec=atoi(str+17); }
-
-else {					/* SEAdog  format: "Mon  1 Jan 86 02:34" */
-	tm.tm_mday=atoi(str+4);
-	sprintf(month,"%3.3s",str+7);
-	if(!stricmp(month,"jan"))
-		tm.tm_mon=0;
-	else if(!stricmp(month,"feb"))
-		tm.tm_mon=1;
-	else if(!stricmp(month,"mar"))
-		tm.tm_mon=2;
-	else if(!stricmp(month,"apr"))
-		tm.tm_mon=3;
-	else if(!stricmp(month,"may"))
-		tm.tm_mon=4;
-	else if(!stricmp(month,"jun"))
-		tm.tm_mon=5;
-	else if(!stricmp(month,"jul"))
-		tm.tm_mon=6;
-	else if(!stricmp(month,"aug"))
-		tm.tm_mon=7;
-	else if(!stricmp(month,"sep"))
-		tm.tm_mon=8;
-	else if(!stricmp(month,"oct"))
-		tm.tm_mon=9;
-	else if(!stricmp(month,"nov"))
-		tm.tm_mon=10;
-	else
-		tm.tm_mon=11;
-	tm.tm_year=atoi(str+11);
-	if(tm.tm_year<Y2K_2DIGIT_WINDOW)
-		tm.tm_year+=100;
-	tm.tm_hour=atoi(str+14);
-	tm.tm_min=atoi(str+17);
-	tm.tm_sec=0; }
-return(mktime(&tm));
-}
-
-#if 1		/* Old way */
-
-char HUGE16 *getfmsg(FILE *stream, ulong *outlen)
-{
-	uchar HUGE16 *fbuf;
-	int ch;
-	ulong l,length,start;
-
-length=0L;
-start=ftell(stream);						/* Beginning of Message */
-while(1) {
-	ch=fgetc(stream);						/* Look for Terminating NULL */
-	if(!ch || ch==EOF)						/* Found end of message */
-		break;
-	length++; } 							/* Increment the Length */
-
-if((fbuf=(char *)LMALLOC(length+1))==NULL) {
-	printf("Unable to allocate %lu bytes for message.\n",length+1);
-	logprintf("ERROR line %d allocating %lu bytes of memory",__LINE__,length+1);
-	exit(0); }
-
-fseek(stream,start,SEEK_SET);
-for(l=0;l<length;l++)
-	fbuf[l]=fgetc(stream);
-fbuf[length]=0;
-if(!ch)
-	fgetc(stream);		/* Read NULL */
-if(outlen)
-	*outlen=length;
-return(fbuf);
-}
-
-#else
-
-#define FBUF_BLOCK 4096
-
-char *getfmsg(FILE *stream)
-{
-	uchar *fbuf,*p;
-	ulong l,n,length,start;
-
-length=0L;
-start=ftell(stream);						/* Beginning of Message */
-if((fbuf=LMALLOC(FBUF_BLOCK))==NULL)
-	return(fbuf);
-while(!feof(stream)) {
-	l=fread(fbuf+length,1,FBUF_BLOCK,stream);
-	if(l<1)
-		break;
-	*(fbuf+length+l)=0;
-	n=strlen(fbuf+length);
-	if(n<l) {
-		length+=(n+1);
-		break; }
-	printf(",");
-	length+=l;
-	if(l<FBUF_BLOCK)
-		break;
-	printf("<");
-	if((p=REALLOC(fbuf,length+FBUF_BLOCK+1))==NULL) {
-		LFREE(fbuf);
-		printf("!");
-		fseek(stream,-l,SEEK_CUR);
-		return(NULL); }
-	fbuf=p;
-	printf(">");
-	}
-printf(".");
-
-fseek(stream,start+length,SEEK_SET);
-return(fbuf);
-}
-
-#endif
-
-#define MAX_TAILLEN 1024
-
-/****************************************************************************/
-/* Coverts a FidoNet message into a Synchronet message						*/
-/* Returns 1 on success, 0 on failure, -1 on dupe.							*/
-/****************************************************************************/
-int fmsgtosmsg(uchar HUGE16 *fbuf, fmsghdr_t fmsghdr, uint user, uint subnum)
-{
-	uchar	ch,HUGE16 *sbody,HUGE16 *stail,HUGE16 *outbuf
-			,done,col,esc,cr,*p,str[128];
-	int 	i,chunk,lzh=0,storage;
-	ushort	xlat,net;
-	ulong	l,m,length,lzhlen,bodylen,taillen,crc;
-	faddr_t faddr,origaddr,destaddr;
-	smbmsg_t	msg;
-	smb_t	*smbfile;
-
-memset(&msg,0,sizeof(smbmsg_t));
-memcpy(msg.hdr.id,"SHD\x1a",4);
-msg.hdr.version=smb_ver();
-if(fmsghdr.attr&FIDO_PRIVATE)
-	msg.idx.attr|=MSG_PRIVATE;
-msg.hdr.attr=msg.idx.attr;
-
-if(fmsghdr.attr&FIDO_FILE)
-	msg.hdr.auxattr|=MSG_FILEATTACH;
-
-msg.hdr.when_imported.time=time(NULL);
-msg.hdr.when_imported.zone=sys_timezone;
-msg.hdr.when_written.time=fmsgtime(fmsghdr.time);
-
-origaddr.zone=fmsghdr.origzone; 	/* only valid if NetMail */
-origaddr.net=fmsghdr.orignet;
-origaddr.node=fmsghdr.orignode;
-origaddr.point=fmsghdr.origpoint;
-
-destaddr.zone=fmsghdr.destzone; 	/* only valid if NetMail */
-destaddr.net=fmsghdr.destnet;
-destaddr.node=fmsghdr.destnode;
-destaddr.point=fmsghdr.destpoint;
-
-smb_hfield(&msg,SENDER,strlen(fmsghdr.from),fmsghdr.from);
-strlwr(fmsghdr.from);
-if(subnum==INVALID_SUB)
-	msg.idx.from=0;
-else
-	msg.idx.from=crc16(fmsghdr.from);
-
-smb_hfield(&msg,RECIPIENT,strlen(fmsghdr.to),fmsghdr.to);
-strlwr(fmsghdr.to);
-msg.idx.to=crc16(fmsghdr.to);
-
-if(user) {
-	sprintf(str,"%u",user);
-	smb_hfield(&msg,RECIPIENTEXT,strlen(str),str);
-	msg.idx.to=user; }
-
-smb_hfield(&msg,SUBJECT,strlen(fmsghdr.subj),fmsghdr.subj);
-remove_re(fmsghdr.subj);
-strlwr(fmsghdr.subj);
-msg.idx.subj=crc16(fmsghdr.subj);
-if(fbuf==NULL) {
-	printf("ERROR allocating fbuf\n");
-	logprintf("ERROR line %d allocating fbuf",__LINE__);
-	smb_freemsgmem(&msg);
-	return(0); }
-length=strlen((char *)fbuf);
-if((sbody=(char HUGE16 *)LMALLOC((length+1)*2))==NULL) {
-	printf("ERROR allocating %lu bytes for body",(length+1)*2L);
-	logprintf("ERROR line %d allocating %lu bytes for body",__LINE__
-		,(length+1)*2L);
-	smb_freemsgmem(&msg);
-	return(0); }
-if((stail=(char HUGE16 *)LMALLOC(MAX_TAILLEN))==NULL) {
-	printf("ERROR allocating %lu bytes\n",MAX_TAILLEN);
-	logprintf("ERROR line %d allocating %lu bytes for tail",__LINE__
-		,MAX_TAILLEN);
-	LFREE(sbody);
-	smb_freemsgmem(&msg);
-	return(0); }
-
-for(col=l=esc=done=bodylen=taillen=0,cr=1;l<length;l++) {
-
-	if(!l && !strncmp((char *)fbuf,"AREA:",5)) {
-        l+=5;
-        while(l<length && fbuf[l]<=SP) l++;
-        m=l;
-        while(m<length && fbuf[m]!=CR) m++;
-        while(m && fbuf[m-1]<=SP) m--;
-        if(m>l)
-            smb_hfield(&msg,FIDOAREA,m-l,fbuf+l);
-        while(l<length && fbuf[l]!=CR) l++;
-        continue; }
-
-	ch=fbuf[l];
-	if(ch==1 && cr) {	/* kludge line */
-
-		if(!strncmp((char *)fbuf+l+1,"TOPT ",5))
-			destaddr.point=atoi((char *)fbuf+l+6);
-
-		else if(!strncmp((char *)fbuf+l+1,"FMPT ",5))
-			origaddr.point=atoi((char *)fbuf+l+6);
-
-		else if(!strncmp((char *)fbuf+l+1,"INTL ",5)) {
-			faddr=atofaddr((char *)fbuf+l+6);
-			destaddr.zone=faddr.zone;
-			destaddr.net=faddr.net;
-			destaddr.node=faddr.node;
-			l+=6;
-			while(l<length && fbuf[l]!=SP) l++;
-			faddr=atofaddr((char *)fbuf+l+1);
-			origaddr.zone=faddr.zone;
-			origaddr.net=faddr.net;
-			origaddr.node=faddr.node; }
-
-		else if(!strncmp((char *)fbuf+l+1,"MSGID:",6)) {
-			l+=7;
-			while(l<length && fbuf[l]<=SP) l++;
-			m=l;
-			while(m<length && fbuf[m]!=CR) m++;
-			while(m && fbuf[m-1]<=SP) m--;
-			if(m>l)
-				smb_hfield(&msg,FIDOMSGID,m-l,fbuf+l); }
-
-		else if(!strncmp((char *)fbuf+l+1,"REPLY:",6)) {
-			l+=7;
-			while(l<length && fbuf[l]<=SP) l++;
-			m=l;
-			while(m<length && fbuf[m]!=CR) m++;
-			while(m && fbuf[m-1]<=SP) m--;
-			if(m>l)
-				smb_hfield(&msg,FIDOREPLYID,m-l,fbuf+l); }
-
-		else if(!strncmp((char *)fbuf+l+1,"FLAGS:",6)) {
-			l+=7;
-			while(l<length && fbuf[l]<=SP) l++;
-			m=l;
-			while(m<length && fbuf[m]!=CR) m++;
-			while(m && fbuf[m-1]<=SP) m--;
-			if(m>l)
-				smb_hfield(&msg,FIDOFLAGS,m-l,fbuf+l); }
-
-		else if(!strncmp((char *)fbuf+l+1,"PATH:",5)) {
-			l+=6;
-			while(l<length && fbuf[l]<=SP) l++;
-			m=l;
-			while(m<length && fbuf[m]!=CR) m++;
-			while(m && fbuf[m-1]<=SP) m--;
-			if(m>l && misc&STORE_PATH)
-				smb_hfield(&msg,FIDOPATH,m-l,fbuf+l); }
-
-		else if(!strncmp((char *)fbuf+l+1,"PID:",4)) {
-			l+=5;
-			while(l<length && fbuf[l]<=SP) l++;
-			m=l;
-			while(m<length && fbuf[m]!=CR) m++;
-			while(m && fbuf[m-1]<=SP) m--;
-			if(m>l)
-				smb_hfield(&msg,FIDOPID,m-l,fbuf+l); }
-
-		else {		/* Unknown kludge line */
-			while(l<length && fbuf[l]<=SP) l++;
-			m=l;
-			while(m<length && fbuf[m]!=CR) m++;
-			while(m && fbuf[m-1]<=SP) m--;
-			if(m>l && misc&STORE_KLUDGE)
-				smb_hfield(&msg,FIDOCTRL,m-l,fbuf+l); }
-
-		while(l<length && fbuf[l]!=CR) l++;
-		continue; }
-
-	if(ch!=LF && ch!=0x8d) {	/* ignore LF and soft CRs */
-		if(cr && (!strncmp((char *)fbuf+l,"--- ",4)
-			|| !strncmp((char *)fbuf+l,"---\r",4)))
-			done=1; 			/* tear line and down go into tail */
-		if(done && cr && !strncmp((char *)fbuf+l,"SEEN-BY:",8)) {
-			l+=8;
-			while(l<length && fbuf[l]<=SP) l++;
-			m=l;
-			while(m<length && fbuf[m]!=CR) m++;
-			while(m && fbuf[m-1]<=SP) m--;
-			if(m>l && misc&STORE_SEENBY)
-				smb_hfield(&msg,FIDOSEENBY,m-l,fbuf+l);
-			while(l<length && fbuf[l]!=CR) l++;
-			continue; }
-		if(done) {
-			if(taillen<MAX_TAILLEN)
-				stail[taillen++]=ch; }
-		else
-			sbody[bodylen++]=ch;
-		col++;
-		if(ch==CR) {
-			cr=1;
-			col=0;
-			if(done) {
-				if(taillen<MAX_TAILLEN)
-					stail[taillen++]=LF; }
-			else
-				sbody[bodylen++]=LF; }
-		else {
-			cr=0;
-			if(col==1 && !strncmp((char *)fbuf+l," * Origin: ",11)) {
-				p=(char *)fbuf+l+11;
-				while(*p && *p!=CR) p++;	 /* Find CR */
-				while(p && *p!='(') p--;     /* rewind to '(' */
-				if(p)
-					origaddr=atofaddr(p+1); 	/* get orig address */
-				done=1; }
-			if(done)
-				continue;
-
-			if(ch==ESC) esc=1;		/* ANSI codes */
-			if(ch==SP && col>40 && !esc) {	/* word wrap */
-				for(m=l+1;m<length;m++) 	/* find next space */
-					if(fbuf[m]<=SP)
-						break;
-				if(m<length && m-l>80-col) {  /* if it's beyond the eol */
-					sbody[bodylen++]=CR;
-					sbody[bodylen++]=LF;
-					col=0; } }
-			} } }
-
-if(bodylen>=2 && sbody[bodylen-2]==CR && sbody[bodylen-1]==LF)
-	bodylen-=2; 						/* remove last CRLF if present */
-
-if(smb[cur_smb].status.max_crcs) {
-	for(l=0,crc=0xffffffff;l<bodylen;l++)
-		crc=ucrc32(sbody[l],crc);
-	crc=~crc;
-	i=smb_addcrc(&smb[cur_smb],crc);
-	if(i) {
-		if(i==1)
-			printf("Duplicate ");
-		else
-			printf("smb_addcrc returned %d ",i);
-		smb_freemsgmem(&msg);
-		LFREE(sbody);
-		LFREE(stail);
-		if(i==1)
-			return(-1);
-		return(0); } }
-
-while(taillen && stail[taillen-1]<=SP)	/* trim all garbage off the tail */
-	taillen--;
-
-if(!origaddr.zone && subnum==INVALID_SUB)
-	net=NET_NONE;						/* Message from SBBSecho */
-else
-	net=NET_FIDO;						/* Record origin address */
-
-if(net) {
-	smb_hfield(&msg,SENDERNETTYPE,sizeof(ushort),&net);
-	smb_hfield(&msg,SENDERNETADDR,sizeof(fidoaddr_t),&origaddr); }
-
-if(subnum==INVALID_SUB) {
-	smbfile=email;
-	if(net) {
-		smb_hfield(&msg,RECIPIENTNETTYPE,sizeof(ushort),&net);
-		smb_hfield(&msg,RECIPIENTNETADDR,sizeof(fidoaddr_t),&destaddr); } }
-else
-	smbfile=&smb[cur_smb];
-
-if(subnum!=INVALID_SUB && sub[subnum]->misc&SUB_LZH
-	&& bodylen+2L+taillen+2L>=SDT_BLOCK_LEN && bodylen) {
-	if((outbuf=(char *)LMALLOC(bodylen*2L))==NULL) {
-		printf("ERROR allocating %lu bytes for lzh\n",bodylen*2);
-		logprintf("ERROR line %d allocating %lu bytes for lzh",__LINE__
-			,bodylen*2);
-		smb_freemsgmem(&msg);
-		LFREE(sbody);
-		LFREE(stail);
-		return(0); }
-	lzhlen=lzh_encode((uchar *)sbody,bodylen,(uchar *)outbuf);
-	if(lzhlen>1 &&
-		smb_datblocks(lzhlen+4L+taillen+2L)<
-		smb_datblocks(bodylen+2L+taillen+2L)) {
-		bodylen=lzhlen; 	/* Compressable */
-		l=bodylen+4;
-		LFREE(sbody);
-		lzh=1;
-		sbody=outbuf; }
-	else {					/* Uncompressable */
-		l=bodylen+2;
-		LFREE(outbuf); } }
-else
-    l=bodylen+2;
-
-if(taillen)
-	l+=(taillen+2);
-
-if(l&0xfff00000) {
-	printf("ERROR checking msg len %lu\n",l);
-	logprintf("ERROR line %d checking msg len %lu",__LINE__,l);
-	smb_freemsgmem(&msg);
-	LFREE(sbody);
-	LFREE(stail);
-	return(0); }
-
-if(smbfile->status.attr&SMB_HYPERALLOC) {
-	if((i=smb_locksmbhdr(smbfile))!=0) {
-		printf("ERROR %d locking %s\n",i,smbfile->file);
-		logprintf("ERROR %d line %d locking %s",i,__LINE__,smbfile->file);
-		smb_freemsgmem(&msg);
-		LFREE(sbody);
-		LFREE(stail);
-		return(0); }
-	msg.hdr.offset=smb_hallocdat(smbfile);
-	storage=SMB_HYPERALLOC; }
-else {
-	if((i=smb_open_da(smbfile))!=0) {
-		smb_freemsgmem(&msg);
-		printf("ERROR %d opening %s.SDA\n",i,smbfile->file);
-		logprintf("ERROR %d line %d opening %s.SDA",i,__LINE__
-			,smbfile->file);
-		LFREE(sbody);
-		LFREE(stail);
-		return(0); }
-	if(subnum!=INVALID_SUB && sub[subnum]->misc&SUB_FAST) {
-		msg.hdr.offset=smb_fallocdat(smbfile,l,1);
-		storage=SMB_FASTALLOC; }
-	else {
-		msg.hdr.offset=smb_allocdat(smbfile,l,1);
-		storage=SMB_SELFPACK; }
-	smb_close_da(smbfile); }
-
-if(msg.hdr.offset && msg.hdr.offset<1L) {
-	if(smbfile->status.attr&SMB_HYPERALLOC)
-		smb_unlocksmbhdr(smbfile);
-	smb_freemsgmem(&msg);
-	LFREE(sbody);
-	LFREE(stail);
-	printf("ERROR %ld allocating records\n",msg.hdr.offset);
-	logprintf("ERROR line %d %ld allocating records",__LINE__,msg.hdr.offset);
-	return(0); }
-fseek(smbfile->sdt_fp,msg.hdr.offset,SEEK_SET);
-if(lzh) {
-	xlat=XLAT_LZH;
-	fwrite(&xlat,2,1,smbfile->sdt_fp); }
-xlat=XLAT_NONE;
-fwrite(&xlat,2,1,smbfile->sdt_fp);
-chunk=30000;
-for(l=0;l<bodylen;l+=chunk) {
-	if(l+chunk>bodylen)
-		chunk=bodylen-l;
-	fwrite(sbody+l,1,chunk,smbfile->sdt_fp); }
-if(taillen) {
-	fwrite(&xlat,2,1,smbfile->sdt_fp);
-	fwrite(stail,1,taillen,smbfile->sdt_fp); }
-LFREE(sbody);
-LFREE(stail);
-fflush(smbfile->sdt_fp);
-if(smbfile->status.attr&SMB_HYPERALLOC)
-	smb_unlocksmbhdr(smbfile);
-
-if(lzh)
-	bodylen+=2;
-bodylen+=2;
-smb_dfield(&msg,TEXT_BODY,bodylen);
-if(taillen)
-	smb_dfield(&msg,TEXT_TAIL,taillen+2);
-
-i=smb_addmsghdr(smbfile,&msg,storage);
-smb_freemsgmem(&msg);
-if(i) {
-	printf("ERROR smb_addmsghdr returned %d\n",i);
-	logprintf("ERROR line %d smb_addmsghdr returned %d"
-		,__LINE__,i);
-	return(0); }
-return(1);
-}
-
-/***********************************************************************/
-/* Get zone and point from kludge lines from the stream  if they exist */
-/***********************************************************************/
-void getzpt(FILE *stream, fmsghdr_t *hdr)
-{
-	char buf[0x1000];
-	int i,len,cr=0;
-	long pos;
-	faddr_t faddr;
-
-pos=ftell(stream);
-len=fread(buf,1,0x1000,stream);
-for(i=0;i<len;i++) {
-	if((!i || cr) && buf[i]==1) {	/* kludge */
-		if(!strncmp(buf+i+1,"TOPT ",5))
-			hdr->destpoint=atoi(buf+i+6);
-		else if(!strncmp(buf+i+1,"FMPT ",5))
-			hdr->origpoint=atoi(buf+i+6);
-		else if(!strncmp(buf+i+1,"INTL ",5)) {
-			faddr=atofaddr(buf+i+6);
-			hdr->destzone=faddr.zone;
-			hdr->destnet=faddr.net;
-			hdr->destnode=faddr.node;
-			i+=6;
-			while(buf[i] && buf[i]!=SP) i++;
-			faddr=atofaddr(buf+i+1);
-			hdr->origzone=faddr.zone;
-			hdr->orignet=faddr.net;
-			hdr->orignode=faddr.node; }
-		while(i<len && buf[i]!=CR) i++;
-		cr=1;
-		continue; }
-	if(buf[i]==CR)
-		cr=1;
-	else
-		cr=0; }
-fseek(stream,pos,SEEK_SET);
-}
-/******************************************************************************
- This function will seek to the next NULL found in stream
-******************************************************************************/
-void seektonull(FILE *stream)
-{
-	char ch;
-
-while(!feof(stream)) {
-	if(!fread(&ch,1,1,stream))
-		break;
-	if(!ch)
-		break; }
-
-}
-
-/******************************************************************************
- This function returns a packet name - used for outgoing packets
-******************************************************************************/
-char *pktname(void)
-{
-	static char str[128];
-	int i;
-    time_t now;
-    struct tm *tm;
-
-now=time(NULL);
-for(i=0;i<MAX_TOTAL_PKTS*2;i++) {
-	now+=i;
-	tm=gmtime(&now);
-	sprintf(str,"%s%02u%02u%02u%02u.PK_",cfg.outbound,tm->tm_mday,tm->tm_hour
-		,tm->tm_min,tm->tm_sec);
-	if(!fexist(str))				/* Add 1 second if name exists */
-		break; }
-return(str);
-}
-/******************************************************************************
- This function puts a message into a Fido packet, writing both the header
- information and the message body
-******************************************************************************/
-void putfmsg(FILE *stream,uchar HUGE16 *fbuf,fmsghdr_t fmsghdr,areasbbs_t area
-	,addrlist_t seenbys,addrlist_t paths)
-{
-	char str[256],seenby[256],*p;
-	short i,j,lastlen=0,net_exists=0;
-	faddr_t addr,sysaddr;
-
-addr=getsysfaddr(fmsghdr.destzone);
-
-i=0x0002;
-fwrite(&i,2,1,stream);
-fwrite(&addr.node,2,1,stream);
-fwrite(&fmsghdr.destnode,2,1,stream);
-fwrite(&addr.net,2,1,stream);
-fwrite(&fmsghdr.destnet,2,1,stream);
-fwrite(&fmsghdr.attr,2,1,stream);
-fwrite(&fmsghdr.cost,2,1,stream);
-fwrite(fmsghdr.time,strlen(fmsghdr.time)+1,1,stream);
-fwrite(fmsghdr.to,strlen(fmsghdr.to)+1,1,stream);
-fwrite(fmsghdr.from,strlen(fmsghdr.from)+1,1,stream);
-fwrite(fmsghdr.subj,strlen(fmsghdr.subj)+1,1,stream);
-if(area.name)
-	if(strncmp((char *)fbuf,"AREA:",5))                     /* No AREA: Line */
-		fprintf(stream,"AREA:%s\r",area.name);              /* So add one */
-fwrite(fbuf,strlen((char *)fbuf),1,stream);
-lastlen=9;
-if(fbuf[strlen((char *)fbuf)-1]!=CR)
-	fputc(CR,stream);
-
-if(area.name && addr.zone!=fmsghdr.destzone)	/* Zone Gate */
-	fprintf(stream,"SEEN-BY: %d/%d\r",fmsghdr.destnet,fmsghdr.destnode);
-
-if(area.name && addr.zone==fmsghdr.destzone) {	/* Not NetMail */
-	fprintf(stream,"SEEN-BY:");
-	for(i=0;i<seenbys.addrs;i++) {			  /* Put back original SEEN-BYs */
-		strcpy(seenby," ");
-		if(seenbys.addr[i].zone!=addr.zone)
-			continue;
-		if(seenbys.addr[i].net!=addr.net || !net_exists) {
-			net_exists=1;
-			addr.net=seenbys.addr[i].net;
-			sprintf(str,"%d/",addr.net);
-			strcat(seenby,str); }
-		sprintf(str,"%d",seenbys.addr[i].node);
-		strcat(seenby,str);
-		if(lastlen+strlen(seenby)<80) {
-			fwrite(seenby,strlen(seenby),1,stream);
-			lastlen+=strlen(seenby); }
-		else {
-			--i;
-			lastlen=9; /* +strlen(seenby); */
-			net_exists=0;
-			fprintf(stream,"\rSEEN-BY:"); } }
-
-	for(i=0;i<area.uplinks;i++) {			/* Add all uplinks to SEEN-BYs */
-		strcpy(seenby," ");
-		if(area.uplink[i].zone!=addr.zone || area.uplink[i].point)
-			continue;
-		for(j=0;j<seenbys.addrs;j++)
-			if(!memcmp(&area.uplink[i],&seenbys.addr[j],sizeof(faddr_t)))
-				break;
-		if(j==seenbys.addrs) {
-			if(area.uplink[i].net!=addr.net || !net_exists) {
-				net_exists=1;
-				addr.net=area.uplink[i].net;
-				sprintf(str,"%d/",addr.net);
-				strcat(seenby,str); }
-			sprintf(str,"%d",area.uplink[i].node);
-			strcat(seenby,str);
-			if(lastlen+strlen(seenby)<80) {
-				fwrite(seenby,strlen(seenby),1,stream);
-				lastlen+=strlen(seenby); }
-			else {
-				--i;
-				lastlen=9; /* +strlen(seenby); */
-				net_exists=0;
-				fprintf(stream,"\rSEEN-BY:"); } } }
-
-	for(i=0;i<total_faddrs;i++) {				/* Add AKAs to SEEN-BYs */
-		strcpy(seenby," ");
-		if(faddr[i].zone!=addr.zone || faddr[i].point)
-			continue;
-		for(j=0;j<seenbys.addrs;j++)
-			if(!memcmp(&faddr[i],&seenbys.addr[j],sizeof(faddr_t)))
-				break;
-		if(j==seenbys.addrs) {
-			if(faddr[i].net!=addr.net || !net_exists) {
-				net_exists=1;
-				addr.net=faddr[i].net;
-				sprintf(str,"%d/",addr.net);
-				strcat(seenby,str); }
-			sprintf(str,"%d",faddr[i].node);
-			strcat(seenby,str);
-			if(lastlen+strlen(seenby)<80) {
-				fwrite(seenby,strlen(seenby),1,stream);
-				lastlen+=strlen(seenby); }
-			else {
-				--i;
-				lastlen=9; /* +strlen(seenby); */
-				net_exists=0;
-				fprintf(stream,"\rSEEN-BY:"); } } }
-
-	lastlen=7;
-	net_exists=0;
-	fprintf(stream,"\r\1PATH:");
-	addr=getsysfaddr(fmsghdr.destzone);
-	for(i=0;i<paths.addrs;i++) {			  /* Put back the original PATH */
-		strcpy(seenby," ");
-		if(paths.addr[i].zone!=addr.zone || paths.addr[i].point)
-			continue;
-		if(paths.addr[i].net!=addr.net || !net_exists) {
-			net_exists=1;
-			addr.net=paths.addr[i].net;
-			sprintf(str,"%d/",addr.net);
-			strcat(seenby,str); }
-		sprintf(str,"%d",paths.addr[i].node);
-		strcat(seenby,str);
-		if(lastlen+strlen(seenby)<80) {
-			fwrite(seenby,strlen(seenby),1,stream);
-			lastlen+=strlen(seenby); }
-		else {
-			--i;
-			lastlen=7; /* +strlen(seenby); */
-			net_exists=0;
-			fprintf(stream,"\r\1PATH:"); } }
-
-	strcpy(seenby," ");         /* Add first address with same zone to PATH */
-	sysaddr=getsysfaddr(fmsghdr.destzone);
-	if(!sysaddr.point) {
-		if(sysaddr.net!=addr.net || !net_exists) {
-			net_exists=1;
-			addr.net=sysaddr.net;
-			sprintf(str,"%d/",addr.net);
-			strcat(seenby,str); }
-		sprintf(str,"%d",sysaddr.node);
-		strcat(seenby,str);
-		if(lastlen+strlen(seenby)<80)
-			fwrite(seenby,strlen(seenby),1,stream);
-		else {
-			fprintf(stream,"\r\1PATH:");
-			fwrite(seenby,strlen(seenby),1,stream); } }
-
-	fputc(CR,stream); }
-
-fputc(0,stream);
-}
-
-/******************************************************************************
- This function creates a binary list of the message seen-bys and path from
- inbuf.
-******************************************************************************/
-void gen_psb(addrlist_t *seenbys,addrlist_t *paths,char HUGE16 *inbuf
-	,ushort zone)
-{
-	char str[128],seenby[256],*p,*p1,*p2,HUGE16 *fbuf;
-	int i,j,len;
-	faddr_t addr;
-
-if(!inbuf)
-	return;
-fbuf=strstr((char *)inbuf,"\r * Origin: ");
-if(!fbuf)
-fbuf=strstr((char *)inbuf,"\n * Origin: ");
-if(!fbuf)
-	fbuf=inbuf;
-if(seenbys->addr) {
-	FREE(seenbys->addr);
-	seenbys->addr=0;
-	seenbys->addrs=0; }
-addr.zone=addr.net=addr.node=addr.point=seenbys->addrs=0;
-p=strstr((char *)fbuf,"\rSEEN-BY:");
-if(!p) p=strstr((char *)fbuf,"\nSEEN-BY:");
-if(p) {
-	while(1) {
-		sprintf(str,"%-.100s",p+10);
-		if((p1=strchr(str,CR))!=NULL)
-			*p1=0;
-		p1=str;
-		i=j=0;
-		len=strlen(str);
-		while(i<len) {
-			j=i;
-			while(i<len && *(p1+i)!=SP)
-				++i;
-			if(j>len)
-				break;
-			sprintf(seenby,"%-.*s",(i-j),p1+j);
-			if((p2=strchr(seenby,':'))!=NULL) {
-				addr.zone=atoi(seenby);
-				addr.net=atoi(p2+1); }
-			else if((p2=strchr(seenby,'/'))!=NULL)
-				addr.net=atoi(seenby);
-			if((p2=strchr(seenby,'/'))!=NULL)
-				addr.node=atoi(p2+1);
-			else
-				addr.node=atoi(seenby);
-			if((p2=strchr(seenby,'.'))!=NULL)
-				addr.point=atoi(p2+1);
-			if(!addr.zone)
-				addr.zone=zone; 		/* Was 1 */
-			if((seenbys->addr=(faddr_t *)REALLOC(seenbys->addr
-				,sizeof(faddr_t)*(seenbys->addrs+1)))==NULL) {
-				printf("ERROR allocating memory for seenbys\n");
-				logprintf("ERROR line %d allocating memory for message "
-					"seenbys.",__LINE__);
-				exit(1); }
-			memcpy(&seenbys->addr[seenbys->addrs],&addr,sizeof(faddr_t));
-			seenbys->addrs++;
-			++i; }
-		p1=strstr(p+10,"\rSEEN-BY:");
-		if(!p1)
-			p1=strstr(p+10,"\nSEEN-BY:");
-		if(!p1)
-			break;
-		p=p1; } }
-else {
-	if((seenbys->addr=(faddr_t *)REALLOC(seenbys->addr
-		,sizeof(faddr_t)))==NULL) {
-		printf("ERROR allocating memory for seenbys\n");
-		logprintf("ERROR line %d allocating memory for message seenbys."
-			,__LINE__);
-		exit(1); }
-	memset(&seenbys->addr[0],0,sizeof(faddr_t)); }
-
-if(paths->addr) {
-	FREE(paths->addr);
-	paths->addr=0;
-	paths->addrs=0; }
-addr.zone=addr.net=addr.node=addr.point=paths->addrs=0;
-if((p=strstr((char *)fbuf,"\1PATH:"))!=NULL) {
-	while(1) {
-		sprintf(str,"%-.100s",p+7);
-		if((p1=strchr(str,CR))!=NULL)
-			*p1=0;
-		p1=str;
-		i=j=0;
-		len=strlen(str);
-		while(i<len) {
-			j=i;
-			while(i<len && *(p1+i)!=SP)
-				++i;
-			if(j>len)
-				break;
-			sprintf(seenby,"%-.*s",(i-j),p1+j);
-			if((p2=strchr(seenby,':'))!=NULL) {
-				addr.zone=atoi(seenby);
-				addr.net=atoi(p2+1); }
-			else if((p2=strchr(seenby,'/'))!=NULL)
-				addr.net=atoi(seenby);
-			if((p2=strchr(seenby,'/'))!=NULL)
-				addr.node=atoi(p2+1);
-			else
-                addr.node=atoi(seenby);
-			if((p2=strchr(seenby,'.'))!=NULL)
-				addr.point=atoi(p2+1);
-			if(!addr.zone)
-				addr.zone=zone; 		/* Was 1 */
-			if((paths->addr=(faddr_t *)REALLOC(paths->addr
-				,sizeof(faddr_t)*(paths->addrs+1)))==NULL) {
-				printf("ERROR allocating memory for paths\n");
-				logprintf("ERROR line %d allocating memory for message "
-					"paths.",__LINE__);
-				exit(1); }
-			memcpy(&paths->addr[paths->addrs],&addr,sizeof(faddr_t));
-			paths->addrs++;
-			++i; }
-		if((p1=strstr(p+7,"\1PATH:"))==NULL)
-			break;
-		p=p1; } }
-else {
-	if((paths->addr=(faddr_t *)REALLOC(paths->addr
-		,sizeof(faddr_t)))==NULL) {
-		printf("ERROR allocating memory for paths\n");
-		logprintf("ERROR line %d allocating memory for message paths."
-			,__LINE__);
-		exit(1); }
-	memset(&paths->addr[0],0,sizeof(faddr_t)); }
-}
-
-/******************************************************************************
- This function takes the addrs passed to it and compares them to the address
- passed in inaddr.	1 is returned if inaddr matches any of the addrs
- otherwise a 0 is returned.
-******************************************************************************/
-char check_psb(addrlist_t addrlist,faddr_t inaddr)
-{
-	int i;
-
-for(i=0;i<addrlist.addrs;i++) {
-	if(!memcmp(&addrlist.addr[i],&inaddr,sizeof(faddr_t)))
-		return(1); }
-return(0);
-}
-/******************************************************************************
- This function strips the message seen-bys and path from inbuf.
-******************************************************************************/
-void strip_psb(char HUGE16 *inbuf)
-{
-	char *p,HUGE16 *fbuf;
-
-if(!inbuf)
-	return;
-fbuf=strstr((char *)inbuf,"\r * Origin: ");
-if(!fbuf)
-	fbuf=inbuf;
-if((p=strstr((char *)fbuf,"\rSEEN-BY:"))!=NULL)
-	*(p)=0;
-if((p=strstr((char *)fbuf,"\r\1PATH:"))!=NULL)
-	*(p)=0;
-}
-void attach_bundles()
-{
-	FILE *fidomsg;
-	char str[1025],path[512],packet[128];
-	int fmsg;
-	ulong l;
-	faddr_t pkt_faddr;
-	pkthdr_t pkthdr;
-	struct find_t ff;
-
-sprintf(path,"%s*.PK_",cfg.outbound);
-for(l=_dos_findfirst(path,0,&ff);!l && !kbhit();l=_dos_findnext(&ff)) {
-	sprintf(packet,"%s%s",cfg.outbound,ff.name);
-	printf("%21s: %s ","Outbound Packet",packet);
-	if((fmsg=sopen(packet,O_RDWR,SH_DENYRW))==-1) {
-		printf("ERROR opening.\n");
-		logprintf("ERROR line %d opening %s",__LINE__,packet);
-		continue; }
-	if((fidomsg=fdopen(fmsg,"r+b"))==NULL) {
-		close(fmsg);
-		printf("\7ERROR fdopening.\n");
-		logprintf("ERROR line %d fdopening %s",__LINE__,packet);
-		continue; }
-	if(filelength(fmsg)<sizeof(pkthdr_t)) {
-		printf("ERROR invalid length of %u bytes for %s\n",filelength(fmsg)
-			,packet);
-		logprintf("ERROR line %d invalid length of %u bytes for %s"
-			,__LINE__,filelength(fmsg),packet);
-		fclose(fidomsg);
-		if(delfile(packet))
-			logprintf("ERROR line %d removing %s %s",__LINE__,packet
-				,sys_errlist[errno]);
-		continue; }
-	if(fread(&pkthdr,sizeof(pkthdr_t),1,fidomsg)!=1) {
-		fclose(fidomsg);
-		printf("\7ERROR reading %u bytes from %s\n",sizeof(pkthdr_t),packet);
-		logprintf("ERROR line %d reading %u bytes from %s",__LINE__
-			,sizeof(pkthdr_t),packet);
-		continue; }
-	fseek(fidomsg,-2L,SEEK_END);
-	fread(str,2,1,fidomsg);
-	fclose(fidomsg);
-	if(!str[0] && !str[1]) {	/* Check for two nulls at end of packet */
-		pkt_faddr.zone=pkthdr.destzone;
-		pkt_faddr.net=pkthdr.destnet;
-		pkt_faddr.node=pkthdr.destnode;
-		pkt_faddr.point=0;				/* No point info in the 2.0 hdr! */
-		memcpy(&two_plus,&pkthdr.empty,20);
-		if(two_plus.cword==_rotr(two_plus.cwcopy,8)  /* 2+ Packet Header */
-			&& two_plus.cword && two_plus.cword&1)
-			pkt_faddr.point=two_plus.destpoint;
-		else if(pkthdr.baud==2) {				/* Type 2.2 Packet Header */
-			memcpy(&two_two,&pkthdr.empty,20);
-			pkt_faddr.point=pkthdr.month; }
-		printf("Sending to %s\n",faddrtoa(pkt_faddr));
-		pack_bundle(packet,pkt_faddr); }
-	else {
-		fclose(fidomsg);
-        printf("Possibly still in use\n"); } }
-#ifdef __WATCOMC__
-_dos_findclose(&ff);
-#endif
-}
-/******************************************************************************
- This is where we put outgoing messages into packets.  Set the 'cleanup'
- parameter to 1 to force all the remaining packets closed and stuff them into
- a bundle.
-******************************************************************************/
-void pkt_to_pkt(uchar HUGE16 *fbuf,areasbbs_t area,faddr_t faddr
-	,fmsghdr_t fmsghdr,addrlist_t seenbys,addrlist_t paths,char cleanup)
-{
-	int i,j,k,file;
-	short node;
-	time_t now;
-	struct tm *tm;
-	pkthdr_t pkthdr;
-	static ushort openpkts,totalpkts;
-	static outpkt_t outpkt[MAX_TOTAL_PKTS];
-	faddr_t sysaddr;
-	two_two_t two;
-	two_plus_t two_p;
-
-
-if(cleanup==1) {
-	for(i=0;i<totalpkts;i++) {
-		if(i>=MAX_TOTAL_PKTS) {
-			printf("MAX_TOTAL_PKTS (%d) REACHED!\n",MAX_TOTAL_PKTS);
-			logprintf("MAX_TOTAL_PKTS (%d) REACHED!\n",MAX_TOTAL_PKTS);
-			break;
-		}
-		if(outpkt[i].curopen) {
-			fputc(0,outpkt[i].stream);
-			fputc(0,outpkt[i].stream);
-			fclose(outpkt[i].stream); }
-		else {
-			if((outpkt[i].stream=fnopen(&file,outpkt[i].filename
-				,O_WRONLY|O_APPEND))==NULL) {
-				printf("ERROR opening %s for write.\n",outpkt[i].filename);
-				logprintf("ERROR line %d opening %s %s",__LINE__
-					,outpkt[i].filename,sys_errlist[errno]);
-				continue; }
-			fputc(0,outpkt[i].stream);
-			fputc(0,outpkt[i].stream);
-			fclose(outpkt[i].stream); }
-//		  pack_bundle(outpkt[i].filename,outpkt[i].uplink);
-		memset(&outpkt[i],0,sizeof(outpkt_t)); }
-	totalpkts=openpkts=0;
-	attach_bundles();
-	attachment(0,faddr,1);
-	return; }
-
-if(fbuf==NULL) {
-	printf("ERROR allocating fbuf\n");
-	logprintf("ERROR line %d allocating fbuf",__LINE__);
-    return; }
-/* We want to see if there's already a packet open for this area.   */
-/* If not, we'll open a new one.  Once we have a packet, we'll add  */
-/* messages to it as they come in.	If necessary, we'll close an    */
-/* open packet to open a new one.									*/
-
-for(j=0;j<area.uplinks;j++) {
-	if((cleanup==2 && memcmp(&faddr,&area.uplink[j],sizeof(faddr_t))) ||
-		(!cleanup && (!memcmp(&faddr,&area.uplink[j],sizeof(faddr_t)) ||
-		check_psb(seenbys,area.uplink[j]))))
-		continue;
-	node=matchnode(area.uplink[j],0);
-	if(node<cfg.nodecfgs && cfg.nodecfg[node].attr&ATTR_PASSIVE)
-		continue;
-	sysaddr=getsysfaddr(area.uplink[j].zone);
-	printf("%s ",faddrtoa(area.uplink[j]));
-	for(i=0;i<totalpkts;i++) {
-		if(i>=MAX_TOTAL_PKTS) {
-			printf("MAX_TOTAL_PKTS (%d) REACHED!\n",MAX_TOTAL_PKTS);
-			logprintf("MAX_TOTAL_PKTS (%d) REACHED!\n",MAX_TOTAL_PKTS);
-			break;
-        }
-		if(!memcmp(&area.uplink[j],&outpkt[i].uplink,sizeof(faddr_t))) {
-			if(!outpkt[i].curopen) {
-				if(openpkts==DFLT_OPEN_PKTS)
-					for(k=0;k<totalpkts;k++) {
-						if(outpkt[k].curopen) {
-							fclose(outpkt[k].stream);
-							outpkt[k].curopen=0;
-							break; } }
-				if((outpkt[i].stream=fnopen(&file,outpkt[i].filename
-					,O_WRONLY|O_APPEND))==NULL) {
-					printf("Unable to open %s for write.\n"
-						,outpkt[i].filename);
-					logprintf("ERROR line %d opening %s %s",__LINE__
-						,outpkt[i].filename,sys_errlist[errno]);
-					exit(1); }
-				outpkt[i].curopen=1; }
-			if((strlen((char *)fbuf)+1+ftell(outpkt[i].stream))
-				<=cfg.maxpktsize) {
-				fmsghdr.destnode=area.uplink[j].node;
-				fmsghdr.destnet=area.uplink[j].net;
-				fmsghdr.destzone=area.uplink[j].zone;
-				putfmsg(outpkt[i].stream,fbuf,fmsghdr,area,seenbys,paths); }
-			else {
-				fputc(0,outpkt[i].stream);
-				fputc(0,outpkt[i].stream);
-				fclose(outpkt[i].stream);
-//				  pack_bundle(outpkt[i].filename,outpkt[i].uplink);
-				outpkt[i].stream=outpkt[totalpkts-1].stream;
-				memcpy(&outpkt[i],&outpkt[totalpkts-1],sizeof(outpkt_t));
-				memset(&outpkt[totalpkts-1],0,sizeof(outpkt_t));
-				--totalpkts;
-				--openpkts;
-				i=totalpkts; }
-			break; } }
-		if(i==totalpkts) {
-			if(openpkts==DFLT_OPEN_PKTS)
-				for(k=0;k<totalpkts;k++) {
-					if(outpkt[k].curopen) {
-						fclose(outpkt[k].stream);
-						outpkt[k].curopen=0;
-						--openpkts;
-						break; } }
-			strcpy(outpkt[i].filename,pktname());
-			now=time(NULL);
-			tm=gmtime(&now);
-			if((outpkt[i].stream=fnopen(&file,outpkt[i].filename
-				,O_WRONLY|O_CREAT))==NULL) {
-				printf("Unable to open %s for write.\n"
-					,outpkt[i].filename);
-				logprintf("ERROR line %d opening %s %s"
-					,__LINE__,outpkt[i].filename,sys_errlist[errno]);
-				exit(1); }
-			pkthdr.orignode=sysaddr.node;
-			fmsghdr.destnode=pkthdr.destnode=area.uplink[j].node;
-			if(node<cfg.nodecfgs && cfg.nodecfg[node].pkt_type==PKT_TWO_TWO) {
-				pkthdr.year=sysaddr.point;
-				pkthdr.month=area.uplink[j].point;
-				pkthdr.day=0;
-				pkthdr.hour=0;
-				pkthdr.min=0;
-				pkthdr.sec=0;
-				pkthdr.baud=0x0002; }
-			else {
-				pkthdr.year=tm->tm_year+1900;
-				pkthdr.month=tm->tm_mon;
-				pkthdr.day=tm->tm_mday;
-				pkthdr.hour=tm->tm_hour;
-				pkthdr.min=tm->tm_min;
-				pkthdr.sec=tm->tm_sec;
-				pkthdr.baud=0; 
-			}
-			pkthdr.pkttype=0x0002;
-			pkthdr.orignet=sysaddr.net;
-			fmsghdr.destnet=pkthdr.destnet=area.uplink[j].net;
-			pkthdr.prodcode=0;
-			pkthdr.sernum=0;
-			if(node<cfg.nodecfgs)
-				memcpy(pkthdr.password,cfg.nodecfg[node].pktpwd,8);
-			else
-				memset(pkthdr.password,0,8);
-			pkthdr.origzone=sysaddr.zone;
-			fmsghdr.destzone=pkthdr.destzone=area.uplink[j].zone;
-			memset(pkthdr.empty,0,sizeof(two_two_t));
-
-			if(node<cfg.nodecfgs) {
-				if(cfg.nodecfg[node].pkt_type==PKT_TWO_TWO) {
-					memset(&two,0,20);
-					strcpy(two.origdomn,"fidonet");
-					strcpy(two.destdomn,"fidonet");
-					memcpy(&pkthdr.empty,&two,20); }
-				else if(cfg.nodecfg[node].pkt_type==PKT_TWO_PLUS) {
-					memset(&two_p,0,20);
-					if(sysaddr.point) {
-						pkthdr.orignet=-1;
-						two_p.auxnet=sysaddr.net; }
-					two_p.cwcopy=0x0100;
-					two_p.prodcode=pkthdr.prodcode;
-					two_p.revision=pkthdr.sernum;
-					two_p.cword=0x0001;
-					two_p.origzone=pkthdr.origzone;
-					two_p.destzone=pkthdr.destzone;
-					two_p.origpoint=sysaddr.point;
-					two_p.destpoint=area.uplink[j].point;
-					memcpy(&pkthdr.empty,&two_p,sizeof(two_plus_t)); 
-				}
-			}
-
-			fwrite(&pkthdr,sizeof(pkthdr_t),1,outpkt[totalpkts].stream);
-			putfmsg(outpkt[totalpkts].stream,fbuf,fmsghdr,area,seenbys,paths);
-			outpkt[totalpkts].curopen=1;
-			memcpy(&outpkt[totalpkts].uplink,&area.uplink[j]
-				,sizeof(faddr_t));
-			++openpkts;
-			++totalpkts;
-			if(totalpkts>=MAX_TOTAL_PKTS) {
-				fclose(outpkt[totalpkts-1].stream);
-//				  pack_bundle(outpkt[totalpkts-1].filename
-//					  ,outpkt[totalpkts-1].uplink);
-				--totalpkts;
-				--openpkts; }
-			} }
-}
-
-/**************************************/
-/* Send netmail, returns 0 on success */
-/**************************************/
-int import_netmail(char *path,fmsghdr_t hdr, FILE *fidomsg)
-{
-	uchar info[512],str[256],tmp[256],subj[256]
-		,HUGE16 *fmsgbuf=NULL,*p,*tp,*sp;
-	int i,match,usernumber;
-	ulong l;
-	faddr_t addr;
-
-hdr.destzone=hdr.origzone=sys_faddr.zone;
-hdr.destpoint=hdr.origpoint=0;
-getzpt(fidomsg,&hdr);				/* use kludge if found */
-for(match=0;match<total_faddrs;match++)
-	if((hdr.destzone==faddr[match].zone || misc&FUZZY_ZONE)
-		&& hdr.destnet==faddr[match].net
-		&& hdr.destnode==faddr[match].node
-		&& hdr.destpoint==faddr[match].point)
-		break;
-if(match<total_faddrs && misc&FUZZY_ZONE)
-	hdr.origzone=hdr.destzone=faddr[match].zone;
-if(hdr.origpoint)
-	sprintf(tmp,".%u",hdr.origpoint);
-else
-	tmp[0]=0;
-if(hdr.destpoint)
-	sprintf(str,".%u",hdr.destpoint);
-else
-	str[0]=0;
-sprintf(info,"%s%s%s (%u:%u/%u%s) To: %s (%u:%u/%u%s)"
-	,path,path[0] ? " ":""
-	,hdr.from,hdr.origzone,hdr.orignet,hdr.orignode,tmp
-	,hdr.to,hdr.destzone,hdr.destnet,hdr.destnode,str);
-printf("%s ",info);
-
-if(!(misc&IMPORT_NETMAIL)) {
-	if(!path[0]) {
-		fmsgbuf=getfmsg(fidomsg,&l);
-		if(!fmsgbuf) {
-			printf("ERROR Netmail allocation");
-			logprintf("ERROR line %d netmail allocation",__LINE__);
-			return(2); }
-
-		if(!l && misc&KILL_EMPTY_MAIL)
-			printf("Empty NetMail - ");
-		else {
-			for(i=1;i;i++) {
-				sprintf(str,"%s%u.MSG",netmail_dir,i);
-				if(!fexist(str))
-					break; }
-			if(!i) {
-				printf("Too many netmail messages");
-				logprintf("Too many netmail messages");
-				return(2); }
-			if((i=nopen(str,O_WRONLY|O_CREAT))==-1) {
-				printf("ERROR opening %s",str);
-				logprintf("ERROR opening %s",str);
-				return(2); }
-			write(i,&hdr,sizeof(hdr));
-			write(i,fmsgbuf,strlen((char *)fmsgbuf)+1); /* Write the NULL too */
-			close(i); }
-		FREE(fmsgbuf); }
-	printf("Ignored");
-	if(cfg.log&LOG_IGNORED)
-		logprintf("%s Ignored",info);
-	return(-1); }
-
-if(hdr.attr&FIDO_ORPHAN) {
-	printf("Orphaned");
-    return(1); }
-if(!(misc&IGNORE_ADDRESS) && match==total_faddrs && path[0]) {
-	printf("Skipped");
-	return(2); }
-if(!(misc&IGNORE_RECV) && hdr.attr&FIDO_RECV) {
-	printf("Already received");
-	return(3); }
-if(hdr.attr&FIDO_LOCAL && !(misc&LOCAL_NETMAIL)) {
-	printf("Created locally");
-	return(4); }
-
-if(email->shd_fp==NULL) {
-	sprintf(email->file,"%sMAIL",data_dir);
-	email->retry_time=smb_retry_time;
-	if((i=smb_open(email))!=0) {
-		printf("ERROR %d opening %s\n",i,email->file);
-		logprintf("ERROR %d line %d opening %s",i,__LINE__,email->file);
-		exit(1); } }
-
-if(!filelength(fileno(email->shd_fp))) {
-	email->status.max_crcs=mail_maxcrcs;
-	email->status.max_msgs=MAX_SYSMAIL;
-	email->status.max_age=mail_maxage;
-	email->status.attr=SMB_EMAIL;
-	if((i=smb_create(email))!=0) {
-		sprintf(str,"ERROR %d creating %s",i,email->file);
-        printf("%s\n",str);
-        logprintf(str);
-		exit(1); } }
-
-if(!stricmp(hdr.to,"AREAFIX") || !stricmp(hdr.to,"SBBSECHO")) {
-	fmsgbuf=getfmsg(fidomsg,NULL);
-	if(path[0]) {
-		if(misc&DELETE_NETMAIL) {
-			fclose(fidomsg);
-			if(delfile(path))
-				logprintf("ERROR line %d removing %s %s",__LINE__,path
-					,sys_errlist[errno]); }
-		else {
-			hdr.attr|=FIDO_RECV;
-			fseek(fidomsg,0L,SEEK_SET);
-			fwrite(&hdr,sizeof(fmsghdr_t),1,fidomsg);
-			fclose(fidomsg); } }	/* Gotta close it here for areafix stuff */
-	addr.zone=hdr.origzone;
-	addr.net=hdr.orignet;
-	addr.node=hdr.orignode;
-	addr.point=hdr.origpoint;
-	strcpy(hdr.to,sys_op);
-	strcpy(hdr.from,"SBBSecho");
-	strcpy(str,hdr.subj);
-	strcpy(hdr.subj,"Areafix Request");
-	hdr.origzone=hdr.orignet=hdr.orignode=hdr.origpoint=0;
-	p=process_areafix(addr,fmsgbuf,str);
-#if 0 // Not necessary with SMBLIB v2.0
-	if((i=smb_locksmbhdr(email))!=0) {
-		printf("ERROR %d locking %s smbhdr",i,email->file);
-		logprintf("ERROR %d line %d locking %s smbhdr",i,__LINE__,email->file);
-		exit(1); }
-	if((i=smb_getstatus(email))!=0) {
-		printf("ERROR %d reading %s status header",i,email->file);
-		logprintf("ERROR %d line %d reading %s status header",i,__LINE__
-			,email->file);
-		exit(1); }
-#endif
-	if(p && cfg.notify)
-		if(fmsgtosmsg(p,hdr,cfg.notify,INVALID_SUB)==1) {
-			sprintf(str,"\7\1n\1hSBBSecho \1n\1msent you mail\r\n");
-			putsmsg(cfg.notify,str); }
-//	  smb_unlocksmbhdr(email);
-	if(fmsgbuf)
-		FREE(fmsgbuf);
-	if(cfg.log&LOG_AREAFIX)
-		logprintf(info);
-	return(-2); }
-
-usernumber=atoi(hdr.to);
-if(!stricmp(hdr.to,"SYSOP"))  /* NetMail to "sysop" goes to #1 */
-	usernumber=1;
-if(!usernumber && match<total_faddrs)
-	usernumber=matchname(hdr.to);
-if(!usernumber) {
-	if(misc&UNKNOWN_NETMAIL && match<total_faddrs)	/* receive unknown user */
-		usernumber=1;								/* mail to 1 */
-	else {
-		if(match<total_faddrs) {
-			printf("Unknown user ");
-			if(cfg.log&LOG_UNKNOWN)
-				logprintf("%s Unknown user",info); }
-/***
-		hdr.attr|=FIDO_ORPHAN;
-		fseek(fidomsg,0L,SEEK_SET);
-		fwrite(&hdr,sizeof(fmsghdr_t),1,fidomsg);
-***/
-		if(!path[0]) {
-			fmsgbuf=getfmsg(fidomsg,&l);
-			if(!fmsgbuf) {
-				printf("ERROR Netmail allocation");
-				logprintf("ERROR line %d netmail allocation",__LINE__);
-				return(2); }
-			if(!l && misc&KILL_EMPTY_MAIL) {
-				printf("Empty NetMail - Ignored");
-				if(cfg.log&LOG_IGNORED)
-					logprintf("%s Empty - Ignored",info); }
-			else {
-				for(i=1;i;i++) {
-					sprintf(str,"%s%u.MSG",netmail_dir,i);
-					if(!fexist(str))
-						break; }
-				if(!i) {
-					printf("Too many netmail messages");
-					logprintf("Too many netmail messages");
-					return(2); }
-				if((i=nopen(str,O_WRONLY|O_CREAT))==-1) {
-					printf("ERROR opening %s",str);
-					logprintf("ERROR opening %s",str);
-					return(2); }
-				write(i,&hdr,sizeof(hdr));
-				write(i,fmsgbuf,strlen((char *)fmsgbuf)+1); /* Write the NULL too */
-				close(i); }
-			FREE(fmsgbuf); }
-		return(2); } }
-
-/*********************/
-/* Importing NetMail */
-/*********************/
-
-fmsgbuf=getfmsg(fidomsg,&l);
-
-#if 0 // Unnecessary with SMBLIB v2.0
-if((i=smb_locksmbhdr(email))!=0) {
-	printf("ERROR %d locking %s smbhdr",i,email->file);
-	logprintf("ERROR %d line %d locking %s smbhdr",i,__LINE__,email->file);
-    exit(1); }
-if((i=smb_getstatus(email))!=0) {
-	printf("ERROR %d reading %s status header",i,email->file);
-	logprintf("ERROR %d line %d reading %s status header"
-		,i,__LINE__,email->file);
-    exit(1); }
-#endif
-
-if(!l && misc&KILL_EMPTY_MAIL) {
-	printf("Empty NetMail - Ignored");
-	if(cfg.log&LOG_IGNORED)
-		logprintf("%s Empty - Ignored",info);
-	if(fmsgbuf)
-		FREE(fmsgbuf);
-	return(0); }
-
-i=fmsgtosmsg(fmsgbuf,hdr,usernumber,INVALID_SUB);
-if(i!=1) {
-	printf("ERROR (%d) Importing",i);
-	logprintf("ERROR (%d) Importing %s",i,info);
-	if(fmsgbuf)
-		FREE(fmsgbuf);
-	return(10); }
-
-addr.zone=hdr.origzone;
-addr.net=hdr.orignet;
-addr.node=hdr.orignode;
-addr.point=hdr.origpoint;
-sprintf(str,"\7\1n\1hSBBSecho: \1m%.36s \1n\1msent you NetMail from "
-	"\1h%s\1n\r\n",hdr.from,faddrtoa(addr));
-putsmsg(usernumber,str);
-
-if(hdr.attr&FIDO_FILE) {	/* File attachment */
-	strcpy(subj,hdr.subj);
-	tp=subj;
-	while(1) {
-		p=strchr(tp,SP);
-		if(p) *p=0;
-		sp=strrchr(tp,'/');              /* sp is slash pointer */
-		if(!sp) sp=strrchr(tp,'\\');
-		if(sp) tp=sp+1;
-		sprintf(str,"%s%s",fidofile_dir,tp);
-		sprintf(tmp,"%sFILE\\%04u.IN",data_dir,usernumber);
-		mkdir(tmp);
-		strcat(tmp,"\\");
-		strcat(tmp,tp);
-		mv(str,tmp,0);
-		if(!p)
-			break;
-		tp=p+1; } }
-netmail++;
-
-if(fmsgbuf)
-	FREE(fmsgbuf);
-
-/***************************/
-/* Updating message header */
-/***************************/
-/***	NOT packet compatible
-if(!(misc&DONT_SET_RECV)) {
-	hdr.attr|=FIDO_RECV;
-	fseek(fidomsg,0L,SEEK_SET);
-	fwrite(&hdr,sizeof(fmsghdr_t),1,fidomsg); }
-***/
-if(cfg.log&LOG_IMPORTED)
-	logprintf("%s Imported",info);
-return(0);
-}
-
-/******************************************************************************
- This is where we export echomail.	This was separated from function main so
- it could be used for the remote rescan function.  Passing anything but an
- empty address as 'addr' designates that a rescan should be done for that
- address.
-******************************************************************************/
-void export_echomail(char *sub_code,faddr_t addr)
-{
-	char str[1025],tear,cr,HUGE16 *buf;
-	uchar HUGE16 *fmsgbuf=NULL;
-	int g,i,j,k,file;
-	ulong f,l,m,exp,ptr,msgs,lastmsg,posts,exported=0;
-	float export_time;
-	smbmsg_t msg;
-	fmsghdr_t hdr;
-	struct	tm *tm;
-	faddr_t pkt_faddr;
-	post_t HUGE16 *post;
-	areasbbs_t fakearea,curarea;
-	addrlist_t msg_seen,msg_path;
-    clock_t start_tick=0,export_ticks=0;
-
-memset(&msg_seen,0,sizeof(addrlist_t));
-memset(&msg_path,0,sizeof(addrlist_t));
-memset(&pkt_faddr,0,sizeof(faddr_t));
-start_tick=0;
-
-printf("\nScanning for Outbound EchoMail...\n");
-
-for(g=0;g<total_grps;g++)
-for(i=0;i<total_subs;i++)
-	if(sub[i]->misc&SUB_FIDO && sub[i]->grp==g) {
-		for(j=0;j<cfg.areas;j++)	/* Skip areas with no uplinks */
-			if(cfg.area[j].sub==i)
-				break;
-		if(j==cfg.areas || (j<cfg.areas && !cfg.area[j].uplinks))
-			continue;
-		if(addr.zone) { 		/* Skip areas not meant for this address */
-			if(j<cfg.areas)
-				for(k=0;k<cfg.area[j].uplinks;k++)
-					if(!memcmp(&cfg.area[j].uplink[k],&addr,sizeof(faddr_t)))
-						break;
-			if(k==cfg.area[j].uplinks)
-				continue; }
-		if(sub_code[0] && stricmp(sub_code,sub[i]->code))
-            continue;
-		printf("\nScanning %-15.15s %s\n"
-			,grp[sub[i]->grp]->sname,sub[i]->lname);
-		ptr=0;
-		if(!addr.zone && !(misc&IGNORE_MSGPTRS)) {
-			sprintf(str,"%s%s.SFP",sub[i]->data_dir,sub[i]->code);
-			if((file=nopen(str,O_RDONLY))!=-1) {
-				read(file,&ptr,sizeof(time_t));
-				close(file); } }
-
-		msgs=getlastmsg(i,&lastmsg,0);
-		if(!msgs || (!addr.zone && !(misc&IGNORE_MSGPTRS) && ptr>=lastmsg)) {
-			printf("No new messages.");
-			if(ptr>lastmsg && !addr.zone && !(misc&LEAVE_MSGPTRS)) {
-				printf("Fixing new-scan pointer.");
-                sprintf(str,"%s%s.SFP",sub[i]->data_dir,sub[i]->code);
-				if((file=nopen(str,O_WRONLY|O_CREAT))==-1) {
-					printf("\7ERROR opening/creating %s",str);
-					logprintf("ERROR line %d opening/creating %s"
-						,__LINE__,str); }
-				else {
-					write(file,&lastmsg,4);
-					close(file); } }
-			continue; }
-
-		sprintf(smb[cur_smb].file,"%s%s"
-			,sub[i]->data_dir,sub[i]->code);
-		smb[cur_smb].retry_time=smb_retry_time;
-		if((j=smb_open(&smb[cur_smb]))!=0) {
-			printf("ERROR %d opening %s\n",j,smb[cur_smb].file);
-			logprintf("ERROR %d line %d opening %s",j,__LINE__
-				,smb[cur_smb].file);
-			continue; }
-
-		post=NULL;
-		posts=loadmsgs(&post,ptr);
-
-		if(!posts)	{ /* no new messages */
-			smb_close(&smb[cur_smb]);
-			if(post)
-				LFREE(post);
-			continue; }
-
-		if(start_tick)
-			export_ticks+=clock()-start_tick;
-        start_tick=clock();
-
-		for(m=exp=0;m<posts;m++) {
-			printf("\r%8s %5lu of %-5lu  "
-				,sub[i]->code,m+1,posts);
-			msg.idx.offset=post[m].offset;
-			if((k=smb_lockmsghdr(&smb[cur_smb],&msg))!=0) {
-				printf("ERROR %d locking %s msghdr\n",k,smb[cur_smb].file);
-				logprintf("ERROR %d line %d locking %s msghdr\n"
-					,k,__LINE__,smb[cur_smb].file);
-				continue; }
-			k=smb_getmsghdr(&smb[cur_smb],&msg);
-			if(k || msg.hdr.number!=post[m].number) {
-				smb_unlockmsghdr(&smb[cur_smb],&msg);
-				smb_freemsgmem(&msg);
-
-				msg.hdr.number=post[m].number;
-				if((k=smb_getmsgidx(&smb[cur_smb],&msg))!=0) {
-					printf("ERROR %d reading %s index\n",k,smb[cur_smb].file);
-					logprintf("ERROR %d line %d reading %s index",k,__LINE__
-						,smb[cur_smb].file);
-					continue; }
-				if((k=smb_lockmsghdr(&smb[cur_smb],&msg))!=0) {
-					printf("ERROR %d locking %s msghdr\n",k,smb[cur_smb].file);
-					logprintf("ERROR %d line %d locking %s msghdr",k,__LINE__
-						,smb[cur_smb].file);
-					continue; }
-				if((k=smb_getmsghdr(&smb[cur_smb],&msg))!=0) {
-					smb_unlockmsghdr(&smb[cur_smb],&msg);
-					printf("ERROR %d reading %s msghdr\n",k,smb[cur_smb].file);
-					logprintf("ERROR %d line %d reading %s msghdr",k,__LINE__
-						,smb[cur_smb].file);
-					continue; } }
-
-			if((!addr.zone && !(misc&EXPORT_ALL)
-				&& msg.from_net.type==NET_FIDO)
-				|| !strnicmp(msg.subj,"NE:",3)) {   /* no echo */
-				smb_unlockmsghdr(&smb[cur_smb],&msg);
-				smb_freemsgmem(&msg);
-				continue; }  /* From a Fido node, ignore it */
-
-			if(msg.from_net.type && msg.from_net.type!=NET_FIDO
-				&& !(sub[i]->misc&SUB_GATE)) {
-				smb_unlockmsghdr(&smb[cur_smb],&msg);
-				smb_freemsgmem(&msg);
-				continue; }
-
-			memset(&hdr,0,sizeof(fmsghdr_t));	 /* Zero the header */
-			hdr.origzone=sub[i]->faddr.zone;
-			hdr.orignet=sub[i]->faddr.net;
-			hdr.orignode=sub[i]->faddr.node;
-			hdr.origpoint=sub[i]->faddr.point;
-
-			hdr.attr=FIDO_LOCAL;
-			if(msg.hdr.attr&MSG_PRIVATE)
-				hdr.attr|=FIDO_PRIVATE;
-
-			sprintf(hdr.from,"%.35s",msg.from);
-
-			tm=gmtime((time_t *)&msg.hdr.when_written.time);
-			sprintf(hdr.time,"%02u %3.3s %02u  %02u:%02u:%02u"
-				,tm->tm_mday,mon[tm->tm_mon],TM_YEAR(tm->tm_year)
-				,tm->tm_hour,tm->tm_min,tm->tm_sec);
-
-			sprintf(hdr.to,"%.35s",msg.to);
-
-			sprintf(hdr.subj,"%.71s",msg.subj);
-
-			buf=smb_getmsgtxt(&smb[cur_smb],&msg,GETMSGTXT_TAILS);
-			if(!buf) {
-				smb_unlockmsghdr(&smb[cur_smb],&msg);
-				smb_freemsgmem(&msg);
-				continue; }
-			fmsgbuf=MALLOC(strlen((char *)buf)+512);
-			if(!fmsgbuf) {
-				printf("ERROR allocating %lu bytes for fmsgbuf\n");
-				logprintf("ERROR line %d allocating %lu bytes for fmsgbuf"
-					,__LINE__,strlen((char *)buf)+512);
-				smb_unlockmsghdr(&smb[cur_smb],&msg);
-				smb_freemsgmem(&msg);
-				continue; }
-
-			tear=0;
-			for(l=f=0,cr=1;buf[l];l++) {
-				if(buf[l]==1) { /* Ctrl-A, so skip it and the next char */
-					l++;
-					if(!buf[l])
-						break;
-					continue; }
-				if(buf[l]==LF)	/* Ignore line feeds */
-					continue;
-				if(cr) {
-					if(buf[l]=='-' && buf[l+1]=='-'
-						&& buf[l+2]=='-'
-						&& (buf[l+3]==SP || buf[l+3]==CR)) {
-						if(misc&CONVERT_TEAR)	/* Convert to === */
-							buf[l]=buf[l+1]=buf[l+2]='=';
-						else
-							tear=1; }
-					else if(!strncmp((char *)buf+l," * Origin: ",11))
-						buf[l+1]='#'; } /* Convert * Origin into # Origin */
-
-				if(buf[l]==CR)
-					cr=1;
-				else
-					cr=0;
-				if(sub[i]->misc&SUB_ASCII || misc&ASCII_ONLY) {
-					if(buf[l]<SP && buf[l]!=CR) /* Ctrl ascii */
-						buf[l]='.';             /* converted to '.' */
-					if((uchar)buf[l]>0x7f)		/* extended ASCII */
-						buf[l]='*'; }           /* converted to '*' */
-
-				fmsgbuf[f++]=buf[l]; }
-
-			FREE(buf);
-			fmsgbuf[f]=0;
-
-			if(!(sub[i]->misc&SUB_NOTAG)) {
-				if(!tear) {  /* No previous tear line */
-					sprintf(str,"--- Synchronet+SBBSecho v%s\r",SBBSECHO_VER);
-					strcat((char *)fmsgbuf,str); }
-
-				sprintf(str," * Origin: %s (%s)\r"
-					,sub[i]->origline[0] ? sub[i]->origline : origline
-					,faddrtoa(sub[i]->faddr));
-				strcat((char *)fmsgbuf,str); }
-
-			for(k=0;k<cfg.areas;k++)
-				if(cfg.area[k].sub==i) {
-					cfg.area[k].exported++;
-					pkt_to_pkt(fmsgbuf,cfg.area[k]
-						,(addr.zone) ? addr:pkt_faddr,hdr,msg_seen
-						,msg_path,(addr.zone) ? 2:0);
-					break; }
-			FREE(fmsgbuf);
-			exported++;
-			exp++;
-			printf("Exp: %lu ",exp);
-			smb_unlockmsghdr(&smb[cur_smb],&msg);
-			smb_freemsgmem(&msg); }
-
-		smb_close(&smb[cur_smb]);
-		LFREE(post);
-
-		/***********************/
-		/* Update FIDO_PTR.DAB */
-		/***********************/
-		if(!addr.zone && !(misc&LEAVE_MSGPTRS) && lastmsg>ptr) {
-			sprintf(str,"%s%s.SFP",sub[i]->data_dir,sub[i]->code);
-			if((file=nopen(str,O_WRONLY|O_CREAT))==-1) {
-				printf("\7ERROR opening/creating %s",str);
-				logprintf("ERROR line %d opening/creating %s",__LINE__,str); }
-			else {
-				write(file,&lastmsg,4);
-				close(file); } } }
-
-printf("\n");
-if(start_tick)	/* Last possible increment of export_ticks */
-	export_ticks+=clock()-start_tick;
-
-pkt_to_pkt(buf,fakearea,pkt_faddr,hdr,msg_seen,msg_path,1);
-
-if(!addr.zone && cfg.log&LOG_AREA_TOTALS && exported)
-    for(i=0;i<cfg.areas;i++)
-        if(cfg.area[i].exported)
-			logprintf("Exported: %5u msgs %8s -> %s"
-				,cfg.area[i].exported,sub[cfg.area[i].sub]->code
-				,cfg.area[i].name);
-
-export_time=((float)export_ticks)/(float)CLK_TCK;
-if(cfg.log&LOG_TOTALS && exported && export_time) {
-	printf("\nExported %lu EchoMail messages in %.1f seconds "
-		,exported,export_time);
-	logprintf("Exported: %5lu msgs in %.1f sec (%.1f/min %.1f/sec)"
-		,exported,export_time
-		,export_time/60.0 ? (float)exported/(export_time/60.0) :(float)exported
-		,(float)exported/export_time);
-	if(export_time/60.0)
-		printf("(%.1f/min) ",(float)exported/(export_time/60.0));
-	printf("(%.1f/sec)\n",(float)exported/export_time); }
-
-}
-/***********************************/
-/* Synchronet/FidoNet Message util */
-/***********************************/
-int main(int argc, char **argv)
-{
-	FILE	*fidomsg;
-	char	ch,str[1025],fname[256],path[512],sub_code[9]
-			,*p,*tp,*sp,*buf,cr,tear,lzh
-			,areatagstr[129],packet[128],outbound[128]
-			,password[16];
-	uchar	HUGE16 *fmsgbuf=NULL;
-	ushort	xlat,attr;
-	int 	i,j,k,n,x,y,z,last,file,fmsg,g,grunged;
-	uint	subnum[MAX_OPEN_SMBS]={INVALID_SUB};
-	ulong	files,msgfiles,echomail=0,crc,ptr,
-			l,m,f,length,lastmsg,posts,msgs,exp,areatag;
-	time_t	now;
-	float	import_time;
-	clock_t start_tick=0,import_ticks=0;
-	read_cfg_text_t txt;
-	struct	find_t ff;
-	struct	tm *tm;
-	fmsghdr_t hdr;
-	faddr_t addr,pkt_faddr;
-	post_t	HUGE16 *post;
-	FILE	*stream,*fstream;
-	smbmsg_t msg;
-	pkthdr_t pkthdr;
-	addrlist_t msg_seen,msg_path;
-	areasbbs_t fakearea,curarea;
-	char *usage="\n"
-"usage: sbbsecho [cfg_file] [/switches] [sub_code]\n"
-"\n"
-"where: cfg_file is the filename of config file (default is ctrl\\sbbsecho.cfg)\n"
-"       sub_code is the internal code for a sub-board (default is ALL subs)\n"
-"\n"
-"valid switches:\n"
-"\n"
-"p: do not import packets                 x: do not delete packets after import\n"
-"n: do not import netmail                 d: do not delete netmail after import\n"
-"i: do not import echomail                e: do not export echomail\n"
-"m: ignore echomail ptrs (export all)     u: update echomail ptrs (export none)\n"
-"j: ignore recieved bit on netmail        t: do not update echomail ptrs\n"
-"l: create log file (data\\sbbsecho.log)   r: create report of import totals\n"
-"h: export all echomail (hub rescan)      b: import locally created netmail too\n"
-"a: export ASCII characters only          f: create packets for outbound netmail\n"
-"g: generate notify lists                 =: change existing tear lines to ===\n"
-"y: import netmail for unknown users to sysop\n"
-"o: import all netmail regardless of destination address\n"
-"s: import private echomail override (strip private status)\n"
-"!: notify users of received echomail\n";
-
-if((email=(smb_t *)MALLOC(sizeof(smb_t)))==NULL) {
-	printf("ERROR allocating memory for email.\n");
-	exit(1); }
-memset(email,0,sizeof(smb_t));
-if((smb=(smb_t *)MALLOC(MAX_OPEN_SMBS*sizeof(smb_t)))==NULL) {
-	printf("ERROR allocating memory for smbs.\n");
-	exit(1); }
-for(i=0;i<MAX_OPEN_SMBS;i++)
-	memset(&smb[i],0,sizeof(smb_t));
-memset(&cfg,0,sizeof(config_t));
-memset(&msg_seen,0,sizeof(addrlist_t));
-memset(&msg_path,0,sizeof(addrlist_t));
-printf("\nSBBSecho Version %s (%s) SMBLIB %s � Synchronet FidoNet Packet "
-	"Tosser\n"
-	,SBBSECHO_VER
-#if defined(__OS2__)
-	,"OS/2"
-#elif defined(__NT__)
-	,"Win32"
-#elif defined(__DOS4G__)
-	,"DOS4G"
-#elif defined(__FLAT__)
-	,"DOS32"
-#else
-	,"DOS16"
-#endif
-	,smb_lib_ver()
-	);
-
-putenv("TZ=UCT0");
-putenv("TMP=");
-_fmode=O_BINARY;
-setvbuf(stdout,NULL,_IONBF,0);
-
-txt.openerr="\7\nError opening %s for read.\n";
-txt.reading="\nReading %s...";
-txt.readit="\rRead %s       ";
-txt.allocerr="\7\nError allocating %u bytes of memory\n";
-txt.error="\7\nERROR: Offset %lu in %s\n\n";
-
-node_dir[0]=sub_code[0]=0;
-for(i=1;i<argc;i++) {
-	if(argv[i][0]=='/') {
-		j=1;
-		while(argv[i][j]) {
-			switch(toupper(argv[i][j])) {
-				case 'A':
-                    misc|=ASCII_ONLY;
-                    break;
-				case 'B':
-					misc|=LOCAL_NETMAIL;
-					break;
-				case 'D':
-                    misc&=~DELETE_NETMAIL;
-                    break;
-				case 'E':
-                    misc&=~EXPORT_ECHOMAIL;
-                    break;
-				case 'F':
-					misc|=PACK_NETMAIL;
-					break;
-				case 'G':
-					misc|=GEN_NOTIFY_LIST;
-					break;
-				case 'H':
-                    misc|=EXPORT_ALL;
-                    break;
-				case 'I':
-                    misc&=~IMPORT_ECHOMAIL;
-                    break;
-                case 'J':
-					misc|=IGNORE_RECV;
-                    break;
-                case 'L':
-                    misc|=LOGFILE;
-                    break;
-				case 'M':
-                    misc|=IGNORE_MSGPTRS;
-                    break;
-				case 'N':
-					misc&=~IMPORT_NETMAIL;
-					break;
-				case 'O':
-                    misc|=IGNORE_ADDRESS;
-                    break;
-				case 'P':
-					misc&=~IMPORT_PACKETS;
-					break;
-				case 'R':
-                    misc|=REPORT;
-                    break;
-				case 'S':
-                    misc|=IMPORT_PRIVATE;
-                    break;
-				case 'T':
-                    misc|=LEAVE_MSGPTRS;
-                    break;
-                case 'U':
-                    misc|=UPDATE_MSGPTRS;
-                    misc&=~EXPORT_ECHOMAIL;
-                    break;
-				case 'X':
-					misc&=~DELETE_PACKETS;
-					break;
-                case 'Y':
-                    misc|=UNKNOWN_NETMAIL;
-                    break;
-				case '=':
-					misc|=CONVERT_TEAR;
-					break;
-				case '!':
-					misc|=NOTIFY_RECEIPT;
-					break;
-				case 'Q':
-					exit(0);
-				default:
-					printf(usage);
-					exit(0); }
-			j++; } }
-	else {
-		if(strchr(argv[i],'\\') || argv[i][1]==':' || strchr(argv[i],'.'))
-			sprintf(cfg.cfgfile,"%.100s",argv[i]);
-		else
-			sprintf(sub_code,"%.8s",argv[i]); }  }
-
-if(!(misc&(IMPORT_NETMAIL|IMPORT_ECHOMAIL)))
-	misc&=~IMPORT_PACKETS;
-if(!node_dir[0]) {
-	p=getenv("SBBSNODE");
-	if(p==NULL) {
-		printf("\7\nSBBSNODE environment variable not set.\n");
-		exit(1); }
-	strcpy(node_dir,p); }
-
-strupr(node_dir);
-
-if(node_dir[strlen(node_dir)-1]!='\\')
-	strcat(node_dir,"\\");
-
-read_node_cfg(txt);
-if(ctrl_dir[0]=='.') {   /* Relative path */
-	strcpy(str,ctrl_dir);
-	sprintf(ctrl_dir,"%s%s",node_dir,str);
-	if(_fullpath(str,ctrl_dir,40))
-		strcpy(ctrl_dir,str); }
-backslash(ctrl_dir);
-
-read_main_cfg(txt);
-if(data_dir[0]=='.') {   /* Relative path */
-	strcpy(str,data_dir);
-	sprintf(data_dir,"%s%s",node_dir,str);
-	if(_fullpath(str,data_dir,40))
-		strcpy(data_dir,str); }
-backslash(data_dir);
-if(text_dir[0]=='.') {   /* Relative path */
-	strcpy(str,text_dir);
-	sprintf(text_dir,"%s%s",node_dir,str);
-	if(_fullpath(str,text_dir,40))
-		strcpy(text_dir,str); }
-backslash(text_dir);
-read_msgs_cfg(txt);
-
-#ifndef __FLAT__
-
-__spawn_ext = (node_swap & SWAP_EXT) != 0 ;
-__spawn_ems = (node_swap & SWAP_EMS) != 0 ;
-__spawn_xms = (node_swap & SWAP_XMS) != 0 ;
-
-#endif
-
-if(total_faddrs<1) {
-	sys_faddr.zone=sys_faddr.net=sys_faddr.node=1;
-	sys_faddr.point=0; }
-else
-	sys_faddr=faddr[0];
-
-sprintf(str,"%s%s",ctrl_dir,"NODE.DAB");
-if((nodefile=sopen(str,O_BINARY|O_RDWR,SH_DENYNO))==-1) {
-	printf("\n\7ERROR opening %s\n",str);
-    exit(1); }
-
-if(!cfg.cfgfile[0])
-    sprintf(cfg.cfgfile,"%sSBBSECHO.CFG",ctrl_dir);
-strcpy(cfg.inbound,fidofile_dir);
-sprintf(cfg.areafile,"%sAREAS.BBS",data_dir);
-sprintf(cfg.logfile,"%sSBBSECHO.LOG",data_dir);
-
-read_cfg();
-
-if(misc&LOGFILE)
-	if((fidologfile=_fsopen(cfg.logfile,"ab",SH_DENYNO))==NULL) {
-		printf("\7ERROR opening %s\n",cfg.logfile);
-        exit(1); }
-
-if(exec_dir[0]!='\\' && exec_dir[1]!=':') {
-	strcpy(path,node_dir);
-	strcat(path,exec_dir);
-	if(_fullpath(str,path,40))
-		strcpy(path,str);
-	backslash(path); }
-else
-	strcpy(path,exec_dir);
-
-/******* READ IN AREAS.BBS FILE *********/
-
-printf("Reading %s",cfg.areafile);
-if((stream=fnopen(&file,cfg.areafile,O_RDONLY))==NULL) {
-	printf("Unable to open %s for read.\n",cfg.areafile);
-    exit(1); }
-cfg.areas=0;		/* Total number of areas in AREAS.BBS */
-cfg.area=NULL;
-while(1) {
-	if(!fgets(str,1024,stream))
-        break;
-	truncsp(str);
-	p=str;
-	while(*p && *p<=SP) p++;	/* Find first printable char */
-	if(*p==';' || !*p)          /* Ignore blank lines or start with ; */
-		continue;
-	if((cfg.area=(areasbbs_t *)REALLOC(cfg.area,sizeof(areasbbs_t)*
-		(cfg.areas+1)))==NULL) {
-		printf("ERROR allocating memory for area #%u.\n",cfg.areas+1);
-		exit(1); }
-	memset(&cfg.area[cfg.areas],0,sizeof(areasbbs_t));
-
-	cfg.area[cfg.areas].sub=INVALID_SUB;	/* Default to passthru */
-
-	sprintf(tmp,"%-.8s",p);
-	tp=tmp;
-	while(*tp>SP) tp++;
-	*tp=0;
-	for(i=0;i<total_subs;i++)
-		if(!stricmp(tmp,sub[i]->code))
-			break;
-	if(i<total_subs)
-		cfg.area[cfg.areas].sub=i;
-	else if(stricmp(tmp,"P")) {
-		printf("\n%s: Unrecongized internal code, assumed passthru",tmp);
-		logprintf("%s: Unrecognized internal code, assumed passthru",tmp); }
-
-	while(*p>SP) p++;				/* Skip code */
-	while(*p && *p<=SP) p++;		/* Skip white space */
-	sprintf(tmp,"%-.50s",p);        /* Area tag */
-	if((tp=strchr(tmp,TAB))!=NULL)	/* Chop off any TABs */
-		*tp=0;
-	if((tp=strchr(tmp,SP))!=NULL)	/* Chop off any spaces */
-		*tp=0;
-	strupr(tmp);
-	if(tmp[0]=='*')         /* UNKNOWN-ECHO area */
-		cfg.badecho=cfg.areas;
-	if((cfg.area[cfg.areas].name=(char *)MALLOC(strlen(tmp)+1))==NULL) {
-		printf("ERROR allocating memory for area #%u tag name.\n"
-			,cfg.areas+1);
-        exit(1); }
-	strcpy(cfg.area[cfg.areas].name,tmp);
-	strupr(tmp);
-	cfg.area[cfg.areas].tag=crc32(tmp);
-
-	while(*p>SP) p++;				/* Skip tag */
-	while(*p && *p<=SP) p++;		/* Skip white space */
-
-	while(*p && *p!=';') {
-		if((cfg.area[cfg.areas].uplink=(faddr_t *)
-			REALLOC(cfg.area[cfg.areas].uplink
-			,sizeof(faddr_t)*(cfg.area[cfg.areas].uplinks+1)))==NULL) {
-			printf("ERROR allocating memory for area #%u uplinks.\n"
-				,cfg.areas+1);
-			exit(1); }
-		cfg.area[cfg.areas].uplink[cfg.area[cfg.areas].uplinks]=atofaddr(p);
-		while(*p>SP) p++;			/* Skip address */
-		while(*p && *p<=SP) p++;	/* Skip white space */
-		cfg.area[cfg.areas].uplinks++; }
-
-	if(cfg.area[cfg.areas].sub!=INVALID_SUB || cfg.area[cfg.areas].uplinks)
-		cfg.areas++;		/* Don't allocate if no tossing */
-	}
-fclose(stream);
-
-printf("\n");
-
-if(!cfg.areas) {
-	printf("No areas defined!\n");
-	exit(1); }
-
-#if 0
-	/* AREAS.BBS DEBUG */
-	for(i=0;i<cfg.areas;i++) {
-		printf("%4u: %-8s"
-			,i+1
-			,cfg.area[i].sub==INVALID_SUB ? "Passthru" :
-			sub[cfg.area[i].sub]->code);
-		for(j=0;j<cfg.area[i].uplinks;j++)
-			printf(" %s",faddrtoa(cfg.area[i].uplink[j]));
-		printf("\n"); }
-#endif
-
-if(misc&GEN_NOTIFY_LIST) {
-printf("\nGenerating Notify Lists...\n");
-notify_list(); }
-
-/* Find any packets that have been left behind in the OUTBOUND directory */
-printf("\nScanning for Stray Outbound Packets...\n");
-sprintf(path,"%s*.PK_",cfg.outbound);
-for(l=_dos_findfirst(path,0,&ff);!l && !kbhit();l=_dos_findnext(&ff)) {
-	sprintf(packet,"%s%s",cfg.outbound,ff.name);
-	printf("%21s: %s ","Outbound Packet",packet);
-	if((fmsg=sopen(packet,O_RDWR,SH_DENYRW))==-1) {
-		printf("ERROR opening.\n");
-		logprintf("ERROR line %d opening %s",__LINE__,packet);
-		continue; }
-	if((fidomsg=fdopen(fmsg,"r+b"))==NULL) {
-		close(fmsg);
-		printf("\7ERROR fdopening.\n");
-		logprintf("ERROR line %d fdopening %s",__LINE__,packet);
-		continue; }
-	if(filelength(fmsg)<sizeof(pkthdr_t)) {
-		printf("ERROR invalid length of %u bytes for %s\n",filelength(fmsg)
-			,packet);
-		logprintf("ERROR line %d invalid length of %u bytes for %s"
-			,__LINE__,filelength(fmsg),packet);
-		fclose(fidomsg);
-		if(delfile(packet))
-			logprintf("ERROR line %d removing %s %s",__LINE__,packet
-				,sys_errlist[errno]);
-		continue; }
-	if(fread(&pkthdr,sizeof(pkthdr_t),1,fidomsg)!=1) {
-		fclose(fidomsg);
-		printf("\7ERROR reading %u bytes from %s\n",sizeof(pkthdr_t),packet);
-		logprintf("ERROR line %d reading %u bytes from %s",__LINE__
-			,sizeof(pkthdr_t),packet);
-		continue; }
-	if((ddtol(ff.wr_time,ff.wr_date)+(60L*60L))<=time(NULL)) {
-		fseek(fidomsg,-3L,SEEK_END);
-		fread(str,3,1,fidomsg);
-		if(str[2])						/* No ending NULL, probably junk */
-			fputc(0,fidomsg);
-		if(str[1])
-			fputc(0,fidomsg);
-		if(str[0])
-			fputc(0,fidomsg);
-		fclose(fidomsg);
-		pkt_faddr.zone=pkthdr.destzone;
-		pkt_faddr.net=pkthdr.destnet;
-		pkt_faddr.node=pkthdr.destnode;
-		pkt_faddr.point=0;				/* No point info in the 2.0 hdr! */
-		memcpy(&two_plus,&pkthdr.empty,20);
-		if(two_plus.cword==_rotr(two_plus.cwcopy,8)  /* 2+ Packet Header */
-			&& two_plus.cword && two_plus.cword&1)
-			pkt_faddr.point=two_plus.destpoint;
-		else if(pkthdr.baud==2) {				/* Type 2.2 Packet Header */
-			memcpy(&two_two,&pkthdr.empty,20);
-			pkt_faddr.point=pkthdr.month; }
-		printf("Sending to %s\n",faddrtoa(pkt_faddr));
-		pack_bundle(packet,pkt_faddr); }
-	else {
-		fclose(fidomsg);
-		printf("Possibly still in use (%u minutes old)\n"
-			,(time(NULL)-ddtol(ff.wr_time,ff.wr_date))/60); } }
-#ifdef __WATCOMC__
-_dos_findclose(&ff);
-#endif
-
-if(misc&IMPORT_PACKETS) {
-
-printf("\nScanning for Inbound Packets...\n");
-
-/* We want to loop while there are bundles waiting for us, but first we want */
-/* to take care of any packets that may already be hanging around for some	 */
-/* reason or another (thus the do/while loop) */
-
-echomail=0;
-for(secure=0;secure<2;secure++) {
-	if(secure && !cfg.secure[0])
-		break;
-do {
-/****** START OF IMPORT PKT ROUTINE ******/
-
-sprintf(path,"%s*.PKT",secure ? cfg.secure : cfg.inbound);
-for(l=_dos_findfirst(path,0,&ff);!l && !kbhit();l=_dos_findnext(&ff)) {
-
-	sprintf(packet,"%s%s",secure ? cfg.secure : cfg.inbound,ff.name);
-
-	if((fidomsg=fnopen(&fmsg,packet,O_RDWR))==NULL) {
-		printf("\7ERROR opening %s\n",packet);
-		logprintf("ERROR line %d opening %s %s",__LINE__,packet
-			,sys_errlist[errno]);
-		continue; }
-	if(filelength(fmsg)<sizeof(pkthdr_t)) {
-		printf("\7Invalid length of %u bytes\n",filelength(fmsg));
-		fclose(fidomsg);
-		continue; }
-
-	fseek(fidomsg,-2L,SEEK_END);
-	fread(str,2,1,fidomsg);
-	if((str[0] || str[1]) &&
-		(ddtol(ff.wr_time,ff.wr_date)+(48L*60L*60L))<=time(NULL)) {
-		fclose(fidomsg);
-		printf("\7ERROR packet %s not terminated correctly\n",packet);
-		logprintf("ERROR line %d packet %s not terminated correctly",__LINE__
-			,packet);
-		continue; }
-	fseek(fidomsg,0L,SEEK_SET);
-	if(fread(&pkthdr,sizeof(pkthdr_t),1,fidomsg)!=1) {
-		fclose(fidomsg);
-		printf("\7ERROR reading %u bytes\n",sizeof(pkthdr_t));
-		logprintf("ERROR line %d reading %u bytes from %s",__LINE__
-			,sizeof(pkthdr_t),packet);
-		continue; }
-
-	pkt_faddr.zone=pkthdr.origzone ? pkthdr.origzone:sys_faddr.zone;
-    pkt_faddr.net=pkthdr.orignet;
-    pkt_faddr.node=pkthdr.orignode;
-    pkt_faddr.point=0;
-
-	printf("%21s: %s "
-		,secure ? "Importing Secure Pkt" : "Importing Packet",ff.name);
-	memcpy(&two_plus,&pkthdr.empty,20);
-	if(two_plus.cword==_rotr(two_plus.cwcopy,8)  /* 2+ Packet Header */
-		&& two_plus.cword && two_plus.cword&1) {
-		pkt_type=PKT_TWO_PLUS;
-		pkt_faddr.point=two_plus.origpoint ? two_plus.origpoint:0;
-		if(pkt_faddr.point && pkthdr.orignet==-1)
-			pkt_faddr.net=two_plus.auxnet ? two_plus.auxnet:sys_faddr.zone;
-		printf("(Type 2+)");
-		if(cfg.log&LOG_PACKETS)
-			logprintf("Importing %s%s (Type 2+) from %s"
-				,secure ? "(secure) ":"",ff.name,faddrtoa(pkt_faddr)); }
-	else if(pkthdr.baud==2) {				/* Type 2.2 Packet Header */
-		pkt_type=PKT_TWO_TWO;
-		memcpy(&two_two,&pkthdr.empty,20);
-		pkt_faddr.point=pkthdr.year ? pkthdr.year:0;
-		printf("(Type 2.2)");
-		if(cfg.log&LOG_PACKETS)
-			logprintf("Importing %s%s (Type 2.2) from %s"
-				,secure ? "(secure) ":"",ff.name,faddrtoa(pkt_faddr)); }
-	else {
-		pkt_type=PKT_TWO;
-		printf("(Type 2)");
-		if(cfg.log&LOG_PACKETS)
-			logprintf("Importing %s%s (Type 2) from %s"
-				,secure ? "(secure) ":"",ff.name,faddrtoa(pkt_faddr)); }
-
-	printf(" from %s\n",faddrtoa(pkt_faddr));
-
-	if(misc&SECURE) {
-		k=matchnode(pkt_faddr,1);
-		sprintf(password,"%.8s",pkthdr.password);
-		if(k<cfg.nodecfgs && cfg.nodecfg[k].pktpwd[0] &&
-			stricmp(password,cfg.nodecfg[k].pktpwd)) {
-			sprintf(str,"Packet %s from %s - "
-				"Incorrect password ('%s' instead of '%s')"
-				,ff.name,faddrtoa(pkt_faddr)
-				,password,cfg.nodecfg[k].pktpwd);
-			printf("Security Violation (Incorrect Password)\n");
-			if(cfg.log&LOG_SECURITY)
-				logprintf(str);
-			fclose(fidomsg);
-			continue; } }
-
-	while(!feof(fidomsg)) {
-
-		memset(&hdr,0,sizeof(fmsghdr_t));
-
-		if(start_tick)
-			import_ticks+=clock()-start_tick;
-		start_tick=clock();
-
-		if(fmsgbuf) {
-			FREE(fmsgbuf);
-			fmsgbuf=0; }
-		if(misc&CHECKMEM)
-			checkmem();
-		if(!fread(&ch,1,1,fidomsg)) 		 /* Message type (0200h) */
-			break;
-		if(ch!=02)
-			continue;
-		if(!fread(&ch,1,1,fidomsg))
-			break;
-		if(ch!=00)
-			continue;
-		fread(&hdr.orignode,2,1,fidomsg);
-		fread(&hdr.destnode,2,1,fidomsg);
-		fread(&hdr.orignet,2,1,fidomsg);
-		fread(&hdr.destnet,2,1,fidomsg);
-		fread(&hdr.attr,2,1,fidomsg);
-		fread(&hdr.cost,2,1,fidomsg);
-
-		grunged=0;
-
-		for(i=0;i<sizeof(hdr.time);i++) 		/* Read in the Date/Time */
-			if(!fread(hdr.time+i,1,1,fidomsg) || !hdr.time[i])
-				break;
-		if(i==sizeof(hdr.time)) grunged=1;
-
-		for(i=0;!grunged && i<sizeof(hdr.to);i++) /* Read in the 'To' Field */
-			if(!fread(hdr.to+i,1,1,fidomsg) || !hdr.to[i])
-				break;
-		if(i==sizeof(hdr.to)) grunged=1;
-
-		for(i=0;!grunged && i<sizeof(hdr.from);i++) /* Read in 'From' Field */
-			if(!fread(hdr.from+i,1,1,fidomsg) || !hdr.from[i])
-				break;
-		if(i==sizeof(hdr.from)) grunged=1;
-
-		for(i=0;!grunged && i<sizeof(hdr.subj);i++) /* Read in 'Subj' Field */
-			if(!fread(hdr.subj+i,1,1,fidomsg) || !hdr.subj[i])
-				break;
-		if(i==sizeof(hdr.subj)) grunged=1;
-
-		str[0]=0;
-		for(i=0;!grunged && i<sizeof(str);i++)	/* Read in the 'AREA' Field */
-			if(!fread(str+i,1,1,fidomsg) || str[i]==CR)
-				break;
-		if(i<sizeof(str))
-			str[i]=0;
-		else
-			grunged=1;
-
-		if(!str[0] || grunged) {
-			start_tick=0;
-			if(cfg.log&LOG_GRUNGED)
-				logprintf("Grunged message");
-            seektonull(fidomsg);
-            printf("Grunged message!\n");
-            continue; }
-
-		if(i)
-			fseek(fidomsg,(long)-(i+1),SEEK_CUR);
-
-		truncsp(str);
-		strupr(str);
-		p=strstr(str,"AREA:");
-		if(!p) {					/* Netmail */
-			start_tick=0;
-			if(import_netmail("",hdr,fidomsg))
-				seektonull(fidomsg);
-			printf("\n");
-			continue; }
-
-		if(!(misc&IMPORT_ECHOMAIL)) {
-			start_tick=0;
-			printf("EchoMail Ignored");
-			seektonull(fidomsg);
-			printf("\n");
-			continue; }
-
-		p+=5;								/* Skip "AREA:" */
-		while(*p && *p<=SP) p++;			/* Skip any white space */
-		printf("%21s: ",p);                 /* Show areaname: */
-		sprintf(areatagstr,"%.128s",p);
-		strupr(p);
-		areatag=crc32(p);
-
-		for(i=0;i<cfg.areas;i++)				/* Do we carry this area? */
-			if(cfg.area[i].tag==areatag) {
-				if(cfg.area[i].sub!=INVALID_SUB)
-					printf("%s ",sub[cfg.area[i].sub]->code);
-				else
-					printf("(Passthru) ");
-				fmsgbuf=getfmsg(fidomsg,NULL);
-				gen_psb(&msg_seen,&msg_path,fmsgbuf,pkthdr.destzone);
-				break; }
-
-		if(i==cfg.areas) {
-			printf("(Unknown) ");
-			if(cfg.badecho>=0) {
-				i=cfg.badecho;
-				if(cfg.area[i].sub!=INVALID_SUB)
-					printf("%s ",sub[cfg.area[i].sub]->code);
-				else
-                    printf("(Passthru) ");
-				fmsgbuf=getfmsg(fidomsg,NULL);
-				gen_psb(&msg_seen,&msg_path,fmsgbuf,pkthdr.destzone); }
-			else {
-				start_tick=0;
-				printf("Skipped\n");
-				seektonull(fidomsg);
-				continue; } }
-
-		if(misc&SECURE && cfg.area[i].sub!=INVALID_SUB) {
-			for(j=0;j<cfg.area[i].uplinks;j++)
-				if(!memcmp(&cfg.area[i].uplink[j],&pkt_faddr,sizeof(faddr_t)))
-					break;
-			if(j==cfg.area[i].uplinks) {
-				if(cfg.log&LOG_SECURITY)
-					logprintf("%s: Security violation - %s not in AREAS.BBS"
-						,areatagstr,faddrtoa(pkt_faddr));
-				printf("Security Violation (Not in AREAS.BBS)\n");
-				seektonull(fidomsg);
-				continue; } }
-
-		/* From here on out, i = area number and area[i].sub = sub number */
-
-		memcpy(&curarea,&cfg.area[i],sizeof(areasbbs_t));
-		curarea.name=areatagstr;
-
-		if(cfg.area[i].sub==INVALID_SUB) {			/* Passthru */
-			start_tick=0;
-			strip_psb(fmsgbuf);
-			pkt_to_pkt(fmsgbuf,curarea,pkt_faddr,hdr,msg_seen,msg_path,0);
-			printf("\n");
-			continue; } 						/* On to the next message */
-
-
-		for(j=0;j<total_faddrs;j++)
-			if(check_psb(msg_path,faddr[j]))
-				break;
-		if(j<total_faddrs) {
-			start_tick=0;
-			printf("Circular path (%s) ",faddrtoa(faddr[j]));
-			cfg.area[i].circular++;
-			if(cfg.log&LOG_CIRCULAR)
-				logprintf("%s: Circular path detected for %s"
-					,areatagstr,faddrtoa(faddr[j]));
-			strip_psb(fmsgbuf);
-			pkt_to_pkt(fmsgbuf,curarea,pkt_faddr,hdr,msg_seen,msg_path,0);
-			printf("\n");
-			continue; }
-
-#if 0 // Allen's way (broken?)
-		for(j=0;j<num_open;j++)
-			if(openbase[j]==cfg.area[i].sub)
-                break;
-		if(j && j<num_open) {
-			cur_smb=j;
-			k=openbase[0];
-			openbase[0]=openbase[j];
-			openbase[j]=k; }
-		else if(j && j==num_open && j<MAX_OPEN_SMBS) {
-			cur_smb=j;
-			openbase[j]=openbase[0];
-			openbase[0]=INVALID_SUB; }
-		else if(j==num_open && j>=MAX_OPEN_SMBS) {
-			cur_smb=j-1;
-			k=openbase[0];
-			openbase[0]=openbase[j-1];
-			openbase[j-1]=k; }
-
-		if(openbase[0]!=cfg.area[i].sub) {
-			if(openbase[0]!=INVALID_SUB) {
-				smb_close(&smb[cur_smb]);
-				--num_open; }
-#endif
-
-		// Rob's way
-		for(j=0;j<MAX_OPEN_SMBS;j++)
-			if(subnum[j]==cfg.area[i].sub)
-				break;
-		if(j<MAX_OPEN_SMBS) 				/* already open */
-            cur_smb=j;
-		else {
-			if(smb[cur_smb].shd_fp) 		/* If open */
-				cur_smb=!cur_smb;			/* toggle between 0 and 1 */
-			smb_close(&smb[cur_smb]);		/* close, if open */
-			subnum[cur_smb]=INVALID_SUB; }	/* reset subnum (just incase) */
-
-		if(smb[cur_smb].shd_fp==NULL) { 	/* Currently closed */
-			sprintf(smb[cur_smb].file,"%s%s",sub[cfg.area[i].sub]->data_dir
-				,sub[cfg.area[i].sub]->code);
-			smb[cur_smb].retry_time=smb_retry_time;
-			if((j=smb_open(&smb[cur_smb]))!=0) {
-				sprintf(str,"ERROR %d opening %s area #%d, sub #%d)"
-					,j,smb[cur_smb].file,i+1,cfg.area[i].sub+1);
-				printf(str);
-				logprintf(str);
-				strip_psb(fmsgbuf);
-				pkt_to_pkt(fmsgbuf,curarea,pkt_faddr,hdr,msg_seen
-					,msg_path,0);
-				printf("\n");
-				continue; }
-			if(!filelength(fileno(smb[cur_smb].shd_fp))) {
-				smb[cur_smb].status.max_crcs=sub[cfg.area[i].sub]->maxcrcs;
-				smb[cur_smb].status.max_msgs=sub[cfg.area[i].sub]->maxmsgs;
-				smb[cur_smb].status.max_age=sub[cfg.area[i].sub]->maxage;
-				smb[cur_smb].status.attr=sub[cfg.area[i].sub]->misc&SUB_HYPER
-						? SMB_HYPERALLOC:0;
-				if((j=smb_create(&smb[cur_smb]))!=0) {
-					sprintf(str,"ERROR %d creating %s",j,smb[cur_smb].file);
-					printf(str);
-					logprintf(str);
-					smb_close(&smb[cur_smb]);
-					strip_psb(fmsgbuf);
-					pkt_to_pkt(fmsgbuf,curarea,pkt_faddr,hdr,msg_seen
-						,msg_path,0);
-					printf("\n");
-					continue; } }
-
-#if 0	// Unnecessary with SMBLIB v2.0
-
-			if((j=smb_locksmbhdr(&smb[cur_smb]))!=0) {
-				printf("ERROR %d locking %s smbhdr\n",j,smb[cur_smb].file);
-				logprintf("ERROR %d line %d locking %s smbhdr",j,__LINE__
-					,smb[cur_smb].file);
-				smb_close(&smb[cur_smb]);
-				strip_psb(fmsgbuf);
-				pkt_to_pkt(fmsgbuf,curarea,pkt_faddr,hdr,msg_seen
-					,msg_path,0);
-				printf("\n");
-				continue; }
-
-			if((j=smb_getstatus(&smb[cur_smb]))!=0) {
-				sprintf(str,"ERROR %d reading %s SMB header",j
-					,smb[cur_smb].file);
-				printf(str);
-				logprintf(str);
-				smb_unlocksmbhdr(&smb[cur_smb]);
-				smb_close(&smb[cur_smb]);
-				strip_psb(fmsgbuf);
-				pkt_to_pkt(fmsgbuf,curarea,pkt_faddr,hdr,msg_seen
-					,msg_path,0);
-				printf("\n");
-				continue; }
-
-			smb_unlocksmbhdr(&smb[cur_smb]);
-#endif
-			//openbase[0]=cfg.area[i].sub;
-			//++num_open;
-			subnum[cur_smb]=cfg.area[i].sub;
-			}
-
-		if(hdr.attr&FIDO_PRIVATE && !(sub[cfg.area[i].sub]->misc&SUB_PRIV)) {
-			if(misc&IMPORT_PRIVATE)
-				hdr.attr&=~FIDO_PRIVATE;
-            else {
-				start_tick=0;
-				printf("Private posts disallowed.");
-				if(cfg.log&LOG_PRIVATE)
-					logprintf("%s: Private posts disallowed"
-						,areatagstr);
-				strip_psb(fmsgbuf);
-				pkt_to_pkt(fmsgbuf,curarea,pkt_faddr,hdr,msg_seen
-					,msg_path,0);
-				printf("\n");
-				continue; } }
-
-		if(!(hdr.attr&FIDO_PRIVATE) && sub[cfg.area[i].sub]->misc&SUB_PONLY)
-			hdr.attr|=MSG_PRIVATE;
-
-		/**********************/
-		/* Importing EchoMail */
-		/**********************/
-		j=fmsgtosmsg(fmsgbuf,hdr,0,cfg.area[i].sub);
-
-		if(start_tick) {
-			import_ticks+=clock()-start_tick;
-			start_tick=0; }
-
-		if(j==-1) {
-			if(cfg.log&LOG_DUPES)
-				logprintf("%s Duplicate message",areatagstr);
-			cfg.area[i].dupes++; }
-		else {	   /* Not a dupe */
-			strip_psb(fmsgbuf);
-			pkt_to_pkt(fmsgbuf,curarea,pkt_faddr
-				,hdr,msg_seen,msg_path,0); }
-
-		if(j==1) {		/* Successful import */
-			echomail++;
-			cfg.area[i].imported++;
-			if(misc&NOTIFY_RECEIPT && (m=matchname(hdr.to))!=0) {
-				sprintf(str
-				,"\7\1n\1hSBBSecho: \1m%.36s \1n\1msent you EchoMail on "
-					"\1h%s \1n\1m%s\1n\r\n"
-					,hdr.from
-					,grp[sub[cfg.area[i].sub]->grp]->sname
-					,sub[cfg.area[i].sub]->sname);
-				putsmsg(m,str); } }
-		printf("\n");
-		}
-	fclose(fidomsg);
-
-	if(misc&DELETE_PACKETS)
-		if(delfile(packet))
-			logprintf("ERROR line %d removing %s %s",__LINE__,packet
-				,sys_errlist[errno]); }
-#ifdef __WATCOMC__
-_dos_findclose(&ff);
-#endif
-
-if(start_tick) {
-	import_ticks+=clock()-start_tick;
-	start_tick=0; }
-
-} while(!kbhit() && unpack_bundle());
-
-if(kbhit()) printf("\nKey pressed - premature termination\n");
-while(kbhit()) getch();
-
-}	/* End of Secure : Inbound loop */
-
-if(start_tick)	/* Last possible increment of import_ticks */
-	import_ticks+=clock()-start_tick;
-
-for(j=MAX_OPEN_SMBS-1;(int)j>=0;j--)		/* Close open bases */
-	if(smb[j].shd_fp)
-		smb_close(&smb[j]);
-
-pkt_to_pkt(fmsgbuf,fakearea,pkt_faddr,hdr,msg_seen,msg_path,1);
-
-/******* END OF IMPORT PKT ROUTINE *******/
-
-if(cfg.log&LOG_AREA_TOTALS) {
-	for(i=0;i<cfg.areas;i++) {
-		if(cfg.area[i].imported)
-			logprintf("Imported: %5u msgs %8s <- %s"
-				,cfg.area[i].imported,sub[cfg.area[i].sub]->code
-				,cfg.area[i].name); }
-	for(i=0;i<cfg.areas;i++) {
-		if(cfg.area[i].circular)
-			logprintf("Circular: %5u detected in %s"
-				,cfg.area[i].circular,cfg.area[i].name); }
-	for(i=0;i<cfg.areas;i++) {
-		if(cfg.area[i].dupes)
-			logprintf("Duplicate: %5u detected in %s"
-				,cfg.area[i].dupes,cfg.area[i].name); } }
-
-import_time=((float)import_ticks)/(float)CLK_TCK;
-if(cfg.log&LOG_TOTALS && import_time && echomail) {
-	printf("\nImported %lu EchoMail messages in %.1f seconds "
-		,echomail,import_time);
-	logprintf("Imported: %5lu msgs in %.1f sec (%.1f/min %.1f/sec)"
-		,echomail,import_time
-		,import_time/60.0 ? (float)echomail/(import_time/60.0) :(float)echomail
-		,(float)echomail/import_time);
-	if(import_time/60.0)
-		printf("(%.1f/min) ",(float)echomail/(import_time/60.0));
-	printf("(%.1f/sec)\n",(float)echomail/import_time); }
-if(fmsgbuf) {
-	FREE(fmsgbuf);
-	fmsgbuf=0; }
-
-}
-
-if(misc&IMPORT_NETMAIL) {
-
-printf("\nScanning for Inbound NetMail Messages...\n");
-
-sprintf(str,"%s*.MSG",netmail_dir);
-
-for(last=_dos_findfirst(str,0,&ff);!last;last=_dos_findnext(&ff)) {
-    sprintf(path,"%s%s",netmail_dir,ff.name);
-    strupr(path);
-    if((fidomsg=fnopen(&fmsg,path,O_RDWR))==NULL) {
-		printf("\7ERROR opening %s\n",path);
-		logprintf("ERROR line %d opening %s %s",__LINE__,path
-			,sys_errlist[errno]);
-        continue; }
-    if(filelength(fmsg)<sizeof(fmsghdr_t)) {
-		printf("\7ERROR invalid length of %u bytes for %s\n",filelength(fmsg)
-			,path);
-		logprintf("ERROR line %d invalid length of %u bytes for %s",__LINE__
-			,filelength(fmsg),path);
-        fclose(fidomsg);
-        continue; }
-    if(fread(&hdr,sizeof(fmsghdr_t),1,fidomsg)!=1) {
-        fclose(fidomsg);
-        printf("\7ERROR reading %u bytes from %s"
-            ,sizeof(fmsghdr_t),path);
-		logprintf("ERROR line %d reading %u bytes from %s",__LINE__
-			,sizeof(fmsghdr_t),path);
-        continue; }
-    i=import_netmail(path,hdr,fidomsg);
-    /**************************************/
-    /* Delete source netmail if specified */
-    /**************************************/
-	if(i==0) {
-		if(misc&DELETE_NETMAIL) {
-			fclose(fidomsg);
-			if(delfile(path))
-				logprintf("ERROR line %d removing %s %s",__LINE__,path
-					,sys_errlist[errno]); }
-		else {
-			hdr.attr|=FIDO_RECV;
-			fseek(fidomsg,0L,SEEK_SET);
-			fwrite(&hdr,sizeof(fmsghdr_t),1,fidomsg);
-			fclose(fidomsg); } }
-	else if(i!=-2)
-		fclose(fidomsg);
-    printf("\n"); 
-	}
-#ifdef __WATCOMC__
-_dos_findclose(&ff);
-#endif
-}
-
-
-if(misc&EXPORT_ECHOMAIL) {
-	memset(&addr,0,sizeof(faddr_t));
-	export_echomail(sub_code,addr);
-}
-
-
-if(misc&PACK_NETMAIL) {
-
-memset(&msg_seen,0,sizeof(addrlist_t));
-memset(&msg_path,0,sizeof(addrlist_t));
-memset(&fakearea,0,sizeof(areasbbs_t));
-
-printf("\nPacking Outbound NetMail...\n");
-
-sprintf(str,"%s*.MSG",netmail_dir);
-
-for(last=_dos_findfirst(str,0,&ff);!last;last=_dos_findnext(&ff)) {
-    sprintf(path,"%s%s",netmail_dir,ff.name);
-	strupr(path);
-    if((fidomsg=fnopen(&fmsg,path,O_RDWR))==NULL) {
-		printf("\7ERROR opening %s\n",path);
-		logprintf("ERROR line %d opening %s %s",__LINE__,path
-			,sys_errlist[errno]);
-        continue; }
-    if(filelength(fmsg)<sizeof(fmsghdr_t)) {
-        printf("\7%s Invalid length of %u bytes\n",path,filelength(fmsg));
-        fclose(fidomsg);
-        continue; }
-    if(fread(&hdr,sizeof(fmsghdr_t),1,fidomsg)!=1) {
-        fclose(fidomsg);
-        printf("\7ERROR reading %u bytes from %s"
-            ,sizeof(fmsghdr_t),path);
-		logprintf("ERROR line %d reading %u bytes from %s",__LINE__
-			,sizeof(fmsghdr_t),path);
-        continue; }
-	hdr.destzone=hdr.origzone=sys_faddr.zone;
-	hdr.destpoint=hdr.origpoint=0;
-	getzpt(fidomsg,&hdr);				/* use kludge if found */
-	addr.zone=hdr.destzone;
-	addr.net=hdr.destnet;
-	addr.node=hdr.destnode;
-	addr.point=hdr.destpoint;
-	for(i=0;i<total_faddrs;i++)
-		if(!memcmp(&addr,&faddr[i],sizeof(faddr_t)))
-			break;
-	if(i<total_faddrs)	{				  /* In-bound, so ignore */
-		fclose(fidomsg);
-		continue;
-	}
-	printf("\n%s to %s ",path,faddrtoa(addr));
-	if(cfg.log&LOG_PACKING)
-		logprintf("Packing %s (%s)",path,faddrtoa(addr));
-	fmsgbuf=getfmsg(fidomsg,NULL);
-	if(!fmsgbuf) {
-		printf("ERROR allocating memory for NetMail fmsgbuf\n");
-		logprintf("ERROR line %d allocating memory for NetMail fmsgbuf"
-			,__LINE__);
-		exit(1); }
-	fclose(fidomsg);
-
-	if(misc&FLO_MAILER) {
-		attr=0;
-		i=matchnode(addr,0);
-		if(i<cfg.nodecfgs)
-			if(cfg.nodecfg[i].route.zone
-				&& !(hdr.attr&(FIDO_CRASH|FIDO_HOLD))) {
-				addr=cfg.nodecfg[i].route;		/* Routed */
-				if(cfg.log&LOG_ROUTING)
-					logprintf("Routing %s to %s",path,faddrtoa(addr));
-				i=matchnode(addr,0); }
-		if(i<cfg.nodecfgs)
-			attr=cfg.nodecfg[i].attr;
-		if(hdr.attr&FIDO_CRASH)
-			attr|=ATTR_CRASH;
-		else if(hdr.attr&FIDO_HOLD)
-			attr|=ATTR_HOLD;
-		if(attr&ATTR_CRASH) ch='C';
-		else if(attr&ATTR_HOLD) ch='H';
-		else if(attr&ATTR_DIRECT) ch='D';
-		else ch='O';
-		if(addr.zone==faddr[0].zone) /* Default zone, use default outbound */
-			strcpy(outbound,cfg.outbound);
-		else						 /* Inter-zone outbound is OUTBOUND.XXX */
-			sprintf(outbound,"%.*s.%03X\\"
-				,strlen(cfg.outbound)-1,cfg.outbound,addr.zone);
-		if(addr.point) {			/* Point destination is OUTBOUND.PNT */
-			sprintf(str,"%04X%04X.PNT"
-				,addr.net,addr.node);
-			strcat(outbound,str); }
-		if(outbound[strlen(outbound)-1]=='\\')
-			outbound[strlen(outbound)-1]=0;
-		mkdir(outbound);
-		strcat(outbound,"\\");
-		if(addr.point)
-			sprintf(packet,"%s%08X.%cUT",outbound,addr.point,ch);
-		else
-			sprintf(packet,"%s%04X%04X.%cUT",outbound,addr.net,addr.node,ch);
-		if(hdr.attr&FIDO_FILE)
-			if(write_flofile(hdr.subj,addr))
-				exit(1); }
-	else
-		strcpy(packet,pktname());
-
-	now=time(NULL);
-	tm=gmtime(&now);
-	if((stream=fnopen(&file,packet,O_WRONLY|O_APPEND|O_CREAT))==NULL) {
-		printf("Unable to open %s for write.\n"
-			,packet);
-		logprintf("ERROR line %d opening %s %s",__LINE__,packet
-			,sys_errlist[errno]);
-		exit(1); }
-
-	if(!filelength(file)) {
-		pkthdr.orignode=hdr.orignode;
-		pkthdr.destnode=hdr.destnode;
-		pkthdr.year=tm->tm_year+1900;
-		pkthdr.month=tm->tm_mon;
-		pkthdr.day=tm->tm_mday;
-		pkthdr.hour=tm->tm_hour;
-		pkthdr.min=tm->tm_min;
-		pkthdr.sec=tm->tm_sec;
-		pkthdr.baud=0x00;
-		pkthdr.pkttype=0x0002;
-		pkthdr.orignet=hdr.orignet;
-		pkthdr.destnet=hdr.destnet;
-		pkthdr.prodcode=0x00;
-		pkthdr.sernum=0;
-		i=matchnode(addr,0);
-		if(i<cfg.nodecfgs)
-			memcpy(pkthdr.password,cfg.nodecfg[i].pktpwd,8);
-		else
-			memset(pkthdr.password,0,8);
-		pkthdr.origzone=hdr.origzone;
-		pkthdr.destzone=hdr.destzone;
-		memset(pkthdr.empty,0,20);
-		fwrite(&pkthdr,sizeof(pkthdr_t),1,stream); }
-
-	putfmsg(stream,fmsgbuf,hdr,fakearea,msg_seen,msg_path);
-
-	FREE(fmsgbuf);
-	fclose(stream);
-    /**************************************/
-    /* Delete source netmail if specified */
-    /**************************************/
-	if(misc&DELETE_NETMAIL)
-		if(delfile(path))
-			logprintf("ERROR line %d removing %s %s",__LINE__,path
-				,sys_errlist[errno]);
-    printf("\n"); }
-#ifdef __WATCOMC__
-_dos_findclose(&ff);
-#endif
-}
-
-
-if(misc&UPDATE_MSGPTRS) {
-
-printf("\nUpdating Message Pointers to Last Posted Message...\n");
-
-for(g=0;g<total_grps;g++)
-for(i=0;i<total_subs;i++)
-	if(sub[i]->misc&SUB_FIDO && sub[i]->grp==g) {
-		printf("\n%-15.15s %s\n"
-			,grp[sub[i]->grp]->sname,sub[i]->lname);
-		getlastmsg(i,&l,0);
-		sprintf(str,"%s%s.SFP",sub[i]->data_dir,sub[i]->code);
-		if((file=nopen(str,O_WRONLY|O_CREAT))==-1) {
-			printf("\7ERROR opening/creating %s",str);
-			logprintf("ERROR line %d opening/creating %s",__LINE__,str); }
-		else {
-			write(file,&l,sizeof(time_t));
-			close(file); } } 
-}
-
-if(misc&(IMPORT_NETMAIL|IMPORT_ECHOMAIL) && misc&REPORT) {
-	now=time(NULL);
-	sprintf(str,"%sSBBSECHO.MSG",text_dir);
-	if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1) {
-		printf("ERROR opening %s\n",str);
-		logprintf("ERROR line %d opening %s",__LINE__,str);
-		exit(1); }
-	sprintf(fname,"\1c\1h               "
-		"���������������������������������������������������\r\n");
-	sprintf(path,"\1c\1h               "
-		"���������������������������������������������������\r\n");
-	write(file,fname,strlen(fname));
-	sprintf(str,"               \1n\1k\0016"
-		" Last FidoNet Transfer on %.24s \1n\r\n",ctime(&now));
-	write(file,str,strlen(str));
-	write(file,path,strlen(path));
-	write(file,fname,strlen(fname));
-	sprintf(tmp,"Imported %lu EchoMail and %lu NetMail Messages"
-		,echomail,netmail);
-	sprintf(str,"               \1n\1k\0016 %-50.50s\1n\r\n",tmp);
-	write(file,str,strlen(str));
-	write(file,path,strlen(path));
-	close(file); }
-
-pkt_to_pkt(buf,fakearea,pkt_faddr,hdr,msg_seen,msg_path,1);
-if(email->shd_fp)
-	smb_close(email);
-
-FREE(smb);
-FREE(email);
-return(0);
-}
diff --git a/src/sbbs2/echo/sbbsecho.h b/src/sbbs2/echo/sbbsecho.h
deleted file mode 100644
index e01a0ca34c..0000000000
--- a/src/sbbs2/echo/sbbsecho.h
+++ /dev/null
@@ -1,244 +0,0 @@
-/* SBBSECHO.H */
-
-/* Developed 1990-2000 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* Portions written by Allen Christiansen 1994-1996 						*/
-
-#define SBBSECHO_VER "1.32"
-
-#define IMPORT_NETMAIL  (1L<<0)
-#define IMPORT_PACKETS	(1L<<1)
-#define IMPORT_ECHOMAIL (1L<<2)
-#define EXPORT_ECHOMAIL (1L<<3)
-#define DELETE_NETMAIL	(1L<<4)
-#define DELETE_PACKETS	(1L<<5)
-#define STORE_SEENBY	(1L<<6) 		/* Store SEEN-BYs in SMB */
-#define STORE_PATH		(1L<<7) 		/* Store PATHs in SMB */
-#define STORE_KLUDGE	(1L<<8) 		/* Store unknown kludges in SMB */
-#define IGNORE_MSGPTRS	(1L<<9)
-#define UPDATE_MSGPTRS	(1L<<10)
-#define LEAVE_MSGPTRS	(1L<<11)
-#define CHECKMEM		(1L<<12)		/* Display available memory */
-#define ASCII_ONLY		(1L<<13)
-#define LOGFILE 		(1L<<14)
-#define REPORT			(1L<<15)
-#define EXPORT_ALL		(1L<<16)
-#define UNKNOWN_NETMAIL (1L<<17)
-#define IGNORE_ADDRESS	(1L<<18)
-#define IGNORE_RECV 	(1L<<19)
-#define CONVERT_TEAR	(1L<<20)
-#define IMPORT_PRIVATE	(1L<<21)
-#define LOCAL_NETMAIL	(1L<<22)
-#define NOTIFY_RECEIPT	(1L<<23)
-#define FLO_MAILER		(1L<<24)		/* Binkley .FLO style mailer */
-#define PACK_NETMAIL	(1L<<25)		/* Pack *.MSG NetMail into packets */
-#define FUZZY_ZONE		(1L<<26)
-#define FAST_OPEN		(1L<<27)
-#define SECURE			(1L<<28)		/* Secure operation */
-#define ELIST_ONLY		(1L<<29)		/* Allow adding from AREAS.BBS */
-#define GEN_NOTIFY_LIST (1L<<30)		/* Generate Notify Lists */
-#define KILL_EMPTY_MAIL (1L<<31)		/* Kill empty netmail messages */
-
-#define ATTR_HOLD		(1<<0)			/* Hold */
-#define ATTR_CRASH		(1<<1)			/* Crash */
-#define ATTR_DIRECT 	(1<<2)			/* Direct */
-#define ATTR_PASSIVE	(1<<3)			/* Used to temp disconnect */
-#define SEND_NOTIFY 	(1<<4)			/* Send Notify Lists */
-
-
-#define LOG_AREAFIX 	(1L<<0) 		/* Log areafix messages */
-#define LOG_IMPORTED	(1L<<1) 		/* Log imported netmail messages */
-#define LOG_PACKETS 	(1L<<2) 		/* Log imported packet names/types */
-#define LOG_SECURITY	(1L<<3) 		/* Log security violations */
-#define LOG_GRUNGED 	(1L<<4) 		/* Log grunged messages */
-#define LOG_PRIVATE 	(1L<<5) 		/* Log disallowed private msgs */
-#define LOG_AREA_TOTALS (1L<<6) 		/* Log totals for each area */
-#define LOG_TOTALS		(1L<<7) 		/* Log over-all totals */
-#define LOG_PACKING 	(1L<<8) 		/* Log packing of out-bound netmail */
-#define LOG_ROUTING 	(1L<<9) 		/* Log routing of out-bound netmail */
-
-#define LOG_DUPES		(1L<<24)		 /* Log individual dupe messages */
-#define LOG_CIRCULAR	(1L<<25)		 /* Log individual circ paths */
-#define LOG_IGNORED 	(1L<<26)		 /* Log ignored netmail */
-#define LOG_UNKNOWN 	(1L<<27)		 /* Log netmail for unknown users */
-
-#define LOG_DEFAULTS	0xffffffL		/* Low 24 bits default to ON */
-
-#define PKT_TWO_PLUS	0				/* Type 2+ Packet Header  */
-#define PKT_TWO_TWO 	1				/* Type 2.2 Packet Header */
-#define PKT_TWO 		2				/* Old Type Packet Header */
-
-#define MAX_OPEN_SMBS	2
-#define DFLT_OPEN_PKTS  4
-#define MAX_TOTAL_PKTS  100
-#define DFLT_PKT_SIZE   250*1024L
-#define DFLT_BDL_SIZE   250*1024L
-
-#define NOFWD			(1<<0)			/* Do not forward requests */
-
-typedef struct {                        /* Fidonet Packet Header */
-    short orignode,                     /* Origination Node of Packet */
-          destnode,                     /* Destination Node of Packet */
-          year,                         /* Year of Packet Creation e.g. 1995 */
-          month,                        /* Month of Packet Creation 0-11 */
-          day,                          /* Day of Packet Creation 1-31 */
-          hour,                         /* Hour of Packet Creation 0-23 */
-          min,                          /* Minute of Packet Creation 0-59 */
-          sec,                          /* Second of Packet Creation 0-59 */
-          baud,                         /* Max Baud Rate of Orig & Dest */
-          pkttype,                      /* Packet Type (-1 is obsolete) */
-          orignet,                      /* Origination Net of Packet */
-          destnet;                      /* Destination Net of Packet */
-    uchar prodcode,                     /* Product Code (00h is Fido) */
-          sernum,                       /* Binary Serial Number or NULL */
-          password[8];                  /* Session Password or NULL */
-    short origzone,                     /* Origination Zone of Packet or NULL */
-          destzone;                     /* Destination Zone of Packet or NULL */
-    uchar empty[20];                    /* Fill Characters */
-	} pkthdr_t;
-
-typedef struct {						/* Type 2+ Packet Header Info */
-	short auxnet,						/* Orig Net if Origin is a Point */
-		  cwcopy;						/* Must be Equal to cword */
-	uchar prodcode, 					/* Product Code */
-		  revision; 					/* Revision */
-	short cword,						/* Compatibility Word */
-		  origzone, 					/* Zone of Packet Sender or NULL */
-		  destzone, 					/* Zone of Packet Receiver or NULL */
-		  origpoint,					/* Origination Point of Packet */
-		  destpoint;					/* Destination Point of Packet */
-	uchar empty[4];
-	} two_plus_t;
-
-typedef struct {						/* Type 2.2 Packet Header Info */
-	uchar origdomn[8],					/* Origination Domain */
-		  destdomn[8],					/* Destination Domain */
-		  empty[4]; 					/* Product Specific Data */
-	} two_two_t;
-
-typedef struct {
-    uint  sub;                  /* Set to INVALID_SUB if pass-thru */
-	ulong tag;					/* CRC-32 of tag name */
-    char *name;                 /* Area tag name */
-    uint  uplinks;              /* Total number of uplinks for this echo */
-	uint  imported; 			/* Total messages imported this run */
-	uint  exported; 			/* Total messages exported this run */
-	uint  circular; 			/* Total circular paths detected */
-	uint  dupes;				/* Total duplicate messages detected */
-    faddr_t *uplink;            /* Each uplink */
-    } areasbbs_t;
-
-typedef struct {
-	char flag[5];
-	} flag_t;
-
-typedef struct {
-	uint tags;					/* Number of area tags */
-	char **tag; 				/* Name of each area tag */
-	} area_t;
-
-typedef struct {
-	FILE *stream;				/* The stream associated with this packet */
-	faddr_t uplink; 			/* The current uplink for this packet */
-	uchar filename[128],curopen;/* Name of the file and if it's open or not */
-    } outpkt_t;
-
-typedef struct {
-	uint addrs; 				/* Total number of uplinks */
-	faddr_t *addr;				/* Each uplink */
-	} addrlist_t;
-
-typedef struct {
-	char name[26]				/* Short name of archive type */
-		,hexid[26]				/* Hexadecimal ID to search for */
-		,pack[81]				/* Pack command line */
-		,unpack[81];			/* Unpack command line */
-	uint byteloc;				/* Offset to Hex ID */
-	} arcdef_t;
-
-typedef struct {
-	faddr_t 	faddr				/* Fido address of this node */
-			   ,route;				/* Address to route FLO stuff through */
-	ushort		arctype 			/* De/archiver to use for this node */
-			   ,numflags			/* Number of flags defined for this node */
-			   ,pkt_type;			/* Packet type to use for outgoing PKTs */
-	ushort		attr;				/* Message bits to set for this node */
-	char		password[26];		/* Areafix password for this node */
-	char		pktpwd[9];			/* Packet password for this node */
-	flag_t		*flag;				/* Areafix flags for this node */
-	} nodecfg_t;
-
-typedef struct {
-	char		listpath[129];		/* Path to this echolist */
-	uint		numflags,misc;		/* Number of flags for this echolist */
-	flag_t		*flag;				/* Flags to access this echolist */
-	faddr_t 	forward;			/* Where to forward requests */
-	char		password[72];		/* Password to use for forwarding req's */
-	} echolist_t;
-
-typedef struct {
-	faddr_t 	dest;
-	char		fname[13];
-	} attach_t;
-
-typedef struct {
-	char		inbound[82] 		/* Inbound directory */
-			   ,secure[82]			/* Secure Inbound directory */
-			   ,outbound[82]		/* Outbound directory */
-			   ,areafile[128]		/* AREAS.BBS path/filename */
-			   ,logfile[128]		/* LOG path/filename */
-			   ,cfgfile[128];		/* Configuration path/filename */
-	ulong		maxpktsize			/* Maximum size for packets */
-			   ,maxbdlsize			/* Maximum size for bundles */
-			   ,log;				/* What do we log? */
-	int 		badecho;			/* Area to store bad echomail msgs */
-	uint		arcdefs 			/* Number of archive definitions */
-			   ,nodecfgs			/* Number of nodes with configs */
-			   ,listcfgs			/* Number of echolists defined */
-			   ,areas				/* Number of areas defined */
-			   ,notify; 			/* User number (sysop) to notify */
-	arcdef_t   *arcdef; 			/* Each archive definition */
-	nodecfg_t  *nodecfg;			/* Each node configuration */
-	echolist_t *listcfg;			/* Each echolist configuration */
-	areasbbs_t *area;				/* Each area configuration */
-	} config_t;
-
-#ifdef __WATCOMC__
-struct	time	{
-    unsigned char   ti_min;     /* Minutes */
-    unsigned char   ti_hour;    /* Hours */
-    unsigned char   ti_hund;    /* Hundredths of seconds */
-    unsigned char   ti_sec;     /* Seconds */
-};
-
-struct  date    {
-	int 		da_year;	/* Year - 1980 */
-    char        da_day;     /* Day of the month */
-    char        da_mon;     /* Month (1 = Jan) */
-};
-#endif
-
-/***********************/
-/* Function prototypes */
-/***********************/
-void bail(int code);
-char *ultoac(ulong l,char *str);
-int  bstrlen(char *str);
-int  nopen(char *str, int access);
-FILE *fnopen(int *file, char *str,int access);
-char *sectostr(uint sec, char *str);
-void truncsp(char *str);
-ulong ahtoul(char *str);
-int  mv(char *src, char *dest, char copy); /* fast file move/copy function */
-char *timestr(time_t *intime);  /* ASCII representation of time_t */
-time_t dstrtounix(char *str);	/* ASCII date (MM/DD/YY) to unix conversion */
-char *unixtodstr(time_t unix, char *str); /* Unix time to ASCII date */
-int chk_ar(char *str, user_t user); /* checks access requirements */
-ushort crc16(char *str);
-void ucrc16(uchar ch, ushort *rcrc);
-char fexist(char *filespec);
-long flength(char *filespec);
-long fdate(char *filespec);
-faddr_t atofaddr(char *str);
-int  matchnode(faddr_t addr, int exact);
-void export_echomail(char *sub_code,faddr_t addr);
diff --git a/src/sbbs2/echo/sbbsecho.wat b/src/sbbs2/echo/sbbsecho.wat
deleted file mode 100644
index e155042c58..0000000000
--- a/src/sbbs2/echo/sbbsecho.wat
+++ /dev/null
@@ -1,81 +0,0 @@
-############################################
-# Makefile for Synchronet SBBSECHO Utility #
-# For use with Watcom C/C++ 		   #
-############################################
-
-!ifndef OS
-OS	= DOS
-!endif
-
-!ifeq OS DOS
-CC	= *wcc
-!else
-CC	= *wcc386
-!endif
-
-LD	= *wlink
-INCLUDE = \watcom\h;\watcom\h\os2;..\smb;..\rio;..
-!ifeq OS DOS
-CFLAGS	= -s -I$(INCLUDE) -fh=$*.pch -bt=$(OS) -fo=$(OS)\ -ml -DLZH_DYNAMIC_BUF
-!else
-CFLAGS	= -s -I$(INCLUDE) -fh=$*.pch -bt=$(OS) -fo=$(OS)\ 
-!endif
-
-!ifeq OS NT
-SYSTEM  = NT
-!endif
-!ifeq OS DOS
-SYSTEM  = DOS
-!endif
-!ifeq OS OS2
-SYSTEM  = OS2V2
-!endif
-!ifeq OS DOS4G
-SYSTEM  = DOS4G
-!endif
-
-LFLAGS  = option stack=20k system $(SYSTEM)
-
-MAIN	= $(OS)\sbbsecho.exe
-OBJS	= $(OS)\sbbsecho.obj $(OS)\scfgvars.obj $(OS)\scfglib1.obj &
-	  $(OS)\smblib.obj $(OS)\ars.obj $(OS)\lzh.obj &
-	  $(OS)\read_cfg.obj
-HEADERS = ..\sbbs.h ..\sbbsdefs.h ..\scfgvars.c &
-	  ..\smb\smbdefs.h ..\smb\smblib.h
-
-# Implicit C Compile Rule
-.c.obj:
-	@echo Compiling (I) $[@ to $^@ ...
-	$(CC) $(CFLAGS) $[@
-
-# Main EXE Link Rule
-$(MAIN): $(OBJS) 
-	@echo Linking $[@ ...
-        $(LD) $(LFLAGS) file { $(OBJS) } option map
-
-# Global Variables
-$(OS)\scfgvars.obj: ..\scfgvars.c ..\sbbsdefs.h
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) $[@
-
-# Shared Functions
-$(OS)\scfglib1.obj: ..\scfglib1.c ..\sbbs.h ..\sbbsdefs.h ..\scfgvars.c &
-		    ..\scfglib.h
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) $[@
-
-$(OS)\smblib.obj: ..\smb\smblib.c ..\smb\smblib.h ..\smb\smbdefs.h
-	@echo Compiling $[@ to $^@ ...
-	$(CC) -DSMB_GETMSGTXT $(CFLAGS) $[@
-
-$(OS)\lzh.obj: ..\smb\lzh.c ..\smb\lzh.h
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) $[@
-
-$(OS)\ars.obj: ..\ars.c ..\ars_defs.h 
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) $[@
-
-$(OS)\sbbsecho.obj: sbbsecho.c sbbsecho.h
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) $[@
diff --git a/src/sbbs2/email.c b/src/sbbs2/email.c
deleted file mode 100644
index 236bd0d8af..0000000000
--- a/src/sbbs2/email.c
+++ /dev/null
@@ -1,276 +0,0 @@
-#line 1 "EMAIL.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-#include "cmdshell.h"
-
-/****************************************************************************/
-/* Mails a message to usernumber. 'top' is a buffer to place at beginning   */
-/* of message.                                                              */
-/* Called from functions main_sec, newuser, readmail and scanposts			*/
-/****************************************************************************/
-void email(int usernumber, char *top, char *subj, char mode)
-{
-	char	str[256],str2[256],msgpath[256],title[LEN_TITLE+1],ch
-			,buf[SDT_BLOCK_LEN];
-	ushort	xlat=XLAT_NONE,msgattr=0;
-	int 	i,j,x,file;
-	long	l;
-	ulong	length,offset,crc=0xffffffffUL;
-	FILE	*instream;
-	node_t	node;
-	smbmsg_t msg;
-
-sprintf(title,"%.*s",LEN_TITLE,subj);
-
-if(useron.etoday>=level_emailperday[useron.level] && !SYSOP) {
-	bputs(text[TooManyEmailsToday]);
-	return; }
-
-if(usernumber==1 && useron.rest&FLAG('S')
-	&& (node_valuser!=1 || useron.fbacks || useron.emails)) { /* ! val fback */
-    bprintf(text[R_Feedback],sys_op);
-    return; }
-if(usernumber!=1 && useron.rest&FLAG('E')
-	&& (node_valuser!=usernumber || useron.fbacks || useron.emails)) {
-    bputs(text[R_Email]);
-    return; }
-if(!usernumber) {
-    bputs(text[UnknownUser]);
-    return; }
-getuserrec(usernumber,U_MISC,8,str);
-l=ahtoul(str);
-if(l&(DELETED|INACTIVE)) {              /* Deleted or Inactive User */
-    bputs(text[UnknownUser]);
-    return; }
-if(l&NETMAIL && sys_misc&SM_FWDTONET
-	&& yesno(text[ForwardMailQ])) { /* Forward to netmail address */
-    getuserrec(usernumber,U_NETMAIL,LEN_NETMAIL,str);
-	netmail(str,subj,mode);
-    return; }
-bprintf(text[Emailing],username(usernumber,tmp),usernumber);
-action=NODE_SMAL;
-nodesync();
-
-sprintf(str,"%sFEEDBACK.BIN",exec_dir);
-if(usernumber==1 && useron.fbacks && fexist(str)) {
-	exec_bin("FEEDBACK",&main_csi);
-	if(main_csi.logic!=LOGIC_TRUE)
-		return; }
-
-if(sys_misc&SM_ANON_EM && (SYSOP || useron.exempt&FLAG('A'))
-    && !noyes(text[AnonymousQ]))
-	msgattr|=MSG_ANONYMOUS;
-
-if(sys_misc&SM_DELREADM)
-	msgattr|=MSG_KILLREAD;
-
-sprintf(msgpath,"%sINPUT.MSG",node_dir);
-sprintf(str2,"%s #%u",username(usernumber,tmp),usernumber);
-if(!writemsg(msgpath,top,title,mode,0,str2)) {
-    bputs(text[Aborted]);
-    return; }
-
-if(mode&WM_FILE) {
-	sprintf(str2,"%sFILE\\%04u.IN",data_dir,usernumber);
-	mkdir(str2);
-	sprintf(str2,"%sFILE\\%04u.IN\\%s",data_dir,usernumber,title);
-	if(fexist(str2)) {
-		bputs(text[FileAlreadyThere]);
-		remove(msgpath);
-		return; }
-	if(online==ON_LOCAL) {		/* Local upload */
-		bputs(text[EnterPath]);
-		if(!getstr(str,60,K_LINE|K_UPPER)) {
-			bputs(text[Aborted]);
-			remove(msgpath);
-			return; }
-		backslash(str);
-		strcat(str,title);
-		mv(str,str2,1); }
-	else { /* Remote */
-		menu("ULPROT");
-		mnemonics(text[ProtocolOrQuit]);
-		strcpy(str,"Q");
-		for(x=0;x<total_prots;x++)
-			if(prot[x]->ulcmd[0] && chk_ar(prot[x]->ar,useron)) {
-				sprintf(tmp,"%c",prot[x]->mnemonic);
-				strcat(str,tmp); }
-		ch=getkeys(str,0);
-		if(ch=='Q' || sys_status&SS_ABORT) {
-			bputs(text[Aborted]);
-			remove(msgpath);
-			return; }
-		for(x=0;x<total_prots;x++)
-			if(prot[x]->ulcmd[0] && prot[x]->mnemonic==ch
-				&& chk_ar(prot[x]->ar,useron))
-				break;
-		if(x<total_prots)	/* This should be always */
-			protocol(cmdstr(prot[x]->ulcmd,str2,nulstr,NULL),0); }
-	l=flength(str2);
-	if(l>0)
-		bprintf(text[FileNBytesReceived],title,ultoac(l,tmp));
-	else {
-		bprintf(text[FileNotReceived],title);
-		remove(msgpath);
-		return; } }
-
-bputs(text[WritingIndx]);
-
-if((i=smb_stack(&smb,SMB_STACK_PUSH))!=0) {
-	errormsg(WHERE,ERR_OPEN,"MAIL",i);
-	return; }
-sprintf(smb.file,"%sMAIL",data_dir);
-smb.retry_time=smb_retry_time;
-if((i=smb_open(&smb))!=0) {
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_OPEN,smb.file,i);
-	return; }
-
-if(filelength(fileno(smb.shd_fp))<1) {	 /* Create it if it doesn't exist */
-	smb.status.max_crcs=mail_maxcrcs;
-	smb.status.max_age=mail_maxage;
-	smb.status.max_msgs=MAX_SYSMAIL;
-	smb.status.attr=SMB_EMAIL;
-	if((i=smb_create(&smb))!=0) {
-		smb_close(&smb);
-		smb_stack(&smb,SMB_STACK_POP);
-		errormsg(WHERE,ERR_CREATE,smb.file,i);
-		return; } }
-
-if((i=smb_locksmbhdr(&smb))!=0) {
-	smb_close(&smb);
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_LOCK,smb.file,i);
-	return; }
-
-length=flength(msgpath)+2;	 /* +2 for translation string */
-
-if(length&0xfff00000UL) {
-	smb_unlocksmbhdr(&smb);
-	smb_close(&smb);
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_LEN,msgpath,length);
-    return; }
-
-if((i=smb_open_da(&smb))!=0) {
-	smb_unlocksmbhdr(&smb);
-	smb_close(&smb);
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_OPEN,smb.file,i);
-	return; }
-if(sys_misc&SM_FASTMAIL)
-	offset=smb_fallocdat(&smb,length,1);
-else
-	offset=smb_allocdat(&smb,length,1);
-smb_close_da(&smb);
-
-if((file=open(msgpath,O_RDONLY|O_BINARY))==-1
-	|| (instream=fdopen(file,"rb"))==NULL) {
-	smb_freemsgdat(&smb,offset,length,1);
-	smb_unlocksmbhdr(&smb);
-	smb_close(&smb);
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_OPEN,msgpath,O_RDONLY|O_BINARY);
-	return; }
-
-setvbuf(instream,NULL,_IOFBF,2*1024);
-fseek(smb.sdt_fp,offset,SEEK_SET);
-xlat=XLAT_NONE;
-fwrite(&xlat,2,1,smb.sdt_fp);
-x=SDT_BLOCK_LEN-2;				/* Don't read/write more than 255 */
-while(!feof(instream)) {
-	memset(buf,0,x);
-	j=fread(buf,1,x,instream);
-	if((j!=x || feof(instream)) && buf[j-1]==LF && buf[j-2]==CR)
-		buf[j-1]=buf[j-2]=0;
-	if(mail_maxcrcs) {
-		for(i=0;i<j;i++)
-			crc=ucrc32(buf[i],crc); }
-	fwrite(buf,j,1,smb.sdt_fp);
-	x=SDT_BLOCK_LEN; }
-fflush(smb.sdt_fp);
-fclose(instream);
-crc=~crc;
-
-memset(&msg,0,sizeof(smbmsg_t));
-memcpy(msg.hdr.id,"SHD\x1a",4);
-msg.hdr.version=smb_ver();
-msg.hdr.attr=msg.idx.attr=msgattr;
-if(mode&WM_FILE)
-	msg.hdr.auxattr|=MSG_FILEATTACH;
-msg.hdr.when_written.time=msg.hdr.when_imported.time=time(NULL);
-msg.hdr.when_written.zone=msg.hdr.when_imported.zone=sys_timezone;
-
-if(mail_maxcrcs) {
-	i=smb_addcrc(&smb,crc);
-	if(i) {
-		smb_freemsgdat(&smb,offset,length,1);
-		smb_unlocksmbhdr(&smb);
-		smb_close(&smb);
-		smb_stack(&smb,SMB_STACK_POP);
-		bputs("\1r\1h\1iDuplicate message!\r\n");
-		return; } }
-
-msg.hdr.offset=offset;
-
-username(usernumber,str);
-smb_hfield(&msg,RECIPIENT,strlen(str),str);
-
-sprintf(str,"%u",usernumber);
-smb_hfield(&msg,RECIPIENTEXT,strlen(str),str);
-msg.idx.to=usernumber;
-
-strcpy(str,useron.alias);
-smb_hfield(&msg,SENDER,strlen(str),str);
-
-sprintf(str,"%u",useron.number);
-smb_hfield(&msg,SENDEREXT,strlen(str),str);
-msg.idx.from=useron.number;
-
-smb_hfield(&msg,SUBJECT,strlen(title),title);
-strlwr(title);
-msg.idx.subj=crc16(title);
-
-smb_dfield(&msg,TEXT_BODY,length);
-
-smb_unlocksmbhdr(&smb);
-i=smb_addmsghdr(&smb,&msg,SMB_SELFPACK);
-smb_close(&smb);
-smb_stack(&smb,SMB_STACK_POP);
-
-smb_freemsgmem(&msg);
-if(i) {
-	smb_freemsgdat(&smb,offset,length,1);
-	errormsg(WHERE,ERR_WRITE,smb.file,i);
-	return; }
-
-if(usernumber==1) {
-    useron.fbacks++;
-    logon_fbacks++;
-    putuserrec(useron.number,U_FBACKS,5,itoa(useron.fbacks,tmp,10)); }
-else {
-    useron.emails++;
-    logon_emails++;
-    putuserrec(useron.number,U_EMAILS,5,itoa(useron.emails,tmp,10)); }
-useron.etoday++;
-putuserrec(useron.number,U_ETODAY,5,itoa(useron.etoday,tmp,10));
-bprintf(text[Emailed],username(usernumber,tmp),usernumber);
-sprintf(str,"E-mailed %s #%d",username(usernumber,tmp),usernumber);
-logline("E+",str);
-if(mode&WM_FILE && online==ON_REMOTE)
-	autohangup();
-if(msgattr&MSG_ANONYMOUS)				/* Don't tell user if anonymous */
-    return;
-for(i=1;i<=sys_nodes;i++) { /* Tell user, if online */
-    getnodedat(i,&node,0);
-    if(node.useron==usernumber && !(node.misc&NODE_POFF)
-        && (node.status==NODE_INUSE || node.status==NODE_QUIET)) {
-        sprintf(str,text[EmailNodeMsg],node_num,useron.alias);
-		putnmsg(i,str);
-        break; } }
-if(i>sys_nodes) {	/* User wasn't online, so leave short msg */
-	sprintf(str,text[UserSentYouMail],useron.alias);
-	putsmsg(usernumber,str); }
-}
diff --git a/src/sbbs2/etext.c b/src/sbbs2/etext.c
deleted file mode 100644
index 3a25776c2c..0000000000
--- a/src/sbbs2/etext.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/* ETEXT.C */
-
-#include "etext.h"
-
-unsigned long VersionNoticeDOS[]={ 3356835823UL,3314249220UL,374396000UL,3922003403UL,2881467347UL,2486246197UL,3111832648UL,4155039507UL,42307UL };
-unsigned long VersionNoticeOS2[]={ 3356835822UL,3314249220UL,374396000UL,3922003403UL,1532953555UL,2026511120UL,3143769178UL,3289372253UL,5547459UL };
-unsigned long VersionNoticeW32[]={ 3356835809UL,3314249220UL,374396000UL,3922003403UL,1586398163UL,88738067UL,3070891308UL,395014492UL,726984154UL };
-unsigned long CopyrightNotice[]={ 2870097002UL,1320491556UL,3387089248UL,1175526980UL,47313347UL,3589138741UL,3110223426UL,207123671UL };
-unsigned long CopyrightAddress[]={ 2870096911UL,1320491556UL,3387089248UL,1175526980UL,47313347UL,3589138741UL,3110223426UL,1280865495UL,730555715UL,2860505763UL,506422981UL,3822509617UL,1593759605UL,2730878830UL,2073372242UL,94853UL };
-unsigned long Unregistered[]={ 4089925185UL,456418497UL };
-unsigned long Synchronet[]={ 3356835779UL,3314249220UL,5216UL };
-unsigned long QWKheader[]={ 3090677251UL,1335831276UL,2558259650UL,3930102115UL,921508403UL,3652942133UL,2169713010UL,4229477056UL,3478431186UL,2126281968UL,510119879UL,3510789355UL,3377605456UL,2160545622UL,2276673404UL,236723209UL,580UL };
diff --git a/src/sbbs2/etext.dat b/src/sbbs2/etext.dat
deleted file mode 100644
index 60a479552e..0000000000
--- a/src/sbbs2/etext.dat
+++ /dev/null
@@ -1,16 +0,0 @@
-VersionNoticeDOS:
-Synchronet_BBS_for_DOS__Version_2.30__
-VersionNoticeOS2:
-Synchronet_BBS_for_OS/2__Version_2.30__
-VersionNoticeW32:
-Synchronet_BBS_for_Win32__Version_2.30__
-CopyrightNotice:
-Developed 1990-2000 by Rob Swindell
-CopyrightAddress:
-Developed 1990-2000 by Rob Swindell;_PO_Box_501,_Yorba_Linda,_CA_92885
-Unregistered:
-00000000
-Synchronet:
-Synchronet
-QWKheader:
-Produced_by_Synchronet_BBS__Version_2__Developed 1990-2000 by Rob Swindell
diff --git a/src/sbbs2/etext.h b/src/sbbs2/etext.h
deleted file mode 100644
index f08e15773d..0000000000
--- a/src/sbbs2/etext.h
+++ /dev/null
@@ -1,10 +0,0 @@
-/* ETEXT.H */
-
-extern unsigned long VersionNoticeDOS[];
-extern unsigned long VersionNoticeOS2[];
-extern unsigned long VersionNoticeW32[];
-extern unsigned long CopyrightNotice[];
-extern unsigned long CopyrightAddress[];
-extern unsigned long Unregistered[];
-extern unsigned long Synchronet[];
-extern unsigned long QWKheader[];
diff --git a/src/sbbs2/exec.c b/src/sbbs2/exec.c
deleted file mode 100644
index e62230eb3e..0000000000
--- a/src/sbbs2/exec.c
+++ /dev/null
@@ -1,1557 +0,0 @@
-#line 1 "EXEC.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-#include "cmdshell.h"
-
-char *readtext(long *line, FILE *stream);
-
-extern csi_t main_csi;
-extern FILE *nodefile_fp,*node_ext_fp,*logfile_fp;
-
-uint global_str_vars=0;
-char **global_str_var=0;
-long *global_str_var_name=0;
-uint global_int_vars=0;
-long *global_int_var=0;
-long *global_int_var_name=0;
-
-char *sysvar_p[MAX_SYSVARS]={NULL};
-int sysvar_pi=0;
-long sysvar_l[MAX_SYSVARS]={0L};
-int sysvar_li=0;
-
-char **getstrvar(csi_t *bin, long name)
-{
-	int i;
-
-if(sysvar_pi>=MAX_SYSVARS) sysvar_pi=0;
-switch(name) {
-	case 0:
-		return((char **)&(bin->str));
-	case 0x490873f1:
-		sysvar_p[sysvar_pi]=useron.alias;
-		break;
-	case 0x5de44e8b:
-		sysvar_p[sysvar_pi]=useron.name;
-		break;
-	case 0x979ef1de:
-		sysvar_p[sysvar_pi]=useron.handle;
-		break;
-	case 0xc8cd5fb7:
-		sysvar_p[sysvar_pi]=useron.comp;
-		break;
-	case 0xcc7aca99:
-		sysvar_p[sysvar_pi]=useron.note;
-		break;
-	case 0xa842c43b:
-		sysvar_p[sysvar_pi]=useron.address;
-		break;
-	case 0x4ee1ff3a:
-		sysvar_p[sysvar_pi]=useron.location;
-		break;
-	case 0xf000aa78:
-		sysvar_p[sysvar_pi]=useron.zipcode;
-		break;
-	case 0xcdb7e4a9:
-		sysvar_p[sysvar_pi]=useron.pass;
-		break;
-	case 0x94d59a7a:
-		sysvar_p[sysvar_pi]=useron.birth;
-		break;
-	case 0xec2b8fb8:
-		sysvar_p[sysvar_pi]=useron.phone;
-		break;
-	case 0x08f65a2a:
-		sysvar_p[sysvar_pi]=useron.modem;
-		break;
-	case 0xc7e0e8ce:
-		sysvar_p[sysvar_pi]=useron.netmail;
-		break;
-	case 0xd3606303:
-		sysvar_p[sysvar_pi]=useron.tmpext;
-		break;
-	case 0x3178f9d6:
-		sysvar_p[sysvar_pi]=useron.comment;
-		break;
-
-    case 0x41239e21:
-		sysvar_p[sysvar_pi]=connection;
-		break;
-	case 0xe9f1fad0:
-		sysvar_p[sysvar_pi]=cap_fname;
-		break;
-	case 0x90fc82b4:
-		sysvar_p[sysvar_pi]=cid;
-		break;
-	case 0x15755030:
-		return((char **)&comspec);
-
-	case 0xf19cd046:
-		sysvar_p[sysvar_pi]=wordwrap;
-		break;
-
-	default:
-		if(bin->str_var && bin->str_var_name)
-			for(i=0;i<bin->str_vars;i++)
-				if(bin->str_var_name[i]==name)
-					return((char **)&(bin->str_var[i]));
-		if(global_str_var && global_str_var_name)
-			for(i=0;i<global_str_vars;i++)
-				if(global_str_var_name[i]==name)
-					return(&(global_str_var[i]));
-		return(NULL); }
-
-return((char **)&sysvar_p[sysvar_pi++]);
-}
-
-long *getintvar(csi_t *bin, long name)
-{
-	int i;
-
-if(sysvar_li==MAX_SYSVARS) sysvar_li=0;
-switch(name) {
-	case 0:
-		sysvar_l[sysvar_li]=strtol(bin->str,0,0);
-		break;
-	case 0x908ece53:
-		sysvar_l[sysvar_li]=useron.number;
-		break;
-	case 0xdcedf626:
-		sysvar_l[sysvar_li]=useron.uls;
-		break;
-	case 0xc1093f61:
-		sysvar_l[sysvar_li]=useron.dls;
-		break;
-	case 0x2039a29f:
-		sysvar_l[sysvar_li]=useron.posts;
-		break;
-	case 0x4a9f3955:
-		sysvar_l[sysvar_li]=useron.emails;
-		break;
-	case 0x0c8dcf3b:
-		sysvar_l[sysvar_li]=useron.fbacks;
-		break;
-	case 0x9a13bf95:
-		sysvar_l[sysvar_li]=useron.etoday;
-		break;
-	case 0xc9082cbd:
-		sysvar_l[sysvar_li]=useron.ptoday;
-		break;
-	case 0x7c72376d:
-		sysvar_l[sysvar_li]=useron.timeon;
-		break;
-	case 0xac72c50b:
-		sysvar_l[sysvar_li]=useron.textra;
-		break;
-	case 0x04807a11:
-		sysvar_l[sysvar_li]=useron.logons;
-		break;
-	case 0x52996eab:
-		sysvar_l[sysvar_li]=useron.ttoday;
-		break;
-	case 0x098bdfcb:
-		sysvar_l[sysvar_li]=useron.tlast;
-		break;
-	case 0xbd1cee5d:
-		sysvar_l[sysvar_li]=useron.ltoday;
-		break;
-	case 0x07954570:
-		sysvar_l[sysvar_li]=useron.xedit;
-		break;
-	case 0xedf6aa98:
-		sysvar_l[sysvar_li]=useron.shell;
-		break;
-	case 0x328ed476:
-		sysvar_l[sysvar_li]=useron.level;
-		break;
-	case 0x9e70e855:
-		sysvar_l[sysvar_li]=useron.sex;
-		break;
-	case 0x094cc42c:
-		sysvar_l[sysvar_li]=useron.rows;
-		break;
-	case 0xabc4317e:
-		sysvar_l[sysvar_li]=useron.prot;
-		break;
-	case 0x7dd9aac0:
-		sysvar_l[sysvar_li]=useron.leech;
-		break;
-	case 0x7c602a37:
-		return((long *)&useron.misc);
-	case 0x61be0d36:
-		return((long *)&useron.qwk);
-	case 0x665ac227:
-		return((long *)&useron.chat);
-	case 0x951341ab:
-		return((long *)&useron.flags1);
-	case 0x0c1a1011:
-		return((long *)&useron.flags2);
-	case 0x7b1d2087:
-		return((long *)&useron.flags3);
-	case 0xe579b524:
-		return((long *)&useron.flags4);
-	case 0x12e7d6d2:
-		return((long *)&useron.exempt);
-	case 0xfed3115d:
-		return((long *)&useron.rest);
-	case 0xb65dd6d4:
-		return((long *)&useron.ulb);
-	case 0xabb91f93:
-		return((long *)&useron.dlb);
-	case 0x92fb364f:
-		return((long *)&useron.cdt);
-	case 0xd0a99c72:
-		return((long *)&useron.min);
-	case 0xd7ae3022:
-		return((long *)&useron.freecdt);
-	case 0x1ef214ef:
-		return((long *)&useron.firston);
-	case 0x0ea515b1:
-		return((long *)&useron.laston);
-	case 0x2aaf9bd3:
-		return((long *)&useron.expire);
-	case 0x89c91dc8:
-		return((long *)&useron.pwmod);
-	case 0x5b0d0c54:
-		return((long *)&useron.ns_time);
-
-	case 0xae256560:
-		return((long *)&cur_rate);
-	case 0x2b3c257f:
-		return((long *)&cur_cps);
-	case 0x1c4455ee:
-		return((long *)&dte_rate);
-	case 0x7fbf958e:
-		return((long *)&lncntr);
-	case 0x5c1c1500:
-		return((long *)&tos);
-	case 0x613b690e:
-		return((long *)&rows);
-	case 0x205ace36:
-		return((long *)&autoterm);
-	case 0x7d0ed0d1:
-		return((long *)&console);
-	case 0xbf31a280:
-		return((long *)&answertime);
-	case 0x83aa2a6a:
-		return((long *)&logontime);
-	case 0xb50cb889:
-		return((long *)&ns_time);
-	case 0xae92d249:
-		return((long *)&last_ns_time);
-	case 0x97f99eef:
-		return((long *)&online);
-	case 0x381d3c2a:
-		return((long *)&sys_status);
-	case 0x7e29c819:
-		return((long *)&sys_misc);
-	case 0x11c83294:
-		return((long *)&sys_psnum);
-	case 0x02408dc5:
-		sysvar_l[sysvar_li]=sys_timezone;
-		break;
-	case 0x78afeaf1:
-		sysvar_l[sysvar_li]=sys_pwdays;
-		break;
-	case 0xd859385f:
-		sysvar_l[sysvar_li]=sys_deldays;
-		break;
-	case 0x6392dc62:
-		sysvar_l[sysvar_li]=sys_autodel;
-		break;
-	case 0x698d59b4:
-		sysvar_l[sysvar_li]=sys_nodes;
-		break;
-	case 0x6fb1c46e:
-		sysvar_l[sysvar_li]=sys_exp_warn;
-		break;
-	case 0xdf391ca7:
-		sysvar_l[sysvar_li]=sys_lastnode;
-		break;
-	case 0xdd982780:
-		sysvar_l[sysvar_li]=sys_autonode;
-		break;
-	case 0xf53db6c7:
-		sysvar_l[sysvar_li]=node_scrnlen;
-		break;
-	case 0xa1f0fcb7:
-		sysvar_l[sysvar_li]=node_scrnblank;
-		break;
-	case 0x709c07da:
-		return((long *)&node_misc);
-	case 0xb17e7914:
-		sysvar_l[sysvar_li]=node_valuser;
-		break;
-	case 0xadae168a:
-		sysvar_l[sysvar_li]=node_ivt;
-		break;
-	case 0x2aa89801:
-		sysvar_l[sysvar_li]=node_swap;
-		break;
-	case 0x4f02623a:
-		sysvar_l[sysvar_li]=node_minbps;
-		break;
-	case 0xe7a7fb07:
-		sysvar_l[sysvar_li]=node_num;
-		break;
-	case 0x6c8e350a:
-		sysvar_l[sysvar_li]=new_level;
-		break;
-	case 0xccfe7c5d:
-		return((long *)&new_flags1);
-	case 0x55f72de7:
-		return((long *)&new_flags2);
-	case 0x22f01d71:
-		return((long *)&new_flags3);
-	case 0xbc9488d2:
-		return((long *)&new_flags4);
-	case 0x4b0aeb24:
-		return((long *)&new_exempt);
-	case 0x20cb6325:
-		return((long *)&new_rest);
-	case 0x31178ba2:
-		return((long *)&new_cdt);
-	case 0x7345219f:
-		return((long *)&new_min);
-	case 0xb3f64be4:
-		sysvar_l[sysvar_li]=new_shell;
-		break;
-	case 0xa278584f:
-		return((long *)&new_misc);
-	case 0x7342a625:
-		sysvar_l[sysvar_li]=new_expire;
-		break;
-	case 0x75dc4306:
-		sysvar_l[sysvar_li]=new_prot;
-		break;
-	case 0xfb394e27:
-		sysvar_l[sysvar_li]=expired_level;
-		break;
-	case 0x89b69753:
-		return((long *)&expired_flags1);
-	case 0x10bfc6e9:
-		return((long *)&expired_flags2);
-	case 0x67b8f67f:
-		return((long *)&expired_flags3);
-	case 0xf9dc63dc:
-		return((long *)&expired_flags4);
-	case 0x0e42002a:
-		return((long *)&expired_exempt);
-	case 0x4569c62e:
-		return((long *)&expired_rest);
-	case 0xfcf3542e:
-		sysvar_l[sysvar_li]=min_dspace;
-		break;
-	case 0xcf9ce02c:
-		sysvar_l[sysvar_li]=cdt_min_value;
-		break;
-	case 0xfcb5b274:
-		return((long *)&cdt_per_dollar);
-	case 0x4db200d2:
-		sysvar_l[sysvar_li]=leech_pct;
-		break;
-	case 0x9a7d9cca:
-		sysvar_l[sysvar_li]=leech_sec;
-		break;
-	case 0x396b7167:
-		return((long *)&netmail_cost);
-	case 0x5eeaff21:
-		sysvar_l[sysvar_li]=netmail_misc;
-		break;
-	case 0x82d9484e:
-		return((long *)&inetmail_cost);
-	case 0xe558c608:
-		return((long *)&inetmail_misc);
-
-	case 0xc6e8539d:
-		return((long *)&logon_ulb);
-	case 0xdb0c9ada:
-		return((long *)&logon_dlb);
-	case 0xac58736f:
-		return((long *)&logon_uls);
-	case 0xb1bcba28:
-		return((long *)&logon_dls);
-	case 0x9c5051c9:
-		return((long *)&logon_posts);
-	case 0xc82ba467:
-		return((long *)&logon_emails);
-	case 0x8e395209:
-		return((long *)&logon_fbacks);
-	case 0x8b12ba9d:
-		return((long *)&posts_read);
-	case 0xe51c1956:
-		sysvar_l[sysvar_li]=(ulong)logfile_fp;
-		break;
-	case 0x5a22d4bd:
-		sysvar_l[sysvar_li]=(ulong)nodefile_fp;
-		break;
-	case 0x3a37c26b:
-		sysvar_l[sysvar_li]=(ulong)node_ext_fp;
-		break;
-
-	case 0xeb6c9c73:
-		sysvar_l[sysvar_li]=errorlevel;
-		break;
-
-	case 0x5aaccfc5:
-		sysvar_l[sysvar_li]=errno;
-		break;
-
-	case 0x057e4cd4:
-		sysvar_l[sysvar_li]=timeleft;
-		break;
-
-	case 0x1e5052a7:
-		return((long *)&max_minutes);
-	case 0xedc643f1:
-		return((long *)&max_qwkmsgs);
-
-	case 0x430178ec:
-		return((long *)&uq);
-
-	default:
-		if(bin->int_var && bin->int_var_name)
-			for(i=0;i<bin->int_vars;i++)
-				if(bin->int_var_name[i]==name)
-					return(&bin->int_var[i]);
-		if(global_int_var && global_int_var_name)
-			for(i=0;i<global_int_vars;i++)
-				if(global_int_var_name[i]==name)
-					return(&global_int_var[i]);
-		return(NULL); }
-
-return(&sysvar_l[sysvar_li++]);
-}
-
-void clearvars(csi_t *bin)
-{
-bin->str_vars=0;
-bin->str_var=NULL;
-bin->str_var_name=NULL;
-bin->int_vars=0;
-bin->int_var=NULL;
-bin->int_var_name=NULL;
-bin->files=0;
-bin->retval=0;
-}
-
-void freevars(csi_t *bin)
-{
-	int i;
-
-if(bin->str_var) {
-	for(i=0;i<bin->str_vars;i++)
-		if(bin->str_var[i])
-			FREE(bin->str_var[i]);
-	FREE(bin->str_var); }
-if(bin->int_var)
-	FREE(bin->int_var);
-if(bin->str_var_name)
-	FREE(bin->str_var_name);
-if(bin->int_var_name)
-	FREE(bin->int_var_name);
-for(i=0;i<bin->files;i++)
-	if(bin->file[i]) {
-		fclose((FILE *)bin->file[i]);
-		bin->file[i]=0; }
-}
-
-/****************************************************************************/
-/* Copies a new value (str) into the string variable pointed to by p		*/
-/* re-allocating if necessary												*/
-/****************************************************************************/
-char *copystrvar(csi_t *csi, char *p, char *str)
-{
-	char *np;	/* New pointer after realloc */
-	int i;
-
-if(p!=csi->str) {
-	if(p)
-		for(i=0;i<MAX_SYSVARS;i++)
-			if(p==sysvar_p[i])
-				break;
-	if(!p || i==MAX_SYSVARS) {		/* Not system variable */
-		if((np=REALLOC(p,strlen(str)+1))==NULL)
-			errormsg(WHERE,ERR_ALLOC,"variable",strlen(str)+1);
-		else
-			p=np; } }
-if(p)
-	strcpy(p,str);
-return(p);
-}
-
-
-long exec_bin(uchar *mod, csi_t *csi)
-{
-    char    str[128];
-	int 	i,file;
-    csi_t   bin;
-
-//lprintf("%s %d\r\n",__FILE__,__LINE__);
-memcpy(&bin,csi,sizeof(csi_t));
-clearvars(&bin);
-
-sprintf(str,"%s%s.BIN",exec_dir,mod);
-if((file=nopen(str,O_RDONLY|O_BINARY))==-1) {
-    errormsg(WHERE,ERR_OPEN,str,O_RDONLY|O_BINARY);
-	return(-1); }
-
-//lprintf("%s %d\r\n",__FILE__,__LINE__);
-bin.length=filelength(file);
-if((bin.cs=(uchar *)MALLOC(bin.length))==NULL) {
-    close(file);
-    errormsg(WHERE,ERR_ALLOC,str,bin.length);
-	return(-1); }
-if(lread(file,bin.cs,bin.length)!=bin.length) {
-    close(file);
-    errormsg(WHERE,ERR_READ,str,bin.length);
-    FREE(bin.cs);
-	return(-1); }
-close(file);
-
-bin.ip=bin.cs;
-bin.rets=bin.cmdrets=bin.misc=0;
-//lprintf("%s %d\r\n",__FILE__,__LINE__);
-while(exec(&bin)==0)
-	if(!(bin.misc&CS_OFFLINE_EXEC)) {
-		checkline();
-		if(!online)
-			break; }
-//lprintf("%s %d logic=%d\r\n",__FILE__,__LINE__,bin.logic);
-freevars(&bin);
-FREE(bin.cs);
-csi->logic=bin.logic;
-return(bin.retval);
-}
-
-/****************************************************************************/
-/* Skcsi->ip to a specific instruction                                           */
-/****************************************************************************/
-void skipto(csi_t *csi, uchar inst)
-{
-	int i,j;
-
-while(csi->ip<csi->cs+csi->length && ((inst&0x80) || *csi->ip!=inst)) {
-
-	if(*csi->ip==CS_IF_TRUE || *csi->ip==CS_IF_FALSE
-		|| (*csi->ip>=CS_IF_GREATER && *csi->ip<=CS_IF_LESS_OR_EQUAL)) {
-        csi->ip++;
-        skipto(csi,CS_ENDIF);
-        csi->ip++;
-        continue; }
-
-    if(inst==CS_ELSEORENDIF
-        && (*csi->ip==CS_ELSE || *csi->ip==CS_ENDIF))
-        break;
-
-	if(inst==CS_NEXTCASE
-		&& (*csi->ip==CS_CASE || *csi->ip==CS_DEFAULT
-			|| *csi->ip==CS_END_SWITCH))
-		break;
-
-	if(*csi->ip==CS_SWITCH) {
-		csi->ip++;
-		csi->ip+=4; /* Skip variable name */
-		skipto(csi,CS_END_SWITCH);
-		csi->ip++;
-		continue; }
-
-    if(*csi->ip==CS_CASE) {
-        csi->ip++;
-        csi->ip+=4; /* Skip value */
-        skipto(csi,CS_NEXTCASE);
-        continue; }
-
-    if(*csi->ip==CS_CMDKEY) {
-        csi->ip+=2;
-        skipto(csi,CS_END_CMD);
-        csi->ip++;
-        continue; }
-	if(*csi->ip==CS_CMDSTR || *csi->ip==CS_CMDKEYS) {
-        csi->ip++;              /* skip inst */
-        while(*(csi->ip++));    /* skip string */
-        skipto(csi,CS_END_CMD);
-        csi->ip++;
-        continue; }
-
-    if(*csi->ip>=CS_FUNCTIONS) {
-        csi->ip++;
-        continue; }
-
-    if(*csi->ip>=CS_MISC) {
-        switch(*csi->ip) {
-			case CS_VAR_INSTRUCTION:
-				csi->ip++;
-				switch(*(csi->ip++)) {
-					case SHOW_VARS:
-						continue;
-					case PRINT_VAR:
-					case DEFINE_STR_VAR:
-					case DEFINE_INT_VAR:
-					case DEFINE_GLOBAL_STR_VAR:
-					case DEFINE_GLOBAL_INT_VAR:
-					case TIME_INT_VAR:
-					case STRUPR_VAR:
-					case STRLWR_VAR:
-					case TRUNCSP_STR_VAR:
-					case CHKFILE_VAR:
-					case STRIP_CTRL_STR_VAR:
-						csi->ip+=4; /* Skip variable name */
-						continue;
-					case GETSTR_VAR:
-					case GETNAME_VAR:
-					case GETLINE_VAR:
-					case GETSTRUPR_VAR:
-					case SHIFT_STR_VAR:
-					case SEND_FILE_VIA_VAR:
-					case RECEIVE_FILE_VIA_VAR:
-						csi->ip+=4; /* Skip variable name */
-						csi->ip++;	/* Skip char */
-						continue;
-					case PRINTTAIL_VAR_MODE:
-						csi->ip++;	/* Skip length */
-					case PRINTFILE_VAR_MODE:
-					case GETNUM_VAR:
-						csi->ip+=4; /* Skip variable name */
-						csi->ip+=2;  /* Skip max num */
-                        continue;
-					case STRNCMP_VAR:
-						csi->ip++;	/* Skip length */
-					case SET_STR_VAR:
-					case COMPARE_STR_VAR:
-					case CAT_STR_VAR:
-					case STRSTR_VAR:
-						csi->ip+=4; /* Skip variable name */
-						while(*(csi->ip++));	/* skip string */
-						continue;
-					case FORMAT_TIME_STR:
-						csi->ip+=4; /* Skip destination variable */
-						while(*(csi->ip++));	/* Skip string */
-						csi->ip+=4; /* Skip int variable */
-						continue;
-					case FORMAT_STR_VAR:	/* SPRINTF */
-						csi->ip+=4; /* Skip destination variable */
-					case VAR_PRINTF:
-						while(*(csi->ip++));	/* Skip string */
-						j=*(csi->ip++); /* Skip number of arguments */
-						for(i=0;i<j;i++)
-							csi->ip+=4; /* Skip arguments */
-						continue;
-					case SEND_FILE_VIA:
-					case RECEIVE_FILE_VIA:
-						csi->ip++;				/* Skip prot */
-						while(*(csi->ip++));	/* Skip filepath */
-						continue;
-					case GETSTR_MODE:
-					case STRNCMP_VARS:
-						csi->ip++;	/* Skip length */
-					default:
-						csi->ip+=8; /* Skip two variable names or var & val */
-						continue; }
-
-			case CS_FIO_FUNCTION:
-				csi->ip++;
-				switch(*(csi->ip++)) {
-					case FIO_OPEN:
-						csi->ip+=4; 			/* File handle */
-						csi->ip+=2; 			/* Access */
-						while(*(csi->ip++));	/* path/filename */
-						continue;
-					case FIO_CLOSE:
-					case FIO_FLUSH:
-					case FIO_EOF:
-					case REMOVE_FILE:
-					case REMOVE_DIR:
-					case CHANGE_DIR:
-					case MAKE_DIR:
-					case REWIND_DIR:
-					case CLOSE_DIR:
-						csi->ip+=4; 			/* File handle */
-						continue;
-					case FIO_SET_ETX:
-						csi->ip++;
-						continue;
-					case FIO_PRINTF:
-						csi->ip+=4; 			/* File handle */
-						while(*(csi->ip++));	/* String */
-						j=*(csi->ip++); 		/* Number of arguments */
-						for(i=0;i<j;i++)
-							csi->ip+=4; 		/* Arguments */
-                        continue;
-					case FIO_READ:
-					case FIO_WRITE:
-					case FIO_SEEK:
-					case FIO_SEEK_VAR:
-					case FIO_OPEN_VAR:
-						csi->ip+=4; 			/* File handle */
-						csi->ip+=4; 			/* Variable */
-						csi->ip+=2; 			/* Length/access */
-						continue;
-					case FIO_READ_VAR:
-					case FIO_WRITE_VAR:
-						csi->ip+=4; 			/* File handle */
-						csi->ip+=4; 			/* Buf Variable */
-						csi->ip+=4; 			/* Length Variable */
-                        continue;
-					default:
-                        csi->ip+=4;             /* File handle */
-                        csi->ip+=4;             /* Variable */
-						continue; }
-
-			case CS_COMPARE_ARS:
-                csi->ip++;
-                csi->ip+=(*csi->ip);
-                csi->ip++;
-                break;
-            case CS_TOGGLE_USER_MISC:
-            case CS_COMPARE_USER_MISC:
-			case CS_TOGGLE_USER_CHAT:
-			case CS_COMPARE_USER_CHAT:
-			case CS_TOGGLE_USER_QWK:
-			case CS_COMPARE_USER_QWK:
-                csi->ip+=5;
-                break;
-            case CS_REPLACE_TEXT:
-                csi->ip+=3;     /* skip inst and text # */
-                while(*(csi->ip++));    /* skip string */
-                break;
-			case CS_USE_INT_VAR:
-				csi->ip+=7; // inst, var, offset, len
-				break;
-            default:
-                csi->ip++; }
-        continue; }
-
-	if(*csi->ip==CS_ONE_MORE_BYTE) {
-		csi->ip++;				/* skip extension */
-		csi->ip++;				/* skip instruction */
-		continue; }
-
-	if(*csi->ip==CS_TWO_MORE_BYTES) {
-		csi->ip++;				/* skip extension */
-		csi->ip++;				/* skip instruction */
-		csi->ip++;				/* skip argument */
-        continue; }
-
-	if(*csi->ip==CS_THREE_MORE_BYTES) {
-		csi->ip++;				/* skip extension */
-		csi->ip++;				/* skip instruction */
-		csi->ip+=2; 			/* skip argument */
-        continue; }
-
-	if(*csi->ip==CS_STR_FUNCTION) {
-		csi->ip++;				/* skip extension */
-		csi->ip++;				/* skip instruction */
-        while(*(csi->ip++));    /* skip string */
-        continue; }
-
-    if(*csi->ip>=CS_ASCIIZ) {
-        csi->ip++;              /* skip inst */
-        while(*(csi->ip++));    /* skip string */
-        continue; }
-
-    if(*csi->ip>=CS_THREE_BYTE) {
-        csi->ip+=3;
-        continue; }
-
-    if(*csi->ip>=CS_TWO_BYTE) {
-        csi->ip+=2;
-        continue; }
-
-    csi->ip++; }
-}
-
-
-int exec(csi_t *csi)
-{
-	uchar	str[256],tmp2[128],buf[1025],*path,ch,*p,**pp,**pp1,**pp2;
-	int 	i,j,k,s,file,x,y;
-	long	l,*lp,*lp1,*lp2;
-	stats_t stats;
-	time_t	t;
-	FILE	*stream;
-
-//lprintf("line %d (%d %d %d)\r\n",__LINE__,curgrp,cursub[curgrp],usrsub[curgrp]);
-#if 0
-if(curgrp>=total_grps)
-	curgrp=0;
-if(cursub[curgrp]>=total_subs)
-	cursub[curgrp]=0;
-if(curlib>=total_libs)
-	curlib=0;
-if(curdir[curlib]>=total_dirs)
-	curdir[curlib]=0;
-#endif
-
-if(usrgrps)
-	cursubnum=usrsub[curgrp][cursub[curgrp]];		/* Used for ARS */
-else
-	cursubnum=INVALID_SUB;
-if(usrlibs) {
-	curdirnum=usrdir[curlib][curdir[curlib]];		/* Used for ARS */
-	path=dir[usrdir[curlib][curdir[curlib]]]->path; }
-else {
-	curdirnum=INVALID_DIR;
-	path=nulstr; }
-now=time(NULL);
-
-if(csi->ip>=csi->cs+csi->length)
-	return(1);
-
-//lprintf("%04X: %02X ",(uint)(csi->ip-csi->cs),*csi->ip);
-
-if(*csi->ip>=CS_FUNCTIONS)
-	return(exec_function(csi));
-
-/**********************************************/
-/* Miscellaneous variable length instructions */
-/**********************************************/
-
-if(*csi->ip>=CS_MISC)
-	return(exec_misc(csi,path));
-
-/********************************/
-/* ASCIIZ argument instructions */
-/********************************/
-
-if(*csi->ip>=CS_ASCIIZ) {
-	switch(*(csi->ip++)) {
-		case CS_STR_FUNCTION:
-			switch(*(csi->ip++)) {
-				case CS_LOGIN:
-					csi->logic=login(csi->str,csi->ip);
-					break;
-				case CS_LOAD_TEXT:
-					csi->logic=LOGIC_FALSE;
-					for(i=0;i<TOTAL_TEXT;i++)
-						if(text[i]!=text_sav[i]) {
-							if(text[i]!=nulstr)
-								FREE(text[i]);
-							text[i]=text_sav[i]; }
-					sprintf(str,"%s%s.DAT"
-						,ctrl_dir,cmdstr(csi->ip,path,csi->str,buf));
-					if((stream=fnopen(&file,str,O_RDONLY))==NULL) {
-						errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-						break; }
-					for(i=0;i<TOTAL_TEXT && !feof(stream);i++) {
-						if((text[i]=readtext((long *)NULL,stream))==NULL) {
-							i--;
-							continue; }
-						if(!strcmp(text[i],text_sav[i])) {	/* If identical */
-							FREE(text[i]);					/* Don't alloc */
-							text[i]=text_sav[i]; }
-						else if(text[i][0]==0) {
-							FREE(text[i]);
-							text[i]=nulstr; } }
-					if(i<TOTAL_TEXT) {
-						fclose(stream);
-						errormsg(WHERE,ERR_READ,str,TOTAL_TEXT);
-						break; }
-					fclose(stream);
-					csi->logic=LOGIC_TRUE;
-					break;
-				default:
-					errormsg(WHERE,ERR_CHK,"shell instruction",*(csi->ip-1));
-					break; }
-			while(*(csi->ip++));	 /* Find NULL */
-			return(0);
-		case CS_LOG:
-			log(cmdstr(csi->ip,path,csi->str,buf));
-			break;
-		case CS_GETCMD:
-			csi->cmd=getkeys(csi->ip,0);
-			if((char)csi->cmd==-1)
-				csi->cmd=3;
-			break;
-		case CS_CMDSTR:
-			if(stricmp(csi->str,csi->ip)) {
-				while(*(csi->ip++));		/* Find NULL */
-				skipto(csi,CS_END_CMD);
-				csi->ip++;
-				return(0); }
-			break;
-		case CS_CMDKEYS:
-			for(i=0;csi->ip[i];i++)
-				if(csi->cmd==csi->ip[i])
-					break;
-			if(!csi->ip[i]) {
-				while(*(csi->ip++));		/* Find NULL */
-				skipto(csi,CS_END_CMD);
-				csi->ip++;
-				return(0); }
-			break;
-		case CS_GET_TEMPLATE:
-			gettmplt(csi->str,csi->ip,K_LINE);
-			if(sys_status&SS_ABORT)
-				csi->str[0]=0;
-			csi->cmd=csi->str[0];
-			break;
-		case CS_TRASHCAN:
-			csi->logic=!trashcan(csi->str,csi->ip);
-			break;
-		case CS_CREATE_SIF:
-			create_sif_dat(csi->ip,csi->str);
-			break;
-		case CS_READ_SIF:
-			read_sif_dat(csi->ip,csi->str);
-			break;
-		case CS_MNEMONICS:
-			mnemonics(csi->ip);
-			break;
-		case CS_PRINT:
-			putmsg(cmdstr(csi->ip,path,csi->str,buf),P_SAVEATR|P_NOABORT);
-			break;
-		case CS_PRINT_LOCAL:
-			lputs(cmdstr(csi->ip,path,csi->str,buf));
-			break;
-		case CS_PRINT_REMOTE:
-			putcom(cmdstr(csi->ip,path,csi->str,buf));
-			break;
-		case CS_PRINTFILE:
-			printfile(cmdstr(csi->ip,path,csi->str,buf),P_SAVEATR);
-			break;
-		case CS_PRINTFILE_REMOTE:
-			if(online!=ON_REMOTE || !(console&CON_R_ECHO))
-				break;
-			console&=~CON_L_ECHO;
-			printfile(cmdstr(csi->ip,path,csi->str,buf),P_SAVEATR);
-			console|=CON_L_ECHO;
-			break;
-		case CS_PRINTFILE_LOCAL:
-			if(!(console&CON_L_ECHO))
-				break;
-			console&=~CON_R_ECHO;
-			printfile(cmdstr(csi->ip,path,csi->str,buf),P_SAVEATR);
-			console|=CON_R_ECHO;
-			break;
-		case CS_CHKFILE:
-			csi->logic=!fexist(cmdstr(csi->ip,path,csi->str,buf));
-			break;
-		case CS_EXEC:
-			external(cmdstr(csi->ip,path,csi->str,buf),0);
-			break;
-		case CS_EXEC_INT:
-			external(cmdstr(csi->ip,path,csi->str,buf),EX_OUTR|EX_INR|EX_OUTL);
-			break;
-		case CS_EXEC_XTRN:
-			for(i=0;i<total_xtrns;i++)
-				if(!stricmp(xtrn[i]->code,csi->ip))
-					break;
-			if(i<total_xtrns)
-				exec_xtrn(i);
-			break;
-		case CS_EXEC_BIN:
-			exec_bin(cmdstr(csi->ip,path,csi->str,buf),csi);
-			break;
-		case CS_YES_NO:
-			csi->logic=!yesno(cmdstr(csi->ip,path,csi->str,buf));
-			break;
-		case CS_NO_YES:
-			csi->logic=!noyes(cmdstr(csi->ip,path,csi->str,buf));
-			break;
-		case CS_MENU:
-			menu(cmdstr(csi->ip,path,csi->str,buf));
-			break;
-		case CS_SETSTR:
-			strcpy(csi->str,cmdstr(csi->ip,path,csi->str,buf));
-			break;
-		case CS_SET_MENU_DIR:
-			cmdstr(csi->ip,path,csi->str,menu_dir);
-			break;
-		case CS_SET_MENU_FILE:
-			cmdstr(csi->ip,path,csi->str,menu_file);
-			break;
-		case CS_COMPARE_STR:
-			csi->logic=stricmp(csi->str,cmdstr(csi->ip,path,csi->str,buf));
-			break;
-		case CS_COMPARE_KEYS:
-			for(i=0;csi->ip[i];i++)
-				if(csi->cmd==csi->ip[i])
-					break;
-			if(csi->ip[i])
-				csi->logic=LOGIC_TRUE;
-			else
-				csi->logic=LOGIC_FALSE;
-			break;
-		case CS_COMPARE_WORD:
-			csi->logic=strnicmp(csi->str,csi->ip,strlen(csi->ip));
-			break;
-		default:
-			errormsg(WHERE,ERR_CHK,"shell instruction",*(csi->ip-1));
-			break; }
-	while(*(csi->ip++));	 /* Find NULL */
-	return(0); }
-
-if(*csi->ip>=CS_THREE_BYTE) {
-	switch(*(csi->ip++)) {
-		case CS_THREE_MORE_BYTES:
-			switch(*(csi->ip++)) {
-				}
-			errormsg(WHERE,ERR_CHK,"shell instruction",*(csi->ip-1));
-			return(0);
-		case CS_GOTO:
-			csi->ip=csi->cs+*((ushort *)(csi->ip));
-			return(0);
-		case CS_CALL:
-			csi->ret[csi->rets++]=csi->ip+2;
-			csi->ip=csi->cs+*((ushort *)(csi->ip));
-			return(0);
-		case CS_MSWAIT:
-			mswait(*(ushort *)csi->ip);
-			csi->ip+=2;
-			return(0);
-		case CS_TOGGLE_NODE_MISC:
-			getnodedat(node_num,&thisnode,1);
-			thisnode.misc^=*(ushort *)csi->ip;
-			csi->ip+=2;
-			putnodedat(node_num,thisnode);
-            return(0);
-		case CS_COMPARE_NODE_MISC:
-			getnodedat(node_num,&thisnode,0);
-			if((thisnode.misc&*(ushort *)csi->ip)==*(ushort *)csi->ip)
-				csi->logic=LOGIC_TRUE;
-			else
-				csi->logic=LOGIC_FALSE;
-			csi->ip+=2;
-            return(0);
-		case CS_ADJUST_USER_CREDITS:
-			i=*(short *)csi->ip;
-			l=i*1024L;
-			if(l<0)
-				subtract_cdt(-l);
-			else
-				useron.cdt=adjustuserrec(useron.number,U_CDT,10,l);
-			csi->ip+=2;
-			return(0);
-		case CS_ADJUST_USER_MINUTES:
-			i=*(short *)csi->ip;
-			useron.min=adjustuserrec(useron.number,U_MIN,10,i);
-			csi->ip+=2;
-            return(0);
-		case CS_GETNUM:
-			i=*(short *)csi->ip;
-			csi->ip+=2;
-			l=getnum(i);
-			if(l<=0) {
-				csi->str[0]=0;
-				csi->logic=LOGIC_FALSE; }
-			else {
-				sprintf(csi->str,"%lu",l);
-				csi->logic=LOGIC_TRUE; }
-			return(0);
-
-		case CS_TOGGLE_USER_FLAG:
-			i=*(csi->ip++);
-			ch=*(csi->ip++);
-			switch(i) {
-				case '1':
-					useron.flags1^=FLAG(ch);
-					putuserrec(useron.number,U_FLAGS1,8
-						,ultoa(useron.flags1,tmp,16));
-					break;
-				case '2':
-					useron.flags2^=FLAG(ch);
-					putuserrec(useron.number,U_FLAGS2,8
-						,ultoa(useron.flags2,tmp,16));
-					break;
-				case '3':
-					useron.flags3^=FLAG(ch);
-					putuserrec(useron.number,U_FLAGS3,8
-						,ultoa(useron.flags3,tmp,16));
-					break;
-				case '4':
-					useron.flags4^=FLAG(ch);
-					putuserrec(useron.number,U_FLAGS4,8
-						,ultoa(useron.flags4,tmp,16));
-					break;
-				case 'R':
-					useron.rest^=FLAG(ch);
-					putuserrec(useron.number,U_REST,8
-						,ultoa(useron.rest,tmp,16));
-					break;
-				case 'E':
-					useron.exempt^=FLAG(ch);
-					putuserrec(useron.number,U_EXEMPT,8
-						,ultoa(useron.exempt,tmp,16));
-					break;
-				default:
-					errormsg(WHERE,ERR_CHK,"user flag type",*(csi->ip-2));
-					return(0); }
-			statusline();
-			return(0);
-		case CS_REVERT_TEXT:
-            i=*(ushort *)csi->ip;
-            csi->ip+=2;
-			if((ushort)i==0xffff) {
-				for(i=0;i<TOTAL_TEXT;i++) {
-					if(text[i]!=text_sav[i] && text[i]!=nulstr)
-						FREE(text[i]);
-					text[i]=text_sav[i]; }
-				return(0); }
-            i--;
-            if(i>=TOTAL_TEXT) {
-				errormsg(WHERE,ERR_CHK,"revert text #",i);
-                return(0); }
-			if(text[i]!=text_sav[i] && text[i]!=nulstr)
-                FREE(text[i]);
-            text[i]=text_sav[i];
-			return(0);
-		default:
-			errormsg(WHERE,ERR_CHK,"shell instruction",*(csi->ip-1));
-			return(0); } }
-
-if(*csi->ip>=CS_TWO_BYTE) {
-	switch(*(csi->ip++)) {
-		case CS_TWO_MORE_BYTES:
-			switch(*(csi->ip++)) {
-				case CS_USER_EVENT:
-					user_event(*(csi->ip++));
-					return(0);
-				}
-			errormsg(WHERE,ERR_CHK,"shell instruction",*(csi->ip-1));
-			return(0);
-		case CS_SETLOGIC:
-			csi->logic=*csi->ip++;
-			return(0);
-		case CS_CMDKEY:
-			if( ((*csi->ip)==CS_DIGIT && isdigit(csi->cmd))
-				|| ((*csi->ip)==CS_EDIGIT && csi->cmd&0x80
-				&& isdigit(csi->cmd&0x7f))) {
-				csi->ip++;
-				return(0); }
-			if(csi->cmd!=*csi->ip) {
-				csi->ip++;
-				skipto(csi,CS_END_CMD); }	 /* skip code */
-			csi->ip++;						/* skip key */
-			return(0);
-		case CS_NODE_ACTION:
-			action=*csi->ip++;
-			return(0);
-		case CS_NODE_STATUS:
-			getnodedat(node_num,&thisnode,1);
-			thisnode.status=*csi->ip++;
-            putnodedat(node_num,thisnode);
-			return(0);
-		case CS_GETSTR:
-			csi->logic=LOGIC_TRUE;
-			getstr(csi->str,*csi->ip++,0);
-			if(sys_status&SS_ABORT) {
-				csi->str[0]=0;
-				csi->logic=LOGIC_FALSE; }
-			if(csi->str[0]=='/' && csi->str[1])
-				csi->cmd=csi->str[1]|0x80;
-			else
-				csi->cmd=csi->str[0];
-            return(0);
-		case CS_GETLINE:
-			getstr(csi->str,*csi->ip++,K_LINE);
-			if(sys_status&SS_ABORT)
-				csi->str[0]=0;
-			if(csi->str[0]=='/' && csi->str[1])
-				csi->cmd=csi->str[1]|0x80;
-			else
-				csi->cmd=csi->str[0];
-            return(0);
-		case CS_GETSTRUPR:
-			getstr(csi->str,*csi->ip++,K_UPPER);
-			if(sys_status&SS_ABORT)
-                csi->str[0]=0;
-			if(csi->str[0]=='/' && csi->str[1])
-				csi->cmd=csi->str[1]|0x80;
-			else
-                csi->cmd=csi->str[0];
-			return(0);
-		case CS_GETNAME:
-			getstr(csi->str,*csi->ip++,K_UPRLWR);
-			if(sys_status&SS_ABORT)
-                csi->str[0]=0;
-			return(0);
-		case CS_SHIFT_STR:
-			if(strlen(csi->str)>=*csi->ip)
-				memmove(csi->str,csi->str+(*csi->ip)
-					,strlen(csi->str)+1);
-			csi->ip++;
-			return(0);
-		case CS_COMPARE_KEY:
-			if( ((*csi->ip)==CS_DIGIT && isdigit(csi->cmd))
-				|| ((*csi->ip)==CS_EDIGIT && csi->cmd&0x80
-				&& isdigit(csi->cmd&0x7f))) {
-				csi->ip++;
-				csi->logic=LOGIC_TRUE; }
-			else {
-				if(csi->cmd==*(csi->ip++))
-					csi->logic=LOGIC_TRUE;
-				else
-					csi->logic=LOGIC_FALSE; }
-			return(0);
-		case CS_SET_USER_LEVEL:
-			useron.level=*(csi->ip++);
-            putuserrec(useron.number,U_LEVEL,2,itoa(useron.level,tmp,10));
-			statusline();
-			return(0);
-		case CS_SET_USER_STRING:
-			csi->logic=LOGIC_FALSE;
-			if(!csi->str[0]) {
-				csi->ip++;
-				return(0); }
-			switch(*(csi->ip++)) {
-				case USER_STRING_ALIAS:
-					if(!isalpha(csi->str[0]) || trashcan(csi->str,"NAME"))
-						break;
-					i=matchuser(csi->str);
-					if(i && i!=useron.number)
-						break;
-					sprintf(useron.alias,"%.*s",LEN_ALIAS,csi->str);
-					putuserrec(useron.number,U_ALIAS,LEN_ALIAS,useron.alias);
-					putusername(useron.number,useron.alias);
-					csi->logic=LOGIC_TRUE;
-					break;
-				case USER_STRING_REALNAME:
-					if(trashcan(csi->str,"NAME"))
-						break;
-					if(uq&UQ_DUPREAL
-						&& userdatdupe(useron.number,U_NAME,LEN_NAME
-						,csi->str,0))
-						break;
-					sprintf(useron.name,"%.*s",LEN_NAME,csi->str);
-					putuserrec(useron.number,U_NAME,LEN_NAME
-						,useron.name);
-					csi->logic=LOGIC_TRUE;
-					break;
-				case USER_STRING_HANDLE:
-					if(trashcan(csi->str,"NAME"))
-						break;
-					if(uq&UQ_DUPHAND
-						&& userdatdupe(useron.number,U_HANDLE,LEN_HANDLE
-						,csi->str,0))
-						break;
-					sprintf(useron.handle,"%.*s",LEN_HANDLE,csi->str);
-					putuserrec(useron.number,U_HANDLE,LEN_HANDLE
-						,useron.handle);
-					csi->logic=LOGIC_TRUE;
-					break;
-				case USER_STRING_COMPUTER:
-					sprintf(useron.comp,"%.*s",LEN_COMP,csi->str);
-					putuserrec(useron.number,U_COMP,LEN_COMP
-						,useron.comp);
-					csi->logic=LOGIC_TRUE;
-					break;
-				case USER_STRING_NOTE:
-					sprintf(useron.note,"%.*s",LEN_NOTE,csi->str);
-					putuserrec(useron.number,U_NOTE,LEN_NOTE
-						,useron.note);
-					csi->logic=LOGIC_TRUE;
-					break;
-				case USER_STRING_ADDRESS:
-					sprintf(useron.address,"%.*s",LEN_ADDRESS,csi->str);
-					putuserrec(useron.number,U_ADDRESS,LEN_ADDRESS
-						,useron.address);
-					csi->logic=LOGIC_TRUE;
-					break;
-				case USER_STRING_LOCATION:
-					sprintf(useron.location,"%.*s",LEN_LOCATION,csi->str);
-					putuserrec(useron.number,U_LOCATION,LEN_LOCATION
-						,useron.location);
-					csi->logic=LOGIC_TRUE;
-					break;
-				case USER_STRING_ZIPCODE:
-					sprintf(useron.zipcode,"%.*s",LEN_ZIPCODE,csi->str);
-					putuserrec(useron.number,U_ZIPCODE,LEN_ZIPCODE
-						,useron.zipcode);
-					csi->logic=LOGIC_TRUE;
-					break;
-				case USER_STRING_PASSWORD:
-					sprintf(useron.pass,"%.*s",LEN_PASS,csi->str);
-					putuserrec(useron.number,U_PASS,LEN_PASS
-						,useron.pass);
-					csi->logic=LOGIC_TRUE;
-					break;
-				case USER_STRING_BIRTHDAY:
-					if(!getage(csi->str))
-						break;
-					sprintf(useron.birth,"%.*s",LEN_BIRTH,csi->str);
-					putuserrec(useron.number,U_BIRTH,LEN_BIRTH
-						,useron.birth);
-					csi->logic=LOGIC_TRUE;
-					break;
-				case USER_STRING_PHONE:
-					if(trashcan(csi->str,"PHONE"))
-						break;
-					sprintf(useron.phone,"%.*s",LEN_PHONE,csi->str);
-					putuserrec(useron.number,U_PHONE,LEN_PHONE
-						,useron.phone);
-					csi->logic=LOGIC_TRUE;
-					break;
-				case USER_STRING_MODEM:
-					sprintf(useron.modem,"%.*s",LEN_MODEM,csi->str);
-					putuserrec(useron.number,U_MODEM,LEN_MODEM
-						,useron.phone);
-					csi->logic=LOGIC_TRUE;
-					break;
-				case USER_STRING_COMMENT:
-					sprintf(useron.comment,"%.*s",LEN_COMMENT,csi->str);
-					putuserrec(useron.number,U_COMMENT,LEN_COMMENT
-						,useron.comment);
-					csi->logic=LOGIC_TRUE;
-					break;
-				default:
-					errormsg(WHERE,ERR_CHK,"user string type",*(csi->ip-1));
-					return(0); }
-			statusline();
-			return(0);
-		default:
-			errormsg(WHERE,ERR_CHK,"shell instruction",*(csi->ip-1));
-			return(0); } }
-
-
-/*********************************/
-/* Single Byte Instrcutions ONLY */
-/*********************************/
-
-switch(*(csi->ip++)) {
-	case CS_ONE_MORE_BYTE:				 /* Just one MORE byte */
-		switch(*(csi->ip++)) {
-			case CS_OFFLINE:
-				csi->misc|=CS_OFFLINE_EXEC;
-				return(0);
-			case CS_ONLINE:
-				csi->misc&=~CS_OFFLINE_EXEC;
-				return(0);
-			case CS_NEWUSER:
-				newuser();
-				return(0);
-			case CS_LOGON:
-				if(logon())
-					csi->logic=LOGIC_TRUE;
-				else
-					csi->logic=LOGIC_FALSE;
-				return(0);
-			case CS_LOGOUT:
-				logout();
-				return(0);
-			case CS_EXIT:
-				return(1);
-			default:
-				errormsg(WHERE,ERR_CHK,"one byte extended function"
-					,*(csi->ip-1));
-				return(0); }
-	case CS_CRLF:
-		CRLF;
-		return(0);
-	case CS_CLS:
-		CLS;
-		return(0);
-	case CS_PAUSE:
-		pause();
-		return(0);
-	case CS_PAUSE_RESET:
-		lncntr=0;
-		return(0);
-	case CS_GETLINES:
-		getlines();
-		return(0);
-	case CS_HANGUP:
-		hangup();
-		return(0);
-	case CS_LOGKEY:
-		logch(csi->cmd,0);
-		return(0);
-	case CS_LOGKEY_COMMA:
-		logch(csi->cmd,1);
-		return(0);
-	case CS_LOGSTR:
-		log(csi->str);
-		return(0);
-	case CS_CHKSYSPASS:
-		csi->logic=!chksyspass(0);
-		return(0);
-	case CS_PUT_NODE:
-		getnodedat(node_num,&thisnode,1);
-		putnodedat(node_num,thisnode);
-		return(0);
-	case CS_SYNC:
-		SYNC;
-		return(0);
-	case CS_ASYNC:
-		ASYNC;
-		return(0);
-	case CS_RIOSYNC:
-		RIOSYNC(0);
-		return(0);
-	case CS_GETTIMELEFT:
-		gettimeleft();
-		return(0);
-	case CS_RETURN:
-		if(!csi->rets)
-			return(1);
-		csi->ip=csi->ret[--csi->rets];
-		return(0);
-	case CS_GETKEY:
-		csi->cmd=getkey(K_UPPER);
-		return(0);
-	case CS_INKEY:
-		csi->cmd=toupper(inkey(K_GETSTR));
-		if(csi->cmd)
-			csi->logic=LOGIC_TRUE;
-		else
-			csi->logic=LOGIC_FALSE;
-        return(0);
-	case CS_GETKEYE:
-		csi->cmd=getkey(K_UPPER);
-		if(csi->cmd=='/') {
-			outchar('/');
-			csi->cmd=getkey(K_UPPER);
-			csi->cmd|=0x80; }
-		return(0);
-	case CS_GETFILESPEC:
-		if(getfilespec(csi->str))
-			csi->logic=LOGIC_TRUE;
-		else
-			csi->logic=LOGIC_FALSE;
-		return(0);
-	case CS_SAVELINE:
-		SAVELINE;
-		return(0);
-	case CS_RESTORELINE:
-		RESTORELINE;
-		return(0);
-	case CS_SELECT_SHELL:
-		csi->logic=LOGIC_TRUE;
-		for(i=0;i<total_shells;i++)
-			uselect(1,i,"Command Shell",shell[i]->name,shell[i]->ar);
-		if((i=uselect(0,useron.shell,0,0,0))>=0) {
-			useron.shell=i;
-			putuserrec(useron.number,U_SHELL,8,shell[i]->code); }
-		else
-			csi->logic=LOGIC_FALSE;
-		return(0);
-	case CS_SET_SHELL:
-		csi->logic=LOGIC_TRUE;
-		for(i=0;i<total_shells;i++)
-			if(!stricmp(csi->str,shell[i]->code)
-				&& chk_ar(shell[i]->ar,useron))
-				break;
-		if(i<total_shells) {
-			useron.shell=i;
-			putuserrec(useron.number,U_SHELL,8,shell[i]->code); }
-		else
-			csi->logic=LOGIC_FALSE;
-		return(0);
-
-	case CS_SELECT_EDITOR:
-		csi->logic=LOGIC_TRUE;
-		for(i=0;i<total_xedits;i++)
-			uselect(1,i,"External Editor",xedit[i]->name,xedit[i]->ar);
-		if(useron.xedit) useron.xedit--;
-		if((i=uselect(0,useron.xedit,0,0,0))>=0) {
-			useron.xedit=i+1;
-			putuserrec(useron.number,U_XEDIT,8,xedit[i]->code); }
-		else
-			csi->logic=LOGIC_FALSE;
-		return(0);
-	case CS_SET_EDITOR:
-		csi->logic=LOGIC_TRUE;
-		for(i=0;i<total_xedits;i++)
-			if(!stricmp(csi->str,xedit[i]->code)
-				&& chk_ar(xedit[i]->ar,useron))
-				break;
-		if(i<total_xedits) {
-			useron.xedit=i+1;
-			putuserrec(useron.number,U_XEDIT,8,xedit[i]->code); }
-		else
-			csi->logic=LOGIC_FALSE;
-        return(0);
-
-	case CS_CLEAR_ABORT:
-		sys_status&=~SS_ABORT;
-		return(0);
-	case CS_FINDUSER:
-		i=finduser(csi->str);
-		if(i) {
-			csi->logic=LOGIC_TRUE;
-			username(i,csi->str); }
-		else
-			csi->logic=LOGIC_FALSE;
-		return(0);
-	case CS_UNGETKEY:
-		ungetkey(csi->cmd&0x7f);
-		return(0);
-	case CS_UNGETSTR:
-		j=strlen(csi->str);
-		for(i=0;i<j;i++)
-			ungetkey(csi->str[i]);
-		return(0);
-	case CS_PRINTKEY:
-		if((csi->cmd&0x7f)>=SP)
-			outchar(csi->cmd&0x7f);
-		return(0);
-	case CS_PRINTSTR:
-		putmsg(csi->str,P_SAVEATR|P_NOABORT);
-		return(0);
-	case CS_CMD_HOME:
-		csi->cmdret[csi->cmdrets++]=(csi->ip-1);
-		return(0);
-	case CS_END_CMD:
-		if(csi->cmdrets)
-			csi->ip=csi->cmdret[--csi->cmdrets];
-/*													Removed 06/07/95
-		else
-			errormsg(WHERE,ERR_CHK,"misplaced end_cmd",(csi->ip-csi->cs)-1);
-*/
-		return(0);
-	case CS_CMD_POP:
-		if(csi->cmdrets)
-			csi->cmdrets--;
-		return(0);
-	case CS_IF_TRUE:
-		if(csi->logic!=LOGIC_TRUE) {
-			skipto(csi,CS_ELSEORENDIF);
-			csi->ip++; }
-		return(0);
-	case CS_IF_GREATER:
-		if(csi->logic!=LOGIC_GREATER) {
-			skipto(csi,CS_ELSEORENDIF);
-			csi->ip++; }
-		return(0);
-	case CS_IF_GREATER_OR_EQUAL:
-		if(csi->logic!=LOGIC_GREATER && csi->logic!=LOGIC_EQUAL) {
-			skipto(csi,CS_ELSEORENDIF);
-			csi->ip++; }
-		return(0);
-	case CS_IF_LESS:
-		if(csi->logic!=LOGIC_LESS) {
-			skipto(csi,CS_ELSEORENDIF);
-			csi->ip++; }
-		return(0);
-	case CS_IF_LESS_OR_EQUAL:
-		if(csi->logic!=LOGIC_LESS && csi->logic!=LOGIC_EQUAL) {
-			skipto(csi,CS_ELSEORENDIF);
-			csi->ip++; }
-        return(0);
-	case CS_IF_FALSE:
-		if(csi->logic==LOGIC_TRUE) {
-			skipto(csi,CS_ELSEORENDIF);
-			csi->ip++; }
-		return(0);
-	case CS_ELSE:
-		skipto(csi,CS_ENDIF);
-		csi->ip++;
-		return(0);
-	case CS_END_CASE:
-		skipto(csi,CS_END_SWITCH);
-		csi->misc&=~CS_IN_SWITCH;
-		csi->ip++;
-		return(0);
-	case CS_DEFAULT:
-	case CS_END_SWITCH:
-		csi->misc&=~CS_IN_SWITCH;
-		return(0);
-	case CS_ENDIF:
-		return(0);
-	default:
-		errormsg(WHERE,ERR_CHK,"shell instruction",*(csi->ip-1));
-		return(0); }
-}
-
diff --git a/src/sbbs2/execdos/execdos.c b/src/sbbs2/execdos/execdos.c
deleted file mode 100644
index 30091ddcec..0000000000
--- a/src/sbbs2/execdos/execdos.c
+++ /dev/null
@@ -1,271 +0,0 @@
-/* EXECDOS.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* Execute DOS external BBS programs from OS/2 BBS */
-
-#include "sbbs.h"
-
-extern unsigned _heaplen=2048;
-
-extern uint riobp;
-
-ulong user_misc;
-
-/****************************************************************************/
-/* Truncates white-space chars off end of 'str' and terminates at first tab */
-/****************************************************************************/
-void truncsp(char *str)
-{
-	uint c;
-
-str[strcspn(str,"\t")]=0;
-c=strlen(str);
-while(c && (uchar)str[c-1]<=SP) c--;
-str[c]=0;
-}
-
-void interrupt (*oldfunc)(void);
-
-/*****************************************************************************/
-/* Interrupt routine to expand WWIV Ctrl-C# codes into ANSI escape sequences */
-/*****************************************************************************/
-void interrupt wwiv_expand()
-{
-	char str[256],al;
-	static int ctrl_c;
-	int i,j;
-
-al=_AL;
-if(al!=3 && !ctrl_c)
-	oldfunc();
-else if(al!=3 && ctrl_c) {
-	ctrl_c=0;
-	if(user_misc&ANSI) {
-		switch(al) {
-			default:
-				strcpy(str,"\x1b[0m");          /* low grey */
-				break;
-			case '1':
-				strcpy(str,"\x1b[0;1;36m");     /* high cyan */
-				break;
-			case '2':
-				strcpy(str,"\x1b[0;1;33m");     /* high yellow */
-				break;
-			case '3':
-				strcpy(str,"\x1b[0;35m");       /* low magenta */
-				break;
-			case '4':
-				strcpy(str,"\x1b[0;1;44m");     /* white on blue */
-				break;
-			case '5':
-				strcpy(str,"\x1b[0;32m");       /* low green */
-				break;
-			case '6':
-				strcpy(str,"\x1b[0;1;5;31m");   /* high blinking red */
-				break;
-			case '7':
-				strcpy(str,"\x1b[0;1;34m");     /* high blue */
-				break;
-			case '8':
-				strcpy(str,"\x1b[0;34m");       /* low blue */
-				break;
-			case '9':
-				strcpy(str,"\x1b[0;36m");       /* low cyan */
-				break; }
-		j=strlen(str);
-		for(i=0;i<j;i++) {
-			_AL=str[i];
-			oldfunc(); } } }
-else
-	ctrl_c=1;
-}
-
-int main(int argc, char **argv)
-{
-	char str[256],commandline[128],sbbsnode[81],sbbsnnum[81],msr[31]="0"
-		,user_name[LEN_NAME+1]
-		,user_alias[LEN_ALIAS+1]
-		,user_phone[LEN_PHONE+1]
-		,user_location[LEN_LOCATION+1]
-		,user_age
-		,user_sex
-		,user_level
-		,node_scrnlen
-		,*envvar[30],*arg[30],c,d;
-	int i,file,base,com_base=0,com_irq,dte_rate,rmode,mode,node_num,col,row;
-	FILE *stream;
-
-if(argc<2) {
-	printf("This program is for the internal use of Synchronet.\r\n");
-	return(-1); }
-
-sprintf(sbbsnode,"SBBSNODE=%s",argv[1]);
-putenv(sbbsnode);
-sprintf(str,"%sEXECDOS.DAT",argv[1]);
-if((file=open(str,O_RDONLY|O_BINARY))!=-1) {
-	stream=fdopen(file,"rb");
-	str[0]=0;
-	fgets(str,128,stream);
-	truncsp(str);
-	if(strcmp(str,"V1.00")) {
-		printf("\7EXECDOS: SBBS VERSION MISMATCH!\7\r\n");
-		delay(5000);
-		return(-1); }
-	str[0]=0;
-	fgets(str,128,stream);
-	com_base=strtoul(str,0,16);
-	str[0]=0;
-	fgets(str,128,stream);
-	com_irq=atoi(str);
-	str[0]=0;
-	fgets(str,128,stream);
-	dte_rate=atoi(str);
-	str[0]=0;
-    fgets(str,128,stream);
-	rmode=strtoul(str,0,16);
-	str[0]=0;
-    fgets(str,128,stream);
-	mode=strtoul(str,0,16);
-	str[0]=0;
-    fgets(str,128,stream);
-	user_misc=strtoul(str,0,16);
-	str[0]=0;
-    fgets(str,128,stream);
-	node_num=atoi(str);
-	if(node_num) {
-		sprintf(sbbsnnum,"SBBSNNUM=%u",node_num);
-		putenv(sbbsnnum); }
-	fgets(commandline,128,stream);
-	truncsp(commandline);
-	str[0]=0;
-    fgets(str,128,stream);
-	i=atoi(str);	/* total env vars */
-	while(i--) {
-		str[0]=0;
-		fgets(str,128,stream);
-		truncsp(str);
-		if((envvar[i]=MALLOC(strlen(str)+1))!=NULL) {
-			strcpy(envvar[i],str);
-			putenv(envvar[i]); } }
-	str[0]=0;
-	fgets(str,128,stream);
-	truncsp(str);
-	sprintf(user_alias,"%.*s",LEN_ALIAS,str);
-	str[0]=0;
-	fgets(str,128,stream);
-	truncsp(str);
-	sprintf(user_name,"%.*s",LEN_NAME,str);
-	str[0]=0;
-	fgets(str,128,stream);
-	user_level=atoi(str);
-	str[0]=0;
-	fgets(str,128,stream);
-	user_age=atoi(str);
-	str[0]=0;
-	fgets(str,128,stream);
-	user_sex=str[0];
-	str[0]=0;
-	fgets(str,128,stream);
-	truncsp(str);
-	sprintf(user_phone,"%.*s",LEN_PHONE,str);
-	str[0]=0;
-	fgets(str,128,stream);
-	truncsp(str);
-	sprintf(user_location,"%.*s",LEN_LOCATION,str);
-	fclose(stream); }
-
-printf("\nEXECDOS: %s\n",commandline);
-
-if(rmode && com_base) { 	/* Capture the port and intercept I/O */
-	base=0xffff;
-	switch(com_base) {
-		case 0xb:
-			rioctl(I14PC);
-			break;
-		case 0xffff:
-		case 0xd:
-			rioctl(I14DB);
-			break;
-		case 0xe:
-			rioctl(I14PS);
-			break;
-		case 0xf:
-			rioctl(I14FO);
-			break;
-		default:
-			base=com_base;
-			break; }
-
-	if(rioini(base,com_irq)) {
-		printf("\7EXECDOS: Error initializing COM port (%x,%d)\7\r\n"
-			,base,com_irq);
-		return(-1); }
-	rioctl(IOSM|CTSCK|RTSCK|PAUSE|ABORT);
-	rioctl(CPTON);	/* Cvt ^p to ^^ */
-
-	sprintf(msr,"%lu",&riobp-1);
-
-	sprintf(str,"%sINTRSBBS.DAT",argv[1]);
-	if((stream=fopen(str,"wb"))!=NULL) {
-		fprintf(stream,"%lu\r\n",&riobp-1);
-		fclose(stream); } }
-
-setbaud(dte_rate);
-
-if(rmode) {
-	ivhctl(rmode);
-
-	if(mode&EX_WWIV) {	/* WWIV code expansion */
-		rioctl(CPTOFF); /* turn off ctrl-p translation */
-		oldfunc=getvect(0x29);
-		setvect(0x29,wwiv_expand); } }
-
-
-if(rmode&INT29L && user_alias[0]) {
-	node_scrnlen=lclini(0xd<<8);	  /* Tab expansion, no CRLF expansion */
-	lclini(node_scrnlen-1);
-	col=lclwx();
-	row=lclwy();
-	lclxy(1,node_scrnlen);
-	lclatr(CYAN|HIGH|(BLUE<<4));
-	lputs("  ");
-	sprintf(str,"%-25.25s %02d %-25.25s  %02d %c %s"
-		,user_alias,user_level,user_name[0] ? user_name : user_location
-		,user_age
-		,user_sex ? user_sex : SP
-		,user_phone);
-	lputs(str);
-	lputc(CLREOL);
-	lclatr(LIGHTGRAY);
-	lclxy(col,row); }
-
-/* separate args */
-
-arg[0]=commandline; /* point to the beginning of the string */
-for(c=0,d=1;commandline[c];c++)   /* Break up command line */
-	if(commandline[c]==SP) {
-		commandline[c]=0;		/* insert nulls */
-		if(!strncmp(commandline+c+1,"%& ",3))
-			arg[d++]=msr;
-		else					/* point to the beginning of the next arg */
-			arg[d++]=commandline+c+1; } 
-arg[d]=0;
-
-/* spawn it */
-
-i=spawnvp(P_WAIT,arg[0],arg);
-
-if(rmode) {
-	rioctl(TXSYNC|(3<<8));
-	rioctl(IOFB);
-	if(mode&EX_WWIV)
-		setvect(0x29,oldfunc);
-	ivhctl(0);			/* replace DOS output interrupt vectors */
-	if(com_base)
-		rioini(0,0); }	/* replace com port */
-
-//if(i) 			// debug
-//	  getch();
-return(i);
-}
diff --git a/src/sbbs2/execdos/make.bat b/src/sbbs2/execdos/make.bat
deleted file mode 100755
index fcacf79816..0000000000
--- a/src/sbbs2/execdos/make.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-bcc -w-pro -I..;..\rio;..\smb -ml execdos.c ..\dos\rciol.obj
-if errorlevel 1 goto end
-rem exe2bin execdos.exe execdos.com
-:end
diff --git a/src/sbbs2/execfile.c b/src/sbbs2/execfile.c
deleted file mode 100644
index 966b7279a9..0000000000
--- a/src/sbbs2/execfile.c
+++ /dev/null
@@ -1,481 +0,0 @@
-#line 1 "EXECFILE.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-#include "cmdshell.h"
-
-int execfile(csi_t *csi)
-{
-	uchar	str[256],tmp2[128],*path,ch,*p;
-	int 	i,j,k,s,file,x,y;
-	long	l;
-	stats_t stats;
-	node_t	node;
-	file_t	f;
-	time_t	t;
-    csi_t   bin;
-
-switch(*(csi->ip++)) {
-
-	case CS_FILE_SELECT_AREA:
-		csi->logic=LOGIC_FALSE;
-		if(!usrlibs) return(0);
-		while(online) {
-			j=0;
-			if(usrlibs>1) {
-				sprintf(str,"%sMENU\\LIBS.*",text_dir);
-				if(fexist(str))
-					menu("LIBS");
-				else {
-					bputs(text[CfgLibLstHdr]);
-					for(i=0;i<usrlibs && !msgabort();i++) {
-						if(i==curlib)
-							outchar('*');
-						else outchar(SP);
-						if(i<9) outchar(SP);
-						if(i<99) outchar(SP);
-						bprintf(text[CfgLibLstFmt]
-							,i+1,lib[usrlib[i]]->lname); } }
-				sprintf(str,text[JoinWhichLib],curlib+1);
-				mnemonics(str);
-				j=getnum(usrlibs);
-				if((int)j==-1)
-					return(0);
-				if(!j)
-					j=curlib;
-				else
-					j--; }
-			sprintf(str,"%sMENU\\DIRS%u.*",text_dir,usrlib[j]+1);
-			if(fexist(str)) {
-				sprintf(str,"DIRS%u",usrlib[j]+1);
-				menu(str); }
-			else {
-				CLS;
-				bprintf(text[DirLstHdr],lib[usrlib[j]]->lname);
-				for(i=0;i<usrdirs[j] && !msgabort();i++) {
-					if(i==curdir[j]) outchar('*');
-					else outchar(SP);
-					sprintf(str,text[DirLstFmt],i+1
-						,dir[usrdir[j][i]]->lname,nulstr
-						,getfiles(usrdir[j][i]));
-					if(i<9) outchar(SP);
-					if(i<99) outchar(SP);
-					bputs(str); } }
-			sprintf(str,text[JoinWhichDir],curdir[j]+1);
-			mnemonics(str);
-			i=getnum(usrdirs[j]);
-			if((int)i==-1) {
-				if(usrlibs==1)
-					return(0);
-				continue; }
-			if(!i)
-				i=curdir[j];
-			else
-				i--;
-			curlib=j;
-			curdir[curlib]=i;
-			csi->logic=LOGIC_TRUE;
-			return(0); }
-		return(0);
-
-	case CS_FILE_GET_DIR_NUM:
-
-		if(useron.misc&COLDKEYS) {
-			i=atoi(csi->str);
-			if(i && i<=usrdirs[curlib] && usrlibs)
-				curdir[curlib]=i-1;
-			return(0); }
-
-		ch=getkey(K_UPPER);
-		outchar(ch);
-		if((ch&0xf)*10<=usrdirs[curlib] && (ch&0xf) && usrlibs) {
-			i=(ch&0xf)*10;
-			ch=getkey(K_UPPER);
-			if(!isdigit(ch) && ch!=CR) {
-				ungetkey(ch);
-				curdir[curlib]=(i/10)-1;
-				return(0); }
-			outchar(ch);
-			if(ch==CR) {
-				curdir[curlib]=(i/10)-1;
-				return(0); }
-			logch(ch,0);
-			i+=ch&0xf;
-			if(i*10<=usrdirs[curlib]) { 	/* 100+ dirs */
-				i*=10;
-				ch=getkey(K_UPPER);
-				if(!isdigit(ch) && ch!=CR) {
-					ungetkey(ch);
-					curdir[curlib]=(i/10)-1;
-					return(0); }
-				outchar(ch);
-				if(ch==CR) {
-					curdir[curlib]=(i/10)-1;
-					return(0); }
-				logch(ch,0);
-				i+=ch&0xf; }
-			if(i<=usrdirs[curlib])
-				curdir[curlib]=i-1;
-			return(0); }
-		if((ch&0xf)<=usrdirs[curlib] && (ch&0xf) && usrlibs)
-			curdir[curlib]=(ch&0xf)-1;
-		return(0);
-
-	case CS_FILE_GET_LIB_NUM:
-
-		if(useron.misc&COLDKEYS) {
-			i=atoi(csi->str);
-			if(i && i<=usrlibs)
-				curlib=i-1;
-			return(0); }
-
-		ch=getkey(K_UPPER);
-		outchar(ch);
-		if((ch&0xf)*10<=usrlibs && (ch&0xf)) {
-			i=(ch&0xf)*10;
-			ch=getkey(K_UPPER);
-			if(!isdigit(ch) && ch!=CR) {
-				ungetkey(ch);
-				curlib=(i/10)-1;
-				return(0); }
-			outchar(ch);
-			if(ch==CR) {
-				curlib=(i/10)-1;
-				return(0); }
-			logch(ch,0);
-			i+=ch&0xf;
-			if(i<=usrlibs)
-				curlib=i-1;
-			return(0); }
-		if((ch&0xf)<=usrlibs && (ch&0xf))
-			curlib=(ch&0xf)-1;
-		return(0);
-
-	case CS_FILE_SHOW_LIBRARIES:
-		if(!usrlibs) return(0);
-		sprintf(str,"%sMENU\\LIBS.*",text_dir);
-		if(fexist(str)) {
-			menu("LIBS");
-			return(0); }
-		bputs(text[LibLstHdr]);
-		for(i=0;i<usrlibs && !msgabort();i++) {
-			if(i==curlib)
-				outchar('*');
-			else outchar(SP);
-			if(i<9) outchar(SP);
-			bprintf(text[LibLstFmt],i+1
-				,lib[usrlib[i]]->lname,nulstr,usrdirs[i]); }
-		return(0);
-
-	case CS_FILE_SHOW_DIRECTORIES:
-		if(!usrlibs) return(0);
-		sprintf(str,"%sMENU\\DIRS%u.*",text_dir,usrlib[curlib]+1);
-		if(fexist(str)) {
-			sprintf(str,"DIRS%u",usrlib[curlib]+1);
-			menu(str);
-			return(0); }
-		CRLF;
-		bprintf(text[DirLstHdr],lib[usrlib[curlib]]->lname);
-		for(i=0;i<usrdirs[curlib] && !msgabort();i++) {
-			if(i==curdir[curlib]) outchar('*');
-			else outchar(SP);
-			sprintf(str,text[DirLstFmt],i+1
-				,dir[usrdir[curlib][i]]->lname,nulstr
-				,getfiles(usrdir[curlib][i]));
-			if(i<9) outchar(SP);
-			if(i<99) outchar(SP);
-			bputs(str); }
-		return(0);
-
-	case CS_FILE_LIBRARY_UP:
-		curlib++;
-		if(curlib>=usrlibs)
-			curlib=0;
-		return(0);
-	case CS_FILE_LIBRARY_DOWN:
-		if(!curlib)
-			curlib=usrlibs-1;
-		else curlib--;
-		return(0);
-	case CS_FILE_DIRECTORY_UP:
-		if(!usrlibs) return(0);
-		curdir[curlib]++;
-		if(curdir[curlib]>=usrdirs[curlib])
-			curdir[curlib]=0;
-		return(0);
-	case CS_FILE_DIRECTORY_DOWN:
-		if(!usrlibs) return(0);
-		if(!curdir[curlib])
-			curdir[curlib]=usrdirs[curlib]-1;
-		else curdir[curlib]--;
-		return(0);
-	case CS_FILE_SET_AREA:
-		csi->logic=LOGIC_TRUE;
-		for(i=0;i<usrlibs;i++)
-			for(j=0;j<usrdirs[i];j++)
-				if(!stricmp(csi->str,dir[usrdir[i][j]]->code)) {
-					curlib=i;
-					curdir[i]=j;
-					return(0); }
-		csi->logic=LOGIC_FALSE;
-		return(0);
-	case CS_FILE_SET_LIBRARY:
-		csi->logic=LOGIC_TRUE;
-		for(i=0;i<usrlibs;i++)
-			if(!stricmp(lib[usrlib[i]]->sname,csi->str))
-				break;
-		if(i<usrlibs)
-			curlib=i;
-		else
-			csi->logic=LOGIC_FALSE;
-		return(0);
-
-	case CS_FILE_UPLOAD:
-		csi->logic=LOGIC_FALSE;
-		if(useron.rest&FLAG('U')) {
-			bputs(text[R_Upload]);
-			return(0); }
-		if(usrlibs) {
-			i=usrdir[curlib][curdir[curlib]];
-			if(upload_dir!=INVALID_DIR
-				&& !chk_ar(dir[i]->ul_ar,useron))
-				i=upload_dir; }
-		else
-			i=upload_dir;
-
-		if((uint)i==INVALID_DIR || !chk_ar(dir[i]->ul_ar,useron)) {
-			bputs(text[CantUploadHere]);
-			return(0); }
-
-		if(gettotalfiles(i)>=dir[i]->maxfiles)
-			bputs(text[DirFull]);
-		else {
-			upload(i);
-			csi->logic=LOGIC_TRUE; }
-		return(0);
-	case CS_FILE_UPLOAD_USER:
-		csi->logic=LOGIC_FALSE;
-		if(user_dir==INVALID_DIR) {
-			bputs(text[NoUserDir]);
-			return(0); }
-		if(gettotalfiles(user_dir)>=dir[user_dir]->maxfiles)
-			bputs(text[UserDirFull]);
-		else if(useron.rest&FLAG('U'))
-			bputs(text[R_Upload]);
-		else if(!chk_ar(dir[user_dir]->ul_ar,useron))
-			bputs(text[CantUploadToUser]);
-		else {
-			upload(user_dir);
-			csi->logic=LOGIC_TRUE; }
-		return(0);
-	case CS_FILE_UPLOAD_SYSOP:
-		csi->logic=LOGIC_FALSE;
-		if(sysop_dir==INVALID_DIR) {
-			bputs(text[NoSysopDir]);
-			return(0); }
-		if(gettotalfiles(sysop_dir)>=dir[sysop_dir]->maxfiles)
-			bputs(text[DirFull]);
-		else if(useron.rest&FLAG('U'))
-			bputs(text[R_Upload]);
-		else if(!chk_ar(dir[sysop_dir]->ul_ar,useron))
-			bputs(text[CantUploadToSysop]);
-		else {
-			upload(sysop_dir);
-			csi->logic=LOGIC_TRUE; }
-		return(0);
-	case CS_FILE_DOWNLOAD:
-		if(!usrlibs) return(0);
-		if(useron.rest&FLAG('D')) {
-			bputs(text[R_Download]);
-			return(0); }
-		padfname(csi->str,str);
-		strupr(str);
-		if(!listfileinfo(usrdir[curlib][curdir[curlib]],str,FI_DOWNLOAD)) {
-			bputs(text[SearchingAllDirs]);
-			for(i=0;i<usrdirs[curlib];i++)
-				if(i!=curdir[curlib] &&
-					(s=listfileinfo(usrdir[curlib][i],str,FI_DOWNLOAD))!=0)
-					if(s==-1 || (!strchr(str,'?') && !strchr(str,'*')))
-						return(0);
-			bputs(text[SearchingAllLibs]);
-			for(i=0;i<usrlibs;i++) {
-				if(i==curlib) continue;
-				for(j=0;j<usrdirs[i];j++)
-					if((s=listfileinfo(usrdir[i][j],str,FI_DOWNLOAD))!=0)
-						if(s==-1 || (!strchr(str,'?') && !strchr(str,'*')))
-							return(0); } }
-		return(0);
-	case CS_FILE_DOWNLOAD_USER: /* Download from user dir */
-		csi->logic=LOGIC_FALSE;
-		if(user_dir==INVALID_DIR) {
-			bputs(text[NoUserDir]);
-			return(0); }
-		if(useron.rest&FLAG('D')) {
-			bputs(text[R_Download]);
-			return(0); }
-		CRLF;
-		if(!listfileinfo(user_dir,nulstr,FI_USERXFER))
-			bputs(text[NoFilesForYou]);
-		else
-			csi->logic=LOGIC_TRUE;
-		return(0);
-	case CS_FILE_DOWNLOAD_BATCH:
-		if(batdn_total && yesno(text[DownloadBatchQ])) {
-			start_batch_download();
-			csi->logic=LOGIC_TRUE; }
-		else
-			csi->logic=LOGIC_FALSE;
-		return(0);
-	case CS_FILE_BATCH_ADD_LIST:
-		batch_add_list(csi->str);
-		return(0);
-	case CS_FILE_BATCH_ADD:
-		csi->logic=LOGIC_FALSE;
-		if(!csi->str[0])
-			return(0);
-		padfname(csi->str,f.name);
-		strupr(f.name);
-		for(x=0;x<usrlibs;x++) {
-			for(y=0;y<usrdirs[x];y++)
-				if(findfile(usrdir[x][y],f.name))
-					break;
-			if(y<usrdirs[x])
-				break; }
-		if(x>=usrlibs)
-			return(0);
-		f.dir=usrdir[x][y];
-		getfileixb(&f);
-		f.size=0;
-		getfiledat(&f);
-		addtobatdl(f);
-		csi->logic=LOGIC_TRUE;
-		return(0);
-	case CS_FILE_BATCH_CLEAR:
-		if(!batdn_total) {
-			csi->logic=LOGIC_FALSE;
-			return(0); }
-		csi->logic=LOGIC_TRUE;
-		for(i=0;i<batdn_total;i++) {
-			f.dir=batdn_dir[i];
-			f.datoffset=batdn_offset[i];
-			f.size=batdn_size[i];
-			strcpy(f.name,batdn_name[i]);
-			closefile(f); }
-		batdn_total=0;
-		return(0);
-
-	case CS_FILE_VIEW:
-		if(!usrlibs) return(0);
-		padfname(csi->str,str);
-		strupr(str);
-		csi->logic=LOGIC_TRUE;
-		if(listfiles(usrdir[curlib][curdir[curlib]],str,0,FL_VIEW))
-			return(0);
-		bputs(text[SearchingAllDirs]);
-		for(i=0;i<usrdirs[curlib];i++) {
-			if(i==curdir[curlib]) continue;
-			if(listfiles(usrdir[curlib][i],str,0,FL_VIEW))
-				break; }
-		if(i<usrdirs[curlib])
-			return(0);
-		bputs(text[SearchingAllLibs]);
-		for(i=0;i<usrlibs;i++) {
-			if(i==curlib) continue;
-			for(j=0;j<usrdirs[i];j++)
-				if(listfiles(usrdir[i][j],str,0,FL_VIEW))
-					return(0); }
-		csi->logic=LOGIC_FALSE;
-		bputs(text[FileNotFound]);
-		return(0);
-	case CS_FILE_LIST:	  /* List files in current dir */
-		if(!usrlibs) return(0);
-		csi->logic=LOGIC_FALSE;
-		if(!getfiles(usrdir[curlib][curdir[curlib]])) {
-			bputs(text[EmptyDir]);
-			return(0); }
-		padfname(csi->str,str);
-		strupr(str);
-		s=listfiles(usrdir[curlib][curdir[curlib]],str,0,0);
-		if(s>1) {
-			bprintf(text[NFilesListed],s); }
-		csi->logic=!s;
-		return(0);
-	case CS_FILE_LIST_EXTENDED: /* Extended Information on files */
-		if(!usrlibs) return(0);
-		padfname(csi->str,str);
-		strupr(str);
-		if(!listfileinfo(usrdir[curlib][curdir[curlib]],str,FI_INFO)) {
-			bputs(text[SearchingAllDirs]);
-			for(i=0;i<usrdirs[curlib];i++)
-				if(i!=curdir[curlib] && (s=listfileinfo(usrdir[curlib][i]
-					,str,FI_INFO))!=0)
-					if(s==-1 || (!strchr(str,'?') && !strchr(str,'*')))
-						return(0);
-			bputs(text[SearchingAllLibs]);
-			for(i=0;i<usrlibs;i++) {
-				if(i==curlib) continue;
-				for(j=0;j<usrdirs[i];j++)
-					if((s=listfileinfo(usrdir[i][j],str,FI_INFO))!=0)
-						if(s==-1 || (!strchr(str,'?') && !strchr(str,'*')))
-							return(0); } }
-		return(0);
-	case CS_FILE_FIND_TEXT: 	/* Find text in descriptions */
-		scandirs(FL_FINDDESC);
-		return(0);
-	case CS_FILE_FIND_TEXT_ALL: 	/* Find text in descriptions */
-		scanalldirs(FL_FINDDESC);
-		return(0);
-	case CS_FILE_FIND_NAME: 	/* Find text in descriptions */
-		scandirs(FL_NO_HDR);
-		return(0);
-	case CS_FILE_FIND_NAME_ALL: 	/* Find text in descriptions */
-		scanalldirs(FL_NO_HDR);
-		return(0);
-	case CS_FILE_BATCH_SECTION:
-		batchmenu();
-		return(0);
-	case CS_FILE_TEMP_SECTION:
-		temp_xfer();
-		return(0);
-	case CS_FILE_PTRS_CFG:
-		csi->logic=!inputnstime(&ns_time);
-		return(0);
-	case CS_FILE_NEW_SCAN:
-		scandirs(FL_ULTIME);
-		return(0);
-	case CS_FILE_NEW_SCAN_ALL:
-		scanalldirs(FL_ULTIME);
-		return(0);
-	case CS_FILE_REMOVE:
-		if(!usrlibs) return(0);
-		if(useron.rest&FLAG('R')) {
-			bputs(text[R_RemoveFiles]);
-			return(0); }
-		padfname(csi->str,str);
-		strupr(str);
-		if(!listfileinfo(usrdir[curlib][curdir[curlib]],str,FI_REMOVE)) {
-			if(user_dir!=INVALID_DIR
-				&& user_dir!=usrdir[curlib][curdir[curlib]])
-				if((s=listfileinfo(user_dir,str,FI_REMOVE))!=0)
-					if(s==-1 || (!strchr(str,'?') && !strchr(str,'*')))
-						return(0);
-			bputs(text[SearchingAllDirs]);
-			for(i=0;i<usrdirs[curlib];i++)
-				if(i!=curdir[curlib] && i!=user_dir
-					&& (s=listfileinfo(usrdir[curlib][i],str,FI_REMOVE))!=0)
-					if(s==-1 || (!strchr(str,'?') && !strchr(str,'*')))
-						return(0);
-			bputs(text[SearchingAllLibs]);
-			for(i=0;i<usrlibs;i++) {
-				if(i==curlib || i==user_dir) continue;
-				for(j=0;j<usrdirs[i]; j++)
-					if((s=listfileinfo(usrdir[i][j],str,FI_REMOVE))!=0)
-						if(s==-1 || (!strchr(str,'?') && !strchr(str,'*')))
-							return(0); } }
-		return(0);
- }
-
-errormsg(WHERE,ERR_CHK,"shell function",*(csi->ip-1));
-return(0);
-}
diff --git a/src/sbbs2/execfunc.c b/src/sbbs2/execfunc.c
deleted file mode 100644
index e84805da10..0000000000
--- a/src/sbbs2/execfunc.c
+++ /dev/null
@@ -1,665 +0,0 @@
-#line 1 "EXECFUNC.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-#include "cmdshell.h"
-
-int exec_function(csi_t *csi)
-{
-	uchar	str[256],tmp2[128],ch,*p;
-	int 	i,j,k,s,file;
-	long	l;
-	stats_t stats;
-	node_t	node;
-	file_t	f;
-	time_t	t;
-
-switch(*(csi->ip++)) {
-
-
-	case CS_PRINTFILE_STR:
-		printfile(csi->str,P_NOATCODES);
-		return(0);
-
-/********************************/
-/* General Main Menu Type Stuff */
-/********************************/
-	case CS_AUTO_MESSAGE:
-		automsg();
-		return(0);
-	case CS_MINUTE_BANK:
-		if(sys_misc&SM_TIMEBANK) {	/* Allow users to deposit free time */
-			s=(level_timeperday[useron.level]-useron.ttoday)+useron.textra;
-			if(s<0) s=0;
-			if(s>level_timepercall[useron.level])
-				s=level_timepercall[useron.level];
-			s-=(now-starttime)/60;
-			if(s<0) s=0;
-			bprintf(text[FreeMinLeft],s);
-			bprintf(text[UserMinutes],ultoac(useron.min,tmp));
-			if(max_minutes && useron.min>=max_minutes) {
-				bputs(text[YouHaveTooManyMinutes]);
-				return(0); }
-			if(max_minutes)
-				while(s>0 && s+useron.min>max_minutes) s--;
-			bprintf(text[FreeMinToDeposit],s);
-			s=getnum(s);
-			if(s>0) {
-				logline("  ","Minute Bank Deposit");
-				useron.min=adjustuserrec(useron.number,U_MIN,10,s);
-				useron.ttoday=adjustuserrec(useron.number,U_TTODAY,10,s);
-				sprintf(str,"Minute Adjustment: %u",s*cdt_min_value);
-				logline("*+",str); } }
-
-		if(!(sys_misc&SM_NOCDTCVT)) {
-			bprintf(text[ConversionRate],cdt_min_value);
-			bprintf(text[UserCredits]
-				,ultoac(useron.cdt,tmp)
-				,ultoac(useron.freecdt,tmp2)
-				,ultoac(level_freecdtperday[useron.level],str));
-			bprintf(text[UserMinutes],ultoac(useron.min,tmp));
-			if(useron.cdt/102400L<1L) {
-				bprintf(text[YouOnlyHaveNCredits],ultoac(useron.cdt,tmp));
-				return(0); }
-			if(max_minutes && useron.min>=max_minutes) {
-				bputs(text[YouHaveTooManyMinutes]);
-				return(0); }
-			s=useron.cdt/102400L;
-			if(max_minutes)
-				while(s>0 && (s*cdt_min_value)+useron.min>max_minutes) s--;
-			bprintf(text[CreditsToMin],s);
-			s=getnum(s);
-			if(s>0) {
-				logline("  ","Credit to Minute Conversion");
-				useron.cdt=adjustuserrec(useron.number,U_CDT,10,-(s*102400L));
-				useron.min=adjustuserrec(useron.number,U_MIN,10,s*cdt_min_value);
-				sprintf(str,"Credit Adjustment: %ld",-(s*102400L));
-				logline("$-",str);
-				sprintf(str,"Minute Adjustment: %u",s*cdt_min_value);
-				logline("*+",str); } }
-		return(0);
-	case CS_CHAT_SECTION:
-		if(useron.rest&FLAG('C'))
-			bputs(text[R_Chat]);
-		else
-			chatsection();
-		return(0);
-	case CS_USER_DEFAULTS:
-		maindflts(useron);
-		if(!(useron.rest&FLAG('G')))    /* not guest */
-			getuserdat(&useron);
-		return(0);
-	case CS_TEXT_FILE_SECTION:
-		text_sec();
-		return(0);
-	case CS_INFO_SYSTEM:   /* System information */
-		bputs(text[SiHdr]);
-		getstats(0,&stats);
-		bprintf(text[SiSysName],sys_name);
-		bprintf(text[SiSysID],sys_id);	/* QWK ID */
-		for(i=0;i<total_faddrs;i++)
-			bprintf(text[SiSysFaddr],faddrtoa(faddr[i]));
-		if(sys_psname[0])				/* PostLink/PCRelay */
-			bprintf(text[SiSysPsite],sys_psname,sys_psnum);
-		bprintf(text[SiSysLocation],sys_location);
-		bprintf(text[SiSysop],sys_op);
-		bprintf(text[SiSysNodes],sys_nodes);
-		bprintf(text[SiNodeNumberName],node_num,node_name);
-		bprintf(text[SiNodePhone],node_phone);
-		bprintf(text[SiTotalLogons],ultoac(stats.logons,tmp));
-		bprintf(text[SiLogonsToday],ultoac(stats.ltoday,tmp));
-		bprintf(text[SiTotalTime],ultoac(stats.timeon,tmp));
-		bprintf(text[SiTimeToday],ultoac(stats.ttoday,tmp));
-		ver();
-		if(yesno(text[ViewSysInfoFileQ])) {
-			CLS;
-			sprintf(str,"%sSYSTEM.MSG",text_dir);
-			printfile(str,0); }
-		if(yesno(text[ViewLogonMsgQ])) {
-			CLS;
-			menu("LOGON"); }
-		return(0);
-	case CS_INFO_SUBBOARD:	 /* Sub-board information */
-		if(!usrgrps) return(0);
-		subinfo(usrsub[curgrp][cursub[curgrp]]);
-		return(0);
-	case CS_INFO_DIRECTORY:   /* Sub-board information */
-		if(!usrlibs) return(0);
-		dirinfo(usrdir[curlib][curdir[curlib]]);
-		return(0);
-	case CS_INFO_VERSION:	/* Version */
-		ver();
-		return(0);
-	case CS_INFO_USER:	 /* User's statistics */
-		bprintf(text[UserStats],useron.alias,useron.number);
-		unixtodos(useron.laston,&date,&curtime);
-		bprintf(text[UserDates]
-			,unixtodstr(useron.firston,str)
-			,unixtodstr(useron.expire,tmp)
-			,unixtodstr(useron.laston,tmp2)
-			,curtime.ti_hour,curtime.ti_min);
-		bprintf(text[UserTimes]
-			,useron.timeon,useron.ttoday
-			,level_timeperday[useron.level]
-			,useron.tlast
-			,level_timepercall[useron.level]
-			,useron.textra);
-		bprintf(text[UserLogons]
-			,useron.logons,useron.ltoday
-			,level_callsperday[useron.level],useron.posts
-			,i ? 100/i : useron.posts>useron.logons ? 100 : 0
-			,useron.ptoday);
-		bprintf(text[UserEmails]
-			,useron.emails,useron.fbacks
-			,getmail(useron.number,0),useron.etoday);
-		CRLF;
-		bprintf(text[UserUploads]
-			,ultoac(useron.ulb,tmp),useron.uls);
-		bprintf(text[UserDownloads]
-			,ultoac(useron.dlb,tmp),useron.dls,nulstr);
-		bprintf(text[UserCredits],ultoac(useron.cdt,tmp)
-			,ultoac(useron.freecdt,tmp2)
-			,ultoac(level_freecdtperday[useron.level],str));
-		bprintf(text[UserMinutes],ultoac(useron.min,tmp));
-		return(0);
-	case CS_INFO_XFER_POLICY:
-		if(!usrlibs) return(0);
-		sprintf(str,"%sMENU\\TPOLICY.*",text_dir);
-		if(fexist(str))
-			menu("TPOLICY");
-		else {
-			bprintf(text[TransferPolicyHdr],sys_name);
-			bprintf(text[TpUpload]
-				,dir[usrdir[curlib][curdir[curlib]]]->up_pct);
-			bprintf(text[TpDownload]
-				,dir[usrdir[curlib][curdir[curlib]]]->dn_pct);
-			}
-		return(0);
-	case CS_XTRN_EXEC:
-		csi->logic=LOGIC_TRUE;
-		for(i=0;i<total_xtrns;i++)
-			if(!stricmp(xtrn[i]->code,csi->str))
-				break;
-		if(i<total_xtrns)
-			exec_xtrn(i);
-		else
-			csi->logic=LOGIC_FALSE;
-		return(0);
-	case CS_XTRN_SECTION:
-		if(useron.rest&FLAG('X'))
-			bputs(text[R_ExternalPrograms]);
-		else
-			xtrn_sec(); 	/* If external available, don't pause */
-		return(0);
-	case CS_LOGOFF:
-		if(!noyes(text[LogOffQ])) {
-			if(logoff_mod[0])
-				exec_bin(logoff_mod,csi);
-			user_event(EVENT_LOGOFF);
-			menu("LOGOFF");
-			SYNC;
-			hangup(); }
-		return(0);
-	case CS_LOGOFF_FAST:
-		SYNC;
-		if(online==ON_REMOTE && !(mdm_misc&MDM_NODTR))
-			dtr(0);
-		hangup();
-		return(0);
-	case CS_NODELIST_ALL:
-		CRLF;
-		bputs(text[NodeLstHdr]);
-		for(i=1;i<=sys_nodes && i<=sys_lastnode;i++) {
-			getnodedat(i,&node,0);
-			printnodedat(i,node); }
-		return(0);
-	case CS_NODELIST_USERS:
-		whos_online(1);
-		return(0);
-	case CS_USERLIST_SUB:
-		userlist(UL_SUB);
-		return(0);
-	case CS_USERLIST_DIR:
-		userlist(UL_DIR);
-		return(0);
-	case CS_USERLIST_ALL:
-		userlist(UL_ALL);
-		return(0);
-	case CS_USERLIST_LOGONS:
-		sprintf(str,"%sLOGON.LST",data_dir);
-		if(flength(str)<1) {
-			bputs("\r\n\r\n");
-			bputs(text[NoOneHasLoggedOnToday]); }
-		else {
-			bputs(text[CallersToday]);
-			printfile(str,P_NOATCODES|P_OPENCLOSE);
-			CRLF; }
-		return(0);
-	case CS_PAGE_SYSOP:
-		ch=kbd_state(); 	 /* Check scroll lock */
-		if(ch&16 || (sys_chat_ar[0] && chk_ar(sys_chat_ar,useron))
-			|| useron.exempt&FLAG('C')) {
-			sysop_page();
-			return(0); }
-		bprintf(text[SysopIsNotAvailable],sys_op);
-		return(0);
-	case CS_PAGE_GURU:
-		csi->logic=LOGIC_FALSE;
-		for(i=0;i<total_gurus;i++)
-			if(!stricmp(csi->str,guru[i]->code)
-				&& chk_ar(guru[i]->ar,useron))
-				break;
-		if(i>=total_gurus)
-			return(0);
-        sprintf(str,"%s%s.DAT",ctrl_dir,guru[i]->code);
-		if((file=nopen(str,O_RDONLY))==-1) {
-			errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-			return(0); }
-		if((p=MALLOC(filelength(file)+1))==NULL) {
-			close(file);
-			errormsg(WHERE,ERR_ALLOC,str,filelength(file)+1);
-			return(0); }
-		read(file,p,filelength(file));
-		p[filelength(file)]=0;
-		close(file);
-		localguru(p,i);
-		FREE(p);
-		csi->logic=LOGIC_TRUE;
-		return(0);
-	case CS_PRIVATE_CHAT:
-		privchat();
-		return(0);
-	case CS_PRIVATE_MESSAGE:
-		nodemsg();
-		return(0);
-
-/*******************/
-/* Sysop Functions */
-/*******************/
-	case CS_USER_EDIT:
-		useredit(csi->str[0] ? finduser(csi->str) : 0,0);
-		return(0);
-
-
-/******************/
-/* Mail Functions */
-/******************/
-
-	case CS_MAIL_READ:	 /* Read E-mail */
-		readmail(useron.number,MAIL_YOUR);
-		return(0);
-	case CS_MAIL_READ_SENT: 	  /* Kill/read sent mail */
-		if(useron.rest&FLAG('K'))
-			bputs(text[R_ReadSentMail]);
-		else
-			readmail(useron.number,MAIL_SENT);
-		return(0);
-	case CS_MAIL_READ_ALL:
-		readmail(useron.number,MAIL_ALL);
-		return(0);
-	case CS_MAIL_SEND:		 /* Send E-mail */
-		if(strchr(csi->str,'@')) {
-			i=1;
-			netmail(csi->str,nulstr,0); }
-		else if((i=finduser(csi->str))!=0)
-			email(i,nulstr,nulstr,WM_EMAIL);
-		csi->logic=!i;
-		return(0);
-	case CS_MAIL_SEND_FEEDBACK: 	  /* Feedback */
-		if((i=finduser(csi->str))!=0)
-			email(i,text[ReFeedback],nulstr,WM_EMAIL);
-		csi->logic=!i;
-		return(0);
-	case CS_MAIL_SEND_NETMAIL:
-		bputs(text[EnterNetMailAddress]);
-		if(getstr(str,60,K_LINE)) {
-			netmail(str,nulstr,0);
-			csi->logic=LOGIC_TRUE; }
-		else
-			csi->logic=LOGIC_FALSE;
-		return(0);
-
-	case CS_MAIL_SEND_NETFILE:
-		bputs(text[EnterNetMailAddress]);
-		if(getstr(str,60,K_LINE)) {
-			netmail(str,nulstr,WM_FILE);
-			csi->logic=LOGIC_TRUE; }
-		else
-			csi->logic=LOGIC_FALSE;
-		return(0);
-
-	case CS_MAIL_SEND_FILE:   /* Upload Attached File to E-mail */
-		if(strchr(csi->str,'@')) {
-			i=1;
-			netmail(csi->str,nulstr,WM_FILE); }
-		else if((i=finduser(csi->str))!=0)
-			email(i,nulstr,nulstr,WM_EMAIL|WM_FILE);
-		csi->logic=!i;
-		return(0);
-	case CS_MAIL_SEND_BULK:
-		if(csi->str[0])
-			p=arstr(0,csi->str);
-		else
-			p=nulstr;
-		bulkmail(p);
-		if(p && p[0])
-			FREE(p);
-		return(0);
-
-    case CS_INC_MAIN_CMDS:
-        main_cmds++;
-        return(0);
-
-    case CS_INC_FILE_CMDS:
-        xfer_cmds++;
-        return(0);
-
-    case CS_SYSTEM_LOG:                 /* System log */
-		if(!chksyspass(0))
-            return(0);
-        unixtodos(now,&date,&curtime);
-        sprintf(str,"%sLOGS\\%2.2d%2.2d%2.2d.LOG",data_dir
-            ,date.da_mon,date.da_day,TM_YEAR(date.da_year-1900));
-        printfile(str,0);
-        return(0);
-    case CS_SYSTEM_YLOG:                /* Yesterday's log */
-		if(!chksyspass(0))
-            return(0);
-        now-=(ulong)60L*24L*60L;
-        unixtodos(now,&date,&curtime);
-        sprintf(str,"%sLOGS\\%2.2d%2.2d%2.2d.LOG",data_dir
-            ,date.da_mon,date.da_day,TM_YEAR(date.da_year-1900));
-        printfile(str,0);
-        return(0);
-    case CS_SYSTEM_STATS:               /* System Statistics */
-        bputs(text[SystemStatsHdr]);
-        getstats(0,&stats);
-        bprintf(text[StatsTotalLogons],ultoac(stats.logons,tmp));
-        bprintf(text[StatsLogonsToday],ultoac(stats.ltoday,tmp));
-        bprintf(text[StatsTotalTime],ultoac(stats.timeon,tmp));
-        bprintf(text[StatsTimeToday],ultoac(stats.ttoday,tmp));
-        bprintf(text[StatsUploadsToday],ultoac(stats.ulb,tmp)
-            ,stats.uls);
-        bprintf(text[StatsDownloadsToday],ultoac(stats.dlb,tmp)
-            ,stats.dls);
-        bprintf(text[StatsPostsToday],ultoac(stats.ptoday,tmp));
-        bprintf(text[StatsEmailsToday],ultoac(stats.etoday,tmp));
-        bprintf(text[StatsFeedbacksToday],ultoac(stats.ftoday,tmp));
-        return(0);
-    case CS_NODE_STATS:              /* Node Statistics */
-        i=atoi(csi->str);
-        if(i>sys_nodes) {
-            bputs(text[InvalidNode]);
-            return(0); }
-        if(!i) i=node_num;
-        bprintf(text[NodeStatsHdr],i);
-        getstats(i,&stats);
-        bprintf(text[StatsTotalLogons],ultoac(stats.logons,tmp));
-        bprintf(text[StatsLogonsToday],ultoac(stats.ltoday,tmp));
-        bprintf(text[StatsTotalTime],ultoac(stats.timeon,tmp));
-        bprintf(text[StatsTimeToday],ultoac(stats.ttoday,tmp));
-        bprintf(text[StatsUploadsToday],ultoac(stats.ulb,tmp)
-            ,stats.uls);
-        bprintf(text[StatsDownloadsToday],ultoac(stats.dlb,tmp)
-            ,stats.dls);
-        bprintf(text[StatsPostsToday],ultoac(stats.ptoday,tmp));
-        bprintf(text[StatsEmailsToday],ultoac(stats.etoday,tmp));
-        bprintf(text[StatsFeedbacksToday],ultoac(stats.ftoday,tmp));
-        return(0);
-    case CS_CHANGE_USER:                 /* Change to another user */
-		if(!chksyspass(0))
-            return(0);
-        bputs(text[ChUserPrompt]);
-        if(!getstr(str,LEN_ALIAS,K_UPPER))
-            return(0);
-        if((i=finduser(str))==0)
-            return(0);
-        if(online==ON_REMOTE) {
-            getuserrec(i,U_LEVEL,2,str);
-            if(atoi(str)>logon_ml) {
-                getuserrec(i,U_PASS,8,tmp);
-                bputs(text[ChUserPwPrompt]);
-                console|=CON_R_ECHOX;
-                if(!(sys_misc&SM_ECHO_PW))
-                    console|=CON_L_ECHOX;
-                getstr(str,8,K_UPPER);
-                console&=~(CON_R_ECHOX|CON_L_ECHOX);
-                if(strcmp(str,tmp))
-                    return(0); } }
-        putmsgptrs();
-		putuserrec(useron.number,U_CURSUB,8
-			,sub[usrsub[curgrp][cursub[curgrp]]]->code);
-		putuserrec(useron.number,U_CURDIR,8
-			,dir[usrdir[curlib][curdir[curlib]]]->code);
-        useron.number=i;
-        getuserdat(&useron);
-		getnodedat(node_num,&thisnode,1);
-		thisnode.useron=useron.number;
-		putnodedat(node_num,thisnode);
-        getmsgptrs();
-        if(REALSYSOP) sys_status&=~SS_TMPSYSOP;
-        else sys_status|=SS_TMPSYSOP;
-        statline=sys_def_stat;
-        statusline();
-        sprintf(str,"Changed into %s #%u",useron.alias,useron.number);
-        logline("S+",str);
-        return(0);
-    case CS_SHOW_MEM:
-#ifdef __MSDOS__
-         bprintf(text[NBytesFreeMemory],farcoreleft());
-#endif
-        return(0);
-    case CS_ERROR_LOG:
-        sprintf(str,"%sERROR.LOG",data_dir);
-        if(fexist(str)) {
-            bputs(text[ErrorLogHdr]);
-            printfile(str,0);
-            if(!noyes(text[DeleteErrorLogQ]))
-                remove(str); }
-        else
-            bputs(text[NoErrorLogExists]);
-        for(i=1;i<=sys_nodes;i++) {
-            getnodedat(i,&node,0);
-            if(node.errors)
-                break; }
-        if(i<=sys_nodes || criterrs) {
-            if(!noyes(text[ClearErrCounter])) {
-                for(i=1;i<=sys_nodes;i++) {
-                    getnodedat(i,&node,1);
-                    node.errors=0;
-                    putnodedat(i,node); }
-                criterrs=0; } }
-        return(0);
-    case CS_ANSI_CAPTURE:           /* Capture ANSI codes */
-        sys_status^=SS_ANSCAP;
-        bprintf(text[ANSICaptureIsNow]
-            ,sys_status&SS_ANSCAP ? text[ON] : text[OFF]);
-        return(0);
-    case CS_LIST_TEXT_FILE:              /* View ASCII/ANSI/Ctrl-A file */
-		if(!chksyspass(0))
-            return(0);
-        bputs(text[Filename]);
-        if(getstr(str,60,K_UPPER))
-            printfile(str,0);
-        return(0);
-    case CS_EDIT_TEXT_FILE:              /* Edit ASCII/Ctrl-A file */
-		if(!chksyspass(0))
-            return(0);
-        bputs(text[Filename]);
-        if(getstr(str,60,K_UPPER))
-            editfile(str);
-        return(0);
-    case CS_GURU_LOG:
-        sprintf(str,"%sGURU.LOG",data_dir);
-        if(fexist(str)) {
-            printfile(str,0);
-            CRLF;
-            if(!noyes(text[DeleteGuruLogQ]))
-                remove(str); }
-        return(0);
-    case CS_FILE_SET_ALT_PATH:
-        altul=atoi(csi->str);
-        if(altul>altpaths)
-            altul=0;
-        bprintf(text[AltULPathIsNow],altul ? altpath[altul-1] : text[OFF]);
-        return(0);
-    case CS_FILE_RESORT_DIRECTORY:
-        for(i=1;i<=sys_nodes;i++)
-            if(i!=node_num) {
-                getnodedat(i,&node,0);
-                if(node.status==NODE_INUSE
-                    || node.status==NODE_QUIET)
-                    break; }
-
-        if(i<=sys_nodes) {
-            bputs(text[ResortWarning]);
-            return(0); }
-
-        if(!stricmp(csi->str,"ALL")) {     /* all libraries */
-            for(i=0;i<usrlibs;i++)
-                for(j=0;j<usrdirs[i];j++)
-                    resort(usrdir[i][j]);
-            return(0); }
-        if(!stricmp(csi->str,"LIB")) {     /* current library */
-            for(i=0;i<usrdirs[curlib];i++)
-                resort(usrdir[curlib][i]);
-            return(0); }
-        resort(usrdir[curlib][curdir[curlib]]);
-        return(0);
-
-    case CS_FILE_GET:
-
-        if(!fexist(csi->str)) {
-            bputs(text[FileNotFound]);
-            return(0); }
-		if(!chksyspass(0))
-            return(0);
-
-	case CS_FILE_SEND:
-
-        menu("DLPROT");
-        mnemonics(text[ProtocolOrQuit]);
-        strcpy(str,"Q");
-        for(i=0;i<total_prots;i++)
-            if(prot[i]->dlcmd[0] && chk_ar(prot[i]->ar,useron)) {
-                sprintf(tmp,"%c",prot[i]->mnemonic);
-                strcat(str,tmp); }
-        ch=getkeys(str,0);
-        if(ch=='Q' || sys_status&SS_ABORT) {
-            return(0); }
-        for(i=0;i<total_prots;i++)
-            if(prot[i]->mnemonic==ch && chk_ar(prot[i]->ar,useron))
-                break;
-        if(i<total_prots) {
-			protocol(cmdstr(prot[i]->dlcmd,csi->str,csi->str,str),0);
-            autohangup(); }
-        return(0);
-
-    case CS_FILE_PUT:
-		if(!chksyspass(0))
-            return(0);
-        menu("ULPROT");
-        mnemonics(text[ProtocolOrQuit]);
-        strcpy(str,"Q");
-        for(i=0;i<total_prots;i++)
-            if(prot[i]->ulcmd[0] && chk_ar(prot[i]->ar,useron)) {
-                sprintf(tmp,"%c",prot[i]->mnemonic);
-                strcat(str,tmp); }
-        ch=getkeys(str,0);
-        if(ch=='Q' || sys_status&SS_ABORT) {
-            lncntr=0;
-            return(0); }
-        for(i=0;i<total_prots;i++)
-            if(prot[i]->mnemonic==ch && chk_ar(prot[i]->ar,useron))
-                break;
-        if(i<total_prots) {
-			protocol(cmdstr(prot[i]->ulcmd,csi->str,csi->str,str),0);
-            autohangup(); }
-        return(0);
-
-    case CS_FILE_UPLOAD_BULK:
-
-        if(!usrlibs) return(0);
-
-        if(!stricmp(csi->str,"ALL")) {     /* all libraries */
-            for(i=0;i<usrlibs;i++)
-                for(j=0;j<usrdirs[i];j++) {
-                    if(lib[i]->offline_dir==usrdir[i][j])
-                        continue;
-                    if(bulkupload(usrdir[i][j])) return(0); }
-            return(0); }
-        if(!stricmp(csi->str,"LIB")) {     /* current library */
-            for(i=0;i<usrdirs[curlib];i++) {
-                if(lib[usrlib[curlib]]->offline_dir
-                    ==usrdir[curlib][i])
-                    continue;
-                if(bulkupload(usrdir[curlib][i])) return(0); }
-            return(0); }
-        bulkupload(usrdir[curlib][curdir[curlib]]); /* current dir */
-        return(0);
-
-    case CS_FILE_FIND_OLD:
-    case CS_FILE_FIND_OPEN:
-    case CS_FILE_FIND_OFFLINE:
-    case CS_FILE_FIND_OLD_UPLOADS:
-        if(!usrlibs) return(0);
-        if(!getfilespec(tmp))
-            return(0);
-        padfname(tmp,str);
-        k=0;
-        bputs("\r\nSearching ");
-        if(!stricmp(csi->str,"ALL"))
-            bputs("all libraries");
-        else if(!stricmp(csi->str,"LIB"))
-            bputs("library");
-        else
-            bputs("directory");
-        bputs(" for files ");
-        if(*(csi->ip-1)==CS_FILE_FIND_OLD_UPLOADS) {
-            l=FI_OLDUL;
-            bprintf("uploaded before %s\r\n",timestr(&ns_time)); }
-        else if(*(csi->ip-1)==CS_FILE_FIND_OLD) { /* go by download date */
-            l=FI_OLD;
-            bprintf("not downloaded since %s\r\n",timestr(&ns_time)); }
-        else if(*(csi->ip-1)==CS_FILE_FIND_OFFLINE) {
-            l=FI_OFFLINE;
-            bputs("not online...\r\n"); }
-        else {
-            l=FI_CLOSE;
-            bputs("currently open...\r\n"); }
-        if(!stricmp(csi->str,"ALL")) {
-            for(i=0;i<usrlibs;i++)
-                for(j=0;j<usrdirs[i];j++) {
-                    if(lib[i]->offline_dir==usrdir[i][j])
-                        continue;
-                    if((s=listfileinfo(usrdir[i][j],str,l))==-1)
-                        return(0);
-                    else k+=s; } }
-        else if(!stricmp(csi->str,"LIB")) {
-            for(i=0;i<usrdirs[curlib];i++) {
-                if(lib[usrlib[curlib]]->offline_dir==usrdir[curlib][i])
-                        continue;
-                if((s=listfileinfo(usrdir[curlib][i],str,l))==-1)
-                    return(0);
-                else k+=s; } }
-        else {
-            s=listfileinfo(usrdir[curlib][curdir[curlib]],str,l);
-            if(s==-1)
-                return(0);
-            k=s; }
-        if(k>1) {
-            bprintf(text[NFilesListed],k); }
-		return(0); }
-
-if(*(csi->ip-1)>=CS_MSG_SET_AREA && *(csi->ip-1)<=CS_MSG_UNUSED1) {
-	csi->ip--;
-	return(execmsg(csi)); }
-
-if(*(csi->ip-1)>=CS_FILE_SET_AREA && *(csi->ip-1)<=CS_FILE_UNUSED1) {
-	csi->ip--;
-	return(execfile(csi)); }
-
-errormsg(WHERE,ERR_CHK,"shell function",*(csi->ip-1));
-return(0);
-}
diff --git a/src/sbbs2/execmisc.c b/src/sbbs2/execmisc.c
deleted file mode 100644
index 9b0f98bf43..0000000000
--- a/src/sbbs2/execmisc.c
+++ /dev/null
@@ -1,1373 +0,0 @@
-#line 1 "EXECMISC.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-#include "cmdshell.h"
-#include <sys/locking.h>
-#include <dirent.h>
-
-
-int exec_misc(csi_t *csi, uchar *path)
-{
-	uchar	str[256],tmp2[128],buf[1025],ch,*p,**pp,**pp1,**pp2;
-	ushort	w;
-	int 	i,j,k,s,file;
-	long	l,*lp,*lp1,*lp2;
-	void	*vp;
-	va_list arglist[64];
-	struct	dirent *de;
-    struct  tm *tm_p;
-	struct	ftime ft;
-	FILE	*fp;
-
-switch(*(csi->ip++)) {
-	case CS_VAR_INSTRUCTION:
-		switch(*(csi->ip++)) {	/* sub-op-code stored as next byte */
-			case PRINT_VAR:
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				if(!pp || !*pp) {
-					lp=getintvar(csi,*(long *)csi->ip);
-					if(lp)
-						bprintf("%ld",*lp); }
-				else
-					putmsg(cmdstr(*pp,path,csi->str,buf)
-						,P_SAVEATR|P_NOABORT);
-				csi->ip+=4;
-				return(0);
-			case VAR_PRINTF:
-				strcpy(str,csi->ip);
-				while(*(csi->ip++));	/* Find NULL */
-				j=*(csi->ip++); 		/* total args */
-				for(i=0;i<j;i++) {
-					vp=getstrvar(csi,*(long *)csi->ip);
-					if(!vp) {
-						lp=getintvar(csi,*(long *)csi->ip);
-						if(!lp)
-							arglist[i]=0;
-						else
-							arglist[i]=(void *)*lp; }
-					else
-						arglist[i]=*(char **)vp;
-					csi->ip+=4; }
-				vsprintf(tmp,str,arglist);
-				putmsg(cmdstr(tmp,path,csi->str,buf),P_SAVEATR|P_NOABORT);
-				return(0);
-			case SHOW_VARS:
-				bprintf("shell     str=(%08lX) %s\r\n"
-					,csi->str,csi->str);
-				for(i=0;i<csi->str_vars;i++)
-					bprintf("local  str[%d]=(%08lX) (%08lX) %s\r\n"
-						,i,csi->str_var_name[i]
-						,csi->str_var[i]
-						,csi->str_var[i]);
-				for(i=0;i<csi->int_vars;i++)
-					bprintf("local  int[%d]=(%08lX) (%08lX) %ld\r\n"
-						,i,csi->int_var_name[i]
-						,csi->int_var[i]
-						,csi->int_var[i]);
-				for(i=0;i<global_str_vars;i++)
-					bprintf("global str[%d]=(%08lX) (%08lX) %s\r\n"
-						,i,global_str_var_name[i]
-						,global_str_var[i]
-						,global_str_var[i]);
-				for(i=0;i<global_int_vars;i++)
-					bprintf("global int[%d]=(%08lX) (%08lX) %ld\r\n"
-						,i,global_int_var_name[i]
-						,global_int_var[i]
-						,global_int_var[i]);
-				return(0);
-			case DEFINE_STR_VAR:
-				if(getstrvar(csi,*(long *)csi->ip)) {
-					csi->ip+=4;
-					return(0); }
-				csi->str_vars++;
-				csi->str_var=REALLOC(csi->str_var
-					,sizeof(char *)*csi->str_vars);
-				csi->str_var_name=REALLOC(csi->str_var_name
-					,sizeof(long)*csi->str_vars);
-				if(csi->str_var==NULL
-					|| csi->str_var_name==NULL) { /* REALLOC failed */
-					errormsg(WHERE,ERR_ALLOC,"local str var"
-						,sizeof(char *)*csi->str_vars);
-					if(csi->str_var_name) {
-						FREE(csi->str_var_name);
-						csi->str_var_name=0; }
-					if(csi->str_var) {
-						FREE(csi->str_var);
-						csi->str_var=0; }
-					csi->str_vars=0; }
-				else {
-					csi->str_var_name[csi->str_vars-1]=*(long *)csi->ip;
-					csi->str_var[csi->str_vars-1]=0; }
-				csi->ip+=4; /* Skip variable name */
-				return(0);
-			case DEFINE_INT_VAR:
-				if(getintvar(csi,*(long *)csi->ip)) {
-					csi->ip+=4;
-					return(0); }
-				csi->int_vars++;
-				csi->int_var=REALLOC(csi->int_var
-					,sizeof(char *)*csi->int_vars);
-				csi->int_var_name=REALLOC(csi->int_var_name
-					,sizeof(long)*csi->int_vars);
-				if(csi->int_var==NULL
-					|| csi->int_var_name==NULL) { /* REALLOC failed */
-					errormsg(WHERE,ERR_ALLOC,"local int var"
-						,sizeof(char *)*csi->int_vars);
-					if(csi->int_var_name) {
-						FREE(csi->int_var_name);
-						csi->int_var_name=0; }
-					if(csi->int_var) {
-						FREE(csi->int_var);
-						csi->int_var=0; }
-					csi->int_vars=0; }
-				else {
-					csi->int_var_name[csi->int_vars-1]=*(long *)csi->ip;
-					csi->int_var[csi->int_vars-1]=0; }
-				csi->ip+=4; /* Skip variable name */
-				return(0);
-			case DEFINE_GLOBAL_STR_VAR:
-				if(getstrvar(csi,*(long *)csi->ip)) {
-					csi->ip+=4;
-					return(0); }
-				global_str_vars++;
-				global_str_var=REALLOC(global_str_var
-					,sizeof(char *)*global_str_vars);
-				global_str_var_name=REALLOC(global_str_var_name
-					,sizeof(long)*global_str_vars);
-				if(global_str_var==NULL
-					|| global_str_var_name==NULL) { /* REALLOC failed */
-					errormsg(WHERE,ERR_ALLOC,"global str var"
-						,sizeof(char *)*global_str_vars);
-					if(global_str_var_name) {
-						FREE(global_str_var_name);
-						global_str_var_name=0; }
-					if(global_str_var) {
-						FREE(global_str_var);
-						global_str_var=0; }
-					global_str_vars=0; }
-				else {
-					global_str_var_name[global_str_vars-1]=
-						*(long *)csi->ip;
-					global_str_var[global_str_vars-1]=0; }
-				csi->ip+=4; /* Skip variable name */
-				return(0);
-			case DEFINE_GLOBAL_INT_VAR:
-				if(getintvar(csi,*(long *)csi->ip)) {
-					csi->ip+=4;
-					return(0); }
-				global_int_vars++;
-				global_int_var=REALLOC(global_int_var
-					,sizeof(char *)*global_int_vars);
-				global_int_var_name=REALLOC(global_int_var_name
-					,sizeof(long)*global_int_vars);
-				if(global_int_var==NULL
-					|| global_int_var_name==NULL) { /* REALLOC failed */
-					errormsg(WHERE,ERR_ALLOC,"local int var"
-						,sizeof(char *)*global_int_vars);
-					if(global_int_var_name) {
-						FREE(global_int_var_name);
-						global_int_var_name=0; }
-					if(global_int_var) {
-						FREE(global_int_var);
-						global_int_var=0; }
-					global_int_vars=0; }
-				else {
-					global_int_var_name[global_int_vars-1]
-						=*(long *)csi->ip;
-					global_int_var[global_int_vars-1]=0; }
-				csi->ip+=4; /* Skip variable name */
-				return(0);
-
-			case SET_STR_VAR:
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4; /* Skip variable name */
-				if(pp)
-					*pp=copystrvar(csi,*pp
-						,cmdstr(csi->ip,path,csi->str,buf));
-				while(*(csi->ip++));	 /* Find NULL */
-				return(0);
-			case SET_INT_VAR:
-				lp=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4; /* Skip variable name */
-				if(lp)
-					*lp=*(long *)csi->ip;
-				csi->ip+=4; /* Skip value */
-				return(0);
-			case COMPARE_STR_VAR:
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4; /* Skip variable name */
-				if(pp)
-					csi->logic=stricmp(*pp
-						,cmdstr(csi->ip,path,csi->str,buf));
-				else {	/* Uninitialized str var */
-					if(*(csi->ip)==0)	 /* Blank static str */
-						csi->logic=LOGIC_TRUE;
-					else
-						csi->logic=LOGIC_FALSE; }
-				while(*(csi->ip++));	 /* Find NULL */
-				return(0);
-			case STRSTR_VAR:
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4; /* Skip variable name */
-				if(pp && *pp && strstr(*pp
-					,cmdstr(csi->ip,path,csi->str,buf)))
-					csi->logic=LOGIC_TRUE;
-				else
-					csi->logic=LOGIC_FALSE;
-				while(*(csi->ip++));	 /* Find NULL */
-				return(0);
-			case STRNCMP_VAR:
-				i=*csi->ip++;
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4; /* Skip variable name */
-				if(pp && *pp)
-					csi->logic=strnicmp(*pp
-						,cmdstr(csi->ip,path,csi->str,buf),i);
-				else
-					csi->logic=LOGIC_FALSE;
-				while(*(csi->ip++));	 /* Find NULL */
-				return(0);
-			case STRNCMP_VARS:
-				i=*csi->ip++;
-				(char **)pp1=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4; /* Skip variable name */
-				(char **)pp2=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				if(pp1 && *pp1 && pp2 && *pp2)
-					csi->logic=strnicmp(*pp1,*pp2,i);
-				else
-					csi->logic=LOGIC_FALSE;
-				return(0);
-			case STRSTR_VARS:
-				(char **)pp1=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4; /* Skip variable name */
-				(char **)pp2=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				if(pp1 && *pp1 && pp2 && *pp2 && strstr(*pp1,*pp2))
-					csi->logic=LOGIC_TRUE;
-				else
-					csi->logic=LOGIC_FALSE;
-				return(0);
-			case COMPARE_INT_VAR:
-				lp=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4; /* Skip variable name */
-				l=*(long *)csi->ip;
-				csi->ip+=4; /* Skip static value */
-				if(!lp) {	/* Unknown variable */
-					csi->logic=LOGIC_FALSE;
-					return(0); }
-				if(*lp>l)
-					csi->logic=LOGIC_GREATER;
-				else if(*lp<l)
-					csi->logic=LOGIC_LESS;
-				else
-					csi->logic=LOGIC_EQUAL;
-				return(0);
-			case COMPARE_VARS:
-				lp1=lp2=0;
-				(char **)pp1=getstrvar(csi,*(long *)csi->ip);
-				if(!pp1)
-					lp1=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4; /* Skip variable name */
-				(char **)pp2=getstrvar(csi,*(long *)csi->ip);
-				if(!pp2)
-					lp2=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4; /* Skip variable name */
-
-				if(((!pp1 || !*pp1) && !lp1)
-					|| ((!pp2 || !*pp2) && !lp2)) {
-					if(pp1 && pp2)		/* Both unitialized or blank */
-						csi->logic=LOGIC_TRUE;
-					else
-						csi->logic=LOGIC_FALSE;
-					return(0); }
-
-				if(pp1) { /* ASCII */
-					if(!pp2) {
-						ltoa(*lp2,tmp,10);
-						csi->logic=stricmp(*pp1,tmp); }
-					else
-						csi->logic=stricmp(*pp1,*pp2);
-					return(0); }
-
-				/* Binary */
-				if(!lp2) {
-					l=strtol(*pp2,0,0);
-					if(*lp1>l)
-						csi->logic=LOGIC_GREATER;
-					else if(*lp1<l)
-						csi->logic=LOGIC_LESS;
-					else
-						csi->logic=LOGIC_EQUAL;
-					return(0); }
-				if(*lp1>*lp2)
-					csi->logic=LOGIC_GREATER;
-				else if(*lp1<*lp2)
-					csi->logic=LOGIC_LESS;
-				else
-					csi->logic=LOGIC_EQUAL;
-				return(0);
-			case COPY_VAR:
-				lp1=lp2=0;
-				(char **)pp1=getstrvar(csi,*(long *)csi->ip);
-				if(!pp1)
-					lp1=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4; /* Skip variable name */
-				(char **)pp2=getstrvar(csi,*(long *)csi->ip);
-				if(!pp2)
-					lp2=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4; /* Skip variable name */
-
-				if((!pp1 && !lp1)
-					|| ((!pp2 || !*pp2) && !lp2)) {
-					csi->logic=LOGIC_FALSE;
-					return(0); }
-				csi->logic=LOGIC_TRUE;
-
-				if(pp1) {	/* ASCII */
-					if(!pp2)
-						ltoa(*lp2,tmp,10);
-					else
-						strcpy(tmp,*pp2);
-					*pp1=copystrvar(csi,*pp1,tmp);
-					return(0); }
-				if(!lp2)
-					*lp1=strtol(*pp2,0,0);
-				else
-					*lp1=*lp2;
-				return(0);
-			case SWAP_VARS:
-				lp1=lp2=0;
-				(char **)pp1=getstrvar(csi,*(long *)csi->ip);
-				if(!pp1)
-					lp1=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4; /* Skip variable name */
-				(char **)pp2=getstrvar(csi,*(long *)csi->ip);
-				if(!pp2)
-					lp2=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4; /* Skip variable name */
-
-				if(((!pp1 || !*pp1) && !lp1)
-					|| ((!pp2 || !*pp2) && !lp2)) {
-					csi->logic=LOGIC_FALSE;
-					return(0); }
-
-				csi->logic=LOGIC_TRUE;
-
-				if(pp1) {	/* ASCII */
-					if(!pp2) {
-						if(!strnicmp(*pp2,"0x",2)) {
-							l=strtol((*pp1)+2,0,16);
-							ltoa(*lp2,tmp,16); }
-						else {
-							l=atol(*pp1);
-							ltoa(*lp2,tmp,10); }
-						*pp1=copystrvar(csi,*pp1,tmp);
-						*lp2=l; }
-					else {
-						p=*pp1;
-						*pp1=*pp2;
-						*pp2=p; }
-					return(0); }
-
-				/* Binary */
-				if(!lp2) {
-					if(!strnicmp(*pp2,"0x",2)) {
-						l=strtol((*pp2)+2,0,16);
-						ltoa(*lp1,tmp,16); }
-					else {
-						l=atol(*pp2);
-						ltoa(*lp1,tmp,10); }
-					*pp2=copystrvar(csi,*pp2,tmp);
-					*lp1=l; }
-				else {
-					l=*lp1;
-					*lp1=*lp2;
-					*lp2=l; }
-				return(0);
-			case CAT_STR_VAR:
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4; /* Skip variable name */
-				strcpy(tmp,csi->ip);
-				while(*(csi->ip++));
-				if(pp && *pp)
-					for(i=0;i<MAX_SYSVARS;i++)
-						if(*pp==sysvar_p[i])
-							break;
-				if(pp && *pp!=csi->str && i==MAX_SYSVARS) {
-					if(*pp)
-						*pp=REALLOC(*pp,strlen(*pp)+strlen(tmp)+1);
-					else
-						*pp=REALLOC(*pp,strlen(tmp)+1); }
-				if(pp && *pp)
-					strcat(*pp,tmp);
-				return(0);
-			case CAT_STR_VARS:
-				(char **)pp1=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4; /* Skip dest variable name */
-				(char **)pp2=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4; /* Skip source variable name */
-				if(!pp1 || !pp2 || !*pp2) {
-					csi->logic=LOGIC_FALSE;
-					return(0); }
-				csi->logic=LOGIC_TRUE;
-				if(*pp1)
-					for(i=0;i<MAX_SYSVARS;i++)
-						if(*pp1==sysvar_p[i])
-							break;
-				if(*pp1!=csi->str && (!*pp1 || i==MAX_SYSVARS)) {
-					if(*pp1)
-						*pp1=REALLOC(*pp1,strlen(*pp1)+strlen(*pp2)+1);
-					else
-						*pp1=REALLOC(*pp1,strlen(*pp2)+1); }
-				strcat(*pp1,*pp2);
-				return(0);
-			case FORMAT_STR_VAR:
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4; /* Skip variable name */
-				strcpy(str,csi->ip);
-				while(*(csi->ip++));	/* Find NULL */
-				j=*(csi->ip++); 		/* total args */
-				for(i=0;i<j;i++) {
-					vp=getstrvar(csi,*(long *)csi->ip);
-					if(!vp) {
-						lp=getintvar(csi,*(long *)csi->ip);
-						if(!lp)
-							arglist[i]=0;
-						else
-							arglist[i]=(void *)*lp; }
-					else
-						arglist[i]=*(char **)vp;
-					csi->ip+=4; }
-				vsprintf(tmp,str,arglist);
-				cmdstr(tmp,path,csi->str,str);
-				if(pp)
-					*pp=copystrvar(csi,*pp,str);
-				return(0);
-			case FORMAT_TIME_STR:
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4; /* Skip variable name */
-				strcpy(str,csi->ip);
-				while(*(csi->ip++));	/* Find NULL */
-				lp=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				if(pp && lp) {
-					tm_p=gmtime(lp);
-					strftime(buf,128,str,tm_p);
-					*pp=copystrvar(csi,*pp,buf); }
-				return(0);
-			case TIME_STR:
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4; /* Skip str variable name */
-				lp=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4; /* Skip int variable name */
-				if(pp && lp) {
-					strcpy(str,timestr(lp));
-					*pp=copystrvar(csi,*pp,str); }
-				return(0);
-			case DATE_STR:
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4; /* Skip str variable name */
-				lp=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4; /* Skip int variable name */
-				if(pp && lp) {
-					unixtodstr(*lp,str);
-					*pp=copystrvar(csi,*pp,str); }
-				return(0);
-			case SECOND_STR:
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4; /* Skip str variable name */
-				lp=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4; /* Skip int variable name */
-				if(pp && lp) {
-					sectostr(*lp,str);
-					*pp=copystrvar(csi,*pp,str); }
-				return(0);
-			case STRUPR_VAR:
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				if(pp && *pp)
-					strupr(*pp);
-				return(0);
-			case STRLWR_VAR:
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				if(pp && *pp)
-					strlwr(*pp);
-				return(0);
-			case TRUNCSP_STR_VAR:
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				if(pp && *pp)
-					truncsp(*pp);
-				return(0);
-			case STRIP_CTRL_STR_VAR:
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				if(pp && *pp)
-					strip_ctrl(*pp);
-				return(0);
-
-			case ADD_INT_VAR:
-			case SUB_INT_VAR:
-			case MUL_INT_VAR:
-			case DIV_INT_VAR:
-			case MOD_INT_VAR:
-			case AND_INT_VAR:
-			case OR_INT_VAR:
-			case NOT_INT_VAR:
-			case XOR_INT_VAR:
-				i=*(csi->ip-1);
-				lp=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				l=*(long *)csi->ip;
-				csi->ip+=4;
-				if(!lp)
-					return(0);
-				switch(i) {
-					case ADD_INT_VAR:
-						*lp+=l;
-						break;
-					case SUB_INT_VAR:
-						*lp-=l;
-						break;
-					case MUL_INT_VAR:
-						*lp*=l;
-						break;
-					case DIV_INT_VAR:
-						*lp/=l;
-						break;
-					case MOD_INT_VAR:
-						*lp%=l;
-						break;
-					case AND_INT_VAR:
-						*lp&=l;
-						break;
-					case OR_INT_VAR:
-						*lp|=l;
-						break;
-					case NOT_INT_VAR:
-						*lp&=~l;
-						break;
-					case XOR_INT_VAR:
-						*lp^=l;
-						break; }
-				return(0);
-			case ADD_INT_VARS:
-			case SUB_INT_VARS:
-			case MUL_INT_VARS:
-			case DIV_INT_VARS:
-			case MOD_INT_VARS:
-			case AND_INT_VARS:
-			case OR_INT_VARS:
-			case NOT_INT_VARS:
-			case XOR_INT_VARS:
-				i=*(csi->ip-1);
-				lp1=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				lp2=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				if(!lp1)
-					return(0);
-				if(!lp2) {
-					(char **)pp=getstrvar(csi,*(long *)csi->ip);
-					if(!pp || !*pp)
-						return(0);
-					l=strtol(*pp,0,0); }
-				else
-					l=*lp2;
-				switch(i) {
-					case ADD_INT_VARS:
-						*lp1+=l;
-						break;
-					case SUB_INT_VARS:
-						*lp1-=l;
-						break;
-					case MUL_INT_VARS:
-						*lp1*=l;
-						break;
-					case DIV_INT_VARS:
-						*lp1/=l;
-						break;
-					case MOD_INT_VARS:
-						*lp1%=l;
-						break;
-					case AND_INT_VARS:
-						*lp1&=l;
-						break;
-					case OR_INT_VARS:
-						*lp1|=l;
-						break;
-					case NOT_INT_VARS:
-						*lp1&=~l;
-						break;
-					case XOR_INT_VARS:
-						*lp1^=l;
-						break; }
-				return(0);
-			case RANDOM_INT_VAR:
-				lp=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				l=*(long *)csi->ip;
-				csi->ip+=4;
-				if(lp)
-					*lp=random(l);
-				return(0);
-			case TIME_INT_VAR:
-				lp=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				if(lp)
-					*lp=time(NULL);
-				return(0);
-			case DATE_STR_TO_INT:
-				lp=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				if(lp && pp && *pp)
-					*lp=dstrtounix(*pp);
-				return(0);
-			case STRLEN_INT_VAR:
-				lp=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				if(lp) {
-					if(pp && *pp)
-						*lp=strlen(*pp);
-					else
-						*lp=0; }
-				return(0);
-			case CRC16_TO_INT:
-				lp=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				if(lp) {
-					if(pp && *pp)
-						*lp=crc16(*pp);
-					else
-						*lp=0; }
-				return(0);
-			case CRC32_TO_INT:
-				lp=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				if(lp) {
-					if(pp && *pp)
-						*lp=crc32(*pp,strlen(*pp));
-					else
-						*lp=0; }
-				return(0);
-			case CHKSUM_TO_INT:
-				lp=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				if(lp) {
-					*lp=0;
-					if(pp && *pp) {
-						i=0;
-						while(*((*pp)+i))
-							*lp+=(uchar)*((*pp)+(i++)); } }
-				return(0);
-			case FLENGTH_TO_INT:
-				lp=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				if(lp) {
-					if(pp && *pp)
-						*lp=flength(*pp);
-					else
-						*lp=0; }
-				return(0);
-			case FTIME_TO_INT:
-				lp=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				if(lp) {
-					if(pp && *pp)
-						*lp=fdate_dir(*pp);
-					else
-						*lp=0; }
-				return(0);
-			case CHARVAL_TO_INT:
-				lp=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				if(lp) {
-					if(pp && *pp)
-						*lp=**pp;
-					else
-						*lp=0; }
-				return(0);
-			case GETSTR_VAR:
-			case GETLINE_VAR:
-			case GETNAME_VAR:
-			case GETSTRUPR_VAR:
-			case GETSTR_MODE:
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				i=*(csi->ip++);
-				csi->logic=LOGIC_FALSE;
-				switch(*(csi->ip-6)) {
-					case GETNAME_VAR:
-						getstr(buf,i,K_UPRLWR);
-						break;
-					case GETSTRUPR_VAR:
-						getstr(buf,i,K_UPPER);
-						break;
-					case GETLINE_VAR:
-						getstr(buf,i,K_LINE);
-						break;
-					case GETSTR_MODE:
-						l=*(long *)csi->ip;
-						csi->ip+=4;
-						if(l&K_EDIT) {
-							if(pp && *pp)
-								strcpy(buf,*pp);
-							else
-								buf[0]=0; }
-						getstr(buf,i,l);
-						break;
-					default:
-						getstr(buf,i,0); }
-				if(sys_status&SS_ABORT)
-					return(0);
-				if(pp) {
-					*pp=copystrvar(csi,*pp,buf);
-					csi->logic=LOGIC_TRUE; }
-				return(0);
-			case GETNUM_VAR:
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				if(!pp)
-					lp=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				i=*(short *)csi->ip;
-				csi->ip+=2;
-				csi->logic=LOGIC_FALSE;
-				l=getnum(i);
-				if(!pp && !lp)
-					return(0);
-				if(pp) {
-					if(l<=0)
-						str[0]=0;
-					else
-						ltoa(l,str,10);
-					*pp=copystrvar(csi,*pp,str);
-					csi->logic=LOGIC_TRUE;
-					return(0); }
-				if(lp) {
-					*lp=l;
-					csi->logic=LOGIC_TRUE; }
-				return(0);
-
-			case SHIFT_STR_VAR:
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				i=*(csi->ip++);
-				if(!pp || !*pp)
-					return(0);
-				if(strlen(*pp)>=i)
-					memmove(*pp,*pp+i,strlen(*pp)+1);
-				return(0);
-
-			case CHKFILE_VAR:
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				if(pp && *pp && fexist(cmdstr(*pp,path,csi->str,buf)))
-					csi->logic=LOGIC_TRUE;
-				else
-					csi->logic=LOGIC_FALSE;
-				return(0);
-			case PRINTFILE_VAR_MODE:
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				i=*(short *)(csi->ip);
-				csi->ip+=2;
-				if(pp && *pp)
-					printfile(*pp,i);
-				return(0);
-			case PRINTTAIL_VAR_MODE:
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				i=*(short *)(csi->ip);
-				csi->ip+=2;
-				j=*csi->ip;
-				csi->ip++;
-				if(pp && *pp)
-					printtail(*pp,j,i);
-				return(0);
-			case SEND_FILE_VIA:
-			case RECEIVE_FILE_VIA:
-				j=*(csi->ip-1);
-				ch=*(csi->ip++);	/* Protocol */
-				cmdstr(csi->ip,csi->str,csi->str,str);
-				while(*(csi->ip++));	/* Find NULL */
-				for(i=0;i<total_prots;i++)
-					if(prot[i]->mnemonic==ch && chk_ar(prot[i]->ar,useron))
-						break;
-				csi->logic=LOGIC_FALSE;
-				if(i<total_prots)
-					if(external(cmdstr(j==SEND_FILE_VIA
-						? prot[i]->dlcmd : prot[i]->ulcmd,str,str,buf)
-						,EX_OUTL)==0)
-						csi->logic=LOGIC_TRUE;
-				return(0);
-			case SEND_FILE_VIA_VAR:
-			case RECEIVE_FILE_VIA_VAR:
-				j=*(csi->ip-1);
-				ch=*(csi->ip++);	/* Protocol */
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				for(i=0;i<total_prots;i++)
-					if(prot[i]->mnemonic==ch && chk_ar(prot[i]->ar,useron))
-						break;
-				csi->logic=LOGIC_FALSE;
-				if(!pp || !(*pp))
-					return(0);
-				if(i<total_prots)
-					if(external(cmdstr(j==SEND_FILE_VIA_VAR
-						 ? prot[i]->dlcmd : prot[i]->ulcmd,*pp,*pp,buf)
-						,EX_OUTL)==0)
-						csi->logic=LOGIC_TRUE;
-				return(0);
-
-			default:
-				errormsg(WHERE,ERR_CHK,"var sub-instruction",*(csi->ip-1));
-				return(0); }
-
-	case CS_FIO_FUNCTION:
-		switch(*(csi->ip++)) {	/* sub-op-code stored as next byte */
-			case FIO_OPEN:
-			case FIO_OPEN_VAR:
-				lp=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				w=*(ushort *)csi->ip;
-				csi->ip+=2;
-				csi->logic=LOGIC_FALSE;
-				if(*(csi->ip-7)==FIO_OPEN) {
-					cmdstr(csi->ip,path,csi->str,str);
-					while(*(csi->ip++)); }	 /* skip filename */
-				else {
-					(char **)pp=getstrvar(csi,*(long *)csi->ip);
-					csi->ip+=4;
-					if(!pp || !*pp)
-						return(0);
-					strcpy(str,*pp); }
-				if(csi->files>=MAX_FOPENS)
-					return(0);
-				if(lp) {
-					/* Access flags are not cross-platform, so convert */
-					i=0;
-					if(w&1) 	i|=O_RDONLY;
-					if(w&2) 	i|=O_WRONLY;
-					if(w&4) 	i|=O_RDWR;
-					if(w&0x040) i|=O_DENYNONE;
-					if(w&0x100) i|=O_CREAT;
-					if(w&0x200) i|=O_TRUNC;
-					if(w&0x400) i|=O_EXCL;
-					if(w&0x800) i|=O_APPEND;
-					*lp=(long)fnopen(&j,str,i);
-					if(*lp) {
-						for(i=0;i<csi->files;i++)
-							if(!csi->file[i])
-								break;
-						csi->file[i]=(FILE *)*lp;
-						if(i==csi->files)
-							csi->files++;
-						csi->logic=LOGIC_TRUE; } }
-				return(0);
-			case FIO_CLOSE:
-				lp=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				if(lp && *lp) {
-					csi->logic=fclose((FILE *)*lp);
-					for(i=0;i<csi->files;i++)
-						if(csi->file[i]==(FILE *)*lp)
-							csi->file[i]=0; }
-				else
-					csi->logic=LOGIC_FALSE;
-				return(0);
-			case FIO_FLUSH:
-				lp=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				if(lp && *lp)
-					csi->logic=fflush((FILE *)*lp);
-				else
-					csi->logic=LOGIC_FALSE;
-                return(0);
-			case FIO_READ:
-			case FIO_READ_VAR:
-				lp1=getintvar(csi,*(long *)csi->ip);		/* Handle */
-				csi->ip+=4;
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				if(!pp)
-					lp2=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				csi->logic=LOGIC_FALSE;
-				if(*(csi->ip-9)==FIO_READ) {
-					i=*(short *)csi->ip;
-					csi->ip+=2; /* Length */ }
-				else {			/* FIO_READ_VAR */
-					vp=getintvar(csi,*(long *)csi->ip);
-					csi->ip+=4;
-					if(!vp)
-						return(0);
-					i=*(short *)vp; }
-				if(i>1024)
-					i=1024;
-				if(!lp1 || !(*lp1) || (!pp && !lp2))
-					return(0);
-				if(pp) {
-					if(i<1) {
-						if(*pp && **pp)
-							i=strlen(*pp);
-						else
-							i=128; }
-					if((j=fread(buf,1,i,(FILE *)*lp1))==i)
-						csi->logic=LOGIC_TRUE;
-					buf[j]=0;
-					if(csi->etx) {
-						p=strchr(buf,csi->etx);
-						if(p) *p=0; }
-					*pp=copystrvar(csi,*pp,buf); }
-				else {
-					*lp2=0;
-					if(i>4 || i<1) i=4;
-					if(fread(lp2,1,i,(FILE *)*lp1)==i)
-						csi->logic=LOGIC_TRUE; }
-				return(0);
-			case FIO_READ_LINE:
-				lp1=getintvar(csi,*(long *)csi->ip);		/* Handle */
-				csi->ip+=4;
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				if(!pp)
-					lp2=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				csi->logic=LOGIC_FALSE;
-				if(!lp1 || !(*lp1) || feof((FILE *)*lp1) || (!pp && !lp2))
-					return(0);
-				csi->logic=LOGIC_TRUE;
-				for(i=0;i<1024 /* && !eof(*lp1) removed 1/23/96 */;i++) {
-					if(!fread(buf+i,1,1,(FILE *)*lp1))
-						break;
-					if(*(buf+i)==LF) {
-						i++;
-						break; } }
-				buf[i]=0;
-				if(csi->etx) {
-					p=strchr(buf,csi->etx);
-					if(p) *p=0; }
-				if(pp)
-					*pp=copystrvar(csi,*pp,buf);
-				else
-					*lp2=strtol(buf,0,0);
-				return(0);
-			case FIO_WRITE:
-			case FIO_WRITE_VAR:
-				lp1=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				if(!pp)
-					lp2=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				csi->logic=LOGIC_FALSE;
-				if(*(csi->ip-9)==FIO_WRITE) {
-					i=*(short *)csi->ip;
-					csi->ip+=2; /* Length */ }
-				else {			/* FIO_WRITE_VAR */
-					vp=getintvar(csi,*(long *)csi->ip);
-					csi->ip+=4;
-					if(!vp)
-						return(0);
-					i=*(short *)vp; }
-				if(i>1024)
-					i=1024;
-				if(!lp1 || !(*lp1) || (!pp && !lp2) || (pp && !*pp))
-					return(0);
-				if(pp) {
-					j=strlen(*pp);
-					if(i<1) i=j;
-					if(j>i) j=i;
-					j=fwrite(*pp,1,j,(FILE *)*lp1);
-					if(j<i) {
-						memset(buf,csi->etx,i-j);
-						fwrite(buf,1,i-j,(FILE *)*lp1); }
-					csi->logic=LOGIC_TRUE; }
-				else {
-					if(i<1 || i>4) i=4;
-					if(fwrite(lp2,1,i,(FILE *)*lp1)==i)
-						csi->logic=LOGIC_TRUE; }
-				return(0);
-			case FIO_GET_LENGTH:
-				lp1=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				lp2=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				if(lp1 && *lp1 && lp2)
-					*lp2=filelength(fileno((FILE *)*lp1));
-				return(0);
-			case FIO_GET_TIME:
-				lp1=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				lp2=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				if(lp1 && *lp1 && lp2) {
-					getftime(fileno((FILE *)*lp1),&ft);
-					*lp2=ftimetounix(ft); }
-				return(0);
-			case FIO_SET_TIME:
-				lp1=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				lp2=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				if(lp1 && *lp1 && lp2) {
-					ft=unixtoftime(*lp2);
-					setftime(fileno((FILE *)*lp1),&ft); }
-				return(0);
-			case FIO_EOF:
-				lp=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				csi->logic=LOGIC_FALSE;
-				if(lp && *lp)
-					if(ftell((FILE *)*lp)>=filelength(fileno((FILE *)*lp)))
-						csi->logic=LOGIC_TRUE;
-				return(0);
-			case FIO_GET_POS:
-				lp1=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				lp2=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				if(lp1 && *lp1 && lp2)
-					*lp2=ftell((FILE *)*lp1);
-				return(0);
-			case FIO_SEEK:
-			case FIO_SEEK_VAR:
-				lp1=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				csi->logic=LOGIC_FALSE;
-				if(*(csi->ip-5)==FIO_SEEK) {
-					l=*(long *)csi->ip;
-					csi->ip+=4; }
-				else {
-					lp2=getintvar(csi,*(long *)csi->ip);
-					csi->ip+=4;
-					if(!lp2) {
-						csi->ip+=2;
-						return(0); }
-					l=*lp2; }
-				i=*(short *)csi->ip;
-				csi->ip+=2;
-				if(lp1 && *lp1)
-					if(fseek((FILE *)*lp1,l,i)!=-1)
-						csi->logic=LOGIC_TRUE;
-				return(0);
-			case FIO_LOCK:
-			case FIO_LOCK_VAR:
-				lp1=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				csi->logic=LOGIC_FALSE;
-				if(*(csi->ip-5)==FIO_LOCK) {
-					l=*(long *)csi->ip;
-					csi->ip+=4; }
-				else {
-					lp2=getintvar(csi,*(long *)csi->ip);
-					csi->ip+=4;
-					if(!lp2)
-						return(0);
-					l=*lp2; }
-				if(lp1 && *lp1) {
-					fflush((FILE *)*lp1);
-					lseek(fileno((FILE *)*lp1),ftell((FILE *)*lp1),SEEK_SET);
-					csi->logic=locking(fileno((FILE *)*lp1),LK_LOCK,l); }
-				return(0);
-			case FIO_UNLOCK:
-			case FIO_UNLOCK_VAR:
-				lp1=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				csi->logic=LOGIC_FALSE;
-				if(*(csi->ip-5)==FIO_UNLOCK) {
-					l=*(long *)csi->ip;
-					csi->ip+=4; }
-				else {
-					lp2=getintvar(csi,*(long *)csi->ip);
-					csi->ip+=4;
-					if(!lp2)
-						return(0);
-					l=*lp2; }
-				if(lp1 && *lp1) {
-					fflush((FILE *)*lp1);
-					lseek(fileno((FILE *)*lp1),ftell((FILE *)*lp1),SEEK_SET);
-					csi->logic=locking(fileno((FILE *)*lp1),LK_UNLCK,l); }
-				return(0);
-			case FIO_SET_LENGTH:
-			case FIO_SET_LENGTH_VAR:
-				lp1=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				csi->logic=LOGIC_FALSE;
-				if(*(csi->ip-5)==FIO_SET_LENGTH) {
-					l=*(long *)csi->ip;
-					csi->ip+=4; }
-				else {
-					lp2=getintvar(csi,*(long *)csi->ip);
-					csi->ip+=4;
-					if(!lp2)
-						return(0);
-					l=*lp2; }
-				if(lp1 && *lp1)
-					csi->logic=chsize(fileno((FILE *)*lp1),l);
-				return(0);
-			case FIO_PRINTF:
-				lp1=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				strcpy(str,csi->ip);
-				while(*(csi->ip++));	/* Find NULL */
-				j=*(csi->ip++); 		/* total args */
-				for(i=0;i<j;i++) {
-					vp=getstrvar(csi,*(long *)csi->ip);
-					if(!vp) {
-						lp2=getintvar(csi,*(long *)csi->ip);
-						if(!lp2)
-							arglist[i]=0;
-						else
-							arglist[i]=(void *)*lp2; }
-					else
-						arglist[i]=*(char **)vp;
-					csi->ip+=4; }
-				vsprintf(tmp,str,arglist);
-				if(lp1 && *lp1) {
-					cmdstr(tmp,path,csi->str,str);
-					fwrite(str,1,strlen(str),(FILE *)*lp1); }
-				return(0);
-			case FIO_SET_ETX:
-				csi->etx=*(csi->ip++);
-				return(0);
-			case REMOVE_FILE:
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				if(pp && *pp && remove(*pp)==0)
-					csi->logic=LOGIC_TRUE;
-				else
-					csi->logic=LOGIC_FALSE;
-				return(0);
-			case RENAME_FILE:
-			case COPY_FILE:
-			case MOVE_FILE:
-				(char **)pp1=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4; /* Skip variable name */
-				(char **)pp2=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				if(pp1 && *pp1 && pp2 && *pp2)
-					switch(*(csi->ip-9)) {
-						case RENAME_FILE:
-							csi->logic=rename(*pp1,*pp2);
-							break;
-						case COPY_FILE:
-							csi->logic=mv(*pp1,*pp2,1);
-							break;
-						case MOVE_FILE:
-							csi->logic=mv(*pp1,*pp2,0);
-							break; }
-				else
-					csi->logic=LOGIC_FALSE;
-				return(0);
-			case GET_FILE_ATTRIB:
-			case SET_FILE_ATTRIB:
-				lp=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				if(pp && *pp && lp) {
-					if(*(csi->ip-9)==GET_FILE_ATTRIB)
-						*lp=_chmod(*pp,0,0);
-					else
-						*lp=_chmod(*pp,1,(int)*lp); }
-				return(0);
-			case MAKE_DIR:
-			case REMOVE_DIR:
-			case CHANGE_DIR:
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				if(pp && *pp)
-					switch(*(csi->ip-5)) {
-						case MAKE_DIR:
-							csi->logic=mkdir(*pp);
-							break;
-						case REMOVE_DIR:
-							csi->logic=rmdir(*pp);
-							break;
-						case CHANGE_DIR:
-							csi->logic=chdir(*pp);
-							break; }
-				else
-					csi->logic=LOGIC_FALSE;
-				return(0);
-			case OPEN_DIR:
-				lp=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				csi->logic=LOGIC_FALSE;
-				if(pp && *pp && lp) {
-					*lp=(long)opendir((char *)*pp);
-					if(*lp)
-						csi->logic=LOGIC_TRUE; }
-				return(0);
-			case READ_DIR:
-				lp=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				(char **)pp=getstrvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				csi->logic=LOGIC_FALSE;
-				if(pp && lp) {
-					de=readdir((DIR *)(*lp));
-					if(de!=NULL) {
-						csi->logic=LOGIC_TRUE;
-						*pp=copystrvar(csi,*pp,de->d_name); } }
-				return(0);
-			case REWIND_DIR:
-				lp=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				if(lp) {
-					rewinddir((DIR *)(*lp));
-					csi->logic=LOGIC_TRUE; }
-				else
-					csi->logic=LOGIC_FALSE;
-				return(0);
-			case CLOSE_DIR:
-				lp=getintvar(csi,*(long *)csi->ip);
-				csi->ip+=4;
-				if(lp && closedir((DIR *)(*lp))==0)
-					csi->logic=LOGIC_TRUE;
-				else
-					csi->logic=LOGIC_FALSE;
-				return(0);
-			default:
-				errormsg(WHERE,ERR_CHK,"fio sub-instruction",*(csi->ip-1));
-				return(0); }
-
-
-	case CS_SWITCH:
-		lp=getintvar(csi,*(long *)csi->ip);
-		csi->ip+=4;
-		if(!lp) {
-			skipto(csi,CS_END_SWITCH);
-			csi->ip++; }
-		else {
-			csi->misc|=CS_IN_SWITCH;
-			csi->switch_val=*lp; }
-		return(0);
-	case CS_CASE:
-		l=*(long *)csi->ip;
-		csi->ip+=4;
-		if(csi->misc&CS_IN_SWITCH && csi->switch_val!=l)
-			skipto(csi,CS_NEXTCASE);
-		else
-			csi->misc&=~CS_IN_SWITCH;
-		return(0);
-	case CS_COMPARE_ARS:
-		i=*(csi->ip++);  /* Length of ARS stored as byte before ARS */
-		csi->logic=!chk_ar(csi->ip,useron);
-		csi->ip+=i;
-		return(0);
-	case CS_TOGGLE_USER_MISC:
-		useron.misc^=*(long *)csi->ip;
-		putuserrec(useron.number,U_MISC,8,ultoa(useron.misc,tmp,16));
-		csi->ip+=4;
-		return(0);
-	case CS_COMPARE_USER_MISC:
-		if((useron.misc&*(long *)csi->ip)==*(long *)csi->ip)
-			csi->logic=LOGIC_TRUE;
-		else
-			csi->logic=LOGIC_FALSE;
-		csi->ip+=4;
-		return(0);
-	case CS_TOGGLE_USER_CHAT:
-		useron.chat^=*(long *)csi->ip;
-		putuserrec(useron.number,U_CHAT,8,ultoa(useron.chat,tmp,16));
-		csi->ip+=4;
-		return(0);
-	case CS_COMPARE_USER_CHAT:
-		if((useron.chat&*(long *)csi->ip)==*(long *)csi->ip)
-			csi->logic=LOGIC_TRUE;
-		else
-			csi->logic=LOGIC_FALSE;
-		csi->ip+=4;
-		return(0);
-	case CS_TOGGLE_USER_QWK:
-		useron.qwk^=*(long *)csi->ip;
-		putuserrec(useron.number,U_QWK,8,ultoa(useron.qwk,tmp,16));
-		csi->ip+=4;
-		return(0);
-	case CS_COMPARE_USER_QWK:
-		if((useron.qwk&*(long *)csi->ip)==*(long *)csi->ip)
-			csi->logic=LOGIC_TRUE;
-		else
-			csi->logic=LOGIC_FALSE;
-		csi->ip+=4;
-		return(0);
-	case CS_REPLACE_TEXT:
-		i=*(ushort *)csi->ip;
-		csi->ip+=2;
-		i--;
-		if(i>=TOTAL_TEXT) {
-			errormsg(WHERE,ERR_CHK,"replace text #",i);
-			while(*(csi->ip++));	 /* Find NULL */
-			return(0); }
-		if(text[i]!=text_sav[i] && text[i]!=nulstr)
-			FREE(text[i]);
-		j=strlen(cmdstr(csi->ip,path,csi->str,buf));
-		if(!j)
-			text[i]=nulstr;
-		else
-			text[i]=MALLOC(j+1);
-		if(!text[i]) {
-			errormsg(WHERE,ERR_ALLOC,"replacement text",j);
-			while(*(csi->ip++));	 /* Find NULL */
-			text[i]=text_sav[i];
-			return(0); }
-		if(j)
-			strcpy(text[i],buf);
-		while(*(csi->ip++));	 /* Find NULL */
-		return(0);
-	case CS_USE_INT_VAR:	// Self-modifying code!
-		(char **)pp=getstrvar(csi,*(long *)csi->ip);
-		if(pp && *pp)
-			l=strtol(*pp,0,0);
-		else {
-			lp=getintvar(csi,*(long *)csi->ip);
-			if(lp)
-				l=*lp;
-			else
-				l=0; }
-		csi->ip+=4; 			// Variable
-		i=*(csi->ip++); 		// Offset
-		if(i<1 || csi->ip+1+i>=csi->cs+csi->length) {
-			errormsg(WHERE,ERR_CHK,"offset",i);
-			csi->ip++;
-			return(0); }
-		switch(*(csi->ip++)) {	// Length
-			case sizeof(char):
-				*(csi->ip+i)=(char)l;
-				break;
-			case sizeof(short):
-				*((short *)(csi->ip+i))=(short)l;
-				break;
-			case sizeof(long):
-				*((long *)(csi->ip+i))=l;
-                break;
-			default:
-				errormsg(WHERE,ERR_CHK,"length",*(csi->ip-1));
-				break; }
-		return(0);
-	default:
-		errormsg(WHERE,ERR_CHK,"shell instruction",*(csi->ip-1));
-		return(0); }
-}
diff --git a/src/sbbs2/execmsg.c b/src/sbbs2/execmsg.c
deleted file mode 100644
index 510a24ce73..0000000000
--- a/src/sbbs2/execmsg.c
+++ /dev/null
@@ -1,301 +0,0 @@
-#line 1 "EXECMSG.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-#include "cmdshell.h"
-
-int execmsg(csi_t *csi)
-{
-	uchar	str[256],tmp2[128],*path,ch,*p;
-	int 	s,file,x,y;
-	long	i,j,k;		// Changes from ints - 03/25/96
-	long	l;
-	stats_t stats;
-	node_t	node;
-	file_t	f;
-	time_t	t;
-    csi_t   bin;
-
-
-switch(*(csi->ip++)) {
-
-	case CS_MSG_SELECT_AREA:
-		csi->logic=LOGIC_FALSE;
-		if(!usrgrps) return(0);
-		while(online) {
-			j=0;
-			if(usrgrps>1) {
-				sprintf(str,"%sMENU\\GRPS.*",text_dir);
-				if(fexist(str))
-					menu("GRPS");
-				else {
-					bputs(text[CfgGrpLstHdr]);
-					for(i=0;i<usrgrps && !msgabort();i++) {
-						if(i==curgrp)
-							outchar('*');
-						else outchar(SP);
-						if(i<9) outchar(SP);
-						if(i<99) outchar(SP);
-						bprintf(text[CfgGrpLstFmt]
-							,i+1,grp[usrgrp[i]]->lname); } }
-				sprintf(str,text[JoinWhichGrp],curgrp+1);
-				mnemonics(str);
-				j=getnum(usrgrps);
-				if((int)j==-1)
-					return(0);
-				if(!j)
-					j=curgrp;
-				else
-					j--; }
-			sprintf(str,"%sMENU\\SUBS%u.*",text_dir,usrgrp[j]+1);
-			if(fexist(str)) {
-				sprintf(str,"SUBS%u",usrgrp[j]+1);
-				menu(str); }
-			else {
-				CLS;
-				bprintf(text[SubLstHdr],grp[usrgrp[j]]->lname);
-				for(i=0;i<usrsubs[j] && !msgabort();i++) {
-					if(i==cursub[j]) outchar('*');
-					else outchar(SP);
-					sprintf(str,text[SubLstFmt],i+1
-						,sub[usrsub[j][i]]->lname,nulstr
-						,getposts(usrsub[j][i]));
-					if(i<9) outchar(SP);
-					if(i<99) outchar(SP);
-					bputs(str); } }
-			sprintf(str,text[JoinWhichSub],cursub[j]+1);
-			mnemonics(str);
-			i=getnum(usrsubs[j]);
-			if((int)i==-1) {
-				if(usrgrps==1)
-					return(0);
-				continue; }
-			if(!i)
-				i=cursub[j];
-			else
-				i--;
-			curgrp=j;
-			cursub[curgrp]=i;
-			csi->logic=LOGIC_TRUE;
-			return(0); }
-		return(0);
-
-	case CS_MSG_GET_SUB_NUM:
-
-		if(useron.misc&COLDKEYS) {
-			i=atoi(csi->str);
-			if(i && usrgrps && i<=usrsubs[curgrp])
-				cursub[curgrp]=i-1;
-			return(0); }
-
-		ch=getkey(K_UPPER);
-		outchar(ch);
-		if(usrgrps && (ch&0xf)*10<=usrsubs[curgrp] && (ch&0xf)) {
-			i=(ch&0xf)*10;
-			ch=getkey(K_UPPER);
-			if(!isdigit(ch) && ch!=CR) {
-				ungetkey(ch);
-				cursub[curgrp]=(i/10)-1;
-				return(0); }
-			outchar(ch);
-			if(ch==CR) {
-				cursub[curgrp]=(i/10)-1;
-				return(0); }
-			logch(ch,0);
-			i+=ch&0xf;
-			if(i*10<=usrsubs[curgrp]) { 	/* 100+ subs */
-				i*=10;
-				ch=getkey(K_UPPER);
-				if(!isdigit(ch) && ch!=CR) {
-					ungetkey(ch);
-					cursub[curgrp]=(i/10)-1;
-					return(0); }
-				outchar(ch);
-				if(ch==CR) {
-					cursub[curgrp]=(i/10)-1;
-					return(0); }
-				logch(ch,0);
-				i+=ch&0xf; }
-			if(i<=usrsubs[curgrp])
-				cursub[curgrp]=i-1;
-			return(0); }
-		if((ch&0xf)<=usrsubs[curgrp] && (ch&0xf) && usrgrps)
-			cursub[curgrp]=(ch&0xf)-1;
-		return(0);
-
-	case CS_MSG_GET_GRP_NUM:
-
-		if(useron.misc&COLDKEYS) {
-			i=atoi(csi->str);
-			if(i && i<=usrgrps)
-				curgrp=i-1;
-			return(0); }
-
-		ch=getkey(K_UPPER);
-		outchar(ch);
-		if((ch&0xf)*10<=usrgrps && (ch&0xf)) {
-			i=(ch&0xf)*10;
-			ch=getkey(K_UPPER);
-			if(!isdigit(ch) && ch!=CR) {
-				ungetkey(ch);
-				curgrp=(i/10)-1;
-				return(0); }
-			outchar(ch);
-			if(ch==CR) {
-				curgrp=(i/10)-1;
-				return(0); }
-			logch(ch,0);
-			i+=ch&0xf;
-			if(i<=usrgrps)
-				curgrp=i-1;
-			return(0); }
-		if((ch&0xf)<=usrgrps && (ch&0xf))
-			curgrp=(ch&0xf)-1;
-		return(0);
-
-	case CS_MSG_SET_GROUP:
-		csi->logic=LOGIC_TRUE;
-		for(i=0;i<usrgrps;i++)
-			if(!stricmp(grp[usrgrp[i]]->sname,csi->str))
-				break;
-		if(i<usrgrps)
-			curgrp=i;
-		else
-			csi->logic=LOGIC_FALSE;
-		return(0);
-
-	case CS_MSG_SHOW_GROUPS:
-		if(!usrgrps) return(0);
-		sprintf(str,"%sMENU\\GRPS.*",text_dir);
-		if(fexist(str)) {
-			menu("GRPS");
-			return(0); }
-		bputs(text[GrpLstHdr]);
-		for(i=0;i<usrgrps && !msgabort();i++) {
-			if(i==curgrp)
-				outchar('*');
-			else outchar(SP);
-			if(i<9) outchar(SP);
-			bprintf(text[GrpLstFmt],i+1
-				,grp[usrgrp[i]]->lname,nulstr,usrsubs[i]); }
-		return(0);
-
-	case CS_MSG_SHOW_SUBBOARDS:
-		if(!usrgrps) return(0);
-		sprintf(str,"%sMENU\\SUBS%u.*",text_dir,usrgrp[curgrp]+1);
-		if(fexist(str)) {
-			sprintf(str,"SUBS%u",usrgrp[curgrp]+1);
-			menu(str);
-			return(0); }
-		CRLF;
-		bprintf(text[SubLstHdr],grp[usrgrp[curgrp]]->lname);
-		for(i=0;i<usrsubs[curgrp] && !msgabort();i++) {
-			if(i==cursub[curgrp]) outchar('*');
-			else outchar(SP);
-			sprintf(str,text[SubLstFmt],i+1
-				,sub[usrsub[curgrp][i]]->lname,nulstr
-				,getposts(usrsub[curgrp][i]));
-			if(i<9) outchar(SP);
-			if(i<99) outchar(SP);
-			bputs(str); }
-		return(0);
-
-	case CS_MSG_GROUP_UP:
-		curgrp++;
-		if(curgrp>=usrgrps)
-			curgrp=0;
-		return(0);
-	case CS_MSG_GROUP_DOWN:
-		if(!curgrp)
-			curgrp=usrgrps-1;
-		else curgrp--;
-		return(0);
-	case CS_MSG_SUBBOARD_UP:
-		if(!usrgrps) return(0);
-		cursub[curgrp]++;
-		if(cursub[curgrp]>=usrsubs[curgrp])
-			cursub[curgrp]=0;
-		return(0);
-	case CS_MSG_SUBBOARD_DOWN:
-		if(!usrgrps) return(0);
-		if(!cursub[curgrp])
-			cursub[curgrp]=usrsubs[curgrp]-1;
-		else cursub[curgrp]--;
-		return(0);
-	case CS_MSG_SET_AREA:
-		csi->logic=LOGIC_TRUE;
-		for(i=0;i<usrgrps;i++)
-			for(j=0;j<usrsubs[i];j++)
-				if(!stricmp(csi->str,sub[usrsub[i][j]]->code)) {
-					curgrp=i;
-					cursub[i]=j;
-					return(0); }
-		csi->logic=LOGIC_FALSE;
-		return(0);
-	case CS_MSG_READ:
-		if(!usrgrps) return(0);
-		csi->logic=scanposts(usrsub[curgrp][cursub[curgrp]],0,nulstr);
-		return(0);
-	case CS_MSG_POST:
-		if(!usrgrps) return(0);
-		csi->logic=LOGIC_FALSE;
-		if(!chk_ar(sub[usrsub[curgrp][cursub[curgrp]]]->post_ar,useron)) {
-			bputs(text[CantPostOnSub]);
-			return(0); }
-		csi->logic=!postmsg(usrsub[curgrp][cursub[curgrp]],0,0);
-		return(0);
-	case CS_MSG_QWK:
-		qwk_sec();
-		return(0);
-	case CS_MSG_PTRS_CFG:
-		new_scan_ptr_cfg();
-		return(0);
-	case CS_MSG_PTRS_REINIT:
-		for(i=0;i<total_subs;i++) {
-			sub[i]->ptr=sub_ptr[i];
-			sub[i]->last=sub_last[i]; }
-		bputs(text[MsgPtrsInitialized]);
-		return(0);
-	case CS_MSG_NEW_SCAN_CFG:
-		new_scan_cfg(SUB_NSCAN);
-		return(0);
-	case CS_MSG_NEW_SCAN:
-		scansubs(SCAN_NEW);
-		return(0);
-	case CS_MSG_NEW_SCAN_SUB:
-		csi->logic=scanposts(usrsub[curgrp][cursub[curgrp]],SCAN_NEW,nulstr);
-		return(0);
-	case CS_MSG_NEW_SCAN_ALL:
-		scanallsubs(SCAN_NEW);
-		return(0);
-	case CS_MSG_CONT_SCAN:
-		scansubs(SCAN_NEW|SCAN_CONST);
-		return(0);
-	case CS_MSG_CONT_SCAN_ALL:
-		scanallsubs(SCAN_NEW|SCAN_CONST);
-		return(0);
-	case CS_MSG_BROWSE_SCAN:
-		scansubs(SCAN_NEW|SCAN_BACK);
-		return(0);
-	case CS_MSG_BROWSE_SCAN_ALL:
-		scanallsubs(SCAN_BACK|SCAN_NEW);
-		return(0);
-	case CS_MSG_FIND_TEXT:
-		scansubs(SCAN_FIND);
-		return(0);
-	case CS_MSG_FIND_TEXT_ALL:
-		scanallsubs(SCAN_FIND);
-		return(0);
-	case CS_MSG_YOUR_SCAN_CFG:
-		new_scan_cfg(SUB_SSCAN);
-		return(0);
-	case CS_MSG_YOUR_SCAN:
-		scansubs(SCAN_TOYOU);
-		return(0);
-	case CS_MSG_YOUR_SCAN_ALL:
-		scanallsubs(SCAN_TOYOU);
-		return(0); }
-errormsg(WHERE,ERR_CHK,"shell function",*(csi->ip-1));
-return(0);
-}
diff --git a/src/sbbs2/execsbbs/execsbbs.c b/src/sbbs2/execsbbs/execsbbs.c
deleted file mode 100644
index 7c491cb17b..0000000000
--- a/src/sbbs2/execsbbs/execsbbs.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/* execbbs.c */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include <dos.h>
-#include <dir.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <process.h>
-
-extern unsigned _heaplen=2048;
-
-/* usage: execsbbs start_dir "program parms" sbbspath [r] */
-
-int main(int argc, char *argv[])
-{
-	char path[129],*comspec,*p,*arg[30],c;
-	int disk;
-
-if(argc<4) {
-	printf("This program is for the internal use of Synchronet.\r\n");
-/***	Debug stuff
-	printf("argc=%d\r\n",argc);
-	for(c=0;c<argc;c++)
-		printf("argv[%d]='%s'\n",c,argv[c]);
-***/
-	return(0); }
-disk=getdisk();
-getcwd(path,128);
-comspec=getenv("COMSPEC");
-
-/***					/* Removed */
-strcpy(str,comspec);	/* save comspec */
-strcpy(comspec,"");     /* destroy comspec */
-***/
-
-if(argv[1][1]==':')                /* drive letter specified */
-	setdisk(toupper(argv[1][0])-'A');
-chdir(argv[1]);
-
-p=strchr(argv[2],' ');
-if(p)
-	p++;
-if(spawnlpe(P_WAIT,comspec,comspec,"/c",argv[2],NULL,environ))
-	printf("EXECSBBS: Error %d spawning %s\r\n",errno,argv[2]);
-/***
-strcpy(comspec,str);	/* restore comspec */
-***/
-setdisk(disk);
-if(chdir(path))
-	printf("\7\r\nEXECBBS: Error changing directory to %s\r\n",path);
-for(c=0;c<30;c++)
-	arg[c]=argv[c+3];
-if(execve(arg[0],arg,environ))
-	printf("EXECSBBS: Error %d executing %s\r\n",errno,arg[0]);
-return(1);
-}
diff --git a/src/sbbs2/execsbbs/make.bat b/src/sbbs2/execsbbs/make.bat
deleted file mode 100755
index a972501c13..0000000000
--- a/src/sbbs2/execsbbs/make.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-bcc -w-pro -C -mt -ndos execsbbs.c
-if errorlevel 1 goto end
-exe2bin dos\execsbbs.exe dos\execsbbs.com
-:end
diff --git a/src/sbbs2/execsbbs/make.cmd b/src/sbbs2/execsbbs/make.cmd
deleted file mode 100755
index 6791ea0b84..0000000000
--- a/src/sbbs2/execsbbs/make.cmd
+++ /dev/null
@@ -1,2 +0,0 @@
-@echo off
-bcc -w-pro -C -nos2 execsbbs.c
diff --git a/src/sbbs2/fido.c b/src/sbbs2/fido.c
deleted file mode 100644
index eddef53a58..0000000000
--- a/src/sbbs2/fido.c
+++ /dev/null
@@ -1,818 +0,0 @@
-#line 1 "FIDO.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/*********************************************/
-/* Functions that pertain solely to FidoNet  */
-/*********************************************/
-
-#include "sbbs.h"
-
-extern char *mon[];
-void inetmail(char *into, char *subj, char mode);
-void qnetmail(char *into, char *subj, char mode);
-int qwk_route(char *inaddr, char *fulladdr);
-
-void pt_zone_kludge(fmsghdr_t hdr,int fido)
-{
-	char str[256];
-
-sprintf(str,"\1INTL %u:%u/%u %u:%u/%u\r"
-	,hdr.destzone,hdr.destnet,hdr.destnode
-	,hdr.origzone,hdr.orignet,hdr.orignode);
-write(fido,str,strlen(str));
-
-if(hdr.destpoint) {
-    sprintf(str,"\1TOPT %u\r"
-		,hdr.destpoint);
-    write(fido,str,strlen(str)); }
-
-if(hdr.origpoint) {
-    sprintf(str,"\1FMPT %u\r"
-		,hdr.origpoint);
-    write(fido,str,strlen(str)); }
-}
-
-int lookup_netuser(char *into)
-{
-	char to[128],name[26],str[256],q[128];
-	int i;
-	FILE *stream;
-
-if(strchr(into,'@'))
-	return(0);
-strcpy(to,into);
-strupr(to);
-sprintf(str,"%sQNET\\USERS.DAT",data_dir);
-if((stream=fnopen(&i,str,O_RDONLY))==NULL)
-	return(0);
-while(!feof(stream)) {
-	if(!fgets(str,250,stream))
-		break;
-	str[25]=0;
-	truncsp(str);
-	strcpy(name,str);
-	strupr(name);
-	str[35]=0;
-	truncsp(str+27);
-	sprintf(q,"Do you mean %s @%s",str,str+27);
-	if(strstr(name,to) && yesno(q)) {
-		fclose(stream);
-		sprintf(into,"%s@%s",str,str+27);
-		return(0); }
-	if(sys_status&SS_ABORT)
-		break; }
-fclose(stream);
-return(1);
-}
-
-/****************************************************************************/
-/* Send FidoNet NetMail from BBS											*/
-/****************************************************************************/
-void netmail(char *into, char *title, char mode)
-{
-	char str[256],subj[128],to[256],fname[128],*buf,*p,ch;
-	int file,fido,x,cc_found,cc_sent;
-	uint i;
-	long length,l;
-	faddr_t addr;
-	fmsghdr_t hdr;
-
-sprintf(subj,"%.127s",title);
-
-
-strcpy(to,into);
-
-lookup_netuser(to);
-
-p=strrchr(to,'@');      /* Find '@' in name@addr */
-if(p && !isdigit(*(p+1)) && !strchr(p,'.') && !strchr(p,':')) {
-	mode&=~WM_FILE;
-	qnetmail(to,title,mode|WM_NETMAIL);
-	return; }
-if(p==NULL || !strchr(p+1,'/') || !total_faddrs) {
-	if(!p && dflt_faddr.zone)
-		addr=dflt_faddr;
-	else if(inetmail_misc&NMAIL_ALLOW) {
-		if(mode&WM_FILE && !SYSOP && !(inetmail_misc&NMAIL_FILE))
-			mode&=~WM_FILE;
-		inetmail(into,title,mode|WM_NETMAIL);
-		return; }
-	else if(dflt_faddr.zone)
-		addr=dflt_faddr;
-	else {
-		bprintf("\1n\r\nInvalid NetMail address.\r\n");
-		return; } }
-else {
-	addr=atofaddr(p+1); 	/* Get fido address */
-	*p=0;					/* Chop off address */
-	}
-
-if(mode&WM_FILE && !SYSOP && !(netmail_misc&NMAIL_FILE))
-	mode&=~WM_FILE;
-
-if((!SYSOP && !(netmail_misc&NMAIL_ALLOW)) || useron.rest&FLAG('M')
-    || !total_faddrs) {
-    bputs(text[NoNetMailAllowed]);
-    return; }
-
-truncsp(to);				/* Truncate off space */
-
-memset(&hdr,0,sizeof(hdr));   /* Initialize header to null */
-strcpy(hdr.from,netmail_misc&NMAIL_ALIAS ? useron.alias : useron.name);
-sprintf(hdr.to,"%.35s",to);
-
-/* Look-up in nodelist? */
-
-if(netmail_cost && !(useron.exempt&FLAG('S'))) {
-	if(useron.cdt+useron.freecdt<netmail_cost) {
-		bputs(text[NotEnoughCredits]);
-		return; }
-	sprintf(str,text[NetMailCostContinueQ],netmail_cost);
-	if(noyes(str))
-		return; }
-
-
-now=time(NULL);
-unixtodos(now,&date,&curtime);
-sprintf(hdr.time,"%02u %3.3s %02u  %02u:%02u:%02u"
-	,date.da_day,mon[date.da_mon-1],TM_YEAR(date.da_year-1900)
-	,curtime.ti_hour,curtime.ti_min,curtime.ti_sec);
-
-hdr.destzone	=addr.zone;
-hdr.destnet 	=addr.net;
-hdr.destnode	=addr.node;
-hdr.destpoint	=addr.point;
-
-for(i=0;i<total_faddrs;i++)
-	if(addr.zone==faddr[i].zone && addr.net==faddr[i].net)
-        break;
-if(i==total_faddrs) {
-	for(i=0;i<total_faddrs;i++)
-		if(addr.zone==faddr[i].zone)
-			break; }
-if(i==total_faddrs)
-	i=0;
-hdr.origzone	=faddr[i].zone;
-hdr.orignet 	=faddr[i].net;
-hdr.orignode	=faddr[i].node;
-hdr.origpoint	=faddr[i].point;
-
-strcpy(str,faddrtoa(faddr[i]));
-bprintf(text[NetMailing],hdr.to,faddrtoa(addr),hdr.from,str);
-
-hdr.attr=(FIDO_LOCAL|FIDO_PRIVATE);
-
-if(netmail_misc&NMAIL_CRASH) hdr.attr|=FIDO_CRASH;
-if(netmail_misc&NMAIL_HOLD)  hdr.attr|=FIDO_HOLD;
-if(netmail_misc&NMAIL_KILL)  hdr.attr|=FIDO_KILLSENT;
-if(mode&WM_FILE) hdr.attr|=FIDO_FILE;
-
-sprintf(str,"%sNETMAIL.MSG",node_dir);
-remove(str);	/* Just incase it's already there */
-// mode&=~WM_FILE;
-if(!writemsg(str,nulstr,subj,WM_NETMAIL|mode,INVALID_SUB,into)) {
-	bputs(text[Aborted]);
-	return; }
-
-if(mode&WM_FILE) {
-	strcpy(fname,subj);
-	sprintf(str,"%sFILE\\%04u.OUT",data_dir,useron.number);
-	mkdir(str);
-	strcpy(tmp,data_dir);
-	if(tmp[0]=='.')    /* Relative path */
-		sprintf(tmp,"%s%s",node_dir,data_dir);
-	sprintf(str,"%sFILE\\%04u.OUT\\%s",tmp,useron.number,fname);
-	strcpy(subj,str);
-	if(fexist(str)) {
-		bputs(text[FileAlreadyThere]);
-		return; }
-	if(online==ON_LOCAL) {		/* Local upload */
-		bputs(text[EnterPath]);
-		if(!getstr(str,60,K_LINE|K_UPPER)) {
-			bputs(text[Aborted]);
-			return; }
-		backslash(str);
-		strcat(str,fname);
-		if(mv(str,subj,1))
-			return; }
-	else { /* Remote */
-		menu("ULPROT");
-		mnemonics(text[ProtocolOrQuit]);
-		strcpy(str,"Q");
-		for(x=0;x<total_prots;x++)
-			if(prot[x]->ulcmd[0] && chk_ar(prot[x]->ar,useron)) {
-				sprintf(tmp,"%c",prot[x]->mnemonic);
-				strcat(str,tmp); }
-		ch=getkeys(str,0);
-		if(ch=='Q' || sys_status&SS_ABORT) {
-			bputs(text[Aborted]);
-			return; }
-		for(x=0;x<total_prots;x++)
-			if(prot[x]->ulcmd[0] && prot[x]->mnemonic==ch
-				&& chk_ar(prot[x]->ar,useron))
-				break;
-		if(x<total_prots)	/* This should be always */
-			protocol(cmdstr(prot[x]->ulcmd,subj,nulstr,NULL),0); }
-	l=flength(subj);
-	if(l>0)
-		bprintf(text[FileNBytesReceived],fname,ultoac(l,tmp));
-	else {
-		bprintf(text[FileNotReceived],fname);
-        return; } }
-
-p=subj;
-if((SYSOP || useron.exempt&FLAG('F'))
-	&& !strncmpi(p,"CR:",3)) {     /* Crash over-ride by sysop */
-	p+=3;				/* skip CR: */
-	if(*p==SP) p++; 	/* skip extra space if it exists */
-	hdr.attr|=FIDO_CRASH; }
-
-if((SYSOP || useron.exempt&FLAG('F'))
-	&& !strncmpi(p,"FR:",3)) {     /* File request */
-	p+=3;				/* skip FR: */
-	if(*p==SP) p++;
-	hdr.attr|=FIDO_FREQ; }
-
-if((SYSOP || useron.exempt&FLAG('F'))
-	&& !strncmpi(p,"RR:",3)) {     /* Return receipt request */
-	p+=3;				/* skip RR: */
-	if(*p==SP) p++;
-	hdr.attr|=FIDO_RRREQ; }
-
-if((SYSOP || useron.exempt&FLAG('F'))
-	&& !strncmpi(p,"FA:",3)) {     /* File Attachment */
-	p+=3;				/* skip FA: */
-	if(*p==SP) p++;
-	hdr.attr|=FIDO_FILE; }
-
-sprintf(hdr.subj,"%.71s",p);
-
-sprintf(str,"%sNETMAIL.MSG",node_dir);
-if((file=nopen(str,O_RDONLY))==-1) {
-    close(fido);
-    errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-    return; }
-length=filelength(file);
-if((buf=(char *)MALLOC(length))==NULL) {
-    close(fido);
-    close(file);
-    errormsg(WHERE,ERR_ALLOC,str,length);
-    return; }
-read(file,buf,length);
-close(file);
-
-cc_sent=0;
-while(1) {
-	for(i=1;i;i++) {
-		sprintf(str,"%s%u.MSG",netmail_dir,i);
-		if(!fexist(str))
-			break; }
-	if(!i) {
-		bputs(text[TooManyEmailsToday]);
-		return; }
-	if((fido=nopen(str,O_WRONLY|O_CREAT|O_EXCL))==-1) {
-		errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_EXCL);
-		return; }
-	write(fido,&hdr,sizeof(hdr));
-
-	pt_zone_kludge(hdr,fido);
-
-	if(netmail_misc&NMAIL_DIRECT) {
-		sprintf(str,"\1FLAGS DIR\r\n");
-		write(fido,str,strlen(str)); }
-	if(mode&WM_FILE) {
-		sprintf(str,"\1FLAGS KFS\r\n");
-		write(fido,str,strlen(str)); }
-
-	if(cc_sent) {
-		sprintf(str,"* Originally to: %s\r\n\r\n",into);
-		write(fido,str,strlen(str)); }
-
-	l=0L;
-	while(l<length) {
-		if(buf[l]==1)	/* Ctrl-A, so skip it and the next char */
-			l++;
-		else if(buf[l]!=LF) {
-			if((uchar)buf[l]==0x8d)   /* r0dent i converted to normal i */
-				buf[l]='i';
-			write(fido,buf+l,1); }
-		l++; }
-	l=0;
-	write(fido,&l,1);	/* Null terminator */
-	close(fido);
-
-	if(!(useron.exempt&FLAG('S')))
-		subtract_cdt(netmail_cost);
-	if(mode&WM_FILE)
-		sprintf(str,"Sent NetMail file attachment to %s (%s)"
-			,hdr.to,faddrtoa(addr));
-	else
-		sprintf(str,"Sent NetMail to %s (%s)"
-			,hdr.to,faddrtoa(addr));
-	logline("EN",str);
-
-	cc_found=0;
-	for(l=0;l<length && cc_found<=cc_sent;l++)
-		if(l+3<length && !strnicmp(buf+l,"CC:",3)) {
-			cc_found++;
-			l+=2; }
-		else {
-			while(l<length && *(buf+l)!=LF)
-				l++; }
-	if(!cc_found)
-		break;
-	while(l<length && *(buf+l)==SP) l++;
-	for(i=0;l<length && *(buf+l)!=LF && i<128;i++,l++)
-		str[i]=buf[l];
-	if(!i)
-		break;
-	str[i]=0;
-	p=strrchr(str,'@');
-	if(p) {
-		addr=atofaddr(p+1);
-		*p=0;
-		sprintf(hdr.to,"%.35s",str); }
-	else {
-		atofaddr(str);
-		strcpy(hdr.to,"Sysop"); }
-	hdr.destzone	=addr.zone;
-	hdr.destnet 	=addr.net;
-	hdr.destnode	=addr.node;
-	hdr.destpoint	=addr.point;
-	cc_sent++; }
-
-if(netmail_sem[0])		/* update semaphore file */
-	if((file=nopen(netmail_sem,O_WRONLY|O_CREAT|O_TRUNC))!=-1)
-		close(file);
-
-FREE(buf);
-}
-
-/****************************************************************************/
-/* Send FidoNet NetMail from QWK REP Packet 								*/
-/****************************************************************************/
-void qwktonetmail(FILE *rep, char *block, char *into, uchar fromhub)
-{
-	char	HUGE16 *qwkbuf,to[129],name[129],sender[129],senderaddr[129]
-		   ,str[256],*p,*cp,*addr,fulladdr[129],ch,buf[SDT_BLOCK_LEN];
-	int 	i,fido,inet=0,qnet=0,x;
-	ushort	net,xlat;
-	long	l,offset,length,m,n;
-	faddr_t fidoaddr;
-    fmsghdr_t hdr;
-	smbmsg_t msg;
-
-if(useron.rest&FLAG('M')) {
-    bputs(text[NoNetMailAllowed]);
-	return; }
-
-sprintf(str,"%.6s",block+116);
-n=atol(str);	  /* i = number of 128 byte records */
-
-if(n<2L || n>999999L) {
-	errormsg(WHERE,ERR_CHK,"QWK blocks",n);
-	return; }
-if((qwkbuf=MALLOC(n*128L))==NULL) {
-	errormsg(WHERE,ERR_ALLOC,nulstr,n*128L);
-	return; }
-memcpy((char *)qwkbuf,block,128);
-fread(qwkbuf+128,n-1,128,rep);
-
-if(into==NULL)
-	sprintf(to,"%-128.128s",(char *)qwkbuf+128);  /* To user on first line */
-else
-	strcpy(to,into);
-
-p=strchr(to,0xe3);		/* chop off at first CR */
-if(p) *p=0;
-
-strcpy(name,to);
-p=strchr(name,'@');
-if(p) *p=0;
-truncsp(name);
-
-
-p=strrchr(to,'@');       /* Find '@' in name@addr */
-if(p && !isdigit(*(p+1)) && !strchr(p,'.') && !strchr(p,':')) { /* QWKnet */
-	qnet=1;
-	*p=0; }
-else if(p==NULL || !isdigit(*(p+1)) || !total_faddrs) {
-	if(p==NULL && dflt_faddr.zone)
-		fidoaddr=dflt_faddr;
-	else if(inetmail_misc&NMAIL_ALLOW) {	/* Internet */
-		inet=1;
-/*
-		if(p)
-			*p=0;				/* Chop off address */
-*/
-		}
-	else if(dflt_faddr.zone)
-		fidoaddr=dflt_faddr;
-	else {
-		bprintf("\1n\r\nInvalid NetMail address.\r\n");
-		FREE(qwkbuf);
-		return; } }
-else {
-	fidoaddr=atofaddr(p+1); 	/* Get fido address */
-	*p=0;					/* Chop off address */
-	}
-
-
-if(!inet && !qnet &&		/* FidoNet */
-	((!SYSOP && !(netmail_misc&NMAIL_ALLOW)) || !total_faddrs)) {
-    bputs(text[NoNetMailAllowed]);
-	FREE(qwkbuf);
-    return; }
-
-truncsp(to);			/* Truncate off space */
-
-if(!stricmp(to,"SBBS") && !SYSOP && qnet) {
-	FREE(qwkbuf);
-	return; }
-
-l=128;					/* Start of message text */
-
-if(qnet || inet) {
-
-	if(into==NULL) {	  /* If name@addr on first line, skip first line */
-		while(l<(n*128L) && (uchar)qwkbuf[l]!=0xe3) l++;
-        l++; }
-
-	memset(&msg,0,sizeof(smbmsg_t));
-    memcpy(msg.hdr.id,"SHD\x1a",4);
-    msg.hdr.version=smb_ver();
-    msg.hdr.when_imported.time=time(NULL);
-    msg.hdr.when_imported.zone=sys_timezone;
-
-	if(fromhub || useron.rest&FLAG('Q')) {
-		net=NET_QWK;
-		smb_hfield(&msg,SENDERNETTYPE,sizeof(net),&net);
-		if(!strncmp((uchar *)qwkbuf+l,"@VIA:",5)) {
-			sprintf(str,"%.128s",qwkbuf+l+5);
-			cp=strchr(str,0xe3);
-			if(cp) *cp=0;
-			l+=strlen(str)+1;
-			cp=str;
-			while(*cp && *cp<=SP) cp++;
-			sprintf(senderaddr,"%s/%s"
-				,fromhub ? qhub[fromhub-1]->id : useron.alias,cp);
-			strupr(senderaddr);
-			smb_hfield(&msg,SENDERNETADDR,strlen(senderaddr),senderaddr); }
-		else {
-			if(fromhub)
-				strcpy(senderaddr,qhub[fromhub-1]->id);
-			else
-				strcpy(senderaddr,useron.alias);
-			strupr(senderaddr);
-			smb_hfield(&msg,SENDERNETADDR,strlen(senderaddr),senderaddr); }
-		sprintf(sender,"%.25s",block+46); }    /* From name */
-	else {	/* Not Networked */
-		msg.hdr.when_written.zone=sys_timezone;
-		sprintf(str,"%u",useron.number);
-        smb_hfield(&msg,SENDEREXT,strlen(str),str);
-		strcpy(sender,(qnet || inetmail_misc&NMAIL_ALIAS)
-			? useron.alias : useron.name);
-		}
-	truncsp(sender);
-	smb_hfield(&msg,SENDER,strlen(sender),sender);
-    if(fromhub)
-        msg.idx.from=0;
-	else
-		msg.idx.from=useron.number;
-	if(!strncmp((uchar *)qwkbuf+l,"@TZ:",4)) {
-		sprintf(str,"%.128s",qwkbuf+l);
-		cp=strchr(str,0xe3);
-		if(cp) *cp=0;
-		l+=strlen(str)+1;
-		cp=str+4;
-		while(*cp && *cp<=SP) cp++;
-		msg.hdr.when_written.zone=(short)ahtoul(cp); }
-	else
-		msg.hdr.when_written.zone=sys_timezone;
-
-    date.da_mon=((qwkbuf[8]&0xf)*10)+(qwkbuf[9]&0xf);
-    date.da_day=((qwkbuf[11]&0xf)*10)+(qwkbuf[12]&0xf);
-    date.da_year=((qwkbuf[14]&0xf)*10)+(qwkbuf[15]&0xf);
-	if(date.da_year<Y2K_2DIGIT_WINDOW)
-		date.da_year+=100;
-	date.da_year+=1900;
-    curtime.ti_hour=((qwkbuf[16]&0xf)*10)+(qwkbuf[17]&0xf);
-    curtime.ti_min=((qwkbuf[19]&0xf)*10)+(qwkbuf[20]&0xf);  /* From QWK time */
-    curtime.ti_sec=0;
-
-    msg.hdr.when_written.time=dostounix(&date,&curtime);
-
-	sprintf(str,"%.25s",block+71);              /* Title */
-	smb_hfield(&msg,SUBJECT,strlen(str),str);
-    strlwr(str);
-	msg.idx.subj=crc16(str); }
-
-if(qnet) {
-
-	p++;
-	addr=p;
-	msg.idx.to=qwk_route(addr,fulladdr);
-	if(!fulladdr[0]) {		/* Invalid address, so BOUNCE it */
-	/**
-		errormsg(WHERE,ERR_CHK,addr,0);
-		FREE(qwkbuf);
-		smb_freemsgmem(msg);
-		return;
-	**/
-		smb_hfield(&msg,SENDER,strlen(sys_id),sys_id);
-		msg.idx.from=0;
-		msg.idx.to=useron.number;
-		strcpy(to,sender);
-		strcpy(fulladdr,senderaddr);
-		sprintf(str,"BADADDR: %s",addr);
-		smb_hfield(&msg,SUBJECT,strlen(str),str);
-		strlwr(str);
-		msg.idx.subj=crc16(str);
-		net=NET_NONE;
-        smb_hfield(&msg,SENDERNETTYPE,sizeof(net),&net);
-	}
-
-	smb_hfield(&msg,RECIPIENT,strlen(name),name);
-	net=NET_QWK;
-	smb_hfield(&msg,RECIPIENTNETTYPE,sizeof(net),&net);
-
-	truncsp(fulladdr);
-	smb_hfield(&msg,RECIPIENTNETADDR,strlen(fulladdr),fulladdr);
-
-	bprintf(text[NetMailing],to,fulladdr,sender,sys_id); }
-
-if(inet) {				/* Internet E-mail */
-
-    if(inetmail_cost && !(useron.exempt&FLAG('S'))) {
-        if(useron.cdt+useron.freecdt<inetmail_cost) {
-            bputs(text[NotEnoughCredits]);
-            FREE(qwkbuf);
-			smb_freemsgmem(&msg);
-            return; }
-        sprintf(str,text[NetMailCostContinueQ],inetmail_cost);
-        if(noyes(str)) {
-            FREE(qwkbuf);
-			smb_freemsgmem(&msg);
-            return; } }
-
-	net=NET_INTERNET;
-	smb_hfield(&msg,RECIPIENT,strlen(name),name);
-    msg.idx.to=0;   /* Out-bound NetMail set to 0 */
-    smb_hfield(&msg,RECIPIENTNETTYPE,sizeof(net),&net);
-	smb_hfield(&msg,RECIPIENTNETADDR,strlen(to),to);
-
-	bprintf(text[NetMailing],name,to
-        ,inetmail_misc&NMAIL_ALIAS ? useron.alias : useron.name
-		,sys_inetaddr); }
-
-if(qnet || inet) {
-
-    bputs(text[WritingIndx]);
-
-	if((i=smb_stack(&smb,SMB_STACK_PUSH))!=0) {
-		errormsg(WHERE,ERR_OPEN,"MAIL",i);
-		FREE(qwkbuf);
-		smb_freemsgmem(&msg);
-		return; }
-	sprintf(smb.file,"%sMAIL",data_dir);
-	smb.retry_time=smb_retry_time;
-	if((i=smb_open(&smb))!=0) {
-		smb_stack(&smb,SMB_STACK_POP);
-		errormsg(WHERE,ERR_OPEN,smb.file,i);
-		FREE(qwkbuf);
-		smb_freemsgmem(&msg);
-		return; }
-
-	if(filelength(fileno(smb.shd_fp))<1L) {   /* Create it if it doesn't exist */
-		smb.status.max_crcs=mail_maxcrcs;
-		smb.status.max_msgs=MAX_SYSMAIL;
-		smb.status.max_age=mail_maxage;
-		smb.status.attr=SMB_EMAIL;
-		if((i=smb_create(&smb))!=0) {
-			smb_close(&smb);
-			smb_stack(&smb,SMB_STACK_POP);
-			errormsg(WHERE,ERR_CREATE,smb.file,i);
-			FREE(qwkbuf);
-			smb_freemsgmem(&msg);
-			return; } }
-
-	length=n*256L;	// Extra big for CRLF xlat, was (n-1L)*256L (03/16/96)
-
-
-	if(length&0xfff00000UL || !length) {
-		smb_close(&smb);
-		smb_stack(&smb,SMB_STACK_POP);
-		sprintf(str,"REP msg (%ld)",n);
-		errormsg(WHERE,ERR_LEN,str,length);
-		FREE(qwkbuf);
-		smb_freemsgmem(&msg);
-		return; }
-
-	if((i=smb_open_da(&smb))!=0) {
-		smb_close(&smb);
-		smb_stack(&smb,SMB_STACK_POP);
-		errormsg(WHERE,ERR_OPEN,smb.file,i);
-		FREE(qwkbuf);
-		smb_freemsgmem(&msg);
-		return; }
-	if(sys_misc&SM_FASTMAIL)
-		offset=smb_fallocdat(&smb,length,1);
-	else
-		offset=smb_allocdat(&smb,length,1);
-	smb_close_da(&smb);
-
-	fseek(smb.sdt_fp,offset,SEEK_SET);
-	xlat=XLAT_NONE;
-	fwrite(&xlat,2,1,smb.sdt_fp);
-	m=2;
-	for(;l<n*128L && m<length;l++) {
-		if(qwkbuf[l]==0 || qwkbuf[l]==LF)
-			continue;
-		if((uchar)qwkbuf[l]==0xe3) {
-			fwrite(crlf,2,1,smb.sdt_fp);
-			m+=2;
-			continue; }
-		fputc(qwkbuf[l],smb.sdt_fp);
-		m++; }
-
-	for(ch=0;m<length;m++)			/* Pad out with NULLs */
-		fputc(ch,smb.sdt_fp);
-	fflush(smb.sdt_fp);
-
-	msg.hdr.offset=offset;
-
-	smb_dfield(&msg,TEXT_BODY,length);
-
-	i=smb_addmsghdr(&smb,&msg,SMB_SELFPACK);
-	smb_close(&smb);
-	smb_stack(&smb,SMB_STACK_POP);
-
-	smb_freemsgmem(&msg);
-	if(i) {
-		smb_freemsgdat(&smb,offset,length,1);
-		errormsg(WHERE,ERR_WRITE,smb.file,i); }
-	else {		/* Successful */
-		if(inet) {
-			if(inetmail_sem[0]) 	 /* update semaphore file */
-				if((fido=nopen(inetmail_sem,O_WRONLY|O_CREAT|O_TRUNC))!=-1)
-					close(fido);
-			if(!(useron.exempt&FLAG('S')))
-				subtract_cdt(inetmail_cost); }
-		sprintf(str,"Sent %s NetMail to %s (%s) via QWK"
-			,qnet ? "QWK":"Internet",name,qnet ? fulladdr : to);
-		logline("EN",str); }
-
-	FREE((char *)qwkbuf);
-	return; }
-
-
-/****************************** FidoNet **********************************/
-
-if(!fidoaddr.zone || !netmail_dir[0]) {  // No fido netmail allowed
-	bprintf("\1n\r\nInvalid NetMail address.\r\n");
-	FREE(qwkbuf);
-	return; }
-
-memset(&hdr,0,sizeof(hdr));   /* Initialize header to null */
-
-if(fromhub || useron.rest&FLAG('Q')) {
-	sprintf(str,"%.25s",block+46);              /* From */
-	truncsp(str);
-	sprintf(tmp,"@%s",fromhub ? qhub[fromhub-1]->id : useron.alias);
-	strupr(tmp);
-	strcat(str,tmp); }
-else
-	strcpy(str,netmail_misc&NMAIL_ALIAS ? useron.alias : useron.name);
-sprintf(hdr.from,"%.35s",str);
-
-sprintf(hdr.to,"%.35s",to);
-
-/* Look-up in nodelist? */
-
-if(netmail_cost && !(useron.exempt&FLAG('S'))) {
-	if(useron.cdt+useron.freecdt<netmail_cost) {
-		bputs(text[NotEnoughCredits]);
-		FREE(qwkbuf);
-		return; }
-	sprintf(str,text[NetMailCostContinueQ],netmail_cost);
-	if(noyes(str)) {
-		FREE(qwkbuf);
-		return; } }
-
-hdr.destzone	=fidoaddr.zone;
-hdr.destnet 	=fidoaddr.net;
-hdr.destnode	=fidoaddr.node;
-hdr.destpoint	=fidoaddr.point;
-
-for(i=0;i<total_faddrs;i++)
-	if(fidoaddr.zone==faddr[i].zone && fidoaddr.net==faddr[i].net)
-        break;
-if(i==total_faddrs) {
-	for(i=0;i<total_faddrs;i++)
-		if(fidoaddr.zone==faddr[i].zone)
-			break; }
-if(i==total_faddrs)
-	i=0;
-hdr.origzone	=faddr[i].zone;
-hdr.orignet 	=faddr[i].net;
-hdr.orignode	=faddr[i].node;
-hdr.origpoint   =faddr[i].point;
-
-strcpy(str,faddrtoa(faddr[i]));
-bprintf(text[NetMailing],hdr.to,faddrtoa(fidoaddr),hdr.from,str);
-
-date.da_mon=((qwkbuf[8]&0xf)*10)+(qwkbuf[9]&0xf);
-date.da_day=((qwkbuf[11]&0xf)*10)+(qwkbuf[12]&0xf);
-date.da_year=((qwkbuf[14]&0xf)*10)+(qwkbuf[15]&0xf);
-if(date.da_year<Y2K_2DIGIT_WINDOW)
-	date.da_year+=100;
-date.da_year+=1900;
-curtime.ti_hour=((qwkbuf[16]&0xf)*10)+(qwkbuf[17]&0xf);
-curtime.ti_min=((qwkbuf[19]&0xf)*10)+(qwkbuf[20]&0xf);		/* From QWK time */
-curtime.ti_sec=0;
-sprintf(hdr.time,"%02u %3.3s %02u  %02u:%02u:%02u"          /* To FidoNet */
-	,date.da_day,mon[date.da_mon-1],TM_YEAR(date.da_year-1900)
-	,curtime.ti_hour,curtime.ti_min,curtime.ti_sec);
-
-hdr.attr=(FIDO_LOCAL|FIDO_PRIVATE);
-
-if(netmail_misc&NMAIL_CRASH) hdr.attr|=FIDO_CRASH;
-if(netmail_misc&NMAIL_HOLD)  hdr.attr|=FIDO_HOLD;
-if(netmail_misc&NMAIL_KILL)  hdr.attr|=FIDO_KILLSENT;
-
-sprintf(str,"%.25s",block+71);      /* Title */
-truncsp(str);
-p=str;
-if((SYSOP || useron.exempt&FLAG('F'))
-    && !strncmpi(p,"CR:",3)) {     /* Crash over-ride by sysop */
-    p+=3;               /* skip CR: */
-    if(*p==SP) p++;     /* skip extra space if it exists */
-    hdr.attr|=FIDO_CRASH; }
-
-if((SYSOP || useron.exempt&FLAG('F'))
-    && !strncmpi(p,"FR:",3)) {     /* File request */
-    p+=3;               /* skip FR: */
-    if(*p==SP) p++;
-    hdr.attr|=FIDO_FREQ; }
-
-if((SYSOP || useron.exempt&FLAG('F'))
-    && !strncmpi(p,"RR:",3)) {     /* Return receipt request */
-    p+=3;               /* skip RR: */
-    if(*p==SP) p++;
-    hdr.attr|=FIDO_RRREQ; }
-
-if((SYSOP || useron.exempt&FLAG('F'))
-	&& !strncmpi(p,"FA:",3)) {     /* File attachment */
-	p+=3;				/* skip FA: */
-    if(*p==SP) p++;
-	hdr.attr|=FIDO_FILE; }
-
-sprintf(hdr.subj,"%.71s",p);
-
-for(i=1;i;i++) {
-	sprintf(str,"%s%u.MSG",netmail_dir,i);
-	if(!fexist(str))
-		break; }
-if(!i) {
-	bputs(text[TooManyEmailsToday]);
-	return; }
-if((fido=nopen(str,O_WRONLY|O_CREAT|O_EXCL))==-1) {
-	FREE(qwkbuf);
-	errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_EXCL);
-	return; }
-write(fido,&hdr,sizeof(hdr));
-
-pt_zone_kludge(hdr,fido);
-
-if(netmail_misc&NMAIL_DIRECT) {
-	sprintf(str,"\1FLAGS DIR\r\n");
-    write(fido,str,strlen(str)); }
-
-l=128L;
-
-if(into==NULL) {	  /* If name@addr on first line, skip first line */
-	while(l<n*128L && (uchar)qwkbuf[l]!=0xe3) l++;
-	l++; }
-
-while(l<n*128L) {
-	if(qwkbuf[l]==1)   /* Ctrl-A, so skip it and the next char */
-		l++;
-	else if(qwkbuf[l]!=LF) {
-		if((uchar)qwkbuf[l]==0xe3) /* QWK cr/lf char converted to hard CR */
-			qwkbuf[l]=CR;
-		write(fido,(char *)qwkbuf+l,1); }
-	l++; }
-l=0;
-write(fido,&l,1);	/* Null terminator */
-close(fido);
-FREE((char *)qwkbuf);
-if(netmail_sem[0])		/* update semaphore file */
-	if((fido=nopen(netmail_sem,O_WRONLY|O_CREAT|O_TRUNC))!=-1)
-		close(fido);
-if(!(useron.exempt&FLAG('S')))
-	subtract_cdt(netmail_cost);
-sprintf(str,"Sent NetMail to %s @%s via QWK",hdr.to,faddrtoa(fidoaddr));
-logline("EN",str);
-}
-
diff --git a/src/sbbs2/fido/crc16.c b/src/sbbs2/fido/crc16.c
deleted file mode 100644
index dc89962940..0000000000
--- a/src/sbbs2/fido/crc16.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* CRC16.C */
-
-/* 16-bit CRC routines */
-
-#include "smblib.h"
-
-/****************************************************************************/
-/* Updates 16-bit "rcrc" with character 'ch'                                */
-/****************************************************************************/
-void ucrc16(uchar ch, ushort *rcrc) {
-    ushort i, cy;
-    uchar nch=ch;
- 
-for (i=0; i<8; i++) {
-    cy=*rcrc & 0x8000;
-    *rcrc<<=1;
-    if (nch & 0x80) *rcrc |= 1;
-    nch<<=1;
-    if (cy) *rcrc ^= 0x1021; }
-}
-
-/****************************************************************************/
-/* Returns 16-crc of string (not counting terminating NULL)                 */
-/****************************************************************************/
-ushort crc16(char *str)
-{
-    int     i=0;
-    ushort  crc=0;
-
-ucrc16(0,&crc);
-while(str[i])
-    ucrc16(str[i++],&crc);
-ucrc16(0,&crc);
-ucrc16(0,&crc);
-return(crc);
-}
-
diff --git a/src/sbbs2/fido/crc32.h b/src/sbbs2/fido/crc32.h
deleted file mode 100644
index a5d5162fb2..0000000000
--- a/src/sbbs2/fido/crc32.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* 32-bit CRC */
-
-long crc32tbl[]={	/* CRC polynomial 0xedb88320 */
-0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
-0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
-0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
-0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
-0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
-0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
-0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
-0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
-0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
-0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
-0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
-0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
-0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
-0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
-0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
-0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
-0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
-0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
-0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
-0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
-0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
-0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
-0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
-0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
-0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
-0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
-0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
-0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
-0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
-0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
-0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
-0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
-};
-
-#define ucrc32(ch,crc) (crc32tbl[(crc^ch)&0xff]^(crc>>8))
-
-
diff --git a/src/sbbs2/fido/file_id.diz b/src/sbbs2/fido/file_id.diz
deleted file mode 100644
index b03fe6269f..0000000000
--- a/src/sbbs2/fido/file_id.diz
+++ /dev/null
@@ -1,3 +0,0 @@
-SBBSFIDO v2.23 - Fixes 32-bit LZH decoding
-and OS/2 NOPEN error. No change for DOS16.
-Includes DOS, OS/2, and 32-bit DOS versions.
diff --git a/src/sbbs2/fido/lzh.c b/src/sbbs2/fido/lzh.c
deleted file mode 100644
index 2d21e4d55f..0000000000
--- a/src/sbbs2/fido/lzh.c
+++ /dev/null
@@ -1,785 +0,0 @@
-/* LZH.C */
-
-/* Digital Dynamics conversion of 1988 LZH (LHarc) encoding functions	*/
-/* Based on Japanese version 29-NOV-1988								*/
-/* LZSS coded by Haruhiko Okumura										*/
-/* Adaptive Huffman Coding coded by Haruyasu Yoshizaki					*/
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#ifndef __WATCOMC__
-	#include <alloc.h>
-#endif
-
-/****************************************************************************/
-/* Memory allocation macros for various compilers and environments			*/
-/* MALLOC is used for allocations of 64k or less							*/
-/* FREE is used to free buffers allocated with MALLOC						*/
-/* LMALLOC is used for allocations of possibly larger than 64k				*/
-/* LFREE is used to free buffers allocated with LMALLOC 					*/
-/* REALLOC is used to re-size a previously MALLOCed or LMALLOCed buffer 	*/
-/****************************************************************************/
-#if defined(__COMPACT__) || defined(__LARGE__) || defined(__HUGE__)
-	#if defined(__TURBOC__)
-		#define REALLOC(x,y) farrealloc(x,y)
-		#define LMALLOC(x) farmalloc(x)
-		#define MALLOC(x) farmalloc(x)
-		#define LFREE(x) farfree(x)
-		#define FREE(x) farfree(x)
-	#elif defined(__WATCOMC__)
-		#define REALLOC realloc
-		#define LMALLOC(x) halloc(x,1)	/* far heap, but slow */
-		#define MALLOC malloc			/* far heap, but 64k max */
-		#define LFREE hfree
-		#define FREE free
-	#else	/* Other 16-bit Compiler */
-		#define REALLOC realloc
-		#define LMALLOC malloc
-		#define MALLOC malloc
-		#define LFREE free
-		#define FREE free
-	#endif
-#else		/* 32-bit Compiler or Small Memory Model */
-	#define REALLOC realloc
-	#define LMALLOC malloc
-	#define MALLOC malloc
-	#define LFREE free
-	#define FREE free
-#endif
-
-
-
-typedef unsigned char uchar;
-
-/* LZSS Parameters */
-
-#define LZH_N			4096	/* Size of string buffer */
-#define LZH_F			60		/* Size of look-ahead buffer */
-#define LZH_THRESHOLD	2
-#define LZH_NIL 		LZH_N	/* End of tree's node  */
-
-#ifdef LZH_DYNAMIC_BUF
-
-unsigned char *lzh_text_buf;
-short int	lzh_match_position, lzh_match_length,
-	  *lzh_lson, *lzh_rson, *lzh_dad;
-
-#else
-
-unsigned char lzh_text_buf[LZH_N + LZH_F - 1];
-short int	  lzh_match_position, lzh_match_length,
-		lzh_lson[LZH_N + 1], lzh_rson[LZH_N + 257], lzh_dad[LZH_N + 1];
-
-#endif
-
-
-void lzh_init_tree(void)  /* Initializing tree */
-{
-	short int  i;
-
-	for (i = LZH_N + 1; i <= LZH_N + 256; i++)
-		lzh_rson[i] = LZH_NIL;			/* root */
-	for (i = 0; i < LZH_N; i++)
-		lzh_dad[i] = LZH_NIL;			/* node */
-}
-
-/******************************/
-/* Inserting node to the tree */
-/* Only used during encoding  */
-/******************************/
-void lzh_insert_node(short int r)
-{
-	short int  i, p, cmp;
-	unsigned char  *key;
-	unsigned c;
-
-	cmp = 1;
-	key = lzh_text_buf+r;
-	p = LZH_N + 1 + key[0];
-	lzh_rson[r] = lzh_lson[r] = LZH_NIL;
-	lzh_match_length = 0;
-	for ( ; ; ) {
-		if (cmp >= 0) {
-			if (lzh_rson[p] != LZH_NIL)
-				p = lzh_rson[p];
-			else {
-				lzh_rson[p] = r;
-				lzh_dad[r] = p;
-				return;
-			}
-		} else {
-			if (lzh_lson[p] != LZH_NIL)
-				p = lzh_lson[p];
-			else {
-				lzh_lson[p] = r;
-				lzh_dad[r] = p;
-				return;
-			}
-		}
-		for (i = 1; i < LZH_F; i++)
-			if ((cmp = key[i] - lzh_text_buf[p + i]) != 0)
-				break;
-		if (i > LZH_THRESHOLD) {
-			if (i > lzh_match_length) {
-				lzh_match_position = ((r - p) & (LZH_N - 1)) - 1;
-				if ((lzh_match_length = i) >= LZH_F)
-					break;
-			}
-			if (i == lzh_match_length) {
-				if ((c = ((r - p) & (LZH_N - 1)) - 1) < lzh_match_position) {
-					lzh_match_position = c;
-				}
-			}
-		}
-	}
-	lzh_dad[r] = lzh_dad[p];
-	lzh_lson[r] = lzh_lson[p];
-	lzh_rson[r] = lzh_rson[p];
-	lzh_dad[lzh_lson[p]] = r;
-	lzh_dad[lzh_rson[p]] = r;
-	if (lzh_rson[lzh_dad[p]] == p)
-		lzh_rson[lzh_dad[p]] = r;
-	else
-		lzh_lson[lzh_dad[p]] = r;
-	lzh_dad[p] = LZH_NIL;  /* remove p */
-}
-
-void lzh_delete_node(short int p)  /* Deleting node from the tree */
-{
-	short int  q;
-
-	if (lzh_dad[p] == LZH_NIL)
-		return;			/* unregistered */
-	if (lzh_rson[p] == LZH_NIL)
-		q = lzh_lson[p];
-	else
-	if (lzh_lson[p] == LZH_NIL)
-		q = lzh_rson[p];
-	else {
-		q = lzh_lson[p];
-		if (lzh_rson[q] != LZH_NIL) {
-			do {
-				q = lzh_rson[q];
-			} while (lzh_rson[q] != LZH_NIL);
-			lzh_rson[lzh_dad[q]] = lzh_lson[q];
-			lzh_dad[lzh_lson[q]] = lzh_dad[q];
-			lzh_lson[q] = lzh_lson[p];
-			lzh_dad[lzh_lson[p]] = q;
-		}
-		lzh_rson[q] = lzh_rson[p];
-		lzh_dad[lzh_rson[p]] = q;
-	}
-	lzh_dad[q] = lzh_dad[p];
-	if (lzh_rson[lzh_dad[p]] == p)
-		lzh_rson[lzh_dad[p]] = q;
-	else
-		lzh_lson[lzh_dad[p]] = q;
-	lzh_dad[p] = LZH_NIL;
-}
-
-/* Huffman coding parameters */
-
-#define LZH_N_CHAR		(256 - LZH_THRESHOLD + LZH_F)
-					/* character code (= 0..LZH_N_CHAR-1) */
-#define LZH_T		(LZH_N_CHAR * 2 - 1)	/* Size of table */
-#define LZH_R		(LZH_T - 1) 		/* root position */
-#define MAX_FREQ	0x8000
-					/* update when cumulative frequency */
-					/* reaches to this value */
-
-/*
- * Tables for encoding/decoding upper 6 bits of
- * sliding dictionary pointer
- */
-/* encoder table */
-uchar lzh_p_len[64] = {
-	0x03, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05,
-	0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-	0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
-	0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08
-};
-
-uchar lzh_p_code[64] = {
-	0x00, 0x20, 0x30, 0x40, 0x50, 0x58, 0x60, 0x68,
-	0x70, 0x78, 0x80, 0x88, 0x90, 0x94, 0x98, 0x9C,
-	0xA0, 0xA4, 0xA8, 0xAC, 0xB0, 0xB4, 0xB8, 0xBC,
-	0xC0, 0xC2, 0xC4, 0xC6, 0xC8, 0xCA, 0xCC, 0xCE,
-	0xD0, 0xD2, 0xD4, 0xD6, 0xD8, 0xDA, 0xDC, 0xDE,
-	0xE0, 0xE2, 0xE4, 0xE6, 0xE8, 0xEA, 0xEC, 0xEE,
-	0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
-	0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
-};
-
-/* decoder table */
-uchar lzh_d_code[256] = {
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-	0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-	0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
-	0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
-	0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
-	0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
-	0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
-	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-	0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
-	0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
-	0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
-	0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
-	0x0C, 0x0C, 0x0C, 0x0C, 0x0D, 0x0D, 0x0D, 0x0D,
-	0x0E, 0x0E, 0x0E, 0x0E, 0x0F, 0x0F, 0x0F, 0x0F,
-	0x10, 0x10, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11,
-	0x12, 0x12, 0x12, 0x12, 0x13, 0x13, 0x13, 0x13,
-	0x14, 0x14, 0x14, 0x14, 0x15, 0x15, 0x15, 0x15,
-	0x16, 0x16, 0x16, 0x16, 0x17, 0x17, 0x17, 0x17,
-	0x18, 0x18, 0x19, 0x19, 0x1A, 0x1A, 0x1B, 0x1B,
-	0x1C, 0x1C, 0x1D, 0x1D, 0x1E, 0x1E, 0x1F, 0x1F,
-	0x20, 0x20, 0x21, 0x21, 0x22, 0x22, 0x23, 0x23,
-	0x24, 0x24, 0x25, 0x25, 0x26, 0x26, 0x27, 0x27,
-	0x28, 0x28, 0x29, 0x29, 0x2A, 0x2A, 0x2B, 0x2B,
-	0x2C, 0x2C, 0x2D, 0x2D, 0x2E, 0x2E, 0x2F, 0x2F,
-	0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
-	0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
-};
-
-uchar lzh_d_len[256] = {
-	0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
-	0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
-	0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
-	0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
-	0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
-	0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
-	0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
-	0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
-	0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
-	0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
-	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-	0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
-	0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
-};
-
-#ifdef LZH_DYNAMIC_BUF
-
-unsigned short *lzh_freq=NULL;	 /* cumulative freq table */
-
-/*
- * pointing parent nodes.
- * area [LZH_T..(LZH_T + LZH_N_CHAR - 1)] are pointers for leaves
- */
-short int *lzh_prnt=NULL;
-
-/* pointing children nodes (son[], son[] + 1)*/
-short int *lzh_son=NULL;
-
-#else	/* STATIC */
-
-unsigned short lzh_freq[LZH_T + 1];   /* cumulative freq table */
-short int lzh_prnt[LZH_T + LZH_N_CHAR];
-short int lzh_son[LZH_T + 1];		  /* bug fixed by Digital Dynamics */
-
-#endif
-
-
-unsigned short lzh_getbuf = 0;		/* Was just "unsigned" fixed 04/12/95 */
-uchar lzh_getlen = 0;
-
-int lzh_getbit(uchar *inbuf, long *incnt, long inlen)    /* get one bit */
-{
-	short int i;
-
-	while (lzh_getlen <= 8) {
-		if((*incnt)>=inlen)
-			i=0;
-		else
-			i=inbuf[(*incnt)++];
-		lzh_getbuf |= i << (8 - lzh_getlen);
-		lzh_getlen += 8;
-	}
-	i = lzh_getbuf;
-	lzh_getbuf <<= 1;
-	lzh_getlen--;
-	return (i < 0);
-}
-
-short int lzh_getbyte(uchar *inbuf, long *incnt, long inlen)   /* get a byte */
-{
-	unsigned short i;
-
-	while (lzh_getlen <= 8) {
-		if((*incnt)>=inlen)
-			i=0;
-		else
-			i=inbuf[(*incnt)++];
-		lzh_getbuf |= i << (8 - lzh_getlen);
-		lzh_getlen += 8;
-	}
-	i = lzh_getbuf;
-	lzh_getbuf <<= 8;
-	lzh_getlen -= 8;
-	return i >> 8;
-}
-
-unsigned lzh_putbuf = 0;
-uchar lzh_putlen = 0;
-
-/* output c bits */
-void lzh_putcode(short int l, unsigned short c, uchar *outbuf, long *outlen)
-{
-	lzh_putbuf |= c >> lzh_putlen;
-	if ((lzh_putlen += l) >= 8) {
-		outbuf[(*outlen)++]=(lzh_putbuf >> 8);
-		if ((lzh_putlen -= 8) >= 8) {
-			outbuf[(*outlen)++]=lzh_putbuf;
-			lzh_putlen -= 8;
-			lzh_putbuf = c << (l - lzh_putlen);
-		} else {
-			lzh_putbuf <<= 8;
-		}
-	}
-}
-
-
-/* initialize freq tree */
-
-void lzh_start_huff()
-{
-	short int i, j;
-
-lzh_getbuf = 0; 	/* Added by Digital Dynamics for repeating operations */
-lzh_getlen = 0;
-lzh_putbuf = 0;
-lzh_putlen = 0;
-
-	for (i = 0; i < LZH_N_CHAR; i++) {
-		lzh_freq[i] = 1;
-		lzh_son[i] = i + LZH_T;
-		lzh_prnt[i + LZH_T] = i;
-	}
-	i = 0; j = LZH_N_CHAR;
-	while (j <= LZH_R) {
-		lzh_freq[j] = lzh_freq[i] + lzh_freq[i + 1];
-		lzh_son[j] = i;
-		lzh_prnt[i] = lzh_prnt[i + 1] = j;
-		i += 2; j++;
-	}
-	lzh_freq[LZH_T] = 0xffff;
-    lzh_prnt[LZH_R] = 0;
-}
-
-
-/* reconstruct freq tree */
-
-void lzh_reconst()
-{
-	short int i, j, k;
-	unsigned short f, l;
-
-	/* halven cumulative freq for leaf nodes */
-	j = 0;
-	for (i = 0; i < LZH_T; i++) {
-		if (lzh_son[i] >= LZH_T) {
-			lzh_freq[j] = (lzh_freq[i] + 1) / 2;
-			lzh_son[j] = lzh_son[i];
-			j++;
-		}
-	}
-	/* make a tree : first, connect children nodes */
-	for (i = 0, j = LZH_N_CHAR; j < LZH_T; i += 2, j++) {
-		k = i + 1;
-		f = lzh_freq[j] = lzh_freq[i] + lzh_freq[k];
-		for (k = j - 1; f < lzh_freq[k]; k--);
-		k++;
-		l = (j - k) * 2;
-		
-		/* movmem() is Turbo-C dependent
-		   rewritten to memmove() by Kenji */
-		
-		/* movmem(&lzh_freq[k], &lzh_freq[k + 1], l); */
-		(void)memmove(lzh_freq+k+1,lzh_freq+k, l);
-		lzh_freq[k] = f;
-		/* movmem(&lzh_son[k], &lzh_son[k + 1], l); */
-		(void)memmove(lzh_son+k+1,lzh_son+k, l);
-		lzh_son[k] = i;
-	}
-	/* connect parent nodes */
-	for (i = 0; i < LZH_T; i++) {
-		if ((k = lzh_son[i]) >= LZH_T) {
-			lzh_prnt[k] = i;
-		} else {
-			lzh_prnt[k] = lzh_prnt[k + 1] = i;
-		}
-	}
-}
-
-/* update freq tree */
-
-void lzh_update(short int c)
-{
-	short int i, j, k, l;
-
-	if (lzh_freq[LZH_R] == MAX_FREQ) {
-		lzh_reconst();
-	}
-	c = lzh_prnt[c + LZH_T];
-	do {
-		k = ++lzh_freq[c];
-
-		/* swap nodes to keep the tree freq-ordered */
-		if (k > lzh_freq[l = c + 1]) {
-			while (k > lzh_freq[++l]);
-			l--;
-			lzh_freq[c] = lzh_freq[l];
-			lzh_freq[l] = k;
-
-			i = lzh_son[c];
-			lzh_prnt[i] = l;
-			if (i < LZH_T) lzh_prnt[i + 1] = l;
-
-			j = lzh_son[l];
-			lzh_son[l] = i;
-
-			lzh_prnt[j] = c;
-			if (j < LZH_T) lzh_prnt[j + 1] = c;
-			lzh_son[c] = j;
-
-			c = l;
-		}
-	} while ((c = lzh_prnt[c]) != 0);	/* do it until reaching the root */
-}
-
-unsigned short lzh_code, lzh_len;
-
-void lzh_encode_char(unsigned short c, uchar *outbuf, long *outlen)
-{
-	unsigned short i;
-	short int j, k;
-
-	i = 0;
-	j = 0;
-	k = lzh_prnt[c + LZH_T];
-
-	/* search connections from leaf node to the root */
-	do {
-		i >>= 1;
-
-		/*
-		if node's address is odd, output 1
-		else output 0
-		*/
-		if (k & 1) i += 0x8000;
-
-		j++;
-	} while ((k = lzh_prnt[k]) != LZH_R);
-	lzh_putcode(j, i, outbuf, outlen);
-	lzh_code = i;
-	lzh_len = j;
-	lzh_update(c);
-}
-
-void lzh_encode_position(unsigned short c, uchar *outbuf, long *outlen)
-{
-	unsigned short i;
-
-	/* output upper 6 bits with encoding */
-	i = c >> 6;
-	lzh_putcode(lzh_p_len[i], (unsigned)lzh_p_code[i] << 8, outbuf, outlen);
-
-	/* output lower 6 bits directly */
-	lzh_putcode(6, (c & 0x3f) << 10, outbuf, outlen);
-}
-
-void lzh_encode_end(uchar *outbuf, long *outlen)
-{
-	if (lzh_putlen) {
-		outbuf[(*outlen)++]=(lzh_putbuf >> 8);
-	}
-}
-
-short int lzh_decode_char(uchar *inbuf, long *incnt, long inlen)
-{
-	unsigned short c;
-
-	c = lzh_son[LZH_R];
-
-	/*
-	 * start searching tree from the root to leaves.
-	 * choose node #(lzh_son[]) if input bit == 0
-	 * else choose #(lzh_son[]+1) (input bit == 1)
-	 */
-	while (c < LZH_T) {
-		c += lzh_getbit(inbuf,incnt,inlen);
-		c = lzh_son[c];
-	}
-	c -= LZH_T;
-	lzh_update(c);
-	return c;
-}
-
-short int lzh_decode_position(uchar *inbuf, long *incnt, long inlen)
-{
-	unsigned short i, j, c;
-
-	/* decode upper 6 bits from given table */
-	i = lzh_getbyte(inbuf,incnt,inlen);
-	c = (unsigned)lzh_d_code[i] << 6;
-	j = lzh_d_len[i];
-
-	/* input lower 6 bits directly */
-	j -= 2;
-	while (j--) {
-		i = (i << 1) + lzh_getbit(inbuf,incnt,inlen);
-	}
-	return c | i & 0x3f;
-}
-
-/* Compression */
-
-/* Encoding/Compressing */
-/* Returns length of outbuf */
-long lzh_encode(uchar *inbuf, long inlen, uchar *outbuf)
-{
-	short int  i, c, len, r, s, last_match_length;
-	long incnt,outlen; /* textsize=0; */
-
-#ifdef LZH_DYNAMIC_BUF
-
-	if((lzh_text_buf=(uchar *)MALLOC(LZH_N + LZH_F - 1))==NULL)
-		return(-1);
-	if((lzh_freq=(unsigned short*)MALLOC((LZH_T + 1)*sizeof(unsigned short)))==NULL) {
-		FREE(lzh_text_buf);
-		return(-1); }
-	if((lzh_prnt=(short *)MALLOC((LZH_T + LZH_N_CHAR)*sizeof(short)))==NULL) {
-		FREE(lzh_text_buf);
-		FREE(lzh_freq);
-		return(-1); }
-	if((lzh_son=(short *)MALLOC((LZH_T + 1) * sizeof(short)))==NULL) {
-		FREE(lzh_text_buf);
-		FREE(lzh_prnt);
-		FREE(lzh_freq);
-		return(-1); }
-	if((lzh_lson=(short *)MALLOC((LZH_N + 1)*sizeof(short)))==NULL) {
-		FREE(lzh_text_buf);
-		FREE(lzh_prnt);
-		FREE(lzh_freq);
-		FREE(lzh_son);
-		return(-1); }
-	if((lzh_rson=(short *)MALLOC((LZH_N + 257)*sizeof(short)))==NULL) {
-		FREE(lzh_text_buf);
-		FREE(lzh_prnt);
-		FREE(lzh_freq);
-		FREE(lzh_son);
-		FREE(lzh_lson);
-		return(-1); }
-	if((lzh_dad=(short *)MALLOC((LZH_N + 1)*sizeof(short)))==NULL) {
-		FREE(lzh_text_buf);
-		FREE(lzh_prnt);
-		FREE(lzh_freq);
-		FREE(lzh_son);
-        FREE(lzh_lson);
-		FREE(lzh_rson);
-		return(-1); }
-#endif
-
-	incnt=0;
-	memcpy(outbuf,&inlen,sizeof(inlen));
-	outlen=sizeof(inlen);
-	if(!inlen) {
-#ifdef LZH_DYNAMIC_BUF
-		FREE(lzh_text_buf);
-		FREE(lzh_prnt);
-		FREE(lzh_freq);
-		FREE(lzh_son);
-        FREE(lzh_lson);
-        FREE(lzh_rson);
-		FREE(lzh_dad);
-#endif
-		return(outlen); }
-	lzh_start_huff();
-	lzh_init_tree();
-	s = 0;
-	r = LZH_N - LZH_F;
-	for (i = s; i < r; i++)
-		lzh_text_buf[i] = ' ';
-	for (len = 0; len < LZH_F && incnt<inlen; len++)
-		lzh_text_buf[r + len] = inbuf[incnt++];
-	/* textsize = len; */
-	for (i = 1; i <= LZH_F; i++)
-		lzh_insert_node(r - i);
-	lzh_insert_node(r);
-	do {
-		if (lzh_match_length > len)
-			lzh_match_length = len;
-		if (lzh_match_length <= LZH_THRESHOLD) {
-			lzh_match_length = 1;
-			lzh_encode_char(lzh_text_buf[r],outbuf,&outlen);
-		} else {
-			lzh_encode_char(255 - LZH_THRESHOLD + lzh_match_length
-				,outbuf,&outlen);
-			lzh_encode_position(lzh_match_position
-				,outbuf,&outlen);
-		}
-		last_match_length = lzh_match_length;
-		for (i = 0; i < last_match_length && incnt<inlen; i++) {
-			lzh_delete_node(s);
-			c=inbuf[incnt++];
-			lzh_text_buf[s] = c;
-			if (s < LZH_F - 1)
-				lzh_text_buf[s + LZH_N] = c;
-			s = (s + 1) & (LZH_N - 1);
-			r = (r + 1) & (LZH_N - 1);
-			lzh_insert_node(r);
-		}
-/***
-		if ((textsize += i) > printcount) {
-			printf("%12ld\r", textsize);
-			printcount += 1024;
-		}
-***/
-		while (i++ < last_match_length) {
-			lzh_delete_node(s);
-			s = (s + 1) & (LZH_N - 1);
-			r = (r + 1) & (LZH_N - 1);
-			if (--len) lzh_insert_node(r);
-		}
-	} while (len > 0);
-	lzh_encode_end(outbuf,&outlen);
-/*
-	printf("input: %ld (%ld) bytes\n", inlen,textsize);
-	printf("output: %ld bytes\n", outlen);
-	printf("output/input: %.3f\n", (double)outlen / inlen);
-*/
-
-#ifdef LZH_DYNAMIC_BUF
-	FREE(lzh_text_buf);
-	FREE(lzh_prnt);
-	FREE(lzh_freq);
-	FREE(lzh_son);
-	FREE(lzh_lson);
-	FREE(lzh_rson);
-	FREE(lzh_dad);
-#endif
-
-	return(outlen);
-}
-
-/* Decoding/Uncompressing */
-/* Returns length of outbuf */
-long lzh_decode(uchar *inbuf, long inlen, uchar *outbuf)
-{
-	short int  i, j, k, r, c;
-	unsigned long int  count;
-	long incnt,textsize;
-
-#ifdef LZH_DYNAMIC_BUF
-
-	if((lzh_text_buf=(uchar *)MALLOC((LZH_N + LZH_F - 1)*2))==NULL)
-		return(-1);
-	if((lzh_freq=(unsigned short *)MALLOC((LZH_T + 1)*sizeof(unsigned short)))
-		==NULL) {
-		FREE(lzh_text_buf);
-		return(-1); }
-	if((lzh_prnt=(short *)MALLOC((LZH_T + LZH_N_CHAR)*sizeof(short)))==NULL) {
-		FREE(lzh_text_buf);
-		FREE(lzh_freq);
-		return(-1); }
-	if((lzh_son=(short *)MALLOC((LZH_T + 1) * sizeof(short)))==NULL) {
-		FREE(lzh_text_buf);
-		FREE(lzh_prnt);
-		FREE(lzh_freq);
-		return(-1); }
-
-#endif
-
-	incnt=0;
-	memcpy(&textsize,inbuf,sizeof(textsize));
-	incnt+=sizeof(textsize);
-	if (textsize == 0) {
-#ifdef LZH_DYNAMIC_BUF
-		FREE(lzh_text_buf);
-		FREE(lzh_prnt);
-		FREE(lzh_freq);
-		FREE(lzh_son);
-#endif
-		return(textsize); }
-	lzh_start_huff();
-	for (i = 0; i < LZH_N - LZH_F; i++)
-		*(lzh_text_buf+i) = ' ';
-	r = LZH_N - LZH_F;
-    for (count = 0; count < textsize; ) {
-		c = lzh_decode_char(inbuf,&incnt,inlen);
-		if (c < 256) {
-			outbuf[count]=c;
-#if 0
-			if(r>(LZH_N + LZH_F - 1) || r<0) {
-				printf("Overflow! (%d)\n",r);
-				getch();
-				exit(-1); }
-#endif
-			*(lzh_text_buf+r) = c;
-			r++;
-			r &= (LZH_N - 1);
-			count++;
-		} else {
-			i = (r - lzh_decode_position(inbuf,&incnt,inlen) - 1)
-				& (LZH_N - 1);
-			j = c - 255 + LZH_THRESHOLD;
-			for (k = 0; k < j && count<textsize; k++) {
-				c = lzh_text_buf[(i + k) & (LZH_N - 1)];
-				outbuf[count]=c;
-#if 0
-				if(r>(LZH_N + LZH_F - 1) || r<0) {
-					printf("Overflow! (%d)\n",r);
-					exit(-1); }
-#endif
-				*(lzh_text_buf+r) = c;
-				r++;
-				r &= (LZH_N - 1);
-				count++;
-			}
-		}
-	}
-/***
-	printf("%12ld\n", count);
-***/
-
-#ifdef LZH_DYNAMIC_BUF
-	FREE(lzh_text_buf);
-	FREE(lzh_prnt);
-	FREE(lzh_freq);
-	FREE(lzh_son);
-#endif
-
-return(count);
-}
-
-
diff --git a/src/sbbs2/fido/lzh.h b/src/sbbs2/fido/lzh.h
deleted file mode 100644
index 68a71dd90c..0000000000
--- a/src/sbbs2/fido/lzh.h
+++ /dev/null
@@ -1,5 +0,0 @@
-/* LZH.H */
-
-long lzh_encode(uchar *inbuf, long inlen, uchar *outbuf);
-long lzh_decode(uchar *inbuf, long inlen, uchar *outbuf);
-
diff --git a/src/sbbs2/fido/makeall.bat b/src/sbbs2/fido/makeall.bat
deleted file mode 100755
index d8896214fe..0000000000
--- a/src/sbbs2/fido/makeall.bat
+++ /dev/null
@@ -1,7 +0,0 @@
-@echo off
-wmake
-if errorlevel 1 goto end
-wmake OS=DOSX
-if errorlevel 1 goto end
-wmake OS=OS2
-:end
diff --git a/src/sbbs2/fido/makefile b/src/sbbs2/fido/makefile
deleted file mode 100644
index 472e9e275d..0000000000
--- a/src/sbbs2/fido/makefile
+++ /dev/null
@@ -1,78 +0,0 @@
-############################################
-# Makefile for Synchronet SBBSFIDO Utility #
-# For use with Watcom C/C++ 		   #
-############################################
-
-!ifndef OS
-OS	= DOS
-!endif
-
-!ifeq OS DOS
-CC	= *wcc
-!else
-CC	= *wcc386
-!endif
-
-LD	= *wlink
-INCLUDE = \watcom\h;..;..\smb
-!ifeq OS DOS
-CFLAGS	= -I$(INCLUDE) -fh=$*.pch -bt=$(OS) -fo=$(OS)\ -s -ml
-!else
-CFLAGS	= -I$(INCLUDE) -fh=$*.pch -bt=$(OS) -fo=$(OS)\ -s
-!endif
-
-!ifeq OS DOS
-SYSTEM  = DOS
-!endif
-!ifeq OS OS2
-SYSTEM  = OS2V2
-!endif
-!ifeq OS DOSX
-SYSTEM  = DOS4G
-!endif
-
-LFLAGS  = option stack=16k system $(SYSTEM)
-
-MAIN	= $(OS)\sbbsfido.exe
-OBJS	= $(OS)\sbbsfido.obj $(OS)\scfgvars.obj $(OS)\scfglib1.obj &
-	  $(OS)\smblib.obj $(OS)\smbvars.obj $(OS)\ars.obj $(OS)\lzh.obj
-HEADERS = ..\sbbs.h ..\sbbsdefs.h ..\scfgvars.c &
-          ..\smb\smbdefs.h ..\smb\smblib.h ..\smb\smbvars.c
-
-# Implicit C Compile Rule
-.c.obj:
-	@echo Compiling (I) $[@ to $^@ ...
-	$(CC) $(CFLAGS) $[@
-
-# Main EXE Link Rule
-$(MAIN): $(OBJS) 
-	@echo Linking $[@ ...
-        $(LD) $(LFLAGS) file { $(OBJS) }
-
-# Global Variables
-$(OS)\scfgvars.obj: ..\scfgvars.c ..\sbbsdefs.h
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) $[@
-
-# Shared Functions
-$(OS)\scfglib1.obj: ..\scfglib1.c ..\sbbs.h ..\sbbsdefs.h ..\scfgvars.c &
-		    ..\scfglib.h
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) $[@
-
-$(OS)\smblib.obj: ..\smb\smblib.c ..\smb\smblib.h ..\smb\smbdefs.h
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) $[@
-
-$(OS)\smbvars.obj: ..\smb\smbvars.c ..\smb\smblib.h ..\smb\smbdefs.h
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) $[@
-
-$(OS)\lzh.obj: ..\smb\lzh.c ..\smb\lzh.h
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) $[@
-
-$(OS)\ars.obj: ..\ars.c ..\ars_defs.h 
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) $[@
-
diff --git a/src/sbbs2/fido/makefile.bc b/src/sbbs2/fido/makefile.bc
deleted file mode 100644
index 27f1c3e387..0000000000
--- a/src/sbbs2/fido/makefile.bc
+++ /dev/null
@@ -1,88 +0,0 @@
-############################################
-# Makefile for Synchronet SBBSFIDO Utility #
-# For use with Borland C++ for DOS or OS/2 #
-############################################
-
-# Macros
-CC	= bcc
-LD	= tlink
-!ifdef __OS2__
-OS	= OS2
-INCLUDE = c:\bcos2\include;..;..\smb;..\rio
-LIB	= c:\bcos2\lib
-CFLAGS  = -d -C -I$(INCLUDE)
-LFLAGS  = -c
-!else
-OS      = DOS
-INCLUDE = \bc31\include;..;..\smb;..\rio
-LIB	= \bc31\lib
-MODEL	= l
-CFLAGS	= -d -N -C -m$(MODEL) -I$(INCLUDE)
-LFLAGS	= -n -c
-!endif
-MAIN	= $(OS)\sbbsfido.exe
-OBJS	= $(OS)\sbbsfido.obj $(OS)\scfgvars.obj $(OS)\scfglib1.obj\
-	  $(OS)\scfglib2.obj\
-	  $(OS)\smblib.obj $(OS)\smbvars.obj $(OS)\ars.obj $(OS)\lzh.obj
-HEADERS = ..\sbbs.h ..\sbbsdefs.h ..\scfgvars.c \
-          ..\smb\smbdefs.h ..\smb\smblib.h ..\smb\smbvars.c
-
-# Implicit C Compile Rule
-{.}.c.obj:
-	@echo Compiling (I) $< to $@ ...
-        $(CC) $(CFLAGS) -n$(OS) -c $<
-
-# Main EXE Link Rule
-$(MAIN): $(OBJS) 
-    	@echo Linking $< ...
-!ifdef __OS2__
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c02.obj $(OBJS)
-+, $*, $*, $(LIB)\os2.lib $(LIB)\c2.lib
-!else
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c0$(MODEL) $(OBJS)   
-+, $*, $*, $(LIB)\c$(MODEL).lib $(LIB)\math$(MODEL).lib $(LIB)\emu.lib
-!endif
-
-# Global Variables
-$(OS)\scfgvars.obj: ..\scfgvars.c ..\sbbsdefs.h
-	@echo Compiling ..\$&.c to $< ...
-	$(CC) $(CFLAGS) -c -n$(OS) ..\$&.c
-
-# Shared Functions
-$(OS)\scfglib1.obj: ..\sbbs.h ..\sbbsdefs.h ..\scfglib1.c ..\scfgvars.c
-        @echo Compiling ..\$&.c to $< ...
-        $(CC) $(CFLAGS) -c -n$(OS) @&&!
--DNO_FILE_CFG
--DNO_XTRN_CFG
--DNO_CMDS_CFG
--DNO_CHAT_CFG
-! ..\$&.c
-
-# Shared Functions
-$(OS)\scfglib2.obj: ..\sbbs.h ..\sbbsdefs.h ..\scfglib2.c ..\scfgvars.c
-        @echo Compiling ..\$&.c to $< ...
-        $(CC) $(CFLAGS) -c -n$(OS) @&&!
--DNO_FILE_CFG
--DNO_XTRN_CFG
--DNO_CMDS_CFG
--DNO_CHAT_CFG
-! ..\$&.c
-
-#$(OS)\smblib.obj: ..\smb\smblib.c ..\smb\smblib.h ..\smb\smbdefs.h
-#	@echo Compiling SMBLIB ...
-#	$(CC) $(CFLAGS) -n$(OS) -c ..\smb\smblib.c
-
-#$(OS)\smbvars.obj: ..\smb\smbvars.c ..\smb\smblib.h ..\smb\smbdefs.h
-#	@echo Compiling SMBVARS ...
-#	$(CC) $(CFLAGS) -n$(OS) -c ..\smb\smbvars.c
-
-#$(OS)\lzh.obj: ..\smb\lzh.c ..\smb\lzh.h
-#        @echo Compiling LZH ...
-#	$(CC) $(CFLAGS) -n$(OS) -c ..\smb\lzh.c
-
-$(OS)\ars.obj: ..\ars.c ..\ars_defs.h 
-        @echo Compiling ..\$&.c to $< ...
-	$(CC) $(CFLAGS) -n$(OS) -c ..\ars.c
-
diff --git a/src/sbbs2/fido/sbbsfido.c b/src/sbbs2/fido/sbbsfido.c
deleted file mode 100644
index 35ed292f76..0000000000
--- a/src/sbbs2/fido/sbbsfido.c
+++ /dev/null
@@ -1,1909 +0,0 @@
-/* SBBSFIDO.C */
-
-/* Synchronet FidoNet EchoMail Scanning/Tossing and NetMail Tossing Utility */
-
-#define VER "2.24"
-
-#include "sbbs.h"
-#include "crc32.h"
-#include "lzh.h"
-#include "post.h"
-#include "scfglib.h"
-
-#define IMPORT_NETMAIL	(1L<<0)
-#define IMPORT_ECHOMAIL (1L<<1)
-#define EXPORT_ECHOMAIL (1L<<2)
-#define DELETE_NETMAIL	(1L<<3)
-#define DELETE_ECHOMAIL (1L<<4)
-#define IGNORE_POINT	(1L<<5)
-#define IGNORE_ZONE 	(1L<<6)
-#define IGNORE_MSGPTRS	(1L<<7)
-#define UPDATE_MSGPTRS	(1L<<8)
-#define LEAVE_MSGPTRS	(1L<<9)
-#define KILL_ECHOMAIL	(1L<<10)
-#define ASCII_ONLY		(1L<<11)
-#define LOGFILE 		(1L<<12)
-#define REPORT			(1L<<13)
-#define EXPORT_ALL		(1L<<14)
-#define PURGE_ECHOMAIL	(1L<<15)
-#define UNKNOWN_NETMAIL (1L<<16)
-#define IGNORE_ADDRESS	(1L<<17)
-#define IMPORT_LOCAL	(1L<<18)
-#define IMPORT_NEW_ONLY (1L<<19)
-#define DONT_SET_RECV	(1L<<20)
-#define IGNORE_RECV 	(1L<<21)
-#define CONVERT_TEAR	(1L<<22)
-#define IMPORT_PRIVATE	(1L<<23)
-#define LOCAL_NETMAIL	(1L<<24)
-#define NOTIFY_RECEIPT	(1L<<25)
-
-char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
-char *mon[]={"Jan","Feb","Mar","Apr","May","Jun"
-            ,"Jul","Aug","Sep","Oct","Nov","Dec"};
-
-long misc=(IMPORT_NETMAIL|IMPORT_ECHOMAIL|EXPORT_ECHOMAIL
-			|DELETE_NETMAIL|DELETE_ECHOMAIL|KILL_ECHOMAIL);
-char tmp[256];
-
-FILE *fidologfile=NULL;
-#ifdef __TURBOC__
-	unsigned _stklen=20000;
-#endif
-int startmsg=1;
-int nodefile;
-
-#ifdef __WATCOMC__
-	#define O_DENYNONE SH_DENYNO
-#endif
-
-long lputs(char FAR16 *str)
-{
-    char tmp[256];
-    int i,j,k;
-
-if(misc&LOGFILE && fidologfile!=NULL)
-    fputs(str,fidologfile);
-j=strlen(str);
-for(i=k=0;i<j;i++)      /* remove CRs */
-    if(str[i]==CR && str[i+1]==LF)
-        continue;
-    else
-        tmp[k++]=str[i];
-tmp[k]=0;
-return(fputs(tmp,stdout));
-}
-
-/******************************************/
-/* CRC-16 routines required for SMB index */
-/******************************************/
-
-/****************************************************************************/
-/* Updates 16-bit "rcrc" with character 'ch'                                */
-/****************************************************************************/
-void ucrc16(uchar ch, ushort *rcrc) {
-	ushort i, cy;
-    uchar nch=ch;
- 
-for (i=0; i<8; i++) {
-    cy=*rcrc & 0x8000;
-    *rcrc<<=1;
-    if (nch & 0x80) *rcrc |= 1;
-    nch<<=1;
-    if (cy) *rcrc ^= 0x1021; }
-}
-
-/****************************************************************************/
-/* Returns 16-crc of string (not counting terminating NULL) 				*/
-/****************************************************************************/
-ushort crc16(char *str)
-{
-	int 	i=0;
-	ushort	crc=0;
-
-ucrc16(0,&crc);
-while(str[i])
-	ucrc16(str[i++],&crc);
-ucrc16(0,&crc);
-ucrc16(0,&crc);
-return(crc);
-}
-
-/****************************************************************************/
-/* Returns 32-crc of string (not counting terminating NULL) 				*/
-/****************************************************************************/
-ulong crc32(char *str)
-{
-	int i=0;
-	ulong crc=0xffffffffUL;
-
-	while(str[i])
-		crc=ucrc32(str[i++],crc);
-	crc=~crc;
-	return(crc);
-}
-
-
-
-/****************************************************************************/
-/* Performs printf() through local assembly routines                        */
-/* Called from everywhere                                                   */
-/****************************************************************************/
-int lprintf(char *fmat, ...)
-{
-	va_list argptr;
-	char sbuf[256];
-	int chcount;
-
-va_start(argptr,fmat);
-chcount=vsprintf(sbuf,fmat,argptr);
-va_end(argptr);
-lputs(sbuf);
-return(chcount);
-}
-
-/****************************************************************************/
-/* Reads the data for node number 'number' into the structure 'node'        */
-/* from NODE.DAB															*/
-/* if lockit is non-zero, locks this node's record. putnodedat() unlocks it */
-/****************************************************************************/
-void getnodedat(uint number, node_t *node, char lockit)
-{
-	char str[256];
-	int count=0;
-
-number--;	/* make zero based */
-while(count<LOOP_NODEDAB) {
-	lseek(nodefile,(long)number*sizeof(node_t),SEEK_SET);
-	if(lockit
-		&& lock(nodefile,(long)number*sizeof(node_t),sizeof(node_t))==-1) {
-		count++;
-		continue; }
-	if(read(nodefile,node,sizeof(node_t))==sizeof(node_t))
-		break;
-	count++; }
-if(count==LOOP_NODEDAB)
-	lprintf("\7Error unlocking and reading NODE.DAB\r\n");
-}
-
-/****************************************************************************/
-/* Write the data from the structure 'node' into NODE.DAB  					*/
-/* getnodedat(num,&node,1); must have been called before calling this func  */
-/*          NOTE: ------^   the indicates the node record has been locked   */
-/****************************************************************************/
-void putnodedat(uint number, node_t node)
-{
-	char str[256];
-	int count;
-
-number--;	/* make zero based */
-lseek(nodefile,(long)number*sizeof(node_t),SEEK_SET);
-if(write(nodefile,&node,sizeof(node_t))!=sizeof(node_t)) {
-	unlock(nodefile,(long)number*sizeof(node_t),sizeof(node_t));
-	lprintf("\7Error writing NODE.DAB for node %u\r\n",number+1);
-	return; }
-unlock(nodefile,(long)number*sizeof(node_t),sizeof(node_t));
-}
-
-
-/****************************************************************************/
-/* Creates a short message for 'usernumber' than contains 'strin'			*/
-/****************************************************************************/
-void putsmsg(int usernumber, char *strin)
-{
-	char str[256];
-	int file,i;
-    node_t node;
-
-sprintf(str,"%sMSGS\\%4.4u.MSG",data_dir,usernumber);
-if((file=nopen(str,O_WRONLY|O_CREAT|O_APPEND))==-1) {
-	lprintf("\7Error opening/creating %s for creat/append access\r\n",str);
-	return; }
-i=strlen(strin);
-if(write(file,strin,i)!=i) {
-	close(file);
-	lprintf("\7Error writing %u bytes to %s\r\n",i,str);
-	return; }
-close(file);
-for(i=1;i<=sys_nodes;i++) {		/* flag node if user on that msg waiting */
-	getnodedat(i,&node,0);
-	if(node.useron==usernumber
-		&& (node.status==NODE_INUSE || node.status==NODE_QUIET)
-		&& !(node.misc&NODE_MSGW)) {
-		getnodedat(i,&node,1);
-		node.misc|=NODE_MSGW;
-        putnodedat(i,node); } }
-}
-
-
-/****************************************************************************/
-/* Converts an ASCII Hex string into an ulong                       */
-/****************************************************************************/
-ulong ahtoul(char *str)
-{
-	ulong l,val=0;
-
-while((l=(*str++)|0x20)!=0x20)
-	val=(l&0xf)+(l>>6&1)*9+val*16;
-return(val);
-}
-
-/****************************************************************************/
-/* Truncates white-space chars off end of 'str' and terminates at first tab */
-/****************************************************************************/
-void truncsp(char *str)
-{
-	char c;
-
-str[strcspn(str,"\t")]=0;
-c=strlen(str);
-while(c && str[c-1]<=SP) c--;
-str[c]=0;
-}
-
-/****************************************************************************/
-/* Puts a backslash on path strings 										*/
-/****************************************************************************/
-void backslash(char *str)
-{
-    int i;
-
-i=strlen(str);
-if(i && str[i-1]!='\\') {
-    str[i]='\\'; str[i+1]=0; }
-}
-
-void remove_re(char *str)
-{
-while(!strnicmp(str,"RE:",3)) {
-	strcpy(str,str+3);
-	while(str[0]==SP)
-		strcpy(str,str+1); }
-}
-
-/****************************************************************************/
-/* Network open function. Opens all files DENYALL and retries LOOP_NOPEN    */
-/* number of times if the attempted file is already open or denying access	*/
-/* for some other reason.	All files are opened in BINARY mode.			*/
-/****************************************************************************/
-int nopen(char *str, int access)
-{
-	char logstr[256];
-	int file,share,count=0;
-
-if(access&O_DENYNONE) {
-	share=SH_DENYNO;
-	access&=~O_DENYNONE; }
-else if(access==O_RDONLY) share=SH_DENYWR;
-else share=SH_DENYRW;
-while(((file=sopen(str,O_BINARY|access,share,S_IWRITE))==-1)
-	&& errno==EACCES && count++<LOOP_NOPEN);
-if(file==-1 && errno==EACCES)
-	lputs("\7\r\nNOPEN: ACCESS DENIED\r\n\7");
-return(file);
-}
-
-/****************************************************************************/
-/* This function performs an nopen, but returns a file stream with a buffer */
-/* allocated.																*/
-/****************************************************************************/
-FILE *fnopen(int *file, char *str, int access)
-{
-	char mode[128];
-	FILE *stream;
-
-if(((*file)=nopen(str,access))==-1)
-	return(NULL);
-
-if(access&O_APPEND) {
-	if(access&O_RDONLY)
-		strcpy(mode,"a+");
-	else
-		strcpy(mode,"a"); }
-else {
-	if(access&O_WRONLY)
-		strcpy(mode,"r+");
-	else
-		strcpy(mode,"r"); }
-stream=fdopen((*file),mode);
-if(stream==NULL) {
-	close(*file);
-	return(NULL); }
-setvbuf(stream,NULL,_IOFBF,16*1024);
-return(stream);
-}
-
-
-/****************************************************************************/
-/* Moves or copies a file from one dir to another                           */
-/* both 'src' and 'dest' must contain full path and filename                */
-/* returns 0 if successful, -1 if error                                     */
-/****************************************************************************/
-int mv(char *src, char *dest, char copy)
-{
-	char buf[4096],str[256];
-	int  ind,outd;
-	long length,chunk=4096,l;
-	ushort ftime,fdate;
-    FILE *inp,*outp;
-
-if(!strcmp(src,dest))	/* source and destination are the same! */
-	return(0);
-if(!fexist(src)) {
-	lprintf("\r\nMV ERROR: Source doesn't exist\r\n'%s'\r\n"
-		,src);
-	return(-1); }
-if(!copy && fexist(dest)) {
-	lprintf("\r\nMV ERROR: Destination already exists\r\n'%s'\r\n"
-		,dest);
-	return(-1); }
-if(!copy && ((src[1]!=':' && dest[1]!=':')
-	|| (src[1]==':' && dest[1]==':' && toupper(src[0])==toupper(dest[0])))) {
-	if(rename(src,dest)) {						/* same drive, so move */
-		lprintf("\r\nMV ERROR: Error renaming '%s'"
-				"\r\n                      to '%s'\r\n",src,dest);
-		return(-1); }
-	return(0); }
-if((ind=nopen(src,O_RDONLY))==-1) {
-	lprintf("\r\nMV ERROR: ERR_OPEN %s\r\n",src);
-	return(-1); }
-if((inp=fdopen(ind,"rb"))==NULL) {
-	close(ind);
-	lprintf("\r\nMV ERROR: ERR_FDOPEN %s\r\n",str);
-	return(-1); }
-setvbuf(inp,NULL,_IOFBF,8*1024);
-if((outd=nopen(dest,O_WRONLY|O_CREAT|O_TRUNC))==-1) {
-	fclose(inp);
-	lprintf("\r\nMV ERROR: ERR_OPEN %s\r\n",dest);
-	return(-1); }
-if((outp=fdopen(outd,"wb"))==NULL) {
-	close(outd);
-	fclose(inp);
-	lprintf("\r\nMV ERROR: ERR_FDOPEN %s\r\n",str);
-	return(-1); }
-setvbuf(outp,NULL,_IOFBF,8*1024);
-length=filelength(ind);
-l=0L;
-while(l<length) {
-	if(l+chunk>length)
-		chunk=length-l;
-	fread(buf,chunk,1,inp);
-	fwrite(buf,chunk,1,outp);
-	l+=chunk; }
-_dos_getftime(ind,&fdate,&ftime);
-_dos_setftime(outd,fdate,ftime);
-fclose(inp);
-fclose(outp);
-if(!copy && remove(src)) {
-	lprintf("MV ERROR: ERR_REMOVE %s\r\n",src);
-	return(-1); }
-return(0);
-}
-
-/****************************************************************************/
-/* Returns the total number of msgs in the sub-board and sets 'ptr' to the  */
-/* date of the last message in the sub (0) if no messages.					*/
-/****************************************************************************/
-ulong getlastmsg(uint subnum, ulong *ptr, time_t *t)
-{
-	char str[256];
-	int i;
-	smbstatus_t status;
-
-sprintf(smb_file,"%s%s",sub[subnum]->data_dir,sub[subnum]->code);
-if((i=smb_open(10))!=0) {
-	lprintf("ERR_OPEN %s %d\r\n",smb_file,i);
-	return(0); }
-
-if(!filelength(fileno(shd_fp))) {			/* Empty base */
-	if(ptr) (*ptr)=0;
-	smb_close();
-	return(0); }
-if((i=smb_locksmbhdr(10))!=0) {
-	smb_close();
-	lprintf("ERR_LOCK %s %d\r\n",smb_file,i);
-	return(0); }
-if((i=smb_getstatus(&status))!=0) {
-	smb_unlocksmbhdr();
-	smb_close();
-	lprintf("ERR_READ %s %d\r\n",smb_file,i);
-	return(0); }
-smb_unlocksmbhdr();
-smb_close();
-if(ptr) (*ptr)=status.last_msg;
-return(status.total_msgs);
-}
-
-
-ulong loadmsgs(post_t HUGE16 **post, ulong ptr)
-{
-	int i;
-	long l=0;
-	idxrec_t idx;
-
-
-if((i=smb_locksmbhdr(10))!=0) { 				/* Be sure noone deletes or */
-	lprintf("ERR_LOCK %s %d\r\n",smb_file,i);   /* adds while we're reading */
-	return(0L); }
-
-fseek(sid_fp,0L,SEEK_SET);
-while(!feof(sid_fp)) {
-    if(!fread(&idx,sizeof(idxrec_t),1,sid_fp))
-        break;
-
-	if(idx.number<=ptr || idx.attr&MSG_DELETE)
-		continue;
-
-	if(idx.attr&MSG_MODERATED && !(idx.attr&MSG_VALIDATED))
-		break;
-
-	if(((*post)=(post_t HUGE16 *)REALLOC((*post),sizeof(post_t)*(l+1)))
-        ==NULL) {
-		smb_unlocksmbhdr();
-		lprintf("ERR_ALLOC %s %lu\r\n",smb_file,sizeof(post_t *)*(l+1));
-		return(l); }
-	(*post)[l].offset=idx.offset;
-	(*post)[l].number=idx.number;
-	l++; }
-smb_unlocksmbhdr();
-return(l);
-}
-
-
-void allocfail(uint size)
-{
-lprintf("\7Error allocating %u bytes of memory.\r\n",size);
-bail(1);
-}
-
-void bail(int code)
-{
-exit(code);
-}
-
-/****************************************************************************/
-/* Returns the length of the file in 'filespec'                             */
-/****************************************************************************/
-long flength(char *filespec)
-{
-	struct find_t f;
-
-if(!findfirst(filespec,&f,0))
-	return(f.size);
-return(-1L);
-}
-
-/****************************************************************************/
-/* Checks the disk drive for the existence of a file. Returns 1 if it       */
-/* exists, 0 if it doesn't.                                                 */
-/* Called from upload                                                       */
-/****************************************************************************/
-char fexist(char *filespec)
-{
-	struct find_t f;
-
-if(!findfirst(filespec,&f,0))
-    return(1);
-return(0);
-}
-
-typedef struct {
-	ulong	alias,
-			real;
-			} username_t;
-
-/****************************************************************************/
-/* Note: Wrote another version of this function that read all userdata into */
-/****************************************************************************/
-/* Looks for a perfect match amoung all usernames (not deleted users)		*/
-/* Returns the number of the perfect matched username or 0 if no match		*/
-/* Called from functions waitforcall and newuser							*/
-/* memory then scanned it from memory... took longer - always.              */
-/****************************************************************************/
-ulong matchname(char *inname)
-{
-	static ulong total_users;
-	static username_t *username;
-	int userdat,file,i;
-	char str[256],c;
-	ulong l,crc;
-	FILE *namedat;
-
-if(!total_users) {		/* Load CRCs */
-	fprintf(stderr,"%-25s","Loading user names...");
-	sprintf(str,"%sUSER\\NAME.DAT",data_dir);
-	if((namedat=fnopen(&file,str,O_RDONLY))==NULL)
-		return(0);
-	sprintf(str,"%sUSER\\USER.DAT",data_dir);
-	if((userdat=nopen(str,O_RDONLY|O_DENYNONE))==-1) {
-		fclose(namedat);
-		return(0); }
-	while(!feof(namedat) && !eof(userdat)) {
-		if(!fread(str,LEN_ALIAS+2,1,namedat))
-			break;
-		if((username=(username_t *)REALLOC(username
-			,(total_users+1)*sizeof(username_t)))==NULL)
-			break;
-
-		for(c=0;c<LEN_ALIAS;c++)
-			if(str[c]==ETX) break;
-		str[c]=0;
-		strlwr(str);
-		username[total_users].alias=crc32(str);
-		i=0;
-		while(i<LOOP_NODEDAB
-			&& lock(userdat,(long)((long)(total_users)*U_LEN)+U_NAME
-				,LEN_NAME)==-1) {
-			i++; }
-		if(i>=LOOP_NODEDAB) 	   /* Couldn't lock USER.DAT record */
-			continue;
-		lseek(userdat,(long)((long)(total_users)*U_LEN)+U_NAME,SEEK_SET);
-		read(userdat,str,LEN_NAME);
-		unlock(userdat,(long)((long)(total_users)*U_LEN)+U_NAME,LEN_NAME);
-		for(c=0;c<LEN_NAME;c++)
-			if(str[c]==ETX || str[c]==CR) break;
-		str[c]=0;
-		strlwr(str);
-		username[total_users].real=crc32(str);
-		total_users++; }
-	fclose(namedat);
-	close(userdat);
-	fprintf(stderr,
-		"\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"
-		"%25s"
-		"\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"
-		,""); }
-
-strcpy(str,inname);
-strlwr(str);
-crc=crc32(str);
-for(l=0;l<total_users;l++)
-	if(crc==username[l].alias || crc==username[l].real)
-		return(l+1);
-return(0);
-}
-
-/****************************************************************************/
-/* Converts goofy FidoNet time format into Unix format						*/
-/****************************************************************************/
-time_t fmsgtime(char *str)
-{
-	char month[4];
-	struct tm tm;
-
-memset(&tm,0,sizeof(tm));
-if(isdigit(str[1])) {	/* Regular format: "01 Jan 86  02:34:56" */
-	tm.tm_mday=atoi(str);
-	sprintf(month,"%3.3s",str+3);
-	if(!stricmp(month,"jan"))
-		tm.tm_mon=0;
-	else if(!stricmp(month,"feb"))
-		tm.tm_mon=1;
-	else if(!stricmp(month,"mar"))
-		tm.tm_mon=2;
-	else if(!stricmp(month,"apr"))
-		tm.tm_mon=3;
-	else if(!stricmp(month,"may"))
-		tm.tm_mon=4;
-	else if(!stricmp(month,"jun"))
-		tm.tm_mon=5;
-	else if(!stricmp(month,"jul"))
-		tm.tm_mon=6;
-	else if(!stricmp(month,"aug"))
-		tm.tm_mon=7;
-	else if(!stricmp(month,"sep"))
-		tm.tm_mon=8;
-	else if(!stricmp(month,"oct"))
-		tm.tm_mon=9;
-	else if(!stricmp(month,"nov"))
-		tm.tm_mon=10;
-	else
-		tm.tm_mon=11;
-	tm.tm_year=atoi(str+7);
-	tm.tm_hour=atoi(str+11);
-	tm.tm_min=atoi(str+14);
-	tm.tm_sec=atoi(str+17); }
-
-else {					/* SEAdog  format: "Mon  1 Jan 86 02:34" */
-	tm.tm_mday=atoi(str+4);
-	sprintf(month,"%3.3s",str+7);
-	if(!stricmp(month,"jan"))
-		tm.tm_mon=0;
-	else if(!stricmp(month,"feb"))
-		tm.tm_mon=1;
-	else if(!stricmp(month,"mar"))
-		tm.tm_mon=2;
-	else if(!stricmp(month,"apr"))
-		tm.tm_mon=3;
-	else if(!stricmp(month,"may"))
-		tm.tm_mon=4;
-	else if(!stricmp(month,"jun"))
-		tm.tm_mon=5;
-	else if(!stricmp(month,"jul"))
-		tm.tm_mon=6;
-	else if(!stricmp(month,"aug"))
-		tm.tm_mon=7;
-	else if(!stricmp(month,"sep"))
-		tm.tm_mon=8;
-	else if(!stricmp(month,"oct"))
-		tm.tm_mon=9;
-	else if(!stricmp(month,"nov"))
-		tm.tm_mon=10;
-	else
-		tm.tm_mon=11;
-	tm.tm_year=atoi(str+11);
-	tm.tm_hour=atoi(str+14);
-	tm.tm_min=atoi(str+17);
-	tm.tm_sec=0; }
-
-if(tm.tm_year<70)
-	tm.tm_year+=100;
-
-return(mktime(&tm));
-}
-
-/****************************************************************************/
-/* Returns the FidoNet address kept in str as ASCII.                        */
-/****************************************************************************/
-faddr_t atofaddr(char *str)
-{
-    char *p;
-    faddr_t addr;
-
-addr.zone=addr.net=addr.node=addr.point=0;
-if((p=strchr(str,':'))!=NULL) {
-    addr.zone=atoi(str);
-    addr.net=atoi(p+1); }
-else {
-    if(total_faddrs)
-		addr.zone=faddr[0].zone;
-    else
-        addr.zone=1;
-    addr.net=atoi(str); }
-if(!addr.zone)              /* no such thing as zone 0 */
-    addr.zone=1;
-if((p=strchr(str,'/'))!=NULL)
-    addr.node=atoi(p+1);
-else {
-    if(total_faddrs)
-		addr.net=faddr[0].net;
-    else
-        addr.net=1;
-    addr.node=atoi(str); }
-if((p=strchr(str,'.'))!=NULL)
-    addr.point=atoi(p+1);
-return(addr);
-}
-
-/****************************************************************************/
-/* Returns an ASCII string for FidoNet address 'addr'                       */
-/****************************************************************************/
-char *faddrtoa(faddr_t addr)
-{
-    static char str[25];
-    char point[25];
-
-sprintf(str,"%u:%u/%u",addr.zone,addr.net,addr.node);
-if(addr.point) {
-    sprintf(point,".%u",addr.point);
-    strcat(str,point); }
-return(str);
-}
-
-#ifndef __OS2__
-/****************************************************************************/
-/* This function reads files that are potentially larger than 32k.  		*/
-/* Up to one megabyte of data can be read with each call.                   */
-/****************************************************************************/
-long lread(int file, char HUGE16 *buf,long bytes)
-{
-	long count;
-
-for(count=bytes;count>32767;count-=32767,buf+=32767)
-	if(read(file,(char *)buf,32767)!=32767)
-		return(-1L);
-if(read(file,(char *)buf,(int)count)!=count)
-	return(-1L);
-return(bytes);
-}
-#endif
-
-/****************************************************************************/
-/* Coverts a FidoNet message into a Synchronet message						*/
-/****************************************************************************/
-void fmsgtosmsg(int file, fmsghdr_t fmsghdr, smbstatus_t status, uint user
-	,uint subnum)
-{
-	uchar	ch,HUGE16 *fbuf,HUGE16 *sbody,HUGE16 *stail,HUGE16 *outbuf
-			,done,col,esc,cr,*p,str[128];
-	int 	i,chunk,lzh=0,storage;
-	ushort	xlat,net;
-	ulong	l,m,length,lzhlen,bodylen,taillen,crc;
-	faddr_t faddr,origaddr,destaddr;
-	smbmsg_t	msg;
-
-memset(&msg,0,sizeof(smbmsg_t));
-memcpy(msg.hdr.id,"SHD\x1a",4);
-msg.hdr.version=SMB_VERSION;
-if(fmsghdr.attr&FIDO_PRIVATE)
-	msg.idx.attr|=MSG_PRIVATE;
-msg.hdr.attr=msg.idx.attr;
-
-if(fmsghdr.attr&FIDO_FILE)
-	msg.hdr.auxattr|=MSG_FILEATTACH;
-
-msg.hdr.when_imported.time=time(NULL);
-msg.hdr.when_imported.zone=sys_timezone;
-msg.hdr.when_written.time=fmsgtime(fmsghdr.time);
-
-origaddr.zone=fmsghdr.origzone; 	/* only valid if NetMail */
-origaddr.net=fmsghdr.orignet;
-origaddr.node=fmsghdr.orignode;
-origaddr.point=fmsghdr.origpoint;
-
-destaddr.zone=fmsghdr.destzone; 	/* only valid if NetMail */
-destaddr.net=fmsghdr.destnet;
-destaddr.node=fmsghdr.destnode;
-destaddr.point=fmsghdr.destpoint;
-
-smb_hfield(&msg,SENDER,strlen(fmsghdr.from),fmsghdr.from);
-strlwr(fmsghdr.from);
-msg.idx.from=crc16(fmsghdr.from);
-
-smb_hfield(&msg,RECIPIENT,strlen(fmsghdr.to),fmsghdr.to);
-strlwr(fmsghdr.to);
-msg.idx.to=crc16(fmsghdr.to);
-
-if(user) {
-	sprintf(str,"%u",user);
-	smb_hfield(&msg,RECIPIENTEXT,strlen(str),str);
-	msg.idx.to=user;
-	msg.idx.from=0; }
-
-smb_hfield(&msg,SUBJECT,strlen(fmsghdr.subj),fmsghdr.subj);
-remove_re(fmsghdr.subj);
-strlwr(fmsghdr.subj);
-msg.idx.subj=crc16(fmsghdr.subj);
-
-length=filelength(file)-sizeof(fmsghdr_t);
-if((fbuf=(char *)LMALLOC(length+1))==NULL) {
-	printf("alloc error\r\n");
-	smb_freemsgmem(msg);
-	return; }
-if((sbody=(char *)LMALLOC((length+1)*2L))==NULL) {
-	printf("alloc error\n");
-	LFREE((char *)fbuf);
-	smb_freemsgmem(msg);
-	return; }
-if((stail=(char *)LMALLOC((length+1)*2L))==NULL) {
-	printf("alloc error\n");
-	LFREE((char *)fbuf);
-	LFREE((char *)sbody);
-	smb_freemsgmem(msg);
-	return; }
-lread(file,fbuf,length);
-
-for(col=l=esc=done=bodylen=taillen=0,cr=1;l<length;l++) {
-	ch=fbuf[l];
-	if(ch==1 && cr) {	/* kludge line */
-
-		if(!strncmp((char *)fbuf+l+1,"TOPT ",5))
-			destaddr.point=atoi((char *)fbuf+l+6);
-
-		else if(!strncmp((char *)fbuf+l+1,"FMPT ",5))
-			origaddr.point=atoi((char *)fbuf+l+6);
-
-		else if(!strncmp((char *)fbuf+l+1,"INTL ",5)) {
-			faddr=atofaddr((char *)fbuf+l+6);
-			destaddr.zone=faddr.zone;
-			destaddr.net=faddr.net;
-			destaddr.node=faddr.node;
-			l+=6;
-			while(l<length && fbuf[l]!=SP) l++;
-			faddr=atofaddr((char *)fbuf+l+1);
-			origaddr.zone=faddr.zone;
-			origaddr.net=faddr.net;
-			origaddr.node=faddr.node; }
-
-		else if(!strncmp((char *)fbuf+l+1,"MSGID:",6)) {
-			l+=7;
-			while(l<length && fbuf[l]<=SP) l++;
-			m=l;
-			while(m<length && fbuf[m]!=CR) m++;
-			while(m && fbuf[m-1]<=SP) m--;
-			if(m>l)
-				smb_hfield(&msg,FIDOMSGID,m-l,fbuf+l); }
-
-		else if(!strncmp((char *)fbuf+l+1,"REPLY:",6)) {
-			l+=7;
-			while(l<length && fbuf[l]<=SP) l++;
-			m=l;
-			while(m<length && fbuf[m]!=CR) m++;
-			while(m && fbuf[m-1]<=SP) m--;
-			if(m>l)
-				smb_hfield(&msg,FIDOREPLYID,m-l,fbuf+l); }
-
-		else if(!strncmp((char *)fbuf+l+1,"FLAGS:",6)) {
-			l+=7;
-			while(l<length && fbuf[l]<=SP) l++;
-			m=l;
-			while(m<length && fbuf[m]!=CR) m++;
-			while(m && fbuf[m-1]<=SP) m--;
-			if(m>l)
-				smb_hfield(&msg,FIDOFLAGS,m-l,fbuf+l); }
-
-		else if(!strncmp((char *)fbuf+l+1,"PATH:",5)) {
-			l+=6;
-			while(l<length && fbuf[l]<=SP) l++;
-			m=l;
-			while(m<length && fbuf[m]!=CR) m++;
-			while(m && fbuf[m-1]<=SP) m--;
-			if(m>l)
-				smb_hfield(&msg,FIDOPATH,m-l,fbuf+l); }
-
-		else if(!strncmp((char *)fbuf+l+1,"PID:",4)) {
-			l+=5;
-			while(l<length && fbuf[l]<=SP) l++;
-			m=l;
-			while(m<length && fbuf[m]!=CR) m++;
-			while(m && fbuf[m-1]<=SP) m--;
-			if(m>l)
-				smb_hfield(&msg,FIDOPID,m-l,fbuf+l); }
-
-		else {		/* Unknown kludge line */
-			while(l<length && fbuf[l]<=SP) l++;
-			m=l;
-			while(m<length && fbuf[m]!=CR) m++;
-			while(m && fbuf[m-1]<=SP) m--;
-			if(m>l)
-				smb_hfield(&msg,FIDOCTRL,m-l,fbuf+l); }
-
-		while(l<length && fbuf[l]!=CR) l++;
-		continue; }
-
-	if(ch!=LF && ch!=0x8d) {	/* ignore LF and soft CRs */
-		if(cr && (!strncmp((char *)fbuf+l,"--- ",4)
-			|| !strncmp((char *)fbuf+l,"---\r",4)))
-			done=1; 			/* tear line and down go into tail */
-		if(done && cr && !strncmp((char *)fbuf+l,"SEEN-BY:",8)) {
-			l+=8;
-			while(l<length && fbuf[l]<=SP) l++;
-			m=l;
-			while(m<length && fbuf[m]!=CR) m++;
-			while(m && fbuf[m-1]<=SP) m--;
-			if(m>l)
-				smb_hfield(&msg,FIDOSEENBY,m-l,fbuf+l);
-			while(l<length && fbuf[l]!=CR) l++;
-			continue; }
-		if(done)
-			stail[taillen++]=ch;
-		else
-			sbody[bodylen++]=ch;
-		col++;
-		if(ch==CR) {
-			cr=1;
-			col=0;
-			if(done)
-				stail[taillen++]=LF;
-			else
-				sbody[bodylen++]=LF; }
-		else {
-			cr=0;
-			if(col==1 && !strncmp((char *)fbuf+l," * Origin: ",11)) {
-				p=strchr((char *)fbuf+l+11,CR); 	 /* find carriage return */
-				while(p && *p!='(') p--;     /* rewind to '(' */
-				if(p)
-					origaddr=atofaddr(p+1); 	/* get orig address */
-				done=1; }
-			if(done)
-				continue;
-
-			if(ch==ESC) esc=1;		/* ANSI codes */
-			if(ch==SP && col>40 && !esc) {	/* word wrap */
-				for(m=l+1;m<length;m++) 	/* find next space */
-					if(fbuf[m]<=SP)
-						break;
-				if(m<length && m-l>80-col) {  /* if it's beyond the eol */
-					sbody[bodylen++]=CR;
-					sbody[bodylen++]=LF;
-					col=0; } }
-			} } }
-
-LFREE(fbuf);
-
-if(bodylen>=2 && sbody[bodylen-2]==CR && sbody[bodylen-1]==LF)
-	bodylen-=2; 						/* remove last CRLF if present */
-
-if(status.max_crcs) {
-	for(l=0,crc=0xffffffff;l<bodylen;l++)
-		crc=ucrc32(sbody[l],crc);
-	crc=~crc;
-
-	i=smb_addcrc(status.max_crcs,crc,10);
-	if(i) {
-		if(i==1)
-			lprintf("Duplicate message\r\n");
-		else
-			lprintf("smb_addcrc returned %d\r\n",i);
-		smb_freemsgmem(msg);
-		LFREE(sbody);
-		LFREE(stail);
-		return; } }
-
-while(taillen && stail[taillen-1]<=SP)	/* trim all garbage off the tail */
-	taillen--;
-
-net=NET_FIDO;	/* Record origin address */
-smb_hfield(&msg,SENDERNETTYPE,sizeof(ushort),&net);
-smb_hfield(&msg,SENDERNETADDR,sizeof(fidoaddr_t),&origaddr);
-
-if(subnum==INVALID_SUB) { /* No origin line means NetMail, so add dest addr */
-	smb_hfield(&msg,RECIPIENTNETTYPE,sizeof(ushort),&net);
-	smb_hfield(&msg,RECIPIENTNETADDR,sizeof(fidoaddr_t),&destaddr); }
-
-if(subnum!=INVALID_SUB && sub[subnum]->misc&SUB_LZH
-	&& bodylen+2+taillen+2>=SDT_BLOCK_LEN && bodylen) {
-	if((outbuf=(char *)LMALLOC(bodylen*2))==NULL) {
-		printf("alloc error for lzh: %lu\n",bodylen*2);
-		smb_freemsgmem(msg);
-		LFREE(sbody);
-		LFREE(stail);
-		return; }
-	lzhlen=lzh_encode((uchar *)sbody,bodylen,(uchar *)outbuf);
-	if(lzhlen>1 &&
-		smb_datblocks(lzhlen+4+taillen+2)<smb_datblocks(bodylen+2+taillen+2)) {
-		bodylen=lzhlen; 	/* Compressable */
-		l=bodylen+4;
-		LFREE(sbody);
-		lzh=1;
-		sbody=outbuf; }
-	else {					/* Uncompressable */
-		l=bodylen+2;
-		LFREE(outbuf); } }
-else
-	l=bodylen+2;
-
-if(taillen)
-	l+=(taillen+2);
-
-
-if(status.attr&SMB_HYPERALLOC) {
-	if((i=smb_locksmbhdr(10))!=0) {
-		printf("smb_locksmbhdr returned %d\n",i);
-		smb_freemsgmem(msg);
-		LFREE(sbody);
-		LFREE(stail);
-		return; }
-	msg.hdr.offset=smb_hallocdat();
-	storage=SMB_HYPERALLOC; }
-else {
-	if(smb_open_da(10)) {
-		smb_freemsgmem(msg);
-		printf("error opening %s.SDA\r\n",smb_file);
-		LFREE(sbody);
-		LFREE(stail);
-		return; }
-	if(subnum!=INVALID_SUB && sub[subnum]->misc&SUB_FAST) {
-		msg.hdr.offset=smb_fallocdat(l,1);
-		storage=SMB_FASTALLOC; }
-	else {
-		msg.hdr.offset=smb_allocdat(l,1);
-		storage=SMB_SELFPACK; }
-	fclose(sda_fp); }
-
-if(msg.hdr.offset && msg.hdr.offset<1L) {
-	smb_unlocksmbhdr();
-	smb_freemsgmem(msg);
-	LFREE(sbody);
-	LFREE(stail);
-	printf("error %ld allocating records\r\n",msg.hdr.offset);
-	return; }
-fseek(sdt_fp,msg.hdr.offset,SEEK_SET);
-if(lzh) {
-	xlat=XLAT_LZH;
-	fwrite(&xlat,2,1,sdt_fp); }
-xlat=XLAT_NONE;
-fwrite(&xlat,2,1,sdt_fp);
-chunk=30000;
-for(l=0;l<bodylen;l+=chunk) {
-	if(l+chunk>bodylen)
-		chunk=bodylen-l;
-	fwrite(sbody+l,1,chunk,sdt_fp); }
-if(taillen) {
-	fwrite(&xlat,2,1,sdt_fp);
-	fwrite(stail,1,taillen,sdt_fp); }
-fflush(sdt_fp);
-LFREE(sbody);
-LFREE(stail);
-
-if(status.attr&SMB_HYPERALLOC)
-	smb_unlocksmbhdr();
-
-if(lzh)
-	bodylen+=2;
-bodylen+=2;
-smb_dfield(&msg,TEXT_BODY,bodylen);
-if(taillen)
-	smb_dfield(&msg,TEXT_TAIL,taillen+2);
-
-smb_addmsghdr(&msg,&status,storage,10);
-smb_freemsgmem(msg);
-}
-
-/****************************************************************/
-/* Get zone and point from kludge lines in 'file' if they exist */
-/****************************************************************/
-void getzpt(int file, fmsghdr_t *hdr)
-{
-	char buf[0x1000];
-	int i,len,cr=0;
-	faddr_t faddr;
-
-len=read(file,buf,0x1000);
-for(i=0;i<len;i++) {
-	if((!i || cr) && buf[i]==1) {	/* kludge */
-		if(!strncmp(buf+i+1,"TOPT ",5))
-			hdr->destpoint=atoi(buf+i+6);
-		else if(!strncmp(buf+i+1,"FMPT ",5))
-			hdr->origpoint=atoi(buf+i+6);
-		else if(!strncmp(buf+i+1,"INTL ",5)) {
-			faddr=atofaddr(buf+i+6);
-			hdr->destzone=faddr.zone;
-			hdr->destnet=faddr.net;
-			hdr->destnode=faddr.node;
-			i+=6;
-			while(buf[i] && buf[i]!=SP) i++;
-			faddr=atofaddr(buf+i+1);
-			hdr->origzone=faddr.zone;
-			hdr->orignet=faddr.net;
-			hdr->orignode=faddr.node; }
-		while(i<len && buf[i]!=CR) i++;
-		cr=1;
-		continue; }
-	if(buf[i]==CR)
-		cr=1;
-	else
-		cr=0; }
-lseek(file,sizeof(fmsghdr_t),SEEK_SET);
-}
-
-/***********************************/
-/* Synchronet/FidoNet Message util */
-/***********************************/
-int main(int argc, char **argv)
-{
-	char	ch,str[512],fname[256],touser[512],subj[512],path[512],sub_code[9]
-			,*p,*tp,*sp,*buf,*outbuf,cr,tear,lzh;
-	ushort	xlat;
-	int 	i,j,k,n,x,last,file,fmsg,nextmsg,g;
-	ulong	files,msgfiles,echomail=0,netmail=0,exported=0,crc,
-			l,m,length,lastmsg,posts,msgs,exp;
-	time_t	ptr,now,start,lastimport;
-	read_cfg_text_t txt;
-	struct	find_t ff;
-	struct	tm tm,*tm_p;
-	fmsghdr_t hdr;
-	faddr_t addr,sys_faddr;
-	post_t	HUGE16 *post;
-	FILE	*stream,*fstream;
-	smbstatus_t status;
-	smbmsg_t msg;
-
-lprintf("\nSynchronet <=> FidoNet Utility  Version %s  "
-	"Developed by Rob Swindell\n",VER);
-
-putenv("TZ=UCT0");
-_fmode=O_BINARY;
-setvbuf(stdout,NULL,_IONBF,0);
-
-txt.openerr="\7\r\nError opening %s for read.\r\n";
-txt.reading="\r\nReading %s...";
-txt.readit="\rRead %s       ";
-txt.allocerr="\7\r\nError allocating %u bytes of memory\r\n";
-txt.error="\7\r\nERROR: Offset %lu in %s\r\n\r\n";
-
-node_dir[0]=sub_code[0]=0;
-for(i=1;i<argc;i++) {
-	if(argv[i][0]=='/') {
-		j=1;
-		while(argv[i][j]) {
-			switch(toupper(argv[i][j])) {
-				case 'A':
-                    misc|=ASCII_ONLY;
-                    break;
-				case 'B':
-					misc|=LOCAL_NETMAIL;
-					break;
-				case 'C':
-                    misc|=PURGE_ECHOMAIL;
-                    break;
-				case 'D':
-                    misc&=~DELETE_NETMAIL;
-                    break;
-				case 'E':
-                    misc&=~EXPORT_ECHOMAIL;
-                    break;
-				case 'F':
-                    misc|=IMPORT_LOCAL;
-                    break;
-				case 'G':
-                    misc|=IMPORT_NEW_ONLY;
-                    break;
-				case 'H':
-                    misc|=EXPORT_ALL;
-                    break;
-				case 'I':
-                    misc&=~IMPORT_ECHOMAIL;
-                    break;
-                case 'J':
-                    misc|=IGNORE_RECV;
-                    break;
-				case 'K':
-                    misc&=~KILL_ECHOMAIL;
-                    break;
-                case 'L':
-                    misc|=LOGFILE;
-                    break;
-				case 'M':
-                    misc|=IGNORE_MSGPTRS;
-                    break;
-				case 'N':
-					misc&=~IMPORT_NETMAIL;
-					break;
-				case 'O':
-                    misc|=IGNORE_ADDRESS;
-                    break;
-				case 'P':
-					misc|=IGNORE_POINT;
-					break;
-				case 'Q':
-					misc|=DONT_SET_RECV;
-					break;
-				case 'R':
-                    misc|=REPORT;
-                    break;
-				case 'S':
-                    misc|=IMPORT_PRIVATE;
-                    break;
-				case 'T':
-                    misc|=LEAVE_MSGPTRS;
-                    break;
-                case 'U':
-                    misc|=UPDATE_MSGPTRS;
-                    misc&=~EXPORT_ECHOMAIL;
-                    break;
-				case 'X':
-                    misc&=~DELETE_ECHOMAIL;
-                    break;
-                case 'Y':
-                    misc|=UNKNOWN_NETMAIL;
-                    break;
-				case 'Z':
-                    misc|=IGNORE_ZONE;
-                    break;
-
-				case '=':
-					misc|=CONVERT_TEAR;
-					break;
-				case '!':
-					misc|=NOTIFY_RECEIPT;
-					break;
-				case '2':
-					startmsg=2;
-					break;
-				default:
-					printf("\nusage: sbbsfido [sbbsnode] [/switches] "
-						"[sub_code]");
-					printf("\nwhere: sbbsnode is the path for your "
-						"NODE1 directory (example: c:\\sbbs\\node1)\n");
-					printf("       sub_code is the internal code for a "
-						"sub-board (default is ALL subs)\n");
-					printf("\nvalid switches:\n\n");
-					printf("n:do not import netmail               "
-						   "i:do not import echomail\n");
-					printf("p:ignore point in netmail address     "
-						   "e:do not export echomail\n");
-					printf("z:ignore zone in netmail address      "
-						   "h:export all echomail (hub rescan)\n");
-					printf("o:ignore entire netmail address       "
-						   "m:ignore message pointers (export all)\n");
-					printf("y:import netmail for unknown users    "
-						   "u:update message pointers (export none)\n");
-					printf("d:do not delete netmail after import  "
-						   "x:do not delete echomail after import\n");
-					printf("l:output to SBBSFIDO.LOG (verbose)    "
-						   "k:do not kill echomail after export\n");
-					printf("r:create report of import totals      "
-						   "t:do not update message pointers\n");
-					printf("a:export ASCII characters only        "
-						   "c:delete all messages (echomail purge)\n");
-					printf("j:ignore recieved bit on import       "
-						   "s:import private override (strip pvt)\n");
-					printf("q:do not set received bit on import   "
-                           "g:import new echomail only\n");
-					printf("b:import locally created netmail too  "
-                           "f:import locally created echomail too\n");
-					printf("=:change existing tear lines to ===   "
-                           "2:export/import/delete starting at 2.MSG\n");
-					printf("!:notify users of received echomail\n");
-					exit(0); }
-			j++; } }
-	else {
-		if(strchr(argv[i],'\\') || argv[i][1]==':')
-			sprintf(node_dir,"%.40s",argv[i]);
-		else
-			sprintf(sub_code,"%.8s",argv[i]); }  }
-
-if(!node_dir[0]) {
-	p=getenv("SBBSNODE");
-	if(p==NULL) {
-		printf("\7\nSBBSNODE environment variable not set.\n");
-		exit(1); }
-	strcpy(node_dir,p); }
-
-strupr(node_dir);
-
-if(node_dir[strlen(node_dir)-1]!='\\')
-	strcat(node_dir,"\\");
-
-read_node_cfg(txt);
-if(ctrl_dir[0]=='.') {   /* Relative path */
-	strcpy(str,ctrl_dir);
-	sprintf(ctrl_dir,"%s%s",node_dir,str);
-	if(_fullpath(str,ctrl_dir,40))
-		strcpy(ctrl_dir,str); }
-backslash(ctrl_dir);
-
-read_main_cfg(txt);
-if(data_dir[0]=='.') {   /* Relative path */
-	strcpy(str,data_dir);
-	sprintf(data_dir,"%s%s",node_dir,str);
-	if(_fullpath(str,data_dir,40))
-		strcpy(data_dir,str); }
-backslash(data_dir);
-if(text_dir[0]=='.') {   /* Relative path */
-	strcpy(str,text_dir);
-	sprintf(text_dir,"%s%s",node_dir,str);
-	if(_fullpath(str,text_dir,40))
-		strcpy(text_dir,str); }
-backslash(text_dir);
-read_msgs_cfg(txt);
-
-if(total_faddrs<1) {
-	sys_faddr.zone=sys_faddr.net=sys_faddr.node=1;
-	sys_faddr.point=0; }
-else
-	sys_faddr=faddr[0];
-
-
-if(misc&LOGFILE)
-	if((fidologfile=fnopen(&i,"SBBSFIDO.LOG"
-		,O_WRONLY|O_APPEND|O_CREAT))==NULL) {
-		lprintf("\7ERROR opening SBBSFIDO.LOG\r\n");
-		exit(1); }
-
-sprintf(str,"%s%s",ctrl_dir,"NODE.DAB");
-if((nodefile=sopen(str,O_BINARY|O_RDWR,SH_DENYNO))==-1) {
-	lprintf("\r\n\7Error opening %s\r\n",str);
-    exit(1); }
-
-if(misc&IMPORT_NETMAIL) {
-
-lputs("\r\n\r\nScanning for Inbound NetMail...\r\n");
-
-sprintf(smb_file,"%sMAIL",data_dir);
-if((i=smb_open(10))!=0) {
-	lprintf("Error %d opening %s\r\n",i,smb_file);
-	exit(1); }
-
-if(!filelength(fileno(shd_fp)))
-	if((i=smb_create(mail_maxcrcs,MAX_SYSMAIL,mail_maxage,SMB_EMAIL,10))!=0) {
-		lprintf("Error %d creating %s\r\n",i,smb_file);
-		exit(1); }
-
-if((i=smb_locksmbhdr(10))!=0) {
-	lprintf("Error %d locking %s\r\n",i,smb_file);
-	exit(1); }
-if((i=smb_getstatus(&status))!=0) {
-	lprintf("Error %d reading %s status header\r\n",i,smb_file);
-	exit(1); }
-smb_unlocksmbhdr();
-
-sprintf(str,"%s*.MSG",netmail_dir);
-
-for(last=findfirst(str,&ff,0);!last;last=findnext(&ff)) {
-	sprintf(path,"%s%s",netmail_dir,ff.name);
-	strupr(path);
-	lprintf("\r%s    ",path);
-	if((fmsg=nopen(path,O_RDWR))==-1) {
-		lprintf("\7ERROR opening");
-		continue; }
-	if(filelength(fmsg)<sizeof(fmsghdr_t)) {
-		lprintf("\7Invalid length of %u bytes\r\n",filelength(fmsg));
-		close(fmsg);
-		continue; }
-	if(read(fmsg,&hdr,sizeof(fmsghdr_t))!=sizeof(fmsghdr_t)) {
-		close(fmsg);
-		lprintf("\7ERROR reading %u bytes"
-			,sizeof(fmsghdr_t));
-		continue; }
-	if(hdr.attr&FIDO_ORPHAN) {
-		close(fmsg);
-		lprintf("Orphan (%s).\r\n",hdr.to);
-		continue; }
-	if(misc&IGNORE_ZONE)				/* default to system's zone */
-		hdr.destzone=hdr.origzone=sys_faddr.zone;
-	if(misc&IGNORE_POINT)				/* default to no point */
-		hdr.destpoint=hdr.origpoint=0;
-	getzpt(fmsg,&hdr);					/* use kludge if found */
-	for(i=0;i<total_faddrs;i++)
-		if(hdr.destzone==faddr[i].zone
-			&& hdr.destnet==faddr[i].net
-			&& hdr.destnode==faddr[i].node
-			&& hdr.destpoint==faddr[i].point)
-			break;
-	lprintf("%u:%u/%u.%u  "
-		,hdr.destzone,hdr.destnet,hdr.destnode,hdr.destpoint);
-	if(misc&IGNORE_ADDRESS || i<total_faddrs) {
-		if(!(misc&IGNORE_RECV) && hdr.attr&FIDO_RECV) {
-            close(fmsg);
-			lputs("Already received.\r\n");
-            continue; }
-		if(hdr.attr&FIDO_LOCAL && !(misc&LOCAL_NETMAIL)) {
-			close(fmsg);
-			lputs("Created locally.\r\n");
-			continue; }
-		i=atoi(hdr.to);
-		if(!stricmp(hdr.to,"SYSOP"))  /* NetMail to "sysop" goes to #1 */
-			i=1;
-		if(!i)
-			i=matchname(hdr.to);
-		if(!i) {
-			if(misc&UNKNOWN_NETMAIL)	/* receive unknown user mail to 1 */
-				i=1;
-			else {
-				lprintf("\7ERROR unknown user '%s'\r\n",hdr.to);
-				hdr.attr|=FIDO_ORPHAN;
-				lseek(fmsg,0L,SEEK_SET);
-				write(fmsg,&hdr,sizeof(fmsghdr_t));
-				close(fmsg);
-				continue; } }
-		lprintf("%s\r\n",hdr.to);
-
-		/*********************/
-		/* Importing NetMail */
-		/*********************/
-
-		fmsgtosmsg(fmsg,hdr,status,i,INVALID_SUB);
-
-		addr.zone=hdr.origzone;
-		addr.net=hdr.orignet;
-		addr.node=hdr.orignode;
-		addr.point=hdr.origpoint;
-		sprintf(str,"\7\1n\1hSBBSFIDO: \1m%.36s \1n\1msent you NetMail from "
-			"\1h%s\1n\r\n"
-			,hdr.from,faddrtoa(addr));
-		putsmsg(i,str);
-
-		if(hdr.attr&FIDO_FILE) {	/* File attachment */
-			strcpy(subj,hdr.subj);
-			tp=subj;
-			while(1) {
-				p=strchr(tp,SP);
-				if(p) *p=0;
-				sp=strrchr(tp,'/');              /* sp is slash pointer */
-				if(!sp) sp=strrchr(tp,'\\');
-				if(sp) tp=sp+1;
-				sprintf(str,"%s%s",fidofile_dir,tp);
-				sprintf(tmp,"%sFILE\\%04u.IN",data_dir,i);
-				mkdir(tmp);
-				strcat(tmp,"\\");
-				strcat(tmp,tp);
-				mv(str,tmp,0);
-				if(!p)
-					break;
-				tp=p+1; } }
-		netmail++;
-
-		/***************************/
-		/* Updating message header */
-		/***************************/
-		if(!(misc&DONT_SET_RECV)) {
-			hdr.attr|=FIDO_RECV;
-			lseek(fmsg,0L,SEEK_SET);
-			write(fmsg,&hdr,sizeof(fmsghdr_t)); }
-
-		/**************************************/
-		/* Delete source netmail if specified */
-		/**************************************/
-		close(fmsg);
-		if(misc&DELETE_NETMAIL)
-			remove(path); }
-	else
-		close(fmsg); }
-smb_close(); }
-
-
-if(misc&IMPORT_ECHOMAIL) {
-
-start=time(NULL);
-
-lputs("\r\n\r\nScanning for Inbound EchoMail...\r\n");
-
-sprintf(path,"%sSBBSFIDO.DAB",data_dir);
-if((file=nopen(path,O_RDWR|O_CREAT))==-1)
-	lastimport=0L;
-else {
-	read(file,&lastimport,4);
-	now=time(NULL);
-	lseek(file,0L,SEEK_SET);
-	write(file,&now,4);
-	close(file); }
-
-for(g=files=0;g<total_grps;g++)
-for(i=0;i<total_subs;i++)
-	if(sub[i]->misc&SUB_FIDO && sub[i]->grp==g) {
-		if(sub_code[0] && stricmp(sub_code,sub[i]->code))
-			continue;
-		if(!sub[i]->echopath[0])
-			sprintf(sub[i]->echopath,"%s%s\\",echomail_dir,sub[i]->code);
-		if(files) {
-			lputs("\r\n");
-			files=0; }
-		lprintf("\r\n%-15.15s %s\r\n"
-			,grp[sub[i]->grp]->sname,sub[i]->lname);
-
-		sprintf(path,"%s*.MSG",sub[i]->echopath);
-		l=findfirst(path,&ff,0);
-		if(startmsg==2 && !strcmp(ff.name,"1.MSG"))
-			l=findnext(&ff);
-		if(l)
-			continue;
-		lprintf("Counting %s",path);
-		msgfiles=0;
-		while(!l) {
-			memset(&tm,0,sizeof(tm));
-			tm.tm_mday=ff.wr_date&31;
-			tm.tm_mon=(ff.wr_date>>5)&15;
-			tm.tm_year=80+((ff.wr_date>>9)&127);
-			tm.tm_hour=(ff.wr_time>>11)&31;
-			tm.tm_min=(ff.wr_time>>5)&63;
-			tm.tm_sec=(ff.wr_time&0x1f)<<1;
-			if(isdigit(ff.name[0])
-				&& !(startmsg==2 && !strcmp(ff.name,"1.MSG"))
-				&& !(misc&IMPORT_NEW_ONLY && mktime(&tm)<=lastimport))
-				msgfiles++; 		/* msgfiles= messages to import */
-			l=findnext(&ff); }
-
-		lprintf("\r\n%u messages.\r\n",msgfiles);
-		if(!msgfiles)				/* no messages, so continue. */
-			continue;
-
-		sprintf(smb_file,"%s%s",sub[i]->data_dir,sub[i]->code);
-		if((j=smb_open(10))!=0) {
-			lprintf("Error %d opening %s\r\n",j,smb_file);
-			continue; }
-		if(!filelength(fileno(shd_fp)))
-			if((j=smb_create(sub[i]->maxcrcs,sub[i]->maxmsgs
-				,sub[i]->maxage
-				,sub[i]->misc&SUB_HYPER ? SMB_HYPERALLOC:0
-				,10))!=0) {
-				lprintf("Error %d creating %s\r\n",j,smb_file);
-				smb_close();
-				continue; }
-
-		if((j=smb_locksmbhdr(10))!=0) {
-			lprintf("Error %d locking SMB header\r\n",j);
-			smb_close();
-			continue; }
-		if((j=smb_getstatus(&status))!=0) {
-			lprintf("Error %d reading SMB header\r\n",j);
-			smb_close();
-			continue; }
-		smb_unlocksmbhdr();
-
-		for(l=startmsg;l<0x8000 && msgfiles;l++) {
-			sprintf(path,"%s%lu.MSG",sub[i]->echopath,l);
-			if(findfirst(path,&ff,0))	/* doesn't exist */
-				continue;				/* was break */
-			tm.tm_mday=ff.wr_date&31;
-			tm.tm_mon=(ff.wr_date>>5)&15;
-			tm.tm_year=80+((ff.wr_date>>9)&127);
-			tm.tm_hour=(ff.wr_time>>11)&31;
-			tm.tm_min=(ff.wr_time>>5)&63;
-			tm.tm_sec=(ff.wr_time&0x1f)<<1;
-			if(misc&IMPORT_NEW_ONLY && mktime(&tm)<=lastimport)
-				continue;
-			if(startmsg==2 && !strcmp(ff.name,"1.MSG"))
-				continue;
-			msgfiles--; 		/* so we only look for as many as are there */
-			strupr(path);
-			lprintf("\r%s    ",path);
-			files++;
-			if((fmsg=nopen(path,O_RDWR))==-1) {
-				lprintf("\7ERROR opening\r\n");
-				continue; }
-			if(filelength(fmsg)<sizeof(fmsghdr_t)) {
-				lprintf("\7Invalid length of %u bytes\r\n",filelength(fmsg));
-				close(fmsg);
-				continue; }
-			if(read(fmsg,&hdr,sizeof(fmsghdr_t))!=sizeof(fmsghdr_t)) {
-				close(fmsg);
-				lprintf("\7ERROR reading %u bytes\r\n"
-					,sizeof(fmsghdr_t));
-				continue; }
-			if(misc&IMPORT_LOCAL || !(hdr.attr&FIDO_LOCAL)) {
-
-				if(!(misc&IGNORE_RECV) && hdr.attr&FIDO_RECV) {
-					close(fmsg);
-					lputs("Already received.\r\n");
-					continue; }
-
-				if(hdr.attr&FIDO_SENT) {
-					close(fmsg);
-					lputs("Sent.");
-					if(hdr.attr&FIDO_KILLSENT)
-						if(!remove(path))
-							lputs(" Killed.");
-					lputs("\r\n");
-					continue; }
-
-				if(hdr.attr&FIDO_PRIVATE && !(sub[i]->misc&SUB_PRIV)) {
-					if(misc&IMPORT_PRIVATE)
-						hdr.attr&=~FIDO_PRIVATE;
-					else {
-						close(fmsg);
-						lputs("Private posts disallowed.\r\n");
-						continue; } }
-
-				if(!(hdr.attr&FIDO_PRIVATE) && sub[i]->misc&SUB_PONLY)
-					hdr.attr|=MSG_PRIVATE;
-
-				/**********************/
-				/* Importing EchoMail */
-				/**********************/
-
-				fmsgtosmsg(fmsg,hdr,status,0,i);
-
-				echomail++;
-
-				/* Updating message header */
-				if(!(misc&DONT_SET_RECV)) {
-					hdr.attr|=FIDO_RECV;
-					lseek(fmsg,0L,SEEK_SET);
-					write(fmsg,&hdr,sizeof(fmsghdr_t)); }
-
-				close(fmsg);
-				if(misc&NOTIFY_RECEIPT && (m=matchname(hdr.to))!=0) {
-					sprintf(str
-					,"\7\1n\1hSBBSFIDO: \1m%.36s \1n\1msent you EchoMail on "
-						"\1h%s \1n\1m%s\1n\r\n"
-						,hdr.from,grp[sub[i]->grp]->sname,sub[i]->sname);
-					putsmsg(m,str); }
-
-				/* Delete source EchoMail if specified */
-				if(misc&DELETE_ECHOMAIL)
-					remove(path); }
-			else
-				close(fmsg); }
-		smb_close();
-		}
-
-now=time(NULL);
-if(now-start)
-	lprintf("\r\nImported %lu EchoMail messages in %lu seconds "
-		"(%lu messages/second).\r\n"
-		,echomail,now-start,echomail/(now-start));
-}
-
-if(misc&EXPORT_ECHOMAIL) {
-
-start=time(NULL);
-
-lputs("\r\n\r\nScanning for Outbound EchoMail...\r\n");
-
-for(g=files=0;g<total_grps;g++)
-for(i=0;i<total_subs;i++)
-	if(sub[i]->misc&SUB_FIDO && sub[i]->grp==g) {
-		if(sub_code[0] && stricmp(sub_code,sub[i]->code))
-            continue;
-		if(!sub[i]->echopath[0])
-            sprintf(sub[i]->echopath,"%s%s\\",echomail_dir,sub[i]->code);
-		if(files) {
-			lputs("\r\n");
-			files=0; }
-		lprintf("\r\n%-15.15s %s\r\n"
-			,grp[sub[i]->grp]->sname,sub[i]->lname);
-		ptr=0;
-		if(!(misc&IGNORE_MSGPTRS)) {
-			sprintf(str,"%s%s.SFP",sub[i]->data_dir,sub[i]->code);
-			if((file=nopen(str,O_RDONLY))!=-1) {
-				read(file,&ptr,sizeof(time_t));
-				close(file); } }
-
-		msgs=getlastmsg(i,&lastmsg,0);
-		if(!msgs || (!(misc&IGNORE_MSGPTRS) && ptr>=lastmsg)) {
-			if(ptr>lastmsg && !(misc&LEAVE_MSGPTRS)) {	/* fix ptr */
-                sprintf(str,"%s%s.SFP",sub[i]->data_dir,sub[i]->code);
-				if((file=nopen(str,O_WRONLY|O_CREAT))==-1)
-					lprintf("\7ERROR opening/creating %s",str);
-				else {
-					write(file,&lastmsg,4);
-					close(file); } }
-			continue; }
-		nextmsg=startmsg;
-
-		sprintf(smb_file,"%s%s"
-			,sub[i]->data_dir,sub[i]->code);
-		if((j=smb_open(10))!=0) {
-			lprintf("Error %d opening %s\r\n",j,smb_file);
-			continue; }
-
-		post=NULL;
-		posts=loadmsgs(&post,ptr);
-
-		if(!posts)	{ /* no new messages */
-			smb_close();
-			if(post)
-				FREE(post);
-			continue; }
-
-		for(m=exp=0;m<posts;m++) {
-			printf("\rScanning: %lu of %lu     "
-				,m+1,posts);
-
-			msg.idx.offset=post[m].offset;
-			if((k=smb_lockmsghdr(msg,10))!=0) {
-				lprintf("ERR_LOCK %s %d\r\n",smb_file,k);
-				continue; }
-			k=smb_getmsghdr(&msg);
-			if(k || msg.hdr.number!=post[m].number) {
-				smb_unlockmsghdr(msg);
-				smb_freemsgmem(msg);
-
-				msg.hdr.number=post[m].number;
-				if((k=smb_getmsgidx(&msg))!=0) {
-					lprintf("ERR_READ %s %d\r\n",smb_file,k);
-					continue; }
-				if((k=smb_lockmsghdr(msg,10))!=0) {
-					lprintf("ERR_LOCK %s %d\r\n",smb_file,k);
-					continue; }
-				if((k=smb_getmsghdr(&msg))!=0) {
-					smb_unlockmsghdr(msg);
-					lprintf("ERR_READ %s %d\r\n",smb_file,k);
-					continue; } }
-
-			if((!(misc&EXPORT_ALL) && msg.from_net.type==NET_FIDO)
-				|| !strnicmp(msg.subj,"NE:",3)) {   /* no echo */
-				smb_unlockmsghdr(msg);
-				smb_freemsgmem(msg);
-				continue; }  /* From a Fido node, ignore it */
-
-			if(msg.from_net.type && msg.from_net.type!=NET_FIDO
-				&& !(sub[i]->misc&SUB_GATE)) {
-				smb_unlockmsghdr(msg);
-				smb_freemsgmem(msg);
-				continue; }
-
-			for(j=nextmsg;j;j++) {
-				sprintf(fname,"%s%u.MSG",sub[i]->echopath,j);
-				if(!fexist(fname))
-					break; }
-			if(!j) {
-				lputs("\7EchoMail dir full!");
-				smb_unlockmsghdr(msg);
-				smb_freemsgmem(msg);
-				continue; }
-			nextmsg=j+1;
-			strupr(fname);
-			if((fmsg=nopen(fname,O_WRONLY|O_CREAT))==-1) {
-				smb_unlockmsghdr(msg);
-				smb_freemsgmem(msg);
-				lprintf("\7ERROR creating %s\r\n",fname);
-				continue; }
-			if((fstream=fdopen(fmsg,"wb"))==NULL) {
-				close(fmsg);
-				smb_unlockmsghdr(msg);
-                smb_freemsgmem(msg);
-				lprintf("\7ERROR fdopen %s\r\n",fname);
-				continue; }
-			setvbuf(fstream,NULL,_IOFBF,2048);
-
-			files++;
-
-			memset(&hdr,0,sizeof(fmsghdr_t));	 /* Zero the header */
-			hdr.origzone=sub[i]->faddr.zone;
-			hdr.orignet=sub[i]->faddr.net;
-			hdr.orignode=sub[i]->faddr.node;
-			hdr.origpoint=sub[i]->faddr.point;
-
-			hdr.attr=FIDO_LOCAL;
-			if(misc&KILL_ECHOMAIL)
-				hdr.attr|=FIDO_KILLSENT;
-			if(msg.hdr.attr&MSG_PRIVATE)
-				hdr.attr|=FIDO_PRIVATE;
-
-			sprintf(hdr.from,"%.35s",msg.from);
-
-			tm_p=gmtime((time_t *)&msg.hdr.when_written.time);
-			sprintf(hdr.time,"%02u %3.3s %02u  %02u:%02u:%02u"
-				,tm_p->tm_mday,mon[tm_p->tm_mon],tm_p->tm_year%100
-				,tm_p->tm_hour,tm_p->tm_min,tm_p->tm_sec);
-
-			sprintf(hdr.to,"%.35s",msg.to);
-
-			sprintf(hdr.subj,"%.71s",msg.subj);
-
-			fwrite(&hdr,sizeof(fmsghdr_t),1,fstream);
-
-			for(j=0;j<msg.hdr.total_dfields;j++) {
-
-				if(msg.dfield[j].type!=TEXT_BODY
-					&& msg.dfield[j].type!=TEXT_TAIL)
-					continue;					/* skip non-text data fields */
-
-				if(msg.dfield[j].length<3)		/* need at least 3 bytes */
-					continue;
-
-				fseek(sdt_fp,msg.hdr.offset+msg.dfield[j].offset,SEEK_SET);
-
-				lzh=0;
-				fread(&xlat,2,1,sdt_fp);
-				if(xlat==XLAT_LZH) {
-					lzh=1;
-					fread(&xlat,2,1,sdt_fp); }
-				if(xlat!=XLAT_NONE) 	/* no other translations supported */
-					continue;
-
-				length=msg.dfield[j].length-2;
-				if(lzh)
-					length-=2;
-
-				if((buf=LMALLOC(length))==NULL) {
-					lprintf("Error allocating %lu bytes\r\n",length);
-					continue; }
-
-				fread(buf,length,1,sdt_fp);
-
-				if(lzh) {
-					l=*(long *)buf;
-					if((outbuf=LMALLOC(l))==NULL) {
-						lprintf("Error allocationg %lu for lzh\r\n",l);
-						LFREE(buf);
-						continue; }
-					length=lzh_decode(buf,length,outbuf);
-					LFREE(buf);
-					buf=outbuf; }
-
-				tear=0;
-				for(l=0,cr=1;l<length;l++) {
-					if(buf[l]==1) { /* Ctrl-A, so skip it and the next char */
-                        l++;
-						continue; }
-					if(buf[l]==LF || buf[l]==0)  /* Ignore line feeds */
-						continue;
-					if(cr) {
-						if(l+3<length && buf[l]=='-' && buf[l+1]=='-'
-							&& buf[l+2]=='-'
-							&& (buf[l+3]==SP || buf[l+3]==CR)) {
-							if(misc&CONVERT_TEAR)	/* Convert to === */
-								buf[l]=buf[l+1]=buf[l+2]='=';
-							else
-								tear=1; }
-						else if(l+10<length
-							&& !strncmp(buf+l," * Origin: ",11))
-							buf[l+1]='#'; } /* Convert * Origin into # Origin */
-
-					if(buf[l]==CR)
-						cr=1;
-					else
-						cr=0;
-					if(sub[i]->misc&SUB_ASCII || misc&ASCII_ONLY) {
-						if(buf[l]<SP && buf[l]!=CR) /* Ctrl ascii */
-							buf[l]='.';             /* converted to '.' */
-						if((uchar)buf[l]>0x7f)		/* extended ASCII */
-							buf[l]='*'; }           /* converted to '*' */
-					fputc(buf[l],fstream); }
-				fprintf(fstream,"\r\n");
-				LFREE(buf); }
-
-			if(!(sub[i]->misc&SUB_NOTAG)) {
-				if(!tear)	/* No previous tear line */
-					fprintf(fstream,"--- Synchronet+SBBSfido v%s\r\n"
-						,VER);	/* so add ours */
-				fprintf(fstream," * Origin: %s (%s)\r\n"
-					,sub[i]->origline[0] ? sub[i]->origline : origline
-					,faddrtoa(sub[i]->faddr)); }
-
-			fputc(0,fstream);	/* Null terminator */
-			fclose(fstream);
-			exported++;
-			exp++;
-			printf("Exported: %lu of %lu",exp,exported);
-			smb_unlockmsghdr(msg);
-			smb_freemsgmem(msg); }
-
-		smb_close();
-		FREE(post);
-
-		/***********************/
-		/* Update FIDO_PTR.DAB */
-		/***********************/
-		if(!(misc&LEAVE_MSGPTRS) && lastmsg>ptr) {
-			sprintf(str,"%s%s.SFP",sub[i]->data_dir,sub[i]->code);
-			if((file=nopen(str,O_WRONLY|O_CREAT))==-1)
-				lprintf("\7ERROR opening/creating %s",str);
-			else {
-				write(file,&lastmsg,4);
-				close(file); } } }
-
-now=time(NULL);
-if(now-start)
-	lprintf("\r\nExported %lu EchoMail messages in %lu seconds "
-		"(%lu messages/second).\r\n"
-		,exported,now-start,exported/(now-start));
-
-}
-
-if(misc&UPDATE_MSGPTRS) {
-
-lputs("\r\n\r\nUpdating Message Pointers to Last Posted Message...\r\n");
-
-for(g=0;g<total_grps;g++)
-for(i=0;i<total_subs;i++)
-	if(sub[i]->misc&SUB_FIDO && sub[i]->grp==g) {
-		lprintf("\r\n%-15.15s %s\r\n"
-			,grp[sub[i]->grp]->sname,sub[i]->lname);
-		getlastmsg(i,&l,0);
-		sprintf(str,"%s%s.SFP",sub[i]->data_dir,sub[i]->code);
-		if((file=nopen(str,O_WRONLY|O_CREAT))==-1)
-			lprintf("\7ERROR opening/creating %s",str);
-		else {
-			write(file,&l,sizeof(time_t));
-			close(file); } } }
-
-if(misc&PURGE_ECHOMAIL) {
-
-lputs("\r\n\r\nPurging EchoMail...\r\n");
-
-for(g=0;g<total_grps;g++)
-for(i=0;i<total_subs;i++)
-	if(sub[i]->misc&SUB_FIDO && sub[i]->grp==g) {
-		if(sub_code[0] && stricmp(sub_code,sub[i]->code))
-            continue;
-		if(!sub[i]->echopath[0])
-            sprintf(sub[i]->echopath,"%s%s\\",echomail_dir,sub[i]->code);
-		sprintf(str,"%s*.MSG",sub[i]->echopath);
-		last=findfirst(str,&ff,0);
-		while(!last) {
-			sprintf(str,"%s%s",sub[i]->echopath,ff.name);
-			if(startmsg!=2 || strcmp(ff.name,"1.MSG")) {
-				lprintf("\r\nDeleting %s",str);
-				remove(str); }
-			last=findnext(&ff); } } }
-
-
-if(misc&(IMPORT_NETMAIL|IMPORT_ECHOMAIL) && misc&REPORT) {
-	sprintf(str,"%sSBBSFIDO.MSG",text_dir);
-	if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1) {
-		lprintf("Error opening %s\r\n",str);
-		exit(1); }
-	sprintf(fname,"\1c\1h               "
-		"���������������������������������������������������\r\n");
-	sprintf(path,"\1c\1h               "
-		"���������������������������������������������������\r\n");
-	write(file,fname,strlen(fname));
-	sprintf(str,"               \1n\1k\0016"
-		" Last FidoNet Transfer on %.24s \1n\r\n",ctime(&start));
-	write(file,str,strlen(str));
-	write(file,path,strlen(path));
-	write(file,fname,strlen(fname));
-	sprintf(subj,"Imported %lu EchoMail and %lu NetMail Messages"
-		,echomail,netmail);
-	sprintf(str,"               \1n\1k\0016 %-50.50s\1n\r\n",subj);
-	write(file,str,strlen(str));
-	write(file,path,strlen(path));
-	close(file); }
-
-return(0);
-}
-
diff --git a/src/sbbs2/fido/smbdefs.h b/src/sbbs2/fido/smbdefs.h
deleted file mode 100644
index 71791e6952..0000000000
--- a/src/sbbs2/fido/smbdefs.h
+++ /dev/null
@@ -1,449 +0,0 @@
-/* SMBDEFS.H */
-
-#ifndef _SMBDEFS_H
-#define _SMBDEFS_H
-
-/**********/
-/* Macros */
-/**********/
-
-#define SMB_VERSION 		0x0121		/* SMB format version */
-										/* High byte major, low byte minor */
-#define SMBLIB_VERSION		"1.21a"     /* SMB library version */
-
-										/* Control characters */
-#define TAB 				0x09		/* Horizontal tabulation	^I */
-#define LF					0x0a		/* Line feed				^J */
-#define FF					0x0c		/* Form feed				^L */
-#define CR					0x0d		/* Carriage return			^M */
-#define ESC 				0x1b		/* Escape					^[ */
-#define SP					0x20		/* Space					   */
-
-#define ulong				unsigned long
-#define ushort				unsigned short
-#define uchar				unsigned char
-#define uint				unsigned int
-
-/****************************************************************************/
-/* Memory allocation macros for various compilers and environments			*/
-/* MALLOC is used for allocations of 64k or less							*/
-/* FREE is used to free buffers allocated with MALLOC						*/
-/* LMALLOC is used for allocations of possibly larger than 64k				*/
-/* LFREE is used to free buffers allocated with LMALLOC 					*/
-/* REALLOC is used to re-size a previously MALLOCed or LMALLOCed buffer 	*/
-/****************************************************************************/
-#if defined(__COMPACT__) || defined(__LARGE__) || defined(__HUGE__)
-#	define HUGE16 huge
-#	define FAR16 far
-#	if defined(__TURBOC__)
-#		define REALLOC(x,y) farrealloc(x,y)
-#		define LMALLOC(x) farmalloc(x)
-#		define MALLOC(x) farmalloc(x)
-#		define LFREE(x) farfree(x)
-#		define FREE(x) farfree(x)
-#	elif defined(__WATCOMC__)
-#		define REALLOC realloc
-#		define LMALLOC(x) halloc(x,1)  /* far heap, but slow */
-#		define MALLOC malloc		   /* far heap, but 64k max */
-#		define LFREE hfree
-#		define FREE free
-#	else	/* Other 16-bit Compiler */
-#		define REALLOC realloc
-#		define LMALLOC malloc
-#		define MALLOC malloc
-#		define LFREE free
-#		define FREE free
-#	endif
-#else		/* 32-bit Compiler or Small Memory Model */
-#	define HUGE16
-#	define FAR16
-#	define REALLOC realloc
-#	define LMALLOC malloc
-#	define MALLOC malloc
-#	define LFREE free
-#	define FREE free
-#endif
-
-
-#define SDT_BLOCK_LEN		256 		/* Size of data blocks */
-#define SHD_BLOCK_LEN		256 		/* Size of header blocks */
-
-#define SMB_SELFPACK		0			/* Self-packing storage allocation */
-#define SMB_FASTALLOC		1			/* Fast allocation */
-#define SMB_HYPERALLOC		2			/* No allocation */
-
-#define SMB_EMAIL			1			/* User numbers stored in Indexes */
-
-										/* Time zone macros for when_t.zone */
-#define DAYLIGHT			0x8000		/* Daylight savings is active */
-#define US_ZONE 			0x4000		/* U.S. time zone */
-#define WESTERN_ZONE		0x2000		/* Non-standard zone west of UT */
-#define EASTERN_ZONE		0x1000		/* Non-standard zone east of UT */
-
-										/* US Time Zones (standard) */
-#define AST 				0x40F0		// Atlantic 			(-04:00)
-#define EST 				0x412C		// Eastern				(-05:00)
-#define CST 				0x4168		// Central				(-06:00)
-#define MST 				0x41A4		// Mountain 			(-07:00)
-#define PST 				0x41E0		// Pacific				(-08:00)
-#define YST 				0x421C		// Yukon				(-09:00)
-#define HST 				0x4258		// Hawaii/Alaska		(-10:00)
-#define BST 				0x4294		// Bering				(-11:00)
-
-										/* US Time Zones (daylight) */
-#define ADT 				0xC0F0		// Atlantic 			(-03:00)
-#define EDT 				0xC12C		// Eastern				(-04:00)
-#define CDT 				0xC168		// Central				(-05:00)
-#define MDT 				0xC1A4		// Mountain 			(-06:00)
-#define PDT 				0xC1E0		// Pacific				(-07:00)
-#define YDT 				0xC21C		// Yukon				(-08:00)
-#define HDT 				0xC258		// Hawaii/Alaska		(-09:00)
-#define BDT 				0xC294		// Bering				(-10:00)
-
-										/* Non-standard Time Zones */
-#define MID 				0x2294		// Midway				(-11:00)
-#define VAN 				0x21E0		// Vancouver			(-08:00)
-#define EDM 				0x21A4		// Edmonton 			(-07:00)
-#define WIN 				0x2168		// Winnipeg 			(-06:00)
-#define BOG 				0x212C		// Bogota				(-05:00)
-#define CAR 				0x20F0		// Caracas				(-04:00)
-#define RIO 				0x20B4		// Rio de Janeiro		(-03:00)
-#define FER 				0x2078		// Fernando de Noronha	(-02:00)
-#define AZO 				0x203C		// Azores				(-01:00)
-#define LON 				0x1000		// London				(+00:00)
-#define BER 				0x103C		// Berlin				(+01:00)
-#define ATH 				0x1078		// Athens				(+02:00)
-#define MOS 				0x10B4		// Moscow				(+03:00)
-#define DUB 				0x10F0		// Dubai				(+04:00)
-#define KAB 				0x110E		// Kabul				(+04:30)
-#define KAR 				0x112C		// Karachi				(+05:00)
-#define BOM 				0x114A		// Bombay				(+05:30)
-#define KAT 				0x1159		// Kathmandu			(+05:45)
-#define DHA 				0x1168		// Dhaka				(+06:00)
-#define BAN 				0x11A4		// Bangkok				(+07:00)
-#define HON 				0x11E0		// Hong Kong			(+08:00)
-#define TOK 				0x121C		// Tokyo				(+09:00)
-#define SYD 				0x1258		// Sydney				(+10:00)
-#define NOU 				0x1294		// Noumea				(+11:00)
-#define WEL 				0x12D0		// Wellington			(+12:00)
-
-										/* Valid hfield_t.types */
-#define SENDER				0x00
-#define SENDERAGENT 		0x01
-#define SENDERNETTYPE		0x02
-#define SENDERNETADDR		0x03
-#define SENDEREXT			0x04
-#define SENDERPOS			0x05
-#define SENDERORG			0x06
-
-#define AUTHOR				0x10
-#define AUTHORAGENT 		0x11
-#define AUTHORNETTYPE		0x12
-#define AUTHORNETADDR		0x13
-#define AUTHOREXT			0x14
-#define AUTHORPOS			0x15
-#define AUTHORORG			0x16
-
-#define REPLYTO 			0x20
-#define REPLYTOAGENT		0x21
-#define REPLYTONETTYPE		0x22
-#define REPLYTONETADDR		0x23
-#define REPLYTOEXT			0x24
-#define REPLYTOPOS			0x25
-#define REPLYTOORG			0x26
-
-#define RECIPIENT			0x30
-#define RECIPIENTAGENT		0x31
-#define RECIPIENTNETTYPE	0x32
-#define RECIPIENTNETADDR	0x33
-#define RECIPIENTEXT		0x34
-#define RECIPIENTPOS		0x35
-#define RECIPIENTORG		0x36
-
-#define FORWARDTO			0x40
-#define FORWARDTOAGENT		0x41
-#define FORWARDTONETTYPE	0x42
-#define FORWARDTONETADDR	0x43
-#define FORWARDTOEXT		0x44
-#define FORWARDTOPOS		0x45
-#define FORWARDTOORG		0x46
-
-#define FORWARDED			0x48
-
-#define RECEIVEDBY			0x50
-#define RECEIVEDBYAGENT 	0x51
-#define RECEIVEDBYNETTYPE	0x52
-#define RECEIVEDBYNETADDR	0x53
-#define RECEIVEDBYEXT		0x54
-#define RECEIVEDBYPOS		0x55
-#define RECEIVEDBYORG		0x56
-
-#define RECEIVED			0x58
-
-#define SUBJECT 			0x60
-#define SUMMARY 			0x61
-#define COMMENT 			0x62
-#define CARBONCOPY			0x63
-#define GROUP				0x64
-#define EXPIRATION			0x65
-#define PRIORITY			0x66
-
-#define FILEATTACH			0x70
-#define DESTFILE			0x71
-#define FILEATTACHLIST		0x72
-#define DESTFILELIST		0x73
-#define FILEREQUEST 		0x74
-#define FILEPASSWORD		0x75
-#define FILEREQUESTLIST 	0x76
-#define FILEPASSWORDLIST	0x77
-
-#define IMAGEATTACH 		0x80
-#define ANIMATTACH			0x81
-#define FONTATTACH			0x82
-#define SOUNDATTACH 		0x83
-#define PRESENTATTACH		0x84
-#define VIDEOATTACH 		0x85
-#define APPDATAATTACH		0x86
-
-#define IMAGETRIGGER		0x90
-#define ANIMTRIGGER 		0x91
-#define FONTTRIGGER 		0x92
-#define SOUNDTRIGGER		0x93
-#define PRESENTTRIGGER		0x94
-#define VIDEOTRIGGER		0x95
-#define APPDATATRIGGER		0x96
-
-#define FIDOCTRL			0xa0
-#define FIDOAREA			0xa1
-#define FIDOSEENBY			0xa2
-#define FIDOPATH			0xa3
-#define FIDOMSGID			0xa4
-#define FIDOREPLYID 		0xa5
-#define FIDOPID 			0xa6
-#define FIDOFLAGS			0xa7
-
-#define RFC822HEADER		0xb0
-#define RFC822MSGID 		0xb1
-#define RFC822REPLYID		0xb2
-
-#define UNKNOWN 			0xf1
-#define UNKNOWNASCII		0xf2
-#define UNUSED				0xff
-
-										/* Valid dfield_t.types */
-#define TEXT_BODY			0x00
-#define TEXT_SOUL			0x01
-#define TEXT_TAIL			0x02
-#define TEXT_WING			0x03
-#define IMAGEEMBED			0x20
-#define ANIMEMBED			0x21
-#define FONTEMBED			0x22
-#define SOUNDEMBED			0x23
-#define PRESENTEMBED		0x24
-#define VIDEOEMBED			0x25
-#define APPDATAEMBED		0x26
-#define UNUSED				0xff
-
-
-										/* Message attributes */
-#define MSG_PRIVATE 		(1<<0)
-#define MSG_READ			(1<<1)
-#define MSG_PERMANENT		(1<<2)
-#define MSG_LOCKED			(1<<3)
-#define MSG_DELETE			(1<<4)
-#define MSG_ANONYMOUS		(1<<5)
-#define MSG_KILLREAD		(1<<6)
-#define MSG_MODERATED		(1<<7)
-#define MSG_VALIDATED		(1<<8)
-
-										/* Auxillary header attributes */
-#define MSG_FILEREQUEST 	(1<<0)		// File request
-#define MSG_FILEATTACH		(1<<1)		// File(s) attached to Msg
-#define MSG_TRUNCFILE		(1<<2)		// Truncate file(s) when sent
-#define MSG_KILLFILE		(1<<3)		// Delete file(s) when sent
-#define MSG_RECEIPTREQ		(1<<4)		// Return receipt requested
-#define MSG_CONFIRMREQ		(1<<5)		// Confirmation receipt requested
-#define MSG_NODISP			(1<<6)		// Msg may not be displayed to user
-
-										/* Message network attributes */
-#define MSG_LOCAL			(1<<0)		// Msg created locally
-#define MSG_INTRANSIT		(1<<1)		// Msg is in-transit
-#define MSG_SENT			(1<<2)		// Sent to remote
-#define MSG_KILLSENT		(1<<3)		// Kill when sent
-#define MSG_ARCHIVESENT 	(1<<4)		// Archive when sent
-#define MSG_HOLD			(1<<5)		// Hold for pick-up
-#define MSG_CRASH			(1<<6)		// Crash
-#define MSG_IMMEDIATE		(1<<7)		// Send Msg now, ignore restrictions
-#define MSG_DIRECT			(1<<8)		// Send directly to destination
-#define MSG_GATE			(1<<9)		// Send via gateway
-#define MSG_ORPHAN			(1<<10) 	// Unknown destination
-#define MSG_FPU 			(1<<11) 	// Force pickup
-#define MSG_TYPELOCAL		(1<<12) 	// Msg is for local use only
-#define MSG_TYPEECHO		(1<<13) 	// Msg is for conference distribution
-#define MSG_TYPENET 		(1<<14) 	// Msg is direct network mail
-
-
-enum {
-     NET_NONE
-    ,NET_UNKNOWN
-    ,NET_FIDO
-    ,NET_POSTLINK
-    ,NET_QWK
-	,NET_INTERNET
-	,NET_WWIV
-	,NET_MHS
-
-/* Add new ones here */
-
-    ,NET_TYPES
-    };
-
-enum {
-     AGENT_PERSON
-    ,AGENT_PROCESS
-
-/* Add new ones here */
-
-    ,AGENT_TYPES
-    };
-
-enum {
-     XLAT_NONE              // No translation/End of translation list
-    ,XLAT_ENCRYPT           // Encrypted data
-    ,XLAT_ESCAPED           // 7-bit ASCII escaping for ctrl and 8-bit data
-    ,XLAT_HUFFMAN           // Static and adaptive Huffman coding compression
-    ,XLAT_LZW               // Limpel/Ziv/Welch compression
-    ,XLAT_MLZ78             // Modified LZ78 compression
-    ,XLAT_RLE               // Run length encoding compression
-    ,XLAT_IMPLODE           // Implode compression (PkZIP)
-    ,XLAT_SHRINK            // Shrink compression (PkZIP)
-	,XLAT_LZH				// LHarc (LHA) Dynamic Huffman coding
-
-/* Add new ones here */
-
-    ,XLAT_TYPES
-    };
-
-
-/************/
-/* Typedefs */
-/************/
-
-typedef struct {
-
-	ulong	time;			// Local time (unix format)
-	short	zone;			// Time zone
-
-	} when_t;
-
-typedef struct {
-
-	ushort	to; 			// 16-bit CRC of recipient name (lower case)
-	ushort	from;			// 16-bit CRC of sender name (lower case)
-	ushort	subj;			// 16-bit CRC of subject (lower case, w/o RE:)
-	ushort	attr;			// attributes (read, permanent, etc.)
-	ulong	offset; 		// offset into header file
-	ulong	number; 		// number of message (1 based)
-	ulong	time;			// time/date message was imported/posted
-
-	} idxrec_t;
-
-typedef struct {
-
-    uchar   id[4];          // text or binary unique hdr ID
-    ushort  version;        // version number (initially 100h for 1.00)
-    ushort  length;         // length including this struct
-
-	} smbhdr_t;
-
-typedef struct {
-
-	ulong	last_msg;		// last message number
-	ulong	total_msgs; 	// total messages
-	ulong	header_offset;	// byte offset to first header record
-	ulong	max_crcs;		// Maximum number of CRCs to keep in history
-    ulong   max_msgs;       // Maximum number of message to keep in sub
-    ushort  max_age;        // Maximum age of message to keep in sub (in days)
-	ushort	attr;			// Attributes for this message base (SMB_HYPER,etc)
-
-	} smbstatus_t;
-
-typedef struct {
-
-	uchar	id[4];			// SHD<^Z>
-    ushort  type;           // Message type (normally 0)
-    ushort  version;        // Version of type (initially 100h for 1.00)
-    ushort  length;         // Total length of fixed record + all fields
-	ushort	attr;			// Attributes (bit field) (duped in SID)
-	ulong	auxattr;		// Auxillary attributes (bit field)
-    ulong   netattr;        // Network attributes
-	when_t	when_written;	// Time message was written (unix format)
-	when_t	when_imported;	// Time message was imported
-    ulong   number;         // Message number
-    ulong   thread_orig;    // Original message number in thread
-    ulong   thread_next;    // Next message in thread
-    ulong   thread_first;   // First reply to this message
-	uchar	reserved[16];	// Reserved for future use
-    ulong   offset;         // Offset for buffer into data file (0 or mod 256)
-	ushort	total_dfields;	// Total number of data fields
-
-	} msghdr_t;
-
-typedef struct {
-
-	ushort	type;			// Type of data field
-    ulong   offset;         // Offset into buffer 
-    ulong   length;         // Length of data field
-
-    } dfield_t;
-
-typedef struct {
-
-	ushort	type;
-	ushort	length; 		// Length of buffer
-
-	} hfield_t;
-
-typedef struct {
-
-	ushort	zone;
-	ushort	net;
-	ushort	node;
-	ushort	point;
-
-    } fidoaddr_t;
-
-typedef struct {
-
-    ushort  type;
-	void	*addr;
-
-	} net_t;
-
-typedef struct {
-
-	idxrec_t	idx;			// Index
-	msghdr_t	hdr;			// Header record (fixed portion)
-	uchar		*to,			// To name
-				*to_ext,		// To extension
-				*from,			// From name
-				*from_ext,		// From extension
-				*replyto,		// Reply-to name
-				*replyto_ext,	// Reply-to extension */
-				*subj;			// Subject
-	ushort		to_agent,		// Type of agent message is to
-				from_agent, 	// Type of agent message is from
-				replyto_agent;	// Type of agent replies should be sent to
-	net_t		to_net, 		// Destination network type and address
-                from_net,       // Origin network address
-                replyto_net;    // Network type and address for replies
-	ushort		total_hfields;	// Total number of header fields
-	hfield_t	*hfield;		// Header fields (fixed length portion)
-	void		**hfield_dat;	// Header fields (variable length portion)
-	dfield_t	*dfield;		// Data fields (fixed length portion)
-	ulong		offset; 		// Offset (number of records) into index
-	uchar		forwarded;		// Forwarded from agent to another
-
-	} smbmsg_t;
-
-#endif /* Don't add anything after this #endif statement */
diff --git a/src/sbbs2/fido/smblib.c b/src/sbbs2/fido/smblib.c
deleted file mode 100644
index e2d8a474b8..0000000000
--- a/src/sbbs2/fido/smblib.c
+++ /dev/null
@@ -1,1121 +0,0 @@
-/* SMBLIB.C */
-
-#include "smblib.h"
-
-/****************************************************************************/
-/* Open a message base of name 'smb_file'                                   */
-/* If retry_time is 0, fast open method (no compatibility/validity check)	*/
-/* Opens files for READing messages or updating message indices only        */
-/****************************************************************************/
-int smb_open(int retry_time)
-{
-    int file;
-    char str[128];
-	smbhdr_t hdr;
-
-shd_fp=sdt_fp=sid_fp=NULL;
-sprintf(str,"%s.SHD",smb_file);
-if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYNO,S_IWRITE|S_IREAD))==-1
-	|| (shd_fp=fdopen(file,"r+b"))==NULL) {
-	if(file!=-1)
-		close(file);
-    return(2); }
-
-if(retry_time && filelength(file)>=sizeof(smbhdr_t)) {
-	setvbuf(shd_fp,shd_buf,_IONBF,SHD_BLOCK_LEN);
-    if(smb_locksmbhdr(retry_time)) {
-		smb_close();
-        return(-1); }
-	memset(&hdr,0,sizeof(smbhdr_t));
-    fread(&hdr,sizeof(smbhdr_t),1,shd_fp);
-    if(memcmp(hdr.id,"SMB\x1a",4)) {
-		smb_close();
-        return(-2); }
-    if(hdr.version<0x110) {         /* Compatibility check */
-		smb_close();
-        return(-3); }
-    smb_unlocksmbhdr();
-	rewind(shd_fp); }
-
-setvbuf(shd_fp,shd_buf,_IOFBF,SHD_BLOCK_LEN);
-
-sprintf(str,"%s.SDT",smb_file);
-if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYNO,S_IWRITE|S_IREAD))==-1
-	|| (sdt_fp=fdopen(file,"r+b"))==NULL) {
-	if(file!=-1)
-		close(file);
-	smb_close();
-	return(1); }
-setvbuf(sdt_fp,NULL,_IOFBF,2*1024);
-
-sprintf(str,"%s.SID",smb_file);
-if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYNO,S_IWRITE|S_IREAD))==-1
-	|| (sid_fp=fdopen(file,"r+b"))==NULL) {
-	if(file!=-1)
-		close(file);
-	smb_close();
-	return(3); }
-setvbuf(sid_fp,NULL,_IOFBF,2*1024);
-
-return(0);
-}
-
-/****************************************************************************/
-/* Closes the currently open message base									*/
-/****************************************************************************/
-void smb_close(void)
-{
-if(shd_fp!=NULL) {
-	smb_unlocksmbhdr(); 			/* In case it's been locked */
-	fclose(shd_fp); }
-if(sid_fp!=NULL)
-	fclose(sid_fp);
-if(sdt_fp!=NULL)
-	fclose(sdt_fp);
-sid_fp=shd_fp=sdt_fp=NULL;
-}
-
-/****************************************************************************/
-/* Opens the data block allocation table message base 'smb_file'            */
-/* Retrys for retry_time number of seconds									*/
-/* Return 0 on success, non-zero otherwise									*/
-/****************************************************************************/
-int smb_open_da(int retry_time)
-{
-    int file;
-    char str[128];
-	long start;
-
-start=time(NULL);
-sprintf(str,"%s.SDA",smb_file);
-while(1) {
-	if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYRW,S_IWRITE|S_IREAD))!=-1)
-		break;
-	if(errno!=EACCES)
-		return(-1);
-	if(time(NULL)-start>=retry_time)
-		return(-2); }
-if((sda_fp=fdopen(file,"r+b"))==NULL)
-	return(-3);
-setvbuf(sda_fp,NULL,_IOFBF,2*1024);
-return(0);
-}
-
-/****************************************************************************/
-/* Opens the header block allocation table for message base 'smb_file'      */
-/* Retrys for retry_time number of seconds									*/
-/* Return 0 on success, non-zero otherwise									*/
-/****************************************************************************/
-int smb_open_ha(int retry_time)
-{
-    int file;
-    char str[128];
-	long start;
-
-start=time(NULL);
-sprintf(str,"%s.SHA",smb_file);
-while(1) {
-	if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYRW,S_IWRITE|S_IREAD))!=-1)
-		break;
-	if(errno!=EACCES)
-		return(-1);
-	if(time(NULL)-start>=retry_time)
-		return(-2); }
-if((sha_fp=fdopen(file,"r+b"))==NULL)
-	return(-3);
-setvbuf(sha_fp,NULL,_IOFBF,2*1024);
-return(0);
-}
-
-/****************************************************************************/
-/* If the parameter 'push' is non-zero, this function stores the currently  */
-/* open message base to the "virtual" smb stack. Up to SMB_STACK_LEN        */
-/* message bases may be stored (defined in SMBDEFS.H).						*/
-/* The parameter 'op' is the operation to perform on the stack. Either      */
-/* SMB_STACK_PUSH, SMB_STACK_POP, or SMB_STACK_XCHNG						*/
-/* If the operation is SMB_STACK_POP, this function restores a message base */
-/* previously saved with a SMB_STACK_PUSH call to this same function.		*/
-/* If the operation is SMB_STACK_XCHNG, then the current message base is	*/
-/* exchanged with the message base on the top of the stack (most recently	*/
-/* pushed.																	*/
-/* If the current message base is not open, the SMB_STACK_PUSH and			*/
-/* SMB_STACK_XCHNG operations do nothing									*/
-/* Returns 0 on success, non-zero if stack full.                            */
-/* If operation is SMB_STACK_POP or SMB_STACK_XCHNG, it always returns 0.	*/
-/****************************************************************************/
-int smb_stack(int op)
-{
-	static char stack_file[SMB_STACK_LEN][128];
-	static FILE *stack_sdt[SMB_STACK_LEN],
-				*stack_shd[SMB_STACK_LEN],
-				*stack_sid[SMB_STACK_LEN],
-				*stack_sda[SMB_STACK_LEN],
-				*stack_sha[SMB_STACK_LEN];
-	static int	stack_idx;
-	char		tmp_file[128];
-	FILE		*tmp_sdt,
-				*tmp_shd,
-				*tmp_sid,
-				*tmp_sda,
-				*tmp_sha;
-
-if(op==SMB_STACK_PUSH) {
-	if(stack_idx>=SMB_STACK_LEN)
-		return(1);
-	if(shd_fp==NULL || sdt_fp==NULL || sid_fp==NULL) /* Msg base not open */
-		return(0);
-	memcpy(stack_file[stack_idx],smb_file,128);
-	stack_sdt[stack_idx]=sdt_fp;
-	stack_shd[stack_idx]=shd_fp;
-	stack_sid[stack_idx]=sid_fp;
-	stack_sda[stack_idx]=sda_fp;
-	stack_sha[stack_idx]=sha_fp;
-	stack_idx++;
-	return(0); }
-/* pop or xchng */
-if(!stack_idx)	/* Nothing on the stack, so do nothing */
-	return(0);
-if(op==SMB_STACK_XCHNG) {
-	if(!shd_fp)
-		return(0);
-	memcpy(tmp_file,smb_file,128);
-	tmp_sdt=sdt_fp;
-	tmp_shd=shd_fp;
-	tmp_sid=sid_fp;
-	tmp_sda=sda_fp;
-	tmp_sha=sha_fp; }
-
-stack_idx--;
-memcpy(smb_file,stack_file[stack_idx],128);
-sdt_fp=stack_sdt[stack_idx];
-shd_fp=stack_shd[stack_idx];
-sid_fp=stack_sid[stack_idx];
-sda_fp=stack_sda[stack_idx];
-sha_fp=stack_sha[stack_idx];
-if(op==SMB_STACK_XCHNG) {
-	stack_idx++;
-	memcpy(stack_file[stack_idx-1],tmp_file,128);
-	stack_sdt[stack_idx-1]=tmp_sdt;
-	stack_shd[stack_idx-1]=tmp_shd;
-	stack_sid[stack_idx-1]=tmp_sid;
-	stack_sda[stack_idx-1]=tmp_sda;
-	stack_sha[stack_idx-1]=tmp_sha; }
-return(0);
-}
-
-/****************************************************************************/
-/* Truncates header file													*/
-/* Retrys for retry_time number of seconds									*/
-/* Return 0 on success, non-zero otherwise									*/
-/****************************************************************************/
-int smb_trunchdr(int retry_time)
-{
-	long start;
-
-start=time(NULL);
-rewind(shd_fp);
-while(1) {
-	if(!chsize(fileno(shd_fp),0L))
-		break;
-	if(errno!=EACCES)
-		return(-1);
-	if(time(NULL)-start>=retry_time)		/* Time-out */
-		return(-2); }
-return(0);
-}
-
-/*********************************/
-/* Message Base Header Functions */
-/*********************************/
-
-/****************************************************************************/
-/* Attempts for retry_time number of seconds to lock the message base hdr	*/
-/****************************************************************************/
-int smb_locksmbhdr(int retry_time)
-{
-	ulong start;
-
-start=time(NULL);
-while(1) {
-	if(!lock(fileno(shd_fp),0L,sizeof(smbhdr_t)+sizeof(smbstatus_t)))
-		return(0);
-	if(time(NULL)-start>=retry_time)
-		break;							/* Incase we've already locked it */
-	unlock(fileno(shd_fp),0L,sizeof(smbhdr_t)+sizeof(smbstatus_t)); }
-return(-1);
-}
-
-/****************************************************************************/
-/* Read the SMB header from the header file and place into "status"         */
-/****************************************************************************/
-int smb_getstatus(smbstatus_t *status)
-{
-    char    str[128];
-	int 	i;
-
-setvbuf(shd_fp,shd_buf,_IONBF,SHD_BLOCK_LEN);
-clearerr(shd_fp);
-fseek(shd_fp,sizeof(smbhdr_t),SEEK_SET);
-i=fread(status,1,sizeof(smbstatus_t),shd_fp);
-setvbuf(shd_fp,shd_buf,_IOFBF,SHD_BLOCK_LEN);
-if(i==sizeof(smbstatus_t))
-	return(0);
-return(1);
-}
-
-/****************************************************************************/
-/* Writes message base header												*/
-/****************************************************************************/
-int smb_putstatus(smbstatus_t status)
-{
-	int i;
-
-clearerr(shd_fp);
-fseek(shd_fp,sizeof(smbhdr_t),SEEK_SET);
-i=fwrite(&status,1,sizeof(smbstatus_t),shd_fp);
-fflush(shd_fp);
-if(i==sizeof(smbstatus_t))
-	return(0);
-return(1);
-}
-
-/****************************************************************************/
-/* Unlocks previously locks message base header 							*/
-/****************************************************************************/
-int smb_unlocksmbhdr()
-{
-return(unlock(fileno(shd_fp),0L,sizeof(smbhdr_t)+sizeof(smbstatus_t)));
-}
-
-/********************************/
-/* Individual Message Functions */
-/********************************/
-
-/****************************************************************************/
-/* Attempts for retry_time number of seconds to lock the header for 'msg'   */
-/****************************************************************************/
-int smb_lockmsghdr(smbmsg_t msg, int retry_time)
-{
-    ulong start;
-
-start=time(NULL);
-while(1) {
-	if(!lock(fileno(shd_fp),msg.idx.offset,sizeof(msghdr_t)))
-        return(0);
-    if(time(NULL)-start>=retry_time)
-		break;
-	unlock(fileno(shd_fp),msg.idx.offset,sizeof(msghdr_t)); }
-return(-1);
-}
-
-/****************************************************************************/
-/* Fills msg->idx with message index based on msg->hdr.number				*/
-/* OR if msg->hdr.number is 0, based on msg->offset (record offset).		*/
-/* if msg.hdr.number does not equal 0, then msg->offset is filled too.		*/
-/* Either msg->hdr.number or msg->offset must be initialized before 		*/
-/* calling this function													*/
-/* Returns 1 if message number wasn't found, 0 if it was                    */
-/****************************************************************************/
-int smb_getmsgidx(smbmsg_t *msg)
-{
-	idxrec_t idx;
-	ulong	 l,length,total,bot,top;
-
-clearerr(sid_fp);
-if(!msg->hdr.number) {
-	fseek(sid_fp,msg->offset*sizeof(idxrec_t),SEEK_SET);
-	if(!fread(&msg->idx,sizeof(idxrec_t),1,sid_fp))
-		return(1);
-	return(0); }
-
-length=filelength(fileno(sid_fp));
-if(!length)
-	return(1);
-total=length/sizeof(idxrec_t);
-if(!total)
-	return(1);
-
-bot=0;
-top=total;
-l=total/2; /* Start at middle index */
-while(1) {
-	fseek(sid_fp,l*sizeof(idxrec_t),SEEK_SET);
-	if(!fread(&idx,sizeof(idxrec_t),1,sid_fp))
-		return(1);
-	if(bot==top-1 && idx.number!=msg->hdr.number)
-        return(1);
-	if(idx.number>msg->hdr.number) {
-		top=l;
-		l=bot+((top-bot)/2);
-		continue; }
-	if(idx.number<msg->hdr.number) {
-		bot=l;
-		l=top-((top-bot)/2);
-		continue; }
-	break; }
-msg->idx=idx;
-msg->offset=l;
-return(0);
-}
-
-/****************************************************************************/
-/* Reads the last index record in the open message base 					*/
-/****************************************************************************/
-int smb_getlastidx(idxrec_t *idx)
-{
-	long length;
-
-clearerr(sid_fp);
-length=filelength(fileno(sid_fp));
-if(length<sizeof(idxrec_t))
-	return(-1);
-fseek(sid_fp,length-sizeof(idxrec_t),SEEK_SET);
-if(!fread(idx,sizeof(idxrec_t),1,sid_fp))
-	return(-2);
-return(0);
-}
-
-/****************************************************************************/
-/* Figures out the total length of the header record for 'msg'              */
-/* Returns length															*/
-/****************************************************************************/
-uint smb_getmsghdrlen(smbmsg_t msg)
-{
-	int i;
-
-/* fixed portion */
-msg.hdr.length=sizeof(msghdr_t);
-/* data fields */
-msg.hdr.length+=msg.hdr.total_dfields*sizeof(dfield_t);
-/* header fields */
-for(i=0;i<msg.total_hfields;i++) {
-	msg.hdr.length+=sizeof(hfield_t);
-	msg.hdr.length+=msg.hfield[i].length; }
-return(msg.hdr.length);
-}
-
-/****************************************************************************/
-/* Figures out the total length of the data buffer for 'msg'                */
-/* Returns length															*/
-/****************************************************************************/
-ulong smb_getmsgdatlen(smbmsg_t msg)
-{
-	int i;
-	ulong length=0L;
-
-for(i=0;i<msg.hdr.total_dfields;i++)
-	length+=msg.dfield[i].length;
-return(length);
-}
-
-/****************************************************************************/
-/* Read header information into 'msg' structure                             */
-/* msg->idx.offset must be set before calling this function 				*/
-/* Must call smb_freemsgmem() to free memory allocated for var len strs 	*/
-/* Returns 0 on success, non-zero if error									*/
-/****************************************************************************/
-int smb_getmsghdr(smbmsg_t *msg)
-{
-	ushort	i;
-	ulong	l,offset;
-	idxrec_t idx;
-
-rewind(shd_fp);
-fseek(shd_fp,msg->idx.offset,SEEK_SET);
-idx=msg->idx;
-offset=msg->offset;
-memset(msg,0,sizeof(smbmsg_t));
-msg->idx=idx;
-msg->offset=offset;
-if(!fread(&msg->hdr,sizeof(msghdr_t),1,shd_fp))
-	return(-1);
-if(memcmp(msg->hdr.id,"SHD\x1a",4))
-	return(-2);
-if(msg->hdr.version<0x110)
-	return(-9);
-l=sizeof(msghdr_t);
-if(msg->hdr.total_dfields && (msg->dfield
-	=(dfield_t *)MALLOC(sizeof(dfield_t)*msg->hdr.total_dfields))==NULL) {
-	smb_freemsgmem(*msg);
-	return(-3); }
-i=0;
-while(i<msg->hdr.total_dfields && l<msg->hdr.length) {
-	if(!fread(&msg->dfield[i],sizeof(dfield_t),1,shd_fp)) {
-		smb_freemsgmem(*msg);
-		return(-4); }
-	i++;
-	l+=sizeof(dfield_t); }
-if(i<msg->hdr.total_dfields) {
-	smb_freemsgmem(*msg);
-	return(-8); }
-
-while(l<msg->hdr.length) {
-	i=msg->total_hfields;
-	if((msg->hfield_dat=(void **)REALLOC(msg->hfield_dat,sizeof(void *)*(i+1)))
-		==NULL) {
-		smb_freemsgmem(*msg);
-		return(-3); }
-	if((msg->hfield=(hfield_t *)REALLOC(msg->hfield
-		,sizeof(hfield_t)*(i+1)))==NULL) {
-		smb_freemsgmem(*msg);
-		return(-3); }
-	msg->total_hfields++;
-	if(!fread(&msg->hfield[i],sizeof(hfield_t),1,shd_fp)) {
-		smb_freemsgmem(*msg);
-		return(-5); }
-	l+=sizeof(hfield_t);
-	if((msg->hfield_dat[i]=(char *)MALLOC(msg->hfield[i].length+1))
-		==NULL) {			/* Allocate 1 extra for NULL terminator */
-		smb_freemsgmem(*msg);  /* or 0 length field */
-		return(-3); }
-	memset(msg->hfield_dat[i],0,msg->hfield[i].length+1);  /* init to NULL */
-	if(msg->hfield[i].length
-		&& !fread(msg->hfield_dat[i],msg->hfield[i].length,1,shd_fp)) {
-		smb_freemsgmem(*msg);
-		return(-6); }
-
-	switch(msg->hfield[i].type) {	/* convenience variables */
-		case SENDER:
-			if(!msg->from) {
-				msg->from=msg->hfield_dat[i];
-				break; }
-		case FORWARDED: 	/* fall through */
-			msg->forwarded=1;
-			break;
-		case SENDERAGENT:
-			if(!msg->forwarded)
-				msg->from_agent=*(ushort *)msg->hfield_dat[i];
-            break;
-		case SENDEREXT:
-			if(!msg->forwarded)
-				msg->from_ext=msg->hfield_dat[i];
-			break;
-		case SENDERNETTYPE:
-			if(!msg->forwarded)
-				msg->from_net.type=*(ushort *)msg->hfield_dat[i];
-            break;
-		case SENDERNETADDR:
-			if(!msg->forwarded)
-				msg->from_net.addr=msg->hfield_dat[i];
-            break;
-		case REPLYTO:
-			msg->replyto=msg->hfield_dat[i];
-            break;
-		case REPLYTOEXT:
-			msg->replyto_ext=msg->hfield_dat[i];
-			break;
-		case REPLYTOAGENT:
-			msg->replyto_agent=*(ushort *)msg->hfield_dat[i];
-            break;
-		case REPLYTONETTYPE:
-			msg->replyto_net.type=*(ushort *)msg->hfield_dat[i];
-            break;
-		case REPLYTONETADDR:
-			msg->replyto_net.addr=msg->hfield_dat[i];
-            break;
-		case RECIPIENT:
-			msg->to=msg->hfield_dat[i];
-            break;
-		case RECIPIENTEXT:
-			msg->to_ext=msg->hfield_dat[i];
-			break;
-		case RECIPIENTAGENT:
-			msg->to_agent=*(ushort *)msg->hfield_dat[i];
-            break;
-		case RECIPIENTNETTYPE:
-			msg->to_net.type=*(ushort *)msg->hfield_dat[i];
-            break;
-		case RECIPIENTNETADDR:
-			msg->to_net.addr=msg->hfield_dat[i];
-            break;
-		case SUBJECT:
-			msg->subj=msg->hfield_dat[i];
-			break; }
-	l+=msg->hfield[i].length; }
-
-if(!msg->from || !msg->to || !msg->subj) {
-	smb_freemsgmem(*msg);
-	return(-7); }
-return(0);
-}
-
-/****************************************************************************/
-/* Frees memory allocated for 'msg'                                         */
-/****************************************************************************/
-void smb_freemsgmem(smbmsg_t msg)
-{
-	ushort	i;
-
-if(msg.dfield)
-	FREE(msg.dfield);
-for(i=0;i<msg.total_hfields;i++)
-	if(msg.hfield_dat[i])
-		FREE(msg.hfield_dat[i]);
-if(msg.hfield)
-	FREE(msg.hfield);
-if(msg.hfield_dat)
-	FREE(msg.hfield_dat);
-}
-
-/****************************************************************************/
-/* Unlocks header for 'msg'                                                 */
-/****************************************************************************/
-int smb_unlockmsghdr(smbmsg_t msg)
-{
-return(unlock(fileno(shd_fp),msg.idx.offset,sizeof(msghdr_t)));
-}
-
-
-/****************************************************************************/
-/* Adds a header field to the 'msg' structure (in memory only)              */
-/****************************************************************************/
-int smb_hfield(smbmsg_t *msg, ushort type, ushort length, void *data)
-{
-	int i;
-
-i=msg->total_hfields;
-if((msg->hfield=(hfield_t *)REALLOC(msg->hfield,sizeof(hfield_t)*(i+1)))
-	==NULL)
-	return(1);
-if((msg->hfield_dat=(void **)REALLOC(msg->hfield_dat,sizeof(void *)*(i+1)))
-	==NULL)
-	return(2);
-msg->total_hfields++;
-msg->hfield[i].type=type;
-msg->hfield[i].length=length;
-if(length) {
-	if((msg->hfield_dat[i]=(void *)MALLOC(length))==NULL)
-		return(4);
-	memcpy(msg->hfield_dat[i],data,length); }
-else
-	msg->hfield_dat[i]=NULL;
-return(0);
-}
-
-/****************************************************************************/
-/* Adds a data field to the 'msg' structure (in memory only)                */
-/* Automatically figures out the offset into the data buffer from existing	*/
-/* dfield lengths															*/
-/****************************************************************************/
-int smb_dfield(smbmsg_t *msg, ushort type, ulong length)
-{
-	int i,j;
-
-i=msg->hdr.total_dfields;
-if((msg->dfield=(dfield_t *)REALLOC(msg->dfield,sizeof(dfield_t)*(i+1)))
-	==NULL)
-	return(1);
-msg->hdr.total_dfields++;
-msg->dfield[i].type=type;
-msg->dfield[i].length=length;
-for(j=msg->dfield[i].offset=0;j<i;j++)
-	msg->dfield[i].offset+=msg->dfield[j].length;
-return(0);
-}
-
-/****************************************************************************/
-/* Checks CRC history file for duplicate crc. If found, returns 1.			*/
-/* If no dupe, adds to CRC history and returns 0, or negative if error. 	*/
-/****************************************************************************/
-int smb_addcrc(ulong max_crcs, ulong crc, int retry_time)
-{
-	char	str[128];
-	int 	file;
-	long	length;
-	ulong	l,*buf;
-	time_t	start;
-
-if(!max_crcs)
-	return(0);
-start=time(NULL);
-sprintf(str,"%s.SCH",smb_file);
-while(1) {
-	if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYRW,S_IWRITE|S_IREAD))!=-1)
-		break;
-	if(errno!=EACCES)
-		return(-1);
-	if(time(NULL)-start>=retry_time)
-        return(-2); }
-length=filelength(file);
-if(length<0L) {
-	close(file);
-	return(-4); }
-if((buf=(ulong *)MALLOC(max_crcs*4))==NULL) {
-	close(file);
-	return(-3); }
-if(length>=max_crcs*4) {			/* Reached or exceeds max crcs */
-	read(file,buf,max_crcs*4);
-	for(l=0;l<max_crcs;l++)
-		if(crc==buf[l])
-			break;
-	if(l<max_crcs) {				/* Dupe CRC found */
-		close(file);
-		FREE(buf);
-		return(1); }
-	chsize(file,0L);				/* truncate it */
-	lseek(file,0L,SEEK_SET);
-	write(file,buf+4,(max_crcs-1)*4); }
-
-else if(length/4) { 						/* Less than max crcs */
-	read(file,buf,length);
-	for(l=0;l<length/4;l++)
-		if(crc==buf[l])
-			break;
-	if(l<length/4) {					/* Dupe CRC found */
-		close(file);
-		FREE(buf);
-		return(1); } }
-
-lseek(file,0L,SEEK_END);
-write(file,&crc,4); 			   /* Write to the end */
-FREE(buf);
-close(file);
-return(0);
-}
-
-
-/****************************************************************************/
-/* Creates a new message header record in the header file.					*/
-/* If storage is SMB_SELFPACK, self-packing conservative allocation is used */
-/* If storage is SMB_FASTALLOC, fast allocation is used 					*/
-/* If storage is SMB_HYPERALLOC, no allocation tables are used (fastest)	*/
-/****************************************************************************/
-int smb_addmsghdr(smbmsg_t *msg, smbstatus_t *status, int storage
-	,int retry_time)
-{
-	int i;
-	long l;
-
-if(smb_locksmbhdr(retry_time))
-    return(1);
-if(smb_getstatus(status))
-    return(2);
-
-if(storage!=SMB_HYPERALLOC && (i=smb_open_ha(retry_time))!=0)
-    return(i);
-
-msg->hdr.length=smb_getmsghdrlen(*msg);
-if(storage==SMB_HYPERALLOC)
-	l=smb_hallochdr(status->header_offset);
-else if(storage==SMB_FASTALLOC)
-    l=smb_fallochdr(msg->hdr.length);
-else
-    l=smb_allochdr(msg->hdr.length);
-if(l==-1L) {
-	smb_unlocksmbhdr();
-	fclose(sha_fp);
-	return(-1); }
-
-status->last_msg++;
-msg->idx.number=msg->hdr.number=status->last_msg;
-msg->idx.offset=status->header_offset+l;
-msg->idx.time=msg->hdr.when_imported.time;
-msg->idx.attr=msg->hdr.attr;
-msg->offset=status->total_msgs;
-status->total_msgs++;
-smb_putstatus(*status);
-
-if(storage!=SMB_HYPERALLOC)
-	fclose(sha_fp);
-i=smb_putmsg(*msg);
-smb_unlocksmbhdr();
-return(i);
-}
-
-/****************************************************************************/
-/* Writes both header and index information for msg 'msg'                   */
-/****************************************************************************/
-int smb_putmsg(smbmsg_t msg)
-{
-	int i;
-
-i=smb_putmsghdr(msg);
-if(i)
-	return(i);
-return(smb_putmsgidx(msg));
-}
-
-/****************************************************************************/
-/* Writes index information for 'msg'                                       */
-/* msg.idx																	*/
-/* and msg.offset must be set prior to calling to this function             */
-/* Returns 0 if everything ok                                               */
-/****************************************************************************/
-int smb_putmsgidx(smbmsg_t msg)
-{
-
-clearerr(sid_fp);
-fseek(sid_fp,msg.offset*sizeof(idxrec_t),SEEK_SET);
-if(!fwrite(&msg.idx,sizeof(idxrec_t),1,sid_fp))
-	return(1);
-fflush(sid_fp);
-return(0);
-}
-
-/****************************************************************************/
-/* Writes header information for 'msg'                                      */
-/* msg.hdr.length                                                           */
-/* msg.idx.offset                                                           */
-/* and msg.offset must be set prior to calling to this function             */
-/* Returns 0 if everything ok                                               */
-/****************************************************************************/
-int smb_putmsghdr(smbmsg_t msg)
-{
-	ushort	i;
-	ulong	l;
-
-clearerr(shd_fp);
-if(fseek(shd_fp,msg.idx.offset,SEEK_SET))
-	return(-1);
-
-/************************************************/
-/* Write the fixed portion of the header record */
-/************************************************/
-if(!fwrite(&msg.hdr,sizeof(msghdr_t),1,shd_fp))
-	return(-2);
-
-/************************************************/
-/* Write the data fields (each is fixed length) */
-/************************************************/
-for(i=0;i<msg.hdr.total_dfields;i++)
-	if(!fwrite(&msg.dfield[i],sizeof(dfield_t),1,shd_fp))
-		return(-3);
-
-/*******************************************/
-/* Write the variable length header fields */
-/*******************************************/
-for(i=0;i<msg.total_hfields;i++) {
-	if(!fwrite(&msg.hfield[i],sizeof(hfield_t),1,shd_fp))
-		return(-4);
-	if(msg.hfield[i].length 					/* more then 0 bytes long */
-		&& !fwrite(msg.hfield_dat[i],msg.hfield[i].length,1,shd_fp))
-		return(-5); }
-
-l=smb_getmsghdrlen(msg);
-while(l%SHD_BLOCK_LEN) {
-	if(fputc(0,shd_fp)==EOF)
-		return(-6); 			   /* pad block with NULL */
-	l++; }
-fflush(shd_fp);
-return(0);
-}
-
-/****************************************************************************/
-/* Creates a sub-board's initial header file                                */
-/* Truncates and deletes other associated SMB files 						*/
-/****************************************************************************/
-int smb_create(ulong max_crcs, ulong max_msgs, ushort max_age, ushort attr
-	,int retry_time)
-{
-    char        str[128];
-	smbhdr_t	hdr;
-	smbstatus_t status;
-
-if(filelength(fileno(shd_fp))>=sizeof(smbhdr_t)+sizeof(smbstatus_t)
-	&& smb_locksmbhdr(retry_time))	/* header exists, so lock it */
-	return(1);
-memset(&hdr,0,sizeof(smbhdr_t));
-memset(&status,0,sizeof(smbstatus_t));
-memcpy(hdr.id,"SMB\x1a",4);     /* <S> <M> <B> <^Z> */
-hdr.version=SMB_VERSION;
-hdr.length=sizeof(smbhdr_t)+sizeof(smbstatus_t);
-status.last_msg=status.total_msgs=0;
-status.header_offset=sizeof(smbhdr_t)+sizeof(smbstatus_t);
-status.max_crcs=max_crcs;
-status.max_msgs=max_msgs;
-status.max_age=max_age;
-status.attr=attr;
-rewind(shd_fp);
-fwrite(&hdr,1,sizeof(smbhdr_t),shd_fp);
-fwrite(&status,1,sizeof(smbstatus_t),shd_fp);
-rewind(shd_fp);
-chsize(fileno(shd_fp),sizeof(smbhdr_t)+sizeof(smbstatus_t));
-fflush(shd_fp);
-
-rewind(sdt_fp);
-chsize(fileno(sdt_fp),0L);
-rewind(sid_fp);
-chsize(fileno(sid_fp),0L);
-
-sprintf(str,"%s.SDA",smb_file);
-remove(str);						/* if it exists, delete it */
-sprintf(str,"%s.SHA",smb_file);
-remove(str);                        /* if it exists, delete it */
-sprintf(str,"%s.SCH",smb_file);
-remove(str);
-smb_unlocksmbhdr();
-return(0);
-}
-
-/****************************************************************************/
-/* Returns number of data blocks required to store "length" amount of data  */
-/****************************************************************************/
-ulong smb_datblocks(ulong length)
-{
-	ulong blocks;
-
-blocks=length/SDT_BLOCK_LEN;
-if(length%SDT_BLOCK_LEN)
-	blocks++;
-return(blocks);
-}
-
-/****************************************************************************/
-/* Returns number of header blocks required to store "length" size header   */
-/****************************************************************************/
-ulong smb_hdrblocks(ulong length)
-{
-	ulong blocks;
-
-blocks=length/SHD_BLOCK_LEN;
-if(length%SHD_BLOCK_LEN)
-	blocks++;
-return(blocks);
-}
-
-/****************************************************************************/
-/* Finds unused space in data file based on block allocation table and		*/
-/* marks space as used in allocation table.                                 */
-/* File must be opened read/write DENY ALL									*/
-/* Returns offset to beginning of data (in bytes, not blocks)				*/
-/* Assumes smb_open_da() has been called									*/
-/* fclose(sda_fp) should be called after									*/
-/* Returns negative on error												*/
-/****************************************************************************/
-long smb_allocdat(ulong length, ushort headers)
-{
-    ushort  i,j;
-	ulong	l,blocks,offset=0L;
-
-blocks=smb_datblocks(length);
-j=0;	/* j is consecutive unused block counter */
-fflush(sda_fp);
-rewind(sda_fp);
-while(!feof(sda_fp)) {
-	if(!fread(&i,2,1,sda_fp))
-        break;
-	offset+=SDT_BLOCK_LEN;
-    if(!i) j++;
-    else   j=0;
-	if(j==blocks) {
-		offset-=(blocks*SDT_BLOCK_LEN);
-        break; } }
-clearerr(sda_fp);
-fseek(sda_fp,(offset/SDT_BLOCK_LEN)*2L,SEEK_SET);
-for(l=0;l<blocks;l++)
-	if(!fwrite(&headers,2,1,sda_fp))
-		return(-1);
-fflush(sda_fp);
-return(offset);
-}
-
-/****************************************************************************/
-/* Allocates space for data, but doesn't search for unused blocks           */
-/* Returns negative on error												*/
-/****************************************************************************/
-long smb_fallocdat(ulong length, ushort headers)
-{
-	ulong	l,blocks,offset;
-
-fflush(sda_fp);
-clearerr(sda_fp);
-blocks=smb_datblocks(length);
-fseek(sda_fp,0L,SEEK_END);
-offset=(ftell(sda_fp)/2L)*SDT_BLOCK_LEN;
-for(l=0;l<blocks;l++)
-	if(!fwrite(&headers,2,1,sda_fp))
-        break;
-fflush(sda_fp);
-if(l<blocks)
-	return(-1L);
-return(offset);
-}
-
-/****************************************************************************/
-/* De-allocates space for data												*/
-/* Returns non-zero on error												*/
-/****************************************************************************/
-int smb_freemsgdat(ulong offset, ulong length, ushort headers)
-{
-	ushort	i;
-	ulong	l,blocks;
-
-blocks=smb_datblocks(length);
-
-clearerr(sda_fp);
-for(l=0;l<blocks;l++) {
-	if(fseek(sda_fp,((offset/SDT_BLOCK_LEN)+l)*2L,SEEK_SET))
-		return(1);
-	if(!fread(&i,2,1,sda_fp))
-		return(2);
-	if(headers>i)
-		i=0;			/* don't want to go negative */
-	else
-		i-=headers;
-	if(fseek(sda_fp,-2L,SEEK_CUR))
-		return(3);
-	if(!fwrite(&i,2,1,sda_fp))
-		return(4); }
-fflush(sda_fp);
-return(0);
-}
-
-/****************************************************************************/
-/* Adds to data allocation records for blocks starting at 'offset'          */
-/* Returns non-zero on error												*/
-/****************************************************************************/
-int smb_incdat(ulong offset, ulong length, ushort headers)
-{
-	ushort	i;
-	ulong	l,blocks;
-
-clearerr(sda_fp);
-blocks=smb_datblocks(length);
-for(l=0;l<blocks;l++) {
-	fseek(sda_fp,((offset/SDT_BLOCK_LEN)+l)*2L,SEEK_SET);
-	if(!fread(&i,2,1,sda_fp))
-		return(1);
-	i+=headers;
-	fseek(sda_fp,-2L,SEEK_CUR);
-	if(!fwrite(&i,2,1,sda_fp))
-		return(2); }
-fflush(sda_fp);
-return(0);
-}
-
-/****************************************************************************/
-/* De-allocates blocks for header record									*/
-/* Returns non-zero on error												*/
-/****************************************************************************/
-int smb_freemsghdr(ulong offset, ulong length)
-{
-	uchar	c=0;
-	ulong	l,blocks;
-
-clearerr(sha_fp);
-blocks=smb_hdrblocks(length);
-fseek(sha_fp,offset/SHD_BLOCK_LEN,SEEK_SET);
-for(l=0;l<blocks;l++)
-	if(!fwrite(&c,1,1,sha_fp))
-		return(1);
-fflush(sha_fp);
-return(0);
-}
-
-/****************************************************************************/
-/* Frees all allocated header and data blocks for 'msg'                     */
-/****************************************************************************/
-int smb_freemsg(smbmsg_t msg, smbstatus_t status)
-{
-	int 	i;
-	ushort	x;
-
-if(status.attr&SMB_HYPERALLOC)	/* Nothing to do */
-	return(0);
-
-for(x=0;x<msg.hdr.total_dfields;x++) {
-	if((i=smb_freemsgdat(msg.hdr.offset+msg.dfield[x].offset
-		,msg.dfield[x].length,1))!=0)
-		return(i); }
-return(smb_freemsghdr(msg.idx.offset-status.header_offset,msg.hdr.length));
-}
-
-/****************************************************************************/
-/* Finds unused space in header file based on block allocation table and	*/
-/* marks space as used in allocation table.                                 */
-/* File must be opened read/write DENY ALL									*/
-/* Returns offset to beginning of header (in bytes, not blocks) 			*/
-/* Assumes smb_open_ha() has been called									*/
-/* fclose(sha_fp) should be called after									*/
-/* Returns -1L on error 													*/
-/****************************************************************************/
-long smb_allochdr(ulong length)
-{
-	uchar	c;
-	ushort	i;
-	ulong	l,blocks,offset=0;
-
-blocks=smb_hdrblocks(length);
-i=0;	/* i is consecutive unused block counter */
-fflush(sha_fp);
-rewind(sha_fp);
-while(!feof(sha_fp)) {
-	if(!fread(&c,1,1,sha_fp))
-        break;
-	offset+=SHD_BLOCK_LEN;
-	if(!c) i++;
-	else   i=0;
-	if(i==blocks) {
-		offset-=(blocks*SHD_BLOCK_LEN);
-        break; } }
-clearerr(sha_fp);
-fseek(sha_fp,offset/SHD_BLOCK_LEN,SEEK_SET);
-c=1;
-for(l=0;l<blocks;l++)
-	if(!fwrite(&c,1,1,sha_fp))
-		return(-1L);
-fflush(sha_fp);
-return(offset);
-}
-
-/****************************************************************************/
-/* Allocates space for index, but doesn't search for unused blocks          */
-/* Returns -1L on error 													*/
-/****************************************************************************/
-long smb_fallochdr(ulong length)
-{
-	uchar	c=1;
-	ulong	l,blocks,offset;
-
-blocks=smb_hdrblocks(length);
-fflush(sha_fp);
-clearerr(sha_fp);
-fseek(sha_fp,0L,SEEK_END);
-offset=ftell(sha_fp)*SHD_BLOCK_LEN;
-for(l=0;l<blocks;l++)
-	if(!fwrite(&c,1,1,sha_fp))
-		return(-1L);
-fflush(sha_fp);
-return(offset);
-}
-
-/************************************************************************/
-/* Allocate header blocks using Hyper Allocation						*/
-/* this function should be most likely not be called from anywhere but	*/
-/* smb_addmsghdr()														*/
-/************************************************************************/
-long smb_hallochdr(ulong header_offset)
-{
-	long l;
-
-fflush(shd_fp);
-fseek(shd_fp,0L,SEEK_END);
-l=ftell(shd_fp);
-if(l<header_offset) 					/* Header file truncated?!? */
-	return(header_offset);
-while((l-header_offset)%SHD_BLOCK_LEN)	/* Make sure even block boundry */
-	l++;
-return(l-header_offset);
-}
-
-/************************************************************************/
-/* Allocate data blocks using Hyper Allocation							*/
-/* smb_locksmbhdr() should be called before this function and not		*/
-/* unlocked until all data fields for this message have been written	*/
-/* to the SDT file														*/
-/************************************************************************/
-long smb_hallocdat()
-{
-	long l;
-
-fflush(sdt_fp);
-fseek(sdt_fp,0L,SEEK_END);
-l=ftell(sdt_fp);
-if(l<=0)
-	return(l);
-while(l%SDT_BLOCK_LEN)					/* Make sure even block boundry */
-	l++;
-return(l);
-}
-
-/* End of SMBLIB.C */
diff --git a/src/sbbs2/fido/smblib.h b/src/sbbs2/fido/smblib.h
deleted file mode 100644
index b682f74f03..0000000000
--- a/src/sbbs2/fido/smblib.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/* SMBLIB.H */
-
-#ifndef _SMBLIB_H
-#define _SMBLIB_H
-
-#if defined(__WATCOMC__) || defined(__TURBOC__)
-#	include <io.h>
-#	include <mem.h>
-#	include <share.h>
-#else
-#	include <memory.h>
-#endif
-
-#ifdef __WATCOMC__
-#	include <dos.h>
-#elif defined(__TURBOC__)
-#	include <dir.h>
-#endif
-
-#include <malloc.h>
-#include <time.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#define GLOBAL extern	/* turn smbvars.c files into header */
-
-#include "smbvars.c"
-
-#define SMB_STACK_LEN		4			/* Max msg bases in smb_stack() 	*/
-#define SMB_STACK_POP       0           /* Pop a msg base off of smb_stack() */
-#define SMB_STACK_PUSH      1           /* Push a msg base onto smb_stack() */
-#define SMB_STACK_XCHNG     2           /* Exchange msg base w/last pushed */
-
-int 	smb_open(int retry_time);
-void	smb_close(void);
-int 	smb_open_da(int retry_time);
-int 	smb_open_ha(int retry_time);
-int 	smb_create(ulong max_crcs, ulong max_msgs, ushort max_age, ushort attr
-				  ,int retry_time);
-int 	smb_stack(int op);
-int 	smb_trunchdr(int retry_time);
-int 	smb_locksmbhdr(int retry_time);
-int 	smb_getstatus(smbstatus_t *status);
-int 	smb_putstatus(smbstatus_t status);
-int 	smb_unlocksmbhdr(void);
-int 	smb_getmsgidx(smbmsg_t *msg);
-int 	smb_getlastidx(idxrec_t *idx);
-uint	smb_getmsghdrlen(smbmsg_t msg);
-ulong	smb_getmsgdatlen(smbmsg_t msg);
-int 	smb_lockmsghdr(smbmsg_t msg, int retry_time);
-int 	smb_getmsghdr(smbmsg_t *msg);
-int 	smb_unlockmsghdr(smbmsg_t msg);
-int 	smb_addcrc(ulong max_crcs, ulong crc, int retry_time);
-int 	smb_hfield(smbmsg_t *msg, ushort type, ushort length, void *data);
-int 	smb_dfield(smbmsg_t *msg, ushort type, ulong length);
-int 	smb_addmsghdr(smbmsg_t *msg, smbstatus_t *status, int storage
-				,int retry_time);
-int 	smb_putmsg(smbmsg_t msg);
-int 	smb_putmsgidx(smbmsg_t msg);
-int 	smb_putmsghdr(smbmsg_t msg);
-void	smb_freemsgmem(smbmsg_t msg);
-ulong	smb_hdrblocks(ulong length);
-ulong	smb_datblocks(ulong length);
-long	smb_allochdr(ulong length);
-long	smb_fallochdr(ulong length);
-long	smb_hallochdr(ulong header_offset);
-long	smb_allocdat(ulong length, ushort headers);
-long	smb_fallocdat(ulong length, ushort headers);
-long	smb_hallocdat(void);
-int 	smb_incdat(ulong offset, ulong length, ushort headers);
-int 	smb_freemsg(smbmsg_t msg, smbstatus_t status);
-int 	smb_freemsgdat(ulong offset, ulong length, ushort headers);
-int 	smb_freemsghdr(ulong offset, ulong length);
-
-#endif /* Don't add anything after this #endif statement */
diff --git a/src/sbbs2/fido/smbvars.c b/src/sbbs2/fido/smbvars.c
deleted file mode 100644
index 9b80d699e6..0000000000
--- a/src/sbbs2/fido/smbvars.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/* SMBVARS.C */
-
-/*************************************************************************/
-/* Global variables for SMBLIB. Same file used for both header and code. */
-/*************************************************************************/
-
-#ifndef GLOBAL
-#define GLOBAL
-#endif
-
-#include "smbdefs.h"
-#include <stdio.h>
-
-GLOBAL char 	smb_file[128];	/* path and filename for SMB file (no ext) */
-GLOBAL char 	shd_buf[SHD_BLOCK_LEN];
-GLOBAL FILE 	*sdt_fp;
-GLOBAL FILE 	*shd_fp;
-GLOBAL FILE 	*sid_fp;
-GLOBAL FILE 	*sda_fp;
-GLOBAL FILE 	*sha_fp;
-GLOBAL FILE 	*sch_fp;
-
diff --git a/src/sbbs2/file.c b/src/sbbs2/file.c
deleted file mode 100644
index 2ae1b479dd..0000000000
--- a/src/sbbs2/file.c
+++ /dev/null
@@ -1,325 +0,0 @@
-#line 1 "FILE.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/*************************************************************************/
-/* Add/delete/edit/view/retrieve the file information for struct file_t  */
-/* Called only from functions within xfer.c								 */
-/*************************************************************************/
-
-#include "sbbs.h"
-
-long fdate_dir(char *filespec);
-
-void getextdesc(uint dirnum, ulong datoffset, char *ext)
-{
-	char str[256];
-	int file;
-
-memset(ext,0,513);
-sprintf(str,"%s%s.EXB",dir[dirnum]->data_dir,dir[dirnum]->code);
-if((file=nopen(str,O_RDONLY))==-1)
-	return;
-lseek(file,(datoffset/F_LEN)*512L,SEEK_SET);
-read(file,ext,512);
-close(file);
-}
-
-void putextdesc(uint dirnum, ulong datoffset, char *ext)
-{
-	char str[256],nulbuf[512];
-	int file;
-
-memset(nulbuf,0,512);
-sprintf(str,"%s%s.EXB",dir[dirnum]->data_dir,dir[dirnum]->code);
-if((file=nopen(str,O_WRONLY|O_CREAT))==-1)
-	return;
-lseek(file,0L,SEEK_END);
-while(filelength(file)<(datoffset/F_LEN)*512L)
-	write(file,nulbuf,512);
-lseek(file,(datoffset/F_LEN)*512L,SEEK_SET);
-write(file,ext,512);
-close(file);
-}
-
-/****************************************************************************/
-/* Prints all information of file in file_t structure 'f'					*/
-/****************************************************************************/
-void fileinfo(file_t f)
-{
-	char str[256],fname[13],ext[513];
-	uint i,j;
-	long t;
-
-for(i=0;i<usrlibs;i++)
-	if(usrlib[i]==dir[f.dir]->lib)
-		break;
-for(j=0;j<usrdirs[i];j++)
-	if(usrdir[i][j]==f.dir)
-		break;
-unpadfname(f.name,fname);
-bprintf(text[FiLib],i+1,lib[dir[f.dir]->lib]->lname);
-bprintf(text[FiDir],j+1,dir[f.dir]->lname);
-bprintf(text[FiFilename],fname);
-if(f.size!=-1L)
-	bprintf(text[FiFileSize],ultoac(f.size,tmp));
-bprintf(text[FiCredits]
-	,(dir[f.dir]->misc&DIR_FREE || !f.cdt) ? "FREE" : ultoac(f.cdt,tmp));
-bprintf(text[FiDescription],f.desc);
-bprintf(text[FiUploadedBy],f.misc&FM_ANON ? text[UNKNOWN_USER] : f.uler);
-if(f.date)
-	bprintf(text[FiFileDate],timestr(&f.date));
-bprintf(text[FiDateUled],timestr(&f.dateuled));
-bprintf(text[FiDateDled],f.datedled ? timestr(&f.datedled) : "Never");
-bprintf(text[FiTimesDled],f.timesdled);
-if(f.size!=-1L)
-	bprintf(text[FiTransferTime],sectostr(f.timetodl,tmp));
-if(f.altpath) {
-	if(f.altpath<=altpaths) {
-		if(SYSOP)
-			bprintf(text[FiAlternatePath],altpath[f.altpath-1]); }
-	else
-		bprintf(text[InvalidAlternatePathN],f.altpath); }
-CRLF;
-if(f.misc&FM_EXTDESC) {
-	getextdesc(f.dir,f.datoffset,ext);
-	CRLF;
-	putmsg(ext,P_NOATCODES);
-	CRLF; }
-if(f.size==-1L)
-	bprintf(text[FileIsNotOnline],f.name);
-if(f.opencount)
-	bprintf(text[FileIsOpen],f.opencount,f.opencount>1 ? "s" : nulstr);
-
-}
-
-/****************************************************************************/
-/* Gets file data from dircode.IXB file										*/
-/* Need fields .name and .dir filled.                                       */
-/* only fills .offset, .dateuled, and .datedled                             */
-/****************************************************************************/
-void getfileixb(file_t *f)
-{
-	uchar HUGE16 *ixbbuf,str[256],fname[13];
-	int file;
-	ulong l,length;
-
-sprintf(str,"%s%s.IXB",dir[f->dir]->data_dir,dir[f->dir]->code);
-if((file=nopen(str,O_RDONLY))==-1) {
-	errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-	return; }
-length=filelength(file);
-if(length%F_IXBSIZE) {
-	close(file);
-	errormsg(WHERE,ERR_LEN,str,length);
-	return; }
-if((ixbbuf=MALLOC(length))==NULL) {
-	close(file);
-	errormsg(WHERE,ERR_ALLOC,str,length);
-	return; }
-if(lread(file,ixbbuf,length)!=length) {
-	close(file);
-	FREE((char *)ixbbuf);
-	errormsg(WHERE,ERR_READ,str,length);
-	return; }
-close(file);
-strcpy(fname,f->name);
-for(l=8;l<12;l++)	/* Turn FILENAME.EXT into FILENAMEEXT */
-	fname[l]=fname[l+1];
-for(l=0;l<length;l+=F_IXBSIZE) {
-	sprintf(str,"%11.11s",ixbbuf+l);
-	if(!strcmp(str,fname))
-		break; }
-if(l>=length) {
-	errormsg(WHERE,ERR_CHK,str,0);
-	FREE((char *)ixbbuf);
-	return; }
-l+=11;
-f->datoffset=ixbbuf[l]|((long)ixbbuf[l+1]<<8)|((long)ixbbuf[l+2]<<16);
-f->dateuled=ixbbuf[l+3]|((long)ixbbuf[l+4]<<8)
-	|((long)ixbbuf[l+5]<<16)|((long)ixbbuf[l+6]<<24);
-f->datedled=ixbbuf[l+7]|((long)ixbbuf[l+8]<<8)
-	|((long)ixbbuf[l+9]<<16)|((long)ixbbuf[l+10]<<24);
-FREE((char *)ixbbuf);
-}
-
-/****************************************************************************/
-/* Gets filedata from dircode.DAT file										*/
-/* Need fields .name ,.dir and .offset to get other info    				*/
-/* Does not fill .dateuled or .datedled fields.                             */
-/****************************************************************************/
-void getfiledat(file_t *f)
-{
-	char buf[F_LEN+1],str[256];
-	int file;
-	long length;
-
-sprintf(str,"%s%s.DAT",dir[f->dir]->data_dir,dir[f->dir]->code);
-if((file=nopen(str,O_RDONLY))==-1) {
-	errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-	return; }
-length=filelength(file);
-if(f->datoffset>length) {
-	close(file);
-	errormsg(WHERE,ERR_LEN,str,length);
-	return; }
-if(length%F_LEN) {
-	close(file);
-	errormsg(WHERE,ERR_LEN,str,length);
-	return; }
-lseek(file,f->datoffset,SEEK_SET);
-if(read(file,buf,F_LEN)!=F_LEN) {
-	close(file);
-	errormsg(WHERE,ERR_READ,str,F_LEN);
-	return; }
-close(file);
-getrec(buf,F_ALTPATH,2,str);
-f->altpath=hptoi(str);
-getrec(buf,F_CDT,LEN_FCDT,str);
-f->cdt=atol(str);
-
-if(!f->size) {					/* only read disk if this is null */
-//	  if(dir[f->dir]->misc&DIR_FCHK) {
-		sprintf(str,"%s%s"
-			,f->altpath>0 && f->altpath<=altpaths ? altpath[f->altpath-1]
-			: dir[f->dir]->path,unpadfname(f->name,tmp));
-		f->size=flength(str);
-		f->date=fdate_dir(str);
-/*
-		}
-	else {
-		f->size=f->cdt;
-		f->date=0; }
-*/
-		}
-if((f->size>0L) && cur_cps)
-	f->timetodl=(f->size/(ulong)cur_cps);
-else
-	f->timetodl=0;
-
-getrec(buf,F_DESC,LEN_FDESC,f->desc);
-getrec(buf,F_ULER,LEN_ALIAS,f->uler);
-getrec(buf,F_TIMESDLED,5,str);
-f->timesdled=atoi(str);
-getrec(buf,F_OPENCOUNT,3,str);
-f->opencount=atoi(str);
-if(buf[F_MISC]!=ETX)
-	f->misc=buf[F_MISC]-SP;
-else
-	f->misc=0;
-}
-
-/****************************************************************************/
-/* Increments the opencount on the file data 'f' and adds the transaction 	*/
-/* to the backout.dab														*/
-/****************************************************************************/
-void openfile(file_t f)
-{
-	char str1[256],str2[4],str3[4],ch;
-	int file;
-
-/************************************/
-/* Increment open count in dat file */
-/************************************/
-sprintf(str1,"%s%s.DAT",dir[f.dir]->data_dir,dir[f.dir]->code);
-if((file=nopen(str1,O_RDWR))==-1) {
-	errormsg(WHERE,ERR_OPEN,str1,O_RDWR);
-	return; }
-lseek(file,f.datoffset+F_OPENCOUNT,SEEK_SET);
-if(read(file,str2,3)!=3) {
-	close(file);
-	errormsg(WHERE,ERR_READ,str1,3);
-	return; }
-str2[3]=0;
-itoa(atoi(str2)+1,str3,10);
-putrec(str2,0,3,str3);
-lseek(file,f.datoffset+F_OPENCOUNT,SEEK_SET);
-if(write(file,str2,3)!=3) {
-	close(file);
-	errormsg(WHERE,ERR_WRITE,str1,3);
-	return; }
-close(file);
-/**********************************/
-/* Add transaction to BACKOUT.DAB */
-/**********************************/
-sprintf(str1,"%sBACKOUT.DAB",node_dir);
-if((file=nopen(str1,O_WRONLY|O_APPEND|O_CREAT))==-1) {
-	errormsg(WHERE,ERR_OPEN,str1,O_WRONLY|O_APPEND|O_CREAT);
-	return; }
-ch=BO_OPENFILE;
-write(file,&ch,1);				/* backout type */
-write(file,dir[f.dir]->code,8); /* directory code */
-write(file,&f.datoffset,4);		/* offset into .dat file */
-write(file,&ch,BO_LEN-(1+8+4)); /* pad it */
-close(file);
-}
-
-/****************************************************************************/
-/* Decrements the opencount on the file data 'f' and removes the backout  	*/
-/* from the backout.dab														*/
-/****************************************************************************/
-void closefile(file_t f)
-{
-	uchar str1[256],str2[4],str3[4],ch,*buf;
-	int file;
-	long length,l,offset;
-
-/************************************/
-/* Decrement open count in dat file */
-/************************************/
-sprintf(str1,"%s%s.DAT",dir[f.dir]->data_dir,dir[f.dir]->code);
-if((file=nopen(str1,O_RDWR))==-1) {
-	errormsg(WHERE,ERR_OPEN,str1,O_RDWR);
-	return; }
-lseek(file,f.datoffset+F_OPENCOUNT,SEEK_SET);
-if(read(file,str2,3)!=3) {
-	close(file);
-	errormsg(WHERE,ERR_READ,str1,3);
-	return; }
-str2[3]=0;
-ch=atoi(str2);
-if(ch) ch--;
-itoa(ch,str3,10);
-putrec(str2,0,3,str3);
-lseek(file,f.datoffset+F_OPENCOUNT,SEEK_SET);
-if(write(file,str2,3)!=3) {
-	close(file);
-	errormsg(WHERE,ERR_WRITE,str1,3);
-	return; }
-close(file);
-/*****************************************/
-/* Removing transaction from BACKOUT.DAB */
-/*****************************************/
-sprintf(str1,"%sBACKOUT.DAB",node_dir);
-if(flength(str1)<1L)	/* file is not there or empty */
-	return;
-if((file=nopen(str1,O_RDONLY))==-1) {
-	errormsg(WHERE,ERR_OPEN,str1,O_RDONLY);
-	return; }
-length=filelength(file);
-if((buf=MALLOC(length))==NULL) {
-	close(file);
-	errormsg(WHERE,ERR_ALLOC,str1,length);
-	return; }
-if(read(file,buf,length)!=length) {
-	close(file);
-	FREE(buf);
-	errormsg(WHERE,ERR_READ,str1,length);
-	return; }
-close(file);
-if((file=nopen(str1,O_WRONLY|O_TRUNC))==-1) {
-	errormsg(WHERE,ERR_OPEN,str1,O_WRONLY|O_TRUNC);
-	return; }
-ch=0;								/* 'ch' is a 'file already removed' flag */
-for(l=0;l<length;l+=BO_LEN) {       /* in case file is in backout.dab > 1 */
-	if(!ch && buf[l]==BO_OPENFILE) {
-		memcpy(str1,buf+l+1,8);
-		str1[8]=0;
-		memcpy(&offset,buf+l+9,4);
-		if(!stricmp(str1,dir[f.dir]->code) && offset==f.datoffset) {
-			ch=1;
-			continue; } }
-	write(file,buf+l,BO_LEN); }
-FREE(buf);
-close(file);
-}
diff --git a/src/sbbs2/file_ovl.c b/src/sbbs2/file_ovl.c
deleted file mode 100644
index aa7eb5963c..0000000000
--- a/src/sbbs2/file_ovl.c
+++ /dev/null
@@ -1,580 +0,0 @@
-#line 1 "FILE_OVL.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-
-/****************************************************************************/
-/* Adds file data in 'f' to DIR#.DAT and DIR#.IXB   and updates user        */
-/* info for uploader. Must have .name, .desc and .dir fields filled prior   */
-/* to a call to this function.                                              */
-/* Returns 1 if file uploaded sucessfully, 0 if not.                        */
-/****************************************************************************/
-char uploadfile(file_t *f)
-{
-	uchar path[256],str[256],fname[25],ext[513],desc[513],tmp[128],*p;
-	static uchar sbbsfilename[128],sbbsfiledesc[128];
-	int  file;
-    uint i;
-    long length;
-	FILE *stream;
-
-f->misc=0;
-curdirnum=f->dir;
-if(findfile(f->dir,f->name)) {
-	errormsg(WHERE,ERR_CHK,f->name,f->dir);
-    return(0); }
-sprintf(path,"%s%s",f->altpath>0 && f->altpath<=altpaths
-	? altpath[f->altpath-1]
-	: dir[f->dir]->path,unpadfname(f->name,fname));
-if(!fexist(path)) {
-	bprintf(text[FileNotReceived],f->name);
-	sprintf(str,"Attempted to upload %s to %s %s (Not received)",f->name
-		,lib[dir[f->dir]->lib]->sname,dir[f->dir]->sname);
-    logline("U!",str);
-    return(0); }
-strcpy(tmp,f->name);
-truncsp(tmp);
-for(i=0;i<total_ftests;i++)
-	if(ftest[i]->ext[0]=='*' || !strcmp(tmp+9,ftest[i]->ext)) {
-		if(!chk_ar(ftest[i]->ar,useron))
-			continue;
-		attr(LIGHTGRAY);
-        bputs(ftest[i]->workstr);
-
-		sprintf(sbbsfilename,"SBBSFILENAME=%.12s",unpadfname(f->name,fname));
-		putenv(sbbsfilename);
-		sprintf(sbbsfiledesc,"SBBSFILEDESC=%.*s",LEN_FDESC,f->desc);
-		putenv(sbbsfiledesc);
-		sprintf(str,"%sSBBSFILE.NAM",node_dir);
-        if((stream=fopen(str,"w"))!=NULL) {
-			fwrite(fname,1,strlen(fname),stream);
-			fclose(stream); }
-        sprintf(str,"%sSBBSFILE.DES",node_dir);
-		if((stream=fopen(str,"w"))!=NULL) {
-			fwrite(f->desc,1,strlen(f->desc),stream);
-            fclose(stream); }
-		if(external(cmdstr(ftest[i]->cmd,path,f->desc,NULL),0)) { /* EX_OUTL */
-			bprintf(text[FileHadErrors],f->name,ftest[i]->ext);
-            if(SYSOP) {
-                if(!yesno(text[DeleteFileQ])) return(0); }
-            remove(path);
-			sprintf(str,"Attempted to upload %s to %s %s (%s Errors)",f->name
-				,lib[dir[f->dir]->lib]->sname,dir[f->dir]->sname,ftest[i]->ext);
-            logline("U!",str);
-            return(0); }
-        else {
-			sprintf(str,"%sSBBSFILE.NAM",node_dir);
-			if((stream=fopen(str,"r"))!=NULL) {
-				if(fgets(str,128,stream)) {
-					truncsp(str);
-					strupr(str);
-					padfname(str,f->name);
-					strcpy(tmp,f->name);
-					truncsp(tmp);
-					sprintf(path,"%s%s",f->altpath>0 && f->altpath<=altpaths
-						? altpath[f->altpath-1] : dir[f->dir]->path
-						,unpadfname(f->name,fname)); }
-                fclose(stream);
-				}
-			sprintf(str,"%sSBBSFILE.DES",node_dir);
-			if((stream=fopen(str,"r"))!=NULL) {
-				if(fgets(str,128,stream)) {
-					truncsp(str);
-					sprintf(f->desc,"%.*s",LEN_FDESC,str); }
-				fclose(stream); }
-            CRLF; } }
-
-if((length=flength(path))<=0L) {
-	bprintf(text[FileZeroLength],f->name);
-    remove(path);
-	sprintf(str,"Attempted to upload %s to %s %s (Zero length)",f->name
-		,lib[dir[f->dir]->lib]->sname,dir[f->dir]->sname);
-    logline("U!",str);
-    return(0); }
-if(dir[f->dir]->misc&DIR_DIZ) {
-	for(i=0;i<total_fextrs;i++)
-		if(!stricmp(fextr[i]->ext,tmp+9) && chk_ar(fextr[i]->ar,useron))
-			break;
-	if(i<total_fextrs) {
-		sprintf(str,"%sFILE_ID.DIZ",temp_dir);
-		remove(str);
-		external(cmdstr(fextr[i]->cmd,path,"FILE_ID.DIZ",NULL),EX_OUTL);
-		if(!fexist(str)) {
-			sprintf(str,"%sDESC.SDI",temp_dir);
-			remove(str);
-			external(cmdstr(fextr[i]->cmd,path,"DESC.SDI",NULL),EX_OUTL); }
-		if((file=nopen(str,O_RDONLY))!=-1) {
-			memset(ext,0,513);
-			read(file,ext,512);
-			for(i=512;i;i--)
-				if(ext[i-1]>SP)
-					break;
-			ext[i]=0;
-			if(!f->desc[0]) {
-				strcpy(desc,ext);
-				strip_exascii(desc);
-				strip_ctrl(desc);
-				for(i=0;desc[i];i++)
-					if(isalnum(desc[i]))
-						break;
-				sprintf(f->desc,"%.*s",LEN_FDESC,desc+i); }
-			close(file);
-			remove(str);
-			f->misc|=FM_EXTDESC; } } }
-
-logon_ulb+=length;  /* Update 'this call' stats */
-logon_uls++;
-if(dir[f->dir]->misc&DIR_AONLY)  /* Forced anonymous */
-	f->misc|=FM_ANON;
-f->cdt=length;
-f->dateuled=time(NULL);
-f->timesdled=0;
-f->datedled=0L;
-f->opencount=0;
-strcpy(f->uler,useron.alias);
-bprintf(text[FileNBytesReceived],f->name,ultoac(length,tmp));
-if(!f->desc[0])
-	sprintf(f->desc,"%.*s",LEN_FDESC,text[NoDescription]);
-if(!addfiledat(f))
-	return(0);
-
-if(f->misc&FM_EXTDESC)
-	putextdesc(f->dir,f->datoffset,ext);
-
-sprintf(str,"Uploaded %s to %s %s",f->name,lib[dir[f->dir]->lib]->sname
-	,dir[f->dir]->sname);
-if(dir[f->dir]->upload_sem[0])
-	if((file=nopen(dir[f->dir]->upload_sem,O_WRONLY|O_CREAT|O_TRUNC))!=-1)
-        close(file);
-logline("U+",str);
-/**************************/
-/* Update Uploader's Info */
-/**************************/
-useron.uls=adjustuserrec(useron.number,U_ULS,5,1);
-useron.ulb=adjustuserrec(useron.number,U_ULB,10,length);
-if(dir[f->dir]->up_pct && dir[f->dir]->misc&DIR_CDTUL) { /* credit for upload */
-	if(dir[f->dir]->misc&DIR_CDTMIN && cur_cps)    /* Give min instead of cdt */
-		useron.min=adjustuserrec(useron.number,U_MIN,10
-			,((ulong)(length*(dir[f->dir]->up_pct/100.0))/cur_cps)/60);
-	else
-		useron.cdt=adjustuserrec(useron.number,U_CDT,10
-			,(ulong)(f->cdt*(dir[f->dir]->up_pct/100.0))); }
-return(1);
-}
-
-
-/****************************************************************************/
-/* Updates downloader, uploader and downloaded file data                    */
-/* Must have offset, dir and name fields filled prior to call.              */
-/****************************************************************************/
-void downloadfile(file_t f)
-{
-    char str[256],str2[256],fname[13];
-    int i,file;
-	long length,mod;
-    ulong l;
-	user_t uploader;
-
-getfiledat(&f); /* Get current data - right after download */
-if((length=f.size)<0L)
-    length=0L;
-logon_dlb+=length;  /* Update 'this call' stats */
-logon_dls++;
-bprintf(text[FileNBytesSent],f.name,ultoac(length,tmp));
-sprintf(str,"Downloaded %s from %s %s",f.name,lib[dir[f.dir]->lib]->sname
-    ,dir[f.dir]->sname);
-logline("D-",str);
-/****************************/
-/* Update Downloader's Info */
-/****************************/
-useron.dls=adjustuserrec(useron.number,U_DLS,5,1);
-useron.dlb=adjustuserrec(useron.number,U_DLB,10,length);
-if(!(dir[f.dir]->misc&DIR_FREE) && !(useron.exempt&FLAG('D')))
-	subtract_cdt(f.cdt);
-/**************************/
-/* Update Uploader's Info */
-/**************************/
-i=matchuser(f.uler);
-uploader.number=i;
-getuserdat(&uploader);
-if(i && i!=useron.number && uploader.firston<f.dateuled) {
-	l=f.cdt;
-	if(!(dir[f.dir]->misc&DIR_CDTDL))	/* Don't give credits on d/l */
-		l=0;
-	if(dir[f.dir]->misc&DIR_CDTMIN && cur_cps) { /* Give min instead of cdt */
-		mod=((ulong)(l*(dir[f.dir]->dn_pct/100.0))/cur_cps)/60;
-		adjustuserrec(i,U_MIN,10,mod);
-		sprintf(tmp,"%lu minute",mod);
-		sprintf(str,text[DownloadUserMsg]
-			,!strcmp(dir[f.dir]->code,"TEMP") ? temp_file : f.name
-			,!strcmp(dir[f.dir]->code,"TEMP") ? text[Partially] : nulstr
-			,useron.alias,tmp); }
-	else {
-		mod=(ulong)(l*(dir[f.dir]->dn_pct/100.0));
-		adjustuserrec(i,U_CDT,10,mod);
-		ultoac(mod,tmp);
-		sprintf(str,text[DownloadUserMsg]
-			,!strcmp(dir[f.dir]->code,"TEMP") ? temp_file : f.name
-			,!strcmp(dir[f.dir]->code,"TEMP") ? text[Partially] : nulstr
-			,useron.alias,tmp); }
-    putsmsg(i,str); }
-/*******************/
-/* Update IXB File */
-/*******************/
-f.datedled=time(NULL);
-sprintf(str,"%s%s.IXB",dir[f.dir]->data_dir,dir[f.dir]->code);
-if((file=nopen(str,O_RDWR))==-1) {
-    errormsg(WHERE,ERR_OPEN,str,O_RDWR);
-    return; }
-length=filelength(file);
-if(length%F_IXBSIZE) {
-    close(file);
-    errormsg(WHERE,ERR_LEN,str,length);
-    return; }
-strcpy(fname,f.name);
-for(i=8;i<12;i++)   /* Turn FILENAME.EXT into FILENAMEEXT */
-    fname[i]=fname[i+1];
-for(l=0;l<length;l+=F_IXBSIZE) {
-    read(file,str,F_IXBSIZE);      /* Look for the filename in the IXB file */
-    str[11]=0;
-    if(!strcmp(fname,str)) break; }
-if(l>=length) {
-    close(file);
-    errormsg(WHERE,ERR_CHK,f.name,0);
-    return; }
-lseek(file,l+18,SEEK_SET);
-write(file,&f.datedled,4);  /* Write the current time stamp for datedled */
-close(file);
-/*******************/
-/* Update DAT File */
-/*******************/
-f.timesdled++;
-putfiledat(f);
-/******************************************/
-/* Update User to User index if necessary */
-/******************************************/
-if(f.dir==user_dir) {
-    rmuserxfers(0,useron.number,f.name);
-    if(!getuserxfers(0,0,f.name)) { /* check if any ixt entries left */
-        sprintf(str,"%s%s",f.altpath>0 && f.altpath<=altpaths ?
-            altpath[f.altpath-1] : dir[f.dir]->path,unpadfname(f.name,tmp));
-        remove(str);
-        removefiledat(f); } }
-}
-
-/****************************************************************************/
-/* Removes DAT and IXB entries for the file in the struct 'f'               */
-/****************************************************************************/
-void removefiledat(file_t f)
-{
-	char c,str[256],ixbname[12],HUGE16 *ixbbuf,fname[13];
-    int file;
-    ulong l,length;
-
-strcpy(fname,f.name);
-for(c=8;c<12;c++)   /* Turn FILENAME.EXT into FILENAMEEXT */
-    fname[c]=fname[c+1];
-sprintf(str,"%s%s.IXB",dir[f.dir]->data_dir,dir[f.dir]->code);
-if((file=nopen(str,O_RDONLY))==-1) {
-    errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-    return; }
-length=filelength(file);
-if(!length) {
-	close(file);
-	return; }
-if((ixbbuf=(char *)MALLOC(length))==0) {
-    close(file);
-    errormsg(WHERE,ERR_ALLOC,str,length);
-    return; }
-if(lread(file,ixbbuf,length)!=length) {
-    close(file);
-    errormsg(WHERE,ERR_READ,str,length);
-	FREE((char *)ixbbuf);
-    return; }
-close(file);
-if((file=nopen(str,O_WRONLY|O_TRUNC))==-1) {
-    errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_TRUNC);
-    return; }
-for(l=0;l<length;l+=F_IXBSIZE) {
-    for(c=0;c<11;c++)
-        ixbname[c]=ixbbuf[l+c];
-    ixbname[c]=0;
-    if(strcmp(ixbname,fname))
-		if(lwrite(file,&ixbbuf[l],F_IXBSIZE)!=F_IXBSIZE) {
-            close(file);
-            errormsg(WHERE,ERR_WRITE,str,F_IXBSIZE);
-			FREE((char *)ixbbuf);
-            return; } }
-FREE((char *)ixbbuf);
-close(file);
-sprintf(str,"%s%s.DAT",dir[f.dir]->data_dir,dir[f.dir]->code);
-if((file=nopen(str,O_WRONLY))==-1) {
-    errormsg(WHERE,ERR_OPEN,str,O_WRONLY);
-    return; }
-lseek(file,f.datoffset,SEEK_SET);
-c=ETX;          /* If first char of record is ETX, record is unused */
-if(write(file,&c,1)!=1) { /* So write a D_T on the first byte of the record */
-    close(file);
-    errormsg(WHERE,ERR_WRITE,str,1);
-    return; }
-close(file);
-if(f.dir==user_dir)  /* remove file from index */
-    rmuserxfers(0,0,f.name);
-
-}
-
-/****************************************************************************/
-/* Puts filedata into DIR_code.DAT file                                     */
-/* Called from removefiles                                                  */
-/****************************************************************************/
-void putfiledat(file_t f)
-{
-    char buf[F_LEN+1],str[256];
-    int file;
-    long length;
-
-putrec(buf,F_CDT,LEN_FCDT,ultoa(f.cdt,tmp,10));
-putrec(buf,F_DESC,LEN_FDESC,f.desc);
-putrec(buf,F_DESC+LEN_FDESC,2,crlf);
-putrec(buf,F_ULER,LEN_ALIAS+5,f.uler);
-putrec(buf,F_ULER+LEN_ALIAS+5,2,crlf);
-putrec(buf,F_TIMESDLED,5,itoa(f.timesdled,tmp,10));
-putrec(buf,F_TIMESDLED+5,2,crlf);
-putrec(buf,F_OPENCOUNT,3,itoa(f.opencount,tmp,10));
-putrec(buf,F_OPENCOUNT+3,2,crlf);
-buf[F_MISC]=f.misc+SP;
-putrec(buf,F_ALTPATH,2,hexplus(f.altpath,tmp));
-putrec(buf,F_ALTPATH+2,2,crlf);
-sprintf(str,"%s%s.DAT",dir[f.dir]->data_dir,dir[f.dir]->code);
-if((file=nopen(str,O_WRONLY))==-1) {
-    errormsg(WHERE,ERR_OPEN,str,O_WRONLY);
-    return; }
-length=filelength(file);
-if(length%F_LEN) {
-    close(file);
-    errormsg(WHERE,ERR_LEN,str,length);
-    return; }
-if(f.datoffset>length) {
-    close(file);
-    errormsg(WHERE,ERR_LEN,str,length);
-    return; }
-lseek(file,f.datoffset,SEEK_SET);
-if(write(file,buf,F_LEN)!=F_LEN) {
-    close(file);
-    errormsg(WHERE,ERR_WRITE,str,F_LEN);
-    return; }
-length=filelength(file);
-close(file);
-if(length%F_LEN)
-    errormsg(WHERE,ERR_LEN,str,length);
-}
-
-/****************************************************************************/
-/* Adds the data for struct filedat to the directory's data base.           */
-/* changes the .datoffset field only                                        */
-/* returns 1 if added successfully, 0 if not.								*/
-/****************************************************************************/
-char addfiledat(file_t *f)
-{
-	uchar str[256],fdat[F_LEN+1],fname[13],idx[3],c,HUGE16 *ixbbuf;
-    int i,file;
-	ulong length,l;
-	time_t uldate;
-
-/************************/
-/* Add data to DAT File */
-/************************/
-sprintf(str,"%s%s.DAT",dir[f->dir]->data_dir,dir[f->dir]->code);
-if((file=nopen(str,O_RDWR|O_CREAT))==-1) {
-    errormsg(WHERE,ERR_OPEN,str,O_RDWR|O_CREAT);
-	return(0); }
-length=filelength(file);
-if(length==0L)
-    l=0L;
-else {
-    if(length%F_LEN) {
-        close(file);
-        errormsg(WHERE,ERR_LEN,str,length);
-		return(0); }
-    for(l=0;l<length;l+=F_LEN) {    /* Find empty slot */
-        lseek(file,l,SEEK_SET);
-        read(file,&c,1);
-		if(c==ETX) break; }
-	if(l/F_LEN>=MAX_FILES || l/F_LEN>=dir[f->dir]->maxfiles) {
-		bputs(text[DirFull]);
-		close(file);
-		sprintf(str,"Directory Full: %s %s"
-			,lib[dir[f->dir]->lib]->sname,dir[f->dir]->sname);
-		logline("U!",str);
-		return(0); } }
-putrec(fdat,F_CDT,LEN_FCDT,ultoa(f->cdt,tmp,10));
-putrec(fdat,F_DESC,LEN_FDESC,f->desc);
-putrec(fdat,F_DESC+LEN_FDESC,2,crlf);
-putrec(fdat,F_ULER,LEN_ALIAS+5,f->uler);
-putrec(fdat,F_ULER+LEN_ALIAS+5,2,crlf);
-putrec(fdat,F_TIMESDLED,5,ultoa(f->timesdled,tmp,10));
-putrec(fdat,F_TIMESDLED+5,2,crlf);
-putrec(fdat,F_OPENCOUNT,3,itoa(f->opencount,tmp,10));
-putrec(fdat,F_OPENCOUNT+3,2,crlf);
-fdat[F_MISC]=f->misc+SP;
-putrec(fdat,F_ALTPATH,2,hexplus(f->altpath,tmp));
-putrec(fdat,F_ALTPATH+2,2,crlf);
-f->datoffset=l;
-idx[0]=l&0xff;          /* Get offset within DAT file for IXB file */
-idx[1]=(l>>8)&0xff;
-idx[2]=(l>>16)&0xff;
-lseek(file,l,SEEK_SET);
-if(write(file,fdat,F_LEN)!=F_LEN) {
-    close(file);
-    errormsg(WHERE,ERR_WRITE,str,F_LEN);
-	return(0); }
-length=filelength(file);
-close(file);
-if(length%F_LEN)
-    errormsg(WHERE,ERR_LEN,str,length);
-
-/*******************************************/
-/* Update last upload date/time stamp file */
-/*******************************************/
-sprintf(str,"%s%s.DAB",dir[f->dir]->data_dir,dir[f->dir]->code);
-if((file=nopen(str,O_WRONLY|O_CREAT))==-1)
-    errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT);
-else {
-    now=time(NULL);
-    write(file,&now,4);
-    close(file); }
-
-/************************/
-/* Add data to IXB File */
-/************************/
-strcpy(fname,f->name);
-for(i=8;i<12;i++)   /* Turn FILENAME.EXT into FILENAMEEXT */
-    fname[i]=fname[i+1];
-sprintf(str,"%s%s.IXB",dir[f->dir]->data_dir,dir[f->dir]->code);
-if((file=nopen(str,O_RDWR|O_CREAT))==-1) {
-    errormsg(WHERE,ERR_OPEN,str,O_RDWR|O_CREAT);
-	return(0); }
-length=filelength(file);
-if(length) {    /* IXB file isn't empty */
-    if(length%F_IXBSIZE) {
-        close(file);
-        errormsg(WHERE,ERR_LEN,str,length);
-		return(0); }
-	if((ixbbuf=(char *)MALLOC(length))==NULL) {
-        close(file);
-        errormsg(WHERE,ERR_ALLOC,str,length);
-		return(0); }
-	if(lread(file,ixbbuf,length)!=length) {
-        close(file);
-        errormsg(WHERE,ERR_READ,str,length);
-		FREE((char *)ixbbuf);
-		return(0); }
-/************************************************/
-/* Sort by Name or Date, Assending or Decending */
-/************************************************/
-    if(dir[f->dir]->sort==SORT_NAME_A || dir[f->dir]->sort==SORT_NAME_D) {
-        for(l=0;l<length;l+=F_IXBSIZE) {
-            for(i=0;i<12 && fname[i]==ixbbuf[l+i];i++);
-            if(i==12) {     /* file already in directory index */
-                close(file);
-                errormsg(WHERE,ERR_CHK,str,0);
-				FREE((char *)ixbbuf);
-				return(0); }
-            if(dir[f->dir]->sort==SORT_NAME_A && fname[i]<ixbbuf[l+i])
-                break;
-            if(dir[f->dir]->sort==SORT_NAME_D && fname[i]>ixbbuf[l+i])
-                break; } }
-    else {  /* sort by date */
-        for(l=0;l<length;l+=F_IXBSIZE) {
-			uldate=(ixbbuf[l+14]|((long)ixbbuf[l+15]<<8)
-				|((long)ixbbuf[l+16]<<16)|((long)ixbbuf[l+17]<<24));
-			if(dir[f->dir]->sort==SORT_DATE_A && f->dateuled<uldate)
-                break;
-			if(dir[f->dir]->sort==SORT_DATE_D && f->dateuled>uldate)
-                break; } }
-    lseek(file,l,SEEK_SET);
-    if(write(file,fname,11)!=11) {  /* Write filename to IXB file */
-        close(file);
-        errormsg(WHERE,ERR_WRITE,str,11);
-		FREE((char *)ixbbuf);
-		return(0); }
-    if(write(file,idx,3)!=3) {  /* Write DAT offset into IXB file */
-        close(file);
-        errormsg(WHERE,ERR_WRITE,str,3);
-		FREE((char *)ixbbuf);
-		return(0); }
-    write(file,&f->dateuled,sizeof(time_t));
-    write(file,&f->datedled,4);              /* Write 0 for datedled */
-	if(lwrite(file,&ixbbuf[l],length-l)!=length-l) { /* Write rest of IXB */
-        close(file);
-        errormsg(WHERE,ERR_WRITE,str,length-l);
-		FREE((char *)ixbbuf);
-		return(0); }
-	FREE((char *)ixbbuf); }
-else {              /* IXB file is empty... No files */
-    if(write(file,fname,11)!=11) {  /* Write filename it IXB file */
-        close(file);
-        errormsg(WHERE,ERR_WRITE,str,11);
-		return(0); }
-    if(write(file,idx,3)!=3) {  /* Write DAT offset into IXB file */
-        close(file);
-        errormsg(WHERE,ERR_WRITE,str,3);
-		return(0); }
-    write(file,&f->dateuled,sizeof(time_t));
-    write(file,&f->datedled,4); }
-length=filelength(file);
-close(file);
-if(length%F_IXBSIZE)
-    errormsg(WHERE,ERR_LEN,str,length);
-return(1);
-}
-
-/****************************************************************************/
-/* Update the upload date for the file 'f'                                  */
-/****************************************************************************/
-void update_uldate(file_t f)
-{
-	char str[256],fname[13];
-	int i,file;
-	long l,length;
-
-/*******************/
-/* Update IXB File */
-/*******************/
-sprintf(str,"%s%s.IXB",dir[f.dir]->data_dir,dir[f.dir]->code);
-if((file=nopen(str,O_RDWR))==-1) {
-	errormsg(WHERE,ERR_OPEN,str,O_RDWR);
-    return; }
-length=filelength(file);
-if(length%F_IXBSIZE) {
-    close(file);
-	errormsg(WHERE,ERR_LEN,str,length);
-    return; }
-strcpy(fname,f.name);
-for(i=8;i<12;i++)   /* Turn FILENAME.EXT into FILENAMEEXT */
-    fname[i]=fname[i+1];
-for(l=0;l<length;l+=F_IXBSIZE) {
-    read(file,str,F_IXBSIZE);      /* Look for the filename in the IXB file */
-    str[11]=0;
-    if(!strcmp(fname,str)) break; }
-if(l>=length) {
-    close(file);
-	errormsg(WHERE,ERR_CHK,f.name,length);
-    return; }
-lseek(file,l+14,SEEK_SET);
-write(file,&f.dateuled,4);
-close(file);
-
-/*******************************************/
-/* Update last upload date/time stamp file */
-/*******************************************/
-sprintf(str,"%s%s.DAB",dir[f.dir]->data_dir,dir[f.dir]->code);
-if((file=nopen(str,O_WRONLY|O_CREAT))==-1)
-	errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT);
-else {
-	write(file,&f.dateuled,4);
-    close(file); }
-
-}
-
diff --git a/src/sbbs2/filelist/filelist.c b/src/sbbs2/filelist/filelist.c
deleted file mode 100644
index 01eba9d912..0000000000
--- a/src/sbbs2/filelist/filelist.c
+++ /dev/null
@@ -1,657 +0,0 @@
-/* FILELIST.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* Utility to create list of files from Synchronet file directories */
-/* Default list format is FILES.BBS, but file size, uploader, upload date */
-/* and other information can be included. */
-
-#include "sbbs.h"
-
-#define FILELIST_VER "2.12"
-
-#define MAX_NOTS 25
-
-#ifdef lputs
-#undef lputs
-#endif
-
-long lputs(char FAR16 *str)
-{
-    char tmp[256];
-    int i,j,k;
-
-j=strlen(str);
-for(i=k=0;i<j;i++)      /* remove CRs */
-    if(str[i]==CR && str[i+1]==LF)
-        continue;
-    else
-        tmp[k++]=str[i];
-tmp[k]=0;
-return(fputs(tmp,stdout));
-}
-
-
-/****************************************************************************/
-/* Performs printf() through local assembly routines                        */
-/* Called from everywhere                                                   */
-/****************************************************************************/
-int lprintf(char *fmat, ...)
-{
-	va_list argptr;
-	char sbuf[256];
-	int chcount;
-
-va_start(argptr,fmat);
-chcount=vsprintf(sbuf,fmat,argptr);
-va_end(argptr);
-lputs(sbuf);
-return(chcount);
-}
-
-/****************************************************************************/
-/* Turns FILE    .EXT into FILE.EXT                                         */
-/* Called from upload                                                       */
-/****************************************************************************/
-char *unpadfname(char *filename, char *str)
-{
-    char c,d;
-
-for(c=0,d=0;c<strlen(filename);c++)
-    if(filename[c]!=SP) str[d++]=filename[c];
-str[d]=0;
-return(str);
-}
-
-#ifndef __FLAT__
-/****************************************************************************/
-/* This function reads files that are potentially larger than 32k.  		*/
-/* Up to one megabyte of data can be read with each call.                   */
-/****************************************************************************/
-long lread(int file, char huge *buf,long bytes)
-{
-	long count;
-
-for(count=bytes;count>32767;count-=32767,buf+=32767)
-	if(read(file,(char *)buf,32767)!=32767)
-		return(-1L);
-if(read(file,(char *)buf,(int)count)!=count)
-	return(-1L);
-return(bytes);
-}
-#endif
-/****************************************************************************/
-/* Checks the disk drive for the existence of a file. Returns 1 if it       */
-/* exists, 0 if it doesn't.                                                 */
-/****************************************************************************/
-char fexist(char *filespec)
-{
-	struct find_t f;
-	uint i;
-
-i=_dos_findfirst(filespec,_A_NORMAL,&f);
-#ifdef __WATCOMC__
-_dos_findclose(&f);
-#endif
-if(!i)
-    return(1);
-return(0);
-}
-
-/****************************************************************************/
-/* Returns the time/date of the file in 'filespec' in time_t (unix) format  */
-/****************************************************************************/
-long fdate(char *filespec)
-{
-	int 	file;
-	ushort	fd,ft;
-	struct	tm t;
-
-if((file=nopen(filespec,O_RDONLY))==-1)
-	return(0);
-_dos_getftime(file,&fd,&ft);
-close(file);
-memset(&t,0,sizeof(t));
-t.tm_year=((fd&0xfe00)>>9)+80;
-t.tm_mon=((fd&0x01e0)>>5)-1;
-t.tm_mday=fd&0x1f;
-t.tm_hour=(ft&0xf800)>>11;
-t.tm_min=(ft&0x07e0)>>5;
-t.tm_sec=(ft&0x001f)<<1;
-return(mktime(&t));
-}
-
-/****************************************************************************/
-/* Converts an ASCII Hex string into an ulong                       */
-/****************************************************************************/
-ulong ahtoul(char *str)
-{
-	ulong l,val=0;
-
-while((l=(*str++)|0x20)!=0x20)
-	val=(l&0xf)+(l>>6&1)*9+val*16;
-return(val);
-}
-
-/****************************************************************************/
-/* Truncates white-space chars off end of 'str' and terminates at first tab */
-/****************************************************************************/
-void truncsp(char *str)
-{
-	int c;
-
-str[strcspn(str,"\t")]=0;
-c=strlen(str);
-while(c && (uchar)str[c-1]<=SP) c--;
-str[c]=0;
-}
-
-void stripctrlz(char *str)
-{
-	char tmp[1024];
-	int i,j,k;
-
-k=strlen(str);
-for(i=j=0;i<k;i++)
-	if(str[i]!=0x1a)
-		tmp[j++]=str[i];
-tmp[j]=0;
-strcpy(str,tmp);
-}
-
-
-/****************************************************************************/
-/* Puts a backslash on path strings 										*/
-/****************************************************************************/
-void backslash(char *str)
-{
-    int i;
-
-i=strlen(str);
-if(i && str[i-1]!='\\') {
-    str[i]='\\'; str[i+1]=0; }
-}
-
-
-/****************************************************************************/
-/* Places into 'strout' CR or ETX terminated string starting at 			*/
-/* 'start' and ending at 'start'+'length' or terminator from 'strin'		*/
-/****************************************************************************/
-void getrec(char *strin,int start,int length,char *strout)
-{
-	int i=0,stop;
-
-stop=start+length;
-while(start<stop) {
-	if(strin[start]==ETX)
-		break;
-	strout[i++]=strin[start++]; }
-strout[i]=0;
-}
-
-/****************************************************************************/
-/* Network open function. Opens all files DENYALL and retries LOOP_NOPEN    */
-/* number of times if the attempted file is already open or denying access	*/
-/* for some other reason.	All files are opened in BINARY mode.			*/
-/****************************************************************************/
-int nopen(char *str, int access)
-{
-	char logstr[256];
-	int file,share,count=0;
-
-if(access==O_RDONLY) share=SH_DENYWR;
-	else share=SH_DENYRW;
-while(((file=sopen(str,O_BINARY|access,share,S_IWRITE))==-1)
-	&& errno==EACCES && count++<LOOP_NOPEN);
-if(file==-1 && errno==EACCES)
-	lputs("\7\r\nNOPEN: ACCESS DENIED\r\n\7");
-return(file);
-}
-
-/****************************************************************************/
-/* This function performs an nopen, but returns a file stream with a buffer */
-/* allocated.																*/
-/****************************************************************************/
-FILE *fnopen(int *file, char *str, int access)
-{
-	char mode[128];
-	FILE *stream;
-
-if(access&O_WRONLY) access|=O_RDWR; 	/* fdopen can't open WRONLY */
-
-if(((*file)=nopen(str,access))==-1)
-	return(NULL);
-
-if(access&O_APPEND) {
-	if(access&(O_RDONLY|O_RDWR))
-		strcpy(mode,"a+");
-	else
-		strcpy(mode,"a"); }
-else {
-	if(access&(O_WRONLY|O_RDWR))
-		strcpy(mode,"r+");
-	else
-		strcpy(mode,"r"); }
-stream=fdopen((*file),mode);
-if(stream==NULL) {
-	close(*file);
-	return(NULL); }
-setvbuf(stream,NULL,_IOFBF,16*1024);
-return(stream);
-}
-
-void allocfail(uint size)
-{
-lprintf("\7Error allocating %u bytes of memory.\r\n",size);
-bail(1);
-}
-
-void bail(int code)
-{
-exit(code);
-}
-
-/****************************************************************************/
-/* Converts unix time format (long - time_t) into a char str MM/DD/YY		*/
-/****************************************************************************/
-char *unixtodstr(time_t unix, char *str)
-{
-	struct tm *t;
-
-if(!unix)
-	strcpy(str,"00/00/00");
-else {
-	t=gmtime(&unix);
-	sprintf(str,"%02u/%02u/%02u",t->tm_mon+1,t->tm_mday
-		,t->tm_year%100); }
-return(str);
-}
-
-#define ALL 	(1L<<0)
-#define PAD 	(1L<<1)
-#define HDR 	(1L<<2)
-#define CDT_	(1L<<3)
-#define EXT 	(1L<<4)
-#define ULN 	(1L<<5)
-#define ULD 	(1L<<6)
-#define DLS 	(1L<<7)
-#define DLD 	(1L<<8)
-#define NOD 	(1L<<9)
-#define PLUS	(1L<<10)
-#define MINUS	(1L<<11)
-#define JST 	(1L<<12)
-#define NOE 	(1L<<13)
-#define DFD 	(1L<<14)
-#define TOT 	(1L<<15)
-#define AUTO	(1L<<16)
-
-/*********************/
-/* Entry point (duh) */
-/*********************/
-int main(int argc, char **argv)
-{
-	char	*p,str[256],fname[256],ext,not[MAX_NOTS][9],nots=0;
-	uchar	HUGE16 *datbuf,HUGE16 *ixbbuf;
-	int 	i,j,file,dirnum,libnum,desc_off,lines
-			,omode=O_WRONLY|O_CREAT|O_TRUNC;
-	ulong	l,m,n,cdt,misc=0,total_cdt=0,total_files=0,datbuflen;
-	time_t	uld,dld;
-	read_cfg_text_t txt;
-	FILE	*in,*out=NULL;
-
-putenv("TZ=UCT0");
-_fmode=O_BINARY;
-setvbuf(stdout,NULL,_IONBF,0);
-
-fprintf(stderr,"\nFILELIST Version %s (%s) - Generate Synchronet File "
-	"Directory Lists\n"
-	,FILELIST_VER
-#if defined(__OS2__)
-	,"OS/2"
-#elif defined(__NT__)
-    ,"Win32"
-#elif defined(__DOS4G__)
-	,"DOS4G"
-#elif defined(__FLAT__)
-	,"DOS32"
-#else
-	,"DOS16"
-#endif
-	);
-
-if(argc<2) {
-	printf("\n   usage: FILELIST <dir_code or * for ALL> [switches] [outfile]\n");
-	printf("\nswitches: /LIB name All directories of specified library\n");
-	printf("          /NOT code Exclude specific directory\n");
-	printf("          /CAT      Concatenate to existing outfile\n");
-	printf("          /PAD      Pad filename with spaces\n");
-	printf("          /HDR      Include directory headers\n");
-	printf("          /CDT      Include credit value\n");
-	printf("          /TOT      Include credit totals\n");
-	printf("          /ULN      Include uploader's name\n");
-	printf("          /ULD      Include upload date\n");
-	printf("          /DFD      Include DOS file date\n");
-	printf("          /DLD      Include download date\n");
-	printf("          /DLS      Include total downloads\n");
-	printf("          /NOD      Exclude normal descriptions\n");
-	printf("          /NOE      Exclude normal descriptions, if extended "
-		"exists\n");
-	printf("          /EXT      Include extended descriptions\n");
-	printf("          /JST      Justify extended descriptions under normal\n");
-	printf("          /+        Include extended description indicator (+)\n");
-	printf("          /-        Include offline file indicator (-)\n");
-	printf("          /*        Short-hand for /PAD /HDR /CDT /+ /-\n");
-	exit(0); }
-
-p=getenv("SBBSNODE");
-if(p==NULL) {
-	printf("\nSBBSNODE environment variable not set.\n");
-	printf("\nExample: SET SBBSNODE=C:\\SBBS\\NODE1\n");
-	exit(1); }
-
-strcpy(node_dir,p);
-if(node_dir[strlen(node_dir)-1]!='\\')
-	strcat(node_dir,"\\");
-
-txt.openerr="\7\nError opening %s for read.\n";
-txt.reading="\nReading %s...";
-txt.readit="\rRead %s       ";
-txt.allocerr="\7\nError allocating %u bytes of memory\n";
-txt.error="\7\nERROR: Offset %lu in %s\r\n\n";
-
-read_node_cfg(txt);
-if(ctrl_dir[0]=='.') {   /* Relative path */
-	strcpy(str,ctrl_dir);
-	sprintf(ctrl_dir,"%s%s",node_dir,str); }
-read_main_cfg(txt);
-if(data_dir[0]=='.') {   /* Relative path */
-	strcpy(str,data_dir);
-	sprintf(data_dir,"%s%s",node_dir,str); }
-read_file_cfg(txt);
-printf("\n");
-
-
-dirnum=libnum=-1;
-if(argv[1][0]=='*')
-	misc|=ALL;
-else if(argv[1][0]!='/') {
-	strupr(argv[1]);
-	for(i=0;i<total_dirs;i++)
-		if(!stricmp(argv[1],dir[i]->code))
-			break;
-	if(i>=total_dirs) {
-		printf("\nDirectory code '%s' not found.\n",argv[1]);
-		exit(1); }
-	dirnum=i; }
-for(i=1;i<argc;i++) {
-	if(!stricmp(argv[i],"/LIB")) {
-		if(dirnum!=-1) {
-			printf("\nBoth directory code and /LIB parameters were used.\n");
-			exit(1); }
-		i++;
-		if(i>=argc) {
-			printf("\nLibrary short name must follow /LIB parameter.\n");
-			exit(1); }
-		strupr(argv[i]);
-		for(j=0;j<total_libs;j++)
-			if(!stricmp(lib[j]->sname,argv[i]))
-				break;
-		if(j>=total_libs) {
-			printf("\nLibrary short name '%s' not found.\n",argv[i]);
-			exit(1); }
-		libnum=j; }
-	else if(!stricmp(argv[i],"/NOT")) {
-		if(nots>=MAX_NOTS) {
-			printf("\nMaximum number of /NOT options (%u) exceeded.\n"
-				,MAX_NOTS);
-			exit(1); }
-		i++;
-		if(i>=argc) {
-			printf("\nDirectory internal code must follow /NOT parameter.\n");
-            exit(1); }
-		sprintf(not[nots++],"%.8s",argv[i]); }
-	else if(!stricmp(argv[i],"/ALL")) {
-		if(dirnum!=-1) {
-			printf("\nBoth directory code and /ALL parameters were used.\n");
-            exit(1); }
-		if(libnum!=-1) {
-			printf("\nBoth library name and /ALL parameters were used.\n");
-			exit(1); }
-		misc|=ALL; }
-	else if(!stricmp(argv[i],"/PAD"))
-		misc|=PAD;
-	else if(!stricmp(argv[i],"/CAT"))
-		omode=O_WRONLY|O_CREAT|O_APPEND;
-	else if(!stricmp(argv[i],"/HDR"))
-		misc|=HDR;
-	else if(!stricmp(argv[i],"/CDT"))
-		misc|=CDT_;
-	else if(!stricmp(argv[i],"/TOT"))
-		misc|=TOT;
-	else if(!stricmp(argv[i],"/EXT"))
-		misc|=EXT;
-	else if(!stricmp(argv[i],"/ULN"))
-		misc|=ULN;
-	else if(!stricmp(argv[i],"/ULD"))
-		misc|=ULD;
-	else if(!stricmp(argv[i],"/DLD"))
-		misc|=DLD;
-	else if(!stricmp(argv[i],"/DFD"))
-		misc|=DFD;
-	else if(!stricmp(argv[i],"/DLS"))
-		misc|=DLS;
-	else if(!stricmp(argv[i],"/NOD"))
-		misc|=NOD;
-	else if(!stricmp(argv[i],"/JST"))
-		misc|=(EXT|JST);
-	else if(!stricmp(argv[i],"/NOE"))
-		misc|=(EXT|NOE);
-	else if(!stricmp(argv[i],"/+"))
-		misc|=PLUS;
-	else if(!stricmp(argv[i],"/-"))
-		misc|=MINUS;
-	else if(!stricmp(argv[i],"/*"))
-		misc|=(HDR|PAD|CDT_|PLUS|MINUS);
-
-	else if(i!=1) {
-		if(argv[i][0]=='*') {
-			misc|=AUTO;
-			continue; }
-		if((j=nopen(argv[i],omode))==-1) {
-			printf("\nError opening/creating %s for output.\n",argv[i]);
-			exit(1); }
-		out=fdopen(j,"wb"); } }
-
-if(!out && !(misc&AUTO)) {
-	printf("\nOutput file not specified, using FILES.BBS in each "
-		"directory.\n");
-	misc|=AUTO; }
-
-for(i=0;i<total_dirs;i++) {
-	if(!(misc&ALL) && i!=dirnum && dir[i]->lib!=libnum)
-		continue;
-	for(j=0;j<nots;j++)
-		if(!stricmp(not[j],dir[i]->code))
-			break;
-	if(j<nots)
-		continue;
-	if(misc&AUTO && dir[i]->seqdev) 	/* CD-ROM */
-		continue;
-	printf("\n%-*s %s",LEN_GSNAME,lib[dir[i]->lib]->sname,dir[i]->lname);
-	sprintf(str,"%s%s.IXB",dir[i]->data_dir,dir[i]->code);
-	if((file=nopen(str,O_RDONLY))==-1)
-		continue;
-	l=filelength(file);
-	if(misc&AUTO) {
-		sprintf(str,"%sFILES.BBS",dir[i]->path);
-		if((j=nopen(str,omode))==-1) {
-			printf("\nError opening/creating %s for output.\n",str);
-			exit(1); }
-		out=fdopen(j,"wb"); }
-	if(misc&HDR) {
-		sprintf(fname,"%-*s      %-*s       Files: %4u"
-			,LEN_GSNAME,lib[dir[i]->lib]->sname
-			,LEN_SLNAME,dir[i]->lname,l/F_IXBSIZE);
-		fprintf(out,"%s\r\n",fname);
-		strset(fname,'-');
-		fprintf(out,"%s\r\n",fname); }
-	if(!l) {
-		close(file);
-		if(misc&AUTO) fclose(out);
-		continue; }
-	if((ixbbuf=(char *)MALLOC(l))==NULL) {
-		close(file);
-		if(misc&AUTO) fclose(out);
-		printf("\7ERR_ALLOC %s %lu\n",str,l);
-		continue; }
-	if(read(file,ixbbuf,l)!=l) {
-		close(file);
-		if(misc&AUTO) fclose(out);
-		printf("\7ERR_READ %s %lu\n",str,l);
-		FREE((char *)ixbbuf);
-		continue; }
-	close(file);
-	sprintf(str,"%s%s.DAT",dir[i]->data_dir,dir[i]->code);
-	if((file=nopen(str,O_RDONLY))==-1) {
-		printf("\7ERR_OPEN %s %lu\n",str,O_RDONLY);
-		FREE((char *)ixbbuf);
-		if(misc&AUTO) fclose(out);
-		continue; }
-	datbuflen=filelength(file);
-	if((datbuf=MALLOC(datbuflen))==NULL) {
-		close(file);
-		printf("\7ERR_ALLOC %s %lu\n",str,datbuflen);
-		FREE((char *)ixbbuf);
-		if(misc&AUTO) fclose(out);
-		continue; }
-	if(lread(file,datbuf,datbuflen)!=datbuflen) {
-		close(file);
-		printf("\7ERR_READ %s %lu\n",str,datbuflen);
-		FREE((char *)datbuf);
-		FREE((char *)ixbbuf);
-		if(misc&AUTO) fclose(out);
-		continue; }
-	close(file);
-	m=0L;
-	while(m<l && !ferror(out)) {
-		for(j=0;j<12 && m<l;j++)
-			if(j==8)
-				str[j]='.';
-			else
-				str[j]=ixbbuf[m++]; /* Turns FILENAMEEXT into FILENAME.EXT */
-		str[j]=0;
-		unpadfname(str,fname);
-		fprintf(out,"%-12.12s",misc&PAD ? str : fname);
-		total_files++;
-		n=ixbbuf[m]|((long)ixbbuf[m+1]<<8)|((long)ixbbuf[m+2]<<16);
-		uld=(ixbbuf[m+3]|((long)ixbbuf[m+4]<<8)|((long)ixbbuf[m+5]<<16)
-			|((long)ixbbuf[m+6]<<24));
-		dld=(ixbbuf[m+7]|((long)ixbbuf[m+8]<<8)|((long)ixbbuf[m+9]<<16)
-			|((long)ixbbuf[m+10]<<24));
-		m+=11;
-
-		if(n>=datbuflen 							/* index out of bounds */
-			|| datbuf[n+F_DESC+LEN_FDESC]!=CR) {	/* corrupted data */
-			fprintf(stderr,"\n\7%s%s is corrupted!\n"
-				,dir[i]->data_dir,dir[i]->code);
-			exit(-1); }
-
-
-		if(misc&PLUS && datbuf[n+F_MISC]!=ETX
-			&& (datbuf[n+F_MISC]-SP)&FM_EXTDESC)
-			fputc('+',out);
-		else
-			fputc(SP,out);
-
-		desc_off=12;
-		if(misc&(CDT_|TOT)) {
-			getrec((char *)&datbuf[n],F_CDT,LEN_FCDT,str);
-			cdt=atol(str);
-			total_cdt+=cdt;
-			if(misc&CDT_) {
-				fprintf(out,"%7lu",cdt);
-				desc_off+=7; } }
-
-		if(misc&MINUS) {
-			sprintf(str,"%s%s",dir[i]->path,fname);
-			if(!fexist(str))
-				fputc('-',out);
-			else
-				fputc(SP,out); }
-		else
-			fputc(SP,out);
-		desc_off++;
-
-		if(misc&DFD) {
-			sprintf(str,"%s%s",dir[i]->path,fname);
-			fprintf(out,"%s ",unixtodstr(fdate(str),str));
-			desc_off+=9; }
-
-		if(misc&ULD) {
-			fprintf(out,"%s ",unixtodstr(uld,str));
-            desc_off+=9; }
-
-		if(misc&ULN) {
-			getrec((char *)&datbuf[n],F_ULER,25,str);
-			fprintf(out,"%-25s ",str);
-			desc_off+=26; }
-
-		if(misc&DLD) {
-			fprintf(out,"%s ",unixtodstr(dld,str));
-			desc_off+=9; }
-
-		if(misc&DLS) {
-			getrec((char *)&datbuf[n],F_TIMESDLED,5,str);
-			j=atoi(str);
-			fprintf(out,"%5u ",j);
-			desc_off+=6; }
-
-		if(datbuf[n+F_MISC]!=ETX && (datbuf[n+F_MISC]-SP)&FM_EXTDESC)
-			ext=1;	/* extended description exists */
-		else
-			ext=0;	/* it doesn't */
-
-		if(!(misc&NOD) && !(misc&NOE && ext)) {
-			getrec((char *)&datbuf[n],F_DESC,LEN_FDESC,str);
-			fprintf(out,"%s",str); }
-
-		if(misc&EXT && ext) {							/* Print ext desc */
-
-			sprintf(str,"%s%s.EXB",dir[i]->data_dir,dir[i]->code);
-			if(!fexist(str))
-				continue;
-			if((j=nopen(str,O_RDONLY))==-1) {
-				printf("\7ERR_OPEN %s %lu\n",str,O_RDONLY);
-				continue; }
-			if((in=fdopen(j,"rb"))==NULL) {
-				close(j);
-				continue; }
-			fseek(in,(n/F_LEN)*512L,SEEK_SET);
-			lines=0;
-			if(!(misc&NOE)) {
-				fprintf(out,"\r\n");
-				lines++; }
-			while(!feof(in) && !ferror(in)
-				&& ftell(in)<((n/F_LEN)+1)*512L) {
-				if(!fgets(str,128,in) || !str[0])
-					break;
-				stripctrlz(str);
-				if(lines) {
-					if(misc&JST)
-						fprintf(out,"%*s",desc_off,"");
-					fputc(SP,out);				/* indent one character */ }
-				fprintf(out,"%s",str);
-				lines++; }
-			fclose(in); }
-		fprintf(out,"\r\n"); }
-	FREE((char *)datbuf);
-	FREE((char *)ixbbuf);
-	fprintf(out,"\r\n"); /* blank line at end of dir */
-	if(misc&AUTO) fclose(out); }
-
-if(misc&TOT && !(misc&AUTO))
-	fprintf(out,"TOTALS\n------\n%lu credits/bytes in %lu files.\r\n"
-		,total_cdt,total_files);
-printf("\nDone.\n");
-return(0);
-}
diff --git a/src/sbbs2/filelist/makeall.bat b/src/sbbs2/filelist/makeall.bat
deleted file mode 100755
index d68900c3d3..0000000000
--- a/src/sbbs2/filelist/makeall.bat
+++ /dev/null
@@ -1,11 +0,0 @@
-@echo off
-wmake OS=DOS %1 %2 %3 %4 %5
-if errorlevel 1 goto end
-wmake OS=DOSX %1 %2 %3 %4 %5
-if errorlevel 1 goto end
-wmake OS=OS2 %1 %2 %3 %4 %5
-if errorlevel 1 goto end
-wmake OS=NT %1 %2 %3 %4 %5
-if errorlevel 1 goto end
-:end
-
diff --git a/src/sbbs2/filelist/makefile b/src/sbbs2/filelist/makefile
deleted file mode 100644
index 3621cb7c94..0000000000
--- a/src/sbbs2/filelist/makefile
+++ /dev/null
@@ -1,89 +0,0 @@
-############################################
-# Makefile for Synchronet FILELIST Utility #
-# For use with Watcom C/C++ 		   #
-############################################
-
-!ifndef OS
-OS	= DOS
-!endif
-
-!ifeq OS DOS
-CC	= *wcc
-!else
-CC	= *wcc386
-!endif
-
-LD	= *wlink
-INCLUDE = \watcom\h;\watcom\h\os2;..;..\smb;..\rio
-
-
-!ifeq OS DOS
-CFLAGS	= -I$(INCLUDE) -s -fh=$*.pch -bt=$(OS) -fo=$(OS)\ -ml
-!else
-CFLAGS	= -I$(INCLUDE) -s -fh=$*.pch -bt=$(OS) -fo=$(OS)\
-!endif
-
-!ifeq OS DOS
-SYSTEM  = DOS
-!endif
-!ifeq OS OS2
-SYSTEM  = OS2V2
-!endif
-!ifeq OS DOSX
-SYSTEM  = DOS4G
-!endif
-!ifeq OS NT
-SYSTEM	= NT
-!endif
-
-LFLAGS  = option stack=16k system $(SYSTEM)
-
-MAIN	= $(OS)\filelist.exe
-OBJS	= $(OS)\filelist.obj $(OS)\scfgvars.obj $(OS)\scfglib1.obj &
-	  $(OS)\ars.obj $(OS)\scfglib2.obj
-HEADERS = ..\sbbs.h ..\sbbsdefs.h ..\gen_defs.h ..\scfgvars.c
-
-# Implicit C Compile Rule
-.c.obj:
-	@echo Compiling (I) $[@ to $^@ ...
-	$(CC) $(CFLAGS) $[@
-
-# Main EXE Link Rule
-$(MAIN): $(OBJS) 
-    	@echo Linking $< ...
-	$(LD) $(LFLAGS) file { $(OBJS) }
-
-# Global Variables
-$(OS)\scfgvars.obj: ..\scfgvars.c ..\sbbsdefs.h
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) $[@
-
-# ARS
-$(OS)\ars.obj: ..\ars.c ..\ars_defs.h
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) $[@
-
-# Shared Functions
-$(OS)\scfglib1.obj: ..\scfglib1.c ..\sbbs.h ..\sbbsdefs.h ..\scfgvars.c &
-	..\scfglib.h
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) &
--DNO_MSGS_CFG &
--DNO_TEXT_CFG &
--DNO_XTRN_CFG &
--DNO_CMDS_CFG &
--DNO_CHAT_CFG &
-$[@
-
-# Shared Functions
-$(OS)\scfglib2.obj: ..\scfglib2.c ..\sbbs.h ..\sbbsdefs.h ..\scfgvars.c &
-	..\scfglib.h
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) &
--DNO_MSGS_CFG &
--DNO_TEXT_CFG &
--DNO_XTRN_CFG &
--DNO_CMDS_CFG &
--DNO_CHAT_CFG &
-$[@
-
diff --git a/src/sbbs2/filelist/makefile.bc b/src/sbbs2/filelist/makefile.bc
deleted file mode 100644
index accee0fd8e..0000000000
--- a/src/sbbs2/filelist/makefile.bc
+++ /dev/null
@@ -1,76 +0,0 @@
-############################################
-# Makefile for Synchronet FILELIST Utility #
-# For use with Borland C++ for DOS or OS/2 #
-############################################
-
-# Macros
-CC      = bcc
-LD      = tlink
-!ifdef __OS2__
-OS	= OS2
-INCLUDE = c:\bcos2\include;..;..\smb;..\rio
-LIB	= c:\bcos2\lib
-CFLAGS  = -d -C -I$(INCLUDE)
-LFLAGS  = -c
-!else
-OS	= DOS
-INCLUDE = \bc31\include;..;..\smb;..\rio
-LIB	= \bc31\lib
-MODEL   = l
-CFLAGS  = -d -C -m$(MODEL) -I$(INCLUDE)
-LFLAGS  = -n -c
-!endif
-MAIN    = $(OS)\filelist.exe
-OBJS    = $(OS)\filelist.obj $(OS)\scfgvars.obj $(OS)\ars.obj \
-	  $(OS)\scfglib1.obj $(OS)\scfglib2.obj
-HEADERS = ..\sbbs.h ..\sbbsdefs.h ..\scfgvars.c
-
-# Implicit C Compile Rule
-{.}.c.obj:
-        @echo Compiling (I) $< to $@ ...
-        $(CC) $(CFLAGS) -n$(OS) -c $< 
-
-# Main EXE Link Rule
-$(MAIN): $(OBJS) 
-	@echo Linking $< ...
-!ifdef __OS2__
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c02.obj $(OBJS)
-+, $*, $*, $(LIB)\os2.lib $(LIB)\c2.lib
-!else
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c0$(MODEL).obj $(OBJS)   
-+, $*, $*, $(LIB)\c$(MODEL).lib $(LIB)\math$(MODEL).lib $(LIB)\emu.lib
-!endif
-
-# Global Variables
-$(OS)\scfgvars.obj: ..\scfgvars.c ..\sbbsdefs.h
-        @echo Compiling ..\$&.c to $< ...
-        $(CC) $(CFLAGS) -c -n$(OS) ..\$&.c
-
-# Global Variables
-$(OS)\ars.obj: ..\ars.c ..\ars_defs.h
-        @echo Compiling ..\$&.c to $< ...
-        $(CC) $(CFLAGS) -c -n$(OS) ..\$&.c
-
-# Shared Functions
-$(OS)\scfglib1.obj: ..\sbbs.h ..\sbbsdefs.h ..\scfglib1.c ..\scfgvars.c \
-	..\scfglib.h
-        @echo Compiling ..\$&.c to $< ...
-        $(CC) $(CFLAGS) -c -n$(OS) @&&!
--DNO_MSGS_CFG
--DNO_XTRN_CFG 
--DNO_TEXT_CFG
--DNO_CHAT_CFG
-! ..\$&.c
-
-# Shared Functions
-$(OS)\scfglib2.obj: ..\sbbs.h ..\sbbsdefs.h ..\scfglib2.c ..\scfgvars.c \
-	..\scfglib.h
-        @echo Compiling ..\$&.c to $< ...
-        $(CC) $(CFLAGS) -c -n$(OS) @&&!
--DNO_MSGS_CFG
--DNO_XTRN_CFG 
--DNO_TEXT_CFG
--DNO_CHAT_CFG
-! ..\$&.c
diff --git a/src/sbbs2/gen_defs.h b/src/sbbs2/gen_defs.h
deleted file mode 100644
index 48f343082f..0000000000
--- a/src/sbbs2/gen_defs.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/* GEN_DEFS.H */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#ifndef _GEN_DEFS_H
-#define _GEN_DEFS_H
-
-/************************************************************************/
-/* General (application independant) type definitions and macros		*/
-/* tabstop: 4 (as usual)												*/
-/************************************************************************/
-
-									/* Control characters */
-#define STX 	0x02				/* Start of text			^B	*/
-#define ETX 	0x03				/* End of text				^C	*/
-#define BS		0x08				/* Back space				^H	*/
-#define TAB 	0x09				/* Horizontal tabulation	^I	*/
-#define LF		0x0a				/* Line feed				^J	*/
-#define FF		0x0c				/* Form feed				^L	*/
-#define CR		0x0d				/* Carriage return			^M	*/
-#define ESC 	0x1b				/* Escape					^[	*/
-#define SP		0x20				/* Space						*/
-
-									/* Unsigned type short-hands	*/
-#define uchar	unsigned char
-#define ushort  unsigned short
-#define uint    unsigned int
-#define ulong   unsigned long
-
-/****************************************************************************/
-/* MALLOC/FREE Macros for various compilers and environments				*/
-/* MALLOC is used for allocations of 64k or less							*/
-/* FREE is used to free buffers allocated with MALLOC						*/
-/* LMALLOC is used for allocations of possibly larger than 64k				*/
-/* LFREE is used to free buffers allocated with LMALLOC 					*/
-/* REALLOC is used to re-size a previously MALLOCed or LMALLOCed buffer 	*/
-/* FAR16 is used to create a far (32-bit) pointer in 16-bit compilers		*/
-/* HUGE16 is used to create a huge (32-bit) pointer in 16-bit compilers 	*/
-/****************************************************************************/
-#if defined(__COMPACT__) || defined(__LARGE__) || defined(__HUGE__)
-	#define HUGE16 huge
-	#define FAR16 far
-	#if defined(__TURBOC__)
-		#define REALLOC(x,y) farrealloc(x,y)
-		#define LMALLOC(x) farmalloc(x)
-		#define MALLOC(x) farmalloc(x)
-		#define LFREE(x) farfree(x)
-		#define FREE(x) farfree(x)
-	#elif defined(__WATCOMC__)
-		#define REALLOC realloc
-		#define LMALLOC(x) halloc(x,1)	/* far heap, but slow */
-		#define MALLOC malloc			/* far heap, but 64k max */
-		#define LFREE hfree
-		#define FREE free
-	#else	/* Other 16-bit Compiler */
-		#define REALLOC realloc
-		#define LMALLOC malloc
-		#define MALLOC malloc
-		#define LFREE free
-		#define FREE free
-	#endif
-#else		/* 32-bit Compiler or Small Memory Model */
-	#define HUGE16
-	#define FAR16
-	#define REALLOC realloc
-	#define LMALLOC malloc
-	#define MALLOC malloc
-	#define LFREE free
-	#define FREE free
-#endif
-
-
-#endif /* Don't add anything after this #endif statement */
diff --git a/src/sbbs2/genetext.c b/src/sbbs2/genetext.c
deleted file mode 100644
index 4f2b8e928e..0000000000
--- a/src/sbbs2/genetext.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* GENETEXT.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* Creates the file ETEXT.C which has the encrypted text strings for use in */
-/* Synchronet */
-
-#include <stdio.h>
-
-void cvtusc(char *str)
-{
-    int i;
-
-for(i=0;str[i];i++)
-	if(str[i]=='_')
-		str[i]=' ';
-}
-
-void main()
-{
-	unsigned char str[129],bits,len;
-	unsigned int i,j;
-    unsigned long l,m;
-	FILE *in,*cout,*hout;
-
-if((in=fopen("ETEXT.DAT","rb"))==NULL) {
-	printf("can't open ETEXT.DAT\n");
-	return; }
-
-if((cout=fopen("ETEXT.C","wb"))==NULL) {
-	printf("can't create ETEXT.C\n");
-	return; }
-
-if((hout=fopen("ETEXT.H","wb"))==NULL) {
-	printf("can't create ETEXT.H\n");
-    return; }
-
-fprintf(cout,"/* ETEXT.C */\r\n\r\n#include \"etext.h\"\r\n\r\n");
-fprintf(hout,"/* ETEXT.H */\r\n\r\n");
-while(!feof(in)) {
-	if(!fgets(str,127,in))
-		break;
-	str[strlen(str)-3]=0;	/* chop off :crlf */
-	if(!str[0])
-		break;
-	fprintf(hout,"extern unsigned long %s[];\r\n",str);
-	fprintf(cout,"unsigned long %s[]={ ",str);
-	if(!fgets(str,127,in))
-		break;
-	str[strlen(str)-2]=0;	/* chop off crlf */
-	if(!str[0])
-        break;
-	cvtusc(str);
-	len=strlen(str);
-	l=len^0x49;
-	bits=7;
-	for(i=0,j=1;i<len;i++) {
-		m=(unsigned long)(str[i]^(i^0x2c));
-		l|=(m<<bits);
-		bits+=7;
-		if(bits>=32) {
-			fprintf(cout,"%luUL,",l);
-			j++;
-			l=0UL;
-			bits-=32;
-			if(bits)
-				l=(unsigned long)(str[i]^(i^0x2c))>>(7-bits); } }
-	fprintf(cout,"%luUL };\r\n",l); }
-}
diff --git a/src/sbbs2/genetext.exe b/src/sbbs2/genetext.exe
deleted file mode 100755
index c32166f2a87e36f619d76773a88708fe7ab01ebc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 9698
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

diff --git a/src/sbbs2/getnode.c b/src/sbbs2/getnode.c
deleted file mode 100644
index fdfb3be4dc..0000000000
--- a/src/sbbs2/getnode.c
+++ /dev/null
@@ -1,248 +0,0 @@
-#line 1 "GETNODE.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-#include "cmdshell.h"
-
-/****************************************************************************/
-/* Reads the data for node number 'number' into the structure 'node'        */
-/* from NODE.DAB															*/
-/* if lockit is non-zero, locks this node's record. putnodedat() unlocks it */
-/****************************************************************************/
-void getnodedat(uint number, node_t *node, char lockit)
-{
-	char str[256];
-	int count=0;
-
-if(!(sys_status&SS_NODEDAB))
-	return;
-if(!number || number>sys_nodes) {
-	errormsg(WHERE,ERR_CHK,"node number",number);
-	return; }
-number--;	/* make zero based */
-while(count<LOOP_NODEDAB) {
-	if(count>10)
-		mswait(55);
-	lseek(nodefile,(long)number*sizeof(node_t),SEEK_SET);
-	if(lockit
-		&& lock(nodefile,(long)number*sizeof(node_t),sizeof(node_t))==-1) {
-		count++;
-		continue; }
-	if(read(nodefile,node,sizeof(node_t))==sizeof(node_t))
-		break;
-	count++; }
-if(count>(LOOP_NODEDAB/2) && count!=LOOP_NODEDAB) {
-	sprintf(str,"NODE.DAB COLLISION - Count: %d",count);
-	logline("!!",str); }
-if(count==LOOP_NODEDAB) {
-	errormsg(WHERE,ERR_READ,"NODE.DAB",number+1);
-	return; }
-}
-
-/****************************************************************************/
-/* Synchronizes all the nodes knowledge of the other nodes' actions, mode,  */
-/* status and other flags.                                                  */
-/* Assumes that getnodedat(node_num,&thisnode,0) was called right before it */
-/* is called.  																*/
-/****************************************************************************/
-void nodesync()
-{
-	static user_t user;
-	static int inside;
-	char str[256],today[32];
-	int i,j,atr=curatr; /* was lclatr(-1) 01/29/96 */
-	node_t node;
-
-if(inside) return;
-inside=1;
-
-if(thisnode.action!=action) {
-	getnodedat(node_num,&thisnode,1);
-	thisnode.action=action;
-	putnodedat(node_num,thisnode); }
-
-criterrs=thisnode.errors;
-
-if(sys_status&SS_USERON) {
-	if(!(sys_status&SS_NEWDAY)) {
-		now=time(NULL);
-		unixtodstr(logontime,str);
-		unixtodstr(now,today);
-		if(strcmp(str,today)) { /* New day, clear "today" user vars */
-			sys_status|=SS_NEWDAY;	// So we don't keep doing this over&over
-			putuserrec(useron.number,U_ETODAY,5,"0");
-			putuserrec(useron.number,U_PTODAY,5,"0");
-			putuserrec(useron.number,U_TTODAY,5,"0");
-			putuserrec(useron.number,U_LTODAY,5,"0");
-			putuserrec(useron.number,U_TEXTRA,5,"0");
-			putuserrec(useron.number,U_FREECDT,10
-				,ultoa(level_freecdtperday[useron.level],str,10));
-			getuserdat(&useron); } }
-	if(thisnode.misc&NODE_UDAT && !(useron.rest&FLAG('G'))) {   /* not guest */
-		getuserdat(&useron);
-		getnodedat(node_num,&thisnode,1);
-		thisnode.misc&=~NODE_UDAT;
-		putnodedat(node_num,thisnode); }
-	if(thisnode.misc&NODE_MSGW)
-		getsmsg(useron.number); 	/* getsmsg clears MSGW flag */
-	if(thisnode.misc&NODE_NMSG)
-		getnmsg(); }				/* getnmsg clears NMSG flag */
-
-if(sync_mod[0])
-	exec_bin(sync_mod,&main_csi);
-
-if(thisnode.misc&NODE_INTR) {
-    bputs(text[NodeLocked]);
-	logline(nulstr,"Interrupted");
-    hangup();
-	inside=0;
-    return; }
-
-if(sys_status&SS_USERON && memcmp(&user,&useron,sizeof(user_t))) {
-//	  lputc(7);
-    getusrdirs();
-    getusrsubs();
-    user=useron; }
-
-if(sys_status&SS_USERON && online && (timeleft/60)<(5-timeleft_warn)
-	&& !SYSOP) {
-	timeleft_warn=5-(timeleft/60);
-	attr(LIGHTGRAY);
-	bprintf(text[OnlyXminutesLeft]
-		,((ushort)timeleft/60)+1,(timeleft/60) ? "s" : nulstr); }
-
-attr(atr);	/* replace original attributes */
-inside=0;
-}
-
-/****************************************************************************/
-/* Prints short messages waiting for this node, if any...                   */
-/****************************************************************************/
-void getnmsg()
-{
-	char str[256], HUGE16 *buf;
-	int file;
-	long length;
-
-getnodedat(node_num,&thisnode,1);
-thisnode.misc&=~NODE_NMSG;          /* clear the NMSG flag */
-putnodedat(node_num,thisnode);
-
-#if 0
-/* Only for v1b rev 2-5 and XSDK v2.1x compatibility */
-sprintf(str,"%sMSGS\\N%3.3u.IXB",data_dir,node_num);
-if((ixb=nopen(str,O_RDONLY))!=-1) {
-    read(ixb,&offset,4);
-    chsize(ixb,0L);
-    close(ixb);
-    remove(str); }
-#endif
-
-sprintf(str,"%sMSGS\\N%3.3u.MSG",data_dir,node_num);
-if(flength(str)<1L)
-	return;
-if((file=nopen(str,O_RDWR))==-1) {
-	/**
-		errormsg(WHERE,ERR_OPEN,str,O_RDWR);
-	**/
-    return; }
-length=filelength(file);
-if(!length) {
-	close(file);
-	return; }
-if((buf=LMALLOC(length+1))==NULL) {
-    close(file);
-    errormsg(WHERE,ERR_ALLOC,str,length+1);
-    return; }
-if(lread(file,buf,length)!=length) {
-    close(file);
-    FREE(buf);
-    errormsg(WHERE,ERR_READ,str,length);
-    return; }
-chsize(file,0L);
-close(file);
-buf[length]=0;
-
-if(thisnode.action==NODE_MAIN || thisnode.action==NODE_XFER
-    || sys_status&SS_IN_CTRLP) {
-    CRLF; }
-putmsg(buf,P_NOATCODES);
-LFREE(buf);
-}
-
-/****************************************************************************/
-/* 'ext' must be at least 128 bytes!                                        */
-/****************************************************************************/
-void getnodeext(uint number, char *ext)
-{
-    char str[256];
-    int count=0;
-
-if(!(sys_status&SS_NODEDAB))
-    return;
-if(!number || number>sys_nodes) {
-    errormsg(WHERE,ERR_CHK,"node number",number);
-    return; }
-number--;   /* make zero based */
-while(count<LOOP_NODEDAB) {
-    if(count>10)
-        mswait(55);
-    if(lock(node_ext,(long)number*128L,128)==-1) {
-        count++;
-        continue; }
-    lseek(node_ext,(long)number*128L,SEEK_SET);
-    if(read(node_ext,ext,128)==128)
-        break;
-    count++; }
-unlock(node_ext,(long)number*128L,128);
-if(count>(LOOP_NODEDAB/2) && count!=LOOP_NODEDAB) {
-    sprintf(str,"NODE.EXB COLLISION - Count: %d",count);
-    logline("!!",str); }
-if(count==LOOP_NODEDAB) {
-    errormsg(WHERE,ERR_READ,"NODE.EXB",number+1);
-    return; }
-}
-
-
-/****************************************************************************/
-/* Prints short messages waiting for 'usernumber', if any...                */
-/* then deletes them.                                                       */
-/****************************************************************************/
-void getsmsg(int usernumber)
-{
-	char str[256], HUGE16 *buf;
-    int file;
-    long length;
-
-sprintf(str,"%sMSGS\\%4.4u.MSG",data_dir,usernumber);
-if(flength(str)<1L)
-    return;
-if((file=nopen(str,O_RDWR))==-1) {
-    errormsg(WHERE,ERR_OPEN,str,O_RDWR);
-    return; }
-length=filelength(file);
-if((buf=LMALLOC(length+1))==NULL) {
-    close(file);
-    errormsg(WHERE,ERR_ALLOC,str,length+1);
-    return; }
-if(lread(file,buf,length)!=length) {
-    close(file);
-    FREE(buf);
-    errormsg(WHERE,ERR_READ,str,length);
-    return; }
-chsize(file,0L);
-close(file);
-buf[length]=0;
-getnodedat(node_num,&thisnode,0);
-if(thisnode.action==NODE_MAIN || thisnode.action==NODE_XFER
-    || sys_status&SS_IN_CTRLP) {
-    CRLF; }
-if(thisnode.misc&NODE_MSGW) {
-    getnodedat(node_num,&thisnode,1);
-    thisnode.misc&=~NODE_MSGW;
-    putnodedat(node_num,thisnode); }
-putmsg(buf,P_NOATCODES);
-LFREE(buf);
-}
-
diff --git a/src/sbbs2/getuser.c b/src/sbbs2/getuser.c
deleted file mode 100644
index 313dbce0b0..0000000000
--- a/src/sbbs2/getuser.c
+++ /dev/null
@@ -1,429 +0,0 @@
-#line 1 "GETUSER.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-#include "cmdshell.h"
-
-/****************************************************************************/
-/* Fills the structure 'user' with info for user.number	from USER.DAT		*/
-/* Called from functions useredit, waitforcall and main_sec					*/
-/****************************************************************************/
-void getuserdat(user_t *user)
-{
-	uchar userdat[U_LEN+1],str[U_LEN+1];
-	int i,file;
-
-if(!user->number || user->number>lastuser()) {
-	memset(user,0L,sizeof(user_t));
-	user->number=0;
-	return; }
-sprintf(userdat,"%sUSER\\USER.DAT",data_dir);
-if((file=nopen(userdat,O_RDONLY|O_DENYNONE))==-1) {
-	close(file);
-	memset(user,0L,sizeof(user_t));
-	user->number=0;
-	return; }
-lseek(file,(long)((long)(user->number-1)*U_LEN),SEEK_SET);
-i=0;
-while(i<LOOP_NODEDAB
-	&& lock(file,(long)((long)(user->number-1)*U_LEN),U_LEN)==-1) {
-	if(i>10)
-		mswait(55);
-	i++; }
-
-if(i>=LOOP_NODEDAB) {
-	close(file);
-	errormsg(WHERE,ERR_LOCK,"USER.DAT",user->number);
-	memset(user,0L,sizeof(user_t));
-	user->number=0;
-    return; }
-
-if(read(file,userdat,U_LEN)!=U_LEN) {
-	unlock(file,(long)((long)(user->number-1)*U_LEN),U_LEN);
-	close(file);
-	errormsg(WHERE,ERR_READ,"USER.DAT",U_LEN);
-	memset(user,0L,sizeof(user_t));
-	user->number=0;
-	return; }
-
-unlock(file,(long)((long)(user->number-1)*U_LEN),U_LEN);
-close(file);
-getrec(userdat,U_ALIAS,LEN_ALIAS,user->alias);
-/* order of these function	*/
-getrec(userdat,U_NAME,LEN_NAME,user->name);
-/* calls is irrelevant */
-getrec(userdat,U_HANDLE,LEN_HANDLE,user->handle);
-getrec(userdat,U_NOTE,LEN_NOTE,user->note);
-getrec(userdat,U_COMP,LEN_COMP,user->comp);
-getrec(userdat,U_COMMENT,LEN_COMMENT,user->comment);
-getrec(userdat,U_NETMAIL,LEN_NETMAIL,user->netmail);
-getrec(userdat,U_ADDRESS,LEN_ADDRESS,user->address);
-getrec(userdat,U_LOCATION,LEN_LOCATION,user->location);
-getrec(userdat,U_ZIPCODE,LEN_ZIPCODE,user->zipcode);
-getrec(userdat,U_PASS,LEN_PASS,user->pass);
-getrec(userdat,U_PHONE,LEN_PHONE,user->phone);
-getrec(userdat,U_BIRTH,LEN_BIRTH,user->birth);
-getrec(userdat,U_MODEM,LEN_MODEM,user->modem);
-getrec(userdat,U_LASTON,8,str); user->laston=ahtoul(str);
-getrec(userdat,U_FIRSTON,8,str); user->firston=ahtoul(str);
-getrec(userdat,U_EXPIRE,8,str); user->expire=ahtoul(str);
-getrec(userdat,U_PWMOD,8,str); user->pwmod=ahtoul(str);
-getrec(userdat,U_NS_TIME,8,str);
-user->ns_time=ahtoul(str);
-if(user->ns_time<0x20000000L)
-	user->ns_time=user->laston;  /* Fix for v2.00->v2.10 */
-
-getrec(userdat,U_LOGONS,5,str); user->logons=atoi(str);
-getrec(userdat,U_LTODAY,5,str); user->ltoday=atoi(str);
-getrec(userdat,U_TIMEON,5,str); user->timeon=atoi(str);
-getrec(userdat,U_TEXTRA,5,str); user->textra=atoi(str);
-getrec(userdat,U_TTODAY,5,str); user->ttoday=atoi(str);
-getrec(userdat,U_TLAST,5,str); user->tlast=atoi(str);
-getrec(userdat,U_POSTS,5,str); user->posts=atoi(str);
-getrec(userdat,U_EMAILS,5,str); user->emails=atoi(str);
-getrec(userdat,U_FBACKS,5,str); user->fbacks=atoi(str);
-getrec(userdat,U_ETODAY,5,str); user->etoday=atoi(str);
-getrec(userdat,U_PTODAY,5,str); user->ptoday=atoi(str);
-getrec(userdat,U_ULB,10,str); user->ulb=atol(str);
-getrec(userdat,U_ULS,5,str); user->uls=atoi(str);
-getrec(userdat,U_DLB,10,str); user->dlb=atol(str);
-getrec(userdat,U_DLS,5,str); user->dls=atoi(str);
-getrec(userdat,U_CDT,10,str); user->cdt=atol(str);
-getrec(userdat,U_MIN,10,str); user->min=atol(str);
-getrec(userdat,U_LEVEL,2,str); user->level=atoi(str);
-getrec(userdat,U_FLAGS1,8,str); user->flags1=ahtoul(str); /***
-getrec(userdat,U_TL,2,str); user->tl=atoi(str); ***/
-getrec(userdat,U_FLAGS2,8,str); user->flags2=ahtoul(str);
-getrec(userdat,U_FLAGS3,8,str); user->flags3=ahtoul(str);
-getrec(userdat,U_FLAGS4,8,str); user->flags4=ahtoul(str);
-getrec(userdat,U_EXEMPT,8,str); user->exempt=ahtoul(str);
-getrec(userdat,U_REST,8,str); user->rest=ahtoul(str);
-getrec(userdat,U_ROWS,2,str); user->rows=atoi(str);
-if(user->rows && user->rows<10)
-	user->rows=10;
-user->sex=userdat[U_SEX];
-if(!user->sex)
-	user->sex=SP;	 /* fix for v1b04 that could save as 0 */
-user->prot=userdat[U_PROT];
-if(user->prot<SP)
-	user->prot=SP;
-getrec(userdat,U_MISC,8,str); user->misc=ahtoul(str);
-if(user->rest&FLAG('Q'))
-	user->misc&=~SPIN;
-
-getrec(userdat,U_LEECH,2,str);
-user->leech=(uchar)ahtoul(str);
-getrec(userdat,U_CURSUB,8,useron.cursub);
-getrec(userdat,U_CURDIR,8,useron.curdir);
-
-getrec(userdat,U_FREECDT,10,str);
-user->freecdt=atol(str);
-
-getrec(userdat,U_XEDIT,8,str);
-for(i=0;i<total_xedits;i++)
-	if(!stricmp(str,xedit[i]->code) && chk_ar(xedit[i]->ar,*user))
-		break;
-user->xedit=i+1;
-if(user->xedit>total_xedits)
-    user->xedit=0;
-
-getrec(userdat,U_SHELL,8,str);
-for(i=0;i<total_shells;i++)
-	if(!stricmp(str,shell[i]->code))
-		break;
-if(i==total_shells)
-	i=0;
-user->shell=i;
-
-getrec(userdat,U_QWK,8,str);
-if(str[0]<SP) { 			   /* v1c, so set defaults */
-	if(user->rest&FLAG('Q'))
-		user->qwk=(QWK_RETCTLA);
-	else
-		user->qwk=(QWK_FILES|QWK_ATTACH|QWK_EMAIL|QWK_DELMAIL); }
-else
-	user->qwk=ahtoul(str);
-
-getrec(userdat,U_TMPEXT,3,user->tmpext);
-if((!user->tmpext[0] || !strcmp(user->tmpext,"0")) && total_fcomps)
-	strcpy(user->tmpext,fcomp[0]->ext);  /* For v1x to v2x conversion */
-
-getrec(userdat,U_CHAT,8,str);
-user->chat=ahtoul(str);
-
-if(useron.number==user->number) {
-	useron=*user;
-
-	if(online) {
-
-#if 0
-		getusrdirs();
-		getusrsubs();
-#endif
-		if(useron.misc&AUTOTERM) {
-			useron.misc&=~(ANSI|RIP|WIP);
-			useron.misc|=autoterm; }
-		statusline(); } }
-}
-
-
-/****************************************************************************/
-/* Returns the username in 'str' that corresponds to the 'usernumber'       */
-/* Called from functions everywhere                                         */
-/****************************************************************************/
-char *username(int usernumber,char *strin)
-{
-    char str[256];
-    char c;
-    int file;
-
-if(usernumber<1) {
-    strin[0]=0;
-    return(strin); }
-sprintf(str,"%sUSER\\NAME.DAT",data_dir);
-if(flength(str)<1L) {
-    strin[0]=0;
-    return(strin); }
-if((file=nopen(str,O_RDONLY))==-1) {
-    errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-    strin[0]=0;
-    return(strin); }
-if(filelength(file)<(long)((long)usernumber*(LEN_ALIAS+2))) {
-    close(file);
-    strin[0]=0;
-    return(strin); }
-lseek(file,(long)((long)(usernumber-1)*(LEN_ALIAS+2)),SEEK_SET);
-read(file,strin,LEN_ALIAS);
-close(file);
-for(c=0;c<LEN_ALIAS;c++)
-    if(strin[c]==ETX) break;
-strin[c]=0;
-if(!c)
-    strcpy(strin,"DELETED USER");
-return(strin);
-}
-
-/****************************************************************************/
-/* Fills the timeleft variable with the correct value. Hangs up on the      */
-/* user if their time is up.                                                */
-/* Called from functions main_sec and xfer_sec                              */
-/****************************************************************************/
-void gettimeleft(void)
-{
-    static  inside;
-    char    str[128];
-    int     i;
-    time_t  eventtime=0,thisevent;
-    long    tleft;
-    struct  date lastdate;
-    struct  tm *gm;
-
-now=time(NULL);
-
-gm=localtime(&now);
-if(useron.exempt&FLAG('T')) {   /* Time online exemption */
-    timeleft=level_timepercall[useron.level]*60;
-    if(timeleft<10)             /* never get below 10 for exempt users */
-        timeleft=10; }
-else {
-    tleft=(((long)level_timeperday[useron.level]-useron.ttoday)
-        +useron.textra)*60L;
-    if(tleft<0) tleft=0;
-    if(tleft>level_timepercall[useron.level]*60)
-        tleft=level_timepercall[useron.level]*60;
-    tleft+=useron.min*60L;
-    tleft-=now-starttime;
-    if(tleft>0x7fffL)
-        timeleft=0x7fff;
-    else
-        timeleft=tleft; }
-
-/* Timed event time reduction handler */
-
-for(i=0;i<total_events;i++) {
-    if(!event[i]->node || event[i]->node>sys_nodes)
-        continue;
-    if(!(event[i]->misc&EVENT_FORCE)
-        || (!(event[i]->misc&EVENT_EXCL) && event[i]->node!=node_num)
-        || !(event[i]->days&(1<<gm->tm_wday)))
-        continue;
-    unixtodos(event[i]->last,&lastdate,&curtime);
-    unixtodos(now,&date,&curtime);
-    curtime.ti_hour=event[i]->time/60;   /* hasn't run yet today */
-    curtime.ti_min=event[i]->time-(curtime.ti_hour*60);
-    curtime.ti_sec=0;
-    thisevent=dostounix(&date,&curtime);
-    if(date.da_day==lastdate.da_day && date.da_mon==lastdate.da_mon)
-        thisevent+=24L*60L*60L;     /* already ran today, so add 24hrs */
-    if(!eventtime || thisevent<eventtime)
-        eventtime=thisevent; }
-if(eventtime && now+timeleft>eventtime) {    /* less time, set flag */
-    sys_status|=SS_EVENT;
-    timeleft=eventtime-now; }
-
-/* Event time passed by front-end */
-if(next_event && (next_event<now || next_event-now<timeleft)) {
-    timeleft=next_event-now;
-    sys_status|=SS_EVENT; }
-
-if(timeleft<0)  /* timeleft can't go negative */
-    timeleft=0;
-if(thisnode.status==NODE_NEWUSER) {
-    timeleft=level_timepercall[new_level];
-    if(timeleft<10*60L)
-        timeleft=10*60L; }
-
-if(inside)			/* The following code is not recursive */
-    return;
-inside=1;
-
-if(!timeleft && !SYSOP && !(sys_status&SS_LCHAT)) {
-    logline(nulstr,"Ran out of time");
-    SAVELINE;
-    bputs(text[TimesUp]);
-    if(!(sys_status&(SS_EVENT|SS_USERON)) && useron.cdt>=100L*1024L
-		&& !(sys_misc&SM_NOCDTCVT)) {
-        sprintf(tmp,text[Convert100ktoNminQ],cdt_min_value);
-        if(yesno(tmp)) {
-			logline("  ","Credit to Minute Conversion");
-            useron.min=adjustuserrec(useron.number,U_MIN,10,cdt_min_value);
-			useron.cdt=adjustuserrec(useron.number,U_CDT,10,-(102400L));
-			sprintf(str,"Credit Adjustment: %ld",-(102400L));
-			logline("$-",str);
-			sprintf(str,"Minute Adjustment: %u",cdt_min_value);
-			logline("*+",str);
-            RESTORELINE;
-            gettimeleft();
-            inside=0;
-            return; } }
-	if(sys_misc&SM_TIME_EXP && !(sys_status&SS_EVENT)
-		&& !(useron.exempt&FLAG('E'))) {
-                                        /* set to expired values */
-		bputs(text[AccountHasExpired]);
-		sprintf(str,"%s Expired",useron.alias);
-		logentry("!%",str);
-		if(level_misc[useron.level]&LEVEL_EXPTOVAL
-			&& level_expireto[useron.level]<10) {
-			useron.flags1=val_flags1[level_expireto[useron.level]];
-			useron.flags2=val_flags2[level_expireto[useron.level]];
-			useron.flags3=val_flags3[level_expireto[useron.level]];
-			useron.flags4=val_flags4[level_expireto[useron.level]];
-			useron.exempt=val_exempt[level_expireto[useron.level]];
-			useron.rest=val_rest[level_expireto[useron.level]];
-			if(val_expire[level_expireto[useron.level]])
-				useron.expire=now
-					+(val_expire[level_expireto[useron.level]]*24*60*60);
-			else
-				useron.expire=0;
-			useron.level=val_level[level_expireto[useron.level]]; }
-		else {
-			if(level_misc[useron.level]&LEVEL_EXPTOLVL)
-				useron.level=level_expireto[useron.level];
-			else
-				useron.level=expired_level;
-			useron.flags1&=~expired_flags1; /* expired status */
-			useron.flags2&=~expired_flags2; /* expired status */
-			useron.flags3&=~expired_flags3; /* expired status */
-			useron.flags4&=~expired_flags4; /* expired status */
-			useron.exempt&=~expired_exempt;
-			useron.rest|=expired_rest;
-			useron.expire=0; }
-        putuserrec(useron.number,U_LEVEL,2,itoa(useron.level,str,10));
-        putuserrec(useron.number,U_FLAGS1,8,ultoa(useron.flags1,str,16));
-        putuserrec(useron.number,U_FLAGS2,8,ultoa(useron.flags2,str,16));
-        putuserrec(useron.number,U_FLAGS3,8,ultoa(useron.flags3,str,16));
-        putuserrec(useron.number,U_FLAGS4,8,ultoa(useron.flags4,str,16));
-        putuserrec(useron.number,U_EXPIRE,8,ultoa(useron.expire,str,16));
-        putuserrec(useron.number,U_EXEMPT,8,ultoa(useron.exempt,str,16));
-        putuserrec(useron.number,U_REST,8,ultoa(useron.rest,str,16));
-		if(expire_mod[0])
-			exec_bin(expire_mod,&main_csi);
-        RESTORELINE;
-        gettimeleft();
-        inside=0;
-        return; }
-    SYNC;
-    hangup(); }
-inside=0;
-}
-
-/****************************************************************************/
-/* Places into 'strout' CR or ETX terminated string starting at             */
-/* 'start' and ending at 'start'+'length' or terminator from 'strin'        */
-/****************************************************************************/
-void getrec(char *strin,int start,int length,char *strout)
-{
-    int i=0,stop;
-
-stop=start+length;
-while(start<stop) {
-	if(strin[start]==ETX || strin[start]==CR || strin[start]==LF)
-        break;
-    strout[i++]=strin[start++]; }
-strout[i]=0;
-}
-
-/****************************************************************************/
-/* Places into 'strout', 'strin' starting at 'start' and ending at          */
-/* 'start'+'length'                                                         */
-/****************************************************************************/
-void putrec(char *strout,int start,int length,char *strin)
-{
-    int i=0,j;
-
-j=strlen(strin);
-while(i<j && i<length)
-    strout[start++]=strin[i++];
-while(i++<length)
-    strout[start++]=ETX;
-}
-
-
-/****************************************************************************/
-/* Returns the age derived from the string 'birth' in the format MM/DD/YY	*/
-/* Called from functions statusline, main_sec, xfer_sec, useredit and 		*/
-/* text files																*/
-/****************************************************************************/
-char getage(char *birth)
-{
-	char age;
-
-if(!atoi(birth) || !atoi(birth+3))	/* Invalid */
-	return(0);
-getdate(&date);
-age=(date.da_year-1900)-(((birth[6]&0xf)*10)+(birth[7]&0xf));
-if(age>90)
-	age-=90;
-if(sys_misc&SM_EURODATE) {		/* DD/MM/YY format */
-	if(atoi(birth)>31 || atoi(birth+3)>12)
-		return(0);
-	if(((birth[3]&0xf)*10)+(birth[4]&0xf)>date.da_mon ||
-		(((birth[3]&0xf)*10)+(birth[4]&0xf)==date.da_mon &&
-		((birth[0]&0xf)*10)+(birth[1]&0xf)>date.da_day))
-		age--; }
-else {							/* MM/DD/YY format */
-	if(atoi(birth)>12 || atoi(birth+3)>31)
-		return(0);
-	if(((birth[0]&0xf)*10)+(birth[1]&0xf)>date.da_mon ||
-		(((birth[0]&0xf)*10)+(birth[1]&0xf)==date.da_mon &&
-		((birth[3]&0xf)*10)+(birth[4]&0xf)>date.da_day))
-		age--; }
-if(age<0)
-	return(0);
-return(age);
-}
-
-
-/****************************************************************************/
-/* Converts an ASCII Hex string into an ulong                               */
-/****************************************************************************/
-ulong ahtoul(char *str)
-{
-    ulong l,val=0;
-
-while((l=(*str++)|0x20)!=0x20)
-    val=(l&0xf)+(l>>6&1)*9+val*16;
-return(val);
-}
-
diff --git a/src/sbbs2/initdata.c b/src/sbbs2/initdata.c
deleted file mode 100644
index c02305fd6d..0000000000
--- a/src/sbbs2/initdata.c
+++ /dev/null
@@ -1,239 +0,0 @@
-#line 1 "INITDATA.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/**************************************************************************/
-/* This file contains the function initdata() and its exclusive functions */
-/**************************************************************************/
-
-#include "sbbs.h"
-
-/****************************************************************/
-/* Prototypes of functions that are called only by initdata()	*/
-/****************************************************************/
-void md(char *path);
-char *readtext(long *line, FILE *stream);
-
-/****************************************************************************/
-/* Initializes system and node configuration information and data variables */
-/****************************************************************************/
-void initdata()
-{
-	char	str[256],str2[LEN_ALIAS+1],fname[13];
-	int 	file;
-	uint 	i,j;
-	long	l,line=0L;
-	FILE 	*instream;
-	read_cfg_text_t txt;
-
-txt.openerr="\7\r\nError opening %s for read.\r\n";
-txt.reading="\r\nReading %s...";
-txt.readit="\rRead %s       ";
-txt.allocerr="\7\r\nError allocating %u bytes of memory\r\n";
-txt.error="\7\r\nERROR: Offset %lu in %s\r\n\r\n";
-
-read_node_cfg(txt);
-read_main_cfg(txt);
-read_msgs_cfg(txt);
-read_file_cfg(txt);
-read_xtrn_cfg(txt);
-read_chat_cfg(txt);
-read_attr_cfg(txt);
-
-strcpy(fname,"TEXT.DAT");
-sprintf(str,"%s%s",ctrl_dir,fname);
-if((instream=fnopen(&file,str,O_RDONLY))==NULL) {
-	lprintf(txt.openerr,str);
-	bail(1); }
-lprintf(txt.reading,fname);
-for(i=0;i<TOTAL_TEXT && !feof(instream) && !ferror(instream);i++)
-	if((text[i]=text_sav[i]=readtext(&line,instream))==NULL)
-		i--;
-if(i<TOTAL_TEXT) {
-	lprintf(txt.error,line,fname);
-	lprintf("Less than TOTAL_TEXT (%u) strings defined in %s\r\n"
-		,TOTAL_TEXT,fname);
-	bail(1); }
-/****************************/
-/* Read in static text data */
-/****************************/
-fclose(instream);
-lprintf(txt.readit,fname);
-
-strcpy(str,temp_dir);
-if(strcmp(str+1,":\\"))     /* not root directory */
-    str[strlen(str)-1]=0;   /* chop off '\' */
-md(str);
-
-for(i=0;i<=sys_nodes;i++) {
-	sprintf(str,"%sDSTS.DAB",i ? node_path[i-1] : ctrl_dir);
-	if(flength(str)<DSTSDABLEN) {
-		if((file=nopen(str,O_WRONLY|O_CREAT|O_APPEND))==-1) {
-			lprintf("\7\r\nError creating %s\r\n",str);
-			bail(1); }
-		while(filelength(file)<DSTSDABLEN)
-			if(write(file,"\0",1)!=1)
-				break;				/* Create NULL system dsts.dab */
-		close(file); } }
-
-j=0;
-sprintf(str,"%sUSER\\USER.DAT",data_dir);
-if((l=flength(str))>0L) {
-	if(l%U_LEN) {
-		lprintf("\7\r\n%s is not evenly divisable by U_LEN (%d)\r\n"
-			,str,U_LEN);
-		bail(1); }
-	j=lastuser(); }
-if(node_valuser>j)	/* j still equals last user */
-	node_valuser=1;
-sys_status|=SS_INITIAL;
-#ifdef __MSDOS__
-freedosmem=farcoreleft();
-#endif
-}
-
-/****************************************************************************/
-/* If the directory 'path' doesn't exist, create it.                      	*/
-/****************************************************************************/
-void md(char *path)
-{
-	struct ffblk ff;
-
-if(findfirst(path,&ff,FA_DIREC)) {
-	lprintf("\r\nCreating Directory %s... ",path);
-	if(mkdir(path)) {
-		lprintf("\7failed!\r\nFix configuration or make directory by "
-			"hand.\r\n");
-		bail(1); }
-	lputs(crlf); }
-}
-
-/****************************************************************************/
-/* Reads special TEXT.DAT printf style text lines, splicing multiple lines, */
-/* replacing escaped characters, and allocating the memory					*/
-/****************************************************************************/
-char *readtext(long *line,FILE *stream)
-{
-	char buf[2048],str[2048],*p,*p2;
-	int i,j,k;
-
-if(!fgets(buf,256,stream))
-	return(NULL);
-if(line)
-	(*line)++;
-if(buf[0]=='#')
-	return(NULL);
-p=strrchr(buf,'"');
-if(!p) {
-	if(line) {
-		lprintf("\7\r\nNo quotation marks in line %d of TEXT.DAT\r\n",*line);
-		bail(1); }
-	return(NULL); }
-if(*(p+1)=='\\')	/* merge multiple lines */
-	while(strlen(buf)<2000) {
-		if(!fgets(str,255,stream))
-			return(NULL);
-		if(line)
-			(*line)++;
-		p2=strchr(str,'"');
-		if(!p2)
-			continue;
-		strcpy(p,p2+1);
-		p=strrchr(p,'"');
-		if(p && *(p+1)=='\\')
-			continue;
-		break; }
-*(p)=0;
-k=strlen(buf);
-for(i=1,j=0;i<k;j++) {
-	if(buf[i]=='\\')	{ /* escape */
-		i++;
-		if(isdigit(buf[i])) {
-			str[j]=atoi(buf+i); 	/* decimal, NOT octal */
-			if(isdigit(buf[++i]))	/* skip up to 3 digits */
-				if(isdigit(buf[++i]))
-					i++;
-			continue; }
-		switch(buf[i++]) {
-			case '\\':
-				str[j]='\\';
-				break;
-			case '?':
-				str[j]='?';
-				break;
-			case 'x':
-                tmp[0]=buf[i++];        /* skip next character */
-                tmp[1]=0;
-                if(isxdigit(buf[i])) {  /* if another hex digit, skip too */
-                    tmp[1]=buf[i++];
-                    tmp[2]=0; }
-				str[j]=(char)ahtoul(tmp);
-				break;
-			case '\'':
-				str[j]='\'';
-				break;
-			case '"':
-				str[j]='"';
-				break;
-			case 'r':
-				str[j]=CR;
-				break;
-			case 'n':
-				str[j]=LF;
-				break;
-			case 't':
-				str[j]=TAB;
-				break;
-			case 'b':
-				str[j]=BS;
-				break;
-			case 'a':
-				str[j]=7;	/* BEL */
-				break;
-			case 'f':
-				str[j]=FF;
-				break;
-			case 'v':
-				str[j]=11;	/* VT */
-				break;
-			default:
-				str[j]=buf[i];
-				break; }
-		continue; }
-	str[j]=buf[i++]; }
-str[j]=0;
-if((p=(char *)MALLOC(j+1))==NULL) {
-	lprintf("\7\r\nError allocating %u bytes of memory from TEXT.DAT\r\n",j);
-	bail(1); }
-strcpy(p,str);
-return(p);
-}
-
-/****************************************************************************/
-/* Reads in ATTR.CFG and initializes the associated variables               */
-/****************************************************************************/
-void read_attr_cfg(read_cfg_text_t txt)
-{
-    char    str[256],fname[13];
-    int     file,i;
-	long	offset=0;
-    FILE    *instream;
-
-strcpy(fname,"ATTR.CFG");
-sprintf(str,"%s%s",ctrl_dir,fname);
-if((instream=fnopen(&file,str,O_RDONLY))==NULL) {
-    lprintf(txt.openerr,str);
-    bail(1); }
-lprintf(txt.reading,fname);
-for(i=0;i<TOTAL_COLORS && !feof(instream) && !ferror(instream);i++) {
-	readline(&offset,str,4,instream);
-    color[i]=attrstr(str); }
-if(i<TOTAL_COLORS) {
-	lprintf(txt.error,offset,fname);
-    lprintf("Less than TOTAL_COLORS (%u) defined in %s\r\n"
-        ,TOTAL_COLORS,fname);
-    bail(1); }
-fclose(instream);
-lprintf(txt.readit,fname);
-}
-
diff --git a/src/sbbs2/install/install.c b/src/sbbs2/install/install.c
deleted file mode 100644
index bb24972c03..0000000000
--- a/src/sbbs2/install/install.c
+++ /dev/null
@@ -1,1048 +0,0 @@
-/* install.c */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* Synchronet BBS Installation program */
-
-unsigned int _stklen=0x8000;
-
-#include <io.h>
-#include <dir.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-#include <process.h>
-#include <errno.h>
-#include "uifc.h"
-
-/* OS Specific */
-#if defined(__FLAT__)	// 32-bit
-	#define FAR16
-	#define HUGE16
-	#define lread(f,b,l) read(f,b,l)
-	#define lfread(b,l,f) fread(b,l,f)
-	#define lwrite(f,b,l) write(f,b,l)
-	#define lfwrite(b,l,f) fwrite(b,l,f)
-#else					// 16-bit
-	#define FAR16 far
-	#define HUGE16 huge
-#endif
-
-void bail(int code);
-
-char **opt;
-
-#define EXEC		(1<<1)
-#define CFGS		(1<<2)
-#define TEXT		(1<<3)
-#define DOCS		(1<<4)
-
-#define DISK1		(EXEC|CFGS|TEXT|DOCS)
-
-#define UTIL		(1<<10)
-#define XTRN		(1<<11)
-#define XSDK		(1<<12)
-
-#define DISK2		(UTIL|XTRN|XSDK)
-
-#define UPGRADE 	(1<<13)
-
-#define LOOP_NOPEN 100
-
-int mode=(DISK1|DISK2);
-
-enum {				/* Upgrade FROM version */
-	 NONE
-	,SBBS20
-	,SBBS21
-	,SBBS22
-	,SBBS23
-	};
-
-char tmp[256];
-char install_to[129],install_from[256];
-
-/****************************************************************************/
-/* Puts a backslash on path strings 										*/
-/****************************************************************************/
-void backslash(char *str)
-{
-    int i;
-
-i=strlen(str);
-if(i && str[i-1]!='\\') {
-    str[i]='\\'; str[i+1]=0; }
-}
-
-
-/****************************************************************************/
-/* If the directory 'path' doesn't exist, create it.                      	*/
-/* returns 1 if successful, 0 otherwise 									*/
-/****************************************************************************/
-int md(char *path)
-{
-	char str[128];
-	struct ffblk ff;
-
-if(strlen(path)<2) {
-	umsg("Invalid path");
-	return(0); }
-strcpy(str,path);
-if(strcmp(str+1,":\\") && str[strlen(str)-1]=='\\')
-	str[strlen(str)-1]=0;	/* Chop of \ if not root directory */
-if(findfirst(str,&ff,FA_DIREC)) {
-	if(mkdir(str)) {
-		sprintf(str,"Unable to Create Directory '%s'",path);
-		umsg(str);
-		return(0); } }
-return(1);
-}
-
-long fdate_dir(char *filespec)
-{
-    struct ffblk f;
-    struct date fd;
-    struct time ft;
-
-if(findfirst(filespec,&f,FA_RDONLY|FA_HIDDEN|FA_SYSTEM|FA_DIREC)==0) {
-	fd.da_day=f.ff_fdate&0x1f;
-	fd.da_mon=(f.ff_fdate>>5)&0xf;
-	fd.da_year=1980+((f.ff_fdate>>9)&0x7f);
-	ft.ti_hour=0;
-	ft.ti_min=0;
-	ft.ti_sec=0;
-    return(dostounix(&fd,&ft)); }
-else return(0);
-}
-
-/****************************************************************************/
-/* Returns the length of the file in 'filespec'                             */
-/****************************************************************************/
-long flength(char *filespec)
-{
-	struct ffblk f;
-
-if(findfirst(filespec,&f,0)==0)
-	return(f.ff_fsize);
-return(-1L);
-}
-
-/****************************************************************************/
-/* Checks the disk drive for the existence of a file. Returns 1 if it       */
-/* exists, 0 if it doesn't.                                                 */
-/****************************************************************************/
-char fexist(char *filespec)
-{
-    struct ffblk f;
-
-if(findfirst(filespec,&f,FA_RDONLY|FA_HIDDEN|FA_SYSTEM|FA_DIREC)==0)
-    return(1);
-return(0);
-}
-
-#ifndef __OS2__
-/****************************************************************************/
-/* This function reads files that are potentially larger than 32k.  		*/
-/* Up to one megabyte of data can be read with each call.                   */
-/****************************************************************************/
-long lread(int file, char huge *buf,long bytes)
-{
-	long count;
-
-for(count=bytes;count>32767;count-=32767,buf+=32767)
-	if(read(file,(char *)buf,32767)!=32767)
-		return(-1L);
-if(read(file,(char *)buf,(int)count)!=count)
-	return(-1L);
-return(bytes);
-}
-
-/****************************************************************************/
-/* This function writes files that are potentially larger than 32767 bytes  */
-/* Up to one megabytes of data can be written with each call.				*/
-/****************************************************************************/
-long lwrite(int file, char huge *buf, long bytes)
-{
-
-	long count;
-
-for(count=bytes;count>32767;count-=32767,buf+=32767)
-	if(write(file,(char *)buf,32767)!=32767)
-		return(-1L);
-if(write(file,(char *)buf,(int)count)!=count)
-	return(-1L);
-return(bytes);
-}
-#endif
-
-/****************************************************************************/
-/* Network open function. Opens all files DENYALL and retries LOOP_NOPEN    */
-/* number of times if the attempted file is already open or denying access	*/
-/* for some other reason.	All files are opened in BINARY mode.			*/
-/****************************************************************************/
-int nopen(char *str, int access)
-{
-	char logstr[256];
-	int file,share,count=0;
-
-if(access==O_RDONLY) share=O_DENYWRITE;
-	else share=O_DENYALL;
-while(((file=open(str,O_BINARY|share|access,S_IWRITE))==-1)
-	&& errno==EACCES && count++<LOOP_NOPEN);
-if(file==-1 && errno==EACCES)
-	cputs("\7\r\nNOPEN: ACCESS DENIED\r\n\7");
-return(file);
-}
-
-int copy(char *src, char *dest)
-{
-	char c,HUGE16 *buf,str[256],str2[128],*scrnsave;
-	int in,out;
-	long length,chunk,l;
-	struct ftime ftime;
-
-if(!strcmp(src,dest))	/* copy from and to are same, so return */
-	return(0);
-
-if((scrnsave=MALLOC(scrn_len*80*2))==NULL)
-	return(-1);
-hidemouse();
-gettext(1,1,80,scrn_len,scrnsave);
-
-#define width 72
-#define top 10
-#define left 0
-
-sprintf(str2,"Copying %s to %s...",src,dest);
-sprintf(str," %-64.64s",str2); /* Make sure it's no more than 60 */
-
-gotoxy(SCRN_LEFT+left,SCRN_TOP+top);
-textattr(hclr|(bclr<<4));
-putch('�');
-for(c=1;c<width-1;c++)
-	putch('�');
-putch('�');
-gotoxy(SCRN_LEFT+left,SCRN_TOP+top+1);
-putch('�');
-textattr(lclr|(bclr<<4));
-cprintf("%-*.*s",width-2,width-2,str);
-gotoxy(SCRN_LEFT+left+(width-1),SCRN_TOP+top+1);
-textattr(hclr|(bclr<<4));
-putch('�');
-gotoxy(SCRN_LEFT+left,SCRN_TOP+top+2);
-putch('�');
-for(c=1;c<width-1;c++)
-	putch('�');
-putch('�');
-gotoxy(SCRN_LEFT+left+(width-5),SCRN_TOP+top+1);
-textattr(lclr|(bclr<<4));
-
-if((in=nopen(src,O_RDONLY))==-1) {
-	cprintf("\r\nERR_OPEN %s",src);
-	getch();
-	puttext(1,1,80,scrn_len,scrnsave);
-	FREE(scrnsave);
-	showmouse();
-    return(-1); }
-if((out=nopen(dest,O_WRONLY|O_CREAT|O_TRUNC))==-1) {
-	close(in);
-	sprintf(str,"ERROR OPENING %s",dest);
-	umsg(str);
-	puttext(1,1,80,scrn_len,scrnsave);
-	FREE(scrnsave);
-	showmouse();
-	return(-1); }
-length=filelength(in);
-if(!length) {
-	close(in);
-	close(out);
-	sprintf(str,"ZERO LENGTH %s",src);
-	umsg(str);
-	puttext(1,1,80,scrn_len,scrnsave);
-	showmouse();
-	FREE(scrnsave);
-	return(-1); }
-#if __OS2__
-chunk=1000000;
-#else
-chunk=0x8000; /* use 32k chunks */
-#endif
-if(chunk>length)			/* leave space for stack expansion */
-	chunk=length;
-if((buf=MALLOC(chunk))==NULL) {
-	close(in);
-	close(out);
-	sprintf(str,"ERROR ALLOC %s %lu",src,chunk);
-	umsg(str);
-	puttext(1,1,80,scrn_len,scrnsave);
-    FREE(scrnsave);
-	showmouse();
-    return(-1); }
-l=0L;
-while(l<length) {
-	cprintf("%2lu%%",l ? (long)(100.0/((float)length/l)) : 0L);
-	if(l+chunk>length)
-		chunk=length-l;
-	lread(in,buf,chunk);
-	lwrite(out,buf,chunk);
-	l+=chunk;
-	cputs("\b\b\b");
-	}
-// cputs("   \b\b\b");  /* erase it */
-FREE((char *)buf);
-getftime(in,&ftime);
-setftime(out,&ftime);
-close(in);
-close(out);
-puttext(1,1,80,scrn_len,scrnsave);
-FREE(scrnsave);
-showmouse();
-return(0);
-}
-
-int unarc(int timestamp, char *src, char *dir, char *arg)
-{
-	int i,atr;
-	char str[128],cmd[128],*scrnsave;
-
-if((scrnsave=MALLOC((scrn_len+1)*80*2))==NULL)
-	return(-1);
-hidemouse();
-gettext(1,1,80,scrn_len+1,scrnsave);
-//lclini(scrn_len+1);
-textattr(LIGHTGRAY);
-clrscr();
-sprintf(cmd,"%sLHA.EXE",install_from);
-sprintf(str,"/c%d",timestamp);
-i=spawnlp(P_WAIT,cmd,cmd,"x",str,"/s","/m1",src,dir,arg,NULL);
-if(i==-1) {
-	printf("\r\nCannot execute %s.  Hit any key to continue.",cmd);
-	getch(); }
-else if(i) {
-	printf("\r\n%s returned error level %d.  Hit any key to continue.",cmd,i);
-	getch(); }
-clrscr();
-puttext(1,1,80,scrn_len+1,scrnsave);
-showmouse();
-FREE(scrnsave);
-//lclini(scrn_len);
-//textattr(atr);
-return(i);
-}
-
-
-void main(int argc, char **argv)
-{
-	int i,j,k,ver;
-	long l;
-	char str[128],*p;
-	char text_dir[64],docs_dir[64],exec_dir[64],ctrl_dir[64];
-	struct text_info txt;
-	struct ffblk ff;
-
-timezone=0;
-daylight=0;
-uifcini();
-if(argc>1) {	/* user specified install path */
-	sprintf(install_to,"%.20s",argv[1]);
-	strupr(install_to);
-	if(strlen(install_to)==1) {
-		if(!isalpha(install_to[0])) {
-			cprintf("\7\r\nInvalid install path - '%s'\r\n",install_to);
-			bail(1); }
-		strcat(install_to,":"); }
-	backslash(install_to);
-	if(strlen(install_to)<4)	/* user says C, C:, or C:\, make C:\SBBS */
-		strcat(install_to,"SBBS\\"); }
-else
-	strcpy(install_to,"C:\\SBBS\\");
-
-strcpy(install_from,argv[0]);
-strupr(install_from);
-p=strrchr(install_from,'\\');
-if(p)
-	*(p+1)=0;
-else {				/* incase of A:INSTALL */
-	p=strchr(install_from,':');
-	if(p)
-		*(p+1)=0; }
-
-if((opt=(char **)MALLOC(sizeof(char *)*MAX_OPTS))==NULL) {
-	cputs("memory allocation error\r\n");
-	bail(1); }
-for(i=0;i<MAX_OPTS;i++)
-	if((opt[i]=(char *)MALLOC(MAX_OPLN))==NULL) {
-		cputs("memory allocation error\r\n");
-		bail(1); }
-
-/***
-if(findfirst("MENU.ZIP",&ff,0)) {
-	cprintf("\7\r\nCan't find MENU.ZIP\r\n");
-	bail(1); }
-if(findfirst("TEXT.ZIP",&ff,0)) {
-	cprintf("\7\r\nCan't find TEXT.ZIP\r\n");
-	bail(1); }
-if(findfirst("DOCS.ZIP",&ff,0)) {
-	cprintf("\7\r\nCan't find DOCS.ZIP\r\n");
-	bail(1); }
-if(findfirst("EXEC.ZIP",&ff,0)) {
-	cprintf("\7\r\nCan't find EXEC.ZIP\r\n");
-	bail(1); }
-if(findfirst("PKUNZIP.EXE",&ff,0)) {
-	cprintf("\7\r\nCan't find PKUNZIP.EXE\r\n");
-	bail(1); }
-***/
-uscrn("Synchronet Installation Utility  Version 2.3");
-
-i=0;
-while(1) {
-
-	helpbuf=
-" Synchronet Installation \r\n\r\n"
-"If you are installing Synchronet for evaluation or demonstration\r\n"
-"purposes, be sure to set Install Registration Key to No.\r\n\r\n"
-"If do not have the Synchronet Utilities Disk (Distribution Disk 2), be\r\n"
-"sure to set Install Distribution Disk 2 to None.\r\n\r\n"
-"When you are happy with the installation settings and the destination\r\n"
-"path, select Start Installation to continue or hit  ESC  to abort.";
-
-	j=0;
-	str[0]=0;
-	if((mode&DISK1)==DISK1)
-		strcpy(str,"All");
-	else {
-		if(!(mode&DISK1))
-			strcpy(str,"None");
-		else {
-			strcat(str,"Selected: ");
-			if(mode&EXEC)
-				strcat(str,"EXEC ");
-			if(mode&CFGS)
-				strcat(str,"CFGS ");
-			if(mode&TEXT)
-				strcat(str,"TEXT ");
-			if(mode&DOCS)
-				strcat(str,"DOCS "); } }
-	sprintf(opt[j++],"%-30.30s%s","Install Distribution Disk 1",str);
-	str[0]=0;
-	if((mode&DISK2)==DISK2)
-		strcpy(str,"All");
-	else {
-		if(!(mode&DISK2))
-			strcpy(str,"None");
-		else {
-			strcat(str,"Selected: ");
-			if(mode&UTIL)
-				strcat(str,"UTIL ");
-			if(mode&XTRN)
-				strcat(str,"XTRN ");
-			if(mode&XSDK)
-				strcat(str,"XSDK "); } }
-	sprintf(opt[j++],"%-30.30s%s","Install Distribution Disk 2",str);
-	sprintf(opt[j++],"%-30.30s%s","Source Path",install_from);
-	sprintf(opt[j++],"%-30.30s%s","Target Path",install_to);
-	strcpy(opt[j++],"Start Installation");
-	opt[j][0]=0;
-	switch(ulist(WIN_ORG|WIN_MID|WIN_ACT|WIN_ESC,0,0,60,&i,0
-		,"Synchronet Multinode BBS Installation",opt)) {
-		case 0:
-			j=0;
-			while(1) {
-				k=0;
-				sprintf(opt[k++],"%-30.30s%3s","Main Executables"
-					,mode&EXEC ? "Yes":"No");
-				sprintf(opt[k++],"%-30.30s%3s","Default Configuration"
-					,mode&CFGS ? "Yes":"No");
-				sprintf(opt[k++],"%-30.30s%3s","Text and Menus"
-					,mode&TEXT ? "Yes":"No");
-				sprintf(opt[k++],"%-30.30s%3s","Documentation"
-					,mode&DOCS ? "Yes":"No");
-				strcpy(opt[k++],"All");
-				strcpy(opt[k++],"None");
-				opt[k][0]=0;
-helpbuf=
-" Distribution Disk 1 \r\n\r\n"
-"If you are a installing Synchronet for the first time, it is suggested\r\n"
-"that you install All of Disk 1.\r\n\r\n"
-"If for some reason, you wish to partially install Synchronet or update\r\n"
-"a previously installed version, you can toggle the installation of the\r\n"
-"following file sets:\r\n\r\n"
-"EXEC: Main executable files necessary for Synchronet to run\r\n\r\n"
-"CFGS: Default configuration files\r\n\r\n"
-"TEXT: Text and menu files\r\n\r\n"
-"DOCS: Online ASCII documentation for the system operator";
-				j=ulist(0,0,0,0,&j,0,"Distribution Disk 1",opt);
-				if(j==-1)
-					break;
-				switch(j) {
-					case 0:
-						mode^=EXEC;
-						break;
-					case 1:
-						mode^=CFGS;
-						break;
-					case 2:
-						mode^=TEXT;
-						break;
-					case 3:
-						mode^=DOCS;
-						break;
-					case 4:
-						mode|=DISK1;
-						break;
-					case 5:
-						mode&=~DISK1;
-						break; } }
-			break;
-		case 1:
-			j=0;
-			while(1) {
-				k=0;
-				sprintf(opt[k++],"%-30.30s%3s","Utilities"
-					,mode&UTIL ? "Yes":"No");
-				sprintf(opt[k++],"%-30.30s%3s","Online External Programs"
-					,mode&XTRN ? "Yes":"No");
-				sprintf(opt[k++],"%-30.30s%3s","External Program SDK"
-					,mode&XSDK ? "Yes":"No");
-				strcpy(opt[k++],"All");
-				strcpy(opt[k++],"None");
-				opt[k][0]=0;
-helpbuf=
-" Distribution Disk 2 \r\n\r\n"
-"This disk is optional for the execution of Synchronet. This disk is\r\n"
-"also referred to as the Synchronet Utilities Disk.\r\n\r\n"
-"If for some reason, you wish to partially install Synchronet or update\r\n"
-"a previously installed version, you can toggle the installation of the\r\n"
-"following file sets:\r\n\r\n"
-"UTIL: Utilities to enhance the operation of Synchronet\r\n\r\n"
-"XTRN: Online External Program Samples\r\n\r\n"
-"XSDK: External Program Software Development Kit (for programmers)";
-				j=ulist(WIN_RHT,0,0,0,&j,0,"Distribution Disk 2",opt);
-				if(j==-1)
-					break;
-				switch(j) {
-					case 0:
-						mode^=UTIL;
-						break;
-					case 1:
-						mode^=XTRN;
-						break;
-					case 2:
-						mode^=XSDK;
-						break;
-					case 3:
-						mode|=DISK2;
-						break;
-					case 4:
-						mode&=~DISK2;
-                        break; } }
-			break;
-		case 2:
-helpbuf=
-" Source Path \r\n\r\n"
-"This is the complete path (drive and directory) to install Synchronet\r\n"
-"from. The suggested path is A:\\, but any valid DOS drive and\r\n"
-"directory may be used.";
-			uinput(WIN_L2R,0,0,"Source Path",install_from
-				,30,K_EDIT|K_UPPER);
-			backslash(install_from);
-            break;
-		case 3:
-helpbuf=
-" Target Path \r\n\r\n"
-"This is the complete path (drive and directory) to install Synchronet\r\n"
-"to. The suggested path is C:\\SBBS\\, but any valid DOS drive and\r\n"
-"directory may be used.";
-			uinput(WIN_L2R|WIN_BOT,0,0,"Target Path",install_to
-				,20,K_EDIT|K_UPPER);
-			backslash(install_to);
-			break;
-		case 4:
-			strcpy(opt[0],"Yes");
-			strcpy(opt[1],"No");
-			opt[2][0]=0;
-			j=1;
-			j=ulist(WIN_MID|WIN_SAV,0,0,0,&j,0
-				,"Are you upgrading from an older version (already installed)"
-				,opt);
-			if(j==-1)
-				break;
-			if(j==0) {
-				helpbuf=
-" Upgrade Back-up \r\n"
-"\r\n"
-"INSTALL will take care to only overwrite files that have been changed\r\n"
-"in this new version, but it is always a good idea to do a complete\r\n"
-"system back-up before upgrading, just to be safe.\r\n"
-"\r\n"
-"If you have customized (with an editor) any of the following files, you\r\n"
-"will want to back them up (copy to another disk or directory) before\r\n"
-"you begin the upgrade procedure:\r\n"
-"\r\n"
-"TEXT.DAT (CTRL\\TEXT.DAT)\r\n"
-"Command Shells and Loadable Modules (EXEC\\*.SRC)\r\n"
-"Menus (TEXT\\MENU\\*.ASC)\r\n"
-"Match Maker Questionnaires (XTRN\\SMM\\*.QUE)\r\n"
-"External Program Menus (XTRN\\SMM\\*.ASC, XTRN\\SCB\\*.ASC, etc)\r\n";
-				help();
-				strcpy(opt[0],"Yes");
-				strcpy(opt[1],"No");
-				opt[2][0]=0;
-				j=0;
-				j=ulist(WIN_MID|WIN_SAV,0,0,0,&j,0
-					,"Continue with upgrade"
-					,opt);
-				if(j)
-					break;
-				mode|=UPGRADE;
-				mode&=~CFGS; }
-			else
-				mode&=~UPGRADE;
-			strcpy(str,install_to);
-			if(str[1]==':')                /* drive letter specified */
-				setdisk(toupper(str[0])-'A');
-			if(!md(str))
-				break;
-			sprintf(exec_dir,"%sEXEC\\",install_to);
-			if(mode&UPGRADE)
-				if(uinput(WIN_L2R|WIN_SAV,0,0,"EXEC Directory",exec_dir
-					,30,K_EDIT|K_UPPER)<1)
-					break;
-			backslash(exec_dir);
-			if(!md(exec_dir))
-				break;
-			if(mode&UPGRADE) {
-				sprintf(str,"%sSBBS.EXE",exec_dir);
-				l=fdate_dir(str);
-				ver=NONE;
-				switch(l) {
-					case 0x3044fb80:	/* 08/31/95 v2.20a */
-						ver=SBBS22;
-						break;
-					case 0x2f6a2280:	/* 03/18/95 v2.11a */
-					case 0x2f43e700:	/* 02/17/95 v2.10a */
-						ver=SBBS21;
-						break;
-					case 0x2e6fa580:	/* 09/09/94 v2.00g */
-					case 0x2e627680:	/* 08/30/94 v2.00f */
-					case 0x2e5a8d80:	/* 08/24/94 v2.00e */
-					case 0x2e569900:	/* 08/21/94 v2.00d */
-					case 0x2e554780:	/* 08/20/94 v2.00c */
-					case 0x2e0b7380:	/* 06/25/94 v2.00b */
-					case 0x2ded2100:	/* 06/02/94 v2.00a */
-						ver=SBBS20;
-						break; }
-				if(ver==NONE && flength(str)==642448UL)
-					ver=SBBS22; /* v2.20b - possibly patched */
-				if(ver==NONE) {
-					strcpy(opt[0],"Version 1");
-					strcpy(opt[1],"Version 2.0");
-					strcpy(opt[2],"Version 2.1");
-					strcpy(opt[3],"Version 2.2");
-					strcpy(opt[4],"Version 2.3 beta");
-					opt[5][0]=0;
-					j=0;
-					j=ulist(WIN_MID|WIN_SAV,0,0,0,&j,0
-						,"Which version are you upgrading from?"
-						,opt);
-					if(j<0)
-						break;
-					ver=j;
-					if(ver==NONE) { // Version 1
-						umsg("INSTALL can only upgrade from Version 2.0 or later");
-						umsg("See the file UPGRADE.DOC for UPGRADE instructions");
-						break; } } }
-
-			if(mode&EXEC) {
-				strcpy(opt[0],"Skip This Disk");
-				strcpy(opt[1],"Okay, Try Again");
-                strcpy(opt[2],"Change Source Path...");
-				opt[3][0]=0;
-				j=1;
-				while(1) {
-					sprintf(str,"%sEXEC.LZH",install_from);
-					if(!findfirst(str,&ff,0))
-						break;
-					j=ulist(WIN_MID|WIN_SAV,0,0,0,&j,0
-						,"Insert Distribution Disk 1",opt);
-					if(j==-1)
-						break;
-					if(j==0) {
-						mode&=~DISK1;
-						break; }
-					if(j==2) {
-						uinput(WIN_L2R|WIN_SAV,0,0,"Source Path",install_from
-							,30,K_EDIT|K_UPPER);
-						backslash(install_from); } }
-				if(j==-1)
-					break;
-
-				/* If they already exist, flag as read/write */
-				if(mode&DISK1) {
-					sprintf(str,"%sSBBS.EXE",exec_dir);
-					chmod(str,S_IREAD|S_IWRITE);
-					sprintf(str,"%sSCFG.EXE",exec_dir);
-					chmod(str,S_IREAD|S_IWRITE);
-
-					sprintf(str,"%sEXEC.LZH",install_from);
-					sprintf(tmp,"%sEXEC.LZH",exec_dir);
-					if(copy(str,tmp))
-						break;
-					if(mode&UPGRADE) {
-						sprintf(str,"@%sEXEC.UPG",install_from);
-						if(fexist(str+1))
-							if(unarc(1,tmp,exec_dir,str)) {
-								remove(tmp);
-								break; }
-						if(unarc(0,tmp,exec_dir,NULL)) {
-                            remove(tmp);
-							break; } }
-                    else
-						if(unarc(1,tmp,exec_dir,NULL)) {
-							remove(tmp);
-							break; }
-					remove(tmp);
-
-					/* now set to READ ONLY */
-					sprintf(str,"%sSBBS.EXE",exec_dir);
-					if(chmod(str,S_IREAD))
-						umsg("Error setting SBBS.EXE to READ ONLY");
-					sprintf(str,"%sSCFG.EXE",exec_dir);
-					if(chmod(str,S_IREAD))
-						umsg("Error setting SCFG.EXE to READ ONLY"); } }
-
-			if(mode&CFGS) {
-				sprintf(str,"%sCTRL",install_to);
-				if(!md(str))
-					break;
-				strcpy(opt[0],"Skip This Disk");
-				strcpy(opt[1],"Okay, Try Again");
-                strcpy(opt[2],"Change Source Path...");
-                opt[3][0]=0;
-				j=1;
-				while(1) {
-					sprintf(str,"%sCFGS.LZH",install_from);
-					if(!findfirst(str,&ff,0))
-						break;
-					j=ulist(WIN_MID|WIN_SAV,0,0,0,&j,0
-						,"Insert Distribution Disk 1",opt);
-					if(j==-1)
-						break;
-					if(j==0) {
-						mode&=~DISK1;
-						break; }
-					if(j==2) {
-						uinput(WIN_L2R|WIN_SAV,0,0,"Source Path",install_from
-							,30,K_EDIT|K_UPPER);
-						backslash(install_from); } }
-				if(j==-1)
-					break;
-				if(mode&DISK1) {	 /* not skip */
-					sprintf(str,"%sCFGS.LZH",install_from);
-					sprintf(tmp,"%sCFGS.LZH",install_to);
-					if(copy(str,tmp))
-						break;
-					sprintf(str,"%sCTRL",install_to);
-					if(unarc(1,tmp,install_to,NULL)) {
-						remove(tmp);
-						break; }
-					remove(tmp); } }
-
-			if(mode&TEXT) {
-				sprintf(ctrl_dir,"%sCTRL\\",install_to);
-				if(!md(ctrl_dir))
-					break;
-				sprintf(text_dir,"%sTEXT\\",install_to);
-				if(!md(text_dir))
-                    break;
-				strcpy(opt[0],"Skip This Disk");
-				strcpy(opt[1],"Okay, Try Again");
-                strcpy(opt[2],"Change Source Path...");
-                opt[3][0]=0;
-				j=1;
-				while(1) {
-					sprintf(str,"%sTEXT.LZH",install_from);
-					if(!findfirst(str,&ff,0))
-						break;
-					j=ulist(WIN_MID|WIN_SAV,0,0,0,&j,0
-						,"Insert Distribution Disk 1",opt);
-					if(j==-1)
-						break;
-					if(j==0) {
-						mode&=~DISK1;
-						break; }
-					if(j==2) {
-						uinput(WIN_L2R|WIN_SAV,0,0,"Source Path",install_from
-							,30,K_EDIT|K_UPPER);
-						backslash(install_from); } }
-				if(j==-1)
-					break;
-				if(mode&DISK1) {
-					sprintf(str,"%sTEXT.LZH",install_from);
-					sprintf(tmp,"%sTEXT.LZH",install_to);
-					if(copy(str,tmp))
-						break;
-					if(mode&UPGRADE) {
-						sprintf(str,"@%sTEXT.UPG",install_from);
-						if(fexist(str+1))
-							if(unarc(1,tmp,install_to,str)) {
-								remove(tmp);
-								break; }
-						if(unarc(0,tmp,install_to,NULL)) {
-                            remove(tmp);
-							break; } }
-					else
-						if(unarc(1,tmp,install_to,NULL)) {
-							remove(tmp);
-							break; }
-					remove(tmp); } }
-
-			if(mode&DOCS) {
-				sprintf(docs_dir,"%sDOCS\\",install_to);
-				if(mode&UPGRADE)
-					if(uinput(WIN_L2R|WIN_SAV,0,0,"DOCS Directory",docs_dir
-						,30,K_EDIT|K_UPPER)<1)
-                        break;
-				backslash(docs_dir);
-				if(!md(docs_dir))
-					break;
-				strcpy(opt[0],"Skip This Disk");
-				strcpy(opt[1],"Okay, Try Again");
-                strcpy(opt[2],"Change Source Path...");
-                opt[3][0]=0;
-				j=1;
-				while(1) {
-					sprintf(str,"%sDOCS.LZH",install_from);
-					if(!findfirst(str,&ff,0))
-						break;
-					j=ulist(WIN_MID|WIN_SAV,0,0,0,&j,0
-						,"Insert Distribution Disk 1",opt);
-					if(j==-1)
-						break;
-					if(j==0) {
-						mode&=~DISK1;
-						break; }
-					if(j==2) {
-						uinput(WIN_L2R|WIN_SAV,0,0,"Source Path",install_from
-							,30,K_EDIT|K_UPPER);
-						backslash(install_from); } }
-				if(j==-1)
-					break;
-				if(mode&DISK1) {
-					sprintf(str,"%sDOCS.LZH",install_from);
-					sprintf(tmp,"%sDOCS.LZH",install_to);
-					if(copy(str,tmp))
-						break;
-					if(unarc(1,tmp,docs_dir,NULL)) {
-						remove(tmp);
-						break; }
-					remove(tmp); } }
-
-			if(mode&UTIL) {
-				strcpy(opt[0],"Skip This Disk");
-				strcpy(opt[1],"Okay, Try Again");
-                strcpy(opt[2],"Change Source Path...");
-                opt[3][0]=0;
-				j=1;
-				while(1) {
-					sprintf(str,"%sUTIL.LZH",install_from);
-					if(!findfirst(str,&ff,0))
-						break;
-					j=ulist(WIN_MID|WIN_SAV,0,0,0,&j,0
-						,"Insert Distribution Disk 2 (Utilities Disk)",opt);
-					if(j==-1)
-						break;
-					if(j==0) {
-						mode&=~DISK2;
-						break; }
-					if(j==2) {
-						uinput(WIN_L2R|WIN_SAV,0,0,"Source Path",install_from
-							,30,K_EDIT|K_UPPER);
-						backslash(install_from); } }
-				if(j==-1)
-					break;
-
-				if(mode&DISK2) {
-					sprintf(str,"%sUTIL.LZH",install_from);
-					sprintf(tmp,"%sUTIL.LZH",exec_dir);
-					if(copy(str,tmp))
-						break;
-					if(mode&UPGRADE) {
-						sprintf(str,"@%sUTIL.UPG",install_from);
-						if(fexist(str+1))
-							if(unarc(1,tmp,exec_dir,str)) {
-								remove(tmp);
-								break; }
-						if(unarc(0,tmp,exec_dir,NULL)) {
-                            remove(tmp);
-							break; } }
-                    else
-						if(unarc(1,tmp,exec_dir,NULL)) {
-							remove(tmp);
-							break; }
-					remove(tmp); } }
-
-			if(mode&XTRN) {
-				sprintf(str,"%sXTRN",install_to);
-				if(!md(str))
-					break;
-				strcpy(opt[0],"Skip This Disk");
-				strcpy(opt[1],"Okay, Try Again");
-                strcpy(opt[2],"Change Source Path...");
-                opt[3][0]=0;
-				j=1;
-				while(1) {
-					sprintf(str,"%sXTRN.LZH",install_from);
-					if(!findfirst(str,&ff,0))
-						break;
-					j=ulist(WIN_MID|WIN_SAV,0,0,0,&j,0
-						,"Insert Distribution Disk 2 (Utilities Disk)",opt);
-					if(j==-1)
-						break;
-					if(j==0) {
-						mode&=~DISK2;
-						break; }
-					if(j==2) {
-						uinput(WIN_L2R|WIN_SAV,0,0,"Source Path",install_from
-							,30,K_EDIT|K_UPPER);
-						backslash(install_from); } }
-				if(j==-1)
-					break;
-
-				if(mode&DISK2) {
-					sprintf(str,"%sXTRN.LZH",install_from);
-					sprintf(tmp,"%sXTRN.LZH",install_to);
-					if(copy(str,tmp))
-						break;
-					if(mode&UPGRADE) {
-						sprintf(str,"@%sXTRN.UPG",install_from);
-						if(fexist(str+1))
-							if(unarc(1,tmp,install_to,str)) {
-								remove(tmp);
-								break; }
-						if(unarc(0,tmp,install_to,NULL)) {
-                            remove(tmp);
-							break; } }
-					else
-						if(unarc(1,tmp,install_to,NULL)) {
-							remove(tmp);
-                            break; }
-					remove(tmp); } }
-
-			if(mode&XSDK) {
-				sprintf(str,"%sXTRN",install_to);
-				if(!md(str))
-					break;
-				sprintf(str,"%sXTRN\\SDK",install_to);
-				if(!md(str))
-                    break;
-				strcpy(opt[0],"Skip This Disk");
-				strcpy(opt[1],"Okay, Try Again");
-                strcpy(opt[2],"Change Source Path...");
-                opt[3][0]=0;
-				j=1;
-				while(1) {
-					sprintf(str,"%sXSDK.LZH",install_from);
-					if(!findfirst(str,&ff,0))
-						break;
-					j=ulist(WIN_MID|WIN_SAV,0,0,0,&j,0
-						,"Insert Distribution Disk 2 (Utilities Disk)",opt);
-					if(j==-1)
-						break;
-					if(j==0) {
-						mode&=~DISK2;
-						break; }
-					if(j==2) {
-						uinput(WIN_L2R|WIN_SAV,0,0,"Source Path",install_from
-							,30,K_EDIT|K_UPPER);
-						backslash(install_from); } }
-				if(j==-1)
-					break;
-
-				if(mode&DISK2) {
-					sprintf(str,"%sXSDK.LZH",install_from);
-					sprintf(tmp,"%sXTRN\\XSDK.LZH",install_to);
-					if(copy(str,tmp))
-						break;
-					sprintf(str,"%sXTRN\\SDK\\",install_to);
-					if(unarc(1,tmp,str,NULL)) {
-						remove(tmp);
-						break; }
-					remove(tmp); } }
-			sprintf(str,"%sNODE1",install_to);
-			chdir(str);
-			if(mode&UPGRADE) {
-				helpbuf=
-" Additional Upgrade Instructions \r\n"
-"\r\n"
-"If you were previously running version 1.1 of SyncEdit, you'll need to\r\n"
-"change your command lines and toggle options in SCFG for this new\r\n"
-"version (2.0). See DOCS\\SYNCEDIT.DOC for details.\r\n"
-"\r\n"
-"Make sure you have SCFG->System->Loadable Modules->Login set to LOGIN\r\n"
-"and SCFG->System->Loadable Modules->Logon set to LOGON.\r\n"
-"\r\n"
-"If you want your users to be able to use WIP compatible terminals with\r\n"
-"your BBS, add WIPSHELL to SCFG->Command Shells with an Access\r\n"
-"Requirement String of \"WIP\".";
-				help(); }
-			uifcbail();
-			if(mode&UPGRADE) {
-				cprintf("Synchronet Upgrade Complete.\r\n");
-				exit(0); }
-			if(mode&CFGS)
-				p="/F";
-			else
-				p=NULL;
-			spawnl(P_WAIT,"..\\EXEC\\SCFG.EXE"
-				,"..\\EXEC\\SCFG","..\\CTRL",p,NULL);
-			textattr(LIGHTGRAY);
-			cprintf(
-"Synchronet BBS and its utilities use file and record locking to maintain\r\n"
-"data integrity in a multinode environment. File and record locking under DOS\r\n"
-"requires the use of SHARE.\r\n"
-"\r\n"
-			);
-			cprintf(
-"SHARE is a program that is distributed with MS-DOS and PC-DOS v3.0 and higher\r\n"
-"and must be executed prior to running SBBS. SHARE.EXE should be located in the\r\n"
-"DOS directory of your hard disk.\r\n"
-"\r\n"
-			);
-			cprintf(
-"If you are running Microsoft Windows, you must exit Windows and load SHARE\r\n"
-"before reloading Windows.\r\n"
-"\r\n"
-			);
-			cprintf(
-"It is not necessary to run SHARE if using a single node on a Novell NetWare\r\n"
-"workstation or in an OS/2 DOS window.\r\n"
-"\r\n"
-			);
-			cprintf(
-"SHARE.EXE can be automatically loaded in your AUTOEXEC.BAT or CONFIG.SYS.\r\n"
-"\r\n"
-			);
-			textattr(WHITE);
-			cprintf(
-"After you have loaded SHARE, type SBBS from THIS directory.\r\n"
-			);
-			textattr(LIGHTGRAY);
-			exit(0);
-		case -1:
-			j=0;
-			strcpy(opt[0],"Yes");
-			strcpy(opt[1],"No");
-			opt[2][0]=0;
-			if(!(ulist(WIN_MID,0,0,20,&j,0,"Abort Installation",opt)))
-				bail(0);
-			break; } }
-}
-
-void bail(int code)
-{
-
-if(code)
-	getch();
-uifcbail();
-exit(code);
-}
diff --git a/src/sbbs2/install/makefile b/src/sbbs2/install/makefile
deleted file mode 100644
index f277d18b8b..0000000000
--- a/src/sbbs2/install/makefile
+++ /dev/null
@@ -1,52 +0,0 @@
-###############################################
-# Makefile for Synchronet BBS Install Program #
-# For use with Borland C++ for DOS or OS/2    #
-###############################################
-
-# Macros
-CC	= bcc
-LD	= tlink
-!ifdef __OS2__
-OS	= OS2
-INCLUDE = c:\bcos2\include;..;..\..\uifc
-LIB	= c:\bcos2\lib
-CFLAGS  = -d -C -I$(INCLUDE) -w-pro
-LFLAGS  = -c
-!else
-OS      = DOS
-INCLUDE = \bc45\include;..;..\..\uifc
-LIB	= \bc45\lib
-MODEL	= l
-CFLAGS	= -d -C -m$(MODEL) -I$(INCLUDE) -w-pro
-LFLAGS	= -n -c
-OBJS	= ..\..\mswait\$(OS)\mswait.obj
-!endif
-MAIN	= $(OS)\install.exe
-OBJS	= $(OBJS) $(OS)\uifc.obj $(OS)\install.obj
-HEADERS = ..\..\uifc\uifc.h
-
-# Implicit C Compile Rule
-{.}.c.obj:
-	@echo Compiling (I) $< to $@ ...
-        $(CC) $(CFLAGS) -n$(OS) -c $<
-
-# Main EXE Link Rule
-$(MAIN): $(OBJS) 
-    	@echo Linking $< ...
-!ifdef __OS2__
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c02.obj $(OBJS)
-+, $*, $*, $(LIB)\os2.lib $(LIB)\c2.lib
-!else
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c0$(MODEL).obj $(OBJS)
-+, $*, $*, $(LIB)\c$(MODEL).lib $(LIB)\math$(MODEL).lib\
-	$(LIB)\emu.lib
-!endif
-
-# Local Menu Routines
-$(OS)\uifc.obj: ..\..\uifc\uifc.c ..\..\uifc\uifc.h
-	@echo Compiling ..\..\uifc\$&.c to $< ...
-	$(CC) $(CFLAGS) -c -n$(OS) ..\..\uifc\$&.c
-
-install.obj: 	$(HEADERS)
diff --git a/src/sbbs2/listfile.c b/src/sbbs2/listfile.c
deleted file mode 100644
index d0c4582032..0000000000
--- a/src/sbbs2/listfile.c
+++ /dev/null
@@ -1,782 +0,0 @@
-#line 1 "LISTFILE.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-
-int listfile(char *fname, char HUGE16 *buf, uint dirnum
-	, char *search, char letter, ulong datoffset);
-
-void clearline(void)
-{
-	int i;
-
-outchar(CR);
-if(useron.misc&ANSI)
-	bputs("\x1b[K");
-else {
-	for(i=0;i<79;i++)
-		outchar(SP);
-	outchar(CR); }
-}
-
-/****************************************************************************/
-/* Remove credits from uploader of file 'f'                                 */
-/****************************************************************************/
-void removefcdt(file_t f)
-{
-	char str[128];
-	int u;
-	long cdt;
-
-if((u=matchuser(f.uler))==0) {
-   bputs(text[UnknownUser]);
-   return; }
-cdt=0L;
-if(dir[f.dir]->misc&DIR_CDTMIN && cur_cps) {
-	if(dir[f.dir]->misc&DIR_CDTUL)
-		cdt=((ulong)(f.cdt*(dir[f.dir]->up_pct/100.0))/cur_cps)/60;
-	if(dir[f.dir]->misc&DIR_CDTDL
-		&& f.timesdled)  /* all downloads */
-		cdt+=((ulong)((long)f.timesdled
-			*f.cdt*(dir[f.dir]->dn_pct/100.0))/cur_cps)/60;
-	adjustuserrec(u,U_MIN,10,-cdt);
-	sprintf(str,"%lu minute",cdt);
-	sprintf(tmp,text[FileRemovedUserMsg]
-		,f.name,cdt ? str : text[No]);
-	putsmsg(u,tmp); }
-else {
-	if(dir[f.dir]->misc&DIR_CDTUL)
-		cdt=(ulong)(f.cdt*(dir[f.dir]->up_pct/100.0));
-	if(dir[f.dir]->misc&DIR_CDTDL
-		&& f.timesdled)  /* all downloads */
-		cdt+=(ulong)((long)f.timesdled
-			*f.cdt*(dir[f.dir]->dn_pct/100.0));
-	adjustuserrec(u,U_CDT,10,-cdt);
-	sprintf(tmp,text[FileRemovedUserMsg]
-		,f.name,cdt ? ultoac(cdt,str) : text[No]);
-    putsmsg(u,tmp); }
-
-adjustuserrec(u,U_ULB,10,-f.size);
-adjustuserrec(u,U_ULS,5,-1);
-}
-
-/****************************************************************************/
-/* Move file 'f' from f.dir to newdir                                       */
-/****************************************************************************/
-void movefile(file_t f, int newdir)
-{
-	char str[256],path[256],fname[128],ext[1024];
-	int olddir=f.dir;
-
-if(findfile(newdir,f.name)) {
-	bprintf(text[FileAlreadyThere],f.name);
-	return; }
-getextdesc(olddir,f.datoffset,ext);
-if(dir[olddir]->misc&DIR_MOVENEW)
-	f.dateuled=time(NULL);
-unpadfname(f.name,fname);
-removefiledat(f);
-f.dir=newdir;
-addfiledat(&f);
-bprintf(text[MovedFile],f.name
-	,lib[dir[f.dir]->lib]->sname,dir[f.dir]->sname);
-sprintf(str,"Moved %s to %s %s",f.name
-	,lib[dir[f.dir]->lib]->sname,dir[f.dir]->sname);
-logline(nulstr,str);
-if(!f.altpath) {	/* move actual file */
-	sprintf(str,"%s%s",dir[olddir]->path,fname);
-	if(fexist(str)) {
-		sprintf(path,"%s%s",dir[f.dir]->path,fname);
-		mv(str,path,0); } }
-if(f.misc&FM_EXTDESC)
-	putextdesc(f.dir,f.datoffset,ext);
-}
-
-/****************************************************************************/
-/* Batch flagging prompt for download, extended info, and archive viewing	*/
-/* Returns -1 if 'Q' or Ctrl-C, 0 if skip, 1 if [Enter], 2 otherwise        */
-/* or 3, backwards. 														*/
-/****************************************************************************/
-char batchflagprompt(int dirnum, file_t bf[26], char total, long totalfiles)
-{
-	char ch,c,d,str[256],fname[128],*p,remcdt,remfile;
-	int i,j,u,ml,md,udir,ulib;
-	long cdt;
-	file_t f;
-
-for(ulib=0;ulib<usrlibs;ulib++)
-	if(usrlib[ulib]==dir[dirnum]->lib)
-		break;
-for(udir=0;udir<usrdirs[ulib];udir++)
-	if(usrdir[ulib][udir]==dirnum)
-		break;
-
-CRLF;
-while(online) {
-	bprintf(text[BatchFlagPrompt]
-		,ulib+1
-		,lib[dir[dirnum]->lib]->sname
-		,udir+1
-		,dir[dirnum]->sname
-		,totalfiles);
-	ch=getkey(K_UPPER);
-	clearline();
-	if(ch=='?') {
-		menu("BATFLAG");
-		if(lncntr)
-			pause();
-		return(2); }
-	if(ch=='Q' || sys_status&SS_ABORT)
-		return(-1);
-	if(ch=='S')
-		return(0);
-	if(ch=='P')
-		return(3);
-	if(ch=='B') {    /* Flag for batch download */
-		if(useron.rest&FLAG('D')) {
-			bputs(text[R_Download]);
-			return(2); }
-		if(total==1) {
-			f.dir=dirnum;
-			strcpy(f.name,bf[0].name);
-			f.datoffset=bf[0].datoffset;
-			f.size=0;
-			getfiledat(&f);
-			addtobatdl(f);
-			CRLF;
-			return(2); }
-		bputs(text[BatchDlFlags]);
-		d=getstr(str,26,K_UPPER|K_LOWPRIO|K_NOCRLF);
-		lncntr=0;
-		if(sys_status&SS_ABORT)
-			return(-1);
-		if(d) { 	/* d is string length */
-			CRLF;
-			lncntr=0;
-			for(c=0;c<d;c++) {
-				if(batdn_total>=max_batdn) {
-					bprintf(text[BatchDlQueueIsFull],str+c);
-					break; }
-				if(strchr(str+c,'.')) {     /* filename or spec given */
-					f.dir=dirnum;
-					p=strchr(str+c,SP);
-					if(!p) p=strchr(str+c,',');
-					if(p) *p=0;
-					for(i=0;i<total;i++) {
-						if(batdn_total>=max_batdn) {
-							bprintf(text[BatchDlQueueIsFull],str+c);
-							break; }
-						padfname(str+c,tmp);
-						if(filematch(bf[i].name,tmp)) {
-							strcpy(f.name,bf[i].name);
-							f.datoffset=bf[i].datoffset;
-							f.size=0;
-							getfiledat(&f);
-							addtobatdl(f); } } }
-				if(strchr(str+c,'.'))
-					c+=strlen(str+c);
-				else if(str[c]<'A'+total && str[c]>='A') {
-					f.dir=dirnum;
-					strcpy(f.name,bf[str[c]-'A'].name);
-					f.datoffset=bf[str[c]-'A'].datoffset;
-					f.size=0;
-					getfiledat(&f);
-					addtobatdl(f); } }
-			CRLF;
-			return(2); }
-		clearline();
-		continue; }
-
-	if(ch=='E' || ch=='V') {    /* Extended Info */
-		if(total==1) {
-			f.dir=dirnum;
-			strcpy(f.name,bf[0].name);
-			f.datoffset=bf[0].datoffset;
-			f.dateuled=bf[0].dateuled;
-			f.datedled=bf[0].datedled;
-			f.size=0;
-            getfiledat(&f);
-			if(!viewfile(f,ch=='E'))
-				return(-1);
-			return(2); }
-		bputs(text[BatchDlFlags]);
-		d=getstr(str,26,K_UPPER|K_LOWPRIO|K_NOCRLF);
-		lncntr=0;
-		if(sys_status&SS_ABORT)
-			return(-1);
-		if(d) { 	/* d is string length */
-			CRLF;
-			lncntr=0;
-			for(c=0;c<d;c++) {
-				if(strchr(str+c,'.')) {     /* filename or spec given */
-					f.dir=dirnum;
-					p=strchr(str+c,SP);
-					if(!p) p=strchr(str+c,',');
-					if(p) *p=0;
-					for(i=0;i<total;i++) {
-						padfname(str+c,tmp);
-						if(filematch(bf[i].name,tmp)) {
-							strcpy(f.name,bf[i].name);
-							f.datoffset=bf[i].datoffset;
-							f.dateuled=bf[i].dateuled;
-							f.datedled=bf[i].datedled;
-							f.size=0;
-							getfiledat(&f);
-							if(!viewfile(f,ch=='E'))
-								return(-1); } } }
-				if(strchr(str+c,'.'))
-					c+=strlen(str+c);
-				else if(str[c]<'A'+total && str[c]>='A') {
-					f.dir=dirnum;
-					strcpy(f.name,bf[str[c]-'A'].name);
-					f.datoffset=bf[str[c]-'A'].datoffset;
-					f.dateuled=bf[str[c]-'A'].dateuled;
-					f.datedled=bf[str[c]-'A'].datedled;
-					f.size=0;
-					getfiledat(&f);
-					if(!viewfile(f,ch=='E'))
-						return(-1); } }
-			return(2); }
-		clearline();
-		continue; }
-
-	if((ch=='D' || ch=='M')     /* Delete or Move */
-		&& !(useron.rest&FLAG('R'))
-		&& (dir_op(dirnum) || useron.exempt&FLAG('R'))) {
-		if(total==1) {
-			strcpy(str,"A");
-			d=1; }
-		else {
-			bputs(text[BatchDlFlags]);
-			d=getstr(str,26,K_UPPER|K_LOWPRIO|K_NOCRLF); }
-		lncntr=0;
-		if(sys_status&SS_ABORT)
-			return(-1);
-		if(d) { 	/* d is string length */
-			CRLF;
-			if(ch=='D') {
-				if(noyes(text[AreYouSureQ]))
-					return(2);
-				remcdt=remfile=1;
-				if(dir_op(dirnum)) {
-					remcdt=!noyes(text[RemoveCreditsQ]);
-					remfile=!noyes(text[DeleteFileQ]); } }
-			else if(ch=='M') {
-				CRLF;
-				for(i=0;i<usrlibs;i++)
-                    bprintf(text[MoveToLibLstFmt],i+1,lib[usrlib[i]]->lname);
-                SYNC;
-                bprintf(text[MoveToLibPrompt],dir[dirnum]->lib+1);
-				if((ml=getnum(usrlibs))==-1)
-					return(2);
-				if(!ml)
-					ml=dir[dirnum]->lib;
-                else
-					ml--;
-                CRLF;
-				for(j=0;j<usrdirs[ml];j++)
-                    bprintf(text[MoveToDirLstFmt]
-						,j+1,dir[usrdir[ml][j]]->lname);
-                SYNC;
-				bprintf(text[MoveToDirPrompt],usrdirs[ml]);
-				if((md=getnum(usrdirs[ml]))==-1)
-					return(2);
-				if(!md)
-					md=usrdirs[ml]-1;
-				else md--;
-				CRLF; }
-			lncntr=0;
-			for(c=0;c<d;c++) {
-				if(strchr(str+c,'.')) {     /* filename or spec given */
-					f.dir=dirnum;
-					p=strchr(str+c,SP);
-					if(!p) p=strchr(str+c,',');
-					if(p) *p=0;
-					for(i=0;i<total;i++) {
-						padfname(str+c,tmp);
-						if(filematch(bf[i].name,tmp)) {
-							strcpy(f.name,bf[i].name);
-							unpadfname(f.name,fname);
-							f.datoffset=bf[i].datoffset;
-							f.dateuled=bf[i].dateuled;
-							f.datedled=bf[i].datedled;
-							f.size=0;
-							getfiledat(&f);
-							if(f.opencount) {
-								bprintf(text[FileIsOpen]
-									,f.opencount,f.opencount>1 ? "s":nulstr);
-								continue; }
-							if(ch=='D') {
-								removefiledat(f);
-								if(remfile) {
-									sprintf(tmp,"%s%s",dir[f.dir]->path,fname);
-									remove(tmp); }
-								if(remcdt)
-									removefcdt(f); }
-							else if(ch=='M')
-								movefile(f,usrdir[ml][md]); } } }
-				if(strchr(str+c,'.'))
-					c+=strlen(str+c);
-				else if(str[c]<'A'+total && str[c]>='A') {
-					f.dir=dirnum;
-					strcpy(f.name,bf[str[c]-'A'].name);
-					unpadfname(f.name,fname);
-					f.datoffset=bf[str[c]-'A'].datoffset;
-					f.dateuled=bf[str[c]-'A'].dateuled;
-					f.datedled=bf[str[c]-'A'].datedled;
-					f.size=0;
-					getfiledat(&f);
-					if(f.opencount) {
-						bprintf(text[FileIsOpen]
-							,f.opencount,f.opencount>1 ? "s":nulstr);
-						continue; }
-					if(ch=='D') {
-						removefiledat(f);
-						if(remfile) {
-							sprintf(tmp,"%s%s",dir[f.dir]->path,fname);
-							remove(tmp); }
-						if(remcdt)
-							removefcdt(f); }
-					else if(ch=='M')
-						movefile(f,usrdir[ml][md]); } }
-			return(2); }
-		clearline();
-        continue; }
-
-	return(1); }
-
-return(-1);
-}
-
-/*****************************************************************************/
-/* List files in directory 'dir' that match 'filespec'. Filespec must be 	 */
-/* padded. ex: FILE*   .EXT, not FILE*.EXT. 'mode' determines other critiria */
-/* the files must meet before they'll be listed. 'mode' bit FL_NOHDR doesn't */
-/* list the directory header.                                                */
-/* Returns -1 if the listing was aborted, otherwise total files listed		 */
-/*****************************************************************************/
-int listfiles(uint dirnum, char *filespec, int tofile, char mode)
-{
-	uchar str[256],hdr[256],cmd[129],c,d,letter='A',*buf,*p,ext[513];
-	uchar HUGE16 *datbuf,HUGE16 *ixbbuf,flagprompt=0;
-	int i,j,file,found=0,lastbat=0,disp;
-	ulong l,m=0,n,length,anchor,next,datbuflen;
-	file_t f,bf[26];	/* bf is batch flagged files */
-
-if(mode&FL_ULTIME) {
-	last_ns_time=now;
-    sprintf(str,"%s%s.DAB",dir[dirnum]->data_dir,dir[dirnum]->code);
-	if((file=nopen(str,O_RDONLY))!=-1) {
-		read(file,&l,4);
-		close(file);
-		if(ns_time>l)
-			return(0); } }
-sprintf(str,"%s%s.IXB",dir[dirnum]->data_dir,dir[dirnum]->code);
-if((file=nopen(str,O_RDONLY))==-1)
-	return(0);
-l=filelength(file);
-if(!l) {
-	close(file);
-	return(0); }
-if((ixbbuf=(char *)MALLOC(l))==NULL) {
-	close(file);
-	errormsg(WHERE,ERR_ALLOC,str,l);
-	return(0); }
-if(lread(file,ixbbuf,l)!=l) {
-	close(file);
-	errormsg(WHERE,ERR_READ,str,l);
-	FREE((char *)ixbbuf);
-	return(0); }
-close(file);
-sprintf(str,"%s%s.DAT",dir[dirnum]->data_dir,dir[dirnum]->code);
-if((file=nopen(str,O_RDONLY))==-1) {
-	errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-	FREE((char *)ixbbuf);
-	return(0); }
-datbuflen=filelength(file);
-if((datbuf=MALLOC(datbuflen))==NULL) {
-	close(file);
-	errormsg(WHERE,ERR_ALLOC,str,datbuflen);
-	FREE((char *)ixbbuf);
-	return(0); }
-if(lread(file,datbuf,datbuflen)!=datbuflen) {
-	close(file);
-	errormsg(WHERE,ERR_READ,str,datbuflen);
-	FREE((char *)datbuf);
-	FREE((char *)ixbbuf);
-	return(0); }
-close(file);
-if(!tofile) {
-	action=NODE_LFIL;
-	getnodedat(node_num,&thisnode,0);
-	if(thisnode.action!=NODE_LFIL) {	/* was a sync */
-		getnodedat(node_num,&thisnode,1);
-		thisnode.action=NODE_LFIL;
-		putnodedat(node_num,thisnode); } }
-while(online && found<MAX_FILES) {
-	if(found<0)
-		found=0;
-	if(m>=l || flagprompt) {		  /* End of list */
-		if(useron.misc&BATCHFLAG && !tofile && found && found!=lastbat
-			&& !(mode&(FL_EXFIND|FL_VIEW))) {
-			flagprompt=0;
-			lncntr=0;
-			if((i=batchflagprompt(dirnum,bf,letter-'A',l/F_IXBSIZE))==2) {
-				m=anchor;
-				found-=letter-'A';
-				letter='A'; }
-			else if(i==3) {
-				if((long)anchor-((letter-'A')*F_IXBSIZE)<0) {
-					m=0;
-					found=0; }
-				else {
-					m=anchor-((letter-'A')*F_IXBSIZE);
-					found-=letter-'A'; }
-				letter='A'; }
-			else if(i==-1) {
-				FREE((char *)ixbbuf);
-				FREE((char *)datbuf);
-				return(-1); }
-			else
-				break;
-			getnodedat(node_num,&thisnode,0);
-			nodesync(); }
-		else
-			break; }
-
-	if(letter>'Z')
-		letter='A';
-	if(letter=='A')
-		anchor=m;
-
-	if(msgabort()) {		 /* used to be !tofile && msgabort() */
-		FREE((char *)ixbbuf);
-		FREE((char *)datbuf);
-		return(-1); }
-	for(j=0;j<12 && m<l;j++)
-		if(j==8)
-			str[j]='.';
-		else
-			str[j]=ixbbuf[m++];		/* Turns FILENAMEEXT into FILENAME.EXT */
-	str[j]=0;
-	if(!(mode&(FL_FINDDESC|FL_EXFIND)) && filespec[0]
-		&& !filematch(str,filespec)) {
-		m+=11;
-		continue; }
-	n=ixbbuf[m]|((long)ixbbuf[m+1]<<8)|((long)ixbbuf[m+2]<<16);
-	if(n>=datbuflen) {	/* out of bounds */
-		m+=11;
-		continue; }
-	if(mode&(FL_FINDDESC|FL_EXFIND)) {
-		getrec((char *)&datbuf[n],F_DESC,LEN_FDESC,tmp);
-		strupr(tmp);
-		p=strstr(tmp,filespec);
-		if(!(mode&FL_EXFIND) && p==NULL) {
-			m+=11;
-			continue; }
-		getrec((char *)&datbuf[n],F_MISC,1,tmp);
-		j=tmp[0];  /* misc bits */
-		if(j) j-=SP;
-		if(mode&FL_EXFIND && j&FM_EXTDESC) { /* search extended description */
-			getextdesc(dirnum,n,ext);
-			strupr(ext);
-			if(!strstr(ext,filespec) && !p) {	/* not in description or */
-				m+=11;						 /* extended description */
-				continue; } }
-		else if(!p) {			 /* no extended description and not in desc */
-			m+=11;
-			continue; } }
-	if(mode&FL_ULTIME) {
-		if(ns_time>(ixbbuf[m+3]|((long)ixbbuf[m+4]<<8)|((long)ixbbuf[m+5]<<16)
-			|((long)ixbbuf[m+6]<<24))) {
-			m+=11;
-			continue; } }
-	if(useron.misc&BATCHFLAG && letter=='A' && found && !tofile
-		&& !(mode&(FL_EXFIND|FL_VIEW))
-		&& (!mode || !(useron.misc&EXPERT)))
-        bputs(text[FileListBatchCommands]);
-	m+=11;
-	if(!found && !(mode&(FL_EXFIND|FL_VIEW))) {
-		for(i=0;i<usrlibs;i++)
-			if(usrlib[i]==dir[dirnum]->lib)
-				break;
-		for(j=0;j<usrdirs[i];j++)
-			if(usrdir[i][j]==dirnum)
-				break;						/* big header */
-		if((!mode || !(useron.misc&EXPERT)) && !tofile && (!filespec[0]
-			|| (strchr(filespec,'*') || strchr(filespec,'?')))) {
-			sprintf(hdr,"%s%s.HDR",dir[dirnum]->data_dir,dir[dirnum]->code);
-			if(fexist(hdr))
-				printfile(hdr,0);	/* Use DATA\DIRS\<CODE>.HDR */
-			else {
-				if(useron.misc&BATCHFLAG)
-					bputs(text[FileListBatchCommands]);
-				else {
-					CLS;
-					d=strlen(lib[usrlib[i]]->lname)>strlen(dir[dirnum]->lname) ?
-						strlen(lib[usrlib[i]]->lname)+17
-						: strlen(dir[dirnum]->lname)+17;
-					if(i>8 || j>8) d++;
-					attr(color[clr_filelsthdrbox]);
-					bputs("��");            /* use to start with \r\n */
-					for(c=0;c<d;c++)
-						outchar('�');
-					bputs("�\r\n� ");
-					sprintf(hdr,text[BoxHdrLib],i+1,lib[usrlib[i]]->lname);
-					bputs(hdr);
-					for(c=bstrlen(hdr);c<d;c++)
-						outchar(SP);
-					bputs("�\r\n� ");
-					sprintf(hdr,text[BoxHdrDir],j+1,dir[dirnum]->lname);
-					bputs(hdr);
-					for(c=bstrlen(hdr);c<d;c++)
-						outchar(SP);
-					bputs("�\r\n� ");
-					sprintf(hdr,text[BoxHdrFiles],l/F_IXBSIZE);
-					bputs(hdr);
-					for(c=bstrlen(hdr);c<d;c++)
-						outchar(SP);
-					bputs("�\r\n��");
-					for(c=0;c<d;c++)
-						outchar('�');
-					bputs("�\r\n"); } } }
-		else {					/* short header */
-			if(tofile) {
-				sprintf(hdr,"(%u) %s ",i+1,lib[usrlib[i]]->sname);
-				write(tofile,crlf,2);
-				write(tofile,hdr,strlen(hdr)); }
-			else {
-				sprintf(hdr,text[ShortHdrLib],i+1,lib[usrlib[i]]->sname);
-				bputs("\r\1>\r\n");
-				bputs(hdr); }
-			c=bstrlen(hdr);
-			if(tofile) {
-				sprintf(hdr,"(%u) %s",j+1,dir[dirnum]->lname);
-				write(tofile,hdr,strlen(hdr)); }
-			else {
-				sprintf(hdr,text[ShortHdrDir],j+1,dir[dirnum]->lname);
-				bputs(hdr); }
-			c+=bstrlen(hdr);
-			if(tofile) {
-				write(tofile,crlf,2);
-				sprintf(hdr,"%*s",c,nulstr);
-				strset(hdr,'�');
-				strcat(hdr,crlf);
-				write(tofile,hdr,strlen(hdr)); }
-			else {
-				CRLF;
-				attr(color[clr_filelstline]);
-				while(c--)
-					outchar('�');
-				CRLF; } } }
-	next=m;
-	disp=1;
-	if(mode&(FL_EXFIND|FL_VIEW)) {
-		f.dir=dirnum;
-		strcpy(f.name,str);
-		m-=11;
-		f.datoffset=n;
-		f.dateuled=ixbbuf[m+3]|((long)ixbbuf[m+4]<<8)
-			|((long)ixbbuf[m+5]<<16)|((long)ixbbuf[m+6]<<24);
-		f.datedled=ixbbuf[m+7]|((long)ixbbuf[m+8]<<8)
-			|((long)ixbbuf[m+9]<<16)|((long)ixbbuf[m+10]<<24);
-		m+=11;
-		f.size=0;
-		getfiledat(&f);
-		if(!found)
-			bputs("\r\1>");
-		if(mode&FL_EXFIND) {
-			if(!viewfile(f,1)) {
-				FREE((char *)ixbbuf);
-				FREE((char *)datbuf);
-				return(-1); } }
-		else {
-			if(!viewfile(f,0)) {
-				FREE((char *)ixbbuf);
-				FREE((char *)datbuf);
-				return(-1); } } }
-
-	else if(tofile)
-		listfiletofile(str,&datbuf[n],dirnum,tofile);
-	else if(mode&FL_FINDDESC)
-		disp=listfile(str,&datbuf[n],dirnum,filespec,letter,n);
-	else
-		disp=listfile(str,&datbuf[n],dirnum,nulstr,letter,n);
-	if(!disp && letter>'A') {
-		next=m-F_IXBSIZE;
-		letter--; }
-	else {
-		disp=1;
-		found++; }
-	if(sys_status&SS_ABORT) {
-		FREE((char *)ixbbuf);
-		FREE((char *)datbuf);
-		return(-1); }
-	if(mode&(FL_EXFIND|FL_VIEW))
-		continue;
-	if(useron.misc&BATCHFLAG && !tofile) {
-		if(disp) {
-			strcpy(bf[letter-'A'].name,str);
-			m-=11;
-			bf[letter-'A'].datoffset=n;
-			bf[letter-'A'].dateuled=ixbbuf[m+3]|((long)ixbbuf[m+4]<<8)
-				|((long)ixbbuf[m+5]<<16)|((long)ixbbuf[m+6]<<24);
-			bf[letter-'A'].datedled=ixbbuf[m+7]|((long)ixbbuf[m+8]<<8)
-				|((long)ixbbuf[m+9]<<16)|((long)ixbbuf[m+10]<<24); }
-        m+=11;
-		if(flagprompt || letter=='Z' || !disp ||
-			(filespec[0] && !strchr(filespec,'*') && !strchr(filespec,'?')
-			&& !(mode&FL_FINDDESC))
-			|| (useron.misc&BATCHFLAG && !tofile && lncntr>=rows-2)
-			) {
-			flagprompt=0;
-			lncntr=0;
-			lastbat=found;
-			if((i=batchflagprompt(dirnum,bf,letter-'A'+1,l/F_IXBSIZE))<1) {
-				FREE((char *)ixbbuf);
-				FREE((char *)datbuf);
-				if(i==-1)
-					return(-1);
-				else
-					return(found); }
-			if(i==2) {
-				next=anchor;
-				found-=(letter-'A')+1; }
-			else if(i==3) {
-				if((long)anchor-((letter-'A'+1)*F_IXBSIZE)<0) {
-					next=0;
-					found=0; }
-				else {
-					next=anchor-((letter-'A'+1)*F_IXBSIZE);
-					found-=letter-'A'+1; } }
-			getnodedat(node_num,&thisnode,0);
-			nodesync();
-			letter='A';	}
-		else letter++; }
-	if(useron.misc&BATCHFLAG && !tofile
-		&& lncntr>=rows-2) {
-		lncntr=0;		/* defeat pause() */
-		flagprompt=1; }
-	m=next;
-	if(mode&FL_FINDDESC) continue;
-	if(filespec[0] && !strchr(filespec,'*') && !strchr(filespec,'?') && m)
-		break; }
-
-FREE((char *)ixbbuf);
-FREE((char *)datbuf);
-return(found);
-}
-
-int cntlines(char *str)
-{
-	int i,lc,last;
-
-for(i=lc=last=0;str[i];i++)
-	if(str[i]==LF || i-last>LEN_FDESC) {
-		lc++;
-		last=i; }
-return(lc);
-}
-
-/****************************************************************************/
-/* Prints one file's information on a single line                           */
-/* Return 1 if displayed, 0 otherwise										*/
-/****************************************************************************/
-int listfile(char *fname, char HUGE16 *buf, uint dirnum
-	, char *search, char letter, ulong datoffset)
-{
-	char str[256],ext[513]="",*ptr,*cr,*lf,exist=1;
-    uchar alt;
-    int i,j;
-    ulong cdt;
-
-if(buf[F_MISC]!=ETX && (buf[F_MISC]-SP)&FM_EXTDESC && useron.misc&EXTDESC) {
-	getextdesc(dirnum,datoffset,ext);
-	if(useron.misc&BATCHFLAG && lncntr+cntlines(ext)>=rows-2 && letter!='A')
-		return(0); }
-attr(color[clr_filename]);
-bputs(fname);
-if(buf[F_MISC]!=ETX && (buf[F_MISC]-SP)&FM_EXTDESC) {
-	if(!(useron.misc&EXTDESC))
-		outchar('+');
-	else
-		outchar(SP); }
-else
-    outchar(SP);
-if(useron.misc&BATCHFLAG) {
-    attr(color[clr_filedesc]);
-    bprintf("%c",letter); }
-getrec((char *)buf,F_ALTPATH,2,str);
-alt=(uchar)ahtoul(str);
-sprintf(str,"%s%s",alt>0 && alt<=altpaths ? altpath[alt-1]:dir[dirnum]->path
-    ,unpadfname(fname,tmp));
-if(dir[dirnum]->misc&DIR_FCHK && !fexist(str)) {
-    exist=0;
-    attr(color[clr_err]); }
-else
-    attr(color[clr_filecdt]);
-getrec((char *)buf,F_CDT,LEN_FCDT,str);
-cdt=atol(str);
-if(useron.misc&BATCHFLAG) {
-    if(!cdt) {
-        attr(curatr^(HIGH|BLINK));
-        bputs("  FREE"); }
-    else {
-        if(cdt<1024)    /* 1k is smallest size */
-            cdt=1024;
-		bprintf("%5luk",cdt/1024L); } }
-else {
-    if(!cdt) {  /* FREE file */
-        attr(curatr^(HIGH|BLINK));
-        bputs("   FREE"); }
-	else if(cdt>9999999L)
-		bprintf("%6luk",cdt/1024L);
-	else
-        bprintf("%7lu",cdt); }
-if(exist)
-    outchar(SP);
-else
-    outchar('-');
-getrec((char *)buf,F_DESC,LEN_FDESC,str);
-attr(color[clr_filedesc]);
-if(!ext[0]) {
-	if(search[0]) { /* high-light string in string */
-		strcpy(tmp,str);
-		strupr(tmp);
-		ptr=strstr(tmp,search);
-		i=strlen(search);
-		j=ptr-tmp;
-		bprintf("%.*s",j,str);
-		attr(color[clr_filedesc]^HIGH);
-		bprintf("%.*s",i,str+j);
-		attr(color[clr_filedesc]);
-		bprintf("%.*s",strlen(str)-(j+i),str+j+i); }
-	else
-		bputs(str);
-	CRLF; }
-ptr=ext;
-while(*ptr && ptr<ext+512 && !msgabort()) {
-	cr=strchr(ptr,CR);
-	lf=strchr(ptr,LF);
-	if(lf && (lf<cr || !cr)) cr=lf;
-	if(cr>ptr+LEN_FDESC)
-		cr=ptr+LEN_FDESC;
-	else if(cr)
-		*cr=0;
-//	  bprintf("%.*s\r\n",LEN_FDESC,ptr);
-	sprintf(str,"%.*s\r\n",LEN_FDESC,ptr);
-	putmsg(str,P_NOATCODES|P_SAVEATR);
-	if(!cr) {
-		if(strlen(ptr)>LEN_FDESC)
-			cr=ptr+LEN_FDESC;
-		else
-			break; }
-	if(!(*(cr+1)) || !(*(cr+2)))
-		break;
-	bprintf("%21s",nulstr);
-	ptr=cr;
-	if(!(*ptr)) ptr++;
-	while(*ptr==LF || *ptr==CR) ptr++; }
-return(1);
-}
diff --git a/src/sbbs2/login.c b/src/sbbs2/login.c
deleted file mode 100644
index 7a5c2de012..0000000000
--- a/src/sbbs2/login.c
+++ /dev/null
@@ -1,92 +0,0 @@
-#line 1 "LOGIN.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-#include "cmdshell.h"
-
-extern char qwklogon;
-
-int login(char *str, char *pw)
-{
-	long useron_misc=useron.misc;
-
-useron.number=0;
-if(node_dollars_per_call && noyes(text[AreYouSureQ]))
-	return(LOGIC_FALSE);
-
-if(str[0]=='*') {
-	memmove(str,str+1,strlen(str));
-	qwklogon=1; }
-else
-	qwklogon=0;
-
-if(!(node_misc&NM_NO_NUM) && isdigit(str[0])) {
-	useron.number=atoi(str);
-	getuserdat(&useron);
-	if(useron.number && useron.misc&(DELETED|INACTIVE))
-		useron.number=0; }
-
-if(!useron.number) {
-	useron.number=matchuser(str);
-	if(!useron.number && (uchar)str[0]<0x7f && str[1]
-		&& isalpha(str[0]) && strchr(str,SP) && node_misc&NM_LOGON_R)
-		useron.number=userdatdupe(0,U_NAME,LEN_NAME,str,0);
-	if(useron.number) {
-		getuserdat(&useron);
-		if(useron.number && useron.misc&(DELETED|INACTIVE))
-			useron.number=0; } }
-
-if(!useron.number) {
-	if(node_misc&NM_LOGON_P) {
-        strcpy(useron.alias,str);
-		bputs(pw);
-		console|=CON_R_ECHOX;
-		if(!(sys_misc&SM_ECHO_PW))
-			console|=CON_L_ECHOX;
-		getstr(str,LEN_PASS,K_UPPER|K_LOWPRIO);
-		console&=~(CON_R_ECHOX|CON_L_ECHOX);
-		bputs(text[InvalidLogon]);
-		sprintf(tmp,"(%04u)  %-25s  Password: '%s'"
-			,0,useron.alias,str);
-		logline("+!",tmp); }
-	else {
-		bputs(text[UnknownUser]);
-		sprintf(tmp,"Unknown User '%s'",str);
-		logline("+!",tmp); }
-	useron.misc=useron_misc;
-	return(LOGIC_FALSE); }
-
-if(!online) {
-	useron.number=0;
-	return(LOGIC_FALSE); }
-statline=0;
-statusline();
-if((online==ON_REMOTE || sys_misc&SM_REQ_PW || node_misc&NM_SYSPW)
-	&& (useron.pass[0] || REALSYSOP)
-	&& (!node_dollars_per_call || sys_misc&SM_REQ_PW)) {
-	bputs(pw);
-	console|=CON_R_ECHOX;
-	if(!(sys_misc&SM_ECHO_PW))
-		console|=CON_L_ECHOX;
-	getstr(str,LEN_PASS,K_UPPER|K_LOWPRIO);
-	console&=~(CON_R_ECHOX|CON_L_ECHOX);
-	if(!online) {
-		useron.number=0;
-		return(LOGIC_FALSE); }
-	if(stricmp(useron.pass,str)) {
-		bputs(text[InvalidLogon]);
-		sprintf(tmp,"(%04u)  %-25s  Password: '%s' Attempt: '%s'"
-			,useron.number,useron.alias,useron.pass,str);
-		logline("+!",tmp);
-		useron.number=0;
-		useron.misc=useron_misc;
-		return(LOGIC_FALSE); }
-	if(REALSYSOP && !chksyspass(0)) {
-		bputs(text[InvalidLogon]);
-		useron.number=0;
-		useron.misc=useron_misc;
-		return(LOGIC_FALSE); } }
-
-return(LOGIC_TRUE);
-}
diff --git a/src/sbbs2/logio.c b/src/sbbs2/logio.c
deleted file mode 100644
index 37bb5562a4..0000000000
--- a/src/sbbs2/logio.c
+++ /dev/null
@@ -1,81 +0,0 @@
-#line 1 "LOGIO.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/********************************/
-/* Log file reading and writing */
-/********************************/
-
-#include "sbbs.h"
-
-void logentry(char *code, char *entry)
-{
-	char str[512];
-
-now=time(NULL);
-sprintf(str,"Node %2d  %s\r\n   %s",node_num,timestr(&now),entry);
-logline(code,str);
-}
-
-/****************************************************************************/
-/* Writes 'str' verbatim into node.log 										*/
-/****************************************************************************/
-void log(char *str)
-{
-if(!(sys_status&SS_LOGOPEN) || online==ON_LOCAL) return;
-if(logcol>=78 || (78-logcol)<strlen(str)) {
-	write(logfile,crlf,2);
-	logcol=1; }
-if(logcol==1) {
-	write(logfile,"   ",3);
-	logcol=4; }
-write(logfile,str,strlen(str));
-if(str[strlen(str)-1]==LF)
-	logcol=1;
-else
-	logcol+=strlen(str);
-}
-
-/****************************************************************************/
-/* Writes 'str' on it's own line in node.log								*/
-/****************************************************************************/
-void logline(char *code, char *str)
-{
-	char line[1024];
-
-if(!(sys_status&SS_LOGOPEN) || (online==ON_LOCAL && strcmp(code,"!!"))) return;
-if(logcol!=1)
-	write(logfile,crlf,2);
-sprintf(line,"%-2.2s %s\r\n",code,str);
-write(logfile,line,strlen(line));
-logcol=1;
-}
-
-/****************************************************************************/
-/* Writes a comma then 'ch' to log, tracking column.						*/
-/****************************************************************************/
-void logch(char ch, char comma)
-{
-	char slash='/';
-
-if(!(sys_status&SS_LOGOPEN) || (online==ON_LOCAL)) return;
-if((uchar)ch<SP)	/* Don't log control chars */
-	return;
-if(logcol==1) {
-	logcol=4;
-	write(logfile,"   ",3); }
-else if(logcol>=78) {
-	logcol=4;
-	write(logfile,"\r\n   ",5); }
-if(comma && logcol!=4) {
-	write(logfile,",",1);
-	logcol++; }
-if(ch&0x80) {
-	ch&=0x7f;
-	if(ch<SP)
-		return;
-	write(logfile,&slash,1); }
-write(logfile,&ch,1);
-logcol++;
-}
-
diff --git a/src/sbbs2/logon.c b/src/sbbs2/logon.c
deleted file mode 100644
index 47e6d7afc4..0000000000
--- a/src/sbbs2/logon.c
+++ /dev/null
@@ -1,569 +0,0 @@
-#line 1 "LOGON.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/****************************************************************************/
-/* Functions pertaining to the logging on and off of a user					*/
-/****************************************************************************/
-
-#include "sbbs.h"
-#include "cmdshell.h"
-
-extern char qwklogon,onquiet;
-
-/****************************************************************************/
-/* Called once upon each user logging on the board							*/
-/* Returns 1 if user passed logon, 0 if user failed.						*/
-/****************************************************************************/
-char logon()
-{
-	char	str[256],c;
-	int 	file;
-	uint	i,j,k,mailw;
-	ulong	totallogons;
-	node_t	node;
-	FILE	*stream;
-	struct tm *gm;
-
-now=time(NULL);
-gm=localtime(&now);
-if(!useron.number)
-	return(0);
-
-if(useron.rest&FLAG('Q'))
-    qwklogon=1;
-if(SYSOP && ((online==ON_REMOTE && !(sys_misc&SM_R_SYSOP))
-    || (online==ON_LOCAL && !(sys_misc&SM_L_SYSOP))))
-	return(0);
-if(cur_rate<node_minbps && !(useron.exempt&FLAG('M'))) {
-    bprintf(text[MinimumModemSpeed],node_minbps);
-    sprintf(str,"%sTOOSLOW.MSG",text_dir);
-    if(fexist(str))
-        printfile(str,0);
-    sprintf(str,"(%04u)  %-25s  Modem speed: %u<%u"
-        ,useron.number,useron.alias,cur_rate,node_minbps);
-    logline("+!",str);
-	return(0); }
-
-if(useron.rest&FLAG('G')) {     /* Guest account */
-    useron.misc=(new_misc&(~ASK_NSCAN));
-	useron.rows=0;
-	useron.misc&=~(ANSI|RIP|WIP|NO_EXASCII|COLOR);
-    useron.misc|=autoterm;
-    if(!(useron.misc&ANSI) && yesno(text[AnsiTerminalQ]))
-        useron.misc|=ANSI;
-	if(useron.misc&(RIP|WIP)
-		|| (useron.misc&ANSI && yesno(text[ColorTerminalQ])))
-        useron.misc|=COLOR;
-	if(!yesno(text[ExAsciiTerminalQ]))
-		useron.misc|=NO_EXASCII;
-    for(i=0;i<total_xedits;i++)
-        if(!stricmp(xedit[i]->code,new_xedit)
-            && chk_ar(xedit[i]->ar,useron))
-            break;
-    if(i<total_xedits)
-        useron.xedit=i+1;
-    else
-        useron.xedit=0;
-	useron.prot=new_prot;
-    useron.shell=new_shell; }
-
-if(node_dollars_per_call) {
-    adjustuserrec(useron.number,U_CDT,10
-        ,cdt_per_dollar*node_dollars_per_call);
-    bprintf(text[CreditedAccount]
-        ,cdt_per_dollar*node_dollars_per_call);
-    sprintf(str,"%s #%u was billed $%d T: %u seconds"
-        ,useron.alias,useron.number
-        ,node_dollars_per_call,(uint)now-answertime);
-    logline("$+",str);
-    hangup();
-	return(0); }
-
-//lclini(node_scrnlen-1);
-
-if(!chk_ar(node_ar,useron)) {
-    bputs(text[NoNodeAccess]);
-    sprintf(str,"(%04u)  %-25s  Insufficient node access"
-        ,useron.number,useron.alias);
-    logline("+!",str);
-	return(0); }
-
-getnodedat(node_num,&thisnode,1);
-if(thisnode.misc&NODE_LOCK) {
-	putnodedat(node_num,thisnode);	/* must unlock! */
-    if(!SYSOP && !(useron.exempt&FLAG('N'))) {
-        bputs(text[NodeLocked]);
-        sprintf(str,"(%04u)  %-25s  Locked node logon attempt"
-            ,useron.number,useron.alias);
-        logline("+!",str);
-		return(0); }
-    if(yesno(text[RemoveNodeLockQ])) {
-		getnodedat(node_num,&thisnode,1);
-        logline("S-","Removed Node Lock");
-		thisnode.misc&=~NODE_LOCK; }
-	else
-		getnodedat(node_num,&thisnode,1); }
-
-if(onquiet || (useron.exempt&FLAG('Q') && useron.misc&QUIET))
-    thisnode.status=NODE_QUIET;
-else
-    thisnode.status=NODE_INUSE;
-onquiet=0;
-action=thisnode.action=NODE_LOGN;
-if(online==ON_LOCAL)
-    thisnode.connection=0;
-else
-    thisnode.connection=cur_rate;
-thisnode.misc&=~(NODE_ANON|NODE_INTR|NODE_MSGW|NODE_POFF|NODE_AOFF);
-if(useron.chat&CHAT_NOACT)
-    thisnode.misc|=NODE_AOFF;
-if(useron.chat&CHAT_NOPAGE)
-    thisnode.misc|=NODE_POFF;
-thisnode.useron=useron.number;
-putnodedat(node_num,thisnode);
-
-getusrsubs();
-getusrdirs();
-
-if(useron.misc&CURSUB && !(useron.rest&FLAG('G'))) {
-    for(i=0;i<usrgrps;i++) {
-		for(j=0;j<usrsubs[i];j++) {
-			if(!strcmp(sub[usrsub[i][j]]->code,useron.cursub))
-				break; }
-        if(j<usrsubs[i]) {
-            curgrp=i;
-            cursub[i]=j;
-            break; } }
-	for(i=0;i<usrlibs;i++) {
-        for(j=0;j<usrdirs[i];j++)
-			if(!strcmp(dir[usrdir[i][j]]->code,useron.curdir))
-                break;
-        if(j<usrdirs[i]) {
-            curlib=i;
-            curdir[i]=j;
-            break; } } }
-
-
-if(useron.misc&AUTOTERM) {
-    useron.misc&=~(ANSI|RIP|WIP);
-    useron.misc|=autoterm; }
-
-if(!chk_ar(shell[useron.shell]->ar,useron)) {
-    useron.shell=new_shell;
-    if(!chk_ar(shell[useron.shell]->ar,useron)) {
-        for(i=0;i<total_shells;i++)
-            if(chk_ar(shell[i]->ar,useron))
-                break;
-        if(i==total_shells)
-            useron.shell=0; } }
-
-statline=sys_def_stat;
-statusline();
-logon_ml=useron.level;
-logontime=time(NULL);
-starttime=logontime;
-last_ns_time=ns_time=useron.ns_time;
-// ns_time-=(useron.tlast*60); /* file newscan time == last logon time */
-delfiles(temp_dir,"*.*");
-sprintf(str,"%sMSGS\\N%3.3u.MSG",data_dir,node_num);
-remove(str);            /* remove any pending node messages */
-sprintf(str,"%sMSGS\\N%3.3u.IXB",data_dir,node_num);
-remove(str);			/* remove any pending node message indices */
-
-if(!SYSOP && online==ON_REMOTE) {
-	rioctl(IOCM|ABORT);	/* users can't abort anything */
-	rioctl(IOCS|ABORT); }
-
-CLS;
-if(useron.rows)
-	rows=useron.rows;
-else if(online==ON_LOCAL)
-	rows=node_scrnlen-1;
-unixtodstr(logontime,str);
-if(!strncmp(str,useron.birth,5) && !(useron.rest&FLAG('Q'))) {
-	bputs(text[HappyBirthday]);
-	pause();
-	CLS;
-	user_event(EVENT_BIRTHDAY); }
-unixtodstr(useron.laston,tmp);
-if(strcmp(str,tmp)) {			/* str still equals logon time */
-	useron.ltoday=1;
-	useron.ttoday=useron.etoday=useron.ptoday=useron.textra=0;
-	useron.freecdt=level_freecdtperday[useron.level]; }
-else
-	useron.ltoday++;
-
-gettimeleft();
-sprintf(str,"%sFILE\\%04u.DWN",data_dir,useron.number);
-batch_add_list(str);
-if(!qwklogon) { 	 /* QWK Nodes don't go through this */
-
-	if(sys_pwdays
-		&& logontime>(useron.pwmod+((ulong)sys_pwdays*24UL*60UL*60UL))) {
-		bprintf(text[TimeToChangePw],sys_pwdays);
-
-		c=0;
-		while(c<LEN_PASS) { 				/* Create random password */
-			str[c]=random(43)+48;
-			if(isalnum(str[c]))
-				c++; }
-		str[c]=0;
-		bprintf(text[YourPasswordIs],str);
-
-		if(sys_misc&SM_PWEDIT && yesno(text[NewPasswordQ]))
-			while(online) {
-				bputs(text[NewPassword]);
-				getstr(str,LEN_PASS,K_UPPER|K_LINE);
-				truncsp(str);
-				if(chkpass(str,useron))
-					break;
-				CRLF; }
-
-		while(online) {
-			if(sys_misc&SM_PWEDIT) {
-				CRLF;
-				bputs(text[VerifyPassword]); }
-			else
-				bputs(text[NewUserPasswordVerify]);
-			console|=CON_R_ECHOX;
-			if(!(sys_misc&SM_ECHO_PW))
-				console|=CON_L_ECHOX;
-			getstr(tmp,LEN_PASS,K_UPPER);
-			console&=~(CON_R_ECHOX|CON_L_ECHOX);
-			if(strcmp(str,tmp)) {
-				bputs(text[Wrong]);
-				continue; }
-			break; }
-		strcpy(useron.pass,str);
-		useron.pwmod=time(NULL);
-		putuserrec(useron.number,U_PWMOD,8,ultoa(useron.pwmod,str,16));
-		bputs(text[PasswordChanged]);
-		pause(); }
-	if(useron.ltoday>level_callsperday[useron.level]
-		&& !(useron.exempt&FLAG('L'))) {
-		bputs(text[NoMoreLogons]);
-		sprintf(str,"(%04u)  %-25s  Out of logons"
-			,useron.number,useron.alias);
-		logline("+!",str);
-		hangup();
-		return(0); }
-	if(useron.rest&FLAG('L') && useron.ltoday>1) {
-		bputs(text[R_Logons]);
-		sprintf(str,"(%04u)  %-25s  Out of logons"
-			,useron.number,useron.alias);
-		logline("+!",str);
-		hangup();
-		return(0); }
-	if(!useron.name[0] && ((uq&UQ_ALIASES && uq&UQ_REALNAME)
-		|| uq&UQ_COMPANY))
-		while(online) {
-			if(uq&UQ_ALIASES && uq&UQ_REALNAME)
-				bputs(text[EnterYourRealName]);
-			else
-				bputs(text[EnterYourCompany]);
-			getstr(useron.name,LEN_NAME,K_UPRLWR|(uq&UQ_NOEXASC));
-			if(uq&UQ_ALIASES && uq&UQ_REALNAME) {
-				if(trashcan(useron.name,"NAME") || !useron.name[0]
-					|| !strchr(useron.name,SP)
-					|| strchr(useron.name,0xff)
-					|| (uq&UQ_DUPREAL
-						&& userdatdupe(useron.number,U_NAME,LEN_NAME
-						,useron.name,0)))
-					bputs(text[YouCantUseThatName]);
-				else
-					break; }
-			else
-				break; }
-	if(uq&UQ_HANDLE && !useron.handle[0]) {
-		sprintf(useron.handle,"%.*s",LEN_HANDLE,useron.alias);
-		while(online) {
-			bputs(text[EnterYourHandle]);
-			if(!getstr(useron.handle,LEN_HANDLE
-				,K_LINE|K_EDIT|K_AUTODEL|(uq&UQ_NOEXASC))
-				|| strchr(useron.handle,0xff)
-				|| (uq&UQ_DUPHAND
-					&& userdatdupe(useron.number,U_HANDLE,LEN_HANDLE
-					,useron.handle,0))
-				|| trashcan(useron.handle,"NAME"))
-				bputs(text[YouCantUseThatName]);
-			else
-				break; } }
-	if(uq&UQ_LOCATION && !useron.location[0])
-		while(online) {
-			bputs(text[EnterYourCityState]);
-			if(getstr(useron.location,LEN_LOCATION,K_UPRLWR|(uq&UQ_NOEXASC)))
-				break; }
-	if(uq&UQ_ADDRESS && !useron.address[0])
-		while(online) {
-			bputs(text[EnterYourAddress]);
-			if(getstr(useron.address,LEN_ADDRESS,K_UPRLWR|(uq&UQ_NOEXASC)))
-				break; }
-	if(uq&UQ_ADDRESS && !useron.zipcode[0])
-		while(online) {
-			bputs(text[EnterYourZipCode]);
-			if(getstr(useron.zipcode,LEN_ZIPCODE,K_UPPER|(uq&UQ_NOEXASC)))
-				break; }
-	if(uq&UQ_PHONE && !useron.phone[0]) {
-		i=yesno(text[CallingFromNorthAmericaQ]);
-		while(online) {
-			bputs(text[EnterYourPhoneNumber]);
-			if(i) {
-				if(gettmplt(useron.phone,sys_phonefmt
-					,K_LINE|(uq&UQ_NOEXASC))<strlen(sys_phonefmt))
-                     continue; }
-			else {
-				if(getstr(useron.phone,LEN_PHONE
-					,K_UPPER|(uq&UQ_NOEXASC))<5)
-					continue; }
-			if(!trashcan(useron.phone,"PHONE"))
-				break; } }
-	if(uq&UQ_COMP && !useron.comp[0])
-		getcomputer(useron.comp);
-	if(new_sif[0]) {
-		sprintf(str,"%sUSER\\%4.4u.DAT",data_dir,useron.number);
-		if(flength(str)<1L)
-			create_sif_dat(new_sif,str); } }
-if(!online) {
-	sprintf(str,"(%04u)  %-25s  Unsuccessful logon"
-		,useron.number,useron.alias);
-    logline("+!",str);
-	return(0); }
-strcpy(useron.modem,connection);
-useron.logons++;
-putuserdat(useron);
-getmsgptrs();
-sys_status|=SS_USERON;          /* moved from further down */
-
-if(useron.rest&FLAG('Q')) {
-	sprintf(str,"(%04u)  %-25s  QWK Network Connection"
-		,useron.number,useron.alias);
-	logline("++",str);
-	return(1); }
-
-/********************/
-/* SUCCESSFUL LOGON */
-/********************/
-totallogons=logonstats();
-sprintf(str,"(%04u)  %-25s  Logon %lu - %u"
-	,useron.number,useron.alias,totallogons,useron.ltoday);
-logline("++",str);
-
-if(!qwklogon && logon_mod[0])
-	exec_bin(logon_mod,&main_csi);
-
-if(thisnode.status!=NODE_QUIET) {
-    sprintf(str,"%sLOGON.LST",data_dir);
-    if((file=nopen(str,O_WRONLY|O_CREAT|O_APPEND))==-1) {
-        errormsg(WHERE,ERR_OPEN,str,O_RDWR|O_CREAT|O_APPEND);
-        return(0); }
-    sprintf(str,text[LastFewCallersFmt],node_num
-        ,totallogons,useron.alias
-        ,sys_misc&SM_LISTLOC ? useron.location : useron.note
-        ,gm->tm_hour,gm->tm_min
-        ,connection,useron.ltoday);
-    write(file,str,strlen(str));
-    close(file); }
-
-if(sys_logon[0])				/* execute system logon event */
-	external(cmdstr(sys_logon,nulstr,nulstr,NULL),EX_OUTR|EX_OUTL); /* EX_CC */
-
-if(qwklogon)
-    return(1);
-
-sys_status|=SS_PAUSEON;	/* always force pause on during this section */
-main_cmds=xfer_cmds=posts_read=0;
-mailw=getmail(useron.number,0);
-bprintf(text[SiSysName],sys_name);
-bprintf(text[SiNodeNumberName],node_num,node_name);
-bprintf(text[LiUserNumberName],useron.number,useron.alias);
-bprintf(text[LiLogonsToday],useron.ltoday
-	,level_callsperday[useron.level]);
-bprintf(text[LiTimeonToday],useron.ttoday
-	,level_timeperday[useron.level]+useron.min);
-bprintf(text[LiMailWaiting],mailw);
-strcpy(str,text[LiSysopIs]);
-i=kbd_state();		 /* Check scroll lock */
-if(i&16 || (sys_chat_ar[0] && chk_ar(sys_chat_ar,useron)))
-	strcat(str,text[LiSysopAvailable]);
-else
-	strcat(str,text[LiSysopNotAvailable]);
-bprintf("%s\r\n\r\n",str);
-if(sys_status&SS_EVENT)
-	bputs(text[ReducedTime]);
-getnodedat(node_num,&thisnode,1);
-thisnode.misc&=~(NODE_AOFF|NODE_POFF);
-if(useron.chat&CHAT_NOACT)
-    thisnode.misc|=NODE_AOFF;
-if(useron.chat&CHAT_NOPAGE)
-    thisnode.misc|=NODE_POFF;
-putnodedat(node_num,thisnode);
-getsmsg(useron.number); 		/* Moved from further down */
-SYNC;
-c=0;
-for(i=1;i<=sys_nodes;i++)
-	if(i!=node_num) {
-		getnodedat(i,&node,0);
-		if(node.status==NODE_INUSE
-			|| ((node.status==NODE_QUIET || node.errors) && SYSOP)) {
-			if(!c)
-				bputs(text[NodeLstHdr]);
-			printnodedat(i,node);
-			c=1; }
-		if(node.status==NODE_INUSE && i!=node_num && node.useron==useron.number
-			&& !SYSOP && !(useron.exempt&FLAG('G'))) {
-			strcpy(tmp,"On two nodes at the same time");
-			sprintf(str,"(%04u)  %-25s  %s"
-				,useron.number,useron.alias,tmp);
-			logline("+!",str);
-			errorlog(tmp);
-			bputs(text[UserOnTwoNodes]);
-			hangup();
-			return(0); }
-		if(thisnode.status!=NODE_QUIET
-			&& (node.status==NODE_INUSE || node.status==NODE_QUIET)
-			&& !(node.misc&NODE_AOFF) && node.useron!=useron.number) {
-			sprintf(str,text[NodeLoggedOnAtNbps]
-				,node_num
-				,thisnode.misc&NODE_ANON ? text[UNKNOWN_USER] : useron.alias
-				,connection);
-			putnmsg(i,str); } }
-
-if(sys_exp_warn && useron.expire && useron.expire>now /* Warn user of coming */
-	&& (useron.expire-now)/(1440L*60L)<=sys_exp_warn) /* expiration */
-	bprintf(text[AccountWillExpireInNDays],(useron.expire-now)/(1440L*60L));
-
-if(criterrs && SYSOP)
-	bprintf(text[CriticalErrors],criterrs);
-if((i=getuserxfers(0,useron.number,0))!=0) {
-	bprintf(text[UserXferForYou],i,i>1 ? "s" : nulstr); }
-if((i=getuserxfers(useron.number,0,0))!=0) {
-	bprintf(text[UnreceivedUserXfer],i,i>1 ? "s" : nulstr); }
-SYNC;
-sys_status&=~SS_PAUSEON;	/* Turn off the pause override flag */
-if(online==ON_REMOTE)
-	rioctl(IOSM|ABORT);		/* Turn abort ability on */
-if(mailw) {
-	if(yesno(text[ReadYourMailNowQ]))
-		readmail(useron.number,MAIL_YOUR); }
-lastnodemsg=0;
-if(useron.misc&ASK_NSCAN && yesno(text[NScanAllGrpsQ]))
-    scanallsubs(SCAN_NEW);
-if(useron.misc&ASK_SSCAN && yesno(text[SScanAllGrpsQ]))
-    scanallsubs(SCAN_TOYOU);
-return(1);
-}
-
-/****************************************************************************/
-/* Checks the system DSTS.DAB to see if it is a new day, if it is, all the  */
-/* nodes' and the system's CSTS.DAB are added to, and the DSTS.DAB's daily  */
-/* stats are cleared. Also increments the logon values in DSTS.DAB if       */
-/* applicable.                                                              */
-/****************************************************************************/
-ulong logonstats()
-{
-    char str[256];
-    int dsts,csts;
-    uint i;
-    struct date update;
-    time_t update_t;
-    stats_t stats;
-    node_t node;
-
-sprintf(str,"%sDSTS.DAB",ctrl_dir);
-if((dsts=nopen(str,O_RDWR))==-1) {
-    errormsg(WHERE,ERR_OPEN,str,O_RDWR);
-    return(0L); }
-read(dsts,&update_t,4);         /* Last updated         */
-read(dsts,&stats.logons,4);     /* Total number of logons on system */
-close(dsts);
-if(update_t>now+(24L*60L*60L)) /* More than a day in the future? */
-    errormsg(WHERE,ERR_CHK,"Daily stats time stamp",update_t);
-unixtodos(update_t,&update,&curtime);
-unixtodos(now,&date,&curtime);
-if((date.da_day>update.da_day && date.da_mon==update.da_mon)
-    || date.da_mon>update.da_mon || date.da_year>update.da_year) {
-
-    sprintf(str,"New Day - Prev: %s ",timestr(&update_t));
-    logentry("!=",str);
-
-    sys_status|=SS_DAILY;       /* New Day !!! */
-    sprintf(str,"%sLOGON.LST",data_dir);    /* Truncate logon list */
-    if((dsts=nopen(str,O_TRUNC|O_CREAT|O_WRONLY))==-1) {
-        errormsg(WHERE,ERR_OPEN,str,O_TRUNC|O_CREAT|O_WRONLY);
-        return(0L); }
-    close(dsts);
-    for(i=0;i<=sys_nodes;i++) {
-        if(i) {     /* updating a node */
-            getnodedat(i,&node,1);
-            node.misc|=NODE_EVENT;
-            putnodedat(i,node); }
-        sprintf(str,"%sDSTS.DAB",i ? node_path[i-1] : ctrl_dir);
-        if((dsts=nopen(str,O_RDWR))==-1) /* node doesn't have stats yet */
-            continue;
-        sprintf(str,"%sCSTS.DAB",i ? node_path[i-1] : ctrl_dir);
-        if((csts=nopen(str,O_WRONLY|O_APPEND|O_CREAT))==-1) {
-            close(dsts);
-            errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_APPEND|O_CREAT);
-            continue; }
-        lseek(dsts,8L,SEEK_SET);        /* Skip time and logons */
-        write(csts,&now,4);
-        read(dsts,&stats.ltoday,4);
-        write(csts,&stats.ltoday,4);
-        lseek(dsts,4L,SEEK_CUR);        /* Skip total time on */
-        read(dsts,&stats.ttoday,4);
-        write(csts,&stats.ttoday,4);
-        read(dsts,&stats.uls,4);
-        write(csts,&stats.uls,4);
-        read(dsts,&stats.ulb,4);
-        write(csts,&stats.ulb,4);
-        read(dsts,&stats.dls,4);
-        write(csts,&stats.dls,4);
-        read(dsts,&stats.dlb,4);
-        write(csts,&stats.dlb,4);
-        read(dsts,&stats.ptoday,4);
-        write(csts,&stats.ptoday,4);
-        read(dsts,&stats.etoday,4);
-        write(csts,&stats.etoday,4);
-        read(dsts,&stats.ftoday,4);
-        write(csts,&stats.ftoday,4);
-        close(csts);
-        lseek(dsts,0L,SEEK_SET);        /* Go back to beginning */
-        write(dsts,&now,4);             /* Update time stamp  */
-        lseek(dsts,4L,SEEK_CUR);        /* Skip total logons */
-        stats.ltoday=0;
-        write(dsts,&stats.ltoday,4);  /* Logons today to 0 */
-        lseek(dsts,4L,SEEK_CUR);     /* Skip total time on */
-        stats.ttoday=0;              /* Set all other today variables to 0 */
-        write(dsts,&stats.ttoday,4);        /* Time on today to 0 */
-        write(dsts,&stats.ttoday,4);        /* Uploads today to 0 */
-        write(dsts,&stats.ttoday,4);        /* U/L Bytes today    */
-        write(dsts,&stats.ttoday,4);        /* Download today     */
-        write(dsts,&stats.ttoday,4);        /* Download bytes     */
-        write(dsts,&stats.ttoday,4);        /* Posts today        */
-        write(dsts,&stats.ttoday,4);        /* Emails today       */
-        write(dsts,&stats.ttoday,4);        /* Feedback today     */
-        write(dsts,&stats.ttoday,2);        /* New users Today    */
-        close(dsts); } }
-
-if(thisnode.status==NODE_QUIET)       /* Quiet users aren't counted */
-    return(0L);
-
-for(i=0;i<2;i++) {
-    sprintf(str,"%sDSTS.DAB",i ? ctrl_dir : node_dir);
-    if((dsts=nopen(str,O_RDWR))==-1) {
-        errormsg(WHERE,ERR_OPEN,str,O_RDWR);
-        return(0L); }
-    lseek(dsts,4L,SEEK_SET);        /* Skip time stamp */
-    read(dsts,&stats.logons,4);
-    read(dsts,&stats.ltoday,4);
-    stats.logons++;
-    stats.ltoday++;
-    lseek(dsts,4L,SEEK_SET);        /* Rewind back and overwrite */
-    write(dsts,&stats.logons,4);
-    write(dsts,&stats.ltoday,4);
-    close(dsts); }
-return(stats.logons);
-}
-
-
diff --git a/src/sbbs2/logout.c b/src/sbbs2/logout.c
deleted file mode 100644
index e3c2ddf10b..0000000000
--- a/src/sbbs2/logout.c
+++ /dev/null
@@ -1,245 +0,0 @@
-#line 1 "LOGOUT.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-#include "cmdshell.h"
-
-/****************************************************************************/
-/* Function that is called after a user hangs up or logs off				*/
-/****************************************************************************/
-void logout()
-{
-	char	str[256];
-	int 	done,i,j;
-	ushort	ttoday;
-	file_t	f;
-	node_t	node;
-	struct	date logondate;
-	struct	time lt;
-	FILE	*stream;
-
-now=time(NULL);
-unixtodos(now,&date,&curtime);
-
-if(!useron.number) {				 /* Not logged in, so do nothing */
-	if(!online) {
-		sprintf(str,"%02d:%02d%c  T:%3u sec\r\n"
-			,curtime.ti_hour>12 ? curtime.ti_hour-12
-			: curtime.ti_hour==0 ? 12 : curtime.ti_hour, curtime.ti_min
-			, curtime.ti_hour>=12 ? 'p' : 'a'
-			,(uint)(now-answertime));
-		logline("@-",str); }
-	return; }
-
-strcpy(lastuseron,useron.alias);	/* for use with WFC status display */
-
-if(useron.rest&FLAG('G')) {        /* Reset guest's msg scan cfg */
-	putuserrec(useron.number,U_NAME,LEN_NAME,nulstr);
-	for(i=0;i<total_subs;i++) {
-		if(sub[i]->misc&SUB_NSDEF)
-			sub[i]->misc|=SUB_NSCAN;
-		else
-			sub[i]->misc&=~SUB_NSCAN;
-		if(sub[i]->misc&SUB_SSDEF)
-			sub[i]->misc|=SUB_SSCAN;
-		else
-			sub[i]->misc&=~SUB_SSCAN; }
-	batdn_total=0; }
-
-if(batdn_total) {
-	sprintf(str,"%sFILE\\%04u.DWN",data_dir,useron.number);
-	if((stream=fnopen(&i,str,O_WRONLY|O_TRUNC|O_CREAT))!=NULL) {
-		for(i=0;i<batdn_total;i++)
-			fprintf(stream,"%s\r\n",batdn_name[i]);
-		fclose(stream); } }
-	
-if(sys_status&SS_USERON && thisnode.status!=NODE_QUIET 
-	&& !(useron.rest&FLAG('Q')))
-	for(i=1;i<=sys_nodes;i++)
-		if(i!=node_num) {
-			getnodedat(i,&node,0);
-			if((node.status==NODE_INUSE || node.status==NODE_QUIET)
-				&& !(node.misc&NODE_AOFF) && node.useron!=useron.number) {
-				sprintf(str,text[NodeLoggedOff],node_num
-					,thisnode.misc&NODE_ANON
-					? text[UNKNOWN_USER] : useron.alias);
-				putnmsg(i,str); } }
-
-if(!online) {		/* NOT re-login */
-
-	getnodedat(node_num,&thisnode,1);
-	thisnode.status=NODE_WFC;
-	thisnode.misc&=~(NODE_INTR|NODE_MSGW|NODE_NMSG
-		|NODE_UDAT|NODE_POFF|NODE_AOFF|NODE_EXT);
-	putnodedat(node_num,thisnode);
-
-	if(sys_status&SS_SYSALERT) {
-		mswait(500);
-		if(com_port)
-			dtr(1);
-		mswait(500);
-		offhook();
-		CLS;
-		lputs("\r\n\r\nAlerting Sysop...");
-		while(!lkbrd(1)) {
-			beep(1000,200);
-			nosound();
-			mswait(200); }
-		lkbrd(0); }
-
-	sys_status&=~SS_SYSALERT;
-	if(sys_logout[0])		/* execute system logoff event */
-		external(cmdstr(sys_logout,nulstr,nulstr,NULL),EX_OUTL);	/* EX_CC */
-	}
-
-if(logout_mod[0])
-	exec_bin(logout_mod,&main_csi);
-backout();
-sprintf(str,"%sMSGS\\%4.4u.MSG",data_dir,useron.number);
-if(!flength(str))		/* remove any 0 byte message files */
-	remove(str);
-
-delfiles(temp_dir,"*.*");
-putmsgptrs();
-if(!REALSYSOP)
-	logofflist();
-useron.laston=now;
-
-ttoday=useron.ttoday-useron.textra; 		/* billable time used prev calls */
-if(ttoday>=level_timeperday[useron.level])
-	i=0;
-else
-	i=level_timeperday[useron.level]-ttoday;
-if(i>level_timepercall[useron.level])      /* i=amount of time without min */
-	i=level_timepercall[useron.level];
-j=(now-starttime)/60;			/* j=billable time online in min */
-if(i<0) i=0;
-if(j<0) j=0;
-
-if(useron.min && j>i) {
-    j-=i;                               /* j=time to deduct from min */
-	sprintf(str,"Minute Adjustment: %d",-j);
-	logline(">>",str);
-    if(useron.min>j)
-        useron.min-=j;
-    else
-        useron.min=0L;
-    putuserrec(useron.number,U_MIN,10,ultoa(useron.min,str,10)); }
-
-useron.tlast=(now-logontime)/60;
-useron.timeon+=useron.tlast;
-useron.ttoday+=useron.tlast;
-
-if(timeleft>0 && starttime-logontime>0) 			/* extra time */
-	useron.textra+=(starttime-logontime)/60;
-
-unixtodos(logontime,&logondate,&lt);
-if(logondate.da_day!=date.da_day) { /* date has changed while online */
-    putuserrec(useron.number,U_LTODAY,5,"0");
-	useron.ttoday=0;			/* so zero logons today and time on today */
-	useron.textra=0; }			/* and extra time */
-
-
-
-putuserrec(useron.number,U_NS_TIME,8,ultoa(last_ns_time,str,16));
-putuserrec(useron.number,U_LASTON,8,ultoa(useron.laston,str,16));
-putuserrec(useron.number,U_TIMEON,5,itoa(useron.timeon,str,10));
-putuserrec(useron.number,U_TTODAY,5,itoa(useron.ttoday,str,10));
-putuserrec(useron.number,U_TEXTRA,5,itoa(useron.textra,str,10));
-putuserrec(useron.number,U_TLAST,5,itoa(useron.tlast,str,10));
-
-getusrsubs();
-getusrdirs();
-putuserrec(useron.number,U_CURSUB,8,sub[usrsub[curgrp][cursub[curgrp]]]->code);
-putuserrec(useron.number,U_CURDIR,8,dir[usrdir[curlib][curdir[curlib]]]->code);
-
-sprintf(str,"%02d:%02d%c  ",curtime.ti_hour>12 ? curtime.ti_hour-12
-	: curtime.ti_hour==0 ? 12 : curtime.ti_hour, curtime.ti_min
-	, curtime.ti_hour>=12 ? 'p' : 'a');
-if(sys_status&SS_USERON)
-	sprintf(tmp,"T:%3u   R:%3lu   P:%3lu   E:%3lu   F:%3lu   "
-		"U:%3luk %lu   D:%3luk %lu"
-		,(uint)(now-logontime)/60,posts_read,logon_posts
-		,logon_emails,logon_fbacks,logon_ulb/1024UL,logon_uls
-		,logon_dlb/1024UL,logon_dls);
-else
-	sprintf(tmp,"T:%3u sec",(uint)(now-answertime));
-strcat(str,tmp);
-strcat(str,"\r\n");
-logline("@-",str);
-sys_status&=~SS_USERON;
-answertime=now; // Incase we're relogging on
-}
-
-/****************************************************************************/
-/* Backout of transactions and statuses for this node 						*/
-/****************************************************************************/
-void backout()
-{
-	char str[256],code[128],*buf;
-	int i,file;
-	long length,l;
-	file_t f;
-
-sprintf(str,"%sBACKOUT.DAB",node_dir);
-if(flength(str)<1L) {
-	remove(str);
-	return; }
-if((file=nopen(str,O_RDONLY))==-1) {
-	errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-	return; }
-length=filelength(file);
-if((buf=MALLOC(length))==NULL) {
-	close(file);
-	errormsg(WHERE,ERR_ALLOC,str,length);
-	return; }
-if(read(file,buf,length)!=length) {
-	close(file);
-	FREE(buf);
-	errormsg(WHERE,ERR_READ,str,length);
-	return; }
-close(file);
-for(l=0;l<length;l+=BO_LEN) {
-	switch(buf[l]) {
-		case BO_OPENFILE:	/* file left open */
-			memcpy(code,buf+l+1,8);
-			code[8]=0;
-			for(i=0;i<total_dirs;i++)			/* search by code */
-				if(!stricmp(dir[i]->code,code))
-					break;
-			if(i<total_dirs) {		/* found internal code */
-				f.dir=i;
-				memcpy(&f.datoffset,buf+l+9,4);
-				closefile(f); }
-			break;
-		default:
-			errormsg(WHERE,ERR_CHK,str,buf[l]); } }
-FREE(buf);
-remove(str);	/* always remove the backout file */
-}
-
-/****************************************************************************/
-/* Detailed usage stats for each logon                                      */
-/****************************************************************************/
-void logofflist()
-{
-    char str[256];
-    int file;
-    struct time ontime;
-
-unixtodos(logontime,&date,&ontime);
-sprintf(str,"%sLOGS\\%2.2d%2.2d%2.2d.LOL",data_dir,date.da_mon,date.da_day
-    ,TM_YEAR(date.da_year-1900));
-if((file=nopen(str,O_WRONLY|O_CREAT|O_APPEND))==-1) {
-    errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_APPEND);
-    return; }
-unixtodos(now,&date,&curtime);
-sprintf(str,"%-*.*s %-2d %-8.8s %2.2d:%2.2d %2.2d:%2.2d %3d%3ld%3ld%3ld%3ld"
-	"%3ld%3ld\r\n",LEN_ALIAS,LEN_ALIAS,useron.alias,node_num,connection
-    ,ontime.ti_hour,ontime.ti_min,curtime.ti_hour,curtime.ti_min
-    ,(int)(now-logontime)/60,posts_read,logon_posts,logon_emails
-    ,logon_fbacks,logon_uls,logon_dls);
-write(file,str,strlen(str));
-close(file);
-}
diff --git a/src/sbbs2/mail.c b/src/sbbs2/mail.c
deleted file mode 100644
index 4a3adcbe41..0000000000
--- a/src/sbbs2/mail.c
+++ /dev/null
@@ -1,899 +0,0 @@
-#line 1 "MAIL.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-
-/****************************************************************************/
-/* Returns the number of pieces of mail waiting for usernumber              */
-/* If sent is non-zero, it returns the number of mail sent by usernumber    */
-/* If usernumber is 0, it returns all mail on the system                    */
-/****************************************************************************/
-int getmail(int usernumber, char sent)
-{
-    char    str[128];
-    int     i=0;
-    long    l;
-    idxrec_t idx;
-
-smb_stack(&smb,SMB_STACK_PUSH);
-sprintf(smb.file,"%sMAIL",data_dir);
-smb.retry_time=smb_retry_time;
-sprintf(str,"%s.SID",smb.file);
-l=flength(str);
-if(l<sizeof(idxrec_t))
-	return(0);
-if(!usernumber) {
-	smb_stack(&smb,SMB_STACK_POP);
-	return(l/sizeof(idxrec_t)); }	/* Total system e-mail */
-if(smb_open(&smb)) {
-	smb_stack(&smb,SMB_STACK_POP);
-	return(0); }
-while(!feof(smb.sid_fp)) {
-	if(!fread(&idx,sizeof(idxrec_t),1,smb.sid_fp))
-        break;
-	if(idx.attr&MSG_DELETE)
-		continue;
-    if((!sent && idx.to==usernumber)
-     || (sent && idx.from==usernumber))
-        i++; }
-smb_close(&smb);
-smb_stack(&smb,SMB_STACK_POP);
-return(i);
-}
-
-/***************************/
-/* Delete file attachments */
-/***************************/
-void delfattach(uint to, char *title)
-{
-    char str[128],str2[128],*tp,*sp,*p;
-    uint i;
-
-strcpy(str,title);
-tp=str;
-while(1) {
-    p=strchr(tp,SP);
-    if(p) *p=0;
-    sp=strrchr(tp,'/');              /* sp is slash pointer */
-    if(!sp) sp=strrchr(tp,'\\');
-    if(sp) tp=sp+1;
-    sprintf(str2,"%sFILE\\%04u.IN\\%s"  /* str2 is path/fname */
-        ,data_dir,to,tp);
-    remove(str2);
-    if(!p)
-        break;
-    tp=p+1; }
-sprintf(str,"%sFILE\\%04u.IN",data_dir,to);
-rmdir(str);                     /* remove the dir if it's empty */
-}
-
-
-/****************************************************************************/
-/* Deletes all mail messages for usernumber that have been marked 'deleted' */
-/* smb_locksmbhdr() should be called prior to this function 				*/
-/****************************************************************************/
-int delmail(uint usernumber, int which)
-{
-	ulong	 i,l,now;
-	idxrec_t HUGE16 *idxbuf;
-	smbmsg_t msg;
-
-now=time(NULL);
-if((i=smb_getstatus(&smb))!=0) {
-	errormsg(WHERE,ERR_READ,smb.file,i);
-	return(2); }
-if(!smb.status.total_msgs)
-	return(0);
-if((idxbuf=(idxrec_t *)LMALLOC(smb.status.total_msgs*sizeof(idxrec_t)))==NULL) {
-	errormsg(WHERE,ERR_ALLOC,smb.file,smb.status.total_msgs*sizeof(idxrec_t));
-	return(-1); }
-if((i=smb_open_da(&smb))!=0) {
-    errormsg(WHERE,ERR_OPEN,smb.file,i);
-	LFREE(idxbuf);
-    return(i); }
-if((i=smb_open_ha(&smb))!=0) {
-    smb_close_da(&smb);
-    errormsg(WHERE,ERR_OPEN,smb.file,i);
-	LFREE(idxbuf);
-    return(i); }
-rewind(smb.sid_fp);
-for(l=0;l<smb.status.total_msgs;) {
-	if(!fread(&msg.idx,sizeof(idxrec_t),1,smb.sid_fp))
-        break;
-	if(which==MAIL_ALL && !(msg.idx.attr&MSG_PERMANENT)
-		&& smb.status.max_age && now>msg.idx.time
-		&& (now-msg.idx.time)/(24L*60L*60L)>smb.status.max_age)
-		msg.idx.attr|=MSG_DELETE;
-	if(msg.idx.attr&MSG_DELETE && !(msg.idx.attr&MSG_PERMANENT)
-		&& ((which==MAIL_SENT && usernumber==msg.idx.from)
-		|| (which==MAIL_YOUR && usernumber==msg.idx.to)
-		|| (which==MAIL_ANY
-			&& (usernumber==msg.idx.to || usernumber==msg.idx.from))
-		|| which==MAIL_ALL)) {
-		/* Don't need to lock message because base is locked */
-		if(which==MAIL_ALL && !online)
-			lprintf(" #%lu",msg.idx.number);
-		if((i=smb_getmsghdr(&smb,&msg))!=0)
-			errormsg(WHERE,ERR_READ,smb.file,i);
-		else {
-			if(msg.hdr.attr!=msg.idx.attr) {
-				msg.hdr.attr=msg.idx.attr;
-				if((i=smb_putmsghdr(&smb,&msg))!=0)
-					errormsg(WHERE,ERR_WRITE,smb.file,i); }
-			if((i=smb_freemsg(&smb,&msg))!=0)
-				errormsg(WHERE,ERR_REMOVE,smb.file,i);
-			if(msg.hdr.auxattr&MSG_FILEATTACH)
-				delfattach(msg.idx.to,msg.subj);
-			smb_freemsgmem(&msg); }
-		continue; }
-	idxbuf[l]=msg.idx;
-	l++; }
-rewind(smb.sid_fp);
-chsize(fileno(smb.sid_fp),0);
-for(i=0;i<l;i++)
-	fwrite(&idxbuf[i],sizeof(idxrec_t),1,smb.sid_fp);
-LFREE(idxbuf);
-smb.status.total_msgs=l;
-smb_putstatus(&smb);
-fflush(smb.sid_fp);
-smb_close_ha(&smb);
-smb_close_da(&smb);
-return(0);
-}
-
-
-/***********************************************/
-/* Tell the user that so-and-so read your mail */
-/***********************************************/
-void telluser(smbmsg_t msg)
-{
-	char str[256],*p;
-	uint usernumber,n;
-	node_t node;
-
-if(msg.from_net.type)
-	return;
-if(msg.from_ext)
-	usernumber=atoi(msg.from_ext);
-else {
-	usernumber=matchuser(msg.from);
-	if(!usernumber)
-		return; }
-for(n=1;n<=sys_nodes;n++) { /* Tell user */
-	getnodedat(n,&node,0);
-	if(node.useron==usernumber
-	&& (node.status==NODE_INUSE
-	|| node.status==NODE_QUIET)) {
-		sprintf(str
-			,text[UserReadYourMailNodeMsg]
-			,node_num,useron.alias);
-		putnmsg(n,str);
-		break; } }
-if(n>sys_nodes) {
-	now=time(NULL);
-	sprintf(str,text[UserReadYourMail]
-		,useron.alias,timestr(&now));
-	putsmsg(usernumber,str); }
-}
-
-/****************************************************************************/
-/* Loads mail waiting for user number 'usernumber' into the mail array of   */
-/* of pointers to mail_t (message numbers and attributes)                   */
-/* smb_open(&smb) must be called prior											*/
-/****************************************************************************/
-ulong loadmail(mail_t **mail, uint usernumber, int which, int mode)
-{
-	int 		i;
-	ulong		l=0;
-    idxrec_t    idx;
-
-if((i=smb_locksmbhdr(&smb))!=0) {				/* Be sure noone deletes or */
-	errormsg(WHERE,ERR_LOCK,smb.file,i);		/* adds while we're reading */
-    return(0); }
-(*mail)=NULL;
-rewind(smb.sid_fp);
-while(!feof(smb.sid_fp)) {
-	if(!fread(&idx,sizeof(idxrec_t),1,smb.sid_fp))
-        break;
-	if((which==MAIL_SENT && idx.from!=usernumber)
-		|| (which==MAIL_YOUR && idx.to!=usernumber)
-		|| (which==MAIL_ANY && idx.from!=usernumber && idx.to!=usernumber))
-        continue;
-	if(idx.attr&MSG_DELETE) {
-		if(mode&LM_QWK) 				/* Don't included deleted msgs */
-			continue;					/* in QWK packet */
-		if(!(sys_misc&SM_SYSVDELM)) 	/* Noone can view deleted msgs */
-			continue;					
-		if(!SYSOP						/* not sysop */
-			&& !(sys_misc&SM_USRVDELM)) /* users can't view deleted msgs */
-			continue; }
-	if(mode&LM_UNREAD && idx.attr&MSG_READ)
-		continue;
-	if(((*mail)=(mail_t *)REALLOC((*mail),sizeof(mail_t)*(l+1)))
-        ==NULL) {
-		smb_unlocksmbhdr(&smb);
-		errormsg(WHERE,ERR_ALLOC,smb.file,sizeof(mail_t)*(l+1));
-        return(0); }
-	(*mail)[l].offset=idx.offset;
-	(*mail)[l].number=idx.number;
-	(*mail)[l].to=idx.to;
-	(*mail)[l].from=idx.from;
-	(*mail)[l].subj=idx.subj;
-	(*mail)[l].time=idx.time;
-	(*mail)[l].attr=idx.attr;
-	l++; }
-smb_unlocksmbhdr(&smb);
-return(l);
-}
-
-/************************************************************************/
-/* Deletes all mail waiting for user number 'usernumber'                */
-/************************************************************************/
-void delallmail(uint usernumber)
-{
-	int 	i;
-	ulong	l,msgs,deleted=0;
-	mail_t	*mail;
-	smbmsg_t msg;
-
-if((i=smb_stack(&smb,SMB_STACK_PUSH))!=0) {
-	errormsg(WHERE,ERR_OPEN,"MAIL",i);
-	return; }
-sprintf(smb.file,"%sMAIL",data_dir);
-smb.retry_time=smb_retry_time;
-if((i=smb_open(&smb))!=0) {
-	errormsg(WHERE,ERR_OPEN,smb.file,i);
-	smb_stack(&smb,SMB_STACK_POP);
-	return; }
-
-msgs=loadmail(&mail,usernumber,MAIL_ANY,0);
-if(!msgs) {
-	smb_close(&smb);
-	smb_stack(&smb,SMB_STACK_POP);
-	return; }
-if((i=smb_locksmbhdr(&smb))!=0) {			/* Lock the base, so nobody */
-	smb_close(&smb);
-	smb_stack(&smb,SMB_STACK_POP);
-	FREE(mail);
-	errormsg(WHERE,ERR_LOCK,smb.file,i);	/* messes with the index */
-	return; }
-for(l=0;l<msgs;l++) {
-	msg.idx.offset=0;						/* search by number */
-	if(loadmsg(&msg,mail[l].number)) {	   /* message still there */
-		msg.hdr.attr|=MSG_DELETE;
-		msg.hdr.attr&=~MSG_PERMANENT;
-		msg.idx.attr=msg.hdr.attr;
-		if((i=smb_putmsg(&smb,&msg))!=0)
-			errormsg(WHERE,ERR_WRITE,smb.file,i);
-		else
-			deleted++;
-		smb_freemsgmem(&msg);
-		smb_unlockmsghdr(&smb,&msg); } }
-
-if(msgs)
-	FREE(mail);
-if(deleted && sys_misc&SM_DELEMAIL)
-	delmail(usernumber,MAIL_ANY);
-smb_unlocksmbhdr(&smb);
-smb_close(&smb);
-smb_stack(&smb,SMB_STACK_POP);
-}
-
-/****************************************************************************/
-/* Reads mail waiting for usernumber.                                       */
-/****************************************************************************/
-void readmail(uint usernumber, int which)
-{
-	char	str[256],str2[256],str3[256],done=0,domsg=1
-			,*buf,*p,*tp,*sp,ch;
-	int 	file,msgs,curmsg,i,j,k,n,m,mismatches=0,act;
-    long    length,l;
-	ulong	last;
-	file_t	fd;
-	mail_t	*mail;
-	smbmsg_t msg;
-
-msg.total_hfields=0;			/* init to NULL, cause not allocated yet */
-
-fd.dir=total_dirs+1;			/* temp dir for file attachments */
-
-if((i=smb_stack(&smb,SMB_STACK_PUSH))!=0) {
-	errormsg(WHERE,ERR_OPEN,"MAIL",i);
-	return; }
-sprintf(smb.file,"%sMAIL",data_dir);
-smb.retry_time=smb_retry_time;
-if((i=smb_open(&smb))!=0) {
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_OPEN,smb.file,i);
-	return; }
-
-msgs=loadmail(&mail,usernumber,which,0);
-if(!msgs) {
-	if(which==MAIL_SENT)
-		bputs(text[NoMailSent]);
-	else if(which==MAIL_ALL)
-		bputs(text[NoMailOnSystem]);
-	else
-		bputs(text[NoMailWaiting]);
-	smb_close(&smb);
-	smb_stack(&smb,SMB_STACK_POP);
-    return; }
-
-last=smb.status.last_msg;
-
-if(which==MAIL_SENT)
-	act=NODE_RSML;
-else if(which==MAIL_ALL)
-	act=NODE_SYSP;
-else
-	act=NODE_RMAL;
-action=act;
-if(msgs>1 && which!=MAIL_ALL) {
-	if(which==MAIL_SENT)
-		bputs(text[MailSentLstHdr]);
-	else
-		bputs(text[MailWaitingLstHdr]);
-
-	for(curmsg=0;curmsg<msgs && !msgabort();curmsg++) {
-		if(msg.total_hfields)
-			smb_freemsgmem(&msg);
-		msg.total_hfields=0;
-		msg.idx.offset=mail[curmsg].offset;
-		if(!loadmsg(&msg,mail[curmsg].number))
-			continue;
-		smb_unlockmsghdr(&smb,&msg);
-		bprintf(text[MailWaitingLstFmt],curmsg+1
-			,which==MAIL_SENT ? msg.to
-			: (msg.hdr.attr&MSG_ANONYMOUS) && !SYSOP ? text[Anonymous]
-			: msg.from
-			,msg.hdr.attr&MSG_DELETE ? '-' : msg.hdr.attr&MSG_READ ? ' '
-				: msg.from_net.type || msg.to_net.type ? 'N':'*'
-			,msg.subj);
-		smb_freemsgmem(&msg);
-		msg.total_hfields=0; }
-
-	ASYNC;
-	if(!(sys_status&SS_ABORT)) {
-		bprintf(text[StartWithN],1L);
-		if((curmsg=getnum(msgs))>0)
-			curmsg--;
-		else if(curmsg==-1) {
-			FREE(mail);
-			smb_close(&smb);
-			smb_stack(&smb,SMB_STACK_POP);
-			return; } }
-	sys_status&=~SS_ABORT; }
-else {
-	curmsg=0;
-	if(which==MAIL_ALL)
-		domsg=0; }
-if(which==MAIL_SENT)
-	logline("E","Read sent mail");
-else if(which==MAIL_ALL)
-	logline("S+","Read all mail");
-else
-	logline("E","Read mail");
-if(useron.misc&RIP) {
-	strcpy(str,which==MAIL_YOUR ? "MAILREAD" : which==MAIL_ALL ?
-		"ALLMAIL" : "SENTMAIL");
-	menu(str); }
-while(online && !done) {
-	action=act;
-
-	if(msg.total_hfields)
-		smb_freemsgmem(&msg);
-	msg.total_hfields=0;
-
-	msg.idx.offset=mail[curmsg].offset;
-	msg.idx.number=mail[curmsg].number;
-	msg.idx.to=mail[curmsg].to;
-	msg.idx.from=mail[curmsg].from;
-	msg.idx.subj=mail[curmsg].subj;
-
-	if((i=smb_locksmbhdr(&smb))!=0) {
-		errormsg(WHERE,ERR_LOCK,smb.file,i);
-		break; }
-
-	if((i=smb_getstatus(&smb))!=0) {
-		smb_unlocksmbhdr(&smb);
-		errormsg(WHERE,ERR_READ,smb.file,i);
-		break; }
-	smb_unlocksmbhdr(&smb);
-
-	if(smb.status.last_msg!=last) { 	/* New messages */
-		last=smb.status.last_msg;
-		FREE(mail);
-		msgs=loadmail(&mail,usernumber,which,0);   /* So re-load */
-		if(!msgs)
-			break;
-		for(curmsg=0;curmsg<msgs;curmsg++)
-			if(mail[curmsg].number==msg.idx.number)
-				break;
-		if(curmsg>=msgs)
-			curmsg=(msgs-1);
-		continue; }
-
-	if(!loadmsg(&msg,mail[curmsg].number)) {	/* Message header gone */
-		if(mismatches>5) {	/* We can't do this too many times in a row */
-			errormsg(WHERE,ERR_CHK,"message number",mail[curmsg].number);
-			break; }
-		FREE(mail);
-		msgs=loadmail(&mail,usernumber,which,0);
-		if(!msgs)
-			break;
-		if(curmsg>(msgs-1))
-			curmsg=(msgs-1);
-		mismatches++;
-		continue; }
-	smb_unlockmsghdr(&smb,&msg);
-	msg.idx.attr=msg.hdr.attr;
-
-	mismatches=0;
-
-	if(domsg && !(sys_status&SS_ABORT)) {
-
-		show_msg(msg
-			,msg.from_ext && msg.idx.from==1 && !msg.from_net.type
-				? 0:P_NOATCODES);
-
-		if(msg.hdr.auxattr&MSG_FILEATTACH) {  /* Attached file */
-			smb_getmsgidx(&smb,&msg);
-			strcpy(str,msg.subj);					/* filenames in title */
-			strupr(str);
-			tp=str;
-			while(online) {
-				p=strchr(tp,SP);
-				if(p) *p=0;
-				sp=strrchr(tp,'/');              /* sp is slash pointer */
-				if(!sp) sp=strrchr(tp,'\\');
-                if(sp) tp=sp+1;
-				padfname(tp,fd.name);
-				sprintf(str2,"%sFILE\\%04u.IN\\%s"  /* str2 is path/fname */
-					,data_dir,msg.idx.to,tp);
-				length=flength(str2);
-				if(length<1)
-					bputs(text[FileNotFound]);
-				else if(!(useron.exempt&FLAG('T')) && cur_cps && !SYSOP
-					&& length/(ulong)cur_cps>timeleft)
-					bputs(text[NotEnoughTimeToDl]);
-				else {
-					sprintf(str3,text[DownloadAttachedFileQ]
-						,tp,ultoac(length,tmp));
-					if(length>0L && yesno(str3)) {
-						if(online==ON_LOCAL) {
-							bputs(text[EnterPath]);
-							if(getstr(str3,60,K_LINE|K_UPPER)) {
-								backslashcolon(str3);
-								sprintf(tmp,"%s%s",str3,tp);
-								if(!mv(str2,tmp,which!=MAIL_YOUR)) {
-									logon_dlb+=length;
-									logon_dls++;
-									useron.dls=adjustuserrec(useron.number
-										,U_DLS,5,1);
-									useron.dlb=adjustuserrec(useron.number
-										,U_DLB,10,length);
-									bprintf(text[FileNBytesSent]
-										,fd.name,ultoac(length,tmp)); } } }
-
-						else {	/* Remote User */
-							menu("DLPROT");
-							mnemonics(text[ProtocolOrQuit]);
-							strcpy(str3,"Q");
-							for(i=0;i<total_prots;i++)
-								if(prot[i]->dlcmd[0]
-									&& chk_ar(prot[i]->ar,useron)) {
-									sprintf(tmp,"%c",prot[i]->mnemonic);
-									strcat(str3,tmp); }
-							ch=getkeys(str3,0);
-							for(i=0;i<total_prots;i++)
-								if(prot[i]->dlcmd[0] && ch==prot[i]->mnemonic
-									&& chk_ar(prot[i]->ar,useron))
-									break;
-							if(i<total_prots) {
-								j=protocol(cmdstr(prot[i]->dlcmd,str2,nulstr
-									,NULL),0);
-								if((prot[i]->misc&PROT_DSZLOG
-									&& checkprotlog(fd))
-									|| (!(prot[i]->misc&PROT_DSZLOG) && !j)) {
-										if(which==MAIL_YOUR)
-											remove(str2);
-										logon_dlb+=length;	/* Update stats */
-										logon_dls++;
-										useron.dls=adjustuserrec(useron.number
-											,U_DLS,5,1);
-										useron.dlb=adjustuserrec(useron.number
-											,U_DLB,10,length);
-										bprintf(text[FileNBytesSent]
-											,fd.name,ultoac(length,tmp));
-										sprintf(str3
-											,"Downloaded attached file: %s"
-											,fd.name);
-										logline("D-",str3); }
-								autohangup(); } } } }
-					if(!p)
-						break;
-					tp=p+1;
-					while(*tp==SP) tp++; }
-			sprintf(str,"%sFILE\\%04u.IN",data_dir,usernumber);
-			rmdir(str); }
-		if(which==MAIL_YOUR && !(msg.hdr.attr&MSG_READ)) {
-			mail[curmsg].attr|=MSG_READ;
-			if(thisnode.status==NODE_INUSE)
-				telluser(msg);
-			if(msg.total_hfields)
-				smb_freemsgmem(&msg);
-			msg.total_hfields=0;
-			msg.idx.offset=0;						/* Search by number */
-			if(!smb_locksmbhdr(&smb)) { 			/* Lock the entire base */
-				if(loadmsg(&msg,msg.idx.number)) {
-					msg.hdr.attr|=MSG_READ;
-					msg.idx.attr=msg.hdr.attr;
-					if((i=smb_putmsg(&smb,&msg))!=0)
-						errormsg(WHERE,ERR_WRITE,smb.file,i);
-					smb_unlockmsghdr(&smb,&msg); }
-				smb_unlocksmbhdr(&smb); }
-			if(!msg.total_hfields) {				/* unsuccessful reload */
-				domsg=0;
-				continue; } }
-		}
-    else domsg=1;
-
-	if(useron.misc&WIP) {
-		strcpy(str,which==MAIL_YOUR ? "MAILREAD" : which==MAIL_ALL ?
-			"ALLMAIL" : "SENTMAIL");
-		menu(str); }
-
-	ASYNC;
-	if(which==MAIL_SENT)
-		bprintf(text[ReadingSentMail],curmsg+1,msgs);
-	else if(which==MAIL_ALL)
-		bprintf(text[ReadingAllMail],curmsg+1,msgs);
-	else
-		bprintf(text[ReadingMail],curmsg+1,msgs);
-	sprintf(str,"ADFLNQRT?<>[]{}-+");
-	if(SYSOP)
-		strcat(str,"CUSP");
-	if(which!=MAIL_YOUR)
-		strcat(str,"E");
-	l=getkeys(str,msgs);
-	if(l&0x80000000L) {
-		if(l==-1)	/* ctrl-c */
-            break;
-		curmsg=(l&~0x80000000L)-1;
-        continue; }
-	switch(l) {
-		case 'A':   /* Auto-reply to last piece */
-			if(which==MAIL_SENT)
-				break;
-			if((msg.hdr.attr&MSG_ANONYMOUS) && !SYSOP) {
-				bputs(text[CantReplyToAnonMsg]);
-				break; }
-
-			quotemsg(msg,1);
-
-			if(msg.from_net.type==NET_FIDO) 		/* FidoNet type */
-				sprintf(str,"%s @%s",msg.from
-				,faddrtoa(*(faddr_t *)msg.from_net.addr));
-			else if(msg.from_net.type==NET_INTERNET)
-				strcpy(str,msg.from_net.addr);
-			else if(msg.from_net.type)
-				sprintf(str,"%s@%s",msg.from,msg.from_net.addr);
-			else									/* No net */
-				strcpy(str,msg.from);
-
-			strcpy(str2,str);
-
-			bputs(text[Email]);
-			if(!getstr(str,64,K_EDIT|K_AUTODEL))
-				break;
-			msg.hdr.number=msg.idx.number;
-			smb_getmsgidx(&smb,&msg);
-
-			if(!stricmp(str2,str))		/* Reply to sender */
-				sprintf(str2,text[Regarding],msg.subj);
-			else						/* Reply to other */
-				sprintf(str2,text[RegardingBy],msg.subj,msg.from
-					,timestr((time_t *)&msg.hdr.when_written.time));
-
-			p=strrchr(str,'@');
-			if(p) { 							/* name @addr */
-				netmail(str,msg.subj,WM_QUOTE);
-				sprintf(str2,text[DeleteMailQ],msg.from); }
-			else {
-				if(!msg.from_net.type && !stricmp(str,msg.from))
-					email(msg.idx.from,str2,msg.subj,WM_EMAIL|WM_QUOTE);
-				else if(!stricmp(str,"SYSOP"))
-					email(1,str2,msg.subj,WM_EMAIL|WM_QUOTE);
-				else if((i=finduser(str))!=0)
-					email(i,str2,msg.subj,WM_EMAIL|WM_QUOTE);
-				sprintf(str2,text[DeleteMailQ],msg.from); }
-			if(!yesno(str2)) {
-				if(curmsg<msgs-1) curmsg++;
-				else done=1;
-				break;	}
-			/* Case 'D': must follow! */
-		case 'D':   /* Delete last piece (toggle) */
-			if(msg.hdr.attr&MSG_PERMANENT) {
-				bputs("\r\nPermanent message.\r\n");
-				domsg=0;
-				break; }
-			if(msg.total_hfields)
-				smb_freemsgmem(&msg);
-			msg.total_hfields=0;
-			msg.idx.offset=0;
-			if(loadmsg(&msg,msg.idx.number)) {
-				msg.hdr.attr^=MSG_DELETE;
-				msg.idx.attr=msg.hdr.attr;
-//				  mail[curmsg].attr=msg.hdr.attr;
-				if((i=smb_putmsg(&smb,&msg))!=0)
-					errormsg(WHERE,ERR_WRITE,smb.file,i);
-				smb_unlockmsghdr(&smb,&msg); }
-			if(curmsg<msgs-1) curmsg++;
-			else done=1;
-			break;
-		case 'F':  /* Forward last piece */
-			domsg=0;
-			bputs(text[ForwardMailTo]);
-			if(!getstr(str,LEN_ALIAS,K_UPRLWR))
-				break;
-			i=finduser(str);
-			if(!i)
-				break;
-			domsg=1;
-			if(curmsg<msgs-1) curmsg++;
-			else done=1;
-			smb_getmsgidx(&smb,&msg);
-			forwardmail(&msg,i);
-			if(msg.hdr.attr&MSG_PERMANENT)
-				break;
-			sprintf(str2,text[DeleteMailQ],msg.from);
-			if(!yesno(str2))
-				break;
-			if(msg.total_hfields)
-				smb_freemsgmem(&msg);
-			msg.total_hfields=0;
-			msg.idx.offset=0;
-			if(loadmsg(&msg,msg.idx.number)) {
-				msg.hdr.attr|=MSG_DELETE;
-				msg.idx.attr=msg.hdr.attr;
-//				  mail[curmsg].attr=msg.hdr.attr;
-				if((i=smb_putmsg(&smb,&msg))!=0)
-					errormsg(WHERE,ERR_WRITE,smb.file,i);
-				smb_unlockmsghdr(&smb,&msg); }
-
-			break;
-		case 'L':     /* List mail */
-			domsg=0;
-			bprintf(text[StartWithN],(long)curmsg+1);
-			if((i=getnum(msgs))>0)
-				i--;
-			else if(i==-1)
-				break;
-			else
-				i=curmsg;
-			if(which==MAIL_SENT)
-				bputs(text[MailSentLstHdr]);
-			else if(which==MAIL_ALL)
-				bputs(text[MailOnSystemLstHdr]);
-			else
-				bputs(text[MailWaitingLstHdr]);
-			for(;i<msgs && !msgabort();i++) {
-				if(msg.total_hfields)
-					smb_freemsgmem(&msg);
-				msg.total_hfields=0;
-				msg.idx.offset=mail[i].offset;
-				if(!loadmsg(&msg,mail[i].number))
-					continue;
-				smb_unlockmsghdr(&smb,&msg);
-				if(which==MAIL_ALL)
-					bprintf(text[MailOnSystemLstFmt]
-						,i+1,msg.from,msg.to
-						,msg.hdr.attr&MSG_DELETE ? '-'
-							: msg.hdr.attr&MSG_READ ? SP
-							: msg.from_net.type || msg.to_net.type ? 'N':'*'
-						,msg.subj);
-				else
-					bprintf(text[MailWaitingLstFmt],i+1
-						,which==MAIL_SENT ? msg.to
-						: (msg.hdr.attr&MSG_ANONYMOUS) && !SYSOP
-						? text[Anonymous] : msg.from
-						,msg.hdr.attr&MSG_DELETE ? '-'
-							: msg.hdr.attr&MSG_READ ? SP
-							: msg.from_net.type || msg.to_net.type ? 'N':'*'
-						,msg.subj);
-				smb_freemsgmem(&msg);
-				msg.total_hfields=0; }
-			break;
-		case 'Q':
-			done=1;
-			break;
-		case 'C':   /* Change attributes of last piece */
-			i=chmsgattr(msg.hdr.attr);
-			if(msg.hdr.attr==i)
-				break;
-			if(msg.total_hfields)
-				smb_freemsgmem(&msg);
-			msg.total_hfields=0;
-			msg.idx.offset=0;
-			if(loadmsg(&msg,msg.idx.number)) {
-				msg.hdr.attr=msg.idx.attr=i;
-				if((i=smb_putmsg(&smb,&msg))!=0)
-					errormsg(WHERE,ERR_WRITE,smb.file,i);
-				smb_unlockmsghdr(&smb,&msg); }
-			break;
-		case '>':
-			for(i=curmsg+1;i<msgs;i++)
-				if(mail[i].subj==msg.idx.subj)
-					break;
-			if(i<msgs)
-				curmsg=i;
-			else
-				domsg=0;
-			break;
-		case '<':   /* Search Title backward */
-			for(i=curmsg-1;i>-1;i--)
-				if(mail[i].subj==msg.idx.subj)
-					break;
-            if(i>-1)
-				curmsg=i;
-			else
-				domsg=0;
-			break;
-		case '}':   /* Search Author forward */
-			strcpy(str,msg.from);
-			for(i=curmsg+1;i<msgs;i++)
-				if(mail[i].from==msg.idx.from)
-					break;
-			if(i<msgs)
-				curmsg=i;
-			else
-				domsg=0;
-			break;
-		case 'N':   /* Got to next un-read message */
-			for(i=curmsg+1;i<msgs;i++)
-				if(!(mail[i].attr&MSG_READ))
-					break;
-			if(i<msgs)
-				curmsg=i;
-			else
-				domsg=0;
-            break;
-		case '{':   /* Search Author backward */
-			strcpy(str,msg.from);
-			for(i=curmsg-1;i>-1;i--)
-				if(mail[i].from==msg.idx.from)
-					break;
-			if(i>-1)
-				curmsg=i;
-			else
-				domsg=0;
-			break;
-		case ']':   /* Search To User forward */
-			strcpy(str,msg.to);
-			for(i=curmsg+1;i<msgs;i++)
-				if(mail[i].to==msg.idx.to)
-					break;
-			if(i<msgs)
-				curmsg=i;
-			else
-				domsg=0;
-			break;
-		case '[':   /* Search To User backward */
-			strcpy(str,msg.to);
-			for(i=curmsg-1;i>-1;i--)
-				if(mail[i].to==msg.idx.to)
-					break;
-			if(i>-1)
-				curmsg=i;
-			else
-				domsg=0;
-            break;
-		case 0:
-		case '+':
-			if(curmsg<msgs-1) curmsg++;
-			else done=1;
-			break;
-		case '-':
-			if(curmsg>0) curmsg--;
-			break;
-		case 'S':
-			domsg=0;
-/*
-			if(!yesno(text[SaveMsgToFile]))
-				break;
-*/
-			bputs(text[FileToWriteTo]);
-			if(getstr(str,40,K_LINE|K_UPPER))
-				msgtotxt(msg,str,1,1);
-			break;
-		case 'E':
-			editmsg(&msg,INVALID_SUB);
-			break;
-		case 'T':
-			domsg=0;
-			i=curmsg;
-			if(i) i++;
-			j=i+10;
-			if(j>msgs)
-				j=msgs;
-
-			if(which==MAIL_SENT)
-				bputs(text[MailSentLstHdr]);
-			else if(which==MAIL_ALL)
-				bputs(text[MailOnSystemLstHdr]);
-			else
-                bputs(text[MailWaitingLstHdr]);
-			for(;i<j;i++) {
-				if(msg.total_hfields)
-					smb_freemsgmem(&msg);
-				msg.total_hfields=0;
-				msg.idx.offset=mail[i].offset;
-				if(!loadmsg(&msg,mail[i].number))
-					continue;
-				smb_unlockmsghdr(&smb,&msg);
-				if(which==MAIL_ALL)
-					bprintf(text[MailOnSystemLstFmt]
-						,i+1,msg.from,msg.to
-						,msg.hdr.attr&MSG_DELETE ? '-'
-							: msg.hdr.attr&MSG_READ ? SP
-							: msg.from_net.type || msg.to_net.type ? 'N':'*'
-						,msg.subj);
-				else
-					bprintf(text[MailWaitingLstFmt],i+1
-						,which==MAIL_SENT ? msg.to
-						: (msg.hdr.attr&MSG_ANONYMOUS) && !SYSOP
-						? text[Anonymous] : msg.from
-						,msg.hdr.attr&MSG_DELETE ? '-'
-							: msg.hdr.attr&MSG_READ ? SP
-							: msg.from_net.type || msg.to_net.type ? 'N':'*'
-						,msg.subj);
-				smb_freemsgmem(&msg);
-				msg.total_hfields=0; }
-			curmsg=(i-1);
-			break;
-		case 'U':   /* user edit */
-			msg.hdr.number=msg.idx.number;
-			smb_getmsgidx(&smb,&msg);
-			useredit(which==MAIL_SENT ? msg.idx.to : msg.idx.from,0);
-			break;
-		case 'P':   /* Purge author and all mail to/from */
-			if(noyes(text[AreYouSureQ]))
-				break;
-            msg.hdr.number=msg.idx.number;
-            smb_getmsgidx(&smb,&msg);
-            purgeuser(msg.idx.from);
-			if(curmsg<msgs-1) curmsg++;
-            break;
-		case '?':
-			strcpy(str,which==MAIL_YOUR ? "MAILREAD" : which==MAIL_ALL
-					? "ALLMAIL" : "SENTMAIL");
-			menu(str);
-			if(SYSOP && which==MAIL_SENT)
-				menu("SYSSMAIL");
-			else if(SYSOP && which==MAIL_YOUR)
-				menu("SYSMAILR");   /* Sysop Mail Read */
-			domsg=0;
-			break;
-			} }
-
-if(msg.total_hfields)
-	smb_freemsgmem(&msg);
-
-if(msgs)
-    FREE(mail);
-
-/***************************************/
-/* Delete messages marked for deletion */
-/***************************************/
-
-if(sys_misc&SM_DELEMAIL) {
-	if((i=smb_locksmbhdr(&smb))!=0) 			/* Lock the base, so nobody */
-		errormsg(WHERE,ERR_LOCK,smb.file,i);	/* messes with the index */
-	else
-		delmail(usernumber,which); }
-
-smb_close(&smb);
-smb_stack(&smb,SMB_STACK_POP);
-}
-
diff --git a/src/sbbs2/main.c b/src/sbbs2/main.c
deleted file mode 100644
index ce05b9bf90..0000000000
--- a/src/sbbs2/main.c
+++ /dev/null
@@ -1,307 +0,0 @@
-#line 1 "MAIN.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/*********************************************************/
-/* Entry point to the BBS and the waitforcall() function */
-/*********************************************************/
-
-#include "sbbs.h"
-#include "cmdshell.h"
-
-csi_t	main_csi;
-uint	curshell=0;
-
-char onquiet=0,qwklogon;
-char term_ret=0;
-ulong connect_rate=0;	/* already connected at xbps */
-
-#if __OS2__
-void cbreakh(int sig)		 /* Ctrl-C */
-{
-sys_status|=SS_ABORT;
-signal(sig,cbreakh);
-}
-
-#else
-
-int cbreakh()	/* ctrl-break handler */
-{
-sys_status|=SS_ABORT;
-return(1);		/* 1 to continue, 0 to abort */
-}
-#endif
-
-/****************************************************************************/
-/* This is the entry point to the BBS from dos                              */
-/* No arguments are defined as of yet.                                      */
-/****************************************************************************/
-main(int argc, char *argv[])
-{
-	char	str[256];
-	int 	i,j,file,twenty;
-	node_t	node;
-
-startup(argc,argv);    /* startup code overlaid */
-
-while(1) {
-	
-	while(1) {
-		qwklogon=0;
-		twenty=0;
-
-		/* Reset TEXT.DAT */
-
-		for(i=0;i<TOTAL_TEXT;i++)
-			if(text[i]!=text_sav[i]) {
-				if(text[i]!=nulstr)
-					FREE(text[i]);
-				text[i]=text_sav[i]; }
-
-		/* Reset COMMAND SHELL */
-
-		if(main_csi.cs)
-			FREE(main_csi.cs);
-		if(main_csi.str)
-			FREE(main_csi.str);
-		freevars(&main_csi);
-		memset(&main_csi,0,sizeof(csi_t));
-		main_csi.str=MALLOC(1024);
-		if(!main_csi.str) {
-			errormsg(WHERE,ERR_ALLOC,"command shell",1024);
-			bail(1); }
-		memset(main_csi.str,0,1024);
-		menu_dir[0]=0;
-		twenty+=10;
-
-		/* Reset Global Variables */
-
-		if(global_str_var)
-			for(i=0;i<global_str_vars;i++)
-				if(global_str_var[i]) {
-					FREE(global_str_var[i]);
-					global_str_var[i]=0; }
-		if(global_str_var) {
-			FREE(global_str_var);
-			global_str_var=0; }
-		if(global_str_var_name) {
-			FREE(global_str_var_name);
-			global_str_var_name=0; }
-		global_str_vars=0;
-		if(global_int_var) {
-			FREE(global_int_var);
-			global_int_var=0; }
-		if(global_int_var_name) {
-			FREE(global_int_var_name);
-			global_int_var_name=0; }
-		global_int_vars=0;
-		twenty*=2;
-
-		if(waitforcall())		/* Got caller/logon */
-			break; }
-
-	if(qwklogon) {
-		getsmsg(useron.number);
-        qwk_sec();
-        hangup();
-		logout();
-        continue; }
-
-	while(useron.number && (main_csi.misc&CS_OFFLINE_EXEC || online)) {
-
-		if(!main_csi.cs || curshell!=useron.shell) {
-			if(useron.shell>=total_shells)
-				useron.shell=0;
-			sprintf(str,"%s%s.BIN",exec_dir,shell[useron.shell]->code);
-			if((file=nopen(str,O_RDONLY|O_BINARY))==-1) {
-				errormsg(WHERE,ERR_OPEN,str,O_RDONLY|O_BINARY);
-				hangup();
-				break; }
-			if(main_csi.cs)
-				FREE(main_csi.cs);
-			freevars(&main_csi);
-			clearvars(&main_csi);
-
-			main_csi.length=filelength(file);
-			if((main_csi.cs=(uchar *)MALLOC(main_csi.length))==NULL) {
-				close(file);
-				errormsg(WHERE,ERR_ALLOC,str,main_csi.length);
-				hangup();
-				break; }
-
-			if(lread(file,main_csi.cs,main_csi.length)!=main_csi.length) {
-				errormsg(WHERE,ERR_READ,str,main_csi.length);
-				close(file);
-				FREE(main_csi.cs);
-                main_csi.cs=NULL;
-				hangup();
-				break; }
-			close(file);
-
-			main_csi.ip=main_csi.cs;
-			curshell=useron.shell;
-			menu_dir[0]=0;
-			menu_file[0]=0;
-		#ifdef __MSDOS__
-			freedosmem=farcoreleft();
-		#endif
-			}
-		if(exec(&main_csi))
-			break;
-
-		if(!(main_csi.misc&CS_OFFLINE_EXEC))
-			checkline();
-
-#if 0
-		if(freedosmem!=farcoreleft()) {
-			if(freedosmem>farcoreleft())
-				errormsg(WHERE,ERR_CHK,"memory",freedosmem-farcoreleft());
-			freedosmem=farcoreleft(); }
-#endif
-		}
-	logout();
-	catsyslog(0);
-	if(!REALSYSOP || sys_misc&SM_SYSSTAT)
-		logoffstats();	/* Updates both system and node dsts.dab files */
-	if(qoc) {
-		while(!wfc_events(time(NULL)))
-			;
-		catsyslog(0);
-		if(qoc==1)
-			offhook();
-		lclini(node_scrnlen);
-		lputc(FF);
-		bail(0); }
-	}
-}
-
-/************************************/
-/* encrypted string output function */
-/************************************/
-char *decrypt(ulong l[], char *instr)
-{
-	static char str[128];
-    uchar ch,bits,len;
-	ushort i,j,lc=0;
-
-len=(uchar)(l[0]&0x7f)^0x49;
-bits=7;
-for(i=0,j=0;i<len;i++) {
-    ch=(char)((l[j]>>bits)&0x7fL);
-    ch^=(i^0x2c);
-	str[lc++]=ch;
-    bits+=7;
-    if(bits>=26 && i+1<len) {
-		if(bits==32)
-			ch=0;
-		else
-			ch=(char)((l[j]>>bits)&0x7fL);
-        bits=(32-bits);
-        j++;
-        ch|=((l[j]&0x7f)<<(bits))&0x7f;
-        i++;
-        ch^=(i^0x2c);
-        bits=7-bits;
-		str[lc++]=ch; } }
-str[lc]=0;
-if(instr) {
-	strcpy(instr,str);
-	return(instr); }
-else
-	return(str);
-}
-
-/****************************************************************************/
-/* Writes NODE.LOG at end of SYSTEM.LOG										*/
-/****************************************************************************/
-void catsyslog(int crash)
-{
-	char str[256];
-	char HUGE16 *buf;
-	int  i,file;
-	ulong length;
-
-if(sys_status&SS_LOGOPEN) {
-	if(close(logfile)) {
-		errormsg(WHERE,ERR_CLOSE,"logfile",0);
-		return; }
-	sys_status&=~SS_LOGOPEN; }
-sprintf(str,"%sNODE.LOG",node_dir);
-if((file=nopen(str,O_RDONLY))==-1) {
-	errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-	return; }
-length=filelength(file);
-if(length) {
-	if((buf=(char HUGE16 *)LMALLOC(length))==NULL) {
-		close(file);
-		errormsg(WHERE,ERR_ALLOC,str,length);
-		return; }
-	if(lread(file,buf,length)!=length) {
-		close(file);
-		errormsg(WHERE,ERR_READ,str,length);
-		FREE((char *)buf);
-		return; }
-	close(file);
-	now=time(NULL);
-	unixtodos(now,&date,&curtime);
-	sprintf(str,"%sLOGS\\%2.2d%2.2d%2.2d.LOG",data_dir,date.da_mon,date.da_day
-		,TM_YEAR(date.da_year-1900));
-	if((file=nopen(str,O_WRONLY|O_APPEND|O_CREAT))==-1) {
-		errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_APPEND|O_CREAT);
-		FREE((char *)buf);
-		return; }
-	if(lwrite(file,buf,length)!=length) {
-		close(file);
-		errormsg(WHERE,ERR_WRITE,str,length);
-		FREE((char *)buf);
-		return; }
-	close(file);
-	if(crash) {
-		for(i=0;i<2;i++) {
-			sprintf(str,"%sCRASH.LOG",i ? data_dir : node_dir);
-			if((file=nopen(str,O_WRONLY|O_APPEND|O_CREAT))==-1) {
-				errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_APPEND|O_CREAT);
-				FREE((char *)buf);
-				return; }
-			if(lwrite(file,buf,length)!=length) {
-				close(file);
-				errormsg(WHERE,ERR_WRITE,str,length);
-				FREE((char *)buf);
-				return; }
-			close(file); } }
-	FREE((char *)buf); }
-else
-	close(file);
-sprintf(str,"%sNODE.LOG",node_dir);
-if((logfile=nopen(str,O_WRONLY|O_TRUNC))==-1) /* Truncate NODE.LOG */
-	errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_TRUNC);
-else sys_status|=SS_LOGOPEN;
-}
-
-void quicklogonstuff()
-{
-	int i;
-	node_t node;
-
-reset_logon_vars();
-
-lclini(node_scrnlen-1);
-if(com_port && !DCDHIGH)				/* don't take phone offhook if */
-	offhook();							/* connected */
-useron.number=1;
-getuserdat(&useron);
-autoterm=ANSI;
-if(!useron.number)
-	useron.level=99;
-console=CON_L_ECHO|CON_L_INPUT;
-online=ON_LOCAL;
-statline=sys_def_stat;
-statusline();
-answertime=logontime=time(NULL);
-sprintf(connection,"%.*s",LEN_MODEM,text[Locally]);
-cur_rate=14400;
-cur_cps=1750;
-sys_status|=SS_USERON;
-}
-
-
diff --git a/src/sbbs2/main_ovl.c b/src/sbbs2/main_ovl.c
deleted file mode 100644
index df989db688..0000000000
--- a/src/sbbs2/main_ovl.c
+++ /dev/null
@@ -1,839 +0,0 @@
-#line 1 "MAIN_OVL.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-#include "etext.h"
-#include <signal.h>
-
-#ifndef __FLAT__
-#include "spawno.h"
-#endif
-
-uint asmrev;		// RCIOL.OBJ revision
-char llo=0			// Local logon only
-	,nmi=0; 		// No modem init
-char cidarg[65];	// Caller ID arguments
-uint addrio;		// Additional RIOCTL call on init
-
-FILE *nodefile_fp,*node_ext_fp,*logfile_fp;
-
-char prompt[128];
-
-extern char *compile_time,*compile_date;
-
-#ifdef __FLAT__
-int mswtyp=0;
-#else
-extern mswtyp;
-extern uint riobp;
-#endif
-
-extern char onquiet;
-extern char term_ret;
-extern ulong connect_rate;	 /* already connected at xbps */
-extern char *wday[],*mon[];
-
-#ifdef __OS2__
-extern long _timezone=0L;
-extern int _daylight=0L;
-#else
-extern long timezone=0L;
-extern int	daylight=0L;
-#endif
-
-#ifdef __OS2__
-	extern HEV con_out_sem;
-	void con_out_thread(void *);
-#endif
-
-
-#ifdef __OS2__
-void cbreakh(int sig);
-#else
-int cbreakh();
-#endif
-
-void reset_logon_vars(void);
-
-time_t checktime(void)
-{
-	struct tm tm;
-
-memset(&tm,0,sizeof(tm));
-tm.tm_year=94;
-tm.tm_mday=1;
-return(mktime(&tm)^0x2D24BD00L);
-}
-
-void console_test(void)
-{
-	int i;
-	time_t start=time(NULL);;
-
-lclxy(1,1);
-online=ON_LOCAL;
-console=CON_L_ECHO;
-useron.misc=ANSI|COLOR;
-for(i=0;i<500;i++)
-	bprintf("\1n%05d\t\1hWhite\1rRed\1bBlue\1gGreen\001\x82"
-		"\1mMagenta\t\b\b\1cCyan\1nNormal\1gGreen"
-		"\1yBrown\1hYellow\1rR\1gG\1bB\1cC\1mM\1yY\1kK"
-		"\1>\r\n"
-		,i);
-bprintf("\r\n%lu secs\r\n",time(NULL)-start);
-getch();
-lputc(FF);
-}
-
-
-
-
-void  startup(int argc, char *argv[])
-{
-	char str[256],HUGE16 *buf,c;
-    void *v;
-	int i,j,events_only=0;
-    int file;
-    ulong l;
-	node_t node;
-    struct ffblk ff;
-    struct tm *gm;
-#ifdef __FLAT__
-	uchar *cptab;	/* unused */
-#else
-	uchar cptab[1024];
-    union REGS reg;
-#endif
-
-#ifdef __MSDOS__
-setcbrk(0);
-#endif
-
-#ifndef __FLAT__
-if((asmrev=*(&riobp-1))!=23) {
-    printf("Wrong rciol.obj\n");
-    exit(1); }
-#endif
-
-#ifdef __OS2__
-signal(SIGINT,cbreakh);
-signal(SIGBREAK,cbreakh);
-fixkbdmode();
-#elif defined(__MSDOS__)
-ctrlbrk(cbreakh);
-#endif
-
-#ifndef __FLAT__				/* no DESQview under OS/2 */
-inDV = 0;
-_CX = 0x4445; /* 'DE' */        /* set CX to 4445H; DX to 5351H     */
-_DX = 0x5351; /* 'SQ' */        /* (an invalid date)                */
-_AX = 0x2B01;					/* DOS' set data function           */
-geninterrupt( 0x21 );			/* call DOS 						*/
-if ( _AL != 0xFF )				/* if DOS didn't see as invalid     */
-	_AX = _BX;					/* AH=major ver; AL=minor ver		*/
-else							/* DOS saw as invalid				*/
-	_AX = 0;					/* no desqview						*/
-inDV = _AX; 					/* Save version in inDV flag		*/
-#endif
-
-#ifdef __FLAT__
-if(putenv("TZ=UCT0"))
-	printf("putenv() failed!\n");
-tzset();
-#endif
-
-if((l=checktime())!=0) {   /* Check binary time */
-	printf("Time problem (%08lx)\n",l);
-	exit(1); }
-
-directvideo=1;  /* default to direct video */
-
-_fmode=O_BINARY;
-nulstr="";
-crlf="\r\n";
-strcpy(cap_fname,"CAPTURE.TXT");
-sys_status=lncntr=tos=criterrs=keybufbot=keybuftop=lbuflen=slcnt=0L;
-debug=1;
-curatr=LIGHTGRAY;
-errorlevel=0;
-logcol=1;
-next_event=0;
-lastuseron[0]=0;
-emsver=0;
-emshandle=0xffff;
-randomize();
-srand(clock());
-
-for(i=0;i<127 && environ[i];i++)  /* save original environment for execl() */
-	envp[i]=environ[i];
-envp[i]=0;
-
-strcpy(str,getenv("PROMPT"));
-if(!strstr(str,"[SBBS]")) {
-	sprintf(prompt,"PROMPT=[SBBS] %s",str);
-	putenv(prompt); }
-
-comspec=getenv("COMSPEC");
-
-lputc(FF);
-
-#ifndef __FLAT__
-node_scrnlen=lclini(0xd<<8);      /* Tab expansion, no CRLF expansion */
-#else
-node_scrnlen=25;
-#endif
-lclini(node_scrnlen);
-lclatr(LIGHTGRAY);
-
-#ifdef __OS2__	// Test console speed
-
-if(DosCreateEventSem(NULL,&con_out_sem,0,0)) {
-	printf("Can't create console output semaphore.\n");
-	exit(2); }
-
-if(_beginthread(con_out_thread,1024,NULL)==-1) {
-	printf("Can't start console output thread.\n");
-	exit(3); }
-//console_test();
-#endif
-
-#if defined(__OS2__)
-lputs(decrypt(VersionNoticeOS2,0));
-#elif defined(__WIN32__)
-lputs(decrypt(VersionNoticeW32,0));
-#else
-lputs(decrypt(VersionNoticeDOS,0));
-#endif
-lputs(decrypt(CopyrightNotice,0));	 /* display copyright notice */
-lputc(CR);
-lputc(LF);
-cidarg[0]=0;
-addrio=0;
-strcpy(orgcmd,argv[0]);     /* build up original command line */
-strcat(orgcmd," ");
-for(i=1;i<argc;i++) {
-    for(c=0;c<strlen(argv[i]);c++)
-        switch(toupper(argv[i][c])) {
-            case '/':   /* ignore these characters */
-            case '-':
-                break;
-            case 'B':   /* desqview or other that needs bios video only */
-                directvideo=0;
-                strcat(orgcmd,"B");
-                break;
-            case 'C':   /* connected at xbps */
-				connect_rate=atol(argv[i]+c+1);
-                c=strlen(argv[i]);
-                break;
-			case 'D':   /* assume DCD is always high */
-				sys_status|=SS_DCDHIGH;
-				strcat(orgcmd,"D");
-				break;
-			case 'E':
-				next_event=time(NULL)+(atol(argv[i]+c+1)*60L);
-				c=strlen(argv[i]);
-				break;
-			case 'F':
-				sys_status|=SS_DAILY;
-				break;
-#ifdef __OS2__
-			case 'H':
-				rio_handle=atoi(argv[i]+c+1);
-				c=strlen(argv[i]);
-				break;
-#endif
-			case 'I':   /* no modem init */
-				strcat(orgcmd,"I");
-				nmi=1;
-				break;
-			case 'L':   /* local logon only */
-				strcat(orgcmd,"L");
-				llo=1;
-				break;
-			case 'M':   /* modem debug info */
-				strcat(orgcmd,"M");
-				sys_status|=SS_MDMDEBUG;
-				break;
-			case 'O':   /* execute events only */
-				events_only=1;
-				break;
-            case 'Q':   /* quit after one caller - phone off hook */
-                strcat(orgcmd,"Q");
-                qoc=1;
-                break;
-			case 'R':   /* additional rioctl call */
-				addrio=ahtoul(argv[i]+c+1);
-				c=strlen(argv[i]);
-				break;
-            case 'X':   /* quit after one caller - phone on hook */
-                strcat(orgcmd,"X");
-                qoc=2;
-                break;
-			case 'Z':
-				sprintf(cidarg,"%-.64s",argv[i]+c+1);
-                c=strlen(argv[i]);
-				break;
-			case 'V':
-				lputs(crlf);
-				lprintf("Revision %c%s %s %.5s  "
-				#ifdef __FLAT__
-					"RIOLIB %u.%02u"
-				#else
-					"RCIOL %u"
-				#endif
-					"  SMBLIB %s  BCC %X.%02X"
-					,REVISION,BETA,compile_date,compile_time
-				#ifdef __FLAT__
-					,rioctl(GVERS)/100,rioctl(GVERS)%100
-				#else
-					,rioctl(GVERS)
-				#endif
-					,smb_lib_ver()
-					,__BORLANDC__>>8
-					,__BORLANDC__&0xff);
-				lputs(crlf);
-				bail(0);
-            default:
-				lputs("\r\nusage: sbbs [bdmoqxfliv] [c#] [e#] [zs] [r#] [h#]"
-					"\r\n\r\n"
-                    "b  = use bios for video\r\n"
-					"d  = assume DCD is always high\r\n"
-					"m  = modem debug output\r\n"
-                    "q  = quit after one call (phone off hook)\r\n"
-                    "x  = quit after one call\r\n"
-					"o  = execute events only and then quit\r\n"
-					"c# = connected at # bps (ex: c2400)\r\n"
-					"e# = external event in # minutes (ex: e30)\r\n"
-					"f  = force daily event\r\n"
-					"l  = local logon only\r\n"
-					"i  = no modem initialization\r\n"
-					"zs = use s for caller-id information\r\n"
-					"r# = additional rioctl call during port init\r\n"
-					"h# = open port handle (SBBS4OS2 only)\r\n"
-					"v  = version information\r\n"
-					);
-                bail(0); } }
-
-
-node_disk=getdisk();
-getcwd(node_dir,MAXDIR);        /* Get current Directory    */
-if(strlen(node_dir)>40) {
-    lputs("\r\n\7Current Directory is too long for bbs to run reliably.\r\n");
-    bail(1); }
-strcat(node_dir,"\\");
-initdata();                     /* auto-sense scrnlen can be overridden */
-
-mswtyp=0;
-if(node_misc&NM_INT28)
-	mswtyp|=TS_INT28;
-if(node_misc&NM_WINOS2)
-	mswtyp|=TS_WINOS2;
-if(node_misc&NM_NODV)
-	mswtyp|=TS_NODV;
-
-#ifndef __FLAT__
-
-__spawn_ext = (node_swap & SWAP_EXT) != 0 ;
-__spawn_ems = (node_swap & SWAP_EMS) != 0 ;
-__spawn_xms = (node_swap & SWAP_XMS) != 0 ;
-
-#endif
-
-#ifndef __FLAT__				 /* no EMS under OS/2 */
-if(node_misc&NM_EMSOVL) {
-	lputs("\r\nEMS: ");
-	if((i=open("EMMXXXX0",O_RDONLY))==-1)
-		lputs("not installed.");
-	else {
-		close(i);
-		reg.h.ah=0x46;			/* Get EMS version */
-		int86(0x67,&reg,&reg);
-		if(reg.h.ah)
-			lputs("\7error getting version.");
-		else {
-			lprintf("Version %u.%u ",(reg.h.al&0xf0)>>4,reg.h.al&0xf);
-			emsver=reg.h.al;
-			reg.h.ah=0x4b;		/* get handle count */
-			int86(0x67,&reg,&reg);
-			if(reg.h.ah)
-				lputs("\7error getting handle count.");
-			else {
-				if(_OvrInitEms(0,0,23))    /* use up to 360K */
-					lprintf("allocation failed.");
-				else
-					emshandle=reg.x.bx; } } } }
-#endif
-
-sprintf(str,"%s%s",ctrl_dir,"NODE.DAB");
-if((nodefile_fp=fnopen(&nodefile,str
-	,O_DENYNONE|O_RDWR|O_CREAT))==NULL) {
-    lprintf("\r\n\7Error opening/creating %s\r\n",str);
-    exit(1); }
-sprintf(str,"%s%s",ctrl_dir,"NODE.EXB");
-if((node_ext_fp=fnopen(&node_ext,str,O_DENYNONE|O_RDWR|O_CREAT))==NULL) {
-    lprintf("\r\n\7Error opening/creating %s\r\n",str);
-    exit(1); }
-memset(&node,0,sizeof(node_t));  /* write NULL to node struct */
-node.status=NODE_OFFLINE;
-while(filelength(nodefile)<sys_nodes*sizeof(node_t)) {
-    lseek(nodefile,0L,SEEK_END);
-    write(nodefile,&node,sizeof(node_t)); }
-if(lock(nodefile,(node_num-1)*sizeof(node_t),sizeof(node_t))
-	|| unlock(nodefile,(node_num-1)*sizeof(node_t),sizeof(node_t))) {
-    lprintf("\r\n\7File locking failed.\r\n");
-
-#ifndef __FLAT__			 /* no SHARE under Win32 and OS/2 */
-    reg.x.ax=0x1000;
-    int86(0x2f,&reg,&reg);
-	if(!reg.h.al) {
-        lputs("SHARE is not installed. Must run SHARE before SBBS.\r\n");
-		lputs("SHARE.EXE is included with DOS v3.0 and higher.\r\n"); }
-    else if(reg.h.al==1)
-        lputs("SHARE is not installed and NOT OKAY to install.\r\n");
-    else if(reg.h.al==0xff)
-        lputs("SHARE is installed.\r\n");
-    else
-        lprintf("INT 2F returned %xh in AL.\r\n",reg.h.al);
-#endif
-
-    bail(1); }
-sys_status|=SS_NODEDAB; /* says that node.dab is okay to use */
-getnodedat(node_num,&thisnode,1);
-
-/* if not returning, clear node.dab record */
-if(!connect_rate) {
-	thisnode.status=thisnode.action=thisnode.useron=0;
-    thisnode.aux=0; /* use to always clear */
-    thisnode.misc&=NODE_EVENT; }    /* turn off all misc bits but event */
-criterrs=thisnode.errors;
-putnodedat(node_num,thisnode);
-
-if(com_base==0xb)
-	rioctl(I14PC);
-else if(com_base==0xd)
-	rioctl(I14DB);
-else if(com_base==0xe)
-	rioctl(I14PS);
-else if(com_base==0xf)
-	rioctl(I14FO);
-if(com_port) {
-    comini();
-	setrate(); }
-
-for(i=0;i<total_qhubs;i++) {
-	if(qhub[i]->node!=node_num)
-		continue;
-	for(j=0;j<10;j++) {
-		sprintf(str,"%s%s.QW%c",data_dir,qhub[i]->id,j ? (j-1)+'0' : 'K');
-		if(fexist(str)) {
-			lclini(node_scrnlen-1);
-			delfiles(temp_dir,"*.*");
-			unpack_qwk(str,i); } } }
-
-sprintf(str,"%sTIME.DAB",ctrl_dir);
-if((file=nopen(str,O_RDWR|O_CREAT))==-1) {
-    lprintf("Error opening/creating %s\r\n",str);
-    bail(1); }
-for(i=0;i<total_events;i++) {
-	event[i]->last=0;
-	if(filelength(file)<sizeof(time_t)*(i+1))
-		write(file,&event[i]->last,sizeof(time_t));
-	else
-		read(file,&event[i]->last,sizeof(time_t)); }
-
-close(file);
-
-sprintf(str,"%sQNET.DAB",ctrl_dir);
-if((file=nopen(str,O_RDWR|O_CREAT))==-1) {
-    lprintf("Error opening/creating %s\r\n",str);
-    bail(1); }
-
-for(i=0;i<total_qhubs;i++) {
-	qhub[i]->last=0;
-	if(filelength(file)<sizeof(time_t)*(i+1))
-		write(file,&qhub[i]->last,sizeof(time_t));
-    else
-		read(file,&qhub[i]->last,sizeof(time_t)); }
-
-close(file);
-
-sprintf(str,"%sPNET.DAB",ctrl_dir);
-if((file=nopen(str,O_RDWR|O_CREAT))==-1) {
-    lprintf("Error opening/creating %s\r\n",str);
-    bail(1); }
-
-for(i=0;i<total_phubs;i++) {
-	phub[i]->last=0;
-	if(filelength(file)<sizeof(time_t)*(i+1))
-        write(file,&phub[i]->last,sizeof(time_t));
-    else
-        read(file,&phub[i]->last,sizeof(time_t)); }
-
-close(file);
-
-sprintf(str,"%sNODE.LOG",node_dir);
-lprintf("\r\nOpening %s...",str);
-if((logfile_fp=fnopen(&logfile,str,O_WRONLY|O_CREAT|O_APPEND|O_DENYALL))==NULL) {
-	lprintf("\r\n\7Error opening %s\r\n\r\n"
-		"Perhaps this node is already running.\r\n",str);
-    bail(1); }
-lprintf("\r%s opened.",str);
-sys_status|=SS_LOGOPEN;
-if(filelength(logfile)) {
-	log(crlf);
-	now=time(NULL);
-    gm=localtime(&now);
-	sprintf(str,"%02d:%02d%c  %s %s %02d %u  "
-		"End of preexisting log entry (possible crash)"
-		,gm->tm_hour>12 ? gm->tm_hour-12 : gm->tm_hour==0 ? 12 : gm->tm_hour
-		,gm->tm_min,gm->tm_hour>=12 ? 'p' : 'a',wday[gm->tm_wday]
-		,mon[gm->tm_mon],gm->tm_mday,gm->tm_year+1900);
-	logline("L!",str);
-	log(crlf);
-	catsyslog(1); }
-lputc(CLREOL);
-sprintf(dszlog,"DSZLOG=%sPROTOCOL.LOG",node_dir);
-putenv(dszlog); 		/* Makes the DSZ LOG active */
-sprintf(sbbsnode,"SBBSNODE=%s",node_dir);
-putenv(sbbsnode);		/* create enviornment var to contain node num */
-sprintf(sbbsnnum,"SBBSNNUM=%d",node_num);
-putenv(sbbsnnum);	   /* create enviornment var to contain node num */
-backout();
-if(events_only) {
-	reset_logon_vars();
-	while(!wfc_events(time(NULL)))
-		;
-	bail(0); }
-}
-
-/****************************************************************************/
-/* Reads data from DSTS.DAB into stats structure                            */
-/* If node is zero, reads from ctrl\dsts.dab, otherwise from each node		*/
-/****************************************************************************/
-void getstats(char node,stats_t *stats)
-{
-    char str[256];
-    int file;
-
-sprintf(str,"%sDSTS.DAB",node ? node_path[node-1] : ctrl_dir);
-if((file=nopen(str,O_RDONLY))==-1) {
-	errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-    return; }
-lseek(file,4L,SEEK_SET);    /* Skip update time/date */
-read(file,stats,sizeof(stats_t));
-close(file);
-}
-
-
-/****************************************************************************/
-/* Updates dstst.dab file upon user logoff. 								*/
-/* First node, then system stats.                                           */
-/****************************************************************************/
-void logoffstats()
-{
-    char str[256];
-    int i,file;
-    stats_t stats;
-
-for(i=0;i<2;i++) {
-    sprintf(str,"%sDSTS.DAB",i ? ctrl_dir : node_dir);
-    if((file=nopen(str,O_RDWR))==-1) {
-		errormsg(WHERE,ERR_OPEN,str,O_RDWR);
-        return; }
-    lseek(file,12L,SEEK_SET);   /* Skip timestamp, logons and logons today */
-    read(file,&stats.timeon,4);   /* Total time on system  */
-	stats.timeon+=(now-logontime)/60;
-    read(file,&stats.ttoday,4); /* Time today on system  */
-	stats.ttoday+=(now-logontime)/60;
-    read(file,&stats.uls,4);        /* Uploads today         */
-    stats.uls+=logon_uls;
-    read(file,&stats.ulb,4);        /* Upload bytes today    */
-    stats.ulb+=logon_ulb;
-    read(file,&stats.dls,4);        /* Downloads today       */
-    stats.dls+=logon_dls;
-    read(file,&stats.dlb,4);        /* Download bytes today  */
-    stats.dlb+=logon_dlb;
-	read(file,&stats.ptoday,4); 	/* Posts today			 */
-	if(!(useron.rest&FLAG('Q')))
-		stats.ptoday+=logon_posts;
-    read(file,&stats.etoday,4); /* Emails today          */
-    stats.etoday+=logon_emails;
-    read(file,&stats.ftoday,4); /* Feedback sent today  */
-    stats.ftoday+=logon_fbacks;
-	read(file,&stats.nusers,2); /* New users today		*/
-	if(sys_status&SS_NEWUSER)
-		stats.nusers++;
-    lseek(file,12L,SEEK_SET);
-	write(file,&stats.timeon,4);	/* Total time on system  */
-    write(file,&stats.ttoday,4);    /* Time today on system  */
-    write(file,&stats.uls,4);       /* Uploads today         */
-    write(file,&stats.ulb,4);       /* Upload bytes today    */
-    write(file,&stats.dls,4);       /* Downloads today       */
-    write(file,&stats.dlb,4);       /* Download bytes today  */
-    write(file,&stats.ptoday,4);    /* Posts today           */
-    write(file,&stats.etoday,4);    /* Emails today          */
-	write(file,&stats.ftoday,4);	/* Feedback sent today	 */
-	write(file,&stats.nusers,2);	/* New users today		 */
-    close(file); }
-
-}
-
-/****************************************************************************/
-/* Lists system statistics for everyday the bbs has been running.           */
-/* Either for the current node (node=1) or the system (node=0)              */
-/****************************************************************************/
-void printstatslog(uint node)
-{
-    char str[256];
-    uchar *buf;
-    int file;
-    time_t timestamp;
-    long l;
-    ulong   length,
-            logons,
-            timeon,
-            posts,
-            emails,
-            fbacks,
-            ulb,
-            uls,
-            dlb,
-            dls;
-
-if(node)
-    bprintf(text[NodeStatsLogHdr],node);
-else
-    bputs(text[SysStatsLogHdr]);
-sprintf(str,"%sCSTS.DAB",node ? node_path[node-1] : ctrl_dir);
-if((file=nopen(str,O_RDONLY))==-1)
-    return;
-length=filelength(file);
-if(length<40) {
-    close(file);
-    return; }
-if((buf=(char *)MALLOC(length))==0) {
-    close(file);
-	errormsg(WHERE,ERR_ALLOC,str,length);
-    return; }
-read(file,buf,length);
-close(file);
-l=length-4;
-while(l>-1L && !msgabort()) {
-    fbacks=buf[l]|((long)buf[l+1]<<8)|((long)buf[l+2]<<16)
-        |((long)buf[l+3]<<24);
-    l-=4;
-    emails=buf[l]|((long)buf[l+1]<<8)|((long)buf[l+2]<<16)
-        |((long)buf[l+3]<<24);
-    l-=4;
-    posts=buf[l]|((long)buf[l+1]<<8)|((long)buf[l+2]<<16)
-        |((long)buf[l+3]<<24);
-    l-=4;
-    dlb=buf[l]|((long)buf[l+1]<<8)|((long)buf[l+2]<<16)
-        |((long)buf[l+3]<<24);
-    l-=4;
-    dls=buf[l]|((long)buf[l+1]<<8)|((long)buf[l+2]<<16)
-        |((long)buf[l+3]<<24);
-    l-=4;
-    ulb=buf[l]|((long)buf[l+1]<<8)|((long)buf[l+2]<<16)
-        |((long)buf[l+3]<<24);
-    l-=4;
-    uls=buf[l]|((long)buf[l+1]<<8)|((long)buf[l+2]<<16)
-        |((long)buf[l+3]<<24);
-    l-=4;
-    timeon=buf[l]|((long)buf[l+1]<<8)|((long)buf[l+2]<<16)
-        |((long)buf[l+3]<<24);
-    l-=4;
-    logons=buf[l]|((long)buf[l+1]<<8)|((long)buf[l+2]<<16)
-        |((long)buf[l+3]<<24);
-    l-=4;
-    timestamp=buf[l]|((long)buf[l+1]<<8)|((long)buf[l+2]<<16)
-        |((long)buf[l+3]<<24);
-    l-=4;
-    unixtodos(timestamp-(24*60*60),&date,&curtime); /* 1 day less than stamp */
-    bprintf(text[SlogFmt]
-        ,date.da_mon,date.da_day,TM_YEAR(date.da_year-1900),timeon,logons,posts,emails
-        ,fbacks,ulb/1024,uls,dlb/1024,dls); }
-FREE(buf);
-}
-
-#ifdef __OS2__
-#define INPUT_LOOP 1000
-#else
-#define INPUT_LOOP 1000
-#endif
-
-/****************************************************************************/
-/* Terminal mode                                                            */
-/* Returns 1 if it is to logon locally, 0 if it is done.                    */
-/****************************************************************************/
-char terminal()
-{
-    char str[256],c,x,y,*p;
-	int file;
-	uint i,l;
-
-lclini(node_scrnlen-1);
-statline=-1;
-statusline();
-if(!term_ret) {
-#ifdef __FLAT__
-	setbaud(com_rate);
-#else
-	setbaud((uint)(com_rate&0xffffL));
-#endif
-	mdmcmd(mdm_term); }
-else
-    lputs("\r\nReturned.\r\n");
-
-l=0;    /* l is the ansi response code counter */
-
-while(1) {
-    if(lkbrd(1)) {
-        i=lkbrd(0);
-        if((i&0xff)==0) {
-            i>>=8;
-			if(i==45) { 			/* Alt-X */
-                rioctl(0x11);
-				if(DCDHIGH) {
-                    lputs("\r\nHang up (Yes/No/Abort) ? ");
-					c=toupper(getch());
-					if(c!='Y' && c!='N') {  /* Hang-up Y/N/Abort */
-                        lputs("Abort\r\n");
-                        continue; }
-					if(c=='Y') {    /* Yes, hang-up */
-						if(mdm_misc&MDM_NODTR)
-							mdmcmd(mdm_hang);
-						else
-							if(dtr(15))
-								lputs("Dropping DTR Failed"); } }
-                break; }
-			else if(i==35) {		/* Alt-H */
-				if(mdm_misc&MDM_NODTR)
-					mdmcmd(mdm_hang);
-				else
-					if(dtr(15))
-						lputs("Dropping DTR Failed\r\n");
-                dtr(1); }
-			else if((i>=0x3b &&i<=0x44) || (i>=0x54 &&i<=0x71)
-				|| (i>=0x85 &&i<=0x8c)) {
-                sprintf(str,"%s%sF%d.MAC",text_dir
-                    ,i<0x45 || (i>=0x85 && i<=0x86) ? nulstr
-                    :i<0x5e || (i>=0x87 && i<=0x88) ? "SHFT-"
-                    :i<0x68 || (i>=0x89 && i<=0x8a) ? "CTRL-" : "ALT-"
-                    ,i<0x45 ? i-0x3a : i<0x5e ? i-0x53 : i<0x68 ? i-0x5d
-                    :i<0x72 ? i-0x67 : i<0x87 ? i-0x7a : i<0x89 ? i-0x7c
-                    :i<0x8b ? i-0x7e : i-0x80);
-                if((file=nopen(str,O_RDONLY))==-1)
-                    continue;
-                i=filelength(file);
-                while(i--) {
-                    read(file,&c,1);
-                    if(c!=LF)
-                        putcomch(c); }
-                close(file); }
-			else if(i==0x48)	/* up arrow */
-				putcom("\x1b[A");
-			else if(i==0x50)	/* dn arrow */
-				putcom("\x1b[B");
-			else if(i==0x4b)	/* left */
-				putcom("\x1b[D");
-			else if(i==0x4d)	/* right */
-				putcom("\x1b[C");
-            else if(i==0x16) {  /* Alt-U User Edit */
-				if((p=MALLOC((node_scrnlen*80)*2))==NULL) {
-                    lputs("Allocation error.\r\n");
-                    continue; }
-                gettext(1,1,80,node_scrnlen,p);
-                x=lclwx();
-                y=lclwy();
-                quicklogonstuff();
-				useredit(0,1);
-                puttext(1,1,80,node_scrnlen,p);
-				FREE(p);
-                lclxy(x,y); }
-            else if(i==0x26) { /* Alt-L logon locally */
-                lputc(FF);
-                quicklogonstuff();
-                if(!useron.number) {
-                    lputc(7);
-                    lputs("A Sysop account hasn't been created");
-                    continue; }
-                term_ret=1;
-                return(1); }
-            else if(i==0x20) {  /* Alt-D Shell to DOS */
-				if((p=MALLOC((node_scrnlen*80)*2))==NULL) {
-                    lputs("Allocation error.\r\n");
-                    continue; }
-                gettext(1,1,80,node_scrnlen,p);
-                x=lclwx();
-                y=lclwy();
-                lclini(node_scrnlen);
-                lputc(FF);
-				external(comspec,0);
-                puttext(1,1,80,node_scrnlen,p);
-				FREE(p);
-                lclxy(x,y); } }
-		else {
-			putcomch(i);
-			continue; } }
-	for(i=0;i<INPUT_LOOP;i++) {
-        if((c=incom())!=0) {
-			if(c==ESC)
-                l=!l;
-            else if(l) {
-                if(c=='[') {
-                    if(l!=1) l=0; else l++; }
-                else if(c=='6') {
-                    if(l!=2) l=0; else l++; }
-                else if(c=='n') {
-                    if(l==3) {
-						sprintf(str,"\x1b[%u;%uR"
-                            ,lclwy(),lclwx());
-                        putcom(str); }
-                    l=0; }
-                else l=0; }
-			outcon(c); }
-		else
-			break; }
-	if(!c)
-		mswait(0); }
-term_ret=0;
-return(0);
-}
-
-
-/****************************************************************************/
-/* Exits bbs to DOS with appropriate error code after setting COM port isr  */
-/* back to normal.                                                          */
-/****************************************************************************/
-void bail(int code)
-{
-
-if(sys_status&SS_COMISR)
-    rioini(0,0);
-
-lclatr(LIGHTGRAY);
-if(code) {
-	getnodedat(node_num,&thisnode,1);
-	criterrs=++thisnode.errors;
-	putnodedat(node_num,thisnode);
-    now=time(NULL);
-    lprintf("\r\nExiting with errorlevel (%d) on %s\r\n",code,timestr(&now));
-    if(sys_misc&SM_ERRALARM) {
-		beep(500,220); beep(250,220);
-		beep(500,220); beep(250,220);
-		beep(500,220); beep(250,220);
-        nosound(); } }
-
-if(sys_status&SS_INITIAL) {
-    getnodedat(node_num,&thisnode,1);
-    thisnode.status=NODE_OFFLINE;
-    putnodedat(node_num,thisnode);
-    close(nodefile);
-    close(node_ext); }
-
-exit(code);
-}
-
-
diff --git a/src/sbbs2/main_sec.c b/src/sbbs2/main_sec.c
deleted file mode 100644
index deb0e7e510..0000000000
--- a/src/sbbs2/main_sec.c
+++ /dev/null
@@ -1,330 +0,0 @@
-#line 1 "MAIN_SEC.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/******************************************************/
-/* This file contains the single function, main_sec() */
-/******************************************************/
-
-#include "sbbs.h"
-
-extern void logoff();
-
-void main_cfg_cmd();
-void main_ext_cmd(char ch);
-void main_str_cmd(char *str);
-void sysop_page(void);
-ulong getposts(uint subnum);
-
-char no_rip_menu=0;
-
-void new_scan_ptr_cfg()
-{
-	char	str[128];
-	long	i,j,s;
-	ulong	l;
-	time_t	t,lt;
-
-while(online) {
-	bputs(text[CfgGrpLstHdr]);
-	for(i=0;i<usrgrps && online;i++) {
-		checkline();
-		if(i<9) outchar(SP);
-		if(i<99) outchar(SP);
-		bprintf(text[CfgGrpLstFmt],i+1,grp[usrgrp[i]]->lname); }
-	SYNC;
-	mnemonics(text[WhichOrAll]);
-	s=getkeys("AQ",i);
-	if(!s || s==-1 || s=='Q')
-		break;
-	if(s=='A') {
-		mnemonics("\r\nEnter number of messages from end, ~Date, ~Quit, or"
-			" [Last Message]: ");
-		s=getkeys("DLQ",9999);
-		if(s==-1 || s=='Q')
-			continue;
-		if(s=='D') {
-			t=time(NULL);
-			if(inputnstime(&t) && !(sys_status&SS_ABORT)) {
-				bputs(text[LoadingMsgPtrs]);
-				for(i=0;i<usrgrps && online;i++)
-					for(j=0;j<usrsubs[i] && online;j++) {
-						checkline();
-						sub[usrsub[i][j]]->ptr=getmsgnum(usrsub[i][j],t); } }
-			continue; }
-		if(s=='L')
-			s=0;
-		if(s)
-			s&=~0x80000000L;
-		bputs(text[LoadingMsgPtrs]);
-		for(i=0;i<usrgrps;i++)
-			for(j=0;j<usrsubs[i] && online;j++) {
-				checkline();
-				getlastmsg(usrsub[i][j],&l,0);
-				if(s>l)
-					sub[usrsub[i][j]]->ptr=0;
-				else
-					sub[usrsub[i][j]]->ptr=l-s; }
-		continue; }
-	i=(s&~0x80000000L)-1;
-	while(online) {
-		l=0;
-		bprintf(text[CfgSubLstHdr],grp[usrgrp[i]]->lname);
-		for(j=0;j<usrsubs[i] && online;j++) {
-			checkline();
-			if(j<9) outchar(SP);
-			if(j<99) outchar(SP);
-			t=getmsgtime(usrsub[i][j],sub[usrsub[i][j]]->ptr);
-			if(t>l)
-				l=t;
-			bprintf(text[SubPtrLstFmt],j+1,sub[usrsub[i][j]]->lname
-				,timestr(&t),nulstr); }
-		SYNC;
-		mnemonics(text[WhichOrAll]);
-		s=getkeys("AQ",j);
-		if(sys_status&SS_ABORT) {
-			lncntr=0;
-			return; }
-		if(s==-1 || !s || s=='Q')
-			break;
-		if(s=='A') {    /* The entire group */
-			mnemonics("\r\nEnter number of messages from end, ~Date, ~Quit, or"
-				" [Last Message]: ");
-			s=getkeys("DLQ",9999);
-			if(s==-1 || s=='Q')
-				continue;
-			if(s=='D') {
-				t=l;
-				if(inputnstime(&t) && !(sys_status&SS_ABORT)) {
-					bputs(text[LoadingMsgPtrs]);
-					for(j=0;j<usrsubs[i] && online;j++) {
-						checkline();
-						sub[usrsub[i][j]]->ptr=getmsgnum(usrsub[i][j],t); } }
-				continue; }
-			if(s=='L')
-				s=0;
-			if(s)
-				s&=~0x80000000L;
-			bputs(text[LoadingMsgPtrs]);
-			for(j=0;j<usrsubs[i] && online;j++) {
-				checkline();
-				getlastmsg(usrsub[i][j],&l,0);
-				if(s>l)
-					sub[usrsub[i][j]]->ptr=0;
-				else
-					sub[usrsub[i][j]]->ptr=l-s; }
-			continue; }
-		else {
-			j=(s&~0x80000000L)-1;
-			mnemonics("\r\nEnter number of messages from end, ~Date, ~Quit, or"
-				" [Last Message]: ");
-			s=getkeys("DLQ",9999);
-			if(s==-1 || s=='Q')
-				continue;
-			if(s=='D') {
-				t=getmsgtime(usrsub[i][j],sub[usrsub[i][j]]->ptr);
-				if(inputnstime(&t) && !(sys_status&SS_ABORT)) {
-					bputs(text[LoadingMsgPtrs]);
-					sub[usrsub[i][j]]->ptr=getmsgnum(usrsub[i][j],t); }
-				continue; }
-			if(s=='L')
-				s=0;
-			if(s)
-				s&=~0x80000000L;
-			getlastmsg(usrsub[i][j],&l,0);
-			if(s>l)
-				sub[usrsub[i][j]]->ptr=0;
-			else
-				sub[usrsub[i][j]]->ptr=l-s; }
-			} }
-}
-
-void new_scan_cfg(ulong misc)
-{
-	long	s;
-	ulong	i,j;
-	ulong	t;
-
-while(online) {
-	bputs(text[CfgGrpLstHdr]);
-	for(i=0;i<usrgrps && online;i++) {
-		checkline();
-		if(i<9) outchar(SP);
-		if(i<99) outchar(SP);
-		bprintf(text[CfgGrpLstFmt],i+1,grp[usrgrp[i]]->lname); }
-	SYNC;
-	if(misc&SUB_NSCAN)
-		mnemonics(text[NScanCfgWhichGrp]);
-	else
-		mnemonics(text[SScanCfgWhichGrp]);
-	s=getnum(i);
-	if(s<1)
-		break;
-	i=s-1;
-	while(online) {
-		if(misc&SUB_NSCAN)
-			misc&=~SUB_YSCAN;
-		bprintf(text[CfgSubLstHdr],grp[usrgrp[i]]->lname);
-		for(j=0;j<usrsubs[i] && online;j++) {
-			checkline();
-			if(j<9) outchar(SP);
-			if(j<99) outchar(SP);
-			bprintf(text[CfgSubLstFmt],j+1
-				,sub[usrsub[i][j]]->lname
-				,sub[usrsub[i][j]]->misc&misc ?
-					(misc&SUB_NSCAN && sub[usrsub[i][j]]->misc&SUB_YSCAN) ?
-					"To You Only" : text[On] : text[Off]);
-				}
-		SYNC;
-		if(misc&SUB_NSCAN)
-			mnemonics(text[NScanCfgWhichSub]);
-		else
-			mnemonics(text[SScanCfgWhichSub]);
-		s=getkeys("AQ",j);
-		if(sys_status&SS_ABORT) {
-			lncntr=0;
-			return; }
-		if(!s || s==-1 || s=='Q')
-			break;
-		if(s=='A') {
-			t=sub[usrsub[i][0]]->misc&misc;
-			if(misc&SUB_NSCAN && !t)
-				if(!noyes("Messages to you only"))
-					misc|=SUB_YSCAN;
-			for(j=0;j<usrsubs[i] && online;j++) {
-				checkline();
-				if(t) sub[usrsub[i][j]]->misc&=~misc;
-				else  {
-					if(misc&SUB_NSCAN)
-						sub[usrsub[i][j]]->misc&=~SUB_YSCAN;
-					sub[usrsub[i][j]]->misc|=misc; } }
-			continue; }
-		j=(s&~0x80000000L)-1;
-		if(misc&SUB_NSCAN && !(sub[usrsub[i][j]]->misc&misc)) {
-			if(!noyes("Messages to you only"))
-				sub[usrsub[i][j]]->misc|=SUB_YSCAN;
-			else
-				sub[usrsub[i][j]]->misc&=~SUB_YSCAN; }
-		sub[usrsub[i][j]]->misc^=misc; } }
-}
-
-/****************************************************************************/
-/* Performs a new message scan all all sub-boards							*/
-/****************************************************************************/
-void scanallsubs(char mode)
-{
-	char str[256];
-	int i,j,found=0;
-
-if(/* action==NODE_MAIN && */ mode&(SCAN_FIND|SCAN_TOYOU)) {
-	i=yesno(text[DisplayTitlesOnlyQ]);
-	if(mode&SCAN_FIND) {
-		bputs(text[SearchStringPrompt]);
-		if(!getstr(str,40,K_LINE|K_UPPER))
-			return;
-		if(i) { 			/* if titles only */
-			for(i=0;i<usrgrps;i++) {
-				for(j=0;j<usrsubs[i] && !msgabort();j++)
-					found=searchsub(usrsub[i][j],str);
-				if(j<usrsubs[i])
-					break; }
-			if(!found)
-				CRLF;
-			sprintf(tmp,"Searched messages for '%s'",str);
-			logline(nulstr,tmp);
-			return; } }
-	else if(mode&SCAN_TOYOU && i) {
-		for(i=0;i<usrgrps;i++) {
-			for(j=0;j<usrsubs[i] && !msgabort();j++)
-				found=searchsub_toyou(usrsub[i][j]);
-			if(j<usrsubs[i])
-				break; }
-		if(!found)
-			CRLF;
-		return; } }
-
-if(useron.misc&(RIP|WIP) && !(useron.misc&EXPERT)) {
-	menu("MSGSCAN"); }
-for(i=0;i<usrgrps;i++) {
-	for(j=0;j<usrsubs[i] && !msgabort();j++)
-		if(((mode&SCAN_NEW && sub[usrsub[i][j]]->misc&(SUB_NSCAN|SUB_FORCED))
-			|| mode&SCAN_FIND
-			|| (mode&SCAN_TOYOU && sub[usrsub[i][j]]->misc&SUB_SSCAN))
-			&& scanposts(usrsub[i][j],mode,str)) break;
-	if(j<usrsubs[i])
-		break; }
-bputs(text[MessageScan]);
-if(i<usrgrps) {
-	bputs(text[MessageScanAborted]);
-	return; }
-bputs(text[MessageScanComplete]);
-if(mode&SCAN_NEW && !(mode&(SCAN_BACK|SCAN_TOYOU))
-	&& useron.misc&ANFSCAN && !(useron.rest&FLAG('T'))) {
-	xfer_cmds++;
-	scanalldirs(FL_ULTIME); }
-}
-
-/****************************************************************************/
-/* Used to scan single or multiple sub-boards. 'mode' is the scan type.     */
-/****************************************************************************/
-void scansubs(char mode)
-{
-	char ch,str[256];
-	int i=0,j,found=0;
-
-mnemonics(text[SubGroupOrAll]);
-ch=getkeys("SGA\r",0);
-if(sys_status&SS_ABORT || ch==CR)
-	return;
-
-if(ch!='A' && mode&(SCAN_FIND|SCAN_TOYOU)) {
-	if(yesno(text[DisplayTitlesOnlyQ])) i=1;
-	if(mode&SCAN_FIND) {
-		bputs(text[SearchStringPrompt]);
-		if(!getstr(str,40,K_LINE|K_UPPER))
-			return;
-		if(i) { 			/* if titles only */
-			if(ch=='S')
-				found=searchsub(usrsub[curgrp][cursub[curgrp]],str);
-			else if(ch=='G')
-				for(i=0;i<usrsubs[curgrp] && !msgabort();i++)
-					found=searchsub(usrsub[curgrp][i],str);
-			sprintf(tmp,"Searched messages for '%s'",str);
-			logline(nulstr,tmp);
-			if(!found)
-				CRLF;
-			return; } }
-	else if(mode&SCAN_TOYOU && i) {
-		if(ch=='S')
-			found=searchsub_toyou(usrsub[curgrp][cursub[curgrp]]);
-		else if(ch=='G')
-			for(i=0;i<usrsubs[curgrp] && !msgabort();i++)
-				found=searchsub_toyou(usrsub[curgrp][i]);
-		if(!found)
-			CRLF;
-		return; } }
-
-if(ch=='S') {
-	if(useron.misc&(RIP|WIP) && !(useron.misc&EXPERT)) {
-		menu("MSGSCAN"); }
-	i=scanposts(usrsub[curgrp][cursub[curgrp]],mode,str);
-	bputs(text[MessageScan]);
-	if(i) bputs(text[MessageScanAborted]);
-	else bputs(text[MessageScanComplete]);
-	return; }
-if(ch=='G') {
-	if(useron.misc&(RIP|WIP) && !(useron.misc&EXPERT)) {
-		menu("MSGSCAN"); }
-	for(i=0;i<usrsubs[curgrp] && !msgabort();i++)
-		if(((mode&SCAN_NEW &&
-			sub[usrsub[curgrp][i]]->misc&(SUB_NSCAN|SUB_FORCED))
-			|| (mode&SCAN_TOYOU && sub[usrsub[curgrp][i]]->misc&SUB_SSCAN)
-			|| mode&SCAN_FIND)
-			&& scanposts(usrsub[curgrp][i],mode,str)) break;
-	bputs(text[MessageScan]);
-	if(i==usrsubs[curgrp]) bputs(text[MessageScanComplete]);
-		else bputs(text[MessageScanAborted]);
-	return; }
-
-scanallsubs(mode);
-}
diff --git a/src/sbbs2/main_wfc.c b/src/sbbs2/main_wfc.c
deleted file mode 100644
index 9d459961b4..0000000000
--- a/src/sbbs2/main_wfc.c
+++ /dev/null
@@ -1,1543 +0,0 @@
-#line 1 "MAIN_WFC.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-#include "etext.h"
-#include "cmdshell.h"
-#include "qwk.h"
-
-extern char onquiet,nmi,llo,qwklogon;
-extern char term_ret;
-extern ulong connect_rate;	 /* already connected at xbps */
-extern char *wday[],*mon[];
-extern char *hungupstr;
-extern char cidarg[];
-
-void reset_logon_vars(void)
-{
-	int i;
-
-sys_status&=~(SS_USERON|SS_TMPSYSOP|SS_LCHAT|SS_ABORT
-    |SS_PAUSEON|SS_PAUSEOFF|SS_EVENT|SS_NEWUSER|SS_NEWDAY);
-keybufbot=keybuftop=lbuflen=slcnt=altul=timeleft_warn=0;
-logon_uls=logon_ulb=logon_dls=logon_dlb=0;
-logon_posts=logon_emails=logon_fbacks=0;
-posts_read=0;
-batdn_total=batup_total=0;
-usrgrps=usrlibs=0;
-curgrp=curlib=0;
-for(i=0;i<total_libs;i++)
-	curdir[i]=0;
-for(i=0;i<total_grps;i++)
-	cursub[i]=0;
-}
-
-void mail_maint(void)
-{
-	int i;
-
-lprintf("\r\n\r\nPurging deleted/expired e-mail...");
-sprintf(smb.file,"%sMAIL",data_dir);
-smb.retry_time=smb_retry_time;
-if((i=smb_open(&smb))!=0)
-	errormsg(WHERE,ERR_OPEN,smb.file,i);
-else {
-	if((i=smb_locksmbhdr(&smb))!=0)
-		errormsg(WHERE,ERR_LOCK,smb.file,i);
-	else
-		delmail(0,MAIL_ALL);
-	smb_close(&smb); }
-}
-
-/*************************************************************/
-/* Returns 0 to reinitialize modem and start WFC cycle again */
-/* Returns 1 to continue checking things peacefully 		 */
-/*************************************************************/
-char wfc_events(time_t lastnodechk)
-{
-	char	str[256],str2[256],*buf;
-	int 	i,j,k,file,ret=1,chunk;
-	ulong	l,m;
-	user_t	user;
-	node_t	node;
-	struct	ffblk ff;
-	struct	tm *gm;
-	struct	date lastdate;
-
-for(i=0;i<total_qhubs;i++) {
-	gm=localtime(&now); 	  /* Qnet call out based on time */
-	unixtodos(qhub[i]->last,&date,&curtime);
-	if(node_num==qhub[i]->node				/* or frequency */
-		&& (qhub[i]->last==-1L
-		|| ((qhub[i]->freq
-			&& (now-qhub[i]->last)/60>qhub[i]->freq)
-		|| (qhub[i]->time
-			&& (gm->tm_hour*60)+gm->tm_min>=qhub[i]->time
-		&& (gm->tm_mday!=date.da_day || gm->tm_mon!=date.da_mon-1)))
-		&& qhub[i]->days&(1<<gm->tm_wday))) {
-		offhook();
-		lputc(FF);
-		sprintf(str,"%sQNET\\%s.NOW"
-			,data_dir,qhub[i]->id);
-		remove(str);					/* Remove semaphore file */
-		sprintf(str,"%sQNET\\%s.PTR"
-			,data_dir,qhub[i]->id);
-		file=nopen(str,O_RDONLY);
-		for(j=0;j<qhub[i]->subs;j++) {
-			sub[qhub[i]->sub[j]]->ptr=0;
-			lseek(file,sub[qhub[i]->sub[j]]->ptridx*4L,SEEK_SET);
-			read(file,&sub[qhub[i]->sub[j]]->ptr,4); }
-		if(file!=-1)
-			close(file);
-		if(pack_rep(i)) {
-			if((file=nopen(str,O_WRONLY|O_CREAT))==-1)
-				errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT);
-			else {
-				for(j=l=0;j<qhub[i]->subs;j++) {
-					while(filelength(file)<sub[qhub[i]->sub[j]]->ptridx*4L)
-						write(file,&l,4);		/* initialize ptrs to null */
-					lseek(file,sub[qhub[i]->sub[j]]->ptridx*4L,SEEK_SET);
-					write(file,&sub[qhub[i]->sub[j]]->ptr,4); }
-				close(file); } }
-		delfiles(temp_dir,"*.*");
-
-		qhub[i]->last=time(NULL);
-		sprintf(str,"%sQNET.DAB",ctrl_dir);
-		if((file=nopen(str,O_WRONLY))==-1) {
-			errormsg(WHERE,ERR_OPEN,str,O_WRONLY);
-			bail(1); }
-		lseek(file,sizeof(time_t)*i,SEEK_SET);
-		write(file,&qhub[i]->last,sizeof(time_t));
-		close(file);
-
-		if(qhub[i]->call[0]) {
-			getnodedat(node_num,&thisnode,1);
-			thisnode.status=NODE_NETTING;
-			putnodedat(node_num,thisnode);
-			lputc(FF);
-			external(cmdstr(qhub[i]->call,nulstr,nulstr,NULL),EX_SWAP);
-			ret=0; }
-		for(j=0;j<10;j++) {
-			sprintf(str,"%s%s.QW%c",data_dir,qhub[i]->id,j ? (j-1)+'0' : 'K');
-			if(fexist(str)) {
-				lclini(node_scrnlen-1);
-				delfiles(temp_dir,"*.*");
-				unpack_qwk(str,i); } }
-		lputc(FF); } }
-
-for(i=0;i<total_phubs;i++) {
-	gm=localtime(&now); 	  /* PostLink call out based on time */
-	unixtodos(phub[i]->last,&date,&curtime);
-	if(node_num==phub[i]->node				/* or frequency */
-		&& ((phub[i]->freq
-			&& (now-phub[i]->last)/60>phub[i]->freq)
-		|| (phub[i]->time
-			&& (gm->tm_hour*60)+gm->tm_min>=phub[i]->time
-		&& (gm->tm_mday!=date.da_day || gm->tm_mon!=date.da_mon-1)))
-		&& phub[i]->days&(1<<gm->tm_wday)) {
-		offhook();
-		lputc(FF);
-
-		phub[i]->last=time(NULL);
-		sprintf(str,"%sPNET.DAB",ctrl_dir);
-		if((file=nopen(str,O_WRONLY))==-1) {
-			errormsg(WHERE,ERR_OPEN,str,O_WRONLY);
-			bail(1); }
-		lseek(file,sizeof(time_t)*i,SEEK_SET);
-		write(file,&phub[i]->last,sizeof(time_t));
-		close(file);
-
-		if(phub[i]->call[0]) {
-			getnodedat(node_num,&thisnode,1);
-			thisnode.status=NODE_NETTING;
-			putnodedat(node_num,thisnode);
-			lputc(FF);
-			external(cmdstr(phub[i]->call,nulstr,nulstr,NULL),EX_SWAP);
-			ret=0; } } }
-
-for(i=0;i<total_events;i++) {
-	if(!event[i]->node || event[i]->node>sys_nodes)
-        continue;
-	gm=localtime(&now);
-	unixtodos(event[i]->last,&date,&curtime);
-	if(event[i]->last==-1
-		|| ((gm->tm_hour*60)+gm->tm_min>=event[i]->time
-		&& (gm->tm_mday!=date.da_day || gm->tm_mon!=date.da_mon-1)
-		&& event[i]->days&(1<<gm->tm_wday))) {
-
-		if(event[i]->misc&EVENT_EXCL) { /* exclusive event */
-			offhook();
-			lputc(FF);
-			if(event[i]->node!=node_num) {
-				lprintf("Waiting for node %d to run timed event.\r\n\r\n"
-					,event[i]->node);
-				lputs("Hit any key to abort wait...");
-				getnodedat(node_num,&thisnode,1);
-				thisnode.status=NODE_EVENT_LIMBO;
-				thisnode.aux=event[i]->node;
-				putnodedat(node_num,thisnode);
-				lastnodechk=0;	 /* really last event time check */
-				while(!lkbrd(0)) {
-					mswait(1);
-					now=time(NULL);
-					if(now-lastnodechk<10)
-						continue;
-					getnodedat(node_num,&thisnode,0);
-					if(thisnode.misc&NODE_DOWN)
-						return(0);
-					lastnodechk=now;
-					sprintf(str,"%sTIME.DAB",ctrl_dir);
-					if((file=nopen(str,O_RDONLY))==-1) {
-						errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-						event[i]->last=now;
-						return(0); }
-					lseek(file,(long)i*4L,SEEK_SET);
-					read(file,&event[i]->last,sizeof(time_t));
-					close(file);
-					if(now-event[i]->last<(60*60))	/* event is done */
-						break; }
-				sprintf(str,"%s%s.NOW",data_dir,event[i]->code);
-				remove(str);
-				event[i]->last=now;
-				ret=0; }
-			else {
-				lputs("Waiting for all nodes to become inactive before "
-					"running timed event.\r\n\r\n");
-				lputs("Hit any key to abort wait and run event now...\r\n\r\n");
-				getnodedat(node_num,&thisnode,1);
-				thisnode.status=NODE_EVENT_WAITING;
-				putnodedat(node_num,thisnode);
-				lastnodechk=0;
-				while(!lkbrd(0)) {
-					mswait(1);
-					now=time(NULL);
-					if(now-lastnodechk<10)
-						continue;
-					lastnodechk=now;
-					getnodedat(node_num,&thisnode,0);
-					if(thisnode.misc&NODE_DOWN)
-                        return(0);
-					for(j=1;j<=sys_nodes;j++) {
-						if(j==node_num)
-							continue;
-						getnodedat(j,&node,0);
-						if(node.status!=NODE_OFFLINE
-							&& node.status!=NODE_EVENT_LIMBO)
-							break; }
-					if(j>sys_nodes) /* all nodes either offline or in limbo */
-						break;
-					lprintf("\rWaiting for node %d (status=%d)"
-						,j,node.status);
-					lputc(CLREOL); } } }
-		if(event[i]->node!=node_num)
-			event[i]->last=now;
-		else {
-			sprintf(str,"%s%s.NOW",data_dir,event[i]->code);
-			remove(str);
-			offhook();
-			lputc(FF);
-			getnodedat(node_num,&thisnode,1);
-			thisnode.status=NODE_EVENT_RUNNING;
-			putnodedat(node_num,thisnode);
-			if(event[i]->dir[0]) {
-				if(event[i]->dir[1]==':')           /* drive letter specified */
-					setdisk(toupper(event[i]->dir[0])-'A');
-				if(chdir(event[i]->dir))
-					errormsg(WHERE,ERR_CHDIR,event[i]->dir,0); }
-
-			external(cmdstr(event[i]->cmd,nulstr,nulstr,NULL),0);  /* EX_CC */
-			event[i]->last=time(NULL);
-			sprintf(str,"%sTIME.DAB",ctrl_dir);
-			if((file=nopen(str,O_WRONLY))==-1) {
-				errormsg(WHERE,ERR_OPEN,str,O_WRONLY);
-				return(ret); }
-			lseek(file,(long)i*4L,SEEK_SET);
-			write(file,&event[i]->last,sizeof(time_t));
-			close(file);
-			ret=0; } } }
-
-
-if(sys_status&SS_DAILY || thisnode.misc&NODE_EVENT) {  /* daily events */
-
-	offhook();
-    lputc(FF);
-
-	if(sys_status&SS_DAILY) {
-
-		getnodedat(node_num,&thisnode,1);
-		now=time(NULL);
-		j=lastuser();
-		thisnode.status=NODE_EVENT_RUNNING;
-		putnodedat(node_num,thisnode);
-
-		lprintf("Running system daily maintenance...\r\n\r\n");
-		logentry("!:","Ran system daily maintenance");
-		for(i=1;i<=j;i++) {
-
-			lprintf("\rChecking user %5u of %-5u",i,j);
-			user.number=i;
-			getuserdat(&user);
-
-			/***********************************************/
-			/* Fix name (NAME.DAT and USER.DAT) mismatches */
-			/***********************************************/
-			if(user.misc&DELETED) {
-				if(strcmp(username(i,str2),"DELETED USER"))
-					putusername(i,nulstr);
-				continue; }
-
-			if(strcmp(user.alias,username(i,str2)))
-				putusername(i,user.alias);
-
-			if(!(user.misc&(DELETED|INACTIVE))
-				&& user.expire && (ulong)user.expire<=(ulong)now) {
-				putsmsg(i,text[AccountHasExpired]);
-				sprintf(str,"%s #%u Expired",user.alias,user.number);
-				logentry("!%",str);
-				if(level_misc[user.level]&LEVEL_EXPTOVAL
-					&& level_expireto[user.level]<10) {
-					user.flags1=val_flags1[level_expireto[user.level]];
-					user.flags2=val_flags2[level_expireto[user.level]];
-					user.flags3=val_flags3[level_expireto[user.level]];
-					user.flags4=val_flags4[level_expireto[user.level]];
-					user.exempt=val_exempt[level_expireto[user.level]];
-					user.rest=val_rest[level_expireto[user.level]];
-					if(val_expire[level_expireto[user.level]])
-						user.expire=now
-							+(val_expire[level_expireto[user.level]]*24*60*60);
-					else
-						user.expire=0;
-					user.level=val_level[level_expireto[user.level]]; }
-				else {
-					if(level_misc[user.level]&LEVEL_EXPTOLVL)
-						user.level=level_expireto[user.level];
-					else
-						user.level=expired_level;
-					user.flags1&=~expired_flags1; /* expired status */
-					user.flags2&=~expired_flags2; /* expired status */
-					user.flags3&=~expired_flags3; /* expired status */
-					user.flags4&=~expired_flags4; /* expired status */
-					user.exempt&=~expired_exempt;
-					user.rest|=expired_rest;
-					user.expire=0; }
-				putuserrec(i,U_LEVEL,2,itoa(user.level,str,10));
-				putuserrec(i,U_FLAGS1,8,ultoa(user.flags1,str,16));
-				putuserrec(i,U_FLAGS2,8,ultoa(user.flags2,str,16));
-				putuserrec(i,U_FLAGS3,8,ultoa(user.flags3,str,16));
-				putuserrec(i,U_FLAGS4,8,ultoa(user.flags4,str,16));
-				putuserrec(i,U_EXPIRE,8,ultoa(user.expire,str,16));
-				putuserrec(i,U_EXEMPT,8,ultoa(user.exempt,str,16));
-				putuserrec(i,U_REST,8,ultoa(user.rest,str,16));
-				if(expire_mod[0]) {
-					useron=user;
-					online=ON_LOCAL;
-					exec_bin(expire_mod,&main_csi);
-					online=0; }
-				}
-
-			/***********************************************************/
-			/* Auto deletion based on expiration date or days inactive */
-			/***********************************************************/
-			if(!(user.exempt&FLAG('P'))     /* Not a permanent account */
-				&& !(user.misc&(DELETED|INACTIVE))	 /* alive */
-				&& (sys_autodel && (now-user.laston)/(long)(24L*60L*60L)
-				> sys_autodel)) {			/* Inactive too long */
-				sprintf(str,"Auto-Deleted %s #%u",user.alias,user.number);
-				logentry("!*",str);
-				delallmail(i);
-				putusername(i,nulstr);
-				putuserrec(i,U_MISC,8,ultoa(user.misc|DELETED,str,16)); }
-
-			if(!(user.misc&(DELETED|INACTIVE))
-				&& preqwk_ar[0] && chk_ar(preqwk_ar,user)) {  /* Pre-QWK */
-				for(k=1;k<=sys_nodes;k++) {
-					getnodedat(k,&node,0);
-					if((node.status==NODE_INUSE || node.status==NODE_QUIET
-						|| node.status==NODE_LOGON) && node.useron==i)
-						break; }
-				if(k<=sys_nodes)	/* Don't pre-pack with user online */
-					continue;
-				lclini(node_scrnlen-1);
-				lclatr(LIGHTGRAY);
-                lputc(FF);
-				console|=CON_L_ECHO;
-				lprintf("Pre-packing QWK for %s...\r\n"
-					,user.alias);
-				useron=user;
-				online=ON_LOCAL;
-				statline=sys_def_stat;
-				statusline();
-				useron.qwk&=~QWK_FILES; /* turn off for pre-packing */
-				useron.misc|=(ANSI|COLOR);
-				delfiles(temp_dir,"*.*");
-				getmsgptrs();
-				getusrsubs();
-				batdn_total=0;
-				sprintf(str,"%sFILE\\%04u.QWK"
-					,data_dir,useron.number);
-				if(pack_qwk(str,&l,1)) {
-					qwk_success(l,0,1);
-					putmsgptrs(); }
-				delfiles(temp_dir,"*.*");
-				lclatr(LIGHTGRAY);
-				lclini(node_scrnlen);
-				online=0;
-				lputc(FF); } }
-
-		mail_maint();
-
-		lprintf("\r\n\r\nRunning system daily event...\r\n");
-		logentry("!:","Ran system daily event");
-		sys_status&=~SS_DAILY;
-		if(sys_daily[0])
-			external(cmdstr(sys_daily,nulstr,nulstr,NULL),0); }    /* EX_CC */
-
-	if(thisnode.misc&NODE_EVENT) {
-		getnodedat(node_num,&thisnode,1);
-        thisnode.status=NODE_EVENT_RUNNING;
-        putnodedat(node_num,thisnode);
-		if(node_daily[0])
-			external(cmdstr(node_daily,nulstr,nulstr,NULL),0); /* EX_CC */
-		getnodedat(node_num,&thisnode,1);
-		thisnode.misc&=~NODE_EVENT;
-		putnodedat(node_num,thisnode); }
-	ret=0; }
-return(ret);
-}
-
-/****************************************************************************/
-/* This function waits for either a caller or a local logon. It returns 0   */
-/* if the user failed the logon procedure, a 1 if the user succeeded        */
-/* Called from function main                                                */
-/****************************************************************************/
-char waitforcall()
-{
-	static uint calls;
-	uchar str[256],str2[256],cname[LEN_CID+1],c,gotcaller=0,x,y,dcd,*p
-		,ans=0,hbeat=0,menuon=0,blank=0
-		,*ok=mdm_misc&MDM_VERBAL ? "OK":"0"
-
-	/* IP logging vars added by enigma */
-		, ipstr[256], *ips;
-
-	uint i,j,k,nodes,lastnodes=0;
-	long l,m;
-	int file,result_code=0;
-	time_t start,lastnodechk=0,laststatchk=0,laststatfdate=0;
-    node_t node;
-    struct tm *gm;
-	struct dfree d;
-	stats_t stats,node_stats;
-
-reset_logon_vars();
-ipstr[0]=cid[0]=cname[0]=0;
-online=console=0;
-start=time(NULL);
-
-getnodedat(node_num,&thisnode,1);
-thisnode.status=NODE_WFC;
-thisnode.misc&=~(NODE_INTR|NODE_MSGW|NODE_NMSG|NODE_UDAT|NODE_POFF|NODE_AOFF);
-putnodedat(node_num,thisnode);
-catsyslog(0);
-if(term_ret)
-    return(terminal());
-/***
-if(com_port)
-    rioctl(0x10f);  /* for blanking debug line */
-***/
-
-if(qoc && calls) {
-    if(qoc==1)
-        offhook();
-    lclini(node_scrnlen);
-    lputc(FF);
-    bail(0); }
-useron.misc=0;
-rows=24;
-lputc(FF);
-if(node_misc&NM_RESETVID) {
-	textmode(C40);
-	textmode(C80);
-	_setcursortype(_NORMALCURSOR); }
-
-lclatr(curatr=LIGHTGRAY);
-lclini(node_scrnlen);
-
-
-lputc(FF);
-if(com_port && !connect_rate) {  /* Initialize the modem */
-	lprintf("\rSetting DTE rate: %lu baud",com_rate);
-	lputc(CLREOL);
-#ifdef __OS2__
-	if((i=setbaud(com_rate))!=0) {
-#else
-	if((i=setbaud((uint)(com_rate&0xffffL)))!=0) {
-#endif
-		lprintf(" - Failed! (%d)\r\n",i);
-		bail(1); }
-    c=0;
-	if(!nmi && !(mdm_misc&MDM_DUMB))	/* if not dumb */
-    while(c<4) {
-        rioctl(IOFB);
-        rioctl(IOCM|PAUSE|ABORT);
-        rioctl(IOCS|PAUSE|ABORT);
-
-		if(mdm_misc&MDM_CTS)
-            if(!(rioctl(IOSTATE)&CTS)) {
-				lputs("\rWaiting up to 30 seconds for CTS to raise (  )\b\b\b");
-				for(i=0;i<30 && !lkbrd(0);i++) {   /* wait upto 15 seconds */
-					lprintf("%2d\b\b",i+1);
-					mswait(1000);
-					if(rioctl(IOSTATE)&CTS)
-						break; }
-				if(i==30) {
-					lputs("\r\n\r\nModem configured for hardware flow "
-						"control and CTS is stuck low.\r\n");
-					logline("@!","CTS stuck low. Can't initialize.");
-					bail(1); } }
-
-		lputs("\rInitializing modem...");
-		lputc(CLREOL);
-
-		dtr(5); 		/* in case we're still connected to somebody */
-        dtr(1);
-		mswait(750);	/* DTR is sometimes slow */
-        rioctl(IOFB);   /* crap comes in when dtr is raised ? */
-		if(rioctl(IOSTATE)&DCD && mdm_hang[0]) {
-			mdmcmd(mdm_hang);
-			if(strcmp(str,"0") && strcmp(str,"OK"))
-				getmdmstr(str,SEC_OK); }
-
-		/******************************************/
-		/* Take phone off-hook while initializing */
-		/******************************************/
-		offhook();		
-		getmdmstr(str,SEC_OK);
-        if(strcmp(str,"0") && strcmp(str,"OK"))
-			getmdmstr(str,SEC_OK);
-
-		/*********************************************************/
-		/* Send User Configured (broken?) initialization strings */
-		/*********************************************************/
-        mdmcmd(mdm_init);
-        if(mdm_spec[0]) {
-			getmdmstr(str,SEC_OK);
-			if(strcmp(str,"0") && strcmp(str,"OK"))
-				getmdmstr(str,SEC_OK);
-            mdmcmd(mdm_spec); }
-		getmdmstr(str,SEC_OK);
-		if(strcmp(str,"0") && strcmp(str,"OK"))
-			getmdmstr(str,SEC_OK);
-
-		/*****************************/
-		/* Send AT&C1 if DCD is high */
-		/*****************************/
-        if(rioctl(IOSTATE)&DCD) {
-			lputs("\r\nDCD is high. Sending AT&C1 to modem...");
-			mdmcmd("AT&C1");
-			getmdmstr(str,SEC_OK);
-			if(strcmp(str,ok))
-				getmdmstr(str,SEC_OK); }
-
-		/**********************************************/
-		/* DCD still high? Pause and try dropping DTR */
-		/**********************************************/
-        if(rioctl(IOSTATE)&DCD) {
-			lputs("\r\nDCD is high. Pausing...");
-			dtr(0);
-			mswait(2000);
-			rioctl(MSR);
-			if(rioctl(IOSTATE)&DCD) {
-				lputs("\rDCD was high after modem init.\r\n");
-				logentry("@!","DCD was high after modem init");
-				if(mdm_misc&MDM_NODTR)
-					mdmcmd(mdm_hang);
-				else
-					dtr(15);
-				if(rioctl(IOSTATE)&DCD) {
-					lputs("Hanging up failed to lower DCD.\r\n");
-					logentry("@!","Hanging up failed to lower DCD");
-					if(++c==4)
-						break;
-					continue; } }
-			dtr(1); }
-
-		/************************************************************/
-		/* Let's repair any damage the user configured init strings */
-		/* may have caused											*/
-		/************************************************************/
-		for(i=0;i<4;i++) {
-			rioctl(IOFB);
-			mdmcmd("AT");
-			if(!getmdmstr(str,SEC_OK) || !strcmp(str,ok))
-				break;
-			if(!strcmp(str,"AT")) {     /* Echoing commands? */
-				getmdmstr(str,SEC_OK);	/* Get OK */
-				lputs("\r\nCommand echoed. Sending ATE0 to modem...");
-				mdmcmd("ATE0"); }
-			else if(mdm_misc&MDM_VERBAL && !strcmp(str,"0")) { /* numeric? */
-				lputs("\r\nNumeric response. Sending ATV1 to modem...");
-				mdmcmd("ATV1"); }
-			else if(!(mdm_misc&MDM_VERBAL) && !strcmp(str,"OK")) {
-				lputs("\r\nVerbal response. Sending ATV0 to modem...");
-				mdmcmd("ATV0"); }
-			else {
-				lprintf("\r\nUnrecognized response '%s'. Sending AT to modem..."
-					,str);
-				mdmcmd("AT"); }
-			if(getmdmstr(str,SEC_OK) && !strcmp(str,ok))
-				break; }
-
-		/************************************************/
-		/* Put phone back on-hook and check result code */
-		/************************************************/
-		if(!mdm_hang[0])
-			mdmcmd("ATH");
-		else
-			mdmcmd(mdm_hang); 
-		if(!getmdmstr(str,SEC_OK)) {
-			lputs("\r\nNo response.\r\n");
-			logentry("@!","No response"); }
-        else {
-			if(!strcmp(str,ok))
-                break;
-			lprintf("\r\nInvalid result code: '%s' "
-				"instead of '%s'.\r\n",str,ok);
-			sprintf(tmp,"Invalid result code: '%s' instead of '%s'.",str,ok);
-            logentry("@!",tmp); }
-        if(++c==4)
-            break;
-        rioini(0,0);                /* remove com routines */
-        sys_status&=~SS_COMISR;
-		comini();
-		setrate(); }
-    if(c==4) {
-		lputs("\r\nModem failed initialization.\r\n");
-		errorlog("Modem failed initialization.");
-		offhook();
-        bail(1); }
-	lputc(FF); }
-
-else if(com_port && connect_rate) {
-    gotcaller=1;
-	console=CON_R_ECHO|CON_L_ECHO|CON_R_INPUT|CON_L_INPUT;
-	online=ON_REMOTE;
-	sprintf(connection,"%lu",connect_rate);
-	cur_rate=connect_rate;
-	cur_cps=connect_rate/10;
-	connect_rate=0;
-	if(cidarg[0]) { 					/* Caller-id passed as argument */
-		mdm_misc|=MDM_CALLERID;
-		p=strstr(cidarg,"NUMBER:");
-		if(p) p+=8;
-		else {
-			p=strstr(cidarg,"NMBR");
-			if(p) p+=7; }
-		if(p) { 						   /* 3 message format */
-			sprintf(cid,"%.*s",LEN_CID,p);
-			for(i=strlen(cid);!isdigit(cid[i]) && i;i--)
-				;
-			cid[i+1]=0; 					/* chop off non-numbers */
-			p=strstr(cidarg,"NAME:");
-			if(p) p+=6;
-			else {
-				p=strstr(cidarg,"NAME");
-				if(p) p+=7; }
-			if(p)
-				sprintf(cname,"%.*s",LEN_CID,p); }
-		else if(strlen(cidarg)>12)		   /* Single message format */
-			sprintf(cid,"%.*s",LEN_CID,cidarg+12);
-		else
-			sprintf(cid,"ERROR: '%s'",cidarg); } }
-
-
-if(!online) {
-	/*******************************************************/
-    /* To make sure that BBS print routines work correctly */
-    /*******************************************************/
-    useron.number=1;
-    getuserdat(&useron);
-    if(!useron.number)
-        useron.misc=ANSI|COLOR; }
-
-useron.misc&=~UPAUSE;	/* make sure pause is off */
-
-if(llo) {
-	quicklogonstuff();
-	sys_status&=~SS_USERON;
-	gotcaller=1; }
-
-if(!(useron.misc&EXPERT) && !gotcaller) {	/* Novice sysop */
-	console=CON_L_ECHO;
-	online=ON_LOCAL;
-	lputc(FF);
-	tos=1;
-	lncntr=0;
-	menu("WFC");
-	menuon=1;
-	online=0; }
-
-while(!gotcaller) {
-	mswait(0);		   /* give up rest of time slice */
-
-	console=CON_L_ECHO;
-    now=time(NULL);
-
-	if(node_scrnblank && (now-start)/60>node_scrnblank
-		&& !blank) { /* blank screen */
-		lputc(FF);
-		menuon=0;
-		blank=1; }
-	if(mdm_reinit && (now-start)/60>mdm_reinit) /* reinitialize modem */
-		return(0);
-	if(now-lastnodechk>node_sem_check) {  /* check node.dab every x seconds */
-
-#if 1
-		if((i=heapcheck())!=_HEAPOK) {
-			lputc(FF);
-			offhook();
-			errormsg(WHERE,ERR_CHK,"heap",i);
-			bail(1); }
-#endif
-
-		for(i=0;i<total_qhubs;i++)
-			if(node_num==qhub[i]->node) {
-				sprintf(str,"%sQNET\\%s.NOW",data_dir,qhub[i]->id);
-				if(fexist(str))
-					qhub[i]->last=-1; }
-
-		for(i=0;i<total_events;i++)
-			if(node_num==event[i]->node || event[i]->misc&EVENT_EXCL) {
-				sprintf(str,"%s%s.NOW",data_dir,event[i]->code);
-				if(fexist(str))
-					event[i]->last=-1; }
-
-        lastnodechk=now;
-        getnodedat(node_num,&thisnode,0);
-        if(thisnode.misc&NODE_DOWN) {
-            lputc(FF);
-            offhook();
-            bail(0); }
-        if(thisnode.status!=NODE_WFC) {
-            getnodedat(node_num,&thisnode,1);
-            thisnode.status=NODE_WFC;
-            putnodedat(node_num,thisnode); }
-        if(thisnode.misc&NODE_RRUN) {   /* Re-run the node */
-            offhook();
-            lputc(FF);
-            getnodedat(node_num,&thisnode,1);
-            thisnode.status=NODE_OFFLINE;
-            thisnode.misc=0;
-            putnodedat(node_num,thisnode);
-            close(nodefile);
-			close(node_ext);
-			sys_status&=~SS_NODEDAB;
-            if(sys_status&SS_LOGOPEN)
-                close(logfile);
-            if(sys_status&SS_COMISR)
-                rioini(0,0);
-            sys_status&=~(SS_COMISR|SS_INITIAL|SS_LOGOPEN);
-            p=strchr(orgcmd,' ');
-            if(p)
-                p++;
-			close(5);
-			if(execle(orgcmd,orgcmd,p,NULL,envp)) {
-				lprintf("\r\nCouldn't execute %s!\r\n",orgcmd);
-                bail(1); } } }
-
-	if(!wfc_events(lastnodechk))
-		return(0);
-
-	if(!menuon) {
-		/******************/
-		/* Roaming cursor */
-		/******************/
-		x=lclwx();
-		y=lclwy();
-		switch(random(5)) {
-			case 0:
-				if(x>1)
-					x--;
-				break;
-			case 1:
-				if(x<79)
-					x++;
-				break;
-			case 2:
-				if(y>1)
-					y--;
-				break;
-			case 4:
-				if(y<node_scrnlen-2)
-					y++;
-				break; } }
-	else {						/* across the bottom */
-		y=25;
-		x=lclwx();
-		if(x%2) x+=2;
-		else x-=2;
-		if(x<1)
-			x=1;
-		else if(x>80)
-			x=80;
-/*
-		lclxy(x,y);
-		gettext(x,y,x,y,&i);
-		lclatr(random(0xf)+1);
-		lputc(i);
-		lclatr(LIGHTGRAY);
-*/
-/**
-		mswait(100);
-		puttext(x,y,x,y,&i);
-**/ 	   }
-
-#ifndef __FLAT__		// Heart beat always for 32-bit OSs
-	if(inDV) {
-#endif
-		lclxy(80,1);
-		if(hbeat) {
-			lclatr(RED|HIGH);
-			lputc(3); }
-		else
-			lputc(0);
-		hbeat=!hbeat;
-		lclatr(LIGHTGRAY);
-#ifndef __FLAT__
-		}
-#endif
-
-	lclxy(x,y);
-	mswait(100);
-
-								/* Wait for call screen */
-								/* check every 10 seconds */
-
-	if(node_misc&NM_WFCSCRN && now-laststatchk>node_stat_check
-		&& !menuon && !blank) {
-		laststatchk=now;
-		sprintf(str,"%sDSTS.DAB",ctrl_dir);
-		if(fdate(str)!=laststatfdate) {   /* system statistics */
-			lclxy(1,1);
-			lclatr(LIGHTGRAY);
-			lputs("Retrieving Statistics.");
-			lputc(CLREOL);
-			if(!laststatfdate)	/* First time this WFC */
-				getstats(node_num,&node_stats);
-			lputc('.');
-			laststatfdate=fdate(str);
-			getstats(0,&stats);
-			lputc('.');
-			l=m=0;
-			if(node_misc&NM_WFCMSGS) {
-				for(i=0;i<total_subs;i++)
-					l+=getposts(i); 			/* l=total posts */
-				lputc('.');
-				for(i=0;i<total_dirs;i++)
-					m+=getfiles(i); 			/* m=total files */
-				lputc('.'); }
-			i=getmail(0,0); 				/* i=total email */
-			lputc('.');
-			j=getmail(1,0); 				/* j=total fback */
-			lclxy(1,1);
-			lclatr(GREEN);
-			lprintf("Node #: ");
-			lclatr(GREEN|HIGH);
-			gm=localtime(&now);
-			lprintf("%-3u ",node_num);
-			lclatr(GREEN);
-			lprintf("%-3.3s %-2u  Space: ",mon[gm->tm_mon],gm->tm_mday);
-			if(temp_dir[1]==':')
-				k=temp_dir[0]-'A'+1;
-			else k=0;
-			getdfree(k,&d);
-			if((ulong)d.df_bsec*(ulong)d.df_sclus
-				*(ulong)d.df_avail<((ulong)min_dspace*1024L)*2L)
-				lclatr(RED|HIGH|BLINK);
-			else
-				lclatr(GREEN|HIGH);
-			sprintf(str,"%sk",ultoac(((ulong)d.df_bsec
-				*(ulong)d.df_sclus*(ulong)d.df_avail)/1024UL,tmp));
-			lprintf("%-12.12s",str);
-			if(lastuseron[0]) {
-				lclatr(GREEN);
-				lprintf("Laston: ");
-				lclatr(GREEN|HIGH);
-				lprintf(lastuseron);
-				lclatr(GREEN);
-				if(thisnode.connection)
-					lprintf(" %u",thisnode.connection);
-				else
-					lprintf(" Local"); }
-			lprintf("\r\n");
-			lclatr(GREEN);
-			lprintf("Logons: ");
-			lclatr(GREEN|HIGH);
-			sprintf(tmp,"%lu/%lu",node_stats.ltoday,stats.ltoday);
-			lprintf("%-12.12s",tmp);
-			lclatr(GREEN);
-			lprintf("Total: ");
-			lclatr(GREEN|HIGH);
-			lprintf("%-12.12s",ultoac(stats.logons,tmp));
-			lclatr(GREEN);
-			lprintf("Timeon: ");
-			lclatr(GREEN|HIGH);
-			sprintf(tmp,"%lu/%lu",node_stats.ttoday,stats.ttoday);
-			lprintf("%-12.12s",tmp);
-			lclatr(GREEN);
-			lprintf("Total: ");
-			lclatr(GREEN|HIGH);
-			lprintf("%-12.12s\r\n",ultoac(stats.timeon,tmp));
-			lclatr(GREEN);
-			lprintf("Emails: ");
-			lclatr(GREEN|HIGH);
-			sprintf(str,"%u/%u",(uint)stats.etoday,i);
-			lprintf("%-12.12s",str);
-			lclatr(GREEN);
-			lprintf("Posts: ");
-			lclatr(GREEN|HIGH);
-			sprintf(str,"%u",(uint)stats.ptoday);
-			if(node_misc&NM_WFCMSGS) {
-				strcat(str,"/");
-				strcat(str,ultoa(l,tmp,10)); }
-			lprintf("%-12.12s",str);
-			lclatr(GREEN);
-			lprintf("Fbacks: ");
-			lclatr(GREEN|HIGH);
-			sprintf(str,"%u/%u",(uint)stats.ftoday,j);
-			lprintf("%-12.12s",str);
-			lclatr(GREEN);
-			lprintf("Users: ");
-			lclatr(GREEN|HIGH);
-			sprintf(str,"%u/%u",stats.nusers,lastuser());
-			lprintf("%-12.12s\r\n",str);
-			lclatr(GREEN);
-			lprintf("Uloads: ");
-			lclatr(GREEN|HIGH);
-			ultoac(stats.ulb/1024UL,tmp);
-			strcat(tmp,"k");
-			lprintf("%-12.12s",tmp);
-			lclatr(GREEN);
-			lprintf("Files: ");
-			lclatr(GREEN|HIGH);
-			sprintf(str,"%u",(uint)stats.uls);
-			if(node_misc&NM_WFCMSGS) {
-				strcat(str,"/");
-				strcat(str,ultoa(m,tmp,10)); }
-			lprintf("%-12.12s",str);
-			lclatr(GREEN);
-			lprintf("Dloads: ");
-			lclatr(GREEN|HIGH);
-			ultoac(stats.dlb/1024UL,tmp);
-			strcat(tmp,"k");
-			lprintf("%-12.12s",tmp);
-			lclatr(GREEN);
-			lprintf("Files: ");
-			lclatr(GREEN|HIGH);
-			lprintf("%-12.12s\r\n",ultoac(stats.dls,tmp)); }
-		lclatr(curatr=LIGHTGRAY);
-		lclxy(1,6);
-		nodes=0;
-		for(i=1;i<=sys_nodes;i++) {
-			getnodedat(i,&node,0);
-			if((node.status!=NODE_WFC && node.status!=NODE_OFFLINE)
-				|| node.errors) {
-				lputc(CLREOL);
-				printnodedat(i,node);
-				nodes++; } }
-		if(nodes<lastnodes) {
-			i=j=lclwy();
-			j+=(lastnodes-nodes)+1;
-			for(;i<=node_scrnlen && i<j;i++) {
-				lclxy(1,i);
-				lputc(CLREOL); } }
-		lastnodes=nodes;
-		lclatr(curatr=LIGHTGRAY); }
-
-
-	if(!(node_misc&NM_NO_LKBRD) && lkbrd(1)) {
-		start=time(NULL);
-		/* menuon=0; */
-        lputc(FF);
-        tos=1;
-		lncntr=0;
-		i=lkbrd(0);
-		if(!(i&0xff) && (i>=0x3b00 && i<=0x4400)
-			|| i==0x8500 || i==0x8600) {		/* F1-F12 */
-			if(i>=0x3b00 && i<=0x4400)
-				i=((i-0x3b00)>>8);
-			else if(i==0x8500)
-				i=10;
-			else
-				i=11;
-			offhook();
-			external(cmdstr(wfc_scmd[i],nulstr,nulstr,NULL),EX_SWAP);
-            return(0); }
-
-		if(isdigit(i&0xff)) {
-			offhook();
-			external(cmdstr(wfc_cmd[i&0xf],nulstr,nulstr,NULL),0);
-			return(0); }
-
-		switch(toupper(i)) {
-            case 'A':   /* forced answer */
-                ans=1;
-                break;
-			case 'C':   /* configure */
-				if(node_misc&NM_SYSPW) {
-					quicklogonstuff();
-					if(!chksyspass(1))
-                        return(0); }
-                offhook();
-                 if(sys_status&SS_LOGOPEN) {
-                    close(logfile);
-                    sys_status&=~SS_LOGOPEN; }
-                if(sys_status&SS_COMISR) {
-                    rioini(0,0);    /* replace COM i/o vectors */
-                    sys_status&=~SS_COMISR; }
-                close(nodefile);
-				close(node_ext);
-				sys_status&=~SS_NODEDAB;
-				sprintf(str,"%sEXECSBBS.%s",exec_dir,
-#ifdef __OS2__
-					"EXE"
-#else
-					"COM"
-#endif
-					);
-				sprintf(tmp,"\"%s \"",cmdstr(scfg_cmd,nulstr,nulstr,NULL));
-				if(execl(str,str,".",tmp,orgcmd,NULL,envp)) {
-					errormsg(WHERE,ERR_EXEC,str,0);
-                    bail(1); }
-			case 'D':   /* Dos shell */
-                offhook();
-				external(comspec,0);
-				return(0);
-			case 'F':   /* Force Network Call-out */
-                quicklogonstuff();
-				lclatr(YELLOW);
-				lputs("QWK Hub ID: ");
-				lclatr(WHITE);
-				if(!getstr(str,8,K_UPPER))
-					return(0);
-				for(i=0;i<total_qhubs;i++)
-					if(!stricmp(str,qhub[i]->id)) {
-						if(qhub[i]->node==node_num)
-							qhub[i]->last=-1;
-						else {
-							sprintf(tmp,"%sQNET\\%s.NOW",data_dir,str);
-							if((file=nopen(tmp,O_CREAT|O_TRUNC|O_WRONLY))
-								!=-1)
-								close(file); }
-						break; }
-                return(0);
-            case 'L':   /* Log */
-				if(node_misc&NM_SYSPW) {
-					quicklogonstuff();
-					if(!chksyspass(1))
-                        return(0); }
-                offhook();
-                now=time(NULL);
-                unixtodos(now,&date,&curtime);
-                sprintf(str,"%sLOGS\\%2.2d%2.2d%2.2d.LOG"
-                    ,data_dir,date.da_mon,date.da_day,TM_YEAR(date.da_year-1900));
-				external(cmdstr(node_viewer,str,nulstr,NULL),0);
-                return(0);
-            case 'M':   /* Read all mail */
-                quicklogonstuff();
-				if(node_misc&NM_SYSPW && !chksyspass(1))
-                    return(0);
-				readmail(1,MAIL_ALL);
-                online=console=0;
-                return(0);
-            case 'N':   /* Node statistics */
-                quicklogonstuff();
-				if(node_misc&NM_SYSPW && !chksyspass(1))
-                    return(0);
-				useron.misc|=UPAUSE;
-                printstatslog(node_num);
-                pause();
-                return(0);
-            case 'Q':   /* Quit */
-                offhook();
-                bail(0);
-			case 'R':   /* Read feedback */
-                quicklogonstuff();
-				if(node_misc&NM_SYSPW && !chksyspass(1))
-                    return(0);
-				readmail(1,MAIL_YOUR);
-                return(0);
-			case 'K':   /* Sent mail */
-                quicklogonstuff();
-				if(node_misc&NM_SYSPW && !chksyspass(1))
-                    return(0);
-				readmail(1,MAIL_SENT);
-				return(0);
-            case 'S':   /* System Statistics */
-                quicklogonstuff();
-				if(node_misc&NM_SYSPW && !chksyspass(1))
-                    return(0);
-				useron.misc|=UPAUSE;
-                printstatslog(0);
-                pause();
-                return(0);
-			case 'T':   /* Terminal mode */
-				if(!com_port) {
-					lprintf("No COM port configured.");
-					getch();
-                    lputc(FF);
-					return(0); }
-				if(node_misc&NM_SYSPW) {
-                    quicklogonstuff();
-					if(!chksyspass(1))
-                        return(0); }
-                return(terminal());
-			case 'U':   /* User edit */
-                quicklogonstuff();
-				useredit(0,1);
-                return(0);
-			case 'E':
-			case 'W':   /* Write e-mail */
-                quicklogonstuff();
-				if(node_misc&NM_SYSPW && !chksyspass(1))
-					return(0);
-                bputs(text[Email]);
-				if(!getstr(str,50,0))
-                    return(0);
-				if(!strchr(str,'@') && (i=finduser(str))!=0)
-					email(i,nulstr,nulstr,WM_EMAIL);
-				else
-					netmail(str,nulstr,0);
-                return(0);
-			case 'X':   /* Exit with phone on-hook */
-                bail(0);
-			case 'Y':   /* Yesterday's log */
-				if(node_misc&NM_SYSPW) {
-					quicklogonstuff();
-					if(!chksyspass(1))
-						return(0); }
-                offhook();
-                now=time(NULL);
-                now-=(ulong)60L*24L*60L;
-                unixtodos(now,&date,&curtime);
-                sprintf(str,"%sLOGS\\%2.2d%2.2d%2.2d.LOG"
-                    ,data_dir,date.da_mon,date.da_day,TM_YEAR(date.da_year-1900));
-				external(cmdstr(node_viewer,str,nulstr,NULL),0);
-                return(0);
-			case 'Z':
-				mail_maint();
-				return(0);
-			case '?':   /* Menu */
-				if(menuon) {
-					menuon=0;
-					lputc(FF);
-					laststatchk=0;
-					laststatfdate=0; }
-				else {
-					online=ON_LOCAL;
-					menu("WFC");
-					menuon=1;
-					blank=0;
-					online=0; }
-                continue;
-			case SP:   /* Log on */
-				lclatr(WHITE|HIGH); lputc('Y'); lclatr(GREEN);
-				lputs(" Yes\r\n");
-				lclatr(WHITE|HIGH); lputc('Z'); lclatr(GREEN);
-				lputs(" Yes, Quiet\r\n");
-				lclatr(WHITE|HIGH); lputc('F'); lclatr(GREEN);
-				lputs(" Fast User #1\r\n");
-				lclatr(WHITE|HIGH); lputc('Q'); lclatr(GREEN);
-				lputs(" Fast User #1, Quiet\r\n");
-				lclatr(BROWN|HIGH);
-				lputs("\r\nLog on? [No]: ");
-				lclatr(LIGHTGRAY);
-				i=getch();
-				switch(toupper(i)) {
-                    case 'Z':
-                        onquiet=1;
-					case 'Y':       /* Yes, logon */
-                        lputc(FF);
-                        quicklogonstuff();
-						sys_status&=~SS_USERON;
-						useron.misc=(UPAUSE|ANSI|COLOR);
-                        gotcaller=1;
-                        continue;
-                    case 'Q':
-                        onquiet=1;
-                    case 'F':
-                        lputc(FF);
-                        quicklogonstuff();
-						if(sys_misc&SM_REQ_PW || node_misc&NM_SYSPW) {
-							useron.misc=(UPAUSE|ANSI|COLOR);
-							gotcaller=1;
-							continue; }
-                        if(!useron.number) {
-                            lputc(7);
-                            lputs("A Sysop account hasn't been created");
-							getch();
-                            return(0); }
-						return(logon());
-                    default:
-						return(0); }
-            default:
-                lputs("Hit '?' for a menu.");
-                continue; } }
-	if(com_port) {
-		if(mdm_misc&MDM_VERBAL) {
-			if(rioctl(RXBC)) {
-				lputc(FF);
-				getmdmstr(str,SEC_RING);
-				if(!strcmp(str,"RING"))
-					ans=1; } }
-		else {	/* numeric */
-			if(incom()=='2')
-				ans=1; }
-		if(mdm_misc&MDM_DUMB && DCDHIGH)
-			ans=1; }
-	if(ans && com_port) {
-        lputc(FF);
-		if(mdm_misc&MDM_CALLERID) {
-			lputs("Obtaining Caller-ID...");
-			getmdmstr(str,SEC_CID);
-			lprintf("\r\nCID: %s",str);
-			if(!strncmpi(str,"TIME:",5)) {  /* 3 message format */
-				getmdmstr(str,SEC_CID);
-				lprintf("\r\nCID: %s",str);
-				p=strchr(str,':');
-				if(p)
-					strcpy(cid,p+2);		/* Phone Number */
-				getmdmstr(str,SEC_CID);
-				lprintf("\r\nCID: %s",str);
-				p=strchr(str,':');
-				if(p)
-					sprintf(cname,"%.*s",LEN_CID,p+2); }    /* Caller Name */
-			else if(!strncmpi(str,"DATE =",6)) { /* Supra format */
-				getmdmstr(str,SEC_CID);
-				lprintf("\r\nCID: %s",str);     /* TIME = line */
-				getmdmstr(str,SEC_CID);
-				lprintf("\r\nCID: %s",str);     /* NMBR = line */
-				p=strchr(str,'=');
-				if(p)
-					sprintf(strstr(str,"NAME") ? cname:cid,"%.*s",LEN_CID,p+2);
-				getmdmstr(str,SEC_CID); 		/* NAME = line */
-				lprintf("\r\nCID: %s",str);
-				p=strchr(str,'=');
-				if(p)
-					sprintf(strstr(str,"NAME") ? cname:cid,"%.*s",LEN_CID,p+2);
-				}
-			else if(strlen(str)>12) 		/* Single message format */
-				sprintf(cid,"%.*s",LEN_CID,str+12);
-			else
-				sprintf(cid,"ERROR: '%s'",str);
-			lputs(crlf); }
-		cur_rate=cur_cps=0;
-		connection[0]=0;
-		result_code=0;
-		if(!(mdm_misc&MDM_DUMB)) {
-			if(mdm_rings>1) {
-				lputs("Ring\r\n");
-				for(i=1;i<mdm_rings;i++)
-					if(!getmdmstr(str,10))
-						break;
-					else
-						lputs("Ring\r\n");
-				if(i<mdm_rings)
-					return(0);
-				lputs(crlf); }
-			lputs("Answering...");
-			mdmcmd(mdm_answ);
-			rioctl(IOFI);						// flush extra ring results
-			while(!cur_rate || rioctl(RXBC)) {	// no connect or more rsults
-				if(!getmdmstr(str,SEC_ANSWER)) {
-					if(cur_rate)
-						break;
-					lprintf("\r\nNO CARRIER\r\n");
-					if(!(mdm_misc&MDM_NODTR)) {
-						dtr(15);
-						dtr(1);
-						mswait(500); }
-					mdmcmd(nulstr);
-					hangup();
-					return(0); }
-				i=0;
-				while(i<2
-					&& (!strcmp(str,"2")
-					|| !strcmp(str,"RING"))) { /* Ring? Get next result */
-					lputs("Ring\r\n");
-					if(i) {
-						mdmcmd(mdm_answ);	  /* Give a second ATA */
-						rioctl(IOFI); }
-					if(!getmdmstr(str,SEC_ANSWER)) {
-						if(!(mdm_misc&MDM_NODTR)) {
-							dtr(15);
-							dtr(1);
-							mswait(500); }
-						mdmcmd(nulstr);
-						hangup();		  /* Get next result code from modem */
-						return(0); }
-					i++; }
-				if(!strcmp(str,"3") || !strcmp(str,"NO CARRIER")) {
-					lprintf("\r\nNO CARRIER\r\n");
-					hangup();
-					return(0); }
-
-				lprintf("\r\nResult Code: %s\r\n",str);
-
-				/* IP (vmodem) logging additions by enigma */
-				ips = strstr(str, "TEL FROM ");
-				if(ips) {
-				  strcpy(ipstr, ips+9);
-				}
-
-				if(strstr(str,"FAX") || strstr(str,"+FCO")) {
-                                    /* Just for the ZyXEL's */
-                    mswait(1500);   /* 1 and a half second wait for ZyXEL */
-                    sys_misc&=~SM_ERRALARM;
-                    bail(100); }
-
-				if(mdm_misc&MDM_VERBAL) {
-					if(!cur_rate
-						&& (!strnicmp(str,"CONNECT ",8)
-						|| !strnicmp(str,"CARRIER ",8))) {
-						cur_rate=atol(str+8);
-						// build description
-						for(i=8,j=0;str[i] && j<LEN_MODEM;i++) {
-							if(j==2 && isdigit(str[i])
-								&& str[i+1]=='0' && str[i+2]=='0'
-								&& !isdigit(str[i+3]) && j+1<LEN_MODEM) {
-								connection[j++]='.';
-								connection[j++]=str[i];
-								i+=2; }
-							else
-								connection[j++]=str[i]; }
-						connection[j]=0; }
-					if(!cur_rate && !strcmp(str,"CONNECT"))
-						cur_rate=com_rate;
-					if(cur_rate
-						&& (strstr(str,"ARQ") || strstr(str,"MNP")
-						|| strstr(str,"V42") || strstr(str,"LAPM")
-						|| strstr(str,"REL")))
-						cur_cps=cur_rate/9; }
-				else {	/* numeric */
-					j=atoi(str);
-					for(i=0;i<mdm_results;i++)
-						if(mdm_result[i].code==j) break;
-					if(!cur_rate) {
-						if(i==mdm_results) {
-							lprintf("Unknown result code: '%s'\r\n",str);
-							sprintf(tmp,"Unknown modem result code: '%s'",str);
-							errorlog(tmp);
-							if(mdm_misc&MDM_KNOWNRES || !mdm_results) {
-								hangup();
-								return(0); }	/* Don't allow invalid codes */
-							i--; }	/* Use last configured result code */
-						else
-							result_code=mdm_result[i].code; }
-					if(!strncmpi(mdm_result[i].str,"EXIT ",5))
-						bail(atoi(mdm_result[i].str+5));
-					if(!strcmpi(mdm_result[i].str,"FAX")) {
-						lputs("FAX Connection\r\n");
-						bail(100); }
-					if(!strcmpi(mdm_result[i].str,"IGNORE") || cur_rate)
-                        lputs("Ignored\r\n");
-					else {
-						cur_rate=mdm_result[i].rate;
-						cur_cps=mdm_result[i].cps;
-						strcpy(connection,mdm_result[i].str); } } } }
-		else   /* dumb modem */
-			cur_rate=com_rate;
-
-		if(!connection[0])
-			sprintf(connection,"%lu",cur_rate);
-		lprintf("Logging Caller in at %s\r\n",connection);
-		if(!cur_cps)
-			cur_cps=cur_rate/10L;
-
-        rioctl(IOCE|((RXLOST|FERR|PERR|OVRR)<<8));  /* clear error flags */
-        console=CON_R_ECHO|CON_L_ECHO|CON_R_INPUT|CON_L_INPUT;
-        online=ON_REMOTE;
-        gotcaller=1;
-		putcom(crlf);
-#if defined(__OS2__)
-		putcom(decrypt(VersionNoticeOS2,0));
-#elif defined(__WIN32__)
-		putcom(decrypt(VersionNoticeW32,0));
-#else
-		putcom(decrypt(VersionNoticeDOS,0));
-#endif
-		putcom(crlf);
-		lprintf("Pausing %u Seconds...",mdm_ansdelay);
-		if(node_misc&NM_ANSALARM) {
-			now=time(NULL);
-			while(time(NULL)-now<mdm_ansdelay)
-                for(x=0;x<10;x++)
-					for(y=0;y<10;y++)
-						beep((x*100)+(y*5),10); }
-		else
-			secwait(mdm_ansdelay);
-        nosound();
-		rioctl(IOFI); } }	/* flush input buffer */
-
-reset_logon_vars();
-calls++;
-useron.misc=0;
-answertime=logontime=starttime=time(NULL);
-if(online==ON_REMOTE) {
-	setrate();
-
-    now=time(NULL);
-    gm=localtime(&now);
-	sprintf(str,"%02d:%02d%c  %s %s %02d %u            Node %3u  %5lubps (%s)"
-        ,gm->tm_hour>12 ? gm->tm_hour-12 : gm->tm_hour==0 ? 12 : gm->tm_hour
-		,gm->tm_min,gm->tm_hour>=12 ? 'p' : 'a',wday[gm->tm_wday]
-        ,mon[gm->tm_mon],gm->tm_mday,gm->tm_year+1900,node_num,cur_rate
-        ,connection);
-	if(result_code) {
-		sprintf(tmp," [%d]",result_code);
-		strcat(str,tmp); }
-	logline("@",str);
-
-	/* IP trashcan modification by enigma */
-	if(trashcan(ipstr,"IP")) {
-		sprintf(tmp, "IP Trashcan: %s, hanging up!\r\n", ipstr);
-		logline("@!",tmp);
-		hangup();
-		return(0); }
-
-	if(mdm_misc&MDM_CALLERID) {
-		outcom(0xC);
-#if defined(__OS2__)
-		putcom(decrypt(VersionNoticeOS2,0));
-#elif defined(__WIN32__)
-		putcom(decrypt(VersionNoticeW32,0));
-#else
-		putcom(decrypt(VersionNoticeDOS,0));
-#endif
-		putcom(crlf);
-		sprintf(str,"CID: %-*s %s",LEN_CID,cid,cname);
-		logline("@*",str);
-		if(trashcan(cid,"CID")) {
-			hangup();
-			return(0); } } }
-lclini(node_scrnlen-1);
-if(online==ON_REMOTE) {
-    if(node_dollars_per_call) { /* Billing node stuff */
-        now=time(NULL);
-        bprintf(text[BillingNodeMsg],sys_name,node_dollars_per_call);
-		while(online && now-answertime<30) {
-			if(incom()!=NOINP) {
-				if(!(mdm_misc&MDM_NODTR))
-					dtr(15);
-				else
-					mdmcmd(mdm_hang); }
-            checkline();
-            now=time(NULL); }
-        if(!online)
-            return(0); }
-	rioctl(IOFI);
-	putcom("\x1b[99B\x1b[6n\x1b[!_\x1b[0t_\x1b[0m_\xC");
-    lputc(FF);
-	i=l=lncntr=autoterm=0;
-	tos=1;
-#if defined(__OS2__)
-	strcpy(str,decrypt(VersionNoticeOS2,0));
-#elif defined(__WIN32__)
-	strcpy(str,decrypt(VersionNoticeW32,0));
-#else
-	strcpy(str,decrypt(VersionNoticeDOS,0));
-#endif
-	strcat(str,decrypt(CopyrightNotice,0));
-	center(str);
-	mswait(500);
-	while(i++<30 && l<40) { 		/* wait up to 3 seconds for response */
-		if((c=(incom()&0x7f))=='R') {   /* break immediately if response */
-			str[l++]=c;
-			mswait(110);
-			break; }
-        if(c) {
-			str[l++]=c;
-			if(l==1 && c!=ESC)
-				break; }
-        else
-			mswait(100); }
-
-	if(rioctl(RXBC))	/* wait a bit for extra RIP reply chars */
-		mswait(550);
-
-	while((i=(incom()&0x7f))!=NOINP && l<40)
-		str[l++]=i;
-	str[l]=0;
-
-#if 0
-	for(i=0;str[i];i++)
-		lprintf("%02X ",str[i]);
-	lputs(crlf);
-#endif
-
-    if(l) {
-        if(str[0]==ESC && str[1]=='[') {
-			useron.misc|=(ANSI|COLOR);
-			autoterm|=ANSI;
-            rows=((str[2]&0xf)*10)+(str[3]&0xf);
-			if(rows<10 || rows>99) rows=24; }
-		truncsp(str);
-		if(strstr(str,"RIPSCRIP")) {
-			logline("@R",strstr(str,"RIPSCRIP"));
-			useron.misc|=(RIP|COLOR|ANSI);
-			autoterm|=(RIP|COLOR|ANSI); }
-		else if(strstr(str,"DC-TERM")
-			&& toupper(*(strstr(str,"DC-TERM")+12))=='W') {
-			logline("@W",strstr(str,"DC-TERM"));
-			useron.misc|=(WIP|COLOR|ANSI);
-			autoterm|=(WIP|COLOR|ANSI); } }
-    rioctl(IOFI); /* flush left-over or late response chars */
-    sprintf(str,"%sANSWER",text_dir);
-	sprintf(tmp,"%s.%s",str,autoterm&WIP ? "WIP":"RIP");
-	sprintf(str2,"%s.ANS",str);
-	if(autoterm&(RIP|WIP) && fexist(tmp))
-		strcat(str,autoterm&WIP ? ".WIP":".RIP");
-	else if(autoterm&ANSI && fexist(str2))
-        strcat(str,".ANS");
-    else
-		strcat(str,".ASC");
-    rioctl(IOSM|PAUSE);
-	sys_status|=SS_PAUSEON;
-	tos=1;
-    printfile(str,P_NOABORT);
-	sys_status&=~SS_PAUSEON;
-    CRLF; }
-else
-	useron.misc=(UPAUSE|ANSI|COLOR);
-
-useron.number=0;
-
-exec_bin(login_mod,&main_csi);
-
-if(!useron.number)
-    hangup();
-if(!online) {
-	logout();
-	return(0); }
-
-if(online==ON_REMOTE && mdm_misc&MDM_CALLERID) {
-	strcpy(useron.note,cid);
-	putuserrec(useron.number,U_NOTE,LEN_NOTE,useron.note); }
-
-/* log the IP by enigma */
-
-if(online==ON_REMOTE && ipstr[0]!='\0') {
-	sprintf(useron.note, "Telnet: %s", ipstr);
-	putuserrec(useron.number,U_NOTE,LEN_NOTE,useron.note);
-	logline("@*", useron.note); }
-
-if(!(sys_status&SS_USERON)) {
-    errormsg(WHERE,ERR_CHK,"User not logged on",0);
-	hangup();
-	logout();
-	return(0); }
-
-return(1);
-}
-
diff --git a/src/sbbs2/makefile b/src/sbbs2/makefile
deleted file mode 100644
index 1a2595638b..0000000000
--- a/src/sbbs2/makefile
+++ /dev/null
@@ -1,225 +0,0 @@
-#########################################################################
-# Makefile for Synchronet BBS 						#
-# For use with Borland c++ for DOS/Win32 or Borland C++ for OS/2 	#
-# Tabstop=8		      						#
-# usage: make           (under DOS/Windows to build DOS\SBBS.EXE)	#
-#        make           (under OS/2 to build OS2\SBBS4OS2.EXE)		#
-#        make -DW32	(under Windows 95/NT to build W32\SBBS4W32.EXE) #
-#########################################################################
-
-# Macros
-BCDIR	= e:\bc31
-CC	= $(BCDIR)\bin\bcc
-LD	= $(BCDIR)\bin\tlink
-INCLUDE = $(BCDIR)\include;smb;rio;..\spawno
-LIB     = $(BCDIR)\lib
-DEFINES = -DSBBS 
-
-!if $d(__OS2__)
-CC	= c:\bcos2\bin\bcc
-LD	= c:\bcos2\bin\tlink
-INCLUDE = c:\bcos2\include;smb;rio
-LIB	= c:\bcos2\lib
-OS	= OS2
-CFLAGS	= -N -d -C -sm -I$(INCLUDE) $(DEFINES) -n$(OS) -w-pro
-LFLAGS	= -m -s -c -Toe -ap -S:18000
-#16k still caused stack overflows?
-#-w-srf?
-MAIN	= $(OS)\sbbs4os2.exe
-
-!elif $d(W32)
-
-OS	= W32 
-CC      = \bc45\bin\bcc32
-LD      = \bc45\bin\tlink32
-INCLUDE = \bc45\include;smb;rio
-LIB	= \bc45\lib
-CFLAGS	= -N -d -C -H -tWC -tWM -I$(INCLUDE) $(DEFINES) -n$(OS) -w-pro
-LFLAGS  = -m -n -c -Tpe -ax -S:18000
-MAIN	= $(OS)\sbbs4w32.exe
-
-!else
-OS      = DOS
-MODEL	= l
-CFLAGS	= -N -d -C -Y -O1 -m$(MODEL) -I$(INCLUDE) $(DEFINES) -n$(OS) -w-pro
-LFLAGS	= -l -m -n -c 
-MAIN	= $(OS)\sbbs.exe
-!endif
-
-
-!if $d(__OS2__)
-OBJS	= OS2\riolib.obj
-!elif $d(W32)
-OBJS	= W32\riolib.obj
-!else
-OBJS	= DOS\rciol.obj ..\mswait\DOS\mswait$(MODEL).obj
-!endif
-OBJS	= $(OBJS) $(OS)\etext.obj $(OS)\scfgvars.obj $(OS)\vars.obj \
-	  $(OS)\xtrn.obj 
-
-OVLOBJS = $(OS)\ars.obj\
-	  $(OS)\chk_ar.obj\
-	  $(OS)\comio.obj \
-	  $(OS)\con_in.obj \
-	  $(OS)\con_out.obj \
-          $(OS)\con_mid.obj \
-          $(OS)\con_hi.obj \
-	  $(OS)\atcodes.obj \
-	  $(OS)\data.obj \
-	  $(OS)\data_ovl.obj\
-	  $(OS)\getuser.obj\
-	  $(OS)\userrec.obj\
-	  $(OS)\getnode.obj\
-	  $(OS)\putnode.obj\
-	  $(OS)\exec.obj \
-	  $(OS)\execmisc.obj \
-	  $(OS)\execfunc.obj \
-	  $(OS)\execmsg.obj \
-	  $(OS)\execfile.obj \
-	  $(OS)\file.obj $(OS)\file_ovl.obj \ 
-	  $(OS)\chat.obj $(OS)\fido.obj \
-	  $(OS)\initdata.obj \ 
-	  $(OS)\listfile.obj \
-	  $(OS)\viewfile.obj \
-	  $(OS)\logio.obj \
-	  $(OS)\login.obj \
-	  $(OS)\logon.obj \
-	  $(OS)\logout.obj \
-	  $(OS)\newuser.obj \
-	  $(OS)\mail.obj \  
- 	  $(OS)\main.obj $(OS)\main_ovl.obj $(OS)\main_sec.obj \
-	  $(OS)\main_wfc.obj \
-          $(OS)\msg1.obj \
-	  $(OS)\msg2.obj\
-	  $(OS)\putmsg.obj\
-	  $(OS)\postmsg.obj\
-	  $(OS)\email.obj\
-	  $(OS)\netmail.obj\
-	  $(OS)\bulkmail.obj\
-          $(OS)\misc.obj\
-	  $(OS)\qwk.obj\
-	  $(OS)\qwktomsg.obj\
-	  $(OS)\msgtoqwk.obj\
-	  $(OS)\pack_qwk.obj\
-	  $(OS)\pack_rep.obj\
-	  $(OS)\un_qwk.obj\
-	  $(OS)\un_rep.obj\
-	  $(OS)\readmsgs.obj\
-	  $(OS)\scfglib1.obj\
-	  $(OS)\scfglib2.obj\
-	  $(OS)\str.obj $(OS)\text_sec.obj $(OS)\useredit.obj\
-	  $(OS)\xfer_lo.obj $(OS)\xfer_mid.obj $(OS)\xfer_hi.obj\
-	  $(OS)\xtrn_ovl.obj $(OS)\xfer_sec.obj $(OS)\lzh.obj\
-	  $(OS)\smblib.obj
-
-HEADERS = sbbs.h sbbsdefs.h gen_defs.h nodedefs.h text.h vars.c scfgvars.c \
-	  smb\smblib.h smb\smbdefs.h
-
-# Implicit C Compile Rule
-{.}.c.obj:
-	@echo Compiling (I) $< to $@ ...
-	$(CC) $(CFLAGS) -c $<
-
-# Main EXE Link Rule
-$(MAIN): $(OBJS) $(OVLOBJS) $(OS)\ver.obj
-    	@echo Linking $< ...
-!if $d(__OS2__)
-	$(LD) $(LFLAGS) @&&+
-$(OBJS) $(LIB)\c02.obj $(OS)\ver.obj $(OVLOBJS)
-+, $*, $*, $(LIB)\os2.lib $(LIB)\c2mt.lib
-!elif $d(W32)
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c0X32.OBJ $(OBJS) $(OS)\ver.obj $(OVLOBJS)
-+, $*, $*, $(LIB)\import32.lib $(LIB)\cw32mt.lib
-!else
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c0$(MODEL) $(OBJS) $(OS)\ver.obj /o $(OVLOBJS), \
-$*, $*, ..\spawno\spawnl $(LIB)\overlay $(LIB)\c$(MODEL) \
-	$(LIB)\math$(MODEL) $(LIB)\emu
-+
-!endif
-
-$(OS)\smblib.obj: smb\smblib.c smb\smblib.h smb\smbdefs.h
-	@echo Compiling SMBLIB ...
-	$(CC) $(CFLAGS) -c -DSMB_GETMSGTXT smb\smblib.c
-
-$(OS)\lzh.obj: smb\lzh.c smb\lzh.h 
-	@echo Compiling LZH ...
-	$(CC) $(CFLAGS) -c -DLZH_DYNAMIC_BUF smb\lzh.c
-
-$(OS)\riolib.obj: rio\riolib.c rio\riolib.h rio\riodefs.h
-	@echo Compiling RIOLIB ...
-	$(CC) $(CFLAGS) -c rio\riolib.c
-
-etext.h: etext.dat
-	@echo Creating new encrypted text (ETEXT) Code and Header files...
-	genetext
-			
-# All .obj modules
-$(OS)\ars.obj:		$(HEADERS) ars_defs.h
-$(OS)\chk_ar.obj:	$(HEADERS) ars_defs.h
-$(OS)\atcodes.obj:	$(HEADERS) cmdshell.h
-$(OS)\chat.obj:        	$(HEADERS)
-$(OS)\comio.obj:       	$(HEADERS)
-$(OS)\con_in.obj:      	$(HEADERS)
-$(OS)\con_out.obj:     	$(HEADERS)
-$(OS)\con_mid.obj:     	$(HEADERS)
-$(OS)\con_hi.obj:      	$(HEADERS)
-$(OS)\data.obj:        	$(HEADERS)
-$(OS)\data_ovl.obj:    	$(HEADERS)
-$(OS)\exec.obj:		$(HEADERS) cmdshell.h
-$(OS)\execmisc.obj:	$(HEADERS) cmdshell.h
-$(OS)\execfunc.obj:	$(HEADERS) cmdshell.h
-$(OS)\execmsg.obj:	$(HEADERS) cmdshell.h
-$(OS)\execfile.obj:	$(HEADERS) cmdshell.h
-$(OS)\etext.obj:       	etext.h
-$(OS)\fido.obj:        	$(HEADERS)
-$(OS)\file.obj:        	$(HEADERS)
-$(OS)\file_ovl.obj:    	$(HEADERS)
-$(OS)\initdata.obj:    	$(HEADERS)
-$(OS)\listfile.obj:	$(HEADERS)
-$(OS)\viewfile.obj:	$(HEADERS)
-$(OS)\logio.obj:       	$(HEADERS)
-$(OS)\login.obj:	$(HEADERS)
-$(OS)\logon.obj:    	$(HEADERS) cmdshell.h
-$(OS)\logout.obj:	$(HEADERS)
-$(OS)\main.obj:        	$(HEADERS) cmdshell.h
-$(OS)\mail.obj:	       	$(HEADERS)
-$(OS)\main_ovl.obj:    	$(HEADERS) etext.h
-$(OS)\main_sec.obj:    	$(HEADERS)
-$(OS)\main_wfc.obj:	$(HEADERS) qwk.h etext.h
-$(OS)\misc.obj:        	$(HEADERS) ars_defs.h smb\crc32.h
-$(OS)\msg1.obj:	       	$(HEADERS)
-$(OS)\msg2.obj:     	$(HEADERS)
-$(OS)\newuser.obj:	$(HEADERS)
-$(OS)\putmsg.obj:	$(HEADERS)
-$(OS)\email.obj:	$(HEADERS) cmdshell.h
-$(OS)\postmsg.obj:     	$(HEADERS)
-$(OS)\netmail.obj:     	$(HEADERS) qwk.h
-$(OS)\bulkmail.obj:    	$(HEADERS)
-$(OS)\qwk.obj:		$(HEADERS) qwk.h post.h etext.h
-$(OS)\qwktomsg.obj:	$(HEADERS) qwk.h
-$(OS)\msgtoqwk.obj:	$(HEADERS) qwk.h
-$(OS)\pack_qwk.obj:	$(HEADERS) qwk.h post.h
-$(OS)\pack_rep.obj:	$(HEADERS) qwk.h post.h
-$(OS)\un_qwk.obj:	$(HEADERS) qwk.h
-$(OS)\un_rep.obj:	$(HEADERS) qwk.h
-$(OS)\readmsgs.obj:	$(HEADERS) post.h
-$(OS)\scfglib1.obj:    	$(HEADERS) scfglib.h
-$(OS)\scfglib2.obj:    	$(HEADERS) scfglib.h
-$(OS)\scfgvars.obj:    	$(HEADERS)
-$(OS)\str.obj:         	$(HEADERS)
-$(OS)\getnode.obj:	$(HEADERS)
-$(OS)\putnode.obj:	$(HEADERS)
-$(OS)\text_sec.obj:	$(HEADERS)
-$(OS)\getuser.obj:	$(HEADERS)
-$(OS)\userrec.obj:	$(HEADERS)
-$(OS)\useredit.obj:    	$(HEADERS)
-$(OS)\vars.obj:        	$(HEADERS)
-$(OS)\ver.obj:		$(OBJS) $(OVLOBJS) $(HEADERS)
-$(OS)\xfer_lo.obj:     	$(HEADERS)
-$(OS)\xfer_mid.obj:    	$(HEADERS)
-$(OS)\xfer_hi.obj:     	$(HEADERS)
-$(OS)\xfer_sec.obj:	$(HEADERS)
-$(OS)\xtrn.obj:        	$(HEADERS) cmdshell.h
-$(OS)\xtrn_ovl.obj:    	$(HEADERS)
diff --git a/src/sbbs2/misc.c b/src/sbbs2/misc.c
deleted file mode 100644
index 8bb6116ca6..0000000000
--- a/src/sbbs2/misc.c
+++ /dev/null
@@ -1,815 +0,0 @@
-#line 1 "MISC.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/***************************************************************************/
-/* Miscellaneous functions that are useful many places throughout the code */
-/***************************************************************************/
-
-#include "sbbs.h"
-#include "crc32.h"
-
-#ifdef __WIN32__
-#include <windows.h>	// Required for kbd_state(), beep(), and mswait()
-#endif
-
-/****************************************************************************/
-/* Returns the number of characters in 'str' not counting ctrl-ax codes		*/
-/* or the null terminator													*/
-/****************************************************************************/
-int bstrlen(char *str)
-{
-	int i=0;
-
-while(*str) {
-	if(*str==1) /* ctrl-a */
-		str++;
-	else
-		i++;
-	if(!(*str)) break;
-	str++; }
-return(i);
-}
-
-void strip_ctrl(char *str)
-{
-	char tmp[1024];
-	int i,j,k;
-
-k=strlen(str);
-for(i=j=0;i<k;i++)
-	if(str[i]==1)  /* Ctrl-a */
-        i++;
-	else if(j && str[i]<=SP && tmp[j-1]==SP)
-		continue;
-	else if(i && !isalnum(str[i]) && str[i]==str[i-1])
-		continue;
-	else if((uchar)str[i]>=SP)
-		tmp[j++]=str[i];
-	else if(str[i]==TAB || (str[i]==CR && str[i+1]==LF))
-		tmp[j++]=SP;
-tmp[j]=0;
-strcpy(str,tmp);
-}
-
-void strip_exascii(char *str)
-{
-	char tmp[1024];
-	int i,j,k;
-
-k=strlen(str);
-for(i=j=0;i<k;i++)
-	if(!(str[i]&0x80))
-		tmp[j++]=str[i];
-tmp[j]=0;
-strcpy(str,tmp);
-}
-
-/****************************************************************************/
-/* Returns in 'string' a character representation of the number in l with   */
-/* commas.																	*/
-/****************************************************************************/
-char *ultoac(ulong l, char *string)
-{
-	char str[256];
-	char i,j,k;
-
-ultoa(l,str,10);
-i=strlen(str)-1;
-j=i/3+1+i;
-string[j--]=0;
-for(k=1;i>-1;k++) {
-	string[j--]=str[i--];
-	if(j>0 && !(k%3))
-		string[j--]=','; }
-return(string);
-}
-
-/****************************************************************************/
-/* Network open function. Opens all files DENYALL and retries LOOP_NOPEN    */
-/* number of times if the attempted file is already open or denying access  */
-/* for some other reason.	All files are opened in BINARY mode.			*/
-/****************************************************************************/
-int nopen(char *str, int access)
-{
-	char logstr[256];
-	int file,share,count=0;
-
-if(access&O_DENYNONE) {
-	share=SH_DENYNO;
-	access&=~O_DENYNONE; }
-else if(access==O_RDONLY) share=SH_DENYWR;
-else share=SH_DENYRW;
-while(((file=sopen(str,O_BINARY|access,share,S_IWRITE))==-1)
-	&& errno==EACCES && count++<LOOP_NOPEN)
-	if(count>10)
-		mswait(55);
-if(count>(LOOP_NOPEN/2) && count<=LOOP_NOPEN) {
-	sprintf(logstr,"NOPEN COLLISION - File: %s Count: %d"
-		,str,count);
-	logline("!!",logstr); }
-if(file==-1 && errno==EACCES)
-	bputs("\7\r\nNOPEN: ACCESS DENIED\r\n\7");
-return(file);
-}
-
-/****************************************************************************/
-/* This function performs an nopen, but returns a file stream with a buffer */
-/* allocated.																*/
-/****************************************************************************/
-FILE *fnopen(int *file, char *str, int access)
-{
-	char mode[128];
-	FILE *stream;
-
-if(((*file)=nopen(str,access))==-1)
-	return(NULL);
-
-if(access&O_APPEND) {
-	if(access&O_RDONLY)
-		strcpy(mode,"a+");
-	else
-		strcpy(mode,"a"); }
-else {
-	if(access&O_WRONLY)
-		strcpy(mode,"r+");
-	else
-		strcpy(mode,"r"); }
-stream=fdopen((*file),mode);
-if(stream==NULL) {
-	close(*file);
-	errormsg(WHERE,ERR_FDOPEN,str,access);
-	return(NULL); }
-setvbuf(stream,NULL,_IOFBF,2*1024);
-return(stream);
-}
-
-#ifndef __FLAT__
-/****************************************************************************/
-/* This function reads files that are potentially larger than 32k.  		*/
-/* Up to one megabyte of data can be read with each call.                   */
-/****************************************************************************/
-long lread(int file, char huge *buf,long bytes)
-{
-	long count;
-
-for(count=bytes;count>32767;count-=32767,buf+=32767)
-	if(read(file,(char *)buf,32767)!=32767)
-		return(-1L);
-if(read(file,(char *)buf,(int)count)!=count)
-	return(-1L);
-return(bytes);
-}
-
-long lfread(char huge *buf, long bytes, FILE *fp)
-{
-	long count;
-
-for(count=bytes;count>0x7fff;count-=0x7fff,buf+=0x7fff)
-	if(fread((char *)buf,1,0x7fff,fp)!=0x7fff)
-		return(0);
-if(fread((char *)buf,1,(int)count,fp)!=count)
-	return(0);
-return(bytes);
-}
-
-/****************************************************************************/
-/* This function writes files that are potentially larger than 32767 bytes  */
-/* Up to one megabytes of data can be written with each call.				*/
-/****************************************************************************/
-long lwrite(int file, char huge *buf, long bytes)
-{
-
-	long count;
-
-for(count=bytes;count>32767;count-=32767,buf+=32767)
-	if(write(file,(char *)buf,32767)!=32767)
-		return(-1L);
-if(write(file,(char *)buf,(int)count)!=count)
-	return(-1L);
-return(bytes);
-}
-#endif
-
-/****************************************************************************/
-/* Truncates white-space chars off end of 'str' and terminates at first tab */
-/****************************************************************************/
-void truncsp(char *str)
-{
-	uint c;
-
-str[strcspn(str,"\t")]=0;
-c=strlen(str);
-while(c && (uchar)str[c-1]<=SP) c--;
-str[c]=0;
-}
-
-/****************************************************************************/
-/* Puts a backslash on path strings 										*/
-/****************************************************************************/
-void backslash(char *str)
-{
-    int i;
-
-i=strlen(str);
-if(i && str[i-1]!='\\') {
-    str[i]='\\'; str[i+1]=0; }
-}
-
-/****************************************************************************/
-/* Puts a backslash on path strings if not just a drive letter and colon	*/
-/****************************************************************************/
-void backslashcolon(char *str)
-{
-    int i;
-
-i=strlen(str);
-if(i && str[i-1]!='\\' && str[i-1]!=':') {
-    str[i]='\\'; str[i+1]=0; }
-}
-
-/****************************************************************************/
-/* Updates 16-bit "rcrc" with character 'ch'                                */
-/****************************************************************************/
-void ucrc16(uchar ch, ushort *rcrc) {
-	ushort i, cy;
-    uchar nch=ch;
- 
-for (i=0; i<8; i++) {
-    cy=*rcrc & 0x8000;
-    *rcrc<<=1;
-    if (nch & 0x80) *rcrc |= 1;
-    nch<<=1;
-    if (cy) *rcrc ^= 0x1021; }
-}
-
-/****************************************************************************/
-/* Returns CRC-16 of string (not including terminating NULL)				*/
-/****************************************************************************/
-ushort crc16(char *str)
-{
-	int 	i=0;
-	ushort	crc=0;
-
-ucrc16(0,&crc);
-while(str[i])
-	ucrc16(str[i++],&crc);
-ucrc16(0,&crc);
-ucrc16(0,&crc);
-return(crc);
-}
-
-/****************************************************************************/
-/* Returns CRC-32 of string (not including terminating NULL)				*/
-/****************************************************************************/
-ulong crc32(char *buf, ulong len)
-{
-	ulong l,crc=0xffffffff;
-
-for(l=0;l<len;l++)
-	crc=ucrc32(buf[l],crc);
-return(~crc);
-}
-
-/****************************************************************************/
-/* Compares pointers to pointers to char. Used in conjuction with qsort()   */
-/****************************************************************************/
-int pstrcmp(char **str1, char **str2)
-{
-return(strcmp(*str1,*str2));
-}
-
-/****************************************************************************/
-/* Returns the number of characters that are the same between str1 and str2 */
-/****************************************************************************/
-int strsame(char *str1, char *str2)
-{
-	int i,j=0;
-
-for(i=0;i<strlen(str1);i++)
-	if(str1[i]==str2[i]) j++;
-return(j);
-}
-
-#define MV_BUFLEN	4096
-
-/****************************************************************************/
-/* Moves or copies a file from one dir to another                           */
-/* both 'src' and 'dest' must contain full path and filename                */
-/* returns 0 if successful, -1 if error                                     */
-/****************************************************************************/
-int mv(char *src, char *dest, char copy)
-{
-	char str[256],*buf,atr=curatr;
-	int  ind,outd;
-	long length,chunk=MV_BUFLEN,l;
-	struct ftime ftime;
-	FILE *inp,*outp;
-
-if(!stricmp(src,dest))	 /* source and destination are the same! */
-	return(0);
-if(!fexist(src)) {
-	bprintf("\r\n\7MV ERROR: Source doesn't exist\r\n'%s'\r\n"
-		,src);
-	return(-1); }
-if(!copy && fexist(dest)) {
-	bprintf("\r\n\7MV ERROR: Destination already exists\r\n'%s'\r\n"
-		,dest);
-	return(-1); }
-if(!copy && ((src[1]!=':' && dest[1]!=':')
-	|| (src[1]==':' && dest[1]==':' && toupper(src[0])==toupper(dest[0])))) {
-	if(rename(src,dest)) {						/* same drive, so move */
-		bprintf("\r\nMV ERROR: Error renaming '%s'"
-				"\r\n                      to '%s'\r\n\7",src,dest);
-		return(-1); }
-	return(0); }
-attr(WHITE);
-if((ind=nopen(src,O_RDONLY))==-1) {
-	errormsg(WHERE,ERR_OPEN,src,O_RDONLY);
-	return(-1); }
-if((inp=fdopen(ind,"rb"))==NULL) {
-	close(ind);
-	errormsg(WHERE,ERR_FDOPEN,str,O_RDONLY);
-	return(-1); }
-setvbuf(inp,NULL,_IOFBF,32*1024);
-if((outd=nopen(dest,O_WRONLY|O_CREAT|O_TRUNC))==-1) {
-	fclose(inp);
-	errormsg(WHERE,ERR_OPEN,dest,O_WRONLY|O_CREAT|O_TRUNC);
-	return(-1); }
-if((outp=fdopen(outd,"wb"))==NULL) {
-	close(outd);
-	fclose(inp);
-	errormsg(WHERE,ERR_FDOPEN,dest,O_WRONLY|O_CREAT|O_TRUNC);
-	return(-1); }
-setvbuf(outp,NULL,_IOFBF,8*1024);
-length=filelength(ind);
-if(!length) {
-	fclose(inp);
-	fclose(outp);
-	errormsg(WHERE,ERR_LEN,src,0);
-	return(-1); }
-if((buf=(char *)MALLOC(MV_BUFLEN))==NULL) {
-	fclose(inp);
-	fclose(outp);
-	errormsg(WHERE,ERR_ALLOC,nulstr,MV_BUFLEN);
-	return(-1); }
-l=0L;
-while(l<length) {
-	bprintf("%2lu%%",l ? (long)(100.0/((float)length/l)) : 0L);
-	if(l+chunk>length)
-		chunk=length-l;
-	if(fread(buf,1,chunk,inp)!=chunk) {
-		FREE(buf);
-		fclose(inp);
-		fclose(outp);
-		errormsg(WHERE,ERR_READ,src,chunk);
-		return(-1); }
-	if(fwrite(buf,1,chunk,outp)!=chunk) {
-		FREE(buf);
-		fclose(inp);
-		fclose(outp);
-		errormsg(WHERE,ERR_WRITE,dest,chunk);
-		return(-1); }
-	l+=chunk;
-	bputs("\b\b\b"); }
-bputs("   \b\b\b");  /* erase it */
-attr(atr);
-getftime(ind,&ftime);
-setftime(outd,&ftime);
-FREE(buf);
-fclose(inp);
-fclose(outp);
-if(!copy && remove(src)) {
-	errormsg(WHERE,ERR_REMOVE,src,0);
-	return(-1); }
-return(0);
-}
-
-/****************************************************************************/
-/* Prompts user for System Password. Returns 1 if user entered correct PW	*/
-/****************************************************************************/
-char chksyspass(int local)
-{
-	static	int inside;
-	char	str[256],str2[256],x,y,atr;
-	int 	orgcon=console;
-
-if(inside) return(0);
-if(online==ON_REMOTE && !(sys_misc&SM_R_SYSOP))
-	return(0);
-if(online==ON_LOCAL) {
-	if(!(sys_misc&SM_L_SYSOP))
-		return(0);
-	if(!(node_misc&NM_SYSPW) && !(sys_misc&SM_REQ_PW))
-		return(1); }
-if(local) {
-	x=lclwx();
-	y=lclwy();
-	atr=lclatr(LIGHTGRAY<<4);
-	STATUSLINE;
-	lclxy(1,node_scrnlen);
-	lputc(CLREOL);
-	lputs("  System Password: "); }
-else
-	bputs("SY: ");
-console&=~(CON_R_ECHO|CON_L_ECHO);
-inside=1;
-getstr(str,40,K_UPPER);
-if(local) {
-	TEXTWINDOW;
-	lclatr(atr);
-	lclxy(x,y);
-	statusline(); }
-inside=0;
-console=orgcon;
-if(!local)
-	CRLF;
-if(strcmp(sys_pass,str)) {
-	sprintf(str2,"%s #%u System password attempt: '%s'"
-		,useron.alias,useron.number,str);
-	logline("S!",str2);
-	return(0); }
-return(1);
-}
-
-/****************************************************************************/
-/* Converts when_t.zone into ASCII format                                   */
-/****************************************************************************/
-char *zonestr(short zone)
-{
-    static char str[32];
-
-switch((ushort)zone) {
-    case 0:     return("UT");
-    case AST:   return("AST");
-    case EST:   return("EST");
-    case CST:   return("CST");
-    case MST:   return("MST");
-    case PST:   return("PST");
-    case YST:   return("YST");
-    case HST:   return("HST");
-    case BST:   return("BST");
-    case ADT:   return("ADT");
-    case EDT:   return("EDT");
-    case CDT:   return("CDT");
-    case MDT:   return("MDT");
-    case PDT:   return("PDT");
-    case YDT:   return("YDT");
-    case HDT:   return("HDT");
-    case BDT:   return("BDT");
-    case MID:   return("MID");
-    case VAN:   return("VAN");
-    case EDM:   return("EDM");
-    case WIN:   return("WIN");
-    case BOG:   return("BOG");
-    case CAR:   return("CAR");
-    case RIO:   return("RIO");
-    case FER:   return("FER");
-    case AZO:   return("AZO");
-    case LON:   return("LON");
-    case BER:   return("BER");
-    case ATH:   return("ATH");
-    case MOS:   return("MOS");
-    case DUB:   return("DUB");
-    case KAB:   return("KAB");
-    case KAR:   return("KAR");
-    case BOM:   return("BOM");
-    case KAT:   return("KAT");
-    case DHA:   return("DHA");
-    case BAN:   return("BAN");
-    case HON:   return("HON");
-    case TOK:   return("TOK");
-    case SYD:   return("SYD");
-    case NOU:   return("NOU");
-    case WEL:   return("WEL");
-    }
-
-sprintf(str,"%02d:%02u",zone/60,zone<0 ? (-zone)%60 : zone%60);
-return(str);
-}
-
-/****************************************************************************/
-/* Waits so many seconds. Call with 2 or greater.							*/
-/****************************************************************************/
-void secwait(int sec)
-{
-	time_t start;
-
-start=time(NULL);
-while(time(NULL)-start<sec)
-	mswait(1);
-}
-
-/****************************************************************************/
-/* Converts a date string in format MM/DD/YY into unix time format			*/
-/****************************************************************************/
-time_t dstrtounix(char *str)
-{
-
-if(!strncmp(str,"00/00/00",8))
-	return(0);
-curtime.ti_hour=curtime.ti_min=curtime.ti_sec=0;
-if(str[6]<'7')
-	date.da_year=2000+((str[6]&0xf)*10)+(str[7]&0xf);
-else
-	date.da_year=1900+((str[6]&0xf)*10)+(str[7]&0xf);
-if(sys_misc&SM_EURODATE) {
-	date.da_mon=((str[3]&0xf)*10)+(str[4]&0xf);
-	date.da_day=((str[0]&0xf)*10)+(str[1]&0xf); }
-else {
-	date.da_mon=((str[0]&0xf)*10)+(str[1]&0xf);
-	date.da_day=((str[3]&0xf)*10)+(str[4]&0xf); }
-return(dostounix(&date,&curtime));
-}
-
-/****************************************************************************/
-/* Converts unix time format (long - time_t) into a char str MM/DD/YY		*/
-/****************************************************************************/
-char *unixtodstr(time_t unix, char *str)
-{
-
-if(!unix)
-	strcpy(str,"00/00/00");
-else {
-	unixtodos(unix,&date,&curtime);
-	if((unsigned)date.da_mon>12) {	  /* DOS leap year bug */
-		date.da_mon=1;
-		date.da_year++; }
-	if((unsigned)date.da_day>31)
-		date.da_day=1;
-	if(sys_misc&SM_EURODATE)
-		sprintf(str,"%02u/%02u/%02u",date.da_day,date.da_mon
-			,date.da_year>=2000 ? date.da_year-2000 : date.da_year-1900);
-	else
-		sprintf(str,"%02u/%02u/%02u",date.da_mon,date.da_day
-			,date.da_year>=2000 ? date.da_year-2000 : date.da_year-1900); }
-return(str);
-}
-
-/****************************************************************************/
-/* Checks the disk drive for the existence of a file. Returns 1 if it       */
-/* exists, 0 if it doesn't.                                                 */
-/****************************************************************************/
-char fexist(char *filespec)
-{
-    struct ffblk f;
-
-if(findfirst(filespec,&f,0 /*FA_RDONLY|FA_HIDDEN|FA_SYSTEM|FA_DIREC */)==0)
-    return(1);
-return(0);
-}
-
-/****************************************************************************/
-/* Returns the length of the file in 'filespec'                             */
-/****************************************************************************/
-long flength(char *filespec)
-{
-	struct ffblk f;
-
-if(findfirst(filespec,&f,0)==0)
-	return(f.ff_fsize);
-return(-1L);
-}
-
-time_t ftimetounix(struct ftime ft)
-{
-	struct date da;
-	struct time ti;
-
-ti.ti_min=ft.ft_min;
-ti.ti_hour=ft.ft_hour;
-ti.ti_hund=0;
-ti.ti_sec=ft.ft_tsec*2;
-da.da_year=1980+ft.ft_year;
-da.da_day=ft.ft_day;
-da.da_mon=ft.ft_month;
-return(dostounix(&da,&ti));
-}
-
-struct ftime unixtoftime(time_t unix)
-{
-	struct date da;
-	struct time ti;
-	struct ftime ft;
-
-unixtodos(unix,&da,&ti);
-ft.ft_min=ti.ti_min;
-ft.ft_hour=ti.ti_hour;
-ft.ft_tsec=ti.ti_sec/2;
-ft.ft_year=da.da_year-1980;
-ft.ft_day=da.da_day;
-ft.ft_month=da.da_mon;
-return(ft);
-}
-
-/****************************************************************************/
-/* Returns the time/date of the file in 'filespec' in time_t (unix) format  */
-/****************************************************************************/
-long fdate(char *filespec)
-{
-    int file;
-    struct ftime f;
-	time_t t;
-
-if((file=nopen(filespec,O_RDONLY))==-1)
-	return(0);
-getftime(file,&f);
-t=ftimetounix(f);
-close(file);
-return(t);
-}
-
-long fdate_dir(char *filespec)
-{
-    struct ffblk f;
-    struct date fd;
-    struct time ft;
-
-if(findfirst(filespec,&f,0/* FA_RDONLY|FA_HIDDEN|FA_SYSTEM|FA_DIREC */)==0) {
-	fd.da_day=f.ff_fdate&0x1f;
-	fd.da_mon=(f.ff_fdate>>5)&0xf;
-	fd.da_year=1980+((f.ff_fdate>>9)&0x7f);
-	ft.ti_hour=(f.ff_ftime>>11)&0x1f;
-	ft.ti_min=(f.ff_ftime>>5)&0x3f;
-	ft.ti_sec=(f.ff_ftime&0xf)*2;
-    return(dostounix(&fd,&ft)); }
-else return(0);
-}
-
-
-
-/****************************************************************************/
-/* Returns the FidoNet address kept in str as ASCII.                        */
-/****************************************************************************/
-faddr_t atofaddr(char *str)
-{
-    char *p;
-    faddr_t addr;
-
-addr.zone=addr.net=addr.node=addr.point=0;
-if((p=strchr(str,':'))!=NULL) {
-    addr.zone=atoi(str);
-    addr.net=atoi(p+1); }
-else {
-    if(total_faddrs)
-		addr.zone=faddr[0].zone;
-    else
-        addr.zone=1;
-    addr.net=atoi(str); }
-if(!addr.zone)              /* no such thing as zone 0 */
-    addr.zone=1;
-if((p=strchr(str,'/'))!=NULL)
-    addr.node=atoi(p+1);
-else {
-    if(total_faddrs)
-		addr.net=faddr[0].net;
-    else
-        addr.net=1;
-    addr.node=atoi(str); }
-if((p=strchr(str,'.'))!=NULL)
-    addr.point=atoi(p+1);
-return(addr);
-}
-
-/****************************************************************************/
-/* Returns an ASCII string for FidoNet address 'addr'                       */
-/****************************************************************************/
-char *faddrtoa(faddr_t addr)
-{
-    static char str[25];
-    char point[25];
-
-sprintf(str,"%u:%u/%u",addr.zone,addr.net,addr.node);
-if(addr.point) {
-    sprintf(point,".%u",addr.point);
-    strcat(str,point); }
-return(str);
-}
-
-/****************************************************************************/
-/* Returns string for 2 digit hex+ numbers up to 575						*/
-/****************************************************************************/
-char *hexplus(uint num, char *str)
-{
-sprintf(str,"%03x",num);
-str[0]=num/0x100 ? 'f'+(num/0x10)-0xf : str[1];
-str[1]=str[2];
-str[2]=0;
-return(str);
-}
-
-uint hptoi(char *str)
-{
-	char tmp[128];
-	uint i;
-
-if(!str[1] || toupper(str[0])<='F')
-	return(ahtoul(str));
-strcpy(tmp,str);
-tmp[0]='F';
-i=ahtoul(tmp)+((toupper(str[0])-'F')*0x10);
-return(i);
-}
-
-#ifndef __FLAT__
-
-void beep(int freq, int dur)
-{
-sound(freq);
-mswait(dur);
-nosound();
-}
-
-int kbd_state(void)
-{
-return(peekb(0,0x417)); 	 /* Check scroll lock */
-}
-
-#elif defined(__WIN32__)
-
-void beep(int freq, int dur)
-{
-Beep(freq,dur); 				// Requires WINDOWS.H
-}
-
-void mswait(int ms)
-{
-Sleep(ms);						// Requires WINDOWS.H
-}
-
-#endif
-
-#ifdef __OS2__
-
-int kbd_state(void)
-{
-	KBDINFO info;
-
-KbdGetStatus(&info,0);
-return(info.fsState);
-}
-
-void mswait(int msec)
-{
-DosSleep(msec ? msec : 1);
-}
-
-#elif defined(__WIN32__)
-
-#define KBDSTF_RIGHTSHIFT				0x0001
-#define KBDSTF_LEFTSHIFT				0x0002
-#define KBDSTF_CONTROL					0x0004
-#define KBDSTF_ALT						0x0008
-#define KBDSTF_SCROLLLOCK_ON			0x0010
-#define KBDSTF_NUMLOCK_ON				0x0020
-#define KBDSTF_CAPSLOCK_ON				0x0040
-#define KBDSTF_INSERT_ON				0x0080
-#define KBDSTF_LEFTCONTROL				0x0100
-#define KBDSTF_LEFTALT					0x0200
-#define KBDSTF_RIGHTCONTROL 			0x0400
-#define KBDSTF_RIGHTALT 				0x0800
-#define KBDSTF_SCROLLLOCK				0x1000
-#define KBDSTF_NUMLOCK					0x2000
-#define KBDSTF_CAPSLOCK 				0x4000
-#define KBDSTF_SYSREQ					0x8000
-
-int kbd_state(void)
-{
-	int i=0;
-	ulong l;
-	INPUT_RECORD rec;
-
-PeekConsoleInput(stdin,&rec,1,&l);
-if(rec.EventType==KEY_EVENT)
-	l=rec.Event.KeyEvent.dwControlKeyState;
-else if(rec.EventType==MOUSE_EVENT)
-	l=rec.Event.MouseEvent.dwControlKeyState;
-else
-	return(0);
-
-/* Translate Win32 key state to IBM key state */
-
-if(l&RIGHT_ALT_PRESSED)
-	i|=KBDSTF_RIGHTALT;
-if(l&LEFT_ALT_PRESSED)
-	i|=KBDSTF_LEFTALT;
-if(l&RIGHT_CTRL_PRESSED)
-	i|=KBDSTF_RIGHTCONTROL;
-if(l&LEFT_CTRL_PRESSED)
-	i|=KBDSTF_LEFTCONTROL;
-if(l&CAPSLOCK_ON)
-	i|=KBDSTF_CAPSLOCK;
-if(l&NUMLOCK_ON)
-	i|=KBDSTF_NUMLOCK;
-if(l&SCROLLLOCK_ON)
-	i|=KBDSTF_SCROLLLOCK;
-if(l&SHIFT_PRESSED)
-	i|=KBDSTF_LEFTSHIFT;
-
-return(i);
-}
-
-
-
-#endif
-
diff --git a/src/sbbs2/mlabels/make.bat b/src/sbbs2/mlabels/make.bat
deleted file mode 100755
index e2aa293fc7..0000000000
--- a/src/sbbs2/mlabels/make.bat
+++ /dev/null
@@ -1,2 +0,0 @@
-@echo off
-bcc -w-pro -I.. mlabels.c
diff --git a/src/sbbs2/mlabels/mlabels.c b/src/sbbs2/mlabels/mlabels.c
deleted file mode 100644
index 080f6a653c..0000000000
--- a/src/sbbs2/mlabels/mlabels.c
+++ /dev/null
@@ -1,361 +0,0 @@
-/* MLABELS.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* Make mailing labels from Synchronet BBS user database					*/
-/* Digital Dynamics - 03/16/93 v1.00										*/
-/* Digital Dynamics - 03/03/94 v2.00										*/
-/* Digital Dynamics - 04/13/95 v2.10										*/
-/* Digital Dynamics - 07/17/95 v2.20										*/
-
-/* For compilation under Borland/Turbo C(++)								*/
-
-/* Set tabstops to 4 for viewing/printing									*/
-
-/* This program and source code are public domain. Modified versions may	*/
-/* note be distributed without consent from Digital Dynamics.				*/
-
-#include <io.h>
-#include <share.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys\stat.h>
-#include "sbbsdefs.h"           /* Synchronet typedefs and macros header */
-
-#define DOUBLE_COLUMN	(1<<0)		/* Print double column labels */
-#define ATTN_ALIAS		(1<<1)		/* Print ATTN: Alias/Real Name */
-
-char *nulstr="";
-int  min=0,max=99;
-long reqflags[4]={0},reqrest=0,reqexempt=0;
-
-char *usage=
-"\nusage: mlabels <data\\user path> [[-require] [...]] [/options] <outfile>\n"
-"\nwhere require is one of:\n"
-"       L#                  set minimum level to # (default=0)\n"
-"       M#                  set maximum level to # (default=99)\n"
-"       F#<flags>           set required flags from flag set #\n"
-"       E<flags>            set required exemptions\n"
-"       R<flags>            set required restrictions\n"
-"\nwhere options is one or more of:\n"
-"       D                   double column labels\n"
-"       A                   include ATTN: alias/name on label\n"
-"\nexample:\n"
-"\nMLABELS \\SBBS\\DATA\\USER -L50 /D PRN\n";
-
-
-/****************************************************************************/
-/* Converts an ASCII Hex string into an ulong                       */
-/****************************************************************************/
-ulong ahtoul(char *str)
-{
-	ulong l,val=0;
-
-while((l=(*str++)|0x20)!=0x20)
-	val=(l&0xf)+(l>>6&1)*9+val*16;
-return(val);
-}
-
-/****************************************************************************/
-/* Truncates white-space chars off end of 'str' and terminates at first tab */
-/****************************************************************************/
-void truncsp(char *str)
-{
-	char c;
-
-str[strcspn(str,"\t")]=0;
-c=strlen(str);
-while(c && (uchar)str[c-1]<=SP) c--;
-str[c]=0;
-}
-
-/****************************************************************************/
-/* Returns bytes offset into user record for flag set # 'set'               */
-/****************************************************************************/
-long getflagoff(int set)
-{
-switch(set) {
-	default:
-		return(U_FLAGS1);
-	case 2:
-		return(U_FLAGS2);
-	case 3:
-		return(U_FLAGS3);
-	case 4:
-		return(U_FLAGS4); }
-}
-
-/****************************************************************************/
-/* Checks a user record against the requirements set on the command line	*/
-/* Returns 1 if the user meets the requirements (or no requirements were	*/
-/* specified) or 0 if the user does not meet any of the requirements.		*/
-/****************************************************************************/
-int chkuser(FILE *stream, long offset)
-{
-	char str[128];
-	int i;
-
-if(min || max!=99) {			/* Check security level */
-	fseek(stream,offset+U_LEVEL,SEEK_SET);
-	fread(str,2,1,stream);
-	str[2]=0;
-	i=atoi(str);
-	if(i<min || i>max)			/* not within range */
-		return(0); }			/* so skip this user */
-
-for(i=0;i<4;i++)
-	if(reqflags[i]) {
-		fseek(stream,offset+getflagoff(i+1),SEEK_SET);
-		fread(str,8,1,stream);
-		str[8]=0;
-		truncsp(str);
-		if((ahtoul(str)&reqflags[i])!=reqflags[i])
-			return(0); }	/* doesn't have 'em all */
-
-if(reqrest) {
-	fseek(stream,offset+U_REST,SEEK_SET);
-	fread(str,8,1,stream);
-	str[8]=0;
-	truncsp(str);
-	if((ahtoul(str)&reqrest)!=reqrest)
-		return(0); }
-
-if(reqexempt) {
-	fseek(stream,offset+U_REST,SEEK_SET);
-	fread(str,8,1,stream);
-	str[8]=0;
-	truncsp(str);
-	if((ahtoul(str)&reqexempt)!=reqexempt)
-        return(0); }
-
-return(1);
-}
-
-/****************************************************************************/
-/* Attempts to lock a user record, retries for up to 10 seconds 			*/
-/* Returns 0 on success, -1 on failure										*/
-/****************************************************************************/
-int lockuser(FILE *stream, ulong offset)
-{
-	time_t start;
-
-if(lock(fileno(stream),offset,U_LEN)==0)
-	return(0);
-start=time(NULL);
-while(1) {
-	if(lock(fileno(stream),offset,U_LEN)==0)
-		return(0);
-	if(time(NULL)-start>=10L)
-		break; }
-return(-1);
-}
-
-/***************/
-/* Entry point *
-/***************/
-int main(int argc, char **argv)
-{
-	char	str[256],buf1[U_LEN],buf2[U_LEN],infile[128]="",outfile[128]=""
-			,mode=0;	/* optional modes bits */
-	int 	i,j,k,file,printed=0;
-	long	l,length,offset;
-	FILE	*in,*out;
-
-printf("\nSynchronet Mailing Labels v2.10\n");
-for(i=1;i<argc;i++) {
-	if(argv[i][0]=='-')
-		switch(toupper(argv[i][1])) {
-			case 'L':                       /* Set minimum sec level */
-				min=atoi(argv[i]+2);
-				break;
-			case 'M':                       /* Set maximum sec level */
-				max=atoi(argv[i]+2);
-				break;
-			case 'F':                       /* Set required flags */
-				j=3;
-				k=1;
-				if(isdigit(argv[i][2]))
-					k=argv[i][2]&0xf;
-				else
-					j=2;
-				for(;argv[i][j];j++)
-                    if(isalpha(argv[i][j]))
-						reqflags[k-1]|=FLAG(toupper(argv[i][j]));
-				break;
-			case 'R':                       /* Set required restrictions */
-				for(j=2;argv[i][j];j++)
-                    if(isalpha(argv[i][j]))
-						reqrest|=FLAG(toupper(argv[i][j]));
-				break;
-			case 'E':                       /* Set required exemptions */
-				for(j=2;argv[i][j];j++)
-                    if(isalpha(argv[i][j]))
-						reqexempt|=FLAG(toupper(argv[i][j]));
-                break;
-			default:						/* Unrecognized include */
-				printf(usage);
-                exit(1); }
-
-	else if(argv[i][0]=='/') {
-		k=strlen(argv[i]);
-		for(j=1;j<k;j++)
-			switch(toupper(argv[i][j])) {
-				case 'D':   /* Double column labels */
-					mode|=DOUBLE_COLUMN;
-					break;
-				case 'A':   /* Attention Alias/Real Name */
-					mode|=ATTN_ALIAS;
-					break;
-				default:
-					printf("\nUnknown option\n");
-				case '?':
-					printf(usage);
-					exit(1); } }
-	else if(infile[0])				/* in filename already given */
-		strcpy(outfile,argv[i]);
-	else
-		strcpy(infile,argv[i]); }
-
-if(!infile[0] || !outfile[0]) {
-	printf("\nFilename not specified\n");
-	printf(usage);
-	exit(1); }
-
-if(infile[strlen(infile)-1]!='\\' && infile[strlen(infile)-1]!=':')
-	strcat(infile,"\\");
-strcat(infile,"USER.DAT");
-if((file=sopen(infile,O_RDONLY|O_BINARY,SH_DENYNO))==-1) {
-	printf("\nError opening %s\n",infile);
-	exit(1); }
-if((in=fdopen(file,"rb"))==NULL) {
-	printf("\nError opening %s\n",infile);
-	exit(1); }
-setvbuf(in,NULL,_IOFBF,2048);
-length=filelength(file);
-
-if((file=open(outfile,O_WRONLY|O_TRUNC|O_CREAT|O_BINARY
-	,S_IWRITE|S_IREAD))==-1) {
-	printf("\nError opening/creating %s\n",outfile);
-	exit(1); }
-if((out=fdopen(file,"wb"))==NULL) {
-	printf("\nError opening %s\n",outfile);
-	exit(1); }
-setvbuf(out,NULL,_IOFBF,2048);
-
-printf("\n");
-for(offset=0;offset<length;offset+=U_LEN) {
-	printf("%lu of %lu (%u labels)\r"
-		,(offset/U_LEN)+1,length/U_LEN,printed);
-	if(lockuser(in,offset)) {
-		printf("Error locking offset %lu\n",offset);
-		continue; }
-
-	if(!chkuser(in,offset)) {
-		unlock(fileno(in),offset,U_LEN);
-		continue; }
-
-	fseek(in,offset,SEEK_SET);
-	if(!fread(buf1,U_LEN,1,in)) {
-		printf("Couldn't read %lu bytes at %lu\n",U_LEN,offset);
-		break; }
-	unlock(fileno(in),offset,U_LEN);
-	for(i=0;i<U_LEN;i++) {				/* Convert ETX (3) to NULL (0) */
-		if(buf1[i]==ETX)
-			buf1[i]=NULL; }
-
-	buf1[U_MISC+8]=0;
-	l=ahtoul(buf1+U_MISC);
-	if(l&(DELETED|INACTIVE))			 /* skip if deleted or inactive */
-		continue;
-
-	while(mode&DOUBLE_COLUMN) { 		 /* double wide - right column */
-		offset+=U_LEN;
-		printf("%lu of %lu (%u labels)\r"
-			,(offset/U_LEN)+1,length/U_LEN,printed);
-		if(lockuser(in,offset)) {
-			printf("Error locking offset %lu\n",offset);
-			continue; }
-		fseek(in,offset,SEEK_SET);
-		if(!fread(buf2,U_LEN,1,in)) {
-			mode&=~DOUBLE_COLUMN;
-			unlock(fileno(in),offset,U_LEN); }
-		else {
-			if(!chkuser(in,offset)) {
-				unlock(fileno(in),offset,U_LEN);
-				continue; }
-			unlock(fileno(in),offset,U_LEN);
-			for(i=0;i<U_LEN;i++) {		/* Convert ETX (3) to NULL (0) */
-				if(buf2[i]==ETX)
-					buf2[i]=NULL; }
-			buf2[U_MISC+8]=0;
-			l=ahtoul(buf2+U_MISC);
-			if(l&(DELETED|INACTIVE))	/* skip if deleted or inactive */
-				continue;
-			else
-				break; } }
-
-	if(mode&DOUBLE_COLUMN) {			/* print two columns */
-		fprintf(out,"    %-*.*s%*s%.*s\r\n"
-			,LEN_NAME,LEN_NAME
-			,buf1+U_NAME
-			,41-LEN_NAME,nulstr
-			,LEN_NAME
-			,buf2+U_NAME);
-
-		fprintf(out,"    %-*.*s%*s%.*s\r\n"
-			,LEN_ADDRESS,LEN_ADDRESS
-			,buf1+U_ADDRESS
-			,41-LEN_ADDRESS,nulstr
-			,LEN_ADDRESS
-			,buf2+U_ADDRESS);
-
-		sprintf(str,"%.*s %.*s"
-			,LEN_LOCATION,buf1+U_LOCATION
-			,LEN_ZIPCODE,buf1+U_ZIPCODE);
-
-		fprintf(out,"    %-41s%.*s %.*s\r\n"
-			,str
-			,LEN_LOCATION,buf2+U_LOCATION
-			,LEN_ZIPCODE,buf2+U_ZIPCODE);
-
-		sprintf(str,"ATTN: %.*s",LEN_ALIAS,buf1+U_ALIAS);
-
-        if(mode&ATTN_ALIAS)
-			fprintf(out,"    %-41sATTN: %.*s\r\n\r\n\r\n"
-                ,str,LEN_ALIAS,buf2+U_ALIAS);
-        else
-			fprintf(out,"\r\n\r\n\r\n");
-
-		printed+=2; }
-
-	else {								/* single column labels */
-		fprintf(out,"    %.*s\r\n"
-			,LEN_NAME
-			,buf1+U_NAME);
-
-		fprintf(out,"    %.*s\r\n"
-			,LEN_ADDRESS
-			,buf1+U_ADDRESS);
-
-		fprintf(out,"    %.*s %.*s\r\n"
-			,LEN_LOCATION
-			,buf1+U_LOCATION
-			,LEN_ZIPCODE
-			,buf1+U_ZIPCODE);
-
-		if(mode&ATTN_ALIAS)
-			fprintf(out,"    ATTN: %.*s\r\n\r\n\r\n"
-				,LEN_ALIAS,buf1+U_ALIAS);
-        else
-			fprintf(out,"\r\n\r\n\r\n");
-
-		printed++; } }
-printf("\nDone.\n");
-fclose(in);
-fclose(out);
-return(0);
-}
-
-/* end of mlabels.c */
diff --git a/src/sbbs2/msg1.c b/src/sbbs2/msg1.c
deleted file mode 100644
index e13d7a5065..0000000000
--- a/src/sbbs2/msg1.c
+++ /dev/null
@@ -1,493 +0,0 @@
-#line 1 "MSG1.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/***********************************************************************/
-/* Functions that do i/o with messages (posts/mail/auto) or their data */
-/***********************************************************************/
-
-#include "sbbs.h"
-
-#define LZH 1
-
-void lfputs(char HUGE16 *buf, FILE *fp)
-{
-while(*buf) {
-    fputc(*buf,fp);
-    buf++; }
-}
-
-/****************************************************************************/
-/* Loads an SMB message from the open msg base the fastest way possible 	*/
-/* first by offset, and if that's the wrong message, then by number.        */
-/* Returns 1 if the message was loaded and left locked, otherwise			*/
-/****************************************************************************/
-int loadmsg(smbmsg_t *msg, ulong number)
-{
-	char str[128];
-	int i;
-
-if(msg->idx.offset) {				/* Load by offset if specified */
-
-	if((i=smb_lockmsghdr(&smb,msg))!=0) {
-		errormsg(WHERE,ERR_LOCK,smb.file,i);
-		return(0); }
-
-	i=smb_getmsghdr(&smb,msg);
-	if(!i && msg->hdr.number==number)
-		return(1);
-
-	/* Wrong offset  */
-
-	if(!i) {
-		smb_freemsgmem(msg);
-		msg->total_hfields=0; }
-
-	smb_unlockmsghdr(&smb,msg); }
-
-msg->hdr.number=number;
-if((i=smb_getmsgidx(&smb,msg))!=0)				 /* Message is deleted */
-	return(0);
-if((i=smb_lockmsghdr(&smb,msg))!=0) {
-	errormsg(WHERE,ERR_LOCK,smb.file,i);
-	return(0); }
-if((i=smb_getmsghdr(&smb,msg))!=0) {
-	sprintf(str,"(%06lX) #%lu/%lu %s",msg->idx.offset,msg->idx.number
-		,number,smb.file);
-	smb_unlockmsghdr(&smb,msg);
-	errormsg(WHERE,ERR_READ,str,i);
-	return(0); }
-return(msg->total_hfields);
-}
-
-/****************************************************************************/
-/* Displays a text file to the screen, reading/display a block at time		*/
-/****************************************************************************/
-void putmsg_fp(FILE *fp, long length, int mode)
-{
-	uchar *buf,tmpatr;
-	int i,j,b=8192,orgcon=console;
-	long l;
-
-tmpatr=curatr;	/* was lclatr(-1) */
-if((buf=MALLOC(b+1))==NULL) {
-	errormsg(WHERE,ERR_ALLOC,nulstr,b+1L);
-    return; }
-for(l=0;l<length;l+=b) {
-	if(l+b>length)
-		b=length-l;
-	i=j=fread(buf,1,b,fp);
-	if(!j) break;						/* No bytes read */
-	if(l+i<length)						/* Not last block */
-		while(i && buf[i-1]!=LF) i--;	/* Search for last LF */
-	if(!i) i=j; 						/* None found */
-	buf[i]=0;
-	if(i<j)
-		fseek(fp,(long)-(j-i),SEEK_CUR);
-	b=i;
-	if(putmsg(buf,mode|P_SAVEATR))
-		break; }
-if(!(mode&P_SAVEATR)) {
-	console=orgcon;
-	attr(tmpatr); }
-FREE(buf);
-}
-
-void show_msgattr(ushort attr)
-{
-
-bprintf(text[MsgAttr]
-	,attr&MSG_PRIVATE	? "Private  "   :nulstr
-	,attr&MSG_READ		? "Read  "      :nulstr
-	,attr&MSG_DELETE	? "Deleted  "   :nulstr
-	,attr&MSG_KILLREAD	? "Kill  "      :nulstr
-	,attr&MSG_ANONYMOUS ? "Anonymous  " :nulstr
-	,attr&MSG_LOCKED	? "Locked  "    :nulstr
-	,attr&MSG_PERMANENT ? "Permanent  " :nulstr
-	,attr&MSG_MODERATED ? "Moderated  " :nulstr
-	,attr&MSG_VALIDATED ? "Validated  " :nulstr
-	,attr&MSG_REPLIED	? "Replied  "	:nulstr
-	,nulstr
-	,nulstr
-	,nulstr
-	,nulstr
-	,nulstr
-	,nulstr
-	);
-}
-
-/****************************************************************************/
-/* Displays a message header to the screen                                  */
-/****************************************************************************/
-void show_msghdr(smbmsg_t msg)
-{
-	char	*sender=NULL;
-	int 	i;
-
-attr(LIGHTGRAY);
-if(useron.misc&CLRSCRN)
-    outchar(FF);
-else
-    CRLF;
-bprintf(text[MsgSubj],msg.subj);
-if(msg.hdr.attr)
-	show_msgattr(msg.hdr.attr);
-
-bprintf(text[MsgTo],msg.to);
-if(msg.to_ext)
-	bprintf(text[MsgToExt],msg.to_ext);
-if(msg.to_net.addr)
-	bprintf(text[MsgToNet],msg.to_net.type==NET_FIDO
-        ? faddrtoa(*(faddr_t *)msg.to_net.addr) : msg.to_net.addr);
-if(!(msg.hdr.attr&MSG_ANONYMOUS) || SYSOP) {
-	bprintf(text[MsgFrom],msg.from);
-	if(msg.from_ext)
-		bprintf(text[MsgFromExt],msg.from_ext);
-	if(msg.from_net.addr)
-		bprintf(text[MsgFromNet],msg.from_net.type==NET_FIDO
-			? faddrtoa(*(faddr_t *)msg.from_net.addr)
-				: msg.from_net.addr); }
-bprintf(text[MsgDate]
-	,timestr((time_t *)&msg.hdr.when_written.time)
-    ,zonestr(msg.hdr.when_written.zone));
-
-CRLF;
-
-for(i=0;i<msg.total_hfields;i++) {
-	if(msg.hfield[i].type==SENDER)
-		sender=msg.hfield_dat[i];
-	if(msg.hfield[i].type==FORWARDED && sender)
-		bprintf(text[ForwardedFrom],sender
-			,timestr((time_t *)msg.hfield_dat[i])); }
-
-/* Debug stuff
-if(SYSOP) {
-	bprintf("\1n\1c\r\nAux  : \1h%08lX",msg.hdr.auxattr);
-	bprintf("\1n\1c\r\nNum  : \1h%lu",msg.hdr.number); }
-*/
-
-CRLF;
-}
-
-#if !LZH
-
-/****************************************************************************/
-/* Displays message header and text (if not deleted)                        */
-/****************************************************************************/
-void show_msg(smbmsg_t msg, int mode)
-{
-	ushort xlat;
-    int i;
-
-show_msghdr(msg);
-for(i=0;i<msg.hdr.total_dfields;i++)
-	switch(msg.dfield[i].type) {
-        case TEXT_BODY:
-        case TEXT_TAIL:
-			fseek(smb.sdt_fp,msg.hdr.offset+msg.dfield[i].offset
-                ,SEEK_SET);
-			fread(&xlat,2,1,smb.sdt_fp);
-			if(xlat!=XLAT_NONE) 		/* no translations supported */
-				continue;
-			putmsg_fp(smb.sdt_fp,msg.dfield[i].length-2,mode);
-            CRLF;
-            break; }
-}
-
-#else
-
-/****************************************************************************/
-/* Displays message header and text (if not deleted)                        */
-/****************************************************************************/
-void show_msg(smbmsg_t msg, int mode)
-{
-	char *inbuf,*lzhbuf;
-	ushort xlat;
-	int i,lzh;
-	long lzhlen,length;
-
-show_msghdr(msg);
-for(i=0;i<msg.hdr.total_dfields;i++)
-	switch(msg.dfield[i].type) {
-        case TEXT_BODY:
-        case TEXT_TAIL:
-			fseek(smb.sdt_fp,msg.hdr.offset+msg.dfield[i].offset
-                ,SEEK_SET);
-			fread(&xlat,2,1,smb.sdt_fp);
-			lzh=0;
-			if(xlat==XLAT_LZH) {
-				lzh=1;
-				fread(&xlat,2,1,smb.sdt_fp); }
-			if(xlat!=XLAT_NONE) 		/* no translations supported */
-				continue;
-			if(lzh) {
-				length=msg.dfield[i].length-4;
-				if((inbuf=MALLOC(length))==NULL) {
-					errormsg(WHERE,ERR_ALLOC,nulstr,length);
-					continue; }
-				fread(inbuf,length,1,smb.sdt_fp);
-				lzhlen=*(long *)inbuf;
-/**
-				if(SYSOP)
-				bprintf("Decoding %lu bytes of LZH into %lu bytes of text "
-					"(%d%% compression)"
-					,length,lzhlen
-					,(int)(((float)(lzhlen-length)/lzhlen)*100.0));
-**/
-				if((lzhbuf=MALLOC(lzhlen+2L))==NULL) {
-					FREE(inbuf);
-					errormsg(WHERE,ERR_ALLOC,nulstr,lzhlen+2L);
-					continue; }
-				lzh_decode(inbuf,length,lzhbuf);
-				lzhbuf[lzhlen]=0;
-//				  CRLF;
-				putmsg(lzhbuf,P_NOATCODES);
-				FREE(lzhbuf);
-				FREE(inbuf); }
-			else
-				putmsg_fp(smb.sdt_fp,msg.dfield[i].length-2,mode);
-            CRLF;
-            break; }
-}
-
-#endif
-
-void quotemsg(smbmsg_t msg, int tails)
-{
-	char	str[256];
-
-sprintf(str,"%sQUOTES.TXT",node_dir);
-remove(str);
-msgtotxt(msg,str,0,tails);
-}
-
-
-/****************************************************************************/
-/* Writes message header and text data to a text file						*/
-/****************************************************************************/
-void msgtotxt(smbmsg_t msg, char *str, int header, int tails)
-{
-	uchar	HUGE16 *buf;
-	ushort	xlat;
-	int 	i,j,x;
-	ulong	l;
-	FILE	*out;
-
-if((out=fnopen(&i,str,O_WRONLY|O_CREAT|O_APPEND))==NULL) {
-	errormsg(WHERE,ERR_OPEN,str,0);
-	return; }
-if(header) {
-	fprintf(out,"\r\n");
-	fprintf(out,"Subj : %s\r\n",msg.subj);
-	fprintf(out,"To   : %s",msg.to);
-	if(msg.to_ext)
-		fprintf(out," #%s",msg.to_ext);
-	if(msg.to_net.addr)
-		fprintf(out," (%s)",msg.to_net.type==NET_FIDO
-			? faddrtoa(*(faddr_t *)msg.to_net.addr) : msg.to_net.addr);
-	fprintf(out,"\r\nFrom : %s",msg.from);
-	if(msg.from_ext && !(msg.hdr.attr&MSG_ANONYMOUS))
-		fprintf(out," #%s",msg.from_ext);
-	if(msg.from_net.addr)
-		fprintf(out," (%s)",msg.from_net.type==NET_FIDO
-			? faddrtoa(*(faddr_t *)msg.from_net.addr)
-				: msg.from_net.addr);
-	fprintf(out,"\r\nDate : %.24s %s"
-		,timestr((time_t *)&msg.hdr.when_written.time)
-		,zonestr(msg.hdr.when_written.zone));
-	fprintf(out,"\r\n\r\n"); }
-
-buf=smb_getmsgtxt(&smb,&msg,tails);
-if(buf) {
-	lfputs(buf,out);
-	LFREE(buf); }
-else if(smb_getmsgdatlen(&msg)>2)
-	errormsg(WHERE,ERR_ALLOC,smb.file,smb_getmsgdatlen(&msg));
-fclose(out);
-}
-
-
-/****************************************************************************/
-/* Returns total number of posts in a sub-board 							*/
-/****************************************************************************/
-ulong getposts(uint subnum)
-{
-	char str[128];
-	ulong l;
-
-sprintf(str,"%s%s.SID",sub[subnum]->data_dir,sub[subnum]->code);
-l=flength(str);
-if((long)l==-1)
-	return(0);
-return(l/sizeof(idxrec_t));
-}
-
-/****************************************************************************/
-/* Returns message number posted at or after time							*/
-/****************************************************************************/
-ulong getmsgnum(uint subnum, time_t t)
-{
-    int     i;
-	ulong	l,total,bot,top;
-	smbmsg_t msg;
-
-if(!t)
-	return(0);
-
-sprintf(smb.file,"%s%s",sub[subnum]->data_dir,sub[subnum]->code);
-smb.retry_time=smb_retry_time;
-if((i=smb_open(&smb))!=0) {
-	errormsg(WHERE,ERR_OPEN,smb.file,i);
-	return(0); }
-
-total=filelength(fileno(smb.sid_fp))/sizeof(idxrec_t);
-
-if(!total) {		   /* Empty base */
-	smb_close(&smb);
-	return(0); }
-
-if((i=smb_locksmbhdr(&smb))!=0) {
-	smb_close(&smb);
-	errormsg(WHERE,ERR_LOCK,smb.file,i);
-    return(0); }
-
-if((i=smb_getlastidx(&smb,&msg.idx))!=0) {
-	smb_close(&smb);
-	errormsg(WHERE,ERR_READ,smb.file,i);
-    return(0); }
-
-if(msg.idx.time<=t) {
-	smb_close(&smb);
-	return(msg.idx.number); }
-
-bot=0;
-top=total;
-l=total/2; /* Start at middle index */
-clearerr(smb.sid_fp);
-while(1) {
-	fseek(smb.sid_fp,l*sizeof(idxrec_t),SEEK_SET);
-	if(!fread(&msg.idx,sizeof(idxrec_t),1,smb.sid_fp))
-		break;
-	if(bot==top-1)
-		break;
-	if(msg.idx.time>t) {
-		top=l;
-		l=bot+((top-bot)/2);
-		continue; }
-	if(msg.idx.time<t) {
-		bot=l;
-		l=top-((top-bot)/2);
-		continue; }
-	break; }
-smb_close(&smb);
-return(msg.idx.number);
-}
-
-/****************************************************************************/
-/* Returns the time of the message number pointed to by 'ptr'               */
-/****************************************************************************/
-time_t getmsgtime(uint subnum, ulong ptr)
-{
-	char	str[128];
-	int 	i;
-	long	l;
-	smbmsg_t msg;
-	idxrec_t lastidx;
-
-sprintf(smb.file,"%s%s",sub[subnum]->data_dir,sub[subnum]->code);
-smb.retry_time=smb_retry_time;
-if((i=smb_open(&smb))!=0) {
-	errormsg(WHERE,ERR_OPEN,smb.file,i);
-	return(0); }
-if(!filelength(fileno(smb.sid_fp))) {			/* Empty base */
-	smb_close(&smb);
-	return(0); }
-msg.offset=0;
-msg.hdr.number=0;
-if(smb_getmsgidx(&smb,&msg)) {				/* Get first message index */
-	smb_close(&smb);
-	return(0); }
-if(!ptr || msg.idx.number>=ptr) {			/* ptr is before first message */
-	smb_close(&smb);
-	return(msg.idx.time); } 				/* so return time of first msg */
-
-if(smb_getlastidx(&smb,&lastidx)) { 			 /* Get last message index */
-	smb_close(&smb);
-	return(0); }
-if(lastidx.number<ptr) {					/* ptr is after last message */
-	smb_close(&smb);
-	return(lastidx.time); } 				/* so return time of last msg */
-
-msg.idx.time=0;
-msg.hdr.number=ptr;
-if(!smb_getmsgidx(&smb,&msg)) {
-	smb_close(&smb);
-	return(msg.idx.time); }
-
-if(ptr-msg.idx.number < lastidx.number-ptr) {
-	msg.offset=0;
-	msg.idx.number=0;
-	while(msg.idx.number<ptr) {
-		msg.hdr.number=0;
-		if(smb_getmsgidx(&smb,&msg) || msg.idx.number>=ptr)
-			break;
-		msg.offset++; }
-	smb_close(&smb);
-	return(msg.idx.time); }
-
-ptr--;
-while(ptr) {
-	msg.hdr.number=ptr;
-	if(!smb_getmsgidx(&smb,&msg))
-		break;
-	ptr--; }
-smb_close(&smb);
-return(msg.idx.time);
-}
-
-
-/****************************************************************************/
-/* Returns the total number of msgs in the sub-board and sets 'ptr' to the  */
-/* number of the last message in the sub (0) if no messages.				*/
-/****************************************************************************/
-ulong getlastmsg(uint subnum, ulong *ptr, time_t *t)
-{
-	char		str[256];
-	int 		i;
-	ulong		total;
-	idxrec_t	idx;
-
-if(ptr)
-	(*ptr)=0;
-if(t)
-	(*t)=0;
-if(subnum>=total_subs)
-	return(0);
-
-sprintf(smb.file,"%s%s",sub[subnum]->data_dir,sub[subnum]->code);
-smb.retry_time=smb_retry_time;
-if((i=smb_open(&smb))!=0) {
-	errormsg(WHERE,ERR_OPEN,smb.file,i);
-	return(0); }
-
-if(!filelength(fileno(smb.sid_fp))) {			/* Empty base */
-	smb_close(&smb);
-	return(0); }
-if((i=smb_locksmbhdr(&smb))!=0) {
-	smb_close(&smb);
-	errormsg(WHERE,ERR_LOCK,smb.file,i);
-	return(0); }
-if((i=smb_getlastidx(&smb,&idx))!=0) {
-	smb_close(&smb);
-	errormsg(WHERE,ERR_READ,smb.file,i);
-	return(0); }
-total=filelength(fileno(smb.sid_fp))/sizeof(idxrec_t);
-smb_unlocksmbhdr(&smb);
-smb_close(&smb);
-if(ptr)
-	(*ptr)=idx.number;
-if(t)
-	(*t)=idx.time;
-return(total);
-}
-
diff --git a/src/sbbs2/msg2.c b/src/sbbs2/msg2.c
deleted file mode 100644
index b8468f8693..0000000000
--- a/src/sbbs2/msg2.c
+++ /dev/null
@@ -1,1202 +0,0 @@
-#line 1 "MSG2.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-
-#define MAX_LINE_LEN 82L
-
-char *qstr=" > %.76s\r\n";
-
-int qwk_route(char *inaddr, char *fulladdr);
-
-void remove_re(char *str)
-{
-while(!strnicmp(str,"RE:",3)) {
-	strcpy(str,str+3);
-	while(str[0]==SP)
-		strcpy(str,str+1); }
-}
-
-/****************************************************************************/
-/* Modify 'str' to for quoted format. Remove ^A codes, etc.                 */
-/****************************************************************************/
-void quotestr(char *str)
-{
-	char tmp[512];
-	int i,j;
-
-j=strlen(str);
-while(j && (str[j-1]==SP || str[j-1]==LF || str[j-1]==CR)) j--;
-str[j]=0;
-remove_ctrl_a(str);
-}
-
-void editor_inf(int xeditnum,char *dest, char *title,int mode
-	,uint subnum)
-{
-	char str[512];
-	int file;
-
-xeditnum--;
-
-if(xedit[xeditnum]->misc&QUICKBBS) {
-	sprintf(str,"%sMSGINF",node_dir);
-	if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1) {
-		errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
-		return; }
-	sprintf(str,"%s\r\n%s\r\n%s\r\n%u\r\n%s\r\n%s\r\n"
-		,(subnum!=INVALID_SUB && sub[subnum]->misc&SUB_NAME) ? useron.name
-			: useron.alias
-			,dest,title,1
-			,mode&WM_NETMAIL ? "NetMail"
-			:mode&WM_EMAIL ? "Electronic Mail"
-			:subnum==INVALID_SUB ? nulstr
-			:sub[subnum]->sname
-		,mode&WM_PRIVATE ? "YES":"NO");
-	write(file,str,strlen(str));
-	close(file); }
-else {
-	sprintf(str,"%sEDITOR.INF",node_dir);
-	if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1) {
-		errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
-		return; }
-	sprintf(str,"%s\r\n%s\r\n%u\r\n%s\r\n%s\r\n%u\r\n"
-		,title,dest,useron.number
-		,(subnum!=INVALID_SUB && sub[subnum]->misc&SUB_NAME) ? useron.name
-		: useron.alias
-		,useron.name,useron.level);
-	write(file,str,strlen(str));
-	close(file); }
-}
-
-/****************************************************************************/
-/* Creates a message (post or mail) using standard line editor. 'fname' is  */
-/* is name of file to create, 'top' is a buffer to place at beginning of    */
-/* message and 'title' is the title (70chars max) for the message.          */
-/* 'dest' contains a text description of where the message is going.        */
-/* Returns positive if successful or 0 if aborted.                          */
-/****************************************************************************/
-char writemsg(char *fname, char *top, char *title, int mode, int subnum
-	,char *dest)
-{
-	uchar str[256],quote[128],msgtmp[32],c,HUGE16 *buf,ex_mode=0,*p,*tp
-		,useron_level;
-	int i,j,file,linesquoted=0;
-	long length,qlen,qtime;
-	ulong l;
-	FILE *stream;
-
-useron_level=useron.level;
-
-if((buf=(char HUGE16*)LMALLOC(level_linespermsg[useron_level]*MAX_LINE_LEN))
-	==NULL) {
-	errormsg(WHERE,ERR_ALLOC,fname
-		,level_linespermsg[useron_level]*MAX_LINE_LEN);
-    return(0); }
-
-if(mode&WM_NETMAIL ||
-	(!(mode&(WM_EMAIL|WM_NETMAIL)) && sub[subnum]->misc&SUB_PNET))
-	mode|=WM_NOTOP;
-
-if(useron.xedit && xedit[useron.xedit-1]->misc&QUICKBBS)
-	strcpy(msgtmp,"MSGTMP");
-else
-	strcpy(msgtmp,"INPUT.MSG");
-
-if(mode&WM_QUOTE && !(useron.rest&FLAG('J'))
-	&& ((mode&(WM_EMAIL|WM_NETMAIL) && sys_misc&SM_QUOTE_EM)
-	|| (!(mode&(WM_EMAIL|WM_NETMAIL)) && (uint)subnum!=INVALID_SUB
-		&& sub[subnum]->misc&SUB_QUOTE))) {
-
-	/* Quote entire message to MSGTMP or INPUT.MSG */
-
-	if(useron.xedit && xedit[useron.xedit-1]->misc&QUOTEALL) {
-		sprintf(str,"%sQUOTES.TXT",node_dir);
-		if((stream=fnopen(&file,str,O_RDONLY))==NULL) {
-			errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-			LFREE(buf);
-			return(0); }
-
-		sprintf(str,"%s%s",node_dir,msgtmp);    /* file for quoted msg */
-		if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1) {
-			errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
-			LFREE(buf);
-			fclose(stream);
-			return(0); }
-
-		while(!feof(stream) && !ferror(stream)) {
-			if(!fgets(str,255,stream))
-				break;
-			quotestr(str);
-			sprintf(tmp,qstr,str);
-			write(file,tmp,strlen(tmp));
-			linesquoted++; }
-		fclose(stream);
-		close(file); }
-
-	/* Quote nothing to MSGTMP or INPUT.MSG automatically */
-
-	else if(useron.xedit && xedit[useron.xedit-1]->misc&QUOTENONE)
-		;
-
-	else if(yesno(text[QuoteMessageQ])) {
-		sprintf(str,"%sQUOTES.TXT",node_dir);
-		if((stream=fnopen(&file,str,O_RDONLY))==NULL) {
-			errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-			LFREE(buf);
-			return(0); }
-
-		sprintf(str,"%s%s",node_dir,msgtmp);    /* file for quoted msg */
-		if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1) {
-			errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
-			LFREE(buf);
-			fclose(stream);
-			return(0); }
-
-		l=ftell(stream);			/* l now points to start of message */
-
-		while(online) {
-			sprintf(str,text[QuoteLinesPrompt],linesquoted ? "Done":"All");
-			mnemonics(str);
-			i=getstr(quote,10,K_UPPER);
-			if(sys_status&SS_ABORT) {
-				fclose(stream);
-				close(file);
-				LFREE(buf);
-				return(0); }
-			if(!i && linesquoted)
-				break;
-			if(!i || quote[0]=='A') {                   /* Quote all */
-				fseek(stream,l,SEEK_SET);
-				while(!feof(stream) && !ferror(stream)) {
-					if(!fgets(str,255,stream))
-						break;
-					quotestr(str);
-					sprintf(tmp,qstr,str);
-					write(file,tmp,strlen(tmp));
-					linesquoted++; }
-				break; }
-			if(quote[0]=='L') {
-				fseek(stream,l,SEEK_SET);
-				i=1;
-				CRLF;
-				attr(LIGHTGRAY);
-				while(!feof(stream) && !ferror(stream) && !msgabort()) {
-					if(!fgets(str,255,stream))
-						break;
-					quotestr(str);
-					bprintf("%3d: %.74s\r\n",i,str);
-					i++; }
-				continue; }
-
-			if(!isdigit(quote[0]))
-				break;
-			p=quote;
-			while(p) {
-				if(*p==',' || *p==SP)
-					p++;
-				i=atoi(p);
-				if(!i)
-					break;
-				fseek(stream,l,SEEK_SET);
-				j=1;
-				while(!feof(stream) && !ferror(stream) && j<i) {
-					if(!fgets(tmp,255,stream))
-						break;
-					j++; }		/* skip beginning */
-				tp=strchr(p,'-');   /* tp for temp pointer */
-				if(tp) {		 /* range */
-					i=atoi(tp+1);
-					while(!feof(stream) && !ferror(stream) && j<=i) {
-						if(!fgets(str,255,stream))
-							break;
-						quotestr(str);
-						sprintf(tmp,qstr,str);
-						write(file,tmp,strlen(tmp));
-						linesquoted++;
-						j++; } }
-				else {			/* one line */
-					if(fgets(str,255,stream)) {
-						quotestr(str);
-						sprintf(tmp,qstr,str);
-						write(file,tmp,strlen(tmp));
-						linesquoted++; } }
-				p=strchr(p,',');
-				// if(!p) p=strchr(p,SP);  02/05/96 huh?
-				} }
-
-		fclose(stream);
-		close(file); } }
-else {
-	sprintf(str,"%sQUOTES.TXT",node_dir);
-	remove(str); }
-
-if(!online || sys_status&SS_ABORT) {
-	LFREE(buf);
-	return(0); }
-
-if(!(mode&WM_EXTDESC)) {
-	if(mode&WM_FILE) {
-		c=12;
-		CRLF;
-		bputs(text[Filename]); }
-	else {
-		c=LEN_TITLE;
-		bputs(text[TitlePrompt]); }
-	if(!(mode&(WM_EMAIL|WM_NETMAIL)) && !(mode&WM_FILE)
-		&& sub[subnum]->misc&(SUB_QNET /* |SUB_PNET */ ))
-        c=25;
-	if(mode&WM_QWKNET)
-		c=25;
-	if(!getstr(title,c,mode&WM_FILE ? K_LINE|K_UPPER : K_LINE|K_EDIT|K_AUTODEL)
-		&& useron_level && useron.logons) {
-		LFREE(buf);
-        return(0); }
-    if(!(mode&(WM_EMAIL|WM_NETMAIL)) && sub[subnum]->misc&SUB_QNET
-		&& !SYSOP
-		&& (!stricmp(title,"DROP") || !stricmp(title,"ADD")
-		|| !strnicmp(dest,"SBBS",4))) {
-		LFREE(buf);   /* Users can't post DROP or ADD in QWK netted subs */
-		return(0); } }	/* or messages to "SBBS" */
-
-if(!online || sys_status&SS_ABORT) {
-	LFREE(buf);
-	return(0); }
-
-/* Create WWIV compatible EDITOR.INF file */
-
-if(useron.xedit) {
-	editor_inf(useron.xedit,dest,title,mode,subnum);
-	if(xedit[useron.xedit-1]->type) {
-		gettimeleft();
-		xtrndat(useron.alias,node_dir,xedit[useron.xedit-1]->type,timeleft); }
-	}
-
-if(console&CON_RAW_IN) {
-    bprintf(text[EnterMsgNowRaw]
-		,(ulong)level_linespermsg[useron_level]*MAX_LINE_LEN);
-	if(top[0] && !(mode&WM_NOTOP)) {
-		strcpy((char *)buf,top);
-		strcat((char *)buf,crlf);
-		l=strlen((char *)buf); }
-	else
-        l=0;
-	while(l<level_linespermsg[useron_level]*MAX_LINE_LEN) {
-        c=getkey(0);
-        if(sys_status&SS_ABORT) {  /* Ctrl-C */
-			LFREE(buf);
-            return(0); }
-        if((c==ESC || c==1) && useron.rest&FLAG('A')) /* ANSI restriction */
-            continue;
-#ifndef __OS2__
-		if(lclaes() && c=='"') c=7; /* convert keyboard reassignmnet to beep */
-#endif
-        if(c==7 && useron.rest&FLAG('B'))   /* Beep restriction */
-            continue;
-		if(!(console&CON_RAW_IN))	/* Ctrl-Z was hit */
-            break;
-        outchar(c);
-        buf[l++]=c; }
-    buf[l]=0;
-	if(l==level_linespermsg[useron_level]*MAX_LINE_LEN)
-		bputs(text[OutOfBytes]); }
-
-
-else if((online==ON_LOCAL && node_misc&NM_LCL_EDIT && node_editor[0])
-    || useron.xedit) {
-
-	if(useron.xedit && xedit[useron.xedit-1]->misc&IO_INTS) {
-		ex_mode|=EX_OUTL;
-		if(online==ON_REMOTE)
-			ex_mode|=(EX_OUTR|EX_INR);
-		if(xedit[useron.xedit-1]->misc&WWIVCOLOR)
-			ex_mode|=EX_WWIV; }
-
-	sprintf(str,"%s%s",node_dir,msgtmp);    /* temporary file for input */
-	if(!linesquoted && fexist(str))
-		remove(str);
-	if(linesquoted) {
-		qlen=flength(str);
-		qtime=fdate(str); }
-    if(online==ON_LOCAL) {
-        if(node_misc&NM_LCL_EDIT && node_editor[0])
-			external(cmdstr(node_editor,str,nulstr,NULL)
-				,0);  /* EX_CC removed and EX_OUTL removed */
-        else
-			external(cmdstr(xedit[useron.xedit-1]->lcmd,str,nulstr,NULL)
-				,ex_mode); }
-
-    else {
-        rioctl(IOCM|PAUSE|ABORT);
-		external(cmdstr(xedit[useron.xedit-1]->rcmd,str,nulstr,NULL),ex_mode);
-        rioctl(IOSM|PAUSE|ABORT); }
-	checkline();
-	if(!fexist(str) || !online
-		|| (linesquoted && qlen==flength(str) && qtime==fdate(str))) {
-		LFREE(buf);
-        return(0); }
-	buf[0]=0;
-	if(!(mode&WM_NOTOP))
-		strcpy((char *)buf,top);
-	if((file=nopen(str,O_RDONLY))==-1) {
-		errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-		LFREE(buf);
-        return(0); }
-    length=filelength(file);
-	l=strlen((char *)buf);	  /* reserve space for top and terminating null */
-	/* truncate if too big */
-	if(length>(level_linespermsg[useron_level]*MAX_LINE_LEN)-(l+1)) {
-		length=(level_linespermsg[useron_level]*MAX_LINE_LEN)-(l+1);
-		bputs(text[OutOfBytes]); }
-	lread(file,buf+l,length);
-    close(file);
-	// remove(str); 	   /* no need to save the temp input file */
-	buf[l+length]=0; }
-else {
-    buf[0]=0;
-	if(linesquoted) {
-		sprintf(str,"%s%s",node_dir,msgtmp);
-		if((file=nopen(str,O_RDONLY))!=-1) {
-			length=filelength(file);
-			l=length>level_linespermsg[useron_level]*MAX_LINE_LEN
-				? level_linespermsg[useron_level]*MAX_LINE_LEN : length;
-			lread(file,buf,l);
-			buf[l]=0;
-			close(file);
-			// remove(str);
-			} }
-	if(!(msgeditor((char *)buf,mode&WM_NOTOP ? nulstr : top,title))) {
-		LFREE(buf);
-		return(0); } }
-
-now=time(NULL);
-bputs(text[Saving]);
-if((stream=fnopen(&file,fname,O_WRONLY|O_CREAT|O_TRUNC))==NULL) {
-	errormsg(WHERE,ERR_OPEN,fname,O_WRONLY|O_CREAT|O_TRUNC);
-	LFREE(buf);
-    return(0); }
-for(l=i=0;buf[l] && i<level_linespermsg[useron_level];l++) {
-	if(buf[l]==141 && useron.xedit && xedit[useron.xedit-1]->misc&QUICKBBS) {
-		fwrite(crlf,2,1,stream);
-		i++;
-		continue; }
-	if(buf[l]==LF && (!l || buf[l-1]!=CR) && useron.xedit
-		&& xedit[useron.xedit-1]->misc&EXPANDLF) {
-		fwrite(crlf,2,1,stream);
-		i++;
-		continue; }
-	if(!(mode&(WM_EMAIL|WM_NETMAIL))
-		&& (!l || buf[l-1]==LF)
-		&& buf[l]=='-' && buf[l+1]=='-' && buf[l+2]=='-'
-		&& (buf[l+3]==SP || buf[l+3]==TAB || buf[l+3]==CR))
-		buf[l+1]='+';
-	if(buf[l]==LF)
-		i++;
-	fputc(buf[l],stream); }
-
-if(buf[l])
-	bputs(text[NoMoreLines]);
-fclose(stream);
-LFREE((char *)buf);
-bprintf(text[SavedNBytes],l,i);
-return(1);
-}
-
-
-/****************************************************************************/
-/* Removes from file 'str' every LF terminated line that starts with 'str2' */
-/* That is divisable by num. Function skips first 'skip' number of lines    */
-/****************************************************************************/
-void removeline(char *str, char *str2, char num, char skip)
-{
-	char	HUGE16 *buf;
-    char    slen,c;
-    int     i,file;
-	ulong	l=0,m,flen;
-    FILE    *stream;
-
-if((file=nopen(str,O_RDONLY))==-1) {
-    errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-    return; }
-flen=filelength(file);
-slen=strlen(str2);
-if((buf=(char *)MALLOC(flen))==NULL) {
-    close(file);
-    errormsg(WHERE,ERR_ALLOC,str,flen);
-    return; }
-if(lread(file,buf,flen)!=flen) {
-    close(file);
-    errormsg(WHERE,ERR_READ,str,flen);
-	FREE(buf);
-    return; }
-close(file);
-if((stream=fnopen(&file,str,O_WRONLY|O_TRUNC))==NULL) {
-    close(file);
-    errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_TRUNC);
-	FREE(buf);
-    return; }
-for(i=0;l<flen && i<skip;l++) {
-    fputc(buf[l],stream);
-    if(buf[l]==LF)
-        i++; }
-while(l<flen) {
-	if(!strncmp((char *)buf+l,str2,slen)) {
-		for(i=0;i<num && l<flen;i++) {
-			while(l<flen && buf[l]!=LF) l++;
-			l++; } }
-    else {
-		for(i=0;i<num && l<flen;i++) {
-			while(l<flen && buf[l]!=LF) fputc(buf[l++],stream);
-			fputc(buf[l++],stream); } } }
-fclose(stream);
-FREE((char *)buf);
-}
-
-/*****************************************************************************/
-/* The Synchronet editor.                                                    */
-/* Returns the number of lines edited.                                       */
-/*****************************************************************************/
-ulong msgeditor(char *buf, char *top, char *title)
-{
-	int i,j,line,lines=0,maxlines;
-	char strin[256],**str,done=0;
-    ulong l,m;
-
-if(online==ON_REMOTE) {
-    rioctl(IOCM|ABORT);
-    rioctl(IOCS|ABORT); }
-
-maxlines=level_linespermsg[useron.level];
-
-if((str=(char **)MALLOC(sizeof(char *)*(maxlines+1)))==NULL) {
-	errormsg(WHERE,ERR_ALLOC,"msgeditor",sizeof(char *)*(maxlines+1));
-	return(0); }
-m=strlen(buf);
-l=0;
-while(l<m && lines<maxlines) {
-    msgabort(); /* to allow pausing */
-	if((str[lines]=MALLOC(MAX_LINE_LEN))==NULL) {
-		errormsg(WHERE,ERR_ALLOC,nulstr,MAX_LINE_LEN);
-        for(i=0;i<lines;i++)
-			FREE(str[lines]);
-		FREE(str);
-        if(online==ON_REMOTE)
-            rioctl(IOSM|ABORT);
-        return(0); }
-    for(i=0;i<79 && l<m;i++,l++) {
-        if(buf[l]==CR) {
-            l+=2;
-            break; }
-        if(buf[l]==TAB) {
-            if(!(i%8))                  /* hard-coded tabstop of 8 */
-                str[lines][i++]=SP;     /* for expansion */
-            while(i%8 && i<79)
-                str[lines][i++]=SP;
-            i--;
-            /***
-            bprintf("\r\nMessage editor: Expanded tab on line #%d",lines+1);
-            ***/ }
-        else str[lines][i]=buf[l]; }
-    if(i==79) {
-        if(buf[l]==CR)
-            l+=2;
-		else
-			bprintf("\r\nMessage editor: Split line #%d",lines+1); }
-    str[lines][i]=0;
-    lines++; }
-if(lines)
-    bprintf("\r\nMessage editor: Read in %d lines\r\n",lines);
-bprintf(text[EnterMsgNow],maxlines);
-for(i=0;i<79;i++)
-    if(i%TABSIZE || !i)
-        outchar('-');
-    else outchar('+');
-CRLF;
-putmsg(top,P_SAVEATR|P_NOATCODES);
-for(line=0;line<lines && !msgabort();line++) { /* display lines in buf */
-	putmsg(str[line],P_SAVEATR|P_NOATCODES);
-    if(useron.misc&ANSI)
-        bputs("\x1b[K");  /* delete to end of line */
-    CRLF; }
-SYNC;
-if(online==ON_REMOTE)
-    rioctl(IOSM|ABORT);
-while(online && !done) {
-    checkline();
-    if(line==lines) {
-		if((str[line]=MALLOC(MAX_LINE_LEN))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,nulstr,MAX_LINE_LEN);
-            for(i=0;i<lines;i++)
-				FREE(str[i]);
-			FREE(str);
-            return(0); }
-        str[line][0]=0; }
-    if(line>(maxlines-10)) {
-        if(line==maxlines)
-            bputs(text[NoMoreLines]);
-        else
-            bprintf(text[OnlyNLinesLeft],maxlines-line); }
-    strcpy(strin,str[line]);
-	do {
-		if(!line)
-			outchar(CR);
-		getstr(strin,79,K_WRAP|K_MSG|K_EDIT);
-		} while(console&CON_UPARROW && !line);
-
-    if(sys_status&SS_ABORT) {
-        if(line==lines)
-			FREE(str[line]);
-        continue; }
-    if(strin[0]=='/' && strlen(strin)<8) {
-		if(!stricmp(strin,"/DEBUG") && SYSOP) {
-            if(line==lines)
-                FREE(str[line]);
-            bprintf("\r\nline=%d lines=%d rows=%d\r\n",line,lines,rows);
-            continue; }
-		else if(!stricmp(strin,"/ABT")) {
-			if(line==lines) 		/* delete a line */
-                FREE(str[line]);
-			for(i=0;i<lines;i++)
-				FREE(str[i]);
-			FREE(str);
-            return(0); }
-        else if(toupper(strin[1])=='D') {
-            if(line==lines)         /* delete a line */
-				FREE(str[line]);
-            if(!lines)
-                continue;
-            i=atoi(strin+2)-1;
-            if(i==-1)   /* /D means delete last line */
-                i=lines-1;
-            if(i>=lines || i<0)
-                bputs(text[InvalidLineNumber]);
-            else {
-				FREE(str[i]);
-                lines--;
-                while(i<lines) {
-                    str[i]=str[i+1];
-                    i++; }
-                if(line>lines)
-                    line=lines; }
-            continue; }
-        else if(toupper(strin[1])=='I') {
-            if(line==lines)         /* insert a line before number x */
-				FREE(str[line]);
-            if(line==maxlines || !lines)
-                continue;
-            i=atoi(strin+2)-1;
-            if(i==-1)
-                i=lines-1;
-            if(i>=lines || i<0)
-                bputs(text[InvalidLineNumber]);
-            else {
-                for(line=lines;line>i;line--)   /* move the pointers */
-                    str[line]=str[line-1];
-				if((str[i]=MALLOC(MAX_LINE_LEN))==NULL) {
-					errormsg(WHERE,ERR_ALLOC,nulstr,MAX_LINE_LEN);
-                    for(i=0;i<lines;i++)
-						FREE(str[i]);
-					FREE(str);
-                    return(0); }
-                str[i][0]=0;
-                line=++lines; }
-            continue; }
-        else if(toupper(strin[1])=='E') {
-            if(line==lines)         /* edit a line */
-				FREE(str[line]);
-            if(!lines)
-                continue;
-            i=atoi(strin+2)-1;
-            j=K_MSG|K_EDIT; /* use j for the getstr mode */
-            if(i==-1) { /* /E means edit last line */
-                i=lines-1;
-                j|=K_WRAP; }    /* wrap when editing last line */
-            if(i>=lines || i<0)
-                bputs(text[InvalidLineNumber]);
-			else
-                getstr(str[i],79,j);
-            continue; }
-        else if(!stricmp(strin,"/CLR")) {
-            bputs(text[MsgCleared]);
-			if(line!=lines)
-				lines--;
-            for(i=0;i<=lines;i++)
-				FREE(str[i]);
-            line=0;
-            lines=0;
-			putmsg(top,P_SAVEATR|P_NOATCODES);
-            continue; }
-        else if(toupper(strin[1])=='L') {   /* list message */
-            if(line==lines)
-				FREE(str[line]);
-            if(lines)
-                i=!noyes(text[WithLineNumbers]);
-            CRLF;
-            attr(LIGHTGRAY);
-			putmsg(top,P_SAVEATR|P_NOATCODES);
-            if(!lines) {
-                continue; }
-            j=atoi(strin+2);
-            if(j) j--;  /* start from line j */
-            while(j<lines && !msgabort()) {
-                if(i) { /* line numbers */
-					sprintf(tmp,"%3d: %-.74s",j+1,str[j]);
-					putmsg(tmp,P_SAVEATR|P_NOATCODES); }
-                else
-					putmsg(str[j],P_SAVEATR|P_NOATCODES);
-                if(useron.misc&ANSI)
-                    bputs("\x1b[K");  /* delete to end of line */
-                CRLF;
-                j++; }
-            SYNC;
-            continue; }
-        else if(!stricmp(strin,"/S")) { /* Save */
-            if(line==lines)
-				FREE(str[line]);
-            done=1;
-            continue;}
-        else if(!stricmp(strin,"/T")) { /* Edit title */
-            if(line==lines)
-				FREE(str[line]);
-            if(title[0]) {
-                bputs(text[TitlePrompt]);
-				getstr(title,LEN_TITLE,K_LINE|K_EDIT|K_AUTODEL);
-                SYNC;
-                CRLF; }
-            continue; }
-        else if(!stricmp(strin,"/?")) {
-            if(line==lines)
-				FREE(str[line]);
-            menu("EDITOR"); /* User Editor Commands */
-            SYNC;
-            continue; }
-		else if(!stricmp(strin,"/ATTR"))    {
-            if(line==lines)
-				FREE(str[line]);
-            menu("ATTR");   /* User ANSI Commands */
-            SYNC;
-            continue; } }
-    strcpy(str[line],strin);
-    if(line<maxlines)
-        line++;
-    else
-		FREE(str[line]);
-	if(line>lines)
-		lines++;
-    if(console&CON_UPARROW) {
-        outchar(CR);
-		bprintf("\x1b[A\x1b[K");    /* up one line, clear to eol */
-		line-=2; }
-	}
-if(!online) {
-    for(i=0;i<lines;i++)
-		FREE(str[i]);
-	FREE(str);
-    return(0); }
-strcpy(buf,top);
-for(i=0;i<lines;i++) {
-    strcat(buf,str[i]);
-    strcat(buf,crlf);
-	FREE(str[i]); }
-FREE(str);
-return(lines);
-}
-
-
-/****************************************************************************/
-/* Edits an existing file or creates a new one in MSG format                */
-/****************************************************************************/
-void editfile(char *str)
-{
-	char *buf,str2[128],mode=0;   /* EX_CC */
-    int file;
-	long length,maxlines,lines,l;
-
-maxlines=level_linespermsg[useron.level];
-sprintf(str2,"%sQUOTES.TXT",node_dir);
-remove(str2);
-if(node_editor[0] && online==ON_LOCAL) {
-	external(cmdstr(node_editor,str,nulstr,NULL),0); /* EX_CC */
-    return; }
-if(useron.xedit) {
-	editor_inf(useron.xedit,nulstr,nulstr,0,INVALID_SUB);
-	if(xedit[useron.xedit-1]->misc&IO_INTS) {
-		mode|=EX_OUTL;
-		if(online==ON_REMOTE)
-			mode|=(EX_OUTR|EX_INR);
-		if(xedit[useron.xedit-1]->misc&WWIVCOLOR)
-			mode|=EX_WWIV; }
-    if(online==ON_LOCAL)
-		external(cmdstr(xedit[useron.xedit-1]->lcmd,str,nulstr,NULL),mode);
-    else {
-        rioctl(IOCM|PAUSE|ABORT);
-		external(cmdstr(xedit[useron.xedit-1]->rcmd,str,nulstr,NULL),mode);
-        rioctl(IOSM|PAUSE|ABORT); }
-    return; }
-if((buf=(char *)MALLOC(maxlines*MAX_LINE_LEN))==NULL) {
-	errormsg(WHERE,ERR_ALLOC,nulstr,maxlines*MAX_LINE_LEN);
-    return; }
-if((file=nopen(str,O_RDONLY))!=-1) {
-    length=filelength(file);
-	if(length>(ulong)maxlines*MAX_LINE_LEN) {
-        attr(color[clr_err]);
-		bprintf("\7\r\nFile size (%lu bytes) is larger than (%lu).\r\n"
-			,length,(ulong)maxlines*MAX_LINE_LEN);
-        close(file);
-		FREE(buf); }
-    if(read(file,buf,length)!=length) {
-        close(file);
-		FREE(buf);
-        errormsg(WHERE,ERR_READ,str,length);
-        return; }
-    buf[length]=0;
-    close(file); }
-else {
-    buf[0]=0;
-    bputs(text[NewFile]); }
-if(!msgeditor(buf,nulstr,nulstr)) {
-	FREE(buf);
-    return; }
-bputs(text[Saving]);
-if((file=nopen(str,O_CREAT|O_WRONLY|O_TRUNC))==-1) {
-    errormsg(WHERE,ERR_OPEN,str,O_CREAT|O_WRONLY|O_TRUNC);
-	FREE(buf);
-    return; }
-if(write(file,buf,strlen(buf))!=strlen(buf)) {
-    close(file);
-    errormsg(WHERE,ERR_WRITE,str,strlen(buf));
-	FREE(buf);
-    return; }
-for(l=lines=0;buf[l];l++)
-	if(buf[l]==LF)
-		lines++;
-bprintf(text[SavedNBytes],l,lines);
-close(file);
-FREE(buf);
-return;
-}
-
-/*************************/
-/* Copy file attachments */
-/*************************/
-void copyfattach(uint to, uint from, char *title)
-{
-	char str[128],str2[128],str3[128],*tp,*sp,*p;
-    uint i;
-
-strcpy(str,title);
-tp=str;
-while(1) {
-    p=strchr(tp,SP);
-    if(p) *p=0;
-    sp=strrchr(tp,'/');              /* sp is slash pointer */
-    if(!sp) sp=strrchr(tp,'\\');
-    if(sp) tp=sp+1;
-    sprintf(str2,"%sFILE\\%04u.IN\\%s"  /* str2 is path/fname */
-        ,data_dir,to,tp);
-	sprintf(str3,"%sFILE\\%04u.IN\\%s"  /* str2 is path/fname */
-		,data_dir,from,tp);
-	if(strcmp(str2,str3))
-		mv(str3,str2,1);
-    if(!p)
-        break;
-    tp=p+1; }
-}
-
-
-/****************************************************************************/
-/* Forwards mail (fname) to usernumber                                      */
-/* Called from function readmail											*/
-/****************************************************************************/
-void forwardmail(smbmsg_t *msg, ushort usernumber)
-{
-	char str[256],touser[128];
-	int i;
-	node_t		node;
-	msghdr_t	hdr=msg->hdr;
-	idxrec_t	idx=msg->idx;
-
-if(useron.etoday>=level_emailperday[useron.level] && !SYSOP) {
-	bputs(text[TooManyEmailsToday]);
-    return; }
-if(useron.rest&FLAG('F')) {
-    bputs(text[R_Forward]);
-    return; }
-if(usernumber==1 && useron.rest&FLAG('S')) {
-    bprintf(text[R_Feedback],sys_op);
-    return; }
-if(usernumber!=1 && useron.rest&FLAG('E')) {
-    bputs(text[R_Email]);
-    return; }
-
-msg->idx.attr&=~(MSG_READ|MSG_DELETE);
-msg->hdr.attr=msg->idx.attr;
-
-
-smb_hfield(msg,SENDER,strlen(useron.alias),useron.alias);
-sprintf(str,"%u",useron.number);
-smb_hfield(msg,SENDEREXT,strlen(str),str);
-
-username(usernumber,touser);
-smb_hfield(msg,RECIPIENT,strlen(touser),touser);
-sprintf(str,"%u",usernumber);
-smb_hfield(msg,RECIPIENTEXT,sizeof(str),str);
-msg->idx.to=usernumber;
-
-now=time(NULL);
-smb_hfield(msg,FORWARDED,sizeof(time_t),&now);
-
-
-if((i=smb_open_da(&smb))!=0) {
-	errormsg(WHERE,ERR_OPEN,smb.file,i);
-	return; }
-if((i=smb_incdat(&smb,msg->hdr.offset,smb_getmsgdatlen(msg),1))!=0) {
-	errormsg(WHERE,ERR_WRITE,smb.file,i);
-	return; }
-smb_close_da(&smb);
-
-
-if((i=smb_addmsghdr(&smb,msg,SMB_SELFPACK))!=0) {
-	errormsg(WHERE,ERR_WRITE,smb.file,i);
-    return; }
-
-if(msg->hdr.auxattr&MSG_FILEATTACH)
-	copyfattach(usernumber,useron.number,msg->subj);
-
-bprintf(text[Forwarded],username(usernumber,str),usernumber);
-sprintf(str,"Forwarded mail to %s #%d",username(usernumber,tmp)
-    ,usernumber);
-logline("E",str);
-msg->idx=idx;
-msg->hdr=hdr;
-
-
-if(usernumber==1) {
-    useron.fbacks++;
-    logon_fbacks++;
-    putuserrec(useron.number,U_FBACKS,5,itoa(useron.fbacks,tmp,10)); }
-else {
-    useron.emails++;
-    logon_emails++;
-    putuserrec(useron.number,U_EMAILS,5,itoa(useron.emails,tmp,10)); }
-useron.etoday++;
-putuserrec(useron.number,U_ETODAY,5,itoa(useron.etoday,tmp,10));
-
-for(i=1;i<=sys_nodes;i++) { /* Tell user, if online */
-    getnodedat(i,&node,0);
-    if(node.useron==usernumber && !(node.misc&NODE_POFF)
-        && (node.status==NODE_INUSE || node.status==NODE_QUIET)) {
-        sprintf(str,text[EmailNodeMsg],node_num,useron.alias);
-		putnmsg(i,str);
-        break; } }
-if(i>sys_nodes) {	/* User wasn't online, so leave short msg */
-	sprintf(str,text[UserSentYouMail],useron.alias);
-    putsmsg(usernumber,str); }
-}
-
-/****************************************************************************/
-/* Auto-Message Routine ('A' from the main menu)                            */
-/****************************************************************************/
-void automsg()
-{
-    char str[256],buf[300],anon=0;
-    int file;
-    struct ffblk ff;
-
-while(online) {
-    SYNC;
-    mnemonics(text[AutoMsg]);
-    switch(getkeys("RWQ",0)) {
-        case 'R':
-            sprintf(str,"%sMSGS\\AUTO.MSG",data_dir);
-			printfile(str,P_NOABORT|P_NOATCODES);
-            break;
-        case 'W':
-            if(useron.rest&FLAG('W')) {
-                bputs(text[R_AutoMsg]);
-                break; }
-            action=NODE_AMSG;
-            SYNC;
-            bputs("\r\n3 lines:\r\n");
-			if(!getstr(str,68,K_WRAP|K_MSG))
-				break;
-            strcpy(buf,str);
-            strcat(buf,"\r\n          ");
-            getstr(str,68,K_WRAP|K_MSG);
-            strcat(buf,str);
-            strcat(buf,"\r\n          ");
-            getstr(str,68,K_MSG);
-            strcat(str,crlf);
-            strcat(buf,str);
-            if(yesno(text[OK])) {
-                if(useron.exempt&FLAG('A')) {
-                    if(!noyes(text[AnonymousQ]))
-                        anon=1; }
-                sprintf(str,"%sMSGS\\AUTO.MSG",data_dir);
-                if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1) {
-                    errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
-                    return; }
-                if(anon)
-                    sprintf(tmp,"%.80s",text[Anonymous]);
-                else
-                    sprintf(tmp,"%s #%d",useron.alias,useron.number);
-                sprintf(str,text[AutoMsgBy],tmp);
-                strcat(str,"          ");
-                write(file,str,strlen(str));
-                write(file,buf,strlen(buf));
-                close(file); }
-            break;
-        case 'Q':
-            return; } }
-}
-
-/****************************************************************************/
-/* Edits messages															*/
-/****************************************************************************/
-void editmsg(smbmsg_t *msg, uint subnum)
-{
-	char	str[256],buf[SDT_BLOCK_LEN];
-	ushort	xlat;
-	int 	file,i,j,x;
-	ulong	length,offset;
-	FILE	*instream;
-
-if(!msg->hdr.total_dfields)
-	return;
-sprintf(str,"%sINPUT.MSG",node_dir);
-remove(str);
-msgtotxt(*msg,str,0,1);
-editfile(str);
-length=flength(str)+2;	 /* +2 for translation string */
-if(length<1L)
-	return;
-
-if((i=smb_locksmbhdr(&smb))!=0) {
-	errormsg(WHERE,ERR_LOCK,smb.file,i);
-    return; }
-
-if((i=smb_getstatus(&smb))!=0) {
-	errormsg(WHERE,ERR_READ,smb.file,i);
-	return; }
-
-if(!(smb.status.attr&SMB_HYPERALLOC)) {
-	if((i=smb_open_da(&smb))!=0) {
-		errormsg(WHERE,ERR_OPEN,smb.file,i);
-        return; }
-	for(x=0;x<msg->hdr.total_dfields;x++)
-		if((i=smb_freemsgdat(&smb,msg->hdr.offset+msg->dfield[x].offset
-			,msg->dfield[x].length,1))!=0)
-			errormsg(WHERE,ERR_WRITE,smb.file,i); }
-
-msg->dfield[0].type=TEXT_BODY;				/* Make one single data field */
-msg->dfield[0].length=length;
-msg->dfield[0].offset=0;
-for(x=1;x<msg->hdr.total_dfields;x++) { 	/* Clear the other data fields */
-	msg->dfield[x].type=UNUSED; 			/* so we leave the header length */
-	msg->dfield[x].length=0;				/* unchanged */
-	msg->dfield[x].offset=0; }
-
-
-if(smb.status.attr&SMB_HYPERALLOC) {
-	offset=smb_hallocdat(&smb); }
-else {
-	if((subnum!=INVALID_SUB && sub[subnum]->misc&SUB_FAST)
-		|| (subnum==INVALID_SUB && sys_misc&SM_FASTMAIL))
-		offset=smb_fallocdat(&smb,length,1);
-	else
-		offset=smb_allocdat(&smb,length,1);
-	smb_close_da(&smb); }
-
-msg->hdr.offset=offset;
-if((file=open(str,O_RDONLY|O_BINARY))==-1
-	|| (instream=fdopen(file,"rb"))==NULL) {
-	smb_unlocksmbhdr(&smb);
-	smb_freemsgdat(&smb,offset,length,1);
-	errormsg(WHERE,ERR_OPEN,str,O_RDONLY|O_BINARY);
-	return; }
-
-setvbuf(instream,NULL,_IOFBF,2*1024);
-fseek(smb.sdt_fp,offset,SEEK_SET);
-xlat=XLAT_NONE;
-fwrite(&xlat,2,1,smb.sdt_fp);
-x=SDT_BLOCK_LEN-2;				/* Don't read/write more than 255 */
-while(!feof(instream)) {
-	memset(buf,0,x);
-	j=fread(buf,1,x,instream);
-	if((j!=x || feof(instream)) && buf[j-1]==LF && buf[j-2]==CR)
-		buf[j-1]=buf[j-2]=0;	/* Convert to NULL */
-	fwrite(buf,j,1,smb.sdt_fp);
-	x=SDT_BLOCK_LEN; }
-fflush(smb.sdt_fp);
-fclose(instream);
-
-smb_unlocksmbhdr(&smb);
-msg->hdr.length=smb_getmsghdrlen(msg);
-if((i=smb_putmsghdr(&smb,msg))!=0)
-	errormsg(WHERE,ERR_WRITE,smb.file,i);
-}
-
-/****************************************************************************/
-/* Moves a message from one message base to another 						*/
-/****************************************************************************/
-char movemsg(smbmsg_t msg, uint subnum)
-{
-	char str[256],*buf;
-	int i,j,x,file,newgrp,newsub,storage;
-	long l;
-	ulong offset,length;
-
-for(i=0;i<usrgrps;i++)		 /* Select New Group */
-	uselect(1,i,"Message Group",grp[usrgrp[i]]->lname,0);
-if((newgrp=uselect(0,0,0,0,0))<0)
-	return(0);
-
-for(i=0;i<usrsubs[newgrp];i++)		 /* Select New Sub-Board */
-	uselect(1,i,"Sub-Board",sub[usrsub[newgrp][i]]->lname,0);
-if((newsub=uselect(0,0,0,0,0))<0)
-	return(0);
-newsub=usrsub[newgrp][newsub];
-
-length=smb_getmsgdatlen(&msg);
-if((buf=(char *)MALLOC(length))==NULL) {
-	errormsg(WHERE,ERR_ALLOC,smb.file,length);
-	return(0); }
-
-fseek(smb.sdt_fp,msg.hdr.offset,SEEK_SET);
-fread(buf,length,1,smb.sdt_fp);
-
-if((i=smb_stack(&smb,SMB_STACK_PUSH))!=0) {
-	FREE(buf);
-	errormsg(WHERE,ERR_OPEN,sub[newsub]->code,i);
-	return(0); }
-
-sprintf(smb.file,"%s%s",sub[newsub]->data_dir,sub[newsub]->code);
-smb.retry_time=smb_retry_time;
-if((i=smb_open(&smb))!=0) {
-	FREE(buf);
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_OPEN,smb.file,i);
-	return(0); }
-
-if(filelength(fileno(smb.shd_fp))<1) {	 /* Create it if it doesn't exist */
-	smb.status.max_crcs=sub[newsub]->maxcrcs;
-	smb.status.max_msgs=sub[newsub]->maxmsgs;
-	smb.status.max_age=sub[newsub]->maxage;
-	smb.status.attr=sub[newsub]->misc&SUB_HYPER ? SMB_HYPERALLOC :0;
-	if((i=smb_create(&smb))!=0) {
-		FREE(buf);
-		smb_close(&smb);
-		smb_stack(&smb,SMB_STACK_POP);
-		errormsg(WHERE,ERR_CREATE,smb.file,i);
-		return(0); } }
-
-if((i=smb_locksmbhdr(&smb))!=0) {
-	FREE(buf);
-	smb_close(&smb);
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_LOCK,smb.file,i);
-	return(0); }
-
-if((i=smb_getstatus(&smb))!=0) {
-	FREE(buf);
-	smb_close(&smb);
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_READ,smb.file,i);
-	return(0); }
-
-if(smb.status.attr&SMB_HYPERALLOC) {
-	offset=smb_hallocdat(&smb);
-    storage=SMB_HYPERALLOC; }
-else {
-	if((i=smb_open_da(&smb))!=0) {
-		FREE(buf);
-		smb_close(&smb);
-		smb_stack(&smb,SMB_STACK_POP);
-		errormsg(WHERE,ERR_OPEN,smb.file,i);
-		return(0); }
-	if(sub[newsub]->misc&SUB_FAST) {
-		offset=smb_fallocdat(&smb,length,1);
-		storage=SMB_FASTALLOC; }
-	else {
-		offset=smb_allocdat(&smb,length,1);
-		storage=SMB_SELFPACK; }
-	smb_close_da(&smb); }
-
-msg.hdr.offset=offset;
-
-memcpy(msg.hdr.id,"SHD\x1a",4);
-msg.hdr.version=smb_ver();
-
-smb_unlocksmbhdr(&smb);
-
-fseek(smb.sdt_fp,offset,SEEK_SET);
-fwrite(buf,length,1,smb.sdt_fp);
-fflush(smb.sdt_fp);
-FREE(buf);
-
-i=smb_addmsghdr(&smb,&msg,storage);
-smb_close(&smb);
-smb_stack(&smb,SMB_STACK_POP);
-
-if(i) {
-	smb_freemsgdat(&smb,offset,length,1);
-	errormsg(WHERE,ERR_WRITE,smb.file,i);
-	return(0); }
-
-bprintf("\r\nMoved to %s %s\r\n\r\n"
-	,grp[usrgrp[newgrp]]->sname,sub[newsub]->lname);
-sprintf(str,"Moved message from %s %s to %s %s"
-	,grp[newgrp]->sname,sub[newsub]->sname
-	,grp[sub[subnum]->grp]->sname,sub[subnum]->sname);
-logline("M+",str);
-if(sub[newsub]->misc&SUB_FIDO && sub[newsub]->echomail_sem[0])
-	if((file=nopen(sub[newsub]->echomail_sem
-		,O_WRONLY|O_CREAT|O_TRUNC))!=-1)
-		close(file);
-return(1);
-}
-
-ushort chmsgattr(ushort attr)
-{
-	int ch;
-
-while(online && !(sys_status&SS_ABORT)) {
-	CRLF;
-	show_msgattr(attr);
-	menu("MSGATTR");
-	ch=getkey(K_UPPER);
-	if(ch)
-		bprintf("%c\r\n",ch);
-	switch(ch) {
-		case 'P':
-			attr^=MSG_PRIVATE;
-			break;
-		case 'R':
-			attr^=MSG_READ;
-			break;
-		case 'K':
-			attr^=MSG_KILLREAD;
-			break;
-		case 'A':
-			attr^=MSG_ANONYMOUS;
-			break;
-		case 'N':   /* Non-purgeable */
-			attr^=MSG_PERMANENT;
-			break;
-		case 'M':
-			attr^=MSG_MODERATED;
-			break;
-		case 'V':
-			attr^=MSG_VALIDATED;
-			break;
-		case 'D':
-			attr^=MSG_DELETE;
-			break;
-		case 'L':
-			attr^=MSG_LOCKED;
-			break;
-		default:
-			return(attr); } }
-return(attr);
-}
diff --git a/src/sbbs2/msg2ans/msg2ans.c b/src/sbbs2/msg2ans/msg2ans.c
deleted file mode 100644
index 586744d1dd..0000000000
--- a/src/sbbs2/msg2ans/msg2ans.c
+++ /dev/null
@@ -1,147 +0,0 @@
-/* msg2ans.c */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* Converts Synchronet Ctrl-A codes into ANSI escape sequences */
-
-#include <stdio.h>
-#include <conio.h>
-
-#define ANSI fprintf(out,"\x1b[")
-
-int main(int argc, char **argv)
-{
-	int i,ch;
-	FILE *in,*out;
-
-if(argc<3) {
-	printf("\nMSG2ANS v1.03\n");
-	printf("\nusage: msg2ans infile.msg outfile.ans\n");
-	exit(0); }
-
-if((in=fopen(argv[1],"rb"))==NULL) {
-	printf("\nerror opening %s\n",argv[1]);
-	exit(1); }
-
-if((out=fopen(argv[2],"wb"))==NULL) {
-	printf("\nerror opening %s\n",argv[2]);
-	exit(1); }
-
-while((ch=fgetc(in))!=EOF) {
-	if(ch==1) { /* ctrl-a */
-		ch=fgetc(in);
-		if(ch==EOF)
-			break;
-		if(ch>=0x7f) {					/* move cursor right x columns */
-			ANSI;
-			fprintf(out,"%uC",ch-0x7f);
-			continue; }
-		switch(toupper(ch)) {
-			case 'A':
-				fputc('\1',out);
-				break;
-			case '<':
-				fputc('\b',out);
-				break;
-			case '>':
-				ANSI;
-				fputc('K',out);
-				break;
-			case '[':
-				fputc('\r',out);
-				break;
-			case ']':
-				fputc('\n',out);
-				break;
-			case 'L':
-				ANSI;
-				fprintf(out,"2J");
-				break;
-			case '-':
-			case '_':
-			case 'N':
-				ANSI;
-				fprintf(out,"0m");
-				break;
-			case 'H':
-				ANSI;
-				fprintf(out,"1m");
-                break;
-			case 'I':
-				ANSI;
-				fprintf(out,"5m");
-				break;
-			case 'K':
-				ANSI;
-				fprintf(out,"30m");
-				break;
-			case 'R':
-				ANSI;
-				fprintf(out,"31m");
-                break;
-			case 'G':
-				ANSI;
-				fprintf(out,"32m");
-                break;
-			case 'Y':
-				ANSI;
-				fprintf(out,"33m");
-                break;
-			case 'B':
-				ANSI;
-				fprintf(out,"34m");
-                break;
-			case 'M':
-				ANSI;
-				fprintf(out,"35m");
-                break;
-			case 'C':
-				ANSI;
-				fprintf(out,"36m");
-                break;
-			case 'W':
-				ANSI;
-				fprintf(out,"37m");
-                break;
-			case '0':
-				ANSI;
-				fprintf(out,"40m");
-                break;
-			case '1':
-				ANSI;
-				fprintf(out,"41m");
-                break;
-			case '2':
-				ANSI;
-				fprintf(out,"42m");
-                break;
-			case '3':
-				ANSI;
-				fprintf(out,"43m");
-                break;
-			case '4':
-				ANSI;
-				fprintf(out,"44m");
-                break;
-			case '5':
-				ANSI;
-				fprintf(out,"45m");
-                break;
-			case '6':
-				ANSI;
-				fprintf(out,"46m");
-                break;
-			case '7':
-				ANSI;
-				fprintf(out,"47m");
-				break;
-			default:
-				fprintf(out,"\1%c",ch);
-				break; } }
-	else
-		fputc(ch,out); }
-}
-
-
-
-
diff --git a/src/sbbs2/msgtoqwk.c b/src/sbbs2/msgtoqwk.c
deleted file mode 100644
index 68ad8a92cb..0000000000
--- a/src/sbbs2/msgtoqwk.c
+++ /dev/null
@@ -1,298 +0,0 @@
-#line 1 "MSGTOQWK.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-#include "qwk.h"
-#include "etext.h"
-
-#define MAX_MSGNUM	0x7FFFFFUL	// only 7 (decimal) digits allowed for msg num 
-
-/****************************************************************************/
-/* Converts message 'msg' to QWK format, writing to file 'qwk_fp'.          */
-/* mode determines how to handle Ctrl-A codes								*/
-/****************************************************************************/
-ulong msgtoqwk(smbmsg_t msg, FILE *qwk_fp, int mode, int subnum
-	, int conf)
-{
-	uchar	str[512],from[512],to[512],ch,tear=0,tearwatch=0,HUGE16 *buf,*p;
-	ushort	xlat;
-	long	l,size=0,offset;
-	int 	i;
-
-offset=ftell(qwk_fp);
-memset(str,SP,128);
-fwrite(str,128,1,qwk_fp);		/* Init header to space */
-
-if(msg.from_net.addr && (uint)subnum==INVALID_SUB) {
-	if(mode&TO_QNET)
-		sprintf(from,"%.128s",msg.from);
-	else if(msg.from_net.type==NET_FIDO)
-		sprintf(from,"%.128s@%.128s"
-			,msg.from,faddrtoa(*(faddr_t *)msg.from_net.addr));
-	else if(msg.from_net.type==NET_INTERNET)
-		sprintf(from,"%.128s",msg.from_net.addr);
-	else
-		sprintf(from,"%.128s@%.128s",msg.from,msg.from_net.addr);
-	if(strlen(from)>25) {
-		sprintf(str,"From: %.128s\xe3\xe3",from);
-		fwrite(str,strlen(str),1,qwk_fp);
-		size+=strlen(str);
-		sprintf(from,"%.128s",msg.from); } }
-else {
-	sprintf(from,"%.128s",msg.from);
-	if(msg.hdr.attr&MSG_ANONYMOUS && !SYSOP)	   /* from user */
-		strcpy(from,text[Anonymous]); }
-
-if(msg.to_net.addr && (uint)subnum==INVALID_SUB) {
-	if(msg.to_net.type==NET_FIDO)
-		sprintf(to,"%.128s@%s",msg.to,faddrtoa(*(faddr_t *)msg.to_net.addr));
-	else if(msg.to_net.type==NET_INTERNET)
-		sprintf(to,"%.128s",msg.to_net.addr);
-	else if(msg.to_net.type==NET_QWK) {
-		if(mode&TO_QNET) {
-			p=strchr(msg.to_net.addr,'/');
-			if(p) { 	/* Another hop */
-				p++;
-				strcpy(to,"NETMAIL");
-				sprintf(str,"%.128s@%.128s\xe3",msg.to,p);
-				fwrite(str,strlen(str),1,qwk_fp);
-				size+=strlen(str); }
-			else
-				sprintf(to,"%.128s",msg.to); }
-		else
-			sprintf(to,"%.128s@%.128s",msg.to,msg.to_net.addr); }
-	else
-		sprintf(to,"%.128s@%.128s",msg.to,msg.to_net.addr);
-	if(strlen(to)>25) {
-		sprintf(str,"To: %.128s\xe3\xe3",to);
-		fwrite(str,strlen(str),1,qwk_fp);
-		size+=strlen(str);
-		if(msg.to_net.type==NET_QWK)
-			strcpy(to,"NETMAIL");
-		else
-			sprintf(to,"%.128s",msg.to); } }
-else
-	sprintf(to,"%.128s",msg.to);
-
-if(msg.from_net.type==NET_QWK && mode&VIA && !msg.forwarded) {
-	sprintf(str,"@VIA:%.128s\xe3",msg.from_net.addr);
-	fwrite(str,strlen(str),1,qwk_fp);
-	size+=strlen(str); }
-
-if(msg.hdr.when_written.zone && mode&TZ) {
-	sprintf(str,"@TZ:%04x\xe3",msg.hdr.when_written.zone);
-	fwrite(str,strlen(str),1,qwk_fp);
-	size+=strlen(str); }
-
-p=0;
-for(i=0;i<msg.total_hfields;i++) {
-	if(msg.hfield[i].type==SENDER)
-		p=msg.hfield_dat[i];
-	if(msg.hfield[i].type==FORWARDED && p) {
-		sprintf(str,"Forwarded from %s on %s\xe3",p
-			,timestr((time_t *)msg.hfield_dat[i]));
-		fwrite(str,strlen(str),1,qwk_fp);
-		size+=strlen(str); } }
-
-buf=smb_getmsgtxt(&smb,&msg,1);
-if(!buf)
-	return(0);
-
-for(l=0;buf[l];l++) {
-	ch=buf[l];
-
-	if(ch==LF) {
-		if(tear)
-			tear++; 				/* Count LFs after tearline */
-		if(tear>3)					/* more than two LFs after the tear */
-			tear=0;
-		if(tearwatch==4) {			/* watch for LF---LF */
-			tear=1;
-			tearwatch=0; }
-		else if(!tearwatch)
-			tearwatch=1;
-		else
-			tearwatch=0;
-		ch=0xe3;
-		fputc(ch,qwk_fp);		  /* Replace LF with funky char */
-		size++;
-		continue; }
-
-	if(ch==CR) {					/* Ignore CRs */
-		if(tearwatch<4) 			/* LF---CRLF is okay */
-			tearwatch=0;			/* LF-CR- is not okay */
-		continue; }
-
-	if(ch==SP && tearwatch==4) {	/* watch for "LF--- " */
-		tear=1;
-		tearwatch=0; }
-
-	if(ch=='-') {                   /* watch for "LF---" */
-		if(l==0 || (tearwatch && tearwatch<4))
-			tearwatch++;
-		else
-			tearwatch=0; }
-	else
-		tearwatch=0;
-
-	if((uint)subnum!=INVALID_SUB && sub[subnum]->misc&SUB_ASCII) {
-		if(ch<SP && ch!=1)
-			ch='.';
-		else if(ch>0x7f)
-			ch='*'; }
-
-	if(ch==0xE3)					/* funky char */
-		ch='*';
-
-	if(ch==1) {  /* ctrl-a */
-		ch=buf[++l];
-		if(!ch)
-			break;
-		if(mode&A_EXPAND) {
-			str[0]=0;
-			switch(toupper(ch)) {		/* non-color codes */
-				case 'L':
-					strcpy(str,"\x1b[2J");
-					break;
-				case 'W':
-					strcpy(str,ansi(LIGHTGRAY));
-					break;
-				case 'K':
-					strcpy(str,ansi(BLACK));
-					break;
-				case 'H':
-					strcpy(str,ansi(HIGH));
-					break;
-				case 'I':
-					strcpy(str,ansi(BLINK));
-					break;
-				case 'N':   /* Normal */
-					strcpy(str,"\x1b[0m");
-					break;
-				case '0':
-					strcpy(str,"\x1b[40m");
-					break;
-				case '7':
-					strcpy(str,ansi(LIGHTGRAY<<4));
-					break;
-				case 'R':                               /* Color codes */
-					strcpy(str,ansi(RED));
-					break;
-				case 'G':
-					strcpy(str,ansi(GREEN));
-					break;
-				case 'B':
-					strcpy(str,ansi(BLUE));
-					break;
-				case 'C':
-					strcpy(str,ansi(CYAN));
-					break;
-				case 'M':
-					strcpy(str,ansi(MAGENTA));
-					break;
-				case 'Y':   /* Yellow */
-					strcpy(str,ansi(BROWN));
-					break;
-				case '1':
-					strcpy(str,ansi(RED<<4));
-					break;
-				case '2':
-					strcpy(str,ansi(GREEN<<4));
-					break;
-				case '3':
-					strcpy(str,ansi(BROWN<<4));
-					break;
-				case '4':
-					strcpy(str,ansi(BLUE<<4));
-					break;
-				case '5':
-					strcpy(str,ansi(MAGENTA<<4));
-					break;
-				case '6':
-					strcpy(str,ansi(CYAN<<4));
-					break; }
-			if(str[0]) {
-				fwrite(str,strlen(str),1,qwk_fp);
-				size+=strlen(str); }
-			continue; } 						/* End Expand */
-
-		if(mode&A_LEAVE) {
-			fputc(1,qwk_fp);
-			fputc(ch,qwk_fp);
-			size+=2L; }
-		else									/* Strip */
-			if(toupper(ch)=='L') {
-				fputc(FF,qwk_fp);
-				size++; }
-		continue; } 							/* End of Ctrl-A shit */
-	fputc(ch,qwk_fp);
-	size++; }
-
-LFREE(buf);
-if(ch!=0xE3) {
-	fputc(0xE3,qwk_fp); 		/* make sure it ends in CRLF */
-	size++; }
-
-if(mode&TAGLINE && !(sub[subnum]->misc&SUB_NOTAG)) {
-	if(!tear)										/* no tear line */
-		strcpy(str,"\1n---\xe3");                   /* so add one */
-    else
-		strcpy(str,"\1n");
-	if(sub[subnum]->misc&SUB_ASCII) ch='*';
-	else ch='�';
-	sprintf(tmp," %c \1g%s\1n %c %.127s\xe3"
-		,ch,decrypt(Synchronet,0),ch,sub[subnum]->tagline);
-	strcat(str,tmp);
-	if(!(mode&A_LEAVE))
-		remove_ctrl_a(str);
-	fwrite(str,strlen(str),1,qwk_fp);
-	size+=strlen(str); }
-
-while(size%128L) {				 /* Pad with spaces */
-	size++;
-	fputc(SP,qwk_fp); }
-
-unixtodos(msg.hdr.when_written.time,&date,&curtime);
-
-sprintf(tmp,"%02u-%02u-%02u%02u:%02u"
-    ,date.da_mon,date.da_day,TM_YEAR(date.da_year-1900)
-    ,curtime.ti_hour,curtime.ti_min);
-
-if(msg.hdr.attr&MSG_PRIVATE) {
-    if(msg.hdr.attr&MSG_READ)
-        ch='*'; /* private, read */
-    else
-        ch='+'; /* private, unread */ }
-else {
-    if(msg.hdr.attr&MSG_READ)
-        ch='-'; /* public, read */
-    else
-        ch=' '; /* public, unread */ }
-
-
-sprintf(str,"%c%-7lu%-13.13s%-25.25s"
-	"%-25.25s%-25.25s%12s%-8lu%-6lu\xe1%c%c%c%c%c"
-    ,ch                     /* message status flag */
-	,mode&REP ? (ulong)conf /* conference or */
-		: msg.hdr.number&MAX_MSGNUM	/* message number */
-	,tmp					/* date and time */
-	,to 					/* To: */
-	,from					/* From: */
-    ,msg.subj               /* Subject */
-    ,nulstr                 /* Password */
-    ,msg.hdr.thread_orig&MAX_MSGNUM    /* Message Re: Number */
-	,(size/128L)+1			/* Number of 128byte blocks */
-    ,(char)conf&0xff        /* Conference number lo byte */
-	,(ushort)conf>>8		/*					 hi byte */
-    ,SP                     /* not used */
-    ,SP                     /* not used */
-    ,useron.rest&FLAG('Q') ? '*' : SP     /* Net tag line */
-    );
-
-fseek(qwk_fp,offset,SEEK_SET);
-fwrite(str,128,1,qwk_fp);
-fseek(qwk_fp,size,SEEK_CUR);
-
-return(size);
-}
diff --git a/src/sbbs2/netmail.c b/src/sbbs2/netmail.c
deleted file mode 100644
index d5d4670f38..0000000000
--- a/src/sbbs2/netmail.c
+++ /dev/null
@@ -1,389 +0,0 @@
-#line 1 "NETMAIL.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-#include "qwk.h"
-
-/****************************************************************************/
-/****************************************************************************/
-void inetmail(char *into, char *subj, char mode)
-{
-	char	str[256],str2[256],msgpath[256],title[256],name[256],ch
-			,buf[SDT_BLOCK_LEN],*p,addr[256];
-	ushort	xlat=XLAT_NONE,net=NET_INTERNET;
-	int 	i,j,x,file;
-	long	l;
-	ulong	length,offset;
-	FILE	*instream;
-	node_t	node;
-	smbmsg_t msg;
-
-strcpy(name,into);
-strcpy(addr,into);
-strcpy(title,subj);
-
-if((!SYSOP && !(inetmail_misc&NMAIL_ALLOW)) || useron.rest&FLAG('M')) {
-    bputs(text[NoNetMailAllowed]);
-    return; }
-
-if(inetmail_cost && !(useron.exempt&FLAG('S'))) {
-	if(useron.cdt+useron.freecdt<inetmail_cost) {
-		bputs(text[NotEnoughCredits]);
-		return; }
-	sprintf(str,text[NetMailCostContinueQ],inetmail_cost);
-	if(noyes(str))
-		return; }
-
-p=strrchr(name,'@');
-if(!p)
-	p=strrchr(name,'!');
-if(p) {
-	*p=0;
-	truncsp(name); }
-bprintf(text[NetMailing],name,addr
-	,inetmail_misc&NMAIL_ALIAS ? useron.alias : useron.name
-	,sys_inetaddr);
-action=NODE_SMAL;
-nodesync();
-
-sprintf(msgpath,"%sNETMAIL.MSG",node_dir);
-if(!writemsg(msgpath,nulstr,title,mode,0,into)) {
-    bputs(text[Aborted]);
-    return; }
-
-if(mode&WM_FILE) {
-	sprintf(str2,"%sFILE\\%04u.OUT",data_dir,useron.number);
-	mkdir(str2);
-	sprintf(str2,"%sFILE\\%04u.OUT\\%s",data_dir,useron.number,title);
-	if(fexist(str2)) {
-		bputs(text[FileAlreadyThere]);
-		remove(msgpath);
-		return; }
-	if(online==ON_LOCAL) {		/* Local upload */
-		bputs(text[EnterPath]);
-		if(!getstr(str,60,K_LINE|K_UPPER)) {
-			bputs(text[Aborted]);
-			remove(msgpath);
-			return; }
-		backslash(str);
-		strcat(str,title);
-		mv(str,str2,1); }
-	else { /* Remote */
-		menu("ULPROT");
-		mnemonics(text[ProtocolOrQuit]);
-		strcpy(str,"Q");
-		for(x=0;x<total_prots;x++)
-			if(prot[x]->ulcmd[0] && chk_ar(prot[x]->ar,useron)) {
-				sprintf(tmp,"%c",prot[x]->mnemonic);
-				strcat(str,tmp); }
-		ch=getkeys(str,0);
-		if(ch=='Q' || sys_status&SS_ABORT) {
-			bputs(text[Aborted]);
-			remove(msgpath);
-			return; }
-		for(x=0;x<total_prots;x++)
-			if(prot[x]->ulcmd[0] && prot[x]->mnemonic==ch
-				&& chk_ar(prot[x]->ar,useron))
-				break;
-		if(x<total_prots)	/* This should be always */
-			protocol(cmdstr(prot[x]->ulcmd,str2,nulstr,NULL),0); }
-	l=flength(str2);
-	if(l>0)
-		bprintf(text[FileNBytesReceived],title,ultoac(l,tmp));
-	else {
-		bprintf(text[FileNotReceived],title);
-		remove(msgpath);
-		return; } }
-
-if((i=smb_stack(&smb,SMB_STACK_PUSH))!=0) {
-	errormsg(WHERE,ERR_OPEN,"MAIL",i);
-	return; }
-sprintf(smb.file,"%sMAIL",data_dir);
-smb.retry_time=smb_retry_time;
-if((i=smb_open(&smb))!=0) {
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_OPEN,smb.file,i);
-	return; }
-
-if(filelength(fileno(smb.shd_fp))<1) {	 /* Create it if it doesn't exist */
-	smb.status.max_crcs=mail_maxcrcs;
-	smb.status.max_age=mail_maxage;
-	smb.status.max_msgs=MAX_SYSMAIL;
-	smb.status.attr=SMB_EMAIL;
-	if((i=smb_create(&smb))!=0) {
-		smb_close(&smb);
-		smb_stack(&smb,SMB_STACK_POP);
-		errormsg(WHERE,ERR_CREATE,smb.file,i);
-		return; } }
-
-if((i=smb_locksmbhdr(&smb))!=0) {
-	smb_close(&smb);
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_LOCK,smb.file,i);
-	return; }
-
-length=flength(msgpath)+2;	 /* +2 for translation string */
-
-if(length&0xfff00000UL) {
-	smb_unlocksmbhdr(&smb);
-	smb_close(&smb);
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_LEN,msgpath,length);
-    return; }
-
-if((i=smb_open_da(&smb))!=0) {
-	smb_unlocksmbhdr(&smb);
-	smb_close(&smb);
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_OPEN,smb.file,i);
-	return; }
-if(sys_misc&SM_FASTMAIL)
-	offset=smb_fallocdat(&smb,length,1);
-else
-	offset=smb_allocdat(&smb,length,1);
-smb_close_da(&smb);
-
-if((file=open(msgpath,O_RDONLY|O_BINARY))==-1
-	|| (instream=fdopen(file,"rb"))==NULL) {
-	smb_freemsgdat(&smb,offset,length,1);
-	smb_unlocksmbhdr(&smb);
-	smb_close(&smb);
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_OPEN,msgpath,O_RDONLY|O_BINARY);
-	return; }
-
-setvbuf(instream,NULL,_IOFBF,2*1024);
-fseek(smb.sdt_fp,offset,SEEK_SET);
-xlat=XLAT_NONE;
-fwrite(&xlat,2,1,smb.sdt_fp);
-x=SDT_BLOCK_LEN-2;				/* Don't read/write more than 255 */
-while(!feof(instream)) {
-	memset(buf,0,x);
-	j=fread(buf,1,x,instream);
-	if((j!=x || feof(instream)) && buf[j-1]==LF && buf[j-2]==CR)
-		buf[j-1]=buf[j-2]=0;
-	fwrite(buf,j,1,smb.sdt_fp);
-	x=SDT_BLOCK_LEN; }
-fflush(smb.sdt_fp);
-fclose(instream);
-
-memset(&msg,0,sizeof(smbmsg_t));
-memcpy(msg.hdr.id,"SHD\x1a",4);
-msg.hdr.version=smb_ver();
-if(mode&WM_FILE)
-	msg.hdr.auxattr|=MSG_FILEATTACH;
-msg.hdr.when_written.time=msg.hdr.when_imported.time=time(NULL);
-msg.hdr.when_written.zone=msg.hdr.when_imported.zone=sys_timezone;
-
-msg.hdr.offset=offset;
-
-net=NET_INTERNET;
-smb_hfield(&msg,RECIPIENT,strlen(name),name);
-msg.idx.to=0;	/* Out-bound NetMail set to 0 */
-smb_hfield(&msg,RECIPIENTNETTYPE,sizeof(net),&net);
-smb_hfield(&msg,RECIPIENTNETADDR,strlen(addr),addr);
-
-strcpy(str,inetmail_misc&NMAIL_ALIAS ? useron.alias : useron.name);
-smb_hfield(&msg,SENDER,strlen(str),str);
-
-sprintf(str,"%u",useron.number);
-smb_hfield(&msg,SENDEREXT,strlen(str),str);
-msg.idx.from=useron.number;
-
-/*
-smb_hfield(&msg,SENDERNETTYPE,sizeof(net),&net);
-smb_hfield(&msg,SENDERNETADDR,strlen(sys_inetaddr),sys_inetaddr);
-*/
-
-smb_hfield(&msg,SUBJECT,strlen(title),title);
-strcpy(str,title);
-strlwr(str);
-msg.idx.subj=crc16(str);
-
-smb_dfield(&msg,TEXT_BODY,length);
-
-smb_unlocksmbhdr(&smb);
-i=smb_addmsghdr(&smb,&msg,SMB_SELFPACK);
-smb_close(&smb);
-smb_stack(&smb,SMB_STACK_POP);
-
-smb_freemsgmem(&msg);
-if(i) {
-	smb_freemsgdat(&smb,offset,length,1);
-	errormsg(WHERE,ERR_WRITE,smb.file,i);
-	return; }
-
-if(mode&WM_FILE && online==ON_REMOTE)
-	autohangup();
-
-if(inetmail_sem[0]) 	 /* update semaphore file */
-	if((file=nopen(inetmail_sem,O_WRONLY|O_CREAT|O_TRUNC))!=-1)
-		close(file);
-if(!(useron.exempt&FLAG('S')))
-	subtract_cdt(inetmail_cost);
-sprintf(str,"Sent Internet Mail to %s (%s)",name,addr);
-logline("EN",str);
-}
-
-void qnetmail(char *into, char *subj, char mode)
-{
-	char	str[256],str2[128],msgpath[128],title[128],to[128],fulladdr[128],ch
-			,buf[SDT_BLOCK_LEN],*addr,*p;
-	ushort	xlat=XLAT_NONE,net=NET_QWK,touser;
-	int 	i,j,x,file;
-	long	l;
-	ulong	length,offset;
-	FILE	*instream;
-	node_t	node;
-	smbmsg_t msg;
-
-strcpy(to,into);
-strcpy(title,subj);
-
-if(useron.rest&FLAG('M')) {
-    bputs(text[NoNetMailAllowed]);
-    return; }
-
-addr=strrchr(to,'@');
-if(!addr) {
-	bputs("Invalid netmail address\r\n");
-	return; }
-*addr=0;
-addr++;
-strupr(addr);
-truncsp(addr);
-touser=qwk_route(addr,fulladdr);
-if(!fulladdr[0]) {
-	bputs("Invalid netmail address\r\n");
-	return; }
-
-truncsp(to);
-if(!stricmp(to,"SBBS") && !SYSOP) {
-	bputs("Invalid netmail address\r\n");
-    return; }
-bprintf(text[NetMailing],to,fulladdr
-	,useron.alias,sys_id);
-action=NODE_SMAL;
-nodesync();
-
-sprintf(msgpath,"%sNETMAIL.MSG",node_dir);
-if(!writemsg(msgpath,nulstr,title,mode|WM_QWKNET,0,to)) {
-    bputs(text[Aborted]);
-    return; }
-
-if((i=smb_stack(&smb,SMB_STACK_PUSH))!=0) {
-	errormsg(WHERE,ERR_OPEN,"MAIL",i);
-	return; }
-sprintf(smb.file,"%sMAIL",data_dir);
-smb.retry_time=smb_retry_time;
-if((i=smb_open(&smb))!=0) {
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_OPEN,smb.file,i);
-	return; }
-
-if(filelength(fileno(smb.shd_fp))<1) {	 /* Create it if it doesn't exist */
-	smb.status.max_crcs=mail_maxcrcs;
-	smb.status.max_msgs=MAX_SYSMAIL;
-	smb.status.max_age=mail_maxage;
-	smb.status.attr=SMB_EMAIL;
-	if((i=smb_create(&smb))!=0) {
-		smb_close(&smb);
-		smb_stack(&smb,SMB_STACK_POP);
-		errormsg(WHERE,ERR_CREATE,smb.file,i);
-		return; } }
-
-if((i=smb_locksmbhdr(&smb))!=0) {
-	smb_close(&smb);
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_LOCK,smb.file,i);
-	return; }
-
-length=flength(msgpath)+2;	 /* +2 for translation string */
-
-if(length&0xfff00000UL) {
-	smb_unlocksmbhdr(&smb);
-	smb_close(&smb);
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_LEN,msgpath,length);
-    return; }
-
-if((i=smb_open_da(&smb))!=0) {
-	smb_unlocksmbhdr(&smb);
-	smb_close(&smb);
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_OPEN,smb.file,i);
-	return; }
-if(sys_misc&SM_FASTMAIL)
-	offset=smb_fallocdat(&smb,length,1);
-else
-	offset=smb_allocdat(&smb,length,1);
-smb_close_da(&smb);
-
-if((file=open(msgpath,O_RDONLY|O_BINARY))==-1
-	|| (instream=fdopen(file,"rb"))==NULL) {
-	smb_freemsgdat(&smb,offset,length,1);
-	smb_unlocksmbhdr(&smb);
-	smb_close(&smb);
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_OPEN,msgpath,O_RDONLY|O_BINARY);
-	return; }
-
-setvbuf(instream,NULL,_IOFBF,2*1024);
-fseek(smb.sdt_fp,offset,SEEK_SET);
-xlat=XLAT_NONE;
-fwrite(&xlat,2,1,smb.sdt_fp);
-x=SDT_BLOCK_LEN-2;				/* Don't read/write more than 255 */
-while(!feof(instream)) {
-	memset(buf,0,x);
-	j=fread(buf,1,x,instream);
-	if((j!=x || feof(instream)) && buf[j-1]==LF && buf[j-2]==CR)
-		buf[j-1]=buf[j-2]=0;
-	fwrite(buf,j,1,smb.sdt_fp);
-	x=SDT_BLOCK_LEN; }
-fflush(smb.sdt_fp);
-fclose(instream);
-
-memset(&msg,0,sizeof(smbmsg_t));
-memcpy(msg.hdr.id,"SHD\x1a",4);
-msg.hdr.version=smb_ver();
-if(mode&WM_FILE)
-	msg.hdr.auxattr|=MSG_FILEATTACH;
-msg.hdr.when_written.time=msg.hdr.when_imported.time=time(NULL);
-msg.hdr.when_written.zone=msg.hdr.when_imported.zone=sys_timezone;
-
-msg.hdr.offset=offset;
-
-net=NET_QWK;
-smb_hfield(&msg,RECIPIENT,strlen(to),to);
-msg.idx.to=touser;
-smb_hfield(&msg,RECIPIENTNETTYPE,sizeof(net),&net);
-smb_hfield(&msg,RECIPIENTNETADDR,strlen(fulladdr),fulladdr);
-
-smb_hfield(&msg,SENDER,strlen(useron.alias),useron.alias);
-
-sprintf(str,"%u",useron.number);
-smb_hfield(&msg,SENDEREXT,strlen(str),str);
-msg.idx.from=useron.number;
-
-smb_hfield(&msg,SUBJECT,strlen(title),title);
-strcpy(str,title);
-strlwr(str);
-msg.idx.subj=crc16(str);
-
-smb_dfield(&msg,TEXT_BODY,length);
-
-smb_unlocksmbhdr(&smb);
-i=smb_addmsghdr(&smb,&msg,SMB_SELFPACK);
-smb_close(&smb);
-smb_stack(&smb,SMB_STACK_POP);
-
-smb_freemsgmem(&msg);
-if(i) {
-	smb_freemsgdat(&smb,offset,length,1);
-	errormsg(WHERE,ERR_WRITE,smb.file,i);
-	return; }
-
-sprintf(str,"Sent QWK NetMail to %s (%s)",to,fulladdr);
-logline("EN",str);
-}
diff --git a/src/sbbs2/newuser.c b/src/sbbs2/newuser.c
deleted file mode 100644
index 40802c077e..0000000000
--- a/src/sbbs2/newuser.c
+++ /dev/null
@@ -1,404 +0,0 @@
-#line 1 "NEWUSER.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-#include "cmdshell.h"
-
-extern char qwklogon;
-
-/****************************************************************************/
-/* This function is invoked when a user enters "NEW" at the NN: prompt		*/
-/* Prompts user for personal information and then sends feedback to sysop.  */
-/* Called from function waitforcall											*/
-/****************************************************************************/
-void newuser()
-{
-	char	c,str[512],usa;
-	int 	file;
-	uint	i,j;
-	long	misc;
-	FILE	*stream;
-
-if(cur_rate<node_minbps) {
-	bprintf(text[MinimumModemSpeed],node_minbps);
-	sprintf(str,"%sTOOSLOW.MSG",text_dir);
-	if(fexist(str))
-		printfile(str,0);
-	sprintf(str,"New user modem speed: %lu<%u"
-		,cur_rate,node_minbps);
-	logline("N!",str);
-	hangup();
-	return; }
-
-getnodedat(node_num,&thisnode,0);
-if(thisnode.misc&NODE_LOCK) {
-	bputs(text[NodeLocked]);
-	logline("N!","New user locked node logon attempt");
-	hangup();
-	return; }
-
-if(sys_misc&SM_CLOSED) {
-	bputs(text[NoNewUsers]);
-	hangup();
-	return; }
-getnodedat(node_num,&thisnode,1);
-thisnode.status=NODE_NEWUSER;
-if(online==ON_LOCAL)
-	thisnode.connection=0;
-else
-	thisnode.connection=cur_rate;
-putnodedat(node_num,thisnode);
-memset(&useron,0,sizeof(user_t));	  /* Initialize user info to null */
-if(new_pass[0] && online==ON_REMOTE) {
-	c=0;
-	while(++c<4) {
-		bputs(text[NewUserPasswordPrompt]);
-		getstr(str,40,K_UPPER);
-		if(!strcmp(str,new_pass))
-			break;
-		sprintf(tmp,"NUP Attempted: '%s'",str);
-		logline("N!",tmp); }
-	if(c==4) {
-		sprintf(str,"%sNUPGUESS.MSG",text_dir);
-		if(fexist(str))
-			printfile(str,P_NOABORT);
-		hangup();
-		return; } }
-
-if(autoterm || yesno(text[AutoTerminalQ])) {
-	useron.misc|=AUTOTERM;
-	useron.misc|=autoterm; }
-
-if(!(useron.misc&AUTOTERM)) {
-	if(yesno(text[AnsiTerminalQ]))
-		useron.misc|=ANSI; }
-
-if(useron.misc&ANSI) {
-	useron.rows=0;	/* Auto-rows */
-	if(useron.misc&(RIP|WIP) || yesno(text[ColorTerminalQ]))
-		useron.misc|=COLOR; }
-else
-	useron.rows=24;
-if(!yesno(text[ExAsciiTerminalQ]))
-	useron.misc|=NO_EXASCII;
-
-/* Sets defaults per sysop config */
-useron.misc|=(new_misc&~(DELETED|INACTIVE|QUIET|NETMAIL));
-useron.qwk=(QWK_FILES|QWK_ATTACH|QWK_EMAIL|QWK_DELMAIL);
-strcpy(useron.modem,connection);
-useron.firston=useron.laston=useron.pwmod=time(NULL);
-if(new_expire) {
-	now=time(NULL);
-	useron.expire=now+((long)new_expire*24L*60L*60L); }
-else
-	useron.expire=0;
-useron.sex=SP;
-useron.prot=new_prot;
-strcpy(useron.note,cid);		/* Caller ID if supported, NULL otherwise */
-strcpy(useron.alias,"New");     /* just for status line */
-strcpy(useron.modem,connection);
-if(!lastuser()) {	/* Automatic sysop access for first user */
-	useron.level=99;
-	useron.exempt=useron.flags1=useron.flags2=0xffffffffUL;
-	useron.flags3=useron.flags4=0xffffffffUL;
-	useron.rest=0L; }
-else {
-	useron.level=new_level;
-	useron.flags1=new_flags1;
-	useron.flags2=new_flags2;
-	useron.flags3=new_flags3;
-	useron.flags4=new_flags4;
-	useron.rest=new_rest;
-	useron.exempt=new_exempt; }
-
-useron.cdt=new_cdt;
-useron.min=new_min;
-useron.freecdt=level_freecdtperday[useron.level];
-
-if(total_fcomps)
-	strcpy(useron.tmpext,fcomp[0]->ext);
-else
-	strcpy(useron.tmpext,"ZIP");
-for(i=0;i<total_xedits;i++)
-	if(!stricmp(xedit[i]->code,new_xedit) && chk_ar(xedit[i]->ar,useron))
-		break;
-if(i<total_xedits)
-	useron.xedit=i+1;
-
-
-useron.shell=new_shell;
-
-statline=sys_def_stat;
-statusline();
-useron.alias[0]=0;
-while(online) {
-	while(online) {
-		if(uq&UQ_ALIASES)
-			bputs(text[EnterYourAlias]);
-		else
-			bputs(text[EnterYourRealName]);
-		getstr(useron.alias,LEN_ALIAS
-			,K_UPRLWR|(uq&UQ_NOEXASC)|K_EDIT|K_AUTODEL);
-		truncsp(useron.alias);
-		if(useron.alias[0]<=SP || !isalpha(useron.alias[0])
-			|| strchr(useron.alias,0xff)
-			|| matchuser(useron.alias) || trashcan(useron.alias,"NAME")
-			|| (!(uq&UQ_ALIASES) && !strchr(useron.alias,SP))) {
-			bputs(text[YouCantUseThatName]);
-			continue; }
-		break; }
-	statusline();
-	if(!online) return;
-	if(uq&UQ_ALIASES && uq&UQ_REALNAME) {
-		while(online) {
-			bputs(text[EnterYourRealName]);
-			if(!getstr(useron.name,LEN_NAME
-				,K_UPRLWR|(uq&UQ_NOEXASC)|K_EDIT|K_AUTODEL)
-				|| trashcan(useron.name,"NAME")
-				|| strchr(useron.name,0xff)
-				|| !strchr(useron.name,SP)
-				|| (uq&UQ_DUPREAL
-					&& userdatdupe(useron.number,U_NAME,LEN_NAME
-						,useron.name,0)))
-				bputs(text[YouCantUseThatName]);
-			else
-				break; } }
-	else if(uq&UQ_COMPANY) {
-			bputs(text[EnterYourCompany]);
-			getstr(useron.name,LEN_NAME,(uq&UQ_NOEXASC)|K_EDIT|K_AUTODEL); }
-	if(!useron.name[0])
-        strcpy(useron.name,useron.alias);
-    if(!online) return;
-	if(!useron.handle[0])
-		sprintf(useron.handle,"%.*s",LEN_HANDLE,useron.alias);
-	while(uq&UQ_HANDLE && online) {
-		bputs(text[EnterYourHandle]);
-		if(!getstr(useron.handle,LEN_HANDLE
-			,K_LINE|K_EDIT|K_AUTODEL|(uq&UQ_NOEXASC))
-			|| strchr(useron.handle,0xff)
-			|| (uq&UQ_DUPHAND
-				&& userdatdupe(0,U_HANDLE,LEN_HANDLE,useron.handle,0))
-			|| trashcan(useron.handle,"NAME"))
-			bputs(text[YouCantUseThatName]);
-		else
-			break; }
-	if(!online) return;
-	if(uq&UQ_ADDRESS)
-		while(online) { 	   /* Get address and zip code */
-			bputs(text[EnterYourAddress]);
-			if(getstr(useron.address,LEN_ADDRESS
-				,K_UPRLWR|(uq&UQ_NOEXASC)|K_EDIT|K_AUTODEL))
-				break; }
-	if(!online) return;
-	while(uq&UQ_LOCATION && online) {
-		bputs(text[EnterYourCityState]);
-		if(getstr(useron.location,LEN_LOCATION
-			,K_UPRLWR|(uq&UQ_NOEXASC)|K_EDIT|K_AUTODEL)
-			&& (uq&UQ_NOCOMMAS || strchr(useron.location,',')))
-			break;
-		bputs("\r\nYou must include a comma between the city and state.\r\n");
-		useron.location[0]=0; }
-	if(uq&UQ_ADDRESS)
-		while(online) {
-			bputs(text[EnterYourZipCode]);
-			if(getstr(useron.zipcode,LEN_ZIPCODE
-				,K_UPPER|(uq&UQ_NOEXASC)|K_EDIT|K_AUTODEL))
-				break; }
-	if(!online) return;
-	if(uq&UQ_PHONE) {
-		usa=yesno(text[CallingFromNorthAmericaQ]);
-		while(online) {
-			bputs(text[EnterYourPhoneNumber]);
-			if(!usa) {
-				if(getstr(useron.phone,LEN_PHONE
-					,K_UPPER|K_LINE|(uq&UQ_NOEXASC)|K_EDIT|K_AUTODEL)<5)
-					continue; }
-			else {
-				if(gettmplt(useron.phone,sys_phonefmt
-					,K_LINE|(uq&UQ_NOEXASC)|K_EDIT)<strlen(sys_phonefmt))
-					continue; }
-			if(!trashcan(useron.phone,"PHONE"))
-				break; } }
-	if(!online) return;
-	if(uq&UQ_SEX) {
-		bputs(text[EnterYourSex]);
-		useron.sex=getkeys("MF",0); }
-	while(uq&UQ_BIRTH && online) {
-		bputs(text[EnterYourBirthday]);
-		if(gettmplt(useron.birth,"nn/nn/nn",K_EDIT)==8 && getage(useron.birth))
-			break; }
-	if(yesno(text[UserInfoCorrectQ]))
-		break; }
-sprintf(str,"New user: %s",useron.alias);
-logline("N",str);
-if(!online) return;
-if(uq&UQ_COMP)
-	getcomputer(useron.comp);
-CLS;
-sprintf(str,"%sSBBS.MSG",text_dir);
-printfile(str,P_NOABORT);
-if(lncntr)
-	pause();
-CLS;
-sprintf(str,"%sSYSTEM.MSG",text_dir);
-printfile(str,P_NOABORT);
-if(lncntr)
-	pause();
-CLS;
-sprintf(str,"%sNEWUSER.MSG",text_dir);
-printfile(str,P_NOABORT);
-if(lncntr)
-	pause();
-CLS;
-answertime=time(NULL);		/* could take 10 minutes to get this far */
-
-if(total_xedits && uq&UQ_XEDIT && !noyes("Use an external editor")) {
-	if(useron.xedit) useron.xedit--;
-    for(i=0;i<total_xedits;i++)
-		uselect(1,i,"External Editor",xedit[i]->name,xedit[i]->ar);
-	if((int)(i=uselect(0,useron.xedit,0,0,0))>=0)
-		useron.xedit=i+1; }
-
-if(total_shells>1 && uq&UQ_CMDSHELL) {
-    for(i=0;i<total_shells;i++)
-		uselect(1,i,"Command Shell",shell[i]->name,shell[i]->ar);
-	if((int)(i=uselect(0,useron.shell,0,0,0))>=0)
-		useron.shell=i; }
-
-c=0;
-while(c<LEN_PASS) { 				/* Create random password */
-	useron.pass[c]=random(43)+48;
-	if(isalnum(useron.pass[c]))
-		c++; }
-useron.pass[c]=0;
-bprintf(text[YourPasswordIs],useron.pass);
-
-if(sys_misc&SM_PWEDIT && yesno(text[NewPasswordQ]))
-	while(online) {
-		bputs(text[NewPassword]);
-		getstr(str,LEN_PASS,K_UPPER|K_LINE);
-		truncsp(str);
-		if(chkpass(str,useron)) {
-			strcpy(useron.pass,str);
-			CRLF;
-			bprintf(text[YourPasswordIs],useron.pass);
-			break; }
-		CRLF; }
-
-c=0;
-while(online) {
-	bprintf(text[NewUserPasswordVerify]);
-	console|=CON_R_ECHOX;
-	if(!(sys_misc&SM_ECHO_PW))
-		console|=CON_L_ECHOX;
-	str[0]=0;
-	getstr(str,LEN_PASS,K_UPPER);
-	console&=~(CON_R_ECHOX|CON_L_ECHOX);
-	if(!strcmp(str,useron.pass)) break;
-	sprintf(tmp,"Failed PW verification: '%s' instead of '%s'",str
-		,useron.pass);
-	logline(nulstr,tmp);
-	if(++c==4) {
-		logline("N!","Couldn't figure out password.");
-		hangup(); }
-	bputs(text[IncorrectPassword]);
-	bprintf(text[YourPasswordIs],useron.pass); }
-if(!online) return;
-if(new_magic[0]) {
-	bputs(text[MagicWordPrompt]);
-	str[0]=0;
-	getstr(str,50,K_UPPER);
-	if(strcmp(str,new_magic)) {
-		bputs(text[FailedMagicWord]);
-		sprintf(tmp,"Failed magic word: '%s'",str);
-		logline("N!",tmp);
-		hangup(); }
-	if(!online) return; }
-
-i=1;
-bputs(text[CheckingSlots]);
-sprintf(str,"%s\\USER\\NAME.DAT",data_dir);
-if(fexist(str)) {
-	if((stream=fnopen(&file,str,O_RDONLY))==NULL) {
-		errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-		hangup();
-		return; }
-	j=filelength(file)/(LEN_ALIAS+2);	   /* total users */
-	while(i<=j) {
-		fread(str,LEN_ALIAS+2,1,stream);
-		for(c=0;c<LEN_ALIAS;c++)
-			if(str[c]==ETX) break;
-		str[c]=0;
-		if(!c) {	 /* should be a deleted user */
-			getuserrec(i,U_MISC,8,str);
-			misc=ahtoul(str);
-			if(misc&DELETED) {	 /* deleted bit set too */
-				getuserrec(i,U_LASTON,8,str);
-				now=ahtoul(str);				/* delete long enough ? */
-				if((time(NULL)-now)/86400>=sys_deldays) break; } }
-		i++; }
-	fclose(stream); }
-
-j=lastuser();		/* Check against data file */
-if(i<=j) {			/* Overwriting existing user */
-	getuserrec(i,U_MISC,8,str);
-	misc=ahtoul(str);
-	if(!(misc&DELETED)) /* Not deleted? Set usernumber to end+1 */
-		i=j+1; }
-
-useron.number=i;
-putuserdat(useron);
-putusername(useron.number,useron.alias);
-logline(nulstr,"Wrote user data");
-if(new_sif[0]) {
-	sprintf(str,"%sUSER\\%4.4u.DAT",data_dir,useron.number);
-	create_sif_dat(new_sif,str); }
-if(!(uq&UQ_NODEF))
-	maindflts(useron);
-
-delallmail(useron.number);
-
-if(useron.number!=1 && node_valuser) {
-	sprintf(str,"%sFEEDBACK.MSG",text_dir);
-	CLS;
-	printfile(str,P_NOABORT);
-	sprintf(str,text[NewUserFeedbackHdr]
-		,nulstr,getage(useron.birth),useron.sex,useron.birth
-		,useron.name,useron.phone,useron.comp,useron.modem);
-	email(node_valuser,str,"New User Validation",WM_EMAIL);
-	if(!useron.fbacks && !useron.emails) {
-		if(online) {						/* didn't hang up */
-			bprintf(text[NoFeedbackWarning],username(node_valuser,tmp));
-			email(node_valuser,str,"New User Validation",WM_EMAIL);
-			} /* give 'em a 2nd try */
-		if(!useron.fbacks && !useron.emails) {
-        	bprintf(text[NoFeedbackWarning],username(node_valuser,tmp));
-			logline("N!","Aborted feedback");
-			hangup();
-			putuserrec(useron.number,U_COMMENT,60,"Didn't leave feedback");
-			putuserrec(useron.number,U_MISC,8
-				,ultoa(useron.misc|DELETED,tmp,16));
-			putusername(useron.number,nulstr);
-			return; } } }
-
-sprintf(str,"%sFILE\\%04u.IN",data_dir,useron.number);  /* delete any files */
-delfiles(str,"*.*");                                    /* waiting for user */
-rmdir(str);
-sprintf(tmp,"%04u.*",useron.number);
-sprintf(str,"%sFILE",data_dir);
-delfiles(str,tmp);
-
-answertime=starttime=time(NULL);	  /* set answertime to now */
-sprintf(str,"%sUSER\\PTRS\\%04u.IXB",data_dir,useron.number); /* msg ptrs */
-remove(str);
-sprintf(str,"%sMSGS\\%04u.MSG",data_dir,useron.number); /* delete short msg */
-remove(str);
-sprintf(str,"%sUSER\\%04u.MSG",data_dir,useron.number); /* delete ex-comment */
-remove(str);
-if(newuser_mod[0])
-	exec_bin(newuser_mod,&main_csi);
-user_event(EVENT_NEWUSER);
-logline("N+","Successful new user logon");
-sys_status|=SS_NEWUSER;
-}
diff --git a/src/sbbs2/node/make.bat b/src/sbbs2/node/make.bat
deleted file mode 100755
index b20b2c0d19..0000000000
--- a/src/sbbs2/node/make.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-bcc -w-pro -I.. -C -mt -nDOS node.c
-if errorlevel 1 goto end
-exe2bin dos\node.exe dos\node.com
-:end
\ No newline at end of file
diff --git a/src/sbbs2/node/make.cmd b/src/sbbs2/node/make.cmd
deleted file mode 100755
index 4094c5e6d7..0000000000
--- a/src/sbbs2/node/make.cmd
+++ /dev/null
@@ -1,2 +0,0 @@
-@echo off
-bcc -I.. -w-pro -nOS2 node.c
diff --git a/src/sbbs2/node/node.c b/src/sbbs2/node/node.c
deleted file mode 100644
index 9532dc12d5..0000000000
--- a/src/sbbs2/node/node.c
+++ /dev/null
@@ -1,476 +0,0 @@
-/* NODE.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* Synchronet BBS Node control program */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <io.h>
-#include <dos.h>
-#include <fcntl.h>
-#include <string.h>
-#include "sbbsdefs.h"
-
-enum {
-	 MODE_LIST
-	,MODE_ANON
-	,MODE_LOCK
-	,MODE_INTR
-	,MODE_RRUN
-	,MODE_DOWN
-	,MODE_EVENT
-	,MODE_NOPAGE
-	,MODE_NOALERTS
-	,MODE_STATUS
-	,MODE_USERON
-	,MODE_ACTION
-	,MODE_ERRORS
-	,MODE_MISC
-	,MODE_CONN
-	,MODE_AUX
-	,MODE_EXTAUX
-	};
-
-char tmp[256];
-int nodefile;
-
-/****************************************************************************/
-/* Reads the data for node number 'number' into the structure 'node'        */
-/* from NODE.DAB															*/
-/* if lockit is non-zero, locks this node's record. putnodedat() unlocks it */
-/****************************************************************************/
-void getnodedat(uchar number, node_t *node, char lockit)
-{
-	char str[256];
-	int count=0;
-
-number--;	/* make zero based */
-while(count<LOOP_NODEDAB) {
-	lseek(nodefile,(long)number*sizeof(node_t),SEEK_SET);
-	if(lockit
-		&& lock(nodefile,(long)number*sizeof(node_t),sizeof(node_t))==-1) {
-		count++;
-		continue; }
-	if(read(nodefile,node,sizeof(node_t))==sizeof(node_t))
-		break;
-	count++; }
-if(count)
-	printf("NODE.DAB COLLISION (READ) - Count:%d\n",count);
-if(count==LOOP_NODEDAB) {
-	printf("Error reading nodefile for node %d\n",number+1);
-	return; }
-}
-
-/****************************************************************************/
-/* Write the data from the structure 'node' into NODE.DAB  					*/
-/* getnodedat(num,&node,1); must have been called before calling this func  */
-/*          NOTE: ------^   the indicates the node record has been locked   */
-/****************************************************************************/
-void putnodedat(uchar number, node_t node)
-{
-	char str[256];
-	int count;
-
-number--;	/* make zero based */
-lseek(nodefile,(long)number*sizeof(node_t),SEEK_SET);
-if(write(nodefile,&node,sizeof(node_t))!=sizeof(node_t)) {
-	unlock(nodefile,(long)number*sizeof(node_t),sizeof(node_t));
-	printf("Error writing to nodefile for node %d\n",number+1);
-	return; }
-unlock(nodefile,(long)number*sizeof(node_t),sizeof(node_t));
-}
-
-/****************************************************************************/
-/* Unpacks the password 'pass' from the 5bit ASCII inside node_t. 32bits in */
-/* node.extaux, and the other 8bits in the upper byte of node.aux			*/
-/****************************************************************************/
-char *unpackchatpass(char *pass, node_t node)
-{
-	char 	bits;
-	int 	i;
-
-pass[0]=(node.aux&0x1f00)>>8;
-pass[1]=((node.aux&0xe000)>>13)|((node.extaux&0x3)<<3);
-bits=2;
-for(i=2;i<8;i++) {
-	pass[i]=(node.extaux>>bits)&0x1f;
-	bits+=5; }
-pass[8]=0;
-for(i=0;i<8;i++)
-	if(pass[i])
-		pass[i]+=64;
-return(pass);
-}
-
-/****************************************************************************/
-/* Displays the information for node number 'number' contained in 'node'    */
-/****************************************************************************/
-void printnodedat(uchar number, node_t node)
-{
-	uint i;
-    char hour,mer[3];
-
-printf("Node %2d: ",number);
-switch(node.status) {
-    case NODE_WFC:
-		printf("Waiting for call");
-        break;
-    case NODE_OFFLINE:
-		printf("Offline");
-        break;
-    case NODE_NETTING:
-		printf("Networking");
-        break;
-    case NODE_LOGON:
-		printf("At logon prompt");
-        break;
-    case NODE_EVENT_WAITING:
-		printf("Waiting for all nodes to become inactive");
-        break;
-    case NODE_EVENT_LIMBO:
-		printf("Waiting for node %d to finish external event",node.aux);
-        break;
-    case NODE_EVENT_RUNNING:
-		printf("Running external event");
-        break;
-    case NODE_NEWUSER:
-		printf("New user");
-		printf(" applying for access ");
-        if(!node.connection)
-			printf("Locally");
-        else
-			printf("at %ubps",node.connection);
-        break;
-	case NODE_QUIET:
-    case NODE_INUSE:
-		printf("User #%d",node.useron);
-		printf(" ");
-        switch(node.action) {
-            case NODE_MAIN:
-				printf("at main menu");
-                break;
-            case NODE_RMSG:
-				printf("reading messages");
-                break;
-            case NODE_RMAL:
-				printf("reading mail");
-                break;
-            case NODE_RSML:
-				printf("reading sent mail");
-                break;
-            case NODE_RTXT:
-				printf("reading text files");
-                break;
-            case NODE_PMSG:
-				printf("posting message");
-                break;
-            case NODE_SMAL:
-				printf("sending mail");
-                break;
-            case NODE_AMSG:
-				printf("posting auto-message");
-                break;
-            case NODE_XTRN:
-                if(!node.aux)
-					printf("at external program menu");
-				else
-					printf("running external program #%d",node.aux);
-                break;
-            case NODE_DFLT:
-				printf("changing defaults");
-                break;
-            case NODE_XFER:
-				printf("at transfer menu");
-                break;
-			case NODE_RFSD:
-				printf("retrieving from device #%d",node.aux);
-                break;
-            case NODE_DLNG:
-				printf("downloading");
-                break;
-            case NODE_ULNG:
-				printf("uploading");
-                break;
-            case NODE_BXFR:
-				printf("transferring bidirectional");
-                break;
-            case NODE_LFIL:
-				printf("listing files");
-                break;
-            case NODE_LOGN:
-				printf("logging on");
-                break;
-            case NODE_LCHT:
-				printf("in local chat with sysop");
-                break;
-            case NODE_MCHT:
-                if(node.aux) {
-					printf("in multinode chat channel %d",node.aux&0xff);
-                    if(node.aux&0x1f00) { /* password */
-						putchar('*');
-						printf(" %s",unpackchatpass(tmp,node)); } }
-                else
-					printf("in multinode global chat channel");
-                break;
-			case NODE_PAGE:
-				printf("paging node %u for private chat",node.aux);
-                break;
-			case NODE_PCHT:
-				printf("in private chat with node %u",node.aux);
-				break;
-            case NODE_GCHT:
-				printf("chatting with The Guru");
-                break;
-            case NODE_CHAT:
-				printf("in chat section");
-                break;
-            case NODE_TQWK:
-				printf("transferring QWK packet");
-                break;
-            case NODE_SYSP:
-				printf("performing sysop activities");
-                break;
-            default:
-				printf(itoa(node.action,tmp,10));
-                break;  }
-        if(!node.connection)
-			printf(" locally");
-        else
-			printf(" at %ubps",node.connection);
-        if(node.action==NODE_DLNG) {
-			if((node.aux/60)>=12) {
-				if(node.aux/60==12)
-					hour=12;
-				else
-					hour=(node.aux/60)-12;
-                strcpy(mer,"pm"); }
-            else {
-                if((node.aux/60)==0)    /* 12 midnite */
-                    hour=12;
-                else hour=node.aux/60;
-                strcpy(mer,"am"); }
-			printf(" ETA %02d:%02d %s"
-                ,hour,node.aux-((node.aux/60)*60),mer); }
-        break; }
-if(node.misc&(NODE_LOCK|NODE_POFF|NODE_AOFF|NODE_MSGW|NODE_NMSG)) {
-	printf(" (");
-    if(node.misc&NODE_AOFF)
-		putchar('A');
-    if(node.misc&NODE_LOCK)
-		putchar('L');
-	if(node.misc&(NODE_MSGW|NODE_NMSG))
-		putchar('M');
-    if(node.misc&NODE_POFF)
-		putchar('P');
-	putchar(')'); }
-if(((node.misc
-    &(NODE_ANON|NODE_UDAT|NODE_INTR|NODE_RRUN|NODE_EVENT|NODE_DOWN))
-    || node.status==NODE_QUIET)) {
-	printf(" [");
-    if(node.misc&NODE_ANON)
-		putchar('A');
-    if(node.misc&NODE_INTR)
-		putchar('I');
-    if(node.misc&NODE_RRUN)
-		putchar('R');
-    if(node.misc&NODE_UDAT)
-		putchar('U');
-    if(node.status==NODE_QUIET)
-		putchar('Q');
-    if(node.misc&NODE_EVENT)
-		putchar('E');
-    if(node.misc&NODE_DOWN)
-		putchar('D');
-	putchar(']'); }
-if(node.errors)
-	printf(" %d error%c",node.errors, node.errors>1 ? 's' : '\0' );
-printf("\n");
-}
-
-
-/****************************/
-/* Main program entry point */
-/****************************/
-int main(int argc, char **argv)
-{
-	char str[256],ctrl_dir[41],*p,debug=0;
-	uchar sys_nodes,node_num=0,onoff=0;
-	uint i,j,mode=0,misc;
-	long value;
-	node_t node;
-
-printf("\nSynchronet Node Display/Control Utility v1.03\n\n");
-
-if(argc<2) {
-	printf("usage: node [/debug] [action [on|off]] [node numbers] [...]"
-		"\n\n");
-	printf("actions (default is list):\n\n");
-	printf("list        = list status\n");
-	printf("anon        = anonymous user\n");
-	printf("lock        = locked\n");
-	printf("intr        = interrupt\n");
-	printf("down        = shut-down\n");
-	printf("rerun       = rerun\n");
-	printf("event       = run event\n");
-	printf("nopage      = page disable\n");
-	printf("noalerts    = activity alerts disable\n");
-	printf("status=#    = set status value\n");
-	printf("useron=#    = set useron number\n");
-	printf("action=#    = set action value\n");
-	printf("errors=#    = set error counter\n");
-	printf("conn=#      = set connection value\n");
-	printf("misc=#      = set misc value\n");
-	printf("aux=#       = set aux value\n");
-	printf("extaux=#    = set extended aux value\n");
-	exit(0); }
-
-p=getenv("SBBSCTRL");
-if(p==NULL) {
-	printf("\7\nSBBSCTRL environment variable is not set.\n");
-	printf("This environment variable must be set to your CTRL directory.");
-	printf("\nExample: SET SBBSCTRL=C:\\SBBS\\CTRL\n");
-	exit(1); }
-sprintf(ctrl_dir,"%.40s",p);
-strupr(ctrl_dir);
-if(ctrl_dir[strlen(ctrl_dir)-1]!='\\')
-	strcat(ctrl_dir,"\\");
-
-sprintf(str,"%sNODE.DAB",ctrl_dir);
-if((nodefile=open(str,O_RDWR|O_DENYNONE|O_BINARY))==-1) {
-	printf("\7\nError opening %s.\n",str);
-	exit(1); }
-
-sys_nodes=filelength(nodefile)/sizeof(node_t);
-if(!sys_nodes) {
-	printf("%s reflects 0 nodes!\n",str);
-	exit(1); }
-
-for(i=1;i<argc;i++) {
-	if(isdigit(argv[i][0]))
-		node_num=atoi(argv[i]);
-	else {
-		node_num=onoff=value=0;
-		if(!stricmp(argv[i],"/DEBUG"))
-			debug=1;
-		else if(!stricmp(argv[i],"LOCK"))
-			mode=MODE_LOCK;
-		else if(!stricmp(argv[i],"ANON"))
-			mode=MODE_ANON;
-		else if(!stricmp(argv[i],"INTR"))
-			mode=MODE_INTR;
-		else if(!stricmp(argv[i],"DOWN"))
-			mode=MODE_DOWN;
-		else if(!stricmp(argv[i],"RERUN"))
-			mode=MODE_RRUN;
-		else if(!stricmp(argv[i],"EVENT"))
-			mode=MODE_EVENT;
-		else if(!stricmp(argv[i],"NOPAGE"))
-			mode=MODE_NOPAGE;
-		else if(!stricmp(argv[i],"NOALERTS"))
-			mode=MODE_NOALERTS;
-		else if(!stricmp(argv[i],"ON"))
-			onoff=1;
-		else if(!stricmp(argv[i],"OFF"))
-			onoff=2;
-		else if(!strnicmp(argv[i],"STATUS=",7)) {
-			mode=MODE_STATUS;
-			value=atoi(argv[i]+7); }
-		else if(!strnicmp(argv[i],"ERRORS=",7)) {
-			mode=MODE_ERRORS;
-			value=atoi(argv[i]+7); }
-		else if(!strnicmp(argv[i],"USERON=",7)) {
-			mode=MODE_USERON;
-			value=atoi(argv[i]+7); }
-		else if(!strnicmp(argv[i],"ACTION=",7)) {
-			mode=MODE_ACTION;
-            value=atoi(argv[i]+7); }
-		else if(!strnicmp(argv[i],"CONN=",5)) {
-			mode=MODE_CONN;
-			value=atoi(argv[i]+5); }
-		else if(!strnicmp(argv[i],"MISC=",5)) {
-			mode=MODE_MISC;
-			value=atoi(argv[i]+5); }
-		else if(!strnicmp(argv[i],"AUX=",4)) {
-			mode=MODE_AUX;
-			value=atoi(argv[i]+4); }
-		else if(!strnicmp(argv[i],"EXTAUX=",7)) {
-			mode=MODE_EXTAUX;
-			value=atoi(argv[i]+7); }
-		}
-	if((mode && node_num) || i+1==argc)
-		for(j=1;j<=sys_nodes;j++)
-			if(!node_num || j==node_num) {
-				getnodedat(j,&node,1);
-				misc=0;
-				switch(mode) {
-					case MODE_ANON:
-						misc=NODE_ANON;
-						break;
-					case MODE_LOCK:
-						misc=NODE_LOCK;
-						break;
-					case MODE_INTR:
-						misc=NODE_INTR;
-                        break;
-					case MODE_DOWN:
-						misc=NODE_DOWN;
-                        break;
-					case MODE_RRUN:
-						misc=NODE_RRUN;
-						break;
-					case MODE_EVENT:
-						misc=NODE_EVENT;
-						break;
-					case MODE_NOPAGE:
-						misc=NODE_POFF;
-						break;
-					case MODE_NOALERTS:
-						misc=NODE_AOFF;
-						break;
-					case MODE_STATUS:
-						node.status=value;
-						break;
-					case MODE_ERRORS:
-						node.errors=value;
-						break;
-					case MODE_ACTION:
-						node.action=value;
-						break;
-					case MODE_USERON:
-						node.useron=value;
-						break;
-					case MODE_MISC:
-						node.misc=value;
-						break;
-					case MODE_CONN:
-						node.connection=value;
-						break;
-					case MODE_AUX:
-						node.aux=value;
-						break;
-					case MODE_EXTAUX:
-						node.extaux=value;
-						break; }
-				if(misc) {
-					if(onoff==0)
-						node.misc^=misc;
-					else if(onoff==1)
-						node.misc|=misc;
-					else if(onoff==2)
-						node.misc&=~misc; }
-				putnodedat(j,node);
-				printnodedat(j,node);
-				if(debug) {
-					printf("status=%u\n",node.status);
-					printf("errors=%u\n",node.errors);
-					printf("action=%d\n",node.action);
-					printf("useron=%u\n",node.useron);
-					printf("conn=%u\n",node.connection);
-					printf("misc=%u\n",node.misc);
-					printf("aux=%u\n",node.aux);
-					printf("extaux=%lu\n",node.extaux); } } }
-
-close(nodefile);
-return(0);
-}
diff --git a/src/sbbs2/nodedefs.h b/src/sbbs2/nodedefs.h
deleted file mode 100644
index c661445e3e..0000000000
--- a/src/sbbs2/nodedefs.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/* NODEDEFS.H */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/************************************************************/
-/* Constants, macros, and typedefs for use ONLY with SBBS	*/
-/************************************************************/
-
-#ifndef _NODEDEFS_H
-#define _NODEDEFS_H
-
-#include "gen_defs.h"
-
-enum {                              /* Node Status */
-     NODE_WFC                       /* Waiting for Call */
-    ,NODE_LOGON                     /* at logon prompt */
-    ,NODE_NEWUSER                   /* New user applying */
-    ,NODE_INUSE                     /* In Use */
-    ,NODE_QUIET                     /* In Use - quiet mode */
-    ,NODE_OFFLINE                   /* Offline */
-    ,NODE_NETTING                   /* Networking */
-    ,NODE_EVENT_WAITING             /* Waiting for all nodes to be inactive */
-    ,NODE_EVENT_RUNNING             /* Running an external event */
-    ,NODE_EVENT_LIMBO               /* Allowing another node to run an event */
-    };
-
-                                    /* Bit values for node.misc */
-#define NODE_ANON   (1<<0)          /* Anonymous User */
-#define NODE_LOCK   (1<<1)          /* Locked for sysops only */
-#define NODE_INTR   (1<<2)          /* Interrupted - hang up */
-#define NODE_MSGW   (1<<3)          /* Message is waiting (old way) */
-#define NODE_POFF   (1<<4)          /* Page disabled */
-#define NODE_AOFF   (1<<5)          /* Activity Alert disabled */
-#define NODE_UDAT   (1<<6)          /* User data has been updated */
-#define NODE_RRUN   (1<<7)          /* Re-run this node when log off */
-#define NODE_EVENT  (1<<8)          /* Must run node event after log off */
-#define NODE_DOWN   (1<<9)          /* Down this node after logoff */
-#define NODE_RPCHT  (1<<10)         /* Reset private chat */
-#define NODE_NMSG   (1<<11)         /* Node message waiting (new way) */
-#define NODE_EXT    (1<<12)         /* Extended info on node action */
-
-enum {                              /* Node Action */
-     NODE_MAIN                      /* Main Prompt */
-    ,NODE_RMSG                      /* Reading Messages */
-    ,NODE_RMAL                      /* Reading Mail */
-    ,NODE_SMAL                      /* Sending Mail */
-    ,NODE_RTXT                      /* Reading G-Files */
-    ,NODE_RSML                      /* Reading Sent Mail */
-    ,NODE_PMSG                      /* Posting Message */
-    ,NODE_AMSG                      /* Auto-message */
-    ,NODE_XTRN                      /* Running External Program */
-    ,NODE_DFLT                      /* Main Defaults Section */
-    ,NODE_XFER                      /* Transfer Prompt */
-    ,NODE_DLNG                      /* Downloading File */
-    ,NODE_ULNG                      /* Uploading File */
-    ,NODE_BXFR                      /* Bidirectional Transfer */
-    ,NODE_LFIL                      /* Listing Files */
-    ,NODE_LOGN                      /* Logging on */
-    ,NODE_LCHT                      /* In Local Chat with Sysop */
-    ,NODE_MCHT                      /* In Multi-Chat with Other Nodes */
-    ,NODE_GCHT                      /* In Local Chat with Guru */
-    ,NODE_CHAT                      /* In Chat Section */
-    ,NODE_SYSP                      /* Sysop Activity */
-    ,NODE_TQWK                      /* Transferring QWK packet */
-    ,NODE_PCHT                      /* In Private Chat */
-    ,NODE_PAGE                      /* Paging another node for Private Chat */
-    ,NODE_RFSD                      /* Retrieving file from seq dev (aux=dev)*/
-    };
-
-typedef struct {						/* Node information kept in NODE.DAB */
-    uchar   status,                     /* Current Status of Node */
-            errors,                     /* Number of Critical Errors */
-            action;                     /* Action User is doing on Node */
-    ushort  useron,                     /* User on Node */
-            connection,                 /* Connection rate of Node */
-            misc,                       /* Miscellaneous bits for node */
-            aux;                        /* Auxillary word for node */
-    ulong   extaux;                     /* Extended aux dword for node */
-            } node_t;
-
-#endif /* Don't add anything after this line */
diff --git a/src/sbbs2/pack_qwk.c b/src/sbbs2/pack_qwk.c
deleted file mode 100644
index c5ebb17c91..0000000000
--- a/src/sbbs2/pack_qwk.c
+++ /dev/null
@@ -1,527 +0,0 @@
-#line 1 "PACK_QWK.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-#include "qwk.h"
-#include "post.h"
-#include "etext.h"
-
-/****************************************************************************/
-/* Creates QWK packet, returning 1 if successful, 0 if not. 				*/
-/****************************************************************************/
-char pack_qwk(char *packet, ulong *msgcnt, int prepack)
-{
-	uchar	str[256],tmp2[256],ch,*p;
-	uchar	HUGE16 *qwkbuf;
-	int 	file,mode;
-	uint	i,j,k,n,conf;
-	long	l,size,msgndx;
-	ulong	totalcdt,totalsize,totaltime,lastmsg
-			,mailmsgs=0,files,submsgs,msgs,posts,netfiles=0,preqwk=0;
-	float	f;	/* Sparky is responsible */
-	time_t	start;
-	node_t	node;
-	mail_t	*mail;
-	post_t	HUGE16 *post;
-	FILE	*stream,*qwk,*personal,*ndx;
-    struct  ffblk ff;
-	smbmsg_t msg;
-
-delfiles(temp_dir,"*.*");
-sprintf(str,"%sFILE\\%04u.QWK",data_dir,useron.number);
-if(fexist(str)) {
-	for(k=0;k<total_fextrs;k++)
-		if(!stricmp(fextr[k]->ext,useron.tmpext)
-			&& chk_ar(fextr[k]->ar,useron))
-			break;
-	if(k>=total_fextrs)
-		k=0;
-	i=external(cmdstr(fextr[k]->cmd,str,"*.*",NULL),EX_OUTL|EX_OUTR);
-	if(!i)
-        preqwk=1; }
-
-if(useron.rest&FLAG('Q') && useron.qwk&QWK_RETCTLA)
-	useron.qwk|=(QWK_NOINDEX|QWK_NOCTRL|QWK_VIA|QWK_TZ);
-
-if(useron.qwk&QWK_EXPCTLA)
-	mode=A_EXPAND;
-else if(useron.qwk&QWK_RETCTLA)
-	mode=A_LEAVE;
-else mode=0;
-if(useron.qwk&QWK_TZ)
-	mode|=TZ;
-if(useron.qwk&QWK_VIA)
-	mode|=VIA;
-(*msgcnt)=0L;
-if(!prepack && !(useron.qwk&QWK_NOCTRL)) {
-	/***************************/
-	/* Create CONTROL.DAT file */
-	/***************************/
-	sprintf(str,"%sCONTROL.DAT",temp_dir);
-	if((stream=fnopen(&file,str,O_WRONLY|O_CREAT|O_TRUNC))==NULL) {
-		errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
-		return(0); }
-
-	now=time(NULL);
-	unixtodos(now,&date,&curtime);
-
-	fprintf(stream,"%s\r\n%s\r\n%s\r\n%s, Sysop\r\n0000,%s\r\n"
-		"%02u-%02u-%u,%02u:%02u:%02u\r\n"
-		,sys_name
-		,sys_location
-		,node_phone
-		,sys_op
-		,sys_id
-		,date.da_mon,date.da_day,date.da_year
-		,curtime.ti_hour,curtime.ti_min,curtime.ti_sec);
-	k=0;
-	for(i=0;i<usrgrps;i++)
-		for(j=0;j<usrsubs[i];j++)
-			k++;	/* k is how many subs */
-	fprintf(stream,"%s\r\n\r\n0\r\n0\r\n%u\r\n",useron.alias,k);
-	fprintf(stream,"0\r\nE-mail\r\n");   /* first conference is e-mail */
-	for(i=0;i<usrgrps;i++)
-		for(j=0;j<usrsubs[i];j++)
-			fprintf(stream,"%u\r\n%s\r\n"
-				,sub[usrsub[i][j]]->qwkconf ? sub[usrsub[i][j]]->qwkconf
-				: ((i+1)*1000)+j+1,sub[usrsub[i][j]]->qwkname);
-	fprintf(stream,"HELLO\r\nBBSNEWS\r\nGOODBYE\r\n");
-	fclose(stream);
-	/***********************/
-	/* Create DOOR.ID File */
-	/***********************/
-	sprintf(str,"%sDOOR.ID",temp_dir);
-	if((stream=fnopen(&file,str,O_WRONLY|O_CREAT|O_TRUNC))==NULL) {
-		errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
-		return(0); }
-	p="CONTROLTYPE = ";
-	fprintf(stream,"DOOR = %s\r\nVERSION = %s\r\n"
-		"SYSTEM = %s v%s\r\n"
-		"CONTROLNAME = SBBS\r\n"
-		"%sADD\r\n"
-		"%sDROP\r\n"
-		"%sYOURS\r\n"
-		"%sRESET\r\n"
-		"%sRESETALL\r\n"
-		"%sFILES\r\n"
-		"%sATTACH\r\n"
-		"%sOWN\r\n"
-		"%sMAIL\r\n"
-		"%sDELMAIL\r\n"
-		"%sCTRL-A\r\n"
-		"%sFREQ\r\n"
-		"%sNDX\r\n"
-		"%sTZ\r\n"
-		"%sVIA\r\n"
-		"%sCONTROL\r\n"
-		"MIXEDCASE = YES\r\n"
-		,decrypt(Synchronet,0)
-		,VERSION
-		,decrypt(Synchronet,0)
-		,VERSION
-		,p,p,p,p
-		,p,p,p,p
-		,p,p,p,p
-		,p,p,p,p
-		);
-	fclose(stream);
-	if(useron.rest&FLAG('Q')) {
-		/***********************/
-		/* Create NETFLAGS.DAT */
-		/***********************/
-		sprintf(str,"%sNETFLAGS.DAT",temp_dir);
-		if((stream=fnopen(&file,str,O_WRONLY|O_CREAT))==NULL) {
-			errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT);
-			return(0); }
-		ch=1;						/* Net enabled */
-		if(usrgrps)
-			for(i=0;i<(usrgrps*1000)+usrsubs[usrgrps-1];i++)
-				fputc(ch,stream);
-		fclose(stream); }
-	} /* !prepack */
-
-/****************************************************/
-/* Create MESSAGES.DAT, write header and leave open */
-/****************************************************/
-sprintf(str,"%sMESSAGES.DAT",temp_dir);
-if((qwk=fnopen(&file,str,O_CREAT|O_WRONLY|O_TRUNC))==NULL) {
-	errormsg(WHERE,ERR_OPEN,str,O_CREAT|O_WRONLY|O_TRUNC);
-	return(0); }
-l=filelength(file);
-if(!l) {
-	fprintf(qwk,"%-128s",decrypt(QWKheader,0));
-	msgndx=1; }
-else
-	msgndx=l/128L;
-fseek(qwk,0,SEEK_END);
-sprintf(str,"%sNEWFILES.DAT",temp_dir);
-remove(str);
-if(!(useron.rest&FLAG('T')) && useron.qwk&QWK_FILES)
-	files=create_filelist("NEWFILES.DAT",FL_ULTIME);
-else
-	files=0;
-
-start=time(NULL);
-
-if(useron.rest&FLAG('Q'))
-	useron.qwk|=(QWK_EMAIL|QWK_ALLMAIL|QWK_DELMAIL);
-
-if(!(useron.qwk&QWK_NOINDEX)) {
-    sprintf(str,"%sPERSONAL.NDX",temp_dir);
-    if((personal=fnopen(&file,str,O_CREAT|O_WRONLY|O_APPEND))==NULL) {
-        fclose(qwk);
-        errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_APPEND);
-        return(0); }
-    fseek(personal,0L,SEEK_END); }
-else
-    personal=NULL;
-
-if(useron.qwk&(QWK_EMAIL|QWK_ALLMAIL) && !prepack) {
-	sprintf(smb.file,"%sMAIL",data_dir);
-	smb.retry_time=smb_retry_time;
-	if((i=smb_open(&smb))!=0) {
-        fclose(qwk);
-		if(personal)
-			fclose(personal);
-		errormsg(WHERE,ERR_OPEN,smb.file,i);
-		return(0); }
-
-	/***********************/
-	/* Pack E-mail, if any */
-	/***********************/
-	qwkmail_time=time(NULL);
-	mailmsgs=loadmail(&mail,useron.number,0,useron.qwk&QWK_ALLMAIL ? LM_QWK
-		: LM_UNREAD|LM_QWK);
-	if(mailmsgs && !(sys_status&SS_ABORT)) {
-		bputs(text[QWKPackingEmail]);
-		if(!(useron.qwk&QWK_NOINDEX)) {
-			sprintf(str,"%s000.NDX",temp_dir);
-			if((ndx=fnopen(&file,str,O_CREAT|O_WRONLY|O_APPEND))==NULL) {
-				fclose(qwk);
-				if(personal)
-					fclose(personal);
-				smb_close(&smb);
-				errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_APPEND);
-				FREE(mail);
-				return(0); }
-			fseek(ndx,0L,SEEK_END); }
-		else
-			ndx=NULL;
-
-		if(useron.rest&FLAG('Q'))
-			mode|=TO_QNET;
-		else
-			mode&=~TO_QNET;
-
-		for(l=0;l<mailmsgs;l++) {
-			bprintf("\b\b\b\b\b\b\b\b\b\b\b\b%4lu of %-4lu"
-				,l+1,mailmsgs);
-
-			msg.idx.offset=mail[l].offset;
-			if(!loadmsg(&msg,mail[l].number))
-				continue;
-
-			if(msg.hdr.auxattr&MSG_FILEATTACH && useron.qwk&QWK_ATTACH) {
-				sprintf(str,"%sFILE\\%04u.IN\\%s"
-					,data_dir,useron.number,msg.subj);
-				sprintf(tmp,"%s%s",temp_dir,msg.subj);
-				if(fexist(str) && !fexist(tmp))
-					mv(str,tmp,1); }
-
-			size=msgtoqwk(msg,qwk,mode,INVALID_SUB,0);
-			smb_unlockmsghdr(&smb,&msg);
-			smb_freemsgmem(&msg);
-			if(ndx) {
-				msgndx++;
-				f=ltomsbin(msgndx); 	/* Record number */
-				ch=0;					/* Sub number, not used */
-				if(personal) {
-					fwrite(&f,4,1,personal);
-					fwrite(&ch,1,1,personal); }
-				fwrite(&f,4,1,ndx);
-				fwrite(&ch,1,1,ndx);
-				msgndx+=size/128L; } }
-		bprintf(text[QWKPackedEmail],mailmsgs);
-		if(ndx)
-			fclose(ndx); }
-	smb_close(&smb);					/* Close the e-mail */
-	if(mailmsgs)
-		FREE(mail);
-	}
-
-/*********************/
-/* Pack new messages */
-/*********************/
-for(i=0;i<usrgrps;i++) {
-	for(j=0;j<usrsubs[i] && !msgabort();j++)
-		if(sub[usrsub[i][j]]->misc&SUB_NSCAN
-			|| (!(useron.rest&FLAG('Q'))
-			&& sub[usrsub[i][j]]->misc&SUB_FORCED)) {
-			if(!chk_ar(sub[usrsub[i][j]]->read_ar,useron))
-				continue;
-			lncntr=0;						/* defeat pause */
-			if(useron.rest&FLAG('Q') && !(sub[usrsub[i][j]]->misc&SUB_QNET))
-				continue;	/* QWK Net Node and not QWK networked, so skip */
-
-			msgs=getlastmsg(usrsub[i][j],&lastmsg,0);
-			if(!msgs || lastmsg<=sub[usrsub[i][j]]->ptr) { /* no msgs */
-				if(sub[usrsub[i][j]]->ptr>lastmsg)	{ /* corrupted ptr */
-					sub[usrsub[i][j]]->ptr=lastmsg; /* so fix automatically */
-					sub[usrsub[i][j]]->last=lastmsg; }
-				bprintf(text[NScanStatusFmt]
-					,grp[sub[usrsub[i][j]]->grp]->sname
-					,sub[usrsub[i][j]]->lname,0L,msgs);
-				continue; }
-
-			sprintf(smb.file,"%s%s"
-				,sub[usrsub[i][j]]->data_dir,sub[usrsub[i][j]]->code);
-			smb.retry_time=smb_retry_time;
-			if((k=smb_open(&smb))!=0) {
-				errormsg(WHERE,ERR_OPEN,smb.file,k);
-				continue; }
-
-			k=0;
-			if(useron.qwk&QWK_BYSELF)
-				k|=LP_BYSELF;
-			if(!(sub[usrsub[i][j]]->misc&SUB_YSCAN))
-				k|=LP_OTHERS;
-			post=loadposts(&posts,usrsub[i][j],sub[usrsub[i][j]]->ptr,k);
-
-			bprintf(text[NScanStatusFmt]
-				,grp[sub[usrsub[i][j]]->grp]->sname
-				,sub[usrsub[i][j]]->lname,posts,msgs);
-			if(!posts)	{ /* no new messages */
-				smb_close(&smb);
-				continue; }
-			bputs(text[QWKPackingSubboard]);	
-			submsgs=0;
-			conf=sub[usrsub[i][j]]->qwkconf;
-			if(!conf)
-				conf=((i+1)*1000)+j+1;
-
-			if(!(useron.qwk&QWK_NOINDEX)) {
-				sprintf(str,"%s%u.NDX",temp_dir,conf);
-                if((ndx=fnopen(&file,str,O_CREAT|O_WRONLY|O_APPEND))==NULL) {
-					fclose(qwk);
-					if(personal)
-						fclose(personal);
-					smb_close(&smb);
-					errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_APPEND);
-					LFREE(post);
-					return(0); }
-				fseek(ndx,0L,SEEK_END); }
-			else
-				ndx=NULL;
-
-			for(l=0;l<posts && !msgabort();l++) {
-				bprintf("\b\b\b\b\b%-5lu",l+1);
-
-				sub[usrsub[i][j]]->ptr=post[l].number;	/* set ptr */
-				sub[usrsub[i][j]]->last=post[l].number; /* set last read */
-
-				msg.idx.offset=post[l].offset;
-				if(!loadmsg(&msg,post[l].number))
-					continue;
-
-				if(useron.rest&FLAG('Q')) {
-					if(msg.from_net.type && msg.from_net.type!=NET_QWK &&
-						!(sub[usrsub[i][j]]->misc&SUB_GATE)) { /* From other */
-						smb_freemsgmem(&msg);			 /* net, don't gate */
-						smb_unlockmsghdr(&smb,&msg);
-						continue; }
-					mode|=(TO_QNET|TAGLINE);
-					if(msg.from_net.type==NET_QWK) {
-						mode&=~TAGLINE;
-						if(route_circ(msg.from_net.addr,useron.alias)
-							|| !strnicmp(msg.subj,"NE:",3)) {
-							smb_freemsgmem(&msg);
-							smb_unlockmsghdr(&smb,&msg);
-							continue; } } }
-				else
-					mode&=~(TAGLINE|TO_QNET);
-
-				size=msgtoqwk(msg,qwk,mode,usrsub[i][j],conf);
-				smb_unlockmsghdr(&smb,&msg);
-
-				if(ndx) {
-					msgndx++;
-					f=ltomsbin(msgndx); 	/* Record number */
-					ch=0;					/* Sub number, not used */
-					if(personal
-						&& (!stricmp(msg.to,useron.alias)
-							|| !stricmp(msg.to,useron.name))) {
-						fwrite(&f,4,1,personal);
-						fwrite(&ch,1,1,personal); }
-					fwrite(&f,4,1,ndx);
-					fwrite(&ch,1,1,ndx);
-					msgndx+=size/128L; }
-
-				smb_freemsgmem(&msg);
-				(*msgcnt)++;
-				submsgs++;
-				if(max_qwkmsgs
-					&& !(useron.rest&FLAG('Q')) && (*msgcnt)>=max_qwkmsgs) {
-					bputs(text[QWKmsgLimitReached]);
-					break; } }
-			if(!(sys_status&SS_ABORT))
-				bprintf(text[QWKPackedSubboard],submsgs,(*msgcnt));
-			if(ndx) {
-				fclose(ndx);
-				sprintf(str,"%s%u.NDX",temp_dir,conf);
-				if(!flength(str))
-					remove(str); }
-			smb_close(&smb);
-			LFREE(post);
-			if(l<posts)
-				break; }
-	if(j<usrsubs[i]) /* if sub aborted, abort all */
-		break; }
-
-if((*msgcnt)+mailmsgs && time(NULL)-start)
-	bprintf("\r\n\r\n\1n\1hPacked %lu messages in %lu seconds "
-		"(%lu messages/second)."
-		,(*msgcnt)+mailmsgs,time(NULL)-start
-		,((*msgcnt)+mailmsgs)/(time(NULL)-start));
-
-fclose(qwk);			/* close MESSAGE.DAT */
-if(personal) {
-	fclose(personal);		 /* close PERSONAL.NDX */
-	sprintf(str,"%sPERSONAL.NDX",temp_dir);
-	if(!flength(str))
-		remove(str); }
-CRLF;
-
-if(!prepack && (sys_status&SS_ABORT || !online))
-    return(0);
-
-if(!prepack && useron.rest&FLAG('Q')) { /* If QWK Net node, check for files */
-    sprintf(str,"%sQNET\\%s.OUT\\*.*",data_dir,useron.alias);
-    i=findfirst(str,&ff,0);
-    while(!i) {                 /* Move files into temp dir */
-        sprintf(str,"%sQNET\\%s.OUT\\%s",data_dir,useron.alias,ff.ff_name);
-		strupr(str);
-        sprintf(tmp2,"%s%s",temp_dir,ff.ff_name);
-		lncntr=0;	/* Default pause */
-		bprintf(text[RetrievingFile],str);
-		if(!mv(str,tmp2,1))
-			netfiles++;
-		i=findnext(&ff); }
-	if(netfiles)
-		CRLF; }
-
-if(batdn_total) {
-	for(i=0,totalcdt=0;i<batdn_total;i++)
-			totalcdt+=batdn_cdt[i];
-	if(!(useron.exempt&FLAG('D'))
-		&& totalcdt>useron.cdt+useron.freecdt) {
-		bprintf(text[YouOnlyHaveNCredits]
-			,ultoac(useron.cdt+useron.freecdt,tmp)); }
-	else {
-		for(i=0,totalsize=totaltime=0;i<batdn_total;i++) {
-			totalsize+=batdn_size[i];
-			if(!(dir[batdn_dir[i]]->misc&DIR_TFREE) && cur_cps)
-				totaltime+=batdn_size[i]/(ulong)cur_cps; }
-		if(!(useron.exempt&FLAG('T')) && !SYSOP && totaltime>timeleft)
-			bputs(text[NotEnoughTimeToDl]);
-		else {
-			for(i=0;i<batdn_total;i++) {
-				lncntr=0;
-				unpadfname(batdn_name[i],tmp);
-				sprintf(tmp2,"%s%s",temp_dir,tmp);
-				if(!fexist(tmp2)) {
-					seqwait(dir[batdn_dir[i]]->seqdev);
-					bprintf(text[RetrievingFile],tmp);
-					sprintf(str,"%s%s"
-						,batdn_alt[i]>0 && batdn_alt[i]<=altpaths
-						? altpath[batdn_alt[i]-1]
-						: dir[batdn_dir[i]]->path
-						,tmp);
-					mv(str,tmp2,1); /* copy the file to temp dir */
-					getnodedat(node_num,&thisnode,1);
-					thisnode.aux=0xfe;
-					putnodedat(node_num,thisnode);
-					CRLF; } } } } }
-
-if(!(*msgcnt) && !mailmsgs && !files && !netfiles && !batdn_total
-	&& (prepack || !preqwk)) {
-	bputs(text[QWKNoNewMessages]);
-	return(0); }
-
-if(!prepack && !(useron.rest&FLAG('Q'))) {      /* Don't include in network */
-	/***********************/					/* packets */
-	/* Copy QWK Text files */
-	/***********************/
-	sprintf(str,"%sQWK\\HELLO",text_dir);
-	if(fexist(str)) {
-		sprintf(tmp2,"%sHELLO",temp_dir);
-		mv(str,tmp2,1); }
-	sprintf(str,"%sQWK\\BBSNEWS",text_dir);
-	if(fexist(str)) {
-		sprintf(tmp2,"%sBBSNEWS",temp_dir);
-		mv(str,tmp2,1); }
-	sprintf(str,"%sQWK\\GOODBYE",text_dir);
-	if(fexist(str)) {
-		sprintf(tmp2,"%sGOODBYE",temp_dir);
-		mv(str,tmp2,1); }
-	sprintf(str,"%sQWK\\BLT-*.*",text_dir);
-	i=findfirst(str,&ff,0);
-	while(!i) { 				/* Copy BLT-*.* files */
-		padfname(ff.ff_name,str);
-		if(isdigit(str[4]) && isdigit(str[9])) {
-			sprintf(str,"%sQWK\\%s",text_dir,ff.ff_name);
-			sprintf(tmp2,"%s%s",temp_dir,ff.ff_name);
-			mv(str,tmp2,1); }
-		i=findnext(&ff); } }
-
-if(prepack) {
-	for(i=1;i<=sys_nodes;i++) {
-		getnodedat(i,&node,0);
-		if((node.status==NODE_INUSE || node.status==NODE_QUIET
-			|| node.status==NODE_LOGON) && node.useron==useron.number)
-			break; }
-	if(i<=sys_nodes)	/* Don't pre-pack with user online */
-		return(0); }
-
-/*******************/
-/* Compress Packet */
-/*******************/
-sprintf(tmp2,"%s*.*",temp_dir);
-i=external(cmdstr(temp_cmd(),packet,tmp2,NULL),EX_OUTL|EX_OUTR);
-if(!fexist(packet)) {
-	bputs(text[QWKCompressionFailed]);
-	if(i)
-		errormsg(WHERE,ERR_EXEC,cmdstr(temp_cmd(),packet,tmp2,NULL),i);
-	else
-		errorlog("Couldn't compress QWK packet");
-	return(0); }
-
-if(prepack) 		/* Early return if pre-packing */
-	return(1);
-
-l=flength(packet);
-sprintf(str,"%s.QWK",sys_id);
-bprintf(text[FiFilename],str);
-bprintf(text[FiFileSize],ultoac(l,tmp));
-if(l>0L && cur_cps)
-	i=l/(ulong)cur_cps;
-else
-	i=0;
-bprintf(text[FiTransferTime],sectostr(i,tmp));
-CRLF;
-if(!(useron.exempt&FLAG('T')) && i>timeleft) {
-	bputs(text[NotEnoughTimeToDl]);
-	return(0); }
-
-if(useron.rest&FLAG('Q')) {
-	sprintf(str,"%s.QWK",sys_id);
-	sprintf(tmp,"%s*.*",temp_dir);
-	i=findfirst(tmp,&ff,0);
-	while(!i) {
-		if(stricmp(str,ff.ff_name)) {
-			sprintf(tmp,"%s%s",temp_dir,ff.ff_name);
-			remove(tmp); }
-		i=findnext(&ff); } }
-
-return(1);
-}
diff --git a/src/sbbs2/pack_rep.c b/src/sbbs2/pack_rep.c
deleted file mode 100644
index 6a9cdaaf97..0000000000
--- a/src/sbbs2/pack_rep.c
+++ /dev/null
@@ -1,245 +0,0 @@
-#line 1 "PACK_REP.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-#include "post.h"
-#include "qwk.h"
-
-/****************************************************************************/
-/* Creates an REP packet for upload to QWK hub 'hubnum'.                    */
-/* Returns 1 if successful, 0 if not.										*/
-/****************************************************************************/
-char pack_rep(uint hubnum)
-{
-	uchar	str[256],tmp2[256],ch,*p;
-	uchar	HUGE16 *qwkbuf;
-	int 	file,mode;
-	uint	i,j,k,n;
-	long	l,size,msgcnt,submsgs,mailmsgs,packedmail,netfiles=0,deleted;
-	ulong	last,ptr,posts,msgs;
-	post_t	HUGE16 *post;
-	mail_t	*mail;
-	struct	ffblk ff;
-	FILE	*rep;
-	smbmsg_t msg;
-
-msgcnt=0L;
-delfiles(temp_dir,"*.*");
-sprintf(str,"%s%s.REP",data_dir,qhub[hubnum]->id);
-if(fexist(str))
-	external(cmdstr(qhub[hubnum]->unpack,str,"*.*",NULL),EX_OUTL);
-/*************************************************/
-/* Create SYSID.MSG, write header and leave open */
-/*************************************************/
-sprintf(str,"%s%s.MSG",temp_dir,qhub[hubnum]->id);
-if((rep=fnopen(&file,str,O_CREAT|O_WRONLY))==NULL) {
-	errormsg(WHERE,ERR_OPEN,str,O_CREAT|O_WRONLY);
-	return(0); }
-if(!filelength(file)) { 						/* New REP packet */
-	sprintf(str,"%-128s",qhub[hubnum]->id);     /* So write header */
-	fwrite(str,128,1,rep); }
-fseek(rep,0L,SEEK_END);
-/*********************/
-/* Pack new messages */
-/*********************/
-console|=CON_L_ECHO;
-
-sprintf(smb.file,"%sMAIL",data_dir);
-smb.retry_time=smb_retry_time;
-if((i=smb_open(&smb))!=0) {
-	fclose(rep);
-	errormsg(WHERE,ERR_OPEN,smb.file,i);
-	return(0); }
-
-/***********************/
-/* Pack E-mail, if any */
-/***********************/
-qwkmail_time=time(NULL);
-mailmsgs=loadmail(&mail,0,MAIL_YOUR,LM_QWK);
-packedmail=0;
-if(mailmsgs) {
-	bputs(text[QWKPackingEmail]);
-	for(l=0;l<mailmsgs;l++) {
-		bprintf("\b\b\b\b\b%-5lu",l+1);
-
-		msg.idx.offset=mail[l].offset;
-		if(!loadmsg(&msg,mail[l].number))
-			continue;
-
-		sprintf(str,"%s/",qhub[hubnum]->id);
-		if(msg.to_net.type!=NET_QWK
-			|| (strcmp(msg.to_net.addr,qhub[hubnum]->id)
-			&& strncmp(msg.to_net.addr,str,strlen(str)))) {
-			smb_unlockmsghdr(&smb,&msg);
-			smb_freemsgmem(&msg);
-			continue; }
-
-		msgtoqwk(msg,rep,TO_QNET|REP|A_LEAVE,INVALID_SUB,0);
-		packedmail++;
-		smb_unlockmsghdr(&smb,&msg);
-		smb_freemsgmem(&msg); }
-	bprintf(text[QWKPackedEmail],packedmail); }
-smb_close(&smb);					/* Close the e-mail */
-if(mailmsgs)
-	FREE(mail);
-
-useron.number=1;
-getuserdat(&useron);
-for(i=0;i<qhub[hubnum]->subs;i++) {
-	j=qhub[hubnum]->sub[i]; 			/* j now equals the real sub num */
-	msgs=getlastmsg(j,&last,0);
-	lncntr=0;						/* defeat pause */
-	if(!msgs || last<=sub[j]->ptr) {
-		if(sub[j]->ptr>last) {
-			sub[j]->ptr=last;
-			sub[j]->last=last; }
-		bprintf(text[NScanStatusFmt]
-			,grp[sub[j]->grp]->sname
-			,sub[j]->lname,0L,msgs);
-		continue; }
-
-	sprintf(smb.file,"%s%s"
-		,sub[j]->data_dir,sub[j]->code);
-	smb.retry_time=smb_retry_time;
-	if((k=smb_open(&smb))!=0) {
-		errormsg(WHERE,ERR_OPEN,smb.file,k);
-		continue; }
-
-	post=loadposts(&posts,j,sub[j]->ptr,LP_BYSELF|LP_OTHERS|LP_PRIVATE|LP_REP);
-	bprintf(text[NScanStatusFmt]
-		,grp[sub[j]->grp]->sname
-		,sub[j]->lname,posts,msgs);
-	if(!posts)	{ /* no new messages */
-		smb_close(&smb);
-		continue; }
-
-    sub[j]->ptr=last;                   /* set pointer */
-	bputs(text[QWKPackingSubboard]);	/* ptr to last msg	*/
-	submsgs=0;
-	for(l=0;l<posts;l++) {
-		bprintf("\b\b\b\b\b%-5lu",l+1);
-
-		msg.idx.offset=post[l].offset;
-		if(!loadmsg(&msg,post[l].number))
-			continue;
-
-		if(msg.from_net.type && msg.from_net.type!=NET_QWK &&
-			!(sub[j]->misc&SUB_GATE)) {
-			smb_freemsgmem(&msg);
-			smb_unlockmsghdr(&smb,&msg);
-			continue; }
-
-		if(!strncmpi(msg.subj,"NE:",3) || (msg.from_net.type==NET_QWK &&
-			route_circ(msg.from_net.addr,qhub[hubnum]->id))) {
-			smb_freemsgmem(&msg);
-			smb_unlockmsghdr(&smb,&msg);
-			continue; }
-
-		mode=qhub[hubnum]->mode[i]|TO_QNET|REP;
-		if(mode&A_LEAVE) mode|=(VIA|TZ);
-		if(msg.from_net.type!=NET_QWK)
-			mode|=TAGLINE;
-
-		msgtoqwk(msg,rep,mode,j,qhub[hubnum]->conf[i]);
-
-		smb_freemsgmem(&msg);
-		smb_unlockmsghdr(&smb,&msg);
-		msgcnt++;
-		submsgs++; }
-	bprintf(text[QWKPackedSubboard],submsgs,msgcnt);
-	LFREE(post);
-	smb_close(&smb); }
-
-fclose(rep);			/* close MESSAGE.DAT */
-CRLF;
-						/* Look for extra files to send out */
-sprintf(str,"%sQNET\\%s.OUT\\*.*",data_dir,qhub[hubnum]->id);
-i=findfirst(str,&ff,0);
-while(!i) {
-    sprintf(str,"%sQNET\\%s.OUT\\%s",data_dir,qhub[hubnum]->id,ff.ff_name);
-    sprintf(tmp2,"%s%s",temp_dir,ff.ff_name);
-	bprintf(text[RetrievingFile],str);
-	if(!mv(str,tmp2,1))
-        netfiles++;
-    i=findnext(&ff); }
-if(netfiles)
-	CRLF;
-
-if(!msgcnt && !netfiles && !packedmail) {
-	bputs(text[QWKNoNewMessages]);
-	return(0); }
-
-/*******************/
-/* Compress Packet */
-/*******************/
-sprintf(str,"%s%s.REP",data_dir,qhub[hubnum]->id);
-sprintf(tmp2,"%s*.*",temp_dir);
-i=external(cmdstr(qhub[hubnum]->pack,str,tmp2,NULL),EX_OUTL);
-if(!fexist(str)) {
-	bputs(text[QWKCompressionFailed]);
-	if(i)
-		errormsg(WHERE,ERR_EXEC,cmdstr(qhub[hubnum]->pack,str,tmp2,NULL),i);
-	else
-		errorlog("Couldn't compress REP packet");
-	return(0); }
-sprintf(str,"%sQNET\\%s.OUT\\",data_dir,qhub[hubnum]->id);
-delfiles(str,"*.*");
-
-if(packedmail) {						/* Delete NetMail */
-	sprintf(smb.file,"%sMAIL",data_dir);
-	smb.retry_time=smb_retry_time;
-	if((i=smb_open(&smb))!=0) {
-		errormsg(WHERE,ERR_OPEN,smb.file,i);
-		return(1); }
-
-	mailmsgs=loadmail(&mail,0,MAIL_YOUR,LM_QWK);
-
-	if((i=smb_locksmbhdr(&smb))!=0) {			  /* Lock the base, so nobody */
-		if(mailmsgs)
-			FREE(mail);
-		smb_close(&smb);
-		errormsg(WHERE,ERR_LOCK,smb.file,i);	/* messes with the index */
-		return(1); }
-
-	if((i=smb_getstatus(&smb))!=0) {
-		if(mailmsgs)
-			FREE(mail);
-		smb_close(&smb);
-		errormsg(WHERE,ERR_READ,smb.file,i);
-		return(1); }
-
-	deleted=0;
-	/* Mark as READ and DELETE */
-	for(l=0;l<mailmsgs;l++) {
-		if(mail[l].time>qwkmail_time)
-			continue;
-		msg.idx.offset=0;
-		if(!loadmsg(&msg,mail[l].number))
-			continue;
-
-		sprintf(str,"%s/",qhub[hubnum]->id);
-		if(msg.to_net.type!=NET_QWK
-			|| (strcmp(msg.to_net.addr,qhub[hubnum]->id)
-			&& strncmp(msg.to_net.addr,str,strlen(str)))) {
-			smb_unlockmsghdr(&smb,&msg);
-			smb_freemsgmem(&msg);
-            continue; }
-
-		msg.hdr.attr|=MSG_DELETE;
-		msg.idx.attr=msg.hdr.attr;
-		if((i=smb_putmsg(&smb,&msg))!=0)
-			errormsg(WHERE,ERR_WRITE,smb.file,i);
-		else
-			deleted++;
-		smb_unlockmsghdr(&smb,&msg);
-		smb_freemsgmem(&msg); }
-
-	if(deleted && sys_misc&SM_DELEMAIL)
-		delmail(0,MAIL_YOUR);
-	smb_close(&smb);
-	if(mailmsgs)
-		FREE(mail); }
-
-return(1);
-}
diff --git a/src/sbbs2/post.h b/src/sbbs2/post.h
deleted file mode 100644
index 060ec942af..0000000000
--- a/src/sbbs2/post.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/* POST.H */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "gen_defs.h"
-
-
-typedef struct {                        /* Message data */
-	ulong	offset, 					/* Offset to header (in bytes) */
-			number; 					/* Number of message */
-	ushort	to, 						/* CRC-16 of to username */
-			from,						/* CRC-16 of from username */
-			subj;						/* CRC-16 of subject */
-			} post_t;
-
-#ifdef SBBS
-post_t HUGE16 *loadposts(ulong *posts, uint subnum, ulong ptr, uint mode);
-#else
-ulong loadposts(post_t HUGE16 **post, uint subnum, ulong ptr, uint mode);
-#endif
-int  searchposts(uint subnum, post_t HUGE16 *post, long start, long msgs
-     ,char *search);
-void showposts_toyou(post_t HUGE16 *post, ulong start, ulong posts);
diff --git a/src/sbbs2/postmsg.c b/src/sbbs2/postmsg.c
deleted file mode 100644
index 4034d0a1f0..0000000000
--- a/src/sbbs2/postmsg.c
+++ /dev/null
@@ -1,308 +0,0 @@
-#line 1 "POSTMSG.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-
-/****************************************************************************/
-/* Posts a message on subboard number sub, with 'top' as top of message.    */
-/* Returns 1 if posted, 0 if not.                                           */
-/****************************************************************************/
-char postmsg(uint subnum, smbmsg_t *remsg, int wm_mode)
-{
-	char	str[256],touser[256],title[LEN_TITLE+1],buf[SDT_BLOCK_LEN]
-			,top[256],c;
-	ushort	xlat,msgattr;
-	int 	i,j,n,x,file,storage;
-	ulong	l,length,offset,crc=0xffffffff;
-	FILE	*instream;
-	smbmsg_t msg,tmpmsg;
-
-if(remsg) {
-	sprintf(title,"%.*s",LEN_TITLE,remsg->subj);
-	if(sub[subnum]->misc&SUB_INET)	// All Internet posts to "All" 05/20/97
-		touser[0]=0;
-	else if(remsg->hdr.attr&MSG_ANONYMOUS)
-		strcpy(touser,text[Anonymous]);
-	else
-		strcpy(touser,remsg->from);
-	msgattr=(remsg->hdr.attr&MSG_PRIVATE);
-	sprintf(top,text[RegardingByTo],title,touser,remsg->to
-		,timestr((time_t *)&remsg->hdr.when_written.time)
-		,zonestr(remsg->hdr.when_written.zone)); }
-else {
-	title[0]=0;
-	touser[0]=0;
-	top[0]=0;
-	msgattr=0; }
-
-if(useron.rest&FLAG('P')) {
-    bputs(text[R_Post]);
-    return(0); }
-
-if((sub[subnum]->misc&(SUB_QNET|SUB_FIDO|SUB_PNET|SUB_INET))
-	&& (useron.rest&FLAG('N'))) {
-    bputs(text[CantPostOnSub]);
-    return(0); }
-
-if(useron.ptoday>=level_postsperday[useron.level]) {
-	bputs(text[TooManyPostsToday]);
-	return(0); }
-
-bprintf(text[Posting],grp[sub[subnum]->grp]->sname,sub[subnum]->lname);
-action=NODE_PMSG;
-nodesync();
-
-if(!(msgattr&MSG_PRIVATE) && (sub[subnum]->misc&SUB_PONLY
-	|| (sub[subnum]->misc&SUB_PRIV && !noyes(text[PrivatePostQ]))))
-	msgattr|=MSG_PRIVATE;
-
-if(sys_status&SS_ABORT)
-	return(0);
-
-if(!(sub[subnum]->misc&SUB_INET)	// Prompt for TO: user
-	&& (sub[subnum]->misc&SUB_TOUSER || msgattr&MSG_PRIVATE || touser[0])) {
-	if(!touser[0] && !(msgattr&MSG_PRIVATE))
-		strcpy(touser,"All");
-    bputs(text[PostTo]);
-	i=LEN_ALIAS;
-	if(sub[subnum]->misc&(SUB_PNET|SUB_INET))
-		i=60;
-	if(sub[subnum]->misc&SUB_FIDO)
-		i=35;
-	if(sub[subnum]->misc&SUB_QNET)
-		i=25;
-	getstr(touser,i,K_UPRLWR|K_LINE|K_EDIT|K_AUTODEL);
-	if(stricmp(touser,"ALL")
-	&& !(sub[subnum]->misc&(SUB_PNET|SUB_FIDO|SUB_QNET|SUB_INET|SUB_ANON))) {
-		if(sub[subnum]->misc&SUB_NAME) {
-			if(!userdatdupe(useron.number,U_NAME,LEN_NAME,touser,0)) {
-				bputs(text[UnknownUser]);
-				return(0); } }
-		else {
-			if((i=finduser(touser))==0)
-				return(0);
-			username(i,touser); } }
-	if(sys_status&SS_ABORT)
-		return(0); }
-
-if(!touser[0])
-	strcpy(touser,"All");       // Default to ALL
-
-if(!stricmp(touser,"SYSOP") && !SYSOP)  // Change SYSOP to user #1
-	username(1,touser);
-
-if(msgattr&MSG_PRIVATE && !stricmp(touser,"ALL")) {
-    bputs(text[NoToUser]);
-    return(0); }
-if(msgattr&MSG_PRIVATE)
-	wm_mode|=WM_PRIVATE;
-
-if(sub[subnum]->misc&SUB_AONLY
-	|| (sub[subnum]->misc&SUB_ANON && useron.exempt&FLAG('A')
-		&& !noyes(text[AnonymousQ])))
-	msgattr|=MSG_ANONYMOUS;
-
-if(sub[subnum]->mod_ar[0] && chk_ar(sub[subnum]->mod_ar,useron))
-	msgattr|=MSG_MODERATED;
-
-if(sub[subnum]->misc&SUB_SYSPERM && sub_op(subnum))
-	msgattr|=MSG_PERMANENT;
-
-if(msgattr&MSG_PRIVATE)
-	bputs(text[PostingPrivately]);
-
-if(msgattr&MSG_ANONYMOUS)
-	bputs(text[PostingAnonymously]);
-
-if(sub[subnum]->misc&SUB_NAME)
-	bputs(text[UsingRealName]);
-
-sprintf(str,"%sINPUT.MSG",node_dir);
-if(!writemsg(str,top,title,wm_mode,subnum,touser)) {
-    bputs(text[Aborted]);
-    return(0); }
-
-bputs(text[WritingIndx]);
-
-if((i=smb_stack(&smb,SMB_STACK_PUSH))!=0) {
-	errormsg(WHERE,ERR_OPEN,sub[subnum]->code,i);
-	return(0); }
-
-sprintf(smb.file,"%s%s",sub[subnum]->data_dir,sub[subnum]->code);
-smb.retry_time=smb_retry_time;
-if((i=smb_open(&smb))!=0) {
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_OPEN,smb.file,i);
-	return(0); }
-
-if(filelength(fileno(smb.shd_fp))<1) {	 /* Create it if it doesn't exist */
-	smb.status.max_crcs=sub[subnum]->maxcrcs;
-	smb.status.max_msgs=sub[subnum]->maxmsgs;
-	smb.status.max_age=sub[subnum]->maxage;
-	smb.status.attr=sub[subnum]->misc&SUB_HYPER ? SMB_HYPERALLOC : 0;
-	if((i=smb_create(&smb))!=0) {
-		smb_close(&smb);
-		smb_stack(&smb,SMB_STACK_POP);
-		errormsg(WHERE,ERR_CREATE,smb.file,i);
-		return(0); } }
-
-if((i=smb_locksmbhdr(&smb))!=0) {
-	smb_close(&smb);
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_LOCK,smb.file,i);
-    return(0); }
-
-if((i=smb_getstatus(&smb))!=0) {
-	smb_close(&smb);
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_READ,smb.file,i);
-    return(0); }
-
-length=flength(str)+2;	 /* +2 for translation string */
-
-if(length&0xfff00000UL) {
-	smb_close(&smb);
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_LEN,str,length);
-    return(0); }
-
-if(smb.status.attr&SMB_HYPERALLOC) {
-	offset=smb_hallocdat(&smb);
-	storage=SMB_HYPERALLOC; }
-else {
-	if((i=smb_open_da(&smb))!=0) {
-		smb_unlocksmbhdr(&smb);
-		smb_close(&smb);
-		smb_stack(&smb,SMB_STACK_POP);
-		errormsg(WHERE,ERR_OPEN,smb.file,i);
-		return(0); }
-	if(sub[subnum]->misc&SUB_FAST) {
-		offset=smb_fallocdat(&smb,length,1);
-		storage=SMB_FASTALLOC; }
-	else {
-		offset=smb_allocdat(&smb,length,1);
-		storage=SMB_SELFPACK; }
-	smb_close_da(&smb); }
-
-if((file=open(str,O_RDONLY|O_BINARY))==-1
-	|| (instream=fdopen(file,"rb"))==NULL) {
-	smb_freemsgdat(&smb,offset,length,1);
-	smb_unlocksmbhdr(&smb);
-	smb_close(&smb);
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_OPEN,str,O_RDONLY|O_BINARY);
-	return(0); }
-
-setvbuf(instream,NULL,_IOFBF,2*1024);
-fseek(smb.sdt_fp,offset,SEEK_SET);
-xlat=XLAT_NONE;
-fwrite(&xlat,2,1,smb.sdt_fp);
-x=SDT_BLOCK_LEN-2;				/* Don't read/write more than 255 */
-while(!feof(instream)) {
-	memset(buf,0,x);
-	j=fread(buf,1,x,instream);
-	if((j!=x || feof(instream)) && buf[j-1]==LF && buf[j-2]==CR)
-		buf[j-1]=buf[j-2]=0;	/* Convert to NULL */
-	if(sub[subnum]->maxcrcs) {
-		for(i=0;i<j;i++)
-			crc=ucrc32(buf[i],crc); }
-	fwrite(buf,j,1,smb.sdt_fp);
-	x=SDT_BLOCK_LEN; }
-fflush(smb.sdt_fp);
-fclose(instream);
-crc=~crc;
-
-memset(&msg,0,sizeof(smbmsg_t));
-memcpy(msg.hdr.id,"SHD\x1a",4);
-msg.hdr.version=smb_ver();
-msg.hdr.attr=msg.idx.attr=msgattr;
-msg.hdr.when_written.time=msg.hdr.when_imported.time=time(NULL);
-msg.hdr.when_written.zone=msg.hdr.when_imported.zone=sys_timezone;
-if(remsg) {
-	msg.hdr.thread_orig=remsg->hdr.number;
-	if(!remsg->hdr.thread_first) {
-		remsg->hdr.thread_first=smb.status.last_msg+1;
-		if((i=smb_lockmsghdr(&smb,remsg))!=0)
-			errormsg(WHERE,ERR_LOCK,smb.file,i);
-		else {
-			i=smb_putmsghdr(&smb,remsg);
-			smb_unlockmsghdr(&smb,remsg);
-			if(i)
-				errormsg(WHERE,ERR_WRITE,smb.file,i); } }
-	else {
-		l=remsg->hdr.thread_first;
-		while(1) {
-			tmpmsg.idx.offset=0;
-			if(!loadmsg(&tmpmsg,l))
-				break;
-			if(tmpmsg.hdr.thread_next && tmpmsg.hdr.thread_next!=l) {
-				l=tmpmsg.hdr.thread_next;
-				smb_unlockmsghdr(&smb,&tmpmsg);
-				smb_freemsgmem(&tmpmsg);
-				continue; }
-			tmpmsg.hdr.thread_next=smb.status.last_msg+1;
-			if((i=smb_putmsghdr(&smb,&tmpmsg))!=0)
-				errormsg(WHERE,ERR_WRITE,smb.file,i);
-			smb_unlockmsghdr(&smb,&tmpmsg);
-			smb_freemsgmem(&tmpmsg);
-			break; } } }
-
-
-if(sub[subnum]->maxcrcs) {
-	i=smb_addcrc(&smb,crc);
-	if(i) {
-		smb_freemsgdat(&smb,offset,length,1);
-		smb_unlocksmbhdr(&smb);
-		smb_close(&smb);
-		smb_stack(&smb,SMB_STACK_POP);
-		bputs("\1r\1h\1iDuplicate message!\r\n");
-		return(0); } }
-
-msg.hdr.offset=offset;
-
-smb_hfield(&msg,RECIPIENT,strlen(touser),touser);
-strlwr(touser);
-msg.idx.to=crc16(touser);
-
-strcpy(str,sub[subnum]->misc&SUB_NAME ? useron.name : useron.alias);
-smb_hfield(&msg,SENDER,strlen(str),str);
-strlwr(str);
-msg.idx.from=crc16(str);
-
-sprintf(str,"%u",useron.number);
-smb_hfield(&msg,SENDEREXT,strlen(str),str);
-
-smb_hfield(&msg,SUBJECT,strlen(title),title);
-strcpy(str,title);
-strlwr(str);
-remove_re(str);
-msg.idx.subj=crc16(str);
-
-smb_dfield(&msg,TEXT_BODY,length);
-
-smb_unlocksmbhdr(&smb);
-i=smb_addmsghdr(&smb,&msg,storage);
-smb_close(&smb);
-smb_stack(&smb,SMB_STACK_POP);
-
-smb_freemsgmem(&msg);
-if(i) {
-	smb_freemsgdat(&smb,offset,length,1);
-	errormsg(WHERE,ERR_WRITE,smb.file,i);
-	return(0); }
-
-useron.ptoday++;
-useron.posts++;
-logon_posts++;
-putuserrec(useron.number,U_POSTS,5,itoa(useron.posts,str,10));
-putuserrec(useron.number,U_PTODAY,5,itoa(useron.ptoday,str,10));
-bprintf(text[Posted],grp[sub[subnum]->grp]->sname
-    ,sub[subnum]->lname);
-sprintf(str,"Posted on %s %s",grp[sub[subnum]->grp]->sname,sub[subnum]->lname);
-logline("P+",str);
-if(sub[subnum]->misc&SUB_FIDO && sub[subnum]->echomail_sem[0]) /* semaphore */
-	if((file=nopen(sub[subnum]->echomail_sem,O_WRONLY|O_CREAT|O_TRUNC))!=-1)
-        close(file);
-return(1);
-}
diff --git a/src/sbbs2/putmsg.c b/src/sbbs2/putmsg.c
deleted file mode 100644
index eae2dc7313..0000000000
--- a/src/sbbs2/putmsg.c
+++ /dev/null
@@ -1,195 +0,0 @@
-#line 1 "PUTMSG.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-
-/****************************************************************************/
-/* Outputs a NULL terminated string locally and remotely (if applicable)	*/
-/* checking for message aborts, pauses, ANSI escape and ^A sequences.		*/
-/* Changes local text attributes if necessary. Max length of str is 4 gig	*/
-/* Returns the last char of the buffer access.. 0 if not aborted.           */
-/* If P_SAVEATR bit is set in mode, the attributes set by the message       */
-/* will be the current attributes after the message is displayed, otherwise */
-/* the attributes prior to diplaying the message are always restored.       */
-/* Ignores Ctrl-Z's                                                         */
-/****************************************************************************/
-char putmsg(char HUGE16 *str, int mode)
-{
-	uchar	tmpatr,tmp2[256],tmp3[128],*p,exatr=0;
-	int 	orgcon=console,i;
-	ulong	l=0,sys_status_sav=sys_status;
-
-tmpatr=curatr;	/* was lclatr(-1) */
-if(!(mode&P_SAVEATR))
-	attr(LIGHTGRAY);
-while(str[l] && (mode&P_NOABORT || !msgabort()) && online) {
-	if(str[l]==1) {		/* Ctrl-Ax sequence */
-		if(str[l+1]=='"' && !(sys_status&SS_NEST_PF)) {  /* Quote a file */
-			l+=2;
-			i=0;
-			while(i<12 && isprint(str[l]) && str[l]!='\\' && str[l]!='/')
-				tmp2[i++]=str[l++];
-			tmp2[i]=0;
-			sys_status|=SS_NEST_PF; 	/* keep it only one message deep! */
-			sprintf(tmp3,"%s%s",text_dir,tmp2);
-			printfile(tmp3,0);
-			sys_status&=~SS_NEST_PF; }
-		else if(toupper(str[l+1])=='Z')             /* Ctrl-AZ==EOF */
-			break;
-		else {
-			ctrl_a(str[l+1]);
-			l+=2; } }
-	else if((str[l]=='`' || str[l]=='�') && str[l+1]=='[') {   
-		outchar(ESC); /* Convert `[ and �[ to ESC[ */
-		l++; }
-	else if(sys_misc&SM_PCBOARD && str[l]=='@' && str[l+1]=='X'
-		&& isxdigit(str[l+2]) && isxdigit(str[l+3])) {
-		sprintf(tmp2,"%.2s",str+l+2);
-		attr(ahtoul(tmp2));
-		exatr=1;
-		l+=4; }
-	else if(sys_misc&SM_WILDCAT && str[l]=='@' && str[l+3]=='@'
-		&& isxdigit(str[l+1]) && isxdigit(str[l+2])) {
-		sprintf(tmp2,"%.2s",str+l+1);
-		attr(ahtoul(tmp2));
-		// exatr=1;
-		l+=4; }
-	else if(sys_misc&SM_RENEGADE && str[l]=='|' && isdigit(str[l+1])
-		&& !(useron.misc&(RIP|WIP))) {
-		sprintf(tmp2,"%.2s",str+l+1);
-		i=atoi(tmp2);
-		if(i>=16) { 				 /* setting background */
-			i-=16;
-			i<<=4;
-			i|=(curatr&0x0f); } 	/* leave foreground alone */
-		else
-			i|=(curatr&0xf0);		/* leave background alone */
-		attr(i);
-		exatr=1;
-		l+=2;	/* Skip |x */
-		if(isdigit(str[l]))
-			l++; }	/* Skip second digit if it exists */
-	else if(sys_misc&SM_CELERITY && str[l]=='|' && isalpha(str[l+1])
-		&& !(useron.misc&(RIP|WIP))) {
-		switch(str[l+1]) {
-			case 'k':
-				attr((curatr&0xf0)|BLACK);
-				break;
-			case 'b':
-				attr((curatr&0xf0)|BLUE);
-				break;
-			case 'g':
-				attr((curatr&0xf0)|GREEN);
-				break;
-			case 'c':
-				attr((curatr&0xf0)|CYAN);
-				break;
-			case 'r':
-				attr((curatr&0xf0)|RED);
-				break;
-			case 'm':
-				attr((curatr&0xf0)|MAGENTA);
-				break;
-			case 'y':
-				attr((curatr&0xf0)|YELLOW);
-				break;
-			case 'w':
-				attr((curatr&0xf0)|LIGHTGRAY);
-				break;
-			case 'd':
-				attr((curatr&0xf0)|BLACK|HIGH);
-				break;
-			case 'B':
-				attr((curatr&0xf0)|BLUE|HIGH);
-				break;
-			case 'G':
-				attr((curatr&0xf0)|GREEN|HIGH);
-				break;
-			case 'C':
-				attr((curatr&0xf0)|CYAN|HIGH);
-				break;
-			case 'R':
-				attr((curatr&0xf0)|RED|HIGH);
-				break;
-			case 'M':
-				attr((curatr&0xf0)|MAGENTA|HIGH);
-				break;
-			case 'Y':   /* Yellow */
-				attr((curatr&0xf0)|YELLOW|HIGH);
-				break;
-			case 'W':
-				attr((curatr&0xf0)|LIGHTGRAY|HIGH);
-				break;
-			case 'S':   /* swap foreground and background */
-				attr((curatr&0x07)<<4);
-				break; }
-		exatr=1;
-		l+=2;	/* Skip |x */
-		}  /* Skip second digit if it exists */
-	else if(sys_misc&SM_WWIV && str[l]==3 && isdigit(str[l+1])) {
-		exatr=1;
-		switch(str[l+1]) {
-			default:
-				attr(LIGHTGRAY);
-				break;
-			case '1':
-				attr(CYAN|HIGH);
-				break;
-			case '2':
-				attr(BROWN|HIGH);
-				break;
-			case '3':
-				attr(MAGENTA);
-				break;
-			case '4':
-				attr(LIGHTGRAY|HIGH|(BLUE<<4));
-				break;
-			case '5':
-				attr(GREEN);
-				break;
-			case '6':
-				attr(RED|HIGH|BLINK);
-				break;
-			case '7':
-				attr(BLUE|HIGH);
-				break;
-			case '8':
-				attr(BLUE);
-				break;
-			case '9':
-				attr(CYAN);
-				break; }
-		l+=2; }
-	else {
-		if(exatr && str[l]==LF) 	/* clear at newline for extra attr codes */
-			attr(LIGHTGRAY);
-		if(lclaes()) {
-			if(str[l]=='A' || str[l]=='B' || str[l]=='H' || str[l]=='J'
-				|| str[l]=='f' || str[l]=='u')    /* ANSI anim */
-				lncntr=0;			/* so defeat pause */
-			if(str[l]=='"') {
-				l++;				/* don't pass on keyboard reassignment */
-				continue; } }
-		if(str[l]=='!' && str[l+1]=='|' && useron.misc&(RIP|WIP)) /* RIP */
-			lncntr=0;				/* so defeat pause */
-		if(str[l]==ESC && str[l+1]=='$')    /* WIP command */
-			lncntr=0;
-		if(str[l]=='@' && !(mode&P_NOATCODES)) {
-			i=atcodes((char *)str+l);	/* returns 0 if not valid @ code */
-			l+=i;					/* i is length of code string */
-			if(i)					/* if valid string, go to top */
-				continue; }
-		if(str[l]!=26)
-			outchar(str[l]);
-		l++; } }
-//curatr=lclatr(-1);		01/29/96
-if(!(mode&P_SAVEATR)) {
-	console=orgcon;
-	attr(tmpatr); }
-
-/* Restore original settings of Forced Pause On/Off */
-sys_status&=~(SS_PAUSEOFF|SS_PAUSEON);
-sys_status|=(sys_status_sav&(SS_PAUSEOFF|SS_PAUSEON));
-return(str[l]);
-}
diff --git a/src/sbbs2/putnode.c b/src/sbbs2/putnode.c
deleted file mode 100644
index 6e9a5a6f56..0000000000
--- a/src/sbbs2/putnode.c
+++ /dev/null
@@ -1,135 +0,0 @@
-#line 1 "PUTNODE.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-
-/****************************************************************************/
-/* Write the data from the structure 'node' into NODE.DAB  					*/
-/* getnodedat(num,&node,1); must have been called before calling this func  */
-/*          NOTE: ------^   the indicates the node record has been locked   */
-/****************************************************************************/
-void putnodedat(uint number, node_t node)
-{
-	char str[256],firston[25];
-
-if(!(sys_status&SS_NODEDAB))
-	return;
-if(!number || number>sys_nodes) {
-	errormsg(WHERE,ERR_CHK,"node number",number);
-	return; }
-if(number==node_num) {
-	if((node.status==NODE_INUSE || node.status==NODE_QUIET)
-		&& text[NodeActionMain+node.action][0]) {
-		node.misc|=NODE_EXT;
-		memset(str,0,128);
-		sprintf(str,text[NodeActionMain+node.action]
-			,useron.alias
-			,useron.level
-			,getage(useron.birth)
-			,useron.sex
-			,useron.comp
-			,useron.note
-			,unixtodstr(useron.firston,firston)
-			,node.aux&0xff
-			,node.connection
-			);
-		putnodeext(number,str); }
-	else
-		node.misc&=~NODE_EXT; }
-number--;	/* make zero based */
-lseek(nodefile,(long)number*sizeof(node_t),SEEK_SET);
-if(write(nodefile,&node,sizeof(node_t))!=sizeof(node_t)) {
-	unlock(nodefile,(long)number*sizeof(node_t),sizeof(node_t));
-	errormsg(WHERE,ERR_WRITE,"nodefile",number+1);
-	return; }
-unlock(nodefile,(long)number*sizeof(node_t),sizeof(node_t));
-}
-
-/****************************************************************************/
-/* Creates a short message for node 'num' than contains 'strin'             */
-/****************************************************************************/
-void putnmsg(int num, char *strin)
-{
-    char str[256];
-    int file,i;
-    node_t node;
-
-sprintf(str,"%sMSGS\\N%3.3u.MSG",data_dir,num);
-if((file=nopen(str,O_WRONLY|O_CREAT))==-1) {
-	errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT);
-    return; }
-lseek(file,0L,SEEK_END);	// Instead of opening with O_APPEND
-i=strlen(strin);
-if(write(file,strin,i)!=i) {
-    close(file);
-    errormsg(WHERE,ERR_WRITE,str,i);
-    return; }
-close(file);
-getnodedat(num,&node,0);
-if((node.status==NODE_INUSE || node.status==NODE_QUIET)
-    && !(node.misc&NODE_NMSG)) {
-    getnodedat(num,&node,1);
-    node.misc|=NODE_NMSG;
-    putnodedat(num,node); }
-}
-
-void putnodeext(uint number, char *ext)
-{
-    char str[256];
-    int count=0;
-
-if(!(sys_status&SS_NODEDAB))
-    return;
-if(!number || number>sys_nodes) {
-    errormsg(WHERE,ERR_CHK,"node number",number);
-    return; }
-number--;   /* make zero based */
-while(count<LOOP_NODEDAB) {
-    if(count>10)
-        mswait(55);
-    lseek(node_ext,(long)number*128L,SEEK_SET);
-    if(lock(node_ext,(long)number*128L,128)==-1) {
-        count++;
-        continue; }
-    if(write(node_ext,ext,128)==128)
-        break;
-    count++; }
-unlock(node_ext,(long)number*128L,128);
-if(count>(LOOP_NODEDAB/2) && count!=LOOP_NODEDAB) {
-    sprintf(str,"NODE.EXB COLLISION - Count: %d",count);
-    logline("!!",str); }
-if(count==LOOP_NODEDAB) {
-    errormsg(WHERE,ERR_WRITE,"NODE.EXB",number+1);
-    return; }
-}
-
-/****************************************************************************/
-/* Creates a short message for 'usernumber' than contains 'strin'           */
-/****************************************************************************/
-void putsmsg(int usernumber, char *strin)
-{
-    char str[256];
-    int file,i;
-    node_t node;
-
-sprintf(str,"%sMSGS\\%4.4u.MSG",data_dir,usernumber);
-if((file=nopen(str,O_WRONLY|O_CREAT|O_APPEND))==-1) {
-    errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_APPEND);
-    return; }
-i=strlen(strin);
-if(write(file,strin,i)!=i) {
-    close(file);
-    errormsg(WHERE,ERR_WRITE,str,i);
-    return; }
-close(file);
-for(i=1;i<=sys_nodes;i++) {     /* flag node if user on that msg waiting */
-    getnodedat(i,&node,0);
-    if(node.useron==usernumber
-        && (node.status==NODE_INUSE || node.status==NODE_QUIET)
-        && !(node.misc&NODE_MSGW)) {
-        getnodedat(i,&node,1);
-        node.misc|=NODE_MSGW;
-        putnodedat(i,node); } }
-}
-
diff --git a/src/sbbs2/qwk.c b/src/sbbs2/qwk.c
deleted file mode 100644
index d5e598e93f..0000000000
--- a/src/sbbs2/qwk.c
+++ /dev/null
@@ -1,942 +0,0 @@
-#line 1 "QWK.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/****************************************************/
-/* Functions that pertain solely to the QWK packets */
-/****************************************************/
-
-#include "sbbs.h"
-#include "etext.h"
-#include "post.h"
-#include "qwk.h"
-
-time_t qwkmail_time;
-
-/****************************************************************************/
-/* Removes ctrl-a codes from the string 'instr'                             */
-/****************************************************************************/
-void remove_ctrl_a(char *instr)
-{
-	char str[512];
-	uint i,j,k;
-
-j=strlen(instr);
-for(k=i=0;i<j;i++) {
-	if(instr[i]==1)
-		i++;
-	else str[k++]=instr[i]; }
-str[k]=0;
-strcpy(instr,str);
-}
-
-
-/****************************************************************************/
-/* Converts a long to an msbin real number. required for QWK NDX file		*/
-/****************************************************************************/
-float ltomsbin(long val)
-{
-	converter t;
-	int   sign, exp;	/* sign and exponent */
-
-t.f[0]=(float)val;
-sign=t.uc[3]/0x80;
-exp=((t.ui[1]>>7)-0x7f+0x81)&0xff;
-t.ui[1]=(t.ui[1]&0x7f)|(sign<<7)|(exp<<8);
-return(t.f[0]);
-}
-
-int route_circ(char *via, char *id)
-{
-	char str[256],*p,*sp;
-
-strcpy(str,via);
-p=str;
-while(*p && *p<=SP)
-	p++;
-while(*p) {
-	sp=strchr(p,'/');
-	if(sp) *sp=0;
-	if(!stricmp(p,id))
-		return(1);
-	if(!sp)
-		break;
-	p=sp+1; }
-return(0);
-}
-
-int qwk_route(char *inaddr, char *fulladdr)
-{
-	char node[10],str[256],*p;
-	int file,i;
-	FILE *stream;
-
-fulladdr[0]=0;
-sprintf(str,"%.255s",inaddr);
-p=strrchr(str,'/');
-if(p) p++;
-else p=str;
-sprintf(node,"%.8s",p);                 /* node = destination node */
-truncsp(node);
-
-for(i=0;i<total_qhubs;i++)				/* Check if destination is our hub */
-	if(!stricmp(qhub[i]->id,node))
-        break;
-if(i<total_qhubs) {
-	strcpy(fulladdr,node);
-	return(0); }
-
-i=matchuser(node);						/* Check if destination is a node */
-if(i) {
-	getuserrec(i,U_REST,8,str);
-	if(ahtoul(str)&FLAG('Q')) {
-		strcpy(fulladdr,node);
-		return(i); } }
-
-sprintf(node,"%.8s",inaddr);            /* node = next hop */
-p=strchr(node,'/');
-if(p) *p=0;
-truncsp(node);							
-
-if(strchr(inaddr,'/')) {                /* Multiple hops */
-
-	for(i=0;i<total_qhubs;i++)			/* Check if next hop is our hub */
-		if(!stricmp(qhub[i]->id,node))
-			break;
-	if(i<total_qhubs) {
-		strcpy(fulladdr,inaddr);
-		return(0); }
-
-	i=matchuser(node);					/* Check if next hop is a node */
-	if(i) {
-		getuserrec(i,U_REST,8,str);
-		if(ahtoul(str)&FLAG('Q')) {
-			strcpy(fulladdr,inaddr);
-			return(i); } } }
-
-p=strchr(node,SP);
-if(p) *p=0;
-
-sprintf(str,"%sQNET\\ROUTE.DAT",data_dir);
-if((stream=fnopen(&file,str,O_RDONLY))==NULL)
-	return(0);
-
-strcat(node,":");
-fulladdr[0]=0;
-while(!feof(stream)) {
-	if(!fgets(str,256,stream))
-		break;
-	if(!strnicmp(str+9,node,strlen(node))) {
-		fclose(stream);
-		truncsp(str);
-		sprintf(fulladdr,"%s/%s",str+9+strlen(node),inaddr);
-		break; } }
-
-fclose(stream);
-if(!fulladdr[0])			/* First hop not found in ROUTE.DAT */
-	return(0);
-
-sprintf(node,"%.8s",fulladdr);
-p=strchr(node,'/');
-if(p) *p=0;
-truncsp(node);
-
-for(i=0;i<total_qhubs;i++)				/* Check if first hop is our hub */
-	if(!stricmp(qhub[i]->id,node))
-        break;
-if(i<total_qhubs)
-	return(0);
-
-i=matchuser(node);						/* Check if first hop is a node */
-if(i) {
-	getuserrec(i,U_REST,8,str);
-	if(ahtoul(str)&FLAG('Q'))
-		return(i); }
-fulladdr[0]=0;
-return(0);
-}
-
-
-/* Via is in format: NODE/NODE/... */
-void update_qwkroute(char *via)
-{
-	static uint total_nodes;
-	static char **qwk_node;
-	static char **qwk_path;
-	static time_t *qwk_time;
-	char str[256],*p,*tp,node[9];
-	int i,file;
-	time_t t;
-	FILE *stream;
-
-if(via==NULL) {
-	if(!total_nodes)
-		return;
-	sprintf(str,"%sQNET\\ROUTE.DAT",data_dir);
-	if((stream=fnopen(&file,str,O_WRONLY|O_CREAT|O_TRUNC))!=NULL) {
-		t=time(NULL);
-		t-=(90L*24L*60L*60L);
-		for(i=0;i<total_nodes;i++)
-			if(qwk_time[i]>t)
-				fprintf(stream,"%s %s:%s\r\n"
-					,unixtodstr(qwk_time[i],str),qwk_node[i],qwk_path[i]);
-		fclose(stream); }
-	else
-		errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
-    for(i=0;i<total_nodes;i++) {
-        FREE(qwk_node[i]);
-        FREE(qwk_path[i]); }
-	if(qwk_node) {
-		FREE(qwk_node);
-		qwk_node=NULL; }
-	if(qwk_path) {
-		FREE(qwk_path);
-		qwk_path=NULL; }
-	if(qwk_time) {
-		FREE(qwk_time);
-		qwk_time=NULL; }
-    total_nodes=0;
-    return; }
-
-if(!total_nodes) {
-	sprintf(str,"%sQNET\\ROUTE.DAT",data_dir);
-	if((stream=fnopen(&file,str,O_RDONLY))!=NULL) {
-		while(!feof(stream)) {
-			if(!fgets(str,255,stream))
-				break;
-			truncsp(str);
-			t=dstrtounix(str);
-			p=strchr(str,':');
-            if(!p) continue;
-			*p=0;
-			sprintf(node,"%.8s",str+9);
-			tp=strchr(node,SP); 		/* change "node bbs:" to "node:" */
-			if(tp) *tp=0;
-			for(i=0;i<total_nodes;i++)
-				if(!stricmp(qwk_node[i],node))
-					break;
-			if(i<total_nodes && qwk_time[i]>t)
-				continue;
-			if(i==total_nodes) {
-				if((qwk_node=REALLOC(qwk_node,sizeof(char *)*(i+1)))==NULL) {
-					errormsg(WHERE,ERR_ALLOC,str,9*(i+1));
-					break; }
-				if((qwk_path=REALLOC(qwk_path,sizeof(char *)*(i+1)))==NULL) {
-					errormsg(WHERE,ERR_ALLOC,str,128*(i+1));
-					break; }
-				if((qwk_time=REALLOC(qwk_time,sizeof(time_t)*(i+1)))==NULL) {
-					errormsg(WHERE,ERR_ALLOC,str,sizeof(time_t)*(i+1));
-					break; }
-				if((qwk_node[i]=MALLOC(9))==NULL) {
-					errormsg(WHERE,ERR_ALLOC,str,9);
-					break; }
-				if((qwk_path[i]=MALLOC(128))==NULL) {
-					errormsg(WHERE,ERR_ALLOC,str,128);
-					break; }
-				total_nodes++; }
-			strcpy(qwk_node[i],node);
-			p++;
-			while(*p && *p<=SP) p++;
-			sprintf(qwk_path[i],"%.127s",p);
-			qwk_time[i]=t; }
-		fclose(stream); } }
-
-strupr(via);
-p=strchr(via,'/');   /* Skip uplink */
-
-while(p && *p) {
-	p++;
-	sprintf(node,"%.8s",p);
-	tp=strchr(node,'/');
-	if(tp) *tp=0;
-	tp=strchr(node,SP); 		/* no spaces allowed */
-	if(tp) *tp=0;
-	truncsp(node);
-	for(i=0;i<total_nodes;i++)
-		if(!stricmp(qwk_node[i],node))
-			break;
-	if(i==total_nodes) {		/* Not in list */
-		if((qwk_node=REALLOC(qwk_node,sizeof(char *)*(total_nodes+1)))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,str,9*(total_nodes+1));
-			break; }
-		if((qwk_path=REALLOC(qwk_path,sizeof(char *)*(total_nodes+1)))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,str,128*(total_nodes+1));
-			break; }
-		if((qwk_time=REALLOC(qwk_time,sizeof(time_t)*(total_nodes+1)))
-			==NULL) {
-			errormsg(WHERE,ERR_ALLOC,str,sizeof(time_t)*(total_nodes+1));
-			break; }
-		if((qwk_node[total_nodes]=MALLOC(9))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,str,9);
-			break; }
-		if((qwk_path[total_nodes]=MALLOC(128))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,str,128);
-			break; }
-		total_nodes++; }
-	sprintf(qwk_node[i],"%.8s",node);
-	sprintf(qwk_path[i],"%.*s",(uint)((p-1)-via),via);
-	qwk_time[i]=time(NULL);
-	p=strchr(p,'/'); }
-}
-
-/****************************************************************************/
-/* Successful download of QWK packet										*/
-/****************************************************************************/
-void qwk_success(ulong msgcnt, char bi, char prepack)
-{
-	char	str[128];
-	int 	i;
-	ulong	l,msgs,deleted=0;
-	mail_t	*mail;
-	smbmsg_t msg;
-
-if(!prepack) {
-	logline("D-","Downloaded QWK packet");
-	posts_read+=msgcnt;
-
-	if(useron.rest&FLAG('Q')) {
-		sprintf(str,"%sQNET\\%.8s.OUT\\",data_dir,useron.alias);
-		delfiles(str,"*.*"); }
-
-	sprintf(str,"%sFILE\\%04u.QWK",data_dir,useron.number);
-	remove(str);
-
-	if(!bi) {
-		batch_download(-1);
-		delfiles(temp_dir,"*.*"); } }
-
-if(useron.rest&FLAG('Q'))
-	useron.qwk|=(QWK_EMAIL|QWK_ALLMAIL|QWK_DELMAIL);
-if(useron.qwk&(QWK_EMAIL|QWK_ALLMAIL)) {
-	sprintf(smb.file,"%sMAIL",data_dir);
-	smb.retry_time=smb_retry_time;
-	if((i=smb_open(&smb))!=0) {
-		errormsg(WHERE,ERR_OPEN,smb.file,i);
-		return; }
-
-	msgs=loadmail(&mail,useron.number,0
-		,useron.qwk&QWK_ALLMAIL ? LM_QWK : LM_UNREAD|LM_QWK);
-
-	if((i=smb_locksmbhdr(&smb))!=0) {			  /* Lock the base, so nobody */
-		if(msgs)
-			FREE(mail);
-		smb_close(&smb);
-		errormsg(WHERE,ERR_LOCK,smb.file,i);	/* messes with the index */
-        return; }
-
-	if((i=smb_getstatus(&smb))!=0) {
-		if(msgs)
-			FREE(mail);
-		smb_close(&smb);
-		errormsg(WHERE,ERR_READ,smb.file,i);
-		return; }
-
-	/* Mark as READ and DELETE */
-	for(l=0;l<msgs;l++) {
-		if(mail[l].time>qwkmail_time)
-			continue;
-		msg.idx.offset=0;
-		if(!loadmsg(&msg,mail[l].number))
-			continue;
-		if(!(msg.hdr.attr&MSG_READ)) {
-			if(thisnode.status==NODE_INUSE)
-                telluser(msg);
-			msg.hdr.attr|=MSG_READ;
-			msg.idx.attr=msg.hdr.attr;
-			smb_putmsg(&smb,&msg); }
-		if(!(msg.hdr.attr&MSG_PERMANENT)
-			&& ((msg.hdr.attr&MSG_KILLREAD && msg.hdr.attr&MSG_READ)
-			|| (useron.qwk&QWK_DELMAIL))) {
-			msg.hdr.attr|=MSG_DELETE;
-			msg.idx.attr=msg.hdr.attr;
-			if((i=smb_putmsg(&smb,&msg))!=0)
-				errormsg(WHERE,ERR_WRITE,smb.file,i);
-			else
-				deleted++; }
-		smb_freemsgmem(&msg);
-		smb_unlockmsghdr(&smb,&msg); }
-
-	if(deleted && sys_misc&SM_DELEMAIL)
-		delmail(useron.number,MAIL_YOUR);
-	smb_close(&smb);
-	if(msgs)
-		FREE(mail); }
-
-}
-
-/****************************************************************************/
-/* QWK mail packet section													*/
-/****************************************************************************/
-void qwk_sec()
-{
-	uchar	str[256],tmp2[256],ch,bi=0
-			,*AttemptedToDownloadQWKpacket="Attempted to download QWK packet";
-	int 	s;
-	uint	i,j,k;
-	ulong	msgcnt,l;
-	time_t	*sav_ptr;
-	file_t	fd;
-
-getusrdirs();
-fd.dir=total_dirs;
-if((sav_ptr=(time_t *)MALLOC(sizeof(time_t)*total_subs))==NULL) {
-	errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(time_t)*total_subs);
-	return; }
-for(i=0;i<total_subs;i++)
-	sav_ptr[i]=sub[i]->ptr;
-for(i=0;i<total_prots;i++)
-	if(prot[i]->bicmd[0] && chk_ar(prot[i]->ar,useron))
-		bi++;				/* number of bidirectional protocols configured */
-if(useron.rest&FLAG('Q'))
-	getusrsubs();
-delfiles(temp_dir,"*.*");
-while(online) {
-	if((useron.misc&(WIP|RIP) || !(useron.misc&EXPERT))
-		&& !(useron.rest&FLAG('Q')))
-		menu("QWK");
-	action=NODE_TQWK;
-	ASYNC;
-	bputs(text[QWKPrompt]);
-	strcpy(str,"?UDCSPQ\r");
-	if(bi)
-		strcat(str,"B");
-	ch=getkeys(str,0);
-	if(ch>SP)
-		logch(ch,0);
-	if(sys_status&SS_ABORT || ch=='Q' || ch==CR)
-		break;
-	if(ch=='?') {
-		if((useron.misc&(WIP|RIP) || !(useron.misc&EXPERT))
-			&& !(useron.rest&FLAG('Q')))
-			continue;
-		menu("QWK");
-		continue; }
-	if(ch=='S') {
-		new_scan_cfg(SUB_NSCAN);
-		delfiles(temp_dir,"*.*");
-		continue; }
-	if(ch=='P') {
-		new_scan_ptr_cfg();
-		for(i=0;i<total_subs;i++)
-			sav_ptr[i]=sub[i]->ptr;
-		delfiles(temp_dir,"*.*");
-		continue; }
-	if(ch=='C') {
-		while(online) {
-			CLS;
-			bputs("\1n\1gQWK Settings:\1n\r\n\r\n");
-			bprintf("A) %-30s: %s\r\n"
-				,"Ctrl-A Color Codes"
-				,useron.qwk&QWK_EXPCTLA
-				? "Expand to ANSI" : useron.qwk&QWK_RETCTLA ? "Leave in"
-				: "Strip");
-			bprintf("T) %-30s: %s\r\n"
-				,"Archive Type"
-				,useron.tmpext);
-			bprintf("E) %-30s: %s\r\n"
-				,"Include E-mail Messages"
-				,useron.qwk&QWK_EMAIL ? "Un-read Only"
-				: useron.qwk&QWK_ALLMAIL ? text[Yes] : text[No]);
-			bprintf("I) %-30s: %s\r\n"
-				,"Include File Attachments"
-				,useron.qwk&QWK_ATTACH ? text[Yes] : text[No]);
-			bprintf("D) %-30s: %s\r\n"
-				,"Delete E-mail Automatically"
-				,useron.qwk&QWK_DELMAIL ? text[Yes]:text[No]);
-			bprintf("F) %-30s: %s\r\n"
-				,"Include New Files List"
-				,useron.qwk&QWK_FILES ? text[Yes]:text[No]);
-			bprintf("N) %-30s: %s\r\n"
-				,"Include Index Files"
-				,useron.qwk&QWK_NOINDEX ? text[No]:text[Yes]);
-			bprintf("C) %-30s: %s\r\n"
-				,"Include Control Files"
-				,useron.qwk&QWK_NOCTRL ? text[No]:text[Yes]);
-			bprintf("Y) %-30s: %s\r\n"
-				,"Include Messages from You"
-				,useron.qwk&QWK_BYSELF ? text[Yes]:text[No]);
-			bprintf("Z) %-30s: %s\r\n"
-				,"Include Time Zone (TZ)"
-				,useron.qwk&QWK_TZ ? text[Yes]:text[No]);
-			bprintf("V) %-30s: %s\r\n"
-				,"Include Message Path (VIA)"
-				,useron.qwk&QWK_VIA ? text[Yes]:text[No]);
-			//bprintf("Q) Quit\r\n\r\n");
-			bputs(text[UserDefaultsWhich]);
-			ch=getkeys("AQEDFIOQTYNCZV",0);
-			if(sys_status&SS_ABORT || !ch || ch=='Q')
-				break;
-			switch(ch) {
-				case 'A':
-					if(!(useron.qwk&(QWK_EXPCTLA|QWK_RETCTLA)))
-						useron.qwk|=QWK_EXPCTLA;
-					else if(useron.qwk&QWK_EXPCTLA) {
-						useron.qwk&=~QWK_EXPCTLA;
-						useron.qwk|=QWK_RETCTLA; }
-					else
-						useron.qwk&=~(QWK_EXPCTLA|QWK_RETCTLA);
-					break;
-				case 'T':
-					for(i=0;i<total_fcomps;i++)
-						uselect(1,i,"Archive Types",fcomp[i]->ext,fcomp[i]->ar);
-					s=uselect(0,0,0,0,0);
-					if(s>=0) {
-						strcpy(useron.tmpext,fcomp[s]->ext);
-						putuserrec(useron.number,U_TMPEXT,3,useron.tmpext); }
-					break;
-				case 'E':
-					if(!(useron.qwk&(QWK_EMAIL|QWK_ALLMAIL)))
-						useron.qwk|=QWK_EMAIL;
-					else if(useron.qwk&QWK_EMAIL) {
-						useron.qwk&=~QWK_EMAIL;
-						useron.qwk|=QWK_ALLMAIL; }
-					else
-						useron.qwk&=~(QWK_EMAIL|QWK_ALLMAIL);
-					break;
-				case 'I':
-					useron.qwk^=QWK_ATTACH;
-                    break;
-				case 'D':
-					useron.qwk^=QWK_DELMAIL;
-					break;
-				case 'F':
-					useron.qwk^=QWK_FILES;
-					break;
-				case 'N':   /* NO IDX files */
-					useron.qwk^=QWK_NOINDEX;
-                    break;
-				case 'C':
-					useron.qwk^=QWK_NOCTRL;
-                    break;
-				case 'Z':
-					useron.qwk^=QWK_TZ;
-                    break;
-				case 'V':
-					useron.qwk^=QWK_VIA;
-                    break;
-				case 'Y':   /* Yourself */
-					useron.qwk^=QWK_BYSELF;
-					break; }
-			putuserrec(useron.number,U_QWK,8,ultoa(useron.qwk,str,16)); }
-		delfiles(temp_dir,"*.*");
-		continue; }
-
-
-	if(ch=='B') {   /* Bidirectional QWK and REP packet transfer */
-		sprintf(str,"%s%s.QWK",temp_dir,sys_id);
-		if(!fexist(str) && !pack_qwk(str,&msgcnt,0)) {
-			for(i=0;i<total_subs;i++)
-				sub[i]->ptr=sav_ptr[i];
-			remove(str);
-			last_ns_time=ns_time;
-			continue; }
-		bprintf(text[UploadingREP],sys_id);
-		menu("BIPROT");
-		mnemonics(text[ProtocolOrQuit]);
-		strcpy(tmp2,"Q");
-		for(i=0;i<total_prots;i++)
-			if(prot[i]->bicmd[0] && chk_ar(prot[i]->ar,useron)) {
-				sprintf(tmp,"%c",prot[i]->mnemonic);
-				strcat(tmp2,tmp); }
-		ch=getkeys(tmp2,0);
-		if(ch=='Q' || sys_status&SS_ABORT) {
-			for(i=0;i<total_subs;i++)
-				sub[i]->ptr=sav_ptr[i];   /* re-load saved pointers */
-			last_ns_time=ns_time;
-            continue; }
-		for(i=0;i<total_prots;i++)
-			if(prot[i]->bicmd[0] && prot[i]->mnemonic==ch
-				&& chk_ar(prot[i]->ar,useron))
-				break;
-		if(i<total_prots) {
-			batup_total=1;
-			batup_dir[0]=total_dirs;
-			sprintf(batup_name[0],"%s.REP",sys_id);
-			batdn_total=1;
-			batdn_dir[0]=total_dirs;
-			sprintf(batdn_name[0],"%s.QWK",sys_id);
-			if(!create_batchdn_lst() || !create_batchup_lst()
-				|| !create_bimodem_pth()) {
-				batup_total=batdn_total=0;
-				continue; }
-			sprintf(str,"%s%s.QWK",temp_dir,sys_id);
-			sprintf(tmp2,"%s.QWK",sys_id);
-			padfname(tmp2,fd.name);
-			sprintf(str,"%sBATCHDN.LST",node_dir);
-			sprintf(tmp2,"%sBATCHUP.LST",node_dir);
-			j=protocol(cmdstr(prot[i]->bicmd,str,tmp2,NULL),0);
-			batdn_total=batup_total=0;
-			if(prot[i]->misc&PROT_DSZLOG) {
-				if(!checkprotlog(fd)) {
-					logline("D!",AttemptedToDownloadQWKpacket);
-					last_ns_time=ns_time;
-					for(i=0;i<total_subs;i++)
-						sub[i]->ptr=sav_ptr[i]; } /* re-load saved pointers */
-				else {
-					qwk_success(msgcnt,1,0);
-					for(i=0;i<total_subs;i++)
-						sav_ptr[i]=sub[i]->ptr; } }
-			else if(j) {
-				logline("D!",AttemptedToDownloadQWKpacket);
-				last_ns_time=ns_time;
-				for(i=0;i<total_subs;i++)
-					sub[i]->ptr=sav_ptr[i]; }
-			else {
-				qwk_success(msgcnt,1,0);
-				for(i=0;i<total_subs;i++)
-					sav_ptr[i]=sub[i]->ptr; }
-			sprintf(str,"%s%s.QWK",temp_dir,sys_id);
-			remove(str);
-			unpack_rep();
-			delfiles(temp_dir,"*.*");
-			//autohangup();
-			}
-		else {
-			last_ns_time=ns_time;
-			for(i=0;i<total_subs;i++)
-				sub[i]->ptr=sav_ptr[i]; } }
-
-	else if(ch=='D') {   /* Download QWK Packet of new messages */
-		sprintf(str,"%s%s.QWK",temp_dir,sys_id);
-		if(!fexist(str) && !pack_qwk(str,&msgcnt,0)) {
-			for(i=0;i<total_subs;i++)
-				sub[i]->ptr=sav_ptr[i];
-			last_ns_time=ns_time;
-			remove(str);
-			continue; }
-		if(online==ON_LOCAL) {			/* Local QWK packet creation */
-			bputs(text[EnterPath]);
-			if(!getstr(str,60,K_LINE|K_UPPER)) {
-				for(i=0;i<total_subs;i++)
-					sub[i]->ptr=sav_ptr[i];   /* re-load saved pointers */
-				last_ns_time=ns_time;
-				continue; }
-			backslashcolon(str);
-			sprintf(tmp2,"%s%s.QWK",str,sys_id);
-			if(fexist(tmp2)) {
-				for(i=0;i<10;i++) {
-					sprintf(tmp2,"%s%s.QW%d",str,sys_id,i);
-					if(!fexist(tmp2))
-						break; }
-				if(i==10) {
-					bputs(text[FileAlreadyThere]);
-					last_ns_time=ns_time;
-					for(i=0;i<total_subs;i++)
-						sub[i]->ptr=sav_ptr[i];
-					continue; } }
-			sprintf(tmp,"%s%s.QWK",temp_dir,sys_id);
-			if(mv(tmp,tmp2,0)) { /* unsuccessful */
-				for(i=0;i<total_subs;i++)
-					sub[i]->ptr=sav_ptr[i];
-				last_ns_time=ns_time; }
-			else {
-				bprintf(text[FileNBytesSent],tmp2,ultoac(flength(tmp2),tmp));
-				qwk_success(msgcnt,0,0);
-				for(i=0;i<total_subs;i++)
-					sav_ptr[i]=sub[i]->ptr; }
-			continue; }
-
-		/***************/
-		/* Send Packet */
-		/***************/
-		menu("DLPROT");
-		mnemonics(text[ProtocolOrQuit]);
-		strcpy(tmp2,"Q");
-		for(i=0;i<total_prots;i++)
-			if(prot[i]->dlcmd[0] && chk_ar(prot[i]->ar,useron)) {
-				sprintf(tmp,"%c",prot[i]->mnemonic);
-				strcat(tmp2,tmp); }
-		ungetkey(useron.prot);
-		ch=getkeys(tmp2,0);
-		if(ch=='Q' || sys_status&SS_ABORT) {
-			for(i=0;i<total_subs;i++)
-				sub[i]->ptr=sav_ptr[i];   /* re-load saved pointers */
-			last_ns_time=ns_time;
-			continue; }
-		for(i=0;i<total_prots;i++)
-			if(prot[i]->dlcmd[0] && prot[i]->mnemonic==ch
-				&& chk_ar(prot[i]->ar,useron))
-				break;
-		if(i<total_prots) {
-			sprintf(str,"%s%s.QWK",temp_dir,sys_id);
-			sprintf(tmp2,"%s.QWK",sys_id);
-			padfname(tmp2,fd.name);
-			j=protocol(cmdstr(prot[i]->dlcmd,str,nulstr,NULL),0);
-			if(prot[i]->misc&PROT_DSZLOG) {
-				if(!checkprotlog(fd)) {
-					last_ns_time=ns_time;
-					for(i=0;i<total_subs;i++)
-						sub[i]->ptr=sav_ptr[i]; } /* re-load saved pointers */
-                else {
-					qwk_success(msgcnt,0,0);
-					for(i=0;i<total_subs;i++)
-						sav_ptr[i]=sub[i]->ptr; } }
-			else if(j) {
-				logline("D!",AttemptedToDownloadQWKpacket);
-				last_ns_time=ns_time;
-				for(i=0;i<total_subs;i++)
-					sub[i]->ptr=sav_ptr[i]; }
-			else {
-				qwk_success(msgcnt,0,0);
-				for(i=0;i<total_subs;i++)
-					sav_ptr[i]=sub[i]->ptr; }
-			autohangup(); }
-		else {	 /* if not valid protocol (hungup?) */
-			for(i=0;i<total_subs;i++)
-				sub[i]->ptr=sav_ptr[i];
-			last_ns_time=ns_time; } }
-
-	else if(ch=='U') { /* Upload REP Packet */
-/*
-		if(useron.rest&FLAG('Q') && useron.rest&FLAG('P')) {
-			bputs(text[R_Post]);
-			continue; }
-*/
-
-		delfiles(temp_dir,"*.*");
-		bprintf(text[UploadingREP],sys_id);
-		for(k=0;k<total_fextrs;k++)
-			if(!stricmp(fextr[k]->ext,useron.tmpext)
-				&& chk_ar(fextr[k]->ar,useron))
-				break;
-		if(k>=total_fextrs) {
-			bputs(text[QWKExtractionFailed]);
-			errorlog("Couldn't extract REP packet - configuration error");
-			continue; }
-
-		if(online==ON_LOCAL) {		/* Local upload of rep packet */
-			bputs(text[EnterPath]);
-			if(!getstr(str,60,K_LINE|K_UPPER))
-				continue;
-			backslashcolon(str);
-			sprintf(tmp,"%s.REP",sys_id);
-			strcat(str,tmp);
-			sprintf(tmp,"%s%s.REP",temp_dir,sys_id);
-			if(!mv(str,tmp,0))
-				unpack_rep();
-			delfiles(temp_dir,"*.*");
-            continue; }
-
-		/******************/
-		/* Receive Packet */
-		/******************/
-		menu("ULPROT");
-		mnemonics(text[ProtocolOrQuit]);
-		strcpy(tmp2,"Q");
-		for(i=0;i<total_prots;i++)
-			if(prot[i]->ulcmd[0] && chk_ar(prot[i]->ar,useron)) {
-				sprintf(tmp,"%c",prot[i]->mnemonic);
-				strcat(tmp2,tmp); }
-		ch=getkeys(tmp2,0);
-		if(ch=='Q' || sys_status&SS_ABORT)
-			continue;
-		for(i=0;i<total_prots;i++)
-			if(prot[i]->ulcmd[0] && prot[i]->mnemonic==ch
-				&& chk_ar(prot[i]->ar,useron))
-				break;
-		if(i>=total_prots)	/* This shouldn't happen */
-			continue;
-		sprintf(str,"%s%s.REP",temp_dir,sys_id);
-		protocol(cmdstr(prot[i]->ulcmd,str,nulstr,NULL),0);
-		unpack_rep();
-		delfiles(temp_dir,"*.*");
-		//autohangup();
-		} }
-delfiles(temp_dir,"*.*");
-FREE(sav_ptr);
-}
-
-void qwksetptr(uint subnum, char *buf, int reset)
-{
-	long	l;
-	ulong	last;
-
-if(buf[2]=='/' && buf[5]=='/') {    /* date specified */
-	l=dstrtounix(buf);
-	sub[subnum]->ptr=getmsgnum(subnum,l);
-	return; }
-l=atol(buf);
-if(l>=0)							  /* ptr specified */
-	sub[subnum]->ptr=l;
-else if(l) {						  /* relative ptr specified */
-	getlastmsg(subnum,&last,0);
-	if(-l>last)
-		sub[subnum]->ptr=0;
-	else
-		sub[subnum]->ptr=last+l; }
-else if(reset)
-	getlastmsg(subnum,&sub[subnum]->ptr,0);
-}
-
-
-/****************************************************************************/
-/* Process a QWK Config line												*/
-/****************************************************************************/
-void qwkcfgline(char *buf,uint subnum)
-{
-	char	str[128];
-	int 	x,y;
-	long	l;
-	ulong	qwk=useron.qwk,last;
-	file_t	f;
-
-sprintf(str,"%.25s",buf);
-strupr(str);
-bprintf("\1n\r\n\1b\1hQWK Control [\1c%s\1b]: \1g%s\r\n"
-	,subnum==INVALID_SUB ? "Mail":sub[subnum]->qwkname,str);
-
-if(subnum!=INVALID_SUB) {					/* Only valid in sub-boards */
-
-	if(!strncmp(str,"DROP ",5)) {              /* Drop from new-scan */
-		l=atol(str+5);
-		if(!l)
-			sub[subnum]->misc&=~SUB_NSCAN;
-		else {
-			x=l/1000;
-			y=l-(x*1000);
-			if(x>=usrgrps || y>=usrsubs[x]) {
-				bprintf(text[QWKInvalidConferenceN],l);
-				sprintf(str,"Invalid conference number %lu",l);
-				logline("Q!",str); }
-			else
-				sub[usrsub[x][y]]->misc&=~SUB_NSCAN; }
-		return; }
-
-	if(!strncmp(str,"ADD YOURS ",10)) {               /* Add to new-scan */
-		sub[subnum]->misc|=(SUB_NSCAN|SUB_YSCAN);
-		qwksetptr(subnum,str+10,0);
-		return; }
-
-	else if(!strncmp(str,"YOURS ",6)) {
-		sub[subnum]->misc|=(SUB_NSCAN|SUB_YSCAN);
-		qwksetptr(subnum,str+6,0);
-		return; }
-
-	else if(!strncmp(str,"ADD ",4)) {               /* Add to new-scan */
-        sub[subnum]->misc|=SUB_NSCAN;
-        sub[subnum]->misc&=~SUB_YSCAN;
-		qwksetptr(subnum,str+4,0);
-		return; }
-
-	if(!strncmp(str,"RESET ",6)) {             /* set msgptr */
-		qwksetptr(subnum,str+6,1);
-		return; }
-
-	if(!strncmp(str,"SUBPTR ",7)) {
-		qwksetptr(subnum,str+7,1);
-		return; }
-	}
-
-if(!strncmp(str,"RESETALL ",9)) {              /* set all ptrs */
-	for(x=0;x<usrgrps;x++)
-		for(y=0;y<usrsubs[x];y++)
-			if(sub[usrsub[x][y]]->misc&SUB_NSCAN)
-				qwksetptr(usrsub[x][y],str+9,1); }
-
-else if(!strncmp(str,"ALLPTR ",7)) {              /* set all ptrs */
-	for(x=0;x<usrgrps;x++)
-		for(y=0;y<usrsubs[x];y++)
-			if(sub[usrsub[x][y]]->misc&SUB_NSCAN)
-				qwksetptr(usrsub[x][y],str+7,1); }
-
-else if(!strncmp(str,"FILES ",6)) {                 /* files list */
-	if(!strncmp(str+6,"ON ",3))
-		useron.qwk|=QWK_FILES;
-	else if(str[8]=='/' && str[11]=='/') {      /* set scan date */
-		useron.qwk|=QWK_FILES;
-		ns_time=dstrtounix(str+6); }
-	else
-		useron.qwk&=~QWK_FILES; }
-
-else if(!strncmp(str,"OWN ",4)) {                   /* message from you */
-	if(!strncmp(str+4,"ON ",3))
-		useron.qwk|=QWK_BYSELF;
-	else
-		useron.qwk&=~QWK_BYSELF;
-	return; }
-
-else if(!strncmp(str,"NDX ",4)) {                   /* include indexes */
-	if(!strncmp(str+4,"OFF ",4))
-		useron.qwk|=QWK_NOINDEX;
-	else
-		useron.qwk&=~QWK_NOINDEX; }
-
-else if(!strncmp(str,"CONTROL ",8)) {               /* exclude ctrl files */
-	if(!strncmp(str+8,"OFF ",4))
-		useron.qwk|=QWK_NOCTRL;
-	else
-		useron.qwk&=~QWK_NOCTRL; }
-
-else if(!strncmp(str,"VIA ",4)) {                   /* include @VIA: */
-	if(!strncmp(str+4,"ON  ",3))
-		useron.qwk|=QWK_VIA;
-	else
-		useron.qwk&=~QWK_VIA; }
-
-else if(!strncmp(str,"TZ ",3)) {                    /* include @TZ: */
-	if(!strncmp(str+3,"ON ",3))
-		useron.qwk|=QWK_TZ;
-    else
-		useron.qwk&=~QWK_TZ; }
-
-else if(!strncmp(str,"ATTACH ",7)) {                /* file attachments */
-	if(!strncmp(str+7,"ON ",3))
-        useron.qwk|=QWK_ATTACH;
-    else
-        useron.qwk&=~QWK_ATTACH; }
-
-else if(!strncmp(str,"DELMAIL ",8)) {               /* delete mail */
-	if(!strncmp(str+8,"ON ",3))
-		useron.qwk|=QWK_DELMAIL;
-	else
-		useron.qwk&=~QWK_DELMAIL; }
-
-else if(!strncmp(str,"CTRL-A ",7)) {                /* Ctrl-a codes  */
-	if(!strncmp(str+7,"KEEP ",5)) {
-		useron.qwk|=QWK_RETCTLA;
-		useron.qwk&=~QWK_EXPCTLA; }
-	else if(!strncmp(str+7,"EXPAND ",7)) {
-		useron.qwk|=QWK_EXPCTLA;
-		useron.qwk&=~QWK_RETCTLA; }
-	else
-		useron.qwk&=~(QWK_EXPCTLA|QWK_RETCTLA); }
-
-else if(!strncmp(str,"MAIL ",5)) {                  /* include e-mail */
-	if(!strncmp(str+5,"ALL ",4)) {
-		useron.qwk|=QWK_ALLMAIL;
-		useron.qwk&=~QWK_EMAIL; }
-	else if(!strncmp(str+5,"ON ",3)) {
-		useron.qwk|=QWK_EMAIL;
-		useron.qwk&=~QWK_ALLMAIL; }
-	else
-		useron.qwk&=~(QWK_ALLMAIL|QWK_EMAIL); }
-
-else if(!strncmp(str,"FREQ ",5)) {                  /* file request */
-	padfname(str+5,f.name);
-	strupr(f.name);
-	for(x=0;x<usrlibs;x++) {
-		for(y=0;y<usrdirs[x];y++)
-			if(findfile(usrdir[x][y],f.name))
-				break;
-		if(y<usrdirs[x])
-			break; }
-	if(x>=usrlibs) {
-		bprintf("\r\n%s",f.name);
-		bputs(text[FileNotFound]); }
-	else {
-		f.dir=usrdir[x][y];
-		getfileixb(&f);
-		f.size=0;
-        getfiledat(&f);
-		if(f.size==-1L)
-			bprintf(text[FileIsNotOnline],f.name);
-		else
-			addtobatdl(f); } }
-
-else bputs("\1r\1h\1iUnrecognized Control Command!\1n\r\n");
-
-if(qwk!=useron.qwk)
-	putuserrec(useron.number,U_QWK,8,ultoa(useron.qwk,tmp,16));
-}
-
-
diff --git a/src/sbbs2/qwk.h b/src/sbbs2/qwk.h
deleted file mode 100644
index d1b48dcb70..0000000000
--- a/src/sbbs2/qwk.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* QWK.H */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-typedef union {
-	uchar	uc[10];
-	ushort	ui[5];
-	ulong	ul[2];
-	float	f[2];
-	double	d[1]; } converter;
-
-#define LEN_QWKBUF	20000	/* 20k buffer for each message */
-#define TAGLINE 	(1<<5)	/* Place tagline at end of qwk message */
-#define TO_QNET 	(1<<6)	/* Sending to hub */
-#define REP 		(1<<7)	/* It's a REP packet */
-#define VIA 		(1<<8)	/* Include VIA */
-#define TZ			(1<<9)	/* Include TZ */
-
-void qwk_success(ulong msgcnt, char bi, char prepack);
-char pack_qwk(char *packet, ulong *msgcnt, int prepack);
-void unpack_qwk(char *packet, uint hubnum);
-char pack_rep(uint hubnum);
-void unpack_rep(void);
-void remove_ctrl_a(char *instr);
-ulong msgtoqwk(smbmsg_t msg, FILE *qwk_fp, int mode, int subnum
-	, int conf);
-char qwktomsg(FILE *qwk_fp, uchar *hdrblk, char fromhub, uint subnum
-	, uint touser);
-void qwkcfgline(char *buf,uint subnum);
-float	ltomsbin(long val);
-int qwk_route(char *inaddr, char *fulladdr);
-int route_circ(char *via, char *id);
-void update_qwkroute(char *via);
-
-extern time_t qwkmail_time;
diff --git a/src/sbbs2/qwknodes/make.bat b/src/sbbs2/qwknodes/make.bat
deleted file mode 100755
index dc1d6ab601..0000000000
--- a/src/sbbs2/qwknodes/make.bat
+++ /dev/null
@@ -1,2 +0,0 @@
-@echo off
-bcc -w-pro -N -ml -C -I..;..\smb;..\rio qwknodes.c ..\ars.c ..\scfglib1.c ..\scfgvars.c ..\smb\smblib.c
diff --git a/src/sbbs2/qwknodes/qwknodes.c b/src/sbbs2/qwknodes/qwknodes.c
deleted file mode 100644
index 2a063c32cc..0000000000
--- a/src/sbbs2/qwknodes/qwknodes.c
+++ /dev/null
@@ -1,500 +0,0 @@
-/* QWKNODES.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* Generates QWKnet node list or ROUTE.DAT file from Synchronet message base */
-
-#include "sbbs.h"
-#include "crc32.h"
-#include "crc16.c"
-
-unsigned _stklen=10000;
-smb_t	 smb;
-
-/****************************************************************************/
-/* Returns 32-crc of string (not counting terminating NULL) 				*/
-/****************************************************************************/
-ulong crc32(char *str)
-{
-	int i=0;
-	ulong crc=0xffffffffUL;
-
-	while(str[i])
-		crc=ucrc32(str[i++],crc);
-	crc=~crc;
-	return(crc);
-}
-
-/****************************************************************************/
-/* Converts unix time format (long - time_t) into a char str MM/DD/YY		*/
-/****************************************************************************/
-char *unixtodstr(time_t unix, char *str)
-{
-	struct date date;
-	struct time curtime;
-
-if(!unix)
-	strcpy(str,"00/00/00");
-else {
-	unixtodos(unix,&date,&curtime);
-	if((unsigned)date.da_mon>12) {	  /* DOS leap year bug */
-		date.da_mon=1;
-		date.da_year++; }
-	if((unsigned)date.da_day>31)
-		date.da_day=1;
-	if(sys_misc&SM_EURODATE)
-		sprintf(str,"%02u/%02u/%02u",date.da_day,date.da_mon
-			,date.da_year>=2000 ? date.da_year-2000 : date.da_year-1900);
-	else
-		sprintf(str,"%02u/%02u/%02u",date.da_mon,date.da_day
-			,date.da_year>=2000 ? date.da_year-2000 : date.da_year-1900); }
-return(str);
-}
-
-/****************************************************************************/
-/* Puts a backslash on path strings 										*/
-/****************************************************************************/
-void backslash(char *str)
-{
-    int i;
-
-i=strlen(str);
-if(i && str[i-1]!='\\') {
-    str[i]='\\'; str[i+1]=0; }
-}
-/****************************************************************************/
-/* Network open function. Opens all files DENYALL and retries LOOP_NOPEN    */
-/* number of times if the attempted file is already open or denying access	*/
-/* for some other reason.	All files are opened in BINARY mode.			*/
-/****************************************************************************/
-int nopen(char *str, int access)
-{
-	char logstr[256];
-	int file,share,count=0;
-
-if(access==O_RDONLY) share=SH_DENYWR;
-	else share=SH_DENYRW;
-while(((file=sopen(str,O_BINARY|access,share,S_IWRITE))==-1)
-	&& errno==EACCES && count++<LOOP_NOPEN);
-if(file==-1 && errno==EACCES)
-	lputs("\7\r\nNOPEN: ACCESS DENIED\r\n\7");
-return(file);
-}
-/****************************************************************************/
-/* This function performs an nopen, but returns a file stream with a buffer */
-/* allocated.																*/
-/****************************************************************************/
-FILE *fnopen(int *file, char *str, int access)
-{
-	char mode[128];
-	FILE *stream;
-
-if(((*file)=nopen(str,access))==-1)
-	return(NULL);
-
-if(access&O_APPEND) {
-	if(access&O_RDONLY)
-		strcpy(mode,"a+");
-	else
-		strcpy(mode,"a"); }
-else {
-	if(access&O_WRONLY)
-		strcpy(mode,"r+");
-	else
-		strcpy(mode,"r"); }
-stream=fdopen((*file),mode);
-if(stream==NULL) {
-	close(*file);
-	return(NULL); }
-setvbuf(stream,NULL,_IOFBF,16*1024);
-return(stream);
-}
-
-/****************************************************************************/
-/* Truncates white-space chars off end of 'str' and terminates at first tab */
-/****************************************************************************/
-void truncsp(char *str)
-{
-	uchar c;
-
-c=strlen(str);
-while(c && (uchar)str[c-1]<=SP) c--;
-str[c]=0;
-}
-
-void stripctrla(uchar *str)
-{
-	uchar out[256];
-	int i,j;
-
-for(i=j=0;str[i];i++) {
-	if(str[i]==1)
-		i++;
-	else
-		out[j++]=str[i]; }
-out[j]=0;
-strcpy(str,out);
-}
-
-
-long lputs(char FAR16 *str)
-{
-    char tmp[256];
-    int i,j,k;
-
-j=strlen(str);
-for(i=k=0;i<j;i++)      /* remove CRs */
-    if(str[i]==CR && str[i+1]==LF)
-        continue;
-    else
-        tmp[k++]=str[i];
-tmp[k]=0;
-return(fputs(tmp,stderr));
-}
-/****************************************************************************/
-/* Performs printf() through local assembly routines                        */
-/* Called from everywhere                                                   */
-/****************************************************************************/
-int lprintf(char *fmat, ...)
-{
-	va_list argptr;
-	char sbuf[256];
-	int chcount;
-
-va_start(argptr,fmat);
-chcount=vsprintf(sbuf,fmat,argptr);
-va_end(argptr);
-lputs(sbuf);
-return(chcount);
-}
-void bail(int code)
-{
-exit(code);
-}
-
-
-char *loadmsgtail(smbmsg_t msg)
-{
-	char	*buf=NULL;
-	ushort	xlat;
-	int 	i;
-	long	l=0,length;
-
-for(i=0;i<msg.hdr.total_dfields;i++) {
-	if(msg.dfield[i].type!=TEXT_TAIL)
-		continue;
-	fseek(smb.sdt_fp,msg.hdr.offset+msg.dfield[i].offset
-		,SEEK_SET);
-	fread(&xlat,2,1,smb.sdt_fp);
-	if(xlat!=XLAT_NONE) 		/* no translations supported */
-		continue;
-	length=msg.dfield[i].length-2;
-	if((buf=REALLOC(buf,l+msg.dfield[i].length+1))==NULL)
-		return(buf);
-	l+=fread(buf+l,1,length,smb.sdt_fp);
-	buf[l]=0; }
-return(buf);
-}
-
-
-void gettag(smbmsg_t msg, char *tag)
-{
-	char *buf,*p;
-
-tag[0]=0;
-buf=loadmsgtail(msg);
-if(buf==NULL)
-	return;
-truncsp(buf);
-stripctrla(buf);
-p=strrchr(buf,LF);
-if(!p) p=buf;
-else p++;
-if(!strnicmp(p," � Synchronet � ",16))
-	p+=16;
-if(!strnicmp(p," * Synchronet * ",16))
-    p+=16;
-while(*p && *p<=SP) p++;
-strcpy(tag,p);
-FREE(buf);
-}
-
-
-#define FEED   (1<<0)
-#define LOCAL  (1<<1)
-#define APPEND (1<<2)
-#define TAGS   (1<<3)
-
-#define ROUTE  (1<<1)
-#define NODES  (1<<2)
-#define USERS  (1<<3)
-
-char *usage="\nusage: qwknodes [/opts] cmds"
-			"\n"
-			"\n cmds: r  =  create ROUTE.DAT"
-			"\n       u  =  create USERS.DAT"
-			"\n       n  =  create NODES.DAT"
-			"\n"
-			"\n opts: f  =  format addresses for nodes that feed from this system"
-			"\n       a  =  append existing output files"
-			"\n       t  =  include tag lines in NODES.DAT"
-			"\n       l  =  include local users in USERS.DAT"
-			"\n       m# =  maximum message age set to # days"
-			"\n";
-
-void main(int argc, char **argv)
-{
-	char			str[256],tmp[128],tag[256],addr[256],*p;
-	int 			i,j,mode=0,cmd=0,o_mode,max_age=0;
-	ushort			smm,sbl;
-	ulong			*crc=NULL,curcrc,total_crcs=0,l;
-	FILE			*route,*users,*nodes;
-	time_t			now;
-	read_cfg_text_t txt;
-	smbstatus_t 	status;
-	smbmsg_t		msg;
-
-txt.openerr="\7\r\nError opening %s for read.\r\n";
-txt.reading="\r\nReading %s...";
-txt.readit="\rRead %s       ";
-txt.allocerr="\7\r\nError allocating %u bytes of memory\r\n";
-txt.error="\7\r\nERROR: Offset %lu in %s\r\n\r\n";
-
-fprintf(stderr,"\nSynchronet QWKnet Node/Route/User List  v1.20  "
-	"Developed 1995-1997 Rob Swindell\n");
-
-
-for(i=1;i<argc;i++)
-	for(j=0;argv[i][j];j++)
-		switch(toupper(argv[i][j])) {
-			case '/':
-			case '-':
-				while(argv[i][++j])
-					switch(toupper(argv[i][j])) {
-						case 'F':
-							mode|=FEED;
-							break;
-						case 'L':
-							mode|=LOCAL;
-							break;
-						case 'A':
-							mode|=APPEND;
-							break;
-						case 'T':
-							mode|=TAGS;
-							break;
-						case 'M':
-							j++;
-							max_age=atoi(argv[i]+j);
-							while(isdigit(argv[i][j+1])) j++;
-							break;
-						default:
-							printf(usage);
-							exit(1); }
-				j--;
-				break;
-			case 'R':
-				cmd|=ROUTE;
-				break;
-			case 'U':
-				cmd|=USERS;
-				break;
-			case 'N':
-				cmd|=NODES;
-				break;
-			default:
-				printf(usage);
-				exit(1); }
-
-if(!cmd) {
-	printf(usage);
-	exit(1); }
-
-if(mode&APPEND)
-	o_mode=O_WRONLY|O_CREAT|O_APPEND;
-else
-	o_mode=O_WRONLY|O_CREAT|O_TRUNC;
-
-if(cmd&NODES)
-	if((nodes=fnopen(&i,"NODES.DAT",o_mode))==NULL) {
-		printf("\7\nError opening NODES.DAT\n");
-		exit(1); }
-
-if(cmd&USERS)
-	if((users=fnopen(&i,"USERS.DAT",o_mode))==NULL) {
-		printf("\7\nError opening USERS.DAT\n");
-        exit(1); }
-
-if(cmd&ROUTE)
-	if((route=fnopen(&i,"ROUTE.DAT",o_mode))==NULL) {
-		printf("\7\nError opening ROUTE.DAT\n");
-        exit(1); }
-
-if(!node_dir[0]) {
-	p=getenv("SBBSNODE");
-	if(p==NULL) {
-		printf("\7\nSBBSNODE environment variable not set.\n");
-		exit(1); }
-	strcpy(node_dir,p); }
-
-strupr(node_dir);
-
-if(node_dir[strlen(node_dir)-1]!='\\')
-	strcat(node_dir,"\\");
-
-read_node_cfg(txt);
-if(ctrl_dir[0]=='.') {   /* Relative path */
-	strcpy(str,ctrl_dir);
-	sprintf(ctrl_dir,"%s%s",node_dir,str);
-	if(_fullpath(str,ctrl_dir,40))
-		strcpy(ctrl_dir,str); }
-backslash(ctrl_dir);
-
-read_main_cfg(txt);
-if(data_dir[0]=='.') {   /* Relative path */
-	strcpy(str,data_dir);
-	sprintf(data_dir,"%s%s",node_dir,str);
-	if(_fullpath(str,data_dir,40))
-		strcpy(data_dir,str); }
-backslash(data_dir);
-read_msgs_cfg(txt);
-
-now=time(NULL);
-smm=crc16("smm");
-sbl=crc16("sbl");
-fprintf(stderr,"\n\n");
-for(i=0;i<total_subs;i++) {
-	if(!(sub[i]->misc&SUB_QNET))
-		continue;
-	fprintf(stderr,"%-*s  %s\n"
-		,LEN_GSNAME,grp[sub[i]->grp]->sname,sub[i]->lname);
-	sprintf(smb.file,"%s%s",sub[i]->data_dir,sub[i]->code);
-	smb.retry_time=30;
-	if((j=smb_open(&smb))!=0) {
-		printf("smb_open returned %d\n",j);
-		continue; }
-	if((j=smb_locksmbhdr(&smb))!=0) {
-		printf("smb_locksmbhdr returned %d\n",j);
-		smb_close(&smb);
-		continue; }
-	if((j=smb_getstatus(&smb))!=0) {
-		printf("smb_getstatus returned %d\n",j);
-		smb_close(&smb);
-		continue; }
-	smb_unlocksmbhdr(&smb);
-	msg.offset=status.total_msgs;
-	if(!msg.offset) {
-		smb_close(&smb);
-		printf("Empty.\n");
-		continue; }
-	while(!kbhit() && !ferror(smb.sid_fp) && msg.offset) {
-		msg.offset--;
-		fseek(smb.sid_fp,msg.offset*sizeof(idxrec_t),SEEK_SET);
-		if(!fread(&msg.idx,1,sizeof(idxrec_t),smb.sid_fp))
-			break;
-		fprintf(stderr,"%-5lu\r",msg.offset+1);
-		if(msg.idx.to==smm || msg.idx.to==sbl)
-			continue;
-		if(max_age && now-msg.idx.time>((ulong)max_age*24UL*60UL*60UL))
-			continue;
-		if((j=smb_lockmsghdr(&smb,&msg))!=0) {
-			printf("smb_lockmsghdr returned %d\n",j);
-			break; }
-		if((j=smb_getmsghdr(&smb,&msg))!=0) {
-			printf("smb_getmsghdr returned %d\n",j);
-            break; }
-		smb_unlockmsghdr(&smb,&msg);
-		if((mode&LOCAL && msg.from_net.type==NET_NONE)
-			|| msg.from_net.type==NET_QWK) {
-			if(msg.from_net.type!=NET_QWK)
-				msg.from_net.addr="";
-			if(cmd&USERS) {
-				sprintf(str,"%s%s",msg.from_net.addr,msg.from);
-				curcrc=crc32(str); }
-			else
-				curcrc=crc32(msg.from_net.addr);
-			for(l=0;l<total_crcs;l++)
-				if(curcrc==crc[l])
-					break;
-			if(l==total_crcs) {
-				total_crcs++;
-				if((crc=(ulong *)REALLOC(crc
-					,sizeof(ulong)*total_crcs))==NULL) {
-					printf("Error allocating %lu bytes\n"
-						,sizeof(ulong)*total_crcs);
-					break; }
-				crc[l]=curcrc;
-				if(cmd&ROUTE && msg.from_net.type==NET_QWK) {
-					strcpy(addr,msg.from_net.addr);
-					if(mode&FEED) {
-						p=strrchr(addr,'/');
-						if(!p)
-							p=addr;
-						else
-							*(p++)=0;
-						sprintf(str,"%s %s:%s%c%s"
-							,unixtodstr(msg.hdr.when_written.time,tmp)
-							,p,sys_id,p==addr ? 0 : '/'
-							,addr);
-						fprintf(route,"%s\r\n",str); }
-					else {
-						p=strrchr(addr,'/');
-						if(p) {
-							*(p++)=0;
-						fprintf(route,"%s %s:%.*s\r\n"
-							,unixtodstr(msg.hdr.when_written.time,str)
-							,p
-							,(uint)(p-addr)
-							,addr); } } }
-				if(cmd&USERS) {
-					if(msg.from_net.type!=NET_QWK)
-						strcpy(str,sys_id);
-					else if(mode&FEED)
-						sprintf(str,"%s/%s",sys_id,msg.from_net.addr);
-					else
-						strcpy(str,msg.from_net.addr);
-					p=strrchr(str,'/');
-                    if(p)
-						fprintf(users,"%-25.25s  %-8.8s  %s  (%s)\r\n"
-							,msg.from,p+1
-							,unixtodstr(msg.hdr.when_written.time,tmp)
-							,str);
-					else
-						fprintf(users,"%-25.25s  %-8.8s  %s\r\n"
-							,msg.from,str
-							,unixtodstr(msg.hdr.when_written.time,tmp)); }
-				if(cmd&NODES && msg.from_net.type==NET_QWK) {
-					if(mode&TAGS)
-						gettag(msg,tag);
-					if(mode&FEED)
-						sprintf(str,"%s/%s",sys_id,msg.from_net.addr);
-					else
-						strcpy(str,msg.from_net.addr);
-					p=strrchr(str,'/');
-					if(p) {
-						if(mode&TAGS)
-							fprintf(nodes,"%-8.8s  %s\r\n"
-								,p+1
-								,tag);
-						else
-							fprintf(nodes,"%-8.8s  %s  (%s)\r\n"
-								,p+1
-								,unixtodstr(msg.hdr.when_written.time,tmp)
-								,str); }
-					else
-						fprintf(nodes,"%-8.8s  %s\r\n"
-							,str
-							,mode&TAGS
-							? tag
-							: unixtodstr(msg.hdr.when_written.time,tmp)); }
-				} }
-		smb_freemsgmem(&msg); }
-
-	smb_close(&smb);
-	if(kbhit()) {
-		getch();
-		fprintf(stderr,"Key pressed.\n");
-		break; } }
-fprintf(stderr,"Done.\n");
-}
-
diff --git a/src/sbbs2/qwktomsg.c b/src/sbbs2/qwktomsg.c
deleted file mode 100644
index e3d43dd12b..0000000000
--- a/src/sbbs2/qwktomsg.c
+++ /dev/null
@@ -1,350 +0,0 @@
-#line 1 "QWKTOMSG.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-#include "qwk.h"
-
-/****************************************************************************/
-/* Converts a QWK message packet into a message. The 'qwkbuf' pointer       */
-/* points to the message header and 'str' is the file to output to.         */
-/* Returns the 1 on success or 0 if failure.								*/
-/****************************************************************************/
-char qwktomsg(FILE *qwk_fp, uchar *hdrblk, char fromhub, uint subnum
-	, uint touser)
-{
-	uchar	str[256],*body,*tail,col=0,lastch=0,*p,*lzhbuf,qwkbuf[128];
-	int 	file,i,j,k,lzh=0,storage,skip=0;
-	ushort	xlat;
-	long	l,bodylen,taillen,length;
-	ulong	crc,block,blocks;
-	smbmsg_t	msg;
-
-memset(&msg,0,sizeof(smbmsg_t));		/* Initialize message header */
-memcpy(msg.hdr.id,"SHD\x1a",4);
-msg.hdr.version=smb_ver();
-
-blocks=atol(hdrblk+116);
-if(blocks<2)
-	return(0);
-
-if(subnum!=INVALID_SUB
-	&& (hdrblk[0]=='*' || hdrblk[0]=='+' || sub[subnum]->misc&SUB_PONLY))
-	msg.idx.attr|=MSG_PRIVATE;
-if(subnum!=INVALID_SUB && sub[subnum]->misc&SUB_AONLY)
-	msg.idx.attr|=MSG_ANONYMOUS;
-if(subnum==INVALID_SUB && sys_misc&SM_DELREADM)
-	msg.idx.attr|=MSG_KILLREAD;
-if((fromhub || useron.rest&FLAG('Q')) &&
-	(hdrblk[0]=='*' || hdrblk[0]=='-' || hdrblk[0]=='`'))
-	msg.idx.attr|=MSG_READ;
-
-if(subnum!=INVALID_SUB && !fromhub && sub[subnum]->mod_ar[0]
-	&& chk_ar(sub[subnum]->mod_ar,useron))
-	msg.idx.attr|=MSG_MODERATED;
-if(subnum!=INVALID_SUB && !fromhub && sub[subnum]->misc&SUB_SYSPERM
-	&& sub_op(subnum))
-	msg.idx.attr|=MSG_PERMANENT;
-
-msg.hdr.attr=msg.idx.attr;
-
-date.da_mon=((hdrblk[8]&0xf)*10)+(hdrblk[9]&0xf);
-date.da_day=((hdrblk[11]&0xf)*10)+(hdrblk[12]&0xf);
-date.da_year=((hdrblk[14]&0xf)*10)+(hdrblk[15]&0xf);
-if(date.da_year<Y2K_2DIGIT_WINDOW)
-	date.da_year+=100;
-date.da_year+=1900;
-curtime.ti_hour=((hdrblk[16]&0xf)*10)+(hdrblk[17]&0xf);
-curtime.ti_min=((hdrblk[19]&0xf)*10)+(hdrblk[20]&0xf);
-curtime.ti_sec=0;
-msg.hdr.when_written.time=dostounix(&date,&curtime);
-if(!(useron.rest&FLAG('Q')) && !fromhub)
-	msg.hdr.when_written.zone=sys_timezone;
-msg.hdr.when_imported.time=time(NULL);
-msg.hdr.when_imported.zone=sys_timezone;
-
-hdrblk[116]=0; /* don't bleed number-of-blocks and re-msg-num fields together */
-msg.hdr.thread_orig=atol(hdrblk+108);
-
-if((uint)subnum==INVALID_SUB) { 		/* E-mail */
-	msg.idx.to=touser;
-
-/***					Unnecessary code in v2.10a
-	if(!touser) {
-		sprintf(str,"%25.25s",hdrblk+21);
-		truncsp(str);
-		for(i=0;i<total_qhubs;i++)
-			if(!stricmp(qhub[i]->id,str))
-				break;
-		if(i==total_qhubs) {
-			errormsg(WHERE,ERR_CHK,str,0);
-			return(0); }
-		smb_hfield(&msg,RECIPIENT,strlen(str),str); }
-	else {
-***/
-		username(touser,str);
-		smb_hfield(&msg,RECIPIENT,strlen(str),str);
-		sprintf(str,"%u",touser);
-		smb_hfield(&msg,RECIPIENTEXT,strlen(str),str); }
-
-else {
-	sprintf(str,"%25.25s",hdrblk+21);     /* To user */
-	truncsp(str);
-	smb_hfield(&msg,RECIPIENT,strlen(str),str);
-	strlwr(str);
-	msg.idx.to=crc16(str); }
-
-fread(qwkbuf,1,128,qwk_fp);
-
-if(useron.rest&FLAG('Q') || fromhub) {      /* QWK Net */
-	if(!strnicmp(qwkbuf,"@VIA:",5)) {
-		p=strchr(qwkbuf,'\xe3');
-		if(p) {
-			*p=0;
-			skip=strlen(qwkbuf)+1; }
-		truncsp(qwkbuf);
-		p=qwkbuf+5; 					/* Skip "@VIA:" */
-		while(*p && *p<=SP) p++;		/* Skip any spaces */
-		if(route_circ(p,sys_id)) {
-			smb_freemsgmem(&msg);
-			bprintf("\r\nCircular message path: %s\r\n",p);
-			sprintf(str,"Circular message path: %s from %s"
-				,p,fromhub ? qhub[fromhub-1]->id:useron.alias);
-			errorlog(str);
-			return(0); }
-		sprintf(str,"%s/%s"
-			,fromhub ? qhub[fromhub-1]->id : useron.alias,p);
-		strupr(str);
-		update_qwkroute(str); }
-	else {
-		if(fromhub)
-			strcpy(str,qhub[fromhub-1]->id);
-		else
-			strcpy(str,useron.alias); }
-	strupr(str);
-	j=NET_QWK;
-	smb_hfield(&msg,SENDERNETTYPE,2,&j);
-	smb_hfield(&msg,SENDERNETADDR,strlen(str),str);
-	sprintf(str,"%25.25s",hdrblk+46);  /* From user */
-	truncsp(str);
-	if(!strnicmp(qwkbuf+skip,"@TZ:",4)) {
-		p=strchr(qwkbuf+skip,'\xe3');
-		i=skip;
-		if(p) {
-			*p=0;
-			skip+=strlen(qwkbuf+i)+1; }
-		p=qwkbuf+i+4;					/* Skip "@TZ:" */
-		while(*p && *p<=SP) p++;		/* Skip any spaces */
-		msg.hdr.when_written.zone=(short)ahtoul(p); }
-	}
-else {
-	sprintf(str,"%u",useron.number);
-	smb_hfield(&msg,SENDEREXT,strlen(str),str);
-	if((uint)subnum!=INVALID_SUB && sub[subnum]->misc&SUB_NAME)
-		strcpy(str,useron.name);
-	else
-		strcpy(str,useron.alias); }
-
-smb_hfield(&msg,SENDER,strlen(str),str);
-if((uint)subnum==INVALID_SUB) {
-	if(useron.rest&FLAG('Q') || fromhub)
-		msg.idx.from=0;
-	else
-		msg.idx.from=useron.number; }
-else {
-	strlwr(str);
-	msg.idx.from=crc16(str); }
-
-sprintf(str,"%25.25s",hdrblk+71);   /* Subject */
-truncsp(str);
-remove_re(str);
-smb_hfield(&msg,SUBJECT,strlen(str),str);
-strlwr(str);
-msg.idx.subj=crc16(str);
-
-/********************************/
-/* Convert the QWK message text */
-/********************************/
-
-bodylen=0;
-if((body=LMALLOC((blocks-1L)*128L*2L))==NULL) {
-	smb_freemsgmem(&msg);
-	errormsg(WHERE,ERR_ALLOC,"QWK msg",(blocks-1L)*128L*2L);
-	return(0); }
-
-taillen=0;
-if((tail=LMALLOC((blocks-1L)*128L))==NULL) {
-	LFREE(body);
-	smb_freemsgmem(&msg);
-	errormsg(WHERE,ERR_ALLOC,"QWK msg",(blocks-1L)*128L);
-    return(0); }
-
-for(block=1;block<blocks;block++) {
-	if(block>1)
-		if(!fread(qwkbuf,1,128,qwk_fp))
-			break;
-	for(k=skip;k<128;k++,skip=0) {
-		if(qwkbuf[k]==0)
-			continue;
-		if(!taillen && qwkbuf[k]==SP && col==3 && bodylen>=3
-			&& body[bodylen-3]=='-' && body[bodylen-2]=='-'
-			&& body[bodylen-1]=='-') {
-			bodylen-=3;
-			strcpy(tail,"--- ");
-			taillen=4;
-			col++;
-			continue; }
-		if(qwkbuf[k]==0xE3) {		/* expand 0xe3 to crlf */
-			if(!taillen && col==3 && bodylen>=3 && body[bodylen-3]=='-'
-				&& body[bodylen-2]=='-' && body[bodylen-1]=='-') {
-				bodylen-=3;
-				strcpy(tail,"---");
-				taillen=3; }
-			col=0;
-			if(taillen) {
-				tail[taillen++]=CR;
-				tail[taillen++]=LF; }
-			else {
-				body[bodylen++]=CR;
-				body[bodylen++]=LF; }
-			continue; }
-		if(!fromhub && qwkbuf[k]==7 && useron.rest&FLAG('B'))   /* beep res */
-			continue;
-		if(!fromhub && (qwkbuf[k]==1 || qwkbuf[k]==ESC) /* ANSI restriction */
-			&& useron.rest&FLAG('A'))
-			continue;
-		if(qwkbuf[k]!=1 && lastch!=1)
-			col++;
-		if(lastch==1 && !validattr(qwkbuf[k])) {
-			if(taillen) taillen--;
-			else		bodylen--;
-			lastch=0;
-			continue; }
-		lastch=qwkbuf[k];
-		if(taillen)
-			tail[taillen++]=qwkbuf[k];
-		else
-			body[bodylen++]=qwkbuf[k]; } }
-
-while(bodylen && body[bodylen-1]==SP) bodylen--; /* remove trailing spaces */
-if(bodylen>=2 && body[bodylen-2]==CR && body[bodylen-1]==LF)
-	bodylen-=2;
-
-while(taillen && tail[taillen-1]<=SP) taillen--; /* remove trailing garbage */
-
-/*****************/
-/* Calculate CRC */
-/*****************/
-
-if(smb.status.max_crcs) {
-	crc=0xffffffffUL;
-	for(l=0;l<bodylen;l++)
-		crc=ucrc32(body[l],crc);
-	crc=~crc;
-
-	/*******************/
-	/* Check for dupes */
-	/*******************/
-
-	j=smb_addcrc(&smb,crc);
-	if(j) {
-		if(j==1) {
-			bprintf("\r\nDuplicate message\r\n");
-			logline(subnum==INVALID_SUB ? "E!":"P!","Duplicate message"); }
-		else
-			errormsg(WHERE,ERR_CHK,smb.file,j);
-
-		smb_freemsgmem(&msg);
-		LFREE(body);
-		LFREE(tail);
-		return(0); } }
-
-bputs(text[WritingIndx]);
-
-/*************************************/
-/* Write SMB message header and text */
-/*************************************/
-
-if(subnum!=INVALID_SUB && sub[subnum]->misc&SUB_LZH && bodylen
-	&& bodylen+2+taillen+2>=SDT_BLOCK_LEN
-	&& (lzhbuf=(char *)LMALLOC(bodylen*2))!=NULL) {
-	length=lzh_encode((uchar *)body,bodylen,(uchar *)lzhbuf);
-	if(length>1L
-		&& smb_datblocks(length+4L+taillen+2L)
-			<smb_datblocks(bodylen+2L+taillen+2L)) {
-		bodylen=length; 	/* Compressable */
-		length+=4L;
-		lzh=1;
-		LFREE(body);
-		body=lzhbuf; }
-	else {					/* Non-compressable */
-		length=bodylen+2L;
-		LFREE(lzhbuf); } }
-else
-	length=bodylen+2L;					 /* +2 for translation string */
-
-if(taillen)
-	length+=taillen+2L;
-
-if(length&0xfff00000UL) {
-	errormsg(WHERE,ERR_LEN,"REP msg",length);
-	smb_freemsgmem(&msg);
-	LFREE(body);
-	LFREE(tail);
-	return(0); }
-
-if((i=smb_locksmbhdr(&smb))!=0) {
-	errormsg(WHERE,ERR_LOCK,smb.file,i);
-	FREE(body);
-	FREE(tail);
-	return(0); }
-
-if(smb.status.attr&SMB_HYPERALLOC) {
-	msg.hdr.offset=smb_hallocdat(&smb);
-	storage=SMB_HYPERALLOC; }
-else {
-	if((i=smb_open_da(&smb))!=0) {
-		errormsg(WHERE,ERR_OPEN,smb.file,i);
-		FREE(body);
-		FREE(tail);
-		return(0); }
-	if((subnum==INVALID_SUB && sys_misc&SM_FASTMAIL)
-		|| (subnum!=INVALID_SUB && sub[subnum]->misc&SUB_FAST)) {
-		msg.hdr.offset=smb_fallocdat(&smb,length,1);
-		storage=SMB_FASTALLOC; }
-	else {
-		msg.hdr.offset=smb_allocdat(&smb,length,1);
-		storage=SMB_SELFPACK; }
-	smb_close_da(&smb); }
-
-if(msg.hdr.offset && msg.hdr.offset<1L) {
-	smb_unlocksmbhdr(&smb);
-	errormsg(WHERE,ERR_READ,smb.file,msg.hdr.offset);
-	smb_freemsgmem(&msg);
-	FREE(body);
-	FREE(tail); }
-fseek(smb.sdt_fp,msg.hdr.offset,SEEK_SET);
-if(lzh) {
-	xlat=XLAT_LZH;
-	fwrite(&xlat,2,1,smb.sdt_fp); }
-xlat=XLAT_NONE;
-fwrite(&xlat,2,1,smb.sdt_fp);
-fwrite(body,bodylen,1,smb.sdt_fp);
-smb_dfield(&msg,TEXT_BODY,bodylen+2+(lzh ? 2:0));
-if(taillen) {
-	fwrite(&xlat,2,1,smb.sdt_fp);
-	fwrite(tail,taillen,1,smb.sdt_fp);
-	smb_dfield(&msg,TEXT_TAIL,taillen+2); }
-fflush(smb.sdt_fp);
-smb_unlocksmbhdr(&smb);
-
-if((i=smb_addmsghdr(&smb,&msg,storage))!=0)
-	errormsg(WHERE,ERR_WRITE,smb.file,i);
-
-smb_freemsgmem(&msg);
-
-LFREE(body);
-LFREE(tail);
-
-return(1);
-}
diff --git a/src/sbbs2/readmsgs.c b/src/sbbs2/readmsgs.c
deleted file mode 100644
index ceaa73bc29..0000000000
--- a/src/sbbs2/readmsgs.c
+++ /dev/null
@@ -1,1070 +0,0 @@
-#line 1 "READMSGS.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-#include "post.h"
-
-char movemsg(smbmsg_t msg, uint subnum);
-void editmsg(smbmsg_t *msg, uint subnum);
-
-int sub_op(uint subnum)
-{
-return(SYSOP || (sub[subnum]->op_ar[0] && chk_ar(sub[subnum]->op_ar,useron)));
-}
-
-
-void listmsgs(int subnum, post_t HUGE16 *post, long i, long posts)
-{
-	char ch;
-	int j;
-	smbmsg_t msg;
-
-
-bputs(text[MailOnSystemLstHdr]);
-msg.total_hfields=0;
-while(i<posts && !msgabort()) {
-	if(msg.total_hfields)
-		smb_freemsgmem(&msg);
-	msg.total_hfields=0;
-	msg.idx.offset=post[i].offset;
-	if(!loadmsg(&msg,post[i].number))
-		break;
-	smb_unlockmsghdr(&smb,&msg);
-	if(msg.hdr.attr&MSG_DELETE)
-		ch='-';
-	else if((!stricmp(msg.to,useron.alias) || !stricmp(msg.to,useron.name))
-		&& !(msg.hdr.attr&MSG_READ))
-		ch='!';
-	else if(msg.hdr.number>sub[subnum]->ptr)
-		ch='*';
-	else
-		ch=' ';
-	bprintf(text[SubMsgLstFmt],(long)i+1
-		,msg.hdr.attr&MSG_ANONYMOUS && !sub_op(subnum)
-		? text[Anonymous] : msg.from
-		,msg.to
-		,ch
-		,msg.subj);
-	smb_freemsgmem(&msg);
-	msg.total_hfields=0;
-	i++; }
-}
-
-char *binstr(uchar *buf, ushort length)
-{
-	static char str[128];
-	char tmp[128];
-	int i;
-
-str[0]=0;
-for(i=0;i<length;i++)
-	if(buf[i] && (buf[i]<SP || buf[i]>=0x7f))
-		break;
-if(i==length)		/* not binary */
-	return(buf);
-for(i=0;i<length;i++) {
-	sprintf(tmp,"%02X ",buf[i]);
-	strcat(str,tmp); }
-return(str);
-}
-
-
-void msghdr(smbmsg_t msg)
-{
-	int i;
-
-for(i=0;i<msg.total_hfields;i++)
-	bprintf("hfield[%u].type       %02Xh\r\n"
-			"hfield[%u].length     %d\r\n"
-			"hfield[%u]_dat        %s\r\n"
-			,i,msg.hfield[i].type
-			,i,msg.hfield[i].length
-			,i,binstr(msg.hfield_dat[i],msg.hfield[i].length));
-}
-
-/****************************************************************************/
-/****************************************************************************/
-post_t HUGE16 *loadposts(ulong *posts, uint subnum, ulong ptr, uint mode)
-{
-	char name[128];
-	ushort aliascrc,namecrc,sysop;
-	int i,file,skip;
-	ulong l=0,total,alloc_len;
-	smbmsg_t msg;
-	idxrec_t idx;
-	post_t HUGE16 *post;
-
-if(posts==NULL)
-	return(NULL);
-
-(*posts)=0;
-
-if((i=smb_locksmbhdr(&smb))!=0) {				/* Be sure noone deletes or */
-	errormsg(WHERE,ERR_LOCK,smb.file,i);		/* adds while we're reading */
-	return(NULL); }
-
-total=filelength(fileno(smb.sid_fp))/sizeof(idxrec_t); /* total msgs in sub */
-
-if(!total) {			/* empty */
-	smb_unlocksmbhdr(&smb);
-	return(NULL); }
-
-strcpy(name,useron.name);
-strlwr(name);
-namecrc=crc16(name);
-strcpy(name,useron.alias);
-strlwr(name);
-aliascrc=crc16(name);
-sysop=crc16("sysop");
-
-rewind(smb.sid_fp);
-
-alloc_len=sizeof(post_t)*total;
-#ifdef __OS2__
-	while(alloc_len%4096)
-		alloc_len++;
-#endif
-if((post=(post_t HUGE16 *)LMALLOC(alloc_len))==NULL) {	/* alloc for max */
-	smb_unlocksmbhdr(&smb);
-	errormsg(WHERE,ERR_ALLOC,smb.file,sizeof(post_t *)*sub[subnum]->maxmsgs);
-	return(NULL); }
-while(!feof(smb.sid_fp)) {
-	skip=0;
-	if(!fread(&idx,sizeof(idxrec_t),1,smb.sid_fp))
-        break;
-
-	if(idx.number<=ptr)
-		continue;
-
-	if(idx.attr&MSG_READ && mode&LP_UNREAD) /* Skip read messages */
-        continue;
-
-	if(idx.attr&MSG_DELETE) {		/* Pre-flagged */
-		if(mode&LP_REP) 			/* Don't include deleted msgs in REP pkt */
-			continue;
-		if(!(sys_misc&SM_SYSVDELM)) /* Noone can view deleted msgs */
-			continue;
-		if(!(sys_misc&SM_USRVDELM)	/* Users can't view deleted msgs */
-			&& !sub_op(subnum)) 	/* not sub-op */
-			continue;
-		if(!sub_op(subnum)			/* not sub-op */
-			&& idx.from!=namecrc && idx.from!=aliascrc) /* not for you */
-			continue; }
-
-	if(idx.attr&MSG_MODERATED && !(idx.attr&MSG_VALIDATED)
-		&& (mode&LP_REP || !sub_op(subnum)))
-		break;
-
-	if(idx.attr&MSG_PRIVATE && !(mode&LP_PRIVATE)
-		&& !sub_op(subnum) && !(useron.rest&FLAG('Q'))) {
-		if(idx.to!=namecrc && idx.from!=namecrc
-			&& idx.to!=aliascrc && idx.from!=aliascrc
-			&& (useron.number!=1 || idx.to!=sysop))
-			continue;
-		if(!smb_lockmsghdr(&smb,&msg)) {
-			if(!smb_getmsghdr(&smb,&msg)) {
-				if(stricmp(msg.to,useron.alias)
-					&& stricmp(msg.from,useron.alias)
-					&& stricmp(msg.to,useron.name)
-					&& stricmp(msg.from,useron.name)
-					&& (useron.number!=1 || stricmp(msg.to,"sysop")
-					|| msg.from_net.type))
-					skip=1;
-				smb_freemsgmem(&msg); }
-			smb_unlockmsghdr(&smb,&msg); }
-		if(skip)
-            continue; }
-
-
-	if(!(mode&LP_BYSELF) && (idx.from==namecrc || idx.from==aliascrc)) {
-		msg.idx=idx;
-		if(!smb_lockmsghdr(&smb,&msg)) {
-			if(!smb_getmsghdr(&smb,&msg)) {
-				if(!stricmp(msg.from,useron.alias)
-					|| !stricmp(msg.from,useron.name))
-					skip=1;
-				smb_freemsgmem(&msg); }
-			smb_unlockmsghdr(&smb,&msg); }
-		if(skip)
-			continue; }
-
-	if(!(mode&LP_OTHERS)) {
-		if(idx.to!=namecrc && idx.to!=aliascrc
-			&& (useron.number!=1 || idx.to!=sysop))
-			continue;
-		msg.idx=idx;
-		if(!smb_lockmsghdr(&smb,&msg)) {
-			if(!smb_getmsghdr(&smb,&msg)) {
-				if(stricmp(msg.to,useron.alias) && stricmp(msg.to,useron.name)
-					&& (useron.number!=1 || stricmp(msg.to,"sysop")
-					|| msg.from_net.type))
-					skip=1;
-				smb_freemsgmem(&msg); }
-			smb_unlockmsghdr(&smb,&msg); }
-		if(skip)
-            continue; }
-
-	post[l].offset=idx.offset;
-	post[l].number=idx.number;
-	post[l].to=idx.to;
-	post[l].from=idx.from;
-	post[l].subj=idx.subj;
-	l++; }
-smb_unlocksmbhdr(&smb);
-if(!l) {
-	LFREE(post);
-	post=NULL; }
-(*posts)=l;
-return(post);
-}
-
-
-/****************************************************************************/
-/* Reads posts on subboard sub. 'mode' determines new-posts only, browse,   */
-/* or continuous read.                                                      */
-/* Returns 0 if normal completion, 1 if aborted.                            */
-/* Called from function main_sec                                            */
-/****************************************************************************/
-char scanposts(uint subnum, char mode, char *find)
-{
-	char	str[256],str2[256],str3[256],reread=0,mismatches=0
-			,done=0,domsg=1,HUGE16 *buf,*p;
-	int 	file,i,j,usub,ugrp,reads=0;
-	uint	lp=0;
-	long	curpost;
-	ulong	msgs,last,posts,l;
-	post_t	HUGE16 *post;
-	smbmsg_t	msg;
-
-cursubnum=subnum;	/* for ARS */
-if(!chk_ar(sub[subnum]->read_ar,useron)) {
-	bprintf("\1n\r\nYou can't read messages on %s %s\r\n"
-			,grp[sub[subnum]->grp]->sname,sub[subnum]->sname);
-	return(0); }
-msg.total_hfields=0;				/* init to NULL, specify not-allocated */
-if(!(mode&SCAN_CONST))
-	lncntr=0;
-if((msgs=getlastmsg(subnum,&last,0))==0) {
-	if(mode&(SCAN_NEW|SCAN_TOYOU))
-		bprintf(text[NScanStatusFmt]
-			,grp[sub[subnum]->grp]->sname,sub[subnum]->lname,0L,0L);
-	else
-		bprintf(text[NoMsgsOnSub]
-			,grp[sub[subnum]->grp]->sname,sub[subnum]->sname);
-	return(0); }
-if(mode&SCAN_NEW && sub[subnum]->ptr>=last && !(mode&SCAN_BACK)) {
-	if(sub[subnum]->ptr>last)
-		sub[subnum]->ptr=sub[subnum]->last=last;
-	bprintf(text[NScanStatusFmt]
-		,grp[sub[subnum]->grp]->sname,sub[subnum]->lname,0L,msgs);
-	return(0); }
-
-if((i=smb_stack(&smb,SMB_STACK_PUSH))!=0) {
-	errormsg(WHERE,ERR_OPEN,sub[subnum]->code,i);
-	return(0); }
-sprintf(smb.file,"%s%s",sub[subnum]->data_dir,sub[subnum]->code);
-smb.retry_time=smb_retry_time;
-if((i=smb_open(&smb))!=0) {
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_OPEN,smb.file,i);
-	return(0); }
-
-if(!(mode&SCAN_TOYOU)
-	&& (!mode || mode&SCAN_FIND || !(sub[subnum]->misc&SUB_YSCAN)))
-	lp=LP_BYSELF|LP_OTHERS;
-if(mode&SCAN_TOYOU)
-	lp|=LP_UNREAD;
-post=loadposts(&posts,subnum,0,lp);
-if(mode&SCAN_NEW) { 		  /* Scanning for new messages */
-	for(curpost=0;curpost<posts;curpost++)
-		if(sub[subnum]->ptr<post[curpost].number)
-			break;
-	bprintf(text[NScanStatusFmt]
-		,grp[sub[subnum]->grp]->sname,sub[subnum]->lname,posts-curpost,msgs);
-	if(!posts) {		  /* no messages at all */
-		smb_close(&smb);
-		smb_stack(&smb,SMB_STACK_POP);
-		return(0); }
-	if(curpost==posts) {  /* no new messages */
-        if(!(mode&SCAN_BACK)) {
-			if(post)
-				LFREE(post);
-			smb_close(&smb);
-			smb_stack(&smb,SMB_STACK_POP);
-			return(0); }
-		curpost=posts-1; } }
-else {
-	if(mode&SCAN_TOYOU)
-		bprintf(text[NScanStatusFmt]
-		   ,grp[sub[subnum]->grp]->sname,sub[subnum]->lname,posts,msgs);
-	if(!posts) {
-		if(!(mode&SCAN_TOYOU))
-			bprintf(text[NoMsgsOnSub]
-				,grp[sub[subnum]->grp]->sname,sub[subnum]->sname);
-		smb_close(&smb);
-		smb_stack(&smb,SMB_STACK_POP);
-        return(0); }
-	if(mode&SCAN_FIND) {
-		bprintf(text[SearchSubFmt]
-			,grp[sub[subnum]->grp]->sname,sub[subnum]->lname,posts);
-		domsg=1;
-		curpost=0; }
-	else if(mode&SCAN_TOYOU)
-		curpost=0;
-	else {
-		for(curpost=0;curpost<posts;curpost++)
-			if(post[curpost].number>=sub[subnum]->last)
-				break;
-		if(curpost==posts)
-			curpost=posts-1;
-
-		domsg=1; } }
-
-if(useron.misc&RIP)
-	menu("MSGSCAN");
-
-if((i=smb_locksmbhdr(&smb))!=0) {
-	smb_close(&smb);
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_LOCK,smb.file,i);
-	return(0); }
-if((i=smb_getstatus(&smb))!=0) {
-	smb_close(&smb);
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_READ,smb.file,i);
-	return(0); }
-smb_unlocksmbhdr(&smb);
-last=smb.status.last_msg;
-
-action=NODE_RMSG;
-if(mode&SCAN_CONST) {   /* update action */
-    getnodedat(node_num,&thisnode,1);
-    thisnode.action=NODE_RMSG;
-    putnodedat(node_num,thisnode); }
-while(online && !done) {
-
-	action=NODE_RMSG;
-	if((i=heapcheck())!=_HEAPOK) {
-		errormsg(WHERE,ERR_CHK,"heap",i);
-		break; }
-
-	if(mode&(SCAN_CONST|SCAN_FIND) && sys_status&SS_ABORT)
-		break;
-
-	if(post==NULL)	/* Been unloaded */
-		post=loadposts(&posts,subnum,0,lp);   /* So re-load */
-
-	if(!posts) {
-        done=1;
-        continue; }
-
-	while(curpost>=posts) curpost--;
-
-    for(ugrp=0;ugrp<usrgrps;ugrp++)
-        if(usrgrp[ugrp]==sub[subnum]->grp)
-            break;
-    for(usub=0;usub<usrsubs[ugrp];usub++)
-        if(usrsub[ugrp][usub]==subnum)
-            break;
-    usub++;
-    ugrp++;
-
-	msg.idx.offset=post[curpost].offset;
-	msg.idx.number=post[curpost].number;
-	msg.idx.to=post[curpost].to;
-	msg.idx.from=post[curpost].from;
-	msg.idx.subj=post[curpost].subj;
-
-	if((i=smb_locksmbhdr(&smb))!=0) {
-		errormsg(WHERE,ERR_LOCK,smb.file,i);
-		break; }
-	if((i=smb_getstatus(&smb))!=0) {
-		smb_unlocksmbhdr(&smb);
-		errormsg(WHERE,ERR_READ,smb.file,i);
-		break; }
-	smb_unlocksmbhdr(&smb);
-
-	if(smb.status.last_msg!=last) { 	/* New messages */
-		last=smb.status.last_msg;
-		if(post) {
-			LFREE((void *)post); }
-		post=loadposts(&posts,subnum,0,lp);   /* So re-load */
-		if(!posts)
-			break;
-		for(curpost=0;curpost<posts;curpost++)
-			if(post[curpost].number==msg.idx.number)
-				break;
-		if(curpost>(posts-1))
-			curpost=(posts-1);
-		continue; }
-
-	if(msg.total_hfields)
-		smb_freemsgmem(&msg);
-	msg.total_hfields=0;
-
-	if(!loadmsg(&msg,post[curpost].number)) {
-		if(mismatches>5) {	/* We can't do this too many times in a row */
-			errormsg(WHERE,ERR_CHK,smb.file,post[curpost].number);
-			break; }
-		if(post)
-			LFREE(post);
-		post=loadposts(&posts,subnum,0,lp);
-		if(!posts)
-			break;
-		if(curpost>(posts-1))
-			curpost=(posts-1);
-		mismatches++;
-		continue; }
-	smb_unlockmsghdr(&smb,&msg);
-
-	mismatches=0;
-
-	if(domsg) {
-
-		if(!reread && mode&SCAN_FIND) { 			/* Find text in messages */
-			buf=smb_getmsgtxt(&smb,&msg,GETMSGTXT_TAILS);
-			if(!buf) {
-				if(curpost<posts-1) curpost++;
-				else done=1;
-                continue; }
-			strupr((char *)buf);
-			if(!strstr((char *)buf,find) && !strstr(msg.subj,find)) {
-				FREE(buf);
-				if(curpost<posts-1) curpost++;
-				else done=1;
-                continue; }
-			FREE(buf); }
-
-		if(mode&SCAN_CONST)
-			bprintf(text[ZScanPostHdr],ugrp,usub,curpost+1,posts);
-
-		if(!reads && mode)
-            CRLF;
-
-		show_msg(msg
-			,msg.from_ext && !strcmp(msg.from_ext,"1") && !msg.from_net.type
-				? 0:P_NOATCODES);
-
-		reads++;	/* number of messages actually read during this sub-scan */
-
-		/* Message is to this user and hasn't been read, so flag as read */
-		if((!stricmp(msg.to,useron.name) || !stricmp(msg.to,useron.alias)
-			|| (useron.number==1 && !stricmp(msg.to,"sysop")
-			&& !msg.from_net.type))
-			&& !(msg.hdr.attr&MSG_READ)) {
-			if(msg.total_hfields)
-				smb_freemsgmem(&msg);
-			msg.total_hfields=0;
-			msg.idx.offset=0;
-			if(!smb_locksmbhdr(&smb)) { 			  /* Lock the entire base */
-				if(loadmsg(&msg,msg.idx.number)) {
-					msg.hdr.attr|=MSG_READ;
-					msg.idx.attr=msg.hdr.attr;
-					if((i=smb_putmsg(&smb,&msg))!=0)
-						errormsg(WHERE,ERR_WRITE,smb.file,i);
-					smb_unlockmsghdr(&smb,&msg); }
-				smb_unlocksmbhdr(&smb); }
-			if(!msg.total_hfields) {				/* unsuccessful reload */
-				domsg=0;
-				continue; } }
-
-		sub[subnum]->last=post[curpost].number;
-
-		if(sub[subnum]->ptr<post[curpost].number && !(mode&SCAN_TOYOU)) {
-            posts_read++;
-			sub[subnum]->ptr=post[curpost].number; } }
-	else domsg=1;
-    if(mode&SCAN_CONST) {
-		if(curpost<posts-1) curpost++;
-            else done=1;
-        continue; }
-	if(useron.misc&WIP)
-		menu("MSGSCAN");
-	ASYNC;
-	bprintf(text[ReadingSub],ugrp,grp[sub[subnum]->grp]->sname
-		,usub,sub[subnum]->sname,curpost+1,posts);
-	sprintf(str,"ABCDFILMPQRTY?<>[]{}-+.,");
-	if(sub_op(subnum))
-		strcat(str,"O");
-	reread=0;
-	l=getkeys(str,posts);
-	if(l&0x80000000L) {
-		if((long)l==-1) { /* ctrl-c */
-			if(msg.total_hfields)
-				smb_freemsgmem(&msg);
-			if(post)
-				LFREE(post);
-			smb_close(&smb);
-			smb_stack(&smb,SMB_STACK_POP);
-            return(1); }
-		curpost=(l&~0x80000000L)-1;
-		reread=1;
-        continue; }
-	switch(l) {
-		case 'A':   /* Reply to last message */
-			domsg=0;
-			if(!chk_ar(sub[subnum]->post_ar,useron)) {
-				bputs(text[CantPostOnSub]);
-				break; }
-			quotemsg(msg,0);
-			if(post)
-				LFREE(post);
-			post=NULL;
-			postmsg(subnum,&msg,WM_QUOTE);
-//			  post=loadposts(&posts,subnum,0,lp);
-			if(mode&SCAN_TOYOU)
-				domsg=1;
-			break;
-		case 'B':   /* Skip sub-board */
-			if(mode&SCAN_NEW && !noyes(text[RemoveFromNewScanQ]))
-				sub[subnum]->misc&=~SUB_NSCAN;
-			if(msg.total_hfields)
-				smb_freemsgmem(&msg);
-			if(post)
-				LFREE(post);
-			smb_close(&smb);
-			smb_stack(&smb,SMB_STACK_POP);
-			return(0);
-		case 'C':   /* Continuous */
-			mode|=SCAN_CONST;
-			if(curpost<posts-1) curpost++;
-			else done=1;
-			break;
-		case 'D':       /* Delete message on sub-board */
-			domsg=0;
-			if(!sub_op(subnum) && !(sub[subnum]->misc&SUB_DEL)) {
-				bputs(text[CantDeletePosts]);
-				break; }
-			if(!sub_op(subnum)) {
-				if(stricmp(sub[subnum]->misc&SUB_NAME
-					? useron.name : useron.alias, msg.from)
-				&& stricmp(sub[subnum]->misc&SUB_NAME
-					? useron.name : useron.alias, msg.to)) {
-					bprintf(text[YouDidntPostMsgN],curpost+1);
-					break; } }
-			if(msg.hdr.attr&MSG_PERMANENT) {
-				bputs("\1n\r\nMessage is marked permanent.\r\n");
-				domsg=0;
-				break; }
-			if(post)
-				LFREE(post);
-			post=NULL;
-
-			if(msg.total_hfields)
-				smb_freemsgmem(&msg);
-			msg.total_hfields=0;
-			msg.idx.offset=0;
-			if(loadmsg(&msg,msg.idx.number)) {
-				msg.idx.attr^=MSG_DELETE;
-				msg.hdr.attr=msg.idx.attr;
-				if((i=smb_putmsg(&smb,&msg))!=0)
-					errormsg(WHERE,ERR_WRITE,smb.file,i);
-				smb_unlockmsghdr(&smb,&msg);
-				if(i==0 && msg.idx.attr&MSG_DELETE) {
-					sprintf(str,"Removed post from %s %s"
-						,grp[sub[subnum]->grp]->sname,sub[subnum]->lname);
-					logline("P-",str);
-					if(!stricmp(sub[subnum]->misc&SUB_NAME
-						? useron.name : useron.alias, msg.from))
-						useron.posts=adjustuserrec(useron.number
-							,U_POSTS,5,-1); } }
-			domsg=1;
-			if((sys_misc&SM_SYSVDELM		// anyone can view delete msgs
-				|| (sys_misc&SM_USRVDELM	// sys/subops can view deleted msgs
-				&& sub_op(subnum)))
-				&& curpost<posts-1)
-				curpost++;
-			if(curpost>=posts-1)
-				done=1;
-			break;
-
-		case 'F':   /* find text in messages */
-			domsg=0;
-			bprintf(text[StartWithN],curpost+2);
-			if((i=getnum(posts))<0)
-				break;
-			if(i)
-				i--;
-			else
-				i=curpost+1;
-			bputs(text[SearchStringPrompt]);
-			if(!getstr(str,40,K_LINE|K_UPPER))
-				break;
-			searchposts(subnum,post,(long)i,posts,str);
-			break;
-		case 'I':   /* Sub-board information */
-			domsg=0;
-			subinfo(subnum);
-			break;
-		case 'L':   /* List messages */
-			domsg=0;
-			bprintf(text[StartWithN],curpost+1);
-			if((i=getnum(posts))<0)
-				break;
-			if(i) i--;
-			else i=curpost;
-			listmsgs(subnum,post,i,posts);
-			break;
-		case 'M':   /* Reply to last post in mail */
-			domsg=0;
-			if(msg.hdr.attr&MSG_ANONYMOUS && !sub_op(subnum)) {
-				bputs(text[CantReplyToAnonMsg]);
-				break; }
-			if(!sub_op(subnum) && msg.hdr.attr&MSG_PRIVATE
-				&& stricmp(msg.to,useron.name)
-				&& stricmp(msg.to,useron.alias))
-				break;
-			sprintf(str2,text[Regarding]
-				,msg.subj
-				,timestr((time_t *)&msg.hdr.when_written.time));
-			if(msg.from_net.type==NET_FIDO)
-				sprintf(str,"%s @%s",msg.from
-					,faddrtoa(*(faddr_t *)msg.from_net.addr));
-			else if(msg.from_net.type==NET_INTERNET)
-				strcpy(str,msg.from_net.addr);
-			else if(msg.from_net.type)
-				sprintf(str,"%s@%s",msg.from,msg.from_net.addr);
-			else
-				strcpy(str,msg.from);
-			bputs(text[Email]);
-			if(!getstr(str,60,K_EDIT|K_AUTODEL))
-				break;
-			if(post)
-				LFREE(post);
-			post=NULL;
-			quotemsg(msg,1);
-			if(msg.from_net.type==NET_INTERNET
-				&& (!strcmp(str,msg.from_net.addr) || strchr(str,'@')))
-				inetmail(str,msg.subj,WM_QUOTE|WM_NETMAIL);
-			else {
-				p=strrchr(str,'@');
-				if(p)								/* FidoNet or QWKnet */
-					netmail(str,msg.subj,WM_QUOTE);
-				else {
-					i=atoi(str);
-					if(!i) {
-						if(sub[subnum]->misc&SUB_NAME)
-							i=userdatdupe(0,U_NAME,LEN_NAME,str,0);
-						else
-							i=matchuser(str); }
-					email(i,str2,msg.subj,WM_EMAIL|WM_QUOTE); } }
-//			  post=loadposts(&posts,subnum,0,lp);
-			break;
-		case 'P':   /* Post message on sub-board */
-			domsg=0;
-			if(!chk_ar(sub[subnum]->post_ar,useron))
-				bputs(text[CantPostOnSub]);
-			else {
-				if(post)
-					LFREE(post);
-				post=NULL;
-				postmsg(subnum,0,0);
-//				  post=loadposts(&posts,subnum,0,lp);
-				}
-			break;
-		case 'Q':   /* Quit */
-			if(msg.total_hfields)
-				smb_freemsgmem(&msg);
-			if(post)
-				LFREE(post);
-			smb_close(&smb);
-			smb_stack(&smb,SMB_STACK_POP);
-			return(1);
-		case 'R':   /* re-read last message */
-			reread=1;
-			break;
-		case 'T':   /* List titles of next ten messages */
-			domsg=0;
-			if(!posts)
-				break;
-			if(curpost>=posts-1) {
-				 done=1;
-				 break; }
-			i=curpost+11;
-			if(i>posts)
-				i=posts;
-			listmsgs(subnum,post,curpost+1,i);
-			curpost=i-1;
-			if(sub[subnum]->ptr<post[curpost].number)
-				sub[subnum]->ptr=post[curpost].number;
-			break;
-		case 'Y':   /* Your messages */
-			domsg=0;
-			showposts_toyou(post,0,posts);
-			break;
-		case '-':
-			if(curpost>0) curpost--;
-			reread=1;
-			break;
-		case 'O':   /* Operator commands */
-			while(online) {
-				if(!(useron.misc&EXPERT))
-					menu("SYSMSCAN");
-				bprintf("\r\n\1y\1hOperator: \1w");
-				strcpy(str,"?CEHMPQUV");
-				if(SYSOP)
-					strcat(str,"S");
-				switch(getkeys(str,0)) {
-					case '?':
-						if(useron.misc&EXPERT)
-							menu("SYSMSCAN");
-						continue;
-					case 'P':   /* Purge user */
-						purgeuser(sub[subnum]->misc&SUB_NAME
-							? userdatdupe(0,U_NAME,LEN_NAME,msg.from,0)
-							: matchuser(msg.from));
-						break;
-					case 'C':   /* Change message attributes */
-						i=chmsgattr(msg.hdr.attr);
-						if(msg.hdr.attr==i)
-							break;
-						if(msg.total_hfields)
-							smb_freemsgmem(&msg);
-						msg.total_hfields=0;
-						msg.idx.offset=0;
-						if(loadmsg(&msg,msg.idx.number)) {
-							msg.hdr.attr=msg.idx.attr=i;
-							if((i=smb_putmsg(&smb,&msg))!=0)
-								errormsg(WHERE,ERR_WRITE,smb.file,i);
-							smb_unlockmsghdr(&smb,&msg); }
-						break;
-					case 'E':   /* edit last post */
-						if(post)
-							LFREE(post);
-						post=NULL;
-						editmsg(&msg,subnum);
-//						  post=loadposts(&posts,subnum,0,lp);
-						break;
-					case 'H':   /* View message header */
-						msghdr(msg);
-						domsg=0;
-						break;
-					case 'M':   /* Move message */
-						domsg=0;
-						if(post)
-							LFREE(post);
-						post=NULL;
-						if(msg.total_hfields)
-							smb_freemsgmem(&msg);
-						msg.total_hfields=0;
-						msg.idx.offset=0;
-						if(!loadmsg(&msg,msg.idx.number)) {
-							errormsg(WHERE,ERR_READ,smb.file,msg.idx.number);
-							break; }
-						sprintf(str,text[DeletePostQ],msg.hdr.number,msg.subj);
-						if(movemsg(msg,subnum) && yesno(str)) {
-							msg.idx.attr|=MSG_DELETE;
-							msg.hdr.attr=msg.idx.attr;
-							if((i=smb_putmsg(&smb,&msg))!=0)
-								errormsg(WHERE,ERR_WRITE,smb.file,i); }
-						smb_unlockmsghdr(&smb,&msg);
-//						  post=loadposts(&posts,subnum,0,lp);
-						break;
-
-					case 'Q':
-						break;
-					case 'S':   /* Save/Append message to another file */
-/*	05/26/95
-						if(!yesno(text[SaveMsgToFile]))
-							break;
-*/
-						bputs(text[FileToWriteTo]);
-						if(getstr(str,40,K_LINE|K_UPPER))
-							msgtotxt(msg,str,1,1);
-						break;
-					case 'U':   /* User edit */
-						useredit(sub[subnum]->misc&SUB_NAME
-							? userdatdupe(0,U_NAME,LEN_NAME,msg.from,0)
-							: matchuser(msg.from),0);
-						break;
-					case 'V':   /* Validate message */
-						if(msg.total_hfields)
-							smb_freemsgmem(&msg);
-						msg.total_hfields=0;
-						msg.idx.offset=0;
-						if(loadmsg(&msg,msg.idx.number)) {
-							msg.idx.attr|=MSG_VALIDATED;
-							msg.hdr.attr=msg.idx.attr;
-							if((i=smb_putmsg(&smb,&msg))!=0)
-								errormsg(WHERE,ERR_WRITE,smb.file,i);
-							smb_unlockmsghdr(&smb,&msg); }
-						break;
-					default:
-						continue; }
-				break; }
-			break;
-		case '.':   /* Thread forward */
-			l=msg.hdr.thread_first;
-			if(!l) l=msg.hdr.thread_next;
-			if(!l) {
-				domsg=0;
-				break; }
-			for(i=0;i<posts;i++)
-				if(l==post[i].number)
-					break;
-			if(i<posts)
-				curpost=i;
-			break;
-		case ',':   /* Thread backwards */
-			if(!msg.hdr.thread_orig) {
-				domsg=0;
-				break; }
-			for(i=0;i<posts;i++)
-				if(msg.hdr.thread_orig==post[i].number)
-					break;
-			if(i<posts)
-				curpost=i;
-			break;
-		case '>':   /* Search Title forward */
-			for(i=curpost+1;i<posts;i++)
-				if(post[i].subj==msg.idx.subj)
-					break;
-			if(i<posts)
-				curpost=i;
-			else
-				domsg=0;
-			break;
-		case '<':   /* Search Title backward */
-			for(i=curpost-1;i>-1;i--)
-				if(post[i].subj==msg.idx.subj)
-					break;
-            if(i>-1)
-				curpost=i;
-			else
-				domsg=0;
-			break;
-		case '}':   /* Search Author forward */
-			strcpy(str,msg.from);
-			for(i=curpost+1;i<posts;i++)
-				if(post[i].from==msg.idx.from)
-					break;
-			if(i<posts)
-				curpost=i;
-			else
-				domsg=0;
-			break;
-		case '{':   /* Search Author backward */
-			strcpy(str,msg.from);
-			for(i=curpost-1;i>-1;i--)
-				if(post[i].from==msg.idx.from)
-					break;
-			if(i>-1)
-				curpost=i;
-			else
-				domsg=0;
-			break;
-		case ']':   /* Search To User forward */
-			strcpy(str,msg.to);
-			for(i=curpost+1;i<posts;i++)
-				if(post[i].to==msg.idx.to)
-					break;
-			if(i<posts)
-				curpost=i;
-			else
-				domsg=0;
-			break;
-		case '[':   /* Search To User backward */
-			strcpy(str,msg.to);
-			for(i=curpost-1;i>-1;i--)
-				if(post[i].to==msg.idx.to)
-					break;
-			if(i>-1)
-				curpost=i;
-			else
-				domsg=0;
-			break;
-		case 0: /* Carriage return - Next Message */
-		case '+':
-			if(curpost<posts-1) curpost++;
-			else done=1;
-			break;
-		case '?':
-			menu("MSGSCAN");
-			domsg=0;
-			break;	} }
-if(msg.total_hfields)
-	smb_freemsgmem(&msg);
-if(post)
-	LFREE(post);
-if(!(mode&(SCAN_CONST|SCAN_TOYOU|SCAN_FIND)) && !(sub[subnum]->misc&SUB_PONLY)
-	&& reads && chk_ar(sub[subnum]->post_ar,useron)
-	&& !(useron.rest&FLAG('P'))) {
-    sprintf(str,text[Post],grp[sub[subnum]->grp]->sname
-        ,sub[subnum]->lname);
-    if(!noyes(str))
-		postmsg(subnum,0,0); }
-smb_close(&smb);
-smb_stack(&smb,SMB_STACK_POP);
-return(0);
-}
-
-/****************************************************************************/
-/* This function will search the specified sub-board for messages that      */
-/* contain the string 'search'.                                             */
-/* Returns number of messages found.                                        */
-/****************************************************************************/
-int searchsub(uint subnum,char *search)
-{
-	int 	i,found;
-	ulong	l,posts,total;
-	post_t	HUGE16 *post;
-
-if((i=smb_stack(&smb,SMB_STACK_PUSH))!=0) {
-	errormsg(WHERE,ERR_OPEN,sub[subnum]->code,i);
-	return(0); }
-total=getposts(subnum);
-sprintf(smb.file,"%s%s",sub[subnum]->data_dir,sub[subnum]->code);
-smb.retry_time=smb_retry_time;
-if((i=smb_open(&smb))!=0) {
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_OPEN,smb.file,i);
-	return(0); }
-post=loadposts(&posts,subnum,0,LP_BYSELF|LP_OTHERS);
-bprintf(text[SearchSubFmt]
-	,grp[sub[subnum]->grp]->sname,sub[subnum]->lname,posts,total);
-found=searchposts(subnum,post,0,posts,search);
-if(posts)
-	LFREE(post);
-smb_close(&smb);
-smb_stack(&smb,SMB_STACK_POP);
-return(found);
-}
-
-/****************************************************************************/
-/* Will search the messages pointed to by 'msg' for the occurance of the    */
-/* string 'search' and display any messages (number of message, author and  */
-/* title). 'msgs' is the total number of valid messages.                    */
-/* Returns number of messages found.                                        */
-/****************************************************************************/
-int searchposts(uint subnum, post_t HUGE16 *post, long start, long posts
-	, char *search)
-{
-	char	HUGE16 *buf,ch;
-	ushort	xlat;
-	int 	i,j;
-	long	l,length,found=0;
-	smbmsg_t msg;
-
-msg.total_hfields=0;
-for(l=start;l<posts && !msgabort();l++) {
-	msg.idx.offset=post[l].offset;
-	if(!loadmsg(&msg,post[l].number))
-		continue;
-	smb_unlockmsghdr(&smb,&msg);
-	buf=smb_getmsgtxt(&smb,&msg,1);
-	if(!buf) {
-		smb_freemsgmem(&msg);
-		continue; }
-	strupr((char *)buf);
-	if(strstr((char *)buf,search) || strstr(msg.subj,search)) {
-		if(!found)
-			CRLF;
-		if(msg.hdr.attr&MSG_DELETE)
-			ch='-';
-		else if((!stricmp(msg.to,useron.alias) || !stricmp(msg.to,useron.name))
-			&& !(msg.hdr.attr&MSG_READ))
-			ch='!';
-		else if(msg.hdr.number>sub[subnum]->ptr)
-			ch='*';
-		else
-			ch=' ';
-		bprintf(text[SubMsgLstFmt],l+1
-			,(msg.hdr.attr&MSG_ANONYMOUS) && !sub_op(subnum) ? text[Anonymous]
-			: msg.from
-			,msg.to
-			,ch
-			,msg.subj);
-		found++; }
-	FREE(buf);
-	smb_freemsgmem(&msg); }
-
-return(found);
-}
-
-/****************************************************************************/
-/* Will search the messages pointed to by 'msg' for message to the user on  */
-/* Returns number of messages found.                                        */
-/****************************************************************************/
-void showposts_toyou(post_t HUGE16 *post, ulong start, ulong posts)
-{
-	char	str[128];
-	ushort	namecrc,aliascrc,sysop;
-	int 	i;
-	ulong	l,found;
-    smbmsg_t msg;
-
-strcpy(str,useron.alias);
-strlwr(str);
-aliascrc=crc16(str);
-strcpy(str,useron.name);
-strlwr(str);
-namecrc=crc16(str);
-sysop=crc16("sysop");
-msg.total_hfields=0;
-for(l=start,found=0;l<posts && !msgabort();l++) {
-
-	if((useron.number!=1 || post[l].to!=sysop)
-		&& post[l].to!=aliascrc && post[l].to!=namecrc)
-		continue;
-
-	if(msg.total_hfields)
-		smb_freemsgmem(&msg);
-	msg.total_hfields=0;
-	msg.idx.offset=post[l].offset;
-	if(!loadmsg(&msg,post[l].number))
-		continue;
-	smb_unlockmsghdr(&smb,&msg);
-	if((useron.number==1 && !stricmp(msg.to,"sysop") && !msg.from_net.type)
-		|| !stricmp(msg.to,useron.alias) || !stricmp(msg.to,useron.name)) {
-		if(!found)
-			CRLF;
-		found++;
-		bprintf(text[SubMsgLstFmt],l+1
-			,(msg.hdr.attr&MSG_ANONYMOUS) && !SYSOP
-			? text[Anonymous] : msg.from
-			,msg.to
-			,msg.hdr.attr&MSG_DELETE ? '-' : msg.hdr.attr&MSG_READ ? ' ' : '*'
-			,msg.subj); } }
-
-if(msg.total_hfields)
-	smb_freemsgmem(&msg);
-}
-
-/****************************************************************************/
-/* This function will search the specified sub-board for messages that		*/
-/* are sent to the currrent user.											*/
-/* returns number of messages found 										*/
-/****************************************************************************/
-int searchsub_toyou(uint subnum)
-{
-	int 	i;
-	ulong	l,posts,total;
-	post_t	HUGE16 *post;
-
-if((i=smb_stack(&smb,SMB_STACK_PUSH))!=0) {
-	errormsg(WHERE,ERR_OPEN,sub[subnum]->code,i);
-	return(0); }
-total=getposts(subnum);
-sprintf(smb.file,"%s%s",sub[subnum]->data_dir,sub[subnum]->code);
-smb.retry_time=smb_retry_time;
-if((i=smb_open(&smb))!=0) {
-	smb_stack(&smb,SMB_STACK_POP);
-	errormsg(WHERE,ERR_OPEN,smb.file,i);
-	return(0); }
-post=loadposts(&posts,subnum,0,0);
-bprintf(text[SearchSubFmt]
-	,grp[sub[subnum]->grp]->sname,sub[subnum]->lname,total);
-if(posts) {
-	if(post)
-		LFREE(post);
-	post=loadposts(&posts,subnum,0,LP_BYSELF|LP_OTHERS);
-	showposts_toyou(post,0,posts); }
-if(post)
-	LFREE(post);
-smb_close(&smb);
-smb_stack(&smb,SMB_STACK_POP);
-return(posts);
-}
-
-
diff --git a/src/sbbs2/rio/riodefs.h b/src/sbbs2/rio/riodefs.h
deleted file mode 100644
index fa5e54f148..0000000000
--- a/src/sbbs2/rio/riodefs.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/* RIODEFS.H */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#ifndef _RIODEFS_H
-#define _RIODEFS_H
-
-
-/************************/
-/* Remote I/O Constants */
-/************************/
-
-                            /* i/o mode and state flags */
-#define CTSCK	0x1000		/*.check cts (mode only) */
-#define RTSCK	0x2000		/*.check rts (mode only) */
-#define TXBOF	0x0800		/*.transmit buffer overflow (outcom only) */
-#define ABORT	0x0400		/*.check for ^C (mode), aborting (state) */
-#define PAUSE	0x0200		/*.check for ^S (mode), pausing (state) */
-#define NOINP	0x0100		/*.input buffer empty (incom only) */
-
-                            /* status flags */
-#define DCD 	0x0080		/*.DCD on */
-#define RI		0x0040		/*.Ring indicate */
-#define DSR 	0x0020		/*.Dataset ready */
-#define CTS 	0x0010		/*.CTS on */
-#define FERR	0x0008		/*.Frameing error */
-#define PERR	0x0004		/*.Parity error */
-#define OVRR	0x0002		/*.Overrun */
-#define RXLOST	0x0001		/*.Receive buffer overflow */
-
-/* rioctl() arguments */
-/* returns mode or state flags in high 8 bits, status flags in low 8 bits */
-
-                            /* the following return mode in high 8 bits */
-#define IOMODE	0x0000		/*.no operation */
-#define IOSM	0x0001		/*.i/o set mode flags */
-#define IOCM	0x0002		/*.i/o clear mode flags */
-
-#define GVERS	0x0007		/*.get version */
-#define GUART	0x0107		/*.get uart */
-#define GIRQN	0x0207		/*.get IRQ number */
-#define GBAUD	0x0307		/*.get baud */
-
-                            /* the following return state in high 8 bits */
-#define IOSTATE 0x0004		/*.no operation */
-#define IOSS	0x0005		/*.i/o set state flags */
-#define IOCS	0x0006		/*.i/o clear state flags */
-#define IOFB	0x0308		/*.i/o buffer flush */
-#define IOFI	0x0208		/*.input buffer flush */
-#define IOFO	0x0108		/*.output buffer flush */
-#define IOCE	0x0009		/* i/o clear error flags */
-
-
-                            /* return count (16bit) */
-#define RXBC	0x000a		/*.get receive buffer count */
-#define RXBS	0x010a		/*.get receive buffer size */
-#define TXBC	0x000b		/*.get transmit buffer count */
-#define TXBS	0x010b		/*.get transmit buffer size */
-#define TXBF	0x020b		/*.get transmit buffer free space */
-#define TXSYNC	0x000c		/*.sync transmition (seconds<<8|0x0c) */
-#define IDLE    0x000d      /* suspend communication routines */
-#define RESUME  0x010d      /* return from suspended state */
-#define RLERC   0x000e      /* read line error count and clear */
-#define CPTON   0x0110      /* set input translation flag for ctrl-p on */
-#define CPTOFF  0x0010      /* set input translation flag for ctrl-p off */
-#define GETCPT  0x8010      /* return the status of ctrl-p translation */
-#define MSR     0x0011      /* read modem status register */
-#define FIFOCTL 0x0012		/*.FIFO UART control */
-#define TSTYPE  0x0013      /* Time-slice API type */
-#define GETTST  0x8013      /* Get Time-slice API type */
-
-#define I14DB   0x001d      /* DigiBoard int 14h driver */
-#define I14PC   0x011d      /* PC int 14h driver */
-#define I14PS   0x021d      /* PS/2 int 14h driver */
-#define I14FO   0x031d      /* FOSSIL int 14h driver */
-
-#define SMSMK   0x0014      /* set modem status mask */
-#define SMLCR   0x0015      /* set modem line control register */
-#define LFN81	0x0315		/*.set line format N81 */
-#define LFE71	0x1A15		/*.set line format E71 */
-#define SRXHL   0x001E      /* set receive flow control high limit */
-#define SRXLL   0x001F      /* set receive flow control low limit */
-#define IGCLS   0x0020      /* input gate close */
-#define IGOPN   0xFF20      /* input gate open */
-
-
-                            /* ivhctl() arguments */
-#define INT29R	0x0001		/* copy int 29h output to remote */
-#define INT29L	0x0002		/* Use _putlc for int 29h */
-#define INT16	0x0010		/* return remote chars to int 16h calls */
-#define INTCLR	0x0000		/* release int 16h, int 29h */
-
-#define TS_INT28	 1
-#define TS_WINOS2    2
-#define TS_NODV      4
-
-#define RIO_OUTCOM_STKLEN	4096	/* outcom_thread() stack size	*/
-#define RIO_OUTCOM_BUFLEN	4096	/* outcom() buffer length		*/
-#define RIO_INCOM_BUFLEN	1024	/* incom() buffer length		*/
-
-
-#endif	/* Don't add anything after this line */
diff --git a/src/sbbs2/rio/riolib.c b/src/sbbs2/rio/riolib.c
deleted file mode 100644
index 18cee97d54..0000000000
--- a/src/sbbs2/rio/riolib.c
+++ /dev/null
@@ -1,965 +0,0 @@
-/* RIOLIB.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* Remote communications Input/Output Library for OS/2 and Win32 */
-
-#define RIOLIB_VER	100
-
-#ifdef __OS2__
-	#define INCL_DOSDEVICES
-	#define INCL_DOSDEVIOCTL
-	#define INCL_DOS
-	#include <os2.h>
-
-#else	// Win32
-
-	#include <windows.h>
-#endif
-
-#include <time.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <string.h>
-#include <process.h>
-#include "riolib.h"
-#include "riodefs.h"
-
-int rio_handle=-1;
-
-int rio_abort=0,rio_aborted=0;
-int inbufbot,inbuftop;
-int outbufbot,outbuftop;
-char inbuf[RIO_INCOM_BUFLEN];
-char outbuf[RIO_OUTCOM_BUFLEN];
-
-/****************************************************************************/
-/* OS/2 Specific															*/
-/****************************************************************************/
-
-#ifdef __OS2__
-
-HEV rio_sem;
-
-typedef struct {	/* Packet for Get/Set Device Control Block Parms */
-
-	ushort	wr_timeout;
-	ushort	rd_timeout;
-	uchar	flags1;
-	uchar	flags2;
-	uchar	flags3;
-	uchar	err_char;
-	uchar	brk_char;
-	uchar	xon_char;
-	uchar	xoff_char;
-
-	} async_dcb_t;
-
-typedef struct {	/* Parameter Packet for Extended Set Bit Rate */
-
-	ulong rate;
-	uchar frac;
-
-	} setrate_t;
-
-typedef struct {	/* Data Packet for Extended Query Bit Rate */
-
-	ulong cur_rate;
-	uchar cur_rate_frac;
-	ulong min_rate;
-	uchar min_rate_frac;
-	ulong max_rate;
-	uchar max_rate_frac;
-
-	} getrate_t;
-
-typedef struct {	/* Data Packet for Query Number of Chars Queue */
-
-	ushort	cur,
-			max;
-
-	} getqueue_t;
-
-typedef struct {	/* Parameter Packet for Set Modem Control Signals */
-
-	uchar	on;
-	uchar	off;
-
-	} setmdmctrl_t;
-
-typedef struct {	/* Parameter Packet for Set Line Characteristics */
-
-	uchar	data;
-	uchar	parity;
-	uchar	stop;
-
-	} setline_t;
-
-#else
-
-/****************************************************************************/
-/* Win32 Specific															*/
-/****************************************************************************/
-
-HANDLE	rio_event;
-
-#endif
-
-/************************************************************************/
-/* Opens COM port, ignoring IRQ argument								*/
-/* Returns 0 on no error												*/
-/************************************************************************/
-int rioini(int com, int unused)
-{
-	char		str[64];
-#ifdef __OS2__
-	async_dcb_t async_dcb;
-#else // Win32
-	DCB 		dcb;
-	COMMTIMEOUTS timeouts;
-#endif
-
-#ifdef __WATOMC__
-	char		*stack;
-#endif
-
-inbufbot=inbuftop=outbufbot=outbuftop=0;	/* clear our i/o buffers */
-
-if(!com) { /* Close port */
-	if(rio_handle>=0) {
-#ifdef __OS2__
-		close(rio_handle);
-		rio_handle=-1;	 /* signal outcom_thread() to end */
-		DosPostEventSem(rio_sem);
-#else // Win32
-		CloseHandle((HANDLE)rio_handle);
-		rio_handle=-1;
-		SetEvent(rio_event);
-#endif
-		return(0); }
-	return(-2); }
-
-sprintf(str,"COM%u",com);
-#ifdef __OS2__
-if(rio_handle==-1) {	/* Not already opened */
-	if((rio_handle=open(str,O_RDWR|O_BINARY,0))==-1)
-		return(-1); }
-#else // Win32
-if(rio_handle==-1) {	/* Not already opened */
-	if((rio_handle=(int)CreateFile(str
-		,GENERIC_READ|GENERIC_WRITE 	/* Access */
-		,0								/* Share mode */
-		,NULL							/* Security attributes */
-		,OPEN_EXISTING					/* Create access */
-		,FILE_ATTRIBUTE_NORMAL			/* File attributes */
-		,NULL							/* Template */
-		))==(int)INVALID_HANDLE_VALUE)
-		return(-1); }
-#endif
-
-#ifdef __OS2__
-
-if(DosDevIOCtl(rio_handle
-	,IOCTL_ASYNC, 0x73	/* Query Device Control Block (DCB) Parms */
-	,NULL
-	,0
-	,NULL
-	,&async_dcb
-	,sizeof(async_dcb)
-	,NULL))
-	return(-6);
-
-async_dcb.flags2&=~(1<<1);	/* Disable Automatic Recv XON/XOFF flow ctrl */
-/* Extended Hardware Buffering (16550 FIFO) */
-if(async_dcb.flags3&((1<<4)|(1<<3))) {			/* Supported */
-	async_dcb.flags3&=~((1<<3)|(1<<6)|(1<<5));	/* Set to 1 char trgr lvl */
-	async_dcb.flags3|=((1<<4)|(1<<7)); }		/* Set to 16 char tx buf */
-async_dcb.flags3|=((1<<2)|(1<<1));				/* No-Wait read timeout */
-async_dcb.flags3&=~(1<<0);						/* Normal write timeout */
-async_dcb.wr_timeout=499;						/* 5 seconds? */
-DosDevIOCtl(rio_handle
-	,IOCTL_ASYNC, 0x53	/* Set Device Control Block (DCB) Parms */
-	,(void *)&async_dcb
-	,sizeof(async_dcb)
-	,NULL
-	,NULL
-	,0
-	,NULL);
-
-if(DosCreateEventSem(NULL,&rio_sem,0,0))
-	return(-5);
-
-#else // Win32
-
-if(GetCommState((HANDLE)rio_handle,&dcb)!=TRUE)
-	return(-6);
-
-dcb.fBinary=1;			// No EOF check
-dcb.fDtrControl=DTR_CONTROL_ENABLE;
-dcb.fDsrSensitivity=FALSE;
-dcb.fOutX=0;			// No Xon/Xoff out
-dcb.fInX=0; 			// No Xon/Xoff in
-dcb.fErrorChar=FALSE;	// No character replacement
-dcb.fNull=0;			// No null stripping
-dcb.fAbortOnError=0;	// Continue to communicate even if error detected
-
-SetCommState((HANDLE)rio_handle,&dcb);
-
-if(GetCommTimeouts((HANDLE)rio_handle,&timeouts)!=TRUE)
-	return(-7);
-
-timeouts.ReadIntervalTimeout=MAXDWORD;
-timeouts.ReadTotalTimeoutMultiplier=0;
-timeouts.ReadTotalTimeoutConstant=0;		// No-wait read timeout
-timeouts.WriteTotalTimeoutMultiplier=0;
-timeouts.WriteTotalTimeoutConstant=5000;	// 5 seconds
-SetCommTimeouts((HANDLE)rio_handle,&timeouts);
-
-SetupComm((HANDLE)rio_handle,4096,4096);	/* Init Rx and Tx buffer sizes */
-
-if((rio_event=CreateEvent(NULL			/* Security attributes */
-	,TRUE								/* Manual reset */
-	,FALSE								/* Non-signaled by default */
-	,NULL								/* Event name */
-	))==NULL)
-	return(-5);
-
-#endif
-
-#ifdef __WATCOMC__
-stack=malloc(RIO_OUTCOM_STACK);
-if(stack==NULL)
-	return(-4);
-if(_beginthread(outcom_thread,stack,RIO_OUTCOM_STKLEN,NULL)==-1)
-	return(-3);
-#else
-if(_beginthread(outcom_thread,RIO_OUTCOM_STKLEN,NULL)==(ulong)-1)
-	return(-3);
-#endif
-
-
-return(0);
-}
-
-/************************************************************************/
-/* Raise or lower DTR													*/
-/* If onoff is 0, drop and exit, 1 raise and exit, >1 drop and wait 	*/
-/* up to x seconds for DCD to drop, return 0 on success, 1 on failure	*/
-/************************************************************************/
-int dtr(char onoff)
-{
-#ifdef __OS2__
-	setmdmctrl_t setmdmctrl;
-	ulong start;
-	ushort w;
-	uchar c;
-
-if(onoff==1) {
-	setmdmctrl.on=1;
-	setmdmctrl.off=0xff; }
-else {
-	setmdmctrl.on=0;
-	setmdmctrl.off=0xfe; }
-
-DosDevIOCtl(rio_handle, IOCTL_ASYNC, 0x46	/* Set Modem Ctrl Signals */
-	,&setmdmctrl
-	,sizeof(setmdmctrl)
-	,NULL
-	,&w
-	,sizeof(short)
-	,NULL);
-
-if(onoff<=1)
-	return(0);
-
-start=time(NULL);
-while(time(NULL)-start<=onoff) {
-	DosDevIOCtl(rio_handle
-		,IOCTL_ASYNC, 0x67					/* Get Modem Input Signals */
-		,NULL
-		,0
-		,NULL
-		,&c
-		,1
-		,NULL);
-	if(!(c&DCD))	/* DCD is low */
-		return(0);
-	DosSleep(1); }
-
-#else // Win32
-
-	ulong l,start;
-
-if(onoff==1)
-	EscapeCommFunction((HANDLE)rio_handle,SETDTR);
-else
-	EscapeCommFunction((HANDLE)rio_handle,CLRDTR);
-
-if(onoff<=1)
-	return(0);
-
-start=time(NULL);
-while(time(NULL)-start<=onoff) {
-	GetCommModemStatus((HANDLE)rio_handle,&l);
-	if(!(l&MS_RLSD_ON)) // DCD is low
-		return(0);
-	Sleep(1000); }
-
-#endif
-
-return(1); /* Dropping DTR failed to lower DCD */
-}
-
-
-
-/************************************************************************/
-/* Returns the current DTE rate of the currently open COM port			*/
-/************************************************************************/
-long rio_getbaud(void)
-{
-#ifdef __OS2__
-	getrate_t getrate;
-
-if(DosDevIOCtl(rio_handle, IOCTL_ASYNC, 0x63 /* Extended Query Bit Rate */
-	,NULL
-	,0
-	,NULL
-	,&getrate
-	,sizeof(getrate)
-	,NULL)==0)
-	return(getrate.cur_rate);
-
-#else // Win32
-
-	DCB dcb;
-
-if(GetCommState((HANDLE)rio_handle,&dcb)==TRUE) {
-	switch(dcb.BaudRate) {
-		case CBR_110:
-			return(110);
-		case CBR_300:
-			return(300);
-		case CBR_600:
-			return(600);
-		case CBR_1200:
-			return(1200);
-		case CBR_2400:
-			return(2400);
-		case CBR_4800:
-			return(4800);
-		case CBR_9600:
-			return(9600);
-		case CBR_14400:
-			return(14400);
-		case CBR_19200:
-			return(19200);
-		case CBR_38400:
-			return(38400);
-		case CBR_56000:
-			return(56000);
-		case CBR_57600:
-			return(57600);
-		case CBR_115200:
-			return(115200);
-		case CBR_128000:
-			return(128000);
-		case CBR_256000:
-			return(256000);
-		default:
-			return(dcb.BaudRate); } }
-
-#endif
-
-return(-1); // Error
-}
-
-
-/************************************************************************/
-/* Sets the current DTE rate											*/
-/* Returns 0 on success 												*/
-/************************************************************************/
-int setbaud(int rate)
-{
-#ifdef __OS2__
-	setrate_t setrate;
-	APIRET	ret;
-
-setrate.rate=rate;
-setrate.frac=0;
-
-ret=DosDevIOCtl(rio_handle, IOCTL_ASYNC, 0x43	/* Extended Set Bit Rate */
-	,&setrate
-	,sizeof(setrate)
-	,NULL
-	,NULL
-	,0
-	,NULL);
-
-if(ret)
-	return(ret);
-
-if(rio_getbaud()!=rate) 	/* Make sure it actually changed rates */
-	return(-1);
-
-#else // Win32
-
-	DCB dcb;
-
-if(GetCommState((HANDLE)rio_handle,&dcb)!=TRUE)
-	return(-1);
-dcb.BaudRate=rate;
-if(SetCommState((HANDLE)rio_handle,&dcb)!=TRUE)
-	return(-1);
-
-#endif
-
-return(0);
-}
-
-/************************************************************************/
-/* Return next incoming character from COM port, NOINP if none avail.	*/
-/* Uses a linear buffer.												*/
-/************************************************************************/
-int incom(void)
-{
-	char c;
-
-if(inbufbot!=inbuftop) {
-	c=inbuf[inbufbot];
-	inbufbot++;
-	if(inbufbot==inbuftop)
-		inbufbot=inbuftop=0;
-	if(rio_abort && c==3) { 		/* Ctrl-C */
-		rio_aborted=1;
-		rioctl(IOFO);
-		return(NOINP); }
-	return(c); }
-
-inbufbot=0;
-#ifdef __OS2__
-inbuftop=read(rio_handle,inbuf,RIO_INCOM_BUFLEN);
-#else // Win32
-ReadFile((HANDLE)rio_handle,inbuf,RIO_INCOM_BUFLEN,(DWORD *)&inbuftop,NULL);
-#endif
-if(inbuftop<=0 || inbuftop>RIO_INCOM_BUFLEN) {
-	inbuftop=0;
-	return(NOINP); }
-else
-	return(inbuf[inbufbot++]);
-}
-
-/************************************************************************/
-/* Return number of chars in our input buffer							*/
-/************************************************************************/
-int inbufcnt(void)
-{
-return(inbuftop-inbufbot);
-}
-
-/************************************************************************/
-/* Place a character into outbound buffer, return TXBOF on buffer		*/
-/* overflow, 0 on success.												*/
-/************************************************************************/
-int outcom(int ch)
-{
-	int i=outbuftop+1;
-
-if(i==RIO_OUTCOM_BUFLEN)
-	i=0;
-if(i==outbufbot)
-	return(TXBOF);
-outbuf[outbuftop++]=ch;
-if(outbuftop==RIO_OUTCOM_BUFLEN)
-	outbuftop=0;
-#ifdef __OS2__
-DosPostEventSem(rio_sem);	 // Enable output
-#else // Win32
-SetEvent(rio_event);
-#endif
-return(0);
-}
-
-/************************************************************************/
-/************************************************************************/
-void outcom_thread(void *unused)
-{
-	int i,top;
-	ulong l;
-
-while(rio_handle>=0) {
-	if(outbufbot==outbuftop) {
-#ifdef __OS2__
-		DosResetEventSem(rio_sem,&l);
-		DosWaitEventSem(rio_sem,10000);  /* every 10 seconds */
-#else // Win32
-		ResetEvent(rio_event);
-		WaitForSingleObject(rio_event,10000);
-#endif
-		continue; }
-	top=outbuftop;
-	if(top<outbufbot)
-		i=RIO_OUTCOM_BUFLEN-outbufbot;
-	else
-		i=top-outbufbot;
-#ifdef __OS2__
-	i=write(rio_handle,outbuf+outbufbot,i);
-#else // Win32
-	WriteFile((HANDLE)rio_handle,outbuf+outbufbot,i,(DWORD *)&i,NULL);
-#endif
-	if(i>0 && i<=RIO_OUTCOM_BUFLEN-outbufbot)
-		outbufbot+=i;
-	if(outbufbot==RIO_OUTCOM_BUFLEN)
-		outbufbot=0; }
-_endthread();
-}
-
-/************************************************************************/
-/* Return number of chars in our output buffer							*/
-/************************************************************************/
-int outbufcnt(void)
-{
-if(outbuftop>=outbufbot)
-    return(outbuftop-outbufbot);
-return(outbuftop+(RIO_OUTCOM_BUFLEN-outbufbot));
-}
-
-/************************************************************************/
-/************************************************************************/
-int rio_getstate(void)
-{
-#ifdef __OS2__
-	uchar c;
-	ushort state=0,w;
-	getqueue_t getqueue;
-
-if(rio_abort && !rio_aborted) {
-	DosDevIOCtl(rio_handle
-		,IOCTL_ASYNC, 0x68 /* Query # of chars in rx queue */
-		,NULL
-		,0
-		,NULL
-		,&getqueue
-		,sizeof(getqueue)
-		,NULL);
-	if(getqueue.cur && read(rio_handle,&c,1)==1) {
-		if(c==3) { /* ctrl-c */
-			rio_aborted=1;
-			rioctl(IOFO); }
-		else
-			if(inbuftop<RIO_INCOM_BUFLEN)  /* don't overflow input buffer */
-				inbuf[inbuftop++]=c; } }
-
-if(rio_aborted)
-    state|=ABORT;
-
-#if 0	// just to see if things speed up
-DosDevIOCtl(rio_handle
-	,IOCTL_ASYNC, 0x6D	/* Query COM Error */
-	,NULL
-	,0
-	,NULL
-	,&w
-	,sizeof(short)
-	,NULL);
-state|=w&0xf;	/* FERR|PERR|OVRR|RXLOST */
-#endif
-
-DosDevIOCtl(rio_handle
-	,IOCTL_ASYNC, 0x67	/* Query Modem Input Signals */
-	,NULL
-	,0
-	,NULL
-	,&c
-	,sizeof(char)
-	,NULL);
-state|=c&0xf0;	/* DCD|RI|DSR|CTS */
-
-#else // Win32
-
-	uchar c;
-	ushort state=0;
-	int i;
-	ulong l;
-	COMSTAT comstat;
-
-if(rio_abort && !rio_aborted) {
-	ClearCommError((HANDLE)rio_handle,&l,&comstat);
-	if(comstat.cbInQue) {
-		ReadFile((HANDLE)rio_handle,&c,1,(DWORD *)&i,NULL);
-		if(i==1) {
-			if(c==3) { /* Ctrl-C */
-				rio_aborted=1;
-				rioctl(IOFO); }
-			else
-				if(inbuftop<RIO_INCOM_BUFLEN)  /* don't overflow input buffer */
-					inbuf[inbuftop++]=c; } } }
-
-GetCommModemStatus((HANDLE)rio_handle,(DWORD *)&state);  /* DCD|RI|DSR|CTS */
-if(rio_aborted)
-    state|=ABORT;
-
-#endif
-
-return(state);
-}
-
-
-/************************************************************************/
-/************************************************************************/
-int rioctl(ushort action)
-{
-#ifdef __OS2__
-	async_dcb_t 	async_dcb;
-	getqueue_t		getqueue;
-	setline_t		setline;
-#else // Win32
-	COMMPROP		commprop;
-	COMSTAT 		comstat;
-	DCB 			dcb;
-	ulong			l;
-#endif
-	uchar c;
-	ushort mode,w;
-	clock_t start;
-
-switch(action) {
-	case GVERS: 	/* Get version */
-		return(RIOLIB_VER);
-	case GUART: 	/* Get UART I/O address, not available */
-		return(0xffff);
-	case GIRQN: 	/* Get IRQ number, not available */
-		return((int)rio_handle);
-	case GBAUD: 	/* Get current bit rate */
-		return(rio_getbaud());
-	case RXBC:		/* Get receive buffer count */
-#ifndef __OS2__ // Win32
-		ClearCommError((HANDLE)rio_handle,&l,&comstat);
-		return(comstat.cbInQue+inbufcnt());
-#endif
-		/* Fall-through if OS/2 */
-	case RXBS:		/* Get receive buffer size */
-#ifdef __OS2__
-		DosDevIOCtl(rio_handle
-			,IOCTL_ASYNC, 0x68 /* Query # of chars in rx queue */
-			,NULL
-			,0
-			,NULL
-			,&getqueue
-			,sizeof(getqueue)
-			,NULL);
-		if(action==RXBC)
-			return(getqueue.cur+inbufcnt());
-		/* RXBS */
-		return(getqueue.max+RIO_INCOM_BUFLEN);
-#else
-		GetCommProperties((HANDLE)rio_handle,&commprop);
-		return(commprop.dwCurrentRxQueue+RIO_INCOM_BUFLEN);
-#endif
-	case TXBC:		/* Get transmit buffer count */
-#ifndef __OS2__ // Win32
-		ClearCommError((HANDLE)rio_handle,&l,&comstat);
-		return(comstat.cbOutQue+outbufcnt());
-#endif
-		/* Fall-through if OS/2 */
-	case TXBS:		/* Get transmit buffer size */
-	case TXBF:		/* Get transmit buffer free space */
-#ifdef __OS2__
-		DosDevIOCtl(rio_handle
-			,IOCTL_ASYNC, 0x69	/* Query # of chars in tx queue */
-			,NULL
-			,0
-			,NULL
-			,&getqueue
-			,sizeof(getqueue)
-			,NULL);
-		if(action==TXBC)
-			return(getqueue.cur+outbufcnt());
-		else if(action==TXBS)
-			return(getqueue.max+RIO_OUTCOM_BUFLEN);
-		/* TXBF */
-		return((getqueue.max-getqueue.cur)+(RIO_OUTCOM_BUFLEN-outbufcnt()));
-#else
-		GetCommProperties((HANDLE)rio_handle,&commprop);
-		if(action==TXBS)
-			return(commprop.dwCurrentTxQueue+RIO_OUTCOM_BUFLEN);
-		/* TXBF */
-		ClearCommError((HANDLE)rio_handle,&l,&comstat);
-		return((commprop.dwCurrentTxQueue-comstat.cbOutQue)
-			+(RIO_OUTCOM_BUFLEN-outbufcnt()));
-#endif
-	case IOSTATE:
-		return(rio_getstate());
-	case IOFI:		/* Flush input buffer */
-	case IOFO:		/* Flush output buffer */
-	case IOFB:		/* Flush both buffers */
-#ifdef __OS2__
-		c=0;
-		if((action&IOFI)==IOFI) {
-			DosDevIOCtl(rio_handle
-				,IOCTL_GENERAL, DEV_FLUSHINPUT
-				,&c
-				,sizeof(char)
-				,NULL
-				,&w
-				,sizeof(short)
-				,NULL);
-			inbufbot=inbuftop=0;
-			}	   /* Clear our input buffer too */
-		c=0;
-		if((action&IOFO)==IOFO) {
-			DosDevIOCtl(rio_handle
-				,IOCTL_GENERAL, DEV_FLUSHOUTPUT
-				,&c
-				,sizeof(char)
-				,NULL
-				,&w
-				,sizeof(short)
-                ,NULL);
-			outbufbot=outbuftop=0;
-			}	 /* Clear our output buffer too */
-#else // Win32
-		l=0;
-		if((action&IOFI)==IOFI)
-			l|=(PURGE_RXABORT|PURGE_RXCLEAR);
-		if((action&IOFO)==IOFO)
-			l|=(PURGE_TXABORT|PURGE_TXCLEAR);
-		PurgeComm((HANDLE)rio_handle,l);
-#endif
-		return(rio_getstate());
-	case LFN81:
-	case LFE71:
-#ifdef __OS2__
-		setline.stop=0; /* 1 stop bit */
-		if(action==LFN81) {
-			setline.data=8;
-			setline.parity=0; } /* No parity */
-		else {
-			setline.data=7;
-			setline.parity=2; } /* Even parity */
-		DosDevIOCtl(rio_handle
-			,IOCTL_ASYNC, 0x42	/* Set Line Characteristics */
-			,&setline
-			,sizeof(setline)
-			,NULL
-			,NULL
-			,0
-			,NULL);
-#else // Win32
-		GetCommState((HANDLE)rio_handle,&dcb);
-		if(action==LFN81) {
-			dcb.Parity=NOPARITY;
-			dcb.ByteSize=8;
-			dcb.StopBits=ONESTOPBIT; }
-		else {
-			dcb.Parity=EVENPARITY;
-			dcb.ByteSize=7;
-			dcb.StopBits=ONESTOPBIT; }
-		SetCommState((HANDLE)rio_handle,&dcb);
-#endif
-		return(0);
-	case FIFOCTL:
-#ifdef __OS2__
-		DosDevIOCtl(rio_handle
-			,IOCTL_ASYNC, 0x73	/* Query Device Control Block (DCB) Parms */
-			,NULL
-			,0
-			,NULL
-			,&async_dcb
-			,sizeof(async_dcb)
-			,NULL);
-
-		/* Extended Hardware Buffering (16550 FIFO) */
-		if(async_dcb.flags3&(1<<4)) {					/* Supported */
-			c=0xc0;
-			if(async_dcb.flags3&(1<<7))
-				c|=0x0c;
-			return(c); }
-#else // Win32
-		// Not supported under Win32?
-#endif
-		return(0);
-	}
-
-if((action&0xff)<=IOCM) {	/* Get/Set/Clear mode */
-	mode=0;
-
-#ifdef __OS2__
-	DosDevIOCtl(rio_handle
-		,IOCTL_ASYNC, 0x73	/* Query Device Control Block (DCB) Parms */
-		,NULL
-		,0
-		,NULL
-		,&async_dcb
-		,sizeof(async_dcb)
-		,NULL);
-	if(async_dcb.flags1&(1<<3)) /* Output CTS handshaking */
-		mode|=CTSCK;
-	if(async_dcb.flags2&(1<<0)) /* Automatic Xmit Control Flow Xon/Xoff */
-		mode|=PAUSE;
-	if(async_dcb.flags2&(1<<7)	/* RTS Input handshaking */
-		&& !(async_dcb.flags2&(1<<6)))
-		mode|=RTSCK;
-	if(rio_abort)
-		mode|=ABORT;
-
-	if(action==IOMODE)
-		return(mode);
-
-	if((action&0xff)==IOCM) 	/* Clear mode */
-		mode&=~(action&0xff00);
-	else						/* Set mode */
-		mode|=(action&0xff00);
-
-	if(mode&CTSCK)
-		async_dcb.flags1|=(1<<3);
-	else
-		async_dcb.flags1&=~(1<<3);
-	if(mode&PAUSE) {
-		async_dcb.flags2|=(1<<0);	/* xmit flow control */
-		async_dcb.xon_char=17;		/* Ctrl-Q */
-		async_dcb.xoff_char=19; }	/* Ctrl-S */
-	else
-		async_dcb.flags2&=~(1<<0);
-	if(mode&RTSCK) {
-		async_dcb.flags2|=(1<<7);
-		async_dcb.flags2&=~(1<<6); }
-	else
-		async_dcb.flags2&=~((1<<7)|(1<<6));
-	if(mode&ABORT)
-		rio_abort=1;
-	else
-		rio_abort=0;
-
-	DosDevIOCtl(rio_handle
-		,IOCTL_ASYNC, 0x53	/* Set Device Control Block (DCB) Parms */
-		,&async_dcb
-		,sizeof(async_dcb)
-		,NULL
-		,NULL
-		,0
-		,NULL);
-
-#else // Win32
-
-	GetCommState((HANDLE)rio_handle,&dcb);
-	if(dcb.fOutxCtsFlow)
-		mode|=CTSCK;
-	if(dcb.fOutX)
-		mode|=PAUSE;
-	if(dcb.fRtsControl==RTS_CONTROL_HANDSHAKE)
-		mode|=RTSCK;
-
-	if(rio_abort)
-		mode|=ABORT;
-
-	if(action==IOMODE)
-        return(mode);
-
-	if((action&0xff)==IOCM) 	/* Clear mode */
-		mode&=~(action&0xff00);
-	else						/* Set mode */
-        mode|=(action&0xff00);
-
-	if(mode&CTSCK)
-		dcb.fOutxCtsFlow=1;
-	else
-		dcb.fOutxCtsFlow=0;
-	if(mode&PAUSE) {
-		dcb.fOutX=1;
-		dcb.XonChar=17; 	/* Ctrl-Q */
-		dcb.XoffChar=19; }	/* Ctrl-S */
-	else
-		dcb.fOutX=0;
-	if(mode&RTSCK)
-		dcb.fRtsControl=RTS_CONTROL_HANDSHAKE;
-	else
-		dcb.fRtsControl=RTS_CONTROL_ENABLE;
-	if(mode&ABORT)
-		rio_abort=1;
-	else
-        rio_abort=0;
-
-	SetCommState((HANDLE)rio_handle,&dcb);
-
-#endif
-
-	return(mode); }
-
-if((action&0xff)==IOSS) {	/* Set state */
-
-	if(action&ABORT)
-		rio_aborted=1;
-
-#ifdef __OS2__
-	if(action&PAUSE)
-		DosDevIOCtl(rio_handle
-			,IOCTL_ASYNC, 0x47	/* Behave as if XOFF Received */
-			,NULL
-			,0
-			,NULL
-			,&w
-			,sizeof(short)
-            ,NULL);
-#else // Win32
-	if(action&PAUSE)
-		EscapeCommFunction((HANDLE)rio_handle,SETXOFF);
-#endif
-
-	return(rio_getstate()); }
-
-if((action&0xff)==IOCS) {	/* Clear state */
-
-	if(action&ABORT)
-		rio_aborted=0;
-
-#ifdef __OS2__
-	if(action&PAUSE)
-		DosDevIOCtl(rio_handle
-			,IOCTL_ASYNC, 0x48	/* Behave as if XON Received */
-			,NULL
-			,0
-			,NULL
-			,&w
-			,sizeof(short)
-            ,NULL);
-#else // Win32
-	if(action&PAUSE)
-		EscapeCommFunction((HANDLE)rio_handle,SETXON);
-#endif
-    return(rio_getstate()); }
-
-if((action&0xff)==TXSYNC) { /* Synchronize transmition */
-    c=action>>8;            /* Number of seconds */
-	w=110+(c*1000); 		/* Number of milliseconds */
-	start=clock();
-	while(clock()-start<w) {
-		if(!outbufcnt()) {
-#ifdef __OS2__
-			DosDevIOCtl(rio_handle
-				,IOCTL_ASYNC, 0x69	/* Query # of chars in tx queue */
-				,NULL
-				,0
-				,NULL
-				,&getqueue
-				,sizeof(getqueue)
-				,NULL);
-			if(getqueue.cur==0) 	/* Empty outbound queue */
-				return(0);
-#else // Win32
-			ClearCommError((HANDLE)rio_handle,&l,&comstat);
-			if(comstat.cbOutQue==0) /* Empty outbound queue */
-				return(0);
-#endif
-			}
-#ifdef __OS2__
-		DosSleep(1);
-#else // Win32
-		Sleep(1);
-#endif
-		}
-	return(1); }
-
-return(0);
-}
-
-/* End of file */
diff --git a/src/sbbs2/rio/riolib.h b/src/sbbs2/rio/riolib.h
deleted file mode 100644
index 26718cb5c7..0000000000
--- a/src/sbbs2/rio/riolib.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/* RIOLIB.H */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#ifndef _RIOLIB_H
-#define _RIOLIB_H
-
-#include "gen_defs.h"
-
-int 	rioini(int com,int irq);		/* initialize com,irq */
-int 	setbaud(int rate);				/* set baud rate */
-int 	rioctl(ushort action);			/* remote i/o control */
-int 	dtr(char onoff);				/* set/reset dtr */
-int 	outcom(int ch); 				/* send character */
-int 	incom(void);					/* receive character */
-int 	ivhctl(int intcode);			/* local i/o redirection */
-
-/* Win32 and OS/2 versions only */
-
-long	rio_getbaud(void);				/* get current baud rate */
-int 	rio_getstate(void); 			/* get current current state */
-void	outcom_thread(void *);
-
-extern	int rio_handle;
-
-#endif	/* Don't add anything after this line */
diff --git a/src/sbbs2/sbbs.h b/src/sbbs2/sbbs.h
deleted file mode 100644
index b805601adf..0000000000
--- a/src/sbbs2/sbbs.h
+++ /dev/null
@@ -1,472 +0,0 @@
-/* SBBS.H */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#ifndef _SBBS_H
-#define _SBBS_H
-
-/****************************/
-/* Standard library headers */
-/****************************/
-
-#include <io.h>
-#ifdef __TURBOC__
-	#include <dir.h>
-	#include <alloc.h>
-#else
-	#include <malloc.h>
-#endif
-
-#include <dos.h>
-#include <mem.h>
-#include <time.h>
-#include <errno.h>
-#include <stdio.h>
-#include <conio.h>
-#include <ctype.h>
-#include <fcntl.h>
-#include <share.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <string.h>
-#include <process.h>
-#include <sys\stat.h>
-
-#ifdef __OS2__
-	#define INCL_BASE
-    #include <os2.h>
-#else
-	#include <bios.h>
-#endif
-
-#define GLOBAL extern	/* turn vars.c and scfgvars.c files into headers */
-#ifdef SBBS
-#include "vars.c"
-#endif
-#include "smblib.h"
-#include "ars_defs.h"
-#include "scfgvars.c"
-#include "scfglib.h"
-#include "riolib.h"
-#include "riodefs.h"
-
-/***********************************************/
-/* Prototypes of functions used ONLY with SBBS */
-/***********************************************/
-
-
-void lputc(int);
-int  lclatr(int);
-uint lkbrd(int);
-int  lclaes(void);
-void lclxy(int,int);
-int  lclwx(void);
-int  lclwy(void);
-long lputs(char FAR16 *);
-
-#ifndef __FLAT__
-
-/* LCLOLL.ASM */
-int  lclini(int);
-
-#endif
-
-/* COMIO.C */
-void putcom(char *str);			/* Send string to com port */
-void putcomch(char ch);			/* Send single char to com port */
-void mdmcmd(char *str); 		/* Send translated modem command to COM */
-char getmdmstr(char *str, int sec);  /* Returns chars  */
-void hangup(void);				/* Hangup modem							*/
-void offhook(void);				/* Takes phone offhook					*/
-void checkline(void);			/* Checks if remote user has hungup		*/
-void comini(void);				/* initializes com port and sets baud   */
-void setrate(void); 			/* sets baud rate for current connect	*/
-
-/* DATIO.C */
-void getuserdat(user_t *user); 	/* Fill userdat struct with user data   */
-void putuserdat(user_t user);	/* Put userdat struct into user file	*/
-void getuserrec(int usernumber, int start, char length, char *str);
-void putuserrec(int usernumber, int start, char length, char *str);
-ulong adjustuserrec(int usernumber, int start, char length, long adj);
-void subtract_cdt(long amt);
-void getrec(char *instr,int start,int length,char *outstr);
-								/* Retrieve a record from a string		*/
-void putrec(char *outstr,int start,int length,char *instr);
-								/* Place a record into a string			*/
-uint matchuser(char *str);		/* Checks for a username match		*/
-uint finduser(char *str);
-uint lastuser(void);
-char getage(char *birthdate);
-
-int 	sub_op(uint subnum);
-ulong	getlastmsg(uint subnum, ulong *ptr, time_t *t);
-time_t	getmsgtime(uint subnum, ulong ptr);
-ulong	getmsgnum(uint subnum, time_t t);
-ulong getposts(uint subnum);
-
-int  getfiles(uint dirnum);
-int  dir_op(uint dirnum);
-int  getuserxfers(int fromuser, int destuser, char *fname);
-void rmuserxfers(int fromuser, int destuser, char *fname);
-char *username(int usernumber, char *str);
-uint gettotalfiles(uint dirnum);
-void getnodeext(uint number, char *str);
-void putnodeext(uint number, char *str);
-void getnodedat(uint number, node_t *node, char lock);
-void putnodedat(uint number, node_t node);
-void putusername(int number, char *name);
-void nodesync(void);
-void getmsgptrs(void);
-void putmsgptrs(void);
-void getusrsubs(void);
-void getusrdirs(void);
-uint userdatdupe(uint usernumber, uint offset, uint datlen, char *dat
-	, char del);
-void gettimeleft(void);
-
-/* FILIO.C */
-char addfiledat(file_t *f);
-void getfileixb(file_t *f);
-void getfiledat(file_t *f);
-void putfiledat(file_t f);
-char uploadfile(file_t *f);
-void downloadfile(file_t f);
-void removefiledat(file_t f);
-void fileinfo(file_t f);
-void openfile(file_t f);
-void closefile(file_t f);
-void update_uldate(file_t f);
-void putextdesc(uint dirnum, ulong datoffset, char *ext);
-void getextdesc(uint dirnum, ulong datoffset, char *ext);
-void viewfilecontents(file_t f);
-
-/* STR.C */
-void userlist(char subonly);
-char gettmplt(char *outstr, char *template, int mode);
-void sif(char *fname, char *answers, long len);	/* Synchronet Inteface File */
-void sof(char *fname, char *answers, long len);
-void create_sif_dat(char *siffile, char *datfile);
-void read_sif_dat(char *siffile, char *datfile);
-void printnodedat(uint number, node_t node);
-void reports(void);
-char inputnstime(time_t *dt);
-char chkpass(char *pass, user_t user);
-char *cmdstr(char *instr, char *fpath, char *fspec, char *outstr);
-void getcomputer(char *computer);
-void subinfo(uint subnum);
-void dirinfo(uint dirnum);
-char trashcan(char *insearch, char *name);
-#ifdef SBBS
-char *decrypt(ulong [],char *);
-#endif
-
-/* MSGIO.C */
-void automsg(void);
-char writemsg(char *str, char *top, char *title, int mode, int subnum
-	,char *dest);
-char putmsg(char HUGE16 *str, int mode);
-char msgabort(void);
-void email(int usernumber, char *top, char *title, char mode);
-void forwardmail(smbmsg_t *msg, ushort usernum);
-char postmsg(uint subnum, smbmsg_t *msg, int wm_mode);
-void removeline(char *str, char *str2, char num, char skip);
-ulong msgeditor(char *buf, char *top, char *title);
-void editfile(char *path);
-void getsmsg(int usernumber);
-void putsmsg(int usernumber, char *strin);
-void getnmsg(void);
-void putnmsg(int num, char *strin);
-int loadmsg(smbmsg_t *msg, ulong number);
-char HUGE16 *loadmsgtxt(smbmsg_t msg, int tails);
-ushort chmsgattr(ushort attr);
-void show_msgattr(ushort attr);
-void show_msghdr(smbmsg_t msg);
-void show_msg(smbmsg_t msg, int mode);
-void msgtotxt(smbmsg_t msg, char *str, int header, int tails);
-void quotemsg(smbmsg_t msg, int tails);
-void putmsg_fp(FILE *fp, long length, int mode);
-void editmsg(smbmsg_t *msg, uint subnum);
-void remove_re(char *str);
-void remove_ctrl_a(char *instr);
-
-/* MAIL.C */
-
-ulong loadmail(mail_t **mail, uint usernumber, int which, int mode);
-int getmail(int usernumber, char sent);
-int delmail(uint usernumber,int which);
-void delfattach(uint to, char *title);
-void telluser(smbmsg_t msg);
-void delallmail(uint usernumber);
-void readmail(uint usernumber, int sent);
-
-void bulkmail(uchar *ar);
-
-/* CONIO.C */
-int  bputs(char *str);				/* BBS puts function */
-int  rputs(char *str);				/* BBS raw puts function */
-int  lprintf(char *fmt, ...);		/* local printf */
-int  bprintf(char *fmt, ...);		/* BBS printf function */
-int  rprintf(char *fmt, ...);		/* BBS raw printf function */
-int  getstr(char *str,int length, long mode);
-void outchar(char ch);			/* Output a char - check echo and emu.  */
-char r0dentch(char ch);			/* Converts CH to r0dent CH				*/
-char getkey(long mode); 		 /* Waits for a key hit local or remote  */
-void ungetkey(char ch);			/* Places 'ch' into the input buffer    */
-char inkey(int mode);				/* Returns key if one has been hit		*/
-char yesno(char *str);
-char noyes(char *str);
-void printfile(char *str, int mode);
-void printtail(char *str, int lines, int mode);
-void menu(char *code);
-long getkeys(char *str, ulong max);
-long getnum(ulong max);
-void center(char *str);
-int  uselect(int add, int n, char *title, char *item, char *ar);
-void statusline(void);
-void pause(void);
-void waitforsysop(char on);
-void riosync(char abortable);
-char validattr(char a);
-char stripattr(char *str);
-void redrwstr(char *strin, int i, int l, char mode);
-void mnemonics(char *str);
-void attr(int atr);				/* Change local and remote text attributes */
-void ctrl_a(char x);			/* Peforms the Ctrl-Ax attribute changes */
-int  atcodes(char *code);
-char *ansi(char atr);			/* Returns ansi escape sequence for atr */
-int  whos_online(char listself);/* Lists active nodes, returns active nodes */
-
-/* LOGONOFF.C */
-int login(char *str, char *pw);
-char logon(void);
-void logout(void);
-void logoff(void);
-void newuser(void);					/* Get new user							*/
-void backout(void);
-
-/* BBSIO.C */
-char scanposts(uint subnum, char newscan, char *find);	/* Scan sub-board */
-int  searchsub(uint subnum, char *search);	/* Search for string on sub */
-int  searchsub_toyou(uint subnum);
-char text_sec(void);						/* Text sections */
-
-/* CHAT.C */
-void localchat(void);
-void chatsection(void);
-void nodepage(void);
-void nodemsg(void);
-void guruchat(char *line, char *guru, int gurunum);
-char guruexp(char **ptrptr, char *line);
-void localguru(char *guru, int gurunum);
-void packchatpass(char *pass, node_t *node);
-char *unpackchatpass(char *pass, node_t node);
-void sysop_page(void);
-void privchat(void);
-
-/* MAIN.C */
-void printstatslog(uint node);
-ulong logonstats(void);
-void logoffstats(void);
-void getstats(char node, stats_t *stats);
-
-/* MISC.C */
-void bail(int code);			/* Exit 								*/
-char *ultoac(ulong l,char *str);
-int  bstrlen(char *str);
-int  nopen(char *str, int access);
-FILE *fnopen(int *file, char *str,int access);
-char *sectostr(uint sec, char *str);		/* seconds to HH:MM:SS */
-void truncsp(char *str);		/* Truncates white spaces off end of str */
-ulong ahtoul(char *str);	/* Converts ASCII hex to ulong */
-int  pstrcmp(char **str1, char **str2);  /* Compares pointers to pointers */
-int  strsame(char *str1, char *str2);	/* Compares number of same chars */
-void errormsg(int line, char *file, char action, char *object, ulong access);
-int  mv(char *src, char *dest, char copy); /* fast file move/copy function */
-char chksyspass(int local);
-char *timestr(time_t *intime);  /* ASCII representation of time_t */
-char *zonestr(short zone);
-void dv_pause(void);
-void secwait(int sec);
-time_t ftimetounix(struct ftime f);
-struct ftime unixtoftime(time_t unix);
-time_t dstrtounix(char *str);	/* ASCII date (MM/DD/YY) to unix conversion */
-char *unixtodstr(time_t unix, char *str); /* Unix time to ASCII date */
-char *hexplus(uint num, char *str); 	/* Hex plus for 3 digits up to 9000 */
-uint hptoi(char *str);
-int chk_ar(char *str, user_t user); /* checks access requirements */
-ushort crc16(char *str);
-ulong  _crc32(char *str);
-void ucrc16(uchar ch, ushort *rcrc);
-int kbd_state(void);
-
-#ifndef __FLAT__
-long lread(int file, char HUGE16 *buf, long bytes);   /* Reads >32k files */
-long lfread(char huge *buf, long bytes, FILE *fp);
-long lwrite(int file, char HUGE16 *buf, long bytes);   /* Writes >32k files */
-#endif
-
-/* XFER.C */
-int listfile(char *fname, char HUGE16 *buf, uint dirnum
-	, char *search, char letter, ulong datoffset);
-int  listfiles(uint dirnum, char *filespec, int tofile, char mode);
-int  listfileinfo(uint dirnum, char *filespec, char mode);
-void batchmenu(void);
-void temp_xfer(void);
-void batch_add_list(char *list);
-void notdownloaded(ulong size, time_t start, time_t end);
-int viewfile(file_t f, int ext);
-
-/* XFERMISC.C */
-void seqwait(uint devnum);
-void listfiletofile(char *fname, char HUGE16 *buf, uint dirnum, int file);
-void upload(uint dirnum);
-char bulkupload(uint dirnum);
-void extract(uint dirnum);
-char *getfilespec(char *str);
-int  delfiles(char *path, char *spec);
-char findfile(uint dirnum, char *filename);
-char fexist(char *filespec);
-long flength(char *filespec);
-long fdate(char *filespec);
-long fdate_dir(char *filespec);
-char *padfname(char *filename, char *str);
-char *unpadfname(char *filename, char *str);
-char filematch(char *filename, char *filespec);
-int  protocol(char *cmdline, int cd);
-void autohangup(void);
-char checkprotlog(file_t f);
-char checkfname(char *fname);
-void viewfiles(uint dirnum, char *fspec);
-char addtobatdl(file_t f);
-int  fnamecmp_a(char **str1, char **str2);	 /* for use with resort() */
-int  fnamecmp_d(char **str1, char **str2);
-int  fdatecmp_a(uchar **buf1, uchar **buf2);
-int  fdatecmp_d(uchar **buf1, uchar **buf2);
-void resort(uint dirnum);
-int  create_batchup_lst(void);
-int  create_batchdn_lst(void);
-int  create_bimodem_pth(void);
-void batch_upload(void);
-void batch_download(int xfrprot);
-void start_batch_download(void);
-ulong create_filelist(char *name, char mode);
-
-/* XTRN.C */
-int  external(char *cmdline,char mode); /* Runs external program */
-void xtrndat(char *name, char *dropdir, uchar type, ulong tleft);
-char xtrn_sec(void);					/* The external program section  */
-void exec_xtrn(uint xtrnnum);			/* Executes online external program */
-void user_event(char event);			/* Executes user event(s) */
-char xtrn_access(uint xnum);			/* Does useron have access to xtrn? */
-char *temp_cmd(void);					/* Returns temp file command line */
-
-/* LOGIO.C */
-void logentry(char *code,char *entry);
-void log(char *str);				/* Writes 'str' to node log */
-void logch(char ch, char comma);	/* Writes 'ch' to node log */
-void logline(char *code,char *str); /* Writes 'str' on it's own line in log */
-void logofflist(void);              /* List of users logon activity */
-void errorlog(char *text);			/* Logs errors to ERROR.LOG and NODE.LOG */
-#if DEBUG
-void dlog(int line, char *file, char *text);	/* Debug log file */
-#endif
-
-/* QWK.C */
-void	qwk_sec(void);
-char	pack_qwk(char *packet, ulong *msgcnt, int prepack);
-void	unpack_qwk(char *packet,uint hubnum);
-
-
-/* FIDO.C */
-void	netmail(char *into, char *subj, char mode);
-void	qwktonetmail(FILE *rep, char *block, char *into, uchar fromhub);
-
-void inetmail(char *into, char *subj, char mode);
-void qnetmail(char *into, char *subj, char mode);
-
-/* USEREDIT.C */
-void useredit(int usernumber, int local);
-void maindflts(user_t user);
-void purgeuser(int usernumber);
-
-/* INITDATA.C */
-void initdata(void);
-
-/* VER.C */
-void ver(void);
-
-/* MAIN_SEC.C */
-void main_sec(void);
-void scanallsubs(char mode);
-void scansubs(char mode);
-void new_scan_cfg(ulong misc);
-void new_scan_ptr_cfg(void);
-
-/* XFER_SEC.C */
-void xfer_sec(void);
-void scanalldirs(char mode);
-void scandirs(char mode);
-
-/* MSWAIT.OBJ */
-
-void mswait(int msecs);
-
-#ifdef __OS2__
-#define beep(f,d) DosBeep(f,d)
-#else
-void beep(int freq, int dur);
-#endif
-
-void backslash(char *str);
-void backslashcolon(char *str);
-void getlines(void);
-void strip_ctrl(char *str);
-void strip_exascii(char *str);
-
-char wfc_events(time_t lastnodechk);
-void catsyslog(int crash);
-char waitforcall(void);
-void quicklogonstuff(void);
-char terminal(void);
-void startup(int argc, char *argv[]);
-
-void crack_attempt(void);
-
-/*********************/
-/* OS specific stuff */
-/*********************/
-
-#ifdef __FLAT__
-
-#define lread(f,b,l) read(f,b,l)
-#define lfread(b,l,f) fread(b,l,f)
-#define lwrite(f,b,l) write(f,b,l)
-#define lfwrite(b,l,f) fwrite(b,l,f)
-
-#endif
-
-#if (__BORLANDC__ > 0x0410)
-#define _chmod(p,f,a) _rtl_chmod(p,f,a) 	// _chmod obsolete in 4.x
-#endif
-
-#if defined(__OS2__)
-	#define lclini(x)	window(1,1,80,x)
-	#define lclaes()	conaes()
-    #define nosound() ;
-#elif defined(__WIN32__)
-	#define lclini(x)	window(1,1,80,x)
-	#define lclxy(x,y)	gotoxy(x,y)
-	#define lclwy() 	wherey()
-	#define lclwx() 	wherex()
-	#define lputs		cputs
-    #define nosound() ;
-#elif defined(__FLAT__)
-    #define mswait(x) delay(x)
-#endif
-
-#ifndef __OS2__
-	#define outcon(ch) lputc(ch)
-#endif
-
-
-#endif /* Don't add anything after this #endif statement */
diff --git a/src/sbbs2/sbbs_src.doc b/src/sbbs2/sbbs_src.doc
deleted file mode 100644
index 00e2657317..0000000000
--- a/src/sbbs2/sbbs_src.doc
+++ /dev/null
@@ -1,660 +0,0 @@
-       Synchronet BBS Software and Utilities C Source Code Documentation
-       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			Created April 1997, Rob Swindell
-		      Updated September 1997, Rob Swindell
-		      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Official Synchronet Web Site:
-	http://www.weedpuller.com/synchronet
-Latest version of the source code and this document stored at:
-	ftp://ftp.weedpuller.com/synchronet
-Post public questions are comments on the freelance Synchronet listserv:
-	mailto:synchronet@freelance.com
-Send bug fixes or comments
-	mailto:sbbs@weedpuller.com
-
-I no-longer monitor any BBS-related newsgroups (too flakey and spam-ridden).
-
-History
-=======
-
-The Synchronet BBS software project began in December of 1990 when I started
-writing my very own BBS program from the ground up. While it is true that I ran
-Wayne Bell's WWIV BBS software for a number of years and an illicit copy of the
-WWIV source code was my first exposure to the C Programming Language, I didn't
-steal, borrow, or otherwise copy the WWIV source code for use in Synchronet in
-any way. I did refer to Wayne's code from time to time when implementing
-WWIV-compatible features like WWIV color codes, but I didn't need (or want) to
-copy his source. I do wish to take this moment, however, to extend my
-appreciation to Wayne Bell for his contributions to the BBS and hacker
-communities, and for personally inspiring me to write a better BBS! ;-)
-
-In 1992, Synchronet became a commercial venture for me (under the company name
-Digital Dynamics) and was my sole source of income for over three years. The
-commercialization of the Internet, and in paticular, the Wolrd Wide Web, has
-all but eliminated the commercial BBS software market and in 1996, I officially
-announced the end of Digital Dynamics (in the "Digital Manifesto"). In February
-of 1997, my own BBS, Vertrauen, was abruptly shut-down. This time for good.
-From September of 1988 to February of 1997, Vertrauen (German for "Trust")
-answered the phone at 714-529-9525 24 hours a day, 7 days a week. It went from
-a 1 line "pirate" BBS running WWIV on an 8mhz 8088 to a 7 node Synchronet
-BBS running on two 66mhz 486s connected to a Novell NetWare 3.12 file server
-with many gigabytes of disk space, 7 CD-ROMS, Planet Connect Fidonet feed, the
-whole nine yards - pretty much everything except Internet access (never could
-justify the monthly costs of a full-time connection).
-
-Today, I personally have very little interest in BBSs (using or operating them)
-and my programming interests have been focused elsewhere for quite some time
-(Internet communication products). For this reason, I am releasing the
-complete source code (in C) for Synchronet BBS software and all other Digital
-Dynamics' utilites. Since I expect no futher income from Synchronet BBS
-software and have no plans on enhancing or supporting the product in any way, I
-thought the least I could do was to package up, document, and publicly release
-the source code for others to continue enhancing as they wish.
-
-
-Disclaimer
-==========
-
-The accompanying source code (and this documentation) are not intended for the
-beginning, or possibly even intermediate, programmer. You must have a healthy
-knowledge of DOS, MAKEFILES, and the C Programming Language for this source
-code to be of any use to you. Of course, beginners are encouraged to learn
-(hopefully with the help of a friend or two) from the included projects - just
-don't get too irritated if things don't compile and link the first time.
-
-It is my hope that a hand full of capable young hackers will take Synchronet
-into new directions. Hopefully, retaining the original name (Synchronet) in
-some form, although there is no way for me to enforce this. I assume that some
-will make minor modifications and re-release compiled versions under their name
-with no credit to my work or the history of Synchronet, but while that isn't
-"cool", it isn't illegal either. I am releasing the rights to every piece of
-code accompanying this document to the public domain. That means that anyone
-and everyone can do with it whatever they like as far as I'm concerned.
-
-I, Rob Swindell, author of Synchronet, owner of Digital Dynamics, hereby
-relinquish the copyright of Synchronet BBS software and all Synchronet-related
-Digital Dynamics' utilities to the public domain. I am offering no warranties
-of any kind. Use at your own risk.
-
-
-Required Tools				Version 		Project(s)
-==============				------- 		----------
-
-Borland C++ for DOS and Windows 	3.1			SBBS.EXE
-								SBJ.EXE
-								SBL.EXE
-								SCB.EXE
-								SMM.EXE
-								UTI*.EXE
-								ADDFILES.EXE
-								DELFILES.EXE
-								DUPEFIND.EXE
-								FILELIST.EXE
-								SMBACTIV.EXE
-
-  Note: Newer versions of Borland C++ tended to create larger, more memory
-	hungry executables, so I stayed with 3.1 for these 16-bit DOS versions
-	(where available DOS memory was a never ending issue with sysops).
-	Newer versions of Borland C++ will work (with slight changes to the
-	appropriate MAKEFILEs) for the above projects. The last five projects
-	listed above are built with MAKEFILE.BC (i.e. make -fmakefile.bc)
-	instead of MAKEFILE (used for Watcom).
-
-Borland C++ for DOS, Windows, and Win32 4.5			SCFG.EXE
-								SCFG32.EXE
-								BAJA.EXE
-								BAJA32.EXE
-								SBBS4W32.EXE
-								INSTALL.EXE
-								QWKNODES.EXE
-								SBBSECHO.EXE
-								SMB2SBL.EXE
-								SBL2SMB.EXE
-								SMB2SMM.EXE
-								SMM2SMB.EXE
-								NODE.COM
-								SLOG.EXE
-								DSTSEDIT.EXE
-								ANS2MSG.EXE
-                                                                MSG2ANS.EXE
-								EXECSBBS.COM
-
-  Note: SBBS4W32.EXE, the 32-bit Windows version of Synchronet, is incomplete.
-	Again, newer versions of Borland C++ (4.51, 5.x, etc) will probably
-	work fine with slight changes to the appropriate MAKEFILEs. SCFG32.EXE
-	is a native Win32 app that also runs under DOS (using Borland's DOS
-	extender) - I don't know why the gettext/puttext is messed up.
-	You'll need EXE2BIN.EXE (included with MS-DOS) to create EXECSBBS.COM.
-
-
-Borland C++ for OS/2			2.0			SBBS4OS2.EXE
-								SCFG4OS2.EXE
-								SBBSECHO.EXE
-								ADDFILES.EXE
-								BAJA4OS2.EXE
-								DELFILES.EXE
-								DUPEFIND.EXE
-								FILELIST.EXE
-								INSTALL.EXE
-								NODE.EXE
-								SLOG.EXE
-								CHKSMB.EXE
-								FIXSMB.EXE
-								SMBUTIL.EXE
-								SMBACTIV.EXE
-								DSTSEDIT.EXE
-								ANS2MSG.EXE
-								MSG2ANS.EXE
-								EXECSBBS.EXE
-								
-  Note: Watcom makefiles are available for many of these projects and have
-	the advantage of being able to be built from any environment (DOS,
-	Windows, or OS/2) and create executables that run under all those
-	environments. Borland C++ for OS/2, on the otherhand, can only be
-	used in an OS/2 environment and can only create OS/2 executables.
-	While Borland's C++ compilers definitely compile faster, the resulting
-	exectubles created by Watcom C++ are usually smaller and faster.
-	Any of the projects that don't already have support for Borland C++
-	for OS/2, can probably be easily modified to do so (this excludes
-	XSDK apps). Most popular executables are already supported.
-
-
-Watcom C++				10.0a			ADDFILES.EXE
-								AUTONODE.EXE
-								DELFILES.EXE
-								DUPEFIND.EXE
-								FILELIST.EXE
-								SBBSECHO.EXE
-								SMBUTIL.EXE
-								SMBACTIV.EXE
-
-  Note: All flavors (16-bit DOS, 32-bit DOS, 32-bit OS/2, and 32-bit Windows)
-	Love the cross-platform capabilites of Watcom C++!
-	The NT\*.EXE files are Win32 executables that run native under either
-	Windows 95 or Windows NT.
-	The DOSX\*.EXE and DOS4G\*.EXE files are extended DOS executables that
-	need DOS4G.EXE or DOS4GW.EXE (included with Watcom C++) in the search
-	path. (Sorry 'bout the inconsistency in the sub-directory names,
-	there's no difference between DOSX and DOS4G except that I used to have
-	some extended DOS Borland projects write to the DOSX directories).
-
-	*** IMPORTANT ***
-	1) It is important that you delete all the files from the DOS and OS2
-	   destination sub-directories (use CLEANALL.BAT) if you've previously
-	   built a project using Borland C++ and wish to re-build it using
-	   Watcom. The .OBJ files are NOT compatible between Watcom and Borland
-	   (without some special effort).
-	2) You must copy \WATCOM\SRC\STARTUP\WILDARGV.C from the Watcom C++
-	   installation directory (or CD-ROM) into the SBBS\SMB\SMBUTIL
-	   directory before attempting a Watcom build on the SMBUTIL project.
-	   It's a copyrighted file, so I couldn't include it.
-
-	Watcom can be/could have been used for some of the Borland-only
-	projects, but due to its slow compile speed, I only used it for the
-	projects that needed the best extended DOS support (DOS4G blows away
-	Borland's DOS extender) and cross-platform compile (it was a pain to
-	boot OS/2 every time I needed to build an OS/2 executable with Borland
-	C++ for OS/2). Plus, Watcom's text-mode screen-libraries were sorely
-	lacking (hence no CFG.EXE projects are built with Watcom).
-
-Tool Notes
-==========
-
-As noted aboved, Borland C++ v4.5 (or possibly newer versions) may be used for
-SBBS.EXE (and other BC v3.1 projects), but you will have less available DOS
-memory (the executable will consume more memory).
-
-Borland C++ v4.5 can also be used for many of the Watcom compiled utilities.
-If you find MAKEFILE.BC in any of the Watcom compiled project directories, you
-can use this makefile to build a 16-bit DOS, 32-bit OS/2, and in some cases
-32-bit DOS executable with Borland C++. Likewise, any *.WAT makefiles (and most
-of the MAEKALL.BAT files) are intended for use with Watcom C++.
-
-
-Project Notes
-=============
-
-Most projects are built via MAKEFILE and/or .BAT/.CMD file. If you find a
-MAKEALL.BAT or MAKEALL.CMD (for OS/2) file in any of the project directories,
-this batch file is used to compile and link versions for all supported
-platforms (e.g. DOS-16, DOS-32, OS/2, Win32, etc).
-
-If a MAKEFILE or *.MAK file doesn't exist in the project directory, there may
-be a simple MAKE.BAT/MAKE.CMD to build the executable. The simplest projects
-may not include any type of MAKEFILE, BAT, or CMD file, but just require a
-basic CC command line to compile and link into an executable (only the most
-independant and smallest projects fit into this category).
-
-The MAKEALL.BAT file in the source ROOT directory is used to build ALL
-Borland C++ DOS and Win32 projects.
-
-The MAKEALL.CMD file in the source ROOT directory is used to build ALL
-Borland C++ OS/2 projects.
-
-The WMAKEALL.BAT file in the source ROOT directory is used to build ALL
-Watcom C++ DOS, DOS4G, OS/2 and Win32 projects.
-
-Sub-directories are usually used to house the output files (.OBJ, .EXE, .MAP,
-etc) for each supported platform. Sub-directories with the name DOS are used
-for 16-bit DOS output files; sub-directories of DOSX, DOS32, or DOS4G are used
-for 32-bit extended DOS output files; sub-directories of OS2 contain 32-bit
-OS/2 output files; subdirectories of NT or W32 contain 32-bit Windows
-(Windows NT or Windows 95) output files. In the more simple projects (e.g.
-BAJA*.EXE), no sub-directories are utilized.
-
-The makefiles (MAKEFILE.*, *.MAK, *.BC, *.WAT) are setup for my environment.
-You will most likely need to make changes to these makefiles for your
-environment. For reference purposes, these are the path locations of the
-various tools in my environment:
-
-Path			Tool
-----			----
-N:\BC31 		Borland C++ for DOS and Windows v3.1
-N:\BC45 		Borland C++ for DOS, Windows, and Win32 v4.5
-C:\BCOS2		Borland C++ for OS/2 v2.0
-N:\WATCOM		Watcom C++ v10.0a
-
-My system PATH environment variable contains N:\BC45\BIN, N:\WATCOM\BINB,
-and N:\WATCOM\BIN. So if you see references (without path) to BCC, then that
-would indicate Borland C++ v4.5. MAKE and MAKER are Borland's MAKE utilities
-(included with Borland C++ v4.5, the latter being the 16-bit real mode
-version). WMAKE is the Watcom MAKE utility.
-
-My N:\BCxx\BIN\TURBOC.CFG file contains:
-
--IN:\BCxx\INCLUDE
--LN:\BCxx\LIB
-
-I've made an effort to eliminate the project drive letter (N:) from all
-MAKEFILEs and BATch files, but some references may still remain. If you only
-have one hard disk on your system (C:) or your projects are stored on the same
-drive the compiler(s) is/are installed on, then simply eliminating any drive
-letter specifications is suggested.
-
-Efforts have been made to eliminate all compiler warnings, but in some cases
-warnings may persist. Especially when using a different compiler or version
-than I have used. Any warnings in the source code I'm releasing may be safely
-ignored. If you or anyone else has modified the code, then warnings in the
-modified files should be investigated at your discretion.
-
-
-Directory Hierachry
-===================
-
-If extracted correctly, the archive that contained this document should have
-created a directory hierarchy similar to the following:
-
-�� SBBS ����������� ADDFILES ������� DOS
-�		 �		  �� DOSX
-�		 �		  �� NT
-�		 �		  �� OS2
-�		 �� ALLUSERS
-�		 �� ANS2MSG
-�		 �� AUTONODE
-�		 �� BAJA
-�		 �� DCDWATCH
-�		 �� DELFILES ������� DOS
-�		 �		  �� DOSX
-�		 �		  �� NT
-�		 �		  �� OS2
-�		 �� DOS
-�		 �� DSTSEDIT
-�		 �� DUPEFIND ������� DOS
-�		 �		  �� DOSX
-�		 �		  �� NT
-�		 �		  �� OS2
-�		 �� ECHO ����������� DOS
-�		 �		  �� DOS4G
-�		 �		  �� NT
-�		 �		  �� OS2
-�		 �� EXECDOS
-�		 �� EXECSBBS ������� DOS
-�		 �		  �� OS2
-�		 �� FILELIST ������� DOS
-�		 �		  �� DOSX
-�		 �		  �� NT
-�		 �		  �� OS2
-�		 �� INSTALL �������� DOS
-�		 �		  �� OS2
-�		 �� MLABELS
-�		 �� MSG2ANS
-�		 �� MSWAIT ��������� DOS
-�		 �� NODE ����������� DOS
-�		 �		  �� OS2
-�		 �� OS2
-�		 �� QWKNODES
-�		 �� RIO
-�		 �� SBL
-�		 �� SBJ
-�		 �� SCB
-�		 �� SCFG ����������� DOS
-�		 �		  �� DOS32
-�		 �		  �� OS2
-�		 �� SDK
-�		 �� SLOG ����������� DOS
-�		 �		  �� OS2
-�		 �� SMB ������������ CHKSMB ��������� DOS
-�		 �		  �		   �� OS2
-�		 �		  �� FIXSMB ��������� DOS
-�		 �		  �		   �� OS2
-�		 �		  �� SMBUTIL �������� DOS
-�		 �				   �� DOS4G
-�		 �				   �� NT
-�		 �				   �� OS2
-�		 �� SMBACTIV ������� DOS
-�		 �		  �� DOSX
-�		 �		  �� NT
-�		 �		  �� OS2
-�		 �� SMM
-�		 �� UTI
-�		 �� W32
-�� MSWAIT ��������� DOS
-�� SPAWNO
-�� STP
-�� TONE
-�� UIFC
-
-Directory Descriptions
-----------------------
-SBBS\		Synchronet source code and shared header files
-SBBS\SMB\	Synchronet Message Base library and header files
-...\CHKSMB\	Source for utility to check Synchronet message bases for errors
-...\FIXSMB\	Source for utility to rebuild Synchronet message base indices
-...\SMBUTIL\	Synchronet message base maintenance utility (SMBUTIL) source
-SBBS\RIO\	OS/2 and Win32 Remote I/O library source and header files
-SBBS\SDK\	Synchronet External program SDK (XSDK) source and header files
-SBBS\SMM\	Synchronet Match Maker and utility source
-SBBS\SCB\	Synchronet Callback source
-SBBS\SBJ\	Synchronet Blackjack source
-SBBS\SBL\	Synchronet BBS List source
-SBBS\UTI\	Synchronet UTI driver (for PostLink/RelayNet/RIME) source
-SBBS\SCFG\	Synchronet Configuration program source
-SBBS\BAJA\	Synchronet shell/module compiler (BAJA.EXE) source
-SBBS\ECHO\	SBBSecho (FidoNet echomail program) source
-SBBS\EXECDOS\	Synchronet for OS/2's EXECDOS.EXE source
-SBBS\EXECSBBS\	EXECSBBS.COM/EXE (for SBBS4DOS/OS2) source
-SBBS\DCDWATCH\	DCDWATCH.EXE source
-SBBS\ADDFILES\	ADDFILES.EXE source
-SBBS\DELFILES\	DELFILES.EXE source
-SBBS\DUPEFIND\	DUPEFIND.EXE source
-SBBS\FILELIST\	FILELIST.EXE source
-SBBS\ALLUSERS\	ALLUSERS.EXE source
-SBBS\MLABELS\	MLABLES.EXE source
-SBBS\ANS2MSG\	ANS2MSG.EXE source
-SBBS\MSG2ANS\	MSG2ANS.EXE source
-SBBS\AUTONODE\	AUTONODE.EXE source
-SBBS\SMBACTIV\	SMBACTIV.EXE source
-SBBS\QWKNODES\	QWKNODES.EXE source
-SBBS\SLOG\	SLOG.EXE source
-SBBS\NODE\	NODE.COM/EXE source
-SBBS\DSTSEDIT\	DSTSEDIT.EXE source
-SBBS\INSTALL\	INSTALL.EXE source
-MSWAIT\ 	MSWAIT\DOS\MSWAIT.OBJ (millisecond wait) source
-SPAWNO\ 	Ralf Brown's EMS/XMS/disk swapping replacement for spawn...()
-STP\		Synchronet Transfer Protocols (X/Y/Zmodem) [incomplete]
-TONE\		Tone generator (used for external sysop chat pager)
-UIFC\		User Interface library source and header files (for *CFG.EXE)
-
-Note: If you don't recognize the name of a program or utility, see SYSOP.DOC.
-Note: Source code for SBBS\DOS\RCIOL.OBJ is not provided because I don't have
-      it (the consultant that developed this module never supplied me with the
-      latest version of the source code).
-
-
-C Header File Notes
-===================
-
-SBBS\SBBS.H
------------
-This is the main shared header file for Synchronet and Synchronet related
-utilities. This header file contains prototypes for most all functions
-contained in SBBS.EXE. But, more importantly, it #includes SMBLIB.H (which
-indirectly #includes SMBDEFS.H), ARS_DEFS.H (which indirectly #includes
-GEN_DEFS.H), SCFGVARS.C (which indirectly #includes SBBSDEFS.H, which
-indirectly #includes NODEDEFS.H), SCFGLIB.H, RIOLIB.H, RIODEFS.H, and if "SBBS"
-is defined (only in the MAKEFILE for SBBS) VARS.C (which indirectly #includes
-text.h). So, as you can see, SBBS.H pretty much covers it in the header file
-department for Synchronet and its related utilities. The only header files
-that SBBS.H doesn't directly or indirectly #include are QWK.H, POST.H, ETEXT.H,
-CMDSHELL.H, and SPAWNO.H. You will find this header file is the most commonly
-#included header file in SBBS modules and Sycnhronet related utilities. The
-comments are quite antiquated and may be safely ignored (e.g. /* DATIO.H */).
-
-SBBS\SBBSDEFS.H
----------------
-This file contains most constants, macros, and type definitions used for
-Synchronet and its utilities. Since it is indirectly #included with SBBS.H,
-you won't find it specifically #included very often.
-
-SBBS\SCFGLIB.H
---------------
-Contains type defintions and function protoypes only used in the initialization
-of Synchronet's configuration structures. Used by the SBBS and SCFG projects
-and all utilities that read Synchronet's configuration (*.CNF) files.
-
-SBBS\GEN_DEFS.H
----------------
-A small header file that contains general application independant constant
-defintions and macros. This header file is #included directly or indirectly
-with nearly every project.
-
-SBBS\ARS_DEFS.H
----------------
-Synchronet's Access Requirement Strings function prototype and constants.
-This function prototype and constants were broken out for use in the SBBS\BAJA
-(shell/module compiler) project.
-
-SBBS\CMDSHELL.H
----------------
-Contains constants, typedefs, and function prototypes specific to Synchronet's
-command shell/module interpreter. Also used in the SBBS\BAJA (shell/module
-compiler) project.
-
-SBBS\POST.H
------------
-Contains type defintions for post_t and shared function prototypes for
-the SBBS and SBBSecho projects.
-
-SBBS\QWK.H
-----------
-Contains constants, type definitions, and function prototypes only used in
-the QWK related portions of the SBBS project.
-
-SBBS\TEXT.H
------------
-Contains constant defintions (via enum) for every text item in Synchronet's
-TEXT.DAT file. Since this header file is indirectly #included with SBBS.H
-in the SBBS project, you won't find it specifically #included very often.
-
-SBBS\ETEXT.H
-------------
-Contains extern variable declarations for the encrypted text strings in the
-SBBS project. This file is automatically created (along with ETEXT.C) from
-ETEXT.DAT by the GENETEXT.EXE utility. The encrypted text strings are left
-over from the commercial version of SBBS.
-
-SBBS\VARS.C
------------
-This is a dual-purpose file. If GLOBAL isn't defined, then it's a C source
-file for all of Synchronet's global variables. SBBS.H automatically #defines
-GLOBAL to extern and #includes this file to automatically declare all global
-variables as extern. This eliminates the double-entry work of creating
-separate definitions and declarations for global variables. This file is
-only used in the SBBS project.
-
-SBBS\RIO\RIOLIB.H
------------------
-This file contains function prototypes for the Remote I/O Library API. This API
-is consistent between DOS, OS/2 and Win32 versions.
-
-SBBS\RIO\RIODEFS.H
-------------------
-Contains constants required for using the Remote I/O Library.
-
-SBBS\SMB\SMBLIB.H
------------------
-Contains constants and function prototypes for the Synchronet Message Base
-Library.
-
-SBBS\SMB\SMBDEFS.H
-------------------
-Contains constants and type definitions required for using the Synchronet
-Message Base Library.
-
-SBBS\SMB\CRC32.H
-----------------
-Standard 32-bit CRC table and macro. Also included in BAJA, SBBSecho, and
-other projects.
-
-SBBS\SCFG\SCFG.H
-----------------
-Contains constant defintions, macros, global variable declarations, and
-function prototypes for modules in the SCFG project.
-
-SBBS\ECHO\SBBSECHO.H
---------------------
-Contains constants, type definitions, and function prototypes for the
-SBBSecho project.
-
-SBBS\UTI\UTI.H
---------------
-Small header file containing global variable declarations, constants, macros,
-and a function prototype for modules in the UTI driver project.
-
-SBBS\SDK\XSDK.H
----------------
-Main header file for Synchronet external programs using the External
-program SDK (XSDK). This header file #includes XSDKVARS.C (global variable
-declarations) which indirectly #includes XSDKDEFS.H (constants and type
-defintions).
-
-UIFC\UIFC.H
------------
-Contains constants, macros, type definitions, and function prototypes for
-the local console User Interface library. Used by the SCFG, SCBCFG, SMMCFG
-and ECHOCFG projects.
-
-SPWANO\SPANWO.H
----------------
-Ralf Brown's spawno function prototypes. Used for swaping SBBS.EXE (16-bit
-DOS) out of memory.
-
-
-C Source File Notes
-===================
-
-Overlays
---------
-The SBBS project (SBBS.EXE/SBBS4OS2.EXE/SBBS4W32.EXE) contains the largest
-number of C source files and has the longest history. For a few years, SBBS.EXE
-was a small 16-bit DOS executable that executed completely in memory (no
-overlays). With each additional group of features, the executable file
-(SBBS.EXE) inevitably increased in size and memory consumption. At one point I
-started compiling two separate versions of SBBS.EXE, one with some of the
-modules overlaid (dynamically swapped to/from disk), and another without
-overlays (faster, but consumed more memory). This was the time with I began to
-split off less-commonly called functions into modules that were specifically
-overlaid (and given a filename ending in OVL.C, e.g. MAIN.C contains
-non-overlaid code, and MAIN_OVL.C contains overlaid code).
-
-As the exectuable grew larger and my knowledge and experience with optimization
-of overlaid modules grew, I stopped making the non-overlaid version
-altogether. The performance difference had become negligible and the memory
-consumption of the non-overlaid version was unwieldly. Anyway, the point of
-this little story is to help explain why so many of the filenames end in OVL.
-Eventually, I ended up overlaying most of the modules (not just the ones named
-with OVL). But still, you'll find that the code in the modules with the OVL
-names is of the less-frequently executed variety. Only the 16-bit versions of
-SBBS.EXE and SCFG.EXE use overlaid modules. All other projects (and the 32-bit
-versions of SBBS/SCFG) do not explicitly use overlays.
-
-Hi/Mid/Low Level
-----------------
-The modules with filenames containing HI (e.g. XFER_HI.C) contain high-level
-code (mostly user-interface type functions); modules with filenames containing
-MID (e.g. CON_MID.C) contain mid-level code (larger functions that don't
-contain direct user-interfaces;, and modules with filenames containing LO
-(e.g. XFER_LO.C) contain low-level code (smaller functions called frequently
-from mid or high level code).
-
-Comments
---------
-Please excuse the sparse comments; I never planned on giving the source code
-out. The source code that was originally distributed freely (SMB library and
-XSDK) is better commented.
-
-
-C Source Content Notes
-======================
-
-First off, make sure you're using an editor with tab stops set to 4 spaces
-for *.C and *.H files (QEdit works nicely), otherwise the source will be mostly
-unreadable (don't try to print the files without first exanding all tabs to
-4 space tabstops). All MAKEFILES and other text files use 8 space tab stops.
-
-If you're an experienced C programmer, the first thing you'll notice when
-examining any of the source code is my somewhat unique style. It's your basic
-K&R style C with significantly compressed whitespace. Most notably, I don't
-put closing curly braces (}) on their own line (except at the end of a
-function). Instead, I use consitent indentation to indicate nested logic and
-control flow. Also, I don't indent the base code of a function, but I do indent
-automatic variables. And I don't put white space between any operators except
-&& and ||. This style comes from the usefulness of getting as much code as
-possible in an 80x25 window (and saving printer paper). You'll notice, I do use
-blank lines to enhance readability, but there are no strict rules I follow in
-the blank line department. If my style really bugs you and you just can't get
-used to it, then run the source through a C beautifier or other such C
-formatting utility (but don't cry if it doesn't compile after that).
-
-Example (K&R style):
-
-main()
-{
-    char line[MAXLINE];
-    int found = 0;
-
-    while (getline(line, MAXLINE) > 0)
-	if (strindex(line, pattern) >= 0) {
-	    printf("%s", line);
-	    found++;
-	}
-    return found;
-}
-
-Example (my style):
-
-main()
-{
-    char line[MAXLINE];
-    int found=0;
-
-while(getline(line,MAXLINE)>0)
-    if(strindex(line,pattern)>=0) {
-	printf("%s",line);
-	found++; }
-return(found);
-}
-
-If you find blocks of code contained in "#if 0" and "#endif" or "/***" and
-"***/", you can safely ignore or even delete this code (the compiler is
-ignoring it). For some reason, I found it necessary or preferable to remove or
-replace the code in question but wished to leave the old code temporarily
-intact in case I changed my mind... I'm not going to be changing me mind. :-)
-
-I've deleted all sections of code refering to registration numbers, keys, etc.
-If you find some code remaining that appears to require a registration number
-or key of some sort, it probably can be safely ignored (unless you've found it
-impeding the operation of the program) - but there shouldn't be any.
-
-
-Last Minute Updates
-===================
-
-The UTI, FIXSMB, QWKNODES, and SBL2SMB/SMB2SBL projects were all converted from
-SMBLIB 1.x to 2.x at the last minute. They all compile, but haven't been
-tested. The differences between SMBLIB 1.x and 2.x are mainly in the calling
-conventions, so these programs should run fine, but I suppose you never know
-what could've happened.
-
-/* End of SBBS_SRC.DOC */
diff --git a/src/sbbs2/sbbsdefs.h b/src/sbbs2/sbbsdefs.h
deleted file mode 100644
index 93304c26d1..0000000000
--- a/src/sbbs2/sbbsdefs.h
+++ /dev/null
@@ -1,1330 +0,0 @@
-/* SBBSDEFS.H */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/************************************************************/
-/* Constants, macros, and typedefs for use ONLY with SBBS	*/
-/************************************************************/
-
-#ifndef _SBBSDEFS_H
-#define _SBBSDEFS_H
-
-#include "gen_defs.h"
-#include "nodedefs.h"
-#include <time.h>
-
-/*************/
-/* Constants */
-/*************/
-
-#define VERSION 	"2.30"  /* Version: Major.minor  */
-#define REVISION	'C'
-#define BETA		" beta"     /* Space if non-beta, " �eta" otherwise */
-
-#define Y2K_2DIGIT_WINDOW	70
-
-/************/
-/* Maximums */
-/************/
-
-#define MAX_NODES		250
-
-#ifdef __FLAT__
-#define MAX_FILES	  10000 /* Maximum number of files per dir			*/
-#define MAX_SYSMAIL   50000 /* Maximum number of total emails in system */
-#else
-#define MAX_FILES	   1000 /* Maximum number of files per dir			*/
-#define MAX_SYSMAIL    5000 /* Maximum number of total emails in system */
-#endif
-#define MAX_USERXFER	500 /* Maximum number of dest. users of usrxfer */
-
-
-#define LEN_DIR 63			/* Maximum length of directory paths		*/
-#define LEN_CMD 63			/* Maximum length of command lines			*/
-
-							/* Lengths of various strings				*/
-#define LEN_GSNAME	15		/* Group/Lib short name						*/
-#define LEN_GLNAME	40		/* Group/Lib long name						*/
-#define LEN_SSNAME	25		/* Sub/Dir short name						*/
-#define LEN_SLNAME	40		/* Sub/Dir long name						*/
-
-								/* User Questions						*/
-#define UQ_ALIASES	(1L<<0) 	/* Ask for alias						*/
-#define UQ_LOCATION (1L<<1) 	/* Ask for location 					*/
-#define UQ_ADDRESS	(1L<<2) 	/* Ask for address						*/
-#define UQ_PHONE	(1L<<3) 	/* Ask for phone number 				*/
-#define UQ_HANDLE	(1L<<4) 	/* Ask for chat handle					*/
-#define UQ_DUPHAND	(1L<<5) 	/* Search for duplicate handles 		*/
-#define UQ_SEX		(1L<<6) 	/* Ask for sex :)						*/
-#define UQ_BIRTH	(1L<<7) 	/* Ask for birth date					*/
-#define UQ_COMP 	(1L<<8) 	/* Ask for computer type				*/
-#define UQ_MC_COMP	(1L<<9) 	/* Multiple choice computer type		*/
-#define UQ_REALNAME (1L<<10)	/* Ask for real name					*/
-#define UQ_DUPREAL	(1L<<11)	/* Search for duplicate real names		*/
-#define UQ_COMPANY	(1L<<12)	/* Ask for company name 				*/
-#define UQ_NOEXASC	(1L<<13)	/* Don't allow ex-ASCII in user text    */
-#define UQ_CMDSHELL (1L<<14)	/* Ask for command shell				*/
-#define UQ_XEDIT	(1L<<15)	/* Ask for external editor				*/
-#define UQ_NODEF	(1L<<16)	/* Don't ask for default settings       */
-#define UQ_NOCOMMAS (1L<<17)	/* Do not require commas in location	*/
-
-
-								/* Different bits in sys_misc				*/
-#define SM_CLOSED	(1L<<0) 	/* System is clsoed to New Users			*/
-#define SM_SYSSTAT	(1L<<1) 	/* Sysops activity included in statistics	*/
-#define SM_NOBEEP	(1L<<2) 	/* No beep sound locally					*/
-#define SM_PWEDIT	(1L<<3) 	/* Allow users to change their passwords	*/
-#define SM_TIMED_EX (1L<<4) 	/* Timed event must run exclusively 		*/
-#define SM_ANON_EM	(1L<<5) 	/* Allow anonymous e-mail					*/
-#define SM_LISTLOC	(1L<<6) 	/* Use location of caller in user lists 	*/
-#define SM_WILDCAT	(1L<<7) 	/* Expand Wildcat color codes in messages	*/
-#define SM_PCBOARD	(1L<<8) 	/* Expand PCBoard color codes in messages	*/
-#define SM_WWIV 	(1L<<9) 	/* Expand WWIV color codes in messages		*/
-#define SM_CELERITY (1L<<10)	/* Expand Celerity color codes in messages	*/
-#define SM_RENEGADE (1L<<11)	/* Expand Renegade color codes in messages */
-#define SM_ECHO_PW	(1L<<12)	/* Echo passwords locally					*/
-#define SM_REQ_PW	(1L<<13)	/* Require passwords locally				*/
-#define SM_L_SYSOP	(1L<<14)	/* Allow local sysop logon/commands 		*/
-#define SM_R_SYSOP	(1L<<15)	/* Allow remote sysop logon/commands		*/
-#define SM_QUOTE_EM (1L<<16)	/* Allow quoting of e-mail					*/
-#define SM_EURODATE (1L<<17)	/* Europian date format (DD/MM/YY)			*/
-#define SM_MILITARY (1L<<18)	/* Military time format 					*/
-#define SM_TIMEBANK (1L<<19)	/* Allow time bank functions				*/
-#define SM_FILE_EM	(1L<<20)	/* Allow file attachments in E-mail 		*/
-#define SM_SHRTPAGE (1L<<21)	/* Short sysop page 						*/
-#define SM_TIME_EXP (1L<<22)	/* Set to expired values if out-of-time 	*/
-#define SM_FASTMAIL (1L<<23)	/* Fast e-mail storage mode 				*/
-#define SM_QVALKEYS (1L<<24)	/* Quick validation keys enabled			*/
-#define SM_ERRALARM (1L<<25)	/* Error beeps on							*/
-#define SM_FWDTONET (1L<<26)	/* Allow forwarding of e-mail to netmail	*/
-#define SM_DELREADM (1L<<27)	/* Delete read mail automatically			*/
-#define SM_NOCDTCVT (1L<<28)	/* No credit to minute conversions allowed	*/
-#define SM_DELEMAIL (1L<<29)	/* Physically remove deleted e-mail immed.	*/
-#define SM_USRVDELM (1L<<30)	/* Users can see deleted msgs				*/
-#define SM_SYSVDELM (1L<<31)	/* Sysops can see deleted msgs				*/
-
-							/* Different bits in node_misc				*/
-#define NM_ANSALARM (1<<0)	/* Alarm locally on answer					*/
-#define NM_WFCSCRN  (1<<1)	/* Wait for call screen                     */
-#define NM_WFCMSGS	(1<<2)	/* Include total messages/files on WFC		*/
-#define NM_LCL_EDIT (1<<3)	/* Use local editor to create messages		*/
-#define NM_EMSOVL	(1<<4)	/* Use expanded memory of overlays			*/
-#define NM_WINOS2	(1<<5)	/* Use Windows/OS2 time slice API call		*/
-#define NM_INT28	(1<<6)	/* Make int 28 DOS idle calls				*/
-#define NM_NODV 	(1<<7)	/* Don't detect and use DESQview API        */
-#define NM_NO_NUM	(1<<8)	/* Don't allow logons by user number        */
-#define NM_LOGON_R	(1<<9)	/* Allow logons by user real name			*/
-#define NM_LOGON_P	(1<<10) /* Secure logons (always ask for password)	*/
-#define NM_NO_LKBRD (1<<11) /* No local keyboard (at all)				*/
-#define NM_SYSPW	(1<<12) /* Protect WFC keys and Alt keys with SY:	*/
-#define NM_NO_INACT (1<<13) /* No local inactivity alert/logoff 		*/
-#define NM_NOBEEP	(1<<14) /* Don't beep locally                       */
-#define NM_LOWPRIO	(1<<15) /* Always use low priority input			*/
-#define NM_7BITONLY (1L<<16) /* Except 7-bit input only (E71 terminals) */
-#define NM_RESETVID (1L<<17) /* Reset video mode between callers?		*/
-
-							/* Miscellaneous Modem Settings (mdm_misc)  */
-#define MDM_CTS 	 (1<<0) /* Use hardware send flow control			*/
-#define MDM_RTS 	 (1<<1) /* Use hardware recv flow control			*/
-#define MDM_STAYHIGH (1<<2) /* Stay at highest DTE rate 				*/
-#define MDM_CALLERID (1<<3) /* Supports Caller ID						*/
-#define MDM_DUMB	 (1<<4) /* Just watch DCD for answer - dumb modem	*/
-#define MDM_NODTR	 (1<<5) /* Don't drop DTR for hang-up               */
-#define MDM_KNOWNRES (1<<6) /* Allow known result codes only			*/
-#define MDM_VERBAL	 (1<<7) /* Use verbal result codes					*/
-
-									/* Bit values for level_misc[x] 	*/
-#define LEVEL_EXPTOLVL (1<<0)		/* Expire to level_expireto[x]		*/
-#define LEVEL_EXPTOVAL (1<<1)		/* Expire to val[level_expireto[x]] */
-
-									/* Bit values for prot[x].misc */
-#define PROT_DSZLOG (1<<0)          /* Supports DSZ Log */
-
-									/* Bit values in netmail_misc */
-
-#define NMAIL_ALLOW 	(1<<0)		/* Allow NetMail */
-#define NMAIL_CRASH 	(1<<1)		/* Default netmail to crash */
-#define NMAIL_HOLD		(1<<2)		/* Default netmail to hold */
-#define NMAIL_KILL		(1<<3)		/* Default netmail to kill after sent */
-#define NMAIL_ALIAS 	(1<<4)		/* Use Aliases in NetMail */
-#define NMAIL_FILE		(1<<5)		/* Allow file attachments */
-#define NMAIL_DIRECT	(1<<6)		/* Default netmail to direct */
-
-									/* Attribute bits for fido msg header */
-#define FIDO_PRIVATE	(1<<0)		/* Private message */
-#define FIDO_CRASH		(1<<1)		/* Crash-mail (send immediately) */
-#define FIDO_RECV		(1<<2)		/* Received successfully */
-#define FIDO_SENT		(1<<3)		/* Sent successfully */
-#define FIDO_FILE		(1<<4)		/* File attached */
-#define FIDO_INTRANS	(1<<5)		/* In transit */
-#define FIDO_ORPHAN 	(1<<6)		/* Orphan */
-#define FIDO_KILLSENT	(1<<7)		/* Kill it after sending it */
-#define FIDO_LOCAL		(1<<8)		/* Created locally - on this system */
-#define FIDO_HOLD		(1<<9)		/* Hold - don't send it yet */
-#define FIDO_FREQ		(1<<11) 	/* File request */
-#define FIDO_RRREQ		(1<<12) 	/* Return receipt request */
-#define FIDO_RR 		(1<<13) 	/* This is a return receipt */
-#define FIDO_AUDIT		(1<<14) 	/* Audit request */
-#define FIDO_FUPREQ 	(1<<15) 	/* File update request */
-
-									/* Bit values for sub[x].misc */
-#define SUB_NSCAN	(1L<<0) 		/* Scan this sub-board for new msgs */
-#define SUB_YSCAN	(1L<<1) 		/* Scan for new messages to you only */
-#define SUB_SSCAN	(1L<<2) 		/* Scan this sub-board for msgs to you */
-#define SUB_QNET	(1L<<3) 		/* Sub-board is netted via QWK network */
-#define SUB_PNET	(1L<<4) 		/* Sub-board is netted via PostLink */
-#define SUB_FIDO	(1L<<5) 		/* Sub-board is netted via FidoNet */
-#define SUB_PRIV	(1L<<6) 		/* Allow private posts on sub */
-#define SUB_PONLY	(1L<<7) 		/* Private posts only */
-#define SUB_ANON	(1L<<8) 		/* Allow anonymous posts on sub */
-#define SUB_AONLY	(1L<<9) 		/* Anonymous only */
-#define SUB_NAME	(1L<<10)		/* Must use real names */
-#define SUB_DEL 	(1L<<11)		/* Allow users to delete messages */
-#define SUB_DELLAST (1L<<12)		/* Allow users to delete last msg only */
-#define SUB_FORCED	(1L<<13)		/* Sub-board is forced scanning */
-#define SUB_NOTAG	(1L<<14)		/* Don't add tag or origin lines */
-#define SUB_TOUSER	(1L<<15)		/* Prompt for to user on posts */
-#define SUB_ASCII	(1L<<16)		/* ASCII characters only */
-#define SUB_QUOTE	(1L<<17)		/* Allow online quoting */
-#define SUB_NSDEF	(1L<<18)		/* New-Scan on by default */
-#define SUB_INET	(1L<<19)		/* Sub-board is netted via Internet */
-#define SUB_FAST	(1L<<20)		/* Fast storage mode */
-#define SUB_KILL	(1L<<21)		/* Kill read messages automatically */
-#define SUB_KILLP	(1L<<22)		/* Kill read pvt messages automatically */
-#define SUB_SYSPERM (1L<<23)		/* Sysop messages are permament */
-#define SUB_GATE	(1L<<24)		/* Gateway between Network types */
-#define SUB_LZH 	(1L<<25)		/* Use LZH compression for msgs */
-#define SUB_SSDEF	(1L<<26)		/* Default ON for Scan for Your msgs */
-#define SUB_HYPER	(1L<<27)		/* Hyper allocation */
-
-                                    /* Bit values for dir[x].misc */
-#define DIR_FCHK	(1L<<0) 		/* Check for file existance */
-#define DIR_RATE	(1L<<1) 		/* Force uploads to be rated G,R, or X */
-#define DIR_MULT	(1L<<2) 		/* Ask for multi-disk numbering */
-#define DIR_DUPES	(1L<<3) 		/* Search this dir for upload dupes */
-#define DIR_FREE	(1L<<4) 		/* Free downloads */
-#define DIR_TFREE	(1L<<5) 		/* Time to download is free */
-#define DIR_CDTUL	(1L<<6) 		/* Credit Uploads */
-#define DIR_CDTDL	(1L<<7) 		/* Credit Downloads */
-#define DIR_ANON	(1L<<8) 		/* Anonymous uploads */
-#define DIR_AONLY	(1L<<9) 		/* Anonymous only */
-#define DIR_ULDATE	(1L<<10)		/* Include upload date in listing */
-#define DIR_DIZ 	(1L<<11)		/* FILE_ID.DIZ and DESC.SDI support */
-#define DIR_NOSCAN	(1L<<12)		/* Don't new-scan this directory */
-#define DIR_NOAUTO	(1L<<13)		/* Don't auto-add this directory */
-#define DIR_ULTIME	(1L<<14)		/* Deduct time during uploads */
-#define DIR_CDTMIN	(1L<<15)		/* Give uploader minutes instead of cdt */
-#define DIR_SINCEDL (1L<<16)		/* Purge based on days since last dl */
-#define DIR_MOVENEW (1L<<17)		/* Files marked as new when moved */
-
-                                    /* Bit values for file_t.misc */
-#define FM_EXTDESC  (1<<0)          /* Extended description exists */
-#define FM_ANON 	(1<<1)			/* Anonymous upload */
-
-enum {								/* errormsg() codes */
-	 ERR_OPEN						/* opening a file */
-	,ERR_CLOSE						/* close a file */
-	,ERR_FDOPEN 					/* associating a stream with fd */
-	,ERR_READ						/* reading from file */
-	,ERR_WRITE						/* writing to file */
-	,ERR_REMOVE 					/* removing a file */
-	,ERR_ALLOC						/* allocating memory */
-	,ERR_CHK						/* checking */
-	,ERR_LEN						/* file length */
-	,ERR_EXEC						/* executing */
-	,ERR_CHDIR						/* changing directory */
-	,ERR_CREATE 					/* creating */
-	,ERR_LOCK						/* locking */
-	,ERR_UNLOCK 					/* unlocking */
-	};
-
-enum {                              /* Values for dir[x].sort */
-     SORT_NAME_A                    /* Sort by filename, ascending */
-    ,SORT_NAME_D                    /* Sort by filename, descending */
-    ,SORT_DATE_A                    /* Sort by upload date, ascending */
-    ,SORT_DATE_D                    /* Sort by upload date, descending */
-    };
-
-enum {
-	 clr_mnehigh
-	,clr_mnelow
-	,clr_mnecmd
-	,clr_inputline
-	,clr_err
-	,clr_nodenum
-	,clr_nodeuser
-	,clr_nodestatus
-	,clr_filename
-	,clr_filecdt
-	,clr_filedesc
-	,clr_filelsthdrbox
-	,clr_filelstline
-	,clr_chatlocal
-	,clr_chatremote
-	,clr_multichat
-	,TOTAL_COLORS };
-
-enum {								/* Values for xtrn_t.type			*/
-	 XTRN_NONE						/* No data file needed				*/
-	,XTRN_SBBS						/* Synchronet external				*/
-	,XTRN_WWIV						/* WWIV external					*/
-	,XTRN_GAP						/* Gap door 						*/
-	,XTRN_RBBS						/* RBBS, QBBS, or Remote Access 	*/
-	,XTRN_WILDCAT					/* Wildcat							*/
-	,XTRN_PCBOARD					/* PCBoard							*/
-	,XTRN_SPITFIRE					/* SpitFire 						*/
-	,XTRN_UTI						/* UTI Doors - MegaMail 			*/
-	,XTRN_SR						/* Solar Realms 					*/
-	,XTRN_RBBS1 					/* DORINFO1.DEF always				*/
-	,XTRN_TRIBBS					/* TRIBBS.SYS						*/
-	};
-
-enum {								/* Values for xtrn_t.event			*/
-	 EVENT_NONE 					/* Only accessible by menu			*/
-	,EVENT_LOGON					/* Execute during logon sequence	*/
-	,EVENT_LOGOFF					/* Execute during logoff sequence	*/
-	,EVENT_NEWUSER					/* Execute during newuser app.		*/
-	,EVENT_BIRTHDAY 				/* Execute on birthday				*/
-	};
-
-									/* Misc bits for event_t.misc		*/
-#define EVENT_EXCL	(1L<<0) 		/* Exclusive						*/
-#define EVENT_FORCE (1L<<1) 		/* Force users off-line for event	*/
-
-									/* Mode bits for QWK stuff */
-#define A_EXPAND	(1<<0)			/* Expand to ANSI sequences */
-#define A_LEAVE 	(1<<1)			/* Leave in */
-#define A_STRIP 	(1<<2)			/* Strip out */
-
-									/* Bits in xtrn_t.misc				*/
-#define MULTIUSER	(1L<<0) 		/* allow multi simultaneous users	*/
-#define ANSI		(1L<<1) 		/* user must have ANSI, same as ^^^ */
-#define IO_INTS 	(1L<<2) 		/* Intercept I/O interrupts 		*/
-#define MODUSERDAT	(1L<<3) 		/* Program can modify user data 	*/
-#define WWIVCOLOR	(1L<<4) 		/* Program uses WWIV color codes	*/
-#define EVENTONLY	(1L<<5) 		/* Program executes as event only	*/
-#define STARTUPDIR	(1L<<6) 		/* Create drop file in start-up dir */
-#define REALNAME	(1L<<7) 		/* Use real name in drop file		*/
-#define SWAP		(1L<<8) 		/* Swap for this door				*/
-#define FREETIME	(1L<<9) 		/* Free time while in this door 	*/
-#define QUICKBBS	(1L<<10)		/* QuickBBS style editor			*/
-#define EXPANDLF	(1L<<11)		/* Expand LF to CRLF editor 		*/
-#define QUOTEALL	(1L<<12)		/* Automatically quote all of msg	*/
-#define QUOTENONE	(1L<<13)		/* Automatically quote none of msg	*/
-
-									/* Bits in user.qwk 				*/
-#define QWK_FILES	(1L<<0) 		/* Include new files list			*/
-#define QWK_EMAIL	(1L<<1) 		/* Include unread e-mail			*/
-#define QWK_ALLMAIL (1L<<2) 		/* Include ALL e-mail				*/
-#define QWK_DELMAIL (1L<<3) 		/* Delete e-mail after download 	*/
-#define QWK_BYSELF	(1L<<4) 		/* Include messages from self		*/
-#define QWK_UNUSED	(1L<<5) 		/* Currently unused 				*/
-#define QWK_EXPCTLA (1L<<6) 		/* Expand ctrl-a codes to ascii 	*/
-#define QWK_RETCTLA (1L<<7) 		/* Retain ctrl-a codes				*/
-#define QWK_ATTACH	(1L<<8) 		/* Include file attachments 		*/
-#define QWK_NOINDEX (1L<<9) 		/* Do not create index files in QWK */
-#define QWK_TZ		(1L<<10)		/* Include "@TZ" time zone in msgs  */
-#define QWK_VIA 	(1L<<11)		/* Include "@VIA" seen-bys in msgs  */
-#define QWK_NOCTRL	(1L<<12)		/* No extraneous control files		*/
-
-#define INVALID_DIR 0xffff          /* Invalid directory value          */
-#define INVALID_SUB 0xffff			/* Invalid sub-board value			*/
-
-#define KEY_BUFSIZE 1024	/* Size of keyboard input buffer			*/
-#define SAVE_LINES	 4		/* Maximum number of lines to save			*/
-#define LINE_BUFSIZE 512	/* Size of line output buffer               */
-
-
-#define TABSIZE		4		/* Tab Size									*/
-
-#define SWAP_NONE	0x80	/* Allow no swapping for executables		*/
-
-#define DSTSDABLEN	50		/* Length of DSTS.DAB file					*/
-
-							/* Console I/O Bits	(console)				*/
-#define CON_R_ECHO	 (1<<0)	/* Echo remotely							*/
-#define CON_R_ECHOX	 (1<<1)	/* Echo X's to remote user					*/
-#define CON_R_INPUT  (1<<2)	/* Accept input remotely					*/
-#define CON_L_ECHO	 (1<<3)	/* Echo locally              				*/
-#define CON_L_ECHOX	 (1<<4) /* Echo X's locally							*/
-#define CON_L_INPUT  (1<<5)	/* Accept input locally						*/
-#define CON_RAW_IN   (1<<8) /* Raw input mode - no editing capabilities */
-#define CON_ECHO_OFF (1<<10)/* Remote & Local echo disabled for ML/MF	*/
-#define CON_UPARROW  (1<<11)/* Up arrow hit - move up one line			*/
-
-							/* Number of milliseconds                   */
-#define DELAY_HANGUP 250    /* Delay before modem drops carrier         */
-#define DELAY_MDMTLD 500    /* Delay to give each ~ in modem strings    */
-#define DELAY_SPIN   10     /* Delay for the spinning cursor            */
-#define DELAY_AUTOHG 1500	/* Delay for auto-hangup (xfer) 			*/
-
-#define SEC_LOGON	1800	/* 30 minutes allowed to logon				*/
-#define SEC_BILLING   90	/* under 2 minutes per billing call 		*/
-#define SEC_OK		   5	/* Attempt to get an OK response from modem */
-#define SEC_ANSI	   5	/* Attempt to get a valid ANSI response 	*/
-#define SEC_ANSWER	  30	/* Retries to get an answer code from modem */
-#define SEC_CID 	  10	/* Ten second pause for caller ID			*/
-#define SEC_RING	   6	/* Maximum seconds between rings			*/
-
-#define LOOP_NOPEN	  50	/* Retries before file access denied		*/
-#define LOOP_NODEDAB  50	/* Retries on NODE.DAB locking/unlocking	*/
-
-							/* String lengths							*/
-#define LEN_ALIAS		25	/* User alias								*/
-#define LEN_NAME		25	/* User name								*/
-#define LEN_HANDLE		8	/* User chat handle 						*/
-#define LEN_NOTE		30	/* User note								*/
-#define LEN_COMP		30	/* User computer description				*/
-#define LEN_COMMENT 	60	/* User comment 							*/
-#define LEN_NETMAIL 	60	/* NetMail forwarding address				*/
-#define LEN_PASS		 8	/* User password							*/
-#define LEN_PHONE		12	/* User phone number						*/
-#define LEN_BIRTH		 8	/* Birthday in MM/DD/YY format				*/
-#define LEN_ADDRESS 	30	/* User address 							*/
-#define LEN_LOCATION	30	/* Location (City, State)					*/
-#define LEN_ZIPCODE 	10	/* Zip/Postal code							*/
-#define LEN_MODEM		 8	/* User modem type description				*/
-#define LEN_FDESC		58	/* File description 						*/
-#define LEN_FCDT		 9	/* 9 digits for file credit values			*/
-#define LEN_TITLE		70	/* Message title							*/
-#define LEN_MAIN_CMD	40	/* Storage in user.dat for custom commands	*/
-#define LEN_XFER_CMD	40
-#define LEN_SCAN_CMD	40
-#define LEN_MAIL_CMD	40
-#define LEN_CID 		25	/* Caller ID (phone number) 				*/
-#define LEN_ARSTR		40	/* Max length of Access Requirement string	*/
-#define LEN_CHATACTCMD	 9	/* Chat action command						*/
-#define LEN_CHATACTOUT	65	/* Chat action output string				*/
-
-/****************************************************************************/
-/* This is a list of offsets into the USER.DAT file for different variables */
-/* that are stored (for each user)											*/
-/****************************************************************************/
-#define U_ALIAS 	0					/* Offset to alias */
-#define U_NAME		(U_ALIAS+LEN_ALIAS) /* Offset to name */
-#define U_HANDLE	(U_NAME+LEN_NAME)
-#define U_NOTE		(U_HANDLE+LEN_HANDLE+2)
-#define U_COMP		(U_NOTE+LEN_NOTE)
-#define U_COMMENT	(U_COMP+LEN_COMP+2)
-
-#define U_NETMAIL	(U_COMMENT+LEN_COMMENT+2)
-
-#define U_ADDRESS	(U_NETMAIL+LEN_NETMAIL+2)
-#define U_LOCATION	(U_ADDRESS+LEN_ADDRESS)
-#define U_ZIPCODE	(U_LOCATION+LEN_LOCATION)
-
-#define U_PASS		(U_ZIPCODE+LEN_ZIPCODE+2)
-#define U_PHONE  	(U_PASS+8) 			/* Offset to phone-number */
-#define U_BIRTH  	(U_PHONE+12)		/* Offset to users birthday	*/
-#define U_MODEM     (U_BIRTH+8)
-#define U_LASTON	(U_MODEM+8)
-#define U_FIRSTON	(U_LASTON+8)
-#define U_EXPIRE    (U_FIRSTON+8)
-#define U_PWMOD     (U_EXPIRE+8)
-
-#define U_LOGONS    (U_PWMOD+8+2)
-#define U_LTODAY    (U_LOGONS+5)
-#define U_TIMEON    (U_LTODAY+5)
-#define U_TEXTRA  	(U_TIMEON+5)
-#define U_TTODAY    (U_TEXTRA+5)
-#define U_TLAST     (U_TTODAY+5)
-#define U_POSTS     (U_TLAST+5)
-#define U_EMAILS    (U_POSTS+5)
-#define U_FBACKS    (U_EMAILS+5)
-#define U_ETODAY	(U_FBACKS+5)
-#define U_PTODAY	(U_ETODAY+5)
-
-#define U_ULB       (U_PTODAY+5+2)
-#define U_ULS       (U_ULB+10)
-#define U_DLB       (U_ULS+5)
-#define U_DLS       (U_DLB+10)
-#define U_CDT		(U_DLS+5)
-#define U_MIN		(U_CDT+10)
-
-#define U_LEVEL 	(U_MIN+10+2)	/* Offset to Security Level    */
-#define U_FLAGS1	(U_LEVEL+2) 	/* Offset to Flags */
-#define U_TL		(U_FLAGS1+8)	/* Offset to unused field */
-#define U_FLAGS2	(U_TL+2)
-#define U_EXEMPT	(U_FLAGS2+8)
-#define U_REST		(U_EXEMPT+8)
-#define U_ROWS		(U_REST+8+2)	/* Number of Rows on user's monitor */
-#define U_SEX		(U_ROWS+2)		/* Sex, Del, ANSI, color etc.		*/
-#define U_MISC		(U_SEX+1)		/* Miscellaneous flags in 8byte hex */
-#define U_OLDXEDIT	(U_MISC+8)		/* External editor (Version 1 method) */
-#define U_LEECH 	(U_OLDXEDIT+2)	/* two hex digits - leech attempt count */
-#define U_CURSUB	(U_LEECH+2) 	/* Current sub (internal code) */
-#define U_CURDIR	(U_CURSUB+8)	/* Current dir (internal code) */
-#define U_CMDSET	(U_CURDIR+8)	/* unused */
-#define U_MAIN_CMD	(U_CMDSET+2+2)	/* unused */
-#define U_XFER_CMD	(U_MAIN_CMD+LEN_MAIN_CMD)		/* unused */
-#define U_SCAN_CMD	(U_XFER_CMD+LEN_XFER_CMD+2) 	/* unused */
-#define U_MAIL_CMD	(U_SCAN_CMD+LEN_SCAN_CMD)		/* unused */
-#define U_FREECDT	(U_MAIL_CMD+LEN_MAIL_CMD+2)
-#define U_FLAGS3	(U_FREECDT+10)	/* Flag set #3 */
-#define U_FLAGS4	(U_FLAGS3+8)	/* Flag set #4 */
-#define U_XEDIT 	(U_FLAGS4+8)	/* External editor (code) */
-#define U_SHELL 	(U_XEDIT+8) 	/* Command shell (code) */
-#define U_QWK		(U_SHELL+8) 	/* QWK settings */
-#define U_TMPEXT	(U_QWK+8)		/* QWK extension */
-#define U_CHAT		(U_TMPEXT+3)	/* Chat settings */
-#define U_NS_TIME	(U_CHAT+8)		/* New-file scan date/time */
-#define U_PROT		(U_NS_TIME+8)	/* Default transfer protocol */
-#define U_UNUSED	(U_PROT+1)
-#define U_LEN		(U_UNUSED+28+2)
-
-/****************************************************************************/
-/* Offsets into DIR .DAT file for different fields for each file 			*/
-/****************************************************************************/
-#define F_CDT		0				/* Offset in DIR#.DAT file for cdts */
-#define F_DESC		(F_CDT+LEN_FCDT)/* Description						*/
-#define F_ULER		(F_DESC+LEN_FDESC+2)   /* Uploader					*/
-#define F_TIMESDLED (F_ULER+30+2) 	/* Number of times downloaded 		*/
-#define F_OPENCOUNT	(F_TIMESDLED+5+2)
-#define F_MISC		(F_OPENCOUNT+3+2)
-#define F_ALTPATH	(F_MISC+1)		/* Two hex digit alternate path */
-#define F_LEN		(F_ALTPATH+2+2) /* Total length of all fdat in file */
-
-#define F_IXBSIZE	22				/* Length of each index entry		*/
-
-
-#define SIF_MAXBUF  0x7000			/* Maximum buffer size of SIF data */
-
-/* NOTE: Do not change the values of the following block of defines!	*/
-
-#define DELETED 	(1L<<0) 		/* Bit values for user.misc 		*/
-#define ANSI		(1L<<1) 		/* Supports ANSI terminal emulation */
-#define COLOR		(1L<<2) 		/* Send color codes 				*/
-#define RIP 		(1L<<3) 		/* Supports RIP terminal emulation	*/
-#define UPAUSE		(1L<<4) 		/* Pause on every screen full		*/
-#define SPIN		(1L<<5) 		/* Spinning cursor - Same as K_SPIN */
-#define INACTIVE	(1L<<6) 		/* Inactive user slot				*/
-#define EXPERT		(1L<<7) 		/* Expert menu mode 				*/
-#define ANFSCAN 	(1L<<8) 		/* Auto New file scan				*/
-#define CLRSCRN 	(1L<<9) 		/* Clear screen before each message */
-#define QUIET		(1L<<10)		/* Quiet mode upon logon			*/
-#define BATCHFLAG	(1L<<11)		/* File list allow batch dl flags	*/
-#define NETMAIL 	(1L<<12)		/* Forward e-mail to fidonet addr	*/
-#define CURSUB		(1L<<13)		/* Remember current sub-board/dir	*/
-#define ASK_NSCAN	(1L<<14)		/* Ask for newscanning upon logon	*/
-#define NO_EXASCII	(1L<<15)		/* Don't send extended ASCII        */
-#define ASK_SSCAN	(1L<<16)		/* Ask for messages to you at logon */
-#define AUTOTERM	(1L<<17)		/* Autodetect terminal type 		*/
-#define COLDKEYS	(1L<<18)		/* No hot-keys						*/
-#define EXTDESC 	(1L<<19)		/* Extended file descriptions		*/
-#define AUTOHANG	(1L<<20)		/* Auto-hang-up after transfer		*/
-#define WIP 		(1L<<21)		/* Supports WIP terminal emulation	*/
-
-#define CLREOL      256     /* Character to erase to end of line 		*/
-#define HIGH        8       /* High intensity for curatr             */
-
-							/* Online status (online)					*/
-#define ON_LOCAL	1	 	/* Online locally							*/
-#define ON_REMOTE   2  		/* Online remotely							*/
-#define ON_XFER		3		/* Online remotely - transferring file		*/
-#define ON_WFC		4		/* Online waiting for a call				*/
-
-							/* Varios SYSTEM parameters for sys_status	*/
-#define SS_LOGOPEN	(1L<<0)	/* Node's Log file is open          		*/
-#define SS_INITIAL  (1L<<1)	/* The bbs data has been initialized.       */
-#define SS_TMPSYSOP (1L<<2)	/* Temporary Sysop Status					*/
-#define SS_USERON   (1L<<3)	/* A User is logged on to the BBS			*/
-#define SS_LCHAT    (1L<<4) /* Local chat in progress					*/
-#define SS_CAP		(1L<<5)	/* Capture is on							*/
-#define SS_ANSCAP	(1L<<6) /* Capture ANSI codes too					*/
-#define SS_FINPUT	(1L<<7) /* Using file for input 					*/
-#define SS_COMISR	(1L<<8) /* Com port ISR is installed				*/
-#define SS_DAILY	(1L<<9) /* Execute System Daily Event on logoff 	*/
-#define SS_INUEDIT	(1L<<10) /* Inside Alt-Useredit section 			*/
-#define SS_ABORT	(1L<<11) /* Global abort input or output flag		*/
-#define SS_SYSPAGE	(1L<<12) /* Paging sysop							*/
-#define SS_SYSALERT (1L<<13) /* Notify sysop when users hangs up		*/
-#define SS_GURUCHAT (1L<<14) /* Guru chat in progress					*/
-#define SS_NODEDAB	(1L<<15) /* NODE.DAB operations are okay			*/
-#define SS_EVENT	(1L<<16) /* Time shortened due to upcoming event	*/
-#define SS_PAUSEON	(1L<<17) /* Pause on, overriding user default		*/
-#define SS_PAUSEOFF (1L<<18) /* Pause off, overriding user default		*/
-#define SS_IN_CTRLP (1L<<19) /* Inside ctrl-p send node message func	*/
-#define SS_NEWUSER	(1L<<20) /* New User online 						*/
-#define SS_MDMDEBUG (1L<<21) /* Modem debug output						*/
-#define SS_NEST_PF	(1L<<22) /* Nested in printfile function			*/
-#define SS_DCDHIGH	(1L<<23) /* Assume DCD is high always				*/
-#define SS_SPLITP	(1L<<24) /* Split-screen private chat				*/
-#define SS_NEWDAY	(1L<<25) /* Date changed while online				*/
-
-								/* Bits in 'mode' for getkey and getstr     */
-#define K_UPPER 	(1L<<0) 	/* Converts all letters to upper case		*/
-#define K_UPRLWR	(1L<<1) 	/* Upper/Lower case automatically			*/
-#define K_NUMBER	(1L<<2) 	/* Allow numbers only						*/
-#define K_WRAP		(1L<<3) 	/* Allows word wrap 						*/
-#define K_MSG		(1L<<4) 	/* Allows ANSI, ^N ^A ^G					*/
-#define K_SPIN		(1L<<5) 	/* Spinning cursor (same as SPIN)			*/
-#define K_LINE		(1L<<6) 	/* Input line (inverse color)				*/
-#define K_EDIT		(1L<<7) 	/* Edit string passed						*/
-#define K_CHAT		(1L<<8) 	/* In chat multi-chat						*/
-#define K_NOCRLF	(1L<<9) 	/* Don't print CRLF after string input      */
-#define K_ALPHA 	(1L<<10)	/* Only allow alphabetic characters 		*/
-#define K_GETSTR	(1L<<11)	/* getkey called from getstr()				*/
-#define K_LOWPRIO	(1L<<12)	/* low priority input						*/
-#define K_NOEXASC	(1L<<13)	/* No extended ASCII allowed				*/
-#define K_E71DETECT (1L<<14)	/* Detect E-7-1 terminal type				*/
-#define K_AUTODEL	(1L<<15)	/* Auto-delete text (used with K_EDIT)		*/
-#define K_COLD		(1L<<16)	/* Possible cold key mode					*/
-#define K_NOECHO	(1L<<17)	/* Don't echo input                         */
-
-							/* Bits in 'mode' for putmsg and printfile  */
-#define P_NOABORT  	(1<<0)  /* Disallows abortion of a message          */
-#define P_SAVEATR   (1<<1)  /* Save the new current attributres after	*/
-							/* msg has printed. */
-#define P_NOATCODES (1<<2)	/* Don't allow @ codes                      */
-#define P_OPENCLOSE (1<<3)	/* Open and close the file					*/
-
-							/* Bits in 'mode' for listfiles             */
-#define FL_ULTIME   (1<<0)  /* List files by upload time                */
-#define FL_DLTIME   (1<<1)  /* List files by download time              */
-#define FL_NO_HDR   (1<<2)  /* Don't list directory header              */
-#define FL_FINDDESC (1<<3)  /* Find text in description                 */
-#define FL_EXFIND   (1<<4)	/* Find text in description - extended info */
-#define FL_VIEW     (1<<5)	/* View ZIP/ARC/GIF etc. info               */
-
-							/* Bits in the mode of writemsg and email() */
-#define WM_EXTDESC	(1<<0)	/* Writing extended file description		*/
-#define WM_EMAIL	(1<<1)	/* Writing e-mail							*/
-#define WM_NETMAIL	(1<<2)	/* Writing NetMail							*/
-#define WM_ANON 	(1<<3)	/* Writing anonymous message				*/
-#define WM_FILE 	(1<<4)	/* Attaching a file to the message			*/
-#define WM_NOTOP	(1<<5)	/* Don't add top because we need top line   */
-#define WM_QUOTE	(1<<6)	/* Quote file available 					*/
-#define WM_QWKNET	(1<<7)	/* Writing QWK NetMail (25 char title)		*/
-#define WM_PRIVATE	(1<<8)	/* Private (for creating MSGINF file)		*/
-
-							/* Bits in the mode of loadposts()			*/
-#define LP_BYSELF	(1<<0)	/* Include messages sent by self			*/
-#define LP_OTHERS	(1<<1)	/* Include messages sent to others			*/
-#define LP_UNREAD	(1<<2)	/* Un-read messages only					*/
-#define LP_PRIVATE	(1<<3)	/* Include all private messages 			*/
-#define LP_REP		(1<<4)	/* Packing REP packet						*/
-
-							/* Bits in the mode of loadmail()			*/
-#define LM_UNREAD	(1<<0)	/* Include un-read mail only				*/
-#define LM_QWK		(1<<1)	/* Loading for a QWK packet 				*/
-
-enum {						/* readmail and delmailidx which types		*/
-	 MAIL_YOUR				/* mail sent to you */
-	,MAIL_SENT				/* mail you have sent */
-	,MAIL_ANY				/* mail sent to or from you */
-	,MAIL_ALL				/* all mail (ignores usernumber arg) */
-	};
-
-#if 0
-							/* Message mode bits						*/
-#define MSG_PERM	1		/* Permanent - non-purgable message (post)  */
-#define MSG_FORWARD 1       /* Forwarded message (mail)                 */
-#define MSG_ANON	2		/* Anonymous message						*/
-#define MSG_PRIVATE 4		/* Private posted message					*/
-#define MSG_READ	8		/* Private post has been read				*/
-#define MSG_FILE	16		/* File attached							*/
-
-#endif
-
-							/* Bits in the mode of external()           */
-#define EX_CC       (1<<0)	/* Use command.com to load other process    */
-#define EX_OUTR     (1<<1)  /* Copy DOS output to remote                */
-#define EX_OUTL 	(1<<2)	/* Use _lputc() for local DOS output		*/
-#define EX_INR		(1<<3)	/* Trap int 16h keyboard input requests     */
-#define EX_WWIV 	(1<<4)	/* Expand WWIV color codes to ANSI sequence */
-#define EX_SWAP 	(1<<5)	/* Swap out for this external				*/
-#define EX_OS2		(1<<6)	/* Executing an OS/2 pgm from SBBS4OS2		*/
-#define EX_POPEN	(1<<7)	/* Leave COM port open						*/
-
-#define OS2_POPEN	(1<<0)	/* Leave COM port open						*/
-
-enum {						/* Values for 'mode' in listfileinfo        */
-	 FI_INFO            	/* Just list file information               */
-	,FI_REMOVE           	/* Remove/Move/Edit file information        */
-	,FI_DOWNLOAD         	/* Download files                           */
-	,FI_OLD              	/* Search/Remove files not downloaded since */
-	,FI_OLDUL	 			/* Search/Remove files uploaded before      */
-	,FI_OFFLINE   			/* Search/Remove files not online			*/
-	,FI_USERXFER  			/* User Xfer Download                       */
-	,FI_CLOSE 	  			/* Close any open records					*/
-	};
-
-#define L_LOGON     1       /* Logon List maintenance                   */
-#define LOL_SIZE    81      /* Length of each logon list entry          */
-
-#define CHAT_ECHO	(1<<0)	/* Multinode chat echo						*/
-#define CHAT_ACTION (1<<1)	/* Chat actions 							*/
-#define CHAT_NOPAGE (1<<2)	/* Can't be paged                           */
-#define CHAT_NOACT	(1<<3)	/* No activity alerts						*/
-#define CHAT_SPLITP (1<<4)	/* Split screen private chat				*/
-
-							/* Bits in mode of scanposts() function 	*/
-#define SCAN_CONST	(1<<0)	/* Continuous message scanning				*/
-#define SCAN_NEW	(1<<1)	/* New scanning								*/
-#define SCAN_BACK	(1<<2)	/* Scan the last message if no new			*/
-#define SCAN_TOYOU	(1<<3)	/* Scan for messages to you 				*/
-#define SCAN_FIND	(1<<4)	/* Scan for text in messages				*/
-#define SCAN_UNREAD (1<<5)	/* Find un-read messages to you 			*/
-
-							/* Bits in misc of chan_t					*/
-#define CHAN_PW 	(1<<0)	/* Can be password protected				*/
-#define CHAN_GURU	(1<<1)	/* Guru joins empty channel 				*/
-
-enum {						/* Values of mode for userlist function     */
-	 UL_ALL					/* List all users in userlist				*/
-	,UL_SUB      			/* List all users with access to cursub     */
-	,UL_DIR					/* List all users with access to curdir 	*/
-	};
-
-
-#define BO_LEN		16		/* BACKOUT.DAB record length				*/
-
-#define BO_OPENFILE 0		/* Backout types */
-
-
-/**********/
-/* Macros */
-/**********/
-
-#define CRLF			{ outchar(CR); outchar(LF); }
-#define SYSOP			(useron.level>=90 || sys_status & SS_TMPSYSOP)
-#define REALSYSOP		(useron.level>=90)
-#define FLAG(x) 		(long)(1L<<(x-'A'))
-#define CLS         	outchar(FF)
-#define WHERE       	__LINE__,__FILE__
-#define SAVELINE		{ slatr[slcnt]=latr; \
-							sprintf(slbuf[slcnt<SAVE_LINES ? slcnt++ : slcnt] \
-							,"%.*s",lbuflen,lbuf); \
-							lbuflen=0; }
-#define RESTORELINE 	{ lbuflen=0; attr(slatr[--slcnt]); \
-							bputs(slbuf[slcnt]); \
-							curatr=lclatr(-1); }
-#define RIOSYNC(x)		{ if(online==ON_REMOTE) riosync(x); }
-#define SYNC			{ getnodedat(node_num,&thisnode,0); \
-						  RIOSYNC(0); \
-						  nodesync(); }
-#define ASYNC			{ getnodedat(node_num,&thisnode,0); \
-						  RIOSYNC(1); \
-						  nodesync(); }
-#define DCDHIGH 		(sys_status&SS_DCDHIGH || rioctl(IOSTATE)&DCD)
-#define ANSI_SAVE() 	bputs("\x1b[s")
-#define ANSI_RESTORE()	bputs("\x1b[u")
-#define GOTOXY(x,y)     bprintf("\x1b[%d;%dH",y,x)
-#define TM_YEAR(yy)		((yy)%100)
-
-extern	long crc32tbl[];
-#define ucrc32(ch,crc) (crc32tbl[(crc^ch)&0xff]^(crc>>8))
-
-#ifdef __FLAT__
-#define TEXTWINDOW		window(1,1,80,node_scrnlen-1)
-#define STATUSLINE		window(1,node_scrnlen,80,node_scrnlen)
-#else
-#define TEXTWINDOW
-#define STATUSLINE
-#endif
-
-#define ucrc32(ch,crc)	(crc32tbl[(crc^ch)&0xff]^(crc>>8))
-
-#ifdef __WATCOMC__
-
-	#if !defined(__COLORS)
-	#define __COLORS
-
-	enum COLORS {
-		BLACK,			/* dark colors */
-		BLUE,
-		GREEN,
-		CYAN,
-		RED,
-		MAGENTA,
-		BROWN,
-		LIGHTGRAY,
-		DARKGRAY,		/* light colors */
-		LIGHTBLUE,
-		LIGHTGREEN,
-		LIGHTCYAN,
-		LIGHTRED,
-		LIGHTMAGENTA,
-		YELLOW,
-		WHITE
-	};
-	#endif
-
-	#define BLINK		128 /* blink bit */
-
-	#define ffblk find_t
-    #define findfirst(x,y,z) _dos_findfirst(x,z,y)
-	#define findnext(x) _dos_findnext(x)
-#endif
-
-#if DEBUG	/* if DEBUG, call function */
-#define DLOG(where,txt) dlog(where,txt)
-#else		/* else, do nothing - function isn't even valid */
-#define DLOG(where,txt)
-#endif
-
-
-/********************/
-/* Type Definitions */
-/********************/
-
-typedef struct {						/* Users information */
-	ushort	number, 					/* Number */
-			uls,						/* Number of uploads */
-			dls,						/* Number of downloads */
-			posts,						/* Number of posts */
-			emails,						/* Number of emails */
-			fbacks,						/* Number of emails sent to sysop */
-			etoday,						/* Emails today */
-			ptoday,						/* Posts today */
-			timeon,						/* Total time on */
-			textra,						/* Extra time for today */
-			logons,						/* Total logons */
-			ttoday,						/* Time on today */
-			tlast,						/* Time on last call */
-			ltoday, 					/* Logons today */
-			xedit,						/* External editor (1 based) */
-			shell;						/* Command shell */
-	uchar	level,						/* Security level */
-			sex,						/* Sex - M or F */
-			rows,               		/* Rows of text */
-			prot,						/* Default transfer protocol */
-			alias[LEN_ALIAS+1], 		/* Alias */
-			name[LEN_NAME+1],			/* Name - Real */
-			handle[LEN_HANDLE+1],		/* Chat handle */
-			comp[LEN_COMP+1],			/* Computer type */
-			note[LEN_NOTE+1],			/* Public notice about this user */
-			address[LEN_ADDRESS+1], 	/* Street Address */
-			location[LEN_LOCATION+1],	/* Location of user */
-			zipcode[LEN_ZIPCODE+1], 	/* Zip/Postal code */
-			pass[LEN_PASS+1],			/* Password - not case sensitive */
-			birth[LEN_BIRTH+1], 		/* Birthday in MM/DD/YY format */
-			phone[LEN_PHONE+1],			/* Phone number xxx-xxx-xxxx format */
-			modem[LEN_MODEM+1],			/* Modem type - 8 chars max */
-			netmail[LEN_NETMAIL+1], 	/* NetMail forwarding address */
-			leech,						/* Leech attempt counter */
-			tmpext[4],					/* QWK Packet extension */
-			comment[LEN_COMMENT+1], 	/* Private comment about user */
-			cursub[9],					/* Current sub-board internal code */
-			curdir[9];					/* Current directory internal code */
-	ulong	misc,						/* Misc. bits - ANSI, Deleted etc. */
-			qwk,						/* QWK settings */
-			chat,						/* Chat defaults */
-			flags1, 					/* Flag set #1 */
-			flags2, 					/* Flag set #2 */
-			flags3, 					/* Flag set #3 */
-			flags4, 					/* Flag set #4 */
-			exempt,						/* Exemption Flags */
-			rest,						/* Restriction Flags */
-			ulb,						/* Total bytes uploaded */
-			dlb,						/* Total bytes downloaded */
-			cdt,						/* Credits */
-			min,						/* Minutes */
-			freecdt;					/* Free credits (renewed daily) */
-	time_t	firston,					/* Date/Time first called */
-			laston, 					/* Last logoff date/time */
-			expire, 					/* Expiration date */
-			pwmod,						/* Password last modified */
-			ns_time;					/* Date/Time of last new file scan */
-			} user_t;
-
-typedef struct {						/* File (transfers) Data */
-	uchar   name[13],					/* Name of file FILENAME.EXT */
-			desc[LEN_FDESC+1],			/* Uploader's Description */
-			uler[LEN_ALIAS+1],			/* User who uploaded */
-			opencount,					/* Times record is currently open */
-			path[LEN_DIR+1];			/* Alternate DOS path */
-	time_t  date,						/* File date/time */
-			dateuled,					/* Date/Time (Unix) Uploaded */
-			datedled;					/* Date/Time (Unix) Last downloaded */
-	ushort	dir,						/* Directory file is in */
-			altpath,
-			timesdled,					/* Total times downloaded */
-			timetodl;					/* How long transfer time */
-	long	datoffset,					/* Offset into .DAT file */
-			size,						/* Size of file */
-			misc;						/* Miscellaneous bits */
-	ulong	cdt;						/* Credit value for this file */
-			} file_t;
-
-typedef struct {						/* Mail data (taken from index) */
-	ulong	offset, 					/* Offset to header (in bytes) */
-			number, 					/* Number of message */
-			time;						/* Time imported */
-	ushort	to, 						/* To user # */
-			from,						/* From user # */
-			subj,						/* CRC-16 of subject */
-			attr;						/* Attributes */
-			} mail_t;
-
-typedef struct {						/* System/Node Statistics */
-	ulong 	logons,						/* Total Logons on System */
-			ltoday,						/* Total Logons Today */
-			timeon,						/* Total Time on System */
-			ttoday,						/* Total Time Today */
-			uls,						/* Total Uploads Today */
-			ulb,						/* Total Upload Bytes Today */
-			dls,						/* Total Downloads Today */
-			dlb,						/* Total Download Bytes Today */
-			ptoday,						/* Total Posts Today */
-			etoday,						/* Total Emails Today */
-			ftoday; 					/* Total Feedbacks Today */
-	ushort	nusers; 					/* Total New Users Today */
-			} stats_t;
-
-typedef struct {						/* FidoNet address */
-	ushort	zone,						/* Zone */
-			net,						/* Network */
-			node,						/* Node */
-			point;						/* Point */
-			} faddr_t;
-
-typedef struct {                        /* Message sub board info */
-	uchar	
-#ifdef SCFG
-			lname[LEN_SLNAME+1],		/* Short name - used for prompts */
-			sname[LEN_SSNAME+1],		/* Long name - used for listing */
-			ar[LEN_ARSTR+1],			/* Access requirements */
-			read_ar[LEN_ARSTR+1],		/* Read requirements */
-			post_ar[LEN_ARSTR+1],		/* Post requirements */
-			op_ar[LEN_ARSTR+1], 		/* Operator requirements */
-			mod_ar[LEN_ARSTR+1],		/* Moderated user requirements */
-			qwkname[11],				/* QWK name - only 10 chars */
-			data_dir[LEN_DIR+1],		/* Data file directory */
-			origline[51],				/* Optional EchoMail origin line */
-			echomail_sem[LEN_DIR+1],	/* EchoMail semaphore for this sub */
-			tagline[81],				/* Optional QWK net tag line */
-#else
-			*lname,
-			*sname,
-			*ar,
-			*read_ar,
-			*post_ar,
-			*op_ar,
-			*mod_ar,
-			*qwkname,
-			*data_dir,
-			*origline,
-			*echomail_sem,
-			*tagline,
-#endif
-			code[9];					/* Eight character code */
-#ifndef SBBS
-	uchar	echopath[LEN_DIR+1];		/* EchoMail path */
-#endif
-	ushort	grp,						/* Which group this sub belongs to */
-			ptridx, 					/* Index into pointer file */
-			qwkconf,					/* QWK conference number */
-			maxage; 					/* Max age of messages (in days) */
-	ulong	misc,						/* Miscellaneous flags */
-			maxmsgs,					/* Max number of messages allowed */
-			maxcrcs;					/* Max number of CRCs to keep */
-#ifdef SBBS
-	ulong	ptr,						/* Highest read message */
-			last;						/* Last read message */
-#endif
-	faddr_t faddr;						/* FidoNet address */
-			} sub_t;
-
-typedef struct {                        /* Message group info */
-	uchar
-#ifdef SCFG
-			lname[LEN_GLNAME+1],		/* Short name */
-			sname[LEN_GSNAME+1],		/* Long name */
-			ar[LEN_ARSTR+1];			/* Access requirements */
-			
-#else
-			*lname,
-			*sname,
-			*ar;
-#endif
-			} grp_t;
-
-typedef struct {                        /* Transfer Directory Info */
-	uchar								/* Eight character code */
-#ifdef SCFG
-			lname[LEN_SLNAME+1],		/* Short name - used for prompts */
-			sname[LEN_SSNAME+1],		/* Long name - used for listing */
-			ar[LEN_ARSTR+1],			/* Access Requirements */
-			ul_ar[LEN_ARSTR+1], 		/* Upload Requirements */
-			dl_ar[LEN_ARSTR+1], 		/* Download Requirements */
-			ex_ar[LEN_ARSTR+1], 		/* Exemption Requirements (credits) */
-			op_ar[LEN_ARSTR+1], 		/* Operator Requirements */
-			path[LEN_DIR+1],			/* Path to directory for files */
-			exts[41],   		        /* Extensions allowed */
-			upload_sem[LEN_DIR+1],		/* Upload semaphore file */
-			data_dir[LEN_DIR+1],		/* Directory where data is stored */
-#else
-			*lname,
-			*sname,
-			*ar,
-			*ul_ar,
-			*dl_ar,
-			*ex_ar,
-			*op_ar,
-			*path,
-			*exts,
-			*upload_sem,
-			*data_dir,
-#endif
-			code[9],
-			seqdev, 					/* Sequential access device number */
-			sort;						/* Sort type */
-	ushort	maxfiles,					/* Max number of files allowed */
-			maxage, 					/* Max age of files (in days) */
-			up_pct, 					/* Percentage of credits on uloads */
-			dn_pct, 					/* Percentage of credits on dloads */
-			lib;						/* Which library this dir is in */
-	ulong	misc;						/* Miscellaneous bits */
-			} dir_t;
-
-typedef struct {                        /* Transfer Library Information */
-	uchar
-#ifdef SCFG
-			lname[LEN_GLNAME+1],		/* Short Name - used for prompts */
-			sname[LEN_GSNAME+1],		/* Long Name - used for listings */
-			ar[LEN_ARSTR+1];			/* Access Requirements */
-#else
-			*lname,
-			*sname,
-			*ar;
-#endif
-	ushort	offline_dir;				/* Offline file directory */
-			} lib_t;
-
-typedef struct {                        /* Gfile Section Information */
-	uchar								/* Eight character code */
-#ifdef SCFG
-			name[41],					/* Name of section */
-			ar[LEN_ARSTR+1],			/* Access requirements */
-#else
-			*name,
-			*ar,
-#endif
-			code[9];
-			} txtsec_t;
-
-typedef struct {						/* External Section Information */
-	uchar
-#ifdef SCFG
-			name[41],					/* Name of section */
-			ar[LEN_ARSTR+1],			/* Access requirements */
-#else
-			*name,
-			*ar,
-#endif
-			code[9];					/* Eight character code */
-			} xtrnsec_t;
-
-typedef struct {						/* Swappable executable */
-#ifdef SCFG
-	uchar	cmd[LEN_CMD+1]; 			/* Program name */
-#else
-	uchar	*cmd;
-#endif
-			} swap_t;
-
-typedef struct {						/* OS/2 executable */
-#ifdef SCFG
-	uchar	name[13];					/* Program name */
-#else
-	uchar	*name;
-#endif
-	ulong	misc;						/* See OS2PGM_* */
-
-			} os2pgm_t;
-
-typedef struct {						/* External Program Information */
-	uchar
-#ifdef SCFG
-			name[41],					/* Name of External */
-			ar[LEN_ARSTR+1],			/* Access Requirements */
-			run_ar[LEN_ARSTR+1],		/* Run Requirements */
-			cmd[LEN_CMD+1], 			/* Command line */
-			clean[LEN_CMD+1],			/* Clean-up command line */
-			path[LEN_DIR+1],			/* Start-up path */
-#else
-			*name,
-			*ar,
-			*run_ar,
-			*cmd,
-			*clean,
-			*path,
-#endif
-			type,						/* What type of external program */
-            event,                      /* Execute upon what event */
-			textra, 					/* Extra time while in this program */
-			maxtime,					/* Maximum time allowed in this door */
-			code[9];					/* Internal code for program */
-	ushort	sec;						/* Section this program belongs to */
-	ulong	cost,						/* Cost to run in credits */
-			misc;						/* Misc. bits - ANSI, DOS I/O etc. */
-			} xtrn_t;
-
-typedef struct {						/* External Page program info */
-#ifdef SCFG
-	uchar	cmd[LEN_CMD+1], 			/* Command line */
-			ar[LEN_ARSTR+1];			/* ARS for this chat page */
-#else
-	uchar	*cmd,
-			*ar;
-#endif
-	ulong	misc;						/* Intercept I/O */
-			} page_t;
-
-
-typedef struct {						/* Chat action set */
-#ifdef SCFG
-	uchar	name[26];					/* Name of set */
-#else
-	uchar	*name;
-#endif
-			} actset_t;
-
-typedef struct {						/* Chat action info */
-#ifdef SCFG
-	uchar	cmd[LEN_CHATACTCMD+1],		/* Command word */
-			out[LEN_CHATACTOUT+1];		/* Output */
-#else
-	uchar	*cmd,
-			*out;
-#endif
-	ushort	actset; 					/* Set this action belongs to */
-			} chatact_t;
-
-typedef struct {						/* Gurus */
-	uchar
-#ifdef SCFG
-			name[26],
-			ar[LEN_ARSTR+1],
-#else
-			*name,
-			*ar,
-#endif
-			code[9];
-
-			} guru_t;
-
-typedef struct {						/* Chat Channel Information */
-	uchar
-#ifdef SCFG
-			ar[LEN_ARSTR+1],			/* Access requirements */
-			name[26],					/* Channel description */
-#else
-			*ar,
-			*name,
-#endif
-			code[9];
-	ushort	actset, 					/* Set of actions used in this chan */
-			guru;						/* Guru file number */
-	ulong	cost,						/* Cost to join */
-			misc;						/* Misc. bits CHAN_* definitions */
-			} chan_t;
-
-typedef struct {                        /* Modem Result codes info */
-	ushort	code,						/* Numeric Result Code */
-			cps,    		            /* Average Transfer CPS */
-			rate;   		            /* DCE Rate (Modem to Modem) */
-#ifdef SCFG
-	uchar   str[LEN_MODEM+1];   		/* String to use for description */
-#else
-	uchar	*str;
-#endif
-			} mdm_result_t;
-
-typedef struct {                        /* Transfer Protocol information */
-	uchar	mnemonic,					/* Letter to select this protocol */
-#ifdef SCFG
-			name[26],					/* Name of protocol */
-			ar[LEN_ARSTR+1],			/* ARS */
-			ulcmd[LEN_CMD+1],			/* Upload command line */
-			dlcmd[LEN_CMD+1],			/* Download command line */
-			batulcmd[LEN_CMD+1],		/* Batch upload command line */
-			batdlcmd[LEN_CMD+1],		/* Batch download command line */
-			blindcmd[LEN_CMD+1],		/* Blind upload command line */
-			bicmd[LEN_CMD+1];			/* Bidirectional command line */
-#else
-			*ar,
-			*name,
-			*ulcmd,
-			*dlcmd,
-			*batulcmd,
-			*batdlcmd,
-			*blindcmd,
-			*bicmd;
-#endif
-	ulong	misc;						/* Miscellaneous bits */
-			} prot_t;
-
-typedef struct {                        /* Extractable file types */
-	uchar	ext[4], 					/* Extension */
-#ifdef SCFG
-			ar[LEN_ARSTR+1],			/* Access Requirements */
-			cmd[LEN_CMD+1]; 			/* Command line */
-#else
-			*ar,
-			*cmd;
-#endif
-			} fextr_t;
-
-typedef struct {						/* Compressable file types */
-	uchar	ext[4], 					/* Extension */
-#ifdef SCFG
-			ar[LEN_ARSTR+1],			/* Access Requirements */
-			cmd[LEN_CMD+1]; 			/* Command line */
-#else
-			*ar,
-			*cmd;
-#endif
-			} fcomp_t;
-
-typedef struct {                        /* Viewable file types */
-	uchar	ext[4], 					/* Extension */
-#ifdef SCFG
-			ar[LEN_ARSTR+1],			/* Access Requirements */
-			cmd[LEN_CMD+1]; 			/* Command line */
-#else
-			*ar,
-			*cmd;
-#endif
-			} fview_t;
-
-typedef struct {                        /* Testable file types */
-	uchar	ext[4], 					/* Extension */
-#ifdef SCFG
-			ar[LEN_ARSTR+1],			/* Access requirement */
-			cmd[LEN_CMD+1], 			/* Command line */
-			workstr[41];				/* String to display while working */
-#else
-			*ar,
-			*cmd,
-			*workstr;
-#endif
-			} ftest_t;
-
-typedef struct {						/* Download events */
-	uchar	ext[4],
-#ifdef SCFG
-			ar[LEN_ARSTR+1],			/* Access requirement */
-			cmd[LEN_CMD+1], 			/* Command line */
-			workstr[41];				/* String to display while working */
-#else
-			*ar,
-			*cmd,
-			*workstr;
-#endif
-			} dlevent_t;
-
-typedef struct {						/* External Editors */
-	uchar
-#ifdef SCFG
-			name[41],					/* Name (description) */
-			ar[LEN_ARSTR+1],			/* Access Requirement */
-			lcmd[LEN_CMD+1],			/* Local command line */
-			rcmd[LEN_CMD+1],			/* Remote command line */
-#else
-			*name,
-			*ar,
-			*lcmd,
-			*rcmd,
-#endif
-			code[9];
-	ulong	misc;						/* Misc. bits */
-	uchar	type;						/* Drop file type */
-			} xedit_t;
-
-
-typedef struct {						/* Generic Timed Event */
-	uchar	code[9],					/* Internal code */
-			days,						/* Days to run event */
-#ifdef SCFG
-			dir[LEN_DIR+1], 			/* Start-up directory */
-			cmd[LEN_CMD+1]; 			/* Command line */
-#else
-			*dir,
-			*cmd;
-#endif
-	ushort	node,						/* Node to execute event */
-			time;						/* Time to run event */
-	ulong	misc;						/* Misc bits */
-#ifndef SCFG
-	time_t	last;						/* Last time event ran */
-#endif
-			} event_t;
-
-typedef struct {						/* QWK Network Hub */
-	uchar	id[9],						/* System ID of Hub */
-			*mode,						/* Mode for Ctrl-A codes for ea. sub */
-			days,						/* Days to call-out on */
-#ifdef SCFG
-			call[LEN_CMD+1],			/* Call-out command line to execute */
-			pack[LEN_CMD+1],			/* Packing command line */
-			unpack[LEN_CMD+1];			/* Unpacking command line */
-#else
-			*call,
-			*pack,
-			*unpack;
-#endif
-	ushort	time,						/* Time to call-out */
-			node,						/* Node to do the call-out */
-			freq,						/* Frequency of call-outs */
-			subs,						/* Number Sub-boards carried */
-			*sub,						/* Number of local sub-board for ea. */
-			*conf;						/* Conference number of ea. */
-#ifndef SCFG
-	time_t	last;						/* Last network attempt */
-#endif
-			} qhub_t;
-
-typedef struct {						/* PCRelay/PostLink Hub */
-	uchar	days,						/* Days to call-out on */
-#ifdef SCFG
-			name[11],					/* Site Name of Hub */
-			call[LEN_CMD+1];			/* Call-out command line to execute */
-#else
-			*call;
-#endif
-	ushort	time,						/* Time to call-out */
-			node,						/* Node to do the call-out */
-			freq;						/* Frequency of call-outs */
-#ifndef SCFG
-	time_t	last;						/* Last network attempt */
-#endif
-			} phub_t;
-
-
-typedef struct {						/* FidoNet msg header */
-	uchar	from[36],					/* From user */
-			to[36], 					/* To user */
-			subj[72],					/* Message title */
-			time[20];					/* Time in goof-ball ASCII format */
-	short	read,						/* Times read */
-			destnode,					/* Destination node */
-			orignode,					/* Origin node */
-			cost,						/* Cost in pennies */
-			orignet,					/* Origin net */
-			destnet,					/* Destination net */
-			destzone,					/* Destination zone */
-			origzone,					/* Origin zone */
-			destpoint,					/* Destination point */
-			origpoint,					/* Origin point */
-			re, 						/* Message number regarding */
-			attr,						/* Attributes - see FIDO_* */
-			next;						/* Next message number in stream */
-			} fmsghdr_t;
-
-
-typedef struct {						/* Command Shells */
-	uchar
-#ifdef SCFG
-			name[41],					/* Name (description) */
-			ar[LEN_ARSTR+1],			/* Access Requirement */
-#else
-			*name,
-			*ar,
-#endif
-			code[9];
-	ulong	misc;
-			} shell_t;
-
-#endif /* Don't add anything after this #endif statement */
diff --git a/src/sbbs2/scb/makefile b/src/sbbs2/scb/makefile
deleted file mode 100644
index 5e3dea3f81..0000000000
--- a/src/sbbs2/scb/makefile
+++ /dev/null
@@ -1,37 +0,0 @@
-
-# Macros
-CC	= bcc
-LD	= tlink
-SDK	= ..\sdk
-MSWAIT	= ..\..\mswait\dos
-INCLUDE = \bc31\include;$(SDK);..
-LIB     = \bc31\lib
-MODEL	= l
-CFLAGS  = -d -C -m$(MODEL) -I$(INCLUDE) -w-pro
-LDFLAGS = /n /c
-OBJS	= xsdk.obj xsdkvars.obj $(MSWAIT)\mswait$(MODEL).obj ..\dos\rciol.obj
-HEADERS = $(SDK)\xsdk.h $(SDK)\xsdkdefs.h $(SDK)\xsdkvars.c scb.h
-
-# Implicit C Compile Rule
-.c.obj:
-    	@echo Compiling $*.c to $*.obj ...
-	$(CC) $(CFLAGS) -c $*.c
-
-# Main EXE Link Rule
-scb.exe: $(OBJS) scb.obj
-    	@echo Linking $< ...
-	$(LD) $(LDFLAGS) @&&!
-$(LIB)\c0$(MODEL) $(OBJS) scb.obj
-!, $*, $*, $(LIB)\c$(MODEL).lib $(LIB)\math$(MODEL).lib $(LIB)\emu.lib
-
-
-# All .obj modules
-scb.obj: $(HEADERS)
-
-xsdk.obj: $(SDK)\xsdk.c $(HEADERS)
-	@echo Compiling $(SDK)\$*.c to $*.obj ...
-	$(CC) $(CFLAGS) -c $(SDK)\$*.c
-
-xsdkvars.obj: $(SDK)\xsdkvars.c $(SDK)\xsdkdefs.h
-	@echo Compiling $(SDK)\$*.c to $*.obj ...
-	$(CC) $(CFLAGS) -c $(SDK)\$*.c
diff --git a/src/sbbs2/scb/scb.c b/src/sbbs2/scb/scb.c
deleted file mode 100644
index 661528cf1c..0000000000
--- a/src/sbbs2/scb/scb.c
+++ /dev/null
@@ -1,920 +0,0 @@
-/* SCB */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "xsdk.h"
-#include "scb.h"
-
-/* RCIOLL.ASM */
-
-int  rioini(int com,int irq);          /* initialize com,irq */
-int  setbaud(int rate);                /* set baud rate */
-int  rioctl(int action);               /* remote i/o control */
-int  dtr(char onoff);                  /* set/reset dtr */
-int  outcom(int ch);                   /* send character */
-int  incom(void);                      /* receive character */
-int  ivhctl(int intcode);              /* local i/o redirection */
-
-/************************/
-/* Remote I/O Constants */
-/************************/
-
-							/* i/o mode and state flags */
-#define CTSCK 0x1000     	/* check cts (mode only) */
-#define RTSCK 0x2000		/* check rts (mode only) */
-#define TXBOF 0x0800		/* transmit buffer overflow (outcom only) */
-#define ABORT 0x0400     	/* check for ^C (mode), aborting (state) */
-#define PAUSE 0x0200     	/* check for ^S (mode), pausing (state) */
-#define NOINP 0x0100     	/* input buffer empty (incom only) */
-
-							/* status flags */
-#define RIODCD	0x80		/* DCD on */
-#define RI		0x40		/* Ring indicate */
-#define DSR 	0x20		/* Dataset ready */
-#define CTS 	0x10       	/* CTS on */
-#define FERR 	0x08		/* Frameing error */
-#define PERR 	0x04		/* Parity error */
-#define OVRR 	0x02		/* Overrun */
-#define RXLOST 	0x01       	/* Receive buffer overflow */
-
-/* rioctl() arguments */
-/* returns mode or state flags in high 8 bits, status flags in low 8 bits */
-
-							/* the following return mode in high 8 bits */
-#define IOMODE 0        	/* no operation */
-#define IOSM 1          	/* i/o set mode flags */
-#define IOCM 2          	/* i/o clear mode flags */
-							/* the following return state in high 8 bits */
-#define IOSTATE 4       	/* no operation */
-#define IOSS 5          	/* i/o set state flags */
-#define IOCS 6          	/* i/o clear state flags */
-#define IOFB 0x308      	/* i/o buffer flush */
-#define IOFI 0x208      	/* input buffer flush */
-#define IOFO 0x108      	/* output buffer flush */
-#define IOCE 9          	/* i/o clear error flags */
-
-							/* return count (16bit)	*/
-#define RXBC	0x0a		/* get receive buffer count */
-#define TXBC	0x0b		/* get transmit buffer count */
-#define TXSYNC  0x0c        /* sync transmition (seconds<<8|0x0c) */
-#define IDLE	0x0d		/* suspend communication routines */
-#define RESUME  0x10d		/* return from suspended state */
-#define RLERC	0x000e		/* read line error count and clear */
-#define CPTON	0x0110		/* set input translation flag for ctrl-p on */
-#define CPTOFF	0x0010		/* set input translation flag for ctrl-p off */
-#define GETCPT	0x8010		/* return the status of ctrl-p translation */
-#define MSR 	0x0011		/* read modem status register */
-#define FIFOCTL 0x0012		/* FIFO UART control */
-#define TSTYPE	0x0013		/* Time-slice API type */
-#define GETTST  0x8013      /* Get Time-slice API type */
-
-
-#define I14DB	0x001d		/* DigiBoard int 14h driver */
-#define I14PC	0x011d		/* PC int 14h driver */
-#define I14PS	0x021d		/* PS/2 int 14h driver */
-#define I14FO   0x031d      /* FOSSIL int 14h driver */
-
-
-							/* ivhctl() arguments */
-#define INT29R 1         	/* copy int 29h output to remote */
-#define INT29L 2			/* Use _putlc for int 29h */
-#define INT16  0x10      	/* return remote chars to int 16h calls */
-#define INTCLR 0            /* release int 16h, int 29h */
-
-#define LEN_ALIAS		25	/* User alias								*/
-#define LEN_NAME		25	/* User name								*/
-#define LEN_HANDLE		8	/* User chat handle 						*/
-#define LEN_NOTE		30	/* User note								*/
-#define LEN_COMP		30	/* User computer description				*/
-#define LEN_COMMENT 	60	/* User comment 							*/
-#define LEN_NETMAIL 	60	/* NetMail forwarding address				*/
-#define LEN_PASS		 8	/* User password							*/
-#define LEN_PHONE		12	/* User phone number						*/
-#define LEN_BIRTH		 8	/* Birthday in MM/DD/YY format				*/
-#define LEN_ADDRESS 	30	/* User address 							*/
-#define LEN_LOCATION	30	/* Location (City, State)					*/
-#define LEN_ZIPCODE 	10	/* Zip/Postal code							*/
-#define LEN_MODEM		 8	/* User modem type description				*/
-#define LEN_FDESC		58	/* File description 						*/
-#define LEN_TITLE		70	/* Message title							*/
-#define LEN_MAIN_CMD	40	/* Storage in user.dat for custom commands	*/
-#define LEN_XFER_CMD	40
-#define LEN_SCAN_CMD	40
-#define LEN_MAIL_CMD	40
-#define LEN_CID 		25	/* Caller ID (phone number) 				*/
-#define LEN_ARSTR		40	/* Max length of Access Requirement string	*/
-
-/****************************************************************************/
-/* This is a list of offsets into the USER.DAT file for different variables */
-/* that are stored (for each user)											*/
-/****************************************************************************/
-#define U_ALIAS 	0					/* Offset to alias */
-#define U_NAME		(U_ALIAS+LEN_ALIAS) /* Offset to name */
-#define U_HANDLE	(U_NAME+LEN_NAME)
-#define U_NOTE		(U_HANDLE+LEN_HANDLE+2)
-#define U_COMP		(U_NOTE+LEN_NOTE)
-#define U_COMMENT	(U_COMP+LEN_COMP+2)
-
-#define U_NETMAIL	(U_COMMENT+LEN_COMMENT+2)
-
-#define U_ADDRESS	(U_NETMAIL+LEN_NETMAIL+2)
-#define U_LOCATION	(U_ADDRESS+LEN_ADDRESS)
-#define U_ZIPCODE	(U_LOCATION+LEN_LOCATION)
-
-#define U_PASS		(U_ZIPCODE+LEN_ZIPCODE+2)
-#define U_PHONE  	(U_PASS+8) 			/* Offset to phone-number */
-#define U_BIRTH  	(U_PHONE+12)		/* Offset to users birthday	*/
-#define U_MODEM     (U_BIRTH+8)
-#define U_LASTON	(U_MODEM+8)
-#define U_FIRSTON	(U_LASTON+8)
-#define U_EXPIRE    (U_FIRSTON+8)
-#define U_PWMOD     (U_EXPIRE+8)
-
-#define U_LOGONS    (U_PWMOD+8+2)
-#define U_LTODAY    (U_LOGONS+5)
-#define U_TIMEON    (U_LTODAY+5)
-#define U_TEXTRA  	(U_TIMEON+5)
-#define U_TTODAY    (U_TEXTRA+5)
-#define U_TLAST     (U_TTODAY+5)
-#define U_POSTS     (U_TLAST+5)
-#define U_EMAILS    (U_POSTS+5)
-#define U_FBACKS    (U_EMAILS+5)
-#define U_ETODAY	(U_FBACKS+5)
-#define U_PTODAY	(U_ETODAY+5)
-
-#define U_ULB       (U_PTODAY+5+2)
-#define U_ULS       (U_ULB+10)
-#define U_DLB       (U_ULS+5)
-#define U_DLS       (U_DLB+10)
-#define U_CDT		(U_DLS+5)
-#define U_MIN		(U_CDT+10)
-
-#define U_LEVEL 	(U_MIN+10+2)	/* Offset to Security Level    */
-#define U_FLAGS1	(U_LEVEL+2) 	/* Offset to Flags */
-#define U_TL		(U_FLAGS1+8)	/* Offset to unused field */
-#define U_FLAGS2	(U_TL+2)		/* Offset to unused field */
-#define U_EXEMPT	(U_FLAGS2+8)
-#define U_REST		(U_EXEMPT+8)
-#define U_ROWS		(U_REST+8+2)	/* Number of Rows on user's monitor */
-#define U_SEX		(U_ROWS+2)		/* Sex, Del, ANSI, color etc.		*/
-#define U_MISC		(U_SEX+1)		/* Miscellaneous flags in 8byte hex */
-#define U_XEDIT 	(U_MISC+8)		/* External editor */
-#define U_LEECH 	(U_XEDIT+2) 	/* two hex digits - leech attempt count */
-#define U_CURGRP	(U_LEECH+2) 	/* Current group */
-#define U_CURSUB	(U_CURGRP+4)	/* Current sub-board */
-#define U_CURLIB	(U_CURSUB+4)	/* Current library */
-#define U_CURDIR	(U_CURLIB+4)	/* Current directory */
-#define U_CMDSET	(U_CURDIR+4)	/* User's command set */
-#define U_MAIN_CMD	(U_CMDSET+2+2)	/* Custom main command set */
-#define U_XFER_CMD	(U_MAIN_CMD+LEN_MAIN_CMD)
-#define U_SCAN_CMD	(U_XFER_CMD+LEN_XFER_CMD+2)
-#define U_MAIL_CMD	(U_SCAN_CMD+LEN_SCAN_CMD)
-#define U_FREECDT	(U_MAIL_CMD+LEN_MAIL_CMD+2)  /* Unused bytes */
-#define U_FLAGS3	(U_FREECDT+10)	/* Unused bytes */
-#define U_FLAGS4	(U_FLAGS3+8)
-#define U_UNUSED1	(U_FLAGS4+8)
-#define U_UNUSED2	(U_UNUSED1+22+2)
-#define U_LEN       (U_UNUSED2+48+2)
-
-enum {
-	 PHONE_OKAY
-	,PHONE_INVALID
-	,PHONE_LD
-	};
-
-unsigned _stklen=16000; 		  /* Set stack size in code, not header */
-
-uint asmrev,options=0;
-char canfile[256],result[256]={NULL},tmp[256],
-	 addfile[256],phone_number[81]={NULL},flags1[81],flags2[81],flags3[81],
-	 flags4[81],exempt[81],restrict[81],expiration[81],credits[81],minutes[81],
-	 level[81],bbs_ac[81];
-char *crlf="\r\n";
-extern uint riobp;
-extern int mswtyp;
-char io_int=0,validated=0;		/* i/o interrupts intercepted? yes/no */
-int sysop=0;
-int ldstart[7],ldend[7],min_phone_len,max_phone_len,hangup_time;
-
-/***********************/
-/* Function Prototypes */
-/***********************/
-int lprintf(char *fmat, ...);
-void bail();
-int main();
-void phone_val();
-char *get_user_pw();
-char check_phone(char *insearch);
-void mdmcmd(char *str);
-void putcomch(char ch);
-char getmdmstr(char *str, int sec);
-void mswait(int);
-void moduser();
-void write_info();
-char long_distance(char *number);
-
-/****************************************************************************/
-/* Performs printf() through local assembly routines                        */
-/* Called from everywhere                                                   */
-/****************************************************************************/
-int lprintf(char *fmat, ...) {
-	char sbuf[256];
-	int chcount;
-
-chcount=vsprintf(sbuf,fmat,_va_ptr);
-lputs(sbuf);
-return(chcount);
-}
-
-void bail()
-{
-	char str[256];
-	int i;
-
-if(io_int)
-	ivhctl(0);
-else if(!(options&STAY_CONNECTED)) { /* exiting without re-connecting */
-	dtr(10);
-	sprintf(str,"%sHANGUP.NOW",node_dir);
-	if((i=nopen(str,O_CREAT|O_RDWR))!=-1)
-		close(i); }
-if(com_port) {
-	for(i=0;i<5;i++)
-		if(!rioctl(TXBC))		/* wait for rest of output */
-			break;
-		else
-			mswait(1000);
-	rioini(0,0); }
-if(options&ALWAYS_VALIDATE || validated)
-	moduser();
-write_info();
-lputc(FF);
-}
-
-int main()
-{
-	void *v;
-	uchar far *s;
-	char str[128],ch,*p;
-	int i,file;
-	uint base=0xffff;
-	FILE *stream;
-
-node_dir[0]=0;
-
-p=getenv("SBBSNODE");
-if(p)
-	strcpy(node_dir,p);
-
-if(!node_dir[0]) {	  /* node directory not specified */
-	printf("\n\7SBBSNODE environment variable must be set.\n");
-	printf("\nExample: SET SBBSNODE=C:\\SBBS\\NODE1\n");
-	getch();
-	return(1); }
-
-if(node_dir[strlen(node_dir)-1]!='\\')  /* make sure node_dir ends in '\' */
-	strcat(node_dir,"\\");
-
-initdata();                                 /* read XTRN.DAT and more */
-
-if((asmrev=*(&riobp-1))!=23) {
-    printf("Wrong rciol.obj\n");
-    exit(1); }
-
-lclini(0xd<<8); 	 /* Tab expansion, no CRLF expansion */
-
-if(com_port) {
-	lprintf("\r\nInitializing COM port %u: ",com_port);
-	switch(com_base) {
-		case 0xb:
-			lputs("PC BIOS");
-			rioctl(I14PC);
-			break;
-		case 0xffff:
-		case 0xd:
-			lputs("DigiBoard");
-			rioctl(I14DB);
-			break;
-		case 0xe:
-			lputs("PS/2 BIOS");
-			rioctl(I14PS);
-			break;
-		case 0xf:
-			lputs("FOSSIL");
-			rioctl(I14FO);
-			break;
-		case 0:
-			base=com_port;
-			lputs("UART I/O (BIOS), ");
-			if(com_irq)
-				lprintf("IRQ %d",com_irq);
-			else lputs("default IRQ");
-			break;
-		default:
-			base=com_base;
-			lprintf("UART I/O %Xh, ",com_base);
-			if(com_irq)
-				lprintf("IRQ %d",com_irq);
-			else lputs("default IRQ");
-			break; }
-
-	if(base==0xffff)
-		lprintf(" channel %u",com_irq);
-	i=rioini(base,com_irq);
-	if(i) {
-		lprintf(" - Failed! (%d)\r\n",i);
-		exit(1); }
-	if(mdm_misc&MDM_FLOWCTRL)
-		rioctl(IOSM|CTSCK|RTSCK); /* set rts/cts chk */
-	setbaud((uint)(com_rate&0xffffL));
-	msr=&riobp-1; }
-
-rioctl(TSTYPE|mswtyp);	 /* set time-slice API type */
-
-rioctl(CPTON);          /* ctrl-p translation */
-
-i=INT29L;
-if(com_port)
-	i|=(INT29R|INT16);
-ivhctl(i);
-io_int=1;
-
-atexit(bail);
-
-phone_val();
-
-return(0);
-}
-
-/******************************************************************************
- Main phone validation loop.
-******************************************************************************/
-void phone_val()
-{
-	FILE *stream;
-	char user_password[9],str[256],init_attempts=0,callout_attempts=0,*p;
-	int i=0,j,file;
-
-	if((file=nopen("SCB.CFG",O_RDONLY))==-1) {
-		bprintf("ERROR: Opening configuration file\r\n"); exit(1); }
-	if((stream=fdopen(file,"rb"))==NULL) {
-		bprintf("ERROR: Converting configuration file to a stream\r\n");
-		exit(1); }
-	fgets(str,81,stream); truncsp(str); callout_attempts=atoi(str);
-	fgets(str,81,stream); truncsp(str);
-	if(str[0]=='Y') options|=ALWAYS_VALIDATE;
-	if(str[1]=='Y') options|=MODIFY_USER_NOTE;
-	if(str[2]=='Y') options|=START_WITH_0;
-	if(str[3]=='Y') options|=START_WITH_1;
-	if(str[4]=='Y') options|=STAY_CONNECTED;
-	if(str[5]=='Y') options|=SC_LOCAL_ONLY;
-	if(str[6]=='Y') options|=US_PHONE_FORMAT;
-	if(str[7]=='Y') options|=ALLOWED_ONLY;
-	if(str[8]!='N') options|=SAME_AREA_LD;
-	fgets(canfile,81,stream); truncsp(canfile);
-	fgets(addfile,81,stream); truncsp(addfile);
-	fgets(credits,81,stream); truncsp(credits);
-	fgets(str,81,stream); truncsp(str); sysop=atoi(str);
-	fgets(level,81,stream); truncsp(level);
-	fgets(flags1,81,stream); truncsp(flags1);
-	fgets(flags2,81,stream); truncsp(flags2);
-	fgets(exempt,81,stream); truncsp(exempt);
-	fgets(restrict,81,stream); truncsp(restrict);
-	fgets(expiration,81,stream); truncsp(expiration);
-	fgets(minutes,81,stream); truncsp(minutes);
-	fgets(flags3,81,stream); truncsp(flags3);
-	fgets(flags4,81,stream); truncsp(flags4);
-	for(i=0;i<7;i++) {
-		fgets(str,81,stream); ldstart[i]=atoi(str);    /* min since midnight */
-		fgets(str,81,stream); ldend[i]=atoi(str); }
-	fgets(str,81,stream); min_phone_len=atoi(str);
-	fgets(str,81,stream); max_phone_len=atoi(str);
-	fgets(bbs_ac,81,stream); truncsp(bbs_ac);
-	if(fgets(str,81,stream)) {
-		hangup_time=atoi(str);
-		if(hangup_time>90)
-			hangup_time=90; }
-	else
-		hangup_time=30;
-
-	fgets(str,81,stream);		// regnum
-
-	fclose(stream);
-
-	cls();
-	strcpy(result,"Hung up");
-	strcpy(user_password,get_user_pw());
-	bprintf("\1c\1hSynchronet Callback v%s  "
-		"Developed 1995-1997 Rob Swindell\r\n",VERSION);
-	sprintf(str,"%s..\\EXEC\\",ctrl_dir);
-	printfile("SCB.MSG");
-	if(yesno("\r\nDo you need instructions"))
-		printfile("INSTRUCT.MSG");
-	if(!yesno("\r\nContinue with verification")) {
-        options&=~ALWAYS_VALIDATE;
-        cls(); printfile("REFUSED.MSG"); pause();
-        strcpy(result,"Refused");
-        return; }
-/***
-	if(!(options&ALLOW_LD) && yesno("Are you calling long distance")) {
-		bprintf("\r\n\1n\1cSorry, \1h%s \1n\1cwill verify \1y\1hLOCAL "
-			"\1n\1ccalls only!\r\n",sys_name);
-			strcpy(result,"Long Dist"); pause();
-		return; }
-***/
-
-	while(1) {
-		while(1) {
-			bprintf("\r\n\r\n\1n\1cEnter your \1h\1yCOMPLETE \1n\1cphone "
-				"number now. If you are calling long distance, enter\r\n\1h\1y"
-				"ALL \1n\1cof the digits necessary to reach your phone number. "
-				"If you are a \1h\1yLOCAL \1n\1ccall from the BBS, \1h\1yDO NOT"
-				"\1n\1c enter unnecessary digits (your area code, for example)."
-				"\r\n:");
-			getstr(phone_number,20,K_LINE|K_NUMBER);
-			if(yesno("\r\nIs this correct")) break; }
-
-		if(bbs_ac[0]) { 							/* Strip off area code */
-			if(!strncmp(phone_number,bbs_ac,strlen(bbs_ac)))
-				strcpy(phone_number,phone_number+strlen(bbs_ac));
-			else {
-				sprintf(tmp,"1%s",bbs_ac);
-				if(!strncmp(phone_number,tmp,strlen(tmp)))
-					strcpy(phone_number,phone_number+strlen(tmp)); } }
-
-		if(options&US_PHONE_FORMAT &&				/* Add 1 to number */
-			(phone_number[1]=='0' || phone_number[1]=='1') &&
-			strlen(phone_number)>7) {
-			sprintf(tmp,"1%s",phone_number);
-			strcpy(phone_number,tmp); }
-
-		j=check_phone(phone_number);
-
-		if(j==PHONE_LD) {
-			strcpy(result,"Long Dist");
-			pause();
-			return; }
-		if(j==PHONE_OKAY)
-			break;
-		options&=~ALWAYS_VALIDATE;
-		strcpy(result,"Invalid #");
-		bprintf("\r\n\1n\1cReturning you to \1h%s.\1n\r\n",sys_name);
-		return; }
-
-	bprintf("\r\n\r\n\1n\1cDropping Carrier, \1h%s \1n\1cwill call you back "
-		"now.\r\nType \1h\1yATA \1n\1cto answer when your modem rings!\r\n\r\n"
-		,sys_name);
-	if(!com_port) exit(0);
-	mswait(1000);
-	ivhctl(0);		/* put intercepted i/o vectors back */
-	io_int=0;
-
-	for(init_attempts=0;init_attempts<4;init_attempts++) {	 /* 4 attempts */
-		dtr(5);
-		if(!init_attempts) mswait(1000);
-		dtr(1);
-		rioctl(IOFB);
-		for(i=0;i<4;i++) {
-			mdmcmd(mdm_init);
-			if(!getmdmstr(str,10))
-				continue;
-			if(!stricmp(str,mdm_init)) {	/* Echo on? */
-				getmdmstr(str,10);			/* Get OK */
-				mdmcmd("ATE0");             /* Turn echo off */
-				if(!getmdmstr(str,10))
-                    continue; }
-			if(!strcmp(str,"OK")) {         /* Verbal response? */
-				mdmcmd("ATV0");             /* Turn verbal off */
-				if(!getmdmstr(str,10))
-					continue; }
-			if(!strcmp(str,"0"))
-				break;
-			rioctl(IOFB);		/* Send fool-proof init string */
-			mdmcmd("ATE0V0");
-			if(getmdmstr(str,10) && !strcmp(str,"0"))
-				break; }
-		if(i==4)
-			continue;
-		mswait(100);
-		if(mdm_spec[0]) {
-			for(i=0;i<4;i++) {
-				mdmcmd(mdm_spec);
-				if(!getmdmstr(str,10)) continue;
-				if(!strcmp(str,"0")) break; }
-			if(i==4)
-				continue; }
-		break; }
-
-	if(init_attempts==4) {	 /* couldn't init */
-		strcpy(result,"No Init");
-		exit(1); }
-
-	mswait(1000);
-	mdmcmd("ATH");
-	str[0]=0;
-	getmdmstr(str,10);
-	if(strcmp(str,"0")) {
-		strcpy(result,"No Init");
-		exit(1); }
-	if(hangup_time)
-		bprintf("\r\n\1n\1cWaiting \1h%u\1n\1c seconds before dialing..."
-			"\r\n\r\n",hangup_time);
-	mswait(hangup_time*1000);			/* Wait xx seconds before dialing */
-
-	for(i=0;i<callout_attempts;i++) {
-		mswait(5000);
-		rioctl(IOFB);
-		sprintf(str,"%s%s",mdm_dial,phone_number);
-		mdmcmd(str);
-		if(!getmdmstr(str,60)) {
-			mdmcmd("");         /* send CR to abort dial */
-			continue; }
-		if(strcmp(str,"0") && strcmp(str,"2") && strcmp(str,"3")
-			&& strcmp(str,"4") && strcmp(str,"6") && strcmp(str,"7")
-			&& strcmp(str,"8") && strcmp(str,"9"))
-		   break; }
-
-	if(i==callout_attempts) {			/* Couldn't connect */
-		strcpy(result,"No Connect");
-		exit(1); }
-
-	i=INT29L;		/* intercept i/o vectors again */
-	if(com_port)
-		i|=(INT29R|INT16);
-	ivhctl(i);
-	io_int=1;
-
-	if(rioctl(IOSTATE|DCD)) {
-		mswait(5000);	/* wait 5 seconds for MNP to Non-MNP connect */
-		rioctl(IOFB);
-		lncntr=0;
-		i=0; cls();
-		bprintf("\r\n\r\n\1n\1cThis is \1h%s \1n\1ccalling for \1m%s.",
-			sys_name,user_name);
-		while(1) {
-			bprintf("\r\n\r\n\1h\1yEnter your password for verification: ");
-			getstr(str,8,K_UPPER|K_LINE);
-			if(!stricmp(str,user_password)) {
-				validated=1;
-				bprintf("\r\n\r\n\1n\1cYou have now been verified on \1h%s!",
-					sys_name);
-				printfile("VERIFIED.MSG");
-				strcpy(result,"Verified");
-				break; }
-			else {
-				bprintf("\r\n\1r\1hINCORRECT!\1n");
-				if(++i>=4) {
-					bprintf("\r\n\r\n\1r\1hYou have entered an incorrect "
-						"password.  Goodbye.\r\n\r\n"); dtr(5);
-						strcpy(result,"Bad Pass"); return; } } }
-
-		if(!(options&STAY_CONNECTED)) {
-			mswait(2000);
-			for(i=0;i<5;i++) {
-				dtr(5);
-				if(!(rioctl(IOSTATE)&DCD))	/* no carrier detect */
-					break;
-				lprintf("SCB: Dropping DTR failed to lower DCD.\r\n");
-				dtr(1);
-				mswait(2000); }
-			sprintf(str,"%sHANGUP.NOW",node_dir);
-			if((i=nopen(str,O_CREAT|O_RDWR))!=-1)
-				close(i); } }
-}
-
-/******************************************************************************
- Writes the MODUSER.DAT file.
-******************************************************************************/
-void moduser()
-{
-	FILE *stream;
-	char str[512];
-	int file;
-	long expire;
-	time_t now;
-
-	now=time(NULL);
-
-	if(user_expire>now)
-		expire=(user_expire+(atol(expiration)*24L*60L*60L));
-	else
-		expire=(now+(atol(expiration)*24L*60L*60L));
-
-	sprintf(str,"%sMODUSER.DAT",node_dir);
-	if((stream=fopen(str,"wb"))!=NULL) {
-		fprintf(stream,"%s\r\n",credits);
-		fprintf(stream,"%s\r\n",level);
-		fprintf(stream,"\r\n");
-		fprintf(stream,"%s\r\n",flags1);
-		fprintf(stream,"%s\r\n",flags2);
-		fprintf(stream,"%s\r\n",exempt);
-		fprintf(stream,"%s\r\n",restrict);
-		fprintf(stream,"%s\r\n",atol(expiration) ? ultoa(expire,str,16) : "");
-		fprintf(stream,"%s\r\n",minutes);
-		fprintf(stream,"%s\r\n",flags3);
-		fprintf(stream,"%s\r\n",flags4);
-		fclose(stream);
-		}
-	else
-        bprintf("\7\r\nError opening %s for write.\r\n",str);
-	if(addfile[0] && phone_number[0]) {
-        if((file=nopen(addfile,O_WRONLY|O_APPEND|O_CREAT))!=-1) {
-            sprintf(str,"%s^\r\n",phone_number);
-            write(file,str,strlen(str));
-            close(file); }
-        else
-            bprintf("\7\r\nError opening %s for write.\r\n",addfile); }
-	if(sysop) {
-		sprintf(str,"\1c\1hSCB: \1y%s \1n\1cwas validated \1h%.24s\1n\r\n"
-			,user_name,ctime(&now));
-		putsmsg(sysop,str); }
-}
-
-/******************************************************************************
- Writes the log file.
-******************************************************************************/
-void write_info()
-{
-	char str[512];
-	int file;
-	time_t now;
-
-	now=time(NULL);
-	if((file=nopen("SCB.LOG",O_WRONLY|O_APPEND|O_CREAT))!=-1) {
-		sprintf(str,
-			"Node %-3d     : %.24s\r\n"
-			"User Name    : %s\r\n"
-			"Voice Number : %s\r\n"
-			"Modem Number : %s\r\n"
-			"Result       : %s\r\n\r\n"
-			,node_num,ctime(&now),user_name,user_phone,phone_number,result);
-		write(file,str,strlen(str));
-		close(file); }
-	else
-		bprintf("\7\r\nError opening SCB.LOG for write.\r\n");
-	sprintf(str,"%sNODE.LOG",node_dir);
-	if(com_port && (file=nopen(str,O_WRONLY|O_APPEND|O_CREAT))!=-1) {
-		sprintf(str,"cb Result: %s %s\r\n",result,phone_number);
-		write(file,str,strlen(str));
-		close(file); }
-	if(options&MODIFY_USER_NOTE) {
-        sprintf(str,"%sUSER\\USER.DAT",data_dir);
-		if((file=nopen(str,O_WRONLY|O_DENYNONE))!=-1) {
-			lseek(file,(long)((((long)user_number-1L)*U_LEN)+U_NOTE),SEEK_SET);
-            memset(str,'\3',30);
-			sprintf(str,"%s %s",result,phone_number);
-			str[strlen(str)]=3;
-			write(file,str,30);
-            close(file); } }
-}
-
-/******************************************************************************
- Returns the users' password.
-******************************************************************************/
-char *get_user_pw()
-{
-	static char pw[9];
-	char str[256];
-	int file,x;
-
-	sprintf(str,"%sUSER\\USER.DAT",data_dir);
-	if((file=nopen(str,O_RDONLY))==-1) {
-		printf("Unable to open %s.",str); exit(1); }
-	lseek(file,(long)((((long)user_number-1L)*U_LEN)+U_PASS),SEEK_SET);
-	read(file,pw,8);
-	for(x=0;x<8;x++)
-		if(pw[x]==3) break;
-	pw[x]=0;
-	close(file);
-	return(pw);
-}
-
-/******************************************************************************
- Checks the phone number entered.  0=Good, 1=Bad.
-******************************************************************************/
-char check_phone(char *insearch)
-{
-	char str[256],search[256],c,found=0,allowed=0,long_distance=0;
-	int file,day,t;
-	FILE *stream;
-	time_t now;
-	struct date date;
-	struct time curtime;
-	struct tm *tblock;
-
-if(strlen(insearch)<min_phone_len) {
-	printfile("TOOSHORT.MSG");
-	return(PHONE_INVALID); }
-if(strlen(insearch)>max_phone_len) {
-	printfile("TOOLONG.MSG");
-    return(PHONE_INVALID); }
-
-strcpy(str,"ALLOWED.DAT");
-if((file=nopen(str,O_RDONLY|O_TEXT))!=-1)
-	if((stream=fdopen(file,"rt"))!=NULL) {
-		strcpy(search,insearch);
-		strupr(search);
-		while(!feof(stream) && !ferror(stream)) {
-			if(!fgets(str,81,stream))
-				break;
-			truncsp(str);
-			c=strlen(str);
-			if(c && !strncmp(str,search,c)) {
-				allowed=1;
-				break; } }
-	fclose(stream); }
-
-if(!allowed) {
-
-	if(options&ALLOWED_ONLY)
-		long_distance=1;
-	else {
-		strcpy(str,"LDPREFIX.DAT");
-		if((file=nopen(str,O_RDONLY|O_TEXT))!=-1)
-			if((stream=fdopen(file,"rt"))!=NULL) {
-				strcpy(search,insearch);
-				strupr(search);
-				while(!feof(stream) && !ferror(stream)) {
-					if(!fgets(str,81,stream))
-						break;
-					truncsp(str);
-					c=strlen(str);
-					if(c && !strncmp(str,search,c)) {
-						long_distance=1;
-						break; } }
-			fclose(stream); } }
-
-	if(!(options&START_WITH_0) && insearch[0]=='0') {
-		printfile("NO_ZERO.MSG");
-		return(PHONE_LD); }
-	if(!(options&START_WITH_1) && insearch[0]=='1') {
-		printfile("NO_ONE.MSG");
-		return(PHONE_LD); }
-	if(!(options&SAME_AREA_LD) && insearch[0]!='0' && insearch[0]!='1'
-		&& long_distance) {
-		printfile("NO_LD.MSG");
-		return(PHONE_LD); }
-	if((insearch[0]=='1' || insearch[0]=='0' || long_distance) &&
-		(ldstart[day] || ldend[day])) {
-		now=time(NULL);
-		tblock=localtime(&now);
-		day=tblock->tm_wday;
-		unixtodos(now,&date,&curtime);
-		t=(curtime.ti_hour*60)+curtime.ti_min;
-
-		if((ldstart[day]<ldend[day]
-			&& (t<ldstart[day] || t>ldend[day]))
-
-		|| (ldstart[day]>ldend[day]
-			&& (t<ldstart[day] && t>ldend[day]))
-
-			) {
-
-			bprintf("\7\r\n\1n\1gLong distance calls are only allowed between "
-				"\1h%02d:%02d \1n\1gand \1h%02d:%02d\1n\1g.\r\n"
-				,ldstart[day]/60,ldstart[day]%60
-				,ldend[day]/60,ldend[day]%60);
-			printfile("LD_TIME.MSG");
-			return(PHONE_LD); } } }
-
-strcpy(str,canfile);
-if((file=nopen(str,O_RDONLY|O_TEXT))==-1) {
-	if(fexist(str))
-		printf("ERROR: Unable to open %s for read.",str);
-	return(PHONE_OKAY); }
-if((stream=fdopen(file,"rt"))==NULL) {
-	printf("ERROR: Converting %s to a stream.",str);
-	return(PHONE_OKAY); }
-strcpy(search,insearch);
-strupr(search);
-while(!feof(stream) && !ferror(stream) && !found) {
-	if(!fgets(str,81,stream))
-		break;
-	truncsp(str);
-	c=strlen(str);
-	if(c) {
-		c--;
-		strupr(str);
-		if(str[c]=='~') {
-			str[c]=0;
-			if(strstr(search,str))
-				found=1; }
-
-		else if(str[c]=='^') {
-			str[c]=0;
-			if(!strncmp(str,search,c))
-				found=1; }
-
-		else if(!strcmp(str,search))
-			found=1; } }
-fclose(stream);
-if(found) {
-	printfile("PHONECAN.MSG");
-	return(PHONE_INVALID); }
-if(!allowed && options&STAY_CONNECTED && options&SC_LOCAL_ONLY &&
-	(insearch[0]=='1' || insearch[0]=='0'))
-    options&=~STAY_CONNECTED;
-return(PHONE_OKAY);
-}
-
-/****************************************************************************/
-/* Outputs a single character to the COM port								*/
-/****************************************************************************/
-void putcomch(char ch)
-{
-	char 	lch;
-	int 	i=0;
-
-if(!com_port)
-	return;
-while(outcom(ch)&TXBOF && i<1440) {	/* 3 minute pause delay */
-    if(lkbrd(1)) {
-		lch=lkbrd(0);	/* ctrl-c */
-		if(lch==3) {
-			lputs("local abort (putcomch)\r\n");
-			i=1440;
-			break; }
-		ungetkey(lch); }
-    if(!(rioctl(IOSTATE)&DCD))
-		break;
-	i++;
-	mswait(80); }
-if(i==1440) {						/* timeout - beep flush outbuf */
-	i=rioctl(TXBC);
-	lprintf("timeout(putcomch) %04X %04X\r\n",i,rioctl(IOFO));
-	outcom(7);
-	lputc(7);
-	rioctl(IOCS|PAUSE); }
-}
-
-/****************************************************************************/
-/* Sends string of characters to COM port. Interprets ^M and ~ (pause)		*/
-/* Called from functions waitforcall and offhook							*/
-/****************************************************************************/
-void mdmcmd(char *str)
-{
-	int 	i=0;
-	uint	lch;
-
-lputs("\r\nModem command  : ");
-while(str[i]) {
-	if(str[i]=='~')
-		mswait(500);
-	else {
-		if(i && str[i-1]=='^' && str[i]!='^')  /* control character */
-			putcomch(toupper(str[i])-64);
-		else if(str[i]!='^' || (i && str[i-1]=='^'))
-			putcomch(str[i]);
-		lputc(str[i]); }
-	i++; }
-putcomch(CR);
-i=0;
-while(rioctl(TXSYNC) && i<10) {   /* wait for modem to receive all chars */
-	if(lkbrd(1)) {
-		lch=lkbrd(0);	/* ctrl-c */
-		if(lch==0x2e03) {
-			lputs("local abort (mdmcmd)\r\n");
-			break; }
-		if(lch==0xff00)
-			bail(1);
-		ungetkey(lch); }
-	i++; }
-if(i==10) {
-	i=rioctl(TXBC);
-	lprintf("\r\n\7timeout(mdmcmd) %04X %04X\r\n",i,rioctl(IOFO)); }
-lputs(crlf);
-}
-/****************************************************************************/
-/* Returns CR terminated string from the COM port. 							*/
-/* Called from function waitforcall 										*/
-/****************************************************************************/
-char getmdmstr(char *str, int sec)
-{
-	uchar	j=0,ch;
-	uint	lch;
-	time_t	start;
-
-lputs("Modem response : ");
-start=time(NULL);
-while(time(NULL)-start<sec && j<81) {
-	if(lkbrd(1)) {
-		lch=lkbrd(0);	/* ctrl-c */
-		if(lch==0x2e03) {
-			lputs("local abort (getmdmstr)\r\n");
-			break; }
-		if(lch==0xff00)
-			bail(1);
-		ungetkey(lch); }
-	if((ch=incom())==CR && j)
-		break;
-	if(ch && (ch<0x20 || ch>0x7f)) /* ignore control characters and ex-ascii */
-		continue;
-	if(ch) {
-		str[j++]=ch;
-		lputc(ch); }
-	else mswait(0); }
-mswait(500);
-str[j]=0;
-lputs(crlf);
-return(j);
-}
diff --git a/src/sbbs2/scb/scb.h b/src/sbbs2/scb/scb.h
deleted file mode 100644
index 1aac129df0..0000000000
--- a/src/sbbs2/scb/scb.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/* SCB.H */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* Synchronet BBS Callback door */
-
-#define VERSION "1.40"
-
-#define ALWAYS_VALIDATE 	(1<<0)
-#define MODIFY_USER_NOTE	(1<<1)
-#define START_WITH_0		(1<<2)
-#define START_WITH_1		(1<<3)
-#define STAY_CONNECTED		(1<<4)
-#define SC_LOCAL_ONLY		(1<<5)
-#define US_PHONE_FORMAT 	(1<<6)
-#define ALLOWED_ONLY		(1<<7)
-#define SAME_AREA_LD		(1<<8)
diff --git a/src/sbbs2/scb/scbcfg.c b/src/sbbs2/scb/scbcfg.c
deleted file mode 100644
index 4058369fe3..0000000000
--- a/src/sbbs2/scb/scbcfg.c
+++ /dev/null
@@ -1,788 +0,0 @@
-/* SCBCFG.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include <uifc.h>
-#include <sys\stat.h>
-#include "scb.h"
-
-#define MAX_PRFX	500
-#define LEN_PRFX	20
-
-char **opt;
-char **prfx;
-
-int add();
-void bail(int code);
-void main();
-char fexist(char *filespec);
-
-unsigned _stklen=16000; 		  /* Set stack size in code, not header */
-
-void bail(int code)
-{
-
-if(code)
-	getch();
-uifcbail();
-exit(code);
-}
-
-int add()
-{
-	int i;
-
-i=0;
-strcpy(opt[0],"Add these to the user account");
-strcpy(opt[1],"Remove these from the user account");
-opt[2][0]=0;
-/*
-Add/Remove Flags/Restricts/Exempts:
-
-Select ADD if you want these flags/restricts/exempts added to the
-user upon validation, or select REMOVE to take them away upon
-validation.
-
-*/
-i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0,"Add or Remove From Account",opt);
-return(i);
-}
-
-void main()
-{
-	char str[128],canfile[256],addfile[256],flags1[81]={NULL},
-		 flags2[81]={NULL},flags3[81]={NULL},flags4[81]={NULL},
-		 exempt[81]={NULL},restrict[81]={NULL},expiration[81]={NULL},
-		 credits[81]={NULL},minutes[81]={NULL},level[81]={NULL},
-		 callout_attempts[81]={NULL},sysop[81]={NULL},bbs_ac[81],*p;
-	int file,i,j,k,options=0,ldstart[7]={NULL},ldend[7]={NULL},min_phone_len=7,
-		max_phone_len=11,total_prfxs,dflt,b,hangup_time;
-	FILE *stream;
-
-savnum=0;
-if((opt=(char **)MALLOC(sizeof(char *)*300))==NULL) {
-	cputs("memory allocation error\r\n");
-	bail(1); }
-for(i=0;i<300;i++)
-	if((opt[i]=(char *)MALLOC(MAX_OPLN))==NULL) {
-		cputs("memory allocation error\r\n");
-        bail(1); }
-uifcini();
-sprintf(str,"Synchronet Callback v%s",VERSION);
-uscrn(str);
-
-if(!(fexist("SCB.CFG"))) {
-	strcpy(callout_attempts,"5");
-	strcpy(canfile,"\\SBBS\\TEXT\\PHONE.CAN");
-	strcpy(addfile,canfile);
-	options|=MODIFY_USER_NOTE; }
-else {
-	if((file=open("SCB.CFG",O_RDONLY|O_BINARY|O_DENYNONE))==-1) {
-		textattr(LIGHTGRAY);
-		clrscr();
-		lprintf("Error opening SCB.CFG\r\n");
-		bail(1); }
-	if((stream=fdopen(file,"rb"))==NULL) {
-		textattr(LIGHTGRAY);
-		clrscr();
-		lprintf("Error fdopen SCB.CFG\r\n");
-		bail(1); }
-	fgets(callout_attempts,81,stream); truncsp(callout_attempts);
-	fgets(str,81,stream); truncsp(str);
-	if(str[0]=='Y') options|=ALWAYS_VALIDATE;
-	if(str[1]=='Y') options|=MODIFY_USER_NOTE;
-	if(str[2]=='Y') options|=START_WITH_0;
-	if(str[3]=='Y') options|=START_WITH_1;
-	if(str[4]=='Y') options|=STAY_CONNECTED;
-	if(str[5]=='Y') options|=SC_LOCAL_ONLY;
-	if(str[6]=='Y') options|=US_PHONE_FORMAT;
-	if(str[7]=='Y') options|=ALLOWED_ONLY;
-	if(str[8]!='N') options|=SAME_AREA_LD;
-	fgets(canfile,81,stream); truncsp(canfile);
-	fgets(addfile,81,stream); truncsp(addfile);
-	fgets(credits,81,stream); truncsp(credits);
-	fgets(sysop,81,stream); truncsp(sysop);
-	fgets(level,81,stream); truncsp(level);
-	fgets(flags1,81,stream); truncsp(flags1);
-	fgets(flags2,81,stream); truncsp(flags2);
-	fgets(exempt,81,stream); truncsp(exempt);
-	fgets(restrict,81,stream); truncsp(restrict);
-	fgets(expiration,81,stream); truncsp(expiration);
-	fgets(minutes,81,stream); truncsp(minutes);
-	fgets(flags3,81,stream); truncsp(flags3);
-	fgets(flags4,81,stream); truncsp(flags4);
-	for(i=0;i<7;i++) {
-		fgets(str,81,stream); ldstart[i]=atoi(str);    /* min since midnight */
-		fgets(str,81,stream); ldend[i]=atoi(str); }
-	fgets(str,81,stream); min_phone_len=atoi(str);
-	fgets(str,81,stream); max_phone_len=atoi(str);
-	fgets(bbs_ac,81,stream); truncsp(bbs_ac);
-	if(fgets(str,81,stream)) {
-		hangup_time=atoi(str);
-		if(hangup_time>90)
-			hangup_time=90; }
-	else
-		hangup_time=30;
-	str[0]=0;
-	fgets(str,81,stream);	// regnum
-	fclose(stream); }
-dflt=0;
-while(1) {
-	helpbuf=
-" Synchronet Callback Configuration \r\n\r\n"
-"Move through the various options using the arrow keys.  Select the\r\n"
-"highlighted options by pressing ENTER.\r\n\r\n";
-	j=0;
-	sprintf(opt[j++],"Toggle Options...");
-	sprintf(opt[j++],"Validation Values...");
-	sprintf(opt[j++],"Allowed Prefix List...");
-	sprintf(opt[j++],"Long Distance Prefix List...");
-	sprintf(opt[j++],"Long Distance Calling Times...");
-	sprintf(opt[j++],"Phone Number Trash Can   %-30.30s",canfile);
-	sprintf(opt[j++],"Validated Phone List     %-30.30s",addfile);
-	sprintf(opt[j++],"Callback Attempts        %-2.2s",callout_attempts);
-	sprintf(opt[j++],"Minimum Phone Length     %u",min_phone_len);
-	sprintf(opt[j++],"Maximum Phone Length     %u",max_phone_len);
-	sprintf(opt[j++],"Wait Before Dialing      %u seconds",hangup_time);
-	sprintf(opt[j++],"BBS Area Code            %-3.3s",bbs_ac);
-	if(sysop[0])
-		sprintf(str,"User #%s",sysop);
-	else
-		sprintf(str,"Disabled");
-	sprintf(opt[j++],"Send Message to Sysop    %-30.30s",str);
-	opt[j][0]=NULL;
-	switch(ulist(WIN_ORG|WIN_MID|WIN_ACT|WIN_ESC,0,0,60,&dflt,0
-	,"Synchronet Callback Configuration",opt)) {
-		case 0:
-			j=0;
-			while(1) {
-				k=0;
-				sprintf(opt[k++],"%-40.40s%-3s","Validate if Unable to Verify"
-					,options&ALWAYS_VALIDATE ? "Yes":"No");
-				sprintf(opt[k++],"%-40.40s%-3s","Put Result in User Note"
-					,options&MODIFY_USER_NOTE ? "Yes":"No");
-				sprintf(opt[k++],"%-40.40s%-3s"
-					,"Long Distance if not an Allowed Prefix"
-					,options&ALLOWED_ONLY ? "Yes":"No");
-				sprintf(opt[k++],"%-40.40s%-3s"
-					,"Allow Long Distance (Starting with 0)"
-					,options&START_WITH_0 ? "Yes":"No");
-				sprintf(opt[k++],"%-40.40s%-3s"
-					,"Allow Long Distance (Starting with 1)"
-					,options&START_WITH_1 ? "Yes":"No");
-				sprintf(opt[k++],"%-40.40s%-3s"
-					,"Allow Long Distance (Same Area Code)"
-					,options&SAME_AREA_LD ? "Yes":"No");
-				sprintf(opt[k++],"%-40.40s%-3s"
-					,"U.S. Style Phone Format (AAA-PPP-SSSS)"
-					,options&US_PHONE_FORMAT ? "Yes":"No");
-				sprintf(opt[k++],"%-40.40s%-10s","Stay Connected After Callback"
-					,options&STAY_CONNECTED && options&SC_LOCAL_ONLY ?
-					"Local Only" : options&STAY_CONNECTED ? "Yes":"No");
-				opt[k][0]=NULL;
-helpbuf=
-" Toggle Options \r\n\r\n"
-"Validate if Unable to Call Back\r\n"
-"  Setting this to Yes will validate the user even if the board is unable "
-"\r\n"
-"  to call the user back.\r\n"
-"Put Result in User Note\r\n"
-"  When set to Yes, this option will place the phone number, and\r\n"
-"  information pertaining to the call into the user's note.\r\n"
-"Allow Numbers that Start with 0 / Allow Numbers that Start with 1\r\n"
-"  Set these options to Yes to allow SCB to call phone numbers which\r\n"
-"  start with a 0 or a 1 (respectively).\r\n"
-"U.S. Style Phone Format\r\n"
-"  Toggle this option to Yes if you live in an area that uses a phone\r\n"
-"  number format of (AAA) PPP-SSSS.\r\n"
-"Stay Connected After Callback\r\n"
-"  Toggle this option to Yes to allow SCB to stay connected after a\r\n"
-"  callback, Local Only for local numbers, or No to disconnect.";
-
-				j=ulist(0,0,0,0,&j,0,"Toggle Options",opt);
-				if(j==-1)
-					break;
-				switch(j) {
-					case 0:
-						options^=ALWAYS_VALIDATE;
-						break;
-					case 1:
-						options^=MODIFY_USER_NOTE;
-						break;
-					case 2:
-						options^=ALLOWED_ONLY;
-						break;
-					case 3:
-						options^=START_WITH_0;
-						break;
-					case 4:
-						options^=START_WITH_1;
-						break;
-					case 5:
-						options^=SAME_AREA_LD;
-                        break;
-					case 6:
-						options^=US_PHONE_FORMAT;
-						break;
-					case 7:
-						if(options&STAY_CONNECTED && options&SC_LOCAL_ONLY) {
-							options^=STAY_CONNECTED;
-							options^=SC_LOCAL_ONLY;
-						} else if(options&STAY_CONNECTED)
-							options^=SC_LOCAL_ONLY;
-						else options^=STAY_CONNECTED;
-						break; } }
-            break;
-		case 1:
-			j=0;
-			while(1) {
-				k=0;
-				sprintf(opt[k++],"%-30.30s  %-27.27s","Security Level"
-					,level);
-				sprintf(opt[k++],"%-30.30s  %-27.27s","Flag Set 1"
-					,flags1);
-				sprintf(opt[k++],"%-30.30s  %-27.27s","Flag Set 2"
-					,flags2);
-				sprintf(opt[k++],"%-30.30s  %-27.27s","Flag Set 3"
-					,flags3);
-				sprintf(opt[k++],"%-30.30s  %-27.27s","Flag Set 4"
-					,flags4);
-				sprintf(opt[k++],"%-30.30s  %-27.27s","Exemptions"
-					,exempt);
-				sprintf(opt[k++],"%-30.30s  %-27.27s","Restrictions"
-					,restrict);
-				sprintf(opt[k++],"%-30.30s  %-27.27s"
-					,"Days to Extend Expiration"
-					,expiration);
-				sprintf(opt[k++],"%-30.30s  %-27.27s","Credits to Add"
-					,credits);
-				sprintf(opt[k++],"%-30.30s  %-27.27s","Minutes to Add"
-					,minutes);
-				opt[k][0]=NULL;
-helpbuf=
-" Validation Values \r\n\r\n"
-"These are the values that will be placed into user accounts that have\r\n"
-"been successfully verified through the Synchronet Callback.";
-
-
-				j=ulist(WIN_ACT,0,0,0,&j,0,"Validation Values",opt);
-				if(j==-1)
-					break;
-				switch(j) {
-					case 0:
-helpbuf=
-" Security Level \r\n\r\n"
-"This is the Security level that will be given to users that are called\r\n"
-"back successfully.";
-						uinput(WIN_L2R|WIN_MID|WIN_SAV,0,0,
-							"Security Level",level,2,K_EDIT|K_NUMBER);
-						break;
-					case 1:
-helpbuf=
-" Flag Set 1 \r\n\r\n"
-"These are the different flags to be added to (or removed from) the\r\n"
-"user account.";
-						p=strstr(flags1,"-");
-						if(p!=NULL) sprintf(str,"%s",p+1);
-						else
-							sprintf(str,"%s",flags1);
-						if(uinput(WIN_L2R|WIN_MID|WIN_SAV,0,0,"Flag Set 1",str
-							,26,K_EDIT|K_UPPER|K_ALPHA)<0)
-							break;
-						if(str[0] && add()>0) sprintf(flags1,"-%s",str);
-						else
-							sprintf(flags1,"%s",str);
-                        break;
-					case 2:
-helpbuf=
-" Flag Set 2 \r\n\r\n"
-"These are the different flags to be added to (or removed from) the\r\n"
-"user account.";
-						p=strstr(flags2,"-");
-						if(p!=NULL) sprintf(str,"%s",p+1);
-						else
-							sprintf(str,"%s",flags2);
-						if(uinput(WIN_L2R|WIN_MID|WIN_SAV,0,0,"Flag Set 2",str
-							,26,K_EDIT|K_UPPER|K_ALPHA)<0)
-							break;
-						if(str[0] && add()>0) sprintf(flags2,"-%s",str);
-						else
-							sprintf(flags2,"%s",str);
-                        break;
-					case 3:
-helpbuf=
-" Flag Set 3 \r\n\r\n"
-"These are the different flags to be added to (or removed from) the\r\n"
-"user account.";
-						p=strstr(flags3,"-");
-						if(p!=NULL) sprintf(str,"%s",p+1);
-						else
-							sprintf(str,"%s",flags3);
-						if(uinput(WIN_L2R|WIN_MID|WIN_SAV,0,0,"Flag Set 3",str
-							,26,K_EDIT|K_UPPER|K_ALPHA)<0)
-							break;
-						if(str[0] && add()>0) sprintf(flags3,"-%s",str);
-						else
-							sprintf(flags3,"%s",str);
-                        break;
-					case 4:
-helpbuf=
-" Flag Set 4 \r\n\r\n"
-"These are the different flags to be added to (or removed from) the\r\n"
-"user account.";
-						p=strstr(flags4,"-");
-						if(p!=NULL) sprintf(str,"%s",p+1);
-						else
-							sprintf(str,"%s",flags4);
-						if(uinput(WIN_L2R|WIN_MID|WIN_SAV,0,0,"Flag Set 4",str
-							,26,K_EDIT|K_UPPER|K_ALPHA)<0)
-							break;
-						if(str[0] && add()>0) sprintf(flags4,"-%s",str);
-						else
-							sprintf(flags4,"%s",str);
-                        break;
-					case 5:
-helpbuf=
-" Exemptions \r\n\r\n"
-"These are the exemption flags that will be added to (or removed from)\r\n"
-"the user account.";
-						p=strstr(exempt,"-");
-						if(p!=NULL) sprintf(str,"%s",p+1);
-						else
-							sprintf(str,"%s",exempt);
-						if(uinput(WIN_MID|WIN_SAV,0,0,"Exemptions",str
-							,26,K_EDIT|K_UPPER|K_ALPHA)<0)
-							break;
-						if(str[0] && add()>0) sprintf(exempt,"-%s",str);
-						else
-							sprintf(exempt,"%s",str);
-                        break;
-					case 6:
-helpbuf=
-" Restrictions \r\n\r\n"
-"These are the restriction flags that will be added to (or removed\r\n"
-"from) the user account.";
-						p=strstr(restrict,"-");
-						if(p!=NULL) sprintf(str,"%s",p+1);
-						else
-							sprintf(str,"%s",restrict);
-						if(uinput(WIN_MID|WIN_SAV,0,0,"Restrictions",str
-							,26,K_EDIT|K_UPPER|K_ALPHA)<0)
-							break;
-						if(str[0] && add()>0) sprintf(restrict,"-%s",str);
-						else
-							sprintf(restrict,"%s",str);
-                        break;
-					case 7:
-helpbuf=
-" Days to Extend Expiration \r\n\r\n"
-"This is the number of days to extend the expiration date of a user\r\n"
-"account.";
-						uinput(WIN_MID|WIN_SAV,0,0,"Expiration"
-							,expiration,8,K_EDIT|K_UPPER|K_NUMBER);
-                        break;
-					case 8:
-helpbuf=
-" Credits to Add \r\n\r\n"
-"This is the number of credits to add to a user account.";
-						uinput(WIN_MID|WIN_SAV,0,0,"Credits",credits
-							,10,K_EDIT|K_UPPER|K_NUMBER);
-                        break;
-					case 9:
-helpbuf=
-" Minutes to Add \r\n\r\n"
-"This is the number of minutes to add to a user account.";
-						uinput(WIN_MID|WIN_SAV,0,0,"Minutes",minutes
-							,3,K_EDIT|K_UPPER|K_NUMBER);
-						break; } }
-            break;
-		case 2:
-helpbuf=
-" Allowed Prefix List \r\n\r\n"
-"Any phone numbers entered whose prefix matches a number contained\r\n"
-"in this list, will not be affected by long distance restrictions.\r\n"
-"For example, if you are in the 714 code, and you wish to SCB to\r\n"
-"consider all prefixes in the 310 area code local, you would enter 1310\r\n"
-"in the list.";
-
-			total_prfxs=0;
-			if((prfx=(char **)MALLOC(sizeof(char *)*MAX_PRFX))==NULL) {
-				cputs("memory allocation error\r\n");
-				bail(1); }
-			for(i=0;i<MAX_PRFX;i++)
-				if((prfx[i]=(char *)MALLOC(LEN_PRFX+1))==NULL) {
-					cputs("memory allocation error\r\n");
-					bail(1); }
-
-			if(fexist("ALLOWED.DAT")) {
-				if((file=open("ALLOWED.DAT",
-					O_RDONLY|O_BINARY|O_DENYNONE))==-1) {
-					textattr(LIGHTGRAY);
-					clrscr();
-					lprintf("Error opening ALLOWED.DAT\r\n");
-					bail(1); }
-				if((stream=fdopen(file,"rb"))==NULL) {
-					textattr(LIGHTGRAY);
-					clrscr();
-					lprintf("Error fdopen ALLOWED.DAT\r\n");
-					bail(1); }
-				while(!feof(stream) && total_prfxs<MAX_PRFX) {
-					if(!fgets(str,81,stream))
-						break;
-					truncsp(str);
-					sprintf(prfx[total_prfxs++],"%.*s",LEN_PRFX,str); }
-				fclose(stream); }
-			i=b=0;
-            while(1) {
-				for(j=0;j<total_prfxs;j++)
-					strcpy(opt[j],prfx[j]);
-                opt[j][0]=NULL;
-				j=WIN_ACT|WIN_SAV;
-				if(total_prfxs)
-                    j|=WIN_DEL;
-				if(total_prfxs<MAX_PRFX)
-					j|=WIN_INS|WIN_INSACT|WIN_XTR;
-				i=ulist(j,0,0,30,&i,&b,"Allowed Prefix List",opt);
-                if((i&0xf000)==MSK_DEL) {
-                    i&=0xfff;
-					total_prfxs--;
-					for(j=i;j<total_prfxs;j++)
-						strcpy(prfx[j],prfx[j+1]);
-					strcpy(prfx[j+1],"");
-                    continue; }
-                if((i&0xf000)==MSK_INS) {
-                    i&=0xfff;
-					if(uinput(WIN_MID|WIN_SAV,0,0,"Enter Prefix",str,LEN_PRFX
-                        ,K_NUMBER)<1)
-                        continue;
-					++total_prfxs;
-					if(total_prfxs)
-						for(j=total_prfxs;j>i;j--)
-							strcpy(prfx[j],prfx[j-1]);
-					strcpy(prfx[i],str);
-                    continue; }
-                if(i==-1) {
-                    if((file=open("ALLOWED.DAT",
-						O_WRONLY|O_BINARY|O_CREAT|O_TRUNC|O_DENYALL,
-						S_IREAD|S_IWRITE))==-1) {
-						textattr(LIGHTGRAY);
-						clrscr();
-                        lprintf("Error opening ALLOWED.DAT\r\n");
-                        bail(1); }
-                    if((stream=fdopen(file,"wb"))==NULL) {
-						textattr(LIGHTGRAY);
-						clrscr();
-                        lprintf("Error fdopen ALLOWED.DAT\r\n");
-                        bail(1); }
-					for(i=0;i<total_prfxs;i++) {
-						fprintf(stream,"%s\r\n",prfx[i]); }
-                    fclose(stream);
-					for(i=0;i<MAX_PRFX;i++)
-						FREE(prfx[i]);
-					FREE(prfx);
-                    break; }
-                /* else CR was hit */
-                uinput(WIN_MID|WIN_SAV,0,0,"Edit Prefix"
-					,prfx[i],LEN_PRFX,K_EDIT|K_NUMBER); }
-            break;
-		case 3:
-helpbuf=
-" Long Distance Prefix List \r\n\r\n"
-"Any phone numbers entered whose prefixes matches a number contained\r\n"
-"in this list, will be considered a long distance number.  For example,\r\n"
-"in the same area code, the phone number 234-5678 is long distance to you,\r\n"
-"so placing 234 in this list will make SCB view calls to that prefix as\r\n"
-"long distance.\r\n"
-"\r\n"
-"If the Long Distance if not an Allowed Prefix toggle option is set to\r\n"
-"Yes, then this list is not used.\r\n";
-
-			total_prfxs=0;
-			if((prfx=(char **)MALLOC(sizeof(char *)*MAX_PRFX))==NULL) {
-				cputs("memory allocation error\r\n");
-				bail(1); }
-			for(i=0;i<MAX_PRFX;i++)
-				if((prfx[i]=(char *)MALLOC(LEN_PRFX+1))==NULL) {
-					cputs("memory allocation error\r\n");
-					bail(1); }
-
-			if(fexist("LDPREFIX.DAT")) {
-				if((file=open("LDPREFIX.DAT",
-					O_RDONLY|O_BINARY|O_DENYNONE))==-1) {
-					textattr(LIGHTGRAY);
-					clrscr();
-					lprintf("Error opening LDPREFIX.DAT\r\n");
-					bail(1); }
-				if((stream=fdopen(file,"rb"))==NULL) {
-					textattr(LIGHTGRAY);
-					clrscr();
-					lprintf("Error fdopen LDPREFIX.DAT\r\n");
-					bail(1); }
-				while(!feof(stream) && total_prfxs<MAX_PRFX) {
-					if(!fgets(str,81,stream))
-						break;
-					truncsp(str);
-					sprintf(prfx[total_prfxs++],"%.*s",LEN_PRFX,str); }
-				fclose(stream); }
-			i=b=0;
-            while(1) {
-                for(j=0;j<total_prfxs;j++)
-                    strcpy(opt[j],prfx[j]);
-                opt[j][0]=NULL;
-				j=WIN_ACT|WIN_SAV;
-                if(total_prfxs)
-                    j|=WIN_DEL;
-                if(total_prfxs<MAX_PRFX)
-                    j|=WIN_INS|WIN_INSACT|WIN_XTR;
-				i=ulist(j,0,0,30,&i,&b,"Long Distance Prefix List",opt);
-                if((i&0xf000)==MSK_DEL) {
-                    i&=0xfff;
-                    total_prfxs--;
-                    for(j=i;j<total_prfxs;j++)
-                        strcpy(prfx[j],prfx[j+1]);
-                    strcpy(prfx[j+1],"");
-                    continue; }
-                if((i&0xf000)==MSK_INS) {
-                    i&=0xfff;
-                    if(uinput(WIN_MID|WIN_SAV,0,0,"Enter Prefix",str,LEN_PRFX
-                        ,K_NUMBER)<1)
-                        continue;
-                    ++total_prfxs;
-                    if(total_prfxs)
-                        for(j=total_prfxs;j>i;j--)
-                            strcpy(prfx[j],prfx[j-1]);
-                    strcpy(prfx[i],str);
-                    continue; }
-                if(i==-1) {
-					if((file=open("LDPREFIX.DAT",
-						O_WRONLY|O_BINARY|O_CREAT|O_TRUNC|O_DENYALL,
-						S_IREAD|S_IWRITE))==-1) {
-						textattr(LIGHTGRAY);
-						clrscr();
-						lprintf("Error opening LDPREFIX.DAT\r\n");
-                        bail(1); }
-                    if((stream=fdopen(file,"wb"))==NULL) {
-						textattr(LIGHTGRAY);
-						clrscr();
-						lprintf("Error fdopen LDPREFIX.DAT\r\n");
-                        bail(1); }
-                    for(i=0;i<total_prfxs;i++) {
-                        fprintf(stream,"%s\r\n",prfx[i]); }
-                    fclose(stream);
-                    for(i=0;i<MAX_PRFX;i++)
-                        FREE(prfx[i]);
-                    FREE(prfx);
-                    break; }
-                /* else CR was hit */
-                uinput(WIN_MID|WIN_SAV,0,0,"Edit Prefix"
-                    ,prfx[i],LEN_PRFX,K_EDIT|K_NUMBER); }
-            break;
-		case 4:
-helpbuf=
-" Long Distance Calling Times \r\n\r\n"
-"You are being prompted to specify the beginning and ending times to\r\n"
-"allow long distance verification calls (in military 24-hour format).\r\n"
-"If you wish to allow long distance calls continuously, set both times\r\n"
-"to 00:00.\r\n"
-"\r\n"
-"To disable long distance calls entirely, set the Allow Long Distance\r\n"
-"toggle options to No.";
-
-            j=0;
-            while(1) {
-                k=0;
-				sprintf(opt[k++],"Sunday     From %02d:%02d to %02d:%02d"
-					,ldstart[0]/60,ldstart[0]%60
-					,ldend[0]/60,ldend[0]%60);
-				sprintf(opt[k++],"Monday     From %02d:%02d to %02d:%02d"
-					,ldstart[1]/60,ldstart[1]%60
-					,ldend[1]/60,ldend[1]%60);
-				sprintf(opt[k++],"Tuesday    From %02d:%02d to %02d:%02d"
-					,ldstart[2]/60,ldstart[2]%60
-					,ldend[2]/60,ldend[2]%60);
-				sprintf(opt[k++],"Wednesday  From %02d:%02d to %02d:%02d"
-					,ldstart[3]/60,ldstart[3]%60
-					,ldend[3]/60,ldend[3]%60);
-				sprintf(opt[k++],"Thursday   From %02d:%02d to %02d:%02d"
-					,ldstart[4]/60,ldstart[4]%60
-					,ldend[4]/60,ldend[4]%60);
-				sprintf(opt[k++],"Friday     From %02d:%02d to %02d:%02d"
-					,ldstart[5]/60,ldstart[5]%60
-					,ldend[5]/60,ldend[5]%60);
-				sprintf(opt[k++],"Saturday   From %02d:%02d to %02d:%02d"
-					,ldstart[6]/60,ldstart[6]%60
-					,ldend[6]/60,ldend[6]%60);
-                opt[k][0]=NULL;
-
-				j=ulist(WIN_ACT|WIN_SAV,0,0,0,&j,0
-					,"Long Distance Calling Times",opt);
-                if(j==-1)
-                    break;
-				sprintf(str,"%02d:%02d",ldstart[j]/60,ldstart[j]%60);
-				if(uinput(WIN_MID|WIN_SAV,0,0,"Long Distance Start "
-					"Time",str,5,K_EDIT|K_UPPER)) {
-					ldstart[j]=atoi(str)*60;
-					p=strchr(str,':');
-					if(p)
-						ldstart[j]+=atoi(p+1); }
-				sprintf(str,"%02d:%02d",ldend[j]/60,ldend[j]%60);
-				if(uinput(WIN_MID|WIN_SAV,0,0,"Long Distance End Time",
-					str,5,K_EDIT|K_UPPER)) {
-					ldend[j]=atoi(str)*60;
-					p=strchr(str,':');
-					if(p)
-						ldend[j]+=atoi(p+1); } }
-			break;
-		case 5:
-helpbuf=
-" Phone Can \r\n\r\n"
-"This is the complete path (drive, directory, and filename) where a\r\n"
-"trashcan file of phone numbers will be kept. Any numbers inside of this\r\n"
-"trashcan will not be accepted for callback verification by SCB.";
-			uinput(WIN_MID,0,0,"Phone Can",canfile
-				,30,K_EDIT|K_UPPER);
-            break;
-		case 6:
-helpbuf=
-" Validated Phone List \r\n\r\n"
-"This is the complete path (drive, directory, and filename) where SCB\r\n"
-"will write a list of numbers that have been verified.\r\n"
-"\r\n"
-"Setting this option to the same file as Phone Can will keep users from\r\n"
-"being validated with an already validated phone number.";
-			uinput(WIN_MID|WIN_BOT,0,0,"Phone List",addfile
-				,30,K_EDIT|K_UPPER);
-			break;
-		case 7:
-helpbuf=
-" Callback Attempts \r\n\r\n"
-"This is the number of times SCB will attempt to dial out to a phone\r\n"
-"number.";
-			uinput(WIN_MID|WIN_BOT,0,0,"Callback Attempts",callout_attempts
-				,2,K_EDIT|K_NUMBER);
-            break;
-		case 8:
-helpbuf=
-" Minimum Phone Number Length \r\n\r\n"
-"This is the minimum number of digits SCB will allow for a phone number.";
-			sprintf(str,"%u",min_phone_len);
-			uinput(WIN_MID|WIN_BOT,0,0,"Minimum Phone Length",str
-				,2,K_EDIT|K_NUMBER);
-			min_phone_len=atoi(str);
-            break;
-		case 9:
-helpbuf=
-" Maximum Phone Number Length \r\n\r\n"
-"This is the maximum number of digits SCB will allow for a phone number.";
-			sprintf(str,"%u",max_phone_len);
-			uinput(WIN_MID|WIN_BOT,0,0,"Maximum Phone Length",str
-				,2,K_EDIT|K_NUMBER);
-			max_phone_len=atoi(str);
-            break;
-		case 10:
-helpbuf=
-" Wait Before Dialing \r\n\r\n"
-"When the BBS hangs up prior to calling a user, this is the amount of\r\n"
-"time (in seconds) that the modem will remain hung up before dialing.\r\n"
-"This is used to insure that the user has completely disconnected.\r\n"
-"The default setting here is 30 seconds, maximum is 90 seconds.";
-			sprintf(str,"%u",hangup_time);
-			uinput(WIN_MID|WIN_BOT,0,0,"Wait Before Dialing (in seconds)",str
-				,3,K_EDIT|K_NUMBER);
-			hangup_time=atoi(str);
-			if(hangup_time>90)
-				hangup_time=90;
-			break;
-		case 11:
-helpbuf=
-" BBS Area Code \r\n\r\n"
-"Enter the area code for YOUR BBS here.  A user enters a phone number\r\n"
-"with this area code, SCB will strip off the area code before attempting\r\n"
-"to call the user back (setting this to 0 disables it).";
-            uinput(WIN_MID|WIN_BOT,0,0,"BBS Area Code",bbs_ac
-                ,3,K_EDIT|K_NUMBER);
-            break;
-		case 12:
-helpbuf=
-" Send Message to Sysop \r\n\r\n"
-"If you wish for SCB to send a message to a Sysop when a user has been\r\n"
-"verified, set this to the number of the user who is to receive the\r\n"
-"messages, or set it to 0 to disable this function.";
-			uinput(WIN_MID|WIN_BOT,0,0,"Send Message to Sysop - User #",sysop
-				,4,K_EDIT|K_NUMBER);
-            break;
-
-		case -1:
-helpbuf=
-" Save Configuration File \r\n\r\n"
-"Select Yes to save the config file, No to quit without saving,\r\n"
-"or hit  ESC  to go back to the menu.\r\n\r\n";
-			i=0;
-			strcpy(opt[0],"Yes");
-			strcpy(opt[1],"No");
-			opt[2][0]=0;
-			i=ulist(WIN_MID,0,0,0,&i,0,"Save Config File",opt);
-			if(i==-1) break;
-			if(i) bail(0);
-			if((file=open("SCB.CFG"
-				,O_WRONLY|O_BINARY|O_CREAT|O_DENYALL|O_TRUNC))==-1) {
-				textattr(LIGHTGRAY);
-				clrscr();
-				lprintf("Error opening SCB.CFG\r\n");
-				bail(1); }
-			if((stream=fdopen(file,"wb"))==NULL) {
-				textattr(LIGHTGRAY);
-				clrscr();
-				lprintf("Error fdopen SCB.CFG\r\n");
-				bail(1); }
-			str[0]=0;
-			fprintf(stream,"%s\r\n",callout_attempts);
-			if(options&ALWAYS_VALIDATE) strcat(str,"Y"); else strcat(str,"N");
-			if(options&MODIFY_USER_NOTE) strcat(str,"Y"); else strcat(str,"N");
-			if(options&START_WITH_0) strcat(str,"Y"); else strcat(str,"N");
-			if(options&START_WITH_1) strcat(str,"Y"); else strcat(str,"N");
-			if(options&STAY_CONNECTED) strcat(str,"Y"); else strcat(str,"N");
-			if(options&SC_LOCAL_ONLY) strcat(str,"Y"); else strcat(str,"N");
-			if(options&US_PHONE_FORMAT) strcat(str,"Y"); else strcat(str,"N");
-			if(options&ALLOWED_ONLY) strcat(str,"Y"); else strcat(str,"N");
-			if(options&SAME_AREA_LD) strcat(str,"Y"); else strcat(str,"N");
-			fprintf(stream,"%s\r\n",str);
-			fprintf(stream,"%s\r\n",canfile);
-			fprintf(stream,"%s\r\n",addfile);
-			fprintf(stream,"%s\r\n",credits);
-			fprintf(stream,"%s\r\n",sysop);
-			fprintf(stream,"%s\r\n",level);
-			fprintf(stream,"%s\r\n",flags1);
-			fprintf(stream,"%s\r\n",flags2);
-			fprintf(stream,"%s\r\n",exempt);
-			fprintf(stream,"%s\r\n",restrict);
-			fprintf(stream,"%s\r\n",expiration);
-			fprintf(stream,"%s\r\n",minutes);
-			fprintf(stream,"%s\r\n",flags3);
-			fprintf(stream,"%s\r\n",flags4);
-			for(i=0;i<7;i++) {
-				fprintf(stream,"%u\r\n",ldstart[i]);
-				fprintf(stream,"%u\r\n",ldend[i]); }
-			fprintf(stream,"%u\r\n",min_phone_len);
-			fprintf(stream,"%u\r\n",max_phone_len);
-			fprintf(stream,"%s\r\n",bbs_ac);
-			fprintf(stream,"%u\r\n",hangup_time);
-			fprintf(stream,"%s\r\n","");    // regnum
-			fclose(stream);
-			bail(0);
-	}
-}
-}
-/****************************************************************************/
-/* Checks the disk drive for the existance of a file. Returns 1 if it 		*/
-/* exists, 0 if it doesn't.													*/
-/* Called from upload														*/
-/****************************************************************************/
-char fexist(char *filespec)
-{
-	struct ffblk f;
-
-if(findfirst(filespec,&f,0)==NULL)
-	return(1);
-return(0);
-}
diff --git a/src/sbbs2/scb/scbcfg.mak b/src/sbbs2/scb/scbcfg.mak
deleted file mode 100644
index 00d9ddf9fa..0000000000
--- a/src/sbbs2/scb/scbcfg.mak
+++ /dev/null
@@ -1,35 +0,0 @@
-
-# Macros
-CC	= bcc
-LD	= tlink
-SDK	= ..\sdk
-UIFC	= ..\..\uifc
-MSWAIT	= ..\..\mswait
-INCLUDE = \bc45\include;$(UIFC)
-LIB	= \bc45\lib
-MODEL	= l
-CFLAGS  = -d -C -w-pro -m$(MODEL) -I$(INCLUDE)
-LDFLAGS = /n /c
-OBJS	= $(MSWAIT)\dos\mswait$(MODEL).obj uifc.obj
-HEADERS = $(UIFC)\uifc.h scb.h
-
-# Implicit C Compile Rule
-.c.obj:
-    	@echo Compiling $*.c to $*.obj ...
-	$(CC) $(CFLAGS) -c $*.c
-
-# Main EXE Link Rule
-scbcfg.exe: $(OBJS) scbcfg.obj
-    	@echo Linking $< ...
-	$(LD) $(LDFLAGS) @&&!
-$(LIB)\c0$(MODEL) $(OBJS) scbcfg.obj
-!, $*, $*, $(LIB)\c$(MODEL).lib $(LIB)\math$(MODEL).lib $(LIB)\emu.lib
-
-
-# All .obj modules
-scbcfg.obj: $(HEADERS)
-
-uifc.obj: $(UIFC)\uifc.h $(UIFC)\uifc.c
-	@echo Compiling $(UIFC)\$*.c to $*.obj ...
-	$(CC) $(CFLAGS) -DSCFG -c $(UIFC)\$*.c
-
diff --git a/src/sbbs2/scfg/makeall.bat b/src/sbbs2/scfg/makeall.bat
deleted file mode 100755
index ccca323002..0000000000
--- a/src/sbbs2/scfg/makeall.bat
+++ /dev/null
@@ -1,3 +0,0 @@
-@echo off
-maker
-maker -DDOS32
diff --git a/src/sbbs2/scfg/makefile b/src/sbbs2/scfg/makefile
deleted file mode 100644
index 0f6343a16a..0000000000
--- a/src/sbbs2/scfg/makefile
+++ /dev/null
@@ -1,108 +0,0 @@
-##############################################
-# Makefile for Synchronet BBS Config Program #
-# For use with Borland C++ for DOS or OS/2   #
-##############################################
-
-# Macros
-
-INCLUDE = \bc45\include;..;..\..\uifc;..\..\spawno;..\smb;..\rio
-LIB	= \bc45\lib
-MAIN	= $(OS)\scfg.exe
-
-!if $d(DOS32)
-OS	= DOS32
-CC	= \bc45\bin\bcc32
-LD	= \bc45\bin\tlink32
-CFLAGS	= -w-pro -d -C -WX -I$(INCLUDE) -DSCFG
-LFLAGS	= -Tpe -ax -n -c
-MAIN	= $(OS)\scfg32.exe
-!elif $d(__OS2__)
-OS	= OS2
-CC	= c:\bcos2\bin\bcc
-LD	= c:\bcos2\bin\tlink
-CFLAGS	= -w-pro -d -C -I$(INCLUDE) -DSCFG
-LFLAGS	= -Toe -ap -c
-INCLUDE = c:\bcos2\include;..;..\..\uifc;..\..\spawno;..\smb;..\rio
-LIB	= c:\bcos2\lib
-MAIN	= $(OS)\scfg4os2.exe
-!else
-OS      = DOS
-CC	= \bc45\bin\bcc
-LD	= \bc45\bin\tlink
-CFLAGS	= -w-pro -d -C -Y -ml -I$(INCLUDE) -DSCFG
-LFLAGS	= -n -c
-OBJS	= ..\..\mswait\dos\mswait.obj
-!endif
-
-OBJS	= $(OBJS) $(OS)\scfgvars.obj
-OVLOBJS = $(OS)\scfg.obj $(OS)\scfgnode.obj\
-        $(OS)\scfgxfr1.obj $(OS)\scfgxfr2.obj\
-	$(OS)\scfgnet.obj $(OS)\scfgxtrn.obj $(OS)\scfgsys.obj\
-	$(OS)\scfgmsg.obj $(OS)\scfgsub.obj\
-        $(OS)\scfglib1.obj $(OS)\scfglib2.obj $(OS)\scfgchat.obj\
-        $(OS)\uifc.obj $(OS)\scfgmdm.obj $(OS)\smblib.obj\
-        $(OS)\wrcnf1.obj $(OS)\wrcnf2.obj
-HEADERS = scfg.h ..\..\uifc\uifc.h ..\sbbsdefs.h ..\gen_defs.h ..\scfgvars.c
-
-# Implicit C Compile Rule
-{.}.c.obj:
-	@echo Compiling (I) $< to $@ ...
-        $(CC) $(CFLAGS) -n$(OS) -c $<
-
-# Main EXE Link Rule
-$(MAIN): $(OBJS) $(OVLOBJS)
-    	@echo Linking $< ...
-!ifdef __OS2__
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c02.obj $(OBJS) $(OVLOBJS)
-+, $*, $*, $(LIB)\os2.lib $(LIB)\c2.lib
-!elif $d(DOS32)
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c0X32.obj $(OBJS) $(OVLOBJS)
-+, $*, $*,$(LIB)\DPMI32 $(LIB)\CW32
-!else
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c0l.obj $(OBJS) /o $(OVLOBJS)
-+, $*, $*, $(LIB)\overlay.lib $(LIB)\cl.lib $(LIB)\mathl.lib\
-	$(LIB)\emu.lib
-!endif
-# Global Variables
-$(OS)\scfgvars.obj: ..\scfgvars.c ..\sbbsdefs.h
-	@echo Compiling ..\$&.c to $< ...
-	$(CC) $(CFLAGS) -c -n$(OS) ..\$&.c
-
-# Shared Functions
-$(OS)\scfglib1.obj: ..\sbbs.h ..\sbbsdefs.h ..\scfglib.h ..\scfglib1.c \
-		    ..\scfgvars.c
-	@echo Compiling ..\$&.c to $< ...
-	$(CC) $(CFLAGS) -c -n$(OS) ..\$&.c
-
-# Shared Functions
-$(OS)\scfglib2.obj: ..\sbbs.h ..\sbbsdefs.h ..\scfglib.h ..\scfglib2.c \
-		    ..\scfgvars.c
-	@echo Compiling ..\$&.c to $< ...
-	$(CC) $(CFLAGS) -c -n$(OS) ..\$&.c
-
-# Local Menu Routines
-$(OS)\uifc.obj: ..\..\uifc\uifc.c ..\..\uifc\uifc.h
-	@echo Compiling ..\..\uifc\$&.c to $< ...
-	$(CC) $(CFLAGS) -c -n$(OS) ..\..\uifc\$&.c
-
-# SMBLIB Functions 
-$(OS)\smblib.obj: ..\smb\smblib.c ..\smb\smblib.h ..\smb\smbdefs.h
-	@echo Compiling ..\smb\$&.c to $< ...
-	$(CC) $(CFLAGS) -c -n$(OS) ..\smb\$&.c
-
-$(OS)\scfg.obj:       $(HEADERS)
-$(OS)\scfgnode.obj:   $(HEADERS)
-$(OS)\scfgchat.obj:   $(HEADERS)
-$(OS)\scfgmsg.obj:    $(HEADERS)
-$(OS)\scfgsub.obj:    $(HEADERS)
-$(OS)\scfgnet.obj:    $(HEADERS)
-$(OS)\scfgsys.obj:    $(HEADERS)
-$(OS)\scfgxtrn.obj:   $(HEADERS)
-$(OS)\scfgxfr1.obj:   $(HEADERS)
-$(OS)\scfgxfr2.obj:   $(HEADERS)
-$(OS)\scfgmdm.obj:    $(HEADERS)
-$(OS)\wrcnf1.obj:     $(HEADERS)
-$(OS)\wrcnf2.obj:     $(HEADERS)
diff --git a/src/sbbs2/scfg/makehelp.c b/src/sbbs2/scfg/makehelp.c
deleted file mode 100644
index 20a64ad8af..0000000000
--- a/src/sbbs2/scfg/makehelp.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/* MAKEHELP.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* Makes SCFG.HLP for Synchronet configuration program */
-
-#include <stdio.h>
-#include <alloc.h>
-#include <string.h>
-#include <io.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-
-void main(void)
-{
-	char *files[]={ "SCFG.C"
-				,"SCFGSYS.C"
-				,"SCFGMSG.C"
-				,"SCFGSUB.C"
-				,"SCFGNODE.C"
-				,"SCFGCHAT.C"
-				,"SCFGXFR1.C"
-				,"SCFGXFR2.C"
-				,"SCFGNET.C"
-				,"SCFGXTRN.C"
-				,NULL };
-	char str[256],tmp[256];
-	int i,j,k,line,ixb;
-	long l;
-	FILE *stream,*out;
-
-if((out=fopen("SCFGHELP.DAT","wb"))==NULL) {
-	printf("error opening SCFGHELP.DAT\r\n");
-	return; }
-
-if((ixb=open("SCFGHELP.IXB",O_WRONLY|O_CREAT|O_BINARY,S_IWRITE|S_IREAD))==-1) {
-	printf("error opening SCFGHELP.IXB\r\n");
-	return; }
-
-for(i=0;files[i];i++) {
-	if((stream=fopen(files[i],"rb"))==NULL) {
-		printf("error opening %s\r\n",files[i]);
-		return; }
-	printf("\r\n%s ",files[i]);
-	line=0;
-	while(!feof(stream)) {
-		if(!fgets(str,128,stream))
-			break;
-		line++;
-		if(strstr(str,"SETHELP(WHERE);")) {
-			l=ftell(out);
-			write(ixb,files[i],12);
-			write(ixb,&line,2);
-			write(ixb,&l,4);
-			fgets(str,128,stream);	 /* skip start comment */
-			line++;
-			while(!feof(stream)) {
-				if(!fgets(str,128,stream))
-					break;
-				if(strchr(str,9)) { /* Tab expansion */
-					strcpy(tmp,str);
-					k=strlen(tmp);
-					for(j=l=0;j<k;j++) {
-						if(tmp[j]==9) {
-							str[l++]=32;
-							while(l%4)
-								str[l++]=32; }
-						else
-							str[l++]=tmp[j]; }
-					str[l]=0; }
-				line++;
-				if(strstr(str,"*/"))    /* end comment */
-					break;
-				fputs(str,out); }
-			fputc(0,out); } }
-	fclose(stream); }
-fclose(out);
-printf("\n");
-}
diff --git a/src/sbbs2/scfg/makehelp.exe b/src/sbbs2/scfg/makehelp.exe
deleted file mode 100755
index 7e6a104c4311ee082949d9a5e64ce08aadf21cf2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 10178
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
WQ{Y*a7aSD3`1XS#1Jeo)1_l6;@0Sn&

diff --git a/src/sbbs2/scfg/scfg.c b/src/sbbs2/scfg/scfg.c
deleted file mode 100644
index 3804fbe01d..0000000000
--- a/src/sbbs2/scfg/scfg.c
+++ /dev/null
@@ -1,1967 +0,0 @@
-#line 2 "SCFG.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/****************************************************************************/
-/* Synchronet configuration utility 										*/
-/****************************************************************************/
-
-#include "scfg.h"
-
-#ifdef __FLAT__
-	unsigned _stklen=64000;
-#else
-	unsigned _stklen=32000;
-#endif
-
-extern char *wday[];	/* names of weekdays (3 char) */
-extern char uifc_status;
-
-/********************/
-/* Global Variables */
-/********************/
-
-long freedosmem;
-int  no_dirchk=0,no_msghdr=0,forcesave=0,all_msghdr=0;
-char **opt;
-char tmp[256];
-char *nulstr="";
-char **mdm_type;
-char **mdm_file;
-int  mdm_types;
-int  backup_level=3;
-
-read_cfg_text_t txt={
-	"\7\r\nError opening %s for read.\r\n",
-	"","",
-	"\7\r\nError allocating %u bytes of memory\r\n",
-	"\7\r\nERROR: Offset %lu in %s\r\n\r\n" };
-
-char *invalid_code=
-"Invalid Internal Code:\n\n"
-"Internal codes can be up to eight characters in length and can only\n"
-"contain valid DOS filename characters. The code you have entered\n"
-"contains one or more invalid characters.";
-
-char *num_flags=
-"Number of Flags Needed:\n\n"
-"If you want users to be required to have all the flags, select All.\n"
-"\n"
-"If you want users to be required to have any one or more of the flags,\n"
-"select One (Allowed).";
-
-
-void allocfail(uint size)
-{
-cprintf("\7Error allocating %u bytes of memory.\r\n",size);
-bail(1);
-}
-
-time_t checktime(void)
-{
-	struct tm tm;
-
-memset(&tm,0,sizeof(tm));
-tm.tm_year=94;
-tm.tm_mday=1;
-return(mktime(&tm)^0x2D24BD00L);
-}
-
-int main(int argc, char **argv)
-{
-	char	**mopt,*p;
-	int 	i,j,main_dflt=0,no_emsovl=0,chat_dflt=0;
-	uint	u;
-	long	l;
-	char 	str[129];
-	FILE	*instream;
-#ifndef __FLAT__
-	union	REGS reg;
-#endif
-
-printf("\r\nSynchronet Configuration Util (%s)  v%s%c  Developed 1995-1997 "
-	"Rob Swindell\r\n",
-#ifdef __OS2__
-	"OS/2"
-#elif defined(__FLAT__)
-	"DOS/Win32"
-#else
-	"DOS"
-#endif
-	,VERSION,REVISION);
-
-if(argc>1)
-	strcpy(ctrl_dir,argv[1]);
-else
-	getcwd(ctrl_dir,MAXDIR);
-if(argc>2) {
-	for(i=2;i<argc;i++) {
-		if(!stricmp(argv[i],"/M"))      /* Show free mem */
-			show_free_mem=!show_free_mem;
-		else if(!stricmp(argv[i],"/N")) /* No EMS */
-			no_emsovl=!no_emsovl;
-#if !defined(__FLAT__)
-		else if(!strnicmp(argv[i],"/T",2)) /* Windows/OS2 time slice API */
-			mswtyp=atoi(argv[i]+2);
-#endif
-		else if(!strnicmp(argv[i],"/C",2)) /* Force color mode */
-			uifc_status|=UIFC_COLOR;
-		else if(!strnicmp(argv[i],"/B",2)) /* Backup level */
-			backup_level=atoi(argv[i]+2);
-		else if(!stricmp(argv[i],"/S")) /* No dir checking */
-			no_dirchk=!no_dirchk;
-		else if(!stricmp(argv[i],"/H")) /* No msg header updating */
-			no_msghdr=!no_msghdr;
-		else if(!stricmp(argv[i],"/U")) /* Update all message headers */
-			all_msghdr=!all_msghdr;
-		else if(!stricmp(argv[i],"/F")) /* Force save of config files */
-			forcesave=!forcesave;
-		else {
-			printf("\r\nusage: scfg <ctrl_dir> [/c] [/m] [/n] [/s] [/u] [/h] "
-				"[/t#] [/b#]\r\n"
-				"\r\n"
-				"/c  =  force color mode\r\n"
-				"/m  =  show free memory\r\n"
-				"/n  =  don't use EMS\r\n"
-				"/s  =  don't check directories\r\n"
-				"/f  =  force save of config files\r\n"
-				"/u  =  update all message base status headers\r\n"
-				"/h  =  don't update message base status headers\r\n"
-				"/t# =  set supported time slice APIs to #\r\n"
-				"/b# =  set automatic back-up level (default=3 max=10)\r\n"
-				);
-			exit(0); } } }
-
-if(backup_level>10) backup_level=10;
-
-if(ctrl_dir[strlen(ctrl_dir)-1]!='\\' && ctrl_dir[strlen(ctrl_dir)-1]!=':')
-        strcat(ctrl_dir,"\\");
-
-init_mdms();
-
-uifcini();
-
-#if !defined(__FLAT__)
-if(!no_emsovl) {
-	cputs("\r\nEMS: ");
-	if((i=open("EMMXXXX0",O_RDONLY))==-1)
-		cputs("not installed.");
-	else {
-		close(i);
-		reg.h.ah=0x46;			/* Get EMS version */
-		int86(0x67,&reg,&reg);
-		if(reg.h.ah)
-			cputs("\7error getting version.");
-		else {
-			cprintf("Version %u.%u ",(reg.h.al&0xf0)>>4,reg.h.al&0xf);
-			if(_OvrInitEms(0,0,23))    /* use up to 360K */
-				cprintf("allocation failed."); } }
-	cputs("\r\n"); }
-#endif
-
-#ifdef __FLAT__
-if(putenv("TZ=UCT0"))
-	printf("putenv() failed!\n");
-tzset();
-#endif
-
-if((l=checktime())!=0) {   /* Check binary time */
-	printf("Time problem (%08lx)\n",l);
-    exit(1); }
-
-if((opt=(char **)MALLOC(sizeof(char *)*(MAX_OPTS+1)))==NULL)
-	allocfail(sizeof(char *)*(MAX_OPTS+1));
-for(i=0;i<(MAX_OPTS+1);i++)
-	if((opt[i]=(char *)MALLOC(MAX_OPLN))==NULL)
-		allocfail(MAX_OPLN);
-
-if((mopt=(char **)MALLOC(sizeof(char *)*14))==NULL)
-	allocfail(sizeof(char *)*14);
-for(i=0;i<14;i++)
-	if((mopt[i]=(char *)MALLOC(64))==NULL)
-		allocfail(64);
-
-txt.reading=nulstr;
-txt.readit=nulstr;
-
-strcpy(str,argv[0]);
-p=strrchr(str,'\\');
-if(!p) {
-	sprintf(helpdatfile,"..\\EXEC\\SCFGHELP.DAT");
-	sprintf(helpixbfile,"..\\EXEC\\SCFGHELP.IXB"); }
-else {
-	*p=0;
-	sprintf(helpdatfile,"%s\\SCFGHELP.DAT",str);
-	sprintf(helpixbfile,"%s\\SCFGHELP.IXB",str); }
-
-sprintf(str,"Synchronet Configuration for %s v%s",
-#if defined(__OS2__)
-	"OS/2"
-#elif defined(__FLAT__)
-	"DOS/Win32"
-#else
-	"DOS"
-#endif
-	,VERSION);
-if(uscrn(str)) {
-	cprintf("USCRN failed!\r\n");
-	bail(1); }
-i=0;
-strcpy(mopt[i++],"Nodes");
-strcpy(mopt[i++],"System");
-strcpy(mopt[i++],"Networks");
-strcpy(mopt[i++],"File Areas");
-strcpy(mopt[i++],"File Options");
-strcpy(mopt[i++],"Chat Features");
-strcpy(mopt[i++],"Message Areas");
-strcpy(mopt[i++],"Message Options");
-strcpy(mopt[i++],"Command Shells");
-strcpy(mopt[i++],"External Programs");
-strcpy(mopt[i++],"Text File Sections");
-mopt[i][0]=0;
-#ifndef __FLAT__
-freedosmem=farcoreleft();
-#endif
-while(1) {
-#if 0
-	if(freedosmem!=farcoreleft()) {
-		errormsg(WHERE,ERR_CHK,"lost memory",freedosmem-farcoreleft());
-		freedosmem=farcoreleft(); }
-#endif
-	SETHELP(WHERE);
-/*
-Main Configuration Menu:
-
-This is the main menu of the Synchronet configuration utility (SCFG).
-From this menu, you have the following choices:
-
-	Nodes				  : Add, delete, or configure nodes
-	System				  : System-wide configuration options
-	Networks			  : Message networking configuration
-	File Areas			  : File area configuration
-	File Options		  : File area options
-	Chat Features		  : Chat actions, sections, pagers, and gurus
-	Message Areas		  : Message area configuration
-	Message Options 	  : Message and email options
-	External Programs	  : Events, editors, and online programs
-	Text File Sections	  : General text file area
-
-Use the arrow keys and  ENTER  to select an option, or  ESC  to exit.
-*/
-	switch(ulist(WIN_ORG|WIN_MID|WIN_ESC|WIN_ACT,0,0,30,&main_dflt,0
-		,"Configure",mopt)) {
-		case 0:
-			upop("Reading MAIN.CNF...");
-			read_main_cfg(txt);
-			upop(0);
-			node_menu();
-			free_main_cfg();
-			break;
-		case 1:
-			upop("Reading MAIN.CNF...");
-			read_main_cfg(txt);
-			upop("Reading XTRN.CNF...");
-			read_xtrn_cfg(txt);
-			upop(0);
-			sys_cfg();
-			free_xtrn_cfg();
-			free_main_cfg();
-			break;
-		case 2:
-			upop("Reading MAIN.CNF...");
-            read_main_cfg(txt);
-			upop("Reading MSGS.CNF...");
-			read_msgs_cfg(txt);
-			upop(0);
-			net_cfg();
-			free_msgs_cfg();
-			free_main_cfg();
-			break;
-		case 3:
-			upop("Reading MAIN.CNF...");
-            read_main_cfg(txt);
-            upop("Reading FILE.CNF...");
-            read_file_cfg(txt);
-			upop(0);
-            xfer_cfg();
-            free_file_cfg();
-			free_main_cfg();
-            break;
-		case 4:
-			upop("Reading MAIN.CNF...");
-            read_main_cfg(txt);
-            upop("Reading FILE.CNF...");
-            read_file_cfg(txt);
-			upop(0);
-			xfer_opts();
-            free_file_cfg();
-			free_main_cfg();
-            break;
-		case 5:
-            upop("Reading CHAT.CNF...");
-            read_chat_cfg(txt);
-			upop(0);
-            while(1) {
-                i=0;
-                strcpy(opt[i++],"Artificial Gurus");
-                strcpy(opt[i++],"Multinode Chat Actions");
-                strcpy(opt[i++],"Multinode Chat Channels");
-                strcpy(opt[i++],"External Sysop Chat Pagers");
-				opt[i][0]=0;
-                j=ulist(WIN_ORG|WIN_ACT|WIN_CHE,0,0,0,&chat_dflt,0
-                    ,"Chat Features",opt);
-                if(j==-1) {
-                    j=save_changes(WIN_MID);
-                    if(j==-1)
-                        continue;
-                    if(!j)
-                        write_chat_cfg();
-                    break; }
-                switch(j) {
-                    case 0:
-                        guru_cfg();
-                        break;
-                    case 1:
-                        actsets_cfg();
-                        break;
-                    case 2:
-                        chan_cfg();
-                        break;
-                    case 3:
-                        page_cfg();
-                        break; } }
-            free_chat_cfg();
-            break;
-		case 6:
-			upop("Reading MAIN.CNF...");
-            read_main_cfg(txt);
-			upop("Reading MSGS.CNF...");
-			read_msgs_cfg(txt);
-			upop(0);
-			msgs_cfg();
-			free_msgs_cfg();
-			free_main_cfg();
-			break;
-		case 7:
-			upop("Reading MAIN.CNF...");
-            read_main_cfg(txt);
-			upop("Reading MSGS.CNF...");
-            read_msgs_cfg(txt);
-			upop(0);
-			msg_opts();
-			free_msgs_cfg();
-			free_main_cfg();
-			break;
-		case 8:
-			upop("Reading MAIN.CNF...");
-			read_main_cfg(txt);
-			upop(0);
-			shell_cfg();
-			free_main_cfg();
-            break;
-		case 9:
-			upop("Reading MAIN.CNF...");
-            read_main_cfg(txt);
-			upop("Reading XTRN.CNF...");
-			read_xtrn_cfg(txt);
-			upop(0);
-			xprogs_cfg();
-			free_xtrn_cfg();
-			free_main_cfg();
-			break;
-		case 10:
-			upop("Reading MAIN.CNF...");
-            read_main_cfg(txt);
-            upop("Reading FILE.CNF...");
-            read_file_cfg(txt);
-			upop(0);
-            txt_cfg();
-            free_file_cfg();
-			free_main_cfg();
-            break;
-		case -1:
-			i=0;
-			strcpy(opt[0],"Yes");
-			strcpy(opt[1],"No");
-			opt[2][0]=0;
-			SETHELP(WHERE);
-/*
-Exit SCFG:
-
-If you want to exit the Synchronet configuration utility, select Yes.
-Otherwise, select No or hit  ESC .
-*/
-			i=ulist(WIN_MID,0,0,0,&i,0,"Exit SCFG",opt);
-			if(!i)
-				bail(0);
-			break; } }
-}
-
-/****************************************************************************/
-/* Checks the changes variable. If there have been no changes, returns 2.	*/
-/* If there have been changes, it prompts the user to change or not. If the */
-/* user escapes the menu, returns -1, selects Yes, 0, and selects no, 1 	*/
-/****************************************************************************/
-int save_changes(int mode)
-{
-	int i=0;
-
-if(!changes)
-	return(2);
-strcpy(opt[0],"Yes");
-strcpy(opt[1],"No");
-opt[2][0]=0;
-if(mode&WIN_SAV && savdepth)
-	savnum++;
-SETHELP(WHERE);
-/*
-Save Changes:
-
-You have made some changes to the configuration. If you want to save
-these changes, select Yes. If you are positive you DO NOT want to save
-these changes, select No. If you are not sure and want to review the
-configuration before deciding, hit  ESC .
-*/
-i=ulist(mode|WIN_ACT,0,0,0,&i,0,"Save Changes",opt);
-if(mode&WIN_SAV && savdepth)
-	savnum--;
-if(i!=-1)
-	changes=0;
-return(i);
-}
-
-void txt_cfg()
-{
-	static int txt_dflt,bar;
-	char str[81],code[9],done=0,*p;
-	int j,k;
-	uint i;
-	static txtsec_t savtxtsec;
-
-while(1) {
-	for(i=0;i<total_txtsecs;i++)
-		sprintf(opt[i],"%-25s",txtsec[i]->name);
-	opt[i][0]=0;
-	j=WIN_ORG|WIN_ACT|WIN_CHE;
-	if(total_txtsecs)
-		j|=WIN_DEL|WIN_GET;
-	if(total_txtsecs<MAX_OPTS)
-		j|=WIN_INS|WIN_INSACT|WIN_XTR;
-	if(savtxtsec.name[0])
-		j|=WIN_PUT;
-	SETHELP(WHERE);
-/*
-Text File Sections:
-
-This is a list of General Text File (G-File) Sections configured for
-your system. G-File sections are used to store text files that can be
-viewed freely by the users. Common text file section topics include
-ANSI Artwork, System Information, Game Help Files, and other special
-interest topics.
-
-To add a text file section, select the desired location with the arrow
-keys and hit  INS .
-
-To delete a text file section, select it and hit  DEL .
-
-To configure a text file, select it and hit  ENTER .
-*/
-	i=ulist(j,0,0,45,&txt_dflt,&bar,"Text File Sections",opt);
-	if((signed)i==-1) {
-		j=save_changes(WIN_MID);
-		if(j==-1)
-			continue;
-		if(!j)
-			write_file_cfg();
-		return; }
-	if((i&MSK_ON)==MSK_INS) {
-		i&=MSK_OFF;
-		strcpy(str,"ANSI Artwork");
-		SETHELP(WHERE);
-/*
-Text Section Name:
-
-This is the name of this text section.
-*/
-		if(uinput(WIN_MID|WIN_SAV,0,0,"Text Section Name",str,40
-            ,K_EDIT)<1)
-            continue;
-		sprintf(code,"%.8s",str);
-		p=strchr(code,SP);
-		if(p) *p=0;
-        strupr(code);
-		SETHELP(WHERE);
-/*
-Text Section Internal Code:
-
-Every text file section must have its own unique internal code for
-Synchronet to reference it by. It is helpful if this code is an
-abreviation of the name.
-*/
-		if(uinput(WIN_MID|WIN_SAV,0,0,"Text Section Internal Code",code,8
-			,K_EDIT|K_UPPER)<1)
-			continue;
-		if(!code_ok(code)) {
-			helpbuf=invalid_code;
-			umsg("Invalid Code");
-			helpbuf=0;
-            continue; }
-		if((txtsec=(txtsec_t **)REALLOC(txtsec
-			,sizeof(txtsec_t *)*(total_txtsecs+1)))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,nulstr,total_txtsecs+1);
-			total_txtsecs=0;
-			bail(1);
-			continue; }
-		if(total_txtsecs)
-			for(j=total_txtsecs;j>i;j--)
-                txtsec[j]=txtsec[j-1];
-		if((txtsec[i]=(txtsec_t *)MALLOC(sizeof(txtsec_t)))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(txtsec_t));
-			continue; }
-		memset((txtsec_t *)txtsec[i],0,sizeof(txtsec_t));
-		strcpy(txtsec[i]->name,str);
-		strcpy(txtsec[i]->code,code);
-		total_txtsecs++;
-		changes=1;
-		continue; }
-	if((i&MSK_ON)==MSK_DEL) {
-		i&=MSK_OFF;
-		FREE(txtsec[i]);
-		total_txtsecs--;
-		for(j=i;j<total_txtsecs;j++)
-			txtsec[j]=txtsec[j+1];
-		changes=1;
-		continue; }
-	if((i&MSK_ON)==MSK_GET) {
-		i&=MSK_OFF;
-		savtxtsec=*txtsec[i];
-		continue; }
-	if((i&MSK_ON)==MSK_PUT) {
-		i&=MSK_OFF;
-		*txtsec[i]=savtxtsec;
-		changes=1;
-        continue; }
-	i=txt_dflt;
-	j=0;
-	done=0;
-	while(!done) {
-		k=0;
-		sprintf(opt[k++],"%-27.27s%s","Name",txtsec[i]->name);
-		sprintf(opt[k++],"%-27.27s%s","Access Requirements"
-			,txtsec[i]->ar);
-		sprintf(opt[k++],"%-27.27s%s","Internal Code",txtsec[i]->code);
-		opt[k][0]=0;
-		switch(ulist(WIN_ACT|WIN_MID,0,0,60,&j,0,txtsec[i]->name
-			,opt)) {
-			case -1:
-				done=1;
-				break;
-			case 0:
-				SETHELP(WHERE);
-/*
-Text Section Name:
-
-This is the name of this text section.
-*/
-				strcpy(str,txtsec[i]->name);	/* save */
-				if(!uinput(WIN_MID|WIN_SAV,0,10
-					,"Text File Section Name"
-					,txtsec[i]->name,40,K_EDIT))
-					strcpy(txtsec[i]->name,str);
-				break;
-			case 1:
-				sprintf(str,"%s Text Section",txtsec[i]->name);
-				getar(str,txtsec[i]->ar);
-				break;
-			case 2:
-				strcpy(str,txtsec[i]->code);
-				SETHELP(WHERE);
-/*
-Text Section Internal Code:
-
-Every text file section must have its own unique internal code for
-Synchronet to reference it by. It is helpful if this code is an
-abreviation of the name.
-*/
-				uinput(WIN_MID|WIN_SAV,0,17,"Internal Code (unique)"
-					,str,8,K_EDIT|K_UPPER);
-				if(code_ok(str))
-					strcpy(txtsec[i]->code,str);
-				else {
-					helpbuf=invalid_code;
-					umsg("Invalid Code");
-					helpbuf=0; }
-				break; } } }
-}
-
-void shell_cfg()
-{
-	static int shell_dflt,shell_bar;
-	char str[81],code[9],done=0,*p;
-	int j,k;
-	uint i;
-	static shell_t savshell;
-
-while(1) {
-	for(i=0;i<total_shells;i++)
-		sprintf(opt[i],"%-25s",shell[i]->name);
-	opt[i][0]=0;
-	j=WIN_ORG|WIN_ACT|WIN_CHE;
-	if(total_shells)
-		j|=WIN_DEL|WIN_GET;
-	if(total_shells<MAX_OPTS)
-		j|=WIN_INS|WIN_INSACT|WIN_XTR;
-	if(savshell.name[0])
-		j|=WIN_PUT;
-	SETHELP(WHERE);
-/*
-Command Shells:
-
-This is a list of Command Shells configured for your system.
-Command shells are the programmable command and menu structures which
-are available for your BBS.
-
-To add a command shell section, select the desired location with the arrow
-keys and hit  INS .
-
-To delete a command shell, select it and hit  DEL .
-
-To configure a command shell, select it and hit  ENTER .
-*/
-	i=ulist(j,0,0,45,&shell_dflt,&shell_bar,"Command Shells",opt);
-	if((signed)i==-1) {
-		j=save_changes(WIN_MID);
-		if(j==-1)
-			continue;
-		if(!j)
-			write_main_cfg();
-		return; }
-	if((i&MSK_ON)==MSK_INS) {
-		i&=MSK_OFF;
-		strcpy(str,"Menu Shell");
-		SETHELP(WHERE);
-/*
-Command Shell Name:
-
-This is the descriptive name of this command shell.
-*/
-		if(uinput(WIN_MID|WIN_SAV,0,0,"Command Shell Name",str,40
-            ,K_EDIT)<1)
-            continue;
-		sprintf(code,"%.8s",str);
-		p=strchr(code,SP);
-		if(p) *p=0;
-        strupr(code);
-		SETHELP(WHERE);
-/*
-Command Shell Internal Code:
-
-Every command shell must have its own unique internal code for
-Synchronet to reference it by. It is helpful if this code is an
-abreviation of the name.
-
-This code will be the base filename used to load the shell from your
-EXEC directory. e.g. A shell with an internal code of MYBBS would
-indicate a Baja shell file named MYBBS.BIN in your EXEC directory.
-*/
-		if(uinput(WIN_MID|WIN_SAV,0,0,"Command Shell Internal Code",code,8
-			,K_EDIT|K_UPPER)<1)
-			continue;
-		if(!code_ok(code)) {
-			helpbuf=invalid_code;
-			umsg("Invalid Code");
-			helpbuf=0;
-            continue; }
-		if((shell=(shell_t **)REALLOC(shell
-			,sizeof(shell_t *)*(total_shells+1)))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,nulstr,total_shells+1);
-			total_shells=0;
-			bail(1);
-			continue; }
-		if(total_shells)
-			for(j=total_shells;j>i;j--)
-				shell[j]=shell[j-1];
-		if((shell[i]=(shell_t *)MALLOC(sizeof(shell_t)))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(shell_t));
-			continue; }
-		memset((shell_t *)shell[i],0,sizeof(shell_t));
-		strcpy(shell[i]->name,str);
-		strcpy(shell[i]->code,code);
-		total_shells++;
-		changes=1;
-		continue; }
-	if((i&MSK_ON)==MSK_DEL) {
-		i&=MSK_OFF;
-		FREE(shell[i]);
-		total_shells--;
-		for(j=i;j<total_shells;j++)
-			shell[j]=shell[j+1];
-		changes=1;
-		continue; }
-	if((i&MSK_ON)==MSK_GET) {
-		i&=MSK_OFF;
-		savshell=*shell[i];
-		continue; }
-	if((i&MSK_ON)==MSK_PUT) {
-		i&=MSK_OFF;
-		*shell[i]=savshell;
-		changes=1;
-        continue; }
-	i=shell_dflt;
-	j=0;
-	done=0;
-	while(!done) {
-		k=0;
-		sprintf(opt[k++],"%-27.27s%s","Name",shell[i]->name);
-		sprintf(opt[k++],"%-27.27s%s","Access Requirements"
-			,shell[i]->ar);
-		sprintf(opt[k++],"%-27.27s%s","Internal Code",shell[i]->code);
-		opt[k][0]=0;
-		SETHELP(WHERE);
-/*
-Command Shell:
-
-A command shell is a programmed command and menu structure that you or
-your users can use to navigate the BBS. For every command shell
-configured here, there must be an associated .BIN file in your EXEC
-directory for Synchronet to execute.
-
-Command shell files are created by using the Baja command shell compiler
-to turn Baja source code (.SRC) files into binary files (.BIN) for
-Synchronet to interpret. See the example .SRC files in the TEXT
-directory and the documentation for the Baja compiler for more details.
-*/
-		switch(ulist(WIN_ACT|WIN_MID,0,0,60,&j,0,shell[i]->name
-			,opt)) {
-			case -1:
-				done=1;
-				break;
-			case 0:
-				SETHELP(WHERE);
-/*
-Command Shell Name:
-
-This is the descriptive name of this command shell.
-*/
-				strcpy(str,shell[i]->name);    /* save */
-				if(!uinput(WIN_MID|WIN_SAV,0,10
-					,"Command Shell Name"
-					,shell[i]->name,40,K_EDIT))
-					strcpy(shell[i]->name,str);
-				break;
-			case 1:
-				sprintf(str,"%s Command Shell",shell[i]->name);
-				getar(str,shell[i]->ar);
-				break;
-			case 2:
-				strcpy(str,shell[i]->code);
-				SETHELP(WHERE);
-/*
-Command Shell Internal Code:
-
-Every command shell must have its own unique internal code for
-Synchronet to reference it by. It is helpful if this code is an
-abreviation of the name.
-
-This code will be the base filename used to load the shell from your
-EXEC directory. e.g. A shell with an internal code of MYBBS would
-indicate a Baja shell file named MYBBS.BIN in your EXEC directory.
-*/
-				uinput(WIN_MID|WIN_SAV,0,17,"Internal Code (unique)"
-					,str,8,K_EDIT|K_UPPER);
-				if(code_ok(str))
-					strcpy(shell[i]->code,str);
-				else {
-					helpbuf=invalid_code;
-					umsg("Invalid Code");
-					helpbuf=0; }
-				break; } } }
-}
-
-/****************************************************************************/
-/* Deletes all files in dir 'path' that match file spec 'spec'              */
-/****************************************************************************/
-int delfiles(char *inpath, char *spec)
-{
-    char str[256],path[128],done,c;
-    int files=0;
-    struct ffblk ff;
-
-strcpy(path,inpath);
-c=strlen(path);
-if(path[c-1]!='\\' && path[c-1]!=':')
-    strcat(path,"\\");
-sprintf(str,"%s%s",path,spec);
-done=findfirst(str,&ff,0);
-while(!done) {
-    sprintf(str,"%s%s",path,ff.ff_name);
-    if(remove(str))
-        errormsg(WHERE,ERR_REMOVE,str,0);
-    else
-        files++;
-    done=findnext(&ff); }
-return(files);
-}
-
-int whichlogic()
-{
-	int i;
-
-i=0;
-strcpy(opt[0],"Greater than or Equal");
-strcpy(opt[1],"Equal");
-strcpy(opt[2],"Not Equal");
-strcpy(opt[3],"Less than");
-opt[4][0]=0;
-if(savdepth)
-	savnum++;
-SETHELP(WHERE);
-/*
-Select Logic for Requirement:
-
-This menu allows you to choose the type of logic evaluation to use
-in determining if the requirement is met. If, for example, the user's
-level is being evaluated and you select Greater than or Equal from
-this menu and set the required level to 50, the user must have level
-50 or higher to meet this requirement. If you selected Equal from
-this menu and set the required level to 50, the user must have level
-50 exactly. If you select Not equal and level 50, then the user
-must have any level BUT 50. And if you select Less than from this
-menu and level 50, the user must have a level below 50.
-*/
-i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0,"Select Logic",opt);
-if(savdepth)
-	savnum--;
-return(i);
-}
-
-int whichcond()
-{
-	int i;
-
-i=0;
-strcpy(opt[0],"AND (Both/All)");
-strcpy(opt[1],"OR  (Either/Any)");
-opt[2][0]=0;
-if(savdepth)
-	savnum++;
-SETHELP(WHERE);
-/*
-Select Logic for Multiple Requirements:
-
-If you wish this new parameter to be required along with the other
-parameters, select AND to specify that both or all of the
-parameter requirments must be met.
-
-If you wish this new parameter to only be required if the other
-parameter requirements aren't met, select OR to specify that either
-or any of the parameter requirements must be met.
-*/
-i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0,"Multiple Requirement Logic",opt);
-if(savdepth)
-	savnum--;
-return(i);
-}
-
-
-void getar(char *desc, char *inar)
-{
-	static int curar;
-	char str[128],ar[128];
-	int i,j,len,done=0,n;
-
-strcpy(ar,inar);
-while(!done) {
-	len=strlen(ar);
-	if(len>=30) {	  /* Needs to be shortened */
-		str[0]=0;
-		n=strlen(ar);
-		for(i=0;i<n;i++) {					/* Shorten operators */
-			if(!strncmp(ar+i,"AND",3)) {
-				strcat(str,"&");
-				i+=2; }
-			else if(!strncmp(ar+i,"NOT",3)) {
-				strcat(str,"!");
-				i+=2; }
-			else if(!strncmp(ar+i,"EQUAL",5)) {
-				strcat(str,"=");
-				i+=4; }
-			else if(!strncmp(ar+i,"EQUALS",6)) {
-				strcat(str,"=");
-				i+=5; }
-			else if(!strncmp(ar+i,"EQUAL TO",8)) {
-				strcat(str,"=");
-				i+=7; }
-			else if(!strncmp(ar+i,"OR",2)) {
-				strcat(str,"|");
-				i+=1; }
-			else
-				strncat(str,ar+i,1); }
-		strcpy(ar,str);
-		len=strlen(ar); }
-
-	if(len>=30) {
-		str[0]=0;
-		n=strlen(ar);
-		for(i=0;i<n;i++) {					/* Remove spaces from ! and = */
-			if(!strncmp(ar+i," ! ",3)) {
-				strcat(str,"!");
-				i+=2; }
-			else if(!strncmp(ar+i,"= ",2)) {
-				strcat(str,"=");
-                i++; }
-			else if(!strncmp(ar+i," = ",3)) {
-				strcat(str,"=");
-				i+=2; }
-			else
-				strncat(str,ar+i,1); }
-		strcpy(ar,str);
-        len=strlen(ar); }
-
-	if(len>=30) {
-		str[0]=0;
-		n=strlen(ar);
-		for(i=0;i<n;i++) {					/* Remove spaces from & and | */
-			if(!strncmp(ar+i," & ",3)) {
-				strcat(str," ");
-				i+=2; }
-			else if(!strncmp(ar+i," | ",3)) {
-				strcat(str,"|");
-				i+=2; }
-			else
-				strncat(str,ar+i,1); }
-		strcpy(ar,str);
-        len=strlen(ar); }
-
-	if(len>=30) {					/* change week days to numbers */
-        str[0]=0;
-        n=strlen(ar);
-		for(i=0;i<n;i++) {
-			for(j=0;j<7;j++)
-                if(!strnicmp(ar+i,wday[j],3)) {
-                    strcat(str,itoa(j,tmp,10));
-					i+=2;
-					break; }
-			if(j==7)
-				strncat(str,ar+i,1); }
-        strcpy(ar,str);
-        len=strlen(ar); }
-
-	if(len>=30) {				  /* Shorten parameters */
-		str[0]=0;
-		n=strlen(ar);
-		for(i=0;i<n;i++) {
-			if(!strncmp(ar+i,"AGE",3)) {
-				strcat(str,"$A");
-				i+=2; }
-			else if(!strncmp(ar+i,"BPS",3)) {
-				strcat(str,"$B");
-				i+=2; }
-			else if(!strncmp(ar+i,"PCR",3)) {
-				strcat(str,"$P");
-				i+=2; }
-			else if(!strncmp(ar+i,"RIP",3)) {
-				strcat(str,"$*");
-				i+=2; }
-			else if(!strncmp(ar+i,"SEX",3)) {
-				strcat(str,"$S");
-				i+=2; }
-			else if(!strncmp(ar+i,"UDR",3)) {
-				strcat(str,"$K");
-				i+=2; }
-			else if(!strncmp(ar+i,"DAY",3)) {
-				strcat(str,"$W");
-                i+=2; }
-			else if(!strncmp(ar+i,"ANSI",4)) {
-				strcat(str,"$[");
-                i+=3; }
-			else if(!strncmp(ar+i,"UDFR",4)) {
-				strcat(str,"$D");
-				i+=3; }
-			else if(!strncmp(ar+i,"FLAG",4)) {
-				strcat(str,"$F");
-				i+=3; }
-			else if(!strncmp(ar+i,"NODE",4)) {
-				strcat(str,"$N");
-				i+=3; }
-			else if(!strncmp(ar+i,"NULL",4)) {
-				strcat(str,"$0");
-                i+=3; }
-			else if(!strncmp(ar+i,"TIME",4)) {
-				strcat(str,"$T");
-				i+=3; }
-			else if(!strncmp(ar+i,"USER",4)) {
-				strcat(str,"$U");
-				i+=3; }
-			else if(!strncmp(ar+i,"REST",4)) {
-				strcat(str,"$Z");
-                i+=3; }
-			else if(!strncmp(ar+i,"LOCAL",5)) {
-				strcat(str,"$G");
-				i+=4; }
-			else if(!strncmp(ar+i,"LEVEL",5)) {
-				strcat(str,"$L");
-                i+=4; }
-			else if(!strncmp(ar+i,"TLEFT",5)) {
-				strcat(str,"$R");
-				i+=4; }
-			else if(!strncmp(ar+i,"TUSED",5)) {
-				strcat(str,"$O");
-				i+=4; }
-			else if(!strncmp(ar+i,"EXPIRE",6)) {
-				strcat(str,"$E");
-				i+=5; }
-			else if(!strncmp(ar+i,"CREDIT",6)) {
-				strcat(str,"$C");
-                i+=5; }
-			else if(!strncmp(ar+i,"EXEMPT",6)) {
-				strcat(str,"$X");
-                i+=5; }
-			else if(!strncmp(ar+i,"RANDOM",6)) {
-				strcat(str,"$Q");
-                i+=5; }
-			else if(!strncmp(ar+i,"LASTON",6)) {
-				strcat(str,"$Y");
-                i+=5; }
-			else if(!strncmp(ar+i,"LOGONS",6)) {
-				strcat(str,"$V");
-                i+=5; }
-			else if(!strncmp(ar+i,":00",3)) {
-				i+=2; }
-			else
-				strncat(str,ar+i,1); }
-		strcpy(ar,str);
-		len=strlen(ar); }
-	if(len>=30) {				  /* Remove all spaces and &s */
-		str[0]=0;
-		n=strlen(ar);
-		for(i=0;i<n;i++)
-			if(ar[i]!=SP && ar[i]!='&')
-				strncat(str,ar+i,1);
-		strcpy(ar,str);
-		len=strlen(ar); }
-	i=0;
-	sprintf(opt[i++],"Requirement String (%s)",ar);
-	strcpy(opt[i++],"Clear Requirements");
-	strcpy(opt[i++],"Set Required Level");
-	strcpy(opt[i++],"Set Required Flag");
-	strcpy(opt[i++],"Set Required Age");
-	strcpy(opt[i++],"Set Required Sex");
-	strcpy(opt[i++],"Set Required Connect Rate");
-	strcpy(opt[i++],"Set Required Post/Call Ratio");
-	strcpy(opt[i++],"Set Required Number of Credits");
-	strcpy(opt[i++],"Set Required Upload/Download Ratio");
-	strcpy(opt[i++],"Set Required Upload/Download File Ratio");
-	strcpy(opt[i++],"Set Required Time of Day");
-	strcpy(opt[i++],"Set Required Day of Week");
-	strcpy(opt[i++],"Set Required Node Number");
-	strcpy(opt[i++],"Set Required User Number");
-	strcpy(opt[i++],"Set Required Time Remaining");
-	strcpy(opt[i++],"Set Required Days Till Expiration");
-	opt[i][0]=0;
-	SETHELP(WHERE);
-/*
-Access Requirements:
-
-This menu allows you to edit the access requirement string for the
-selected feature/section of your BBS. You can edit the string
-directly (see documentation for details) or use the Set Required...
-options from this menu to automatically fill in the string for you.
-*/
-	sprintf(str,"%s Requirements",desc);
-	switch(ulist(WIN_ACT|WIN_MID|WIN_SAV,0,0,60,&curar,0,str,opt)) {
-		case -1:
-			done=1;
-			break;
-		case 0:
-			SETHELP(WHERE);
-/*
-Key word	Symbol		Description
-������������������������������������������������������������������������
-AND 		  & 		More than one requirement (optional)
-NOT 		  ! 		Logical negation (i.e. NOT EQUAL)
-EQUAL		  = 		Equality required
-OR			  | 		Either of two or more parameters is required
-AGE 		  $A		User's age (years since birthdate, 0-255)
-BPS 		  $B		User's current connect rate (bps)
-FLAG		  $F		User's flag (A-Z)
-LEVEL		  $L		User's level (0-99)
-NODE		  $N		Current node (1-250)
-PCR 		  $P		User's post/call ratio (0-100)
-SEX 		  $S		User's sex/gender (M or F)
-TIME		  $T		Time of day (HH:MM, 00:00-23:59)
-TLEFT		  $R		User's time left online (minutes, 0-255)
-TUSED		  $O		User's time online this call (minutes, 0-255)
-USER		  $U		User's number (1-xxxx)
-*/
-			uinput(WIN_MID|WIN_SAV,0,0,"Requirement String",ar,LEN_ARSTR
-                ,K_EDIT|K_UPPER);
-			break;
-		case 1:
-			i=1;
-			strcpy(opt[0],"Yes");
-			strcpy(opt[1],"No");
-			opt[2][0]=0;
-			if(savdepth)
-				savnum++;
-			SETHELP(WHERE);
-/*
-Clear Requirements:
-
-If you wish to clear the current requirement string, select Yes.
-Otherwise, select No.
-*/
-			i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0,"Are You Sure",opt);
-			if(savdepth)
-                savnum--;
-			if(!i) {
-				ar[0]=0;
-				changes=1; }
-			break;
-		case 2:
-			if(strlen(ar)>=30) {
-				umsg("Maximum string length reached");
-                break; }
-			i=whichlogic();
-			if(i==-1)
-				break;
-			str[0]=0;
-			SETHELP(WHERE);
-/*
-Required Level:
-
-You are being prompted to enter the security level to be used in this
-requirement evaluation. The valid range is 0 (zero) through 99.
-*/
-			uinput(WIN_MID|WIN_SAV,0,0,"Level",str,2,K_NUMBER);
-			if(!str[0])
-				break;
-			if(ar[0]) {
-				j=whichcond();
-				if(j==-1)
-					break;
-				if(!j)
-					strcat(ar," AND ");
-				else
-					strcat(ar," OR "); }
-			strcat(ar,"LEVEL ");
-			switch(i) {
-				case 1:
-					strcat(ar,"= ");
-					break;
-				case 2:
-					strcat(ar,"NOT = ");
-					break;
-				case 3:
-					strcat(ar,"NOT ");
-					break; }
-			strcat(ar,str);
-			break;
-		case 3:
-			if(strlen(ar)>=30) {
-				umsg("Maximum string length reached");
-                break; }
-
-			for(i=0;i<4;i++)
-				sprintf(opt[i],"Flag Set #%d",i+1);
-			opt[i][0]=0;
-			i=0;
-			if(savdepth)
-				savnum++;
-			i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0,"Select Flag Set",opt);
-			if(savdepth)
-				savnum--;
-			if(i==-1)
-                break;
-			str[0]=0;
-			SETHELP(WHERE);
-/*
-Required Flag:
-
-You are being prompted to enter the security flag to be used in this
-requirement evaluation. The valid range is A through Z.
-*/
-			uinput(WIN_MID|WIN_SAV,0,0,"Flag (A-Z)",str,1
-				,K_UPPER|K_ALPHA);
-			if(!str[0])
-				break;
-			if(ar[0]) {
-				j=whichcond();
-				if(j==-1)
-					break;
-				if(!j)
-					strcat(ar," AND ");
-				else
-                    strcat(ar," OR "); }
-			strcat(ar,"FLAG ");
-			if(i)
-				strcat(ar,itoa(i+1,tmp,10));
-			strcat(ar,str);
-			break;
-		case 4:
-			if(strlen(ar)>=30) {
-				umsg("Maximum string length reached");
-                break; }
-			i=whichlogic();
-			if(i==-1)
-				break;
-			str[0]=0;
-			SETHELP(WHERE);
-/*
-Required Age:
-
-You are being prompted to enter the user's age to be used in this
-requirement evaluation. The valid range is 0 through 255.
-*/
-			uinput(WIN_MID|WIN_SAV,0,0,"Age",str,3,K_NUMBER);
-			if(!str[0])
-				break;
-			if(ar[0]) {
-				j=whichcond();
-				if(j==-1)
-					break;
-				if(!j)
-					strcat(ar," AND ");
-				else
-                    strcat(ar," OR "); }
-			strcat(ar,"AGE ");
-			switch(i) {
-				case 1:
-					strcat(ar,"= ");
-					break;
-				case 2:
-					strcat(ar,"NOT = ");
-					break;
-				case 3:
-					strcat(ar,"NOT ");
-					break; }
-			strcat(ar,str);
-            break;
-		case 5:
-			if(strlen(ar)>=30) {
-				umsg("Maximum string length reached");
-                break; }
-			str[0]=0;
-			SETHELP(WHERE);
-/*
-Required Sex:
-
-You are being prompted to enter the user's gender to be used in this
-requirement evaluation. The valid values are M or F (for male or
-female).
-*/
-			uinput(WIN_MID|WIN_SAV,0,0,"Sex (M or F)",str,1
-				,K_UPPER|K_ALPHA);
-			if(!str[0])
-				break;
-			if(ar[0]) {
-				j=whichcond();
-				if(j==-1)
-					break;
-				if(!j)
-					strcat(ar," AND ");
-				else
-					strcat(ar," OR "); }
-			strcat(ar,"SEX ");
-			strcat(ar,str);
-			break;
-		case 6:
-			if(strlen(ar)>=30) {
-				umsg("Maximum string length reached");
-                break; }
-			i=whichlogic();
-			if(i==-1)
-				break;
-			str[0]=0;
-			SETHELP(WHERE);
-/*
-Required Connect Rate (BPS):
-
-You are being prompted to enter the connect rate to be used in this
-requirement evaluation. The valid range is 300 through 57600.
-*/
-			uinput(WIN_MID|WIN_SAV,0,0,"Connect Rate (BPS)",str,5,K_NUMBER);
-			if(!str[0])
-				break;
-			j=atoi(str);
-			if(j>=300 && j<30000) {
-				j/=100;
-				sprintf(str,"%d",j); }
-			if(ar[0]) {
-				j=whichcond();
-				if(j==-1)
-					break;
-				if(!j)
-					strcat(ar," AND ");
-				else
-                    strcat(ar," OR "); }
-			strcat(ar,"BPS ");
-			switch(i) {
-				case 1:
-					strcat(ar,"= ");
-					break;
-				case 2:
-					strcat(ar,"NOT = ");
-					break;
-				case 3:
-					strcat(ar,"NOT ");
-					break; }
-			strcat(ar,str);
-            break;
-		case 7:
-			if(strlen(ar)>=30) {
-				umsg("Maximum string length reached");
-                break; }
-			i=whichlogic();
-			if(i==-1)
-				break;
-			str[0]=0;
-			SETHELP(WHERE);
-/*
-Required Post/Call Ratio:
-
-You are being prompted to enter the post/call ratio to be used in this
-requirement evaluation (percentage). The valid range is 0 through 100.
-*/
-			uinput(WIN_MID|WIN_SAV,0,0,"Post/Call Ratio (Percentage)"
-				,str,3,K_NUMBER);
-			if(!str[0])
-				break;
-			if(ar[0]) {
-				j=whichcond();
-				if(j==-1)
-					break;
-				if(!j)
-					strcat(ar," AND ");
-				else
-                    strcat(ar," OR "); }
-			strcat(ar,"PCR ");
-			switch(i) {
-				case 1:
-					strcat(ar,"= ");
-					break;
-				case 2:
-					strcat(ar,"NOT = ");
-					break;
-				case 3:
-					strcat(ar,"NOT ");
-					break; }
-			strcat(ar,str);
-            break;
-		case 8:
-			if(strlen(ar)>=30) {
-				umsg("Maximum string length reached");
-                break; }
-			i=whichlogic();
-			if(i==-1)
-				break;
-			str[0]=0;
-			SETHELP(WHERE);
-/*
-Required Number of Credits:
-
-You are being prompted to enter the number of credits (in kilobytes) to
-be used in this requirement evaluation. The valid range is 0 through
-65535.
-*/
-			uinput(WIN_MID|WIN_SAV,0,0,"Required Credits",str,5,K_NUMBER);
-			if(!str[0])
-				break;
-			if(ar[0]) {
-				j=whichcond();
-				if(j==-1)
-					break;
-				if(!j)
-					strcat(ar," AND ");
-				else
-                    strcat(ar," OR "); }
-			strcat(ar,"CREDIT ");
-			switch(i) {
-				case 1:
-					strcat(ar,"= ");
-					break;
-				case 2:
-					strcat(ar,"NOT = ");
-					break;
-				case 3:
-					strcat(ar,"NOT ");
-					break; }
-			strcat(ar,str);
-            break;
-		case 9:
-			if(strlen(ar)>=30) {
-				umsg("Maximum string length reached");
-                break; }
-			i=whichlogic();
-			if(i==-1)
-				break;
-			str[0]=0;
-			SETHELP(WHERE);
-/*
-Required Upload/Download Ratio:
-
-You are being prompted to enter the upload/download ratio to be used in
-this requirement evaluation (percentage). The valid range is 0 through
-100. This ratio is based on the number of bytes uploaded by the user
-divided by the number of bytes downloaded.
-*/
-			uinput(WIN_MID|WIN_SAV,0,0,"Upload/Download Ratio (Percentage)"
-				,str,3,K_NUMBER);
-			if(!str[0])
-				break;
-			if(ar[0]) {
-				j=whichcond();
-				if(j==-1)
-					break;
-				if(!j)
-					strcat(ar," AND ");
-				else
-                    strcat(ar," OR "); }
-			strcat(ar,"UDR ");
-			switch(i) {
-				case 1:
-					strcat(ar,"= ");
-					break;
-				case 2:
-					strcat(ar,"NOT = ");
-					break;
-				case 3:
-					strcat(ar,"NOT ");
-					break; }
-			strcat(ar,str);
-            break;
-		case 10:
-			if(strlen(ar)>=30) {
-				umsg("Maximum string length reached");
-                break; }
-			i=whichlogic();
-			if(i==-1)
-				break;
-			str[0]=0;
-			SETHELP(WHERE);
-/*
-Required Upload/Download File Ratio:
-
-You are being prompted to enter the upload/download ratio to be used in
-this requirement evaluation (percentage). The valid range is 0 through
-100. This ratio is based on the number of files uploaded by the user
-divided by the number of files downloaded.
-*/
-			uinput(WIN_MID|WIN_SAV,0,0
-				,"Upload/Download File Ratio (Percentage)"
-				,str,3,K_NUMBER);
-			if(!str[0])
-				break;
-			if(ar[0]) {
-				j=whichcond();
-				if(j==-1)
-					break;
-				if(!j)
-					strcat(ar," AND ");
-				else
-                    strcat(ar," OR "); }
-			strcat(ar,"UDFR ");
-			switch(i) {
-				case 1:
-					strcat(ar,"= ");
-					break;
-				case 2:
-					strcat(ar,"NOT = ");
-					break;
-				case 3:
-					strcat(ar,"NOT ");
-					break; }
-			strcat(ar,str);
-            break;
-		case 11:
-			if(strlen(ar)>=30) {
-				umsg("Maximum string length reached");
-                break; }
-			i=0;
-			strcpy(opt[0],"Before");
-			strcpy(opt[1],"After");
-			opt[2][0]=0;
-			if(savdepth)
-				savnum++;
-			i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0,"Time Relationship",opt);
-			if(savdepth)
-				savnum--;
-			if(i==-1)
-				break;
-			str[0]=0;
-			SETHELP(WHERE);
-/*
-Required Time of Day:
-
-You are being prompted to enter the time of day to be used in this
-requirement evaluation (24 hour HH:MM format). The valid range is 0
-through 23:59.
-*/
-			uinput(WIN_MID|WIN_SAV,0,0,"Time of Day (HH:MM)",str,5,K_UPPER);
-			if(!str[0])
-				break;
-			if(ar[0]) {
-				j=whichcond();
-				if(j==-1)
-					break;
-				if(!j)
-					strcat(ar," AND ");
-				else
-                    strcat(ar," OR "); }
-			strcat(ar,"TIME ");
-			if(!i)
-				strcat(ar,"NOT ");
-			strcat(ar,str);
-			break;
-		case 12:
-			if(strlen(ar)>=30) {
-				umsg("Maximum string length reached");
-                break; }
-			i=whichlogic();
-			if(i==-1)
-				break;
-			SETHELP(WHERE);
-/*
-Required Day of Week:
-
-You are being prompted to select a day of the week as an access
-requirement value.
-*/
-			for(n=0;n<7;n++)
-				strcpy(opt[n],wday[n]);
-			opt[n][0]=0;
-			n=0;
-			if(savdepth)
-				savnum++;
-			n=ulist(WIN_MID|WIN_SAV,0,0,0,&n,0,"Select Day of Week",opt);
-			if(savdepth)
-				savnum--;
-			if(n==-1)
-                break;
-			strcpy(str,wday[n]);
-			strupr(str);
-			if(ar[0]) {
-				j=whichcond();
-				if(j==-1)
-					break;
-				if(!j)
-					strcat(ar," AND ");
-				else
-                    strcat(ar," OR "); }
-			strcat(ar,"DAY ");
-			switch(i) {
-				case 1:
-					strcat(ar,"= ");
-					break;
-				case 2:
-					strcat(ar,"NOT = ");
-					break;
-				case 3:
-					strcat(ar,"NOT ");
-					break; }
-			strcat(ar,str);
-            break;
-		case 13:
-			if(strlen(ar)>=30) {
-				umsg("Maximum string length reached");
-                break; }
-			i=whichlogic();
-			if(i==-1)
-				break;
-			str[0]=0;
-			SETHELP(WHERE);
-/*
-Required Node:
-
-You are being prompted to enter the number of a node to be used in this
-requirement evaluation. The valid range is 1 through 250.
-*/
-			uinput(WIN_MID|WIN_SAV,0,0,"Node Number",str,3,K_NUMBER);
-			if(!str[0])
-				break;
-			if(ar[0]) {
-				j=whichcond();
-				if(j==-1)
-					break;
-				if(!j)
-					strcat(ar," AND ");
-				else
-                    strcat(ar," OR "); }
-			strcat(ar,"NODE ");
-			switch(i) {
-				case 1:
-					strcat(ar,"= ");
-					break;
-				case 2:
-					strcat(ar,"NOT = ");
-					break;
-				case 3:
-					strcat(ar,"NOT ");
-					break; }
-			strcat(ar,str);
-            break;
-		case 14:
-			if(strlen(ar)>=30) {
-				umsg("Maximum string length reached");
-                break; }
-			i=whichlogic();
-			if(i==-1)
-				break;
-			str[0]=0;
-			SETHELP(WHERE);
-/*
-Required User Number:
-
-You are being prompted to enter the user's number to be used in this
-requirement evaluation.
-*/
-			uinput(WIN_MID|WIN_SAV,0,0,"User Number",str,5,K_NUMBER);
-			if(!str[0])
-				break;
-			if(ar[0]) {
-				j=whichcond();
-				if(j==-1)
-					break;
-				if(!j)
-					strcat(ar," AND ");
-				else
-                    strcat(ar," OR "); }
-			strcat(ar,"USER ");
-			switch(i) {
-				case 1:
-					strcat(ar,"= ");
-					break;
-				case 2:
-					strcat(ar,"NOT = ");
-					break;
-				case 3:
-					strcat(ar,"NOT ");
-					break; }
-			strcat(ar,str);
-            break;
-
-		case 15:
-			if(strlen(ar)>=30) {
-				umsg("Maximum string length reached");
-                break; }
-			i=whichlogic();
-			if(i==-1)
-				break;
-			str[0]=0;
-			SETHELP(WHERE);
-/*
-Required Time Remaining:
-
-You are being prompted to enter the time remaining to be used in this
-requirement evaluation (in minutes). The valid range is 0 through 255.
-*/
-			uinput(WIN_MID|WIN_SAV,0,0,"Time Remaining (minutes)"
-				,str,3,K_NUMBER);
-			if(!str[0])
-				break;
-			if(ar[0]) {
-				j=whichcond();
-				if(j==-1)
-					break;
-				if(!j)
-					strcat(ar," AND ");
-				else
-                    strcat(ar," OR "); }
-			strcat(ar,"TLEFT ");
-			switch(i) {
-				case 1:
-					strcat(ar,"= ");
-					break;
-				case 2:
-					strcat(ar,"NOT = ");
-					break;
-				case 3:
-					strcat(ar,"NOT ");
-					break; }
-			strcat(ar,str);
-			break;
-
-		case 16:
-			if(strlen(ar)>=30) {
-				umsg("Maximum string length reached");
-                break; }
-			i=whichlogic();
-			if(i==-1)
-				break;
-			str[0]=0;
-			SETHELP(WHERE);
-/*
-Required Days Till User Account Expiration:
-
-You are being prompted to enter the required number of days till the
-user's account will expire.
-*/
-			uinput(WIN_MID|WIN_SAV,0,0,"Days Till Expiration"
-				,str,5,K_NUMBER);
-			if(!str[0])
-				break;
-			if(ar[0]) {
-				j=whichcond();
-				if(j==-1)
-					break;
-				if(!j)
-					strcat(ar," AND ");
-				else
-                    strcat(ar," OR "); }
-			strcat(ar,"EXPIRE ");
-			switch(i) {
-				case 1:
-					strcat(ar,"= ");
-					break;
-				case 2:
-					strcat(ar,"NOT = ");
-					break;
-				case 3:
-					strcat(ar,"NOT ");
-					break; }
-			strcat(ar,str);
-            break;
-			} }
-sprintf(inar,"%.*s",LEN_ARSTR,ar);
-}
-
-char code_ok(char *str)
-{
-
-if(!strlen(str))
-    return(0);
-if(strcspn(str," \\/.|<>*?+[]:=\";,")!=strlen(str))
-    return(0);
-return(1);
-}
-
-/****************************************************************************/
-/*                          Functions from MISC.C                           */
-/****************************************************************************/
-
-/****************************************************************************/
-/* Network open function. Opens all files DENYALL and retries LOOP_NOPEN    */
-/* number of times if the attempted file is already open or denying access  */
-/* for some other reason.   All files are opened in BINARY mode.            */
-/****************************************************************************/
-int nopen(char *str, int access)
-{
-    int file,share,count=0;
-
-if(access==O_RDONLY) share=O_DENYWRITE;
-    else share=O_DENYALL;
-while(((file=open(str,O_BINARY|share|access,S_IWRITE))==-1)
-    && errno==EACCES && count++<LOOP_NOPEN);
-if(file==-1 && errno==EACCES)
-	cputs("\7\r\nNOPEN: ACCESS DENIED\r\n\7");
-return(file);
-}
-
-/****************************************************************************/
-/* This function performs an nopen, but returns a file stream with a buffer */
-/* allocated.																*/
-/****************************************************************************/
-FILE *fnopen(int *file, char *str, int access)
-{
-	char mode[128];
-	FILE *stream;
-
-if(((*file)=nopen(str,access))==-1)
-	return(NULL);
-
-if(access&O_APPEND) {
-	if(access&O_RDONLY)
-		strcpy(mode,"a+");
-	else
-		strcpy(mode,"a"); }
-else {
-	if(access&O_WRONLY)
-		strcpy(mode,"r+");
-	else
-		strcpy(mode,"r"); }
-stream=fdopen((*file),mode);
-if(stream==NULL) {
-	close(*file);
-	return(NULL); }
-setvbuf(stream,NULL,_IOFBF,16*1024);
-return(stream);
-}
-
-
-/****************************************************************************/
-/* Converts an ASCII Hex string into an unsigned long                       */
-/****************************************************************************/
-unsigned long ahtoul(char *str)
-{
-    unsigned long l,val=0;
-
-while((l=(*str++)|0x20)!=0x20)
-    val=(l&0xf)+(l>>6&1)*9+val*16;
-return(val);
-}
-
-/****************************************************************************/
-/* Returns in 'string' a character representation of the number in l with   */
-/* commas. Maximum value of l is 4 gigabytes.                               */
-/****************************************************************************/
-char *ultoac(ulong l, char *string)
-{
-    char str[81];
-    char i,j;
-
-ultoa(l,str,10);
-if(!(strlen(str)%3)) i=(strlen(str)/3)-1;
-    else i=strlen(str)/3;
-j=strlen(str)+i;
-string[j--]=0;
-i=strlen(str)-1;
-while(i!=-1) {
-    if(!((strlen(str)-i)%3)) {
-        string[j--]=str[i--];
-        string[j--]=','; }
-    else string[j--]=str[i--]; }
-return(string);
-}
-
-/****************************************************************************/
-/* If the directory 'path' doesn't exist, create it.                      	*/
-/****************************************************************************/
-void md(char *inpath)
-{
-	char path[256],str[128];
-	struct ffblk ff;
-	int curdisk,disk;
-
-if(!inpath[0] || no_dirchk)
-	return;
-if(!strcmp(inpath+1,":\\")) {
-	curdisk=getdisk();
-	disk=toupper(inpath[0])-'A';
-	setdisk(disk);
-	if(getdisk()!=disk) {
-		sprintf(str,"Invalid drive %c:",toupper(inpath[0]));
-		umsg(str); }
-	setdisk(curdisk);
-	return; }
-strcpy(path,inpath);
-if(path[strlen(path)-1]=='\\')
-	path[strlen(path)-1]=0;
-if(!strcmp(path,"."))               /* Don't try to make '.' */
-	return;
-if(findfirst(path,&ff,FA_DIREC))
-	if(mkdir(path)) {
-		sprintf(str,"Failed to create %s",path);
-		umsg(str); }
-}
-
-
-void bail(int code)
-{
-	char		str[256];
-	int 		i,x;
-	smbstatus_t status;
-
-if(code) {
-	cputs("\r\nHit a key...");
-	getch(); }
-else if(forcesave) {
-	upop("Loading Configs...");
-	read_main_cfg(txt);
-	read_msgs_cfg(txt);
-	read_file_cfg(txt);
-	read_chat_cfg(txt);
-	read_xtrn_cfg(txt);
-	upop(0);
-	write_main_cfg();
-	write_msgs_cfg();
-	write_file_cfg();
-	write_chat_cfg();
-	write_xtrn_cfg(); }
-
-uifcbail();
-
-exit(code);
-}
-
-/****************************************************************************/
-/* Error handling routine. Prints to local and remote screens the error     */
-/* information, function, action, object and access and then attempts to    */
-/* write the error information into the file ERROR.LOG in the text dir.     */
-/****************************************************************************/
-void errormsg(int line, char *source,  char action, char *object, ulong access)
-{
-	char scrn_buf[8000];
-    char actstr[256];
-
-gettext(1,1,80,scrn_len,scrn_buf);
-clrscr();
-switch(action) {
-    case ERR_OPEN:
-        strcpy(actstr,"opening");
-        break;
-    case ERR_CLOSE:
-        strcpy(actstr,"closeing");
-        break;
-    case ERR_FDOPEN:
-        strcpy(actstr,"fdopen");
-        break;
-    case ERR_READ:
-        strcpy(actstr,"reading");
-        break;
-    case ERR_WRITE:
-        strcpy(actstr,"writing");
-        break;
-    case ERR_REMOVE:
-        strcpy(actstr,"removing");
-        break;
-    case ERR_ALLOC:
-        strcpy(actstr,"allocating memory");
-        break;
-    case ERR_CHK:
-        strcpy(actstr,"checking");
-        break;
-    case ERR_LEN:
-        strcpy(actstr,"checking length");
-        break;
-    case ERR_EXEC:
-        strcpy(actstr,"executing");
-        break;
-    default:
-        strcpy(actstr,"UNKNOWN"); }
-cprintf("ERROR -     line: %d\r\n",line);
-cprintf("            file: %s\r\n",source);
-cprintf("          action: %s\r\n",actstr);
-cprintf("          object: %s\r\n",object);
-cprintf("          access: %ld (%lx)\r\n",access,access);
-cputs("\r\n<Hit any key>");
-getch();
-puttext(1,1,80,scrn_len,scrn_buf);
-}
-
-/****************************************************************************/
-/* Puts a backslash on path strings 										*/
-/****************************************************************************/
-void backslash(char *str)
-{
-    int i;
-
-i=strlen(str);
-if(i && str[i-1]!='\\') {
-    str[i]='\\'; str[i+1]=0; }
-}
-
-/****************************************************************************/
-/* Checks the disk drive for the existence of a file. Returns 1 if it       */
-/* exists, 0 if it doesn't.                                                 */
-/* Called from upload                                                       */
-/****************************************************************************/
-char fexist(char *filespec)
-{
-    struct ffblk f;
-
-if(findfirst(filespec,&f,0)==0)
-    return(1);
-return(0);
-}
-
-/* End of SCFG.C */
diff --git a/src/sbbs2/scfg/scfg.h b/src/sbbs2/scfg/scfg.h
deleted file mode 100644
index 2ea311e2f1..0000000000
--- a/src/sbbs2/scfg/scfg.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* SCFG.H */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "uifc.h"
-#include <dos.h>
-#include <dir.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#if defined(__DPMI32__) || defined(__OS2__)
-    #define far
-	#define huge
-#endif
-
-#include "sbbs.h"
-#include "scfglib.h"
-
-/**********/
-/* Macros */
-/**********/
-
-/*************/
-/* Constants */
-/*************/
-
-#define SUB_HDRMOD	(1L<<31)		/* Modified sub-board header info */
-
-/************/
-/* Typedefs */
-/************/
-
-/********************/
-/* Global Variables */
-/********************/
-extern long freedosmem;
-extern char item;
-extern char **opt;
-extern char tmp[256];
-extern char *nulstr;
-extern char **mdm_type;
-extern char **mdm_file;
-extern int	mdm_types;
-extern char *invalid_code,*num_flags;
-extern int	backup_level;
-
-extern read_cfg_text_t txt;
-
-/***********************/
-/* Function Prototypes */
-/***********************/
-
-int  save_changes(int mode);
-void node_menu();
-void node_cfg();
-void results(int i);
-void sys_cfg();
-void net_cfg();
-void msgs_cfg();
-void sub_cfg(uint grpnum);
-void xfer_cfg();
-void libs_cfg();
-void dir_cfg(uint libnum);
-void xprogs_cfg();
-void fevents_cfg();
-void tevents_cfg();
-void xtrn_cfg();
-void swap_cfg();
-void xtrnsec_cfg();
-void page_cfg();
-void xedit_cfg();
-void txt_cfg();
-void shell_cfg();
-void read_node_cfg(read_cfg_text_t txt);
-void write_node_cfg();
-void write_main_cfg();
-void write_msgs_cfg();
-void write_file_cfg();
-void write_xtrn_cfg();
-void write_chat_cfg();
-void init_mdms();
-void mdm_cfg(int mdmnum);
-int export_mdm(char *fname);
-char code_ok(char *str);
-int  bits(long l);
-char oneflag(long l);
-void getar(char *desc, char *ar);
-char *ultoac(ulong l,char *str);
-FILE *fnopen(int *file, char *str, int access);
diff --git a/src/sbbs2/scfg/scfgchat.c b/src/sbbs2/scfg/scfgchat.c
deleted file mode 100644
index 842d1e24c1..0000000000
--- a/src/sbbs2/scfg/scfgchat.c
+++ /dev/null
@@ -1,819 +0,0 @@
-#line 2 "SCFGCHAT.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "scfg.h"
-
-void page_cfg()
-{
-	static int dflt,bar;
-	char str[81],done=0;
-	int j,k;
-	uint i;
-	static page_t savpage;
-
-while(1) {
-	for(i=0;i<total_pages && i<MAX_OPTS;i++)
-		sprintf(opt[i],"%-40.40s %.-20s",page[i]->cmd,page[i]->ar);
-	opt[i][0]=0;
-	savnum=0;
-	j=WIN_ACT|WIN_SAV|WIN_RHT|WIN_BOT;
-	if(total_pages)
-		j|=WIN_DEL|WIN_GET;
-	if(total_pages<MAX_OPTS)
-		j|=WIN_INS|WIN_INSACT|WIN_XTR;
-	if(savpage.cmd[0])
-		j|=WIN_PUT;
-	SETHELP(WHERE);
-/*
-External Sysop Chat Pagers:
-
-This is a list of the configured external sysop chat pagers.
-
-To add a pager, select the desired location and hit  INS .
-
-To delete a pager, select it and hit  DEL .
-
-To configure a pager, select it and hit  ENTER .
-*/
-	i=ulist(j,0,0,45,&dflt,&bar,"External Sysop Chat Pagers",opt);
-	if((signed)i==-1)
-		return;
-	if((i&MSK_ON)==MSK_INS) {
-		i&=MSK_OFF;
-		sprintf(str,"%%!tone +chatpage.ton");
-		SETHELP(WHERE);
-/*
-External Chat Pager Command Line:
-
-This is the command line to execute for this external chat pager.
-*/
-		if(uinput(WIN_MID|WIN_SAV,0,0,"Command Line",str,50
-			,K_EDIT)<1)
-            continue;
-		if((page=(page_t **)REALLOC(page,sizeof(page_t *)*(total_pages+1)))
-            ==NULL) {
-            errormsg(WHERE,ERR_ALLOC,nulstr,total_pages+1);
-			total_pages=0;
-			bail(1);
-            continue; }
-		if(total_pages)
-			for(j=total_pages;j>i;j--)
-				page[j]=page[j-1];
-		if((page[i]=(page_t *)MALLOC(sizeof(page_t)))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(page_t));
-			continue; }
-		memset((page_t *)page[i],0,sizeof(page_t));
-		strcpy(page[i]->cmd,str);
-		total_pages++;
-		changes=1;
-		continue; }
-	if((i&MSK_ON)==MSK_DEL) {
-		i&=MSK_OFF;
-		FREE(page[i]);
-		total_pages--;
-		for(j=i;j<total_pages;j++)
-			page[j]=page[j+1];
-		changes=1;
-		continue; }
-	if((i&MSK_ON)==MSK_GET) {
-		i&=MSK_OFF;
-		savpage=*page[i];
-		continue; }
-	if((i&MSK_ON)==MSK_PUT) {
-		i&=MSK_OFF;
-		*page[i]=savpage;
-		changes=1;
-        continue; }
-	j=0;
-	done=0;
-	while(!done) {
-		k=0;
-		sprintf(opt[k++],"%-27.27s%.40s","Command Line",page[i]->cmd);
-		sprintf(opt[k++],"%-27.27s%.40s","Access Requirements",page[i]->ar);
-		sprintf(opt[k++],"%-27.27s%s","Intercept I/O Interrupts"
-			,page[i]->misc&IO_INTS ? "Yes":"No");
-		opt[k][0]=0;
-		sprintf(str,"Sysop Chat Pager #%d",i+1);
-		savnum=1;
-		switch(ulist(WIN_ACT|WIN_MID|WIN_SAV,0,0,60,&j,0,str,opt)) {
-			case -1:
-				done=1;
-				break;
-			case 0:
-				SETHELP(WHERE);
-/*
-External Chat Pager Command Line:
-
-This is the command line to execute for this external chat pager.
-*/
-				strcpy(str,page[i]->cmd);
-				if(!uinput(WIN_MID|WIN_SAV,0,10,"Command Line"
-					,page[i]->cmd,50,K_EDIT))
-					strcpy(page[i]->cmd,str);
-				break;
-			case 1:
-				savnum=2;
-				getar(str,page[i]->ar);
-				break;
-			case 2:
-				k=1;
-				strcpy(opt[0],"Yes");
-				strcpy(opt[1],"No");
-				opt[2][0]=0;
-				savnum=2;
-				SETHELP(WHERE);
-/*
-Intercept I/O Interrupts:
-
-If you wish the DOS screen output and keyboard input to be intercepted
-when running this chat pager, set this option to Yes.
-*/
-				k=ulist(WIN_MID|WIN_SAV,0,0,0,&k,0,"Intercept I/O Interrupts"
-					,opt);
-				if(!k && !(page[i]->misc&IO_INTS)) {
-					page[i]->misc|=IO_INTS;
-					changes=1; }
-				else if(k==1 && page[i]->misc&IO_INTS) {
-					page[i]->misc&=~IO_INTS;
-					changes=1; }
-                break;
-
-				} } }
-}
-
-void chan_cfg()
-{
-	static int chan_dflt,chan_bar,opt_dflt;
-	char str[81],code[9],done=0,*p;
-	int j,k;
-	uint i;
-	static chan_t savchan;
-
-while(1) {
-	for(i=0;i<total_chans && i<MAX_OPTS;i++)
-		sprintf(opt[i],"%-25s",chan[i]->name);
-	opt[i][0]=0;
-	j=WIN_ACT|WIN_SAV|WIN_BOT|WIN_RHT;
-	savnum=0;
-	if(total_chans)
-		j|=WIN_DEL|WIN_GET;
-	if(total_chans<MAX_OPTS)
-		j|=WIN_INS|WIN_INSACT|WIN_XTR;
-	if(savchan.name[0])
-		j|=WIN_PUT;
-	SETHELP(WHERE);
-/*
-Multinode Chat Channels:
-
-This is a list of the configured multinode chat channels.
-
-To add a channel, select the desired location with the arrow keys and
-hit  INS .
-
-To delete a channel, select it with the arrow keys and hit  DEL .
-
-To configure a channel, select it with the arrow keys and hit  ENTER .
-*/
-	i=ulist(j,0,0,45,&chan_dflt,&chan_bar,"Multinode Chat Channels",opt);
-	if((signed)i==-1)
-		return;
-	if((i&MSK_ON)==MSK_INS) {
-		i&=MSK_OFF;
-		strcpy(str,"Open");
-		SETHELP(WHERE);
-/*
-Channel Name:
-
-This is the name or description of the chat channel.
-*/
-		if(uinput(WIN_MID|WIN_SAV,0,0,"Chat Channel Name",str,25
-			,K_EDIT)<1)
-            continue;
-		sprintf(code,"%.8s",str);
-		p=strchr(code,SP);
-		if(p) *p=0;
-        strupr(code);
-		SETHELP(WHERE);
-/*
-Chat Channel Internal Code:
-
-Every chat channel must have its own unique code for Synchronet to refer
-to it internally. This code is usually an abreviation of the chat
-channel name.
-*/
-		if(uinput(WIN_MID|WIN_SAV,0,0,"Internal Code"
-			,code,8,K_EDIT|K_UPPER)<1)
-			continue;
-		if(!code_ok(code)) {
-			helpbuf=invalid_code;
-			umsg("Invalid Code");
-			helpbuf=0;
-            continue; }
-		if((chan=(chan_t **)REALLOC(chan,sizeof(chan_t *)*(total_chans+1)))
-            ==NULL) {
-            errormsg(WHERE,ERR_ALLOC,nulstr,total_chans+1);
-			total_chans=0;
-			bail(1);
-            continue; }
-		if(total_chans)
-			for(j=total_chans;j>i;j--)
-				chan[j]=chan[j-1];
-		if((chan[i]=(chan_t *)MALLOC(sizeof(chan_t)))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(chan_t));
-			continue; }
-		memset((chan_t *)chan[i],0,sizeof(chan_t));
-		strcpy(chan[i]->name,str);
-		strcpy(chan[i]->code,code);
-		total_chans++;
-		changes=1;
-		continue; }
-	if((i&MSK_ON)==MSK_DEL) {
-		i&=MSK_OFF;
-		FREE(chan[i]);
-		total_chans--;
-		for(j=i;j<total_chans;j++)
-			chan[j]=chan[j+1];
-		changes=1;
-		continue; }
-	if((i&MSK_ON)==MSK_GET) {
-		i&=MSK_OFF;
-		savchan=*chan[i];
-		continue; }
-	if((i&MSK_ON)==MSK_PUT) {
-		i&=MSK_OFF;
-		*chan[i]=savchan;
-		changes=1;
-        continue; }
-    j=0;
-	done=0;
-	while(!done) {
-		k=0;
-		sprintf(opt[k++],"%-27.27s%s","Name",chan[i]->name);
-		sprintf(opt[k++],"%-27.27s%s","Internal Code",chan[i]->code);
-		sprintf(opt[k++],"%-27.27s%lu","Cost in Credits",chan[i]->cost);
-		sprintf(opt[k++],"%-27.27s%.40s","Access Requirements"
-			,chan[i]->ar);
-		sprintf(opt[k++],"%-27.27s%s","Password Protection"
-			,chan[i]->misc&CHAN_PW ? "Yes" : "No");
-		sprintf(opt[k++],"%-27.27s%s","Guru Joins When Empty"
-			,chan[i]->misc&CHAN_GURU ? "Yes" : "No");
-		sprintf(opt[k++],"%-27.27s%s","Channel Guru"
-			,chan[i]->guru<total_gurus ? guru[chan[i]->guru]->name : "");
-        sprintf(opt[k++],"%-27.27s%s","Channel Action Set"
-            ,actset[chan[i]->actset]->name);
-		opt[k][0]=0;
-		SETHELP(WHERE);
-/*
-Chat Channel Configuration:
-
-This menu is for configuring the selected chat channel.
-*/
-		savnum=1;
-		sprintf(str,"%s Chat Channel",chan[i]->name);
-		switch(ulist(WIN_ACT|WIN_MID|WIN_SAV,0,0,60,&opt_dflt,0,str,opt)) {
-			case -1:
-				done=1;
-				break;
-			case 0:
-				SETHELP(WHERE);
-/*
-Chat Channel Name:
-
-This is the name or description of the chat channel.
-*/
-				strcpy(str,chan[i]->name);
-				if(!uinput(WIN_MID|WIN_SAV,0,10,"Chat Channel Name"
-					,chan[i]->name,25,K_EDIT))
-					strcpy(chan[i]->name,str);
-				break;
-			case 1:
-				SETHELP(WHERE);
-/*
-Chat Channel Internal Code:
-
-Every chat channel must have its own unique code for Synchronet to refer
-to it internally. This code is usually an abreviation of the chat
-channel name.
-*/
-				strcpy(str,chan[i]->code);
-				if(!uinput(WIN_MID|WIN_SAV,0,10,"Internal Code"
-					,str,8,K_UPPER|K_EDIT))
-					break;
-				if(code_ok(str))
-					strcpy(chan[i]->code,str);
-				else {
-					helpbuf=invalid_code;
-					umsg("Invalid Code");
-                    helpbuf=0; }
-                break;
-			case 2:
-				ultoa(chan[i]->cost,str,10);
-                SETHELP(WHERE);
-/*
-Chat Channel Cost to Join:
-
-If you want users to be charged credits to join this chat channel, set
-this value to the number of credits to charge. If you want this channel
-to be free, set this value to 0.
-*/
-				uinput(WIN_MID|WIN_SAV,0,0,"Cost to Join (in Credits)"
-                    ,str,10,K_EDIT|K_NUMBER);
-				chan[i]->cost=atol(str);
-                break;
-			case 3:
-				savnum=2;
-				sprintf(str,"%s Chat Channel",chan[i]->name);
-				getar(str,chan[i]->ar);
-				break;
-			case 4:
-				k=1;
-				strcpy(opt[0],"Yes");
-				strcpy(opt[1],"No");
-				opt[2][0]=0;
-				savnum=2;
-				SETHELP(WHERE);
-/*
-Allow Channel to be Password Protected:
-
-If you want to allow the first user to join this channel to password
-protect it, set this option to Yes.
-*/
-				k=ulist(WIN_MID|WIN_SAV,0,0,0,&k,0
-					,"Allow Channel to be Password Protected"
-					,opt);
-				if(!k && !(chan[i]->misc&CHAN_PW)) {
-					chan[i]->misc|=CHAN_PW;
-					changes=1; }
-				else if(k==1 && chan[i]->misc&CHAN_PW) {
-					chan[i]->misc&=~CHAN_PW;
-					changes=1; }
-				break;
-			case 5:
-				k=1;
-				strcpy(opt[0],"Yes");
-				strcpy(opt[1],"No");
-				opt[2][0]=0;
-				savnum=2;
-				SETHELP(WHERE);
-/*
-Guru Joins This Channel When Empty:
-
-If you want the system guru to join this chat channel when there is
-only one user, set this option to Yes.
-*/
-				k=ulist(WIN_MID|WIN_SAV,0,0,0,&k,0
-					,"Guru Joins This Channel When Empty"
-					,opt);
-				if(!k && !(chan[i]->misc&CHAN_GURU)) {
-					chan[i]->misc|=CHAN_GURU;
-					changes=1; }
-				else if(k==1 && chan[i]->misc&CHAN_GURU) {
-					chan[i]->misc&=~CHAN_GURU;
-					changes=1; }
-				break;
-			case 6:
-SETHELP(WHERE);
-/*
-Channel Guru:
-
-This is a list of available chat Gurus.  Select the one that you wish
-to have available in this channel.
-*/
-				k=0;
-				for(j=0;j<total_gurus && j<MAX_OPTS;j++)
-					sprintf(opt[j],"%-25s",guru[j]->name);
-				opt[j][0]=0;
-				savnum=2;
-				k=ulist(WIN_SAV|WIN_RHT,0,0,25,&j,0
-					,"Available Chat Gurus",opt);
-				if(k==-1)
-					break;
-				chan[i]->guru=k;
-				break;
-			case 7:
-SETHELP(WHERE);
-/*
-Channel Action Set:
-
-This is a list of available chat action sets.  Select the one that you wish
-to have available in this channel.
-*/
-				k=0;
-				for(j=0;j<total_actsets && j<MAX_OPTS;j++)
-					sprintf(opt[j],"%-25s",actset[j]->name);
-				opt[j][0]=0;
-				savnum=2;
-				k=ulist(WIN_SAV|WIN_RHT,0,0,25,&j,0
-					,"Available Chat Action Sets",opt);
-				if(k==-1)
-					break;
-				changes=1;
-				chan[i]->actset=k;
-				break; } } }
-}
-
-void chatact_cfg(uint setnum)
-{
-	static int chatact_dflt,chatact_bar;
-	char str[128],cmd[128],out[128];
-	int j,k;
-	uint i,n,chatnum[MAX_OPTS+1];
-	static chatact_t savchatact;
-
-while(1) {
-	for(i=0,j=0;i<total_chatacts && j<MAX_OPTS;i++)
-		if(chatact[i]->actset==setnum) {
-			sprintf(opt[j],"%-*.*s %s",LEN_CHATACTCMD,LEN_CHATACTCMD
-				,chatact[i]->cmd,chatact[i]->out);
-			chatnum[j++]=i; }
-	chatnum[j]=total_chatacts;
-	opt[j][0]=0;
-	savnum=2;
-	i=WIN_ACT|WIN_SAV;
-	if(j)
-		i|=WIN_DEL|WIN_GET;
-	if(j<MAX_OPTS)
-		i|=WIN_INS|WIN_INSACT|WIN_XTR;
-	if(savchatact.cmd[0])
-		i|=WIN_PUT;
-	SETHELP(WHERE);
-/*
-Multinode Chat Actions:
-
-This is a list of the configured multinode chat actions.  The users can
-use these actions in multinode chat by turning on action commands with
-the /A command in multinode chat.  Then if a line is typed which
-begins with a valid action command and has a user name, chat handle,
-or node number following, the output string will be displayed replacing
-the %s symbols with the sending user's name and the receiving user's
-name (in that order).
-
-To add an action, select the desired location with the arrow keys and
-hit  INS .
-
-To delete an action, select it with the arrow keys and hit  DEL .
-
-To configure an action, select it with the arrow keys and hit  ENTER .
-*/
-	sprintf(str,"%s Chat Actions",actset[setnum]->name);
-	i=ulist(i,0,0,70,&chatact_dflt,&chatact_bar,str,opt);
-	savnum=3;
-	if((signed)i==-1)
-		return;
-	if((i&MSK_ON)==MSK_INS) {
-		i&=MSK_OFF;
-		SETHELP(WHERE);
-/*
-Chat Action Command:
-
-This is the command word (normally a verb) to trigger the action output.
-*/
-		if(uinput(WIN_MID|WIN_SAV,0,0,"Action Command",cmd,LEN_CHATACTCMD
-			,K_UPPER)<1)
-            continue;
-		SETHELP(WHERE);
-/*
-Chat Action Output String:
-
-This is the output string displayed with this action output.
-*/
-		if(uinput(WIN_MID|WIN_SAV,0,0,"",out,LEN_CHATACTOUT
-			,K_MSG)<1)
-            continue;
-		if((chatact=(chatact_t **)REALLOC(chatact
-            ,sizeof(chatact_t *)*(total_chatacts+1)))==NULL) {
-            errormsg(WHERE,ERR_ALLOC,nulstr,total_chatacts+1);
-			total_chatacts=0;
-			bail(1);
-            continue; }
-		if(j)
-			for(n=total_chatacts;n>chatnum[i];n--)
-				chatact[n]=chatact[n-1];
-		if((chatact[chatnum[i]]=(chatact_t *)MALLOC(sizeof(chatact_t)))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(chatact_t));
-			continue; }
-		memset((chatact_t *)chatact[chatnum[i]],0,sizeof(chatact_t));
-		strcpy(chatact[chatnum[i]]->cmd,cmd);
-		strcpy(chatact[chatnum[i]]->out,out);
-		chatact[chatnum[i]]->actset=setnum;
-		total_chatacts++;
-		changes=1;
-		continue; }
-	if((i&MSK_ON)==MSK_DEL) {
-		i&=MSK_OFF;
-		FREE(chatact[chatnum[i]]);
-		total_chatacts--;
-		for(j=chatnum[i];j<total_chatacts && j<MAX_OPTS;j++)
-			chatact[j]=chatact[j+1];
-		changes=1;
-		continue; }
-	if((i&MSK_ON)==MSK_GET) {
-		i&=MSK_OFF;
-		savchatact=*chatact[chatnum[i]];
-		continue; }
-	if((i&MSK_ON)==MSK_PUT) {
-		i&=MSK_OFF;
-		*chatact[chatnum[i]]=savchatact;
-		chatact[chatnum[i]]->actset=setnum;
-		changes=1;
-        continue; }
-	SETHELP(WHERE);
-/*
-Chat Action Command:
-
-This is the command that triggers this chat action.
-*/
-	strcpy(str,chatact[chatnum[i]]->cmd);
-	if(!uinput(WIN_MID|WIN_SAV,0,10,"Chat Action Command"
-		,chatact[chatnum[i]]->cmd,LEN_CHATACTCMD,K_EDIT|K_UPPER)) {
-		strcpy(chatact[chatnum[i]]->cmd,str);
-		continue; }
-	SETHELP(WHERE);
-/*
-Chat Action Output String:
-
-This is the output string that results from this chat action.
-*/
-	strcpy(str,chatact[chatnum[i]]->out);
-	if(!uinput(WIN_MID|WIN_SAV,0,10,""
-		,chatact[chatnum[i]]->out,LEN_CHATACTOUT,K_EDIT|K_MSG))
-		strcpy(chatact[chatnum[i]]->out,str); }
-}
-
-void guru_cfg()
-{
-	static int guru_dflt,guru_bar,opt_dflt;
-	char str[81],code[9],done=0,*p;
-	int j,k;
-	uint i;
-	static guru_t savguru;
-
-while(1) {
-	for(i=0;i<total_gurus && i<MAX_OPTS;i++)
-		sprintf(opt[i],"%-25s",guru[i]->name);
-	opt[i][0]=0;
-	savnum=0;
-	j=WIN_ACT|WIN_SAV|WIN_RHT|WIN_BOT;
-	if(total_gurus)
-		j|=WIN_DEL|WIN_GET;
-	if(total_gurus<MAX_OPTS)
-		j|=WIN_INS|WIN_INSACT|WIN_XTR;
-	if(savguru.name[0])
-		j|=WIN_PUT;
-	SETHELP(WHERE);
-/*
-Gurus:
-
-This is a list of the configured Gurus.
-
-To add a Guru, select the desired location with the arrow keys and
-hit  INS .
-
-To delete a Guru, select it with the arrow keys and hit  DEL .
-
-To configure a Guru, select it with the arrow keys and hit  ENTER .
-*/
-	i=ulist(j,0,0,45,&guru_dflt,&guru_bar,"Artificial Gurus",opt);
-	if((signed)i==-1)
-		return;
-	if((i&MSK_ON)==MSK_INS) {
-		i&=MSK_OFF;
-		SETHELP(WHERE);
-/*
-Guru Name:
-
-This is the name of the selected Guru.
-*/
-		if(uinput(WIN_MID|WIN_SAV,0,0,"Guru Name",str,25
-			,0)<1)
-            continue;
-		sprintf(code,"%.8s",str);
-		p=strchr(code,SP);
-		if(p) *p=0;
-        strupr(code);
-		SETHELP(WHERE);
-/*
-Guru Internal Code:
-
-Every Guru must have its own unique code for Synchronet to refer to
-it internally. This code is usually an abreviation of the Guru name.
-*/
-		if(uinput(WIN_MID|WIN_SAV,0,0,"Internal Code"
-			,code,8,K_EDIT|K_UPPER)<1)
-			continue;
-		if(!code_ok(code)) {
-			helpbuf=invalid_code;
-			umsg("Invalid Code");
-			helpbuf=0;
-            continue; }
-		if((guru=(guru_t **)REALLOC(guru,sizeof(guru_t *)*(total_gurus+1)))
-            ==NULL) {
-			errormsg(WHERE,ERR_ALLOC,nulstr,total_gurus+1);
-			total_gurus=0;
-			bail(1);
-            continue; }
-		if(total_gurus)
-			for(j=total_gurus;j>i;j--)
-				guru[j]=guru[j-1];
-		if((guru[i]=(guru_t *)MALLOC(sizeof(guru_t)))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(guru_t));
-			continue; }
-		memset((guru_t *)guru[i],0,sizeof(guru_t));
-		strcpy(guru[i]->name,str);
-		strcpy(guru[i]->code,code);
-		total_gurus++;
-		changes=1;
-		continue; }
-	if((i&MSK_ON)==MSK_DEL) {
-		i&=MSK_OFF;
-		FREE(guru[i]);
-		total_gurus--;
-		for(j=i;j<total_gurus;j++)
-			guru[j]=guru[j+1];
-		changes=1;
-		continue; }
-	if((i&MSK_ON)==MSK_GET) {
-		i&=MSK_OFF;
-		savguru=*guru[i];
-		continue; }
-	if((i&MSK_ON)==MSK_PUT) {
-		i&=MSK_OFF;
-		*guru[i]=savguru;
-		changes=1;
-        continue; }
-    j=0;
-	done=0;
-	while(!done) {
-		k=0;
-		sprintf(opt[k++],"%-27.27s%s","Guru Name",guru[i]->name);
-		sprintf(opt[k++],"%-27.27s%s","Guru Internal Code",guru[i]->code);
-		sprintf(opt[k++],"%-27.27s%.40s","Access Requirements",guru[i]->ar);
-		opt[k][0]=0;
-		savnum=1;
-		SETHELP(WHERE);
-/*
-Guru Configuration:
-
-This menu is for configuring the selected Guru.
-*/
-		switch(ulist(WIN_ACT|WIN_MID|WIN_SAV,0,0,60,&opt_dflt,0,guru[i]->name
-			,opt)) {
-			case -1:
-				done=1;
-				break;
-			case 0:
-				SETHELP(WHERE);
-/*
-Guru Name:
-
-This is the name of the selected Guru.
-*/
-				strcpy(str,guru[i]->name);
-				if(!uinput(WIN_MID|WIN_SAV,0,10,"Guru Name"
-					,guru[i]->name,25,K_EDIT))
-					strcpy(guru[i]->name,str);
-				break;
-			case 1:
-SETHELP(WHERE);
-/*
-Guru Internal Code:
-
-Every Guru must have its own unique code for Synchronet to refer to
-it internally. This code is usually an abreviation of the Guru name.
-*/
-				strcpy(str,guru[i]->code);
-				if(!uinput(WIN_MID|WIN_SAV,0,0,"Guru Internal Code"
-					,str,8,K_EDIT|K_UPPER))
-					break;
-				if(code_ok(str))
-					strcpy(guru[i]->code,str);
-				else {
-					helpbuf=invalid_code;
-					umsg("Invalid Code");
-                    helpbuf=0; }
-				break;
-			case 2:
-				savnum=2;
-				getar(guru[i]->name,guru[i]->ar);
-				break; } } }
-}
-
-void actsets_cfg()
-{
-    static int actset_dflt,actset_bar,opt_dflt;
-    char str[81];
-    int j,k,done;
-    uint i;
-    static actset_t savactset;
-
-while(1) {
-	for(i=0;i<total_actsets && i<MAX_OPTS;i++)
-		sprintf(opt[i],"%-25s",actset[i]->name);
-	opt[i][0]=0;
-	j=WIN_ACT|WIN_RHT|WIN_BOT|WIN_SAV;
-	savnum=0;
-    if(total_actsets)
-        j|=WIN_DEL|WIN_GET;
-	if(total_actsets<MAX_OPTS)
-        j|=WIN_INS|WIN_INSACT|WIN_XTR;
-    if(savactset.name[0])
-        j|=WIN_PUT;
-    SETHELP(WHERE);
-/*
-Chat Action Sets:
-
-This is a list of the configured action sets.
-
-To add an action set, select the desired location with the arrow keys and
-hit  INS .
-
-To delete an action set, select it with the arrow keys and hit  DEL .
-
-To configure an action set, select it with the arrow keys and hit  ENTER .
-*/
-	i=ulist(j,0,0,45,&actset_dflt,&actset_bar,"Chat Action Sets",opt);
-	if((signed)i==-1)
-		return;
-	if((i&MSK_ON)==MSK_INS) {
-		i&=MSK_OFF;
-        SETHELP(WHERE);
-/*
-Chat Action Set Name:
-
-This is the name of the selected chat action set.
-*/
-		if(uinput(WIN_MID|WIN_SAV,0,0,"Chat Action Set Name",str,25
-			,0)<1)
-            continue;
-        if((actset=(actset_t **)REALLOC(actset,sizeof(actset_t *)*(total_actsets+1)))
-            ==NULL) {
-            errormsg(WHERE,ERR_ALLOC,nulstr,total_actsets+1);
-			total_actsets=0;
-			bail(1);
-            continue; }
-        if(total_actsets)
-            for(j=total_actsets;j>i;j--)
-                actset[j]=actset[j-1];
-        if((actset[i]=(actset_t *)MALLOC(sizeof(actset_t)))==NULL) {
-            errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(actset_t));
-            continue; }
-		memset((actset_t *)actset[i],0,sizeof(actset_t));
-        strcpy(actset[i]->name,str);
-        total_actsets++;
-        changes=1;
-        continue; }
-	if((i&MSK_ON)==MSK_DEL) {
-		i&=MSK_OFF;
-        FREE(actset[i]);
-        total_actsets--;
-        for(j=i;j<total_actsets;j++)
-            actset[j]=actset[j+1];
-        changes=1;
-        continue; }
-	if((i&MSK_ON)==MSK_GET) {
-		i&=MSK_OFF;
-        savactset=*actset[i];
-        continue; }
-	if((i&MSK_ON)==MSK_PUT) {
-		i&=MSK_OFF;
-        *actset[i]=savactset;
-        changes=1;
-        continue; }
-    j=0;
-    done=0;
-    while(!done) {
-        k=0;
-        sprintf(opt[k++],"%-27.27s%s","Action Set Name",actset[i]->name);
-        sprintf(opt[k++],"%-27.27s","Configure Chat Actions...");
-		opt[k][0]=0;
-        SETHELP(WHERE);
-/*
-Chat Action Set Configuration:
-
-This menu is for configuring the selected chat action set.
-*/
-		sprintf(str,"%s Chat Action Set",actset[i]->name);
-		savnum=1;
-		switch(ulist(WIN_ACT|WIN_MID|WIN_SAV,0,0,60,&opt_dflt,0,str
-            ,opt)) {
-            case -1:
-                done=1;
-                break;
-            case 0:
-                SETHELP(WHERE);
-/*
-Chat Action Set Name:
-
-This is the name of the selected action set.
-*/
-                strcpy(str,actset[i]->name);
-				if(!uinput(WIN_MID|WIN_SAV,0,10,"Action Set Name"
-                    ,actset[i]->name,25,K_EDIT))
-                    strcpy(actset[i]->name,str);
-                break;
-            case 1:
-                chatact_cfg(i);
-                break; } } }
-}
-
diff --git a/src/sbbs2/scfg/scfgmdm.c b/src/sbbs2/scfg/scfgmdm.c
deleted file mode 100644
index 08a91e08bc..0000000000
--- a/src/sbbs2/scfg/scfgmdm.c
+++ /dev/null
@@ -1,295 +0,0 @@
-/* SCFGMDM.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "scfg.h"
-
-int exec_mdm(char *fname);
-
-void mdm_cfg(int mdmnum)
-{
-
-FREE(mdm_result);
-mdm_result=NULL;
-
-/*
-strcpy(mdm_answ,"ATA");
-strcpy(mdm_hang,"ATH");
-strcpy(mdm_dial,"ATDT");
-strcpy(mdm_offh,"ATM0H1");
-strcpy(mdm_term,"ATE1V1");
-strcpy(mdm_init,"AT&FS0=0S2=128E0V0X4&C1&D2");
-*/
-mdm_answ[0]=0;
-mdm_hang[0]=0;
-mdm_dial[0]=0;
-mdm_offh[0]=0;
-mdm_term[0]=0;
-mdm_init[0]=0;
-mdm_spec[0]=0;
-mdm_results=0;
-mdm_misc=(MDM_RTS|MDM_CTS);
-
-exec_mdm(mdm_file[mdmnum]);
-
-}
-
-void cvttab(char *str)
-{
-	int i;
-
-for(i=0;str[i];i++)
-	if(str[i]==TAB)
-		str[i]=SP;
-}
-
-int export_mdm(char *fname)
-{
-	char str[256];
-	int file,i;
-	time_t now;
-	FILE *stream;
-
-sprintf(str,"%s%s.MDM",ctrl_dir,fname);
-if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1)
-	return(0);
-if((stream=fdopen(file,"wb"))==NULL) {
-    close(file);
-	return(0); }
-
-now=time(NULL);
-fprintf(stream,"# Exported from %s Node %u on %.24s\r\n\r\n"
-	,sys_name,node_num,ctime(&now));
-fprintf(stream,"COM_RATE\t%ld\r\n",com_rate);
-fprintf(stream,"INIT_STR\t%s\r\n",mdm_init);
-fprintf(stream,"DIAL_STR\t%s\r\n",mdm_dial);
-fprintf(stream,"HANGUP_STR\t%s\r\n",mdm_hang);
-fprintf(stream,"ANSWER_STR\t%s\r\n",mdm_answ);
-fprintf(stream,"OFFHOOK_STR\t%s\r\n",mdm_offh);
-fprintf(stream,"SPEC_INIT\t%s\r\n",mdm_spec);
-fprintf(stream,"TERM_INIT\t%s\r\n",mdm_term);
-fprintf(stream,"LOCKED_RATE\t%s\r\n",(mdm_misc&MDM_STAYHIGH) ? "YES":"NO");
-fprintf(stream,"CALLER_ID\t%s\r\n",(mdm_misc&MDM_CALLERID) ? "YES":"NO");
-fprintf(stream,"DROP_DTR\t%s\r\n",(mdm_misc&MDM_NODTR) ? "NO":"YES");
-fprintf(stream,"FLOW_CONTROL\t%s\r\n"
-	,(mdm_misc&(MDM_RTS|MDM_CTS)==(MDM_RTS|MDM_CTS)) ? "BOTH":
-	(mdm_misc&MDM_CTS) ? "TRANSMIT" : (mdm_misc&MDM_RTS) ? "RECEIVE" : "NONE");
-for(i=0;i<mdm_results;i++)
-	fprintf(stream,"RESULT\t\t%u\t%u\t%u\t%s\r\n",mdm_result[i].code
-		,mdm_result[i].cps,mdm_result[i].rate,mdm_result[i].str);
-
-fclose(stream);
-
-return(1);
-}
-
-int exec_mdm(char *fname)
-{
-	char str[256],msg[128],*p;
-	int file,i,j;
-	FILE *stream;
-
-sprintf(str,"%s%s.MDM",ctrl_dir,fname);
-
-if((file=open(str,O_RDONLY|O_BINARY|O_DENYALL))==-1)
-	return(0);
-if((stream=fdopen(file,"rb"))==NULL) {
-    close(file);
-    return(0); }
-
-while(!feof(stream)) {
-	if(!fgets(str,255,stream))
-		break;
-	cvttab(str);
-    truncsp(str);
-	p=str;
-	while(*p && *p<=SP)   /* look for beginning of command */
-		p++;
-	if(!*p)
-		continue;
-	if(*p=='#')             /* remarks start with # */
-        continue;
-
-	if(!strnicmp(p,"COM_RATE",8)) {
-		p+=8;
-		while(*p==SP) p++;
-		com_rate=atol(p);
-		continue; }
-
-	if(!strnicmp(p,"INIT_STR",8)) {
-		p+=8;
-		while(*p==SP) p++;
-		sprintf(mdm_init,"%.63s",p);
-        continue; }
-
-	if(!strnicmp(p,"DIAL_STR",8)) {
-		p+=8;
-		while(*p==SP) p++;
-		sprintf(mdm_dial,"%.63s",p);
-        continue; }
-
-	if(!strnicmp(p,"HANGUP_STR",10)) {
-		p+=10;
-		while(*p==SP) p++;
-		sprintf(mdm_hang,"%.63s",p);
-        continue; }
-
-	if(!strnicmp(p,"ANSWER_STR",10)) {
-		p+=10;
-		while(*p==SP) p++;
-		sprintf(mdm_answ,"%.63s",p);
-        continue; }
-
-	if(!strnicmp(p,"OFFHOOK_STR",11)) {
-		p+=11;
-		while(*p==SP) p++;
-		sprintf(mdm_offh,"%.63s",p);
-        continue; }
-
-	if(!strnicmp(p,"SPEC_INIT",9)) {
-		p+=9;
-		while(*p==SP) p++;
-		sprintf(mdm_spec,"%.63s",p);
-        continue; }
-
-	if(!strnicmp(p,"TERM_INIT",9)) {
-		p+=9;
-		while(*p==SP) p++;
-		sprintf(mdm_term,"%.63s",p);
-        continue; }
-
-	if(!strnicmp(p,"LOCKED_RATE",11)) {
-		p+=11;
-		while(*p==SP) p++;
-		if(!stricmp(p,"OFF") || !stricmp(p,"NO"))
-			mdm_misc&=~MDM_STAYHIGH;
-		else
-			mdm_misc|=MDM_STAYHIGH;
-        continue; }
-
-	if(!strnicmp(p,"CALLER_ID",9)) {
-		p+=9;
-		while(*p==SP) p++;
-		if(!stricmp(p,"YES") || !stricmp(p,"ON"))
-			mdm_misc|=MDM_CALLERID;
-		else
-			mdm_misc&=~MDM_CALLERID;
-        continue; }
-
-	if(!strnicmp(p,"VERBAL_RESULTS",14)) {
-		p+=14;
-		while(*p==SP) p++;
-		if(!stricmp(p,"YES") || !stricmp(p,"ON"))
-			mdm_misc|=MDM_VERBAL;
-		else
-			mdm_misc&=~MDM_VERBAL;
-        continue; }
-
-	if(!strnicmp(p,"DROP_DTR",8)) {
-		p+=8;
-		while(*p==SP) p++;
-		if(!stricmp(p,"OFF") || !stricmp(p,"NO"))
-			mdm_misc|=MDM_NODTR;
-		else
-			mdm_misc&=~MDM_NODTR;
-        continue; }
-
-	if(!strnicmp(p,"FLOW_CONTROL",12)) {
-		p+=12;
-		while(*p==SP) p++;
-		mdm_misc&=~(MDM_RTS|MDM_CTS);
-		strupr(p);
-		if(strstr(p,"RTS") || strstr(p,"RECEIVE") || strstr(p,"RECV")
-			|| strstr(p,"BOTH"))
-			mdm_misc|=MDM_RTS;
-		if(strstr(p,"CTS") || strstr(p,"TRANSMIT") || strstr(p,"SEND")
-			|| strstr(p,"BOTH"))
-			mdm_misc|=MDM_CTS;
-        continue; }
-
-	if(!strnicmp(p,"RESULT ",7)) {
-		p+=7;
-		while(*p==SP) p++;
-		i=atoi(p);
-		for(j=0;j<mdm_results;j++)
-			if(mdm_result[j].code==i)
-				break;
-		if(j>=mdm_results) {
-			if((mdm_result=(mdm_result_t *)REALLOC(
-				mdm_result,sizeof(mdm_result_t)
-				*(mdm_results+1)))==NULL) {
-				errormsg(WHERE,ERR_ALLOC,p,mdm_results+1);
-				mdm_results=0;
-				bail(1);
-				continue; }
-			mdm_results++; }
-		mdm_result[j].code=i;
-		while(*p!=SP) p++;
-		while(*p==SP) p++;
-		mdm_result[j].cps=atoi(p);
-		while(*p!=SP) p++;
-        while(*p==SP) p++;
-		mdm_result[j].rate=atoi(p);
-		while(*p!=SP) p++;
-        while(*p==SP) p++;
-		sprintf(mdm_result[j].str,"%.*s",LEN_MODEM,p);
-		continue; }
-
-	if(!strnicmp(p,"INCLUDE ",8)) {
-		p+=8;
-		while(*p==SP) p++;
-		exec_mdm(p);
-		continue; }
-
-	sprintf(msg,"ERROR: '%.15s' in %.8s.MDM",p,fname);
-	savnum--;
-	umsg(msg);
-	savnum++; }
-
-fclose(stream);
-return(1);
-}
-
-
-void init_mdms()
-{
-	char str[128],fname[128];
-	int file;
-	FILE *stream;
-
-mdm_types=0;
-mdm_type=NULL;
-mdm_file=NULL;
-sprintf(str,"%sMDMS.IXT",ctrl_dir);
-if((file=nopen(str,O_RDONLY))==-1) {
-	errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-	return; }
-if((stream=fdopen(file,"rb"))==NULL) {
-	close(file);
-	errormsg(WHERE,ERR_FDOPEN,str,O_RDONLY);
-	return; }
-
-while(!feof(stream)) {
-	if(!fgets(str,120,stream))
-        break;
-	truncsp(str);
-	if(!fgets(fname,120,stream))
-		break;
-	truncsp(fname);
-	if((mdm_type=REALLOC(mdm_type,sizeof(char *)*(mdm_types+1)))==NULL) {
-		errormsg(WHERE,ERR_ALLOC,"Modem Type",sizeof(char *)*(mdm_types+1));
-		break; }
-	if((mdm_file=REALLOC(mdm_file,sizeof(char *)*(mdm_types+1)))==NULL) {
-		errormsg(WHERE,ERR_ALLOC,"Modem File",sizeof(char *)*(mdm_types+1));
-        break; }
-	if((mdm_type[mdm_types]=MALLOC(strlen(str)+1))==NULL) {
-		errormsg(WHERE,ERR_ALLOC,"Modem Typename",sizeof(char *)*(mdm_types+1));
-        break; }
-	if((mdm_file[mdm_types]=MALLOC(9))==NULL) {
-		errormsg(WHERE,ERR_ALLOC,"Modem Filename",sizeof(char *)*(mdm_types+1));
-        break; }
-	strcpy(mdm_type[mdm_types],str);
-	sprintf(mdm_file[mdm_types],"%.8s",fname);
-	mdm_types++; }
-fclose(stream);
-}
diff --git a/src/sbbs2/scfg/scfgmsg.c b/src/sbbs2/scfg/scfgmsg.c
deleted file mode 100644
index f090fc70cd..0000000000
--- a/src/sbbs2/scfg/scfgmsg.c
+++ /dev/null
@@ -1,1337 +0,0 @@
-#line 2 "SCFGMSG.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "scfg.h"
-
-/****************************************************************************/
-/* Converts when_t.zone into ASCII format									*/
-/****************************************************************************/
-char *zonestr(short zone)
-{
-	static char str[32];
-
-switch((ushort)zone) {
-	case 0: 	return("UT");
-	case AST:	return("AST");
-	case EST:	return("EST");
-	case CST:	return("CST");
-	case MST:	return("MST");
-	case PST:	return("PST");
-	case YST:	return("YST");
-	case HST:	return("HST");
-	case BST:	return("BST");
-	case ADT:	return("ADT");
-	case EDT:	return("EDT");
-	case CDT:	return("CDT");
-	case MDT:	return("MDT");
-	case PDT:	return("PDT");
-	case YDT:	return("YDT");
-	case HDT:	return("HDT");
-	case BDT:	return("BDT");
-	case MID:	return("MID");
-	case VAN:	return("VAN");
-	case EDM:	return("EDM");
-	case WIN:	return("WIN");
-	case BOG:	return("BOG");
-	case CAR:	return("CAR");
-	case RIO:	return("RIO");
-	case FER:	return("FER");
-	case AZO:	return("AZO");
-	case LON:	return("LON");
-	case BER:	return("BER");
-	case ATH:	return("ATH");
-	case MOS:	return("MOS");
-	case DUB:	return("DUB");
-	case KAB:	return("KAB");
-	case KAR:	return("KAR");
-	case BOM:	return("BOM");
-	case KAT:	return("KAT");
-	case DHA:	return("DHA");
-	case BAN:	return("BAN");
-	case HON:	return("HON");
-	case TOK:	return("TOK");
-	case SYD:	return("SYD");
-	case NOU:	return("NOU");
-	case WEL:	return("WEL");
-	}
-
-sprintf(str,"%02hd:%02hu",zone/60,zone<0 ? (-zone)%60 : zone%60);
-return(str);
-}
-
-char *utos(char *str)
-{
-	static char out[128];
-	int i;
-
-for(i=0;str[i];i++)
-	if(str[i]=='_')
-		out[i]=SP;
-	else
-		out[i]=str[i];
-out[i]=0;
-return(out);
-}
-
-char *stou(char *str)
-{
-	static char out[128];
-	int i;
-
-for(i=0;str[i];i++)
-	if(str[i]==SP)
-		out[i]='_';
-	else
-		out[i]=str[i];
-out[i]=0;
-return(out);
-}
-
-
-
-void clearptrs(int subnum)
-{
-	char str[256];
-	ushort idx,ch;
-	int last,file,i;
-	long l=0L;
-	struct ffblk ff;
-
-upop("Clearing Pointers...");
-sprintf(str,"%sUSER\\PTRS\\*.IXB",data_dir);
-last=findfirst(str,&ff,0);
-while(!last) {
-	if(ff.ff_fsize>=((long)sub[subnum]->ptridx+1L)*10L) {
-		sprintf(str,"%sUSER\\PTRS\\%s",data_dir,ff.ff_name);
-		if((file=nopen(str,O_WRONLY))==-1) {
-			errormsg(WHERE,ERR_OPEN,str,O_WRONLY);
-			bail(1); }
-		while(filelength(file)<(long)(sub[subnum]->ptridx)*10) {
-			lseek(file,0L,SEEK_END);
-			idx=tell(file)/10;
-			for(i=0;i<total_subs;i++)
-				if(sub[i]->ptridx==idx)
-					break;
-			write(file,&l,4);
-			write(file,&l,4);
-			ch=0xff;			/* default to scan ON for unknown sub */
-			if(i<total_subs) {
-				if(!(sub[i]->misc&SUB_NSDEF))
-					ch&=~5;
-				if(!(sub[i]->misc&SUB_SSDEF))
-					ch&=~2; }
-			write(file,&ch,2); }
-		lseek(file,((long)sub[subnum]->ptridx)*10L,SEEK_SET);
-		write(file,&l,4);	/* date set to null */
-		write(file,&l,4);	/* date set to null */
-		ch=0xff;
-		if(!(sub[subnum]->misc&SUB_NSDEF))
-			ch&=~5;
-		if(!(sub[subnum]->misc&SUB_SSDEF))
-			ch&=~2;
-		write(file,&ch,2);
-		close(file); }
-	last=findnext(&ff); }
-upop(0);
-}
-
-void msgs_cfg()
-{
-	static int dflt,msgs_dflt,bar;
-	char str[256],str2[256],done=0,*p;
-	int j,k,q,s;
-	int i,file,ptridx,n;
-	long ported;
-	sub_t tmpsub;
-	static grp_t savgrp;
-	FILE *stream;
-
-while(1) {
-	for(i=0;i<total_grps && i<MAX_OPTS;i++)
-		sprintf(opt[i],"%-25s",grp[i]->lname);
-	opt[i][0]=0;
-	j=WIN_ORG|WIN_ACT|WIN_CHE;
-	if(total_grps)
-		j|=WIN_DEL|WIN_DELACT|WIN_GET;
-	if(total_grps<MAX_OPTS)
-		j|=WIN_INS|WIN_INSACT|WIN_XTR;
-	if(savgrp.sname[0])
-		j|=WIN_PUT;
-	SETHELP(WHERE);
-/*
-Message Groups:
-
-This is a listing of message groups for your BBS. Message groups are
-used to logically separate your message sub-boards into groups. Every
-sub-board belongs to a message group. You must have at least one message
-group and one sub-board configured.
-
-One popular use for message groups is to separate local sub-boards and
-networked sub-boards. One might have a Local message group that contains
-non-networked sub-boards of various topics and also have a FidoNet
-message group that contains sub-boards that are echoed across FidoNet.
-Some sysops separate sub-boards into more specific areas such as Main,
-Technical, or Adult. If you have many sub-boards that have a common
-subject denominator, you may want to have a separate message group for
-those sub-boards for a more organized message structure.
-*/
-	i=ulist(j,0,0,45,&msgs_dflt,&bar,"Message Groups",opt);
-	savnum=0;
-	if(i==-1) {
-		j=save_changes(WIN_MID);
-		if(j==-1)
-		   continue;
-		if(!j)
-			write_msgs_cfg();
-		return; }
-	if((i&MSK_ON)==MSK_INS) {
-		i&=MSK_OFF;
-		SETHELP(WHERE);
-/*
-Group Long Name:
-
-This is a description of the message group which is displayed when a
-user of the system uses the /* command from the main menu.
-*/*/
-		strcpy(str,"Main");
-		if(uinput(WIN_MID|WIN_SAV,0,0,"Group Long Name",str,LEN_GLNAME
-			,K_EDIT)<1)
-			continue;
-		SETHELP(WHERE);
-/*
-Group Short Name:
-
-This is a short description of the message group which is used for the
-main menu and reading message prompts.
-*/
-		sprintf(str2,"%.*s",LEN_GSNAME,str);
-		if(uinput(WIN_MID,0,0,"Group Short Name",str2,LEN_GSNAME,K_EDIT)<1)
-			continue;
-		if((grp=(grp_t **)REALLOC(grp,sizeof(grp_t *)*(total_grps+1)))==NULL) {
-            errormsg(WHERE,ERR_ALLOC,nulstr,total_grps+1);
-			total_grps=0;
-			bail(1);
-            continue; }
-
-		if(total_grps) {	/* was total_subs (?) */
-            for(j=total_grps;j>i;j--)   /* insert above */
-                grp[j]=grp[j-1];
-            for(j=0;j<total_subs;j++)   /* move sub group numbers */
-                if(sub[j]->grp>=i)
-                    sub[j]->grp++; }
-
-		if((grp[i]=(grp_t *)MALLOC(sizeof(grp_t)))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(grp_t));
-			continue; }
-		memset((grp_t *)grp[i],0,sizeof(grp_t));
-		strcpy(grp[i]->lname,str);
-		strcpy(grp[i]->sname,str2);
-		total_grps++;
-		changes=1;
-		continue; }
-	if((i&MSK_ON)==MSK_DEL) {
-		i&=MSK_OFF;
-		SETHELP(WHERE);
-/*
-Delete All Data in Group:
-
-If you wish to delete the messages in all the sub-boards in this group,
-select Yes.
-*/
-		j=1;
-		strcpy(opt[0],"Yes");
-		strcpy(opt[1],"No");
-		opt[2][0]=0;
-		j=ulist(WIN_MID|WIN_SAV,0,0,0,&j,0,"Delete All Data in Group",opt);
-		if(j==-1)
-			continue;
-		if(j==0)
-			for(j=0;j<total_subs;j++)
-				if(sub[j]->grp==i) {
-					sprintf(str,"%s.s*",sub[j]->code);
-					if(!sub[j]->data_dir[0])
-						sprintf(tmp,"%sSUBS\\",data_dir);
-					else
-						strcpy(tmp,sub[j]->data_dir);
-					delfiles(tmp,str);
-					clearptrs(j); }
-		FREE(grp[i]);
-		for(j=0;j<total_subs;) {
-			if(sub[j]->grp==i) {	/* delete subs of this group */
-				FREE(sub[j]);
-				total_subs--;
-				k=j;
-				while(k<total_subs) {	/* move all subs down */
-					sub[k]=sub[k+1];
-					for(q=0;q<total_qhubs;q++)
-						for(s=0;s<qhub[q]->subs;s++)
-							if(qhub[q]->sub[s]==k)
-								qhub[q]->sub[s]--;
-					k++; } }
-			else j++; }
-		for(j=0;j<total_subs;j++)	/* move sub group numbers down */
-			if(sub[j]->grp>i)
-				sub[j]->grp--;
-		total_grps--;
-		while(i<total_grps) {
-			grp[i]=grp[i+1];
-			i++; }
-		changes=1;
-		continue; }
-	if((i&MSK_ON)==MSK_GET) {
-		i&=MSK_OFF;
-		savgrp=*grp[i];
-		continue; }
-	if((i&MSK_ON)==MSK_PUT) {
-		i&=MSK_OFF;
-		*grp[i]=savgrp;
-		changes=1;
-		continue; }
-	done=0;
-	while(!done) {
-		j=0;
-		sprintf(opt[j++],"%-27.27s%s","Long Name",grp[i]->lname);
-		sprintf(opt[j++],"%-27.27s%s","Short Name",grp[i]->sname);
-		sprintf(opt[j++],"%-27.27s%.40s","Access Requirements"
-			,grp[i]->ar);
-		strcpy(opt[j++],"Clone Options");
-		strcpy(opt[j++],"Export Areas...");
-		strcpy(opt[j++],"Import Areas...");
-		strcpy(opt[j++],"Message Sub-boards...");
-		opt[j][0]=0;
-		sprintf(str,"%s Group",grp[i]->sname);
-		savnum=0;
-		SETHELP(WHERE);
-/*
-Message Group Configuration:
-
-This menu allows you to configure the security requirements for access
-to this message group. You can also add, delete, and configure the
-sub-boards of this group by selecting the Messages Sub-boards... option.
-*/
-		switch(ulist(WIN_ACT,6,4,60,&dflt,0,str,opt)) {
-			case -1:
-				done=1;
-				break;
-			case 0:
-				SETHELP(WHERE);
-/*
-Group Long Name:
-
-This is a description of the message group which is displayed when a
-user of the system uses the /* command from the main menu.
-*/*/
-				strcpy(str,grp[i]->lname);	/* save incase setting to null */
-				if(!uinput(WIN_MID|WIN_SAV,0,17,"Name to use for Listings"
-					,grp[i]->lname,LEN_GLNAME,K_EDIT))
-					strcpy(grp[i]->lname,str);
-				break;
-			case 1:
-				SETHELP(WHERE);
-/*
-Group Short Name:
-
-This is a short description of the message group which is used for
-main menu and reading messages prompts.
-*/
-				uinput(WIN_MID|WIN_SAV,0,17,"Name to use for Prompts"
-					,grp[i]->sname,LEN_GSNAME,K_EDIT);
-				break;
-			case 2:
-				sprintf(str,"%s Group",grp[i]->sname);
-				getar(str,grp[i]->ar);
-				break;
-			case 3: 	/* Clone Options */
-				j=0;
-				strcpy(opt[0],"Yes");
-				strcpy(opt[1],"No");
-				opt[2][0]=0;
-				SETHELP(WHERE);
-/*
-Clone Sub-board Options:
-
-If you want to clone the options of the first sub-board of this group
-into all sub-boards of this group, select Yes.
-
-The options cloned are posting requirements, reading requirements,
-operator requirments, moderated user requirments, toggle options,
-network options (including EchoMail origin line, EchoMail address,
-and QWK Network tagline), maximum number of messages, maximum number
-of CRCs, maximum age of messages, storage method, and data directory.
-*/
-				j=ulist(WIN_MID|WIN_SAV,0,0,0,&j,0
-					,"Clone Options of First Sub-board into All of Group",opt);
-				if(j==0) {
-					k=-1;
-					for(j=0;j<total_subs;j++)
-						if(sub[j]->grp==i) {
-							if(k==-1)
-								k=j;
-							else {
-								changes=1;
-								sub[j]->misc=(sub[k]->misc|SUB_HDRMOD);
-								strcpy(sub[j]->post_ar,sub[k]->post_ar);
-								strcpy(sub[j]->read_ar,sub[k]->read_ar);
-								strcpy(sub[j]->op_ar,sub[k]->op_ar);
-								strcpy(sub[j]->mod_ar,sub[k]->mod_ar);
-								strcpy(sub[j]->origline,sub[k]->origline);
-								strcpy(sub[j]->tagline,sub[k]->tagline);
-								strcpy(sub[j]->data_dir,sub[k]->data_dir);
-								strcpy(sub[j]->echomail_sem
-									,sub[k]->echomail_sem);
-								sub[j]->maxmsgs=sub[k]->maxmsgs;
-								sub[j]->maxcrcs=sub[k]->maxcrcs;
-								sub[j]->maxage=sub[k]->maxage;
-
-								sub[j]->faddr=sub[k]->faddr; } } }
-				break;
-			case 4:
-				k=0;
-				ported=0;
-				q=changes;
-				strcpy(opt[k++],"SUBS.TXT    (Synchronet)");
-				strcpy(opt[k++],"AREAS.BBS   (MSG)");
-				strcpy(opt[k++],"AREAS.BBS   (SMB)");
-				strcpy(opt[k++],"AREAS.BBS   (SBBSECHO)");
-				strcpy(opt[k++],"FIDONET.NA  (Fido)");
-				opt[k][0]=0;
-				SETHELP(WHERE);
-/*
-Export Area File Format:
-
-This menu allows you to choose the format of the area file you wish to
-export the current message group into.
-*/
-				k=0;
-				k=ulist(WIN_MID|WIN_SAV,0,0,0,&k,0
-					,"Export Area File Format",opt);
-				if(k==-1)
-					break;
-				if(k==0)
-					sprintf(str,"%sSUBS.TXT",ctrl_dir);
-				else if(k==1 || k==2)
-					sprintf(str,"AREAS.BBS");
-				else if(k==3)
-					sprintf(str,"%sAREAS.BBS",data_dir);
-				else if(k==4)
-					sprintf(str,"FIDONET.NA");
-				strupr(str);
-				if(k && k<4)
-					if(uinput(WIN_MID|WIN_SAV,0,0,"Uplinks"
-						,str2,40,K_UPPER)<=0) {
-						changes=q;
-						break; }
-				if(uinput(WIN_MID|WIN_SAV,0,0,"Filename"
-					,str,40,K_UPPER|K_EDIT)<=0) {
-					changes=q;
-					break; }
-				if(fexist(str)) {
-					strcpy(opt[0],"Overwrite");
-					strcpy(opt[1],"Append");
-					opt[2][0]=0;
-					j=0;
-					j=ulist(WIN_MID|WIN_SAV,0,0,0,&j,0
-						,"File Exists",opt);
-					if(j==-1)
-						break;
-					if(j==0) j=O_WRONLY|O_TRUNC;
-					else	 j=O_WRONLY|O_APPEND; }
-				else
-					j=O_WRONLY|O_CREAT;
-				if((stream=fnopen(&file,str,j))==NULL) {
-					umsg("Open Failure");
-					break; }
-				upop("Exporting Areas...");
-				for(j=0;j<total_subs;j++) {
-					if(sub[j]->grp!=i)
-						continue;
-					ported++;
-					if(k==1) {		/* AREAS.BBS *.MSG */
-						if(!sub[j]->echopath[0])
-							sprintf(str,"%s%s\\",echomail_dir,sub[j]->code);
-						else
-							strcpy(str,sub[j]->echopath);
-						fprintf(stream,"%-30s %-20s %s\r\n"
-							,str,stou(sub[j]->sname),str2);
-						continue; }
-					if(k==2) {		/* AREAS.BBS SMB */
-						if(!sub[j]->data_dir[0])
-							sprintf(str,"%sSUBS\\%s",data_dir,sub[j]->code);
-						else
-							sprintf(str,"%s%s",sub[j]->data_dir,sub[j]->code);
-						fprintf(stream,"%-30s %-20s %s\r\n"
-							,str,stou(sub[j]->sname),str2);
-                        continue; }
-					if(k==3) {		/* AREAS.BBS SBBSECHO */
-						fprintf(stream,"%-30s %-20s %s\r\n"
-							,sub[j]->code,stou(sub[j]->sname),str2);
-						continue; }
-					if(k==4) {		/* FIDONET.NA */
-						fprintf(stream,"%-20s %s\r\n"
-							,stou(sub[j]->sname),sub[j]->lname);
-						continue; }
-					fprintf(stream,"%s\r\n%s\r\n%s\r\n%s\r\n%s\r\n%s\r\n"
-							"%s\r\n%s\r\n%s\r\n"
-						,sub[j]->lname
-						,sub[j]->sname
-						,sub[j]->qwkname
-						,sub[j]->code
-						,sub[j]->data_dir
-						,sub[j]->ar
-						,sub[j]->read_ar
-						,sub[j]->post_ar
-						,sub[j]->op_ar
-						);
-					fprintf(stream,"%lX\r\n%s\r\n%s\r\n%s\r\n%s\r\n%s\r\n"
-						,sub[j]->misc
-						,sub[j]->tagline
-						,sub[j]->origline
-						,sub[j]->echomail_sem
-						,sub[j]->echopath
-						,faddrtoa(sub[j]->faddr)
-						);
-					fprintf(stream,"%lu\r\n%lu\r\n%u\r\n%u\r\n%s\r\n"
-						,sub[j]->maxmsgs
-						,sub[j]->maxcrcs
-						,sub[j]->maxage
-						,sub[j]->ptridx
-						,sub[j]->mod_ar
-						);
-					fprintf(stream,"***END-OF-SUB***\r\n\r\n"); }
-				fclose(stream);
-				upop(0);
-				sprintf(str,"%lu Message Areas Exported Successfully",ported);
-				umsg(str);
-				changes=q;
-				break;
-			case 5:
-				ported=0;
-				k=0;
-				strcpy(opt[k++],"SUBS.TXT    (Synchronet)");
-				strcpy(opt[k++],"AREAS.BBS   (MSG)");
-				strcpy(opt[k++],"AREAS.BBS   (SMB)");
-				strcpy(opt[k++],"AREAS.BBS   (SBBSECHO)");
-				strcpy(opt[k++],"FIDONET.NA  (Fido)");
-				opt[k][0]=0;
-				SETHELP(WHERE);
-/*
-Import Area File Format:
-
-This menu allows you to choose the format of the area file you wish to
-import into the current message group.
-*/
-				k=0;
-				k=ulist(WIN_MID|WIN_SAV,0,0,0,&k,0
-					,"Import Area File Format",opt);
-				if(k==-1)
-					break;
-				if(k==0)
-					sprintf(str,"%sSUBS.TXT",ctrl_dir);
-				else if(k==1 || k==2)
-					sprintf(str,"AREAS.BBS");
-				else if(k==3)
-					sprintf(str,"%sAREAS.BBS",data_dir);
-				else if(k==4)
-					sprintf(str,"FIDONET.NA");
-				strupr(str);
-				if(uinput(WIN_MID|WIN_SAV,0,0,"Filename"
-					,str,40,K_UPPER|K_EDIT)<=0)
-                    break;
-				if((stream=fnopen(&file,str,O_RDONLY))==NULL) {
-					umsg("Open Failure");
-                    break; }
-				upop("Importing Areas...");
-				while(!feof(stream)) {
-					if(!fgets(str,128,stream)) break;
-					truncsp(str);
-					if(!str[0])
-						continue;
-					if(k) {
-						p=str;
-						while(*p && *p<=SP) p++;
-						if(!*p || *p==';')
-							continue;
-						memset(&tmpsub,0,sizeof(sub_t));
-						tmpsub.misc|=
-							(SUB_FIDO|SUB_NAME|SUB_TOUSER|SUB_QUOTE|SUB_HYPER);
-						if(k==1) {		/* AREAS.BBS *.MSG */
-							p=strrchr(str,'\\');
-                            if(p) *p=0;
-                            else p=str;
-							sprintf(tmpsub.echopath,"%.*s",LEN_DIR,str);
-							p++;
-							sprintf(tmpsub.code,"%.8s",p);
-							while(*p && *p<=SP) p++;
-							sprintf(tmpsub.sname,"%.*s",LEN_SSNAME,p);
-							p=strchr(tmpsub.sname,SP);
-							if(p) *p=0;
-							strcpy(tmpsub.sname,utos(tmpsub.sname));
-							sprintf(tmpsub.lname,"%.*s",LEN_SLNAME
-								,tmpsub.sname);
-							sprintf(tmpsub.qwkname,"%.*s",10
-                                ,tmpsub.sname);
-							}
-						if(k==2) {		/* AREAS.BBS SMB */
-							p=strrchr(str,'\\');
-                            if(p) *p=0;
-                            else p=str;
-							sprintf(tmpsub.data_dir,"%.*s",LEN_DIR,str);
-							p++;
-							sprintf(tmpsub.code,"%.8s",p);
-							while(*p && *p<=SP) p++;
-							sprintf(tmpsub.sname,"%.*s",LEN_SSNAME,p);
-							p=strchr(tmpsub.sname,SP);
-							if(p) *p=0;
-							strcpy(tmpsub.sname,utos(tmpsub.sname));
-							sprintf(tmpsub.lname,"%.*s",LEN_SLNAME
-								,tmpsub.sname);
-							sprintf(tmpsub.qwkname,"%.*s",10
-                                ,tmpsub.sname);
-                            }
-						else if(k==3) { /* AREAS.BBS SBBSECHO */
-							p=str;
-							while(*p && *p>SP) p++;
-							*p=0;
-							sprintf(tmpsub.code,"%.8s",str);
-							p++;
-							while(*p && *p<=SP) p++;
-							sprintf(tmpsub.sname,"%.*s",LEN_SSNAME,p);
-							p=strchr(tmpsub.sname,SP);
-							if(p) *p=0;
-							strcpy(tmpsub.sname,utos(tmpsub.sname));
-							sprintf(tmpsub.lname,"%.*s",LEN_SLNAME
-								,tmpsub.sname);
-							sprintf(tmpsub.qwkname,"%.*s",10
-                                ,tmpsub.sname);
-							}
-						else if(k==4) { /* FIDONET.NA */
-                            p=str;
-							while(*p && *p>SP) p++;
-							*p=0;
-							sprintf(tmpsub.code,"%.8s",str);
-							sprintf(tmpsub.sname,"%.*s",LEN_SSNAME,utos(str));
-							sprintf(tmpsub.qwkname,"%.10s",tmpsub.sname);
-							p++;
-							while(*p && *p<=SP) p++;
-							sprintf(tmpsub.lname,"%.*s",LEN_SLNAME,p);
-							}
-						ported++; }
-					else {
-						memset(&tmpsub,0,sizeof(sub_t));
-						tmpsub.grp=i;
-						sprintf(tmpsub.lname,"%.*s",LEN_SLNAME,str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						sprintf(tmpsub.sname,"%.*s",LEN_SSNAME,str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						sprintf(tmpsub.qwkname,"%.*s",10,str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						sprintf(tmpsub.code,"%.*s",8,str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						sprintf(tmpsub.data_dir,"%.*s",LEN_DIR,str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						sprintf(tmpsub.ar,"%.*s",LEN_ARSTR,str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						sprintf(tmpsub.read_ar,"%.*s",LEN_ARSTR,str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						sprintf(tmpsub.post_ar,"%.*s",LEN_ARSTR,str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						sprintf(tmpsub.op_ar,"%.*s",LEN_ARSTR,str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						tmpsub.misc=ahtoul(str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						sprintf(tmpsub.tagline,"%.*s",80,str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						sprintf(tmpsub.origline,"%.*s",50,str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						sprintf(tmpsub.echomail_sem,"%.*s",LEN_DIR,str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						sprintf(tmpsub.echopath,"%.*s",LEN_DIR,str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						tmpsub.faddr=atofaddr(str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						tmpsub.maxmsgs=atol(str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						tmpsub.maxcrcs=atol(str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						tmpsub.maxage=atoi(str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						tmpsub.ptridx=atoi(str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						sprintf(tmpsub.mod_ar,"%.*s",LEN_ARSTR,str);
-
-						ported++;
-						while(!feof(stream)
-							&& strcmp(str,"***END-OF-SUB***")) {
-							if(!fgets(str,128,stream)) break;
-							truncsp(str); } }
-
-					truncsp(tmpsub.code);
-					truncsp(tmpsub.sname);
-					truncsp(tmpsub.lname);
-					truncsp(tmpsub.qwkname);
-					for(j=0;j<total_subs;j++) {
-						if(sub[j]->grp!=i)
-							continue;
-						if(!stricmp(sub[j]->code,tmpsub.code))
-							break; }
-					if(j==total_subs) {
-
-						if((sub=(sub_t **)REALLOC(sub
-							,sizeof(sub_t *)*(total_subs+1)))==NULL) {
-							errormsg(WHERE,ERR_ALLOC,nulstr,total_subs+1);
-							total_subs=0;
-							bail(1);
-							break; }
-
-						for(ptridx=0;ptridx>-1;ptridx++) {
-							for(n=0;n<total_subs;n++)
-								if(sub[n]->ptridx==ptridx)
-									break;
-							if(n==total_subs)
-								break; }
-
-						if((sub[j]=(sub_t *)MALLOC(sizeof(sub_t)))
-							==NULL) {
-							errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(sub_t));
-							break; }
-						memset(sub[j],0,sizeof(sub_t)); }
-					if(!k)
-						memcpy(sub[j],&tmpsub,sizeof(sub_t));
-					else {
-                        sub[j]->grp=i;
-						if(total_faddrs)
-							sub[j]->faddr=faddr[0];
-						strcpy(sub[j]->code,tmpsub.code);
-						strcpy(sub[j]->sname,tmpsub.sname);
-						strcpy(sub[j]->lname,tmpsub.lname);
-						strcpy(sub[j]->qwkname,tmpsub.qwkname);
-						strcpy(sub[j]->echopath,tmpsub.echopath);
-						strcpy(sub[j]->data_dir,tmpsub.data_dir);
-						if(j==total_subs)
-							sub[j]->maxmsgs=1000;
-						}
-					if(j==total_subs) {
-						sub[j]->ptridx=ptridx;
-						sub[j]->misc=tmpsub.misc;
-						total_subs++; }
-					changes=1; }
-				fclose(stream);
-				upop(0);
-				sprintf(str,"%lu Message Areas Imported Successfully",ported);
-                umsg(str);
-				break;
-
-			case 6:
-                sub_cfg(i);
-				break; } } }
-
-}
-
-void msg_opts()
-{
-	char str[128],*p;
-	static int msg_dflt;
-	int i,j;
-
-	while(1) {
-		i=0;
-		sprintf(opt[i++],"%-33.33s%s"
-			,"BBS ID for QWK Packets",sys_id);
-		sprintf(opt[i++],"%-33.33s%s"
-			,"Local Time Zone",zonestr(sys_timezone));
-		sprintf(opt[i++],"%-33.33s%u seconds"
-			,"Maximum Retry Time",smb_retry_time);
-		if(max_qwkmsgs)
-			sprintf(str,"%lu",max_qwkmsgs);
-		else
-			sprintf(str,"Unlimited");
-		sprintf(opt[i++],"%-33.33s%s"
-			,"Maximum QWK Messages",str);
-		sprintf(opt[i++],"%-33.33s%s","Pre-pack QWK Requirements",preqwk_ar);
-		if(mail_maxage)
-			sprintf(str,"Enabled (%u days old)",mail_maxage);
-        else
-            strcpy(str,"Disabled");
-		sprintf(opt[i++],"%-33.33s%s","Purge E-mail by Age",str);
-		if(sys_misc&SM_DELEMAIL)
-			strcpy(str,"Immediately");
-		else
-			strcpy(str,"Daily");
-		sprintf(opt[i++],"%-33.33s%s","Purge Deleted E-mail",str);
-		if(mail_maxcrcs)
-			sprintf(str,"Enabled (%lu mail CRCs)",mail_maxcrcs);
-		else
-			strcpy(str,"Disabled");
-		sprintf(opt[i++],"%-33.33s%s","Duplicate E-mail Checking",str);
-		sprintf(opt[i++],"%-33.33s%s","Allow Anonymous E-mail"
-			,sys_misc&SM_ANON_EM ? "Yes" : "No");
-		sprintf(opt[i++],"%-33.33s%s","Allow Quoting in E-mail"
-			,sys_misc&SM_QUOTE_EM ? "Yes" : "No");
-		sprintf(opt[i++],"%-33.33s%s","Allow Uploads in E-mail"
-			,sys_misc&SM_FILE_EM ? "Yes" : "No");
-		sprintf(opt[i++],"%-33.33s%s","Allow Forwarding to NetMail"
-			,sys_misc&SM_FWDTONET ? "Yes" : "No");
-		sprintf(opt[i++],"%-33.33s%s","Kill Read E-mail"
-			,sys_misc&SM_DELREADM ? "Yes" : "No");
-		sprintf(opt[i++],"%-33.33s%s","Users Can View Deleted Messages"
-			,sys_misc&SM_USRVDELM ? "Yes" : sys_misc&SM_SYSVDELM
-				? "Sysops Only":"No");
-		strcpy(opt[i++],"Extra Attribute Codes...");
-		opt[i][0]=0;
-		savnum=0;
-		SETHELP(WHERE);
-/*
-Message Options:
-
-This is a menu of system-wide message related options. Messages include
-E-mail and public posts (on sub-boards).
-*/
-
-		switch(ulist(WIN_ORG|WIN_ACT|WIN_MID|WIN_CHE,0,0,72,&msg_dflt,0
-			,"Message Options",opt)) {
-			case -1:
-				i=save_changes(WIN_MID);
-				if(i==-1)
-				   continue;
-				if(!i) {
-					write_msgs_cfg();
-					write_main_cfg(); }
-				return;
-			case 0:
-				strcpy(str,sys_id);
-				SETHELP(WHERE);
-/*
-BBS ID for QWK Packets:
-
-This is a short system ID for your BBS that is used for QWK packets.
-It should be an abbreviation of your BBS name or other related string.
-This ID will be used for your outgoing and incoming QWK packets. If
-you plan on networking via QWK packets with another Synchronet BBS,
-this ID should not begin with a number. The maximum length of the ID
-is eight characters and cannot contain spaces or other invalid DOS
-filename characters. In a QWK packet network, each system must have
-a unique QWK system ID.
-*/
-
-				uinput(WIN_MID|WIN_SAV,0,0,"BBS ID for QWK Packets"
-					,str,8,K_EDIT|K_UPPER);
-				if(code_ok(str))
-					strcpy(sys_id,str);
-				else
-					umsg("Invalid ID");
-				break;
-			case 1:
-				strcpy(opt[0],"Yes");
-				strcpy(opt[1],"No");
-				opt[2][0]=0;
-				i=0;
-				SETHELP(WHERE);
-/*
-United States Time Zone:
-
-If your local time zone is the United States, select Yes.
-*/
-
-				i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-					,"United States Time Zone",opt);
-				if(i==-1)
-					break;
-				if(i==0) {
-					strcpy(opt[i++],"Atlantic");
-					strcpy(opt[i++],"Eastern");
-					strcpy(opt[i++],"Central");
-					strcpy(opt[i++],"Mountain");
-					strcpy(opt[i++],"Pacific");
-					strcpy(opt[i++],"Yukon");
-					strcpy(opt[i++],"Hawaii/Alaska");
-					strcpy(opt[i++],"Bering");
-					opt[i][0]=0;
-					i=0;
-					i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-						,"Time Zone",opt);
-					if(i==-1)
-						break;
-					changes=1;
-					switch(i) {
-						case 0:
-							sys_timezone=AST;
-							break;
-						case 1:
-							sys_timezone=EST;
-							break;
-						case 2:
-							sys_timezone=CST;
-                            break;
-						case 3:
-							sys_timezone=MST;
-                            break;
-						case 4:
-							sys_timezone=PST;
-                            break;
-						case 5:
-							sys_timezone=YST;
-                            break;
-						case 6:
-							sys_timezone=HST;
-                            break;
-						case 7:
-							sys_timezone=BST;
-							break; }
-					strcpy(opt[0],"Yes");
-					strcpy(opt[1],"No");
-					opt[2][0]=0;
-					i=1;
-					i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-						,"Daylight Savings",opt);
-					if(i==-1)
-                        break;
-					if(!i)
-						sys_timezone|=DAYLIGHT;
-					break; }
-				i=0;
-				strcpy(opt[i++],"Midway");
-				strcpy(opt[i++],"Vancouver");
-				strcpy(opt[i++],"Edmonton");
-				strcpy(opt[i++],"Winnipeg");
-				strcpy(opt[i++],"Bogota");
-				strcpy(opt[i++],"Caracas");
-				strcpy(opt[i++],"Rio de Janeiro");
-				strcpy(opt[i++],"Fernando de Noronha");
-				strcpy(opt[i++],"Azores");
-				strcpy(opt[i++],"London");
-				strcpy(opt[i++],"Berlin");
-				strcpy(opt[i++],"Athens");
-				strcpy(opt[i++],"Moscow");
-				strcpy(opt[i++],"Dubai");
-				strcpy(opt[i++],"Kabul");
-				strcpy(opt[i++],"Karachi");
-				strcpy(opt[i++],"Bombay");
-				strcpy(opt[i++],"Kathmandu");
-				strcpy(opt[i++],"Dhaka");
-				strcpy(opt[i++],"Bangkok");
-				strcpy(opt[i++],"Hong Kong");
-				strcpy(opt[i++],"Tokyo");
-				strcpy(opt[i++],"Sydney");
-				strcpy(opt[i++],"Noumea");
-				strcpy(opt[i++],"Wellington");
-				strcpy(opt[i++],"Other...");
-				opt[i][0]=0;
-				i=0;
-				i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-					,"Time Zone",opt);
-				if(i==-1)
-					break;
-				changes=1;
-				switch(i) {
-					case 0:
-						sys_timezone=MID;
-						break;
-					case 1:
-						sys_timezone=VAN;
-						break;
-					case 2:
-						sys_timezone=EDM;
-						break;
-					case 3:
-						sys_timezone=WIN;
-						break;
-					case 4:
-						sys_timezone=BOG;
-						break;
-					case 5:
-						sys_timezone=CAR;
-						break;
-					case 6:
-						sys_timezone=RIO;
-						break;
-					case 7:
-						sys_timezone=FER;
-						break;
-					case 8:
-						sys_timezone=AZO;
-                        break;
-					case 9:
-						sys_timezone=LON;
-                        break;
-					case 10:
-						sys_timezone=BER;
-                        break;
-					case 11:
-						sys_timezone=ATH;
-                        break;
-					case 12:
-						sys_timezone=MOS;
-                        break;
-					case 13:
-						sys_timezone=DUB;
-                        break;
-					case 14:
-						sys_timezone=KAB;
-                        break;
-					case 15:
-						sys_timezone=KAR;
-                        break;
-					case 16:
-						sys_timezone=BOM;
-                        break;
-					case 17:
-						sys_timezone=KAT;
-                        break;
-					case 18:
-						sys_timezone=DHA;
-                        break;
-					case 19:
-						sys_timezone=BAN;
-                        break;
-					case 20:
-						sys_timezone=HON;
-                        break;
-					case 21:
-						sys_timezone=TOK;
-                        break;
-					case 22:
-						sys_timezone=SYD;
-                        break;
-					case 23:
-						sys_timezone=NOU;
-                        break;
-					case 24:
-						sys_timezone=WEL;
-                        break;
-					default:
-						if(sys_timezone>720 || sys_timezone<-720)
-							sys_timezone=0;
-						sprintf(str,"%02d:%02d"
-							,sys_timezone/60,sys_timezone<0
-							? (-sys_timezone)%60 : sys_timezone%60);
-						uinput(WIN_MID|WIN_SAV,0,0
-							,"Time (HH:MM) East (+) or West (-) of Universal "
-								"Time"
-							,str,6,K_EDIT|K_UPPER);
-						sys_timezone=atoi(str)*60;
-						p=strchr(str,':');
-						if(p) {
-							if(sys_timezone<0)
-								sys_timezone-=atoi(p+1);
-							else
-								sys_timezone+=atoi(p+1); }
-                        break;
-						}
-                break;
-			case 2:
-				SETHELP(WHERE);
-/*
-Maximum Message Base Retry Time:
-
-This is the maximum number of seconds to allow while attempting to open
-or lock a message base (a value in the range of 10 to 45 seconds should
-be fine).
-*/
-				itoa(smb_retry_time,str,10);
-				uinput(WIN_MID|WIN_SAV,0,0
-					,"Maximum Message Base Retry Time (in seconds)"
-					,str,2,K_NUMBER|K_EDIT);
-				smb_retry_time=atoi(str);
-				break;
-			case 3:
-				SETHELP(WHERE);
-/*
-Maximum Messages Per QWK Packet:
-
-This is the maximum number of messages (excluding E-mail), that a user
-can have in one QWK packet for download. This limit does not effect
-QWK network nodes (Q restriction). If set to 0, no limit is imposed.
-*/
-
-				ultoa(max_qwkmsgs,str,10);
-				uinput(WIN_MID|WIN_SAV,0,0
-					,"Maximum Messages Per QWK Packet (0=No Limit)"
-					,str,6,K_NUMBER|K_EDIT);
-				max_qwkmsgs=atol(str);
-                break;
-			case 4:
-				SETHELP(WHERE);
-/*
-Pre-pack QWK Requirements:
-
-ALL user accounts on the BBS meeting this requirmenet will have a QWK
-packet automatically created for them every day after midnight
-(during the internal daily event).
-
-This is mainly intended for QWK network nodes that wish to save connect
-time by having their packets pre-packed. If a large number of users meet
-this requirement, it can take up a large amount of disk space on your
-system (in the DATA\FILE directory).
-*/
-				getar("Pre-pack QWK (Use with caution!)",preqwk_ar);
-				break;
-			case 5:
-				sprintf(str,"%u",mail_maxage);
-                SETHELP(WHERE);
-/*
-Maximum Age of Mail:
-
-This value is the maximum number of days that mail will be kept.
-*/
-                uinput(WIN_MID|WIN_SAV,0,17,"Maximum Age of Mail "
-                    "(in days)",str,5,K_EDIT|K_NUMBER);
-                mail_maxage=atoi(str);
-                break;
-			case 6:
-				strcpy(opt[0],"Daily");
-				strcpy(opt[1],"Immediately");
-				opt[2][0]=0;
-				i=0;
-				SETHELP(WHERE);
-/*
-Purge Deleted E-mail:
-
-If you wish to have deleted e-mail physically (and permanently) removed
-from your e-mail database immediately after a users exits the reading
-e-mail prompt, set this option to Immediately.
-
-For the best system performance and to avoid delays when deleting e-mail
-from a large e-mail database, set this option to Daily (the default).
-Your system maintenance will automatically purge deleted e-mail once a
-day.
-*/
-
-				i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-					,"Purge Deleted E-mail",opt);
-				if(!i && sys_misc&SM_DELEMAIL) {
-					sys_misc&=~SM_DELEMAIL;
-					changes=1; }
-				else if(i==1 && !(sys_misc&SM_DELEMAIL)) {
-					sys_misc|=SM_DELEMAIL;
-					changes=1; }
-                break;
-			case 7:
-				sprintf(str,"%lu",mail_maxcrcs);
-                SETHELP(WHERE);
-/*
-Maximum Number of Mail CRCs:
-
-This value is the maximum number of CRCs that will be kept for duplicate
-mail checking. Once this maximum number of CRCs is reached, the oldest
-CRCs will be automatically purged.
-*/
-                uinput(WIN_MID|WIN_SAV,0,17,"Maximum Number of Mail "
-                    "CRCs",str,5,K_EDIT|K_NUMBER);
-                mail_maxcrcs=atol(str);
-                break;
-			case 8:
-				strcpy(opt[0],"Yes");
-				strcpy(opt[1],"No");
-				opt[2][0]=0;
-				i=1;
-				SETHELP(WHERE);
-/*
-Allow Anonymous E-mail:
-
-If you want users with the A exemption to be able to send E-mail
-anonymously, set this option to Yes.
-*/
-
-				i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-					,"Allow Anonymous E-mail",opt);
-				if(!i && !(sys_misc&SM_ANON_EM)) {
-					sys_misc|=SM_ANON_EM;
-					changes=1; }
-				else if(i==1 && sys_misc&SM_ANON_EM) {
-					sys_misc&=~SM_ANON_EM;
-					changes=1; }
-				break;
-			case 9:
-				strcpy(opt[0],"Yes");
-				strcpy(opt[1],"No");
-				opt[2][0]=0;
-				i=0;
-				SETHELP(WHERE);
-/*
-Allow Quoting in E-mail:
-
-If you want your users to be allowed to use message quoting when
-responding in E-mail, set this option to Yes.
-*/
-
-				i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-					,"Allow Quoting in E-mail",opt);
-				if(!i && !(sys_misc&SM_QUOTE_EM)) {
-					sys_misc|=SM_QUOTE_EM;
-					changes=1; }
-				else if(i==1 && sys_misc&SM_QUOTE_EM) {
-					sys_misc&=~SM_QUOTE_EM;
-					changes=1; }
-				break;
-			case 10:
-				strcpy(opt[0],"Yes");
-				strcpy(opt[1],"No");
-				opt[2][0]=0;
-				i=0;
-				SETHELP(WHERE);
-/*
-Allow File Attachment Uploads in E-mail:
-
-If you want your users to be allowed to attach an uploaded file to
-an E-mail message, set this option to Yes.
-*/
-
-				i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-					,"Allow File Attachment Uploads in E-mail",opt);
-				if(!i && !(sys_misc&SM_FILE_EM)) {
-					sys_misc|=SM_FILE_EM;
-					changes=1; }
-				else if(i==1 && sys_misc&SM_FILE_EM) {
-					sys_misc&=~SM_FILE_EM;
-					changes=1; }
-				break;
-			case 11:
-				strcpy(opt[0],"Yes");
-				strcpy(opt[1],"No");
-				opt[2][0]=0;
-				i=0;
-				SETHELP(WHERE);
-/*
-Allow Users to Have Their E-mail Forwarded to NetMail:
-
-If you want your users to be able to have any e-mail sent to them
-optionally (at the sender's discretion) forwarded to a NetMail address,
-set this option to Yes.
-*/
-
-				i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-					,"Allow Forwarding of E-mail to NetMail",opt);
-				if(!i && !(sys_misc&SM_FWDTONET)) {
-					sys_misc|=SM_FWDTONET;
-					changes=1; }
-				else if(i==1 && sys_misc&SM_FWDTONET) {
-					sys_misc&=~SM_FWDTONET;
-					changes=1; }
-                break;
-			case 12:
-				strcpy(opt[0],"Yes");
-				strcpy(opt[1],"No");
-				opt[2][0]=0;
-				i=1;
-				SETHELP(WHERE);
-/*
-Kill Read E-mail Automatically:
-
-If this option is set to Yes, e-mail that has been read will be
-automatically deleted when message base maintenance is run.
-*/
-
-				i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-					,"Kill Read E-mail Automatically",opt);
-				if(!i && !(sys_misc&SM_DELREADM)) {
-					sys_misc|=SM_DELREADM;
-					changes=1; }
-				else if(i==1 && sys_misc&SM_DELREADM) {
-					sys_misc&=~SM_DELREADM;
-					changes=1; }
-                break;
-			case 13:
-				strcpy(opt[0],"Yes");
-				strcpy(opt[1],"No");
-				strcpy(opt[2],"Sysops Only");
-				opt[3][0]=0;
-				i=1;
-				SETHELP(WHERE);
-/*
-Users Can View Deleted Messages:
-
-If this option is set to Yes, then users will be able to view messages
-they've sent and deleted or messages sent to them and they've deleted
-with the option of un-deleting the message before the message is
-physically purged from the e-mail database.
-
-If this option is set to No, then when a message is deleted, it is no
-longer viewable (with SBBS) by anyone.
-
-If this option is set to Sysops Only, then only sysops and sub-ops (when
-appropriate) can view deleted messages.
-*/
-
-				i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-					,"Users Can View Deleted Messages",opt);
-				if(!i && (sys_misc&(SM_USRVDELM|SM_SYSVDELM))
-					!=(SM_USRVDELM|SM_SYSVDELM)) {
-					sys_misc|=(SM_USRVDELM|SM_SYSVDELM);
-					changes=1; }
-				else if(i==1 && sys_misc&(SM_USRVDELM|SM_SYSVDELM)) {
-					sys_misc&=~(SM_USRVDELM|SM_SYSVDELM);
-					changes=1; }
-				else if(i==2 && (sys_misc&(SM_USRVDELM|SM_SYSVDELM))
-					!=SM_SYSVDELM) {
-					sys_misc|=SM_SYSVDELM;
-					sys_misc&=~SM_USRVDELM;
-					changes=1; }
-                break;
-			case 14:
-				SETHELP(WHERE);
-/*
-Extra Attribute Codes...
-
-Synchronet can suppport the native text attribute codes of other BBS
-programs in messages (menus, posts, e-mail, etc.) To enable the extra
-attribute codes for another BBS program, set the corresponding option
-to Yes.
-*/
-
-				j=0;
-				while(1) {
-					i=0;
-					sprintf(opt[i++],"%-15.15s %-3.3s","WWIV"
-						,sys_misc&SM_WWIV ? "Yes":"No");
-					sprintf(opt[i++],"%-15.15s %-3.3s","PCBoard"
-						,sys_misc&SM_PCBOARD ? "Yes":"No");
-					sprintf(opt[i++],"%-15.15s %-3.3s","Wildcat"
-						,sys_misc&SM_WILDCAT ? "Yes":"No");
-					sprintf(opt[i++],"%-15.15s %-3.3s","Celerity"
-						,sys_misc&SM_CELERITY ? "Yes":"No");
-					sprintf(opt[i++],"%-15.15s %-3.3s","Renegade"
-						,sys_misc&SM_RENEGADE ? "Yes":"No");
-					opt[i][0]=0;
-					j=ulist(WIN_BOT|WIN_RHT|WIN_SAV,2,2,0,&j,0
-						,"Extra Attribute Codes",opt);
-					if(j==-1)
-						break;
-
-					changes=1;
-					switch(j) {
-						case 0:
-							sys_misc^=SM_WWIV;
-							break;
-						case 1:
-							sys_misc^=SM_PCBOARD;
-							break;
-						case 2:
-							sys_misc^=SM_WILDCAT;
-							break;
-						case 3:
-							sys_misc^=SM_CELERITY;
-							break;
-						case 4:
-							sys_misc^=SM_RENEGADE;
-							break; } } } }
-}
diff --git a/src/sbbs2/scfg/scfgnet.c b/src/sbbs2/scfg/scfgnet.c
deleted file mode 100644
index d645ab7c9f..0000000000
--- a/src/sbbs2/scfg/scfgnet.c
+++ /dev/null
@@ -1,1457 +0,0 @@
-#line 2 "SCFGNET.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "scfg.h"
-
-char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
-
-char *daystr(char days);
-
-
-void qhub_edit(int num);
-void phub_edit(int num);
-char *daystr(char days);
-void qhub_sub_edit(uint num);
-
-/****************************************************************************/
-/* Returns the FidoNet address kept in str as ASCII.                        */
-/****************************************************************************/
-faddr_t atofaddr(char *str)
-{
-    char *p;
-    faddr_t addr;
-
-addr.zone=addr.net=addr.node=addr.point=0;
-if((p=strchr(str,':'))!=NULL) {
-    addr.zone=atoi(str);
-    addr.net=atoi(p+1); }
-else {
-    if(total_faddrs)
-		addr.zone=faddr[0].zone;
-    else
-        addr.zone=1;
-    addr.net=atoi(str); }
-if(!addr.zone)              /* no such thing as zone 0 */
-    addr.zone=1;
-if((p=strchr(str,'/'))!=NULL)
-    addr.node=atoi(p+1);
-else {
-    if(total_faddrs)
-		addr.net=faddr[0].net;
-    else
-        addr.net=1;
-    addr.node=atoi(str); }
-if((p=strchr(str,'.'))!=NULL)
-    addr.point=atoi(p+1);
-return(addr);
-}
-
-/****************************************************************************/
-/* Returns an ASCII string for FidoNet address 'addr'                       */
-/****************************************************************************/
-char *faddrtoa(faddr_t addr)
-{
-    static char str[25];
-    char point[25];
-
-sprintf(str,"%u:%u/%u",addr.zone,addr.net,addr.node);
-if(addr.point) {
-    sprintf(point,".%u",addr.point);
-    strcat(str,point); }
-return(str);
-}
-
-
-uint getsub()
-{
-	static int grp_dflt,sub_dflt,grp_bar,sub_bar;
-	char str[81];
-	int i,j,k;
-	uint subnum[MAX_OPTS+1];
-
-while(1) {
-	for(i=0;i<total_grps && i<MAX_OPTS;i++)
-		sprintf(opt[i],"%-25s",grp[i]->lname);
-	opt[i][0]=0;
-	i=ulist(WIN_SAV|WIN_RHT|WIN_BOT,0,0,45,&grp_dflt,&grp_bar
-		,"Message Groups"
-		,opt);
-	if(i==-1)
-		return(-1);
-	for(j=k=0;j<total_subs && k<MAX_OPTS;j++)
-		if(sub[j]->grp==i) {
-			sprintf(opt[k],"%-25s",sub[j]->lname);
-			subnum[k++]=j; }
-	opt[k][0]=0;
-	sprintf(str,"%s Sub-boards",grp[i]->sname);
-	j=ulist(WIN_RHT|WIN_BOT|WIN_SAV,0,0,45,&sub_dflt,&sub_bar,str,opt);
-	if(j==-1)
-		continue;
-	return(subnum[j]); }
-
-}
-
-void net_cfg()
-{
-	static	int net_dflt,qnet_dflt,pnet_dflt,fnet_dflt,inet_dflt
-			,qhub_dflt,phub_dflt;
-	char	str[81],done,*p;
-	int 	i,j,k,l,m,n;
-
-while(1) {
-	i=0;
-	strcpy(opt[i++],"QWK Packet Networks");
-	strcpy(opt[i++],"FidoNet EchoMail and NetMail");
-	strcpy(opt[i++],"PostLink Networks");
-	strcpy(opt[i++],"Internet NetMail");
-	opt[i][0]=0;
-	SETHELP(WHERE);
-/*
-Configure Networks:
-
-This is the network configuration menu. Select the type of network
-technology that you want to configure.
-*/
-	i=ulist(WIN_ORG|WIN_ACT|WIN_CHE,0,0,0,&net_dflt,0,"Networks",opt);
-	if(i==0) {	/* QWK net stuff */
-		done=0;
-		while(!done) {
-			i=0;
-			strcpy(opt[i++],"Network Hubs...");
-			strcpy(opt[i++],"Default Tagline");
-			opt[i][0]=0;
-			SETHELP(WHERE);
-/*
-QWK Packet Networks:
-
-From this menu you can configure the default tagline to use for
-outgoing messages on QWK networked sub-boards, or you can select
-Network Hubs... to add, delete, or configure QWK hubs that your system
-calls to exchange packets with.
-*/
-			i=ulist(WIN_ACT|WIN_RHT|WIN_BOT|WIN_CHE,0,0,0,&qnet_dflt,0
-				,"QWK Packet Networks",opt);
-			savnum=0;
-			switch(i) {
-				case -1:	/* ESC */
-					done=1;
-					break;
-				case 1:
-					SETHELP(WHERE);
-/*
-QWK Network Default Tagline:
-
-This is the default tagline to use for outgoing messages on QWK
-networked sub-boards. This default can be overridden on a per sub-board
-basis with the sub-board configuration Network Options....
-*/
-					uinput(WIN_MID|WIN_SAV,0,0,nulstr
-						,qnet_tagline,63,K_MSG|K_EDIT);
-					break;
-				case 0:
-					while(1) {
-						for(i=0;i<total_qhubs && i<MAX_OPTS;i++)
-							sprintf(opt[i],"%-8.8s",qhub[i]->id);
-						opt[i][0]=0;
-						i=WIN_ACT|WIN_RHT|WIN_SAV;
-						if(total_qhubs<MAX_OPTS)
-							i|=WIN_INS|WIN_INSACT|WIN_XTR;
-						if(total_qhubs)
-							i|=WIN_DEL;
-						savnum=0;
-						SETHELP(WHERE);
-/*
-QWK Network Hubs:
-
-This is a list of QWK network hubs that your system calls to exchange
-packets with.
-
-To add a hub, select the desired location with the arrow keys and hit
- INS .
-
-To delete a hub, select it and hit  DEL .
-
-To configure a hub, select it and hit  ENTER .
-*/
-						i=ulist(i,0,0,0,&qhub_dflt,0
-							,"QWK Network Hubs",opt);
-						if(i==-1)
-							break;
-						if((i&MSK_ON)==MSK_INS) {
-							i&=MSK_OFF;
-							if((qhub=(qhub_t **)REALLOC(qhub
-                                ,sizeof(qhub_t *)*(total_qhubs+1)))==NULL) {
-                                errormsg(WHERE,ERR_ALLOC,nulstr
-                                    ,sizeof(qhub_t *)*(total_qhubs+1));
-								total_qhubs=0;
-								bail(1);
-                                continue; }
-
-							savnum=1;
-							SETHELP(WHERE);
-/*
-QWK Network Hub System ID:
-
-This is the QWK System ID of this hub. It is used for incoming and
-outgoing network packets and must be accurate.
-*/
-							if(uinput(WIN_MID|WIN_SAV,0,0
-								,"System ID",str,8,K_UPPER)<1)
-								continue;
-
-							for(j=total_qhubs;j>i;j--)
-                                qhub[j]=qhub[j-1];
-							if((qhub[i]=(qhub_t *)MALLOC(sizeof(qhub_t)))
-								==NULL) {
-								errormsg(WHERE,ERR_ALLOC,nulstr
-									,sizeof(qhub_t));
-								continue; }
-							memset(qhub[i],0,sizeof(qhub_t));
-							strcpy(qhub[i]->id,str);
-							strcpy(qhub[i]->pack,"%!pkzip %f %s");
-							strcpy(qhub[i]->unpack,"%!pkunzip -o %f %g %s");
-							strcpy(qhub[i]->call,"%!qnet");
-							qhub[i]->node=1;
-							qhub[i]->days=0xff; /* all days */
-							total_qhubs++;
-							changes=1;
-							continue; }
-						if((i&MSK_ON)==MSK_DEL) {
-							i&=MSK_OFF;
-							FREE(qhub[i]->mode);
-							FREE(qhub[i]->conf);
-							FREE(qhub[i]->sub);
-							FREE(qhub[i]);
-							total_qhubs--;
-							while(i<total_qhubs) {
-								qhub[i]=qhub[i+1];
-								i++; }
-							changes=1;
-							continue; }
-						qhub_edit(i); }
-					break; } } }
-
-	else if(i==1) { 	/* FidoNet Stuff */
-		done=0;
-		while(!done) {
-			i=0;
-			sprintf(opt[i++],"%-27.27s%s"
-				,"System Addresses",total_faddrs ? faddrtoa(faddr[0])
-					: nulstr);
-			sprintf(opt[i++],"%-27.27s%s"
-				,"Default Outbound Address"
-				,dflt_faddr.zone ? faddrtoa(dflt_faddr) : "No");
-			sprintf(opt[i++],"%-27.27s"
-				,"Default Origin Line");
-			sprintf(opt[i++],"%-27.27s%.40s"
-				,"NetMail Semaphore",netmail_sem);
-			sprintf(opt[i++],"%-27.27s%.40s"
-				,"EchoMail Semaphore",echomail_sem);
-			sprintf(opt[i++],"%-27.27s%.40s"
-				,"Inbound File Directory",fidofile_dir);
-			sprintf(opt[i++],"%-27.27s%.40s"
-				,"EchoMail Base Directory",echomail_dir);
-			sprintf(opt[i++],"%-27.27s%.40s"
-				,"NetMail Directory",netmail_dir);
-			sprintf(opt[i++],"%-27.27s%s"
-				,"Allow Sending of NetMail"
-				,netmail_misc&NMAIL_ALLOW ? "Yes":"No");
-			sprintf(opt[i++],"%-27.27s%s"
-				,"Allow File Attachments"
-				,netmail_misc&NMAIL_FILE ? "Yes":"No");
-			sprintf(opt[i++],"%-27.27s%s"
-				,"Send NetMail Using Alias"
-				,netmail_misc&NMAIL_ALIAS ? "Yes":"No");
-			sprintf(opt[i++],"%-27.27s%s"
-				,"NetMail Defaults to Crash"
-				,netmail_misc&NMAIL_CRASH ? "Yes":"No");
-			sprintf(opt[i++],"%-27.27s%s"
-				,"NetMail Defaults to Direct"
-				,netmail_misc&NMAIL_DIRECT ? "Yes":"No");
-			sprintf(opt[i++],"%-27.27s%s"
-				,"NetMail Defaults to Hold"
-				,netmail_misc&NMAIL_HOLD ? "Yes":"No");
-			sprintf(opt[i++],"%-27.27s%s"
-				,"Kill NetMail After Sent"
-				,netmail_misc&NMAIL_KILL ? "Yes":"No");
-			sprintf(opt[i++],"%-27.27s%lu"
-				,"Cost to Send NetMail",netmail_cost);
-			opt[i][0]=0;
-			SETHELP(WHERE);
-/*
-FidoNet EchoMail and NetMail:
-
-This menu contains configuration options that pertain specifically to
-networking E-mail (NetMail) and sub-boards (EchoMail) through networks
-using FidoNet technology.
-*/
-			i=ulist(WIN_ACT|WIN_MID|WIN_CHE,0,0,60,&fnet_dflt,0
-				,"FidoNet EchoMail and NetMail",opt);
-			savnum=0;
-			switch(i) {
-				case -1:	/* ESC */
-					done=1;
-					break;
-				case 0:
-					SETHELP(WHERE);
-/*
-System FidoNet Addresses:
-
-This is the FidoNet address of this system used to receive NetMail.
-The Main address is also used as the default address for sub-boards.
-Format: Zone:Net/Node[.Point]
-*/
-					k=l=0;
-					while(1) {
-						for(i=0;i<total_faddrs && i<MAX_OPTS;i++) {
-							if(i==0)
-								strcpy(str,"Main");
-							else
-								sprintf(str,"AKA %u",i);
-							sprintf(opt[i],"%-8.8s %-16s"
-								,str,faddrtoa(faddr[i])); }
-						opt[i][0]=0;
-						j=WIN_RHT|WIN_SAV|WIN_ACT|WIN_INSACT;
-						if(total_faddrs<MAX_OPTS)
-							j|=WIN_INS|WIN_XTR;
-						if(total_faddrs)
-							j|=WIN_DEL;
-						i=ulist(j,0,0,0,&k,&l
-							,"System Addresses",opt);
-						if(i==-1)
-							break;
-						if((i&MSK_ON)==MSK_INS) {
-							i&=MSK_OFF;
-
-							if(!total_faddrs)
-								strcpy(str,"1:1/0");
-							else
-								strcpy(str,faddrtoa(faddr[0]));
-							if(!uinput(WIN_MID|WIN_SAV,0,0,"Address"
-								,str,25,K_EDIT|K_UPPER))
-								continue;
-
-							if((faddr=(faddr_t *)REALLOC(faddr
-                                ,sizeof(faddr_t)*(total_faddrs+1)))==NULL) {
-                                errormsg(WHERE,ERR_ALLOC,nulstr
-                                    ,sizeof(faddr_t)*total_faddrs+1);
-								total_faddrs=0;
-								bail(1);
-                                continue; }
-
-							for(j=total_faddrs;j>i;j--)
-                                faddr[j]=faddr[j-1];
-
-							faddr[i]=atofaddr(str);
-							total_faddrs++;
-							changes=1;
-							continue; }
-						if((i&MSK_ON)==MSK_DEL) {
-							i&=MSK_OFF;
-							total_faddrs--;
-							while(i<total_faddrs) {
-								faddr[i]=faddr[i+1];
-								i++; }
-							changes=1;
-							continue; }
-						strcpy(str,faddrtoa(faddr[i]));
-						uinput(WIN_MID|WIN_SAV,0,0,"Address"
-							,str,25,K_EDIT);
-						faddr[i]=atofaddr(str); }
-                    break;
-				case 1:
-					i=0;
-					strcpy(opt[0],"Yes");
-					strcpy(opt[1],"No");
-					opt[2][0]=0;
-					SETHELP(WHERE);
-/*
-Use Default Outbound NetMail Address:
-
-If you would like to have a default FidoNet address adding to outbound
-NetMail mail messages that do not have an address specified, select
-Yes.
-*/
-					i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-						,"Use Default Outbound NetMail Address",opt);
-					if(i==1) {
-						if(dflt_faddr.zone)
-							changes=1;
-						dflt_faddr.zone=0;
-						break; }
-					if(i==-1)
-						break;
-					if(!dflt_faddr.zone) {
-						dflt_faddr.zone=1;
-						changes=1; }
-					strcpy(str,faddrtoa(dflt_faddr));
-					SETHELP(WHERE);
-/*
-Default Outbound FidoNet NetMail Address:
-
-If you would like to automatically add a FidoNet address to outbound
-NetMail that does not have an address specified, set this option
-to that address. This is useful for Fido/UUCP gateway mail.
-Format: Zone:Net/Node[.Point]
-*/
-					if(uinput(WIN_MID|WIN_SAV,0,0,"Outbound Address"
-						,str,25,K_EDIT)) {
-						dflt_faddr=atofaddr(str);
-						changes=1; }
-                    break;
-				case 2:
-					SETHELP(WHERE);
-/*
-Default Origin Line:
-
-This is the default origin line used for sub-boards networked via
-EchoMail. This origin line can be overridden on a per sub-board basis
-with the sub-board configuration Network Options....
-*/
-					uinput(WIN_MID|WIN_SAV,0,0,"* Origin"
-						,origline,50,K_EDIT);
-                    break;
-				case 3:
-					SETHELP(WHERE);
-/*
-NetMail Semaphore File:
-
-This is a filename that will be used as a semaphore (signal) to your
-FidoNet front-end that new NetMail has been created and the messages
-should be re-scanned.
-*/
-					uinput(WIN_MID|WIN_SAV,0,0,"NetMail Semaphore"
-						,netmail_sem,50,K_EDIT|K_UPPER);
-                    break;
-				case 4:
-					SETHELP(WHERE);
-/*
-EchoMail Semaphore File:
-
-This is a filename that will be used as a semaphore (signal) to your
-FidoNet front-end that new EchoMail has been created and the messages
-should be re-scanned.
-*/
-					uinput(WIN_MID|WIN_SAV,0,0,"EchoMail Semaphore"
-						,echomail_sem,50,K_EDIT|K_UPPER);
-                    break;
-				case 5:
-					SETHELP(WHERE);
-/*
-Inbound File Directory:
-
-This directory is where inbound files are placed. This directory is
-only used when an incoming message has a file attached.
-*/
-					uinput(WIN_MID|WIN_SAV,0,0,"Inbound Files"
-						,fidofile_dir,50,K_EDIT|K_UPPER);
-                    break;
-				case 6:
-					SETHELP(WHERE);
-/*
-EchoMail Base Directory:
-
-This is an optional field used as a base directory for the location
-of EchoMail messages for sub-boards that do not have a specified
-EchoMail Storage Directory. If a sub-board does not have a specified
-storage directory for EchoMail, its messages will be imported from and
-exported to a sub-directory off of this base directory. The name of the
-sub-directory is the same as the internal code for the sub-directory.
-
-If all EchoMail sub-boards have specified EchoMail storage directories,
-this option is not used at all.
-*/
-					uinput(WIN_MID|WIN_SAV,0,0,"EchoMail Base"
-						,echomail_dir,50,K_EDIT|K_UPPER);
-                    break;
-				case 7:
-					SETHELP(WHERE);
-/*
-NetMail Directory:
-
-This is the directory where NetMail will be imported from and exported
-to.
-*/
-					uinput(WIN_MID|WIN_SAV,0,0,"NetMail"
-						,netmail_dir,50,K_EDIT|K_UPPER);
-                    break;
-				case 8:
-					i=0;
-					strcpy(opt[0],"Yes");
-					strcpy(opt[1],"No");
-					opt[2][0]=0;
-					SETHELP(WHERE);
-/*
-Allow Users to Send NetMail:
-
-If you are on a FidoNet style network and want your users to be allowed
-to send NetMail, set this option to Yes.
-*/
-					i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-						,"Allow Users to Send NetMail",opt);
-					if(!i && !(netmail_misc&NMAIL_ALLOW)) {
-						changes=1;
-						netmail_misc|=NMAIL_ALLOW; }
-					else if(i==1 && netmail_misc&NMAIL_ALLOW) {
-						changes=1;
-						netmail_misc&=~NMAIL_ALLOW; }
-					break;
-				case 9:
-					i=0;
-					strcpy(opt[0],"Yes");
-					strcpy(opt[1],"No");
-					opt[2][0]=0;
-					SETHELP(WHERE);
-/*
-Allow Users to Send NetMail File Attachments:
-
-If you are on a FidoNet style network and want your users to be allowed
-to send NetMail file attachments, set this option to Yes.
-*/
-					i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-						,"Allow Users to Send NetMail File Attachments",opt);
-					if(!i && !(netmail_misc&NMAIL_FILE)) {
-						changes=1;
-						netmail_misc|=NMAIL_FILE; }
-					else if(i==1 && netmail_misc&NMAIL_FILE) {
-						changes=1;
-						netmail_misc&=~NMAIL_FILE; }
-                    break;
-				case 10:
-					i=1;
-					strcpy(opt[0],"Yes");
-					strcpy(opt[1],"No");
-					opt[2][0]=0;
-					SETHELP(WHERE);
-/*
-Use Aliases in NetMail:
-
-If you allow aliases on your system and wish users to have their NetMail
-contain their alias as the From User, set this option to Yes. If you
-want all NetMail to be sent using users' real names, set this option to
-No.
-*/
-					i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-						,"Use Aliases in NetMail",opt);
-					if(!i && !(netmail_misc&NMAIL_ALIAS)) {
-						changes=1;
-						netmail_misc|=NMAIL_ALIAS; }
-					else if(i==1 && netmail_misc&NMAIL_ALIAS) {
-						changes=1;
-						netmail_misc&=~NMAIL_ALIAS; }
-                    break;
-				case 11:
-					i=1;
-					strcpy(opt[0],"Yes");
-					strcpy(opt[1],"No");
-					opt[2][0]=0;
-					SETHELP(WHERE);
-/*
-NetMail Defaults to Crash Status:
-
-If you want all NetMail to default to crash (send immediately) status,
-set this option to Yes.
-*/
-					i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-						,"NetMail Defaults to Crash Status",opt);
-					if(!i && !(netmail_misc&NMAIL_CRASH)) {
-						changes=1;
-						netmail_misc|=NMAIL_CRASH; }
-					else if(i==1 && netmail_misc&NMAIL_CRASH) {
-						changes=1;
-						netmail_misc&=~NMAIL_CRASH; }
-                    break;
-				case 12:
-					i=1;
-					strcpy(opt[0],"Yes");
-					strcpy(opt[1],"No");
-					opt[2][0]=0;
-					SETHELP(WHERE);
-/*
-NetMail Defaults to Direct Status:
-
-If you want all NetMail to default to direct (send directly) status,
-set this option to Yes.
-*/
-					i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-						,"NetMail Defaults to Direct Status",opt);
-					if(!i && !(netmail_misc&NMAIL_DIRECT)) {
-						changes=1;
-						netmail_misc|=NMAIL_DIRECT; }
-					else if(i==1 && netmail_misc&NMAIL_DIRECT) {
-						changes=1;
-						netmail_misc&=~NMAIL_DIRECT; }
-                    break;
-				case 13:
-					i=1;
-					strcpy(opt[0],"Yes");
-					strcpy(opt[1],"No");
-					opt[2][0]=0;
-					SETHELP(WHERE);
-/*
-NetMail Defaults to Hold Status:
-
-If you want all NetMail to default to hold status, set this option to
-Yes.
-*/
-					i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-						,"NetMail Defaults to Hold Status",opt);
-					if(!i && !(netmail_misc&NMAIL_HOLD)) {
-						changes=1;
-						netmail_misc|=NMAIL_HOLD; }
-					else if(i==1 && netmail_misc&NMAIL_HOLD) {
-						changes=1;
-						netmail_misc&=~NMAIL_HOLD; }
-                    break;
-				case 14:
-					i=0;
-					strcpy(opt[0],"Yes");
-					strcpy(opt[1],"No");
-					opt[2][0]=0;
-					SETHELP(WHERE);
-/*
-Kill NetMail After it is Sent:
-
-If you want NetMail messages to be deleted after they are successfully
-sent, set this option to Yes.
-*/
-					i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-						,"Kill NetMail After it is Sent",opt);
-					if(!i && !(netmail_misc&NMAIL_KILL)) {
-						changes=1;
-						netmail_misc|=NMAIL_KILL; }
-					else if(i==1 && netmail_misc&NMAIL_KILL) {
-						changes=1;
-						netmail_misc&=~NMAIL_KILL; }
-                    break;
-				case 15:
-					ultoa(netmail_cost,str,10);
-					SETHELP(WHERE);
-/*
-Cost in Credits to Send NetMail:
-
-This is the number of credits it will cost your users to send NetMail.
-If you want the sending of NetMail to be free, set this value to 0.
-*/
-					uinput(WIN_MID|WIN_SAV,0,0
-						,"Cost in Credits to Send NetMail"
-						,str,10,K_EDIT|K_NUMBER);
-					netmail_cost=atol(str);
-					break; } } }
-	else if(i==2) {
-		done=0;
-		while(!done) {
-			i=0;
-			strcpy(opt[i++],"Network Hubs...");
-			sprintf(opt[i++],"%-20.20s%-12s","Site Name",sys_psname);
-			sprintf(opt[i++],"%-20.20s%-lu","Site Number",sys_psnum);
-			opt[i][0]=0;
-			SETHELP(WHERE);
-/*
-PostLink Networks:
-
-From this menu you can configure the default tagline to use for
-outgoing messages on QWK networked sub-boards, or you can select
-Network Hubs... to add, delete, or configure QWK hubs that your system
-calls to exchange packets with.
-*/
-			i=ulist(WIN_ACT|WIN_RHT|WIN_BOT|WIN_CHE,0,0,0,&pnet_dflt,0
-				,"PostLink Networks",opt);
-			savnum=0;
-			switch(i) {
-				case -1:	/* ESC */
-					done=1;
-					break;
-				case 1:
-					SETHELP(WHERE);
-/*
-PostLink Site Name:
-
-If your system is networked via PostLink or PCRelay, this should be the
-Site Name for your BBS.
-*/
-					uinput(WIN_MID|WIN_SAV,0,0,"Site Name"
-						,sys_psname,12,K_UPPER|K_EDIT);
-					break;
-				case 2:
-					SETHELP(WHERE);
-/*
-PostLink Site Number:
-
-If your system is networked via PostLink or PCRelay, this should be the
-Site Number for your BBS.
-*/
-					ultoa(sys_psnum,str,10);
-					uinput(WIN_MID|WIN_SAV,0,0,"Site Number"
-						,str,10,K_NUMBER|K_EDIT);
-					sys_psnum=atol(str);
-                    break;
-				case 0:
-					while(1) {
-						for(i=0;i<total_phubs && i<MAX_OPTS;i++)
-							sprintf(opt[i],"%-10.10s",phub[i]->name);
-						opt[i][0]=0;
-						i=WIN_ACT|WIN_RHT|WIN_SAV;
-						if(total_phubs<MAX_OPTS)
-							i|=WIN_INS|WIN_INSACT|WIN_XTR;
-						if(total_phubs)
-							i|=WIN_DEL;
-						savnum=0;
-						SETHELP(WHERE);
-/*
-PostLink Network Hubs:
-
-This is a list of PostLink and/or PCRelay network hubs that your system
-calls to exchange packets with.
-
-To add a hub, select the desired location with the arrow keys and hit
- INS .
-
-To delete a hub, select it and hit  DEL .
-
-To configure a hub, select it and hit  ENTER .
-*/
-						i=ulist(i,0,0,0,&phub_dflt,0
-							,"PostLink Hubs",opt);
-						if(i==-1)
-							break;
-						if((i&MSK_ON)==MSK_INS) {
-							i&=MSK_OFF;
-							if((phub=(phub_t **)REALLOC(phub
-                                ,sizeof(phub_t *)*(total_phubs+1)))==NULL) {
-                                errormsg(WHERE,ERR_ALLOC,nulstr
-                                    ,sizeof(phub_t *)*(total_phubs+1));
-								total_phubs=0;
-								bail(1);
-                                continue; }
-
-							savnum=1;
-							SETHELP(WHERE);
-/*
-Network Hub Site Name:
-
-This is the Site Name of this hub. It is used for only for reference.
-*/
-							if(uinput(WIN_MID|WIN_SAV,0,0
-								,"Site Name",str,10,K_UPPER)<1)
-								continue;
-
-							for(j=total_phubs;j>i;j--)
-                                phub[j]=phub[j-1];
-
-							if((phub[i]=(phub_t *)MALLOC(sizeof(phub_t)))
-								==NULL) {
-								errormsg(WHERE,ERR_ALLOC,nulstr
-									,sizeof(phub_t));
-								continue; }
-							memset(phub[i],0,sizeof(phub_t));
-							strcpy(phub[i]->name,str);
-							strcpy(phub[i]->call,"%!pnet");
-							phub[i]->node=1;
-							phub[i]->days=0xff; /* all days */
-							total_phubs++;
-							changes=1;
-							continue; }
-						if((i&MSK_ON)==MSK_DEL) {
-							i&=MSK_OFF;
-							FREE(phub[i]);
-							total_phubs--;
-							while(i<total_phubs) {
-								phub[i]=phub[i+1];
-								i++; }
-							changes=1;
-							continue; }
-						phub_edit(i); }
-                    break; } } }
-
-	else if(i==3) { 	/* Internet */
-		done=0;
-		while(!done) {
-			i=0;
-			sprintf(opt[i++],"%-27.27s%s"
-				,"System Address",sys_inetaddr);
-			sprintf(opt[i++],"%-27.27s%.40s"
-				,"NetMail Semaphore",inetmail_sem);
-			sprintf(opt[i++],"%-27.27s%s"
-				,"Allow Sending of NetMail"
-				,inetmail_misc&NMAIL_ALLOW ? "Yes":"No");
-			sprintf(opt[i++],"%-27.27s%s"
-				,"Allow File Attachments"
-				,inetmail_misc&NMAIL_FILE ? "Yes":"No");
-			sprintf(opt[i++],"%-27.27s%s"
-				,"Send NetMail Using Alias"
-				,inetmail_misc&NMAIL_ALIAS ? "Yes":"No");
-			sprintf(opt[i++],"%-27.27s%lu"
-				,"Cost to Send NetMail",inetmail_cost);
-			opt[i][0]=0;
-			SETHELP(WHERE);
-/*
-Internet NetMail:
-
-This menu contains configuration options that pertain specifically to
-Internet E-mail (NetMail). To utilize these options, you must own
-a Synchronet compatible UUCP/Internet gateway (e.g. SyncUUCP).
-*/
-			i=ulist(WIN_ACT|WIN_MID|WIN_CHE,0,0,60,&inet_dflt,0
-				,"Internet NetMail",opt);
-			savnum=0;
-			switch(i) {
-				case -1:	/* ESC */
-					done=1;
-					break;
-				case 0:
-					SETHELP(WHERE);
-/*
-Sytem Internet Address:
-
-If your system has an Internet mail feed, enter your system's Internet
-address here (e.g. joesbbs.com).
-*/
-					uinput(WIN_MID|WIN_SAV,0,0,""
-						,sys_inetaddr,60,K_EDIT);
-                    break;
-				case 1:
-					SETHELP(WHERE);
-/*
-Internet NetMail Semaphore File:
-
-This is a filename that will be used as a semaphore (signal) to your
-Internet gateway (if supported) that new mail has been created and the
-message base should be re-scanned.
-*/
-					uinput(WIN_MID|WIN_SAV,0,0,"Semaphore File"
-						,inetmail_sem,50,K_EDIT|K_UPPER);
-                    break;
-
-				case 2:
-					i=0;
-					strcpy(opt[0],"Yes");
-					strcpy(opt[1],"No");
-					opt[2][0]=0;
-					SETHELP(WHERE);
-/*
-Allow Users to Send Internet NetMail:
-
-If your system has an Internet uplink and you want your users to be
-allowed to send Internet NetMail, set this option to Yes.
-*/
-					i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-						,"Allow Users to Send NetMail",opt);
-					if(!i && !(inetmail_misc&NMAIL_ALLOW)) {
-						changes=1;
-						inetmail_misc|=NMAIL_ALLOW; }
-					else if(i==1 && inetmail_misc&NMAIL_ALLOW) {
-						changes=1;
-						inetmail_misc&=~NMAIL_ALLOW; }
-					break;
-
-				case 3:
-					i=0;
-					strcpy(opt[0],"Yes");
-					strcpy(opt[1],"No");
-					opt[2][0]=0;
-					SETHELP(WHERE);
-/*
-Allow Users to Send Internet NetMail File Attachments:
-
-If your system has an Internet uplink and you want your users to be
-allowed to send Internet NetMail file attachments, set this option to Yes.
-*/
-					i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-						,"Allow Users to Send NetMail File Attachments",opt);
-					if(!i && !(inetmail_misc&NMAIL_FILE)) {
-						changes=1;
-						inetmail_misc|=NMAIL_FILE; }
-					else if(i==1 && inetmail_misc&NMAIL_FILE) {
-						changes=1;
-						inetmail_misc&=~NMAIL_FILE; }
-                    break;
-				case 4:
-					i=1;
-					strcpy(opt[0],"Yes");
-					strcpy(opt[1],"No");
-					opt[2][0]=0;
-					SETHELP(WHERE);
-/*
-Use Aliases in NetMail:
-
-If you allow aliases on your system and wish users to have their NetMail
-contain their alias as the From User, set this option to Yes. If you
-want all NetMail to be sent using users' real names, set this option to
-No.
-*/
-					i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-						,"Use Aliases in NetMail",opt);
-					if(!i && !(inetmail_misc&NMAIL_ALIAS)) {
-						changes=1;
-						inetmail_misc|=NMAIL_ALIAS; }
-					else if(i==1 && inetmail_misc&NMAIL_ALIAS) {
-						changes=1;
-						inetmail_misc&=~NMAIL_ALIAS; }
-					break;
-				case 5:
-					ultoa(inetmail_cost,str,10);
-					SETHELP(WHERE);
-/*
-Cost in Credits to Send NetMail:
-
-This is the number of credits it will cost your users to send NetMail.
-If you want the sending of NetMail to be free, set this value to 0.
-*/
-					uinput(WIN_MID|WIN_SAV,0,0
-						,"Cost in Credits to Send NetMail"
-						,str,10,K_EDIT|K_NUMBER);
-					inetmail_cost=atol(str);
-					break; } } }
-
-	else { /* ESC */
-		i=save_changes(WIN_MID|WIN_SAV);
-		if(i==-1)
-			continue;
-		if(!i)
-			write_msgs_cfg();
-		break; } }
-}
-
-void qhub_edit(int num)
-{
-	static int qhub_dflt;
-	char *p,done=0,str[256];
-	int i,j,k,n;
-
-while(!done) {
-	i=0;
-	sprintf(opt[i++],"%-27.27s%s","Hub System ID",qhub[num]->id);
-	sprintf(opt[i++],"%-27.27s%.40s","Pack Command Line",qhub[num]->pack);
-	sprintf(opt[i++],"%-27.27s%.40s","Unpack Command Line",qhub[num]->unpack);
-	sprintf(opt[i++],"%-27.27s%.40s","Call-out Command Line",qhub[num]->call);
-	sprintf(opt[i++],"%-27.27s%u","Call-out Node",qhub[num]->node);
-	sprintf(opt[i++],"%-27.27s%s","Call-out Days",daystr(qhub[num]->days));
-	if(qhub[num]->freq) {
-		sprintf(str,"%u times a day",1440/qhub[num]->freq);
-		sprintf(opt[i++],"%-27.27s%s","Call-out Frequency",str); }
-	else {
-		sprintf(str,"%2.2d:%2.2d",qhub[num]->time/60,qhub[num]->time%60);
-		sprintf(opt[i++],"%-27.27s%s","Call-out Time",str); }
-	strcpy(opt[i++],"Networked Sub-boards...");
-	opt[i][0]=0;
-	sprintf(str,"%s Network Hub",qhub[num]->id);
-	savnum=1;
-	SETHELP(WHERE);
-/*
-QWK Network Hub Configuration:
-
-This menu allows you to configure options specific to this QWK network
-hub.
-*/
-	switch(ulist(WIN_ACT|WIN_MID|WIN_SAV,0,0,0,&qhub_dflt,0
-		,str,opt)) {
-		case -1:
-			done=1;
-			break;
-		case 0:
-			SETHELP(WHERE);
-/*
-QWK Network Hub System ID:
-
-This is the QWK System ID of this hub. It is used for incoming and
-outgoing network packets and must be accurate.
-*/
-			strcpy(str,qhub[num]->id);	/* save */
-			if(!uinput(WIN_MID|WIN_SAV,0,0,"QWK Network Hub System ID"
-				,qhub[num]->id,8,K_UPPER|K_EDIT))
-				strcpy(qhub[num]->id,str);
-			break;
-		case 1:
-			SETHELP(WHERE);
-/*
-REP Packet Creation Command:
-
-This is the command line to use to create (compress) REP packets for
-this QWK network hub.
-*/
-			uinput(WIN_MID|WIN_SAV,0,0,"Packet Creation"
-				,qhub[num]->pack,50,K_EDIT);
-			break;
-		case 2:
-			SETHELP(WHERE);
-/*
-QWK Packet Extraction Command:
-
-This is the command line to use to extract (decompress) QWK packets from
-this QWK network hub.
-*/
-			uinput(WIN_MID|WIN_SAV,0,0,"Packet Extraction"
-				,qhub[num]->unpack,50,K_EDIT);
-			break;
-		case 3:
-			SETHELP(WHERE);
-/*
-QWK Network Hub Call-out Command Line:
-
-This is the command line to use to initiate a call-out to this QWK
-network hub.
-*/
-			uinput(WIN_MID|WIN_SAV,0,0,"Call-out Command"
-				,qhub[num]->call,50,K_EDIT);
-			break;
-		case 4:
-			sprintf(str,"%u",qhub[num]->node);
-			SETHELP(WHERE);
-/*
-Node to Perform Call-out:
-
-This is the number of the node to perform the call-out for this QWK
-network hub.
-*/
-			uinput(WIN_MID|WIN_SAV,0,0
-				,"Node to Perform Call-out",str,3,K_EDIT|K_NUMBER);
-			qhub[num]->node=atoi(str);
-			break;
-		case 5:
-			j=0;
-			while(1) {
-				for(i=0;i<7;i++)
-					sprintf(opt[i],"%s        %s"
-						,wday[i],(qhub[num]->days&(1<<i)) ? "Yes":"No");
-				opt[i][0]=0;
-				savnum=2;
-				SETHELP(WHERE);
-/*
-Days to Perform Call-out:
-
-These are the days that a call-out will be performed for this QWK
-network hub.
-*/
-				i=ulist(WIN_MID,0,0,0,&j,0
-					,"Days to Perform Call-out",opt);
-				if(i==-1)
-					break;
-				qhub[num]->days^=(1<<i);
-				changes=1; }
-			break;
-		case 6:
-			i=1;
-			strcpy(opt[0],"Yes");
-			strcpy(opt[1],"No");
-			opt[2][0]=0;
-			savnum=2;
-			SETHELP(WHERE);
-/*
-Perform Call-out at a Specific Time:
-
-If you want the system call this QWK network hub at a specific time,
-set this option to Yes. If you want the system to call this network
-hub more than once a day at predetermined intervals, set this option to
-No.
-*/
-			i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-				,"Perform Call-out at a Specific Time",opt);
-			if(i==0) {
-				sprintf(str,"%2.2d:%2.2d",qhub[num]->time/60
-					,qhub[num]->time%60);
-				SETHELP(WHERE);
-/*
-Time to Perform Call-out:
-
-This is the time (in 24 hour HH:MM format) to perform the call-out to
-this QWK network hub.
-*/
-				if(uinput(WIN_MID|WIN_SAV,0,0
-					,"Time to Perform Call-out (HH:MM)"
-					,str,5,K_UPPER|K_EDIT)>0) {
-					qhub[num]->freq=0;
-					qhub[num]->time=atoi(str)*60;
-					if((p=strchr(str,':'))!=NULL)
-						qhub[num]->time+=atoi(p+1); } }
-			else if(i==1) {
-				sprintf(str,"%u",qhub[num]->freq
-					&& qhub[num]->freq<=1440 ? 1440/qhub[num]->freq : 0);
-				SETHELP(WHERE);
-/*
-Number of Call-outs Per Day:
-
-This is the maximum number of times the system will perform a call-out
-per day to this QWK network hub. This value is actually converted by
-Synchronet into minutes between call-outs and when the BBS is idle
-and this number of minutes since the last call-out is reached, it will
-perform a call-out.
-*/
-				if(uinput(WIN_MID|WIN_SAV,0,0
-					,"Number of Call-outs Per Day"
-					,str,4,K_NUMBER|K_EDIT)>0) {
-					qhub[num]->time=0;
-					i=atoi(str);
-					if(i && i<=1440)
-						qhub[num]->freq=1440/i;
-					else
-						qhub[num]->freq=0; } }
-			break;
-		case 7:
-			qhub_sub_edit(num);
-			break; } }
-}
-
-void qhub_sub_edit(uint num)
-{
-	char str[256];
-	int i,j,k,l,m,n,bar=0;
-
-k=0;
-while(1) {
-	for(j=0;j<qhub[num]->subs;j++)
-		sprintf(opt[j],"%-*.*s %-*.*s"
-			,LEN_GSNAME,LEN_GSNAME
-			,grp[sub[qhub[num]->sub[j]]->grp]->sname
-			,LEN_SSNAME,LEN_SSNAME
-			,sub[qhub[num]->sub[j]]->sname);
-	opt[j][0]=0;
-	savnum=2;
-	j=WIN_BOT|WIN_SAV|WIN_ACT;
-	if(qhub[num]->subs<MAX_OPTS)
-		j|=WIN_INS|WIN_INSACT|WIN_XTR;
-	if(qhub[num]->subs)
-		j|=WIN_DEL;
-	SETHELP(WHERE);
-/*
-QWK Networked Sub-boards:
-
-This is a list of the sub-boards that are networked with this QWK
-network hub.
-
-To add a sub-board, select the desired location and hit  INS .
-
-To remove a sub-board, select it and hit  DEL .
-
-To configure a sub-board for this QWK network hub, select it and hit
- ENTER .
-*/
-	j=ulist(j,0,0,0,&k,&bar
-		,"Networked Sub-boards",opt);
-	if(j==-1)
-		break;
-	if((j&MSK_ON)==MSK_INS) {
-		j&=MSK_OFF;
-		savnum=3;
-		if((l=getsub())==-1)
-			continue;
-		savnum=3;
-		SETHELP(WHERE);
-/*
-Conference Number on Hub:
-
-This is the number of the conference on the QWK network hub, that this
-sub-board is networked with. On Synchronet systems, this number is
-derived by multiplying the group number by 10 and adding the sub-board
-number. For example, group 2, sub-board 3, is conference number 203.
-
-It is important to understand that this is NOT the conference number of
-this sub-board on your system. It is the number of the conference this
-sub-board is networked with on this QWK network hub.
-*/
-		if(uinput(WIN_MID|WIN_SAV,0,0
-			,"Conference Number on Hub"
-			,str,5,K_NUMBER)<1)
-			continue;
-		strcpy(opt[0],"Strip out");
-		strcpy(opt[1],"Leave in");
-		strcpy(opt[2],"Expand to ANSI");
-		opt[3][0]=0;
-		m=0;
-		SETHELP(WHERE);
-/*
-Ctrl-A Codes:
-
-You are being prompted for the method of handling Ctrl-A attribute codes
-generated by Synchronet. If this QWK network hub is a Synchronet BBS,
-set this option to Leave in. If the QWK network hub is not a Synchronet
-BBS, but allows ANSI escape sequences in messages, set this option to
-Expand to ANSI. If the QWK network hub is not a Synchronet BBS and does
-not support ANSI escape sequences in messages (or you're not sure), set
-this option to Strip out.
-*/
-		if((m=ulist(WIN_MID|WIN_SAV,0,0,0,&m,0
-			,"Ctrl-A Codes",opt))==-1)
-			continue;
-		if((qhub[num]->sub=(ushort *)REALLOC(qhub[num]->sub
-			,sizeof(ushort *)*(qhub[num]->subs+1)))==NULL
-		|| (qhub[num]->conf=(ushort *)REALLOC(qhub[num]->conf
-            ,sizeof(ushort *)*(qhub[num]->subs+1)))==NULL
-		|| (qhub[num]->mode=(uchar *)REALLOC(qhub[num]->mode
-			,sizeof(uchar *)*(qhub[num]->subs+1)))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,nulstr,qhub[num]->subs+1);
-			continue; }
-		if(qhub[num]->subs) 			  /* insert */
-			for(n=qhub[num]->subs;n>j;n--) {
-				qhub[num]->sub[n]=qhub[num]->sub[n-1];
-				qhub[num]->conf[n]=qhub[num]->conf[n-1];
-				qhub[num]->mode[n]=qhub[num]->mode[n-1]; }
-		if(!m)
-			qhub[num]->mode[j]=A_STRIP;
-		else if(m==1)
-			qhub[num]->mode[j]=A_LEAVE;
-		else
-			qhub[num]->mode[j]=A_EXPAND;
-		qhub[num]->sub[j]=l;
-		qhub[num]->conf[j]=atoi(str);
-		qhub[num]->subs++;
-		changes=1;
-		continue; }
-	if((j&MSK_ON)==MSK_DEL) {
-		j&=MSK_OFF;
-		qhub[num]->subs--;
-		while(j<qhub[num]->subs) {
-			qhub[num]->sub[j]=qhub[num]->sub[j+1];
-			qhub[num]->mode[j]=qhub[num]->mode[j+1];
-			qhub[num]->conf[j]=qhub[num]->conf[j+1];
-			j++; }
-		changes=1;
-		continue; }
-	l=0;
-	while(1) {
-		n=0;
-		sprintf(opt[n++],"%-22.22s%.*s %.*s"
-			,"Sub-board"
-			,LEN_GSNAME
-			,grp[sub[qhub[num]->sub[j]]->grp]->sname
-			,LEN_SSNAME
-			,sub[qhub[num]->sub[j]]->sname);
-		sprintf(opt[n++],"%-22.22s%u"
-			,"Conference Number",qhub[num]->conf[j]);
-		sprintf(opt[n++],"%-22.22s%s"
-			,"Ctrl-A Codes",qhub[num]->mode[j]==A_STRIP ?
-			"Strip out" : qhub[num]->mode[j]==A_LEAVE ?
-			"Leave in" : "Expand to ANSI");
-		opt[n][0]=0;
-		savnum=3;
-		SETHELP(WHERE);
-/*
-QWK Netted Sub-board:
-
-You are configuring the options for this sub-board for this QWK network
-hub.
-*/
-		l=ulist(WIN_MID|WIN_SAV|WIN_ACT,0,0,
-			22+LEN_GSNAME+LEN_SSNAME,&l,0
-			,"Netted Sub-board",opt);
-		if(l==-1)
-			break;
-		if(!l) {
-			savnum=4;
-			m=getsub();
-			if(m!=-1) {
-				qhub[num]->sub[j]=m;
-				changes=1; } }
-		else if(l==1) {
-			savnum=4;
-			SETHELP(WHERE);
-/*
-Conference Number on Hub:
-
-This is the number of the conference on the QWK network hub, that this
-sub-board is networked with. On Synchronet systems, this number is
-derived by multiplying the group number by 10 and adding the sub-board
-number. For example, group 2, sub-board 3, is conference number 203.
-
-It is important to understand that this is NOT the conference number of
-this sub-board on your system. It is the number of the conference this
-sub-board is networked with on this QWK network hub.
-*/
-			if(uinput(WIN_MID|WIN_SAV,0,0
-				,"Conference Number on Hub"
-				,str,5,K_NUMBER)>0)
-				qhub[num]->conf[j]=atoi(str); }
-		else if(l==2) {
-			strcpy(opt[0],"Strip out");
-			strcpy(opt[1],"Leave in");
-			strcpy(opt[2],"Expand to ANSI");
-			opt[3][0]=0;
-			m=0;
-			savnum=4;
-			SETHELP(WHERE);
-/*
-Ctrl-A Codes:
-
-You are being prompted for the method of handling Ctrl-A attribute codes
-generated by Synchronet. If this QWK network hub is a Synchronet BBS,
-set this option to Leave in. If the QWK network hub is not a Synchronet
-BBS, but allows ANSI escape sequences in messages, set this option to
-Expand to ANSI. If the QWK network hub is not a Synchronet BBS and does
-not support ANSI escape sequences in messages (or you're not sure), set
-this option to Strip out.
-*/
-			m=ulist(WIN_MID|WIN_SAV,0,0,0,&m,0
-				,"Ctrl-A Codes",opt);
-			changes=1;
-			if(!m)
-				qhub[num]->mode[j]=A_STRIP;
-			else if(m==1)
-				qhub[num]->mode[j]=A_LEAVE;
-			else if(m==2)
-				qhub[num]->mode[j]=A_EXPAND; } } }
-}
-
-void phub_edit(int num)
-{
-	static int phub_dflt;
-	char *p,done=0,str[256];
-	int i,j,k,n;
-
-while(!done) {
-	i=0;
-	sprintf(opt[i++],"%-27.27s%s","Hub Site Name",phub[num]->name);
-	sprintf(opt[i++],"%-27.27s%.40s","Call-out Command Line",phub[num]->call);
-	sprintf(opt[i++],"%-27.27s%u","Call-out Node",phub[num]->node);
-	sprintf(opt[i++],"%-27.27s%s","Call-out Days",daystr(phub[num]->days));
-	if(phub[num]->freq) {
-		sprintf(str,"%u times a day",1440/phub[num]->freq);
-		sprintf(opt[i++],"%-27.27s%s","Call-out Frequency",str); }
-	else {
-		sprintf(str,"%2.2d:%2.2d",phub[num]->time/60
-			,phub[num]->time%60);
-		sprintf(opt[i++],"%-27.27s%s","Call-out Time",str); }
-	opt[i][0]=0;
-	sprintf(str,"%s Network Hub",phub[num]->name);
-	savnum=1;
-	SETHELP(WHERE);
-/*
-PostLink Network Hub Configuration:
-
-This menu allows you to configure options specific to this network hub.
-*/
-	switch(ulist(WIN_ACT|WIN_MID|WIN_SAV,0,0,0,&phub_dflt,0
-		,str,opt)) {
-		case -1:
-			done=1;
-			break;
-		case 0:
-			SETHELP(WHERE);
-/*
-Network Hub Site Name:
-
-This is the Site Name of this hub. It is used for only for reference.
-*/
-			strcpy(str,phub[num]->name);	/* save */
-			if(!uinput(WIN_MID|WIN_SAV,0,0,"Hub Site Name"
-				,phub[num]->name,10,K_UPPER|K_EDIT))
-				strcpy(phub[num]->name,str);	/* restore */
-			break;
-		case 1:
-			SETHELP(WHERE);
-/*
-Network Hub Call-out Command Line:
-
-This is the command line to use to initiate a call-out to this network
-hub.
-*/
-			uinput(WIN_MID|WIN_SAV,0,0,"Call-out Command"
-				,phub[num]->call,50,K_EDIT);
-			break;
-		case 2:
-			sprintf(str,"%u",phub[num]->node);
-			SETHELP(WHERE);
-/*
-Node to Perform Call-out:
-
-This is the number of the node to perform the call-out for this network
-hub.
-*/
-			uinput(WIN_MID|WIN_SAV,0,0
-				,"Node to Perform Call-out",str,3,K_EDIT|K_NUMBER);
-			phub[num]->node=atoi(str);
-			break;
-		case 3:
-			j=0;
-			while(1) {
-				for(i=0;i<7;i++)
-					sprintf(opt[i],"%s        %s"
-						,wday[i],(phub[num]->days&(1<<i)) ? "Yes":"No");
-				opt[i][0]=0;
-				savnum=2;
-				SETHELP(WHERE);
-/*
-Days to Perform Call-out:
-
-These are the days that a call-out will be performed for this network
-hub.
-*/
-				i=ulist(WIN_MID|WIN_SAV,0,0,0,&j,0
-					,"Days to Perform Call-out",opt);
-				if(i==-1)
-					break;
-				phub[num]->days^=(1<<i);
-				changes=1; }
-			break;
-		case 4:
-			i=1;
-			strcpy(opt[0],"Yes");
-			strcpy(opt[1],"No");
-			opt[2][0]=0;
-			savnum=2;
-			SETHELP(WHERE);
-/*
-Perform Call-out at a Specific Time:
-
-If you want the system call this network hub at a specific time, set
-this option to Yes. If you want the system to call this hub more than
-once a day at predetermined intervals, set this option to No.
-*/
-			i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-				,"Perform Call-out at a Specific Time",opt);
-			if(i==0) {
-				sprintf(str,"%2.2d:%2.2d",phub[num]->time/60
-					,phub[num]->time%60);
-				SETHELP(WHERE);
-/*
-Time to Perform Call-out:
-
-This is the time (in 24 hour HH:MM format) to perform the call-out to
-this network hub.
-*/
-				if(uinput(WIN_MID|WIN_SAV,0,0
-					,"Time to Perform Call-out (HH:MM)"
-					,str,5,K_UPPER|K_EDIT)>0) {
-					phub[num]->freq=0;
-					phub[num]->time=atoi(str)*60;
-					if((p=strchr(str,':'))!=NULL)
-						phub[num]->time+=atoi(p+1); } }
-			else if(i==1) {
-				sprintf(str,"%u",phub[num]->freq
-					&& phub[num]->freq<=1440 ? 1440/phub[num]->freq : 0);
-				SETHELP(WHERE);
-/*
-Number of Call-outs Per Day:
-
-This is the maximum number of times the system will perform a call-out
-per day to this network hub. This value is actually converted by
-Synchronet into minutes between call-outs and when the BBS is idle
-and this number of minutes since the last call-out is reached, it will
-perform a call-out.
-*/
-				if(uinput(WIN_MID|WIN_SAV,0,0
-					,"Number of Call-outs Per Day"
-					,str,4,K_NUMBER|K_EDIT)>0) {
-					phub[num]->time=0;
-					i=atoi(str);
-					if(i && i<=1440)
-						phub[num]->freq=1440/i;
-					else
-						phub[num]->freq=0; } }
-			break; } }
-}
-
-char *daystr(char days)
-{
-	static char str[256];
-	int i;
-
-str[0]=0;
-for(i=0;i<7;i++) {
-	if(days&(1<<i))
-		strcat(str,wday[i]);
-	else
-		strcat(str,"   ");
-	strcat(str," "); }
-return(str);
-}
diff --git a/src/sbbs2/scfg/scfgnode.c b/src/sbbs2/scfg/scfgnode.c
deleted file mode 100644
index ddb9155e85..0000000000
--- a/src/sbbs2/scfg/scfgnode.c
+++ /dev/null
@@ -1,2163 +0,0 @@
-#line 2 "SCFGNODE.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/****************************************************************************/
-/* Synchronet configuration utility 										*/
-/****************************************************************************/
-
-#include "scfg.h"
-#include "spawno.h"
-
-int com_type()
-{
-	int i;
-
-i=0;
-strcpy(opt[0],"UART");
-strcpy(opt[1],"FOSSIL Int 14h");
-strcpy(opt[2],"PC BIOS Int 14h");
-strcpy(opt[3],"PS/2 BIOS Int 14h");
-strcpy(opt[4],"DigiBoard Int 14h");
-opt[5][0]=0;
-SETHELP(WHERE);
-/*
-COM Port Type:
-
-Select the type of serial COM port for this node. If you are unsure,
-select UART. If you have a FOSSIL driver installed, you do not have to
-select FOSSIL unless you specifically want to override Synchronet's
-internal COM functions.
-*/
-i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-	,"COM Port Type",opt);
-if(i==-1)
-	return(0);
-changes=1;
-if(i) {
-	com_irq=com_port-1;
-	if(i==1) {
-		savnum=0;
-		umsg("WARNING: This is not a recommended setting for most systems");
-		umsg("The default DSZ command lines will not work with this setting");
-		com_base=0xf; }
-	else if(i==2)
-		com_base=0xb;
-	else if(i==3)
-		com_base=0xe;
-	else if(i==4)
-		com_base=0xd; }
-
-else {	/* UART */
-	if(com_port && com_port<5) {
-		i=0;
-		strcpy(opt[0],"Yes");
-		strcpy(opt[1],"No");
-		opt[2][0]=0;
-		SETHELP(WHERE);
-/*
-Use Default UART IRQ and I/O Address:
-
-If your COM Port's UART is using the normal IRQ and Base I/O Address
-for the configured COM Port number, select Yes. If your COM Port
-is using a non-standard IRQ or I/O Address, select No and be sure
-to set the UART IRQ and UART I/O Address options. If you are not
-sure what IRQ and I/O Address your COM Port is using, select Yes.
-*/
-		i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-			,"Use Default UART IRQ and I/O Address"
-			,opt);
-		if(i==0) {
-			switch(com_port) {
-				case 1:
-					com_irq=4;
-					com_base=0x3f8;
-					break;
-				case 2:
-					com_irq=3;
-					com_base=0x2f8;
-					break;
-				case 3:
-					com_irq=4;
-					com_base=0x3e8;
-					break;
-				case 4:
-					com_irq=3;
-					com_base=0x2e8;
-					break; }
-			changes=1;
-			return(1); } }
-	else {
-		if(com_base<0x100)
-			com_base=0x100;
-		if(com_irq<2 || com_irq>15)
-			com_irq=5; } }
-return(0);
-}
-
-void node_menu()
-{
-	char	done,str[81],savnode=0;
-	int 	i,j;
-	static int node_menu_dflt,node_bar;
-
-while(1) {
-	for(i=0;i<sys_nodes;i++)
-		sprintf(opt[i],"Node %d",i+1);
-	opt[i][0]=0;
-	j=WIN_ORG|WIN_ACT|WIN_INSACT|WIN_DELACT;
-	if(sys_nodes>1)
-		j|=WIN_DEL|WIN_GET;
-	if(sys_nodes<MAX_NODES && sys_nodes<MAX_OPTS)
-		j|=WIN_INS;
-	if(savnode)
-		j|=WIN_PUT;
-SETHELP(WHERE);
-/*
-Node List:
-
-This is the list of configured nodes in your system.
-
-To add a node, hit  INS .
-
-To delete a node, hit  DEL .
-
-To configure a node, select it using the arrow keys and hit  ENTER .
-
-To copy a node's configuration to another node, first select the source
-node with the arrow keys and hit  F5 . Then select the destination
-node and hit  F6 .
-*/
-
-	i=ulist(j,0,0,13,&node_menu_dflt,&node_bar,"Nodes",opt);
-	if(i==-1) {
-		if(savnode) {
-			free_node_cfg();
-			savnode=0; }
-		return; }
-
-	if((i&MSK_ON)==MSK_DEL) {
-		strcpy(opt[0],"Yes");
-		strcpy(opt[1],"No");
-		opt[2][0]=0;
-		sprintf(str,"Delete Node %d",sys_nodes);
-		i=1;
-SETHELP(WHERE);
-/*
-Delete Node:
-
-If you are positive you want to delete this node, select Yes. Otherwise,
-select No or hit  ESC .
-*/
-		i=ulist(WIN_MID,0,0,0,&i,0,str,opt);
-		if(!i) {
-			--sys_nodes;
-			FREE(node_path[sys_nodes]);
-			write_main_cfg(); }
-		continue; }
-	if((i&MSK_ON)==MSK_INS) {
-		strcpy(node_dir,node_path[sys_nodes-1]);
-		i=sys_nodes+1;
-		upop("Reading NODE.CNF...");
-		read_node_cfg(txt);
-		upop(0);
-		sprintf(str,"..\\NODE%d\\",i);
-		sprintf(tmp,"Node %d Path",i);
-SETHELP(WHERE);
-/*
-Node Path:
-
-This is the path to this node's private directory where its separate
-configuration and data files are stored.
-
-The drive and directory of this path can be set to any valid DOS
-directory that can be accessed by ALL nodes and MUST NOT be on a RAM disk
-or other volatile media.
-
-If you want to abort the creation of this new node, hit  ESC .
-*/
-		j=uinput(WIN_MID,0,0,tmp,str,50,K_EDIT|K_UPPER);
-		changes=0;
-		if(j<2)
-			continue;
-		truncsp(str);
-		if((node_path=(char **)REALLOC(node_path,sizeof(char *)*(sys_nodes+1)))
-			==NULL) {
-			errormsg(WHERE,ERR_ALLOC,nulstr,sys_nodes+1);
-			continue; }
-		if((node_path[i-1]=MALLOC(strlen(str)+2))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,str,strlen(str)+2);
-			continue; }
-		strcpy(node_path[i-1],str);
-		if(str[strlen(str)-1]=='\\')
-			str[strlen(str)-1]=0;
-		mkdir(str);
-		node_num=++sys_nodes;
-		sprintf(node_name,"Node %u",node_num);
-		write_node_cfg();
-		write_main_cfg();
-		free_node_cfg();
-		continue; }
-	if((i&MSK_ON)==MSK_GET) {
-		if(savnode)
-			free_node_cfg();
-		i&=MSK_OFF;
-		strcpy(node_dir,node_path[i]);
-		upop("Reading NODE.CNF...");
-		read_node_cfg(txt);
-		upop(0);
-		savnode=1;
-		continue; }
-	if((i&MSK_ON)==MSK_PUT) {
-		i&=MSK_OFF;
-		strcpy(node_dir,node_path[i]);
-		node_num=i+1;
-		write_node_cfg();
-		changes=1;
-		continue; }
-
-	if(savnode) {
-		free_node_cfg();
-		savnode=0; }
-	strcpy(node_dir,node_path[i]);
-	upop("Reading NODE.CNF...");
-	read_node_cfg(txt);
-	upop(0);
-	if(node_num!=i+1) { 	/* Node number isn't right? */
-		node_num=i+1;		/* so fix it */
-		write_node_cfg(); } /* and write it back */
-	node_cfg();
-
-	free_node_cfg(); }
-}
-
-void node_cfg()
-{
-	static	int node_dflt;
-	char	done,str[81];
-	static	int mdm_dflt,adv_dflt,tog_dflt,tog_bar;
-	int 	i,j,dflt=0,bar=0;
-
-while(1) {
-	i=0;
-	sprintf(opt[i++],"%-27.27s%s","Name",node_name);
-	sprintf(opt[i++],"%-27.27s%s","Phone Number",node_phone);
-	sprintf(opt[i++],"%-27.27s%ubps","Minimum Connect Rate",node_minbps);
-	sprintf(opt[i++],"%-27.27s%.40s","Logon Requirements",node_ar);
-	sprintf(opt[i++],"%-27.27s%.40s","Local Text Editor",node_editor);
-	sprintf(opt[i++],"%-27.27s%.40s","Local Text Viewer",node_viewer);
-	sprintf(opt[i++],"%-27.27s%.40s","Configuration Command",scfg_cmd);
-	sprintf(opt[i++],"%-27.27s%.40s","DOS Command Interpreter"
-		,node_comspec[0] ? node_comspec : "%COMSPEC%");
-	strcpy(opt[i++],"Toggle Options...");
-	strcpy(opt[i++],"Advanced Options...");
-	strcpy(opt[i++],"Modem Configuration...");
-	strcpy(opt[i++],"Wait for Call Number Keys...");
-	strcpy(opt[i++],"Wait for Call Function Keys...");
-	opt[i][0]=0;
-	sprintf(str,"Node %d Configuration",node_num);
-SETHELP(WHERE);
-/*
-Node Configuration Menu:
-
-This is the node configuration menu. The options available from this
-menu will only affect the selected node's configuration.
-
-Options with a trailing ... will produce a sub-menu of more options.
-*/
-	switch(ulist(WIN_ACT|WIN_CHE|WIN_BOT|WIN_RHT,0,0,60,&node_dflt,0
-		,str,opt)) {
-		case -1:
-			i=save_changes(WIN_MID);
-			if(!i)
-				write_node_cfg();
-			if(i!=-1)
-				return;
-			break;
-		case 0:
-SETHELP(WHERE);
-/*
-Node Name:
-
-This is the name of the selected node. It is used for documentary
-purposes only.
-*/
-			uinput(WIN_MID|WIN_SAV,0,10,"Name",node_name,40,K_EDIT);
-			break;
-		case 1:
-SETHELP(WHERE);
-/*
-Node Phone Number:
-
-This is the phone number to access the selected node. It is used for
-documentary purposes only.
-*/
-			uinput(WIN_MID|WIN_SAV,0,10,"Phone Number",node_phone,12,K_EDIT);
-			break;
-		case 2:
-SETHELP(WHERE);
-/*
-Minimum Connect Rate:
-
-This is the lowest modem connection speed allowed for the selected node.
-The speed is a decimal number representing bits per second (bps) or more
-inaccurately referred to as baud.
-
-If a user attempts to logon this node at a speed lower than the minimum
-connect rate, a message is displayed explaining the minimum connect
-rate and the user is disconnected.
-
-If the file TEXT\TOOSLOW.MSG exists, it will be displayed to the user
-before the user is disconnected.
-
-Users with the M exemption can log onto any node at any speed.
-*/
-			sprintf(str,"%u",node_minbps);
-			uinput(WIN_MID|WIN_SAV,0,10,"Minimum Connect Rate",str,5
-				,K_NUMBER|K_EDIT);
-			node_minbps=atoi(str);
-			break;
-		case 3:
-			sprintf(str,"Node %u Logon",node_num);
-			getar(str,node_ar);
-			break;
-		case 4:
-SETHELP(WHERE);
-/*
-Local Text Editor:
-
-This is the command line to execute to edit text files locally in
-Synchronet. If this command line is blank, the default editor of the
-sysop (user #1) will be used.
-
-This command line can be used to create posts and e-mail locally, if the
-toggle option Use Editor for Messages is set to Yes.
-
-The %f command line specifier is used for the filename to edit.
-*/
-			uinput(WIN_MID|WIN_SAV,0,13,"Editor",node_editor
-				,50,K_EDIT);
-			break;
-		case 5:
-SETHELP(WHERE);
-/*
-Local Text Viewer:
-
-This is the command line used to view log files from the wait for call
-screen.
-
-The %f command line specifier is used for the filename to view.
-*/
-			uinput(WIN_MID|WIN_SAV,0,14,"Viewer",node_viewer
-				,50,K_EDIT);
-			break;
-		case 6:
-SETHELP(WHERE);
-/*
-Configuration Command Line:
-
-This is the command line used to launch the Synchronet configuration
-program (SCFG) from this node's Waiting for Call (WFC) screen.
-*/
-			uinput(WIN_MID|WIN_SAV,0,14,"Configuration Command",scfg_cmd
-				,40,K_EDIT);
-            break;
-		case 7:
-SETHELP(WHERE);
-/*
-DOS Command Interpreter:
-
-This is the complete path to your DOS command interpreter (normally
-COMMAND.COM). Leaving this option blank (designated by %COMSPEC%)
-specifies that the path contained in the COMSPEC environment variable
-should be used.
-
-When running Synchronet for OS/2, this option should be set to:
-C:\OS2\MDOS\COMMAND.COM.
-*/
-			uinput(WIN_MID|WIN_SAV,0,14,"DOS Command Interpreter"
-				,node_comspec,40,K_EDIT);
-            break;
-		case 8:
-			done=0;
-			while(!done) {
-				i=0;
-				sprintf(opt[i++],"%-27.27s%s","Alarm When Answering"
-					,node_misc&NM_ANSALARM ? "Yes":"No");
-				sprintf(opt[i++],"%-27.27s%s","Status Screen While WFC"
-					,node_misc&NM_WFCSCRN ? "Yes":"No");
-				sprintf(opt[i++],"%-27.27s%s","Total Msgs/Files on WFC"
-					,node_misc&NM_WFCMSGS ? "Yes":"No");
-				sprintf(opt[i++],"%-27.27s%s","Use Editor for Messages"
-					,node_misc&NM_LCL_EDIT ? "Yes":"No");
-				sprintf(opt[i++],"%-27.27s%s","Use EMS for Overlays"
-					,node_misc&NM_EMSOVL ? "Yes":"No");
-				sprintf(opt[i++],"%-27.27s%s","Allow Swapping"
-                    ,node_swap&SWAP_NONE ? "No":"Yes");
-                sprintf(opt[i++],"%-27.27s%s","Swap to EMS Memory"
-					,node_swap&SWAP_EMS ? "Yes":"No");
-                sprintf(opt[i++],"%-27.27s%s","Swap to XMS Memory"
-					,node_swap&SWAP_XMS ? "Yes":"No");
-                sprintf(opt[i++],"%-27.27s%s","Swap to Extended Memory"
-					,node_swap&SWAP_EXT ? "Yes":"No");
-				sprintf(opt[i++],"%-27.27s%s","Windows/OS2 Time Slice API"
-					,node_misc&NM_WINOS2 ? "Yes":"No");
-				sprintf(opt[i++],"%-27.27s%s","DESQview Time Slice API"
-					,node_misc&NM_NODV ? "No":"Yes");
-				sprintf(opt[i++],"%-27.27s%s","DOS Idle Interrupts"
-					,node_misc&NM_INT28 ? "Yes":"No");
-				sprintf(opt[i++],"%-27.27s%s","Low Priority String Input"
-					,node_misc&NM_LOWPRIO ? "Yes":"No");
-				sprintf(opt[i++],"%-27.27s%s","Allow Logon by Number"
-					,node_misc&NM_NO_NUM ? "No":"Yes");
-				sprintf(opt[i++],"%-27.27s%s","Allow Logon by Real Name"
-					,node_misc&NM_LOGON_R ? "Yes":"No");
-				sprintf(opt[i++],"%-27.27s%s","Always Prompt for Password"
-					,node_misc&NM_LOGON_P ? "Yes":"No");
-				sprintf(opt[i++],"%-27.27s%s","Disable Local Inactivity"
-					,node_misc&NM_NO_INACT ? "Yes":"No");
-				sprintf(opt[i++],"%-27.27s%s","Disable Local Keyboard"
-                    ,node_misc&NM_NO_LKBRD ? "Yes":"No");
-				sprintf(opt[i++],"%-27.27s%s","Local System Protection"
-					,node_misc&NM_SYSPW ? "Yes":"No");
-				sprintf(opt[i++],"%-27.27s%s","Beep Locally"
-					,node_misc&NM_NOBEEP ? "No":"Yes");
-				sprintf(opt[i++],"%-27.27s%s","Allow 8-bit Remote Logons"
-					,node_misc&NM_7BITONLY ? "No":"Yes");
-				sprintf(opt[i++],"%-27.27s%s","Reset Video Between Calls"
-					,node_misc&NM_RESETVID ? "Yes":"No");
-
-				opt[i][0]=0;
-				savnum=0;
-SETHELP(WHERE);
-/*
-Node Toggle Options:
-
-This is the toggle options menu for the selected node's configuration.
-
-The available options from this menu can all be toggled between two or
-more states, such as Yes and No.
-*/
-				switch(ulist(WIN_BOT|WIN_RHT|WIN_ACT|WIN_SAV,3,2,35,&tog_dflt
-					,&tog_bar,"Toggle Options",opt)) {
-					case -1:
-						done=1;
-						break;
-					case 0:
-						i=1;
-						strcpy(opt[0],"Yes");
-						strcpy(opt[1],"No");
-						opt[2][0]=0;
-						savnum=1;
-SETHELP(WHERE);
-/*
-Alarm When Answering:
-
-Set this option to Yes if want this node to make an alarm sound each
-time it answers an incoming call. Usually, the modem's speaker is a
-sufficient alarm if one is desired.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,15,0,&i,0
-							,"Sound Alarm When Answering",opt);
-						if(i==0 && !(node_misc&NM_ANSALARM)) {
-							node_misc|=NM_ANSALARM;
-							changes=1; }
-						else if(i==1 && (node_misc&NM_ANSALARM)) {
-							node_misc&=~NM_ANSALARM;
-							changes=1; }
-						break;
-					case 1:
-						i=0;
-						strcpy(opt[0],"Yes");
-						strcpy(opt[1],"No");
-						opt[2][0]=0;
-						savnum=1;
-SETHELP(WHERE);
-/*
-Status Screen While WFC:
-
-If you want the current system statistics and current status of all
-active nodes to be displayed while this node is waiting for a caller,
-set this option to Yes.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,10,0,&i,0
-							,"Display Status Screen While Waiting for Call",opt);
-						if(i==0 && !(node_misc&NM_WFCSCRN)) {
-							node_misc|=NM_WFCSCRN;
-							changes=1; }
-						else if(i==1 && (node_misc&NM_WFCSCRN)) {
-							node_misc&=~NM_WFCSCRN;
-							changes=1; }
-						break;
-					case 2:
-						i=0;
-						strcpy(opt[0],"Yes");
-						strcpy(opt[1],"No");
-						opt[2][0]=0;
-						savnum=1;
-SETHELP(WHERE);
-/*
-Total Messages and Files on WFC Status Screen:
-
-If you want the total number of messages and files to be retrieved
-and displayed on the WFC status screen, set this option to Yes.
-
-Setting this option to No will significantly reduce the amount of
-time required to retrieve the system statistics on systems with large
-numbers of message and file areas.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,10,0,&i,0
-							,"Display Total Messages and Files while WFC",opt);
-						if(i==0 && !(node_misc&NM_WFCMSGS)) {
-							node_misc|=(NM_WFCMSGS|NM_WFCSCRN);
-							changes=1; }
-						else if(i==1 && (node_misc&NM_WFCMSGS)) {
-							node_misc&=~NM_WFCMSGS;
-							changes=1; }
-                        break;
-					case 3:
-						i=1;
-						strcpy(opt[0],"Yes");
-						strcpy(opt[1],"No");
-						opt[2][0]=0;
-						savnum=1;
-SETHELP(WHERE);
-/*
-Use Local Text Editor for Messages:
-
-If a local text editor command has been specified, it can be used to
-create messages (posts and e-mail) locally by setting this option to
-Yes.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,10,0,&i,0
-							,"Use Local Text Editor to Create Messages",opt);
-						if(i==0 && !(node_misc&NM_LCL_EDIT)) {
-							node_misc|=NM_LCL_EDIT;
-							changes=1; }
-						else if(i==1 && (node_misc&NM_LCL_EDIT)) {
-							node_misc&=~NM_LCL_EDIT;
-							changes=1; }
-						break;
-					case 4:
-						i=0;
-						strcpy(opt[0],"Yes");
-						strcpy(opt[1],"No");
-						opt[2][0]=0;
-						savnum=1;
-SETHELP(WHERE);
-/*
-Use Available Expanded Memory (EMS) for Swapping Overlays:
-
-If you wish to use any available expanded memory (EMS) for swapping
-overlays, set this option to Yes. Swapping overlays to memory is much
-faster than swapping to disk.
-
-If this option is set to Yes, Synchronet will attempt to allocation 360K
-of EMS for swapping overlays into.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,10,0,&i,0
-							,"Use Available EMS for Overlays",opt);
-						if(i==0 && !(node_misc&NM_EMSOVL)) {
-							node_misc|=NM_EMSOVL;
-							changes=1; }
-						else if(i==1 && (node_misc&NM_EMSOVL)) {
-							node_misc&=~NM_EMSOVL;
-							changes=1; }
-						break;
-					case 5:
-						i=0;
-						strcpy(opt[0],"Yes");
-						strcpy(opt[1],"No");
-						opt[2][0]=0;
-						savnum=1;
-                        SETHELP(WHERE);
-/*
-Allow Swapping:
-
-If this option is set to Yes, Synchronet will use one of the available
-Swap to options when swapping out of memory.	If you have no Extended,
-EMS, or XMS memory available, and this option is set to Yes, Synchronet
-will swap to disk.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,10,0,&i,0
-							,"Allow Swapping",opt);
-						if(i==0 && node_swap&SWAP_NONE) {
-							node_swap&=~SWAP_NONE;
-							changes=1; }
-						else if(i==1 && !(node_swap&SWAP_NONE)) {
-							node_swap|=SWAP_NONE;
-							changes=1; }
-                        break;
-					case 6:
-						i=0;
-						strcpy(opt[0],"Yes");
-						strcpy(opt[1],"No");
-						opt[2][0]=0;
-						savnum=1;
-                        SETHELP(WHERE);
-/*
-Swap to EMS Memory:
-
-If this option is set to Yes, and the Allow Swapping option is set to
-Yes Synchronet will use EMS memory (when available) for swapping out
-of memory.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,10,0,&i,0
-							,"Swap to EMS Memory",opt);
-						if(i==1 && node_swap&SWAP_EMS) {
-							node_swap&=~SWAP_EMS;
-							changes=1; }
-						else if(i==0 && !(node_swap&SWAP_EMS)) {
-							node_swap|=SWAP_EMS;
-							changes=1; }
-                        break;
-					case 7:
-						i=0;
-						strcpy(opt[0],"Yes");
-						strcpy(opt[1],"No");
-						opt[2][0]=0;
-						savnum=1;
-                        SETHELP(WHERE);
-/*
-Swap to XMS Memory:
-
-If this option is set to Yes, and the Allow Swapping option is set to
-Yes Synchronet will use XMS memory (when available) for swapping out
-of memory.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,10,0,&i,0
-							,"Swap to XMS Memory",opt);
-						if(i==1 && node_swap&SWAP_XMS) {
-							node_swap&=~SWAP_XMS;
-							changes=1; }
-						else if(i==0 && !(node_swap&SWAP_XMS)) {
-							node_swap|=SWAP_XMS;
-							changes=1; }
-                        break;
-					case 8:
-						i=0;
-						strcpy(opt[0],"Yes");
-						strcpy(opt[1],"No");
-						opt[2][0]=0;
-						savnum=1;
-                        SETHELP(WHERE);
-/*
-Swap to Extended Memory:
-
-If this option is set to Yes, and the Allow Swapping option is set to
-Yes Synchronet will use non-XMS Extended memory (when available) for
-swapping out of memory.
-
-If you are running under a DOS multitasker (e.g. Windows, DESQview, or
-OS/2) set this option to No.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,10,0,&i,0
-							,"Swap to Extended Memory",opt);
-						if(i==1 && node_swap&SWAP_EXT) {
-							node_swap&=~SWAP_EXT;
-							changes=1; }
-						else if(i==0 && !(node_swap&SWAP_EXT)) {
-							node_swap|=SWAP_EXT;
-							changes=1; }
-                        break;
-					case 9:
-						i=0;
-						strcpy(opt[0],"Yes");
-						strcpy(opt[1],"No");
-						opt[2][0]=0;
-						savnum=1;
-						SETHELP(WHERE);
-/*
-Windows/OS2 Time Slice API:
-
-If you wish to have Synchronet specifically use the Windows and OS/2
-API call to surrender time slices when in a low priority task, set this
-option to Yes. If setting this option to Yes causes erratic pauses
-or performance problems, leave the option on No. This type of behavior
-has been witnessed under Windows 3.1 when using this API call.
-
-If running in an OS/2 DOS session, you will most likely want this
-option set to Yes for the best aggregate performance for your system.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,10,0,&i,0
-							,"Use Windows/OS2 Time Slice API",opt);
-						if(i==0 && !(node_misc&NM_WINOS2)) {
-							node_misc|=NM_WINOS2;
-							changes=1; }
-						else if(i==1 && (node_misc&NM_WINOS2)) {
-							node_misc&=~NM_WINOS2;
-							changes=1; }
-                        break;
-					case 10:
-						i=0;
-						strcpy(opt[0],"Yes");
-						strcpy(opt[1],"No");
-						opt[2][0]=0;
-						savnum=1;
-						SETHELP(WHERE);
-/*
-DESQview Time Slice API:
-
-If this option is set to Yes, and this node is run under DESQview,
-Synchronet will use the DESQview Time Slice API calls for intelligent
-variable time slicing.
-
-Since Synchronet automatically detects DESQview, there is no harm in
-having this option set to Yes if you are not running DESQview. Only set
-this option to No, if you wish to disable the DESQview API for some
-reason.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,10,0,&i,0
-							,"DESQview Time Slice API",opt);
-						if(i==0 && node_misc&NM_NODV) {
-							node_misc&=~NM_NODV;
-							changes=1; }
-						else if(i==1 && !(node_misc&NM_NODV)) {
-							node_misc|=NM_NODV;
-							changes=1; }
-                        break;
-					case 11:
-						i=0;
-						strcpy(opt[0],"Yes");
-						strcpy(opt[1],"No");
-						opt[2][0]=0;
-						savnum=1;
-						SETHELP(WHERE);
-/*
-DOS Idle Interrupts:
-
-If you want Synchronet to make DOS Idle Interrupts when waiting for user
-input or in other low priority loops, set this option to Yes.
-
-For best aggregate multinode performance under multitaskers, you should
-set this option to Yes.
-
-For best single node performance under multitaskers, you should set this
-option to No.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,10,0,&i,0
-							,"DOS Idle Interrupts",opt);
-						if(i==0 && !(node_misc&NM_INT28)) {
-							node_misc|=NM_INT28;
-							changes=1; }
-						else if(i==1 && (node_misc&NM_INT28)) {
-							node_misc&=~NM_INT28;
-							changes=1; }
-                        break;
-					case 12:
-						i=1;
-						strcpy(opt[0],"Yes");
-						strcpy(opt[1],"No");
-						opt[2][0]=0;
-						savnum=1;
-						SETHELP(WHERE);
-/*
-Low Priority String Input:
-
-Normally, Synchronet will not give up time slices (under a multitasker)
-when users are prompted for a string of characters. This is considered
-a high priority task.
-
-Setting this option to Yes will force Synchronet to give up time slices
-during string input, possibly causing jerky keyboard input from the
-user, but improving aggregate system performance under multitaskers.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,10,0,&i,0
-							,"Low Priority String Input",opt);
-						if(i==0 && !(node_misc&NM_LOWPRIO)) {
-							node_misc|=NM_LOWPRIO;
-							changes=1; }
-						else if(i==1 && (node_misc&NM_LOWPRIO)) {
-							node_misc&=~NM_LOWPRIO;
-							changes=1; }
-                        break;
-					case 13:
-						i=0;
-						strcpy(opt[0],"Yes");
-						strcpy(opt[1],"No");
-						opt[2][0]=0;
-						savnum=1;
-						SETHELP(WHERE);
-/*
-Allow Logon by Number:
-
-If you want users to be able logon using their user number at the NN:
-set this option to Yes.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,10,0,&i,0
-							,"Allow Logon by Number",opt);
-						if(i==0 && node_misc&NM_NO_NUM) {
-							node_misc&=~NM_NO_NUM;
-							changes=1; }
-						else if(i==1 && !(node_misc&NM_NO_NUM)) {
-							node_misc|=NM_NO_NUM;
-							changes=1; }
-                        break;
-					case 14:
-						i=1;
-						strcpy(opt[0],"Yes");
-						strcpy(opt[1],"No");
-						opt[2][0]=0;
-						savnum=1;
-						SETHELP(WHERE);
-/*
-Allow Logon by Real Name:
-
-If you want users to be able logon using their real name as well as
-their alias, set this option to Yes.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,10,0,&i,0
-							,"Allow Logon by Real Name",opt);
-						if(i==0 && !(node_misc&NM_LOGON_R)) {
-							node_misc|=NM_LOGON_R;
-							changes=1; }
-						else if(i==1 && (node_misc&NM_LOGON_R)) {
-							node_misc&=~NM_LOGON_R;
-							changes=1; }
-                        break;
-					case 15:
-						i=1;
-						strcpy(opt[0],"Yes");
-						strcpy(opt[1],"No");
-						opt[2][0]=0;
-						savnum=1;
-						SETHELP(WHERE);
-/*
-Always Prompt for Password:
-
-If you want to have attempted logons using an unknown user name still
-prompt for a password, set this option to Yes.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,10,0,&i,0
-							,"Always Prompt for Password",opt);
-						if(i==0 && !(node_misc&NM_LOGON_P)) {
-							node_misc|=NM_LOGON_P;
-							changes=1; }
-						else if(i==1 && (node_misc&NM_LOGON_P)) {
-							node_misc&=~NM_LOGON_P;
-							changes=1; }
-                        break;
-					case 16:
-						i=1;
-						strcpy(opt[0],"Yes");
-						strcpy(opt[1],"No");
-						opt[2][0]=0;
-						savnum=1;
-						SETHELP(WHERE);
-/*
-Disable Local Inactivity Warning/Logoff:
-
-Setting this option to Yes will disable the user inactivity warning
-and automatic logoff for local logons.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,10,0,&i,0
-							,"Disable Local Inactivity",opt);
-						if(i==0 && !(node_misc&NM_NO_INACT)) {
-							node_misc|=NM_NO_INACT;
-							changes=1; }
-						else if(i==1 && (node_misc&NM_NO_INACT)) {
-							node_misc&=~NM_NO_INACT;
-							changes=1; }
-                        break;
-					case 17:
-						i=1;
-						strcpy(opt[0],"Yes");
-						strcpy(opt[1],"No");
-						opt[2][0]=0;
-						savnum=1;
-						SETHELP(WHERE);
-/*
-Disable Local Keyboard (Entirely):
-
-Setting this option to Yes will disable the local keyboard when the
-BBS is running. Use this option only for the absolute highest degree
-of local system security. If this option is set to Yes, the BBS cannot
-be exited until the node is downed from another process or the machine
-is rebooted.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,10,0,&i,0
-							,"Disable Local Keyboard (Entirely)",opt);
-						if(i==0 && !(node_misc&NM_NO_LKBRD)) {
-							node_misc|=NM_NO_LKBRD;
-							changes=1; }
-						else if(i==1 && (node_misc&NM_NO_LKBRD)) {
-							node_misc&=~NM_NO_LKBRD;
-							changes=1; }
-                        break;
-					case 18:
-						i=1;
-						strcpy(opt[0],"Yes");
-						strcpy(opt[1],"No");
-						opt[2][0]=0;
-						savnum=1;
-						SETHELP(WHERE);
-/*
-Local System Protection:
-
-When this option is set to Yes, all local system functions from the
-Waiting for Call screen and Alt-Key combinations will require the user
-to enter the system password.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,10,0,&i,0
-							,"Local System Protection (Password)",opt);
-						if(i==0 && !(node_misc&NM_SYSPW)) {
-							node_misc|=NM_SYSPW;
-							changes=1; }
-						else if(i==1 && (node_misc&NM_SYSPW)) {
-							node_misc&=~NM_SYSPW;
-							changes=1; }
-                        break;
-					case 19:
-						i=0;
-						strcpy(opt[0],"Yes");
-						strcpy(opt[1],"No");
-						opt[2][0]=0;
-						savnum=1;
-						SETHELP(WHERE);
-/*
-Beep Locally:
-
-If you want the local speaker to be disabled for online beeps, set this
-option to No.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,10,0,&i,0
-							,"Beep Locally",opt);
-						if(i==1 && !(node_misc&NM_NOBEEP)) {
-							node_misc|=NM_NOBEEP;
-							changes=1; }
-						else if(i==0 && (node_misc&NM_NOBEEP)) {
-							node_misc&=~NM_NOBEEP;
-							changes=1; }
-                        break;
-					case 20:
-						i=0;
-						strcpy(opt[0],"Yes");
-						strcpy(opt[1],"No");
-						opt[2][0]=0;
-						savnum=1;
-						SETHELP(WHERE);
-/*
-Allow 8-bit Remote Input During Logon:
-
-If you wish to allow E-7-1 terminals to use this node, you must set this
-option to No. This will also eliminate the ability of 8-bit remote users
-to send IBM extended ASCII characters during the logon sequence.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,10,0,&i,0
-							,"Allow 8-bit Remote Input During Logon",opt);
-						if(i==1 && !(node_misc&NM_7BITONLY)) {
-							node_misc|=NM_7BITONLY;
-							changes=1; }
-						else if(i==0 && (node_misc&NM_7BITONLY)) {
-							node_misc&=~NM_7BITONLY;
-							changes=1; }
-                        break;
-					case 21:
-						i=0;
-						strcpy(opt[0],"Yes");
-						strcpy(opt[1],"No");
-						opt[2][0]=0;
-						savnum=1;
-						SETHELP(WHERE);
-/*
-Reset Video Mode Between Calls:
-
-If you wish to have SBBS reset the video mode between calls, set this
-option to Yes. This is to reverse the effects of some external programs
-that change the video mode without permission.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,10,0,&i,0
-							,"Reset Video Mode Beteween Calls",opt);
-						if(i==0 && !(node_misc&NM_RESETVID)) {
-							node_misc|=NM_RESETVID;
-							changes=1; }
-						else if(i==1 && (node_misc&NM_RESETVID)) {
-							node_misc&=~NM_RESETVID;
-							changes=1; }
-                        break;
-						} }
-			break;
-		case 9:
-			done=0;
-			while(!done) {
-				i=0;
-				sprintf(opt[i++],"%-27.27s%s","Validation User"
-					,node_valuser ? itoa(node_valuser,tmp,10) : "Nobody");
-				sprintf(opt[i++],"%-27.27s%s","Screen Length"
-					,node_scrnlen ? itoa(node_scrnlen,tmp,10)
-					: "Auto-Detect");
-				sprintf(opt[i++],"%-27.27s%s","Screen Blanker"
-					,node_scrnblank ? itoa(node_scrnblank,tmp,10)
-					: "Disabled");
-				sprintf(opt[i++],"%-27.27s%u seconds","Semaphore Frequency"
-					,node_sem_check);
-				sprintf(opt[i++],"%-27.27s%u seconds","Statistics Frequency"
-					,node_stat_check);
-				sprintf(opt[i++],"%-27.27s%u seconds","Inactivity Warning"
-					,sec_warn);
-				sprintf(opt[i++],"%-27.27s%u seconds","Inactivity Disconnection"
-					,sec_hangup);
-				sprintf(tmp,"$%d.00",node_dollars_per_call);
-				sprintf(opt[i++],"%-27.27s%s","Cost Per Call",tmp);
-				sprintf(opt[i++],"%-27.27s%.40s","Daily Event",node_daily);
-				sprintf(opt[i++],"%-27.27s%.40s","Control Directory",ctrl_dir);
-				sprintf(opt[i++],"%-27.27s%.40s","Text Directory",text_dir);
-				sprintf(opt[i++],"%-27.27s%.40s","Temporary Directory"
-					,temp_dir);
-				sprintf(opt[i++],"%-27.27s%.40s","Swap Directory"
-					,node_swapdir);
-				opt[i][0]=0;
-				savnum=0;
-SETHELP(WHERE);
-/*
-Node Advanced Options:
-
-This is the advanced options menu for the selected node. The available
-options are of an advanced nature and should not be modified unless you
-are sure of the consequences and necessary preparation.
-*/
-				switch(ulist(WIN_T2B|WIN_RHT|WIN_ACT|WIN_SAV,2,0,60,&adv_dflt,0
-					,"Advanced Options",opt)) {
-                    case -1:
-						done=1;
-                        break;
-					case 0:
-						itoa(node_valuser,str,10);
-SETHELP(WHERE);
-/*
-Validation User Number:
-
-When a caller logs onto the system as New, he or she must send
-validation feedback to the sysop. This feature can be disabled by
-setting this value to 0, allowing new users to logon without sending
-validation feedback. If you want new users on this node to be forced to
-send validation feedback, set this value to the number of the user to
-whom the feedback is sent. The normal value of this option is 1 for
-user number one.
-*/
-						uinput(WIN_MID,0,13,"Validation User Number (0=Nobody)"
-							,str,4,K_NUMBER|K_EDIT);
-						node_valuser=atoi(str);
-						break;
-					case 1:
-						itoa(node_scrnlen,str,10);
-SETHELP(WHERE);
-/*
-Screen Length:
-
-Synchronet automatically senses the number of lines on your display and
-uses all of them. If for some reason you want to override the detected
-screen length, set this value to the number of lines (rows) you want
-Synchronet to use.
-*/
-						uinput(WIN_MID,0,14,"Screen Length (0=Auto-Detect)"
-							,str,2,K_NUMBER|K_EDIT);
-						node_scrnlen=atoi(str);
-						break;
-					case 2:
-						itoa(node_scrnblank,str,10);
-SETHELP(WHERE);
-/*
-Screen Blanker:
-
-This option allows you to have this node blank its Waiting for Call
-screen after this number of minutes of inactivity. Setting this option
-to 0 disables the screen blanker.
-*/
-						uinput(WIN_MID|WIN_SAV,0,14
-							,"Minutes Inactive Before Blanking Screen "
-							"(0=Disabled)"
-							,str,2,K_NUMBER|K_EDIT);
-						node_scrnblank=atoi(str);
-                        break;
-					case 3:
-						itoa(node_sem_check,str,10);
-SETHELP(WHERE);
-/*
-Semaphore Check Frequency While Waiting for Call (in seconds):
-
-This is the number of seconds between semaphore checks while this node
-is waiting for a caller. Default is 60 seconds.
-*/
-						uinput(WIN_MID|WIN_SAV,0,14
-							,"Seconds Between Semaphore Checks"
-							,str,3,K_NUMBER|K_EDIT);
-						node_sem_check=atoi(str);
-                        break;
-					case 4:
-						itoa(node_stat_check,str,10);
-SETHELP(WHERE);
-/*
-Statistics Check Frequency While Waiting for Call (in seconds):
-
-This is the number of seconds between static checks while this node
-is waiting for a caller. Default is 10 seconds.
-*/
-						uinput(WIN_MID|WIN_SAV,0,14
-							,"Seconds Between Statistic Checks"
-							,str,3,K_NUMBER|K_EDIT);
-						node_stat_check=atoi(str);
-                        break;
-					case 5:
-						itoa(sec_warn,str,10);
-SETHELP(WHERE);
-/*
-Seconds Before Inactivity Warning:
-
-This is the number of seconds the user must be inactive before a
-warning will be given. Default is 180 seconds.
-*/
-						uinput(WIN_MID|WIN_SAV,0,14
-							,"Seconds Before Inactivity Warning"
-							,str,4,K_NUMBER|K_EDIT);
-						sec_warn=atoi(str);
-                        break;
-					case 6:
-						itoa(sec_hangup,str,10);
-SETHELP(WHERE);
-/*
-Seconds Before Inactivity Disconnection:
-
-This is the number of seconds the user must be inactive before they
-will be automatically disconnected. Default is 300 seconds.
-*/
-						uinput(WIN_MID|WIN_SAV,0,14
-							,"Seconds Before Inactivity Disconnection"
-							,str,4,K_NUMBER|K_EDIT);
-						sec_hangup=atoi(str);
-                        break;
-					case 7:
-						itoa(node_dollars_per_call,str,10);
-SETHELP(WHERE);
-/*
-Billing Node Cost Per Call:
-
-If you have an automated billing phone number (usually area code 900
-or prefix 976) and you wish to use this node as an automated billing
-node, set this value to the dollar amount that is billed for the first
-minute. Subsequent minutes should be charged the minimum amount as the
-maximum connect time for a billing node is 90 seconds.
-
-If this feature is used, when a caller connects to the node, he or she
-will be notified of the eminent charge amount if they do not drop
-carrier within the allotted free period. If the caller is still
-connected after 30 seconds, he or she will be prompted to enter a valid
-user name or number. After a valid user name or number has been entered,
-the caller is disconnected and the entered user is immediately given the
-purchased credits based on this dollar amount multiplied by the
-Credits per Dollar system option.
-*/
-						uinput(WIN_MID,0,0,"Billing Node Cost Per Call "
-							"(in dollars)",str,2,K_NUMBER|K_EDIT);
-						node_dollars_per_call=atoi(str);
-						break;
-					case 8:
-SETHELP(WHERE);
-/*
-Daily Event:
-
-If you have an event that this node should run every day, enter the
-command line for that event here.
-
-An event can be any valid DOS command line. If multiple programs or
-commands are required, use a batch file.
-
-Remember: The %! command line specifier is an abreviation for your
-		  configured EXEC directory path.
-*/
-						uinput(WIN_MID|WIN_SAV,0,10,"Daily Event"
-							,node_daily,50,K_EDIT);
-						break;
-					case 9:
-						strcpy(str,ctrl_dir);
-						if(strstr(str,"\\CTRL\\")!=NULL)
-							*strstr(str,"\\CTRL\\")=0;
-SETHELP(WHERE);
-/*
-Control Directory Parent:
-
-Your control directory contains important configuration and data files
-that ALL nodes share. This directory MUST NOT be located on a RAM disk
-or other volatile media.
-
-This option allows you to change the parent of your control directory.
-The \CTRL\ suffix (sub-directory) cannot be changed or removed.
-*/
-						if(uinput(WIN_MID|WIN_SAV,0,9,"Control Dir Parent"
-							,str,50,K_EDIT|K_UPPER)>0) {
-							if(str[strlen(str)-1]!='\\')
-								strcat(str,"\\");
-							strcat(str,"CTRL\\");
-							strcpy(ctrl_dir,str); }
-						break;
-					case 10:
-						strcpy(str,text_dir);
-						if(strstr(str,"\\TEXT\\")!=NULL)
-							*strstr(str,"\\TEXT\\")=0;
-SETHELP(WHERE);
-/*
-Text Directory Parent:
-
-Your text directory contains read-only text files. Synchronet never
-writes to any files in this directory so it CAN be placed on a RAM
-disk or other volatile media. This directory contains the system's menus
-and other important text files, so be sure the files and directories are
-moved to this directory if you decide to change it.
-
-This option allows you to change the parent of your control directory.
-The \TEXT\ suffix (sub-directory) cannot be changed or removed.
-*/
-						if(uinput(WIN_MID|WIN_SAV,0,10,"Text Dir Parent"
-							,str,50,K_EDIT|K_UPPER)>0) {
-							if(str[strlen(str)-1]!='\\')
-								strcat(str,"\\");
-							strcat(str,"TEXT\\");
-							strcpy(text_dir,str); }
-						break;
-					case 11:
-						strcpy(str,temp_dir);
-SETHELP(WHERE);
-/*
-Temp Directory:
-
-Your temp directory is where Synchronet stores files of a temporary
-nature for this node. Each node MUST have its own unique temp directory.
-This directory can exist on a RAM disk or other volatile media. For
-the best batch upload performance, it should be located on the same
-drive as the majority of your upload directories.
-*/
-						uinput(WIN_MID|WIN_SAV,0,10,"Temp Directory"
-							,str,50,K_EDIT|K_UPPER);
-						if(!strlen(str))
-							umsg("Temp directory cannot be blank");
-						else
-							strcpy(temp_dir,str);
-						break;
-					case 12:
-						strcpy(str,node_swapdir);
-SETHELP(WHERE);
-/*
-Swap Directory:
-
-Your swap directory is where Synchronet will swap out to if you have
-swapping enabled, and it is necessary to swap to disk. The default is
-the node directory. If you do specify a swap directory, it must not
-be a relative path (i.e. "..\etc"). Specify the entire path and include
-the drive letter specification (i.e. "D:\SBBS\SWAP").
-*/
-						uinput(WIN_MID|WIN_SAV,0,10,"Swap Directory"
-							,str,50,K_EDIT|K_UPPER);
-						if(str[0] && strcmp(str,".") && strcmp(str,".\\")
-							&& (strstr(str,"..") || str[1]!=':'
-							|| str[2]!='\\'))
-							umsg("Must specify full path");
-						else
-							strcpy(node_swapdir,str);
-						break; } }
-			break;
-		case 11:
-SETHELP(WHERE);
-/*
-Wait for Call Number Key Commands:
-
-Each of the number keys (0 through 9) can be assigned a command to
-execute when entered at the wait for call screen. This is a list of
-those keys and the assigned commands. Since Synchronet is still in
-memory when these command are executed, the number keys should be used
-for small program execution or command lines with small memory
-requirements.
-
-If you have a program or command line with large memory requirements,
-use a Wait for Call Function Key Command.
-*/
-			j=0;
-			while(1) {
-				for(i=0;i<10;i++)
-					sprintf(opt[i],"%d  %s",i,wfc_cmd[i]);
-				opt[i][0]=0;
-				savnum=0;
-
-				i=ulist(WIN_T2B|WIN_RHT|WIN_ACT|WIN_SAV,2,0,50,&j,0
-					,"Number Key Commands",opt);
-				if(i==-1)
-					break;
-				sprintf(str,"%d Key Command Line",i);
-				uinput(WIN_MID|WIN_SAV,0,0,str,wfc_cmd[i],50,K_EDIT); }
-			break;
-		case 12:
-SETHELP(WHERE);
-/*
-Wait for Call Function Key Commands:
-
-Each of the function keys (F1 through F12) can be assigned a command to
-execute when entered at the wait for call screen. This is a list of
-those keys and the currently assigned commands. Synchronet will shrink
-to 16K of RAM before executing one of these command lines.
-
-If you have a command line with small memory requirements, you should
-probably use a Wait for Call Number Key Command for faster execution.
-*/
-			j=0;
-			while(1) {
-				for(i=0;i<12;i++)
-					sprintf(opt[i],"F%-2d  %s",i+1,wfc_scmd[i]);
-				opt[i][0]=0;
-				savnum=0;
-				i=ulist(WIN_T2B|WIN_RHT|WIN_ACT|WIN_SAV,2,0,50,&j,0
-					,"Function Key (Shrinking) Commands",opt);
-				if(i==-1)
-					break;
-				sprintf(str,"F%d Key Command Line",i+1);
-				uinput(WIN_MID|WIN_SAV,0,0,str,wfc_scmd[i],50,K_EDIT); }
-            break;
-		case 10:
-			done=0;
-			while(!done) {
-				i=0;
-				sprintf(opt[i++],"%-27.27s%s","COM Port"
-					,com_port ? itoa(com_port,tmp,10) : "Disabled");
-				sprintf(opt[i++],"%-27.27s%u"
-					,com_base && com_base<0x100 ? "COM Channel"
-						:"UART IRQ Line"
-					,com_irq);
-				if(com_base==0xd)
-					strcpy(str,"DigiBoard");
-				else if(com_base==0xf)
-					strcpy(str,"FOSSIL");
-				else if(com_base==0xb)
-					strcpy(str,"PC BIOS");
-				else if(com_base==0xe)
-					strcpy(str,"PS/2 BIOS");
-				else
-					sprintf(str,"%Xh",com_base);
-				sprintf(opt[i++],"%-27.27s%s"
-					,com_base<0x100 ? "COM Type":"UART I/O Address",str);
-				sprintf(opt[i++],"%-27.27s%lu","DTE Rate",com_rate);
-				sprintf(opt[i++],"%-27.27s%s","Fixed DTE Rate"
-					,mdm_misc&MDM_STAYHIGH ? "Yes" : "No");
-				if(!(mdm_misc&(MDM_RTS|MDM_CTS)))
-					strcpy(str,"None");
-				else {
-					if(mdm_misc&MDM_CTS) {
-						strcpy(str,"CTS");
-						if(mdm_misc&MDM_RTS)
-							strcat(str,"/"); }
-					else str[0]=0;
-					if(mdm_misc&MDM_RTS)
-						strcat(str,"RTS"); }
-				sprintf(opt[i++],"%-27.27s%s","Hardware Flow Control",str);
-				sprintf(opt[i++],"%-27.27s%u ring%c","Answer After"
-					,mdm_rings,mdm_rings>1 ? 's':' ');
-				sprintf(opt[i++],"%-27.27s%u second%c","Answer Delay"
-					,mdm_ansdelay,mdm_ansdelay>1 ? 's':' ');
-				sprintf(opt[i++],"%-27.27s%s","Reinitialization Timer"
-					,mdm_reinit ? itoa(mdm_reinit,tmp,10) : "Disabled");
-				strcpy(opt[i++],"Result Codes...");
-				strcpy(opt[i++],"Toggle Options...");
-				strcpy(opt[i++],"Control Strings...");
-				strcpy(opt[i++],"Auto-Configuration...");
-				strcpy(opt[i++],"Import Configuration...");
-				strcpy(opt[i++],"Export Configuration...");
-				opt[i][0]=0;
-				savnum=0;
-SETHELP(WHERE);
-/*
-Modem Configuration Menu:
-
-This menu contains the configuration options for this node's modem.
-If you do not have a modem attached to this node or do not want to use
-an attached modem, you can disable the Synchronet modem communications
-by setting the COM Port to 0.
-
-If your modem is listed in the Auto-Configuration, you should probably
-just set the COM Port and run the auto-configuration for your modem
-type.
-*/
-				switch(ulist(WIN_T2B|WIN_RHT|WIN_ACT|WIN_SAV,2,0,44,&mdm_dflt,0
-					,"Modem Configuration",opt)) {
-                    case -1:
-						done=1;
-						break;
-					case 0:
-						itoa(com_port,str,10);
-SETHELP(WHERE);
-/*
-COM Port:
-
-This is the serial communications port that the modem for this node is
-connected to. If you do not have a modem connected to this node, or
-do not wish to use a connected modem, you can disable the Synchronet
-modem communications by setting this value to 0.
-*/
-						if(uinput(WIN_MID|WIN_SAV,0,10,"COM Port (0=Disabled)"
-							,str,2,K_EDIT|K_NUMBER)==-1)
-							break;
-						com_port=atoi(str);
-						if(!com_port)
-							break;
-						savnum=1;
-						com_type();
-						break;
-					case 1:
-						itoa(com_irq,str,10);
-SETHELP(WHERE);
-/*
-UART IRQ Line or Channel Number:
-
-If you are using a standard UART serial interface for this COM port,
-this is the IRQ line that your COM Port's UART is using. If you have
-configured your COM Port and selected the default IRQ and I/O address,
-you should not need to change the value of this option.
-
-If this COM port is accessed via Int 14h, this is the channel number
-for this COM port (normally, the COM port number minus one).
-*/
-						uinput(WIN_MID|WIN_SAV,0,10
-							,com_base && com_base<0x100 ? "Channel"
-							: "UART IRQ Line"
-							,str,2,K_EDIT|K_NUMBER);
-						com_irq=atoi(str);
-						break;
-					case 2:
-						savnum=1;
-						if(com_type() || com_base<0x100)
-							break;
-SETHELP(WHERE);
-/*
-UART I/O Address in Hex:
-
-This is the base I/O address of your COM Port's UART. If you have
-configured your COM Port and selected the default IRQ and I/O address,
-you should not need to change the value of this option. If this node's
-COM Port's UART is using a non-standard I/O address, enter that address
-(in hexadecimal) using this option.
-*/
-						itoa(com_base,str,16);
-						strupr(str);
-						uinput(WIN_MID|WIN_SAV,0,10
-							,"UART I/O Address in Hex"
-							,str,4,K_EDIT|K_UPPER);
-						com_base=ahtoul(str);
-                        break;
-					case 3:
-						savnum=1;
-SETHELP(WHERE);
-/*
-UART (DTE) Rate:
-
-This is the data transfer rate between your COM Port's UART (Data
-Terminal Equipment) and your modem. This is NOT the connect rate of
-your modem (Data Communications Equipment). Most high-speed (9600bps+)
-modems use a fixed DTE rate that is higher than the highest DCE rate to
-allow for data compression and error correction. This value should be
-set to the highest DTE rate your modem supports. If you have a 1200 or
-2400bps modem without data compression capabilities, this value should
-be set to 1200 or 2400 respectively. If you have a high-speed modem,
-refer to the modem's manual to find the highest supported DTE rate.
-*/
-						i=0;
-						strcpy(opt[i++],"300");
-						strcpy(opt[i++],"1200");
-						strcpy(opt[i++],"2400");
-						strcpy(opt[i++],"4800");
-						strcpy(opt[i++],"9600");
-						strcpy(opt[i++],"19200");
-						strcpy(opt[i++],"38400");
-						strcpy(opt[i++],"57600");
-						strcpy(opt[i++],"115200");
-						opt[i][0]=0;
-						switch(com_rate) {
-							default:
-								i=0;
-								break;
-							case 1200:
-								i=1;
-								break;
-							case 2400:
-								i=2;
-								break;
-							case 4800:
-								i=3;
-								break;
-							case 9600:
-								i=4;
-								break;
-							case 19200:
-								i=5;
-								break;
-							case 38400:
-								i=6;
-								break;
-							case 57600:
-								i=7;
-								break;
-							case 115200L:
-								i=8;
-								break; }
-						i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0,"UART (DTE) Rate"
-							,opt);
-						if(i==-1)
-							break;
-						changes=1;
-						switch(i) {
-							default:
-								com_rate=300;
-								break;
-							case 1:
-								com_rate=1200;
-								break;
-							case 2:
-								com_rate=2400;
-								break;
-							case 3:
-								com_rate=4800;
-								break;
-							case 4:
-								com_rate=9600;
-								break;
-							case 5:
-								com_rate=19200;
-								break;
-							case 6:
-								com_rate=38400;
-								break;
-							case 7:
-								com_rate=57600;
-								break;
-							case 8:
-								com_rate=115200L;
-								break; }
-						break;
-					case 4:
-						i=1;
-						savnum=1;
-						strcpy(opt[0],"Yes");
-						strcpy(opt[1],"No");
-						opt[2][0]=0;
-SETHELP(WHERE);
-/*
-Use Fixed DTE Rate:
-
-If this node is using a modem with error correction or data compression
-capabilities, set this option to Yes. If you are using a 2400bps or
-slower modem, it is most likely this value should be set to No.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0,"Use Fixed "
-							"DTE Rate",opt);
-						if(i==0 && !(mdm_misc&MDM_STAYHIGH)) {
-							mdm_misc|=MDM_STAYHIGH;
-							changes=1; }
-						else if(i==1 && mdm_misc&MDM_STAYHIGH) {
-							mdm_misc&=~MDM_STAYHIGH;
-							changes=1; }
-						break;
-					case 5:
-						i=1;
-						savnum=1;
-						strcpy(opt[0],"Both");
-						strcpy(opt[1],"CTS Only");
-						strcpy(opt[2],"RTS Only");
-						strcpy(opt[3],"None");
-						opt[4][0]=0;
-						i=0;
-SETHELP(WHERE);
-/*
-Hardware Flow Control (CTS/RTS):
-
-If your modem supports the use of hardware flow control via CTS/RTS
-(Clear to Send/Request to Send), set this option to Both. If are using
-a high-speed modem or a modem with data compression or error correction
-capabilities, it is most likely this option should be set to Both. If
-you are using a 2400bps or slower modem without data compression or
-error correction capabilities, set this option to None.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0,"Hardware "
-							"Flow Control (CTS/RTS)",opt);
-						if(i==0
-							&& (mdm_misc&(MDM_CTS|MDM_RTS))
-									   !=(MDM_CTS|MDM_RTS)) {
-							mdm_misc|=(MDM_CTS|MDM_RTS);
-							changes=1; }
-						else if(i==1
-							&& (mdm_misc&(MDM_CTS|MDM_RTS))!=MDM_CTS) {
-							mdm_misc|=MDM_CTS;
-							mdm_misc&=~MDM_RTS;
-							changes=1; }
-						else if(i==2
-							&& (mdm_misc&(MDM_CTS|MDM_RTS))!=MDM_RTS) {
-							mdm_misc|=MDM_RTS;
-							mdm_misc&=~MDM_CTS;
-                            changes=1; }
-						else if(i==3
-							&& mdm_misc&(MDM_CTS|MDM_RTS)) {
-							mdm_misc&=~(MDM_RTS|MDM_CTS);
-                            changes=1; }
-						break;
-
-					case 6:
-SETHELP(WHERE);
-/*
-Number of Rings to Answer After:
-
-This is the number of rings to let pass before answering the phone.
-*/
-                        itoa(mdm_rings,str,10);
-                        uinput(WIN_MID|WIN_SAV,0,0
-                            ,"Number of Rings to Answer After"
-                            ,str,2,K_EDIT|K_NUMBER);
-                        mdm_rings=atoi(str);
-                        if(!mdm_rings)
-                            mdm_rings=1;
-                        break;
-
-					case 7:
-SETHELP(WHERE);
-/*
-Seconds to Delay after Answer:
-
-This is the length of time (in seconds) to delay after connection and
-before the terminal detection sequence is trasmitted to the remote user
-and the logon prompt is displayed.
-*/
-						itoa(mdm_ansdelay,str,10);
-						uinput(WIN_MID|WIN_SAV,0,0
-							,"Answer Delay (in seconds)"
-							,str,4,K_EDIT|K_NUMBER);
-						mdm_ansdelay=atoi(str);
-						break;
-
-					case 8:
-SETHELP(WHERE);
-/*
-Minutes Between Reinitialization:
-
-If you want your modem to be periodically reinitialized while waiting
-for a caller, set this option to the maximum number of minutes between
-initializations. Setting this value to 0 disables this feature.
-*/
-						itoa(mdm_reinit,str,10);
-						uinput(WIN_MID|WIN_SAV,0,0
-							,"Minutes Between Reinitialization (0=Disabled)"
-							,str,4,K_EDIT|K_NUMBER);
-						mdm_reinit=atoi(str);
-						break;
-					case 9:
-						dflt=bar=0;
-						while(1) {
-							for(i=0;i<mdm_results;i++) {
-								sprintf(opt[i],"%3u %5ubps %4ucps %s"
-									,mdm_result[i].code,mdm_result[i].rate
-									,mdm_result[i].cps,mdm_result[i].str); }
-							opt[i][0]=0;
-							i=WIN_ACT|WIN_SAV|WIN_RHT;
-							if(mdm_results<MAX_OPTS)
-								i|=WIN_INS;
-							if(mdm_results>1)
-								i|=WIN_DEL;
-							savnum=1;
-SETHELP(WHERE);
-/*
-Modem Result Codes:
-
-This is the list of configured numeric connection result codes that this
-node's modem supports. If this node is getting Invalid Result Code
-errors when answer incoming calls, those result codes should be added
-to this list. Refer to your modem's manual for a list of supported
-result codes. Using the Auto-Configuration option automatically
-configures this list for you.
-To add a result code, hit  INS .
-
-To delete a result code, select it using the arrow keys and hit  DEL .
-*/
-							i=ulist(i,0,0,34,&dflt,&bar
-								,"Modem Result Codes",opt);
-							if(i==-1)
-								break;
-							if((i&MSK_ON)==MSK_DEL) {
-								i&=MSK_OFF;
-								mdm_results--;
-								while(i<mdm_results) {
-									mdm_result[i]=mdm_result[i+1];
-									i++; }
-								changes=1;
-								continue; }
-							if((i&MSK_ON)==MSK_INS) {
-								i&=MSK_OFF;
-								if((mdm_result=(mdm_result_t *)REALLOC(
-									mdm_result,sizeof(mdm_result_t)
-									*(mdm_results+1)))==NULL) {
-									errormsg(WHERE,ERR_ALLOC,nulstr
-										,mdm_results+1);
-									mdm_results=0;
-									bail(1);
-									continue; }
-								for(j=mdm_results;j>i;j--)
-									mdm_result[j]=mdm_result[j-1];
-								mdm_result[i]=mdm_result[i+1];
-								mdm_results++;
-								changes=1;
-								continue; }
-							results(dflt); }
-						break;
-					case 10:	/* Toggle Options */
-						dflt=0;
-						while(1) {
-							savnum=1;
-							i=0;
-							sprintf(opt[i++],"%-27.27s%s"
-								,"Caller Identification"
-								,mdm_misc&MDM_CALLERID ? "Yes" : "No");
-							sprintf(opt[i++],"%-27.27s%s"
-								,"Dumb Modem Connection"
-								,mdm_misc&MDM_DUMB ? "Yes" : "No");
-							sprintf(opt[i++],"%-27.27s%s"
-								,"Drop DTR to Hang Up"
-								,mdm_misc&MDM_NODTR ? "No" : "Yes");
-							sprintf(opt[i++],"%-27.27s%s"
-								,"Use Verbal Result Codes"
-								,mdm_misc&MDM_VERBAL ? "Yes" : "No");
-							sprintf(opt[i++],"%-27.27s%s"
-								,"Allow Unknown Result Codes"
-                                ,mdm_misc&MDM_KNOWNRES ? "No" : "Yes");
-							opt[i][0]=0;
-							i=ulist(WIN_SAV|WIN_ACT,0,0,0,&dflt,0
-								,"Modem Toggle Options",opt);
-							savnum=2;
-							if(i==-1)
-								break;
-							if(i==0) {
-								i=1;
-								strcpy(opt[0],"Yes");
-								strcpy(opt[1],"No");
-								opt[2][0]=0;
-SETHELP(WHERE);
-/*
-Caller Identification:
-
-If your modem supports Caller ID and is configured to return caller
-number delivery messages, set this option to Yes.
-
-If this option is set to Yes, Synchronet will log caller number delivery
-messages. If a caller attempts to connect with a number listed in the
-file TEXT\CID.CAN, they will be displayed TEXT\BADCID.MSG (if it exists)
-and disconnected. Each user will have their most recent caller ID number
-stored in their note field.
-*/
-								i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-									,"Caller ID",opt);
-								if(i==0 && !(mdm_misc&MDM_CALLERID)) {
-									mdm_misc|=MDM_CALLERID;
-									changes=1; }
-								else if(i==1 && mdm_misc&MDM_CALLERID) {
-									mdm_misc&=~MDM_CALLERID;
-									changes=1; } }
-							else if(i==1) {
-								i=1;
-								strcpy(opt[0],"Yes");
-								strcpy(opt[1],"No");
-								opt[2][0]=0;
-SETHELP(WHERE);
-/*
-Dumb Modem Connection:
-
-If this node is connected to a serial line through a dumb modem, set
-this option to Yes to disable all modem commands and answer calls when
-DCD is raised.
-*/
-								i=ulist(WIN_SAV|WIN_MID,0,0,0,&i,0
-									,"Dumb Modem",opt);
-								if(i==0 && !(mdm_misc&MDM_DUMB)) {
-									mdm_misc|=MDM_DUMB;
-									changes=1; }
-								else if(i==1 && mdm_misc&MDM_DUMB) {
-									mdm_misc&=~MDM_DUMB;
-									changes=1; } }
-							else if(i==2) {
-								i=0;
-								strcpy(opt[0],"Yes");
-								strcpy(opt[1],"No");
-								opt[2][0]=0;
-SETHELP(WHERE);
-/*
-Drop DTR to Hang Up:
-
-If you wish to have the BBS drop DTR to hang up the modem, set this
-option to Yes. If this option is set to No, the Hang Up String is sent
-to modem instead.
-*/
-								i=ulist(WIN_SAV|WIN_MID,0,0,0,&i,0
-									,"Drop DTR to Hang Up",opt);
-								if(i==0 && mdm_misc&MDM_NODTR) {
-									mdm_misc&=~MDM_NODTR;
-									changes=1; }
-								else if(i==1 && !(mdm_misc&MDM_NODTR)) {
-									mdm_misc|=MDM_NODTR;
-                                    changes=1; } }
-							else if(i==3) {
-								i=1;
-								strcpy(opt[0],"Yes");
-								strcpy(opt[1],"No");
-								opt[2][0]=0;
-SETHELP(WHERE);
-/*
-Use Verbal Result Codes:
-
-If you wish to have the BBS expect verbal (or verbose) result codes
-from the modem instead of numeric (non-verbose) result codes, set this
-option to Yes.
-
-This option can be useful for modems that insist on returning multiple
-result codes upon connection (CARRIER, PROTOCOL, etc) or modems that
-do not report numeric result codes correctly. While this option is more
-flexible than numeric result codes, it may not be as accurate in
-describing the connection or estimating the CPS rate of the connection.
-
-If this option is set to Yes, the configured result code list will not
-be used (you may remove all entries from the list if you wish). The
-connection rate, description, and estimated CPS will be automatically
-generated by the BBS.
-*/
-								i=ulist(WIN_SAV|WIN_MID,0,0,0,&i,0
-									,"Use Verbal Result Codes",opt);
-								if(i==0 && !(mdm_misc&MDM_VERBAL)) {
-									mdm_misc|=MDM_VERBAL;
-									changes=1; }
-								else if(i==1 && mdm_misc&MDM_VERBAL) {
-									mdm_misc&=~MDM_VERBAL;
-                                    changes=1; } }
-							else if(i==4) {
-								i=0;
-								strcpy(opt[0],"Yes");
-								strcpy(opt[1],"No");
-								opt[2][0]=0;
-SETHELP(WHERE);
-/*
-Allow Unknown Result Codes:
-
-If you wish to have the BBS allow modem connections with an unknown
-(un-configured) numeric result code by using the last known (configured)
-result code information by default, set this option to Yes.
-
-This option has no effect if Verbal Result Codes are used.
-*/
-								i=ulist(WIN_SAV|WIN_MID,0,0,0,&i,0
-									,"Allow Unknown Result Codes",opt);
-								if(i==0 && mdm_misc&MDM_KNOWNRES) {
-									mdm_misc&=~MDM_KNOWNRES;
-									changes=1; }
-								else if(i==1 && !(mdm_misc&MDM_KNOWNRES)) {
-									mdm_misc|=MDM_KNOWNRES;
-                                    changes=1; } }
-									}
-						break;
-					case 11:
-SETHELP(WHERE);
-/*
-Modem Control Strings:
-
-This menu contains a list of available modem control strings. It is usually
-not necessary to modify these except under special circumstances.
-*/
-                        j=0;
-                        while(1) {
-                            i=0;
-                            savnum=1;
-							sprintf(opt[i++],"%-27.27s%.40s"
-                                ,"Initialization String",mdm_init);
-							sprintf(opt[i++],"%-27.27s%.40s"
-                                ,"Special Init String",mdm_spec);
-							sprintf(opt[i++],"%-27.27s%.40s"
-                                ,"Terminal Init String",mdm_term);
-							sprintf(opt[i++],"%-27.27s%.40s"
-                                ,"Dial String",mdm_dial);
-							sprintf(opt[i++],"%-27.27s%.40s"
-                                ,"Off Hook String",mdm_offh);
-							sprintf(opt[i++],"%-27.27s%.40s"
-                                ,"Answer String",mdm_answ);
-							sprintf(opt[i++],"%-27.27s%.40s"
-								,"Hang Up String",mdm_hang);
-							opt[i][0]=0;
-                            j=ulist(WIN_ACT|WIN_MID|WIN_SAV,0,0,60,&j,0
-                                ,"Modem Control Strings",opt);
-                            if(j==-1)
-                                break;
-                            switch(j) {
-                                case 0:
-SETHELP(WHERE);
-/*
-Initialization String:
-
-This is one of the strings of characters sent to your modem upon
-modem initialization. If you find it necessary to send additional
-commands to the modem during initialization, use the Special Init String
-for that purpose.
-*/
-                                    uinput(WIN_MID|WIN_SAV,0,0
-                                        ,"Initialization"
-                                        ,mdm_init,50,K_EDIT|K_UPPER);
-                                    break;
-                                case 1:
-SETHELP(WHERE);
-/*
-Special Init String:
-
-This is an additional optional string of characters to be sent to your
-modem during initialization. Many of the Auto-Configuration options
-automatically set this string. It is used for sending commands that are
-particular to this modem type. If you find it necessary to send
-additional commands to your modem during initialization, use this option
-for that purpose.
-*/
-                                    uinput(WIN_MID|WIN_SAV,0,0
-                                        ,"Special Init"
-                                        ,mdm_spec,50,K_EDIT|K_UPPER);
-                                    break;
-                                case 2:
-SETHELP(WHERE);
-/*
-Terminal Init String:
-
-This is the string of characters sent to your modem when terminal mode
-is entered from the Synchronet wait for call screen.
-*/
-                                    uinput(WIN_MID|WIN_SAV,0,0
-                                        ,"Terminal Init"
-                                        ,mdm_term,50,K_EDIT|K_UPPER);
-                                    break;
-                                case 3:
-SETHELP(WHERE);
-/*
-Dial String:
-
-This is the string used to dial the modem in Synchronet Callback
-(an optional callback verification module).
-*/
-                                    uinput(WIN_MID|WIN_SAV,0,0
-										,"Dial String",mdm_dial,40
-                                        ,K_EDIT|K_UPPER);
-                                    break;
-                                case 4:
-SETHELP(WHERE);
-/*
-Off Hook String:
-
-This is the string of characters sent to your modem to take it off hook
-(make busy).
-*/
-                                    uinput(WIN_MID|WIN_SAV,0,0
-                                        ,"Off Hook String",mdm_offh
-                                        ,40,K_EDIT|K_UPPER);
-                                    break;
-                                case 5:
-SETHELP(WHERE);
-/*
-Answer String:
-
-This is the string of characters sent to your modem to answer an
-incoming call.
-*/
-                                    uinput(WIN_MID|WIN_SAV,0,0
-                                        ,"Answer String",mdm_answ,40
-                                        ,K_EDIT|K_UPPER);
-									break;
-								case 6:
-SETHELP(WHERE);
-/*
-Hang Up String:
-
-This is the string of characters sent to your modem to hang up the
-phone line (go on-hook).
-*/
-                                    uinput(WIN_MID|WIN_SAV,0,0
-										,"Hang Up String",mdm_hang,40
-                                        ,K_EDIT|K_UPPER);
-                                    break;
-									} }
-						break;
-					case 12:
-						dflt=bar=0;
-						while(1) {
-							for(i=0;i<mdm_types;i++)
-								strcpy(opt[i],mdm_type[i]);
-							opt[i][0]=0;
-							savnum=1;
-SETHELP(WHERE);
-/*
-Auto-Configuration Modem Type:
-
-This is the list of modem types currently supported by Synchronet's
-automatic modem configuration feature. If your modem is listed, select
-it using the arrow keys and hit  ENTER . If your modem is not listed,
-you may want to try using the auto-configuration of a compatible modem
-or one from the same manufacturer. If you have a 2400bps modem, select
-Hayes SmartModem 2400. If you have a high-speed modem that is not
-listed, you may want to try Generic 9600 or Generic 14400 and add
-the additional high-speed result codes by hand. Refer to your modem's
-manual for a list of result codes supported by your modem.
-*/
-							i=ulist(WIN_ACT|WIN_SAV|WIN_RHT,0,0,0
-								,&dflt,&bar,"Modem Type",opt);
-							if(i==-1)
-								break;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							opt[2][0]=0;
-							j=1;
-							savnum=2;
-
-							j=ulist(WIN_MID|WIN_SAV,0,0,0,&j,0
-								,"Continue with Modem Auto-Configuration",opt);
-							if(!j) {
-								mdm_cfg(i);
-								changes=1;
-								sprintf(str
-									,"Modem configured as %s",mdm_type[i]);
-								savnum=1;
-								umsg(str); } }
-						break;
-					case 13:
-SETHELP(WHERE);
-/*
-Import Modem Configuration File
-
-Using this option, you can import modem settings from an MDM file in
-your CTRL directory (i.e. To import from CTRL\MYMODEM.MDM, type MYMODEM
-now).
-*/
-						i=changes;
-						str[0]=0;
-						uinput(WIN_MID|WIN_SAV,0,0,"MDM Filename",str
-							,8,K_UPPER);
-						if(str[0]) {
-							FREE(mdm_result);
-							mdm_result=NULL;
-
-							mdm_answ[0]=0;
-							mdm_hang[0]=0;
-							mdm_dial[0]=0;
-							mdm_offh[0]=0;
-							mdm_term[0]=0;
-							mdm_init[0]=0;
-							mdm_spec[0]=0;
-							mdm_results=0;
-
-							if(exec_mdm(str))
-								umsg("Imported");
-							else {
-								umsg("File Not Found");
-								changes=i; } }
-						else
-							changes=i;
-                        break;
-
-					case 14:
-SETHELP(WHERE);
-/*
-Export Current Modem Configuration to a File
-
-Using this option, you can save the current modem settings to a file.
-The file will be placed into the CTRL directory and will be given an
-extension of MDM (i.e. To create CTRL\MYMODEM.MDM, type MYMODEM now).
-*/
-						i=changes;
-						str[0]=0;
-						uinput(WIN_MID|WIN_SAV,0,0,"MDM Filename",str
-							,8,K_UPPER);
-						if(str[0]) {
-							if(export_mdm(str))
-								umsg("Exported");
-							else
-								umsg("Error Exporting"); }
-						changes=i;
-						break;
-						} } } }
-}
-
-void results(int i)
-{
-	char str[81];
-	int n,dflt=0;
-
-while(1) {
-	n=0;
-	sprintf(opt[n++],"%-22.22s%u","Numeric Code",mdm_result[i].code);
-	sprintf(opt[n++],"%-22.22s%ubps","Modem Connect Rate",mdm_result[i].rate);
-	sprintf(opt[n++],"%-22.22s%ucps","Modem Average CPS",mdm_result[i].cps);
-	sprintf(opt[n++],"%-22.22s%s","Description",mdm_result[i].str);
-	opt[n][0]=0;
-	savnum=2;
-SETHELP(WHERE);
-/*
-Result Code:
-
-This is one of the configured connect result codes for your modem. The
-available options are:
-
-    Numeric Code       :  Numeric result code
-    Modem Connect Rate :  Connect speed (in bps) for this result code
-	Modem Average CPS  :  Average file transfer throughput in cps
-    Description        :  Description of this connection type
-*/
-	switch(ulist(WIN_SAV|WIN_MID|WIN_ACT,0,0,35,&dflt,0,"Result Code",opt)) {
-		case -1:
-			return;
-		case 0:
-			sprintf(str,"%u",mdm_result[i].code);
-SETHELP(WHERE);
-/*
-Numeric Result Code:
-
-This is the numeric (as opposed to verbal) result code your modem will
-send to your computer when it establishes a connection with another
-modem with this connect type. Your modem must have the V0 setting
-enabled to return numeric result codes.
-*/
-			uinput(WIN_L2R|WIN_SAV,0,15,"Numeric Result Code",str,3
-				,K_EDIT|K_NUMBER);
-			mdm_result[i].code=atoi(str);
-			break;
-		case 1:
-SETHELP(WHERE);
-/*
-Connection (DCE) Rate:
-
-This is the modem (DCE) rate established with this connect type. This is
-NOT the DTE rate of your modem. As an example, a 14,400bps modem may
-have a DTE rate of 38,400bps but a maximum DCE rate of 14,400bps.
-*/
-			sprintf(str,"%u",mdm_result[i].rate);
-			uinput(WIN_L2R|WIN_SAV,0,15,"Connection (DCE) Rate",str,5
-				,K_EDIT|K_NUMBER);
-			mdm_result[i].rate=atoi(str);
-			break;
-		case 2:
-SETHELP(WHERE);
-/*
-Average File Transfer CPS:
-
-This is the average file transfer through-put (characters per second)
-of connections with this result code. If you don't know the average
-through-put, just divide the DCE Rate by ten for an approximation.
-As an example, a 9600bps DCE Rate would have an approximate file
-transfer through-put of 960cps.
-*/
-			sprintf(str,"%u",mdm_result[i].cps);
-			uinput(WIN_L2R|WIN_SAV,0,15,"Average File Transfer CPS",str,5
-				,K_EDIT|K_NUMBER);
-			mdm_result[i].cps=atoi(str);
-			break;
-		case 3:
-SETHELP(WHERE);
-/*
-Modem Description:
-
-This is a description of the modem type used for a connection with
-this result code. It can be up to eight characters long. This
-description usually just contains the DCE rate and possibly the
-protocol type. Such as 2400 for a 2400bps connection, 9600/V32
-for a 9600bps V.32 connection or 9600/HST for a 9600bps HST connection.
-*/
-			uinput(WIN_L2R|WIN_SAV,0,15,"Modem Description"
-				,mdm_result[i].str,LEN_MODEM,K_EDIT);
-			break; } }
-}
diff --git a/src/sbbs2/scfg/scfgsub.c b/src/sbbs2/scfg/scfgsub.c
deleted file mode 100644
index a318e8b4be..0000000000
--- a/src/sbbs2/scfg/scfgsub.c
+++ /dev/null
@@ -1,1200 +0,0 @@
-#line 2 "SCFGSUB.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "scfg.h"
-
-void sub_cfg(uint grpnum)
-{
-	static int dflt,tog_dflt,opt_dflt,net_dflt,adv_dflt,bar;
-	char str[81],str2[81],str3[11],done=0,code[9],*p;
-	int j,m,n,ptridx,q,s;
-	uint i,subnum[MAX_OPTS+1];
-	static sub_t savsub;
-
-while(1) {
-	for(i=0,j=0;i<total_subs && j<MAX_OPTS;i++)
-        if(sub[i]->grp==grpnum) {
-			subnum[j]=i;
-			if(sub[subnum[0]]->qwkconf)
-				sprintf(opt[j],"%-5u %s"
-					,sub[i]->qwkconf,sub[i]->lname);
-			else
-				sprintf(opt[j],"%s"
-					,sub[i]->lname);
-			j++; }
-	subnum[j]=total_subs;
-	opt[j][0]=0;
-	sprintf(str,"%s Sub-boards",grp[grpnum]->sname);
-	savnum=0;
-	i=WIN_SAV|WIN_ACT;
-	if(j)
-		i|=WIN_DEL|WIN_GET|WIN_DELACT;
-	if(j<MAX_OPTS)
-		i|=WIN_INS|WIN_XTR|WIN_INSACT;
-	if(savsub.sname[0])
-		i|=WIN_PUT;
-	SETHELP(WHERE);
-/*
-Message Sub-boards:
-
-This is a list of message sub-boards that have been configured for the
-selected message group.
-
-To add a sub-board, select the desired position with the arrow keys and
-hit  INS .
-
-To delete a sub-board, select it with the arrow keys and hit  DEL .
-
-To configure a sub-board, select it with the arrow keys and hit  ENTER .
-*/
-	i=ulist(i,24,1,LEN_SLNAME+5,&dflt,&bar,str,opt);
-	savnum=1;
-	if((signed)i==-1)
-		return;
-	if((i&MSK_ON)==MSK_INS) {
-		i&=MSK_OFF;
-		strcpy(str,"General");
-		SETHELP(WHERE);
-/*
-Sub-board Long Name:
-
-This is a description of the message sub-board which is displayed in all
-sub-board listings.
-*/
-		if(uinput(WIN_MID|WIN_SAV,0,0,"Sub-board Long Name",str,LEN_SLNAME
-			,K_EDIT)<1)
-			continue;
-		sprintf(str2,"%.*s",LEN_SSNAME,str);
-		SETHELP(WHERE);
-/*
-Sub-board Short Name:
-
-This is a short description of the message sub-board which is displayed
-at the main and reading messages prompts.
-*/
-		if(uinput(WIN_MID|WIN_SAV,0,0,"Sub-board Short Name",str2,LEN_SSNAME
-			,K_EDIT)<1)
-			continue;
-		sprintf(str3,"%.10s",str2);
-		SETHELP(WHERE);
-/*
-Sub-board QWK Name:
-
-This is the name of the sub-board used for QWK off-line readers.
-*/
-		if(uinput(WIN_MID|WIN_SAV,0,0,"Sub-board QWK Name",str3,10
-            ,K_EDIT)<1)
-            continue;
-		sprintf(code,"%.8s",str3);
-		p=strchr(code,SP);
-		if(p) *p=0;
-		strupr(code);
-		SETHELP(WHERE);
-/*
-Sub-board Internal Code:
-
-Every sub-board must have its own unique code for Synchronet to refer to
-it internally. This code should be descriptive of the sub-board's topic,
-usually an abreviation of the sub-board's name.
-*/
-		if(uinput(WIN_MID|WIN_SAV,0,0,"Sub-board Internal Code",code,8
-			,K_EDIT|K_UPPER)<1)
-			continue;
-		if(!code_ok(code)) {
-			helpbuf=invalid_code;
-			savnum=0;
-			umsg("Invalid Code");
-			helpbuf=0;
-			continue; }
-
-		if((sub=(sub_t **)REALLOC(sub,sizeof(sub_t *)*(total_subs+1)))==NULL) {
-            errormsg(WHERE,ERR_ALLOC,nulstr,total_subs+1);
-			total_subs=0;
-			bail(1);
-            continue; }
-
-		for(ptridx=0;ptridx>-1;ptridx++) { /* Search for unused pointer indx */
-            for(n=0;n<total_subs;n++)
-				if(sub[n]->ptridx==ptridx)
-                    break;
-            if(n==total_subs)
-                break; }
-
-		if(j) {
-			for(n=total_subs;n>subnum[i];n--)
-                sub[n]=sub[n-1];
-			for(q=0;q<total_qhubs;q++)
-				for(s=0;s<qhub[q]->subs;s++)
-					if(qhub[q]->sub[s]>=subnum[i])
-						qhub[q]->sub[s]++; }
-
-		if((sub[subnum[i]]=(sub_t *)MALLOC(sizeof(sub_t)))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(sub_t));
-			continue; }
-		memset((sub_t *)sub[subnum[i]],0,sizeof(sub_t));
-		sub[subnum[i]]->grp=grpnum;
-		if(total_faddrs)
-			sub[subnum[i]]->faddr=faddr[0];
-		else
-			memset(&sub[subnum[i]]->faddr,0,sizeof(faddr_t));
-		sub[subnum[i]]->maxmsgs=500;
-		strcpy(sub[subnum[i]]->code,code);
-		strcpy(sub[subnum[i]]->lname,str);
-		strcpy(sub[subnum[i]]->sname,str2);
-		strcpy(sub[subnum[i]]->qwkname,str3);
-		sub[subnum[i]]->misc=(SUB_NSDEF|SUB_SSDEF|SUB_QUOTE|SUB_TOUSER
-			|SUB_HDRMOD|SUB_FAST);
-		sub[subnum[i]]->ptridx=ptridx;
-		total_subs++;
-		changes=1;
-		continue; }
-	if((i&MSK_ON)==MSK_DEL) {
-		i&=MSK_OFF;
-		SETHELP(WHERE);
-/*
-Delete Data in Sub-board:
-
-If you want to delete all the messages for this sub-board, select Yes.
-*/
-		j=1;
-		strcpy(opt[0],"Yes");
-		strcpy(opt[1],"No");
-		opt[2][0]=0;
-		j=ulist(WIN_MID|WIN_SAV,0,0,0,&j,0
-			,"Delete Data in Sub-board",opt);
-		if(j==-1)
-			continue;
-		if(j==0) {
-				sprintf(str,"%s.s*",sub[subnum[i]]->code);
-				if(!sub[subnum[i]]->data_dir[0])
-					sprintf(tmp,"%sSUBS\\",data_dir);
-				else
-					strcpy(tmp,sub[subnum[i]]->data_dir);
-				delfiles(tmp,str);
-				clearptrs(subnum[i]); }
-		FREE(sub[subnum[i]]);
-		total_subs--;
-		for(j=subnum[i];j<total_subs;j++)
-			sub[j]=sub[j+1];
-		for(q=0;q<total_qhubs;q++)
-			for(s=0;s<qhub[q]->subs;s++) {
-				if(qhub[q]->sub[s]==subnum[i])
-					qhub[q]->sub[s]=INVALID_SUB;
-				else if(qhub[q]->sub[s]>subnum[i])
-					qhub[q]->sub[s]--; }
-		changes=1;
-		continue; }
-	if((i&MSK_ON)==MSK_GET) {
-		i&=MSK_OFF;
-		savsub=*sub[subnum[i]];
-		continue; }
-	if((i&MSK_ON)==MSK_PUT) {
-		i&=MSK_OFF;
-		ptridx=sub[subnum[i]]->ptridx;
-		*sub[subnum[i]]=savsub;
-		sub[subnum[i]]->ptridx=ptridx;
-		sub[subnum[i]]->grp=grpnum;
-		changes=1;
-        continue; }
-	i=subnum[i];
-	j=0;
-	done=0;
-	while(!done) {
-		n=0;
-		sprintf(opt[n++],"%-27.27s%s","Long Name",sub[i]->lname);
-		sprintf(opt[n++],"%-27.27s%s","Short Name",sub[i]->sname);
-		sprintf(opt[n++],"%-27.27s%s","QWK Name",sub[i]->qwkname);
-		sprintf(opt[n++],"%-27.27s%s","Internal Code",sub[i]->code);
-		sprintf(opt[n++],"%-27.27s%.40s","Access Requirements"
-			,sub[i]->ar);
-		sprintf(opt[n++],"%-27.27s%.40s","Reading Requirements"
-            ,sub[i]->read_ar);
-		sprintf(opt[n++],"%-27.27s%.40s","Posting Requirements"
-			,sub[i]->post_ar);
-		sprintf(opt[n++],"%-27.27s%.40s","Operator Requirements"
-			,sub[i]->op_ar);
-		sprintf(opt[n++],"%-27.27s%.40s","Moderated Posting User"
-			,sub[i]->mod_ar);
-		sprintf(opt[n++],"%-27.27s%u","Maximum Messages"
-            ,sub[i]->maxmsgs);
-		if(sub[i]->maxage)
-            sprintf(str,"Enabled (%u days old)",sub[i]->maxage);
-        else
-            strcpy(str,"Disabled");
-		sprintf(opt[n++],"%-27.27s%s","Purge by Age",str);
-		if(sub[i]->maxcrcs)
-			sprintf(str,"Enabled (%lu message CRCs)",sub[i]->maxcrcs);
-		else
-			strcpy(str,"Disabled");
-		sprintf(opt[n++],"%-27.27s%s","Duplicate Checking",str);
-
-		strcpy(opt[n++],"Toggle Options...");
-		strcpy(opt[n++],"Network Options...");
-		strcpy(opt[n++],"Advanced Options...");
-		opt[n][0]=0;
-		sprintf(str,"%s Sub-board",sub[i]->sname);
-		savnum=1;
-		SETHELP(WHERE);
-/*
-Sub-board Configuration:
-
-This menu allows you to configure the individual selected sub-board.
-Options with a trailing ... provide a sub-menu of more options.
-*/
-		switch(ulist(WIN_ACT|WIN_SAV|WIN_RHT|WIN_BOT
-			,0,0,60,&opt_dflt,0,str,opt)) {
-			case -1:
-				done=1;
-				break;
-			case 0:
-				SETHELP(WHERE);
-/*
-Sub-board Long Name:
-
-This is a description of the message sub-board which is displayed in all
-sub-board listings.
-*/
-				strcpy(str,sub[i]->lname);	/* save */
-				if(!uinput(WIN_MID|WIN_SAV,0,17,"Name to use for Listings"
-					,sub[i]->lname,LEN_SLNAME,K_EDIT))
-					strcpy(sub[i]->lname,str);	/* restore */
-				break;
-			case 1:
-				SETHELP(WHERE);
-/*
-Sub-board Short Name:
-
-This is a short description of the message sub-board which is displayed
-at the main and reading messages prompts.
-*/
-				uinput(WIN_MID|WIN_SAV,0,17,"Name to use for Prompts"
-					,sub[i]->sname,LEN_SSNAME,K_EDIT);
-				break;
-			case 2:
-				SETHELP(WHERE);
-/*
-Sub-board QWK Name:
-
-This is the name of the sub-board used for QWK off-line readers.
-*/
-				uinput(WIN_MID|WIN_SAV,0,17,"Name to use for QWK Packets"
-					,sub[i]->qwkname,10,K_EDIT);
-                break;
-			case 3:
-                SETHELP(WHERE);
-/*
-Sub-board Internal Code:
-
-Every sub-board must have its own unique code for Synchronet to refer
-to it internally. This code should be descriptive of the sub-board's
-topic, usually an abreviation of the sub-board's name.
-*/
-                strcpy(str,sub[i]->code);
-                uinput(WIN_MID|WIN_SAV,0,17,"Internal Code (unique)"
-                    ,str,8,K_EDIT|K_UPPER);
-                if(code_ok(str))
-                    strcpy(sub[i]->code,str);
-                else {
-                    helpbuf=invalid_code;
-                    umsg("Invalid Code");
-                    helpbuf=0; }
-                break;
-			case 4:
-				savnum=2;
-				sprintf(str,"%s Access",sub[i]->sname);
-				getar(str,sub[i]->ar);
-				break;
-			case 5:
-				savnum=2;
-				sprintf(str,"%s Reading",sub[i]->sname);
-				getar(str,sub[i]->read_ar);
-                break;
-			case 6:
-				savnum=2;
-				sprintf(str,"%s Posting",sub[i]->sname);
-				getar(str,sub[i]->post_ar);
-                break;
-			case 7:
-				savnum=2;
-				sprintf(str,"%s Operator",sub[i]->sname);
-				getar(str,sub[i]->op_ar);
-                break;
-			case 8:
-				savnum=2;
-				sprintf(str,"%s Moderated Posting User",sub[i]->sname);
-				getar(str,sub[i]->mod_ar);
-                break;
-			case 9:
-				sprintf(str,"%u",sub[i]->maxmsgs);
-                SETHELP(WHERE);
-/*
-Maximum Number of Messages:
-
-This value is the maximum number of messages that will be kept in the
-sub-board. Once this maximum number of messages is reached, the oldest
-messages will be automatically purged. Usually, 100 messages is a
-sufficient maximum.
-*/
-                uinput(WIN_MID|WIN_SAV,0,17,"Maximum Number of Messages"
-                    ,str,5,K_EDIT|K_NUMBER);
-                sub[i]->maxmsgs=atoi(str);
-                sub[i]->misc|=SUB_HDRMOD;
-				break;
-			case 10:
-				sprintf(str,"%u",sub[i]->maxage);
-                SETHELP(WHERE);
-/*
-Maximum Age of Messages:
-
-This value is the maximum number of days that messages will be kept in
-the sub-board.
-*/
-                uinput(WIN_MID|WIN_SAV,0,17,"Maximum Age of Messages (in days)"
-                    ,str,5,K_EDIT|K_NUMBER);
-                sub[i]->maxage=atoi(str);
-                sub[i]->misc|=SUB_HDRMOD;
-				break;
-			case 11:
-				sprintf(str,"%u",sub[i]->maxcrcs);
-				SETHELP(WHERE);
-/*
-Maximum Number of CRCs:
-
-This value is the maximum number of CRCs that will be kept in the
-sub-board for duplicate message checking. Once this maximum number of
-CRCs is reached, the oldest CRCs will be automatically purged.
-*/
-				uinput(WIN_MID|WIN_SAV,0,17,"Maximum Number of CRCs"
-					,str,5,K_EDIT|K_NUMBER);
-				sub[i]->maxcrcs=atol(str);
-				sub[i]->misc|=SUB_HDRMOD;
-                break;
-			case 12:
-				while(1) {
-					n=0;
-					sprintf(opt[n++],"%-27.27s%s","Allow Private Posts"
-						,sub[i]->misc&SUB_PRIV ? sub[i]->misc&SUB_PONLY
-						? "Only":"Yes":"No");
-					sprintf(opt[n++],"%-27.27s%s","Allow Anonymous Posts"
-						,sub[i]->misc&SUB_ANON ? sub[i]->misc&SUB_AONLY
-						? "Only":"Yes":"No");
-					sprintf(opt[n++],"%-27.27s%s","Post Using Real Names"
-						,sub[i]->misc&SUB_NAME ? "Yes":"No");
-					sprintf(opt[n++],"%-27.27s%s","Users Can Delete Posts"
-						,sub[i]->misc&SUB_DEL ? sub[i]->misc&SUB_DELLAST
-						? "Last":"Yes":"No");
-					sprintf(opt[n++],"%-27.27s%s","Default On for New Scan"
-						,sub[i]->misc&SUB_NSDEF ? "Yes":"No");
-					sprintf(opt[n++],"%-27.27s%s","Forced On for New Scan"
-						,sub[i]->misc&SUB_FORCED ? "Yes":"No");
-					sprintf(opt[n++],"%-27.27s%s","Default On for Your Scan"
-						,sub[i]->misc&SUB_SSDEF ? "Yes":"No");
-					sprintf(opt[n++],"%-27.27s%s","Public 'To' User"
-						,sub[i]->misc&SUB_TOUSER ? "Yes":"No");
-					sprintf(opt[n++],"%-27.27s%s","Allow Message Quoting"
-						,sub[i]->misc&SUB_QUOTE ? "Yes":"No");
-					sprintf(opt[n++],"%-27.27s%s","Permanent Operator Msgs"
-						,sub[i]->misc&SUB_SYSPERM ? "Yes":"No");
-					sprintf(opt[n++],"%-27.27s%s","Kill Read Messages"
-						,sub[i]->misc&SUB_KILL ? "Yes"
-						: (sub[i]->misc&SUB_KILLP ? "Pvt" : "No"));
-#if 1
-					sprintf(opt[n++],"%-27.27s%s","Compress Messages (LZH)"
-						,sub[i]->misc&SUB_LZH ? "Yes" : "No");
-#endif
-					opt[n][0]=0;
-					savnum=2;
-					SETHELP(WHERE);
-/*
-Sub-board Toggle Options:
-
-This menu allows you to toggle certain options for the selected
-sub-board between two or more settings, such as Yes and No.
-*/
-					n=ulist(WIN_ACT|WIN_SAV|WIN_RHT|WIN_BOT,3,2,36,&tog_dflt,0
-						,"Toggle Options",opt);
-					if(n==-1)
-						break;
-					savnum=3;
-					switch(n) {
-						case 0:
-							n=1;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							strcpy(opt[2],"Only");
-							opt[3][0]=0;
-							SETHELP(WHERE);
-/*
-Allow Private Posts on Sub-board:
-
-If you want users to be able to post private messages to other users
-on this sub-board, set this value to Yes. Usually, E-mail is the
-preferred method of private communication. If you want users to be able
-to post private messages only on this sub-board, select Only.
-*/
-							n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0
-								,"Allow Private Posts",opt);
-							if(n==-1)
-								break;
-							if(!n && (sub[i]->misc&(SUB_PRIV|SUB_PONLY))
-								!=SUB_PRIV) {
-								changes=1;
-								sub[i]->misc&=~SUB_PONLY;
-								sub[i]->misc|=SUB_PRIV;
-								break; }
-							if(n==1 && sub[i]->misc&SUB_PRIV) {
-								changes=1;
-								sub[i]->misc&=~SUB_PRIV;
-								break; }
-							if(n==2 && (sub[i]->misc&(SUB_PRIV|SUB_PONLY))
-								!=(SUB_PRIV|SUB_PONLY)) {
-								changes=1;
-								sub[i]->misc|=(SUB_PRIV|SUB_PONLY); }
-							break;
-						case 1:
-							n=1;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							strcpy(opt[2],"Only");
-							opt[3][0]=0;
-							SETHELP(WHERE);
-/*
-Allow Anonymous Posts on Sub-board:
-
-If you want users with the A exemption to be able to post anonymously on
-this sub-board, select Yes. If you want all posts on this sub-board to be
-forced anonymous, select Only. If you do not want anonymous posts allowed
-on this sub-board at all, select No.
-*/
-							n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0
-								,"Allow Anonymous Posts",opt);
-							if(n==-1)
-								break;
-							if(!n && (sub[i]->misc&(SUB_ANON|SUB_AONLY))
-								!=SUB_ANON) {
-								changes=1;
-								sub[i]->misc&=~SUB_AONLY;
-								sub[i]->misc|=SUB_ANON;
-								break; }
-							if(n==1 && sub[i]->misc&(SUB_ANON|SUB_AONLY)) {
-								changes=1;
-								sub[i]->misc&=~(SUB_ANON|SUB_AONLY);
-								break; }
-							if(n==2 && (sub[i]->misc&(SUB_ANON|SUB_AONLY))
-								!=(SUB_ANON|SUB_AONLY)) {
-								changes=1;
-								sub[i]->misc|=(SUB_ANON|SUB_AONLY); }
-                            break;
-						case 2:
-							n=1;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							opt[2][0]=0;
-							SETHELP(WHERE);
-/*
-User Real Names in Posts on Sub-board:
-
-If you allow aliases on your system, you can have messages on this
-sub-board automatically use the real name of the posting user by setting
-this option to Yes.
-*/
-							n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0
-								,"Use Real Names in Posts",opt);
-							if(n==-1)
-                                break;
-							if(!n && !(sub[i]->misc&SUB_NAME)) {
-								changes=1;
-								sub[i]->misc|=SUB_NAME;
-								break; }
-							if(n==1 && sub[i]->misc&SUB_NAME) {
-								changes=1;
-								sub[i]->misc&=~SUB_NAME; }
-							break;
-						case 3:
-							n=2;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							strcpy(opt[2],"Last Post Only");
-							opt[3][0]=0;
-							SETHELP(WHERE);
-/*
-Users Can Delete Posts on Sub-board:
-
-If you want users to be able to delete any of their own posts on this
-sub-board, set this option to Yes. If you want to allow users the
-ability to delete their message only if it is the last message on the
-sub-board, select Last Post Only. If you want to disallow users from
-deleting any of their posts, set this option to No.
-*/
-							n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0
-								,"Users Can Delete Posts",opt);
-							if(n==-1)
-								break;
-							if(!n && (sub[i]->misc&(SUB_DEL|SUB_DELLAST))
-								!=SUB_DEL) {
-								changes=1;
-								sub[i]->misc&=~SUB_DELLAST;
-								sub[i]->misc|=SUB_DEL;
-								break; }
-							if(n==1 && sub[i]->misc&SUB_DEL) {
-								changes=1;
-								sub[i]->misc&=~SUB_DEL;
-								break; }
-							if(n==2 && (sub[i]->misc&(SUB_DEL|SUB_DELLAST))
-								!=(SUB_DEL|SUB_DELLAST)) {
-								changes=1;
-								sub[i]->misc|=(SUB_DEL|SUB_DELLAST); }
-                            break;
-						case 4:
-							n=0;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							opt[2][0]=0;
-							SETHELP(WHERE);
-/*
-Default On for New Scan:
-
-If you want this sub-board to be included in all user new message scans
-by default, set this option to Yes.
-*/
-							n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0
-								,"Default On for New Scan",opt);
-							if(n==-1)
-                                break;
-							if(!n && !(sub[i]->misc&SUB_NSDEF)) {
-								changes=1;
-								sub[i]->misc|=SUB_NSDEF;
-								break; }
-							if(n==1 && sub[i]->misc&SUB_NSDEF) {
-								changes=1;
-								sub[i]->misc&=~SUB_NSDEF; }
-                            break;
-						case 5:
-							n=1;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							opt[2][0]=0;
-							SETHELP(WHERE);
-/*
-Forced On for New Scan:
-
-If you want this sub-board to be included in all user new message scans
-even if the user has removed it from their new scan configuration, set
-this option to Yes.
-*/
-							n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0
-								,"Forced New Scan",opt);
-							if(n==-1)
-                                break;
-							if(!n && !(sub[i]->misc&SUB_FORCED)) {
-								changes=1;
-								sub[i]->misc|=SUB_FORCED;
-								break; }
-							if(n==1 && sub[i]->misc&SUB_FORCED) {
-								changes=1;
-								sub[i]->misc&=~SUB_FORCED; }
-                            break;
-						case 6:
-							n=0;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							opt[2][0]=0;
-							SETHELP(WHERE);
-/*
-Default On for Your Scan:
-
-If you want this sub-board to be included in all user personal message
-scans by default, set this option to Yes.
-*/
-							n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0
-								,"Default On for Your Scan",opt);
-							if(n==-1)
-                                break;
-							if(!n && !(sub[i]->misc&SUB_SSDEF)) {
-								changes=1;
-								sub[i]->misc|=SUB_SSDEF;
-								break; }
-							if(n==1 && sub[i]->misc&SUB_SSDEF) {
-								changes=1;
-								sub[i]->misc&=~SUB_SSDEF; }
-                            break;
-						case 7:
-							n=1;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							opt[2][0]=0;
-							SETHELP(WHERE);
-/*
-Prompt for 'To' User on Public Posts:
-
-If you want all posts on this sub-board to be prompted for a 'To' user,
-set this option to Yes. This is a useful option for sub-boards that
-are on a network that does not allow private posts.
-*/
-							n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0
-								,"Prompt for 'To' User on Public Posts",opt);
-							if(n==-1)
-                                break;
-							if(!n && !(sub[i]->misc&SUB_TOUSER)) {
-								changes=1;
-								sub[i]->misc|=SUB_TOUSER;
-								break; }
-							if(n==1 && sub[i]->misc&SUB_TOUSER) {
-								changes=1;
-								sub[i]->misc&=~SUB_TOUSER; }
-							break;
-						case 8:
-							n=1;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							opt[2][0]=0;
-							SETHELP(WHERE);
-/*
-Allow Message Quoting:
-
-If you want users to be allowed to quote messages on this sub-board, set
-this option to Yes.
-*/
-							n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0
-								,"Allow Message Quoting",opt);
-							if(n==-1)
-                                break;
-							if(!n && !(sub[i]->misc&SUB_QUOTE)) {
-								changes=1;
-								sub[i]->misc|=SUB_QUOTE;
-								break; }
-							if(n==1 && sub[i]->misc&SUB_QUOTE) {
-								changes=1;
-								sub[i]->misc&=~SUB_QUOTE; }
-                            break;
-						case 9:
-							n=1;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							opt[2][0]=0;
-							SETHELP(WHERE);
-/*
-Operator Messages Automatically Permanent:
-
-If you want messages posted by System and Sub-board Operators to be
-automatically permanent (non-purgable) for this sub-board, set this
-option to Yes.
-*/
-							n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0
-								,"Permanent Operator Messages",opt);
-							if(n==-1)
-                                break;
-							if(!n && !(sub[i]->misc&SUB_SYSPERM)) {
-								changes=1;
-								sub[i]->misc|=SUB_SYSPERM;
-								break; }
-							if(n==1 && sub[i]->misc&SUB_SYSPERM) {
-								changes=1;
-								sub[i]->misc&=~SUB_SYSPERM; }
-                            break;
-						case 10:
-							n=1;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							strcpy(opt[2],"Private");
-							opt[3][0]=0;
-							SETHELP(WHERE);
-/*
-Kill Read Messages Automatically:
-
-If you want messages that have been read by the intended recipient to
-be automatically deleted by SMBUTIL, set this option to Yes or
-Private if you want only private messages to be automatically deleted.
-*/
-							n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0
-								,"Kill Read Messages",opt);
-							if(n==-1)
-                                break;
-							if(!n && !(sub[i]->misc&SUB_KILL)) {
-								changes=1;
-								sub[i]->misc|=SUB_KILL;
-								sub[i]->misc&=~SUB_KILLP;
-								break; }
-							if(n==1 && sub[i]->misc&(SUB_KILL|SUB_KILLP)) {
-								changes=1;
-								sub[i]->misc&=~(SUB_KILL|SUB_KILLP); }
-							if(n==2 && !(sub[i]->misc&SUB_KILLP)) {
-								changes=1;
-								sub[i]->misc|=SUB_KILLP;
-								sub[i]->misc&=~SUB_KILL;
-                                break; }
-                            break;
-#if 1
-						case 11:
-							n=1;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							opt[2][0]=0;
-							SETHELP(WHERE);
-/*
-Compress Messages with LZH Encoding:
-
-If you want all messages in this sub-board to be automatically
-compressed via LZH (Lempel/Ziv/Huffman algorithm used in LHarc, LHA,
-and other popular compression and archive programs), this option to Yes.
-
-Compression will slow down the reading and writing of messages slightly,
-but the storage space saved can be as much as 50 percent.
-
-Before setting this option to Yes, make sure that all of the SMB
-compatible mail programs you use support the LZH translation.
-*/
-							n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0
-								,"Compress Messages (LZH)",opt);
-							if(n==-1)
-                                break;
-							if(!n && !(sub[i]->misc&SUB_LZH)) {
-								changes=1;
-								sub[i]->misc|=SUB_LZH;
-								break; }
-							if(n==1 && sub[i]->misc&SUB_LZH) {
-								changes=1;
-								sub[i]->misc&=~SUB_LZH; }
-                            break;
-#endif
-							} }
-				break;
-			case 13:
-				while(1) {
-					n=0;
-					sprintf(opt[n++],"%-27.27s%s","Append Tag/Origin Line"
-						,sub[i]->misc&SUB_NOTAG ? "No":"Yes");
-					sprintf(opt[n++],"%-27.27s%s","Export ASCII Only"
-						,sub[i]->misc&SUB_ASCII ? "Yes":"No");
-					sprintf(opt[n++],"%-27.27s%s","Gate Between Net Types"
-						,sub[i]->misc&SUB_GATE ? "Yes":"No");
-					sprintf(opt[n++],"%-27.27s%s","QWK Networked"
-						,sub[i]->misc&SUB_QNET ? "Yes":"No");
-					sprintf(opt[n++],"QWK Tagline");
-					sprintf(opt[n++],"%-27.27s%s","Internet"
-						,sub[i]->misc&SUB_INET ? "Yes":"No");
-					sprintf(opt[n++],"%-27.27s%s","PostLink or PCRelay"
-                        ,sub[i]->misc&SUB_PNET ? "Yes":"No");
-					sprintf(opt[n++],"%-27.27s%s","FidoNet EchoMail"
-						,sub[i]->misc&SUB_FIDO ? "Yes":"No");
-					sprintf(opt[n++],"%-27.27s%s","FidoNet Address"
-                        ,faddrtoa(sub[i]->faddr));
-					sprintf(opt[n++],"EchoMail Origin Line");
-					if(!sub[i]->echopath[0])
-						sprintf(str,"%s%s\\",echomail_dir,sub[i]->code);
-					else
-						strcpy(str,sub[i]->echopath);
-					sprintf(opt[n++],"%-27.27s%.40s","EchoMail Directory"
-						,str);
-					if(!sub[i]->echomail_sem[0])
-						strcpy(str,echomail_sem);
-					else
-						strcpy(str,sub[i]->echomail_sem);
-					sprintf(opt[n++],"%-27.27s%.40s","EchoMail Semaphore File"
-						,str);
-					opt[n][0]=0;
-					savnum=2;
-					SETHELP(WHERE);
-/*
-Sub-board Network Options:
-
-This menu contains options for the selected sub-board that pertain
-specifically to message networking.
-*/
-					n=ulist(WIN_ACT|WIN_SAV|WIN_RHT|WIN_BOT,3,2,60,&net_dflt,0
-						,"Network Options",opt);
-					if(n==-1)
-						break;
-					savnum=3;
-                    switch(n) {
-						case 0:
-							n=0;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							opt[2][0]=0;
-							SETHELP(WHERE);
-/*
-Append Tag/Origin Line to Posts:
-
-If you want to disable the automatic addition of a network tagline or
-origin line to the bottom of outgoing networked posts from this
-sub-board, set this option to No.
-*/
-							n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0
-								,"Append Tag/Origin Line to Posts",opt);
-							if(n==-1)
-                                break;
-							if(!n && sub[i]->misc&SUB_NOTAG) {
-								changes=1;
-								sub[i]->misc&=~SUB_NOTAG;
-								break; }
-							if(n==1 && !(sub[i]->misc&SUB_NOTAG)) {
-								changes=1;
-								sub[i]->misc|=SUB_NOTAG; }
-                            break;
-						case 1:
-							n=0;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							opt[2][0]=0;
-							SETHELP(WHERE);
-/*
-Export ASCII Characters Only:
-
-If the network that this sub-board is echoed on does not allow extended
-ASCII (>127) or control codes (<20, not including CR), set this option
-to Yes.
-*/
-							n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0
-								,"Export ASCII Characters Only",opt);
-							if(n==-1)
-                                break;
-							if(n && sub[i]->misc&SUB_ASCII) {
-								changes=1;
-								sub[i]->misc&=~SUB_ASCII;
-								break; }
-							if(!n && !(sub[i]->misc&SUB_ASCII)) {
-								changes=1;
-								sub[i]->misc|=SUB_ASCII; }
-                            break;
-						case 2:
-							n=1;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							opt[2][0]=0;
-							SETHELP(WHERE);
-/*
-Gate Between Net Types:
-
-If this sub-board is networked using more than one network technology,
-and you want messages to be gated between the networks, set this
-option to Yes.
-
-If this option is set to No, messages imported from one network type
-will not be exported to another network type. This is the default and
-should be used unless you have specific permission from both networks
-to gate this sub-board. Incorrectly gated sub-boards can cause duplicate
-messages loops and cross-posted messages.
-
-This option does not affect the exporting of messages created on your
-BBS.
-*/
-							n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0
-								,"Gate Between Net Types",opt);
-							if(n==-1)
-                                break;
-							if(!n && !(sub[i]->misc&SUB_GATE)) {
-								changes=1;
-								sub[i]->misc|=SUB_GATE;
-								break; }
-							if(n==1 && sub[i]->misc&SUB_GATE) {
-								changes=1;
-								sub[i]->misc&=~SUB_GATE; }
-                            break;
-						case 3:
-							n=1;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							opt[2][0]=0;
-							SETHELP(WHERE);
-/*
-Sub-board Networked via QWK Packets:
-
-If this sub-board is networked with other BBSs via QWK packets, this
-option should be set to Yes. With this option set to Yes, titles of
-posts on this sub-board will be limited to the QWK packet limitation of
-25 characters. It also allows the Network restriction to function
-properly.
-*/
-							n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0
-								,"Networked via QWK Packets",opt);
-							if(n==-1)
-                                break;
-							if(!n && !(sub[i]->misc&SUB_QNET)) {
-								changes=1;
-								sub[i]->misc|=SUB_QNET;
-								break; }
-							if(n==1 && sub[i]->misc&SUB_QNET) {
-								changes=1;
-								sub[i]->misc&=~SUB_QNET; }
-                            break;
-						case 4:
-							SETHELP(WHERE);
-/*
-Sub-board QWK Network Tagline:
-
-If you want to use a different QWK tagline than the configured default
-tagline in the Networks configuration, you should enter that tagline
-here. If this option is left blank, the default tagline is used.
-*/
-							uinput(WIN_MID|WIN_SAV,0,0,nulstr,sub[i]->tagline
-								,63,K_MSG|K_EDIT);
-							break;
-						case 5:
-							n=1;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							opt[2][0]=0;
-							SETHELP(WHERE);
-/*
-Sub-board Networked via Internet:
-
-If this sub-board is networked to the Internet via UUCP, this option
-should be set to Yes.
-
-It will allow the Network restriction to function properly.
-*/
-							n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0
-								,"Networked via Internet",opt);
-							if(n==-1)
-                                break;
-							if(!n && !(sub[i]->misc&SUB_INET)) {
-								changes=1;
-								sub[i]->misc|=SUB_INET;
-								break; }
-							if(n==1 && sub[i]->misc&SUB_INET) {
-								changes=1;
-								sub[i]->misc&=~SUB_INET; }
-                            break;
-						case 6:
-                            n=1;
-                            strcpy(opt[0],"Yes");
-                            strcpy(opt[1],"No");
-                            opt[2][0]=0;
-                            SETHELP(WHERE);
-/*
-Sub-board Networked via PostLink or PCRelay:
-
-If this sub-board is networked with other BBSs via PostLink or PCRelay,
-this option should be set to Yes. With this option set to Yes,
-titles of posts on this sub-board will be limited to the UTI
-specification limitation of 25 characters. It also allows the Network
-restriction to function properly.
-*/
-                            n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0
-                                ,"Networked via PostLink or PCRelay",opt);
-                            if(n==-1)
-                                break;
-                            if(!n && !(sub[i]->misc&SUB_PNET)) {
-                                changes=1;
-                                sub[i]->misc|=SUB_PNET;
-                                break; }
-                            if(n==1 && sub[i]->misc&SUB_PNET) {
-                                changes=1;
-                                sub[i]->misc&=~SUB_PNET; }
-                            break;
-						case 7:
-							n=1;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							opt[2][0]=0;
-							SETHELP(WHERE);
-/*
-Sub-board Networked via FidoNet EchoMail:
-
-If this sub-board is part of a FidoNet EchoMail conference, set this
-option to Yes.
-*/
-							n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0
-								,"Networked via FidoNet EchoMail",opt);
-							if(n==-1)
-                                break;
-							if(!n && !(sub[i]->misc&SUB_FIDO)) {
-								changes=1;
-								sub[i]->misc|=SUB_FIDO;
-								break; }
-							if(n==1 && sub[i]->misc&SUB_FIDO) {
-								changes=1;
-								sub[i]->misc&=~SUB_FIDO; }
-                            break;
-						case 8:
-							strcpy(str,faddrtoa(sub[i]->faddr));
-							SETHELP(WHERE);
-/*
-Sub-board FidoNet Address:
-
-If this sub-board is part of a FidoNet EchoMail conference, this is
-the address used for this sub-board. Format: Zone:Net/Node[.Point]
-*/
-							uinput(WIN_MID|WIN_SAV,0,0,"FidoNet Address"
-								,str,20,K_EDIT);
-							sub[i]->faddr=atofaddr(str);
-							break;
-						case 9:
-							SETHELP(WHERE);
-/*
-Sub-board FidoNet Origin Line:
-
-If this sub-board is part of a FidoNet EchoMail conference and you
-want to use an origin line other than the default origin line in the
-Networks configuration, set this value to the desired origin line.
-
-If this option is blank, the default origin line is used.
-*/
-							uinput(WIN_MID|WIN_SAV,0,0,nulstr,sub[i]->origline
-								,50,K_EDIT);
-                            break;
-						case 10:
-							SETHELP(WHERE);
-/*
-Sub-board EchoMail Storage Directory:
-
-This is the storage directory where FidoNet style (FTS-0001 stored
-message format) messages are imported from and exported to for this
-sub-board. If this option is blank, then the EchoMail Base Directory is
-used with the internal code of this sub-board as the sub-directory where
-the FidoNet messages are stored.
-*/
-
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"EchoMail Directory"
-								,sub[i]->echopath,50,K_UPPER|K_EDIT);
-							break;
-						case 11:
-SETHELP(WHERE);
-/*
-EchoMail Semaphore File:
-
-This is a filename that will be used as a semaphore (signal) to your
-FidoNet front-end that new EchoMail has been created and the messages
-should be re-scanned.
-*/
-							uinput(WIN_MID|WIN_SAV,0,17,"EchoMail Semaphore"
-								,sub[i]->echomail_sem,50,K_EDIT|K_UPPER);
-							break; } }
-				break;
-			case 14:
-				while(1) {
-					n=0;
-					if(sub[i]->qwkconf)
-						sprintf(str,"Static (%u)",sub[i]->qwkconf);
-					else
-						strcpy(str,"Dynamic");
-					sprintf(opt[n++],"%-27.27s%s","QWK Conference Number"
-						,str);
-					sprintf(opt[n++],"%-27.27s%s","Storage Method"
-						,sub[i]->misc&SUB_HYPER ? "Hyper Allocation"
-						: sub[i]->misc&SUB_FAST ? "Fast Allocation"
-						: "Self-packing");
-					if(!sub[i]->data_dir[0])
-						sprintf(str,"%sSUBS\\",data_dir);
-					else
-						strcpy(str,sub[i]->data_dir);
-					sprintf(opt[n++],"%-27.27s%.40s","Storage Directory",str);
-					opt[n][0]=0;
-					savnum=2;
-					SETHELP(WHERE);
-/*
-Sub-board Advanced Options:
-
-This menu contains options for the selected sub-board that are advanced
-in nature.
-*/
-					n=ulist(WIN_ACT|WIN_SAV|WIN_RHT|WIN_BOT,3,2,60,&adv_dflt,0
-						,"Advanced Options",opt);
-					if(n==-1)
-						break;
-					savnum=3;
-                    switch(n) {
-                        case 0:
-							SETHELP(WHERE);
-/*
-Sub-board QWK Conference Number:
-
-If you wish to have the QWK conference number for this sub-board
-automatically generated by Synchronet (based on the group number
-and sub-board number for the user), set this option to Dynamic.
-
-If you wish to have the same QWK conference number for this sub-board
-regardless of which user access it, set this option to Static
-by entering the conference number you want to use.
-*/
-							if(sub[i]->qwkconf)
-								sprintf(str,"%u",sub[i]->qwkconf);
-							else
-								str[0]=0;
-							if(uinput(WIN_MID|WIN_SAV,0,17
-								,"QWK Conference Number (0=Dynamic)"
-								,str,5,K_EDIT|K_NUMBER)>=0)
-								sub[i]->qwkconf=atoi(str);
-							break;
-						case 1:
-							n=0;
-							strcpy(opt[0],"Hyper Allocation");
-							strcpy(opt[1],"Fast Allocation");
-							strcpy(opt[2],"Self-packing");
-							opt[3][0]=0;
-							SETHELP(WHERE);
-/*
-Self-Packing is the slowest storage method because it conserves disk
-  space as it imports messages by using deleted message header and data
-  blocks for new messages automatically. If you use this storage method,
-  you will not need to run SMBUTIL P on this message base unless you
-  accumilate a large number of deleted message blocks and wish to free
-  that disk space. You can switch from self-packing to fast allocation
-  storage method and back again as you wish.
-Fast Allocation is faster than self-packing because it does not search
-  for deleted message blocks for new messages. It automatically places
-  all new message blocks at the end of the header and data files. If you
-  use this storage method, you will need to run SMBUTIL P on this
-  message base periodically or it will continually use up disk space.
-Hyper Allocation is the fastest storage method because it does not
-  maintain allocation files at all. Once a message base is setup to use
-  this storage method, it should not be changed without first deleting
-  the message base data files in your DATA\DIRS\SUBS directory for this
-  sub-board. You must use SMBUTIL P as with the fast allocation method.
-*/
-							n=ulist(WIN_SAV|WIN_MID,0,0,0,&n,0
-								,"Storage Method",opt);
-							if(n==-1)
-								break;
-							if(!n && !(sub[i]->misc&SUB_HYPER)) {
-								changes=1;
-								sub[i]->misc|=SUB_HYPER;
-								sub[i]->misc&=~SUB_FAST;
-								sub[i]->misc|=SUB_HDRMOD;
-								break; }
-							if(!n)
-								break;
-							if(sub[i]->misc&SUB_HYPER) {	/* Switching from hyper */
-								strcpy(opt[0],"Yes");
-								strcpy(opt[1],"No, I want to use Hyper Allocation");
-								opt[2][0]=0;
-								m=0;
-								if(ulist(WIN_SAV|WIN_MID,0,0,0,&m,0
-									,"Delete all messages in this sub-board?",opt)!=0)
-									break;
-								if(sub[i]->data_dir[0])
-									sprintf(str,"%s",sub[i]->data_dir);
-								else
-									sprintf(str,"%sSUBS\\",data_dir);
-								sprintf(str2,"%s.*",sub[i]->code);
-								delfiles(str,str2); }
-
-							if(sub[i]->misc&SUB_HYPER)
-								sub[i]->misc|=SUB_HDRMOD;
-							if(n==1 && !(sub[i]->misc&SUB_FAST)) {
-								changes=1;
-								sub[i]->misc|=SUB_FAST;
-								sub[i]->misc&=~SUB_HYPER;
-								break; }
-							if(n==2 && sub[i]->misc&(SUB_FAST|SUB_HYPER)) {
-								changes=1;
-								sub[i]->misc&=~(SUB_FAST|SUB_HYPER);
-								break; }
-							break;
-						case 2:
-							SETHELP(WHERE);
-/*
-Sub-board Storage Directory:
-
-Use this if you wish to place the data directory for this sub-board on
-another drive or in another directory besides the default setting.
-*/
-							uinput(WIN_MID|WIN_SAV,0,17,"Directory"
-								,sub[i]->data_dir,50,K_EDIT|K_UPPER);
-							break; } }
-				break;
-				} } }
-}
diff --git a/src/sbbs2/scfg/scfgsys.c b/src/sbbs2/scfg/scfgsys.c
deleted file mode 100644
index 4f6a595e39..0000000000
--- a/src/sbbs2/scfg/scfgsys.c
+++ /dev/null
@@ -1,1790 +0,0 @@
-#line 2 "SCFGSYS.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "scfg.h"
-
-void sys_cfg(void)
-{
-	static int sys_dflt,adv_dflt,tog_dflt,new_dflt;
-	char str[81],str2[81],done=0,*dupehelp;
-	int i,j,k,dflt,bar,savchanges;
-
-while(1) {
-	i=0;
-	sprintf(opt[i++],"%-33.33s%s","BBS Name",sys_name);
-	sprintf(opt[i++],"%-33.33s%s","Location",sys_location);
-	sprintf(opt[i++],"%-33.33s%s","Operator",sys_op);
-	sprintf(opt[i++],"%-33.33s%s","Password",sys_pass);
-
-	sprintf(str,"%s Password"
-		,sys_misc&SM_PWEDIT && sys_pwdays ? "Users Must Change"
-		: sys_pwdays ? "Users Get New Random" : "Users Can Change");
-	if(sys_pwdays)
-		sprintf(tmp,"Every %u Days",sys_pwdays);
-	else if(sys_misc&SM_PWEDIT)
-		strcpy(tmp,"Yes");
-	else
-		strcpy(tmp,"No");
-	sprintf(opt[i++],"%-33.33s%s",str,tmp);
-
-	sprintf(opt[i++],"%-33.33s%u","Days to Preserve Deleted Users"
-		,sys_deldays);
-	sprintf(opt[i++],"%-33.33s%s","Maximum Days of Inactivity"
-		,sys_autodel ? itoa(sys_autodel,tmp,10) : "Unlimited");
-    sprintf(opt[i++],"%-33.33s%s","New User Password",new_pass);
-
-	strcpy(opt[i++],"Toggle Options...");
-	strcpy(opt[i++],"New User Values...");
-	strcpy(opt[i++],"Advanced Options...");
-	strcpy(opt[i++],"Loadable Modules...");
-	strcpy(opt[i++],"Security Level Values...");
-	strcpy(opt[i++],"Expired Account Values...");
-	strcpy(opt[i++],"Quick-Validation Values...");
-	opt[i][0]=0;
-	SETHELP(WHERE);
-/*
-System Configuration:
-
-This menu contains options and sub-menus of options that affect the
-entire system.
-*/
-	switch(ulist(WIN_ORG|WIN_ACT|WIN_CHE,0,0,72,&sys_dflt,0
-		,"System Configuration",opt)) {
-		case -1:
-			i=save_changes(WIN_MID);
-			if(i==-1)
-				break;
-			if(!i)
-				write_main_cfg();
-			return;
-		case 0:
-			SETHELP(WHERE);
-/*
-BBS Name:
-
-This is the name of the BBS.
-*/
-			uinput(WIN_MID,0,0,"BBS Name",sys_name,40,K_EDIT);
-			break;
-		case 1:
-			SETHELP(WHERE);
-/*
-System Location:
-
-This is the location of the BBS. The format is flexible, but it is
-suggested you use the City, State format for clarity.
-*/
-			uinput(WIN_MID,0,0,"Location",sys_location,40,K_EDIT);
-            break;
-		case 2:
-			SETHELP(WHERE);
-/*
-System Operator:
-
-This is the name or alias of the system operator. This does not have to
-be the same as user #1. This field is used for documentary purposes
-only.
-*/
-			uinput(WIN_MID,0,0,"System Operator",sys_op,40,K_EDIT);
-			break;
-		case 3:
-			SETHELP(WHERE);
-/*
-System Password:
-
-This is an extra security password required for sysop logon and certain
-sysop functions. This password should be something not easily guessed
-and should be kept absolutely confidential. This password must be
-entered at the SY: prompt.
-*/
-			uinput(WIN_MID,0,0,"System Password",sys_pass,40,K_EDIT|K_UPPER);
-			break;
-		case 4:
-			strcpy(opt[0],"Yes");
-			strcpy(opt[1],"No");
-			opt[2][0]=0;
-			i=1;
-			SETHELP(WHERE);
-/*
-Allow Users to Change Their Password:
-
-If you want the users of your system to have the option of changing
-their password to a string of their choice, set this option to Yes.
-For the highest level of security, set this option to No.
-*/
-			i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-				,"Allow Users to Change Their Password",opt);
-			if(!i && !(sys_misc&SM_PWEDIT)) {
-				sys_misc|=SM_PWEDIT;
-				changes=1; }
-			else if(i==1 && sys_misc&SM_PWEDIT) {
-                sys_misc&=~SM_PWEDIT;
-                changes=1; }
-			i=0;
-			SETHELP(WHERE);
-/*
-Force Periodic Password Changes:
-
-If you want your users to be forced to change their passwords
-periodically, select Yes.
-*/
-			i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-				,"Force Periodic Password Changes",opt);
-			if(!i) {
-				itoa(sys_pwdays,str,10);
-			SETHELP(WHERE);
-/*
-Maximum Days Between Password Changes:
-
-Enter the maximum number of days allowed between password changes.
-If a user has not voluntarily changed his or her password in this
-many days, he or she will be forced to change their password upon
-logon.
-*/
-				uinput(WIN_MID,0,0,"Maximum Days Between Password Changes"
-					,str,5,K_NUMBER|K_EDIT);
-				sys_pwdays=atoi(str); }
-			else if(i==1 && sys_pwdays) {
-				sys_pwdays=0;
-				changes=1; }
-			
-			break;
-		case 5:
-			sprintf(str,"%u",sys_deldays);
-			SETHELP(WHERE);
-/*
-Days Since Last Logon to Preserve Deleted Users:
-
-Deleted user slots can be undeleted until the slot is written over
-by a new user. If you want deleted user slots to be preserved for period
-of time since their last logon, set this value to the number of days to
-keep new users from taking over a deleted user's slot.
-*/
-			uinput(WIN_MID,0,0,"Days Since Last Logon to Preserve Deleted Users"
-				,str,5,K_EDIT|K_NUMBER);
-			sys_deldays=atoi(str);
-			break;
-		case 6:
-			sprintf(str,"%u",sys_autodel);
-			SETHELP(WHERE);
-/*
-Maximum Days of Inactivity Before Auto-Deletion:
-
-If you want users that haven't logged on in certain period of time to
-be automatically deleted, set this value to the maximum number of days
-of inactivity before the user is deleted. Setting this value to 0
-disables this feature.
-
-Users with the P exemption will not be deleted due to inactivity.
-*/
-			uinput(WIN_MID,0,0,"Maximum Days of Inactivity Before Auto-Deletion"
-				,str,5,K_EDIT|K_NUMBER);
-			sys_autodel=atoi(str);
-            break;
-		case 7:
-			SETHELP(WHERE);
-/*
-New User Password:
-
-If you want callers to only be able to logon as New if they know a
-certain password, enter that password here. If you want any caller to
-be able to logon as New, leave this option blank.
-*/
-			uinput(WIN_MID,0,0,"New User Password",new_pass,40
-				,K_EDIT|K_UPPER);
-			break;
-		case 8:    /* Toggle Options */
-            done=0;
-            while(!done) {
-                i=0;
-				sprintf(opt[i++],"%-33.33s%s","Allow Aliases"
-					,uq&UQ_ALIASES ? "Yes" : "No");
-				sprintf(opt[i++],"%-33.33s%s","Allow Time Banking"
-					,sys_misc&SM_TIMEBANK ? "Yes" : "No");
-				sprintf(opt[i++],"%-33.33s%s","Allow Credit Conversions"
-					,sys_misc&SM_NOCDTCVT ? "No" : "Yes");
-				sprintf(opt[i++],"%-33.33s%s","Allow Local Sysop Access"
-					,sys_misc&SM_L_SYSOP ? "Yes" : "No");
-				sprintf(opt[i++],"%-33.33s%s","Allow Remote Sysop Access"
-					,sys_misc&SM_R_SYSOP ? "Yes" : "No");
-				sprintf(opt[i++],"%-33.33s%s","Echo Passwords Locally"
-					,sys_misc&SM_ECHO_PW ? "Yes" : "No");
-				sprintf(opt[i++],"%-33.33s%s","Require Passwords Locally"
-					,sys_misc&SM_REQ_PW ? "Yes" : "No");
-				sprintf(opt[i++],"%-33.33s%s","Short Sysop Page"
-					,sys_misc&SM_SHRTPAGE ? "Yes" : "No");
-				sprintf(opt[i++],"%-33.33s%s","Sound Alarm on Error"
-					,sys_misc&SM_ERRALARM ? "Yes" : "No");
-                sprintf(opt[i++],"%-33.33s%s","Include Sysop in Statistics"
-                    ,sys_misc&SM_SYSSTAT ? "Yes" : "No");
-                sprintf(opt[i++],"%-33.33s%s","Closed to New Users"
-                    ,sys_misc&SM_CLOSED ? "Yes" : "No");
-                sprintf(opt[i++],"%-33.33s%s","Use Location in User Lists"
-					,sys_misc&SM_LISTLOC ? "Yes" : "No");
-				sprintf(opt[i++],"%-33.33s%s","Military (24 hour) Time Format"
-					,sys_misc&SM_MILITARY ? "Yes" : "No");
-				sprintf(opt[i++],"%-33.33s%s","European Date Format (DD/MM/YY)"
-					,sys_misc&SM_EURODATE ? "Yes" : "No");
-				sprintf(opt[i++],"%-33.33s%s","User Expires When Out-of-time"
-					,sys_misc&SM_TIME_EXP ? "Yes" : "No");
-				sprintf(opt[i++],"%-33.33s%s","Quick Validation Hot-Keys"
-					,sys_misc&SM_QVALKEYS ? "Yes" : "No");
-				opt[i][0]=0;
-				savnum=0;
-				SETHELP(WHERE);
-/*
-System Toggle Options:
-
-This is a menu of system related options that can be toggled between
-two or more states, such as Yes and No.
-*/
-				switch(ulist(WIN_ACT|WIN_BOT|WIN_RHT,0,0,41,&tog_dflt,0
-                    ,"Toggle Options",opt)) {
-                    case -1:
-                        done=1;
-                        break;
-					case 0:
-						strcpy(opt[0],"Yes");
-						strcpy(opt[1],"No");
-						opt[2][0]=0;
-						i=0;
-						SETHELP(WHERE);
-/*
-Allow Users to Use Aliases:
-
-If you want the users of your system to be allowed to be known by a
-false name, handle, or alias, set this option to Yes. If you want all
-users on your system to be known only by their real names, select No.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-							,"Allow Users to Use Aliases",opt);
-						if(!i && !(uq&UQ_ALIASES)) {
-							uq|=UQ_ALIASES;
-							changes=1; }
-						else if(i==1 && uq&UQ_ALIASES) {
-							uq&=~UQ_ALIASES;
-							changes=1; }
-						break;
-					case 1:
-						strcpy(opt[0],"Yes");
-						strcpy(opt[1],"No");
-						opt[2][0]=0;
-						i=0;
-						SETHELP(WHERE);
-/*
-Allow Time Banking:
-
-If you want the users of your system to be allowed to be deposit
-any extra time they may have left during a call into their minute bank,
-set this option to Yes. If this option is set to No, then the only
-way a user may get minutes in their minute bank is to purchase them
-with credits.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-							,"Allow Users to Depost Time in Minute Bank",opt);
-						if(!i && !(sys_misc&SM_TIMEBANK)) {
-							sys_misc|=SM_TIMEBANK;
-							changes=1; }
-						else if(i==1 && sys_misc&SM_TIMEBANK) {
-							sys_misc&=~SM_TIMEBANK;
-							changes=1; }
-                        break;
-					case 2:
-						strcpy(opt[0],"Yes");
-						strcpy(opt[1],"No");
-						opt[2][0]=0;
-						i=0;
-						SETHELP(WHERE);
-/*
-Allow Credits to be Converted into Minutes:
-
-If you want the users of your system to be allowed to be convert
-any credits they may have into minutes for their minute bank,
-set this option to Yes.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-							,"Allow Users to Convert Credits into Minutes"
-							,opt);
-						if(!i && sys_misc&SM_NOCDTCVT) {
-							sys_misc&=~SM_NOCDTCVT;
-							changes=1; }
-						else if(i==1 && !(sys_misc&SM_NOCDTCVT)) {
-							sys_misc|=SM_NOCDTCVT;
-							changes=1; }
-                        break;
-					case 3:
-						strcpy(opt[0],"Yes");
-						strcpy(opt[1],"No");
-						opt[2][0]=0;
-						i=0;
-						SETHELP(WHERE);
-/*
-Allow Local Sysop Access:
-
-If you want to be able to logon locally with sysop access, set this
-option to Yes.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-							,"Allow Local Sysop Access",opt);
-						if(!i && !(sys_misc&SM_L_SYSOP)) {
-							sys_misc|=SM_L_SYSOP;
-							changes=1; }
-						else if(i==1 && sys_misc&SM_L_SYSOP) {
-							sys_misc&=~SM_L_SYSOP;
-							changes=1; }
-                        break;
-					case 4:
-						strcpy(opt[0],"Yes");
-						strcpy(opt[1],"No");
-						opt[2][0]=0;
-						i=0;
-						SETHELP(WHERE);
-/*
-Allow Remote Sysop Access:
-
-If you want to be able to logon remotely with sysop access, set this
-option to Yes.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-							,"Allow Remote Sysop Access",opt);
-						if(!i && !(sys_misc&SM_R_SYSOP)) {
-							sys_misc|=SM_R_SYSOP;
-							changes=1; }
-						else if(i==1 && sys_misc&SM_R_SYSOP) {
-							sys_misc&=~SM_R_SYSOP;
-							changes=1; }
-                        break;
-					case 5:
-						strcpy(opt[0],"Yes");
-						strcpy(opt[1],"No");
-						opt[2][0]=0;
-						i=0;
-						SETHELP(WHERE);
-/*
-Echo Passwords Locally:
-
-If you want to passwords to be displayed locally, set this option to
-Yes.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-							,"Echo Passwords Locally",opt);
-						if(!i && !(sys_misc&SM_ECHO_PW)) {
-							sys_misc|=SM_ECHO_PW;
-							changes=1; }
-						else if(i==1 && sys_misc&SM_ECHO_PW) {
-							sys_misc&=~SM_ECHO_PW;
-							changes=1; }
-                        break;
-					case 6:
-						strcpy(opt[0],"Yes");
-						strcpy(opt[1],"No");
-						opt[2][0]=0;
-						i=0;
-						SETHELP(WHERE);
-/*
-Require Passwords Locally:
-
-If you want to passwords to be required when logged on locally, set this
-option to Yes.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-							,"Require Passwords Locally",opt);
-						if(!i && !(sys_misc&SM_REQ_PW)) {
-							sys_misc|=SM_REQ_PW;
-							changes=1; }
-						else if(i==1 && sys_misc&SM_REQ_PW) {
-							sys_misc&=~SM_REQ_PW;
-							changes=1; }
-                        break;
-					case 7:
-                        strcpy(opt[0],"Yes");
-                        strcpy(opt[1],"No");
-						opt[2][0]=0;
-                        i=0;
-						SETHELP(WHERE);
-/*
-Short Sysop Page:
-
-If you would like the sysop page to be a short series of beeps rather
-than continuous random tones, set this option to Yes.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0,"Short Sysop Page"
-							,opt);
-						if(i==1 && sys_misc&SM_SHRTPAGE) {
-							sys_misc&=~SM_SHRTPAGE;
-                            changes=1; }
-						else if(!i && !(sys_misc&SM_SHRTPAGE)) {
-							sys_misc|=SM_SHRTPAGE;
-                            changes=1; }
-						break;
-					case 8:
-                        strcpy(opt[0],"Yes");
-                        strcpy(opt[1],"No");
-						opt[2][0]=0;
-                        i=0;
-						SETHELP(WHERE);
-/*
-Sound Alarm on Error:
-
-If you would like to have an alarm sounded locally when a critical
-system error has occured, set this option to Yes.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-							,"Sound Alarm on Error",opt);
-						if(i==1 && sys_misc&SM_ERRALARM) {
-							sys_misc&=~SM_ERRALARM;
-                            changes=1; }
-						else if(!i && !(sys_misc&SM_ERRALARM)) {
-							sys_misc|=SM_ERRALARM;
-                            changes=1; }
-                        break;
-					case 9:
-                        strcpy(opt[0],"Yes");
-                        strcpy(opt[1],"No");
-						opt[2][0]=0;
-                        i=1;
-						SETHELP(WHERE);
-/*
-Include Sysop Activity in System Statistics:
-
-If you want sysops to be included in the statistical data of the BBS,
-set this option to Yes. The suggested setting for this option is
-No so that statistical data will only reflect user usage and not
-include sysop maintenance activity.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-							,"Include Sysop Activity in System Statistics"
-							,opt);
-                        if(!i && !(sys_misc&SM_SYSSTAT)) {
-                            sys_misc|=SM_SYSSTAT;
-                            changes=1; }
-                        else if(i==1 && sys_misc&SM_SYSSTAT) {
-                            sys_misc&=~SM_SYSSTAT;
-                            changes=1; }
-                        break;
-					case 10:
-                        strcpy(opt[0],"Yes");
-                        strcpy(opt[1],"No");
-						opt[2][0]=0;
-                        i=1;
-						SETHELP(WHERE);
-/*
-Closed to New Users:
-
-If you want callers to be able to logon as New, set this option to No.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-							,"Closed to New Users",opt);
-                        if(!i && !(sys_misc&SM_CLOSED)) {
-                            sys_misc|=SM_CLOSED;
-                            changes=1; }
-                        else if(i==1 && sys_misc&SM_CLOSED) {
-                            sys_misc&=~SM_CLOSED;
-                            changes=1; }
-                        break;
-					case 11:
-                        strcpy(opt[0],"Yes");
-                        strcpy(opt[1],"No");
-						opt[2][0]=0;
-                        i=0;
-						SETHELP(WHERE);
-/*
-User Location in User Lists:
-
-If you want user locations (city, state) displayed in the user lists,
-set this option to Yes. If this option is set to No, the user notes
-(if they exist) are displayed in the user lists.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-                            ,"User Location (Instead of Note) in User Lists"
-                            ,opt);
-						if(!i && !(sys_misc&SM_LISTLOC)) {
-							sys_misc|=SM_LISTLOC;
-                            changes=1; }
-						else if(i==1 && sys_misc&SM_LISTLOC) {
-							sys_misc&=~SM_LISTLOC;
-                            changes=1; }
-                        break;
-					case 12:
-                        strcpy(opt[0],"Yes");
-                        strcpy(opt[1],"No");
-						opt[2][0]=0;
-						i=1;
-						SETHELP(WHERE);
-/*
-Military:
-
-If you would like the time-of-day to be displayed and entered in 24 hour
-format always, set this option to Yes.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-							,"Use Military Time Format",opt);
-						if(!i && !(sys_misc&SM_MILITARY)) {
-							sys_misc|=SM_MILITARY;
-                            changes=1; }
-						else if(i==1 && sys_misc&SM_MILITARY) {
-							sys_misc&=~SM_MILITARY;
-                            changes=1; }
-                        break;
-					case 13:
-                        strcpy(opt[0],"Yes");
-                        strcpy(opt[1],"No");
-						opt[2][0]=0;
-						i=1;
-						SETHELP(WHERE);
-/*
-European Date Format:
-
-If you would like dates to be displayed and entered in DD/MM/YY format
-instead of MM/DD/YY format, set this option to Yes.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-							,"European Date Format",opt);
-						if(!i && !(sys_misc&SM_EURODATE)) {
-							sys_misc|=SM_EURODATE;
-                            changes=1; }
-						else if(i==1 && sys_misc&SM_EURODATE) {
-							sys_misc&=~SM_EURODATE;
-                            changes=1; }
-                        break;
-
-					case 14:
-                        strcpy(opt[0],"Yes");
-                        strcpy(opt[1],"No");
-						opt[2][0]=0;
-						i=1;
-						SETHELP(WHERE);
-/*
-User Expires When Out-of-time:
-
-If you want users to be set to Expired User Values if they run out of
-time online, then set this option to Yes.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-							,"User Expires When Out-of-time",opt);
-						if(!i && !(sys_misc&SM_TIME_EXP)) {
-							sys_misc|=SM_TIME_EXP;
-                            changes=1; }
-						else if(i==1 && sys_misc&SM_TIME_EXP) {
-							sys_misc&=~SM_TIME_EXP;
-                            changes=1; }
-                        break;
-
-					case 15:
-                        strcpy(opt[0],"Yes");
-                        strcpy(opt[1],"No");
-						opt[2][0]=0;
-						i=1;
-						SETHELP(WHERE);
-/*
-Quick Validation Hot-Keys:
-
-If you would like to enable the Alt-# hot-keys for quick user
-validation, set this option to Yes.
-*/
-						i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
-							,"Quick Validation Hot-Keys",opt);
-						if(!i && !(sys_misc&SM_QVALKEYS)) {
-							sys_misc|=SM_QVALKEYS;
-                            changes=1; }
-						else if(i==1 && sys_misc&SM_QVALKEYS) {
-							sys_misc&=~SM_QVALKEYS;
-                            changes=1; }
-                        break;
-
-						} }
-            break;
-		case 9:    /* New User Values */
-			done=0;
-			while(!done) {
-				i=0;
-				sprintf(opt[i++],"%-27.27s%u","Level",new_level);
-				sprintf(opt[i++],"%-27.27s%s","Flag Set #1"
-					,ltoaf(new_flags1,str));
-				sprintf(opt[i++],"%-27.27s%s","Flag Set #2"
-					,ltoaf(new_flags2,str));
-				sprintf(opt[i++],"%-27.27s%s","Flag Set #3"
-					,ltoaf(new_flags3,str));
-				sprintf(opt[i++],"%-27.27s%s","Flag Set #4"
-					,ltoaf(new_flags4,str));
-				sprintf(opt[i++],"%-27.27s%s","Exemptions"
-					,ltoaf(new_exempt,str));
-				sprintf(opt[i++],"%-27.27s%s","Restrictions"
-					,ltoaf(new_rest,str));
-				sprintf(opt[i++],"%-27.27s%s","Expiration Days"
-					,itoa(new_expire,str,10));
-
-				ultoac(new_cdt,str);
-				sprintf(opt[i++],"%-27.27s%s","Credits",str);
-				ultoac(new_min,str);
-				sprintf(opt[i++],"%-27.27s%s","Minutes",str);
-				sprintf(opt[i++],"%-27.27s%s","Editor"
-					,new_xedit);
-				sprintf(opt[i++],"%-27.27s%s","Command Shell"
-					,shell[new_shell]->code);
-				if(new_prot!=SP)
-                    sprintf(str,"%c",new_prot);
-                else
-                    strcpy(str,"None");
-				sprintf(opt[i++],"%-27.27s%s","Download Protocol",str);
-				strcpy(opt[i++],"Default Toggles...");
-				strcpy(opt[i++],"Question Toggles...");
-				opt[i][0]=0;
-				SETHELP(WHERE);
-/*
-New User Values:
-
-This menu allows you to determine the default settings for new users.
-*/
-				switch(ulist(WIN_ACT|WIN_BOT|WIN_RHT,0,0,60,&new_dflt,0
-					,"New User Values",opt)) {
-					case -1:
-						done=1;
-						break;
-					case 0:
-						itoa(new_level,str,10);
-						SETHELP(WHERE);
-/*
-New User Security Level:
-
-This is the security level automatically given to new users.
-*/
-						uinput(WIN_SAV|WIN_MID,0,0,"Security Level"
-							,str,2,K_EDIT|K_NUMBER);
-						new_level=atoi(str);
-						break;
-					case 1:
-						ltoaf(new_flags1,str);
-						SETHELP(WHERE);
-/*
-New User Security Flags:
-
-These are the security flags automatically given to new users.
-*/
-						uinput(WIN_SAV|WIN_MID,0,0,"Flag Set #1"
-							,str,26,K_EDIT|K_UPPER|K_ALPHA);
-						new_flags1=aftol(str);
-						break;
-					case 2:
-						ltoaf(new_flags2,str);
-						SETHELP(WHERE);
-/*
-New User Security Flags:
-
-These are the security flags automatically given to new users.
-*/
-						uinput(WIN_SAV|WIN_MID,0,0,"Flag Set #2"
-							,str,26,K_EDIT|K_UPPER|K_ALPHA);
-						new_flags2=aftol(str);
-                        break;
-					case 3:
-						ltoaf(new_flags3,str);
-						SETHELP(WHERE);
-/*
-New User Security Flags:
-
-These are the security flags automatically given to new users.
-*/
-						uinput(WIN_SAV|WIN_MID,0,0,"Flag Set #3"
-							,str,26,K_EDIT|K_UPPER|K_ALPHA);
-						new_flags3=aftol(str);
-                        break;
-					case 4:
-						ltoaf(new_flags4,str);
-						SETHELP(WHERE);
-/*
-New User Security Flags:
-
-These are the security flags automatically given to new users.
-*/
-						uinput(WIN_SAV|WIN_MID,0,0,"Flag Set #4"
-							,str,26,K_EDIT|K_UPPER|K_ALPHA);
-						new_flags4=aftol(str);
-                        break;
-					case 5:
-						ltoaf(new_exempt,str);
-						SETHELP(WHERE);
-/*
-New User Exemption Flags:
-
-These are the exemptions that are automatically given to new users.
-*/
-						uinput(WIN_SAV|WIN_MID,0,0,"Exemption Flags",str,26
-							,K_EDIT|K_UPPER|K_ALPHA);
-						new_exempt=aftol(str);
-						break;
-					case 6:
-						ltoaf(new_rest,str);
-						SETHELP(WHERE);
-/*
-New User Restriction Flags:
-
-These are the restrictions that are automatically given to new users.
-*/
-						uinput(WIN_SAV|WIN_MID,0,0,"Restriction Flags",str,26
-							,K_EDIT|K_UPPER|K_ALPHA);
-						new_rest=aftol(str);
-						break;
-					case 7:
-						itoa(new_expire,str,10);
-						SETHELP(WHERE);
-/*
-New User Expiration Days:
-
-If you wish new users to have an automatic expiration date, set this
-value to the number of days before the user will expire. To disable
-New User expiration, set this value to 0.
-*/
-						uinput(WIN_SAV|WIN_MID,0,0,"Expiration Days",str,4
-							,K_EDIT|K_NUMBER);
-						new_expire=atoi(str);
-						break;
-					case 8:
-						ultoa(new_cdt,str,10);
-						SETHELP(WHERE);
-/*
-New User Credits:
-
-This is the amount of credits that are automatically given to new users.
-*/
-						uinput(WIN_SAV|WIN_MID,0,0,"Credits",str,10
-							,K_EDIT|K_NUMBER);
-						new_cdt=atol(str);
-                        break;
-					case 9:
-						ultoa(new_min,str,10);
-						SETHELP(WHERE);
-/*
-New User Minutes:
-
-This is the number of extra minutes automatically given to new users.
-*/
-						uinput(WIN_SAV|WIN_MID,0,0,"Minutes (Time Credit)"
-							,str,10,K_EDIT|K_NUMBER);
-						new_min=atol(str);
-						break;
-					case 10:
-						if(!total_xedits) {
-							umsg("No External Editors Configured");
-							break; }
-						strcpy(opt[0],"Internal");
-						for(i=1;i<=total_xedits;i++)
-							strcpy(opt[i],xedit[i-1]->code);
-						opt[i][0]=0;
-						i=0;
-						savnum=0;
-						SETHELP(WHERE);
-/*
-New User Editor:
-
-You can use this option to select the default editor for new users.
-*/
-						i=ulist(WIN_SAV|WIN_RHT,2,1,13,&i,0,"Editors",opt);
-						if(i==-1)
-							break;
-						changes=1;
-						if(i && i<=total_xedits)
-							sprintf(new_xedit,"%-.8s",xedit[i-1]->code);
-						else
-							new_xedit[0]=0;
-						break;
-					case 11:
-						for(i=0;i<total_shells && i<MAX_OPTS;i++)
-							sprintf(opt[i],"%-.8s",shell[i]->code);
-						opt[i][0]=0;
-						i=0;
-						savnum=0;
-						SETHELP(WHERE);
-/*
-New User Command Shell:
-
-You can use this option to select the default command shell for new
-users.
-*/
-						i=ulist(WIN_SAV|WIN_RHT,2,1,13,&i,0
-							,"Command Shells",opt);
-						if(i==-1)
-							break;
-						new_shell=i;
-						changes=1;
-						break;
-					case 12:
-						SETHELP(WHERE);
-/*
-New User Default Download Protocol:
-
-This option allows you to set the default download protocol of new users
-(protocol command key or BLANK for no default).
-*/
-						sprintf(str,"%c",new_prot);
-						uinput(WIN_SAV|WIN_MID,0,0
-							,"Default Download Protocol (SPACE=Disabled)"
-							,str,1,K_EDIT|K_UPPER);
-						new_prot=str[0];
-						if(new_prot<SP)
-							new_prot=SP;
-                        break;
-					case 13:
-						SETHELP(WHERE);
-/*
-New User Default Toggle Options:
-
-This menu contains the default state of new user toggle options. All new
-users on your system will have their defaults set according to the
-settings on this menu. The user can then change them to his or her
-liking.
-
-See the Synchronet User Manual for more information on the individual
-options available.
-*/
-						j=0;
-                        while(1) {
-                            i=0;
-							sprintf(opt[i++],"%-27.27s %-3.3s"
-								,"Expert Menu Mode"
-								,new_misc&EXPERT ? "Yes":"No");
-							sprintf(opt[i++],"%-27.27s %-3.3s"
-								,"Screen Pause"
-								,new_misc&UPAUSE ? "Yes":"No");
-							sprintf(opt[i++],"%-27.27s %-3.3s"
-								,"Spinning Cursor"
-								,new_misc&SPIN ? "Yes":"No");
-							sprintf(opt[i++],"%-27.27s %-3.3s"
-								,"Clear Screen"
-								,new_misc&CLRSCRN ? "Yes":"No");
-							sprintf(opt[i++],"%-27.27s %-3.3s"
-								,"Ask For New Scan"
-								,new_misc&ASK_NSCAN ? "Yes":"No");
-							sprintf(opt[i++],"%-27.27s %-3.3s"
-								,"Ask For Your Msg Scan"
-								,new_misc&ASK_SSCAN ? "Yes":"No");
-							sprintf(opt[i++],"%-27.27s %-3.3s"
-								,"Automatic New File Scan"
-								,new_misc&ANFSCAN ? "Yes":"No");
-							sprintf(opt[i++],"%-27.27s %-3.3s"
-								,"Remember Current Sub-board"
-								,new_misc&CURSUB ? "Yes":"No");
-							sprintf(opt[i++],"%-27.27s %-3.3s"
-								,"Batch Download File Flag"
-								,new_misc&BATCHFLAG ? "Yes":"No");
-							sprintf(opt[i++],"%-27.27s %-3.3s"
-								,"Extended File Descriptions"
-								,new_misc&EXTDESC ? "Yes":"No");
-							sprintf(opt[i++],"%-27.27s %-3.3s"
-								,"Hot Keys"
-								,new_misc&COLDKEYS ? "No":"Yes");
-							sprintf(opt[i++],"%-27.27s %-3.3s"
-								,"Auto Hang-up After Xfer"
-								,new_misc&AUTOHANG ? "Yes":"No");
-							opt[i][0]=0;
-							j=ulist(WIN_BOT|WIN_RHT,2,1,0,&j,0
-								,"Default Toggle Options",opt);
-                            if(j==-1)
-                                break;
-                            changes=1;
-                            switch(j) {
-                                case 0:
-									new_misc^=EXPERT;
-                                    break;
-								case 1:
-									new_misc^=UPAUSE;
-									break;
-								case 2:
-									new_misc^=SPIN;
-									break;
-								case 3:
-									new_misc^=CLRSCRN;
-									break;
-								case 4:
-									new_misc^=ASK_NSCAN;
-									break;
-								case 5:
-									new_misc^=ASK_SSCAN;
-                                    break;
-								case 6:
-									new_misc^=ANFSCAN;
-									break;
-								case 7:
-									new_misc^=CURSUB;
-									break;
-								case 8:
-									new_misc^=BATCHFLAG;
-									break;
-								case 9:
-									new_misc^=EXTDESC;
-                                    break;
-								case 10:
-									new_misc^=COLDKEYS;
-                                    break;
-								case 11:
-									new_misc^=AUTOHANG;
-                                    break;
-									} }
-						break;
-					case 14:
-						SETHELP(WHERE);
-/*
-New User Question Toggle Options:
-
-This menu allows you to decide which questions will be asked of a new
-user.
-*/
-						j=0;
-                        while(1) {
-                            i=0;
-							sprintf(opt[i++],"%-27.27s %-3.3s"
-								,"Real Name"
-								,uq&UQ_REALNAME ? "Yes":"No");
-							sprintf(opt[i++],"%-27.27s %-3.3s"
-								,"Force Unique Real Name"
-								,uq&UQ_DUPREAL ? "Yes":"No");
-							sprintf(opt[i++],"%-27.27s %-3.3s"
-								,"Company Name"
-								,uq&UQ_COMPANY ? "Yes":"No");
-							sprintf(opt[i++],"%-27.27s %-3.3s"
-								,"Multinode Chat Handle"
-								,uq&UQ_HANDLE ? "Yes":"No");
-							sprintf(opt[i++],"%-27.27s %-3.3s"
-								,"Force Unique Chat Handle"
-								,uq&UQ_DUPHAND ? "Yes":"No");
-							sprintf(opt[i++],"%-27.27s %-3.3s"
-								,"Sex (Gender)"
-								,uq&UQ_SEX ? "Yes":"No");
-							sprintf(opt[i++],"%-27.27s %-3.3s"
-								,"Birthday"
-								,uq&UQ_BIRTH ? "Yes":"No");
-							sprintf(opt[i++],"%-27.27s %-3.3s"
-								,"Address and Zip Code"
-								,uq&UQ_ADDRESS ? "Yes":"No");
-							sprintf(opt[i++],"%-27.27s %-3.3s"
-								,"Location"
-								,uq&UQ_LOCATION ? "Yes":"No");
-							sprintf(opt[i++],"%-27.27s %-3.3s"
-								,"Require Comma in Location"
-								,uq&UQ_NOCOMMAS ? "No":"Yes");
-							sprintf(opt[i++],"%-27.27s %-3.3s"
-								,"Phone Number"
-								,uq&UQ_PHONE ? "Yes":"No");
-							sprintf(opt[i++],"%-27.27s %-3.3s"
-								,"Computer Type"
-								,uq&UQ_COMP ? "Yes":"No");
-							sprintf(opt[i++],"%-27.27s %-3.3s"
-								,"Multiple Choice Computer"
-								,uq&UQ_MC_COMP ? "Yes":"No");
-							sprintf(opt[i++],"%-27.27s %-3.3s"
-								,"Allow EX-ASCII in Answers"
-								,uq&UQ_NOEXASC ? "No":"Yes");
-							sprintf(opt[i++],"%-27.27s %-3.3s"
-								,"External Editor"
-								,uq&UQ_XEDIT ? "Yes":"No");
-							sprintf(opt[i++],"%-27.27s %-3.3s"
-								,"Command Shell"
-								,uq&UQ_CMDSHELL ? "Yes":"No");
-							sprintf(opt[i++],"%-27.27s %-3.3s"
-								,"Default Settings"
-								,uq&UQ_NODEF ? "No":"Yes");
-							opt[i][0]=0;
-							j=ulist(WIN_BOT|WIN_RHT|WIN_SAV,2,1,0,&j,0
-								,"New User Questions",opt);
-                            if(j==-1)
-                                break;
-                            changes=1;
-                            switch(j) {
-                                case 0:
-									uq^=UQ_REALNAME;
-                                    break;
-								case 1:
-									uq^=UQ_DUPREAL;
-									break;
-								case 2:
-									uq^=UQ_COMPANY;
-                                    break;
-								case 3:
-									uq^=UQ_HANDLE;
-                                    break;
-								case 4:
-									uq^=UQ_DUPHAND;
-									break;
-								case 5:
-									uq^=UQ_SEX;
-									break;
-								case 6:
-									uq^=UQ_BIRTH;
-									break;
-								case 7:
-									uq^=UQ_ADDRESS;
-									break;
-								case 8:
-									uq^=UQ_LOCATION;
-									break;
-								case 9:
-									uq^=UQ_NOCOMMAS;
-									break;
-								case 10:
-									uq^=UQ_PHONE;
-									break;
-								case 11:
-									uq^=UQ_COMP;
-									break;
-								case 12:
-									uq^=UQ_MC_COMP;
-									break;
-								case 13:
-									uq^=UQ_NOEXASC;
-									break;
-								case 14:
-									uq^=UQ_XEDIT;
-                                    break;
-								case 15:
-									uq^=UQ_CMDSHELL;
-                                    break;
-								case 16:
-									uq^=UQ_NODEF;
-                                    break;
-									} }
-						break; } }
-			break;
-		case 10:	/* Advanced Options */
-			done=0;
-			while(!done) {
-				i=0;
-				sprintf(opt[i++],"%-27.27s%s","New User Magic Word",new_magic);
-				sprintf(opt[i++],"%-27.27s%.40s","Data Directory",data_dir);
-				sprintf(opt[i++],"%-27.27s%.40s","Executables Directory"
-					,exec_dir);
-				sprintf(opt[i++],"%-27.27s%s","Input SIF Questionnaire"
-					,new_sif);
-				sprintf(opt[i++],"%-27.27s%s","Output SIF Questionnaire"
-					,new_sof);
-				ultoac(cdt_per_dollar,str);
-				sprintf(opt[i++],"%-27.27s%s","Credits Per Dollar",str);
-				sprintf(opt[i++],"%-27.27s%u","Minutes Per 100k Credits"
-					,cdt_min_value);
-				sprintf(opt[i++],"%-27.27s%s","Maximum Number of Minutes"
-					,max_minutes ? ltoa(max_minutes,tmp,10) : "Unlimited");
-				sprintf(opt[i++],"%-27.27s%u","Warning Days Till Expire"
-					,sys_exp_warn);
-				sprintf(opt[i++],"%-27.27s%u","Default Status Line"
-					,sys_def_stat);
-				sprintf(opt[i++],"%-27.27s%u","Last Displayable Node"
-					,sys_lastnode);
-				sprintf(opt[i++],"%-27.27s%u","First Local Auto-Node"
-					,sys_autonode);
-				sprintf(opt[i++],"%-27.27s%s","Phone Number Format"
-					,sys_phonefmt);
-				sprintf(opt[i++],"%-27.27s%.40s","Sysop Chat Requirements"
-					,sys_chat_ar);
-				opt[i][0]=0;
-				savnum=0;
-				SETHELP(WHERE);
-/*
-System Advanced Options:
-
-Care should be taken when modifying any of the options listed here.
-*/
-				switch(ulist(WIN_ACT|WIN_BOT|WIN_RHT,0,0,60,&adv_dflt,0
-					,"Advanced Options",opt)) {
-					case -1:
-						done=1;
-                        break;
-
-					case 0:
-						SETHELP(WHERE);
-/*
-New User Magic Word:
-
-If this field has a value, it is assumed the sysop has placed some
-reference to this magic word in TEXT\NEWUSER.MSG and new users
-will be prompted for the magic word after they enter their password.
-If they do not enter it correctly, it is assumed they didn't read the
-new user information displayed to them and they are disconnected.
-
-Think of it as a password to guarantee that new users read the text
-displayed to them.
-*/
-						uinput(WIN_MID,0,0,"New User Magic Word",new_magic,20
-							,K_EDIT|K_UPPER);
-						break;
-					case 1:
-						SETHELP(WHERE);
-/*
-Data Directory Parent:
-
-The Synchronet data directory contains almost all the data for your BBS.
-This directory must be located where ALL nodes can access it and
-MUST NOT be placed on a RAM disk or other volatile media.
-
-This option allows you to change the parent of your data directory.
-The \DATA\ suffix (sub-directory) cannot be changed or removed.
-*/
-						strcpy(str,data_dir);
-						if(strstr(str,"\\DATA\\")!=NULL)
-							*strstr(str,"\\DATA\\")=0;
-						if(uinput(WIN_MID|WIN_SAV,0,9,"Data Dir Parent"
-							,str,50,K_EDIT|K_UPPER)>0) {
-							if(str[strlen(str)-1]!='\\')
-								strcat(str,"\\");
-							strcat(str,"DATA\\");
-							strcpy(data_dir,str); }
-                        break;
-					case 2:
-						SETHELP(WHERE);
-/*
-Exec Directory Parent:
-
-The Synchronet exec directory contains executable files that your BBS
-executes. This directory does not need to be in your DOS search path.
-If you place programs in this directory for the BBS to execute, you
-should place the %! abreviation for this exec directory at the
-beginning of the command line.
-
-This option allows you to change the parent of your exec directory.
-The \EXEC\ suffix (sub-directory) cannot be changed or removed.
-*/
-						strcpy(str,exec_dir);
-						if(strstr(str,"\\EXEC\\")!=NULL)
-							*strstr(str,"\\EXEC\\")=0;
-						if(uinput(WIN_MID|WIN_SAV,0,9,"Exec Dir Parent"
-							,str,50,K_EDIT|K_UPPER)>0) {
-							if(str[strlen(str)-1]!='\\')
-								strcat(str,"\\");
-							strcat(str,"EXEC\\");
-							strcpy(exec_dir,str); }
-                        break;
-					case 3:
-						strcpy(str,new_sif);
-						SETHELP(WHERE);
-/*
-SIF Questionnaire for User Input:
-
-This is the name of a SIF questionnaire file that resides your text
-directory that all users will be prompted to answer.
-*/
-						uinput(WIN_MID|WIN_SAV,0,0
-							,"SIF Questionnaire for User Input"
-							,str,8,K_UPPER|K_EDIT);
-						if(!str[0] || code_ok(str))
-							strcpy(new_sif,str);
-						else
-							umsg("Invalid SIF Name");
-						break;
-					case 4:
-						strcpy(str,new_sof);
-						SETHELP(WHERE);
-/*
-SIF Questionnaire for Reviewing User Input:
-
-This is the SIF file used to review the input of users from the user
-edit function.
-*/
-						uinput(WIN_MID|WIN_SAV,0,0
-							,"SIF Questionnaire for Reviewing User Input"
-							,str,8,K_UPPER|K_EDIT);
-						if(!str[0] || code_ok(str))
-							strcpy(new_sof,str);
-						else
-							umsg("Invalid SIF Name");
-						break;
-					case 5:
-						SETHELP(WHERE);
-/*
-Credits Per Dollar:
-
-This is the monetary value of a credit (How many credits per dollar).
-This value should be a power of 2 (1, 2, 4, 8, 16, 32, 64, 128, etc.)
-since credits are usually converted by 100 kilobyte (102400) blocks.
-To make a dollar worth two megabytes of credits, set this value to
-2,097,152 (a megabyte is 1024*1024 or 1048576).
-*/
-						ultoa(cdt_per_dollar,str,10);
-						uinput(WIN_MID|WIN_SAV,0,0
-							,"Credits Per Dollar",str,10,K_NUMBER|K_EDIT);
-						cdt_per_dollar=atol(str);
-						break;
-					case 6:
-						SETHELP(WHERE);
-/*
-Minutes Per 100K Credits:
-
-This is the value of a minute of time online. This field is the number
-of minutes to give the user in exchange for each 100K credit block.
-*/
-						sprintf(str,"%u",cdt_min_value);
-						uinput(WIN_MID|WIN_SAV,0,0
-							,"Minutes Per 100K Credits",str,5,K_NUMBER|K_EDIT);
-						cdt_min_value=atoi(str);
-						break;
-					case 7:
-						SETHELP(WHERE);
-/*
-Maximum Number of Minutes User Can Have:
-
-This value is the maximum total number of minutes a user can have. If a
-user has this number of minutes or more, they will not be allowed to
-convert credits into minutes. A sysop can add minutes to a user's
-account regardless of this maximum. If this value is set to 0, users
-will have no limit on the total number of minutes they can have.
-*/
-						sprintf(str,"%lu",max_minutes);
-						uinput(WIN_MID|WIN_SAV,0,0
-							,"Maximum Number of Minutes a User Can Have "
-							"(0=No Limit)"
-							,str,10,K_NUMBER|K_EDIT);
-						max_minutes=atol(str);
-						break;
-					case 8:
-						SETHELP(WHERE);
-/*
-Warning Days Till Expire:
-
-If a user's account will expire in this many days or less, the user will
-be notified at logon. Setting this value to 0 disables the warning
-completely.
-*/
-						sprintf(str,"%u",sys_exp_warn);
-						uinput(WIN_MID|WIN_SAV,0,0
-							,"Warning Days Till Expire",str,5,K_NUMBER|K_EDIT);
-						sys_exp_warn=atoi(str);
-                        break;
-					case 9:
-						SETHELP(WHERE);
-/*
-Default Status Line:
-
-This is the number of the status line format that will be the default
-display on the bottom line of the screen. For explanation of the
-available status lines, see the sysop documentation.
-*/
-						sprintf(str,"%u",sys_def_stat);
-						uinput(WIN_MID|WIN_SAV,0,0
-							,"Default Status Line",str,5,K_NUMBER|K_EDIT);
-						sys_def_stat=atoi(str);
-						break;
-					case 10:
-						SETHELP(WHERE);
-/*
-Last Displayed Node:
-
-This is the number of the last node to display to users in node lists.
-This allows the sysop to define the higher numbered nodes as invisible
-to users.
-*/
-						sprintf(str,"%u",sys_lastnode);
-						uinput(WIN_MID|WIN_SAV,0,0
-							,"Last Displayed Node",str,5,K_NUMBER|K_EDIT);
-						sys_lastnode=atoi(str);
-                        break;
-					case 11:
-						SETHELP(WHERE);
-/*
-First Local Auto-Node:
-
-This is the number of the first node in the search for an available
-node for local login using the AUTONODE utility.
-*/
-						sprintf(str,"%u",sys_autonode);
-						uinput(WIN_MID|WIN_SAV,0,0
-							,"First Local Auto-Node",str,5,K_NUMBER|K_EDIT);
-						sys_autonode=atoi(str);
-                        break;
-					case 12:
-						SETHELP(WHERE);
-/*
-Phone Number Format:
-
-This is the format used for phone numbers in your local calling
-area. Use N for number positions, A for alphabetic, or ! for any
-character. All other characters will be static in the phone number
-format. An example for North American phone numbers is NNN-NNN-NNNN.
-*/
-						uinput(WIN_MID|WIN_SAV,0,0
-							,"Phone Number Format",sys_phonefmt
-							,LEN_PHONE,K_UPPER|K_EDIT);
-                        break;
-					case 13:
-						getar("Sysop Chat",sys_chat_ar);
-						break;
-						} }
-				break;
-		case 11: /* Loadable Modules */
-			done=0;
-			k=0;
-			while(!done) {
-				i=0;
-				sprintf(opt[i++],"%-16.16s%s","Login",login_mod);
-				sprintf(opt[i++],"%-16.16s%s","Logon Event",logon_mod);
-				sprintf(opt[i++],"%-16.16s%s","Sync Event",sync_mod);
-				sprintf(opt[i++],"%-16.16s%s","Logoff Event",logoff_mod);
-				sprintf(opt[i++],"%-16.16s%s","Logout Event",logout_mod);
-				sprintf(opt[i++],"%-16.16s%s","New User Event",newuser_mod);
-				sprintf(opt[i++],"%-16.16s%s","Expired User",expire_mod);
-				opt[i][0]=0;
-				savnum=0;
-				SETHELP(WHERE);
-/*
-Loadable Modules:
-
-Baja modules (.BIN files) can be automatically loaded and executed
-during certain system functions. The name of the module can be specified
-for each of the available triggers listed here.
-
-Login 		Required module for remote and local logins (online)
-Logon 		Executed as an event during logon procedure (online)
-Sync			Executed when nodes are periodically synchronized (online)
-Logoff		Executed during logoff procedure (online)
-Logout		Executed during logout procedure (offline)
-New User		Executed at end of new user procedure (online)
-Expired User	Executed during daily event when user expires (offline)
-*/
-				switch(ulist(WIN_ACT|WIN_T2B|WIN_RHT,0,0,32,&k,0
-					,"Loadable Modules",opt)) {
-
-					case -1:
-						done=1;
-                        break;
-
-					case 0:
-						uinput(WIN_MID|WIN_SAV,0,0,"Login Module",login_mod,8
-							,K_EDIT|K_UPPER);
-                        break;
-					case 1:
-						uinput(WIN_MID|WIN_SAV,0,0,"Logon Module",logon_mod,8
-							,K_EDIT|K_UPPER);
-                        break;
-					case 2:
-						uinput(WIN_MID|WIN_SAV,0,0,"Synchronize Module"
-							,sync_mod,8,K_EDIT|K_UPPER);
-                        break;
-					case 3:
-						uinput(WIN_MID|WIN_SAV,0,0,"Logoff Module",logoff_mod,8
-							,K_EDIT|K_UPPER);
-                        break;
-					case 4:
-						uinput(WIN_MID|WIN_SAV,0,0,"Logout Module",logout_mod,8
-							,K_EDIT|K_UPPER);
-                        break;
-					case 5:
-						uinput(WIN_MID|WIN_SAV,0,0,"New User Module"
-							,newuser_mod,8,K_EDIT|K_UPPER);
-                        break;
-					case 6:
-						uinput(WIN_MID|WIN_SAV,0,0,"Expired User Module"
-							,expire_mod,8,K_EDIT|K_UPPER);
-                        break;
-
-					} }
-			break;
-
-		case 12: /* Security Levels */
-			dflt=bar=0;
-			k=0;
-			while(1) {
-				for(i=0;i<100;i++) {
-					sprintf(tmp,"%luk",level_freecdtperday[i]/1024L);
-					sprintf(opt[i],"%-2d    %5d %5d "
-						"%5d %5d %5d %5d %6s %7s %2u",i
-						,level_timeperday[i],level_timepercall[i]
-						,level_callsperday[i],level_emailperday[i]
-						,level_postsperday[i],level_linespermsg[i]
-						,tmp
-						,level_misc[i]&LEVEL_EXPTOVAL ? "Val Set" : "Level"
-						,level_misc[i]&(LEVEL_EXPTOVAL|LEVEL_EXPTOLVL) ?
-							level_expireto[i] : expired_level); }
-				opt[i][0]=0;
-				i=0;
-				SETHELP(WHERE);
-/*
-Security Level Values:
-
-This menu allows you to change the security options for every possible
-security level from 0 to 99. The available options for each level are:
-
-	Time Per Day		 :	Maximum online time per day
-	Time Per Call		 :	Maximum online time per call
-	Calls Per Day		 :	Maximum number of calls per day
-	Email Per Day		 :	Maximum number of email per day
-	Posts Per Day		 :	Maximum number of posts per day
-	Lines Per Message	 :	Maximum number of lines per message
-	Free Credits Per Day :	Number of free credits per day
-	Expire To			 :	Level or validation set to Expire to
-*/
-				i=ulist(WIN_RHT|WIN_ACT,0,3,0,&dflt,&bar
-					,"Level   T/D   T/C   C/D   E/D   P/D   L/M   F/D   "
-						"Expire To",opt);
-				if(i==-1)
-					break;
-				while(1) {
-					sprintf(str,"Security Level %d Values",i);
-					j=0;
-					sprintf(opt[j++],"%-22.22s%-5u","Time Per Day"
-						,level_timeperday[i]);
-					sprintf(opt[j++],"%-22.22s%-5u","Time Per Call"
-						,level_timepercall[i]);
-					sprintf(opt[j++],"%-22.22s%-5u","Calls Per Day"
-						,level_callsperday[i]);
-					sprintf(opt[j++],"%-22.22s%-5u","Email Per Day"
-						,level_emailperday[i]);
-					sprintf(opt[j++],"%-22.22s%-5u","Posts Per Day"
-                        ,level_postsperday[i]);
-					sprintf(opt[j++],"%-22.22s%-5u","Lines Per Message"
-						,level_linespermsg[i]);
-					sprintf(tmp,"%luk",level_freecdtperday[i]/1024L);
-					sprintf(opt[j++],"%-22.22s%-6s","Free Credits Per Day"
-						,tmp);
-					sprintf(opt[j++],"%-22.22s%s %u","Expire To"
-						,level_misc[i]&LEVEL_EXPTOVAL ? "Validation Set"
-							: "Level"
-						,level_misc[i]&(LEVEL_EXPTOVAL|LEVEL_EXPTOLVL) ?
-							level_expireto[i] : expired_level);
-					opt[j][0]=0;
-					savnum=0;
-					j=ulist(WIN_RHT|WIN_SAV|WIN_ACT,2,1,0,&k,0
-						,str,opt);
-					if(j==-1)
-						break;
-					switch(j) {
-						case 0:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Total Time Allowed Per Day"
-								,itoa(level_timeperday[i],tmp,10),3
-								,K_NUMBER|K_EDIT);
-							level_timeperday[i]=atoi(tmp);
-							if(level_timeperday[i]>500)
-								level_timeperday[i]=500;
-							break;
-						case 1:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Time Allowed Per Call"
-								,itoa(level_timepercall[i],tmp,10),3
-								,K_NUMBER|K_EDIT);
-							level_timepercall[i]=atoi(tmp);
-							if(level_timepercall[i]>500)
-								level_timepercall[i]=500;
-                            break;
-						case 2:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Calls Allowed Per Day"
-								,itoa(level_callsperday[i],tmp,10),4
-								,K_NUMBER|K_EDIT);
-							level_callsperday[i]=atoi(tmp);
-                            break;
-						case 3:
-                            uinput(WIN_MID|WIN_SAV,0,0
-                                ,"Email Allowed Per Day"
-								,itoa(level_emailperday[i],tmp,10),4
-                                ,K_NUMBER|K_EDIT);
-                            level_emailperday[i]=atoi(tmp);
-                            break;
-						case 4:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Posts Allowed Per Day"
-								,itoa(level_postsperday[i],tmp,10),4
-								,K_NUMBER|K_EDIT);
-							level_postsperday[i]=atoi(tmp);
-                            break;
-						case 5:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Lines Allowed Per Message (Post/E-mail)"
-								,itoa(level_linespermsg[i],tmp,10),4
-								,K_NUMBER|K_EDIT);
-							level_linespermsg[i]=atoi(tmp);
-							break;
-						case 6:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Free Credits Per Day (in Kilobytes)"
-								,ultoa(level_freecdtperday[i]/1024L,tmp,10),8
-								,K_EDIT|K_UPPER);
-							level_freecdtperday[i]=atol(tmp)*1024L;
-							break;
-						case 7:
-							j=0;
-							sprintf(opt[j++],"Default Expired Level "
-								"(Currently %u)",expired_level);
-							sprintf(opt[j++],"Specific Level");
-							sprintf(opt[j++],"Quick-Validation Set");
-							opt[j][0]=0;
-							j=0;
-							sprintf(str,"Level %u Expires To",i);
-							savnum=1;
-							j=ulist(WIN_SAV,2,1,0,&j,0
-								,str,opt);
-							if(j==-1)
-								break;
-							if(j==0) {
-								level_misc[i]&=
-									~(LEVEL_EXPTOLVL|LEVEL_EXPTOVAL);
-								changes=1;
-								break; }
-							if(j==1) {
-								level_misc[i]&=~LEVEL_EXPTOVAL;
-								level_misc[i]|=LEVEL_EXPTOLVL;
-								changes=1;
-								uinput(WIN_MID|WIN_SAV,0,0
-									,"Expired Level"
-									,itoa(level_expireto[i],tmp,10),2
-									,K_EDIT|K_NUMBER);
-								level_expireto[i]=atoi(tmp);
-								break; }
-							level_misc[i]&=~LEVEL_EXPTOLVL;
-							level_misc[i]|=LEVEL_EXPTOVAL;
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Quick-Validation Set to Expire To"
-								,itoa(level_expireto[i],tmp,10),1
-								,K_EDIT|K_NUMBER);
-							level_expireto[i]=atoi(tmp);
-							break;
-							} } }
-			break;
-		case 13:	/* Expired Acccount Values */
-			dflt=0;
-			done=0;
-			while(!done) {
-				i=0;
-				sprintf(opt[i++],"%-27.27s%u","Level",expired_level);
-				sprintf(opt[i++],"%-27.27s%s","Flag Set #1 to Remove"
-					,ltoaf(expired_flags1,str));
-				sprintf(opt[i++],"%-27.27s%s","Flag Set #2 to Remove"
-					,ltoaf(expired_flags2,str));
-				sprintf(opt[i++],"%-27.27s%s","Flag Set #3 to Remove"
-					,ltoaf(expired_flags3,str));
-				sprintf(opt[i++],"%-27.27s%s","Flag Set #4 to Remove"
-					,ltoaf(expired_flags4,str));
-				sprintf(opt[i++],"%-27.27s%s","Exemptions to Remove"
-					,ltoaf(expired_exempt,str));
-				sprintf(opt[i++],"%-27.27s%s","Restrictions to Add"
-					,ltoaf(expired_rest,str));
-				opt[i][0]=0;
-				SETHELP(WHERE);
-/*
-Expired Account Values:
-
-If a user's account expires, the security levels for that account will
-be modified according to the settings of this menu. The Main Level and
-Transfer Level will be set to the values listed on this menu. The Main
-Flags, Transfer Flags, and Exemptions listed on this menu will be
-removed from the account if they are set. The Restrictions listed will
-be added to the account.
-*/
-				switch(ulist(WIN_ACT|WIN_BOT|WIN_RHT,0,0,60,&dflt,0
-					,"Expired Account Values",opt)) {
-					case -1:
-						done=1;
-						break;
-					case 0:
-						itoa(expired_level,str,10);
-						SETHELP(WHERE);
-/*
-Expired Account Security Level:
-
-This is the security level automatically given to expired user accounts.
-*/
-						uinput(WIN_SAV|WIN_MID,0,0,"Security Level"
-							,str,2,K_EDIT|K_NUMBER);
-						expired_level=atoi(str);
-						break;
-					case 1:
-						ltoaf(expired_flags1,str);
-						SETHELP(WHERE);
-/*
-Expired Security Flags to Remove:
-
-These are the security flags automatically removed when a user account
-has expired.
-*/
-						uinput(WIN_SAV|WIN_MID,0,0,"Flags Set #1"
-							,str,26,K_EDIT|K_UPPER|K_ALPHA);
-						expired_flags1=aftol(str);
-						break;
-					case 2:
-						ltoaf(expired_flags2,str);
-						SETHELP(WHERE);
-/*
-Expired Security Flags to Remove:
-
-These are the security flags automatically removed when a user account
-has expired.
-*/
-						uinput(WIN_SAV|WIN_MID,0,0,"Flags Set #2"
-							,str,26,K_EDIT|K_UPPER|K_ALPHA);
-						expired_flags2=aftol(str);
-                        break;
-					case 3:
-						ltoaf(expired_flags3,str);
-						SETHELP(WHERE);
-/*
-Expired Security Flags to Remove:
-
-These are the security flags automatically removed when a user account
-has expired.
-*/
-						uinput(WIN_SAV|WIN_MID,0,0,"Flags Set #3"
-							,str,26,K_EDIT|K_UPPER|K_ALPHA);
-						expired_flags3=aftol(str);
-                        break;
-					case 4:
-						ltoaf(expired_flags4,str);
-						SETHELP(WHERE);
-/*
-Expired Security Flags to Remove:
-
-These are the security flags automatically removed when a user account
-has expired.
-*/
-						uinput(WIN_SAV|WIN_MID,0,0,"Flags Set #4"
-							,str,26,K_EDIT|K_UPPER|K_ALPHA);
-						expired_flags4=aftol(str);
-                        break;
-					case 5:
-						ltoaf(expired_exempt,str);
-						SETHELP(WHERE);
-/*
-Expired Exemption Flags to Remove:
-
-These are the exemptions that are automatically removed from a user
-account if it expires.
-*/
-						uinput(WIN_SAV|WIN_MID,0,0,"Exemption Flags",str,26
-							,K_EDIT|K_UPPER|K_ALPHA);
-						expired_exempt=aftol(str);
-						break;
-					case 6:
-						ltoaf(expired_rest,str);
-						SETHELP(WHERE);
-/*
-Expired Restriction Flags to Add:
-
-These are the restrictions that are automatically added to a user
-account if it expires.
-*/
-						uinput(WIN_SAV|WIN_MID,0,0,"Restriction Flags",str,26
-							,K_EDIT|K_UPPER|K_ALPHA);
-						expired_rest=aftol(str);
-						break; } }
-			break;
-		case 14:	/* Quick-Validation Values */
-			dflt=0;
-			k=0;
-			while(1) {
-				for(i=0;i<10;i++)
-					sprintf(opt[i],"%d  SL: %-2d  F1: %s"
-						,i,val_level[i],ltoaf(val_flags1[i],str));
-				opt[i][0]=0;
-				i=0;
-				SETHELP(WHERE);
-/*
-Quick-Validation Values:
-
-This is a list of the ten quick-validation sets. These sets are used to
-quickly set a user's security values (Level, Flags, Exemptions,
-Restrictions, Expiration Date, and Credits) with one key stroke. The
-user's expiration date may be extended and additional credits may also
-be added using quick-validation sets.
-
-Holding down  ALT  and one of the number keys (1-9) while a user
-is online, automatically sets his or user security values to the
-quick-validation set for that number key.
-
-From within the User Edit function, a sysop can use the Validate
-User command and select from this quick-validation list to change a
-user's security values with very few key-strokes.
-*/
-				savnum=0;
-				i=ulist(WIN_RHT|WIN_BOT|WIN_ACT|WIN_SAV,0,0,0,&dflt,0
-					,"Quick-Validation Values",opt);
-				if(i==-1)
-                    break;
-				sprintf(str,"Quick-Validation Set %d",i);
-				savnum=0;
-				while(1) {
-					j=0;
-					sprintf(opt[j++],"%-22.22s%u","Level",val_level[i]);
-					sprintf(opt[j++],"%-22.22s%s","Flag Set #1"
-						,ltoaf(val_flags1[i],tmp));
-					sprintf(opt[j++],"%-22.22s%s","Flag Set #2"
-						,ltoaf(val_flags2[i],tmp));
-					sprintf(opt[j++],"%-22.22s%s","Flag Set #3"
-						,ltoaf(val_flags3[i],tmp));
-					sprintf(opt[j++],"%-22.22s%s","Flag Set #4"
-						,ltoaf(val_flags4[i],tmp));
-					sprintf(opt[j++],"%-22.22s%s","Exemptions"
-						,ltoaf(val_exempt[i],tmp));
-					sprintf(opt[j++],"%-22.22s%s","Restrictions"
-						,ltoaf(val_rest[i],tmp));
-					sprintf(opt[j++],"%-22.22s%u days","Extend Expiration"
-						,val_expire[i]);
-					sprintf(opt[j++],"%-22.22s%lu","Additional Credits"
-						,val_cdt[i]);
-					opt[j][0]=0;
-					savnum=1;
-					j=ulist(WIN_RHT|WIN_SAV|WIN_ACT,2,1,0,&k,0
-						,str,opt);
-					if(j==-1)
-						break;
-					switch(j) {
-						case 0:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Level"
-								,itoa(val_level[i],tmp,10),2
-								,K_NUMBER|K_EDIT);
-							val_level[i]=atoi(tmp);
-							break;
-						case 1:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Flag Set #1"
-								,ltoaf(val_flags1[i],tmp),26
-								,K_UPPER|K_ALPHA|K_EDIT);
-							val_flags1[i]=aftol(tmp);
-                            break;
-						case 2:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Flag Set #2"
-								,ltoaf(val_flags2[i],tmp),26
-								,K_UPPER|K_ALPHA|K_EDIT);
-							val_flags2[i]=aftol(tmp);
-                            break;
-						case 3:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Flag Set #3"
-								,ltoaf(val_flags3[i],tmp),26
-								,K_UPPER|K_ALPHA|K_EDIT);
-							val_flags3[i]=aftol(tmp);
-                            break;
-						case 4:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Flag Set #4"
-								,ltoaf(val_flags4[i],tmp),26
-								,K_UPPER|K_ALPHA|K_EDIT);
-							val_flags4[i]=aftol(tmp);
-                            break;
-						case 5:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Exemption Flags"
-								,ltoaf(val_exempt[i],tmp),26
-								,K_UPPER|K_ALPHA|K_EDIT);
-							val_exempt[i]=aftol(tmp);
-                            break;
-						case 6:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Restriction Flags"
-								,ltoaf(val_rest[i],tmp),26
-								,K_UPPER|K_ALPHA|K_EDIT);
-							val_rest[i]=aftol(tmp);
-							break;
-						case 7:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Days to Extend Expiration"
-								,itoa(val_expire[i],tmp,10),4
-								,K_NUMBER|K_EDIT);
-							val_expire[i]=atoi(tmp);
-                            break;
-						case 8:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Additional Credits"
-								,ultoa(val_cdt[i],tmp,10),10
-								,K_NUMBER|K_EDIT);
-							val_cdt[i]=atol(tmp);
-							break; } } }
-			break; } }
-
-}
diff --git a/src/sbbs2/scfg/scfgxfr1.c b/src/sbbs2/scfg/scfgxfr1.c
deleted file mode 100644
index 8fcb4e5ebb..0000000000
--- a/src/sbbs2/scfg/scfgxfr1.c
+++ /dev/null
@@ -1,976 +0,0 @@
-#line 2 "SCFGXFR1.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "scfg.h"
-
-void xfer_opts()
-{
-	static int xfr_dflt;
-	char str[81],done;
-	int i,j,k,l,dflt,bar;
-	static fextr_t savfextr;
-	static fview_t savfview;
-	static ftest_t savftest;
-	static fcomp_t savfcomp;
-	static prot_t savprot;
-	static dlevent_t savdlevent;
-	static char savaltpath[LEN_DIR+1];
-
-while(1) {
-	i=0;
-	sprintf(opt[i++],"%-33.33s%uk","Min Bytes Free Disk Space",min_dspace);
-	sprintf(opt[i++],"%-33.33s%u","Max Files in Batch UL Queue"
-		,max_batup);
-	sprintf(opt[i++],"%-33.33s%u","Max Files in Batch DL Queue"
-		,max_batdn);
-	sprintf(opt[i++],"%-33.33s%u","Max Users in User Transfers",max_userxfer);
-	sprintf(opt[i++],"%-33.33s%u%%","Default Credit on Upload"
-		,cdt_up_pct);
-	sprintf(opt[i++],"%-33.33s%u%%","Default Credit on Download"
-		,cdt_dn_pct);
-	if(leech_pct)
-		sprintf(str,"%u%% after %u seconds",leech_pct,leech_sec);
-	else
-		strcpy(str,"Disabled");
-	sprintf(opt[i++],"%-33.33s%s","Leech Protocol Detection",str);
-	strcpy(opt[i++],"Viewable Files...");
-	strcpy(opt[i++],"Testable Files...");
-	strcpy(opt[i++],"Download Events...");
-	strcpy(opt[i++],"Extractable Files...");
-	strcpy(opt[i++],"Compressable Files...");
-	strcpy(opt[i++],"Transfer Protocols...");
-	strcpy(opt[i++],"Alternate File Paths...");
-	opt[i][0]=0;
-	SETHELP(WHERE);
-/*
-File Transfer Configuration:
-
-This menu has options and sub-menus that pertain specifically to the
-file transfer section of the BBS.
-*/
-	switch(ulist(WIN_ORG|WIN_ACT|WIN_CHE,0,0,72,&xfr_dflt,0
-		,"File Transfer Configuration",opt)) {
-		case -1:
-			i=save_changes(WIN_MID);
-			if(i==-1)
-				break;
-			if(!i)
-				write_file_cfg();
-            return;
-		case 0:
-			SETHELP(WHERE);
-/*
-Minimum Kilobytes Free Disk Space to Allow Uploads:
-
-This is the minimum free space in a file directory to allow user
-uploads.
-*/
-			uinput(WIN_MID,0,0
-				,"Minimum Kilobytes Free Disk Space to Allow Uploads"
-				,itoa(min_dspace,tmp,10),5,K_EDIT|K_NUMBER);
-			min_dspace=atoi(tmp);
-			break;
-		case 1:
-			SETHELP(WHERE);
-/*
-Maximum Files in Batch Upload Queue:
-
-This is the maximum number of files that can be placed in the batch
-upload queue.
-*/
-			uinput(WIN_MID,0,0,"Maximum Files in Batch Upload Queue"
-				,itoa(max_batup,tmp,10),5,K_EDIT|K_NUMBER);
-			max_batup=atoi(tmp);
-            break;
-		case 2:
-			SETHELP(WHERE);
-/*
-Maximum Files in Batch Download Queue:
-
-This is the maximum number of files that can be placed in the batch
-download queue.
-*/
-			uinput(WIN_MID,0,0,"Maximum Files in Batch Download Queue"
-				,itoa(max_batdn,tmp,10),5,K_EDIT|K_NUMBER);
-			max_batdn=atoi(tmp);
-            break;
-		case 3:
-			SETHELP(WHERE);
-/*
-Maximum Destination Users in User to User Transfer:
-
-This is the maximum number of users allowed in the destination user list
-of a user to user upload.
-*/
-			uinput(WIN_MID,0,0
-				,"Maximum Destination Users in User to User Transfers"
-				,itoa(max_userxfer,tmp,10),5,K_EDIT|K_NUMBER);
-			max_userxfer=atoi(tmp);
-			break;
-		case 4:
-SETHELP(WHERE);
-/*
-Default Percentage of Credits to Credit Uploader on Upload:
-
-This is the default setting that will be used when new file
-directories are created.
-*/
-			uinput(WIN_MID,0,0
-				,"Default Percentage of Credits to Credit Uploader on Upload"
-				,itoa(cdt_up_pct,tmp,10),4,K_EDIT|K_NUMBER);
-			cdt_up_pct=atoi(tmp);
-			break;
-		case 5:
-SETHELP(WHERE);
-/*
-Default Percentage of Credits to Credit Uploader on Download:
-
-This is the default setting that will be used when new file
-directories are created.
-*/
-			uinput(WIN_MID,0,0
-				,"Default Percentage of Credits to Credit Uploader on Download"
-				,itoa(cdt_dn_pct,tmp,10),4,K_EDIT|K_NUMBER);
-			cdt_dn_pct=atoi(tmp);
-			break;
-		case 6:
-			SETHELP(WHERE);
-/*
-Leech Protocol Detection Percentage:
-
-This value is the sensitivity of the leech protocol detection feature of
-Synchronet. If the transfer is apparently unsuccessful, but the transfer
-time was at least this percentage of the estimated transfer time (based
-on the estimated CPS of the connection result code), then a leech
-protocol error is issued and the user's leech download counter is
-incremented. Setting this value to 0 disables leech protocol detection.
-*/
-			savnum=0;
-			uinput(WIN_MID|WIN_SAV,0,0
-				,"Leech Protocol Detection Percentage (0=Disabled)"
-				,itoa(leech_pct,tmp,10),3,K_EDIT|K_NUMBER);
-			leech_pct=atoi(tmp);
-			if(!leech_pct)
-				break;
-			SETHELP(WHERE);
-/*
-Leech Protocol Minimum Time (in Seconds):
-
-This option allows you to adjust the sensitivity of the leech protocol
-detection feature. This value is the minimum length of transfer time
-(in seconds) that must elapse before an aborted tranfser will be
-considered a possible leech attempt.
-*/
-			uinput(WIN_MID,0,0
-				,"Leech Protocol Minimum Time (in Seconds)"
-				,itoa(leech_sec,tmp,10),3,K_EDIT|K_NUMBER);
-			leech_sec=atoi(tmp);
-			break;
-		case 7: 	/* Viewable file types */
-			dflt=bar=0;
-			while(1) {
-				for(i=0;i<total_fviews && i<MAX_OPTS;i++)
-					sprintf(opt[i],"%-3.3s  %-40s",fview[i]->ext,fview[i]->cmd);
-				opt[i][0]=0;
-				i=WIN_ACT|WIN_SAV;	/* save cause size can change */
-				if(total_fviews<MAX_OPTS)
-					i|=WIN_INS;
-				if(total_fviews)
-					i|=WIN_DEL|WIN_GET;
-				if(savfview.cmd[0])
-					i|=WIN_PUT;
-				savnum=0;
-				SETHELP(WHERE);
-/*
-Viewable File Types:
-
-This is a list of file types that have content information that can be
-viewed through the execution of an external program. Here are a couple of
-command line examples for a few file types.
-*/
-				i=ulist(i,0,0,50,&dflt,&bar,"Viewable File Types",opt);
-				if(i==-1)
-					break;
-				if((i&MSK_ON)==MSK_DEL) {
-					i&=MSK_OFF;
-					FREE(fview[i]);
-					total_fviews--;
-					while(i<total_fviews) {
-						fview[i]=fview[i+1];
-						i++; }
-					changes=1;
-					continue; }
-				if((i&MSK_ON)==MSK_INS) {
-					i&=MSK_OFF;
-					if((fview=(fview_t **)REALLOC(fview
-						,sizeof(fview_t *)*(total_fviews+1)))==NULL) {
-						errormsg(WHERE,ERR_ALLOC,nulstr,total_fviews+1);
-						total_fviews=0;
-						bail(1);
-						continue; }
-					if(!total_fviews) {
-						if((fview[0]=(fview_t *)MALLOC(
-							sizeof(fview_t)))==NULL) {
-							errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(fview_t));
-							continue; }
-						memset(fview[0],0,sizeof(fview_t));
-						strcpy(fview[0]->ext,"ZIP");
-						strcpy(fview[0]->cmd,"%!pkunzip -v %f"); }
-					else {
-						for(j=total_fviews;j>i;j--)
-							fview[j]=fview[j-1];
-						if((fview[i]=(fview_t *)MALLOC(
-							sizeof(fview_t)))==NULL) {
-							errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(fview_t));
-							continue; }
-						*fview[i]=*fview[i+1]; }
-					total_fviews++;
-					changes=1;
-					continue; }
-				if((i&MSK_ON)==MSK_GET) {
-					i&=MSK_OFF;
-					savfview=*fview[i];
-					continue; }
-				if((i&MSK_ON)==MSK_PUT) {
-					i&=MSK_OFF;
-					*fview[i]=savfview;
-					changes=1;
-					continue; }
-				k=0;
-				done=0;
-				while(!done) {
-					j=0;
-					sprintf(opt[j++],"%-22.22s%s","File Extension"
-						,fview[i]->ext);
-					sprintf(opt[j++],"%-22.22s%-40s","Command Line"
-						,fview[i]->cmd);
-					sprintf(opt[j++],"%-22.22s%s","Access Requirements"
-						,fview[i]->ar);
-					opt[j][0]=0;
-					savnum=1;
-					switch(ulist(WIN_RHT|WIN_BOT|WIN_SAV|WIN_ACT,0,0,0,&k,0
-						,"Viewable File Type",opt)) {
-						case -1:
-							done=1;
-							break;
-						case 0:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Viewable File Type Extension"
-								,fview[i]->ext,3,K_UPPER|K_EDIT);
-							break;
-						case 1:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Command Line"
-								,fview[i]->cmd,50,K_EDIT);
-							break;
-						case 2:
-							savnum=2;
-							sprintf(str,"Viewable File Type %s"
-								,fview[i]->ext);
-							getar(str,fview[i]->ar);
-                            break; } } }
-            break;
-		case 8:    /* Testable file types */
-			dflt=bar=0;
-			while(1) {
-				for(i=0;i<total_ftests && i<MAX_OPTS;i++)
-					sprintf(opt[i],"%-3.3s  %-40s",ftest[i]->ext,ftest[i]->cmd);
-				opt[i][0]=0;
-				i=WIN_ACT|WIN_SAV;	/* save cause size can change */
-				if(total_ftests<MAX_OPTS)
-					i|=WIN_INS;
-				if(total_ftests)
-					i|=WIN_DEL|WIN_GET;
-				if(savftest.cmd[0])
-					i|=WIN_PUT;
-				savnum=0;
-				SETHELP(WHERE);
-/*
-Testable File Types:
-
-This is a list of file types that will have a command line executed to
-test the file integrity upon their upload. The file types are specified
-by extension and if one file extension is listed more than once, each
-command line will be executed. The command lines must return a DOS error
-code of 0 (no error) in order for the file to pass the test. This method
-of file testing upon upload is also known as an upload event. This test
-or event, can do more than just test the file, it can perform any
-function that the sysop wishes. Such as adding comments to an archived
-file, or extracting an archive and performing a virus scan. While the
-external program is executing, a text string is displayed to the user.
-This working string can be set for each file type and command line
-listed.
-*/
-				i=ulist(i,0,0,50,&dflt,&bar,"Testable File Types",opt);
-				if(i==-1)
-					break;
-				if((i&MSK_ON)==MSK_DEL) {
-					i&=MSK_OFF;
-					FREE(ftest[i]);
-					total_ftests--;
-					while(i<total_ftests) {
-						ftest[i]=ftest[i+1];
-						i++; }
-					changes=1;
-					continue; }
-				if((i&MSK_ON)==MSK_INS) {
-					i&=MSK_OFF;
-					if((ftest=(ftest_t **)REALLOC(ftest
-						,sizeof(ftest_t *)*(total_ftests+1)))==NULL) {
-						errormsg(WHERE,ERR_ALLOC,nulstr,total_ftests+1);
-						total_ftests=0;
-						bail(1);
-						continue; }
-					if(!total_ftests) {
-						if((ftest[0]=(ftest_t *)MALLOC(
-							sizeof(ftest_t)))==NULL) {
-							errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(ftest_t));
-							continue; }
-						memset(ftest[0],0,sizeof(ftest_t));
-						strcpy(ftest[0]->ext,"ZIP");
-						strcpy(ftest[0]->cmd,"%!pkunzip -t %f");
-						strcpy(ftest[0]->workstr,"Testing ZIP Integrity..."); }
-					else {
-
-						for(j=total_ftests;j>i;j--)
-							ftest[j]=ftest[j-1];
-						if((ftest[i]=(ftest_t *)MALLOC(
-							sizeof(ftest_t)))==NULL) {
-							errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(ftest_t));
-							continue; }
-						*ftest[i]=*ftest[i+1]; }
-					total_ftests++;
-					changes=1;
-					continue; }
-				if((i&MSK_ON)==MSK_GET) {
-					i&=MSK_OFF;
-					savftest=*ftest[i];
-					continue; }
-				if((i&MSK_ON)==MSK_PUT) {
-					i&=MSK_OFF;
-					*ftest[i]=savftest;
-					changes=1;
-					continue; }
-				done=0;
-				k=0;
-				while(!done) {
-					j=0;
-					sprintf(opt[j++],"%-22.22s%s","File Extension"
-						,ftest[i]->ext);
-					sprintf(opt[j++],"%-22.22s%-40s","Command Line"
-						,ftest[i]->cmd);
-					sprintf(opt[j++],"%-22.22s%s","Working String"
-						,ftest[i]->workstr);
-					sprintf(opt[j++],"%-22.22s%s","Access Requirements"
-						,ftest[i]->ar);
-					opt[j][0]=0;
-					savnum=1;
-					switch(ulist(WIN_RHT|WIN_BOT|WIN_SAV|WIN_ACT,0,0,0,&k,0
-						,"Testable File Type",opt)) {
-						case -1:
-							done=1;
-							break;
-						case 0:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Testable File Type Extension"
-								,ftest[i]->ext,3,K_UPPER|K_EDIT);
-							break;
-						case 1:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Command Line"
-								,ftest[i]->cmd,50,K_EDIT);
-							break;
-						case 2:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Working String"
-								,ftest[i]->workstr,40,K_EDIT|K_MSG);
-							break;
-						case 3:
-							savnum=2;
-							sprintf(str,"Testable File Type %s",ftest[i]->ext);
-							getar(str,ftest[i]->ar);
-							break; } } }
-			break;
-		case 9:    /* Download Events */
-			dflt=bar=0;
-			while(1) {
-				for(i=0;i<total_dlevents && i<MAX_OPTS;i++)
-					sprintf(opt[i],"%-3.3s  %-40s",dlevent[i]->ext,dlevent[i]->cmd);
-				opt[i][0]=0;
-				i=WIN_ACT|WIN_SAV;	/* save cause size can change */
-				if(total_dlevents<MAX_OPTS)
-					i|=WIN_INS;
-				if(total_dlevents)
-					i|=WIN_DEL|WIN_GET;
-				if(savdlevent.cmd[0])
-					i|=WIN_PUT;
-				savnum=0;
-				SETHELP(WHERE);
-/*
-Download Events:
-
-This is a list of file types that will have a command line executed to
-perform an event upon their download (e.g. trigger a download event).
-The file types are specified by extension and if one file extension
-is listed more than once, each command line will be executed. The
-command lines must return a DOS error code of 0 (no error) in order
-for the file to pass the test. This test or event, can do more than
-just test the file, it can perform any function that the sysop wishes.
-Such as adding comments to an archived file, or extracting an archive
-and performing a virus scan. While the external program is executing,
-a text string is displayed to the user. This working string can be set
-for each file type and command line listed.
-*/
-				i=ulist(i,0,0,50,&dflt,&bar,"Download Events",opt);
-				if(i==-1)
-					break;
-				if((i&MSK_ON)==MSK_DEL) {
-					i&=MSK_OFF;
-					FREE(dlevent[i]);
-					total_dlevents--;
-					while(i<total_dlevents) {
-						dlevent[i]=dlevent[i+1];
-						i++; }
-					changes=1;
-					continue; }
-				if((i&MSK_ON)==MSK_INS) {
-					i&=MSK_OFF;
-					if((dlevent=(dlevent_t **)REALLOC(dlevent
-						,sizeof(dlevent_t *)*(total_dlevents+1)))==NULL) {
-						errormsg(WHERE,ERR_ALLOC,nulstr,total_dlevents+1);
-						total_dlevents=0;
-						bail(1);
-						continue; }
-					if(!total_dlevents) {
-						if((dlevent[0]=(dlevent_t *)MALLOC(
-							sizeof(dlevent_t)))==NULL) {
-							errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(dlevent_t));
-							continue; }
-						memset(dlevent[0],0,sizeof(dlevent_t));
-						strcpy(dlevent[0]->ext,"ZIP");
-						strcpy(dlevent[0]->cmd,"%!pkzip -z %f "
-							"< ..\\text\\zipmsg.txt");
-						strcpy(dlevent[0]->workstr,"Adding ZIP Comment..."); }
-					else {
-
-						for(j=total_dlevents;j>i;j--)
-							dlevent[j]=dlevent[j-1];
-						if((dlevent[i]=(dlevent_t *)MALLOC(
-							sizeof(dlevent_t)))==NULL) {
-							errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(dlevent_t));
-							continue; }
-						*dlevent[i]=*dlevent[i+1]; }
-					total_dlevents++;
-					changes=1;
-					continue; }
-				if((i&MSK_ON)==MSK_GET) {
-					i&=MSK_OFF;
-					savdlevent=*dlevent[i];
-					continue; }
-				if((i&MSK_ON)==MSK_PUT) {
-					i&=MSK_OFF;
-					*dlevent[i]=savdlevent;
-					changes=1;
-					continue; }
-				done=0;
-				k=0;
-				while(!done) {
-					j=0;
-					sprintf(opt[j++],"%-22.22s%s","File Extension"
-						,dlevent[i]->ext);
-					sprintf(opt[j++],"%-22.22s%-40s","Command Line"
-						,dlevent[i]->cmd);
-					sprintf(opt[j++],"%-22.22s%s","Working String"
-						,dlevent[i]->workstr);
-					sprintf(opt[j++],"%-22.22s%s","Access Requirements"
-						,dlevent[i]->ar);
-					opt[j][0]=0;
-					savnum=1;
-					switch(ulist(WIN_RHT|WIN_BOT|WIN_SAV|WIN_ACT,0,0,0,&k,0
-						,"Download Event",opt)) {
-						case -1:
-							done=1;
-							break;
-						case 0:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Download Event Extension"
-								,dlevent[i]->ext,3,K_UPPER|K_EDIT);
-							break;
-						case 1:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Command Line"
-								,dlevent[i]->cmd,50,K_EDIT);
-							break;
-						case 2:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Working String"
-								,dlevent[i]->workstr,40,K_EDIT|K_MSG);
-							break;
-						case 3:
-							savnum=2;
-							sprintf(str,"Download Event %s",dlevent[i]->ext);
-							getar(str,dlevent[i]->ar);
-							break; } } }
-            break;
-		case 10:	 /* Extractable file types */
-			dflt=bar=0;
-            while(1) {
-				for(i=0;i<total_fextrs && i<MAX_OPTS;i++)
-                    sprintf(opt[i],"%-3.3s  %-40s"
-                        ,fextr[i]->ext,fextr[i]->cmd);
-				opt[i][0]=0;
-                i=WIN_ACT|WIN_SAV;  /* save cause size can change */
-				if(total_fextrs<MAX_OPTS)
-                    i|=WIN_INS;
-                if(total_fextrs)
-                    i|=WIN_DEL|WIN_GET;
-				if(savfextr.cmd[0])
-                    i|=WIN_PUT;
-                savnum=0;
-                SETHELP(WHERE);
-/*
-Extractable File Types:
-
-This is a list of archive file types that can be extracted to the temp
-directory by an external program. The file types are specified by their
-extension. For each file type you must specify the command line used to
-extract the file(s).
-*/
-				i=ulist(i,0,0,50,&dflt,&bar,"Extractable File Types",opt);
-                if(i==-1)
-                    break;
-				if((i&MSK_ON)==MSK_DEL) {
-					i&=MSK_OFF;
-                    FREE(fextr[i]);
-                    total_fextrs--;
-                    while(i<total_fextrs) {
-                        fextr[i]=fextr[i+1];
-                        i++; }
-                    changes=1;
-                    continue; }
-				if((i&MSK_ON)==MSK_INS) {
-					i&=MSK_OFF;
-					if((fextr=(fextr_t **)REALLOC(fextr
-						,sizeof(fextr_t *)*(total_fextrs+1)))==NULL) {
-						errormsg(WHERE,ERR_ALLOC,nulstr,total_fextrs+1);
-						total_fextrs=0;
-						bail(1);
-						continue; }
-                    if(!total_fextrs) {
-                        if((fextr[0]=(fextr_t *)MALLOC(
-                            sizeof(fextr_t)))==NULL) {
-                            errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(fextr_t));
-                            continue; }
-						memset(fextr[0],0,sizeof(fextr_t));
-                        strcpy(fextr[0]->ext,"ZIP");
-                        strcpy(fextr[0]->cmd,"%!pkunzip -o %f %g %s"); }
-                    else {
-
-                        for(j=total_fextrs;j>i;j--)
-                            fextr[j]=fextr[j-1];
-                        if((fextr[i]=(fextr_t *)MALLOC(
-                            sizeof(fextr_t)))==NULL) {
-                            errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(fextr_t));
-                            continue; }
-                        *fextr[i]=*fextr[i+1]; }
-                    total_fextrs++;
-                    changes=1;
-                    continue; }
-				if((i&MSK_ON)==MSK_GET) {
-					i&=MSK_OFF;
-                    savfextr=*fextr[i];
-                    continue; }
-				if((i&MSK_ON)==MSK_PUT) {
-					i&=MSK_OFF;
-                    *fextr[i]=savfextr;
-                    changes=1;
-                    continue; }
-				k=0;
-				done=0;
-				while(!done) {
-					j=0;
-					sprintf(opt[j++],"%-22.22s%s","File Extension"
-						,fextr[i]->ext);
-					sprintf(opt[j++],"%-22.22s%-40s","Command Line"
-						,fextr[i]->cmd);
-					sprintf(opt[j++],"%-22.22s%s","Access Requirements"
-						,fextr[i]->ar);
-					opt[j][0]=0;
-					savnum=1;
-					switch(ulist(WIN_RHT|WIN_BOT|WIN_SAV|WIN_ACT,0,0,0,&k,0
-						,"Extractable File Type",opt)) {
-						case -1:
-							done=1;
-							break;
-						case 0:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Extractable File Type Extension"
-								,fextr[i]->ext,3,K_UPPER|K_EDIT);
-							break;
-						case 1:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Command Line"
-								,fextr[i]->cmd,50,K_EDIT);
-							break;
-						case 2:
-							savnum=2;
-							sprintf(str,"Extractable File Type %s"
-								,fextr[i]->ext);
-							getar(str,fextr[i]->ar);
-                            break; } } }
-            break;
-		case 11:	 /* Compressable file types */
-			dflt=bar=0;
-			while(1) {
-				for(i=0;i<total_fcomps && i<MAX_OPTS;i++)
-					sprintf(opt[i],"%-3.3s  %-40s",fcomp[i]->ext,fcomp[i]->cmd);
-				opt[i][0]=0;
-				i=WIN_ACT|WIN_SAV;	/* save cause size can change */
-				if(total_fcomps<MAX_OPTS)
-					i|=WIN_INS;
-				if(total_fcomps)
-					i|=WIN_DEL|WIN_GET;
-				if(savfcomp.cmd[0])
-					i|=WIN_PUT;
-				savnum=0;
-				SETHELP(WHERE);
-/*
-Compressable File Types:
-
-This is a list of compression methods available for different file types.
-These will be used for items such as creating QWK packets, temporary
-files from the transfer section, and more.
-*/
-				i=ulist(i,0,0,50,&dflt,&bar,"Compressable File Types",opt);
-				if(i==-1)
-					break;
-				if((i&MSK_ON)==MSK_DEL) {
-					i&=MSK_OFF;
-					FREE(fcomp[i]);
-					total_fcomps--;
-					while(i<total_fcomps) {
-						fcomp[i]=fcomp[i+1];
-						i++; }
-					changes=1;
-					continue; }
-				if((i&MSK_ON)==MSK_INS) {
-					i&=MSK_OFF;
-					if((fcomp=(fcomp_t **)REALLOC(fcomp
-						,sizeof(fcomp_t *)*(total_fcomps+1)))==NULL) {
-						errormsg(WHERE,ERR_ALLOC,nulstr,total_fcomps+1);
-						total_fcomps=0;
-						bail(1);
-						continue; }
-					if(!total_fcomps) {
-						if((fcomp[0]=(fcomp_t *)MALLOC(
-							sizeof(fcomp_t)))==NULL) {
-							errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(fcomp_t));
-							continue; }
-						memset(fcomp[0],0,sizeof(fcomp_t));
-						strcpy(fcomp[0]->ext,"ZIP");
-						strcpy(fcomp[0]->cmd,"%!pkzip %f %s"); }
-					else {
-						for(j=total_fcomps;j>i;j--)
-							fcomp[j]=fcomp[j-1];
-						if((fcomp[i]=(fcomp_t *)MALLOC(
-							sizeof(fcomp_t)))==NULL) {
-							errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(fcomp_t));
-							continue; }
-						*fcomp[i]=*fcomp[i+1]; }
-					total_fcomps++;
-					changes=1;
-					continue; }
-				if((i&MSK_ON)==MSK_GET) {
-					i&=MSK_OFF;
-					savfcomp=*fcomp[i];
-					continue; }
-				if((i&MSK_ON)==MSK_PUT) {
-					i&=MSK_OFF;
-					*fcomp[i]=savfcomp;
-					changes=1;
-					continue; }
-				k=0;
-				done=0;
-				while(!done) {
-					j=0;
-					sprintf(opt[j++],"%-22.22s%s","File Extension"
-						,fcomp[i]->ext);
-					sprintf(opt[j++],"%-22.22s%-40s","Command Line"
-						,fcomp[i]->cmd);
-					sprintf(opt[j++],"%-22.22s%s","Access Requirements"
-						,fcomp[i]->ar);
-					opt[j][0]=0;
-					savnum=1;
-					switch(ulist(WIN_RHT|WIN_BOT|WIN_SAV|WIN_ACT,0,0,0,&k,0
-						,"Compressable File Type",opt)) {
-						case -1:
-							done=1;
-							break;
-						case 0:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Compressable File Type Extension"
-								,fcomp[i]->ext,3,K_UPPER|K_EDIT);
-							break;
-						case 1:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Command Line"
-								,fcomp[i]->cmd,50,K_EDIT);
-							break;
-						case 2:
-							savnum=2;
-							sprintf(str,"Compressable File Type %s"
-								,fcomp[i]->ext);
-							getar(str,fcomp[i]->ar);
-                            break; } } }
-            break;
-		case 12:	/* Transfer protocols */
-			dflt=bar=0;
-			while(1) {
-				for(i=0;i<total_prots && i<MAX_OPTS;i++)
-					sprintf(opt[i],"%c  %-40s"
-						,prot[i]->mnemonic,prot[i]->ulcmd);
-				opt[i][0]=0;
-				i=WIN_ACT|WIN_SAV;	/* save cause size can change */
-				if(total_prots<MAX_OPTS)
-					i|=WIN_INS;
-				if(total_prots)
-					i|=WIN_DEL|WIN_GET;
-				if(savprot.mnemonic)
-					i|=WIN_PUT;
-				savnum=0;
-				SETHELP(WHERE);
-/*
-File Transfer Protocols:
-
-This is a list of file transfer protocols that can be used to transfer
-files either to or from a remote user. For each protocol, you can
-specify the mnemonic (hot-key) to use to specify that protocol, the
-command line to use for uploads, downloads, batch uploads, batch
-downloads, bidirectional file transfers, and the support of DSZLOG. If
-the protocol doesn't support a certain method of transfer, or you don't
-wish it to be available for a certain method of transfer, leave the
-command line for that method blank. Be advised, that if you add or
-remove any transfer protocols, you will need to edit the protocol menus
-(ULPROT, DLPROT, BATUPROT, BATDPROT, and BIPROT) in the TEXT\MENU
-directory accordingly.
-*/
-				i=ulist(i,0,0,50,&dflt,&bar,"File Transfer Protocols",opt);
-				if(i==-1)
-					break;
-				if((i&MSK_ON)==MSK_DEL) {
-					i&=MSK_OFF;
-					FREE(prot[i]);
-					total_prots--;
-					while(i<total_prots) {
-						prot[i]=prot[i+1];
-						i++; }
-					changes=1;
-					continue; }
-				if((i&MSK_ON)==MSK_INS) {
-					i&=MSK_OFF;
-					if((prot=(prot_t **)REALLOC(prot
-						,sizeof(prot_t *)*(total_prots+1)))==NULL) {
-						errormsg(WHERE,ERR_ALLOC,nulstr,total_prots+1);
-						total_prots=0;
-						bail(1);
-						continue; }
-					if(!total_prots) {
-						if((prot[0]=(prot_t *)MALLOC(
-							sizeof(prot_t)))==NULL) {
-							errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(prot_t));
-							continue; }
-						memset(prot[0],0,sizeof(prot_t));
-						prot[0]->mnemonic='Y';
-						prot[0]->misc=PROT_DSZLOG;
-						strcpy(prot[0]->ulcmd
-							,"%!dsz port %p estimate 0 %e rb %f");
-						strcpy(prot[0]->dlcmd
-							,"%!dsz port %p estimate 0 %e sb %f");
-						strcpy(prot[0]->batulcmd
-							,"%!dsz port %p estimate 0 %e rb %f");
-						strcpy(prot[0]->batdlcmd
-							,"%!dsz port %p estimate 0 %e sb @%f"); }
-					else {
-
-						for(j=total_prots;j>i;j--)
-							prot[j]=prot[j-1];
-						if((prot[i]=(prot_t *)MALLOC(
-							sizeof(prot_t)))==NULL) {
-							errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(prot_t));
-							continue; }
-						*prot[i]=*prot[i+1]; }
-					total_prots++;
-					changes=1;
-					continue; }
-				if((i&MSK_ON)==MSK_GET) {
-					i&=MSK_OFF;
-					savprot=*prot[i];
-					continue; }
-				if((i&MSK_ON)==MSK_PUT) {
-					i&=MSK_OFF;
-					*prot[i]=savprot;
-					changes=1;
-					continue; }
-				done=0;
-				k=0;
-				while(!done) {
-					j=0;
-					sprintf(opt[j++],"%-25.25s%c","Mnemonic (Command Key)"
-						,prot[i]->mnemonic);
-					sprintf(opt[j++],"%-25.25s%-40s","Protocol Name"
-						,prot[i]->name);
-					sprintf(opt[j++],"%-25.25s%-40s","Access Requirements"
-						,prot[i]->ar);
-					sprintf(opt[j++],"%-25.25s%-40s","Upload Command Line"
-						,prot[i]->ulcmd);
-					sprintf(opt[j++],"%-25.25s%-40s","Download Command Line"
-						,prot[i]->dlcmd);
-					sprintf(opt[j++],"%-25.25s%-40s","Batch UL Command Line"
-						,prot[i]->batulcmd);
-					sprintf(opt[j++],"%-25.25s%-40s","Batch DL Command Line"
-						,prot[i]->batdlcmd);
-					sprintf(opt[j++],"%-25.25s%-40s","Bidir Command Line"
-						,prot[i]->bicmd);
-					sprintf(opt[j++],"%-25.25s%s","Uses DSZLOG"
-						,prot[i]->misc&PROT_DSZLOG ? "Yes":"No");
-					opt[j][0]=0;
-					savnum=1;
-					switch(ulist(WIN_RHT|WIN_BOT|WIN_SAV|WIN_ACT,0,0,0,&k,0
-						,"File Transfer Protocol",opt)) {
-						case -1:
-							done=1;
-							break;
-						case 0:
-							str[0]=prot[i]->mnemonic;
-							str[1]=0;
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Mnemonic (Command Key)"
-								,str,1,K_UPPER|K_EDIT);
-							if(str[0])
-								prot[i]->mnemonic=str[0];
-							break;
-						case 1:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Protocol Name"
-								,prot[i]->name,25,K_EDIT);
-                            break;
-						case 2:
-							savnum=2;
-							sprintf(str,"Protocol %s",prot[i]->name);
-							getar(str,prot[i]->ar);
-							break;
-						case 3:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Upload Command"
-								,prot[i]->ulcmd,50,K_EDIT);
-							break;
-						case 4:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Download Command"
-								,prot[i]->dlcmd,50,K_EDIT);
-                            break;
-						case 5:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Batch UL Command"
-								,prot[i]->batulcmd,50,K_EDIT);
-                            break;
-						case 6:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Batch DL Command"
-								,prot[i]->batdlcmd,50,K_EDIT);
-                            break;
-						case 7:
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Bi-dir Command"
-								,prot[i]->bicmd,50,K_EDIT);
-                            break;
-						case 8:
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							opt[2][0]=0;
-							l=0;
-							savnum=2;
-							l=ulist(WIN_MID|WIN_SAV,0,0,0,&l,0
-								,"Uses DSZLOG",opt);
-							if(!l && !(prot[i]->misc&PROT_DSZLOG)) {
-								prot[i]->misc|=PROT_DSZLOG;
-								changes=1; }
-							else if(l==1 && prot[i]->misc&PROT_DSZLOG) {
-								prot[i]->misc&=~PROT_DSZLOG;
-								changes=1; }
-							break; } } }
-			break;
-		case 13:	/* Alternate file paths */
-			dflt=bar=0;
-			while(1) {
-				for(i=0;i<altpaths;i++)
-					sprintf(opt[i],"%3d: %-40s",i+1,altpath[i]);
-				opt[i][0]=0;
-				i=WIN_ACT|WIN_SAV;	/* save cause size can change */
-				if((int)altpaths<MAX_OPTS)
-					i|=WIN_INS;
-				if(altpaths)
-					i|=WIN_DEL|WIN_GET;
-				if(savaltpath[0])
-					i|=WIN_PUT;
-				savnum=0;
-				SETHELP(WHERE);
-/*
-Alternate File Paths:
-
-This option allows the sysop to add and configure alternate file paths
-for files stored on drives and directories other than the configured
-storage path for a file directory. This command is useful for those who
-have file directories where they wish to have files listed from
-multiple CD-ROMs or hard disks.
-*/
-				i=ulist(i,0,0,50,&dflt,&bar,"Alternate File Paths",opt);
-				if(i==-1)
-					break;
-				if((i&MSK_ON)==MSK_DEL) {
-					i&=MSK_OFF;
-					FREE(altpath[i]);
-					altpaths--;
-					while(i<altpaths) {
-						altpath[i]=altpath[i+1];
-						i++; }
-					changes=1;
-					continue; }
-				if((i&MSK_ON)==MSK_INS) {
-					i&=MSK_OFF;
-					if((altpath=(char **)REALLOC(altpath
-						,sizeof(char *)*(altpaths+1)))==NULL) {
-						errormsg(WHERE,ERR_ALLOC,nulstr,altpaths+1);
-						altpaths=0;
-						bail(1);
-                        continue; }
-					if(!altpaths) {
-						if((altpath[0]=(char *)MALLOC(LEN_DIR+1))==NULL) {
-							errormsg(WHERE,ERR_ALLOC,nulstr,LEN_DIR+1);
-							continue; }
-						memset(altpath[0],0,LEN_DIR+1); }
-					else {
-						for(j=altpaths;j>i;j--)
-							altpath[j]=altpath[j-1];
-						if((altpath[i]=(char *)MALLOC(LEN_DIR+1))==NULL) {
-							errormsg(WHERE,ERR_ALLOC,nulstr,LEN_DIR+1);
-							continue; }
-						memcpy(altpath[i],altpath[i+1],LEN_DIR+1); }
-					altpaths++;
-					changes=1;
-					continue; }
-				if((i&MSK_ON)==MSK_GET) {
-					i&=MSK_OFF;
-					memcpy(savaltpath,altpath[i],LEN_DIR+1);
-					continue; }
-				if((i&MSK_ON)==MSK_PUT) {
-					i&=MSK_OFF;
-					memcpy(altpath[i],savaltpath,LEN_DIR+1);
-					changes=1;
-					continue; }
-				sprintf(str,"Path %d",i+1);
-				uinput(WIN_MID|WIN_SAV,0,0,str,altpath[i],50,K_UPPER|K_EDIT); }
-			break; } }
-}
-
diff --git a/src/sbbs2/scfg/scfgxfr2.c b/src/sbbs2/scfg/scfgxfr2.c
deleted file mode 100644
index 6169caf3e4..0000000000
--- a/src/sbbs2/scfg/scfgxfr2.c
+++ /dev/null
@@ -1,1453 +0,0 @@
-#line 2 "SCFGXFR2.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "scfg.h"
-
-void xfer_cfg()
-{
-	static int libs_dflt,libs_bar,dflt;
-	char str[256],str2[81],done=0,*p;
-	int file,j,k,q;
-	uint i;
-	long ported;
-	static lib_t savlib;
-	dir_t tmpdir;
-	FILE *stream;
-
-while(1) {
-	for(i=0;i<total_libs && i<MAX_OPTS;i++)
-		sprintf(opt[i],"%-25s",lib[i]->lname);
-	opt[i][0]=0;
-	j=WIN_ACT|WIN_CHE|WIN_ORG;
-	if(total_libs)
-		j|=WIN_DEL|WIN_GET|WIN_DELACT;
-	if(total_libs<MAX_OPTS)
-		j|=WIN_INS|WIN_INSACT|WIN_XTR;
-	if(savlib.sname[0])
-		j|=WIN_PUT;
-	SETHELP(WHERE);
-/*
-File Libraries:
-
-This is a listing of file libraries for your BBS. File Libraries are
-used to logically separate your file directories into groups. Every
-directory belongs to a file library.
-
-One popular use for file libraries is to separate CD-ROM and hard disk
-directories. One might have an Uploads file library that contains
-uploads to the hard disk directories and also have a PC-SIG file
-library that contains directories from a PC-SIG CD-ROM. Some sysops
-separate directories into more specific areas such as Main, Graphics,
-or Adult. If you have many directories that have a common subject
-denominator, you may want to have a separate file library for those
-directories for a more organized file structure.
-*/
-	i=ulist(j,0,0,45,&libs_dflt,&libs_bar,"File Libraries",opt);
-	if((signed)i==-1) {
-		j=save_changes(WIN_MID);
-		if(j==-1)
-			continue;
-		if(!j)
-			write_file_cfg();
-		return; }
-	if((i&MSK_ON)==MSK_INS) {
-		i&=MSK_OFF;
-		strcpy(str,"Main");
-		SETHELP(WHERE);
-/*
-Library Long Name:
-
-This is a description of the file library which is displayed when a
-user of the system uses the /* command from the file transfer menu.
-*/*/
-		if(uinput(WIN_MID|WIN_SAV,0,0,"Library Long Name",str,LEN_GLNAME
-			,K_EDIT)<1)
-			continue;
-		sprintf(str2,"%.*s",LEN_GSNAME,str);
-		SETHELP(WHERE);
-/*
-Library Short Name:
-
-This is a short description of the file library which is used for the
-file transfer menu prompt.
-*/
-		if(uinput(WIN_MID|WIN_SAV,0,0,"Library Short Name",str2,LEN_GSNAME
-			,K_EDIT)<1)
-			continue;
-		if((lib=(lib_t **)REALLOC(lib,sizeof(lib_t *)*(total_libs+1)))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,nulstr,total_libs+1);
-			total_libs=0;
-			bail(1);
-            continue; }
-
-		if(total_libs) {
-			for(j=total_libs;j>i;j--)
-                lib[j]=lib[j-1];
-			for(j=0;j<total_dirs;j++)
-				if(dir[j]->lib>=i)
-					dir[j]->lib++; }
-		if((lib[i]=(lib_t *)MALLOC(sizeof(lib_t)))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(lib_t));
-			continue; }
-		memset((lib_t *)lib[i],0,sizeof(lib_t));
-		strcpy(lib[i]->lname,str);
-		strcpy(lib[i]->sname,str2);
-		total_libs++;
-		changes=1;
-		continue; }
-	if((i&MSK_ON)==MSK_DEL) {
-		i&=MSK_OFF;
-		SETHELP(WHERE);
-/*
-Delete All Data in Library:
-
-If you wish to delete the database files for all directories in this
-library, select Yes.
-*/
-		j=1;
-		strcpy(opt[0],"Yes");
-		strcpy(opt[1],"No");
-		opt[2][0]=0;
-		j=ulist(WIN_MID|WIN_SAV,0,0,0,&j,0
-			,"Delete All Library Data Files",opt);
-		if(j==-1)
-			continue;
-		if(j==0)
-			for(j=0;j<total_dirs;j++)
-				if(dir[j]->lib==i) {
-					sprintf(str,"%s.*",dir[j]->code);
-					if(!dir[j]->data_dir[0])
-						sprintf(tmp,"%sDIRS\\",data_dir);
-					else
-						strcpy(tmp,dir[j]->data_dir);
-					delfiles(tmp,str); }
-		FREE(lib[i]);
-		for(j=0;j<total_dirs;) {
-			if(dir[j]->lib==i) {
-				FREE(dir[j]);
-				total_dirs--;
-				k=j;
-				while(k<total_dirs) {
-					dir[k]=dir[k+1];
-					k++; } }
-			else j++; }
-		for(j=0;j<total_dirs;j++)
-			if(dir[j]->lib>i)
-				dir[j]->lib--;
-		total_libs--;
-		while(i<total_libs) {
-			lib[i]=lib[i+1];
-			i++; }
-		changes=1;
-		continue; }
-	if((i&MSK_ON)==MSK_GET) {
-		i&=MSK_OFF;
-		savlib=*lib[i];
-		continue; }
-	if((i&MSK_ON)==MSK_PUT) {
-		i&=MSK_OFF;
-		*lib[i]=savlib;
-		changes=1;
-        continue; }
-	done=0;
-	while(!done) {
-		j=0;
-		sprintf(opt[j++],"%-27.27s%s","Long Name",lib[i]->lname);
-		sprintf(opt[j++],"%-27.27s%s","Short Name",lib[i]->sname);
-		sprintf(opt[j++],"%-27.27s%.40s","Access Requirements"
-			,lib[i]->ar);
-		strcpy(opt[j++],"Clone Options");
-		strcpy(opt[j++],"Export Areas...");
-		strcpy(opt[j++],"Import Areas...");
-		strcpy(opt[j++],"File Directories...");
-		opt[j][0]=0;
-		savnum=0;
-		sprintf(str,"%s Library",lib[i]->sname);
-		SETHELP(WHERE);
-/*
-File Library Configuration:
-
-This menu allows you to configure the security requirments for access
-to this file library. You can also add, delete, and configure the
-directories of this library by selecting the File Directories... option.
-*/
-		switch(ulist(WIN_ACT,6,4,60,&dflt,0,str,opt)) {
-			case -1:
-				done=1;
-				break;
-			case 0:
-				SETHELP(WHERE);
-/*
-Library Long Name:
-
-This is a description of the file library which is displayed when a
-user of the system uses the /* command from the file transfer menu.
-*/*/
-				strcpy(str,lib[i]->lname);	/* save */
-				if(!uinput(WIN_MID|WIN_SAV,0,0,"Name to use for Listings"
-					,lib[i]->lname,LEN_GLNAME,K_EDIT))
-					strcpy(lib[i]->lname,str);	/* restore */
-				break;
-			case 1:
-				SETHELP(WHERE);
-/*
-Library Short Name:
-
-This is a short description of the file librarly which is used for the
-file transfer menu prompt.
-*/
-				uinput(WIN_MID|WIN_SAV,0,0,"Name to use for Prompts"
-					,lib[i]->sname,LEN_GSNAME,K_EDIT);
-				break;
-			case 2:
-				sprintf(str,"%s Library",lib[i]->sname);
-				getar(str,lib[i]->ar);
-				break;
-			case 3: /* clone options */
-				j=0;
-				strcpy(opt[0],"Yes");
-				strcpy(opt[1],"No");
-				opt[2][0]=0;
-				SETHELP(WHERE);
-/*
-Clone Directory Options:
-
-If you want to clone the options of the first directory of this library
-into all directories of this library, select Yes.
-
-The options cloned are upload requirments, download requirments,
-operator requirements, exempted user requirements, toggle options,
-maximum number of files, allowed file extensions, default file
-extension, and sort type.
-*/
-				j=ulist(WIN_MID|WIN_SAV,0,0,0,&j,0
-					,"Clone Options of First Directory into All of Library"
-					,opt);
-				if(j==0) {
-					k=-1;
-					for(j=0;j<total_dirs;j++)
-						if(dir[j]->lib==i) {
-							if(k==-1)
-								k=j;
-							else {
-								changes=1;
-								dir[j]->misc=dir[k]->misc;
-								strcpy(dir[j]->ul_ar,dir[k]->ul_ar);
-								strcpy(dir[j]->dl_ar,dir[k]->dl_ar);
-								strcpy(dir[j]->op_ar,dir[k]->op_ar);
-								strcpy(dir[j]->ex_ar,dir[k]->ex_ar);
-								strcpy(dir[j]->exts,dir[k]->exts);
-								strcpy(dir[j]->data_dir,dir[k]->data_dir);
-								strcpy(dir[j]->upload_sem,dir[k]->upload_sem);
-								dir[j]->maxfiles=dir[k]->maxfiles;
-								dir[j]->maxage=dir[k]->maxage;
-								dir[j]->up_pct=dir[k]->up_pct;
-								dir[j]->dn_pct=dir[k]->dn_pct;
-								dir[j]->seqdev=dir[k]->seqdev;
-								dir[j]->sort=dir[k]->sort; } } }
-                break;
-			case 4:
-				k=0;
-				ported=0;
-				q=changes;
-				strcpy(opt[k++],"DIRS.TXT    (Synchronet)");
-				strcpy(opt[k++],"FILEBONE.NA (Fido)");
-				opt[k][0]=0;
-				SETHELP(WHERE);
-/*
-Export Area File Format:
-
-This menu allows you to choose the format of the area file you wish to
-export to.
-*/
-				k=0;
-				k=ulist(WIN_MID|WIN_SAV,0,0,0,&k,0
-					,"Export Area File Format",opt);
-				if(k==-1)
-					break;
-				if(k==0)
-					sprintf(str,"%sDIRS.TXT",ctrl_dir);
-				else if(k==1)
-					sprintf(str,"FILEBONE.NA");
-				strupr(str);
-				if(uinput(WIN_MID|WIN_SAV,0,0,"Filename"
-					,str,40,K_UPPER|K_EDIT)<=0) {
-					changes=q;
-					break; }
-				if(fexist(str)) {
-					strcpy(opt[0],"Overwrite");
-					strcpy(opt[1],"Append");
-					opt[2][0]=0;
-					j=0;
-					j=ulist(WIN_MID|WIN_SAV,0,0,0,&j,0
-						,"File Exists",opt);
-					if(j==-1)
-						break;
-					if(j==0) j=O_WRONLY|O_TRUNC;
-					else	 j=O_WRONLY|O_APPEND; }
-				else
-					j=O_WRONLY|O_CREAT;
-				if((stream=fnopen(&file,str,j))==NULL) {
-					umsg("Open Failure");
-					break; }
-				upop("Exporting Areas...");
-				for(j=0;j<total_dirs;j++) {
-					if(dir[j]->lib!=i)
-						continue;
-					ported++;
-					if(k==1) {
-						fprintf(stream,"Area %-8s  0     !      %s\r\n"
-							,dir[j]->code,dir[j]->lname);
-						continue; }
-					fprintf(stream,"%s\r\n%s\r\n%s\r\n%s\r\n%s\r\n%s\r\n"
-							"%s\r\n%s\r\n"
-						,dir[j]->lname
-						,dir[j]->sname
-						,dir[j]->code
-						,dir[j]->data_dir
-						,dir[j]->ar
-						,dir[j]->ul_ar
-						,dir[j]->dl_ar
-						,dir[j]->op_ar
-						);
-					fprintf(stream,"%s\r\n%s\r\n%u\r\n%s\r\n%lX\r\n%u\r\n"
-							"%u\r\n"
-						,dir[j]->path
-						,dir[j]->upload_sem
-						,dir[j]->maxfiles
-						,dir[j]->exts
-						,dir[j]->misc
-						,dir[j]->seqdev
-						,dir[j]->sort
-						);
-					fprintf(stream,"%s\r\n%u\r\n%u\r\n%u\r\n"
-						,dir[j]->ex_ar
-						,dir[j]->maxage
-						,dir[j]->up_pct
-						,dir[j]->dn_pct
-						);
-					fprintf(stream,"***END-OF-DIR***\r\n\r\n"); }
-				fclose(stream);
-				upop(0);
-				sprintf(str,"%lu File Areas Exported Successfully",ported);
-				umsg(str);
-				changes=q;
-				break;
-
-			case 5:
-				ported=0;
-				k=0;
-				SETHELP(WHERE);
-/*
-Import Area File Format:
-
-This menu allows you to choose the format of the area file you wish to
-import into the current file library.
-*/
-				strcpy(opt[k++],"DIRS.TXT    (Synchronet)");
-                strcpy(opt[k++],"FILEBONE.NA (Fido)");
-				opt[k][0]=0;
-				k=0;
-				k=ulist(WIN_MID|WIN_SAV,0,0,0,&k,0
-					,"Import Area File Format",opt);
-				if(k==-1)
-					break;
-				if(k==0)
-					sprintf(str,"%sDIRS.TXT",ctrl_dir);
-				else if(k==1)
-					sprintf(str,"FILEBONE.NA");
-				strupr(str);
-				if(uinput(WIN_MID|WIN_SAV,0,0,"Filename"
-					,str,40,K_UPPER|K_EDIT)<=0)
-                    break;
-				if((stream=fnopen(&file,str,O_RDONLY))==NULL) {
-					umsg("Open Failure");
-                    break; }
-				upop("Importing Areas...");
-				while(!feof(stream)) {
-					if(!fgets(str,128,stream)) break;
-					truncsp(str);
-					if(!str[0])
-						continue;
-					if(k) {
-						p=str;
-						while(*p && *p<=SP) p++;
-						if(strnicmp(p,"AREA ",5))
-							continue;
-						memset(&tmpdir,0,sizeof(dir_t));
-						tmpdir.misc|=
-							(DIR_FCHK|DIR_DUPES|DIR_CDTUL|DIR_CDTDL|DIR_DIZ);
-						if(k==1) {
-							p+=5;
-							while(*p && *p<=SP) p++;
-							sprintf(tmpdir.code,"%.8s",p);
-							truncsp(tmpdir.code);
-							while(*p>SP) p++;			/* Skip areaname */
-							while(*p && *p<=SP) p++;	/* Skip space */
-							while(*p>SP) p++;			/* Skip level */
-							while(*p && *p<=SP) p++;	/* Skip space */
-							while(*p>SP) p++;			/* Skip flags */
-							while(*p && *p<=SP) p++;	/* Skip space */
-							sprintf(tmpdir.lname,"%.*s",LEN_SLNAME,p); }
-						ported++; }
-					else {
-						memset(&tmpdir,0,sizeof(dir_t));
-						sprintf(tmpdir.lname,"%.*s",LEN_SLNAME,str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						sprintf(tmpdir.sname,"%.*s",LEN_SSNAME,str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						sprintf(tmpdir.code,"%.*s",8,str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						sprintf(tmpdir.data_dir,"%.*s",LEN_DIR,str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						sprintf(tmpdir.ar,"%.*s",LEN_ARSTR,str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						sprintf(tmpdir.ul_ar,"%.*s",LEN_ARSTR,str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						sprintf(tmpdir.dl_ar,"%.*s",LEN_ARSTR,str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						sprintf(tmpdir.op_ar,"%.*s",LEN_ARSTR,str);
-						if(!fgets(str,128,stream)) break;
-                        truncsp(str);
-                        sprintf(tmpdir.path,"%.*s",LEN_DIR,str);
-						if(!fgets(str,128,stream)) break;
-                        truncsp(str);
-                        sprintf(tmpdir.upload_sem,"%.*s",LEN_DIR,str);
-						if(!fgets(str,128,stream)) break;
-                        truncsp(str);
-						tmpdir.maxfiles=atoi(str);
-						if(!fgets(str,128,stream)) break;
-                        truncsp(str);
-						sprintf(tmpdir.exts,"%.*s",40,str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						tmpdir.misc=ahtoul(str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						tmpdir.seqdev=atoi(str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						tmpdir.sort=atoi(str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						sprintf(tmpdir.ex_ar,"%.*s",LEN_ARSTR,str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						tmpdir.maxage=atoi(str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						tmpdir.up_pct=atoi(str);
-						if(!fgets(str,128,stream)) break;
-						truncsp(str);
-						tmpdir.dn_pct=atoi(str);
-
-						ported++;
-						while(!feof(stream)
-							&& strcmp(str,"***END-OF-DIR***")) {
-							if(!fgets(str,128,stream)) break;
-							truncsp(str); } }
-
-					for(j=0;j<total_dirs;j++) {
-						if(dir[j]->lib!=i)
-							continue;
-						if(!stricmp(dir[j]->code,tmpdir.code))
-							break; }
-					if(j==total_dirs) {
-
-						if((dir=(dir_t **)REALLOC(dir
-							,sizeof(dir_t *)*(total_dirs+1)))==NULL) {
-							errormsg(WHERE,ERR_ALLOC,"dir",total_dirs+1);
-							total_dirs=0;
-							bail(1);
-							break; }
-
-						if((dir[j]=(dir_t *)MALLOC(sizeof(dir_t)))
-							==NULL) {
-							errormsg(WHERE,ERR_ALLOC,"dir",sizeof(dir_t));
-							break; }
-						memset(dir[j],0,sizeof(dir_t)); }
-					if(!k)
-						memcpy(dir[j],&tmpdir,sizeof(dir_t));
-					else {
-						strcpy(dir[j]->code,tmpdir.code);
-						strcpy(dir[j]->sname,tmpdir.code);
-						strcpy(dir[j]->lname,tmpdir.lname);
-						if(j==total_dirs) {
-							dir[j]->maxfiles=1000;
-							dir[j]->up_pct=cdt_up_pct;
-							dir[j]->dn_pct=cdt_dn_pct; }
-						}
-					dir[j]->lib=i;
-					if(j==total_dirs) {
-						dir[j]->misc=tmpdir.misc;
-						total_dirs++; }
-					changes=1; }
-				fclose(stream);
-				upop(0);
-				sprintf(str,"%lu File Areas Imported Successfully",ported);
-                umsg(str);
-                break;
-
-			case 6:
-				dir_cfg(i);
-				break; } } }
-
-}
-
-void dir_cfg(uint libnum)
-{
-	static int dflt,bar,tog_dflt,tog_bar,adv_dflt,opt_dflt;
-	char str[81],str2[81],code[9],path[128],done=0,*p;
-	int j,n;
-	uint i,dirnum[MAX_OPTS+1];
-	static dir_t savdir;
-
-while(1) {
-	for(i=0,j=0;i<total_dirs && j<MAX_OPTS;i++)
-		if(dir[i]->lib==libnum) {
-			sprintf(opt[j],"%-25s",dir[i]->lname);
-			dirnum[j++]=i; }
-	dirnum[j]=total_dirs;
-	opt[j][0]=0;
-	sprintf(str,"%s Directories",lib[libnum]->sname);
-	savnum=0;
-	i=WIN_SAV|WIN_ACT;
-	if(j)
-		i|=WIN_DEL|WIN_GET|WIN_DELACT;
-	if(j<MAX_OPTS)
-		i|=WIN_INS|WIN_INSACT|WIN_XTR;
-	if(savdir.sname[0])
-		i|=WIN_PUT;
-	SETHELP(WHERE);
-/*
-File Directories:
-
-This is a list of file directories that have been configured for the
-selected file library.
-
-To add a directory, select the desired position with the arrow keys and
-hit  INS .
-
-To delete a directory, select it with the arrow keys and hit  DEL .
-
-To configure a directory, select it with the arrow keys and hit  ENTER .
-*/
-	i=ulist(i,24,1,45,&dflt,&bar,str,opt);
-	savnum=1;
-	if((signed)i==-1)
-		return;
-	if((i&MSK_ON)==MSK_INS) {
-		i&=MSK_OFF;
-		strcpy(str,"Games");
-		SETHELP(WHERE);
-/*
-Directory Long Name:
-
-This is a description of the file directory which is displayed in all
-directory listings.
-*/
-		if(uinput(WIN_MID|WIN_SAV,0,0,"Directory Long Name",str,LEN_SLNAME
-			,K_EDIT)<1)
-			continue;
-		sprintf(str2,"%.*s",LEN_SSNAME,str);
-		SETHELP(WHERE);
-/*
-Directory Short Name:
-
-This is a short description of the file directory which is displayed at
-the file transfer prompt.
-*/
-		if(uinput(WIN_MID|WIN_SAV,0,0,"Directory Short Name",str2,LEN_SSNAME
-			,K_EDIT)<1)
-            continue;
-		sprintf(code,"%.8s",str2);
-		p=strchr(code,SP);
-		if(p) *p=0;
-		strupr(code);
-		SETHELP(WHERE);
-/*
-Directory Internal Code:
-
-Every directory must have its own unique code for Synchronet to refer to
-it internally. This code should be descriptive of the directory's
-contents, usually an abreviation of the directory's name.
-*/
-		if(uinput(WIN_MID|WIN_SAV,0,0,"Directory Internal Code",code,8
-			,K_EDIT|K_UPPER)<1)
-            continue;
-		if(!code_ok(code)) {
-			helpbuf=invalid_code;
-			umsg("Invalid Code");
-			helpbuf=0;
-			continue; }
-		sprintf(path,"%sDIRS\\%s",data_dir,code);
-		SETHELP(WHERE);
-/*
-Directory File Path:
-
-This is the drive and directory where your uploads to and downloads from
-this directory will be stored. Example: C:\XFER\GAMES
-*/
-		if(uinput(WIN_MID|WIN_SAV,0,0,"Directory File Path",path,50
-			,K_EDIT|K_UPPER)<1)
-			continue;
-		if((dir=(dir_t **)REALLOC(dir,sizeof(dir_t *)*(total_dirs+1)))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,nulstr,total_dirs+1);
-			total_dirs=0;
-			bail(1);
-            continue; }
-
-		if(j)
-			for(n=total_dirs;n>dirnum[i];n--)
-                dir[n]=dir[n-1];
-		if((dir[dirnum[i]]=(dir_t *)MALLOC(sizeof(dir_t)))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(dir_t));
-			continue; }
-		memset((dir_t *)dir[dirnum[i]],0,sizeof(dir_t));
-		dir[dirnum[i]]->lib=libnum;
-		dir[dirnum[i]]->maxfiles=MAX_FILES<500 ? MAX_FILES:500;
-		if(strcmpi(str2,"OFFLINE"))
-			dir[dirnum[i]]->misc=(DIR_FCHK|DIR_MULT|DIR_DUPES
-				|DIR_CDTUL|DIR_CDTDL|DIR_DIZ);
-		strcpy(dir[dirnum[i]]->code,code);
-		strcpy(dir[dirnum[i]]->lname,str);
-		strcpy(dir[dirnum[i]]->sname,str2);
-		strcpy(dir[dirnum[i]]->path,path);
-		dir[dirnum[i]]->up_pct=cdt_up_pct;
-		dir[dirnum[i]]->dn_pct=cdt_dn_pct;
-		total_dirs++;
-		changes=1;
-		continue; }
-	if((i&MSK_ON)==MSK_DEL) {
-		i&=MSK_OFF;
-		SETHELP(WHERE);
-/*
-Delete Directory Data Files:
-
-If you want to delete all the database files for this directory,
-select Yes.
-*/
-		j=1;
-		strcpy(opt[0],"Yes");
-		strcpy(opt[1],"No");
-		opt[2][0]=0;
-		j=ulist(WIN_MID|WIN_SAV,0,0,0,&j,0
-			,"Delete Data in Sub-board",opt);
-		if(j==-1)
-			continue;
-		if(j==0) {
-				sprintf(str,"%s.*",dir[dirnum[i]]->code);
-				if(!dir[dirnum[i]]->data_dir[0])
-					sprintf(tmp,"%sDIRS\\",data_dir);
-				else
-					strcpy(tmp,dir[dirnum[i]]->data_dir);
-				delfiles(tmp,str); }
-		FREE(dir[dirnum[i]]);
-		total_dirs--;
-		for(j=dirnum[i];j<total_dirs;j++)
-			dir[j]=dir[j+1];
-		changes=1;
-		continue; }
-	if((i&MSK_ON)==MSK_GET) {
-		i&=MSK_OFF;
-		savdir=*dir[dirnum[i]];
-		continue; }
-	if((i&MSK_ON)==MSK_PUT) {
-		i&=MSK_OFF;
-		*dir[dirnum[i]]=savdir;
-		dir[dirnum[i]]->lib=libnum;
-		changes=1;
-        continue; }
-	i=dirnum[dflt];
-	j=0;
-	done=0;
-	while(!done) {
-		n=0;
-		sprintf(opt[n++],"%-27.27s%s","Long Name",dir[i]->lname);
-		sprintf(opt[n++],"%-27.27s%s","Short Name",dir[i]->sname);
-		sprintf(opt[n++],"%-27.27s%s","Internal Code",dir[i]->code);
-		sprintf(opt[n++],"%-27.27s%.40s","Access Requirements"
-			,dir[i]->ar);
-		sprintf(opt[n++],"%-27.27s%.40s","Upload Requirements"
-			,dir[i]->ul_ar);
-		sprintf(opt[n++],"%-27.27s%.40s","Download Requirements"
-			,dir[i]->dl_ar);
-		sprintf(opt[n++],"%-27.27s%.40s","Operator Requirements"
-            ,dir[i]->op_ar);
-		sprintf(opt[n++],"%-27.27s%.40s","Exemption Requirements"
-			,dir[i]->ex_ar);
-		sprintf(opt[n++],"%-27.27s%.40s","Transfer File Path"
-			,dir[i]->path);
-		sprintf(opt[n++],"%-27.27s%u","Maximum Number of Files"
-			,dir[i]->maxfiles);
-		if(dir[i]->maxage)
-			sprintf(str,"Enabled (%u days old)",dir[i]->maxage);
-        else
-            strcpy(str,"Disabled");
-        sprintf(opt[n++],"%-27.27s%s","Purge by Age",str);
-		sprintf(opt[n++],"%-27.27s%u%%","Credit on Upload"
-			,dir[i]->up_pct);
-		sprintf(opt[n++],"%-27.27s%u%%","Credit on Download"
-			,dir[i]->dn_pct);
-		strcpy(opt[n++],"Toggle Options...");
-		strcpy(opt[n++],"Advanced Options...");
-		opt[n][0]=0;
-		sprintf(str,"%s Directory",dir[i]->sname);
-		SETHELP(WHERE);
-/*
-Directory Configuration:
-
-This menu allows you to configure the individual selected directory.
-Options with a trailing ... provide a sub-menu of more options.
-*/
-		savnum=1;
-		switch(ulist(WIN_SAV|WIN_ACT|WIN_RHT|WIN_BOT
-			,0,0,60,&opt_dflt,0,str,opt)) {
-			case -1:
-				done=1;
-				break;
-			case 0:
-				SETHELP(WHERE);
-/*
-Directory Long Name:
-
-This is a description of the file directory which is displayed in all
-directory listings.
-*/
-				strcpy(str,dir[i]->lname);	/* save */
-				if(!uinput(WIN_L2R|WIN_SAV,0,17,"Name to use for Listings"
-					,dir[i]->lname,LEN_SLNAME,K_EDIT))
-					strcpy(dir[i]->lname,str);
-				break;
-			case 1:
-				SETHELP(WHERE);
-/*
-Directory Short Name:
-
-This is a short description of the file directory which is displayed at
-the file transfer prompt.
-*/
-				uinput(WIN_L2R|WIN_SAV,0,17,"Name to use for Prompts"
-					,dir[i]->sname,LEN_SSNAME,K_EDIT);
-				break;
-			case 2:
-                SETHELP(WHERE);
-/*
-Directory Internal Code:
-
-Every directory must have its own unique code for Synchronet to refer to
-it internally. This code should be descriptive of the directory's
-contents, usually an abreviation of the directory's name.
-*/
-                strcpy(str,dir[i]->code);
-                uinput(WIN_L2R|WIN_SAV,0,17,"Internal Code (unique)"
-                    ,str,8,K_EDIT|K_UPPER);
-                if(code_ok(str))
-                    strcpy(dir[i]->code,str);
-                else {
-                    helpbuf=invalid_code;
-                    umsg("Invalid Code");
-                    helpbuf=0; }
-                break;
-			case 3:
-				savnum=2;
-				sprintf(str,"%s Access",dir[i]->sname);
-				getar(str,dir[i]->ar);
-				break;
-			case 4:
-				savnum=2;
-				sprintf(str,"%s Upload",dir[i]->sname);
-				getar(str,dir[i]->ul_ar);
-				break;
-			case 5:
-				savnum=2;
-				sprintf(str,"%s Download",dir[i]->sname);
-				getar(str,dir[i]->dl_ar);
-				break;
-			case 6:
-				savnum=2;
-				sprintf(str,"%s Operator",dir[i]->sname);
-				getar(str,dir[i]->op_ar);
-                break;
-			case 7:
-				savnum=2;
-				sprintf(str,"%s Exemption",dir[i]->sname);
-				getar(str,dir[i]->ex_ar);
-                break;
-			case 8:
-				SETHELP(WHERE);
-/*
-File Path:
-
-This is the default storage path for files uploaded to this directory.
-If this path is blank, files are stored in a directory off of the
-DATA\DIRS directory using the internal code of this directory as the
-name of the dirdirectory (i.e. DATA\DIRS\<CODE>).
-
-This path can be overridden on a per file basis using Alternate File
-Paths.
-*/
-				uinput(WIN_L2R|WIN_SAV,0,17,"File Path"
-					,dir[i]->path,50,K_EDIT|K_UPPER);
-				break;
-			case 9:
-				SETHELP(WHERE);
-/*
-Maximum Number of Files:
-
-This value is the maximum number of files allowed in this directory.
-*/
-				sprintf(str,"%u",dir[i]->maxfiles);
-				uinput(WIN_L2R|WIN_SAV,0,17,"Maximum Number of Files"
-					,str,5,K_EDIT|K_NUMBER);
-				n=atoi(str);
-				if(n>MAX_FILES) {
-					sprintf(str,"Maximum Files is %u",MAX_FILES);
-					umsg(str); }
-				else
-					dir[i]->maxfiles=n;
-				break;
-			case 10:
-				sprintf(str,"%u",dir[i]->maxage);
-                SETHELP(WHERE);
-/*
-Maximum Age of Files:
-
-This value is the maximum number of days that files will be kept in
-the directory based on the date the file was uploaded or last
-downloaded (If the Purge by Last Download toggle option is used).
-
-The Synchronet file base maintenance program (DELFILES) must be used
-to automatically remove files based on age.
-*/
-				uinput(WIN_MID|WIN_SAV,0,17,"Maximum Age of Files (in days)"
-                    ,str,5,K_EDIT|K_NUMBER);
-				dir[i]->maxage=atoi(str);
-                break;
-			case 11:
-SETHELP(WHERE);
-/*
-Percentage of Credits to Credit Uploader on Upload:
-
-This is the percentage of a file's credit value that is given to users
-when they upload files. Most often, this value will be set to 100 to
-give full credit value (100%) for uploads.
-
-If you want uploaders to receive no credits upon upload, set this value
-to 0.
-*/
-				uinput(WIN_MID|WIN_SAV,0,0
-					,"Percentage of Credits to Credit Uploader on Upload"
-					,itoa(dir[i]->up_pct,tmp,10),4,K_EDIT|K_NUMBER);
-				dir[i]->up_pct=atoi(tmp);
-				break;
-			case 12:
-SETHELP(WHERE);
-/*
-Percentage of Credits to Credit Uploader on Download:
-
-This is the percentage of a file's credit value that is given to users
-who upload a file that is later downloaded by another user. This is an
-award type system where more popular files will generate more credits
-for the uploader.
-
-If you do not want uploaders to receive credit when files they upload
-are later downloaded, set this value to 0.
-*/
-				uinput(WIN_MID|WIN_SAV,0,0
-					,"Percentage of Credits to Credit Uploader on Download"
-					,itoa(dir[i]->dn_pct,tmp,10),4,K_EDIT|K_NUMBER);
-				dir[i]->dn_pct=atoi(tmp);
-				break;
-			case 13:
-				while(1) {
-					n=0;
-					sprintf(opt[n++],"%-27.27s%s","Check for File Existence"
-						,dir[i]->misc&DIR_FCHK ? "Yes":"No");
-					strcpy(str,"Slow Media Device");
-					if(dir[i]->seqdev) {
-						sprintf(tmp," #%u",dir[i]->seqdev);
-						strcat(str,tmp); }
-					sprintf(opt[n++],"%-27.27s%s",str
-						,dir[i]->seqdev ? "Yes":"No");
-					sprintf(opt[n++],"%-27.27s%s","Force Content Ratings"
-						,dir[i]->misc&DIR_RATE ? "Yes":"No");
-					sprintf(opt[n++],"%-27.27s%s","Upload Date in Listings"
-						,dir[i]->misc&DIR_ULDATE ? "Yes":"No");
-					sprintf(opt[n++],"%-27.27s%s","Multiple File Numberings"
-						,dir[i]->misc&DIR_MULT ? "Yes":"No");
-					sprintf(opt[n++],"%-27.27s%s","Search for Duplicates"
-						,dir[i]->misc&DIR_DUPES ? "Yes":"No");
-					sprintf(opt[n++],"%-27.27s%s","Search for New Files"
-						,dir[i]->misc&DIR_NOSCAN ? "No":"Yes");
-					sprintf(opt[n++],"%-27.27s%s","Search for Auto-ADDFILES"
-						,dir[i]->misc&DIR_NOAUTO ? "No":"Yes");
-					sprintf(opt[n++],"%-27.27s%s","Import FILE_ID.DIZ"
-						,dir[i]->misc&DIR_DIZ ? "Yes":"No");
-					sprintf(opt[n++],"%-27.27s%s","Free Downloads"
-						,dir[i]->misc&DIR_FREE ? "Yes":"No");
-					sprintf(opt[n++],"%-27.27s%s","Free Download Time"
-						,dir[i]->misc&DIR_TFREE ? "Yes":"No");
-					sprintf(opt[n++],"%-27.27s%s","Deduct Upload Time"
-						,dir[i]->misc&DIR_ULTIME ? "Yes":"No");
-					sprintf(opt[n++],"%-27.27s%s","Credit Uploads"
-						,dir[i]->misc&DIR_CDTUL ? "Yes":"No");
-					sprintf(opt[n++],"%-27.27s%s","Credit Downloads"
-						,dir[i]->misc&DIR_CDTDL ? "Yes":"No");
-					sprintf(opt[n++],"%-27.27s%s","Credit with Minutes"
-						,dir[i]->misc&DIR_CDTMIN ? "Yes":"No");
-					sprintf(opt[n++],"%-27.27s%s","Anonymous Uploads"
-						,dir[i]->misc&DIR_ANON ? dir[i]->misc&DIR_AONLY
-						? "Only":"Yes":"No");
-					sprintf(opt[n++],"%-27.27s%s","Purge by Last Download"
-						,dir[i]->misc&DIR_SINCEDL ? "Yes":"No");
-					sprintf(opt[n++],"%-27.27s%s","Mark Moved Files as New"
-						,dir[i]->misc&DIR_MOVENEW ? "Yes":"No");
-					opt[n][0]=0;
-					savnum=2;
-					SETHELP(WHERE);
-/*
-Directory Toggle Options:
-
-This is the toggle options menu for the selected file directory.
-
-The available options from this menu can all be toggled between two or
-more states, such as Yes and No.
-*/
-					n=ulist(WIN_ACT|WIN_SAV|WIN_RHT|WIN_BOT,3,2,36,&tog_dflt
-						,&tog_bar,"Toggle Options",opt);
-					if(n==-1)
-                        break;
-					savnum=3;
-					switch(n) {
-						case 0:
-							n=0;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							opt[2][0]=0;
-							SETHELP(WHERE);
-/*
-Check for File Existence When Listing:
-
-If you want the actual existence of files to be verified while listing
-directories, set this value to Yes.
-
-Directories with files located on CD-ROM or other slow media should have
-this option set to No.
-*/
-							n=ulist(WIN_MID|WIN_SAV,0,0,0,&n,0
-								,"Check for File Existence When Listing",opt);
-							if(n==0 && !(dir[i]->misc&DIR_FCHK)) {
-								dir[i]->misc|=DIR_FCHK;
-								changes=1; }
-							else if(n==1 && (dir[i]->misc&DIR_FCHK)) {
-								dir[i]->misc&=~DIR_FCHK;
-								changes=1; }
-							break;
-						case 1:
-                            n=0;
-                            strcpy(opt[0],"Yes");
-                            strcpy(opt[1],"No");
-                            opt[2][0]=0;
-							SETHELP(WHERE);
-/*
-Slow Media Device:
-
-If this directory contains files located on CD-ROM or other slow media
-device, you should set this option to Yes. Each slow media device on
-your system should have a unique Device Number. If you only have one
-slow media device, then this number should be set to 1.
-
-CD-ROM multidisk changers are considered one device and all the
-directories on all the CD-ROMs in each changer should be set to the same
-device number.
-*/
-							n=ulist(WIN_MID|WIN_SAV,0,0,0,&n,0
-								,"Slow Media Device"
-								,opt);
-							if(n==0) {
-								if(!dir[i]->seqdev) {
-									changes=1;
-									strcpy(str,"1"); }
-								else
-									sprintf(str,"%u",dir[i]->seqdev);
-								uinput(WIN_MID|WIN_SAV,0,0
-									,"Device Number"
-									,str,2,K_EDIT|K_UPPER);
-								dir[i]->seqdev=atoi(str); }
-							else if(n==1 && dir[i]->seqdev) {
-								dir[i]->seqdev=0;
-                                changes=1; }
-                            break;
-						case 2:
-							n=1;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							opt[2][0]=0;
-							SETHELP(WHERE);
-/*
-Force Content Ratings in Descriptions:
-
-If you would like all uploads to this directory to be prompted for
-content rating (G, R, or X), set this value to Yes.
-*/
-							n=ulist(WIN_MID|WIN_SAV,0,0,0,&n,0
-								,"Force Content Ratings in Descriptions",opt);
-							if(n==0 && !(dir[i]->misc&DIR_RATE)) {
-								dir[i]->misc|=DIR_RATE;
-								changes=1; }
-							else if(n==1 && (dir[i]->misc&DIR_RATE)) {
-								dir[i]->misc&=~DIR_RATE;
-								changes=1; }
-							break;
-						case 3:
-							n=1;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							opt[2][0]=0;
-							SETHELP(WHERE);
-/*
-Include Upload Date in File Descriptions:
-
-If you wish the upload date of each file in this directory to be
-automatically included in the file description, set this option to
-Yes.
-*/
-							n=ulist(WIN_MID|WIN_SAV,0,0,0,&n,0
-								,"Include Upload Date in Descriptions",opt);
-							if(n==0 && !(dir[i]->misc&DIR_ULDATE)) {
-								dir[i]->misc|=DIR_ULDATE;
-								changes=1; }
-							else if(n==1 && (dir[i]->misc&DIR_ULDATE)) {
-								dir[i]->misc&=~DIR_ULDATE;
-								changes=1; }
-                            break;
-						case 4:
-							n=0;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							opt[2][0]=0;
-							SETHELP(WHERE);
-/*
-Ask for Multiple File Numberings:
-
-If you would like uploads to this directory to be prompted for multiple
-file (disk) numbers, set this value to Yes.
-*/
-							n=ulist(WIN_MID|WIN_SAV,0,0,0,&n,0
-								,"Ask for Multiple File Numberings",opt);
-							if(n==0 && !(dir[i]->misc&DIR_MULT)) {
-								dir[i]->misc|=DIR_MULT;
-								changes=1; }
-							else if(n==1 && (dir[i]->misc&DIR_MULT)) {
-								dir[i]->misc&=~DIR_MULT;
-								changes=1; }
-							break;
-						case 5:
-							n=0;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							opt[2][0]=0;
-							SETHELP(WHERE);
-/*
-Search Directory for Duplicate Filenames:
-
-If you would like to have this directory searched for duplicate
-filenames when a user attempts to upload a file, set this option to Yes.
-*/
-							n=ulist(WIN_MID|WIN_SAV,0,0,0,&n,0
-								,"Search for Duplicate Filenames",opt);
-							if(n==0 && !(dir[i]->misc&DIR_DUPES)) {
-								dir[i]->misc|=DIR_DUPES;
-								changes=1; }
-							else if(n==1 && (dir[i]->misc&DIR_DUPES)) {
-								dir[i]->misc&=~DIR_DUPES;
-								changes=1; }
-							break;
-						case 6:
-							n=0;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							opt[2][0]=0;
-							SETHELP(WHERE);
-/*
-Search Directory for New Files:
-
-If you would like to have this directory searched for newly uploaded
-files when a user scans All libraries for new files, set this option to
-Yes.
-
-If this directory is located on CD-ROM or other read only media
-(where uploads are unlikely to occur), it will improve new file scans
-if this option is set to No.
-*/
-							n=ulist(WIN_MID|WIN_SAV,0,0,0,&n,0
-								,"Search for New files",opt);
-							if(n==0 && dir[i]->misc&DIR_NOSCAN) {
-								dir[i]->misc&=~DIR_NOSCAN;
-								changes=1; }
-							else if(n==1 && !(dir[i]->misc&DIR_NOSCAN)) {
-								dir[i]->misc|=DIR_NOSCAN;
-								changes=1; }
-                            break;
-						case 7:
-							n=0;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							opt[2][0]=0;
-							SETHELP(WHERE);
-/*
-Search Directory for Auto-ADDFILES:
-
-If you would like to have this directory searched for a file list to
-import automatically when using the ADDFILES * (Auto-ADD) feature,
-set this option to Yes.
-*/
-							n=ulist(WIN_MID|WIN_SAV,0,0,0,&n,0
-								,"Search for Auto-ADDFILES",opt);
-							if(n==0 && dir[i]->misc&DIR_NOAUTO) {
-								dir[i]->misc&=~DIR_NOAUTO;
-								changes=1; }
-							else if(n==1 && !(dir[i]->misc&DIR_NOAUTO)) {
-								dir[i]->misc|=DIR_NOAUTO;
-								changes=1; }
-                            break;
-						case 8:
-							n=0;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							opt[2][0]=0;
-							SETHELP(WHERE);
-/*
-Import FILE_ID.DIZ and DESC.SDI Descriptions:
-
-If you would like archived descriptions (FILE_ID.DIZ and DESC.SDI)
-of uploaded files to be automatically imported as the extended
-description, set this option to Yes.
-*/
-							n=ulist(WIN_MID|WIN_SAV,0,0,0,&n,0
-								,"Import FILE_ID.DIZ and DESC.SDI",opt);
-							if(n==0 && !(dir[i]->misc&DIR_DIZ)) {
-								dir[i]->misc|=DIR_DIZ;
-								changes=1; }
-							else if(n==1 && (dir[i]->misc&DIR_DIZ)) {
-								dir[i]->misc&=~DIR_DIZ;
-								changes=1; }
-                            break;
-						case 9:
-							n=1;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							opt[2][0]=0;
-							SETHELP(WHERE);
-/*
-Downloads are Free:
-
-If you would like all downloads from this directory to be free (cost
-no credits), set this option to Yes.
-*/
-							n=ulist(WIN_MID|WIN_SAV,0,0,0,&n,0
-								,"Downloads are Free",opt);
-							if(n==0 && !(dir[i]->misc&DIR_FREE)) {
-								dir[i]->misc|=DIR_FREE;
-								changes=1; }
-							else if(n==1 && (dir[i]->misc&DIR_FREE)) {
-								dir[i]->misc&=~DIR_FREE;
-								changes=1; }
-                            break;
-						case 10:
-							n=1;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							opt[2][0]=0;
-							SETHELP(WHERE);
-/*
-Free Download Time:
-
-If you would like all downloads from this directory to not subtract
-time from the user, set this option to Yes.
-*/
-							n=ulist(WIN_MID|WIN_SAV,0,0,0,&n,0
-								,"Free Download Time",opt);
-							if(n==0 && !(dir[i]->misc&DIR_TFREE)) {
-								dir[i]->misc|=DIR_TFREE;
-								changes=1; }
-							else if(n==1 && (dir[i]->misc&DIR_TFREE)) {
-								dir[i]->misc&=~DIR_TFREE;
-								changes=1; }
-                            break;
-						case 11:
-							n=1;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							opt[2][0]=0;
-							SETHELP(WHERE);
-/*
-Deduct Upload Time:
-
-If you would like all uploads to this directory to have the time spent
-uploading subtracted from their time online, set this option to Yes.
-*/
-							n=ulist(WIN_MID|WIN_SAV,0,0,0,&n,0
-								,"Deduct Upload Time",opt);
-							if(n==0 && !(dir[i]->misc&DIR_ULTIME)) {
-								dir[i]->misc|=DIR_ULTIME;
-								changes=1; }
-							else if(n==1 && (dir[i]->misc&DIR_ULTIME)) {
-								dir[i]->misc&=~DIR_ULTIME;
-								changes=1; }
-                            break;
-						case 12:
-							n=0;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							opt[2][0]=0;
-							SETHELP(WHERE);
-/*
-Give Credit for Uploads:
-
-If you want users who upload to this directory to get credit for their
-initial upload, set this option to Yes.
-*/
-							n=ulist(WIN_MID|WIN_SAV,0,0,0,&n,0
-								,"Give Credit for Uploads",opt);
-							if(n==0 && !(dir[i]->misc&DIR_CDTUL)) {
-								dir[i]->misc|=DIR_CDTUL;
-								changes=1; }
-							else if(n==1 && (dir[i]->misc&DIR_CDTUL)) {
-								dir[i]->misc&=~DIR_CDTUL;
-								changes=1; }
-                            break;
-						case 13:
-							n=0;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							opt[2][0]=0;
-							SETHELP(WHERE);
-/*
-Give Uploader Credit for Downloads:
-
-If you want users who upload to this directory to get credit when their
-files are downloaded, set this optin to Yes.
-*/
-							n=ulist(WIN_MID|WIN_SAV,0,0,0,&n,0
-								,"Give Uploader Credit for Downloads",opt);
-							if(n==0 && !(dir[i]->misc&DIR_CDTDL)) {
-								dir[i]->misc|=DIR_CDTDL;
-								changes=1; }
-							else if(n==1 && (dir[i]->misc&DIR_CDTDL)) {
-								dir[i]->misc&=~DIR_CDTDL;
-								changes=1; }
-                            break;
-						case 14:
-							n=1;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							opt[2][0]=0;
-							SETHELP(WHERE);
-/*
-Credit Uploader with Minutes instead of Credits:
-
-If you wish to give the uploader of files to this directory minutes,
-intead of credits, set this option to Yes.
-*/
-							n=ulist(WIN_MID|WIN_SAV,0,0,0,&n,0
-								,"Credit Uploader with Minutes",opt);
-							if(n==0 && !(dir[i]->misc&DIR_CDTMIN)) {
-								dir[i]->misc|=DIR_CDTMIN;
-								changes=1; }
-							else if(n==1 && dir[i]->misc&DIR_CDTMIN){
-								dir[i]->misc&=~DIR_CDTMIN;
-								changes=1; }
-                            break;
-
-						case 15:
-							n=1;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							strcpy(opt[2],"Only");
-							opt[3][0]=0;
-							SETHELP(WHERE);
-/*
-Allow Anonymous Uploads:
-
-If you want users with the A exemption to be able to upload anonymously
-to this directory, set this option to Yes. If you want all uploads to
-this directory to be forced anonymous, set this option to Only.
-*/
-							n=ulist(WIN_MID|WIN_SAV,0,0,0,&n,0
-								,"Allow Anonymous Uploads",opt);
-							if(n==0 && (dir[i]->misc&(DIR_ANON|DIR_AONLY))
-								!=DIR_ANON) {
-								dir[i]->misc|=DIR_ANON;
-								dir[i]->misc&=~DIR_AONLY;
-								changes=1; }
-							else if(n==1 && dir[i]->misc&(DIR_ANON|DIR_AONLY)){
-								dir[i]->misc&=~(DIR_ANON|DIR_AONLY);
-								changes=1; }
-							else if(n==2 && (dir[i]->misc&(DIR_ANON|DIR_AONLY))
-								!=(DIR_ANON|DIR_AONLY)) {
-								dir[i]->misc|=(DIR_ANON|DIR_AONLY);
-								changes=1; }
-							break;
-						case 16:
-                            n=0;
-                            strcpy(opt[0],"Yes");
-                            strcpy(opt[1],"No");
-                            opt[2][0]=0;
-                            SETHELP(WHERE);
-/*
-Purge Files Based on Date of Last Download:
-
-Using the Synchronet file base maintenance utility (DELFILES), you can
-have files removed based on the number of days since last downloaded
-rather than the number of days since the file was uploaded (default),
-by setting this option to Yes.
-*/
-                            n=ulist(WIN_MID|WIN_SAV,0,0,0,&n,0
-								,"Purge Files Based on Date of Last Download"
-                                ,opt);
-							if(n==0 && !(dir[i]->misc&DIR_SINCEDL)) {
-								dir[i]->misc|=DIR_SINCEDL;
-                                changes=1; }
-							else if(n==1 && (dir[i]->misc&DIR_SINCEDL)) {
-								dir[i]->misc&=~DIR_SINCEDL;
-                                changes=1; }
-                            break;
-						case 17:
-                            n=0;
-                            strcpy(opt[0],"Yes");
-                            strcpy(opt[1],"No");
-                            opt[2][0]=0;
-                            SETHELP(WHERE);
-/*
-Mark Moved Files as New:
-
-If this option is set to Yes, then all files moved from this directory
-will have their upload date changed to the current date so the file will
-appear in users' new-file scans again.
-*/
-                            n=ulist(WIN_MID|WIN_SAV,0,0,0,&n,0
-								,"Mark Moved Files as New"
-                                ,opt);
-							if(n==0 && !(dir[i]->misc&DIR_MOVENEW)) {
-								dir[i]->misc|=DIR_MOVENEW;
-                                changes=1; }
-							else if(n==1 && (dir[i]->misc&DIR_MOVENEW)) {
-								dir[i]->misc&=~DIR_MOVENEW;
-                                changes=1; }
-                            break;
-							} }
-				break;
-		case 14:
-			while(1) {
-				n=0;
-				sprintf(opt[n++],"%-27.27s%s","Extensions Allowed"
-					,dir[i]->exts);
-				if(!dir[i]->data_dir[0])
-					sprintf(str,"%sDIRS\\",data_dir);
-				else
-					strcpy(str,dir[i]->data_dir);
-				sprintf(opt[n++],"%-27.27s%.40s","Data Directory"
-					,str);
-				sprintf(opt[n++],"%-27.27s%.40s","Upload Semaphore File"
-                    ,dir[i]->upload_sem);
-				sprintf(opt[n++],"%-27.27s%s","Sort Value and Direction"
-					, dir[i]->sort==SORT_NAME_A ? "Name Ascending"
-					: dir[i]->sort==SORT_NAME_D ? "Name Descending"
-					: dir[i]->sort==SORT_DATE_A ? "Date Ascending"
-					: "Date Descending");
-				opt[n][0]=0;
-				savnum=2;
-				SETHELP(WHERE);
-/*
-Directory Advanced Options:
-
-This is the advanced options menu for the selected file directory.
-*/
-					n=ulist(WIN_ACT|WIN_SAV|WIN_RHT|WIN_BOT,3,4,60,&adv_dflt,0
-						,"Advanced Options",opt);
-					if(n==-1)
-                        break;
-					savnum=3;
-                    switch(n) {
-						case 0:
-							SETHELP(WHERE);
-/*
-File Extensions Allowed:
-
-This option allows you to limit the types of files uploaded to this
-directory. This is a list of file extensions that are allowed, each
-separated by a comma (Example: ZIP,EXE). If this option is left
-blank, all file extensions will be allowed to be uploaded.
-*/
-							uinput(WIN_L2R|WIN_SAV,0,17
-								,"File Extensions Allowed"
-								,dir[i]->exts,40,K_EDIT|K_UPPER);
-							break;
-						case 1:
-SETHELP(WHERE);
-/*
-Data Directory:
-
-Use this if you wish to place the data directory for this directory
-on another drive or in another directory besides the default setting.
-*/
-							uinput(WIN_MID|WIN_SAV,0,17,"Data"
-								,dir[i]->data_dir,50,K_EDIT|K_UPPER);
-							break;
-						case 2:
-SETHELP(WHERE);
-/*
-Upload Semaphore File:
-
-This is a filename that will be used as a semaphore (signal) to your
-FidoNet front-end that new files are ready to be hatched for export.
-*/
-							uinput(WIN_MID|WIN_SAV,0,17,"Upload Semaphore"
-								,dir[i]->upload_sem,50,K_EDIT|K_UPPER);
-							break;
-						case 3:
-							n=0;
-							strcpy(opt[0],"Name Ascending");
-							strcpy(opt[1],"Name Descending");
-							strcpy(opt[2],"Date Ascending");
-							strcpy(opt[3],"Date Descending");
-							opt[4][0]=0;
-							SETHELP(WHERE);
-/*
-Sort Value and Direction:
-
-This option allows you to determine the sort value and direction. Files
-that are uploaded are automatically sorted by filename or upload date,
-ascending or descending. If you change the sort value or direction after
-a directory already has files in it, use the sysop transfer menu ;RESORT
-command to resort the directory with the new sort parameters.
-*/
-							n=ulist(WIN_MID|WIN_SAV,0,0,0,&n,0
-								,"Sort Value and Direction",opt);
-							if(n==0 && dir[i]->sort!=SORT_NAME_A) {
-								dir[i]->sort=SORT_NAME_A;
-								changes=1; }
-							else if(n==1 && dir[i]->sort!=SORT_NAME_D) {
-								dir[i]->sort=SORT_NAME_D;
-								changes=1; }
-							else if(n==2 && dir[i]->sort!=SORT_DATE_A) {
-								dir[i]->sort=SORT_DATE_A;
-								changes=1; }
-							else if(n==3 && dir[i]->sort!=SORT_DATE_D) {
-								dir[i]->sort=SORT_DATE_D;
-								changes=1; }
-							break; } }
-			break;
-			} } }
-
-}
diff --git a/src/sbbs2/scfg/scfgxtrn.c b/src/sbbs2/scfg/scfgxtrn.c
deleted file mode 100644
index 38561a964d..0000000000
--- a/src/sbbs2/scfg/scfgxtrn.c
+++ /dev/null
@@ -1,1798 +0,0 @@
-#line 2 "SCFGXTRN.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-extern char *wday[];
-
-char *daystr(char days);
-
-
-/****************************************************************************/
-/* Synchronet configuration utility 										*/
-/****************************************************************************/
-
-#include "scfg.h"
-
-void xprogs_cfg()
-{
-	static int xprogs_dflt;
-	int 	i;
-	char	str[81];
-
-while(1) {
-	i=0;
-	strcpy(opt[i++],"Fixed Events");
-	strcpy(opt[i++],"Timed Events");
-	strcpy(opt[i++],"Global Swap List");
-	strcpy(opt[i++],"OS/2 Program List");
-	strcpy(opt[i++],"External Editors");
-	strcpy(opt[i++],"Online Programs");
-	opt[i][0]=0;
-	SETHELP(WHERE);
-/*
-Online External Programs:
-
-From this menu, you can configure external events, external editors, or
-online external programs (doors).
-*/
-	switch(ulist(WIN_ORG|WIN_CHE|WIN_ACT,0,0,0,&xprogs_dflt,0
-		,"External Programs",opt)) {
-		case -1:
-			i=save_changes(WIN_MID);
-            if(i==-1)
-                break;
-			if(!i) {
-                write_xtrn_cfg();
-				write_main_cfg(); }
-			return;
-		case 0:
-			fevents_cfg();
-			break;
-		case 1:
-			tevents_cfg();
-			break;
-		case 2:
-			swap_cfg();
-			break;
-		case 3:
-			os2pgm_cfg();
-			break;
-		case 4:
-			xedit_cfg();
-			break;
-		case 5:
-			xtrnsec_cfg();
-			break; } }
-}
-
-void fevents_cfg()
-{
-	static int event_dflt;
-	char str[81],*p;
-	int i;
-
-while(1) {
-	i=0;
-	sprintf(opt[i++],"%-32.32s%.40s","Logon Event",sys_logon);
-	sprintf(opt[i++],"%-32.32s%.40s","Logout Event",sys_logout);
-	sprintf(opt[i++],"%-32.32s%.40s","Daily Event",sys_daily);
-	opt[i][0]=0;
-	savnum=0;
-	SETHELP(WHERE);
-/*
-External Events:
-
-From this menu, you can configure the logon and logout events, and the
-system daily event.
-*/
-	switch(ulist(WIN_ACT|WIN_SAV|WIN_CHE|WIN_BOT|WIN_RHT,0,0,60,&event_dflt,0
-		,"Fixed Events",opt)) {
-		case -1:
-			return;
-		case 0:
-			SETHELP(WHERE);
-/*
-Logon Event:
-
-This is the command line for a program that will execute during the
-logon sequence of every user. The program cannot have user interaction.
-The program will be executed after the LOGON message is displayed and
-before the logon user list is displayed. If you wish to place a program
-in the logon sequence of users that includes interaction or requires
-account information, you probably want to use an online external
-program configured to run as a logon event.
-*/
-			uinput(WIN_MID|WIN_SAV,0,0,"Logon Event"
-				,sys_logon,50,K_EDIT);
-			break;
-		case 1:
-			SETHELP(WHERE);
-/*
-Logout Event:
-
-This is the command line for a program that will execute during the
-logout sequence of every user. This program cannot have user
-interaction because it is executed after carrier is dropped. If you
-wish to have a program execute before carrier is dropped, you probably
-want to use an Online External Program configured to run as a logoff
-event.
-*/
-			uinput(WIN_MID|WIN_SAV,0,0,"Logout Event"
-				,sys_logout,50,K_EDIT);
-			break;
-		case 2:
-			SETHELP(WHERE);
-/*
-Daily Event:
-
-This is the command line for a program that will run after the first
-user that logs on after midnight, logs off (regardless of what node).
-*/
-			uinput(WIN_MID|WIN_SAV,0,0,"Daily Event"
-				,sys_daily,50,K_EDIT);
-
-			break; } }
-}
-
-void tevents_cfg()
-{
-	static int dflt,dfltopt,bar;
-	char str[81],done=0,*p;
-	int j,k;
-	uint i;
-	static event_t savevent;
-
-while(1) {
-	for(i=0;i<total_events && i<MAX_OPTS;i++)
-		sprintf(opt[i],"%-8.8s      %.50s",event[i]->code,event[i]->cmd);
-	opt[i][0]=0;
-	j=WIN_SAV|WIN_ACT|WIN_CHE|WIN_RHT;
-	savnum=0;
-	if(total_events)
-		j|=WIN_DEL|WIN_GET;
-	if(total_events<MAX_OPTS)
-		j|=WIN_INS|WIN_INSACT;
-	if(savevent.code[0])
-		j|=WIN_PUT;
-	SETHELP(WHERE);
-/*
-Timed Events:
-
-This is a list of the configured timed external events.
-
-To add an event hit  INS .
-
-To delete an event, select it and hit  DEL .
-
-To configure an event, select it and hit  ENTER .
-*/
-	i=ulist(j,0,0,45,&dflt,&bar,"Timed Events",opt);
-	if((signed)i==-1)
-		return;
-	if((i&MSK_ON)==MSK_INS) {
-		i=total_events;
-		SETHELP(WHERE);
-/*
-Timed Event Internal Code:
-
-This is the internal code for the timed event.
-*/
-		if(uinput(WIN_MID|WIN_SAV,0,0,"Event Internal Code",str,8
-			,K_UPPER)<1)
-            continue;
-		if((event=(event_t **)REALLOC(event
-			,sizeof(event_t *)*(total_events+1)))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,nulstr,total_events+1);
-			total_events=0;
-			bail(1);
-            continue; }
-		if((event[i]=(event_t *)MALLOC(sizeof(event_t)))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(event_t));
-			continue; }
-		memset((event_t *)event[i],0,sizeof(event_t));
-		strcpy(event[i]->code,str);
-		event[i]->node=1;
-		event[i]->days=0xff;
-		total_events++;
-		changes=1;
-		continue; }
-	if((i&MSK_ON)==MSK_DEL) {
-		i&=MSK_OFF;
-		FREE(event[i]);
-		total_events--;
-		for(j=i;j<total_events;j++)
-			event[j]=event[j+1];
-		changes=1;
-		continue; }
-	if((i&MSK_ON)==MSK_GET) {
-		i&=MSK_OFF;
-		savevent=*event[i];
-		continue; }
-	if((i&MSK_ON)==MSK_PUT) {
-		i&=MSK_OFF;
-		*event[i]=savevent;
-		changes=1;
-        continue; }
-	done=0;
-	while(!done) {
-		k=0;
-		sprintf(opt[k++],"%-32.32s%s","Internal Code",event[i]->code);
-		sprintf(opt[k++],"%-32.32s%.40s","Start-up Directory",event[i]->dir);
-		sprintf(opt[k++],"%-32.32s%.40s","Command Line",event[i]->cmd);
-		sprintf(opt[k++],"%-32.32s%u","Execution Node",event[i]->node);
-		sprintf(opt[k++],"%-32.32s%s","Execution Days",daystr(event[i]->days));
-		sprintf(opt[k++],"%-32.32s%02u:%02u","Execution Time"
-			,event[i]->time/60,event[i]->time%60);
-		sprintf(opt[k++],"%-32.32s%s","Requires Exclusive Execution"
-			,event[i]->misc&EVENT_EXCL ? "Yes":"No");
-		sprintf(opt[k++],"%-32.32s%s","Force Users Off-line For Event"
-			,event[i]->misc&EVENT_FORCE ? "Yes":"No");
-		opt[k][0]=0;
-		SETHELP(WHERE);
-/*
-Timed Event:
-
-This is the configuration menu for a timed event. An event is an
-external program that performs some type of automated function on the
-system. Use this menu to configure how and when this event will be
-executed.
-
-If you need the BBS to swap out of memory for this event (to make more
-available memory), add the program name (first word of the command line)
-to Global Swap List from the External Programs menu.
-*/
-		savnum=1;
-		sprintf(str,"%s Timed Event",event[i]->code);
-		switch(ulist(WIN_SAV|WIN_ACT|WIN_L2R|WIN_BOT,0,0,70,&dfltopt,0
-			,str,opt)) {
-			case -1:
-				done=1;
-				break;
-			case 0:
-				strcpy(str,event[i]->code);
-				SETHELP(WHERE);
-/*
-Timed Event Internal Code:
-
-Every timed event must have its own unique internal code for Synchronet
-to reference it by. It is helpful if this code is an abreviation of the
-command line.
-*/
-				uinput(WIN_MID|WIN_SAV,0,17,"Internal Code (unique)"
-					,str,8,K_EDIT|K_UPPER);
-				if(code_ok(str))
-					strcpy(event[i]->code,str);
-				else {
-					helpbuf=invalid_code;
-					umsg("Invalid Code");
-					helpbuf=0; }
-                break;
-			case 1:
-				SETHELP(WHERE);
-/*
-Timed Event Start-up Directory:
-
-This is the DOS drive/directory where the event program is located.
-If a path is specified here, it will be made the current directory
-before the event's command line is executed. This eliminates the need
-for batch files that just change the current drive and directory before
-executing the event.
-
-If this option is not used, the current NODE's directory will be the
-current DOS drive/directory before the command line is executed.
-*/
-				uinput(WIN_MID|WIN_SAV,0,10,"Directory"
-					,event[i]->dir,50,K_EDIT|K_UPPER);
-                break;
-			case 2:
-				SETHELP(WHERE);
-/*
-Timed Event Command Line:
-
-This is the command line to execute upon this timed event.
-*/
-				uinput(WIN_MID|WIN_SAV,0,10,"Command"
-					,event[i]->cmd,50,K_EDIT);
-				break;
-			case 3:
-				SETHELP(WHERE);
-/*
-Timed Event Node:
-
-This is the node number to execute the timed event.
-*/
-				sprintf(str,"%u",event[i]->node);
-				uinput(WIN_MID|WIN_SAV,0,0,"Node Number"
-					,str,3,K_EDIT|K_NUMBER);
-				event[i]->node=atoi(str);
-				break;
-			case 4:
-				j=0;
-				while(1) {
-					for(k=0;k<7;k++)
-						sprintf(opt[k],"%s        %s"
-							,wday[k],(event[i]->days&(1<<k)) ? "Yes":"No");
-					opt[k][0]=0;
-					savnum=2;
-					SETHELP(WHERE);
-/*
-Days to Execute Event:
-
-These are the days of the week that this event will be executed.
-*/
-					k=ulist(WIN_MID|WIN_SAV,0,0,0,&j,0
-						,"Days to Execute Event",opt);
-					if(k==-1)
-						break;
-					event[i]->days^=(1<<k);
-					changes=1; }
-				break;
-			case 5:
-				sprintf(str,"%2.2d:%2.2d",event[i]->time/60
-					,event[i]->time%60);
-				SETHELP(WHERE);
-/*
-Time to Execute Event:
-
-This is the time (in 24 hour HH:MM format) to execute the event.
-*/
-				if(uinput(WIN_MID|WIN_SAV,0,0
-					,"Time to Execute Event (HH:MM)"
-					,str,5,K_UPPER|K_EDIT)>0) {
-					event[i]->time=atoi(str)*60;
-					if((p=strchr(str,':'))!=NULL)
-						event[i]->time+=atoi(p+1); }
-				break;
-			case 6:
-				k=1;
-				strcpy(opt[0],"Yes");
-				strcpy(opt[1],"No");
-				opt[2][0]=0;
-				savnum=2;
-				SETHELP(WHERE);
-/*
-Exclusive Event Execution:
-
-If this event must be run exclusively (all nodes inactive), set this
-option to Yes.
-*/
-				k=ulist(WIN_MID|WIN_SAV,0,0,0,&k,0,"Exclusive Execution"
-					,opt);
-				if(!k && !(event[i]->misc&EVENT_EXCL)) {
-					event[i]->misc|=EVENT_EXCL;
-					changes=1; }
-				else if(k==1 && event[i]->misc&EVENT_EXCL) {
-					event[i]->misc&=~EVENT_EXCL;
-					changes=1; }
-                break;
-			case 7:
-				k=1;
-				strcpy(opt[0],"Yes");
-				strcpy(opt[1],"No");
-				opt[2][0]=0;
-				savnum=2;
-				SETHELP(WHERE);
-/*
-Force Users Off-line for Event:
-
-If you want to have your users' on-line time reduced so the event can
-execute precisely on time, set this option to Yes.
-*/
-				k=ulist(WIN_MID|WIN_SAV,0,0,0,&k,0
-					,"Force Users Off-line for Event",opt);
-				if(!k && !(event[i]->misc&EVENT_FORCE)) {
-					event[i]->misc|=EVENT_FORCE;
-					changes=1; }
-				else if(k==1 && event[i]->misc&EVENT_FORCE) {
-					event[i]->misc&=~EVENT_FORCE;
-                    changes=1; }
-                break;
-
-				} } }
-}
-
-
-void xtrn_cfg(uint section)
-{
-	static int ext_dflt,ext_bar,opt_dflt,time_dflt;
-	char str[128],code[9],done=0,*p;
-	int j,k;
-	uint i,n,xtrnnum[MAX_OPTS+1];
-	static xtrn_t savxtrn;
-
-while(1) {
-	for(i=0,j=0;i<total_xtrns && j<MAX_OPTS;i++)
-		if(xtrn[i]->sec==section) {
-			sprintf(opt[j],"%-25s",xtrn[i]->name);
-			xtrnnum[j++]=i; }
-	xtrnnum[j]=total_xtrns;
-	opt[j][0]=0;
-	savnum=2;
-	i=WIN_ACT|WIN_CHE|WIN_SAV|WIN_RHT;
-	if(j)
-		i|=WIN_DEL|WIN_GET;
-	if(total_xtrns<MAX_OPTS)
-		i|=WIN_INS|WIN_INSACT|WIN_XTR;
-	if(savxtrn.name[0])
-		i|=WIN_PUT;
-	SETHELP(WHERE);
-/*
-Online External Programs:
-
-This is a list of the configured online external programs (doors).
-
-To add a program, select the desired location with the arrow keys and
-hit  INS .
-
-To delete a program, select it with the arrow keys and hit  DEL .
-
-To configure a program, select it with the arrow keys and hit  ENTER .
-*/
-	sprintf(str,"%s Online Programs",xtrnsec[section]->name);
-	i=ulist(i,0,0,45,&ext_dflt,&ext_bar,str,opt);
-	if((signed)i==-1)
-		return;
-	if((i&MSK_ON)==MSK_INS) {
-		i&=MSK_OFF;
-		SETHELP(WHERE);
-/*
-Online Program Name:
-
-This is the name or description of the online program (door).
-*/
-		if(uinput(WIN_MID|WIN_SAV,0,0,"Online Program Name",str,25
-			,0)<1)
-            continue;
-		sprintf(code,"%.8s",str);
-		p=strchr(code,SP);
-		if(p) *p=0;
-        strupr(code);
-		SETHELP(WHERE);
-/*
-Online Program Internal Code:
-
-Every online program must have its own unique code for Synchronet to
-refer to it internally. This code is usually an abreviation of the
-online program name.
-*/
-		if(uinput(WIN_MID|WIN_SAV,0,0,"Internal Code"
-			,code,8,K_EDIT|K_UPPER)<1)
-			continue;
-		if(!code_ok(code)) {
-			helpbuf=invalid_code;
-			umsg("Invalid Code");
-			helpbuf=0;
-            continue; }
-		if((xtrn=(xtrn_t **)REALLOC(xtrn,sizeof(xtrn_t *)*(total_xtrns+1)))
-            ==NULL) {
-            errormsg(WHERE,ERR_ALLOC,nulstr,total_xtrns+1);
-			total_xtrns=0;
-			bail(1);
-            continue; }
-		if(j)
-			for(n=total_xtrns;n>xtrnnum[i];n--)
-				xtrn[n]=xtrn[n-1];
-		if((xtrn[xtrnnum[i]]=(xtrn_t *)MALLOC(sizeof(xtrn_t)))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(xtrn_t));
-			continue; }
-		memset((xtrn_t *)xtrn[xtrnnum[i]],0,sizeof(xtrn_t));
-		strcpy(xtrn[xtrnnum[i]]->name,str);
-		strcpy(xtrn[xtrnnum[i]]->code,code);
-		xtrn[xtrnnum[i]]->sec=section;
-		total_xtrns++;
-		changes=1;
-		continue; }
-	if((i&MSK_ON)==MSK_DEL) {
-		i&=MSK_OFF;
-		FREE(xtrn[xtrnnum[i]]);
-		total_xtrns--;
-		for(j=xtrnnum[i];j<total_xtrns;j++)
-			xtrn[j]=xtrn[j+1];
-		changes=1;
-		continue; }
-	if((i&MSK_ON)==MSK_GET) {
-		i&=MSK_OFF;
-		savxtrn=*xtrn[xtrnnum[i]];
-		continue; }
-	if((i&MSK_ON)==MSK_PUT) {
-		i&=MSK_OFF;
-		*xtrn[xtrnnum[i]]=savxtrn;
-		xtrn[xtrnnum[i]]->sec=section;
-		changes=1;
-        continue; }
-	done=0;
-	i=xtrnnum[i];
-	while(!done) {
-		k=0;
-		sprintf(opt[k++],"%-27.27s%s","Name",xtrn[i]->name);
-		sprintf(opt[k++],"%-27.27s%s","Internal Code",xtrn[i]->code);
-		sprintf(opt[k++],"%-27.27s%.40s","Start-up Directory",xtrn[i]->path);
-		sprintf(opt[k++],"%-27.27s%.40s","Command Line",xtrn[i]->cmd);
-		sprintf(opt[k++],"%-27.27s%.40s","Clean-up Command Line",xtrn[i]->clean);
-		if(xtrn[i]->cost)
-			sprintf(str,"%lu credits",xtrn[i]->cost);
-		else
-			strcpy(str,"None");
-		sprintf(opt[k++],"%-27.27s%s","Execution Cost",str);
-		sprintf(opt[k++],"%-27.27s%.40s","Access Requirements",xtrn[i]->ar);
-		sprintf(opt[k++],"%-27.27s%.40s","Execution Requirements"
-			,xtrn[i]->run_ar);
-		sprintf(opt[k++],"%-27.27s%s","Multiple Concurrent Users"
-			,xtrn[i]->misc&MULTIUSER ? "Yes" : "No");
-		sprintf(opt[k++],"%-27.27s%s%s","Intercept I/O Interrupts"
-			,xtrn[i]->misc&IO_INTS ? "Yes" : "No"
-			,xtrn[i]->misc&WWIVCOLOR ? ", WWIV" : nulstr);
-		sprintf(opt[k++],"%-27.27s%s","Swap BBS out of Memory"
-			,xtrn[i]->misc&SWAP ? "Yes" : "No");
-		sprintf(opt[k++],"%-27.27s%s","Modify User Data"
-            ,xtrn[i]->misc&MODUSERDAT ? "Yes" : "No");
-		switch(xtrn[i]->event) {
-			case EVENT_LOGON:
-				strcpy(str,"Logon");
-				break;
-			case EVENT_LOGOFF:
-				strcpy(str,"Logoff");
-				break;
-			case EVENT_NEWUSER:
-				strcpy(str,"New User");
-				break;
-			case EVENT_BIRTHDAY:
-				strcpy(str,"Birthday");
-				break;
-			default:
-				strcpy(str,"No");
-				break; }
-		if(xtrn[i]->misc&EVENTONLY && xtrn[i]->event)
-			strcat(str,", Only");
-		sprintf(opt[k++],"%-27.27s%s","Execute on Event",str);
-		switch(xtrn[i]->type) {
-			case XTRN_SBBS:
-				sprintf(str,"%-15s %s","Synchronet","XTRN.DAT");
-				break;
-			case XTRN_WWIV:
-				sprintf(str,"%-15s %s","WWIV","CHAIN.TXT");
-				break;
-			case XTRN_GAP:
-				sprintf(str,"%-15s %s","GAP","DOOR.SYS");
-				break;
-			case XTRN_RBBS:
-				sprintf(str,"%-15s %s","RBBS/QuickBBS","DORINFO#.DEF");
-				break;
-			case XTRN_RBBS1:
-				sprintf(str,"%-15s %s","RBBS/QuickBBS","DORINFO1.DEF");
-                break;
-			case XTRN_WILDCAT:
-				sprintf(str,"%-15s %s","Wildcat","CALLINFO.BBS");
-				break;
-			case XTRN_PCBOARD:
-				sprintf(str,"%-15s %s","PCBoard","PCBOARD.SYS");
-				break;
-			case XTRN_SPITFIRE:
-				sprintf(str,"%-15s %s","SpitFire","SFDOORS.DAT");
-				break;
-			case XTRN_UTI:
-				sprintf(str,"%-15s %s","MegaMail","UTIDOOR.TXT");
-				break;
-			case XTRN_SR:
-				sprintf(str,"%-15s %s","Solar Realms","DOORFILE.SR");
-				break;
-			case XTRN_TRIBBS:
-				sprintf(str,"%-15s %s","TriBBS","TRIBBS.SYS");
-				break;
-			default:
-				strcpy(str,"None");
-				break; }
-		sprintf(opt[k++],"%-23.23s%-4s%s","BBS Drop File Type"
-			,xtrn[i]->misc&REALNAME ? "(R)":nulstr,str);
-		sprintf(opt[k++],"%-27.27s%s","Place Drop File In"
-			,xtrn[i]->misc&STARTUPDIR ? "Start-Up Directory":"Node Directory");
-		sprintf(opt[k++],"Time Options...");
-		opt[k][0]=0;
-		savnum=3;
-		SETHELP(WHERE);
-/*
-Online Program Configuration:
-
-This menu is for configuring the selected online program.
-*/
-		switch(ulist(WIN_SAV|WIN_ACT|WIN_MID,0,0,60,&opt_dflt,0,xtrn[i]->name
-			,opt)) {
-			case -1:
-				done=1;
-				break;
-			case 0:
-				SETHELP(WHERE);
-/*
-Online Program Name:
-
-This is the name or description of the online program (door).
-*/
-				strcpy(str,xtrn[i]->name);
-				if(!uinput(WIN_MID|WIN_SAV,0,10,"Online Program Name"
-					,xtrn[i]->name,25,K_EDIT))
-					strcpy(xtrn[i]->name,str);
-				break;
-			case 1:
-				SETHELP(WHERE);
-/*
-Online Program Internal Code:
-
-Every online program must have its own unique code for Synchronet to
-refer to it internally. This code is usually an abreviation of the
-online program name.
-*/
-				strcpy(str,xtrn[i]->code);
-				uinput(WIN_MID|WIN_SAV,0,10,"Internal Code"
-					,str,8,K_UPPER|K_EDIT);
-				if(code_ok(str))
-					strcpy(xtrn[i]->code,str);
-				else {
-					helpbuf=invalid_code;
-					umsg("Invalid Code");
-                    helpbuf=0; }
-                break;
-			case 2:
-                SETHELP(WHERE);
-/*
-Online Program Start-up Directory:
-
-This is the DOS drive/directory where the online program is located.
-If a path is specified here, it will be made the current directory
-before the program's command line is executed. This eliminates the need
-for batch files that just change the current drive and directory before
-executing the program.
-
-If this option is not used, the current NODE's directory will be the
-current DOS drive/directory before the command line is executed.
-*/
-				uinput(WIN_MID|WIN_SAV,0,10,"Directory"
-					,xtrn[i]->path,50,K_EDIT|K_UPPER);
-                break;
-			case 3:
-				SETHELP(WHERE);
-/*
-Online Program Command Line:
-
-This is the command line to execute to run the online program.
-*/
-				uinput(WIN_MID|WIN_SAV,0,10,"Command"
-					,xtrn[i]->cmd,50,K_EDIT);
-				break;
-			case 4:
-				SETHELP(WHERE);
-/*
-Online Program Clean-up Command:
-
-This is the command line to execute after the main command line. This
-option is usually only used for multiuser online programs.
-*/
-				uinput(WIN_MID|WIN_SAV,0,10,"Clean-up"
-					,xtrn[i]->clean,50,K_EDIT);
-                break;
-			case 5:
-                ultoa(xtrn[i]->cost,str,10);
-                SETHELP(WHERE);
-/*
-Online Program Cost to Run:
-
-If you want users to be charged credits to run this online program,
-set this value to the number of credits to charge. If you want this
-online program to be free, set this value to 0.
-*/
-                uinput(WIN_MID|WIN_SAV,0,0,"Cost to Run (in Credits)"
-                    ,str,10,K_EDIT|K_NUMBER);
-                xtrn[i]->cost=atol(str);
-                break;
-			case 6:
-				savnum=4;
-				sprintf(str,"%s Access",xtrn[i]->name);
-				getar(str,xtrn[i]->ar);
-                break;
-			case 7:
-				savnum=4;
-				sprintf(str,"%s Execution",xtrn[i]->name);
-				getar(str,xtrn[i]->run_ar);
-                break;
-			case 8:
-				k=1;
-				strcpy(opt[0],"Yes");
-				strcpy(opt[1],"No");
-				opt[2][0]=0;
-				SETHELP(WHERE);
-/*
-Supports Multiple Users:
-
-If this online program supports multiple simultaneous users (nodes),
-set this option to Yes.
-*/
-				savnum=4;
-				k=ulist(WIN_MID|WIN_SAV,0,0,0,&k,0,"Supports Multiple Users"
-					,opt);
-				if(!k && !(xtrn[i]->misc&MULTIUSER)) {
-					xtrn[i]->misc|=MULTIUSER;
-					changes=1; }
-				else if(k==1 && xtrn[i]->misc&MULTIUSER) {
-					xtrn[i]->misc&=~MULTIUSER;
-					changes=1; }
-                break;
-			case 9:
-				k=1;
-				strcpy(opt[0],"Yes");
-				strcpy(opt[1],"No");
-				opt[2][0]=0;
-				SETHELP(WHERE);
-/*
-Intercept I/O Interrupts:
-
-If this online program has its own serial communication abilities, set
-this option to No.
-*/
-				savnum=4;
-				k=ulist(WIN_MID|WIN_SAV,0,0,0,&k,0,"Intercept I/O Interrupts"
-					,opt);
-				if(!k && !(xtrn[i]->misc&IO_INTS)) {
-					xtrn[i]->misc|=IO_INTS;
-					changes=1; }
-				else if(k==1 && xtrn[i]->misc&IO_INTS) {
-					xtrn[i]->misc&=~(IO_INTS|WWIVCOLOR);
-					changes=1; }
-				if(!(xtrn[i]->misc&IO_INTS))
-					break;
-				k=1;
-				strcpy(opt[0],"Yes");
-				strcpy(opt[1],"No");
-				opt[2][0]=0;
-				SETHELP(WHERE);
-/*
-Program Uses WWIV Color Codes:
-
-If this program was written for use exclusively under WWIV, set this
-option to Yes.
-*/
-				savnum=4;
-				k=ulist(WIN_MID|WIN_SAV,0,0,0,&k,0
-					,"Program Uses WWIV Color Codes"
-					,opt);
-				if(!k && !(xtrn[i]->misc&WWIVCOLOR)) {
-					xtrn[i]->misc|=WWIVCOLOR;
-					changes=1; }
-				else if(k==1 && xtrn[i]->misc&WWIVCOLOR) {
-					xtrn[i]->misc&=~WWIVCOLOR;
-                    changes=1; }
-                break;
-			case 10:
-				k=0;
-				strcpy(opt[0],"Yes");
-				strcpy(opt[1],"No");
-				opt[2][0]=0;
-				SETHELP(WHERE);
-/*
-Swap BBS out of Memory to Run Executable:
-
-If this online programs requires a large amount of free memory,
-set this option to Yes to have the BBS swapped out of memory.
-*/
-				savnum=4;
-				k=ulist(WIN_MID|WIN_SAV,0,0,0,&k,0
-					,"Swap BBS out of Memory",opt);
-				if(!k && !(xtrn[i]->misc&SWAP)) {
-					xtrn[i]->misc|=SWAP;
-					changes=1; }
-				else if(k==1 && xtrn[i]->misc&SWAP) {
-					xtrn[i]->misc&=~SWAP;
-					changes=1; }
-				break;
-			case 11:
-				k=1;
-				strcpy(opt[0],"Yes");
-				strcpy(opt[1],"No");
-				opt[2][0]=0;
-				SETHELP(WHERE);
-/*
-Program Can Modify User Data:
-
-If this online programs recognizes the Synchronet MODUSER.DAT format
-or the RBBS/QuickBBS EXITINFO.BBS format and you want it to be able to
-modify the data of users who run the program, set this option to Yes.
-*/
-				savnum=4;
-				k=ulist(WIN_MID|WIN_SAV,0,0,0,&k,0
-					,"Program Can Modify User Data",opt);
-				if(!k && !(xtrn[i]->misc&MODUSERDAT)) {
-					xtrn[i]->misc|=MODUSERDAT;
-					changes=1; }
-				else if(k==1 && xtrn[i]->misc&MODUSERDAT) {
-					xtrn[i]->misc&=~MODUSERDAT;
-					changes=1; }
-                break;
-			case 12:
-				k=0;
-				strcpy(opt[k++],"No");
-				strcpy(opt[k++],"Logon");
-				strcpy(opt[k++],"Logoff");
-				strcpy(opt[k++],"New User");
-				strcpy(opt[k++],"Birthday");
-				opt[k][0]=0;
-				switch(xtrn[i]->event) {
-					default:
-						k=0;
-						break;
-					case EVENT_LOGON:
-						k=1;
-						break;
-					case EVENT_LOGOFF:
-						k=2;
-						break;
-					case EVENT_NEWUSER:
-						k=3;
-						break;
-					case EVENT_BIRTHDAY:
-						k=4;
-						break; }
-				SETHELP(WHERE);
-/*
-Execute Online Program on Event:
-
-If you would like this online program to automatically execute on a
-specific user event, select the event. Otherwise, select No.
-*/
-				savnum=4;
-				k=ulist(WIN_MID|WIN_SAV,0,0,0,&k,0
-					,"Execute on Event",opt);
-				if(k==-1)
-					break;
-				if(xtrn[i]->event!=k) {
-					xtrn[i]->event=k;
-					changes=1; }
-				if(!xtrn[i]->event)
-					break;
-				k=1;
-                strcpy(opt[0],"Yes");
-                strcpy(opt[1],"No");
-				opt[2][0]=0;
-				SETHELP(WHERE);
-/*
-Execute Online Program as Event Only:
-
-If you would like this online program to execute as an event only
-(not available to users on the online program menu), set this option
-to Yes.
-*/
-				savnum=4;
-				k=ulist(WIN_MID|WIN_SAV,0,0,0,&k
-					,0,"Execute as Event Only"
-                    ,opt);
-                if(!k && !(xtrn[i]->misc&EVENTONLY)) {
-                    xtrn[i]->misc|=EVENTONLY;
-                    changes=1; }
-                else if(k==1 && xtrn[i]->misc&EVENTONLY) {
-                    xtrn[i]->misc&=~EVENTONLY;
-                    changes=1; }
-                break;
-			case 13:
-				k=0;
-				strcpy(opt[k++],"None");
-				sprintf(opt[k++],"%-15s %s","Synchronet","XTRN.DAT");
-				sprintf(opt[k++],"%-15s %s","WWIV","CHAIN.TXT");
-				sprintf(opt[k++],"%-15s %s","GAP","DOOR.SYS");
-				sprintf(opt[k++],"%-15s %s","RBBS/QuickBBS","DORINFO#.DEF");
-				sprintf(opt[k++],"%-15s %s","Wildcat","CALLINFO.BBS");
-				sprintf(opt[k++],"%-15s %s","PCBoard","PCBOARD.SYS");
-				sprintf(opt[k++],"%-15s %s","SpitFire","SFDOORS.DAT");
-				sprintf(opt[k++],"%-15s %s","MegaMail","UTIDOOR.TXT");
-				sprintf(opt[k++],"%-15s %s","Solar Realms","DOORFILE.SR");
-				sprintf(opt[k++],"%-15s %s","RBBS/QuickBBS","DORINFO1.DEF");
-				sprintf(opt[k++],"%-15s %s","TriBBS","TRIBBS.SYS");
-				opt[k][0]=0;
-				k=xtrn[i]->type;
-				SETHELP(WHERE);
-/*
-Online Program BBS Drop File Type:
-
-If this online program requires a specific BBS data (drop) file
-format, select the file format from the list.
-*/
-				savnum=4;
-				k=ulist(WIN_MID|WIN_SAV,0,0,0,&k,0
-					,"BBS Drop File Type",opt);
-				if(k==-1)
-					break;
-				if(xtrn[i]->type!=k) {
-					xtrn[i]->type=k;
-					changes=1; }
-				if(xtrn[i]->type && uq&UQ_ALIASES) {
-					strcpy(opt[0],"Yes");
-					strcpy(opt[1],"No");
-					opt[2][0]=0;
-					k=1;
-					k=ulist(WIN_MID|WIN_SAV,0,0,0,&k,0,"Use Real Names",opt);
-					if(k==0 && !(xtrn[i]->misc&REALNAME)) {
-						xtrn[i]->misc|=REALNAME;
-						changes=1; }
-					else if(k==1 && xtrn[i]->misc&REALNAME) {
-						xtrn[i]->misc&=~REALNAME;
-						changes=1; } }
-				break;
-			case 14:
-				k=0;
-				strcpy(opt[0],"Node Directory");
-				strcpy(opt[1],"Start-up Directory");
-				opt[2][0]=0;
-				SETHELP(WHERE);
-/*
-Directory for Drop File:
-
-You can have the data file created in the current Node Directory or the
-Start-up Directory (if one is specified).
-*/
-				savnum=4;
-				k=ulist(WIN_MID|WIN_SAV,0,0,0,&k,0,"Create Drop File In"
-                    ,opt);
-				if(!k && xtrn[i]->misc&STARTUPDIR) {
-					xtrn[i]->misc&=~STARTUPDIR;
-                    changes=1; }
-				else if(k==1 && !(xtrn[i]->misc&STARTUPDIR)) {
-					xtrn[i]->misc|=STARTUPDIR;
-                    changes=1; }
-				break;
-			case 15:
-				while(1) {
-					k=0;
-					if(xtrn[i]->textra)
-						sprintf(str,"%u minutes",xtrn[i]->textra);
-					else
-						strcpy(str,"None");
-					sprintf(opt[k++],"%-25.25s%s","Extra Time",str);
-					if(xtrn[i]->maxtime)
-						sprintf(str,"%u minutes",xtrn[i]->maxtime);
-					else
-						strcpy(str,"None");
-					sprintf(opt[k++],"%-25.25s%s","Maximum Time",str);
-					sprintf(opt[k++],"%-25.25s%s","Suspended (Free) Time"
-						,xtrn[i]->misc&FREETIME ? "Yes" : "No");
-					opt[k][0]=0;
-					SETHELP(WHERE);
-/*
-Online Program Time Options:
-
-This sub-menu allows you to define specific preferences regarding the
-time users spend running this program.
-*/
-					savnum=4;
-					k=ulist(WIN_SAV|WIN_ACT|WIN_RHT|WIN_BOT,0,0,40
-						,&time_dflt,0
-						,"Online Program Time Options",opt);
-					if(k==-1)
-						break;
-					savnum=5;
-					switch(k) {
-						case 0:
-							itoa(xtrn[i]->textra,str,10);
-							SETHELP(WHERE);
-/*
-Extra Time to Give User in Program:
-
-If you want to give users extra time while in this online program,
-set this value to the number of minutes to add to their current time
-left online.
-*/
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Extra Time to Give User (in minutes)"
-								,str,2,K_EDIT|K_NUMBER);
-							xtrn[i]->textra=atoi(str);
-							break;
-						case 1:
-							itoa(xtrn[i]->maxtime,str,10);
-							SETHELP(WHERE);
-/*
-Maximum Time Allowed in Program:
-
-If this program supports a drop file that contains the number of minutes
-left online for the current user, this option allows the sysop to set
-the maximum number of minutes that will be allowed in the drop file.
-
-Setting this option to 0, disables this feature.
-*/
-							uinput(WIN_MID|WIN_SAV,0,0
-								,"Maximum Time (in minutes, 0=disabled)"
-								,str,2,K_EDIT|K_NUMBER);
-							xtrn[i]->maxtime=atoi(str);
-							break;
-						case 2:
-							k=1;
-							strcpy(opt[0],"Yes");
-							strcpy(opt[1],"No");
-							opt[2][0]=0;
-							SETHELP(WHERE);
-/*
-Suspended (Free) Time:
-
-If you want the user's time online to be suspended while running this
-online program (e.g. Free Time), set this option to Yes.
-*/
-							k=ulist(WIN_MID|WIN_SAV,0,0,0,&k,0
-								,"Suspended (Free) Time",opt);
-							if(!k && !(xtrn[i]->misc&FREETIME)) {
-								xtrn[i]->misc|=FREETIME;
-								changes=1; }
-							else if(k==1 && xtrn[i]->misc&FREETIME) {
-								xtrn[i]->misc&=~FREETIME;
-								changes=1; }
-							break; } }
-					break;
-
-				} } }
-}
-
-void xedit_cfg()
-{
-	static int dflt,dfltopt,bar;
-	char str[81],code[81],done=0,*p;
-	int j,k;
-	uint i;
-	static xedit_t savxedit;
-
-while(1) {
-	for(i=0;i<total_xedits && i<MAX_OPTS;i++)
-		sprintf(opt[i],"%-8.8s    %.40s",xedit[i]->code,xedit[i]->lcmd);
-	opt[i][0]=0;
-	j=WIN_SAV|WIN_ACT|WIN_CHE|WIN_RHT;
-	savnum=0;
-	if(total_xedits)
-		j|=WIN_DEL|WIN_GET;
-	if(total_xedits<MAX_OPTS)
-		j|=WIN_INS|WIN_INSACT|WIN_XTR;
-	if(savxedit.name[0])
-		j|=WIN_PUT;
-	SETHELP(WHERE);
-/*
-External Editors:
-
-This is a list of the configured external editors.
-
-To add an editor, select the desired location and hit  INS .
-
-To delete an editor, select it and hit  DEL .
-
-To configure an editor, select it and hit  ENTER .
-*/
-	i=ulist(j,0,0,45,&dflt,&bar,"External Editors",opt);
-	if((signed)i==-1)
-		return;
-	if((i&MSK_ON)==MSK_INS) {
-		i&=MSK_OFF;
-		SETHELP(WHERE);
-/*
-External Editor Name:
-
-This is the name or description of the external editor.
-*/
-		if(uinput(WIN_MID|WIN_SAV,0,0,"External Editor Name",str,40
-			,0)<1)
-            continue;
-		sprintf(code,"%.8s",str);
-		p=strchr(code,SP);
-		if(p) *p=0;
-        strupr(code);
-		SETHELP(WHERE);
-/*
-External Editor Internal Code:
-
-This is the internal code for the external editor.
-*/
-		if(uinput(WIN_MID|WIN_SAV,0,0,"External Editor Internal Code",code,8
-			,K_UPPER|K_EDIT)<1)
-            continue;
-		if(!code_ok(code)) {
-			helpbuf=invalid_code;
-			umsg("Invalid Code");
-			helpbuf=0;
-            continue; }
-
-		if((xedit=(xedit_t **)REALLOC(xedit
-            ,sizeof(xedit_t *)*(total_xedits+1)))==NULL) {
-            errormsg(WHERE,ERR_ALLOC,nulstr,total_xedits+1);
-			total_xedits=0;
-			bail(1);
-            continue; }
-		if(total_xedits)
-			for(j=total_xedits;j>i;j--)
-				xedit[j]=xedit[j-1];
-		if((xedit[i]=(xedit_t *)MALLOC(sizeof(xedit_t)))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(xedit_t));
-			continue; }
-		memset((xedit_t *)xedit[i],0,sizeof(xedit_t));
-		strcpy(xedit[i]->name,str);
-		strcpy(xedit[i]->code,code);
-		total_xedits++;
-		changes=1;
-		continue; }
-	if((i&MSK_ON)==MSK_DEL) {
-		i&=MSK_OFF;
-		FREE(xedit[i]);
-		total_xedits--;
-		for(j=i;j<total_xedits;j++)
-			xedit[j]=xedit[j+1];
-		changes=1;
-		continue; }
-	if((i&MSK_ON)==MSK_GET) {
-		i&=MSK_OFF;
-		savxedit=*xedit[i];
-		continue; }
-	if((i&MSK_ON)==MSK_PUT) {
-		i&=MSK_OFF;
-		*xedit[i]=savxedit;
-		changes=1;
-        continue; }
-	done=0;
-	while(!done) {
-		k=0;
-		sprintf(opt[k++],"%-32.32s%s","Name",xedit[i]->name);
-		sprintf(opt[k++],"%-32.32s%s","Internal Code",xedit[i]->code);
-		sprintf(opt[k++],"%-32.32s%.40s","Local Command Line",xedit[i]->lcmd);
-		sprintf(opt[k++],"%-32.32s%.40s","Remote Command Line",xedit[i]->rcmd);
-		sprintf(opt[k++],"%-32.32s%.40s","Access Requirements",xedit[i]->ar);
-		sprintf(opt[k++],"%-32.32s%s%s","Intercept I/O Interrupts"
-			,xedit[i]->misc&IO_INTS ? "Yes":"No"
-			,xedit[i]->misc&WWIVCOLOR ? ", WWIV" : nulstr);
-		sprintf(opt[k++],"%-32.32s%s","Quoted Text"
-			,xedit[i]->misc&QUOTEALL ? "All":xedit[i]->misc&QUOTENONE
-				? "None" : "Prompt User");
-		sprintf(opt[k++],"%-32.32s%s","QuickBBS Style (MSGTMP)"
-			,xedit[i]->misc&QUICKBBS ? "Yes":"No");
-		sprintf(opt[k++],"%-32.32s%s","Expand Line Feeds to CRLF"
-			,xedit[i]->misc&EXPANDLF ? "Yes":"No");
-		switch(xedit[i]->type) {
-			case XTRN_SBBS:
-				sprintf(str,"%-15s %s","Synchronet","XTRN.DAT");
-				break;
-			case XTRN_WWIV:
-				sprintf(str,"%-15s %s","WWIV","CHAIN.TXT");
-				break;
-			case XTRN_GAP:
-				sprintf(str,"%-15s %s","GAP","DOOR.SYS");
-				break;
-			case XTRN_RBBS:
-				sprintf(str,"%-15s %s","RBBS/QuickBBS","DORINFO#.DEF");
-				break;
-			case XTRN_RBBS1:
-				sprintf(str,"%-15s %s","RBBS/QuickBBS","DORINFO1.DEF");
-                break;
-			case XTRN_WILDCAT:
-				sprintf(str,"%-15s %s","Wildcat","CALLINFO.BBS");
-				break;
-			case XTRN_PCBOARD:
-				sprintf(str,"%-15s %s","PCBoard","PCBOARD.SYS");
-				break;
-			case XTRN_SPITFIRE:
-				sprintf(str,"%-15s %s","SpitFire","SFDOORS.DAT");
-				break;
-			case XTRN_UTI:
-				sprintf(str,"%-15s %s","MegaMail","UTIDOOR.TXT");
-				break;
-			case XTRN_SR:
-				sprintf(str,"%-15s %s","Solar Realms","DOORFILE.SR");
-				break;
-			case XTRN_TRIBBS:
-				sprintf(str,"%-15s %s","TriBBS","TRIBBS.SYS");
-                break;
-			default:
-				strcpy(str,"None");
-                break; }
-		sprintf(opt[k++],"%-32.32s%s","BBS Drop File Type",str);
-        opt[k][0]=0;
-		SETHELP(WHERE);
-/*
-External Editor Configuration:
-
-This menu allows you to change the settings for the selected external
-message editor. External message editors are very common on BBSs. Some
-popular editors include SyncEdit, WWIVedit, FEdit, GEdit, IceEdit,
-and many others.
-*/
-
-		savnum=1;
-		sprintf(str,"%s Editor",xedit[i]->name);
-		switch(ulist(WIN_SAV|WIN_ACT|WIN_L2R|WIN_BOT,0,0,70,&dfltopt,0
-			,str,opt)) {
-			case -1:
-				done=1;
-				break;
-			case 0:
-				SETHELP(WHERE);
-/*
-External Editor Name:
-
-This is the name or description of the external editor.
-*/
-				strcpy(str,xedit[i]->name);
-				if(!uinput(WIN_MID|WIN_SAV,0,10,"External Editor Name"
-					,xedit[i]->name,40,K_EDIT))
-					strcpy(xedit[i]->name,str);
-				break;
-			case 1:
-				strcpy(str,xedit[i]->code);
-				SETHELP(WHERE);
-/*
-External Editor Internal Code:
-
-Every external editor must have its own unique internal code for
-Synchronet to reference it by. It is helpful if this code is an
-abreviation of the name.
-*/
-				uinput(WIN_MID|WIN_SAV,0,17,"Internal Code (unique)"
-					,str,8,K_EDIT|K_UPPER);
-				if(code_ok(str))
-					strcpy(xedit[i]->code,str);
-				else {
-					helpbuf=invalid_code;
-					umsg("Invalid Code");
-					helpbuf=0; }
-                break;
-			case 2:
-				SETHELP(WHERE);
-/*
-External Editor Local Command Line:
-
-This is the command line to execute when using this editor locally.
-*/
-				uinput(WIN_MID|WIN_SAV,0,10,"Local"
-					,xedit[i]->lcmd,50,K_EDIT);
-				break;
-
-		   case 3:
-				SETHELP(WHERE);
-/*
-External Editor Remote Command Line:
-
-This is the command line to execute when using this editor remotely.
-*/
-				uinput(WIN_MID|WIN_SAV,0,10,"Remote"
-					,xedit[i]->rcmd,50,K_EDIT);
-				break;
-			case 4:
-				savnum=2;
-				sprintf(str,"%s External Editor",xedit[i]->name);
-				getar(str,xedit[i]->ar);
-				break;
-			case 5:
-				k=1;
-				strcpy(opt[0],"Yes");
-				strcpy(opt[1],"No");
-				opt[2][0]=0;
-				savnum=2;
-				SETHELP(WHERE);
-/*
-Intercept I/O Interrupts:
-
-If this external editor has its own serial communication abilities or
-requires a FOSSIL driver, set this option to No.
-*/
-				k=ulist(WIN_MID|WIN_SAV,0,0,0,&k,0,"Intercept I/O Interrupts"
-					,opt);
-				if(!k && !(xedit[i]->misc&IO_INTS)) {
-					xedit[i]->misc|=IO_INTS;
-					changes=1; }
-				else if(k==1 && xedit[i]->misc&IO_INTS) {
-					xedit[i]->misc&=~(IO_INTS|WWIVCOLOR);
-					changes=1; }
-				if(!(xedit[i]->misc&IO_INTS))
-					break;
-				k=1;
-				strcpy(opt[0],"Yes");
-				strcpy(opt[1],"No");
-				opt[2][0]=0;
-				savnum=2;
-				SETHELP(WHERE);
-/*
-Editor Uses WWIV Color Codes:
-
-If this editor was written for use exclusively under WWIV, set this
-option to Yes.
-*/
-				k=ulist(WIN_MID|WIN_SAV,0,0,0,&k,0
-					,"Editor Uses WWIV Color Codes",opt);
-				if(!k && !(xedit[i]->misc&WWIVCOLOR)) {
-					xedit[i]->misc|=WWIVCOLOR;
-					changes=1; }
-				else if(k==1 && xedit[i]->misc&WWIVCOLOR) {
-					xedit[i]->misc&=~WWIVCOLOR;
-                    changes=1; }
-                break;
-			case 6:
-				k=3;
-				strcpy(opt[0],"All");
-				strcpy(opt[1],"None");
-				strcpy(opt[2],"Prompt User");
-				opt[3][0]=0;
-				savnum=2;
-				SETHELP(WHERE);
-/*
-Quoted Text:
-
-If you want all the message text to be automatically entered into the
-message edit/quote file (INPUT.MSG or MSGTMP), select All.
-
-If you want the user to be prompted for which lines to quote before
-running the editor, select Prompt User.
-
-If you want none of the lines to be automatically quoted, select None.
-This option is mainly for use with editors that support the QUOTES.TXT
-drop file (like SyncEdit v2.x).
-*/
-				k=ulist(WIN_MID|WIN_SAV,0,0,0,&k,0,"Quoted Text"
-					,opt);
-				if(!k && !(xedit[i]->misc&QUOTEALL)) {
-					xedit[i]->misc|=QUOTEALL;
-					xedit[i]->misc&=~QUOTENONE;
-					changes=1; }
-				else if(k==1 && !(xedit[i]->misc&QUOTENONE)) {
-					xedit[i]->misc|=QUOTENONE;
-					xedit[i]->misc&=~QUOTEALL;
-                    changes=1; }
-				else if(k==2 && xedit[i]->misc&(QUOTENONE|QUOTEALL)) {
-					xedit[i]->misc&=~(QUOTENONE|QUOTEALL);
-					changes=1; }
-                break;
-			case 7:
-				k=1;
-				strcpy(opt[0],"Yes");
-				strcpy(opt[1],"No");
-				opt[2][0]=0;
-				savnum=2;
-				SETHELP(WHERE);
-/*
-QuickBBS Style (MSGTMP):
-
-If this external editor uses the QuickBBS style MSGTMP interface, set
-this option to Yes.
-*/
-				k=ulist(WIN_MID|WIN_SAV,0,0,0,&k,0,"QuickBBS Style (MSGTMP)"
-					,opt);
-				if(!k && !(xedit[i]->misc&QUICKBBS)) {
-					xedit[i]->misc|=QUICKBBS;
-					changes=1; }
-				else if(k==1 && xedit[i]->misc&QUICKBBS) {
-					xedit[i]->misc&=~QUICKBBS;
-                    changes=1; }
-				break;
-			case 8:
-				k=1;
-				strcpy(opt[0],"Yes");
-				strcpy(opt[1],"No");
-				opt[2][0]=0;
-				savnum=2;
-				SETHELP(WHERE);
-/*
-Expand Line Feeds to Carriage Return/Line Feed Pairs:
-
-If this external editor saves new lines as a single line feed character
-instead of a carriage return/line feed pair, set this option to Yes.
-*/
-				k=ulist(WIN_MID|WIN_SAV,0,0,0,&k,0,"Expand LF to CRLF"
-					,opt);
-				if(!k && !(xedit[i]->misc&EXPANDLF)) {
-					xedit[i]->misc|=EXPANDLF;
-					changes=1; }
-				else if(k==1 && xedit[i]->misc&EXPANDLF) {
-					xedit[i]->misc&=~EXPANDLF;
-                    changes=1; }
-				break;
-			case 9:
-				k=0;
-				strcpy(opt[k++],"None");
-				sprintf(opt[k++],"%-15s %s","Synchronet","XTRN.DAT");
-				sprintf(opt[k++],"%-15s %s","WWIV","CHAIN.TXT");
-				sprintf(opt[k++],"%-15s %s","GAP","DOOR.SYS");
-				sprintf(opt[k++],"%-15s %s","RBBS/QuickBBS","DORINFO#.DEF");
-				sprintf(opt[k++],"%-15s %s","Wildcat","CALLINFO.BBS");
-				sprintf(opt[k++],"%-15s %s","PCBoard","PCBOARD.SYS");
-				sprintf(opt[k++],"%-15s %s","SpitFire","SFDOORS.DAT");
-				sprintf(opt[k++],"%-15s %s","MegaMail","UTIDOOR.TXT");
-				sprintf(opt[k++],"%-15s %s","Solar Realms","DOORFILE.SR");
-				sprintf(opt[k++],"%-15s %s","RBBS/QuickBBS","DORINFO1.DEF");
-				sprintf(opt[k++],"%-15s %s","TriBBS","TRIBBS.SYS");
-				opt[k][0]=0;
-				k=xedit[i]->type;
-				SETHELP(WHERE);
-/*
-External Program BBS Drop File Type:
-
-If this external editor requires a specific BBS data (drop) file
-format, select the file format from the list.
-*/
-				savnum=2;
-				k=ulist(WIN_MID|WIN_SAV,0,0,0,&k,0
-					,"BBS Drop File Type",opt);
-				if(k==-1)
-					break;
-				if(xedit[i]->type!=k) {
-					xedit[i]->type=k;
-					changes=1; }
-				break;
-
-				} } }
-}
-
-
-void swap_cfg()
-{
-	static int dflt,bar;
-	char str[81];
-	int j,k;
-	uint i;
-
-while(1) {
-	for(i=0;i<MAX_OPTS && i<total_swaps;i++)
-		sprintf(opt[i],"%-25s",swap[i]->cmd);
-	opt[i][0]=0;
-	j=WIN_ACT|WIN_CHE|WIN_L2R|WIN_SAV;
-	savnum=0;
-	if(total_swaps)
-		j|=WIN_DEL;
-	if(total_swaps<MAX_OPTS)
-		j|=WIN_INS|WIN_INSACT|WIN_XTR;
-	SETHELP(WHERE);
-/*
-External Program Global Swap List:
-
-This is a list of the external program (executable file) names to swap
-the BBS out of memory for. They are termed Global because if you add
-a program name to this list, the BBS will swap to run it regardless of
-when, where, or why the program is run from the BBS.
-
-Use  INS  and  DELETE  to add and remove swappable programs.
-
-To change the filename of a program, hit  ENTER .
-
-To swap whenever PKZIP is run, add PKZIP to the list.
-
-To swap for all DOS Shells, add COMMAND.COM to the list.
-*/
-	i=ulist(j,0,0,17,&dflt,&bar,"Global Swap List",opt);
-	if((signed)i==-1)
-		return;
-	if((i&MSK_ON)==MSK_INS) {
-		i&=MSK_OFF;
-		SETHELP(WHERE);
-/*
-Swappable Program Name:
-
-This is the executable filename of the external program.
-*/
-		if(uinput(WIN_MID|WIN_SAV,0,0,"Program Name",str,12
-			,K_UPPER)<1)
-            continue;
-		if((swap=(swap_t **)REALLOC(swap
-			,sizeof(swap_t *)*(total_swaps+1)))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,nulstr,total_swaps+1);
-			total_swaps=0;
-			bail(1);
-            continue; }
-		if(total_swaps)
-			for(j=total_swaps;j>i;j--)
-				swap[j]=swap[j-1];
-		if((swap[i]=(swap_t *)MALLOC(sizeof(swap_t)))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(swap_t));
-			continue; }
-		memset((swap_t *)swap[i],0,sizeof(swap_t));
-		strcpy(swap[i]->cmd,str);
-		total_swaps++;
-		changes=1;
-		continue; }
-	if((i&MSK_ON)==MSK_DEL) {
-		i&=MSK_OFF;
-		FREE(swap[i]);
-		total_swaps--;
-		for(j=i;j<total_swaps;j++)
-			swap[j]=swap[j+1];
-		changes=1;
-		continue; }
-	SETHELP(WHERE);
-/*
-Swappable Program Name:
-
-This is the executable filename of the external program.
-*/
-	strcpy(str,swap[i]->cmd);
-	if(uinput(WIN_MID|WIN_SAV,0,5,"Program Name",str,12
-		,K_UPPER|K_EDIT)>0)
-		strcpy(swap[i]->cmd,str); }
-}
-
-int os2pgm_cfg()
-{
-	static int dflt,bar;
-	char str[81];
-	int j,k;
-	uint i;
-
-while(1) {
-	for(i=0;i<MAX_OPTS && i<total_os2pgms;i++)
-		sprintf(opt[i],"%-12s %-12s",os2pgm[i]->name
-			,os2pgm[i]->misc&OS2_POPEN ? "(port open)":nulstr);
-	opt[i][0]=0;
-	j=WIN_ACT|WIN_CHE|WIN_L2R|WIN_SAV;
-	savnum=0;
-	if(total_os2pgms)
-		j|=WIN_DEL;
-	if(total_os2pgms<MAX_OPTS)
-		j|=WIN_INS|WIN_INSACT|WIN_XTR;
-	SETHELP(WHERE);
-/*
-OS/2 Program List:
-
-This is a list of all native OS/2 external program (executable file)
-names that you may execute under Synchronet for OS/2. This list is not
-used in Synchronet for DOS. Any programs not listed here will be assumed
-to be DOS programs and executed accordingly.
-
-Use  INS  and  DELETE  to add and remove OS/2 programs.
-
-To change the filename of a program, hit  ENTER .
-*/
-	i=ulist(j,0,0,30,&dflt,&bar,"OS/2 Program List",opt);
-	if((signed)i==-1)
-		break;
-	if((i&MSK_ON)==MSK_INS) {
-		i&=MSK_OFF;
-		SETHELP(WHERE);
-/*
-OS/2 Program Name:
-
-This is the executable filename of the OS/2 external program.
-*/
-		if(uinput(WIN_MID|WIN_SAV,0,0,"OS/2 Program Name",str,12
-			,K_UPPER)<1)
-            continue;
-		if((os2pgm=(os2pgm_t **)REALLOC(os2pgm
-			,sizeof(os2pgm_t *)*(total_os2pgms+1)))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,nulstr,total_os2pgms+1);
-			total_os2pgms=0;
-			bail(1);
-            continue; }
-		if(total_os2pgms)
-			for(j=total_os2pgms;j>i;j--)
-				os2pgm[j]=os2pgm[j-1];
-		if((os2pgm[i]=(os2pgm_t *)MALLOC(sizeof(os2pgm_t)))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(os2pgm_t));
-			continue; }
-		memset((os2pgm_t *)os2pgm[i],0,sizeof(os2pgm_t));
-		strcpy(os2pgm[i]->name,str);
-
-		SETHELP(WHERE);
-/*
-Leave COM Port Open During Execution:
-
-If this program accesses the COM port via handle (currently open COM
-port), set this option to Yes, otherwise set it to No.
-*/
-		strcpy(opt[0],"Yes (This Program Uses Port Handle)");
-		strcpy(opt[1],"No  (This Program Uses Port Number)");
-		opt[2][0]=0;
-		j=1;
-		if(ulist(WIN_MID|WIN_SAV,0,0,0,&j,0
-			,"Leave COM Port Open During Execution?",opt)==0)
-			os2pgm[i]->misc|=OS2_POPEN;
-		total_os2pgms++;
-		changes=1;
-		continue; }
-	if((i&MSK_ON)==MSK_DEL) {
-		i&=MSK_OFF;
-		FREE(os2pgm[i]);
-		total_os2pgms--;
-		for(j=i;j<total_os2pgms;j++)
-			os2pgm[j]=os2pgm[j+1];
-		changes=1;
-		continue; }
-	SETHELP(WHERE);
-/*
-OS/2 Program Name:
-
-This is the executable filename of the OS/2 external program.
-*/
-	strcpy(str,os2pgm[i]->name);
-	if(uinput(WIN_MID|WIN_SAV,0,5,"OS/2 Program Name",str,12
-		,K_UPPER|K_EDIT)>0)
-		strcpy(os2pgm[i]->name,str);
-
-	SETHELP(WHERE);
-/*
-Leave COM Port Open During Execution:
-
-If this program accesses the COM port via handle (currently open COM
-port), set this option to Yes, otherwise set it to No.
-*/
-	strcpy(opt[0],"Yes (This Program Uses Port Handle)");
-	strcpy(opt[1],"No  (This Program Uses Port Number)");
-	opt[2][0]=0;
-	j=1;
-	savnum=1;
-	j=ulist(WIN_MID|WIN_SAV,0,0,0,&j,0
-		,"Leave COM Port Open During Execution",opt);
-	if(j==0 && !(os2pgm[i]->misc&OS2_POPEN)) {
-		os2pgm[i]->misc|=OS2_POPEN;
-		changes=1; }
-	else if(j==1 && os2pgm[i]->misc&OS2_POPEN) {
-		os2pgm[i]->misc&=~OS2_POPEN;
-		changes=1; }
-	}
-return(0);
-}
-
-
-void xtrnsec_cfg()
-{
-	static int xtrnsec_dflt,xtrnsec_opt;
-	char str[81],code[9],done=0,*p;
-	int j,k;
-	uint i;
-	static xtrnsec_t savxtrnsec;
-
-while(1) {
-	for(i=0;i<total_xtrnsecs && i<MAX_OPTS;i++)
-		sprintf(opt[i],"%-25s",xtrnsec[i]->name);
-	opt[i][0]=0;
-	j=WIN_SAV|WIN_ACT|WIN_CHE|WIN_BOT;
-	savnum=0;
-	if(total_xtrnsecs)
-		j|=WIN_DEL|WIN_GET;
-	if(total_xtrnsecs<MAX_OPTS)
-		j|=WIN_INS|WIN_INSACT|WIN_XTR;
-	if(savxtrnsec.name[0])
-		j|=WIN_PUT;
-	SETHELP(WHERE);
-/*
-Online Program Sections:
-
-This is a list of Online Program Sections configured for your system.
-
-To add an online program section, select the desired location with the
-arrow keys and hit  INS .
-
-To delete an online program section, select it and hit  DEL .
-
-To configure an online program section, select it and hit  ENTER .
-*/
-	i=ulist(j,0,0,45,&xtrnsec_dflt,0,"Online Program Sections",opt);
-	if((signed)i==-1)
-		return;
-	if((i&MSK_ON)==MSK_INS) {
-		i&=MSK_OFF;
-		SETHELP(WHERE);
-/*
-Online Program Section Name:
-
-This is the name of this section.
-*/
-		if(uinput(WIN_MID|WIN_SAV,0,0,"Online Program Section Name",str,40
-			,0)<1)
-            continue;
-		sprintf(code,"%.8s",str);
-		p=strchr(code,SP);
-		if(p) *p=0;
-        strupr(code);
-		SETHELP(WHERE);
-/*
-Online Program Section Internal Code:
-
-Every online program section must have its own unique internal code
-for Synchronet to reference it by. It is helpful if this code is an
-abreviation of the name.
-*/
-		if(uinput(WIN_MID|WIN_SAV,0,0,"Online Program Section Internal Code"
-			,code,8,K_EDIT|K_UPPER)<1)
-			continue;
-		if(!code_ok(code)) {
-			helpbuf=invalid_code;
-			umsg("Invalid Code");
-			helpbuf=0;
-            continue; }
-		if((xtrnsec=(xtrnsec_t **)REALLOC(xtrnsec
-			,sizeof(xtrnsec_t *)*(total_xtrnsecs+1)))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,nulstr,total_xtrnsecs+1);
-			total_xtrnsecs=0;
-			bail(1);
-			continue; }
-		if(total_xtrnsecs) {
-			for(j=total_xtrnsecs;j>i;j--)
-				xtrnsec[j]=xtrnsec[j-1];
-			for(j=0;j<total_xtrns;j++)
-				if(xtrn[j]->sec>=i)
-					xtrn[j]->sec++; }
-
-
-		if((xtrnsec[i]=(xtrnsec_t *)MALLOC(sizeof(xtrnsec_t)))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(xtrnsec_t));
-			continue; }
-		memset((xtrnsec_t *)xtrnsec[i],0,sizeof(xtrnsec_t));
-		strcpy(xtrnsec[i]->name,str);
-		strcpy(xtrnsec[i]->code,code);
-		total_xtrnsecs++;
-		changes=1;
-		continue; }
-	if((i&MSK_ON)==MSK_DEL) {
-		i&=MSK_OFF;
-		FREE(xtrnsec[i]);
-		for(j=0;j<total_xtrns;) {
-			if(xtrn[j]->sec==i) {	 /* delete xtrns of this group */
-				FREE(xtrn[j]);
-				total_xtrns--;
-				k=j;
-				while(k<total_xtrns) {	 /* move all xtrns down */
-					xtrn[k]=xtrn[k+1];
-					k++; } }
-			else j++; }
-		for(j=0;j<total_xtrns;j++)	 /* move xtrn group numbers down */
-			if(xtrn[j]->sec>i)
-				xtrn[j]->sec--;
-		total_xtrnsecs--;
-		while(i<total_xtrnsecs) {
-			xtrnsec[i]=xtrnsec[i+1];
-            i++; }
-		changes=1;
-		continue; }
-	if((i&MSK_ON)==MSK_GET) {
-		i&=MSK_OFF;
-		savxtrnsec=*xtrnsec[i];
-		continue; }
-	if((i&MSK_ON)==MSK_PUT) {
-		i&=MSK_OFF;
-		*xtrnsec[i]=savxtrnsec;
-		changes=1;
-        continue; }
-	done=0;
-	while(!done) {
-		k=0;
-		sprintf(opt[k++],"%-27.27s%s","Name",xtrnsec[i]->name);
-		sprintf(opt[k++],"%-27.27s%s","Internal Code",xtrnsec[i]->code);
-		sprintf(opt[k++],"%-27.27s%.40s","Access Requirements"
-			,xtrnsec[i]->ar);
-		sprintf(opt[k++],"%s","Available Online Programs...");
-		opt[k][0]=0;
-		savnum=1;
-		sprintf(str,"%s Program Section",xtrnsec[i]->name);
-		switch(ulist(WIN_SAV|WIN_ACT|WIN_MID,0,0,60,&xtrnsec_opt,0,str
-			,opt)) {
-			case -1:
-				done=1;
-				break;
-			case 0:
-				SETHELP(WHERE);
-/*
-Online Program Section Name:
-
-This is the name of this section.
-*/
-				strcpy(str,xtrnsec[i]->name);	 /* save */
-				if(!uinput(WIN_MID|WIN_SAV,0,10
-					,"Online Program Section Name"
-					,xtrnsec[i]->name,40,K_EDIT))
-					strcpy(xtrnsec[i]->name,str);
-				break;
-			case 1:
-				strcpy(str,xtrnsec[i]->code);
-				SETHELP(WHERE);
-/*
-Online Program Section Internal Code:
-
-Every online program section must have its own unique internal code
-for Synchronet to reference it by. It is helpful if this code is an
-abreviation of the name.
-*/
-				uinput(WIN_MID|WIN_SAV,0,17,"Internal Code (unique)"
-					,str,8,K_EDIT|K_UPPER);
-				if(code_ok(str))
-					strcpy(xtrnsec[i]->code,str);
-				else {
-					helpbuf=invalid_code;
-					umsg("Invalid Code");
-					helpbuf=0; }
-				break;
-			case 2:
-				getar(xtrnsec[i]->name,xtrnsec[i]->ar);
-                break;
-			case 3:
-				xtrn_cfg(i);
-				break; } } }
-}
diff --git a/src/sbbs2/scfg/wrcnf1.c b/src/sbbs2/scfg/wrcnf1.c
deleted file mode 100644
index e6d70020db..0000000000
--- a/src/sbbs2/scfg/wrcnf1.c
+++ /dev/null
@@ -1,577 +0,0 @@
-#line 2 "WRCNF1.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "scfg.h"
-
-extern int no_msghdr,all_msghdr;
-extern int no_dirchk;
-
-char *crlf="\r\n";
-char nulbuf[256]={0};
-int  pslen;
-
-#define put_int(var,stream) fwrite(&var,1,sizeof(var),stream)
-#define put_str(var,stream) { pslen=strlen(var); \
-							fwrite(var,1,pslen > sizeof(var) \
-								? sizeof(var) : pslen ,stream); \
-							fwrite(nulbuf,1,pslen > sizeof(var) \
-								? 0 : sizeof(var)-pslen,stream); }
-
-void write_node_cfg()
-{
-	char	str[128],cmd[64],c;
-	int 	i,file;
-	short	n;
-	FILE	*stream;
-
-memset(cmd,0,64);
-
-upop("Writing NODE.CNF...");
-sprintf(str,"%sNODE.CNF",node_path[node_num-1]);
-backup(str);
-
-if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1
-	|| (stream=fdopen(file,"wb"))==NULL) {
-	errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
-    return; }
-setvbuf(stream,NULL,_IOFBF,2048);
-
-put_int(node_num,stream);
-put_str(node_name,stream);
-put_str(node_phone,stream);
-put_str(node_comspec,stream);				 /* Was node_logon */
-put_int(node_misc,stream);
-put_int(node_ivt,stream);
-put_int(node_swap,stream);
-if(node_swapdir[0]) {
-    backslash(node_swapdir);
-    md(node_swapdir); }              /* make sure it's a valid directory */
-put_str(node_swapdir,stream);
-put_int(node_valuser,stream);
-put_int(node_minbps,stream);
-put_str(node_ar,stream);
-put_int(node_dollars_per_call,stream);
-put_str(node_editor,stream);
-put_str(node_viewer,stream);
-put_str(node_daily,stream);
-put_int(node_scrnlen,stream);
-put_int(node_scrnblank,stream);
-backslash(ctrl_dir);
-put_str(ctrl_dir,stream);
-backslash(text_dir);
-put_str(text_dir,stream);
-backslash(temp_dir);
-put_str(temp_dir,stream);
-for(i=0;i<10;i++)
-	put_str(wfc_cmd[i],stream);
-for(i=0;i<12;i++)
-	put_str(wfc_scmd[i],stream);
-put_str(mdm_hang,stream);
-put_int(node_sem_check,stream);
-put_int(node_stat_check,stream);
-put_str(scfg_cmd,stream);
-put_int(sec_warn,stream);
-put_int(sec_hangup,stream);
-n=0;
-for(i=0;i<188;i++)					/* unused init to NULL */
-	fwrite(&n,1,2,stream);
-n=0xffff;							/* unused init to 0xff */
-for(i=0;i<256;i++)
-    fwrite(&n,1,2,stream);
-put_int(com_port,stream);
-put_int(com_irq,stream);
-put_int(com_base,stream);
-put_int(com_rate,stream);
-put_int(mdm_misc,stream);
-put_str(mdm_init,stream);
-put_str(mdm_spec,stream);
-put_str(mdm_term,stream);
-put_str(mdm_dial,stream);
-put_str(mdm_offh,stream);
-put_str(mdm_answ,stream);
-put_int(mdm_reinit,stream);
-put_int(mdm_ansdelay,stream);
-put_int(mdm_rings,stream);
-put_int(mdm_results,stream);
-for(i=0;i<mdm_results;i++) {
-	put_int(mdm_result[i].code,stream);
-	put_int(mdm_result[i].rate,stream);
-	put_int(mdm_result[i].cps,stream);
-	put_str(mdm_result[i].str,stream); }
-fclose(stream);
-}
-
-void free_node_cfg()
-{
-
-FREE(mdm_result);
-}
-
-void write_main_cfg()
-{
-	char	str[128],c=0;
-	int 	file;
-	short	i,j,n;
-	FILE	*stream;
-
-upop("Writing MAIN.CNF...");
-sprintf(str,"%sMAIN.CNF",ctrl_dir);
-backup(str);
-
-if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1
-	|| (stream=fdopen(file,"wb"))==NULL) {
-	errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
-    return; }
-setvbuf(stream,NULL,_IOFBF,2048);
-
-put_str(sys_name,stream);
-put_str(sys_id,stream);
-put_str(sys_location,stream);
-put_str(sys_phonefmt,stream);
-put_str(sys_op,stream);
-put_str(sys_guru,stream);
-put_str(sys_pass,stream);
-put_int(sys_nodes,stream);
-for(i=0;i<sys_nodes;i++) {
-	backslash(node_path[i]);
-	fwrite(node_path[i],LEN_DIR+1,1,stream); }
-backslash(data_dir);
-put_str(data_dir,stream);
-
-/************************************************************/
-/* Create data and sub-dirs off data if not already created */
-/************************************************************/
-strcpy(str,data_dir);
-md(str);
-sprintf(str,"%sSUBS",data_dir);
-md(str);
-sprintf(str,"%sDIRS",data_dir);
-md(str);
-sprintf(str,"%sTEXT",data_dir);
-md(str);
-sprintf(str,"%sMSGS",data_dir);
-md(str);
-sprintf(str,"%sUSER",data_dir);
-md(str);
-sprintf(str,"%sUSER\\PTRS",data_dir);
-md(str);
-sprintf(str,"%sLOGS",data_dir);
-md(str);
-sprintf(str,"%sQNET",data_dir);
-md(str);
-sprintf(str,"%sFILE",data_dir);
-md(str);
-
-backslash(exec_dir);
-put_str(exec_dir,stream);
-put_str(sys_logon,stream);
-put_str(sys_logout,stream);
-put_str(sys_daily,stream);
-put_int(sys_timezone,stream);
-put_int(sys_misc,stream);
-put_int(sys_lastnode,stream);
-put_int(sys_autonode,stream);
-put_int(uq,stream);
-put_int(sys_pwdays,stream);
-put_int(sys_deldays,stream);
-put_int(sys_exp_warn,stream);
-put_int(sys_autodel,stream);
-put_int(sys_def_stat,stream);
-put_str(sys_chat_ar,stream);
-put_int(cdt_min_value,stream);
-put_int(max_minutes,stream);
-put_int(cdt_per_dollar,stream);
-put_str(new_pass,stream);
-put_str(new_magic,stream);
-put_str(new_sif,stream);
-put_str(new_sof,stream);
-
-put_int(new_level,stream);
-put_int(new_flags1,stream);
-put_int(new_flags2,stream);
-put_int(new_flags3,stream);
-put_int(new_flags4,stream);
-put_int(new_exempt,stream);
-put_int(new_rest,stream);
-put_int(new_cdt,stream);
-put_int(new_min,stream);
-put_str(new_xedit,stream);
-put_int(new_expire,stream);
-if(new_shell>total_shells)
-	new_shell=0;
-put_int(new_shell,stream);
-put_int(new_misc,stream);
-put_int(new_prot,stream);
-c=0;
-put_int(c,stream);
-n=0;
-for(i=0;i<7;i++)
-	put_int(n,stream);
-
-put_int(expired_level,stream);
-put_int(expired_flags1,stream);
-put_int(expired_flags2,stream);
-put_int(expired_flags3,stream);
-put_int(expired_flags4,stream);
-put_int(expired_exempt,stream);
-put_int(expired_rest,stream);
-
-put_str(logon_mod,stream);
-put_str(logoff_mod,stream);
-put_str(newuser_mod,stream);
-put_str(login_mod,stream);
-put_str(logout_mod,stream);
-put_str(sync_mod,stream);
-put_str(expire_mod,stream);
-put_int(c,stream);
-n=0;
-for(i=0;i<224;i++)
-	put_int(n,stream);
-n=0xffff;
-for(i=0;i<256;i++)
-	put_int(n,stream);
-
-n=0;
-for(i=0;i<10;i++) {
-	put_int(val_level[i],stream);
-	put_int(val_expire[i],stream);
-	put_int(val_flags1[i],stream);
-	put_int(val_flags2[i],stream);
-	put_int(val_flags3[i],stream);
-	put_int(val_flags4[i],stream);
-	put_int(val_cdt[i],stream);
-	put_int(val_exempt[i],stream);
-	put_int(val_rest[i],stream);
-	for(j=0;j<8;j++)
-		put_int(n,stream); }
-
-c=0;
-for(i=0;i<100 && !feof(stream);i++) {
-	put_int(level_timeperday[i],stream);
-	put_int(level_timepercall[i],stream);
-	put_int(level_callsperday[i],stream);
-	put_int(level_freecdtperday[i],stream);
-	put_int(level_linespermsg[i],stream);
-	put_int(level_postsperday[i],stream);
-	put_int(level_emailperday[i],stream);
-	put_int(level_misc[i],stream);
-	put_int(level_expireto[i],stream);
-	put_int(c,stream);
-	for(j=0;j<5;j++)
-		put_int(n,stream); }
-
-/* Command Shells */
-
-put_int(total_shells,stream);
-for(i=0;i<total_shells;i++) {
-	put_str(shell[i]->name,stream);
-	put_str(shell[i]->code,stream);
-	put_str(shell[i]->ar,stream);
-	put_int(shell[i]->misc,stream);
-	n=0;
-	for(j=0;j<8;j++)
-        put_int(n,stream); }
-
-fclose(stream);
-}
-
-void free_main_cfg()
-{
-	int i;
-
-for(i=0;i<sys_nodes;i++)
-	FREE(node_path[i]);
-FREE(node_path);
-for(i=0;i<total_shells;i++)
-	FREE(shell[i]);
-FREE(shell);
-}
-
-void write_msgs_cfg()
-{
-	char	str[128],c;
-	int 	i,j,k,file,x;
-	short	n;
-	long	l;
-	FILE	*stream;
-	smb_t	smb;
-
-upop("Writing MSGS.CNF...");
-sprintf(str,"%sMSGS.CNF",ctrl_dir);
-backup(str);
-
-if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1
-	|| (stream=fdopen(file,"wb"))==NULL) {
-	errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
-    return; }
-setvbuf(stream,NULL,_IOFBF,2048);
-
-put_int(max_qwkmsgs,stream);
-put_int(mail_maxcrcs,stream);
-put_int(mail_maxage,stream);
-put_str(preqwk_ar,stream);
-put_int(smb_retry_time,stream);
-n=0;
-for(i=0;i<235;i++)
-	put_int(n,stream);
-n=0xffff;
-for(i=0;i<256;i++)
-	put_int(n,stream);
-
-/* Message Groups */
-
-put_int(total_grps,stream);
-for(i=0;i<total_grps;i++) {
-	put_str(grp[i]->lname,stream);
-	put_str(grp[i]->sname,stream);
-	put_str(grp[i]->ar,stream);
-	n=0;
-	for(j=0;j<32;j++)
-		put_int(n,stream);
-	n=0xffff;
-	for(j=0;j<16;j++)
-		put_int(n,stream); }
-
-/* Message Sub-boards */
-
-backslash(echomail_dir);
-
-str[0]=0;
-for(i=n=0;i<total_subs;i++)
-	if(sub[i]->grp<total_grps)		/* total VALID sub-boards */
-		n++;
-put_int(n,stream);
-for(i=0;i<total_subs;i++) {
-	if(sub[i]->grp>=total_grps) 	/* skip bogus group numbers */
-		continue;
-	put_int(sub[i]->grp,stream);
-	put_str(sub[i]->lname,stream);
-	put_str(sub[i]->sname,stream);
-	put_str(sub[i]->qwkname,stream);
-	put_str(sub[i]->code,stream);
-	if(sub[i]->data_dir[0])
-		backslash(sub[i]->data_dir);
-	put_str(sub[i]->data_dir,stream);
-	md(sub[i]->data_dir);
-	put_str(sub[i]->ar,stream);
-	put_str(sub[i]->read_ar,stream);
-	put_str(sub[i]->post_ar,stream);
-	put_str(sub[i]->op_ar,stream);
-	l=(sub[i]->misc&(~SUB_HDRMOD));    /* Don't write mod bit */
-	put_int(l,stream);
-	put_str(sub[i]->tagline,stream);
-	put_str(sub[i]->origline,stream);
-	put_str(sub[i]->echomail_sem,stream);
-	if(sub[i]->echopath)
-		backslash(sub[i]->echopath);
-	put_str(sub[i]->echopath,stream);
-	if(sub[i]->misc&SUB_FIDO && (echomail_dir[0] || sub[i]->echopath[0])) {
-		md(echomail_dir);
-		if(!sub[i]->echopath[0])
-			sprintf(sub[i]->echopath,"%s%s",echomail_dir,sub[i]->code);
-		md(sub[i]->echopath); }
-	put_int(sub[i]->faddr,stream);
-	put_int(sub[i]->maxmsgs,stream);
-	put_int(sub[i]->maxcrcs,stream);
-	put_int(sub[i]->maxage,stream);
-	put_int(sub[i]->ptridx,stream);
-	put_str(sub[i]->mod_ar,stream);
-	put_int(sub[i]->qwkconf,stream);
-	c=0;
-	put_int(c,stream);
-	n=0;
-	for(k=0;k<26;k++)
-		put_int(n,stream);
-
-	if(all_msghdr || (sub[i]->misc&SUB_HDRMOD && !no_msghdr)) {
-		if(!sub[i]->data_dir[0])
-			sprintf(smb.file,"%sSUBS\\%s",data_dir,sub[i]->code);
-		else
-			sprintf(smb.file,"%s%s",sub[i]->data_dir,sub[i]->code);
-		if((x=smb_open(&smb))!=0) {
-			errormsg(WHERE,ERR_OPEN,smb.file,x);
-			continue; }
-		if(!filelength(fileno(smb.shd_fp))) {
-			smb.status.max_crcs=sub[i]->maxcrcs;
-			smb.status.max_msgs=sub[i]->maxmsgs;
-			smb.status.max_age=sub[i]->maxage;
-			smb.status.attr=sub[i]->misc&SUB_HYPER ? SMB_HYPERALLOC :0;
-			if((x=smb_create(&smb))!=0)
-				errormsg(WHERE,ERR_CREATE,smb.file,x);
-			smb_close(&smb);
-			continue; }
-		if((x=smb_locksmbhdr(&smb))!=0) {
-			smb_close(&smb);
-			errormsg(WHERE,ERR_LOCK,smb.file,x);
-			continue; }
-		if((x=smb_getstatus(&smb))!=0) {
-			smb_close(&smb);
-			errormsg(WHERE,ERR_READ,smb.file,x);
-			continue; }
-		if((!(sub[i]->misc&SUB_HYPER) || smb.status.attr&SMB_HYPERALLOC)
-			&& smb.status.max_msgs==sub[i]->maxmsgs
-			&& smb.status.max_crcs==sub[i]->maxcrcs
-			&& smb.status.max_age==sub[i]->maxage) {	/* No change */
-			smb_close(&smb);
-			continue; }
-		smb.status.max_msgs=sub[i]->maxmsgs;
-		smb.status.max_crcs=sub[i]->maxcrcs;
-		smb.status.max_age=sub[i]->maxage;
-		if(sub[i]->misc&SUB_HYPER)
-			smb.status.attr|=SMB_HYPERALLOC;
-		if((x=smb_putstatus(&smb))!=0) {
-			smb_close(&smb);
-			errormsg(WHERE,ERR_WRITE,smb.file,x);
-			continue; }
-		smb_close(&smb); }
-
-				}
-
-/* FidoNet */
-
-put_int(total_faddrs,stream);
-for(i=0;i<total_faddrs;i++) {
-	put_int(faddr[i].zone,stream);
-	put_int(faddr[i].net,stream);
-	put_int(faddr[i].node,stream);
-	put_int(faddr[i].point,stream); }
-
-put_str(origline,stream);
-put_str(netmail_sem,stream);
-put_str(echomail_sem,stream);
-backslash(netmail_dir);
-put_str(netmail_dir,stream);
-put_str(echomail_dir,stream);
-backslash(fidofile_dir);
-put_str(fidofile_dir,stream);
-put_int(netmail_misc,stream);
-put_int(netmail_cost,stream);
-put_int(dflt_faddr,stream);
-n=0;
-for(i=0;i<28;i++)
-	put_int(n,stream);
-
-/* QWKnet Config */
-
-put_str(qnet_tagline,stream);
-
-put_int(total_qhubs,stream);
-for(i=0;i<total_qhubs;i++) {
-	put_str(qhub[i]->id,stream);
-	put_int(qhub[i]->time,stream);
-	put_int(qhub[i]->freq,stream);
-	put_int(qhub[i]->days,stream);
-	put_int(qhub[i]->node,stream);
-	put_str(qhub[i]->call,stream);
-	put_str(qhub[i]->pack,stream);
-	put_str(qhub[i]->unpack,stream);
-	put_int(qhub[i]->subs,stream);
-	for(j=0;j<qhub[i]->subs;j++) {
-		put_int(qhub[i]->conf[j],stream);
-		put_int(qhub[i]->sub[j],stream);
-		put_int(qhub[i]->mode[j],stream); }
-	n=0;
-	for(j=0;j<32;j++)
-		put_int(n,stream); }
-n=0;
-for(i=0;i<32;i++)
-    put_int(n,stream);
-
-/* PostLink Config */
-
-memset(str,0,11);
-fwrite(str,11,1,stream);	/* unused, used to be site name */
-put_int(sys_psnum,stream);
-
-put_int(total_phubs,stream);
-for(i=0;i<total_phubs;i++) {
-	put_str(phub[i]->name,stream);
-	put_int(phub[i]->time,stream);
-	put_int(phub[i]->freq,stream);
-	put_int(phub[i]->days,stream);
-	put_int(phub[i]->node,stream);
-	put_str(phub[i]->call,stream);
-	n=0;
-	for(j=0;j<32;j++)
-		put_int(n,stream); }
-
-put_str(sys_psname,stream);
-n=0;
-for(i=0;i<32;i++)
-    put_int(n,stream);
-
-put_str(sys_inetaddr,stream); /* Internet address */
-put_str(inetmail_sem,stream);
-put_int(inetmail_misc,stream);
-put_int(inetmail_cost,stream);
-
-fclose(stream);
-
-/* MUST BE AT END */
-
-if(!no_msghdr) {
-	backslash(data_dir);
-	sprintf(smb.file,"%sMAIL",data_dir);
-	if((x=smb_open(&smb))!=0) {
-		errormsg(WHERE,ERR_OPEN,smb.file,x);
-		return; }
-	if(!filelength(fileno(smb.shd_fp))) {
-		smb.status.max_crcs=mail_maxcrcs;
-		smb.status.max_msgs=MAX_SYSMAIL;
-		smb.status.max_age=mail_maxage;
-		smb.status.attr=SMB_EMAIL;
-		if((x=smb_create(&smb))!=0)
-			errormsg(WHERE,ERR_CREATE,smb.file,x);
-		smb_close(&smb);
-		return; }
-	if((x=smb_locksmbhdr(&smb))!=0) {
-		smb_close(&smb);
-		errormsg(WHERE,ERR_LOCK,smb.file,x);
-		return; }
-	if((x=smb_getstatus(&smb))!=0) {
-		smb_close(&smb);
-		errormsg(WHERE,ERR_READ,smb.file,x);
-		return; }
-	smb.status.max_msgs=MAX_SYSMAIL;
-	smb.status.max_crcs=mail_maxcrcs;
-	smb.status.max_age=mail_maxage;
-	if((x=smb_putstatus(&smb))!=0) {
-		smb_close(&smb);
-		errormsg(WHERE,ERR_WRITE,smb.file,x);
-		return; }
-	smb_close(&smb); }
-}
-
-void free_msgs_cfg()
-{
-	int i;
-
-for(i=0;i<total_grps;i++)
-	FREE(grp[i]);
-FREE(grp);
-grp=NULL;
-
-for(i=0;i<total_subs;i++)
-	FREE(sub[i]);
-FREE(sub);
-sub=NULL;
-
-FREE(faddr);
-total_faddrs=0;
-
-for(i=0;i<total_qhubs;i++) {
-	FREE(qhub[i]->mode);
-	FREE(qhub[i]->conf);
-	FREE(qhub[i]->sub);
-	FREE(qhub[i]); }
-FREE(qhub);
-qhub=NULL;
-
-for(i=0;i<total_phubs;i++)
-	FREE(phub[i]);
-FREE(phub);
-phub=NULL;
-
-}
-
diff --git a/src/sbbs2/scfg/wrcnf2.c b/src/sbbs2/scfg/wrcnf2.c
deleted file mode 100644
index d006ed3bb7..0000000000
--- a/src/sbbs2/scfg/wrcnf2.c
+++ /dev/null
@@ -1,494 +0,0 @@
-#line 2 "WRCNF2.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "scfg.h"
-
-extern int no_msghdr,all_msghdr;
-extern int no_dirchk;
-
-extern char *crlf;
-extern char nulbuf[];
-extern int	pslen;
-
-#define put_int(var,stream) fwrite(&var,1,sizeof(var),stream)
-#define put_str(var,stream) { pslen=strlen(var); \
-							fwrite(var,1,pslen > sizeof(var) \
-								? sizeof(var) : pslen ,stream); \
-							fwrite(nulbuf,1,pslen > sizeof(var) \
-                                ? 0 : sizeof(var)-pslen,stream); }
-
-void backup(char *org)
-{
-	char old[128],new[128];
-	int i,x;
-
-x=strlen(org)-1;
-if(x<=0)
-	return;
-strcpy(old,org);
-strcpy(new,org);
-for(i=backup_level;i;i--) {
-	new[x]=(i-1)+'0';
-	if(i==backup_level)
-		remove(new);
-	if(i==1) {
-		rename(org,new);
-		continue; }
-	old[x]=(i-2)+'0';
-	rename(old,new); }
-}
-
-
-void write_file_cfg()
-{
-	char	str[128],cmd[LEN_CMD+1],c;
-	int 	i,j,k,file;
-	short	n;
-	long	l=0;
-	FILE	*stream;
-
-upop("Writing FILE.CNF...");
-sprintf(str,"%sFILE.CNF",ctrl_dir);
-backup(str);
-
-if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1
-	|| (stream=fdopen(file,"wb"))==NULL) {
-	errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
-    return; }
-setvbuf(stream,NULL,_IOFBF,2048);
-
-put_int(min_dspace,stream);
-put_int(max_batup,stream);
-put_int(max_batdn,stream);
-put_int(max_userxfer,stream);
-put_int(l,stream);					/* unused */
-put_int(cdt_up_pct,stream);
-put_int(cdt_dn_pct,stream);
-put_int(l,stream);					/* unused */
-put_str(cmd,stream);
-put_int(leech_pct,stream);
-put_int(leech_sec,stream);
-n=0;
-for(i=0;i<32;i++)
-	put_int(n,stream);
-
-/* Extractable File Types */
-
-put_int(total_fextrs,stream);
-for(i=0;i<total_fextrs;i++) {
-	put_str(fextr[i]->ext,stream);
-	put_str(fextr[i]->cmd,stream);
-	put_str(fextr[i]->ar,stream);
-	n=0;
-	for(j=0;j<8;j++)
-		put_int(n,stream); }
-
-/* Compressable File Types */
-
-put_int(total_fcomps,stream);
-for(i=0;i<total_fcomps;i++) {
-	put_str(fcomp[i]->ext,stream);
-	put_str(fcomp[i]->cmd,stream);
-	put_str(fcomp[i]->ar,stream);
-	n=0;
-	for(j=0;j<8;j++)
-        put_int(n,stream); }
-
-/* Viewable File Types */
-
-put_int(total_fviews,stream);
-for(i=0;i<total_fviews;i++) {
-	put_str(fview[i]->ext,stream);
-	put_str(fview[i]->cmd,stream);
-	put_str(fview[i]->ar,stream);
-	n=0;
-	for(j=0;j<8;j++)
-        put_int(n,stream); }
-
-/* Testable File Types */
-
-put_int(total_ftests,stream);
-for(i=0;i<total_ftests;i++) {
-	put_str(ftest[i]->ext,stream);
-	put_str(ftest[i]->cmd,stream);
-	put_str(ftest[i]->workstr,stream);
-	put_str(ftest[i]->ar,stream);
-	n=0;
-	for(j=0;j<8;j++)
-        put_int(n,stream); }
-
-/* Download Events */
-
-put_int(total_dlevents,stream);
-for(i=0;i<total_dlevents;i++) {
-	put_str(dlevent[i]->ext,stream);
-	put_str(dlevent[i]->cmd,stream);
-	put_str(dlevent[i]->workstr,stream);
-	put_str(dlevent[i]->ar,stream);
-	n=0;
-	for(j=0;j<8;j++)
-        put_int(n,stream); }
-
-/* File Transfer Protocols */
-
-put_int(total_prots,stream);
-for(i=0;i<total_prots;i++) {
-	put_int(prot[i]->mnemonic,stream);
-	put_str(prot[i]->name,stream);
-	put_str(prot[i]->ulcmd,stream);
-	put_str(prot[i]->dlcmd,stream);
-	put_str(prot[i]->batulcmd,stream);
-	put_str(prot[i]->batdlcmd,stream);
-	put_str(prot[i]->blindcmd,stream);
-	put_str(prot[i]->bicmd,stream);
-	put_int(prot[i]->misc,stream);
-	put_str(prot[i]->ar,stream);
-	n=0;
-	for(j=0;j<8;j++)
-		put_int(n,stream); }
-
-/* Alternate File Paths */
-
-put_int(altpaths,stream);
-for(i=0;i<altpaths;i++) {
-	backslash(altpath[i]);
-	fwrite(altpath[i],LEN_DIR+1,1,stream);
-	n=0;
-	for(j=0;j<8;j++)
-		put_int(n,stream); }
-
-/* File Libraries */
-
-put_int(total_libs,stream);
-for(i=0;i<total_libs;i++) {
-	put_str(lib[i]->lname,stream);
-	put_str(lib[i]->sname,stream);
-	put_str(lib[i]->ar,stream);
-	n=0;
-	for(j=0;j<32;j++)
-		put_int(n,stream);
-	n=0xffff;
-	for(j=0;j<16;j++)
-		put_int(n,stream); }
-
-/* File Directories */
-
-put_int(total_dirs,stream);
-for(j=0;j<total_libs;j++)
-    for(i=0;i<total_dirs;i++)
-        if(dir[i]->lib==j) {
-			put_int(dir[i]->lib,stream);
-			put_str(dir[i]->lname,stream);
-			put_str(dir[i]->sname,stream);
-			put_str(dir[i]->code,stream);
-			if(dir[i]->data_dir[0])
-				backslash(dir[i]->data_dir);
-			md(dir[i]->data_dir);
-			put_str(dir[i]->data_dir,stream);
-			put_str(dir[i]->ar,stream);
-			put_str(dir[i]->ul_ar,stream);
-			put_str(dir[i]->dl_ar,stream);
-			put_str(dir[i]->op_ar,stream);
-			backslash(dir[i]->path);
-			put_str(dir[i]->path,stream);
-			if(dir[i]->misc&DIR_FCHK) {
-				strcpy(str,dir[i]->path);
-				md(str); }
-
-			put_str(dir[i]->upload_sem,stream);
-			put_int(dir[i]->maxfiles,stream);
-			put_str(dir[i]->exts,stream);
-			put_int(dir[i]->misc,stream);
-			put_int(dir[i]->seqdev,stream);
-			put_int(dir[i]->sort,stream);
-			put_str(dir[i]->ex_ar,stream);
-			put_int(dir[i]->maxage,stream);
-			put_int(dir[i]->up_pct,stream);
-			put_int(dir[i]->dn_pct,stream);
-			c=0;
-			put_int(c,stream);
-			n=0;
-			for(k=0;k<8;k++)
-				put_int(n,stream);
-			n=0xffff;
-			for(k=0;k<16;k++)
-				put_int(n,stream);
-			}
-
-/* Text File Sections */
-
-put_int(total_txtsecs,stream);
-for(i=0;i<total_txtsecs;i++) {
-	sprintf(str,"%sTEXT\\%s",data_dir,txtsec[i]->code);
-	md(str);
-	put_str(txtsec[i]->name,stream);
-	put_str(txtsec[i]->code,stream);
-	put_str(txtsec[i]->ar,stream);
-	n=0;
-	for(j=0;j<8;j++)
-		put_int(n,stream); }
-
-fclose(stream);
-}
-
-void free_file_cfg()
-{
-	int i;
-
-for(i=0;i<total_fextrs;i++)
-	FREE(fextr[i]);
-FREE(fextr);
-
-for(i=0;i<total_fcomps;i++)
-	FREE(fcomp[i]);
-FREE(fcomp);
-
-for(i=0;i<total_fviews;i++)
-	FREE(fview[i]);
-FREE(fview);
-
-for(i=0;i<total_ftests;i++)
-	FREE(ftest[i]);
-FREE(ftest);
-
-for(i=0;i<total_dlevents;i++)
-	FREE(dlevent[i]);
-FREE(dlevent);
-
-for(i=0;i<total_prots;i++)
-	FREE(prot[i]);
-FREE(prot);
-
-for(i=0;i<altpaths;i++)
-	FREE(altpath[i]);
-FREE(altpath);
-
-for(i=0;i<total_libs;i++)
-	FREE(lib[i]);
-FREE(lib);
-
-for(i=0;i<total_dirs;i++)
-	FREE(dir[i]);
-FREE(dir);
-
-for(i=0;i<total_txtsecs;i++)
-	FREE(txtsec[i]);
-FREE(txtsec);
-}
-
-
-void write_chat_cfg()
-{
-	char	str[128];
-	int 	i,j,file;
-	short	n;
-	FILE	*stream;
-
-upop("Writing CHAT.CNF...");
-sprintf(str,"%sCHAT.CNF",ctrl_dir);
-backup(str);
-
-if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1
-	|| (stream=fdopen(file,"wb"))==NULL) {
-	errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
-    return; }
-setvbuf(stream,NULL,_IOFBF,2048);
-
-put_int(total_gurus,stream);
-for(i=0;i<total_gurus;i++) {
-    put_str(guru[i]->name,stream);
-    put_str(guru[i]->code,stream);
-    put_str(guru[i]->ar,stream);
-    n=0;
-    for(j=0;j<8;j++)
-        put_int(n,stream);
-    }
-
-put_int(total_actsets,stream);
-for(i=0;i<total_actsets;i++)
-	put_str(actset[i]->name,stream);
-
-put_int(total_chatacts,stream);
-for(i=0;i<total_chatacts;i++) {
-	put_int(chatact[i]->actset,stream);
-	put_str(chatact[i]->cmd,stream);
-	put_str(chatact[i]->out,stream);
-	n=0;
-	for(j=0;j<8;j++)
-		put_int(n,stream);
-	}
-
-put_int(total_chans,stream);
-for(i=0;i<total_chans;i++) {
-	put_int(chan[i]->actset,stream);
-	put_str(chan[i]->name,stream);
-	put_str(chan[i]->code,stream);
-	put_str(chan[i]->ar,stream);
-	put_int(chan[i]->cost,stream);
-	put_int(chan[i]->guru,stream);
-	put_int(chan[i]->misc,stream);
-	n=0;
-	for(j=0;j<8;j++)
-		put_int(n,stream);
-	}
-
-put_int(total_pages,stream);
-for(i=0;i<total_pages;i++) {
-    put_int(page[i]->cmd,stream);
-    put_int(page[i]->ar,stream);
-    put_int(page[i]->misc,stream);
-    n=0;
-    for(j=0;j<8;j++)
-        put_int(n,stream);
-    }
-
-fclose(stream);
-}
-
-void free_chat_cfg()
-{
-	int i;
-
-for(i=0;i<total_actsets;i++)
-	FREE(actset[i]);
-FREE(actset);
-
-for(i=0;i<total_chatacts;i++)
-	FREE(chatact[i]);
-FREE(chatact);
-
-for(i=0;i<total_chans;i++)
-	FREE(chan[i]);
-FREE(chan);
-
-for(i=0;i<total_gurus;i++)
-	FREE(guru[i]);
-FREE(guru);
-
-for(i=0;i<total_pages;i++)
-	FREE(page[i]);
-FREE(page);
-
-}
-
-void write_xtrn_cfg()
-{
-	uchar	str[128],c;
-	int 	i,j,sec,file;
-	short	n;
-	long	l;
-	FILE	*stream;
-
-upop("Writing XTRN.CNF...");
-sprintf(str,"%sXTRN.CNF",ctrl_dir);
-backup(str);
-
-if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1
-	|| (stream=fdopen(file,"wb"))==NULL) {
-	errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
-    return; }
-setvbuf(stream,NULL,_IOFBF,2048);
-
-put_int(total_swaps,stream);
-for(i=0;i<total_swaps;i++)
-	put_str(swap[i]->cmd,stream);
-
-put_int(total_xedits,stream);
-for(i=0;i<total_xedits;i++) {
-	put_str(xedit[i]->name,stream);
-	put_str(xedit[i]->code,stream);
-	put_str(xedit[i]->lcmd,stream);
-	put_str(xedit[i]->rcmd,stream);
-	put_int(xedit[i]->misc,stream);
-	put_str(xedit[i]->ar,stream);
-	put_int(xedit[i]->type,stream);
-	c=0;
-	put_int(c,stream);
-	n=0;
-	for(j=0;j<7;j++)
-		put_int(n,stream);
-	}
-
-put_int(total_xtrnsecs,stream);
-for(i=0;i<total_xtrnsecs;i++) {
-	put_str(xtrnsec[i]->name,stream);
-	put_str(xtrnsec[i]->code,stream);
-	put_str(xtrnsec[i]->ar,stream);
-	n=0;
-	for(j=0;j<8;j++)
-		put_int(n,stream);
-	}
-
-put_int(total_xtrns,stream);
-for(sec=0;sec<total_xtrnsecs;sec++)
-	for(i=0;i<total_xtrns;i++) {
-		if(xtrn[i]->sec!=sec)
-			continue;
-		put_int(xtrn[i]->sec,stream);
-		put_str(xtrn[i]->name,stream);
-		put_str(xtrn[i]->code,stream);
-		put_str(xtrn[i]->ar,stream);
-		put_str(xtrn[i]->run_ar,stream);
-		put_int(xtrn[i]->type,stream);
-		put_int(xtrn[i]->misc,stream);
-		put_int(xtrn[i]->event,stream);
-		put_int(xtrn[i]->cost,stream);
-		put_str(xtrn[i]->cmd,stream);
-		put_str(xtrn[i]->clean,stream);
-		put_str(xtrn[i]->path,stream);
-		put_int(xtrn[i]->textra,stream);
-		put_int(xtrn[i]->maxtime,stream);
-		n=0;
-		for(j=0;j<7;j++)
-			put_int(n,stream);
-		}
-
-put_int(total_events,stream);
-for(i=0;i<total_events;i++) {
-	put_str(event[i]->code,stream);
-	put_str(event[i]->cmd,stream);
-	put_int(event[i]->days,stream);
-	put_int(event[i]->time,stream);
-	put_int(event[i]->node,stream);
-	put_int(event[i]->misc,stream);
-	put_int(event[i]->dir,stream);
-	n=0;
-	for(j=0;j<8;j++)
-		put_int(n,stream);
-	}
-
-put_int(total_os2pgms,stream);
-for(i=0;i<total_os2pgms;i++)
-	put_str(os2pgm[i]->name,stream);
-for(i=0;i<total_os2pgms;i++)
-	put_int(os2pgm[i]->misc,stream);
-
-fclose(stream);
-}
-
-void free_xtrn_cfg()
-{
-	int i;
-
-for(i=0;i<total_swaps;i++)
-	FREE(swap[i]);
-FREE(swap);
-
-for(i=0;i<total_xedits;i++)
-	FREE(xedit[i]);
-FREE(xedit);
-
-for(i=0;i<total_xtrnsecs;i++)
-	FREE(xtrnsec[i]);
-FREE(xtrnsec);
-
-for(i=0;i<total_xtrns;i++)
-	FREE(xtrn[i]);
-FREE(xtrn);
-
-for(i=0;i<total_events;i++)
-	FREE(event[i]);
-FREE(event);
-
-}
diff --git a/src/sbbs2/scfglib.h b/src/sbbs2/scfglib.h
deleted file mode 100644
index b0a5c22d4f..0000000000
--- a/src/sbbs2/scfglib.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* SCFGLIB.H */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#ifndef _SCFGLIB_H
-#define _SCFGLIB_H
-
-#define SAVE_MEMORY
-
-#define get_int(var,stream) { if(!fread(&var,1,sizeof(var),stream)) \
-								memset(&var,0,sizeof(var)); \
-							  offset+=sizeof(var); }
-#define get_str(var,stream) { if(!fread(var,1,sizeof(var),stream)) \
-								memset(var,0,sizeof(var)); \
-                              offset+=sizeof(var); }
-
-typedef struct {
-    char    *openerr,
-            *reading,
-            *readit,
-            *allocerr,
-            *error;
-            } read_cfg_text_t;
-
-char *get_alloc(long *offset, char *outstr, int maxlen, FILE *instream);
-void allocerr(read_cfg_text_t txt, long offset, char *fname, uint size);
-char *readline(long *offset, char *str, int maxlen, FILE *stream);
-void read_node_cfg(read_cfg_text_t txt);
-void read_main_cfg(read_cfg_text_t txt);
-void read_text_cfg(read_cfg_text_t txt);
-void read_xtrn_cfg(read_cfg_text_t txt);
-void read_file_cfg(read_cfg_text_t txt);
-void read_msgs_cfg(read_cfg_text_t txt);
-void read_attr_cfg(read_cfg_text_t txt);
-void read_chat_cfg(read_cfg_text_t txt);
-long aftol(char *str);              /* Converts flag string to long */
-char *ltoaf(long l, char *str);     /* Converts long to flag string */
-faddr_t atofaddr(char *str);    /* ASCII text to FidoNet address conversion */
-char *faddrtoa(faddr_t addr);   /* FidoNet address to ASCII text conversion */
-char chardupe(char *str);       /* Searches for duplicate chars in str */
-int  attrstr(char *str);		/* Convert ATTR string into attribute int */
-
-#endif	/* Don't add anything after this line */
diff --git a/src/sbbs2/scfglib1.c b/src/sbbs2/scfglib1.c
deleted file mode 100644
index aaabc373f9..0000000000
--- a/src/sbbs2/scfglib1.c
+++ /dev/null
@@ -1,874 +0,0 @@
-#line 1 "SCFGLIB1.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-#include "scfglib.h"
-
-void prep_path(char *path)
-{
-	char str[LEN_DIR*2];
-	int i;
-
-if(!path[0])
-	return;
-if(path[0]!='\\' && path[1]!=':')           /* Relative to NODE directory */
-	sprintf(str,"%s%s",node_dir,path);
-else
-	strcpy(str,path);
-i=strlen(str);
-if(str[i-1]!=':' && str[i-1]!='\\')
-	strcat(str,"\\");
-strcat(str,".");                // Change C: to C:. and C:\SBBS\ to C:\SBBS\.
-_fullpath(path,str,LEN_DIR+1);	// Change C:\SBBS\NODE1\..\EXEC to C:\SBBS\EXEC
-i=strlen(path);
-if(i && path[i-1]!='\\')
-	strcat(path,"\\");
-}
-
-char *get_alloc(long *offset, char *outstr, int maxlen, FILE *instream)
-{
-
-#ifdef SCFG
-	fread(outstr,1,maxlen+1,instream);
-	(*offset)+=maxlen+1;
-#else
-	char str[257];
-
-	fread(str,1,maxlen+1,instream);
-//	  lprintf("%s %d %p\r\n",__FILE__,__LINE__,offset);
-	(*offset)+=maxlen+1;	// this line was commented out (04/12/97) why?
-	if(!str[0]) 			/* Save memory */
-		return(scfgnulstr);
-	if((outstr=(char *)MALLOC(strlen(str)+1))==NULL)
-		return(NULL);
-	strcpy(outstr,str);
-#endif
-
-return(outstr);
-}
-
-#ifdef SCFG 	/* SCFG allocate max length */
-	#define readline_alloc(l,s,m,i) readline(l,s,m,i)
-#else
-	char *readline_alloc(long *offset, char *outstr, int maxline
-		, FILE *instream);
-	#define readline_alloc(l,s,m,i) s=readline_alloc(l,s,m,i)
-	#define get_alloc(o,s,l,i) s=get_alloc(o,s,l,i)
-#endif
-
-/***********************************************************/
-/* These functions are called from here and must be linked */
-/***********************************************************/
-/***
-	nopen()
-	truncsp()
-***/
-
-void allocerr(read_cfg_text_t txt, long offset, char *fname, uint size)
-{
-lprintf(txt.error,offset,fname);
-lprintf(txt.allocerr,size);
-bail(1);
-}
-
-#ifndef NO_NODE_CFG
-
-/****************************************************************************/
-/* Reads in NODE.CNF and initializes the associated variables				*/
-/****************************************************************************/
-void read_node_cfg(read_cfg_text_t txt)
-{
-	char	c,str[256],cmd[64],fname[13],*p;
-	int 	i;
-	short	n;
-	long	offset=0;
-	FILE	*instream;
-
-strcpy(fname,"NODE.CNF");
-sprintf(str,"%s%s",node_dir,fname);
-if((instream=fnopen(&i,str,O_RDONLY))==NULL) {
-	lprintf(txt.openerr,str);
-#ifdef SBBS
-	lprintf("\r\nSBBS must be run from a NODE directory (e.g. ");
-	lclatr(WHITE);
-	lprintf("C:\\SBBS\\NODE1");
-	lclatr(LIGHTGRAY);
-	lprintf(").\r\n");
-#endif
-	bail(1); }
-
-lprintf(txt.reading,fname);
-get_int(node_num,instream);
-if(!node_num) {
-	lprintf(txt.error,offset,fname);
-	lprintf("Node number must be non-zero\r\n");
-	bail(1); }
-get_str(node_name,instream);
-get_str(node_phone,instream);
-get_str(node_comspec,instream);
-if(!node_comspec[0])
-	strcpy(node_comspec,"C:\\OS2\\MDOS\\COMMAND.COM");
-get_int(node_misc,instream);
-get_int(node_ivt,instream);
-get_int(node_swap,instream);
-get_str(node_swapdir,instream);
-#ifndef SCFG
-if(!node_swapdir[0])
-	strcpy(node_swapdir,node_dir);
-else
-	prep_path(node_swapdir);
-#endif
-get_int(node_valuser,instream);
-get_int(node_minbps,instream);
-#ifdef SCFG
-get_str(node_ar,instream);
-#else
-fread(str,1,LEN_ARSTR+1,instream);
-offset+=LEN_ARSTR+1;
-node_ar=arstr(0,str);
-#endif
-get_int(node_dollars_per_call,instream);
-get_str(node_editor,instream);
-get_str(node_viewer,instream);
-get_str(node_daily,instream);
-get_int(c,instream);
-if(c) node_scrnlen=c;
-get_int(node_scrnblank,instream);
-get_str(ctrl_dir,instream); 				/* ctrl directory */
-get_str(text_dir,instream); 				/* text directory */
-get_str(temp_dir,instream); 				/* temp directory */
-if(!temp_dir[0])
-	strcpy(temp_dir,"TEMP");
-
-#ifndef SCFG
-prep_path(ctrl_dir);
-prep_path(text_dir);
-prep_path(temp_dir);
-#endif
-
-for(i=0;i<10;i++) { 						/* WFC 0-9 DOS commands */
-	get_alloc(&offset,wfc_cmd[i],LEN_CMD,instream); }
-for(i=0;i<12;i++) { 						/* WFC F1-F12 shrinking DOS cmds */
-	get_alloc(&offset,wfc_scmd[i],LEN_CMD,instream); }
-get_str(mdm_hang,instream);
-get_int(node_sem_check,instream);
-if(!node_sem_check) node_sem_check=60;
-get_int(node_stat_check,instream);
-if(!node_stat_check) node_stat_check=10;
-get_str(scfg_cmd,instream);
-if(!scfg_cmd[0])
-	strcpy(scfg_cmd,"%!scfg %k");
-get_int(sec_warn,instream);
-if(!sec_warn)
-	sec_warn=180;
-get_int(sec_hangup,instream);
-if(!sec_hangup)
-	sec_hangup=300;
-for(i=0;i<188;i++) {				/* Unused - initialized to NULL */
-	fread(&n,1,2,instream);
-	offset+=2; }
-for(i=0;i<256;i++) {				/* Unused - initialized to 0xff */
-	fread(&n,1,2,instream);
-	offset+=2; }
-
-/***************/
-/* Modem Stuff */
-/***************/
-
-get_int(com_port,instream);
-get_int(com_irq,instream);
-get_int(com_base,instream);
-get_int(com_rate,instream);
-get_int(mdm_misc,instream);
-get_str(mdm_init,instream);
-get_str(mdm_spec,instream);
-get_str(mdm_term,instream);
-get_str(mdm_dial,instream);
-get_str(mdm_offh,instream);
-get_str(mdm_answ,instream);
-get_int(mdm_reinit,instream);
-get_int(mdm_ansdelay,instream);
-get_int(mdm_rings,instream);
-
-get_int(mdm_results,instream);
-
-if(mdm_results) {
-	if((mdm_result=(mdm_result_t *)MALLOC(sizeof(mdm_result_t)*mdm_results))
-		==NULL)
-	allocerr(txt,offset,fname,sizeof(mdm_result_t *)*mdm_results); }
-else
-	mdm_result=NULL;
-
-for(i=0;i<mdm_results;i++) {
-	if(feof(instream)) break;
-	get_int(mdm_result[i].code,instream);
-	get_int(mdm_result[i].rate,instream);
-	get_int(mdm_result[i].cps,instream);
-	get_alloc(&offset,mdm_result[i].str,LEN_MODEM,instream); }
-mdm_results=i;
-fclose(instream);
-lprintf(txt.readit,fname);
-}
-
-#endif
-
-#ifndef NO_MAIN_CFG
-
-/****************************************************************************/
-/* Reads in MAIN.CNF and initializes the associated variables				*/
-/****************************************************************************/
-void read_main_cfg(read_cfg_text_t txt)
-{
-	char	str[256],fname[13],*p,c;
-	int 	file;
-	short	i,j,n;
-	long	offset=0;
-	FILE	*instream;
-
-strcpy(fname,"MAIN.CNF");
-sprintf(str,"%s%s",ctrl_dir,fname);
-if((instream=fnopen(&file,str,O_RDONLY))==NULL) {
-	lprintf(txt.openerr,str);
-	bail(1); }
-
-lprintf(txt.reading,fname);
-get_str(sys_name,instream);
-get_str(sys_id,instream);
-get_str(sys_location,instream);
-get_str(sys_phonefmt,instream);
-get_str(sys_op,instream);
-get_str(sys_guru,instream);
-get_str(sys_pass,instream);
-get_int(sys_nodes,instream);
-
-if(!sys_nodes || sys_nodes<node_num || sys_nodes>MAX_NODES) {
-	lprintf(txt.error,offset,fname);
-	if(!sys_nodes)
-		lprintf("Total nodes on system must be non-zero.\r\n");
-	else if(sys_nodes>MAX_NODES)
-		lprintf("Total nodes exceeds %u.\r\n",MAX_NODES);
-	else
-		lprintf("Total nodes (%u) < node number in NODE.CNF (%u)\r\n"
-			,sys_nodes,node_num);
-	bail(1); }
-
-if((node_path=(char **)MALLOC(sizeof(char *)*sys_nodes))==NULL)
-	allocerr(txt,offset,fname,sizeof(char *)*sys_nodes);
-
-for(i=0;i<sys_nodes;i++) {
-	if(feof(instream)) break;
-	fread(str,LEN_DIR+1,1,instream);
-	offset+=LEN_DIR+1;
-	if((node_path[i]=(char *)MALLOC(strlen(str)+1))==NULL)
-		allocerr(txt,offset,fname,strlen(str)+1);
-	strcpy(node_path[i],str); }
-
-get_str(data_dir,instream); 			  /* data directory */
-get_str(exec_dir,instream); 			  /* exec directory */
-
-#ifndef SCFG
-prep_path(data_dir);
-prep_path(exec_dir);
-#endif
-
-get_str(sys_logon,instream);
-get_str(sys_logout,instream);
-get_str(sys_daily,instream);
-get_int(sys_timezone,instream);
-get_int(sys_misc,instream);
-get_int(sys_lastnode,instream);
-get_int(sys_autonode,instream);
-get_int(uq,instream);
-get_int(sys_pwdays,instream);
-get_int(sys_deldays,instream);
-get_int(sys_exp_warn,instream); 	/* Days left till expiration warning */
-get_int(sys_autodel,instream);
-get_int(sys_def_stat,instream); 	/* default status line */
-
-#ifdef SCFG
-get_str(sys_chat_ar,instream);
-#else
-fread(str,1,LEN_ARSTR+1,instream);
-offset+=LEN_ARSTR+1;
-sys_chat_ar=arstr(0,str);
-#endif
-
-get_int(cdt_min_value,instream);
-get_int(max_minutes,instream);
-get_int(cdt_per_dollar,instream);
-get_str(new_pass,instream);
-get_str(new_magic,instream);
-get_str(new_sif,instream);
-get_str(new_sof,instream);
-if(!new_sof[0])		/* if output not specified, use input file */
-	strcpy(new_sof,new_sif);
-
-/*********************/
-/* New User Settings */
-/*********************/
-
-get_int(new_level,instream);
-get_int(new_flags1,instream);
-get_int(new_flags2,instream);
-get_int(new_flags3,instream);
-get_int(new_flags4,instream);
-get_int(new_exempt,instream);
-get_int(new_rest,instream);
-get_int(new_cdt,instream);
-get_int(new_min,instream);
-get_str(new_xedit,instream);
-get_int(new_expire,instream);
-get_int(new_shell,instream);
-get_int(new_misc,instream);
-get_int(new_prot,instream);
-if(new_prot<SP)
-	new_prot=SP;
-get_int(c,instream);
-for(i=0;i<7;i++)
-	get_int(n,instream);
-
-/*************************/
-/* Expired User Settings */
-/*************************/
-
-get_int(expired_level,instream);
-get_int(expired_flags1,instream);
-get_int(expired_flags2,instream);
-get_int(expired_flags3,instream);
-get_int(expired_flags4,instream);
-get_int(expired_exempt,instream);
-get_int(expired_rest,instream);
-
-get_str(logon_mod,instream);
-get_str(logoff_mod,instream);
-get_str(newuser_mod,instream);
-get_str(login_mod,instream);
-if(!login_mod[0]) strcpy(login_mod,"LOGIN");
-get_str(logout_mod,instream);
-get_str(sync_mod,instream);
-get_str(expire_mod,instream);
-get_int(c,instream);
-
-for(i=0;i<224;i++)					/* unused - initialized to NULL */
-	get_int(n,instream);
-for(i=0;i<256;i++)					/* unused - initialized to 0xff */
-	get_int(n,instream);
-
-/*******************/
-/* Validation Sets */
-/*******************/
-
-for(i=0;i<10 && !feof(instream);i++) {
-	get_int(val_level[i],instream);
-	get_int(val_expire[i],instream);
-	get_int(val_flags1[i],instream);
-	get_int(val_flags2[i],instream);
-	get_int(val_flags3[i],instream);
-	get_int(val_flags4[i],instream);
-	get_int(val_cdt[i],instream);
-	get_int(val_exempt[i],instream);
-	get_int(val_rest[i],instream);
-	for(j=0;j<8;j++)
-		get_int(n,instream); }
-
-/***************************/
-/* Security Level Settings */
-/***************************/
-
-for(i=0;i<100 && !feof(instream);i++) {
-	get_int(level_timeperday[i],instream);
-	if(level_timeperday[i]>500)
-		level_timeperday[i]=500;
-	get_int(level_timepercall[i],instream);
-	if(level_timepercall[i]>500)
-		level_timepercall[i]=500;
-	get_int(level_callsperday[i],instream);
-	get_int(level_freecdtperday[i],instream);
-	get_int(level_linespermsg[i],instream);
-	get_int(level_postsperday[i],instream);
-	get_int(level_emailperday[i],instream);
-	get_int(level_misc[i],instream);
-	get_int(level_expireto[i],instream);
-	get_int(c,instream);
-	for(j=0;j<5;j++)
-		get_int(n,instream); }
-if(i!=100) {
-	lprintf(txt.error,offset,fname);
-	lprintf("Insufficient User Level Information\r\n"
-		"%d user levels read, 100 needed.\r\n",i);
-	bail(1); }
-
-get_int(total_shells,instream);
-#ifdef SBBS
-if(!total_shells) {
-	lprintf(txt.error,offset,fname);
-	lprintf("At least one command shell must be configured.\r\n");
-	bail(1); }
-#endif
-
-if(total_shells) {
-	if((shell=(shell_t **)MALLOC(sizeof(shell_t *)*total_shells))==NULL)
-		allocerr(txt,offset,fname,sizeof(shell_t *)*total_shells); }
-else
-	shell=NULL;
-
-for(i=0;i<total_shells;i++) {
-	if(feof(instream)) break;
-	if((shell[i]=(shell_t *)MALLOC(sizeof(shell_t)))==NULL)
-		allocerr(txt,offset,fname,sizeof(shell_t));
-	memset(shell[i],0,sizeof(shell_t));
-
-	get_alloc(&offset,shell[i]->name,40,instream);
-	get_str(shell[i]->code,instream);
-#ifdef SCFG
-	get_str(shell[i]->ar,instream);
-#else
-	fread(str,1,LEN_ARSTR+1,instream);
-	offset+=LEN_ARSTR+1;
-	shell[i]->ar=arstr(0,str);
-#endif
-	get_int(shell[i]->misc,instream);
-	for(j=0;j<8;j++)
-		get_int(n,instream);
-	}
-total_shells=i;
-
-
-fclose(instream);
-lprintf(txt.readit,fname);
-}
-
-#endif
-
-#ifndef NO_MSGS_CFG
-
-
-/****************************************************************************/
-/* Reads in MSGS.CNF and initializes the associated variables				*/
-/****************************************************************************/
-void read_msgs_cfg(read_cfg_text_t txt)
-{
-	char	str[256],fname[13],tmp[128],c;
-	int 	file;
-	short	i,j,k,l,n;
-	long	offset=0;
-	FILE	*instream;
-
-#ifndef SCFG
-
-sprintf(data_dir_subs,"%sSUBS\\",data_dir);
-prep_path(data_dir_subs);
-
-#endif
-
-strcpy(fname,"MSGS.CNF");
-sprintf(str,"%s%s",ctrl_dir,fname);
-if((instream=fnopen(&file,str,O_RDONLY))==NULL) {
-	lprintf(txt.openerr,str);
-	bail(1); }
-
-lprintf(txt.reading,fname);
-
-/*************************/
-/* General Message Stuff */
-/*************************/
-
-get_int(max_qwkmsgs,instream);
-get_int(mail_maxcrcs,instream);
-get_int(mail_maxage,instream);
-#ifdef SCFG
-	get_str(preqwk_ar,instream);
-#else
-	fread(str,1,LEN_ARSTR+1,instream);
-	offset+=LEN_ARSTR+1;
-	preqwk_ar=arstr(0,str);
-#endif
-get_int(smb_retry_time,instream);	 /* odd byte */
-if(!smb_retry_time)
-	smb_retry_time=30;
-for(i=0;i<235;i++)	/* NULL */
-	get_int(n,instream);
-for(i=0;i<256;i++)	/* 0xff */
-    get_int(n,instream);
-
-
-/******************/
-/* Message Groups */
-/******************/
-
-get_int(total_grps,instream);
-
-
-if(total_grps) {
-	if((grp=(grp_t **)MALLOC(sizeof(grp_t *)*total_grps))==NULL)
-		allocerr(txt,offset,fname,sizeof(grp_t *)*total_grps); }
-else
-	grp=NULL;
-
-
-#ifdef SBBS
-
-if(total_grps) {
-
-	if((cursub=(uint *)MALLOC(sizeof(uint)*total_grps))==NULL)
-		allocerr(txt,offset,fname,sizeof(uint)*total_grps);
-
-	if((usrgrp=(uint *)MALLOC(sizeof(uint)*total_grps))==NULL)
-		allocerr(txt,offset,fname,sizeof(uint)*total_grps);
-
-	if((usrsubs=(uint *)MALLOC(sizeof(uint)*total_grps))==NULL)
-		allocerr(txt,offset,fname,sizeof(uint)*total_grps);
-
-	if((usrsub=(uint **)MALLOC(sizeof(uint *)*total_grps))==NULL)
-		allocerr(txt,offset,fname,sizeof(uint *)*total_grps); }
-
-#endif
-
-for(i=0;i<total_grps;i++) {
-
-	if(feof(instream)) break;
-	if((grp[i]=(grp_t *)MALLOC(sizeof(grp_t)))==NULL)
-		allocerr(txt,offset,fname,sizeof(grp_t));
-	memset(grp[i],0,sizeof(grp_t));
-
-	get_alloc(&offset,grp[i]->lname,LEN_GLNAME,instream);
-	get_alloc(&offset,grp[i]->sname,LEN_GSNAME,instream);
-
-#if !defined(SCFG) && defined(SAVE_MEMORY)	  /* Save memory */
-	if(!strcmp(grp[i]->lname,grp[i]->sname) && grp[i]->sname!=scfgnulstr) {
-		FREE(grp[i]->sname);
-		grp[i]->sname=grp[i]->lname; }
-#endif
-
-#ifdef SCFG
-	get_str(grp[i]->ar,instream);
-#else
-	fread(str,1,LEN_ARSTR+1,instream);
-	offset+=LEN_ARSTR+1;
-	grp[i]->ar=arstr(0,str);
-#endif
-	for(j=0;j<48;j++)
-		get_int(n,instream);
-	}
-total_grps=i;
-
-/**********************/
-/* Message Sub-boards */
-/**********************/
-
-get_int(total_subs,instream);
-
-if(total_subs) {
-	if((sub=(sub_t **)MALLOC(sizeof(sub_t *)*total_subs))==NULL)
-		allocerr(txt,offset,fname,sizeof(sub_t *)*total_subs); }
-else
-	sub=NULL;
-
-#ifdef SBBS
-
-if(total_subs) {
-
-	if((sub_misc=(char *)MALLOC(sizeof(char)*total_subs))==NULL)
-		allocerr(txt,offset,fname,sizeof(char)*total_subs);
-
-	if((sub_ptr=(ulong *)MALLOC(sizeof(ulong)*total_subs))==NULL)
-		allocerr(txt,offset,fname,sizeof(ulong)*total_subs);
-
-	if((sub_last=(ulong *)MALLOC(sizeof(ulong)*total_subs))==NULL)
-		allocerr(txt,offset,fname,sizeof(ulong)*total_subs); }
-
-#endif
-
-for(i=0;i<total_subs;i++) {
-	if(feof(instream)) break;
-	if((sub[i]=(sub_t *)MALLOC(sizeof(sub_t)))==NULL)
-		allocerr(txt,offset,fname,sizeof(sub_t));
-	memset(sub[i],0,sizeof(sub_t));
-
-	get_int(sub[i]->grp,instream);
-	get_alloc(&offset,sub[i]->lname,LEN_SLNAME,instream);
-	get_alloc(&offset,sub[i]->sname,LEN_SSNAME,instream);
-
-#if !defined(SCFG) && defined(SAVE_MEMORY) /* Save memory */
-	if(!strcmp(sub[i]->lname,sub[i]->sname) && sub[i]->sname!=scfgnulstr) {
-		FREE(sub[i]->sname);
-		sub[i]->sname=sub[i]->lname; }
-#endif
-
-	get_alloc(&offset,sub[i]->qwkname,10,instream);
-
-#if !defined(SCFG) && defined(SAVE_MEMORY)	/* Save memory */
-	if(!strcmp(sub[i]->qwkname,sub[i]->sname) && sub[i]->qwkname!=scfgnulstr) {
-		FREE(sub[i]->qwkname);
-		sub[i]->qwkname=sub[i]->sname; }
-#endif
-
-	get_str(sub[i]->code,instream);
-
-#ifdef SCFG
-	get_str(sub[i]->data_dir,instream);
-#else
-	fread(str,LEN_DIR+1,1,instream);   /* substitute data dir */
-	offset+=LEN_DIR+1;
-	if(str[0]) {
-		prep_path(str);
-		if((sub[i]->data_dir=(char *)MALLOC(strlen(str)+1))==NULL)
-			allocerr(txt,offset,fname,strlen(str)+1);
-		strcpy(sub[i]->data_dir,str); }
-	else
-		sub[i]->data_dir=data_dir_subs;
-#endif
-
-
-#ifdef SCFG
-	get_str(sub[i]->ar,instream);
-	get_str(sub[i]->read_ar,instream);
-	get_str(sub[i]->post_ar,instream);
-	get_str(sub[i]->op_ar,instream);
-#else
-	fread(str,1,LEN_ARSTR+1,instream);
-	offset+=LEN_ARSTR+1;
-	sub[i]->ar=arstr(0,str);
-	fread(str,1,LEN_ARSTR+1,instream);
-	offset+=LEN_ARSTR+1;
-	sub[i]->read_ar=arstr(0,str);
-	fread(str,1,LEN_ARSTR+1,instream);
-	offset+=LEN_ARSTR+1;
-	sub[i]->post_ar=arstr(0,str);
-	fread(str,1,LEN_ARSTR+1,instream);
-	offset+=LEN_ARSTR+1;
-	sub[i]->op_ar=arstr(0,str);
-#endif
-	get_int(sub[i]->misc,instream);
-
-
-#ifdef SCFG
-	get_str(sub[i]->tagline,instream);
-#else
-	fread(str,81,1,instream);	/* substitute tagline */
-	offset+=81;
-	if(str[0]) {
-		if((sub[i]->tagline=(char *)MALLOC(strlen(str)+1))==NULL)
-			allocerr(txt,offset,fname,strlen(str)+1);
-		strcpy(sub[i]->tagline,str); }
-	else
-		sub[i]->tagline=qnet_tagline;
-#endif
-
-#ifdef SCFG
-	get_str(sub[i]->origline,instream);
-#else
-	fread(str,1,51,instream);	/* substitute origin line */
-	offset+=51;
-	if(str[0]) {
-		if((sub[i]->origline=(char *)MALLOC(strlen(str)+1))==NULL)
-			allocerr(txt,offset,fname,strlen(str)+1);
-		strcpy(sub[i]->origline,str); }
-	else
-		sub[i]->origline=origline;
-#endif
-
-#ifdef SCFG
-	get_str(sub[i]->echomail_sem,instream);
-#else
-	fread(str,1,LEN_DIR+1,instream);   /* substitute echomail semaphore */
-	offset+=LEN_DIR+1;
-	if(str[0]) {
-		if((sub[i]->echomail_sem=(char *)MALLOC(strlen(str)+1))==NULL)
-			allocerr(txt,offset,fname,strlen(str)+1);
-		strcpy(sub[i]->echomail_sem,str); }
-	else
-		sub[i]->echomail_sem=echomail_sem;
-#endif
-	fread(str,1,LEN_DIR+1,instream);   /* substitute EchoMail path */
-	offset+=LEN_DIR+1;
-#ifndef SBBS
-	backslash(str);
-	strcpy(sub[i]->echopath,str);
-#endif
-	get_int(sub[i]->faddr,instream);			/* FidoNet address */
-
-	get_int(sub[i]->maxmsgs,instream);
-	get_int(sub[i]->maxcrcs,instream);
-	get_int(sub[i]->maxage,instream);
-	get_int(sub[i]->ptridx,instream);
-#ifdef SBBS
-	for(j=0;j<i;j++)
-		if(sub[i]->ptridx==sub[j]->ptridx) {
-			lprintf(txt.error,offset,fname);
-			lprintf("Duplicate pointer index for subs #%d and #%d\r\n"
-				,i+1,j+1);
-			bail(1); }
-#endif
-
-#ifdef SCFG
-	get_str(sub[i]->mod_ar,instream);
-#else
-	fread(str,1,LEN_ARSTR+1,instream);
-	offset+=LEN_ARSTR+1;
-	sub[i]->mod_ar=arstr(0,str);
-#endif
-	get_int(sub[i]->qwkconf,instream);
-	get_int(c,instream);
-	for(j=0;j<26;j++)
-		get_int(n,instream);
-	}
-total_subs=i;
-
-#ifdef SBBS
-for(i=l=0;i<total_grps;i++) {
-	for(j=k=0;j<total_subs;j++)
-		if(sub[j]->grp==i)
-			k++;	/* k = number of subs per grp[i] */
-	if(k>l) l=k; }	/* l = the largest number of subs per grp */
-if(l)
-	for(i=0;i<total_grps;i++)
-		if((usrsub[i]=(uint *)MALLOC(sizeof(uint)*l))==NULL)
-			allocerr(txt,offset,fname,sizeof(uint)*l);
-
-if(sys_status&SS_INITIAL) {
-	fclose(instream);
-	lprintf(txt.readit,fname);
-	return; }
-#endif
-
-/***********/
-/* FidoNet */
-/***********/
-
-get_int(total_faddrs,instream);
-
-if(total_faddrs) {
-	if((faddr=(faddr_t *)MALLOC(sizeof(faddr_t)*total_faddrs))==NULL)
-		allocerr(txt,offset,fname,sizeof(faddr_t)*total_faddrs); }
-else
-	faddr=NULL;
-
-for(i=0;i<total_faddrs;i++)
-	get_int(faddr[i],instream);
-
-get_str(origline,instream);
-get_str(netmail_sem,instream);
-get_str(echomail_sem,instream);
-get_str(netmail_dir,instream);
-get_str(echomail_dir,instream);
-get_str(fidofile_dir,instream);
-get_int(netmail_misc,instream);
-get_int(netmail_cost,instream);
-get_int(dflt_faddr,instream);
-for(i=0;i<28;i++)
-    get_int(n,instream);
-
-
-/**********/
-/* QWKnet */
-/**********/
-
-get_str(qnet_tagline,instream);
-
-get_int(total_qhubs,instream);
-
-if(total_qhubs) {
-	if((qhub=(qhub_t **)MALLOC(sizeof(qhub_t *)*total_qhubs))==NULL)
-		allocerr(txt,offset,fname,sizeof(qhub_t*)*total_qhubs); }
-else
-	qhub=NULL;
-
-for(i=0;i<total_qhubs;i++) {
-    if(feof(instream)) break;
-	if((qhub[i]=(qhub_t *)MALLOC(sizeof(qhub_t)))==NULL)
-        allocerr(txt,offset,fname,sizeof(qhub_t));
-    memset(qhub[i],0,sizeof(qhub_t));
-
-	get_str(qhub[i]->id,instream);
-	get_int(qhub[i]->time,instream);
-	get_int(qhub[i]->freq,instream);
-	get_int(qhub[i]->days,instream);
-	get_int(qhub[i]->node,instream);
-	get_alloc(&offset,qhub[i]->call,LEN_CMD,instream);
-	get_alloc(&offset,qhub[i]->pack,LEN_CMD,instream);
-	get_alloc(&offset,qhub[i]->unpack,LEN_CMD,instream);
-	get_int(k,instream);
-
-	if(k) {
-		if((qhub[i]->sub=(ushort *)MALLOC(sizeof(ushort)*k))==NULL)
-			allocerr(txt,offset,fname,sizeof(uint)*k);
-		if((qhub[i]->conf=(ushort *)MALLOC(sizeof(ushort)*k))==NULL)
-			allocerr(txt,offset,fname,sizeof(ushort)*k);
-		if((qhub[i]->mode=(uchar *)MALLOC(sizeof(uchar)*k))==NULL)
-			allocerr(txt,offset,fname,sizeof(uchar)*k); }
-
-	for(j=0;j<k;j++) {
-		if(feof(instream)) break;
-		get_int(qhub[i]->conf[qhub[i]->subs],instream);
-		get_int(qhub[i]->sub[qhub[i]->subs],instream);
-		get_int(qhub[i]->mode[qhub[i]->subs],instream);
-		if(qhub[i]->sub[qhub[i]->subs]<total_subs)
-            sub[qhub[i]->sub[qhub[i]->subs]]->misc|=SUB_QNET;
-		else
-			continue;
-		if(qhub[i]->sub[qhub[i]->subs]!=INVALID_SUB)
-			qhub[i]->subs++; }
-	for(j=0;j<32;j++)
-		get_int(n,instream); }
-
-total_qhubs=i;
-
-for(j=0;j<32;j++)
-	get_int(n,instream);
-
-/************/
-/* PostLink */
-/************/
-
-fread(str,11,1,instream);		/* Unused - used to be Site Name */
-offset+=11;
-get_int(sys_psnum,instream);	/* Site Number */
-get_int(total_phubs,instream);
-
-if(total_phubs) {
-	if((phub=(phub_t **)MALLOC(sizeof(phub_t *)*total_phubs))==NULL)
-		allocerr(txt,offset,fname,sizeof(phub_t*)*total_phubs); }
-else
-	phub=NULL;
-
-for(i=0;i<total_phubs;i++) {
-    if(feof(instream)) break;
-    if((phub[i]=(phub_t *)MALLOC(sizeof(phub_t)))==NULL)
-        allocerr(txt,offset,fname,sizeof(phub_t));
-	memset(phub[i],0,sizeof(phub_t));
-#ifdef SCFG
-	get_str(phub[i]->name,instream);
-#else
-	fread(str,11,1,instream);
-	offset+=11;
-#endif
-	get_int(phub[i]->time,instream);
-	get_int(phub[i]->freq,instream);
-	get_int(phub[i]->days,instream);
-	get_int(phub[i]->node,instream);
-	get_alloc(&offset,phub[i]->call,LEN_CMD,instream);
-	for(j=0;j<32;j++)
-		get_int(n,instream); }
-
-total_phubs=i;
-
-get_str(sys_psname,instream);	/* Site Name */
-
-for(j=0;j<32;j++)
-    get_int(n,instream);
-
-/* Internet */
-
-get_str(sys_inetaddr,instream); /* Internet address */
-get_str(inetmail_sem,instream);
-get_int(inetmail_misc,instream);
-get_int(inetmail_cost,instream);
-
-fclose(instream);
-lprintf(txt.readit,fname);
-}
-
-#endif
-
diff --git a/src/sbbs2/scfglib2.c b/src/sbbs2/scfglib2.c
deleted file mode 100644
index e7b638684d..0000000000
--- a/src/sbbs2/scfglib2.c
+++ /dev/null
@@ -1,1106 +0,0 @@
-#line 1 "SCFGLIB2.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-#include "scfglib.h"
-
-#ifdef SCFG 	/* SCFG allocate max length */
-	#define readline_alloc(l,s,m,i) readline(l,s,m,i)
-#else
-	char *readline_alloc(long *offset, char *outstr, int maxline
-		, FILE *instream);
-	#define readline_alloc(l,s,m,i) s=readline_alloc(l,s,m,i)
-	#define get_alloc(o,s,l,i) s=get_alloc(o,s,l,i)
-#endif
-
-
-#ifndef NO_FILE_CFG
-
-/****************************************************************************/
-/* Reads in LIBS.CNF and initializes the associated variables				*/
-/****************************************************************************/
-void read_file_cfg(read_cfg_text_t txt)
-{
-	char	str[256],fname[13],c,cmd[LEN_CMD+1];
-	int 	file;
-	short	i,j,k,l,n;
-	long	offset=0,t;
-	FILE	*instream;
-
-#ifndef SCFG
-
-sprintf(data_dir_dirs,"%sDIRS\\",data_dir);
-
-#endif
-
-strcpy(fname,"FILE.CNF");
-sprintf(str,"%s%s",ctrl_dir,fname);
-if((instream=fnopen(&file,str,O_RDONLY))==NULL) {
-	lprintf(txt.openerr,str);
-	bail(1); }
-
-lprintf(txt.reading,fname);
-
-get_int(min_dspace,instream);
-get_int(max_batup,instream);
-
-#ifdef SBBS
-if(max_batup) {
-    if((batup_desc=(char **)MALLOC(sizeof(char *)*max_batup))==NULL)
-        allocerr(txt,offset,fname,sizeof(char *)*max_batup);
-    if((batup_name=(char **)MALLOC(sizeof(char *)*max_batup))==NULL)
-        allocerr(txt,offset,fname,sizeof(char *)*max_batup);
-    if((batup_misc=(char *)MALLOC(sizeof(char)*max_batup))==NULL)
-        allocerr(txt,offset,fname,sizeof(char)*max_batup);
-    if((batup_dir=(uint *)MALLOC(sizeof(uint)*max_batup))==NULL)
-        allocerr(txt,offset,fname,sizeof(uint)*max_batup);
-	if((batup_alt=(ushort *)MALLOC(sizeof(ushort)*max_batup))==NULL)
-		allocerr(txt,offset,fname,sizeof(ushort)*max_batup);
-    for(i=0;i<max_batup;i++) {
-        if((batup_desc[i]=(char *)MALLOC(59))==NULL)
-            allocerr(txt,offset,fname,59);
-        if((batup_name[i]=(char *)MALLOC(13))==NULL)
-            allocerr(txt,offset,fname,13); } }
-#endif
-get_int(max_batdn,instream);
-
-#ifdef SBBS
-if(max_batdn) {
-    if((batdn_name=(char **)MALLOC(sizeof(char *)*max_batdn))==NULL)
-        allocerr(txt,offset,fname,sizeof(char *)*max_batdn);
-    if((batdn_dir=(uint *)MALLOC(sizeof(uint)*max_batdn))==NULL)
-        allocerr(txt,offset,fname,sizeof(uint)*max_batdn);
-    if((batdn_offset=(long *)MALLOC(sizeof(long)*max_batdn))==NULL)
-        allocerr(txt,offset,fname,sizeof(long)*max_batdn);
-    if((batdn_size=(ulong *)MALLOC(sizeof(ulong)*max_batdn))==NULL)
-        allocerr(txt,offset,fname,sizeof(ulong)*max_batdn);
-    if((batdn_cdt=(ulong *)MALLOC(sizeof(ulong)*max_batdn))==NULL)
-        allocerr(txt,offset,fname,sizeof(ulong)*max_batdn);
-	if((batdn_alt=(ushort *)MALLOC(sizeof(ushort)*max_batdn))==NULL)
-		allocerr(txt,offset,fname,sizeof(ushort)*max_batdn);
-    for(i=0;i<max_batdn;i++)
-        if((batdn_name[i]=(char *)MALLOC(13))==NULL)
-            allocerr(txt,offset,fname,13); }
-#endif
-get_int(max_userxfer,instream);
-
-get_int(t,instream);	/* unused - was cdt_byte_value */
-get_int(cdt_up_pct,instream);
-get_int(cdt_dn_pct,instream);
-get_int(t,instream);	/* unused - was temp_ext */
-get_str(cmd,instream);	/* unused - was temp_cmd */
-get_int(leech_pct,instream);
-get_int(leech_sec,instream);
-
-for(i=0;i<32;i++)
-	get_int(n,instream);
-
-/**************************/
-/* Extractable File Types */
-/**************************/
-
-get_int(total_fextrs,instream);
-
-if(total_fextrs) {
-	if((fextr=(fextr_t **)MALLOC(sizeof(fextr_t *)*total_fextrs))==NULL)
-		allocerr(txt,offset,fname,sizeof(fextr_t*)*total_fextrs); }
-else
-	fextr=NULL;
-
-for(i=0; i<total_fextrs; i++) {
-	if(feof(instream))
-		break;
-	if((fextr[i]=(fextr_t *)MALLOC(sizeof(fextr_t)))==NULL)
-        allocerr(txt,offset,fname,sizeof(fextr_t));
-    memset(fextr[i],0,sizeof(fextr_t));
-	get_str(fextr[i]->ext,instream);
-	get_alloc(&offset,fextr[i]->cmd,LEN_CMD,instream);
-#ifdef SCFG
-	get_str(fextr[i]->ar,instream);
-#else
-	fread(str,LEN_ARSTR+1,1,instream);
-	offset+=LEN_ARSTR+1;
-	fextr[i]->ar=arstr(0,str);
-#endif
-	for(j=0;j<8;j++)
-		get_int(n,instream);
-	}
-total_fextrs=i;
-
-/***************************/
-/* Compressable File Types */
-/***************************/
-
-get_int(total_fcomps,instream);
-
-if(total_fcomps) {
-	if((fcomp=(fcomp_t **)MALLOC(sizeof(fcomp_t *)*total_fcomps))==NULL)
-		allocerr(txt,offset,fname,sizeof(fcomp_t*)*total_fcomps); }
-else
-	fcomp=NULL;
-
-for(i=0; i<total_fcomps; i++) {
-	if(feof(instream))
-		break;
-	if((fcomp[i]=(fcomp_t *)MALLOC(sizeof(fcomp_t)))==NULL)
-		allocerr(txt,offset,fname,sizeof(fcomp_t));
-	memset(fcomp[i],0,sizeof(fcomp_t));
-	get_str(fcomp[i]->ext,instream);
-	get_alloc(&offset,fcomp[i]->cmd,LEN_CMD,instream);
-#ifdef SCFG
-	get_str(fcomp[i]->ar,instream);
-#else
-	fread(str,LEN_ARSTR+1,1,instream);
-	offset+=LEN_ARSTR+1;
-	fcomp[i]->ar=arstr(0,str);
-#endif
-	for(j=0;j<8;j++)
-		get_int(n,instream);
-	}
-total_fcomps=i;
-
-/***********************/
-/* Viewable File Types */
-/***********************/
-
-get_int(total_fviews,instream);
-
-if(total_fviews) {
-	if((fview=(fview_t **)MALLOC(sizeof(fview_t *)*total_fviews))==NULL)
-		allocerr(txt,offset,fname,sizeof(fview_t*)*total_fviews); }
-else
-	fview=NULL;
-
-for(i=0; i<total_fviews; i++) {
-    if(feof(instream)) break;
-	if((fview[i]=(fview_t *)MALLOC(sizeof(fview_t)))==NULL)
-        allocerr(txt,offset,fname,sizeof(fview_t));
-    memset(fview[i],0,sizeof(fview_t));
-	get_str(fview[i]->ext,instream);
-	get_alloc(&offset,fview[i]->cmd,LEN_CMD,instream);
-#ifdef SCFG
-	get_str(fview[i]->ar,instream);
-#else
-	fread(str,LEN_ARSTR+1,1,instream);
-	offset+=LEN_ARSTR+1;
-	fview[i]->ar=arstr(0,str);
-#endif
-	for(j=0;j<8;j++)
-        get_int(n,instream);
-    }
-total_fviews=i;
-
-/***********************/
-/* Testable File Types */
-/***********************/
-
-get_int(total_ftests,instream);
-
-if(total_ftests) {
-	if((ftest=(ftest_t **)MALLOC(sizeof(ftest_t *)*total_ftests))==NULL)
-		allocerr(txt,offset,fname,sizeof(ftest_t*)*total_ftests); }
-else
-	ftest=NULL;
-
-for(i=0; i<total_ftests; i++) {
-    if(feof(instream)) break;
-    if((ftest[i]=(ftest_t *)MALLOC(sizeof(ftest_t)))==NULL)
-        allocerr(txt,offset,fname,sizeof(ftest_t));
-    memset(ftest[i],0,sizeof(ftest_t));
-	get_str(ftest[i]->ext,instream);
-	get_alloc(&offset,ftest[i]->cmd,LEN_CMD,instream);
-	get_alloc(&offset,ftest[i]->workstr,40,instream);
-#ifdef SCFG
-	get_str(ftest[i]->ar,instream);
-#else
-	fread(str,LEN_ARSTR+1,1,instream);
-	offset+=LEN_ARSTR+1;
-	ftest[i]->ar=arstr(0,str);
-#endif
-	for(j=0;j<8;j++)
-        get_int(n,instream);
-    }
-total_ftests=i;
-
-/*******************/
-/* Download events */
-/*******************/
-
-get_int(total_dlevents,instream);
-
-if(total_dlevents) {
-	if((dlevent=(dlevent_t **)MALLOC(sizeof(dlevent_t *)*total_dlevents))
-		==NULL)
-		allocerr(txt,offset,fname,sizeof(dlevent_t*)*total_dlevents); }
-else
-	dlevent=NULL;
-
-for(i=0; i<total_dlevents; i++) {
-    if(feof(instream)) break;
-	if((dlevent[i]=(dlevent_t *)MALLOC(sizeof(dlevent_t)))==NULL)
-		allocerr(txt,offset,fname,sizeof(dlevent_t));
-	memset(dlevent[i],0,sizeof(dlevent_t));
-	get_str(dlevent[i]->ext,instream);
-	get_alloc(&offset,dlevent[i]->cmd,LEN_CMD,instream);
-	get_alloc(&offset,dlevent[i]->workstr,40,instream);
-#ifdef SCFG
-	get_str(dlevent[i]->ar,instream);
-#else
-	fread(str,LEN_ARSTR+1,1,instream);
-	offset+=LEN_ARSTR+1;
-	dlevent[i]->ar=arstr(0,str);
-#endif
-	for(j=0;j<8;j++)
-        get_int(n,instream);
-    }
-total_dlevents=i;
-
-
-/***************************/
-/* File Transfer Protocols */
-/***************************/
-
-get_int(total_prots,instream);
-
-if(total_prots) {
-	if((prot=(prot_t **)MALLOC(sizeof(prot_t *)*total_prots))==NULL)
-		allocerr(txt,offset,fname,sizeof(prot_t*)*total_prots); }
-else
-	prot=NULL;
-
-for(i=0;i<total_prots;i++) {
-    if(feof(instream)) break;
-	if((prot[i]=(prot_t *)MALLOC(sizeof(prot_t)))==NULL)
-        allocerr(txt,offset,fname,sizeof(prot_t));
-    memset(prot[i],0,sizeof(prot_t));
-
-	get_int(prot[i]->mnemonic,instream);
-	get_alloc(&offset,prot[i]->name,25,instream);
-	get_alloc(&offset,prot[i]->ulcmd,LEN_CMD,instream);
-	get_alloc(&offset,prot[i]->dlcmd,LEN_CMD,instream);
-	get_alloc(&offset,prot[i]->batulcmd,LEN_CMD,instream);
-	get_alloc(&offset,prot[i]->batdlcmd,LEN_CMD,instream);
-	get_alloc(&offset,prot[i]->blindcmd,LEN_CMD,instream);
-	get_alloc(&offset,prot[i]->bicmd,LEN_CMD,instream);
-	get_int(prot[i]->misc,instream);
-#ifdef SCFG
-	get_str(prot[i]->ar,instream);
-#else
-	fread(str,LEN_ARSTR+1,1,instream);
-	offset+=LEN_ARSTR+1;
-	prot[i]->ar=arstr(0,str);
-#endif
-	for(j=0;j<8;j++)
-        get_int(n,instream);
-	}
-
-/************************/
-/* Alternate File Paths */
-/************************/
-
-get_int(altpaths,instream);
-
-if(altpaths) {
-	if((altpath=(char **)MALLOC(sizeof(char *)*altpaths))==NULL)
-		allocerr(txt,offset,fname,sizeof(char *)*altpaths); }
-else
-	altpath=NULL;
-
-for(i=0;i<altpaths;i++) {
-    if(feof(instream)) break;
-	fread(str,LEN_DIR+1,1,instream);
-	offset+=LEN_DIR+1;
-    backslash(str);
-#ifdef SCFG
-    j=LEN_DIR+1;
-#else
-    j=strlen(str)+1;
-#endif
-	if((altpath[i]=(char *)MALLOC(j))==NULL)
-        allocerr(txt,offset,fname,j);
-	memset(altpath[i],0,j);
-	strcpy(altpath[i],str);
-	for(j=0;j<8;j++)
-        get_int(n,instream);
-	}
-
-altpaths=i;
-
-/******************/
-/* File Libraries */
-/******************/
-
-get_int(total_libs,instream);
-
-if(total_libs) {
-	if((lib=(lib_t **)MALLOC(sizeof(lib_t *)*total_libs))==NULL)
-		allocerr(txt,offset,fname,sizeof(lib_t *)*total_libs); }
-else
-	lib=NULL;
-
-#ifdef SBBS
-
-if(total_libs) {
-	if((curdir=(uint *)MALLOC(sizeof(uint)*total_libs))==NULL)
-		allocerr(txt,offset,fname,sizeof(uint)*total_libs);
-
-	if((usrlib=(uint *)MALLOC(sizeof(uint)*total_libs))==NULL)
-		allocerr(txt,offset,fname,sizeof(uint)*total_libs);
-
-	if((usrdirs=(uint *)MALLOC(sizeof(uint)*total_libs))==NULL)
-		allocerr(txt,offset,fname,sizeof(uint)*total_libs);
-
-	if((usrdir=(uint **)MALLOC(sizeof(uint *)*total_libs))==NULL)
-		allocerr(txt,offset,fname,sizeof(uint *)*total_libs); }
-
-#endif
-for(i=0;i<total_libs;i++) {
-	if(feof(instream)) break;
-	if((lib[i]=(lib_t *)MALLOC(sizeof(lib_t)))==NULL)
-        allocerr(txt,offset,fname,sizeof(lib_t));
-    memset(lib[i],0,sizeof(lib_t));
-	lib[i]->offline_dir=INVALID_DIR;
-
-	get_alloc(&offset,lib[i]->lname,LEN_GLNAME,instream);
-	get_alloc(&offset,lib[i]->sname,LEN_GSNAME,instream);
-
-#if !defined(SCFG) && defined(SAVE_MEMORY)	  /* Save memory */
-	if(!strcmp(lib[i]->lname,lib[i]->sname) && lib[i]->sname!=scfgnulstr) {
-		FREE(lib[i]->sname);
-		lib[i]->sname=lib[i]->lname; }
-#endif
-
-#ifdef SCFG
-	get_str(lib[i]->ar,instream);
-#else
-	fread(str,1,LEN_ARSTR+1,instream);
-	offset+=LEN_ARSTR+1;
-	lib[i]->ar=arstr(0,str);
-#endif
-	for(j=0;j<48;j++)
-		get_int(n,instream);
-	}
-total_libs=i;
-
-/********************/
-/* File Directories */
-/********************/
-
-sysop_dir=user_dir=upload_dir=INVALID_DIR;
-get_int(total_dirs,instream);
-
-if(total_dirs) {
-	if((dir=(dir_t **)MALLOC(sizeof(dir_t *)*(total_dirs+1)))==NULL)
-		allocerr(txt,offset,fname,sizeof(dir_t *)*(total_dirs+1)); }
-else
-	dir=NULL;
-
-for(i=0;i<total_dirs;i++) {
-	if(feof(instream)) break;
-	if((dir[i]=(dir_t *)MALLOC(sizeof(dir_t)))==NULL)
-        allocerr(txt,offset,fname,sizeof(dir_t));
-	memset(dir[i],0,sizeof(dir_t));
-
-	get_int(dir[i]->lib,instream);
-	get_alloc(&offset,dir[i]->lname,LEN_SLNAME,instream);
-	get_alloc(&offset,dir[i]->sname,LEN_SSNAME,instream);
-
-#if !defined(SCFG) && defined(SAVE_MEMORY)	  /* Save memory */
-	if(!strcmp(dir[i]->lname,dir[i]->sname) && dir[i]->sname!=scfgnulstr) {
-		FREE(dir[i]->sname);
-		dir[i]->sname=dir[i]->lname; }
-#endif
-
-	if(!strcmpi(dir[i]->sname,"SYSOP"))			/* Sysop upload directory */
-		sysop_dir=i;
-	else if(!strcmpi(dir[i]->sname,"USER"))		/* User to User xfer dir */
-		user_dir=i;
-	else if(!strcmpi(dir[i]->sname,"UPLOADS"))  /* Upload directory */
-		upload_dir=i;
-	else if(!strcmpi(dir[i]->sname,"OFFLINE"))	/* Offline files dir */
-		lib[dir[i]->lib]->offline_dir=i;
-
-	get_str(dir[i]->code,instream);
-
-#ifdef SCFG
-	get_str(dir[i]->data_dir,instream);
-#else
-	fread(str,LEN_DIR+1,1,instream);   /* substitute data dir */
-	offset+=LEN_DIR+1;
-	if(str[0]) {
-		backslash(str);
-		if((dir[i]->data_dir=(char *)MALLOC(strlen(str)+1))==NULL)
-			allocerr(txt,offset,fname,strlen(str)+1);
-		strcpy(dir[i]->data_dir,str); }
-	else
-		dir[i]->data_dir=data_dir_dirs;
-#endif
-
-#ifdef SCFG
-	get_str(dir[i]->ar,instream);
-	get_str(dir[i]->ul_ar,instream);
-	get_str(dir[i]->dl_ar,instream);
-	get_str(dir[i]->op_ar,instream);
-#else
-	fread(str,1,LEN_ARSTR+1,instream);
-	offset+=LEN_ARSTR+1;
-	dir[i]->ar=arstr(0,str);
-	fread(str,1,LEN_ARSTR+1,instream);
-	offset+=LEN_ARSTR+1;
-	dir[i]->ul_ar=arstr(0,str);
-	fread(str,1,LEN_ARSTR+1,instream);
-	offset+=LEN_ARSTR+1;
-	dir[i]->dl_ar=arstr(0,str);
-	fread(str,1,LEN_ARSTR+1,instream);
-	offset+=LEN_ARSTR+1;
-	dir[i]->op_ar=arstr(0,str);
-#endif
-	fread(str,1,LEN_DIR+1,instream);
-	offset+=LEN_DIR+1;
-	if(!str[0]) 				   /* no path specified */
-		sprintf(str,"%sDIRS\\%s\\",data_dir,dir[i]->code);
-
-#ifndef SCFG
-	if((dir[i]->path=(char *)MALLOC(strlen(str)+1))==NULL)
-		allocerr(txt,offset,fname,strlen(str)+1);
-#endif
-	strcpy(dir[i]->path,str);
-	get_alloc(&offset,dir[i]->upload_sem,LEN_DIR,instream);
-	get_int(dir[i]->maxfiles,instream);
-	if(dir[i]->maxfiles>MAX_FILES)
-		dir[i]->maxfiles=MAX_FILES;
-	get_alloc(&offset,dir[i]->exts,40,instream);
-	get_int(dir[i]->misc,instream);
-	get_int(dir[i]->seqdev,instream);
-	get_int(dir[i]->sort,instream);
-#ifdef SCFG
-	get_str(dir[i]->ex_ar,instream);
-#else
-	fread(str,1,LEN_ARSTR+1,instream);
-	offset+=LEN_ARSTR+1;
-	dir[i]->ex_ar=arstr(0,str);
-#endif
-	get_int(dir[i]->maxage,instream);
-	get_int(dir[i]->up_pct,instream);
-	get_int(dir[i]->dn_pct,instream);
-	get_int(c,instream);
-	for(j=0;j<24;j++)
-		get_int(n,instream); }
-
-total_dirs=i;
-
-#ifndef NO_TEXT_CFG 		/* This must be the last section in CFG file */
-
-/**********************/
-/* Text File Sections */
-/**********************/
-
-get_int(total_txtsecs,instream);
-
-
-if(total_txtsecs) {
-	if((txtsec=(txtsec_t **)MALLOC(sizeof(txtsec_t *)*total_txtsecs))==NULL)
-		allocerr(txt,offset,fname,sizeof(txtsec_t *)*total_txtsecs); }
-else
-	txtsec=NULL;
-
-for(i=0;i<total_txtsecs;i++) {
-    if(feof(instream)) break;
-    if((txtsec[i]=(txtsec_t *)MALLOC(sizeof(txtsec_t)))==NULL)
-        allocerr(txt,offset,fname,sizeof(txtsec_t));
-	memset(txtsec[i],0,sizeof(txtsec_t));
-
-    get_alloc(&offset,txtsec[i]->name,40,instream);
-    get_str(txtsec[i]->code,instream);
-#ifdef SCFG
-    get_str(txtsec[i]->ar,instream);
-#else
-    fread(str,LEN_ARSTR+1,1,instream);
-    offset+=LEN_ARSTR+1;
-	txtsec[i]->ar=arstr(0,str);
-#endif
-	for(j=0;j<8;j++)
-		get_int(n,instream);
-	}
-total_txtsecs=i;
-
-#endif
-
-fclose(instream);
-lprintf(txt.readit,fname);
-#ifdef SBBS
-for(i=l=0;i<total_libs;i++) {
-	for(j=k=0;j<total_dirs;j++)
-		if(dir[j]->lib==i)
-			k++;
-	if(k>l) l=k; }	/* l = largest number of dirs in a lib */
-for(i=0;i<total_libs;i++)
-	if(l && (usrdir[i]=(uint *)MALLOC(sizeof(uint)*l))==NULL)
-		allocerr(txt,offset,fname,sizeof(uint)*l);
-#endif
-}
-
-#endif
-
-
-#ifndef NO_XTRN_CFG
-
-/****************************************************************************/
-/* Reads in XTRN.CNF and initializes the associated variables				*/
-/****************************************************************************/
-void read_xtrn_cfg(read_cfg_text_t txt)
-{
-	char	str[256],fname[13],*p,c;
-	int 	file;
-	short	i,j,n;
-	long	offset=0;
-	FILE	*instream;
-
-strcpy(fname,"XTRN.CNF");
-sprintf(str,"%s%s",ctrl_dir,fname);
-if((instream=fnopen(&file,str,O_RDONLY))==NULL) {
-	lprintf(txt.openerr,str);
-	bail(1); }
-
-lprintf(txt.reading,fname);
-
-/*************/
-/* Swap list */
-/*************/
-
-get_int(total_swaps,instream);
-
-if(total_swaps) {
-	if((swap=(swap_t **)MALLOC(sizeof(swap_t *)*total_swaps))==NULL)
-		allocerr(txt,offset,fname,sizeof(swap_t *)*total_swaps); }
-else
-	swap=NULL;
-
-for(i=0;i<total_swaps;i++) {
-	if(feof(instream)) break;
-	if((swap[i]=(swap_t *)MALLOC(sizeof(swap_t)))==NULL)
-		allocerr(txt,offset,fname,sizeof(swap_t));
-	get_alloc(&offset,swap[i]->cmd,LEN_CMD,instream); }
-total_swaps=i;
-
-/********************/
-/* External Editors */
-/********************/
-
-get_int(total_xedits,instream);
-
-if(total_xedits) {
-	if((xedit=(xedit_t **)MALLOC(sizeof(xedit_t *)*total_xedits))==NULL)
-		allocerr(txt,offset,fname,sizeof(xedit_t *)*total_xedits); }
-else
-	xedit=NULL;
-
-for(i=0;i<total_xedits;i++) {
-	if(feof(instream)) break;
-	if((xedit[i]=(xedit_t *)MALLOC(sizeof(xedit_t)))==NULL)
-		allocerr(txt,offset,fname,sizeof(xedit_t));
-	memset(xedit[i],0,sizeof(xedit_t));
-
-	get_alloc(&offset,xedit[i]->name,40,instream);
-	get_str(xedit[i]->code,instream);
-	get_alloc(&offset,xedit[i]->lcmd,LEN_CMD,instream);
-	get_alloc(&offset,xedit[i]->rcmd,LEN_CMD,instream);
-
-#if !defined(SCFG) && defined(SAVE_MEMORY)	  /* Save memory */
-	if(!strcmp(xedit[i]->lcmd,xedit[i]->rcmd) && xedit[i]->rcmd!=scfgnulstr) {
-		FREE(xedit[i]->rcmd);
-		xedit[i]->rcmd=xedit[i]->lcmd; }
-#endif
-
-	get_int(xedit[i]->misc,instream);
-#ifdef SCFG
-	get_str(xedit[i]->ar,instream);
-#else
-	fread(str,LEN_ARSTR+1,1,instream);
-	offset+=LEN_ARSTR+1;
-	xedit[i]->ar=arstr(0,str);
-#endif
-	get_int(xedit[i]->type,instream);
-	get_int(c,instream);
-	for(j=0;j<7;j++)
-		get_int(n,instream);
-	}
-total_xedits=i;
-
-
-/*****************************/
-/* External Program Sections */
-/*****************************/
-
-get_int(total_xtrnsecs,instream);
-
-if(total_xtrnsecs) {
-	if((xtrnsec=(xtrnsec_t **)MALLOC(sizeof(xtrnsec_t *)*total_xtrnsecs))
-		==NULL)
-		allocerr(txt,offset,fname,sizeof(xtrnsec_t *)*total_xtrnsecs); }
-else
-	xtrnsec=NULL;
-
-for(i=0;i<total_xtrnsecs;i++) {
-	if(feof(instream)) break;
-	if((xtrnsec[i]=(xtrnsec_t *)MALLOC(sizeof(xtrnsec_t)))==NULL)
-		allocerr(txt,offset,fname,sizeof(xtrnsec_t));
-	memset(xtrnsec[i],0,sizeof(xtrnsec_t));
-
-	get_alloc(&offset,xtrnsec[i]->name,40,instream);
-	get_str(xtrnsec[i]->code,instream);
-#ifdef SCFG
-	get_str(xtrnsec[i]->ar,instream);
-#else
-	fread(str,LEN_ARSTR+1,1,instream);
-	offset+=LEN_ARSTR+1;
-	xtrnsec[i]->ar=arstr(0,str);
-#endif
-	for(j=0;j<8;j++)
-        get_int(n,instream);
-	}
-total_xtrnsecs=i;
-
-
-/*********************/
-/* External Programs */
-/*********************/
-
-get_int(total_xtrns,instream);
-
-if(total_xtrns) {
-	if((xtrn=(xtrn_t **)MALLOC(sizeof(xtrn_t *)*total_xtrns))==NULL)
-		allocerr(txt,offset,fname,sizeof(xtrn_t *)*total_xtrns); }
-else
-	xtrn=NULL;
-
-for(i=0;i<total_xtrns;i++) {
-	if(feof(instream)) break;
-	if((xtrn[i]=(xtrn_t *)MALLOC(sizeof(xtrn_t)))==NULL)
-		allocerr(txt,offset,fname,sizeof(xtrn_t));
-	memset(xtrn[i],0,sizeof(xtrn_t));
-
-	get_int(xtrn[i]->sec,instream);
-	get_alloc(&offset,xtrn[i]->name,40,instream);
-	get_str(xtrn[i]->code,instream);
-#ifdef SCFG
-	get_str(xtrn[i]->ar,instream);
-	get_str(xtrn[i]->run_ar,instream);
-#else
-	fread(str,LEN_ARSTR+1,1,instream);
-	offset+=LEN_ARSTR+1;
-	xtrn[i]->ar=arstr(0,str);
-	fread(str,LEN_ARSTR+1,1,instream);
-	offset+=LEN_ARSTR+1;
-	xtrn[i]->run_ar=arstr(0,str);
-#endif
-	get_int(xtrn[i]->type,instream);
-	get_int(xtrn[i]->misc,instream);
-	get_int(xtrn[i]->event,instream);
-	get_int(xtrn[i]->cost,instream);
-	get_alloc(&offset,xtrn[i]->cmd,LEN_CMD,instream);
-	get_alloc(&offset,xtrn[i]->clean,LEN_CMD,instream);
-	fread(str,LEN_DIR+1,1,instream);
-	offset+=LEN_DIR+1;
-	if(strcmp(str+1,":\\") && str[strlen(str)-1]=='\\') // C:\ is valid
-		str[strlen(str)-1]=0;		// C:\SBBS\XTRN\GAME\ is not
-#ifdef SBBS
-	if(!str[0]) 			  /* Minimum path of '.' */
-		strcpy(str,".");
-	if((xtrn[i]->path=(char *)MALLOC(strlen(str)+1))==NULL)
-		allocerr(txt,offset,fname,strlen(str)+1);
-#endif
-	strcpy(xtrn[i]->path,str);
-	get_int(xtrn[i]->textra,instream);
-	get_int(xtrn[i]->maxtime,instream);
-	for(j=0;j<7;j++)
-        get_int(n,instream);
-	}
-total_xtrns=i;
-
-
-/****************/
-/* Timed Events */
-/****************/
-
-get_int(total_events,instream);
-
-if(total_events) {
-	if((event=(event_t **)MALLOC(sizeof(event_t *)*total_events))==NULL)
-		allocerr(txt,offset,fname,sizeof(event_t *)*total_events); }
-else
-	event=NULL;
-
-for(i=0;i<total_events;i++) {
-	if(feof(instream)) break;
-	if((event[i]=(event_t *)MALLOC(sizeof(event_t)))==NULL)
-		allocerr(txt,offset,fname,sizeof(event_t));
-	memset(event[i],0,sizeof(event_t));
-
-	get_str(event[i]->code,instream);
-	get_alloc(&offset,event[i]->cmd,LEN_CMD,instream);
-	get_int(event[i]->days,instream);
-	get_int(event[i]->time,instream);
-	get_int(event[i]->node,instream);
-	get_int(event[i]->misc,instream);
-	get_alloc(&offset,event[i]->dir,LEN_DIR,instream);
-	if(event[i]->dir[0] 									// blank is valid
-		&& strcmp(event[i]->dir+1,":\\")                    // C:\ is valid
-		&& event[i]->dir[strlen(event[i]->dir)-1]=='\\')    // C:\DIR\ !valid
-		event[i]->dir[strlen(event[i]->dir)-1]=0;			// Remove \
-	for(j=0;j<8;j++)
-        get_int(n,instream);
-	}
-total_events=i;
-
-#if defined(SCFG) || defined(__OS2__)
-
-/********************/
-/* DOS Program list */
-/********************/
-
-get_int(total_os2pgms,instream);
-
-if(total_os2pgms) {
-	if((os2pgm=(os2pgm_t **)MALLOC(sizeof(os2pgm_t *)*total_os2pgms))==NULL)
-		allocerr(txt,offset,fname,sizeof(os2pgm_t *)*total_os2pgms); }
-else
-	os2pgm=NULL;
-
-for(i=0;i<total_os2pgms;i++) {
-	if(feof(instream)) break;
-	if((os2pgm[i]=(os2pgm_t *)MALLOC(sizeof(os2pgm_t)))==NULL)
-		allocerr(txt,offset,fname,sizeof(os2pgm_t));
-	get_alloc(&offset,os2pgm[i]->name,12,instream);
-	os2pgm[i]->misc=0; }
-total_os2pgms=i;
-for(i=0;i<total_os2pgms;i++) {
-    if(feof(instream)) break;
-	get_int(os2pgm[i]->misc,instream); }
-
-#endif	// Don't add anything non-OS2 specific after this (without moding ^^ )
-
-
-fclose(instream);
-lprintf(txt.readit,fname);
-}
-
-#endif
-
-
-#ifndef NO_CHAT_CFG
-
-/****************************************************************************/
-/* Reads in CHAT.CNF and initializes the associated variables				*/
-/****************************************************************************/
-void read_chat_cfg(read_cfg_text_t txt)
-{
-	char	str[256],fname[13],*p;
-	int 	file;
-	short	i,j,n;
-	long	offset=0;
-	FILE	*instream;
-
-strcpy(fname,"CHAT.CNF");
-sprintf(str,"%s%s",ctrl_dir,fname);
-if((instream=fnopen(&file,str,O_RDONLY))==NULL) {
-	lprintf(txt.openerr,str);
-	bail(1); }
-
-lprintf(txt.reading,fname);
-
-/*********/
-/* Gurus */
-/*********/
-
-get_int(total_gurus,instream);
-
-if(total_gurus) {
-    if((guru=(guru_t **)MALLOC(sizeof(guru_t *)*total_gurus))==NULL)
-        allocerr(txt,offset,fname,sizeof(guru_t *)*total_gurus); }
-else
-    guru=NULL;
-
-for(i=0;i<total_gurus;i++) {
-    if(feof(instream)) break;
-    if((guru[i]=(guru_t *)MALLOC(sizeof(guru_t)))==NULL)
-        allocerr(txt,offset,fname,sizeof(guru_t));
-    memset(guru[i],0,sizeof(guru_t));
-
-    get_alloc(&offset,guru[i]->name,25,instream);
-    get_str(guru[i]->code,instream);
-
-#ifdef SCFG
-    get_str(guru[i]->ar,instream);
-#else
-    fread(str,LEN_ARSTR+1,1,instream);
-    offset+=LEN_ARSTR+1;
-	guru[i]->ar=arstr(0,str);
-#endif
-    for(j=0;j<8;j++)
-		get_int(n,instream);
-	}
-total_chans=i;
-
-
-/********************/
-/* Chat Action Sets */
-/********************/
-
-get_int(total_actsets,instream);
-
-if(total_actsets) {
-	if((actset=(actset_t **)MALLOC(sizeof(actset_t *)*total_actsets))==NULL)
-		allocerr(txt,offset,fname,sizeof(actset_t *)*total_actsets); }
-else
-	actset=NULL;
-
-for(i=0;i<total_actsets;i++) {
-	if(feof(instream)) break;
-	if((actset[i]=(actset_t *)MALLOC(sizeof(actset_t)))==NULL)
-		allocerr(txt,offset,fname,sizeof(actset_t));
-	get_alloc(&offset,actset[i]->name,25,instream);
-	}
-total_actsets=i;
-
-
-/****************/
-/* Chat Actions */
-/****************/
-
-get_int(total_chatacts,instream);
-
-if(total_chatacts) {
-	if((chatact=(chatact_t **)MALLOC(sizeof(chatact_t *)*total_chatacts))
-		==NULL)
-		allocerr(txt,offset,fname,sizeof(chatact_t *)*total_chatacts); }
-else
-	chatact=NULL;
-
-for(i=0;i<total_chatacts;i++) {
-	if(feof(instream)) break;
-	if((chatact[i]=(chatact_t *)MALLOC(sizeof(chatact_t)))==NULL)
-		allocerr(txt,offset,fname,sizeof(chatact_t));
-	memset(chatact[i],0,sizeof(chatact_t));
-
-	get_int(chatact[i]->actset,instream);
-	get_alloc(&offset,chatact[i]->cmd,LEN_CHATACTCMD,instream);
-	get_alloc(&offset,chatact[i]->out,LEN_CHATACTOUT,instream);
-	for(j=0;j<8;j++)
-		get_int(n,instream);
-	}
-
-total_chatacts=i;
-
-
-/***************************/
-/* Multinode Chat Channels */
-/***************************/
-
-get_int(total_chans,instream);
-
-if(total_chans) {
-	if((chan=(chan_t **)MALLOC(sizeof(chan_t *)*total_chans))==NULL)
-		allocerr(txt,offset,fname,sizeof(chan_t *)*total_chans); }
-else
-	chan=NULL;
-
-for(i=0;i<total_chans;i++) {
-	if(feof(instream)) break;
-	if((chan[i]=(chan_t *)MALLOC(sizeof(chan_t)))==NULL)
-		allocerr(txt,offset,fname,sizeof(chan_t));
-	memset(chan[i],0,sizeof(chan_t));
-
-	get_int(chan[i]->actset,instream);
-	get_alloc(&offset,chan[i]->name,25,instream);
-
-	get_str(chan[i]->code,instream);
-
-#ifdef SCFG
-	get_str(chan[i]->ar,instream);
-#else
-	fread(str,LEN_ARSTR+1,1,instream);
-	offset+=LEN_ARSTR+1;
-	chan[i]->ar=arstr(0,str);
-#endif
-	get_int(chan[i]->cost,instream);
-	get_int(chan[i]->guru,instream);
-	get_int(chan[i]->misc,instream);
-	for(j=0;j<8;j++)
-		get_int(n,instream); }
-total_chans=i;
-
-
-/**************/
-/* Chat Pages */
-/**************/
-
-get_int(total_pages,instream);
-
-if(total_pages) {
-    if((page=(page_t **)MALLOC(sizeof(page_t *)*total_pages))==NULL)
-        allocerr(txt,offset,fname,sizeof(page_t *)*total_pages); }
-else
-    page=NULL;
-
-for(i=0;i<total_pages;i++) {
-    if(feof(instream)) break;
-    if((page[i]=(page_t *)MALLOC(sizeof(page_t)))==NULL)
-        allocerr(txt,offset,fname,sizeof(page_t));
-    memset(page[i],0,sizeof(page_t));
-
-    get_alloc(&offset,page[i]->cmd,LEN_CMD,instream);
-
-#ifdef SCFG
-    get_str(page[i]->ar,instream);
-#else
-    fread(str,LEN_ARSTR+1,1,instream);
-    offset+=LEN_ARSTR+1;
-	page[i]->ar=arstr(0,str);
-#endif
-    get_int(page[i]->misc,instream);
-    for(j=0;j<8;j++)
-        get_int(n,instream);
-    }
-total_pages=i;
-
-
-fclose(instream);
-lprintf(txt.readit,fname);
-}
-
-#endif
-
-/****************************************************************************/
-/* Read one line of up two 256 characters from the file pointed to by       */
-/* 'stream' and put upto 'maxlen' number of character into 'outstr' and     */
-/* truncate spaces off end of 'outstr'.                                     */
-/****************************************************************************/
-char *readline(long *offset, char *outstr, int maxlen, FILE *instream)
-{
-	char str[257];
-
-if(fgets(str,256,instream)==NULL)
-	return(NULL);
-sprintf(outstr,"%.*s",maxlen,str);
-truncsp(outstr);
-(*offset)+=maxlen;
-return(outstr);
-}
-
-#undef readline_alloc
-
-char *readline_alloc(long *offset, char *outstr, int maxline, FILE *instream)
-{
-	char str[257];
-
-readline(offset,str,maxline,instream);
-if((outstr=(char *)MALLOC(strlen(str)+1))==NULL)
-	return(NULL);
-strcpy(outstr,str);
-return(outstr);
-}
-
-/****************************************************************************/
-/* Turns char string of flags into a long									*/
-/****************************************************************************/
-long aftol(char *str)
-{
-	char c=0;
-	ulong l=0UL;
-
-strupr(str);
-while(str[c]) {
-	if(str[c]>='A' && str[c]<='Z')
-		l|=FLAG(str[c]);
-	c++; }
-return(l);
-}
-
-/*****************************************************************************/
-/* Converts a long into an ASCII Flag string (A-Z) that represents bits 0-25 */
-/*****************************************************************************/
-char *ltoaf(long l,char *str)
-{
-	char c=0;
-
-while(c<26) {
-	if(l&(long)(1L<<c))
-		str[c]='A'+c;
-	else str[c]=SP;
-	c++; }
-str[c]=0;
-return(str);
-}
-
-/****************************************************************************/
-/* Returns the actual attribute code from a string of ATTR characters       */
-/****************************************************************************/
-int attrstr(char *str)
-{
-	ulong l=0;
-	short atr;
-
-atr=LIGHTGRAY;
-while(str[l]) {
-	switch(str[l]) {
-		case 'H': 	/* High intensity */
-			atr|=HIGH;
-			break;
-		case 'I':	/* Blink */
-			atr|=BLINK;
-			break;
-		case 'K':	/* Black */
-			atr=(atr&0xf8)|BLACK;
-			break;
-		case 'W':	/* White */
-			atr=(atr&0xf8)|LIGHTGRAY;
-			break;
-		case '0':	/* Black Background */
-			atr=(atr&0x8f)|(BLACK<<4);
-			break;
-		case '7':	/* White Background */
-			atr=(atr&0x8f)|(LIGHTGRAY<<4);
-			break;
-		case 'R':
-			atr=(atr&0xf8)|RED;
-			break;
-		case 'G':
-			atr=(atr&0xf8)|GREEN;
-			break;
-		case 'Y':   /* Yellow */
-			atr=(atr&0xf8)|BROWN;
-			break;
-		case 'B':
-			atr=(atr&0xf8)|BLUE;
-			break;
-		case 'M':
-			atr=(atr&0xf8)|MAGENTA;
-			break;
-		case 'C':
-			atr=(atr&0xf8)|CYAN;
-			break;
-		case '1':	/* Red Background */
-			atr=(atr&0x8f)|(RED<<4);
-			break;
-		case '2':	/* Green Background */
-			atr=(atr&0x8f)|(GREEN<<4);
-			break;
-		case '3':	/* Yellow Background */
-			atr=(atr&0x8f)|(BROWN<<4);
-			break;
-		case '4':	/* Blue Background */
-			atr=(atr&0x8f)|(BLUE<<4);
-			break;
-		case '5':	/* Magenta Background */
-			atr=(atr&0x8f)|(MAGENTA<<4);
-			break;
-		case '6':	/* Cyan Background */
-			atr=(atr&0x8f)|(CYAN<<4);
-			break; }
-	l++; }
-return(atr);
-}
-
-
diff --git a/src/sbbs2/scfgvars.c b/src/sbbs2/scfgvars.c
deleted file mode 100644
index d637844daf..0000000000
--- a/src/sbbs2/scfgvars.c
+++ /dev/null
@@ -1,264 +0,0 @@
-/* SCFGVARS.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/**********************************************************************/
-/* External (Global/Public) Variables for use with both SBBS and SCFG */
-/**********************************************************************/
-
-#ifndef GLOBAL
-#define GLOBAL
-	   char *scfgnulstr="";
-#else
-extern char *scfgnulstr;
-#endif
-
-#include "sbbsdefs.h"
-
-GLOBAL grp_t		**grp;				/* Each message group */
-GLOBAL ushort		total_grps; 		/* Total number of groups */
-GLOBAL sub_t		**sub;				/* Each message sub */
-GLOBAL ushort		total_subs; 		/* Total number of subs */
-GLOBAL lib_t		**lib;				/* Each library */
-GLOBAL ushort		total_libs; 		/* Total number of libraries */
-GLOBAL dir_t		**dir;				/* Each message directory */
-GLOBAL ushort		total_dirs; 		/* Total number of directories */
-GLOBAL txtsec_t 	**txtsec;			/* Each text section */
-GLOBAL ushort		total_txtsecs;		/* Total number of text sections */
-GLOBAL xtrnsec_t	**xtrnsec;			/* Each external section */
-GLOBAL ushort		total_xtrnsecs; 	/* Total number of external sections */
-GLOBAL xtrn_t		**xtrn; 			/* Each external program */
-GLOBAL ushort		total_xtrns;		/* Total number of externals */
-GLOBAL mdm_result_t *mdm_result;		/* Each Modem Result Code */
-GLOBAL ushort		mdm_results;		/* Total number of Modem Results */
-GLOBAL prot_t		**prot; 			/* Each Transfer Protocol */
-GLOBAL ushort		total_prots;		/* Total Transfer Protocols */
-GLOBAL fextr_t		**fextr;			/* Each extractable file type */
-GLOBAL ushort		total_fextrs;		/* Total extractable file types */
-GLOBAL fcomp_t		**fcomp;			/* Each compressable file type */
-GLOBAL ushort		total_fcomps;		/* Total */
-GLOBAL fview_t		**fview;			/* Each veiwable file type */
-GLOBAL ushort		total_fviews;		/* Total viewable file types */
-GLOBAL ftest_t		**ftest;			/* Each testable file type */
-GLOBAL ushort		total_ftests;		/* Total testable file types */
-GLOBAL xedit_t		**xedit;			/* Each external editor */
-GLOBAL ushort		total_xedits;		/* Total external editors */
-GLOBAL qhub_t		**qhub; 			/* QWK network hubs */
-GLOBAL ushort		total_qhubs;		/* Total qwk network hubs */
-GLOBAL phub_t		**phub; 			/* PostLink/PCRelay network hubs */
-GLOBAL ushort		total_phubs;		/* Total PostLink/PCRelay hubs */
-GLOBAL chan_t		**chan; 			/* Each chat channel */
-GLOBAL ushort		total_chans;		/* Total number of chat channels */
-GLOBAL chatact_t	**chatact;			/* Chat action commands */
-GLOBAL ushort       total_chatacts;     /* Total number of action commands */
-GLOBAL actset_t 	**actset;			/* Name of action set */
-GLOBAL ushort		total_actsets;		/* Total number of action sets */
-GLOBAL page_t		**page; 			/* External chat page */
-GLOBAL ushort		total_pages;		/* Total number of external pages */
-GLOBAL event_t		**event;			/* Timed events */
-GLOBAL ushort		total_events;		/* Total number of timed events */
-GLOBAL dlevent_t	**dlevent;			/* Download events */
-GLOBAL ushort		total_dlevents; 	/* Total download events */
-GLOBAL faddr_t		*faddr; 			/* FidoNet addresses */
-GLOBAL ushort		total_faddrs;		/* Total number of fido addresses */
-GLOBAL swap_t		**swap; 			/* Swapping externals */
-GLOBAL ushort		total_swaps;		/* Total number of non-swap xtrns */
-GLOBAL os2pgm_t 	**os2pgm;			/* DOS Programs */
-GLOBAL ushort		total_os2pgms;		/* Total number of DOS pgms */
-GLOBAL guru_t		**guru; 			/* Gurus */
-GLOBAL ushort		total_gurus;		/* Total number of guru files */
-GLOBAL shell_t		**shell;			/* Command shells */
-GLOBAL ushort		total_shells;		/* Total number of command shells */
-
-									/* COM port registers: */
-GLOBAL ushort	com_base,			/* COM base address */
-				com_irq;			/* irq line number	   */
-GLOBAL ulong	com_rate;			/* DTE rate in bps	   */
-GLOBAL char  	com_port;			/* Number of COM port  */
-
-									/* Modem command strings */
-GLOBAL char 	mdm_init[64],		/* Initialization */
-				mdm_spec[64],		/* Special Initialization */
-				mdm_term[64],		/* Terminal Initialization String */
-				mdm_dial[64],		/* Dial */
-				mdm_offh[64],		/* Off hook */
-				mdm_answ[64],		/* Answer */
-				mdm_hang[64];		/* Hang-up */
-GLOBAL ulong	mdm_misc;			/* Misc bits used for flags */
-GLOBAL ushort	mdm_reinit; 		/* Modem reinitialization minute count */
-GLOBAL ushort	mdm_ansdelay;		/* Modem seconds to delay after answer */
-GLOBAL uchar	mdm_rings;			/* Rings to wait till answer */
-
-GLOBAL long 	sys_misc;			/* System Misc Settings */
-GLOBAL char 	sys_pass[41];		/* System Pass Word */
-GLOBAL char 	sys_name[41];		/* System Name */
-GLOBAL char 	sys_id[9];			/* System ID for QWK Packets */
-GLOBAL char 	sys_psname[13]; 	/* PostLink and PCRelay Site Name */
-GLOBAL ulong	sys_psnum;			/* PostLink and PCRelay Site Number */
-GLOBAL char 	sys_inetaddr[128];	/* System's internet address */
-GLOBAL char 	sys_location[41];	/* System Location */
-GLOBAL short	sys_timezone;		/* Time Zone of BBS */
-GLOBAL char 	sys_daily[LEN_CMD+1];	   /* Daily event */
-GLOBAL char 	sys_logon[LEN_CMD+1];	   /* Logon event */
-GLOBAL char 	sys_logout[LEN_CMD+1];	   /* Logoff event */
-GLOBAL ushort	sys_pwdays; 		/* Max days between password change */
-GLOBAL ushort	sys_deldays;		/* Days to keep deleted users */
-GLOBAL ushort	sys_autodel;		/* Autodeletion after x days inactive */
-GLOBAL ushort	sys_nodes;			/* Number of local nodes on system	*/
-GLOBAL char     sys_op[41];         /* Name of system operator */
-GLOBAL char     sys_guru[41];       /* Name of system guru */
-GLOBAL uchar	sys_exp_warn;		/* Days left till expire to notify */
-GLOBAL char 	sys_def_stat;		/* Default status line */
-GLOBAL char 	sys_phonefmt[LEN_PHONE+1];	/* format of phone numbers */
-GLOBAL ushort	sys_lastnode;		/* Last displayable node number */
-GLOBAL ushort	sys_autonode;		/* First node number for autonode */
-#ifdef SCFG
-GLOBAL uchar	sys_chat_ar[LEN_ARSTR+1];	/* chat override */
-#else
-GLOBAL uchar	*sys_chat_ar;
-#endif
-
-GLOBAL uchar	node_comspec[LEN_CMD+1];	/* DOS COMMAND.COM to use */
-GLOBAL uchar	node_editor[LEN_CMD+1]; /* Local text editor command line to use */
-GLOBAL uchar	node_viewer[LEN_CMD+1]; /* Local text viewer command line */
-GLOBAL uchar	node_daily[LEN_CMD+1];	/* Name of node's daily event */
-GLOBAL uchar	node_scrnlen;		/* Length of screen (rows) */
-GLOBAL uchar	node_scrnblank; 	/* Min of inactivity for blank screen */
-GLOBAL ulong	node_misc;			/* Misc bits for node setup */
-GLOBAL ushort	node_valuser;		/* User validation mail goes to */
-GLOBAL ushort	node_ivt;			/* Time-slice APIs */
-GLOBAL uchar	node_swap;			/* Swap types allowed */
-GLOBAL uchar	node_swapdir[LEN_DIR+1];	/* Swap directory */
-GLOBAL ushort	node_minbps;		/* Minimum connect rate of this node */
-GLOBAL ushort	node_num;			/* Local node number of this node */
-GLOBAL uchar	node_phone[13], 	/* Phone number of this node */
-				node_name[41];     	/* Name of this node */
-#ifdef SCFG
-GLOBAL uchar	node_ar[LEN_ARSTR+1]; /* Node minimum requirements */
-#else
-GLOBAL uchar	*node_ar;
-#endif
-GLOBAL ulong	node_cost;			/* Node cost to call - in credits */
-GLOBAL uchar	node_dollars_per_call;	/* Billing Node Dollars Per Call */
-GLOBAL ushort	node_sem_check; 	/* Seconds between semaphore checks */
-GLOBAL ushort	node_stat_check;	/* Seconds between statistic checks */
-
-GLOBAL char 	new_pass[41];		/* New User Password */
-GLOBAL char 	new_magic[21];		/* New User Magic Word */
-GLOBAL char 	new_sif[9]; 		/* New User SIF Questionaire */
-GLOBAL char 	new_sof[9]; 		/* New User SIF Questionaire output SIF */
-GLOBAL char 	new_level;			/* New User Main Level */
-GLOBAL ulong	new_flags1; 		/* New User Main Flags from set #1*/
-GLOBAL ulong	new_flags2; 		/* New User Main Flags from set #2*/
-GLOBAL ulong	new_flags3; 		/* New User Main Flags from set #3*/
-GLOBAL ulong	new_flags4; 		/* New User Main Flags from set #4*/
-GLOBAL ulong	new_exempt;			/* New User Exemptions */
-GLOBAL ulong	new_rest;			/* New User Restrictions */
-GLOBAL ulong	new_cdt;			/* New User Credits */
-GLOBAL ulong	new_min;			/* New User Minutes */
-GLOBAL uchar	new_xedit[9];		/* New User Default Editor */
-GLOBAL ushort	new_shell;			/* New User Default Command Set */
-GLOBAL ulong	new_misc;			/* New User Miscellaneous Defaults */
-GLOBAL ushort	new_expire; 		/* Expiration days for new user */
-GLOBAL uchar	new_prot;			/* New User Default Download Protocol */
-GLOBAL char 	val_level[10];		/* Validation User Main Level */
-GLOBAL ulong	val_flags1[10]; 	/* Validation User Flags from set #1*/
-GLOBAL ulong	val_flags2[10]; 	/* Validation User Flags from set #2*/
-GLOBAL ulong	val_flags3[10]; 	/* Validation User Flags from set #3*/
-GLOBAL ulong	val_flags4[10]; 	/* Validation User Flags from set #4*/
-GLOBAL ulong	val_exempt[10]; 	/* Validation User Exemption Flags */
-GLOBAL ulong	val_rest[10];		/* Validation User Restriction Flags */
-GLOBAL ulong	val_cdt[10];		/* Validation User Additional Credits */
-GLOBAL ushort	val_expire[10]; 	/* Validation User Extend Expire #days */
-GLOBAL uchar	level_expireto[100];
-GLOBAL ushort	level_timepercall[100], /* Security level settings */
-				level_timeperday[100],
-				level_callsperday[100],
-				level_linespermsg[100],
-				level_postsperday[100],
-				level_emailperday[100];
-GLOBAL long 	level_freecdtperday[100];
-GLOBAL long 	level_misc[100];
-GLOBAL char 	expired_level;	/* Expired user's ML */
-GLOBAL ulong	expired_flags1; /* Flags from set #1 to remove when expired */
-GLOBAL ulong	expired_flags2; /* Flags from set #2 to remove when expired */
-GLOBAL ulong	expired_flags3; /* Flags from set #3 to remove when expired */
-GLOBAL ulong	expired_flags4; /* Flags from set #4 to remove when expired */
-GLOBAL ulong	expired_exempt; /* Exemptions to remove when expired */
-GLOBAL ulong	expired_rest;	/* Restrictions to add when expired */
-GLOBAL ushort	min_dspace; 	/* Minimum amount of free space for uploads */
-GLOBAL ushort	max_batup;		/* Max number of files in upload queue */
-GLOBAL ushort	max_batdn;		/* Max number of files in download queue */
-GLOBAL ushort	max_userxfer;	/* Max dest. users of user to user xfer */
-GLOBAL ulong	max_minutes;	/* Maximum minutes a user can have */
-GLOBAL ulong	max_qwkmsgs;	/* Maximum messages per QWK packet */
-#ifdef SCFG
-GLOBAL uchar	preqwk_ar[LEN_ARSTR+1]; /* pre pack QWK */
-#else
-GLOBAL uchar	*preqwk_ar;
-#endif
-GLOBAL ushort	cdt_min_value;	/* Minutes per 100k credits */
-GLOBAL ulong	cdt_per_dollar; /* Credits per dollar */
-GLOBAL ushort	cdt_up_pct; 	/* Pct of credits credited on uploads */
-GLOBAL ushort	cdt_dn_pct; 	/* Pct of credits credited per download */
-GLOBAL char 	node_dir[LEN_DIR+1];
-GLOBAL char 	ctrl_dir[LEN_DIR+1];
-GLOBAL char 	data_dir[LEN_DIR+1];
-GLOBAL char 	text_dir[LEN_DIR+1];
-GLOBAL char 	exec_dir[LEN_DIR+1];
-GLOBAL char 	temp_dir[LEN_DIR+1];
-GLOBAL char 	**node_path;		/* paths to all node dirs */
-GLOBAL ushort	sysop_dir;			/* Destination for uploads to sysop */
-GLOBAL ushort	user_dir;			/* Directory for user to user xfers */
-GLOBAL ushort	upload_dir; 		/* Directory where all uploads go */
-GLOBAL char 	**altpath;			/* Alternate paths for files */
-GLOBAL ushort	altpaths;			/* Total number of alternate paths */
-GLOBAL ushort	leech_pct;			/* Leech detection percentage */
-GLOBAL ushort	leech_sec;			/* Minimum seconds before possible leech */
-GLOBAL ulong	netmail_cost;		/* Cost in credits to send netmail */
-GLOBAL char 	netmail_dir[LEN_DIR+1];    /* Directory to store netmail */
-GLOBAL ushort	netmail_misc;		/* Miscellaneous bits regarding netmail */
-GLOBAL ulong	inetmail_misc;		/* Miscellaneous bits regarding inetmail */
-GLOBAL ulong	inetmail_cost;		/* Cost in credits to send Internet mail */
-GLOBAL uchar	inetmail_sem[LEN_DIR+1];	/* Internet Mail semaphore file */
-GLOBAL char 	echomail_dir[LEN_DIR+1];   /* Directory to store echomail in */
-GLOBAL char 	fidofile_dir[LEN_DIR+1];   /* Directory where inbound files go */
-GLOBAL char 	netmail_sem[LEN_DIR+1];    /* FidoNet NetMail semaphore */
-GLOBAL char 	echomail_sem[LEN_DIR+1];   /* FidoNet EchoMail semaphore  */
-GLOBAL char 	origline[51];		/* Default EchoMail origin line */
-GLOBAL char 	qnet_tagline[128];	/* Default QWK Network tagline */
-GLOBAL long 	uq; 					/* User Questions */
-GLOBAL ulong	mail_maxcrcs;			/* Dupe checking in e-mail */
-GLOBAL ushort	mail_maxage;			/* Maximum age of e-mail */
-GLOBAL faddr_t	dflt_faddr; 			/* Default FidoNet address */
-GLOBAL uchar	logon_mod[9];			/* Logon module */
-GLOBAL uchar	logoff_mod[9];			/* Logoff module */
-GLOBAL uchar	newuser_mod[9]; 		/* New User Module */
-GLOBAL uchar	login_mod[9];			/* Login module */
-GLOBAL uchar	logout_mod[9];			/* Logout module */
-GLOBAL uchar	sync_mod[9];			/* Synchronization module */
-GLOBAL uchar	expire_mod[9];			/* User expiration module */
-GLOBAL uchar	scfg_cmd[LEN_CMD+1];	/* SCFG command line */
-GLOBAL uchar	smb_retry_time; 		/* Seconds to retry on SMBs */
-GLOBAL ushort	sec_warn;				/* Seconds before inactivity warning */
-GLOBAL ushort	sec_hangup; 			/* Seconds before inactivity hang-up */
-
-#ifndef SCFG
-
-GLOBAL uchar	data_dir_subs[128]; 	/* DATA\SUBS directory */
-GLOBAL uchar    data_dir_dirs[128];     /* DATA\DIRS directory */
-
-#endif
-
-#ifdef SCFG
-
-GLOBAL char 	wfc_cmd[10][LEN_CMD+1];    /* 0-9 WFC DOS commands */
-GLOBAL char 	wfc_scmd[12][LEN_CMD+1];   /* F1-F12 WFC shrinking DOS commands */
-
-#else
-
-GLOBAL char 	*wfc_cmd[10];		/* 0-9 WFC DOS commands */
-GLOBAL char     *wfc_scmd[12];      /* F1-F12 WFC shrinking DOS commands */
-
-#endif
-
diff --git a/src/sbbs2/slog/make.bat b/src/sbbs2/slog/make.bat
deleted file mode 100755
index 0d8ba2a2b7..0000000000
--- a/src/sbbs2/slog/make.bat
+++ /dev/null
@@ -1,2 +0,0 @@
-@echo off
-bcc -w-pro -I.. -ml -ndos slog.c
diff --git a/src/sbbs2/slog/make.cmd b/src/sbbs2/slog/make.cmd
deleted file mode 100755
index e223e5c79c..0000000000
--- a/src/sbbs2/slog/make.cmd
+++ /dev/null
@@ -1,2 +0,0 @@
-@echo off
-bcc -w-pro -I.. -nos2 slog.c
diff --git a/src/sbbs2/slog/slog.c b/src/sbbs2/slog/slog.c
deleted file mode 100644
index 4a8170fb25..0000000000
--- a/src/sbbs2/slog/slog.c
+++ /dev/null
@@ -1,140 +0,0 @@
-/* SLOG.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <sys\stat.h>
-#include <io.h>
-#include <dos.h>
-#include <alloc.h>
-#include <time.h>
-#include <errno.h>
-
-#include "sbbsdefs.h"
-
-/****************************************************************************/
-/* Network open function. Opens all files DENYALL and retries LOOP_NOPEN    */
-/* number of times if the attempted file is already open or denying access  */
-/* for some other reason.	All files are opened in BINARY mode.			*/
-/****************************************************************************/
-int nopen(char *str, int access)
-{
-	char	logstr[256];
-	int 	file,share,count=0;
-
-if(access==O_RDONLY) share=O_DENYWRITE;
-	else share=O_DENYALL;
-while(((file=open(str,O_BINARY|share|access,S_IWRITE))==-1)
-	&& errno==EACCES && count++<LOOP_NOPEN);
-if(count)
-	printf("NOPEN COLLISION - File: %s Count: %d"
-		,str,count);
-if(file==-1 && errno==EACCES)
-	printf("\7\r\nNOPEN: ACCESS DENIED\r\n\7");
-return(file);
-}
-
-
-/****************************************************************************/
-/* Lists system statistics for everyday the bbs has been running.           */
-/* Either for the current node (node=1) or the system (node=0)              */
-/****************************************************************************/
-int main(int argc, char **argv)
-{
-	char str[256],dir[256]={""},*p;
-    uchar *buf;
-	int i,file,pause=0,lncntr=0;
-    time_t timestamp;
-    long l;
-    ulong   length,
-            logons,
-            timeon,
-            posts,
-            emails,
-            fbacks,
-            ulb,
-            uls,
-            dlb,
-            dls;
-	 struct date date;
-	 struct time curtime;
-
-
-printf("\nSynchronet System/Node Statistics Log Viewer v1.02\n\n");
-
-for(i=1;i<argc;i++)
-	if(!stricmp(argv[i],"/P"))
-		pause=1;
-	else
-		strcpy(dir,argv[1]);
-if(!dir[0]) {
-	p=getenv("SBBSCTRL");
-	if(p!=NULL)
-		strcpy(dir,p); }
-
-if(dir[0] && dir[strlen(dir)-1]!='\\')
-	strcat(dir,"\\");
-
-sprintf(str,"%sCSTS.DAB",dir);
-if((file=nopen(str,O_RDONLY))==-1) {
-	printf("Error opening %s\r\n",str);
-	return(1); }
-length=filelength(file);
-if(length<40) {
-    close(file);
-	return(1); }
-if((buf=(char *)MALLOC(length))==0) {
-    close(file);
-	printf("error allocating %lu bytes\r\n",length);
-	return(1); }
-read(file,buf,length);
-close(file);
-l=length-4;
-while(l>-1L) {
-    fbacks=buf[l]|((long)buf[l+1]<<8)|((long)buf[l+2]<<16)
-        |((long)buf[l+3]<<24);
-    l-=4;
-    emails=buf[l]|((long)buf[l+1]<<8)|((long)buf[l+2]<<16)
-        |((long)buf[l+3]<<24);
-    l-=4;
-    posts=buf[l]|((long)buf[l+1]<<8)|((long)buf[l+2]<<16)
-        |((long)buf[l+3]<<24);
-    l-=4;
-    dlb=buf[l]|((long)buf[l+1]<<8)|((long)buf[l+2]<<16)
-        |((long)buf[l+3]<<24);
-    l-=4;
-    dls=buf[l]|((long)buf[l+1]<<8)|((long)buf[l+2]<<16)
-        |((long)buf[l+3]<<24);
-    l-=4;
-    ulb=buf[l]|((long)buf[l+1]<<8)|((long)buf[l+2]<<16)
-        |((long)buf[l+3]<<24);
-    l-=4;
-    uls=buf[l]|((long)buf[l+1]<<8)|((long)buf[l+2]<<16)
-        |((long)buf[l+3]<<24);
-    l-=4;
-    timeon=buf[l]|((long)buf[l+1]<<8)|((long)buf[l+2]<<16)
-        |((long)buf[l+3]<<24);
-    l-=4;
-    logons=buf[l]|((long)buf[l+1]<<8)|((long)buf[l+2]<<16)
-        |((long)buf[l+3]<<24);
-    l-=4;
-    timestamp=buf[l]|((long)buf[l+1]<<8)|((long)buf[l+2]<<16)
-        |((long)buf[l+3]<<24);
-    l-=4;
-    unixtodos(timestamp-(24*60*60),&date,&curtime); /* 1 day less than stamp */
-	printf("%2.2d/%2.2d/%2.2d T:%5lu   L:%3lu   P:%3lu   "
-		"E:%3lu   F:%3lu   U:%6luk %3lu  D:%6luk %3lu\n"
-		,date.da_mon,date.da_day,date.da_year%100,timeon,logons,posts,emails
-		,fbacks,ulb/1024,uls,dlb/1024,dls);
-	lncntr++;
-	if(pause && lncntr>=20) {
-		printf("[Hit a key]");
-		if(getch()==3)
-			break;
-		printf("\r");
-		lncntr=0; } }
-FREE(buf);
-return(0);
-}
diff --git a/src/sbbs2/smb/121a/chksmb.c b/src/sbbs2/smb/121a/chksmb.c
deleted file mode 100644
index 5cb0c8bdf7..0000000000
--- a/src/sbbs2/smb/121a/chksmb.c
+++ /dev/null
@@ -1,671 +0,0 @@
-/* CHKSMB.C */
-
-#include <dos.h>
-#include "smblib.h"
-
-/****************************************************************************/
-/* Checks the disk drive for the existence of a file. Returns 1 if it       */
-/* exists, 0 if it doesn't.                                                 */
-/* Called from upload                                                       */
-/****************************************************************************/
-char fexist(char *filespec)
-{
-	struct find_t f;
-
-if(!_dos_findfirst(filespec,0,&f))
-    return(1);
-return(0);
-}
-
-/****************************************************************************/
-/* Returns in 'string' a character representation of the number in l with   */
-/* commas.																	*/
-/****************************************************************************/
-char *ultoac(ulong l, char *string)
-{
-	char str[256];
-	signed char i,j,k;
-
-ultoa(l,str,10);
-i=strlen(str)-1;
-j=i/3+1+i;
-string[j--]=0;
-for(k=1;i>-1;k++) {
-	string[j--]=str[i--];
-	if(j>0 && !(k%3))
-		string[j--]=','; }
-return(string);
-}
-
-/****************************************************************************/
-/* Returns an ASCII string for FidoNet address 'addr'                       */
-/****************************************************************************/
-char *faddrtoa(fidoaddr_t addr)
-{
-	static char str[25];
-	char point[25];
-
-sprintf(str,"%u:%u/%u",addr.zone,addr.net,addr.node);
-if(addr.point) {
-	sprintf(point,".%u",addr.point);
-	strcat(str,point); }
-return(str);
-}
-
-char *usage="\nusage: chksmb [/opts] <filespec.SHD>\n"
-			"\n"
-			" opts:\n"
-			"       s - stop after errored message base\n"
-			"       p - pause after errored messsage base\n"
-			"       q - quiet mode (no beeps while checking)\n"
-			"       t - don't check translation strings\n"
-			"       e - display extended info on corrupted msgs\n";
-
-int main(int argc, char **argv)
-{
-	char		str[128],*p,*s,*beep="\7";
-	int 		i,j,x,y,lzh,errors,errlast,stop_on_error=0,pause_on_error=0
-				,chkxlat=1,lzhmsg,extinfo=0,msgerr;
-	ushort		xlat;
-	ulong		l,m,n,length,size,total=0,orphan=0,deleted=0,headers=0
-				,*offset,*number,xlaterr
-				,delhdrblocks,deldatblocks,hdrerr=0,lockerr=0,hdrnumerr=0
-				,acthdrblocks,actdatblocks
-				,dfieldlength=0,dfieldoffset=0
-				,dupenum=0,dupenumhdr=0,dupeoff=0,attr=0,actalloc=0
-				,datactalloc=0,misnumbered=0,timeerr=0,idxofferr=0,idxerr
-				,zeronum,idxzeronum,idxnumerr,packable=0L,totallzhsaved=0L
-				,totalmsgs=0,totallzhmsgs=0,totaldelmsgs=0,totalmsgbytes=0L
-				,lzhblocks,lzhsaved;
-	idxrec_t	idx;
-	smbmsg_t	msg;
-    smbstatus_t status;
-
-fprintf(stderr,"\nCHKSMB v1.24 � Check Synchronet Message Base � "
-	"Copyright 1995 Digital Dynamics\n");
-
-if(argc<2) {
-	printf("%s",usage);
-	exit(1); }
-
-errlast=errors=0;
-for(x=1;x<argc;x++) {
-	if(stop_on_error && errors)
-		break;
-	if(pause_on_error && errlast!=errors) {
-		fprintf(stderr,"\7\nHit any key to continue...");
-        if(!getch())
-            getch();
-        printf("\n"); }
-	errlast=errors;
-	if(argv[x][0]=='/') {
-		for(y=1;argv[x][y];y++)
-			switch(toupper(argv[x][y])) {
-				case 'Q':
-					beep="";
-					break;
-				case 'P':
-					pause_on_error=1;
-					break;
-				case 'S':
-					stop_on_error=1;
-					break;
-				case 'T':
-					chkxlat=0;
-					break;
-				case 'E':
-					extinfo=1;
-					break;
-				default:
-					printf("%s",usage);
-					exit(1); }
-		continue; }
-
-strcpy(smb_file,argv[x]);
-p=strrchr(smb_file,'.');
-s=strrchr(smb_file,'\\');
-if(p>s) *p=0;
-strupr(smb_file);
-
-sprintf(str,"%s.SHD",smb_file);
-if(!fexist(str)) {
-	printf("\n%s doesn't exist.\n",smb_file);
-	continue; }
-
-fprintf(stderr,"\nChecking %s Headers\n\n",smb_file);
-
-if((i=smb_open(10))!=0) {
-	printf("smb_open returned %d\n",i);
-	errors++;
-	continue; }
-
-if(filelength(fileno(shd_fp))<sizeof(smbhdr_t)) {
-	printf("Empty\n");
-	smb_close();
-	continue; }
-
-if((i=smb_locksmbhdr(10))!=0) {
-	smb_close();
-	printf("smb_locksmbhdr returned %d\n",i);
-	errors++;
-	continue; }
-
-if((i=smb_getstatus(&status))!=0) {
-	smb_unlocksmbhdr();
-	smb_close();
-	printf("smb_getstatus returned %d\n",i);
-	errors++;
-	continue; }
-
-
-length=filelength(fileno(shd_fp));
-
-if((length/SHD_BLOCK_LEN)*sizeof(ulong)) {
-	if((number=(ulong *)MALLOC(((length/SHD_BLOCK_LEN)+2)*sizeof(ulong)))
-		==NULL) {
-		printf("Error allocating %lu bytes of memory\n"
-			,(length/SHD_BLOCK_LEN)*sizeof(ulong));
-		return(++errors); } }
-else
-	number=NULL;
-
-if(!(status.attr&SMB_HYPERALLOC)) {
-	if((i=smb_open_ha(10))!=0) {
-		printf("smb_open_ha returned %d\n",i);
-		return(++errors); }
-
-	if((i=smb_open_da(10))!=0) {
-		printf("smb_open_da returned %d\n",i);
-		return(++errors); } }
-
-headers=deleted=orphan=dupenumhdr=attr=zeronum=timeerr=lockerr=hdrerr=0;
-actalloc=datactalloc=deldatblocks=delhdrblocks=xlaterr=0;
-lzhblocks=lzhsaved=acthdrblocks=actdatblocks=0;
-
-for(l=status.header_offset;l<length;l+=size) {
-	fprintf(stderr,"\r%2u%%  ",(long)(100.0/((float)length/l)));
-	msg.idx.offset=l;
-	msgerr=0;
-	if((i=smb_lockmsghdr(msg,10))!=0) {
-		printf("\n(%06lX) smb_lockmsghdr returned %d\n",l,i);
-		lockerr++;
-		headers++;
-		size=SHD_BLOCK_LEN;
-		continue; }
-	if((i=smb_getmsghdr(&msg))!=0) {
-		smb_unlockmsghdr(msg);
-		if(!(status.attr&SMB_HYPERALLOC)) {
-			fseek(sha_fp,(l-status.header_offset)/SHD_BLOCK_LEN,SEEK_SET);
-			j=fgetc(sha_fp);
-			if(j) { 			/* Allocated block or at EOF */
-				printf("%s\n(%06lX) smb_getmsghdr returned %d\n",beep,l,i);
-				hdrerr++; }
-			else
-				delhdrblocks++; }
-		else {
-			/* printf("%s\n(%06lX) smb_getmsghdr returned %d\n",beep,l,i); */
-			delhdrblocks++; }
-		size=SHD_BLOCK_LEN;
-		continue; }
-	smb_unlockmsghdr(msg);
-	fprintf(stderr,"#%-5lu (%06lX) %-25.25s ",msg.hdr.number,l,msg.from);
-
-	lzhmsg=0;
-	if(msg.hdr.attr&MSG_DELETE) {
-		deleted++;
-		if(number)
-			number[headers]=0;
-		if(status.attr&SMB_HYPERALLOC)
-			deldatblocks+=smb_datblocks(smb_getmsgdatlen(msg)); }
-	else {
-		actdatblocks+=smb_datblocks(smb_getmsgdatlen(msg));
-		if(msg.hdr.number>status.last_msg) {
-			fprintf(stderr,"%sOut-Of-Range message number\n",beep);
-			msgerr=1;
-			if(extinfo)
-				printf("MSGERR: Header number (%lu) greater than last (%lu)\n"
-					,msg.hdr.number,status.last_msg);
-			hdrnumerr++; }
-
-		if(smb_getmsgidx(&msg)) {
-			fprintf(stderr,"%sNot found in index\n",beep);
-			msgerr=1;
-			if(extinfo)
-				printf("MSGERR: Header number (%lu) not found in index\n"
-					,msg.hdr.number);
-			orphan++; }
-		else if(msg.hdr.attr!=msg.idx.attr) {
-			fprintf(stderr,"%sAttributes mismatch index\n",beep);
-			msgerr=1;
-			if(extinfo)
-				printf("MSGERR: Header attributes (%04X) do not match index "
-					"attributes (%04X)\n"
-					,msg.hdr.attr,msg.idx.attr);
-			attr++; }
-		else if(msg.hdr.when_imported.time!=msg.idx.time) {
-			fprintf(stderr,"%sImport date/time mismatch index\n",beep);
-			msgerr=1;
-			if(extinfo)
-				printf("MSGERR: Header import date/time does not match "
-					"index import date/time\n");
-			timeerr++; }
-
-		if(msg.hdr.number==0) {
-			fprintf(stderr,"%sZero message number\n",beep);
-			msgerr=1;
-			if(extinfo)
-				printf("MSGERR: Header number is zero (invalid)\n");
-			zeronum++; }
-		if(number) {
-			for(m=0;m<headers;m++)
-				if(number[m] && msg.hdr.number==number[m]) {
-					fprintf(stderr,"%sDuplicate message number\n",beep);
-					msgerr=1;
-					if(extinfo)
-						printf("MSGERR: Header number (%lu) duplicated\n"
-							,msg.hdr.number);
-					dupenumhdr++;
-					break; }
-			number[headers]=msg.hdr.number; }
-		if(chkxlat) {		/* Check translation strings */
-			for(i=0;i<msg.hdr.total_dfields;i++) {
-				fseek(sdt_fp,msg.hdr.offset+msg.dfield[i].offset,SEEK_SET);
-				if(!fread(&xlat,2,1,sdt_fp))
-					xlat=0xffff;
-				lzh=0;
-				if(xlat==XLAT_LZH) {
-					lzh=1;
-					if(!fread(&xlat,2,1,sdt_fp))
-						xlat=0xffff; }
-				if(xlat!=XLAT_NONE) {
-					fprintf(stderr,"%sUnsupported Xlat %04X dfield[%u]\n"
-						,beep,xlat,i);
-					msgerr=1;
-					if(extinfo)
-						printf("MSGERR: Unsupported translation type (%04X) "
-							"in dfield[%u]\n"
-							,xlat,i);
-					xlaterr++; }
-				else {
-					if(lzh) {
-						lzhmsg=1;
-						if(fread(&m,4,1,sdt_fp)) { /* Get uncompressed len */
-							lzhsaved+=(smb_datblocks(m+2)
-								-smb_datblocks(msg.dfield[i].length))
-								*SDT_BLOCK_LEN;
-							lzhblocks+=smb_datblocks(msg.dfield[i].length);
-						} } } } } }
-
-	size=smb_getmsghdrlen(msg);
-	while(size%SHD_BLOCK_LEN)
-		size++;
-
-	if(!(status.attr&SMB_HYPERALLOC)) {
-		fseek(sha_fp,(l-status.header_offset)/SHD_BLOCK_LEN,SEEK_SET);
-		for(m=0;m<size;m+=SHD_BLOCK_LEN) {
-/***
-			if(msg.hdr.attr&MSG_DELETE && (i=fgetc(sha_fp))!=0) {
-				fprintf(stderr,"%sDeleted Header Block %lu marked %02X\n"
-					,beep,m/SHD_BLOCK_LEN,i);
-				msgerr=1;
-				delalloc++; }
-***/
-			if(!(msg.hdr.attr&MSG_DELETE) && (i=fgetc(sha_fp))!=1) {
-				fprintf(stderr,"%sActive Header Block %lu marked %02X\n"
-					,beep,m/SHD_BLOCK_LEN,i);
-				msgerr=1;
-				if(extinfo)
-					printf("MSGERR: Active header block %lu marked %02X "
-						"instead of 01\n"
-						,m/SHD_BLOCK_LEN,i);
-				actalloc++; } }
-
-		if(!(msg.hdr.attr&MSG_DELETE)) {
-			acthdrblocks+=(size/SHD_BLOCK_LEN);
-			for(n=0;n<msg.hdr.total_dfields;n++) {
-				if(msg.dfield[n].offset&0x80000000UL) {
-					msgerr=1;
-					if(extinfo)
-						printf("MSGERR: Invalid Data Field [%u] Offset: %lu\n"
-							,n,msg.dfield[n].offset);
-					dfieldoffset++; }
-				if(msg.dfield[n].length&0x80000000UL) {
-					msgerr=1;
-					if(extinfo)
-						printf("MSGERR: Invalid Data Field [%u] Length: %lu\n"
-							,n,msg.dfield[n].length);
-					dfieldlength++; }
-				fseek(sda_fp
-					,((msg.hdr.offset+msg.dfield[n].offset)/SDT_BLOCK_LEN)*2
-					,SEEK_SET);
-				for(m=0;m<msg.dfield[n].length;m+=SDT_BLOCK_LEN) {
-					if(!fread(&i,2,1,sda_fp) || !i) {
-						fprintf(stderr
-							,"%sActive Data Block %lu.%lu marked free\n"
-							,beep,n,m/SHD_BLOCK_LEN);
-						msgerr=1;
-						if(extinfo)
-							printf("MSGERR: Active Data Block %lu.%lu "
-								"marked free\n"
-								,n,m/SHD_BLOCK_LEN);
-						datactalloc++; } } } }
-		else
-			delhdrblocks+=(size/SHD_BLOCK_LEN); }
-
-	else {	 /* Hyper Alloc */
-		if(msg.hdr.attr&MSG_DELETE)
-			delhdrblocks+=(size/SHD_BLOCK_LEN);
-		else
-			acthdrblocks+=(size/SHD_BLOCK_LEN); }
-
-	totallzhmsgs+=lzhmsg;
-	headers++;
-	if(msgerr && extinfo) {
-		printf("\n");
-		printf("%-20s: %s\n","Message Base",smb_file);
-		printf("%-20s: %lu (%lu)\n","Message Number"
-			,msg.hdr.number,msg.offset+1);
-		printf("%-20s: %s\n","Subject",msg.subj);
-		printf("%-20s: %s","To",msg.to);
-		if(msg.to_net.type)
-			printf(" (%s)",msg.to_net.type==NET_FIDO
-				? faddrtoa(*(fidoaddr_t *)msg.to_net.addr) : msg.to_net.addr);
-		printf("\n%-20s: %s","From",msg.from);
-		if(msg.from_net.type)
-			printf(" (%s)",msg.from_net.type==NET_FIDO
-				? faddrtoa(*(fidoaddr_t *)msg.from_net.addr)
-                    : msg.from_net.addr);
-		printf("\n");
-		printf("%-20s: %.24s\n","When Written"
-			,ctime((time_t *)&msg.hdr.when_written.time));
-		printf("%-20s: %.24s\n","When Imported"
-			,ctime((time_t *)&msg.hdr.when_imported.time));
-		printf("%-20s: %04hXh\n","Type"
-			,msg.hdr.type);
-		printf("%-20s: %04hXh\n","Version"
-			,msg.hdr.version);
-		printf("%-20s: %u\n","Length"
-			,msg.hdr.length);
-		printf("%-20s: %04hXh\n","Attributes"
-			,msg.hdr.attr);
-		printf("%-20s: %08lXh\n","Auxilary Attributes"
-			,msg.hdr.auxattr);
-		printf("%-20s: %08lXh\n","Network Attributes"
-			,msg.hdr.netattr);
-		printf("%-20s: %06lXh\n","Header Offset"
-			,msg.idx.offset);
-		printf("%-20s: %06lXh\n","Data Offset"
-			,msg.hdr.offset);
-		printf("%-20s: %u\n","Total Data Fields"
-			,msg.hdr.total_dfields);
-		printf("\n"); }
-
-    smb_freemsgmem(msg); }
-
-if(number)
-    FREE(number);
-
-fprintf(stderr,"\r%79s\r100%%\n","");
-
-
-if(!(status.attr&SMB_HYPERALLOC)) {
-
-	fprintf(stderr,"\nChecking %s Data Blocks\n\n",smb_file);
-
-	length=filelength(fileno(sda_fp));
-
-	fseek(sda_fp,0L,SEEK_SET);
-	for(l=0;l<length;l+=2) {
-		fprintf(stderr,"\r%2u%%  ",l ? (long)(100.0/((float)length/l)) : 0);
-		i=0;
-		if(!fread(&i,2,1,sda_fp))
-			break;
-		if(!i)
-			deldatblocks++; }
-
-	fclose(sha_fp);
-	fclose(sda_fp);
-
-	fprintf(stderr,"\r%79s\r100%%\n",""); }
-
-total=filelength(fileno(sid_fp))/sizeof(idxrec_t);
-
-dupenum=dupeoff=misnumbered=idxzeronum=idxnumerr=idxofferr=idxerr=0;
-
-if(total) {
-
-fprintf(stderr,"\nChecking %s Index\n\n",smb_file);
-
-if((offset=(ulong *)MALLOC(total*sizeof(ulong)))==NULL) {
-    printf("Error allocating %lu bytes of memory\n",total*sizeof(ulong));
-	return(++errors); }
-if((number=(ulong *)MALLOC(total*sizeof(ulong)))==NULL) {
-    printf("Error allocating %lu bytes of memory\n",total*sizeof(ulong));
-	return(++errors); }
-fseek(sid_fp,0L,SEEK_SET);
-
-for(l=0;l<total;l++) {
-	fprintf(stderr,"\r%2lu%%  %5lu ",l ? (long)(100.0/((float)total/l)) : 0,l);
-	if(!fread(&idx,sizeof(idxrec_t),1,sid_fp))
-		break;
-	fprintf(stderr,"#%-5lu (%06lX) 1st Pass ",idx.number,idx.offset);
-/***
-	if(idx.attr&MSG_DELETE) {
-		fprintf(stderr,"%sMarked for deletion\n",beep);
-		delidx++; }
-***/
-	for(m=0;m<l;m++)
-        if(number[m]==idx.number) {
-			fprintf(stderr,"%sDuplicate message number\n",beep);
-			dupenum++;
-			break; }
-	for(m=0;m<l;m++)
-        if(offset[m]==idx.offset) {
-			fprintf(stderr,"%sDuplicate offset\n",beep,idx.offset);
-			dupeoff++;
-			break; }
-	if(idx.offset<status.header_offset) {
-		fprintf(stderr,"%sInvalid offset\n",beep);
-		idxofferr++;
-		break; }
-	if(idx.number==0) {
-		fprintf(stderr,"%sZero message number\n",beep);
-		idxzeronum++;
-		break; }
-	if(idx.number>status.last_msg) {
-		fprintf(stderr,"%sOut-Of-Range message number\n",beep);
-		idxnumerr++;
-		break; }
-    number[l]=idx.number;
-    offset[l]=idx.offset; }
-
-if(l<total) {
-	fprintf(stderr,"%sError reading index record\n",beep);
-	idxerr=1; }
-else {
-	fprintf(stderr,"\r%79s\r","");
-	for(m=0;m<total;m++) {
-		fprintf(stderr,"\r%2lu%%  %5lu ",m ? (long)(100.0/((float)total/m)) : 0,m);
-		fprintf(stderr,"#%-5lu (%06lX) 2nd Pass ",number[m],offset[m]);
-		for(n=0;n<m;n++)
-			if(number[m] && number[n] && number[m]<number[n]) {
-				fprintf(stderr,"%sMisordered message number\n",beep);
-				misnumbered++;
-				number[n]=0;
-				break; } }
-	fprintf(stderr,"\r%79s\r100%%\n",""); }
-FREE(number);
-FREE(offset);
-
-}	/* if(total) */
-
-totalmsgs+=status.total_msgs;
-totalmsgbytes+=(acthdrblocks*SHD_BLOCK_LEN)+(actdatblocks*SDT_BLOCK_LEN);
-totaldelmsgs+=deleted;
-totallzhsaved+=lzhsaved;
-printf("\n");
-printf("%-35.35s (=): %lu\n"
-	,"Status Total"
-	,status.total_msgs);
-printf("%-35.35s (=): %lu\n"
-	,"Index Records"
-	,total);
-printf("%-35.35s (=): %lu\n"
-	,"Active Headers"
-	,headers-deleted);
-printf("%-35.35s ( ): %-8lu %13s bytes used\n"
-	,"Active Header Blocks"
-	,acthdrblocks,ultoac(acthdrblocks*SHD_BLOCK_LEN,str));
-printf("%-35.35s ( ): %-8lu %13s bytes used\n"
-	,"Active Data Blocks"
-	,actdatblocks,ultoac(actdatblocks*SDT_BLOCK_LEN,str));
-if(lzhblocks)
-	printf("%-35.35s ( ): %-8lu %13s bytes saved\n"
-		,"Active LZH Compressed Data Blocks"
-		,lzhblocks,ultoac(lzhsaved,str));
-printf("%-35.35s ( ): %lu\n"
-	,"Header Records"
-    ,headers);
-printf("%-35.35s ( ): %lu\n"
-	,"Deleted Headers"
-	,deleted);
-printf("%-35.35s ( ): %-8lu %13s bytes used\n"
-	,"Deleted Header Blocks"
-	,delhdrblocks,ultoac(delhdrblocks*SHD_BLOCK_LEN,str));
-packable+=(delhdrblocks*SHD_BLOCK_LEN);
-printf("%-35.35s ( ): %-8lu %13s bytes used\n"
-	,"Deleted Data Blocks"
-	,deldatblocks,ultoac(deldatblocks*SDT_BLOCK_LEN,str));
-packable+=(deldatblocks*SDT_BLOCK_LEN);
-
-if(orphan)
-	printf("%-35.35s (!): %lu\n"
-		,"Orphaned Headers"
-		,orphan);
-if(idxzeronum)
-	printf("%-35.35s (!): %lu\n"
-		,"Zeroed Index Numbers"
-		,idxzeronum);
-if(zeronum)
-	printf("%-35.35s (!): %lu\n"
-		,"Zeroed Header Numbers"
-		,zeronum);
-/***
-if(delidx)
-	printf("%-35.35s (!): %lu\n"
-		,"Deleted Index Records"
-		,delidx);
-***/
-if(idxofferr)
-	printf("%-35.35s (!): %lu\n"
-		,"Invalid Index Offsets"
-		,idxofferr);
-if(dupenum)
-	printf("%-35.35s (!): %lu\n"
-		,"Duplicate Index Numbers"
-		,dupenum);
-if(dupeoff)
-	printf("%-35.35s (!): %lu\n"
-		,"Duplicate Index Offsets"
-		,dupeoff);
-if(dupenumhdr)
-	printf("%-35.35s (!): %lu\n"
-		,"Duplicate Header Numbers"
-		,dupenumhdr);
-if(misnumbered)
-	printf("%-35.35s (!): %lu\n"
-		,"Misordered Index Numbers"
-		,misnumbered);
-if(lockerr)
-	printf("%-35.35s (!): %lu\n"
-		,"Unlockable Header Records"
-		,lockerr);
-if(hdrerr)
-	printf("%-35.35s (!): %lu\n"
-		,"Unreadable Header Records"
-		,hdrerr);
-if(idxnumerr)
-    printf("%-35.35s (!): %lu\n"
-		,"Out-Of-Range Index Numbers"
-		,idxnumerr);
-if(hdrnumerr)
-    printf("%-35.35s (!): %lu\n"
-		,"Out-Of-Range Header Numbers"
-		,hdrnumerr);
-if(attr)
-	printf("%-35.35s (!): %lu\n"
-		,"Mismatched Header Attributes"
-		,attr);
-if(timeerr)
-	printf("%-35.35s (!): %lu\n"
-		,"Mismatched Header Import Time"
-		,timeerr);
-if(xlaterr)
-    printf("%-35.35s (!): %lu\n"
-        ,"Unsupported Translation Types"
-        ,xlaterr);
-if(datactalloc)
-	printf("%-35.35s (!): %lu\n"
-		,"Misallocated Active Data Blocks"
-		,datactalloc);
-if(actalloc)
-	printf("%-35.35s (!): %lu\n"
-		,"Misallocated Active Header Blocks"
-		,actalloc);
-/***
-if(delalloc)
-	printf("%-35.35s (!): %lu\n"
-		,"Misallocated Deleted Header Blocks"
-		,delalloc);
-***/
-
-if(dfieldoffset)
-	printf("%-35.35s (!): %lu\n"
-		,"Invalid Data Field Offsets"
-		,dfieldoffset);
-
-if(dfieldlength)
-	printf("%-35.35s (!): %lu\n"
-		,"Invalid Data Field Lengths"
-		,dfieldlength);
-
-
-printf("\n%s Message Base ",smb_file);
-if((headers-deleted)!=status.total_msgs || total!=status.total_msgs
-	|| (headers-deleted)!=total || idxzeronum || zeronum
-	|| orphan || dupenumhdr || dupenum || dupeoff || attr
-	|| lockerr || hdrerr || hdrnumerr || idxnumerr || idxofferr
-	|| actalloc || datactalloc || misnumbered || timeerr
-	|| dfieldoffset || dfieldlength || xlaterr || idxerr) {
-	printf("%shas Errors!\n",beep);
-	errors++; }
-else
-	printf("is OK\n");
-
-smb_unlocksmbhdr();
-smb_close();
-}
-if(pause_on_error && errlast!=errors) {
-	fprintf(stderr,"\7\nHit any key to continue...");
-	if(!getch())
-		getch();
-	fprintf(stderr,"\n"); }
-
-if((totalmsgs && (totalmsgs!=status.total_msgs || totallzhmsgs))
-	|| packable)
-	printf("\n");
-if(totalmsgs && totalmsgs!=status.total_msgs)
-	printf("%-39.39s: %-8lu %13s bytes used\n"
-		,"Total Active Messages"
-		,totalmsgs,ultoac(totalmsgbytes,str));
-if(totallzhmsgs && totalmsgs!=status.total_msgs)
-	printf("%-39.39s: %-8lu %13s bytes saved\n"
-		,"Total LZH Compressed Messages"
-		,totallzhmsgs,ultoac(totallzhsaved,str));
-if(packable)
-	printf("%-39.39s: %-8lu %13s bytes used\n"
-		,"Total Deleted Messages"
-		,totaldelmsgs,ultoac(packable,str));
-
-return(errors);
-}
diff --git a/src/sbbs2/smb/121a/chksmb.mak b/src/sbbs2/smb/121a/chksmb.mak
deleted file mode 100644
index 1609c16ece..0000000000
--- a/src/sbbs2/smb/121a/chksmb.mak
+++ /dev/null
@@ -1,50 +0,0 @@
-###############################
-# Makefile for CHKSMB         #
-# For use with Borland C++    #
-# Tabstop=8		      #
-###############################
-
-# Macros
-
-CC	= bcc
-LD	= tlink
-INCLUDE = \bc31\include
-LIB	= \bc31\lib
-MODEL	= l
-CFLAGS	= -d -C -m$(MODEL) -I$(INCLUDE)
-LFLAGS	= -n -c
-MAIN	= chksmb.exe
-OBJS	= $(MODEL)\chksmb.obj $(MODEL)\smblib.obj $(MODEL)\smbvars.obj
-HEADERS = smblib.h smbdefs.h crc32.h
-
-!ifdef __OS2__
-CC      = c:\bcos2\bin\bcc
-LD      = c:\bcos2\bin\tlink
-INCLUDE = c:\bcos2\include;smb
-LIB     = c:\bcos2\lib
-CFLAGS	= -d -C -I$(INCLUDE)
-LFLAGS  = -c -w-srf
-!endif
-
-# Implicit C Compile Rule
-{.}.c.obj:
-	@echo Compiling (I) $< to $@ ...
-	$(CC) $(CFLAGS) -n$(MODEL) -c $<
-
-# Main EXE Link Rule
-$(MAIN): $(OBJS)
-    	@echo Linking $< ...
-!ifdef __OS2__
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c02.obj $(OBJS) $(LIB)\wildargs.obj
-+, $*, $*, $(LIB)\os2.lib $(LI$(MODEL)\B)\c2.lib
-!else
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c0$(MODEL) $(OBJS) $(LIB)\wildargs.obj
-+, $*, $*, $(LIB)\c$(MODEL).lib $(LIB)\math$(MODEL).lib $(LIB)\emu.lib
-!endif
-
-# All .obj modules
-$(MODEL)\chksmb.obj:	 $(HEADERS)
-$(MODEL)\smbvars.obj:	 $(HEADERS)
-$(MODEL)\smblib.obj:	 $(HEADERS)
diff --git a/src/sbbs2/smb/121a/crc16.c b/src/sbbs2/smb/121a/crc16.c
deleted file mode 100644
index dc89962940..0000000000
--- a/src/sbbs2/smb/121a/crc16.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* CRC16.C */
-
-/* 16-bit CRC routines */
-
-#include "smblib.h"
-
-/****************************************************************************/
-/* Updates 16-bit "rcrc" with character 'ch'                                */
-/****************************************************************************/
-void ucrc16(uchar ch, ushort *rcrc) {
-    ushort i, cy;
-    uchar nch=ch;
- 
-for (i=0; i<8; i++) {
-    cy=*rcrc & 0x8000;
-    *rcrc<<=1;
-    if (nch & 0x80) *rcrc |= 1;
-    nch<<=1;
-    if (cy) *rcrc ^= 0x1021; }
-}
-
-/****************************************************************************/
-/* Returns 16-crc of string (not counting terminating NULL)                 */
-/****************************************************************************/
-ushort crc16(char *str)
-{
-    int     i=0;
-    ushort  crc=0;
-
-ucrc16(0,&crc);
-while(str[i])
-    ucrc16(str[i++],&crc);
-ucrc16(0,&crc);
-ucrc16(0,&crc);
-return(crc);
-}
-
diff --git a/src/sbbs2/smb/121a/crc32.h b/src/sbbs2/smb/121a/crc32.h
deleted file mode 100644
index a5d5162fb2..0000000000
--- a/src/sbbs2/smb/121a/crc32.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* 32-bit CRC */
-
-long crc32tbl[]={	/* CRC polynomial 0xedb88320 */
-0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
-0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
-0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
-0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
-0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
-0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
-0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
-0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
-0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
-0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
-0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
-0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
-0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
-0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
-0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
-0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
-0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
-0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
-0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
-0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
-0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
-0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
-0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
-0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
-0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
-0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
-0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
-0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
-0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
-0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
-0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
-0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
-};
-
-#define ucrc32(ch,crc) (crc32tbl[(crc^ch)&0xff]^(crc>>8))
-
-
diff --git a/src/sbbs2/smb/121a/fido2smb.c b/src/sbbs2/smb/121a/fido2smb.c
deleted file mode 100644
index c366b56fbc..0000000000
--- a/src/sbbs2/smb/121a/fido2smb.c
+++ /dev/null
@@ -1,502 +0,0 @@
-/* FIDO2SMB.C */
-
-/* Converts FidoNet FTSC-1 (*.MSG) message base to SMB format */
-
-/* The intention of this source code is an example of how to use the SMBLIB */
-/* library functions to access an SMB format message base.					*/
-
-/* This program and source code are freeware. May be used in part or whole	*/
-/* for any purpose without consent or notification of Digital Dynamics. 	*/
-
-/* Digital Dynamics does request that developers that release products that */
-/* support the SMB format notify Digital Dynamics so the implementation 	*/
-/* and contact chapters in the technical specification may be updated.		*/
-
-#include "smblib.h"
-#include "crc32.h"
-#include <dos.h>
-									/* Attribute bits for fido msg header */
-#define FIDO_PRIVATE	(1<<0)		/* Private message */
-#define FIDO_CRASH		(1<<1)		/* Crash-mail (send immediately) */
-#define FIDO_RECV		(1<<2)		/* Received successfully */
-#define FIDO_SENT		(1<<3)		/* Sent successfully */
-#define FIDO_FILE		(1<<4)		/* File attached */
-#define FIDO_INTRANS	(1<<5)		/* In transit */
-#define FIDO_ORPHAN 	(1<<6)		/* Orphan */
-#define FIDO_KILLSENT	(1<<7)		/* Kill it after sending it */
-#define FIDO_LOCAL		(1<<8)		/* Created locally - on this system */
-#define FIDO_HOLD		(1<<9)		/* Hold - don't send it yet */
-#define FIDO_FREQ		(1<<11) 	/* File request */
-#define FIDO_RRREQ		(1<<12) 	/* Return receipt request */
-#define FIDO_RR 		(1<<13) 	/* This is a return receipt */
-#define FIDO_AUDIT		(1<<14) 	/* Audit request */
-#define FIDO_FUPREQ     (1<<15)     /* File update request */
-
-typedef struct {						/* FidoNet msg header */
-	uchar	from[36],					/* From user */
-			to[36], 					/* To user */
-			subj[72],					/* Message title */
-			time[20];					/* Time in goof-ball ASCII format */
-	short	read,						/* Times read */
-			destnode,					/* Destination node */
-			orignode,					/* Origin node */
-			cost,						/* Cost in pennies */
-			orignet,					/* Origin net */
-			destnet,					/* Destination net */
-			destzone,					/* Destination zone */
-			origzone,					/* Origin zone */
-			destpoint,					/* Destination point */
-			origpoint,					/* Origin point */
-			re, 						/* Message number regarding */
-			attr,						/* Attributes - see FIDO_* */
-			next;						/* Next message number in stream */
-            } fmsghdr_t;
-
-/******************************************/
-/* CRC-16 routines required for SMB index */
-/******************************************/
-
-/****************************************************************************/
-/* Updates 16-bit "rcrc" with character 'ch'                                */
-/****************************************************************************/
-void ucrc16(uchar ch, ushort *rcrc) {
-	ushort i, cy;
-    uchar nch=ch;
- 
-for (i=0; i<8; i++) {
-    cy=*rcrc & 0x8000;
-    *rcrc<<=1;
-    if (nch & 0x80) *rcrc |= 1;
-    nch<<=1;
-    if (cy) *rcrc ^= 0x1021; }
-}
-
-/****************************************************************************/
-/* Returns 16-crc of string (not counting terminating NULL) 				*/
-/****************************************************************************/
-ushort crc16(char *str)
-{
-	int 	i=0;
-	ushort	crc=0;
-
-ucrc16(0,&crc);
-while(str[i])
-	ucrc16(str[i++],&crc);
-ucrc16(0,&crc);
-ucrc16(0,&crc);
-return(crc);
-}
-
-/****************************************************************************/
-/* Truncates white-space chars off end of 'str' and terminates at first tab */
-/****************************************************************************/
-void truncsp(char *str)
-{
-	char c;
-
-str[strcspn(str,"\t")]=0;
-c=strlen(str);
-while(c && (uchar)str[c-1]<=' ') c--;
-str[c]=0;
-}
-
-/****************************************************************************/
-/* Returns the length of the file in 'filespec'                             */
-/****************************************************************************/
-long flength(char *filespec)
-{
-    struct ffblk f;
-
-if(findfirst(filespec,&f,0)==0)
-    return(f.ff_fsize);
-return(-1L);
-}
-
-/****************************************************************************/
-/* Returns the FidoNet address kept in str as ASCII.                        */
-/****************************************************************************/
-fidoaddr_t atofaddr(char *str)
-{
-    char *p;
-	fidoaddr_t addr;
-
-addr.zone=addr.net=addr.node=addr.point=0;
-if((p=strchr(str,':'))!=NULL) {
-	addr.zone=atoi(str);
-	addr.net=atoi(p+1); }
-else {
-	addr.zone=1;
-	addr.net=atoi(str); }
-if(!addr.zone)				/* no such thing as zone 0 */
-	addr.zone=1;
-if((p=strchr(str,'/'))!=NULL)
-    addr.node=atoi(p+1);
-else {
-	addr.net=1;
-	addr.node=atoi(str); }
-if((p=strchr(str,'.'))!=NULL)
-    addr.point=atoi(p+1);
-return(addr);
-}
-
-/****************************************************************************/
-/* Converts goofy FidoNet time format into Unix format						*/
-/****************************************************************************/
-time_t fmsgtime(char *str)
-{
-	char month[4];
-	struct date date;
-	struct time t;
-
-if(isdigit(str[1])) {	/* Regular format: "01 Jan 86  02:34:56" */
-	date.da_day=atoi(str);
-	sprintf(month,"%3.3s",str+3);
-	if(!stricmp(month,"jan"))
-		date.da_mon=1;
-	else if(!stricmp(month,"feb"))
-		date.da_mon=2;
-	else if(!stricmp(month,"mar"))
-		date.da_mon=3;
-	else if(!stricmp(month,"apr"))
-		date.da_mon=4;
-	else if(!stricmp(month,"may"))
-		date.da_mon=5;
-	else if(!stricmp(month,"jun"))
-		date.da_mon=6;
-	else if(!stricmp(month,"jul"))
-		date.da_mon=7;
-	else if(!stricmp(month,"aug"))
-		date.da_mon=8;
-	else if(!stricmp(month,"sep"))
-		date.da_mon=9;
-	else if(!stricmp(month,"oct"))
-		date.da_mon=10;
-	else if(!stricmp(month,"nov"))
-		date.da_mon=11;
-	else
-		date.da_mon=12;
-	date.da_year=1900+atoi(str+7);
-	t.ti_hour=atoi(str+11);
-	t.ti_min=atoi(str+14);
-	t.ti_sec=atoi(str+17); }
-
-else {					/* SEAdog  format: "Mon  1 Jan 86 02:34" */
-	date.da_day=atoi(str+4);
-	sprintf(month,"%3.3s",str+7);
-	if(!stricmp(month,"jan"))
-		date.da_mon=1;
-	else if(!stricmp(month,"feb"))
-		date.da_mon=2;
-	else if(!stricmp(month,"mar"))
-		date.da_mon=3;
-	else if(!stricmp(month,"apr"))
-		date.da_mon=4;
-	else if(!stricmp(month,"may"))
-		date.da_mon=5;
-	else if(!stricmp(month,"jun"))
-		date.da_mon=6;
-	else if(!stricmp(month,"jul"))
-		date.da_mon=7;
-	else if(!stricmp(month,"aug"))
-		date.da_mon=8;
-	else if(!stricmp(month,"sep"))
-		date.da_mon=9;
-	else if(!stricmp(month,"oct"))
-		date.da_mon=10;
-	else if(!stricmp(month,"nov"))
-		date.da_mon=11;
-	else
-		date.da_mon=12;
-	date.da_year=1900+atoi(str+11);
-	t.ti_hour=atoi(str+14);
-	t.ti_min=atoi(str+17);
-	t.ti_sec=0; }
-return(dostounix(&date,&t));
-}
-
-/****************************************************************************/
-/* Entry point - if you didn't know that, maybe you shouldn't be reading :) */
-/****************************************************************************/
-int main(int argc, char **argv)
-{
-	uchar	*p,str[128],*fbuf,*sbody,*stail,ch,done;
-	ushort	xlat,net;
-	int 	i,j,file,col,cr,esc,orig,last,msgs,found;
-	ulong	l,m,length,bodylen,taillen,crc;
-	struct	ffblk ff;
-	smbmsg_t	msg;
-	smbstatus_t status;
-	fmsghdr_t	fmsghdr;
-	fidoaddr_t	destaddr,origaddr,faddr;
-
-if(argc<3) {
-	printf("usage: fido2smb <fido_dir> <smb_name>\r\n");
-	exit(1); }
-
-strcpy(smb_file,argv[2]);
-strupr(smb_file);
-
-smb_open(10);
-if(!filelength(fileno(shd_fp)))
-	smb_create(2000,2000,0,0,10);
-
-smb_getstatus(&status); 	  // Initialized for first call to smb_addcrc()
-
-/*********************************************/
-/* Get the total number of .MSG files in dir */
-/*********************************************/
-printf("\nCounting messages...");
-sprintf(str,"%s\\*.MSG",argv[1]);
-last=findfirst(str,&ff,0);
-for(msgs=0;!last;msgs++)
-	last=findnext(&ff);
-printf("\n%u messages.\n",msgs);
-
-/******************************************/
-/* Convert in sequence, starting at 1.MSG */
-/******************************************/
-for(i=1,found=0;found<msgs && i<2000;i++) {
-	sprintf(str,"%s\\%u.MSG",argv[1],i);
-	if((file=open(str,O_RDONLY|O_BINARY))==-1)
-		continue;
-	found++;
-	strupr(str);
-	printf("%s\n",str);
-	read(file,&fmsghdr,sizeof(fmsghdr_t));
-	memset(&msg,0,sizeof(smbmsg_t));
-	memcpy(msg.hdr.id,"SHD\x1a",4);
-	msg.hdr.version=SMB_VERSION;
-	if(fmsghdr.attr&FIDO_PRIVATE)
-		msg.idx.attr|=MSG_PRIVATE;
-	msg.hdr.attr=msg.idx.attr;
-
-	msg.hdr.when_imported.time=time(NULL);
-	msg.hdr.when_written.time=fmsgtime(fmsghdr.time);
-
-	origaddr.zone=fmsghdr.origzone; 	/* only valid if NetMail */
-	origaddr.net=fmsghdr.orignet;
-	origaddr.node=fmsghdr.orignode;
-	origaddr.point=fmsghdr.origpoint;
-
-	destaddr.zone=fmsghdr.destzone; 	/* only valid if NetMail */
-	destaddr.net=fmsghdr.destnet;
-	destaddr.node=fmsghdr.destnode;
-	destaddr.point=fmsghdr.destpoint;
-
-	smb_hfield(&msg,SENDER,strlen(fmsghdr.from),fmsghdr.from);
-	strlwr(fmsghdr.from);
-	msg.idx.from=crc16(fmsghdr.from);
-
-	smb_hfield(&msg,RECIPIENT,strlen(fmsghdr.to),fmsghdr.to);
-	strlwr(fmsghdr.to);
-	msg.idx.to=crc16(fmsghdr.to);
-
-	smb_hfield(&msg,SUBJECT,strlen(fmsghdr.subj),fmsghdr.subj);
-	strlwr(fmsghdr.subj);
-	msg.idx.subj=crc16(fmsghdr.subj);
-
-	length=filelength(file)-sizeof(fmsghdr_t);
-	if((fbuf=(char *)MALLOC(length))==NULL) {
-		printf("alloc error\n");
-		exit(1); }
-	if((sbody=(char *)MALLOC(length*2L))==NULL) {
-		printf("alloc error\n");
-        exit(1); }
-	if((stail=(char *)MALLOC(length))==NULL) {
-		printf("alloc error\n");
-        exit(1); }
-	read(file,fbuf,length);
-	close(file);
-
-	for(col=l=esc=done=bodylen=taillen=orig=0,cr=1;l<length;l++) {
-		ch=fbuf[l];
-		if(ch==1 && cr) {	/* kludge line */
-
-			if(!strncmp(fbuf+l+1,"TOPT ",5))
-				destaddr.point=atoi(fbuf+l+6);
-
-			else if(!strncmp(fbuf+l+1,"FMPT ",5))
-				origaddr.point=atoi(fbuf+l+6);
-
-			else if(!strncmp(fbuf+l+1,"INTL ",5)) {
-				faddr=atofaddr(fbuf+l+6);
-				destaddr.zone=faddr.zone;
-				destaddr.net=faddr.net;
-				destaddr.node=faddr.node;
-				l+=6;
-				while(l<length && fbuf[l]!=SP) l++;
-				faddr=atofaddr(fbuf+l+1);
-				origaddr.zone=faddr.zone;
-				origaddr.net=faddr.net;
-				origaddr.node=faddr.node; }
-
-			else if(!strncmp(fbuf+l+1,"MSGID:",6)) {
-				l+=7;
-				while(l<length && fbuf[l]<=SP) l++;
-				m=l;
-				while(m<length && fbuf[m]!=CR) m++;
-				while(m && fbuf[m-1]<=SP) m--;
-				if(m>l)
-					smb_hfield(&msg,FIDOMSGID,m-l,fbuf+l); }
-
-			else if(!strncmp(fbuf+l+1,"REPLY:",6)) {
-				l+=7;
-				while(l<length && fbuf[l]<=SP) l++;
-				m=l;
-				while(m<length && fbuf[m]!=CR) m++;
-				while(m && fbuf[m-1]<=SP) m--;
-				if(m>l)
-					smb_hfield(&msg,FIDOREPLYID,m-l,fbuf+l); }
-
-			else if(!strncmp(fbuf+l+1,"FLAGS:",6)) {
-				l+=7;
-				while(l<length && fbuf[l]<=SP) l++;
-				m=l;
-				while(m<length && fbuf[m]!=CR) m++;
-				while(m && fbuf[m-1]<=SP) m--;
-				if(m>l)
-					smb_hfield(&msg,FIDOFLAGS,m-l,fbuf+l); }
-
-			else if(!strncmp(fbuf+l+1,"PATH:",5)) {
-				l+=6;
-				while(l<length && fbuf[l]<=SP) l++;
-				m=l;
-				while(m<length && fbuf[m]!=CR) m++;
-				while(m && fbuf[m-1]<=SP) m--;
-				if(m>l)
-					smb_hfield(&msg,FIDOPATH,m-l,fbuf+l); }
-
-			else if(!strncmp(fbuf+l+1,"PID:",4)) {
-				l+=5;
-				while(l<length && fbuf[l]<=SP) l++;
-				m=l;
-				while(m<length && fbuf[m]!=CR) m++;
-				while(m && fbuf[m-1]<=SP) m--;
-				if(m>l)
-					smb_hfield(&msg,FIDOPID,m-l,fbuf+l); }
-
-			else {		/* Unknown kludge line */
-				while(l<length && fbuf[l]<=SP) l++;
-				m=l;
-				while(m<length && fbuf[m]!=CR) m++;
-				while(m && fbuf[m-1]<=SP) m--;
-				if(m>l)
-					smb_hfield(&msg,FIDOCTRL,m-l,fbuf+l); }
-
-			while(l<length && fbuf[l]!=CR) l++;
-			continue; }
-
-		if(ch!=LF && ch!=0x8d) {	/* ignore LF and soft CRs */
-			if(cr && (!strncmp((char *)fbuf+l,"--- ",4)
-				|| !strncmp((char *)fbuf+l,"---\r",4)))
-				done=1; 			/* tear line and down go into tail */
-			if(done && cr && !strncmp(fbuf+l,"SEEN-BY:",8)) {
-				l+=8;
-				while(l<length && fbuf[l]<=SP) l++;
-				m=l;
-				while(m<length && fbuf[m]!=CR) m++;
-				while(m && fbuf[m-1]<=SP) m--;
-				if(m>l)
-					smb_hfield(&msg,FIDOSEENBY,m-l,fbuf+l);
-				while(l<length && fbuf[l]!=CR) l++;
-				continue;  }  /* skip the CR */
-			if(done)
-				stail[taillen++]=ch;
-			else
-				sbody[bodylen++]=ch;
-			col++;
-			if(ch==CR) {
-				cr=1;
-				col=0;
-				if(done)
-					stail[taillen++]=LF;
-				else
-					sbody[bodylen++]=LF; }
-			else {
-				cr=0;
-				if(col==1 && !strncmp((char *)fbuf+l," * Origin: ",11)) {
-					p=strchr(fbuf+l+11,CR); 	 /* find carriage return */
-					while(p && *p!='(') p--;     /* rewind to '(' */
-					if(p)
-						origaddr=atofaddr(p+1); 	/* get orig address */
-					orig=done=1; }
-				if(done)
-					continue;
-
-				if(ch==ESC) esc=1;		/* ANSI codes */
-				if(ch==SP && col>40 && !esc) {	/* word wrap */
-					for(m=l+1;m<length;m++) 	/* find next space */
-						if(fbuf[m]<=SP)
-							break;
-					if(m<length && m-l>80-col) {  /* if it's beyond the eol */
-						sbody[bodylen++]=CR;
-						sbody[bodylen++]=LF;
-						col=0; } }
-				} } }
-
-	if(bodylen>=2 && sbody[bodylen-2]==CR && sbody[bodylen-1]==LF)
-		bodylen-=2; 						/* remove last CRLF if present */
-
-	for(l=0,crc=0xffffffff;l<bodylen;l++)
-		crc=ucrc32(sbody[l],crc);
-	crc=~crc;
-
-	j=smb_addcrc(status.max_crcs,crc,10);
-	if(j) {
-		if(j==1) {
-			printf("\nDuplicate message\n");
-			smb_freemsgmem(msg);
-			FREE(fbuf);
-			FREE(sbody);
-			FREE(stail);
-			continue; }
-		printf("smb_addcrc returned %d\n",j);
-        exit(1); }
-
-	while(taillen && stail[taillen-1]<=SP)	/* trim all garbage off the tail */
-		taillen--;
-
-	net=NET_FIDO;	/* Record origin address */
-	smb_hfield(&msg,SENDERNETTYPE,sizeof(ushort),&net);
-	smb_hfield(&msg,SENDERNETADDR,sizeof(fidoaddr_t),&origaddr);
-
-	if(!orig) { 	/* No origin line means NetMail, so add dest addr */
-		smb_hfield(&msg,RECIPIENTNETTYPE,sizeof(ushort),&net);
-		smb_hfield(&msg,RECIPIENTNETADDR,sizeof(fidoaddr_t),&destaddr); }
-
-	if(smb_open_da(10)) {
-		printf("error opening %s.SDA\n",smb_file);
-        exit(1); }
-	l=bodylen+2;
-	if(taillen)
-		l+=(taillen+2);
-	msg.hdr.offset=smb_fallocdat(l,1);
-	fclose(sda_fp);
-	if(msg.hdr.offset && msg.hdr.offset<1L) {
-		printf("error %ld allocating records\r\n",msg.hdr.offset);
-        exit(1); }
-	fseek(sdt_fp,msg.hdr.offset,SEEK_SET);
-    xlat=XLAT_NONE;
-	fwrite(&xlat,2,1,sdt_fp);
-	l=ftell(sdt_fp);
-	fwrite(sbody,SDT_BLOCK_LEN,smb_datblocks(bodylen),sdt_fp);
-	if(taillen) {
-		fseek(sdt_fp,l+bodylen,SEEK_SET);
-		fwrite(&xlat,2,1,sdt_fp);
-		fwrite(stail,SDT_BLOCK_LEN,smb_datblocks(taillen),sdt_fp); }
-	fflush(sdt_fp);
-	FREE(fbuf);
-	FREE(sbody);
-	FREE(stail);
-
-	smb_dfield(&msg,TEXT_BODY,bodylen+2);
-	if(taillen)
-		smb_dfield(&msg,TEXT_TAIL,taillen+2);
-
-	smb_addmsghdr(&msg,&status,1,10);
-	smb_freemsgmem(msg); }
-
-printf("\n%u messages converted.\n",found);
-return(0);
-}
-
diff --git a/src/sbbs2/smb/121a/fido2smb.mak b/src/sbbs2/smb/121a/fido2smb.mak
deleted file mode 100644
index 018d5792e5..0000000000
--- a/src/sbbs2/smb/121a/fido2smb.mak
+++ /dev/null
@@ -1,34 +0,0 @@
-###############################
-# Makefile for FIDO2SMB       #
-# For use with Borland C++    #
-# Tabstop=8		      #
-###############################
-
-# Macros
-CC	= bcc
-LD	= tlink
-INCLUDE = \bc31\include
-LIB	= \bc31\lib
-MODEL	= s
-CFLAGS	= -d -C -m$(MODEL) -I$(INCLUDE)
-LFLAGS	= -n -c
-MAIN	= fido2smb.exe
-OBJS	= fido2smb.obj smblib.obj smbvars.obj
-HEADERS = smblib.h smbdefs.h crc32.h
-
-# Implicit C Compile Rule
-{.}.c.obj:
-	@echo Compiling (I) $< to $@ ...
-	$(CC) $(CFLAGS) -n$(OS) -c $<
-
-# Main EXE Link Rule
-$(MAIN): $(OBJS)
-    	@echo Linking $< ...
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c0$(MODEL) $(OBJS) 
-+ $*, $*, $(LIB)\c$(MODEL).lib $(LIB)\math$(MODEL).lib $(LIB)\emu.lib
-
-# All .obj modules
-fido2smb.obj:	$(HEADERS)
-smbvars.obj:    $(HEADERS)
-smblib.obj:     $(HEADERS)
diff --git a/src/sbbs2/smb/121a/file_id.diz b/src/sbbs2/smb/121a/file_id.diz
deleted file mode 100644
index be69095651..0000000000
--- a/src/sbbs2/smb/121a/file_id.diz
+++ /dev/null
@@ -1,10 +0,0 @@
-Synchronet Message Base Specification v1.21a
-Released 08/31/95. Designed for high volume,
-high speed, multi-network, multimedia e-mail
-storage and retrieval. Includes comprehensive
-95 page technical specification, 38 function
-royalty free C library, tons of C source code
-including conversion programs from QWK, Fido
-(FTSC-1), and Internet (RFC-822) messages.
-New: Hyper Allocation storage method and LZH
-compression/decompression functions.
diff --git a/src/sbbs2/smb/121a/fixsmb.c b/src/sbbs2/smb/121a/fixsmb.c
deleted file mode 100644
index cf522e0175..0000000000
--- a/src/sbbs2/smb/121a/fixsmb.c
+++ /dev/null
@@ -1,221 +0,0 @@
-/* FIXSMB.C */
-
-/* Re-generates an SMB message base based on SHD and SDT files */
-
-#include "smblib.h"
-
-char *usage="usage: fixsmb [/opts] <smb_file>\n"
-			"\n"
-			" opts:\n"
-			"       m - force mail format instead of sub-board format\n"
-			"\n"
-			"   ex: FIXSMB /M MAIL\n"
-			"   or: FIXSMB DEBATE\n";
-
-void remove_re(char *str)
-{
-while(!strnicmp(str,"RE:",3)) {
-	strcpy(str,str+3);
-	while(str[0]==SP)
-		strcpy(str,str+1); }
-}
-
-/****************************************************************************/
-/* Updates 16-bit "rcrc" with character 'ch'                                */
-/****************************************************************************/
-void ucrc16(uchar ch, ushort *rcrc) {
-	ushort i, cy;
-    uchar nch=ch;
- 
-for (i=0; i<8; i++) {
-    cy=*rcrc & 0x8000;
-    *rcrc<<=1;
-    if (nch & 0x80) *rcrc |= 1;
-    nch<<=1;
-    if (cy) *rcrc ^= 0x1021; }
-}
-
-/****************************************************************************/
-/* Returns 16-crc of string (not counting terminating NULL) 				*/
-/****************************************************************************/
-ushort crc16(char *str)
-{
-	int 	i=0;
-	ushort	crc=0;
-
-ucrc16(0,&crc);
-while(str[i])
-	ucrc16(str[i++],&crc);
-ucrc16(0,&crc);
-ucrc16(0,&crc);
-return(crc);
-}
-
-#define MAIL (1<<0)
-
-int main(int argc, char **argv)
-{
-	char		str[128],c;
-	int 		i,w,mode=0;
-	ulong		l,length,size,n,m;
-	smbmsg_t	msg;
-	smbstatus_t status;
-
-printf("\nFIXSMB v1.22 � Rebuild Synchronet Message Base � Copyright 1995 "
-	"Digital Dynamics\n");
-
-smb_file[0]=0;
-for(i=1;i<argc;i++)
-	if(argv[i][0]=='/')
-		switch(toupper(argv[i][1])) {
-			case 'M':
-				mode|=MAIL;
-				break;
-			default:
-				printf(usage);
-				exit(1); }
-	else
-		strcpy(smb_file,argv[i]);
-
-if(!smb_file[0]) {
-	printf(usage);
-	exit(1); }
-
-strupr(smb_file);
-
-if((i=smb_open(10))!=0) {
-	printf("smb_open returned %d\n",i);
-	exit(1); }
-
-if((i=smb_locksmbhdr(10))!=0) {
-	smb_close();
-	printf("smb_locksmbhdr returned %d\n",i);
-	exit(1); }
-
-if((i=smb_getstatus(&status))!=0) {
-	smb_unlocksmbhdr();
-	smb_close();
-	printf("smb_getstatus returned %d\n",i);
-	exit(1); }
-
-if(mode&MAIL && !(status.attr&SMB_EMAIL)) {
-	status.attr|=SMB_EMAIL;
-	if((i=smb_putstatus(status))!=0) {
-		smb_unlocksmbhdr();
-		smb_close();
-		printf("smb_putstatus returned %d\n",i);
-		exit(1); } }
-
-if(!(status.attr&SMB_HYPERALLOC)) {
-
-	if((i=smb_open_ha(10))!=0) {
-		smb_close();
-		printf("smb_open_ha returned %d\n",i);
-		exit(1); }
-
-	if((i=smb_open_da(10))!=0) {
-		smb_close();
-		printf("smb_open_da returned %d\n",i);
-		exit(1); }
-
-	rewind(sha_fp);
-	chsize(fileno(sha_fp),0L);			/* Truncate the header allocation file */
-	rewind(sda_fp);
-	chsize(fileno(sda_fp),0L);			/* Truncate the data allocation file */
-	}
-
-rewind(sid_fp);
-chsize(fileno(sid_fp),0L);			/* Truncate the index */
-
-
-if(!(status.attr&SMB_HYPERALLOC)) {
-	length=filelength(fileno(sdt_fp));
-	w=0;
-	for(l=0;l<length;l+=SDT_BLOCK_LEN)	/* Init .SDA file to NULL */
-		fwrite(&w,2,1,sda_fp);
-
-	length=filelength(fileno(shd_fp));
-	c=0;
-	for(l=0;l<length;l+=SHD_BLOCK_LEN)	/* Init .SHD file to NULL */
-		fwrite(&c,1,1,sha_fp); }
-else
-	length=filelength(fileno(shd_fp));
-
-n=1;	/* messsage number */
-for(l=status.header_offset;l<length;l+=size) {
-	printf("\r%2u%%  ",(long)(100.0/((float)length/l)));
-	msg.idx.offset=l;
-	if((i=smb_lockmsghdr(msg,10))!=0) {
-		printf("\n(%06lX) smb_lockmsghdr returned %d\n",l,i);
-		continue; }
-	if((i=smb_getmsghdr(&msg))!=0) {
-		smb_unlockmsghdr(msg);
-		printf("\n(%06lX) smb_getmsghdr returned %d\n",l,i);
-		size=SHD_BLOCK_LEN;
-		continue; }
-	smb_unlockmsghdr(msg);
-	printf("#%-5lu (%06lX) %-25.25s ",msg.hdr.number,l,msg.from);
-	if(!(msg.hdr.attr&MSG_DELETE)) {   /* Don't index deleted messages */
-		msg.offset=n-1;
-		msg.hdr.number=n;
-		msg.idx.number=n;
-		msg.idx.attr=msg.hdr.attr;
-		msg.idx.time=msg.hdr.when_imported.time;
-		strcpy(str,msg.subj);
-		strlwr(str);
-		remove_re(str);
-		msg.idx.subj=crc16(str);
-		if(status.attr&SMB_EMAIL) {
-			if(msg.to_ext)
-				msg.idx.to=atoi(msg.to_ext);
-			else
-				msg.idx.to=0;
-			if(msg.from_ext)
-				msg.idx.from=atoi(msg.from_ext);
-			else
-				msg.idx.from=0; }
-		else {
-			strcpy(str,msg.to);
-			strlwr(str);
-			msg.idx.to=crc16(str);
-			strcpy(str,msg.from);
-			strlwr(str);
-			msg.idx.from=crc16(str); }
-		if((i=smb_putmsg(msg))!=0) {
-			printf("\nsmb_putmsg returned %d\n",i);
-			continue; }
-		n++; }
-	else
-		printf("Not indexing deleted message\n");
-	size=smb_getmsghdrlen(msg);
-	while(size%SHD_BLOCK_LEN)
-		size++;
-
-	if(!(status.attr&SMB_HYPERALLOC)) {
-		/**************************/
-		/* Allocate header blocks */
-		/**************************/
-		fseek(sha_fp,(l-status.header_offset)/SHD_BLOCK_LEN,SEEK_SET);
-		if(msg.hdr.attr&MSG_DELETE) c=0;		/* mark as free */
-		else c=1;								/* or allocated */
-
-		for(i=0;i<size/SHD_BLOCK_LEN;i++)
-			fputc(c,sha_fp);
-
-		/************************/
-		/* Allocate data blocks */
-		/************************/
-
-		if(!(msg.hdr.attr&MSG_DELETE))
-			smb_incdat(msg.hdr.offset,smb_getmsgdatlen(msg),1);
-		}
-
-	smb_freemsgmem(msg); }
-printf("\nDone.\n");
-status.total_msgs=status.last_msg=n-1;
-if((i=smb_putstatus(status))!=0)
-	printf("\nsmb_putstatus returned %d\n",i);
-smb_unlocksmbhdr();
-smb_close();
-return(0);
-}
diff --git a/src/sbbs2/smb/121a/fixsmb.mak b/src/sbbs2/smb/121a/fixsmb.mak
deleted file mode 100644
index cdb9fbc284..0000000000
--- a/src/sbbs2/smb/121a/fixsmb.mak
+++ /dev/null
@@ -1,34 +0,0 @@
-###############################
-# Makefile for FIXSMB	      #
-# For use with Borland C++    #
-# Tabstop=8		      #
-###############################
-
-# Macros
-CC	= bcc
-LD	= tlink
-INCLUDE = \bc31\include
-LIB	= \bc31\lib
-MODEL	= l
-CFLAGS	= -d -C -m$(MODEL) -I$(INCLUDE)
-LFLAGS	= -n -c
-MAIN	= fixsmb.exe
-OBJS	= $(MODEL)\fixsmb.obj $(MODEL)\smblib.obj $(MODEL)\smbvars.obj
-HEADERS = smblib.h smbdefs.h crc32.h
-
-# Implicit C Compile Rule
-{.}.c.obj:
-	@echo Compiling (I) $< to $@ ...
-	$(CC) $(CFLAGS) -n$(MODEL) -c $<
-
-# Main EXE Link Rule
-$(MAIN): $(OBJS)
-    	@echo Linking $< ...
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c0$(MODEL) $(OBJS) 
-+ $*, $*, $(LIB)\c$(MODEL).lib $(LIB)\math$(MODEL).lib $(LIB)\emu.lib
-
-# All .obj modules
-$(MODEL)\fixsmb.obj:	$(HEADERS)
-$(MODEL)\smbvars.obj:    $(HEADERS)
-$(MODEL)\smblib.obj:     $(HEADERS)
diff --git a/src/sbbs2/smb/121a/inet2smb.c b/src/sbbs2/smb/121a/inet2smb.c
deleted file mode 100644
index beb692af1e..0000000000
--- a/src/sbbs2/smb/121a/inet2smb.c
+++ /dev/null
@@ -1,312 +0,0 @@
-/* Converts RFC #822 Internet Text Messages to SMB format */
-
-#include <dos.h>
-#include "smblib.h"
-
-/******************************************************************************
- Chops off the ":" and all spaces and tabs after it for the message headers
-******************************************************************************/
-char *header(char *instr)
-{
-	char str[256],*p;
-	int i=0;
-
-	p=strstr(instr,":");
-	++p;
-	while(*p==SP || *p==TAB)
-		++p;
-	while(i<strlen(p)) {
-		if(p[i]==LF || p[i]==CR) {
-			p[i]=0;
-			break; }
-		++i; }
-	return p;
-}
-/****************************************************************************/
-/* Updates 16-bit "rcrc" with character 'ch'                                */
-/****************************************************************************/
-void ucrc16(uchar ch, ushort *rcrc) {
-	ushort i, cy;
-    uchar nch=ch;
- 
-for (i=0; i<8; i++) {
-    cy=*rcrc & 0x8000;
-    *rcrc<<=1;
-    if (nch & 0x80) *rcrc |= 1;
-    nch<<=1;
-    if (cy) *rcrc ^= 0x1021; }
-}
-
-/****************************************************************************/
-/* Returns 16-crc of string (not counting terminating NULL) 				*/
-/****************************************************************************/
-ushort crc16(char *str)
-{
-	int 	i=0;
-	ushort	crc=0;
-
-ucrc16(0,&crc);
-while(str[i])
-	ucrc16(str[i++],&crc);
-ucrc16(0,&crc);
-ucrc16(0,&crc);
-return(crc);
-}
-
-/******************************************************************************
- Converts ASCII time in RFC 822 or RFC 1036 format to SMB when_t format
-******************************************************************************/
-when_t imsgtime(char *str)
-{
-	char month[25],zone[25],*p;
-	struct date date;
-	struct time t;
-	when_t when;
-
-when.zone=0;	/* Default to UT */
-
-if(isdigit(str[1])) {	/* Regular format: "01 Jan 86 0234 GMT" */
-	date.da_day=atoi(str);
-	sprintf(month,"%3.3s",str+3);
-	if(!stricmp(month,"jan"))
-		date.da_mon=1;
-	else if(!stricmp(month,"feb"))
-		date.da_mon=2;
-	else if(!stricmp(month,"mar"))
-		date.da_mon=3;
-	else if(!stricmp(month,"apr"))
-		date.da_mon=4;
-	else if(!stricmp(month,"may"))
-		date.da_mon=5;
-	else if(!stricmp(month,"jun"))
-		date.da_mon=6;
-	else if(!stricmp(month,"jul"))
-		date.da_mon=7;
-	else if(!stricmp(month,"aug"))
-		date.da_mon=8;
-	else if(!stricmp(month,"sep"))
-		date.da_mon=9;
-	else if(!stricmp(month,"oct"))
-		date.da_mon=10;
-	else if(!stricmp(month,"nov"))
-		date.da_mon=11;
-	else
-		date.da_mon=12;
-	date.da_year=1900+atoi(str+7);
-	t.ti_hour=atoi(str+10);
-	t.ti_min=atoi(str+12);
-	t.ti_sec=0;
-	p=str+13; }
-
-else {					/* USENET format: "Mon,  1 Jan 86 02:34:00 GMT" */
-	date.da_day=atoi(str+5);
-	sprintf(month,"%3.3s",str+8);
-	if(!stricmp(month,"jan"))
-		date.da_mon=1;
-	else if(!stricmp(month,"feb"))
-		date.da_mon=2;
-	else if(!stricmp(month,"mar"))
-		date.da_mon=3;
-	else if(!stricmp(month,"apr"))
-		date.da_mon=4;
-	else if(!stricmp(month,"may"))
-		date.da_mon=5;
-	else if(!stricmp(month,"jun"))
-		date.da_mon=6;
-	else if(!stricmp(month,"jul"))
-		date.da_mon=7;
-	else if(!stricmp(month,"aug"))
-		date.da_mon=8;
-	else if(!stricmp(month,"sep"))
-		date.da_mon=9;
-	else if(!stricmp(month,"oct"))
-		date.da_mon=10;
-	else if(!stricmp(month,"nov"))
-		date.da_mon=11;
-	else
-		date.da_mon=12;
-	date.da_year=atoi(str+12);
-	if(date.da_year<100)
-		date.da_year+=1900;
-    p=str+12;
-	while(*p!=SP) p++;	/* skip the year */
-	while(*p==SP) p++;	/* and white space */
-	t.ti_hour=atoi(p);
-	t.ti_min=atoi(p+3);
-	t.ti_sec=atoi(p+6);
-	p=str+22; }
-
-when.time=dostounix(&date,&t);
-
-while(*p!=SP) p++;	/* skip the time */
-while(*p==SP) p++;	/* and white space */
-
-sprintf(zone,"%-.5s",p);
-
-/* Get the zone */
-if(!strcmpi(zone,"GMT") || !strcmpi(zone,"UT"))
-	when.zone=0;
-else if(!strcmpi(zone,"EST"))
-	when.zone=EST;
-else if(!strcmpi(zone,"EDT"))
-	when.zone=EDT;
-else if(!strcmpi(zone,"MST"))
-	when.zone=MST;
-else if(!strcmpi(zone,"MDT"))
-	when.zone=MDT;
-else if(!strcmpi(zone,"CST"))
-	when.zone=CST;
-else if(!strcmpi(zone,"CDT"))
-	when.zone=CDT;
-else if(!strcmpi(zone,"PST"))
-	when.zone=PST;
-else if(!strcmpi(zone,"PDT"))
-	when.zone=PDT;
-
-else if(isalpha(zone[0]) && !zone[1]) { /* Military single character zone */
-	zone[0]&=0xdf;	/* convert to upper case */
-	if(zone[0]>='A' && zone[0]<='I')
-		when.zone='@'-zone[0];
-	else if(zone[0]>='K' && zone[0]<='M')   /* J is not used */
-		when.zone='A'-zone[0];
-	else if(zone[0]>='N' && zone[0]<='Y')
-		when.zone=zone[0]-'M'; }
-
-else if((zone[0]=='+' || zone[0]=='-') && isdigit(zone[1])) { /* Literal */
-	when.zone=(((zone[1]&0xf)*10)+(zone[2]&0xf))*60;	/* Hours */
-	when.zone+=atoi(zone+3);							/* Minutes */
-	if(zone[0]=='-')                                    /* Negative? */
-		when.zone=-when.zone; }
-
-return(when);
-}
-
-void main(int argc, char **argv)
-{
-	FILE *stream;
-	char str[256]={NULL},filespec[256],file[256],*p,*abuf;
-	ushort i,xlat,net;
-	ulong l,length,datlen;
-	struct ffblk ff;
-	smbmsg_t	msg;
-    smbstatus_t status;
-
-	if(argc<2) {
-		printf("Usage: INET2SMB <file_spec> <smb_name>\r\n");
-		exit(1); }
-
-	strcpy(filespec,argv[1]);
-	strcpy(smb_file,argv[2]);
-	strupr(smb_file);
-
-	smb_open(10);
-	if(!filelength(fileno(shd_fp)))
-		smb_create(2000,2000,0,0,10);
-
-	i=findfirst(filespec,&ff,0);
-	while(!i) {
-		sprintf(file,"%s",ff.ff_name);
-		if((stream=fopen(file,"rb"))==NULL) {
-			printf("Error opening %s\r\n",file);
-			break; }
-
-		memset(&msg,0,sizeof(smbmsg_t));
-		memcpy(msg.hdr.id,"SHD\x1a",4);
-		msg.hdr.version=SMB_VERSION;
-		msg.hdr.when_imported.time=time(NULL);
-		msg.hdr.when_imported.zone=PST;  /* set to local time zone */
-
-		while(str[0]!=CR && str[0]!=LF) {
-			fgets(str,81,stream);
-			if(!strnicmp(str,"Resent-",6)) {
-				p=strstr(str,"Resent-");
-				sprintf(str,"%s",p); }
-			if(!strnicmp(str,"Return-Path",11)
-				|| !strnicmp(str,"Path",4)) {
-				strcpy(str,header(str));
-				smb_hfield(&msg,REPLYTO,strlen(str),str); }
-			else if(!strnicmp(str,"Date",4)) {
-				strcpy(str,header(str));
-				msg.hdr.when_written=imsgtime(str); }
-			else if(!strnicmp(str,"From",4) || !strnicmp(str,"Sender",6)) {
-				strcpy(str,header(str));
-				p=strstr(str," (");
-				if(p) {
-					*p=0;
-					*(p+1)=0;
-					p+=2;
-					smb_hfield(&msg,SENDERNETADDR,strlen(str),str);
-					sprintf(str,"%s",p);
-					p=strstr(str,")");
-					*p=0; }
-				smb_hfield(&msg,SENDER,strlen(str),str);
-				strlwr(str);
-				msg.idx.from=crc16(str); }
-			else if(!strnicmp(str,"Subject",7)) {
-				strcpy(str,header(str));
-				smb_hfield(&msg,SUBJECT,strlen(str),str);
-				strlwr(str);
-				msg.idx.subj=crc16(str); }
-			else if(!strnicmp(str,"To",2)) {
-				strcpy(str,header(str));
-				smb_hfield(&msg,RECIPIENT,strlen(str),str);
-				strlwr(str);
-				msg.idx.to=crc16(str); }
-
-			/* Following are optional fields */
-
-			else if(!strnicmp(str,"Message-ID",10)) {
-				strcpy(str,header(str));
-				smb_hfield(&msg,RFC822MSGID,strlen(str),str); }
-			else if(!strnicmp(str,"In-Reply-To",11)) {
-				strcpy(str,header(str));
-				smb_hfield(&msg,RFC822REPLYID,strlen(str),str); }
-
-			/* User defined extension field */
-
-			else if(!strnicmp(str,"X-",2)) {
-				if(strstr(str,"To")) {
-					strcpy(str,header(str));
-					smb_hfield(&msg,RECIPIENT,strlen(str),str);
-					strlwr(str);
-					msg.idx.to=crc16(str); }
-				else
-					smb_hfield(&msg,RFC822HEADER,strlen(str),str); }
-			else
-				smb_hfield(&msg,RFC822HEADER,strlen(str),str); }
-
-		l=ftell(stream);
-		fseek(stream,0L,SEEK_END);
-		length=ftell(stream)-l;
-		fseek(stream,l,SEEK_SET);
-
-		if((abuf=(char *)MALLOC(length))==NULL) {
-			printf("alloc error\n");
-			exit(1); }
-		fread(abuf,length,1,stream);
-		fclose(stream);
-
-		net=NET_INTERNET;
-		smb_hfield(&msg,SENDERNETTYPE,sizeof(ushort),&net);
-
-		if(smb_open_da(10)) {
-			printf("error opening %s.SDA\n",smb_file);
-			exit(1); }
-		msg.hdr.offset=smb_fallocdat(length+2,1);
-		fclose(sda_fp);
-		if(msg.hdr.offset && msg.hdr.offset<1L) {
-			printf("error %ld allocating records\r\n",msg.hdr.offset);
-			exit(1); }
-		fseek(sdt_fp,msg.hdr.offset,SEEK_SET);
-		xlat=XLAT_NONE;
-		fwrite(&xlat,2,1,sdt_fp);
-		fwrite(abuf,SDT_BLOCK_LEN,smb_datblocks(length),sdt_fp);
-		FREE(abuf);
-		fflush(sdt_fp);
-
-		smb_dfield(&msg,TEXT_BODY,length+2);
-
-		smb_addmsghdr(&msg,&status,1,10);
-		smb_freemsgmem(msg);
-		i=findnext(&ff); }
-}
diff --git a/src/sbbs2/smb/121a/inet2smb.mak b/src/sbbs2/smb/121a/inet2smb.mak
deleted file mode 100644
index 682933f636..0000000000
--- a/src/sbbs2/smb/121a/inet2smb.mak
+++ /dev/null
@@ -1,34 +0,0 @@
-###############################
-# Makefile for INET2SMB       #
-# For use with Borland C++    #
-# Tabstop=8		      #
-###############################
-
-# Macros
-CC	= bcc
-LD	= tlink
-INCLUDE = \bc31\include
-LIB	= \bc31\lib
-MODEL	= s
-CFLAGS	= -d -C -m$(MODEL) -I$(INCLUDE)
-LFLAGS	= -n -c
-MAIN	= inet2smb.exe
-OBJS	= inet2smb.obj smblib.obj smbvars.obj
-HEADERS = smblib.h smbdefs.h crc32.h
-
-# Implicit C Compile Rule
-{.}.c.obj:
-	@echo Compiling (I) $< to $@ ...
-	$(CC) $(CFLAGS) -n$(OS) -c $<
-
-# Main EXE Link Rule
-$(MAIN): $(OBJS)
-    	@echo Linking $< ...
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c0$(MODEL) $(OBJS) 
-+ $*, $*, $(LIB)\c$(MODEL).lib $(LIB)\math$(MODEL).lib $(LIB)\emu.lib
-
-# All .obj modules
-inet2smb.obj:	$(HEADERS)
-smbvars.obj:    $(HEADERS)
-smblib.obj:     $(HEADERS)
diff --git a/src/sbbs2/smb/121a/lzh.c b/src/sbbs2/smb/121a/lzh.c
deleted file mode 100644
index 2d21e4d55f..0000000000
--- a/src/sbbs2/smb/121a/lzh.c
+++ /dev/null
@@ -1,785 +0,0 @@
-/* LZH.C */
-
-/* Digital Dynamics conversion of 1988 LZH (LHarc) encoding functions	*/
-/* Based on Japanese version 29-NOV-1988								*/
-/* LZSS coded by Haruhiko Okumura										*/
-/* Adaptive Huffman Coding coded by Haruyasu Yoshizaki					*/
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#ifndef __WATCOMC__
-	#include <alloc.h>
-#endif
-
-/****************************************************************************/
-/* Memory allocation macros for various compilers and environments			*/
-/* MALLOC is used for allocations of 64k or less							*/
-/* FREE is used to free buffers allocated with MALLOC						*/
-/* LMALLOC is used for allocations of possibly larger than 64k				*/
-/* LFREE is used to free buffers allocated with LMALLOC 					*/
-/* REALLOC is used to re-size a previously MALLOCed or LMALLOCed buffer 	*/
-/****************************************************************************/
-#if defined(__COMPACT__) || defined(__LARGE__) || defined(__HUGE__)
-	#if defined(__TURBOC__)
-		#define REALLOC(x,y) farrealloc(x,y)
-		#define LMALLOC(x) farmalloc(x)
-		#define MALLOC(x) farmalloc(x)
-		#define LFREE(x) farfree(x)
-		#define FREE(x) farfree(x)
-	#elif defined(__WATCOMC__)
-		#define REALLOC realloc
-		#define LMALLOC(x) halloc(x,1)	/* far heap, but slow */
-		#define MALLOC malloc			/* far heap, but 64k max */
-		#define LFREE hfree
-		#define FREE free
-	#else	/* Other 16-bit Compiler */
-		#define REALLOC realloc
-		#define LMALLOC malloc
-		#define MALLOC malloc
-		#define LFREE free
-		#define FREE free
-	#endif
-#else		/* 32-bit Compiler or Small Memory Model */
-	#define REALLOC realloc
-	#define LMALLOC malloc
-	#define MALLOC malloc
-	#define LFREE free
-	#define FREE free
-#endif
-
-
-
-typedef unsigned char uchar;
-
-/* LZSS Parameters */
-
-#define LZH_N			4096	/* Size of string buffer */
-#define LZH_F			60		/* Size of look-ahead buffer */
-#define LZH_THRESHOLD	2
-#define LZH_NIL 		LZH_N	/* End of tree's node  */
-
-#ifdef LZH_DYNAMIC_BUF
-
-unsigned char *lzh_text_buf;
-short int	lzh_match_position, lzh_match_length,
-	  *lzh_lson, *lzh_rson, *lzh_dad;
-
-#else
-
-unsigned char lzh_text_buf[LZH_N + LZH_F - 1];
-short int	  lzh_match_position, lzh_match_length,
-		lzh_lson[LZH_N + 1], lzh_rson[LZH_N + 257], lzh_dad[LZH_N + 1];
-
-#endif
-
-
-void lzh_init_tree(void)  /* Initializing tree */
-{
-	short int  i;
-
-	for (i = LZH_N + 1; i <= LZH_N + 256; i++)
-		lzh_rson[i] = LZH_NIL;			/* root */
-	for (i = 0; i < LZH_N; i++)
-		lzh_dad[i] = LZH_NIL;			/* node */
-}
-
-/******************************/
-/* Inserting node to the tree */
-/* Only used during encoding  */
-/******************************/
-void lzh_insert_node(short int r)
-{
-	short int  i, p, cmp;
-	unsigned char  *key;
-	unsigned c;
-
-	cmp = 1;
-	key = lzh_text_buf+r;
-	p = LZH_N + 1 + key[0];
-	lzh_rson[r] = lzh_lson[r] = LZH_NIL;
-	lzh_match_length = 0;
-	for ( ; ; ) {
-		if (cmp >= 0) {
-			if (lzh_rson[p] != LZH_NIL)
-				p = lzh_rson[p];
-			else {
-				lzh_rson[p] = r;
-				lzh_dad[r] = p;
-				return;
-			}
-		} else {
-			if (lzh_lson[p] != LZH_NIL)
-				p = lzh_lson[p];
-			else {
-				lzh_lson[p] = r;
-				lzh_dad[r] = p;
-				return;
-			}
-		}
-		for (i = 1; i < LZH_F; i++)
-			if ((cmp = key[i] - lzh_text_buf[p + i]) != 0)
-				break;
-		if (i > LZH_THRESHOLD) {
-			if (i > lzh_match_length) {
-				lzh_match_position = ((r - p) & (LZH_N - 1)) - 1;
-				if ((lzh_match_length = i) >= LZH_F)
-					break;
-			}
-			if (i == lzh_match_length) {
-				if ((c = ((r - p) & (LZH_N - 1)) - 1) < lzh_match_position) {
-					lzh_match_position = c;
-				}
-			}
-		}
-	}
-	lzh_dad[r] = lzh_dad[p];
-	lzh_lson[r] = lzh_lson[p];
-	lzh_rson[r] = lzh_rson[p];
-	lzh_dad[lzh_lson[p]] = r;
-	lzh_dad[lzh_rson[p]] = r;
-	if (lzh_rson[lzh_dad[p]] == p)
-		lzh_rson[lzh_dad[p]] = r;
-	else
-		lzh_lson[lzh_dad[p]] = r;
-	lzh_dad[p] = LZH_NIL;  /* remove p */
-}
-
-void lzh_delete_node(short int p)  /* Deleting node from the tree */
-{
-	short int  q;
-
-	if (lzh_dad[p] == LZH_NIL)
-		return;			/* unregistered */
-	if (lzh_rson[p] == LZH_NIL)
-		q = lzh_lson[p];
-	else
-	if (lzh_lson[p] == LZH_NIL)
-		q = lzh_rson[p];
-	else {
-		q = lzh_lson[p];
-		if (lzh_rson[q] != LZH_NIL) {
-			do {
-				q = lzh_rson[q];
-			} while (lzh_rson[q] != LZH_NIL);
-			lzh_rson[lzh_dad[q]] = lzh_lson[q];
-			lzh_dad[lzh_lson[q]] = lzh_dad[q];
-			lzh_lson[q] = lzh_lson[p];
-			lzh_dad[lzh_lson[p]] = q;
-		}
-		lzh_rson[q] = lzh_rson[p];
-		lzh_dad[lzh_rson[p]] = q;
-	}
-	lzh_dad[q] = lzh_dad[p];
-	if (lzh_rson[lzh_dad[p]] == p)
-		lzh_rson[lzh_dad[p]] = q;
-	else
-		lzh_lson[lzh_dad[p]] = q;
-	lzh_dad[p] = LZH_NIL;
-}
-
-/* Huffman coding parameters */
-
-#define LZH_N_CHAR		(256 - LZH_THRESHOLD + LZH_F)
-					/* character code (= 0..LZH_N_CHAR-1) */
-#define LZH_T		(LZH_N_CHAR * 2 - 1)	/* Size of table */
-#define LZH_R		(LZH_T - 1) 		/* root position */
-#define MAX_FREQ	0x8000
-					/* update when cumulative frequency */
-					/* reaches to this value */
-
-/*
- * Tables for encoding/decoding upper 6 bits of
- * sliding dictionary pointer
- */
-/* encoder table */
-uchar lzh_p_len[64] = {
-	0x03, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05,
-	0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-	0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
-	0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08
-};
-
-uchar lzh_p_code[64] = {
-	0x00, 0x20, 0x30, 0x40, 0x50, 0x58, 0x60, 0x68,
-	0x70, 0x78, 0x80, 0x88, 0x90, 0x94, 0x98, 0x9C,
-	0xA0, 0xA4, 0xA8, 0xAC, 0xB0, 0xB4, 0xB8, 0xBC,
-	0xC0, 0xC2, 0xC4, 0xC6, 0xC8, 0xCA, 0xCC, 0xCE,
-	0xD0, 0xD2, 0xD4, 0xD6, 0xD8, 0xDA, 0xDC, 0xDE,
-	0xE0, 0xE2, 0xE4, 0xE6, 0xE8, 0xEA, 0xEC, 0xEE,
-	0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
-	0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
-};
-
-/* decoder table */
-uchar lzh_d_code[256] = {
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-	0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-	0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
-	0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
-	0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
-	0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
-	0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
-	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-	0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
-	0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
-	0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
-	0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
-	0x0C, 0x0C, 0x0C, 0x0C, 0x0D, 0x0D, 0x0D, 0x0D,
-	0x0E, 0x0E, 0x0E, 0x0E, 0x0F, 0x0F, 0x0F, 0x0F,
-	0x10, 0x10, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11,
-	0x12, 0x12, 0x12, 0x12, 0x13, 0x13, 0x13, 0x13,
-	0x14, 0x14, 0x14, 0x14, 0x15, 0x15, 0x15, 0x15,
-	0x16, 0x16, 0x16, 0x16, 0x17, 0x17, 0x17, 0x17,
-	0x18, 0x18, 0x19, 0x19, 0x1A, 0x1A, 0x1B, 0x1B,
-	0x1C, 0x1C, 0x1D, 0x1D, 0x1E, 0x1E, 0x1F, 0x1F,
-	0x20, 0x20, 0x21, 0x21, 0x22, 0x22, 0x23, 0x23,
-	0x24, 0x24, 0x25, 0x25, 0x26, 0x26, 0x27, 0x27,
-	0x28, 0x28, 0x29, 0x29, 0x2A, 0x2A, 0x2B, 0x2B,
-	0x2C, 0x2C, 0x2D, 0x2D, 0x2E, 0x2E, 0x2F, 0x2F,
-	0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
-	0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
-};
-
-uchar lzh_d_len[256] = {
-	0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
-	0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
-	0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
-	0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
-	0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
-	0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
-	0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
-	0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
-	0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
-	0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
-	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-	0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
-	0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
-};
-
-#ifdef LZH_DYNAMIC_BUF
-
-unsigned short *lzh_freq=NULL;	 /* cumulative freq table */
-
-/*
- * pointing parent nodes.
- * area [LZH_T..(LZH_T + LZH_N_CHAR - 1)] are pointers for leaves
- */
-short int *lzh_prnt=NULL;
-
-/* pointing children nodes (son[], son[] + 1)*/
-short int *lzh_son=NULL;
-
-#else	/* STATIC */
-
-unsigned short lzh_freq[LZH_T + 1];   /* cumulative freq table */
-short int lzh_prnt[LZH_T + LZH_N_CHAR];
-short int lzh_son[LZH_T + 1];		  /* bug fixed by Digital Dynamics */
-
-#endif
-
-
-unsigned short lzh_getbuf = 0;		/* Was just "unsigned" fixed 04/12/95 */
-uchar lzh_getlen = 0;
-
-int lzh_getbit(uchar *inbuf, long *incnt, long inlen)    /* get one bit */
-{
-	short int i;
-
-	while (lzh_getlen <= 8) {
-		if((*incnt)>=inlen)
-			i=0;
-		else
-			i=inbuf[(*incnt)++];
-		lzh_getbuf |= i << (8 - lzh_getlen);
-		lzh_getlen += 8;
-	}
-	i = lzh_getbuf;
-	lzh_getbuf <<= 1;
-	lzh_getlen--;
-	return (i < 0);
-}
-
-short int lzh_getbyte(uchar *inbuf, long *incnt, long inlen)   /* get a byte */
-{
-	unsigned short i;
-
-	while (lzh_getlen <= 8) {
-		if((*incnt)>=inlen)
-			i=0;
-		else
-			i=inbuf[(*incnt)++];
-		lzh_getbuf |= i << (8 - lzh_getlen);
-		lzh_getlen += 8;
-	}
-	i = lzh_getbuf;
-	lzh_getbuf <<= 8;
-	lzh_getlen -= 8;
-	return i >> 8;
-}
-
-unsigned lzh_putbuf = 0;
-uchar lzh_putlen = 0;
-
-/* output c bits */
-void lzh_putcode(short int l, unsigned short c, uchar *outbuf, long *outlen)
-{
-	lzh_putbuf |= c >> lzh_putlen;
-	if ((lzh_putlen += l) >= 8) {
-		outbuf[(*outlen)++]=(lzh_putbuf >> 8);
-		if ((lzh_putlen -= 8) >= 8) {
-			outbuf[(*outlen)++]=lzh_putbuf;
-			lzh_putlen -= 8;
-			lzh_putbuf = c << (l - lzh_putlen);
-		} else {
-			lzh_putbuf <<= 8;
-		}
-	}
-}
-
-
-/* initialize freq tree */
-
-void lzh_start_huff()
-{
-	short int i, j;
-
-lzh_getbuf = 0; 	/* Added by Digital Dynamics for repeating operations */
-lzh_getlen = 0;
-lzh_putbuf = 0;
-lzh_putlen = 0;
-
-	for (i = 0; i < LZH_N_CHAR; i++) {
-		lzh_freq[i] = 1;
-		lzh_son[i] = i + LZH_T;
-		lzh_prnt[i + LZH_T] = i;
-	}
-	i = 0; j = LZH_N_CHAR;
-	while (j <= LZH_R) {
-		lzh_freq[j] = lzh_freq[i] + lzh_freq[i + 1];
-		lzh_son[j] = i;
-		lzh_prnt[i] = lzh_prnt[i + 1] = j;
-		i += 2; j++;
-	}
-	lzh_freq[LZH_T] = 0xffff;
-    lzh_prnt[LZH_R] = 0;
-}
-
-
-/* reconstruct freq tree */
-
-void lzh_reconst()
-{
-	short int i, j, k;
-	unsigned short f, l;
-
-	/* halven cumulative freq for leaf nodes */
-	j = 0;
-	for (i = 0; i < LZH_T; i++) {
-		if (lzh_son[i] >= LZH_T) {
-			lzh_freq[j] = (lzh_freq[i] + 1) / 2;
-			lzh_son[j] = lzh_son[i];
-			j++;
-		}
-	}
-	/* make a tree : first, connect children nodes */
-	for (i = 0, j = LZH_N_CHAR; j < LZH_T; i += 2, j++) {
-		k = i + 1;
-		f = lzh_freq[j] = lzh_freq[i] + lzh_freq[k];
-		for (k = j - 1; f < lzh_freq[k]; k--);
-		k++;
-		l = (j - k) * 2;
-		
-		/* movmem() is Turbo-C dependent
-		   rewritten to memmove() by Kenji */
-		
-		/* movmem(&lzh_freq[k], &lzh_freq[k + 1], l); */
-		(void)memmove(lzh_freq+k+1,lzh_freq+k, l);
-		lzh_freq[k] = f;
-		/* movmem(&lzh_son[k], &lzh_son[k + 1], l); */
-		(void)memmove(lzh_son+k+1,lzh_son+k, l);
-		lzh_son[k] = i;
-	}
-	/* connect parent nodes */
-	for (i = 0; i < LZH_T; i++) {
-		if ((k = lzh_son[i]) >= LZH_T) {
-			lzh_prnt[k] = i;
-		} else {
-			lzh_prnt[k] = lzh_prnt[k + 1] = i;
-		}
-	}
-}
-
-/* update freq tree */
-
-void lzh_update(short int c)
-{
-	short int i, j, k, l;
-
-	if (lzh_freq[LZH_R] == MAX_FREQ) {
-		lzh_reconst();
-	}
-	c = lzh_prnt[c + LZH_T];
-	do {
-		k = ++lzh_freq[c];
-
-		/* swap nodes to keep the tree freq-ordered */
-		if (k > lzh_freq[l = c + 1]) {
-			while (k > lzh_freq[++l]);
-			l--;
-			lzh_freq[c] = lzh_freq[l];
-			lzh_freq[l] = k;
-
-			i = lzh_son[c];
-			lzh_prnt[i] = l;
-			if (i < LZH_T) lzh_prnt[i + 1] = l;
-
-			j = lzh_son[l];
-			lzh_son[l] = i;
-
-			lzh_prnt[j] = c;
-			if (j < LZH_T) lzh_prnt[j + 1] = c;
-			lzh_son[c] = j;
-
-			c = l;
-		}
-	} while ((c = lzh_prnt[c]) != 0);	/* do it until reaching the root */
-}
-
-unsigned short lzh_code, lzh_len;
-
-void lzh_encode_char(unsigned short c, uchar *outbuf, long *outlen)
-{
-	unsigned short i;
-	short int j, k;
-
-	i = 0;
-	j = 0;
-	k = lzh_prnt[c + LZH_T];
-
-	/* search connections from leaf node to the root */
-	do {
-		i >>= 1;
-
-		/*
-		if node's address is odd, output 1
-		else output 0
-		*/
-		if (k & 1) i += 0x8000;
-
-		j++;
-	} while ((k = lzh_prnt[k]) != LZH_R);
-	lzh_putcode(j, i, outbuf, outlen);
-	lzh_code = i;
-	lzh_len = j;
-	lzh_update(c);
-}
-
-void lzh_encode_position(unsigned short c, uchar *outbuf, long *outlen)
-{
-	unsigned short i;
-
-	/* output upper 6 bits with encoding */
-	i = c >> 6;
-	lzh_putcode(lzh_p_len[i], (unsigned)lzh_p_code[i] << 8, outbuf, outlen);
-
-	/* output lower 6 bits directly */
-	lzh_putcode(6, (c & 0x3f) << 10, outbuf, outlen);
-}
-
-void lzh_encode_end(uchar *outbuf, long *outlen)
-{
-	if (lzh_putlen) {
-		outbuf[(*outlen)++]=(lzh_putbuf >> 8);
-	}
-}
-
-short int lzh_decode_char(uchar *inbuf, long *incnt, long inlen)
-{
-	unsigned short c;
-
-	c = lzh_son[LZH_R];
-
-	/*
-	 * start searching tree from the root to leaves.
-	 * choose node #(lzh_son[]) if input bit == 0
-	 * else choose #(lzh_son[]+1) (input bit == 1)
-	 */
-	while (c < LZH_T) {
-		c += lzh_getbit(inbuf,incnt,inlen);
-		c = lzh_son[c];
-	}
-	c -= LZH_T;
-	lzh_update(c);
-	return c;
-}
-
-short int lzh_decode_position(uchar *inbuf, long *incnt, long inlen)
-{
-	unsigned short i, j, c;
-
-	/* decode upper 6 bits from given table */
-	i = lzh_getbyte(inbuf,incnt,inlen);
-	c = (unsigned)lzh_d_code[i] << 6;
-	j = lzh_d_len[i];
-
-	/* input lower 6 bits directly */
-	j -= 2;
-	while (j--) {
-		i = (i << 1) + lzh_getbit(inbuf,incnt,inlen);
-	}
-	return c | i & 0x3f;
-}
-
-/* Compression */
-
-/* Encoding/Compressing */
-/* Returns length of outbuf */
-long lzh_encode(uchar *inbuf, long inlen, uchar *outbuf)
-{
-	short int  i, c, len, r, s, last_match_length;
-	long incnt,outlen; /* textsize=0; */
-
-#ifdef LZH_DYNAMIC_BUF
-
-	if((lzh_text_buf=(uchar *)MALLOC(LZH_N + LZH_F - 1))==NULL)
-		return(-1);
-	if((lzh_freq=(unsigned short*)MALLOC((LZH_T + 1)*sizeof(unsigned short)))==NULL) {
-		FREE(lzh_text_buf);
-		return(-1); }
-	if((lzh_prnt=(short *)MALLOC((LZH_T + LZH_N_CHAR)*sizeof(short)))==NULL) {
-		FREE(lzh_text_buf);
-		FREE(lzh_freq);
-		return(-1); }
-	if((lzh_son=(short *)MALLOC((LZH_T + 1) * sizeof(short)))==NULL) {
-		FREE(lzh_text_buf);
-		FREE(lzh_prnt);
-		FREE(lzh_freq);
-		return(-1); }
-	if((lzh_lson=(short *)MALLOC((LZH_N + 1)*sizeof(short)))==NULL) {
-		FREE(lzh_text_buf);
-		FREE(lzh_prnt);
-		FREE(lzh_freq);
-		FREE(lzh_son);
-		return(-1); }
-	if((lzh_rson=(short *)MALLOC((LZH_N + 257)*sizeof(short)))==NULL) {
-		FREE(lzh_text_buf);
-		FREE(lzh_prnt);
-		FREE(lzh_freq);
-		FREE(lzh_son);
-		FREE(lzh_lson);
-		return(-1); }
-	if((lzh_dad=(short *)MALLOC((LZH_N + 1)*sizeof(short)))==NULL) {
-		FREE(lzh_text_buf);
-		FREE(lzh_prnt);
-		FREE(lzh_freq);
-		FREE(lzh_son);
-        FREE(lzh_lson);
-		FREE(lzh_rson);
-		return(-1); }
-#endif
-
-	incnt=0;
-	memcpy(outbuf,&inlen,sizeof(inlen));
-	outlen=sizeof(inlen);
-	if(!inlen) {
-#ifdef LZH_DYNAMIC_BUF
-		FREE(lzh_text_buf);
-		FREE(lzh_prnt);
-		FREE(lzh_freq);
-		FREE(lzh_son);
-        FREE(lzh_lson);
-        FREE(lzh_rson);
-		FREE(lzh_dad);
-#endif
-		return(outlen); }
-	lzh_start_huff();
-	lzh_init_tree();
-	s = 0;
-	r = LZH_N - LZH_F;
-	for (i = s; i < r; i++)
-		lzh_text_buf[i] = ' ';
-	for (len = 0; len < LZH_F && incnt<inlen; len++)
-		lzh_text_buf[r + len] = inbuf[incnt++];
-	/* textsize = len; */
-	for (i = 1; i <= LZH_F; i++)
-		lzh_insert_node(r - i);
-	lzh_insert_node(r);
-	do {
-		if (lzh_match_length > len)
-			lzh_match_length = len;
-		if (lzh_match_length <= LZH_THRESHOLD) {
-			lzh_match_length = 1;
-			lzh_encode_char(lzh_text_buf[r],outbuf,&outlen);
-		} else {
-			lzh_encode_char(255 - LZH_THRESHOLD + lzh_match_length
-				,outbuf,&outlen);
-			lzh_encode_position(lzh_match_position
-				,outbuf,&outlen);
-		}
-		last_match_length = lzh_match_length;
-		for (i = 0; i < last_match_length && incnt<inlen; i++) {
-			lzh_delete_node(s);
-			c=inbuf[incnt++];
-			lzh_text_buf[s] = c;
-			if (s < LZH_F - 1)
-				lzh_text_buf[s + LZH_N] = c;
-			s = (s + 1) & (LZH_N - 1);
-			r = (r + 1) & (LZH_N - 1);
-			lzh_insert_node(r);
-		}
-/***
-		if ((textsize += i) > printcount) {
-			printf("%12ld\r", textsize);
-			printcount += 1024;
-		}
-***/
-		while (i++ < last_match_length) {
-			lzh_delete_node(s);
-			s = (s + 1) & (LZH_N - 1);
-			r = (r + 1) & (LZH_N - 1);
-			if (--len) lzh_insert_node(r);
-		}
-	} while (len > 0);
-	lzh_encode_end(outbuf,&outlen);
-/*
-	printf("input: %ld (%ld) bytes\n", inlen,textsize);
-	printf("output: %ld bytes\n", outlen);
-	printf("output/input: %.3f\n", (double)outlen / inlen);
-*/
-
-#ifdef LZH_DYNAMIC_BUF
-	FREE(lzh_text_buf);
-	FREE(lzh_prnt);
-	FREE(lzh_freq);
-	FREE(lzh_son);
-	FREE(lzh_lson);
-	FREE(lzh_rson);
-	FREE(lzh_dad);
-#endif
-
-	return(outlen);
-}
-
-/* Decoding/Uncompressing */
-/* Returns length of outbuf */
-long lzh_decode(uchar *inbuf, long inlen, uchar *outbuf)
-{
-	short int  i, j, k, r, c;
-	unsigned long int  count;
-	long incnt,textsize;
-
-#ifdef LZH_DYNAMIC_BUF
-
-	if((lzh_text_buf=(uchar *)MALLOC((LZH_N + LZH_F - 1)*2))==NULL)
-		return(-1);
-	if((lzh_freq=(unsigned short *)MALLOC((LZH_T + 1)*sizeof(unsigned short)))
-		==NULL) {
-		FREE(lzh_text_buf);
-		return(-1); }
-	if((lzh_prnt=(short *)MALLOC((LZH_T + LZH_N_CHAR)*sizeof(short)))==NULL) {
-		FREE(lzh_text_buf);
-		FREE(lzh_freq);
-		return(-1); }
-	if((lzh_son=(short *)MALLOC((LZH_T + 1) * sizeof(short)))==NULL) {
-		FREE(lzh_text_buf);
-		FREE(lzh_prnt);
-		FREE(lzh_freq);
-		return(-1); }
-
-#endif
-
-	incnt=0;
-	memcpy(&textsize,inbuf,sizeof(textsize));
-	incnt+=sizeof(textsize);
-	if (textsize == 0) {
-#ifdef LZH_DYNAMIC_BUF
-		FREE(lzh_text_buf);
-		FREE(lzh_prnt);
-		FREE(lzh_freq);
-		FREE(lzh_son);
-#endif
-		return(textsize); }
-	lzh_start_huff();
-	for (i = 0; i < LZH_N - LZH_F; i++)
-		*(lzh_text_buf+i) = ' ';
-	r = LZH_N - LZH_F;
-    for (count = 0; count < textsize; ) {
-		c = lzh_decode_char(inbuf,&incnt,inlen);
-		if (c < 256) {
-			outbuf[count]=c;
-#if 0
-			if(r>(LZH_N + LZH_F - 1) || r<0) {
-				printf("Overflow! (%d)\n",r);
-				getch();
-				exit(-1); }
-#endif
-			*(lzh_text_buf+r) = c;
-			r++;
-			r &= (LZH_N - 1);
-			count++;
-		} else {
-			i = (r - lzh_decode_position(inbuf,&incnt,inlen) - 1)
-				& (LZH_N - 1);
-			j = c - 255 + LZH_THRESHOLD;
-			for (k = 0; k < j && count<textsize; k++) {
-				c = lzh_text_buf[(i + k) & (LZH_N - 1)];
-				outbuf[count]=c;
-#if 0
-				if(r>(LZH_N + LZH_F - 1) || r<0) {
-					printf("Overflow! (%d)\n",r);
-					exit(-1); }
-#endif
-				*(lzh_text_buf+r) = c;
-				r++;
-				r &= (LZH_N - 1);
-				count++;
-			}
-		}
-	}
-/***
-	printf("%12ld\n", count);
-***/
-
-#ifdef LZH_DYNAMIC_BUF
-	FREE(lzh_text_buf);
-	FREE(lzh_prnt);
-	FREE(lzh_freq);
-	FREE(lzh_son);
-#endif
-
-return(count);
-}
-
-
diff --git a/src/sbbs2/smb/121a/lzh.h b/src/sbbs2/smb/121a/lzh.h
deleted file mode 100644
index 68a71dd90c..0000000000
--- a/src/sbbs2/smb/121a/lzh.h
+++ /dev/null
@@ -1,5 +0,0 @@
-/* LZH.H */
-
-long lzh_encode(uchar *inbuf, long inlen, uchar *outbuf);
-long lzh_decode(uchar *inbuf, long inlen, uchar *outbuf);
-
diff --git a/src/sbbs2/smb/121a/qwk2smb.c b/src/sbbs2/smb/121a/qwk2smb.c
deleted file mode 100644
index acf65074c7..0000000000
--- a/src/sbbs2/smb/121a/qwk2smb.c
+++ /dev/null
@@ -1,296 +0,0 @@
-/* QWK2SMB.C */
-
-/* Converts QWK packet to to SMB formatted message bases */
-
-/* The intention of this source code is an example of how to use the SMBLIB */
-/* library functions to access an SMB format message base.					*/
-
-/* This program and source code are freeware. May be used in part or whole	*/
-/* for any purpose without consent or notification of Digital Dynamics. 	*/
-
-/* Digital Dynamics does request that developers that release products that */
-/* support the SMB format notify Digital Dynamics so the implementation 	*/
-/* and contact chapters in the technical specification may be updated.		*/
-
-#include "smblib.h"
-#include "crc32.h"
-#include <dos.h>
-
-char sbbs[128];
-
-/****************************************************************************/
-/* Updates 16-bit "rcrc" with character 'ch'                                */
-/****************************************************************************/
-void ucrc16(uchar ch, ushort *rcrc) {
-	ushort i, cy;
-    uchar nch=ch;
- 
-for (i=0; i<8; i++) {
-    cy=*rcrc & 0x8000;
-    *rcrc<<=1;
-    if (nch & 0x80) *rcrc |= 1;
-    nch<<=1;
-    if (cy) *rcrc ^= 0x1021; }
-}
-
-/****************************************************************************/
-/* Returns 16-crc of string (not counting terminating NULL) 				*/
-/****************************************************************************/
-ushort crc16(char *str)
-{
-	int 	i=0;
-	ushort	crc=0;
-
-ucrc16(0,&crc);
-while(str[i])
-	ucrc16(str[i++],&crc);
-ucrc16(0,&crc);
-ucrc16(0,&crc);
-return(crc);
-}
-
-
-/****************************************************************************/
-/* Truncates white-space chars off end of 'str' and terminates at first tab */
-/****************************************************************************/
-void truncsp(char *str)
-{
-	char c;
-
-str[strcspn(str,"\t")]=0;
-c=strlen(str);
-while(c && (uchar)str[c-1]<=' ') c--;
-str[c]=0;
-}
-
-/****************************************************************************/
-/* Converts an ASCII Hex string into an ulong                       */
-/****************************************************************************/
-ulong ahtoul(char *str)
-{
-	ulong l,val=0;
-
-while((l=(*str++)|0x20)!=0x20)
-	val=(l&0xf)+(l>>6&1)*9+val*16;
-return(val);
-}
-
-/****************************************************************************/
-/* Returns the length of the file in 'filespec'                             */
-/****************************************************************************/
-long flength(char *filespec)
-{
-    struct ffblk f;
-
-if(findfirst(filespec,&f,0)==0)
-    return(f.ff_fsize);
-return(-1L);
-}
-
-/****************************************************************************/
-/* Returns the FidoNet address kept in str as ASCII.                        */
-/****************************************************************************/
-fidoaddr_t atofaddr(char *str)
-{
-    char *p;
-	fidoaddr_t addr;
-
-addr.zone=addr.net=addr.node=addr.point=0;
-if((p=strchr(str,':'))!=NULL) {
-	addr.zone=atoi(str);
-	addr.net=atoi(p+1); }
-else {
-	addr.zone=1;
-	addr.net=atoi(str); }
-if(!addr.zone)				/* no such thing as zone 0 */
-	addr.zone=1;
-if((p=strchr(str,'/'))!=NULL)
-    addr.node=atoi(p+1);
-else {
-	addr.net=1;
-	addr.node=atoi(str); }
-if((p=strchr(str,'.'))!=NULL)
-    addr.point=atoi(p+1);
-return(addr);
-}
-
-
-int main(int argc, char **argv)
-{
-	uchar	*p,str[128],from[128],to[128],subj[128],block[128],*buf;
-	ushort	xlat;
-	ushort	i,j,k,msgs,total;
-	ulong	l,m,length,size,crc;
-	FILE	*qwk;
-	struct	date date;
-	struct	time curtime;
-	smbmsg_t	msg;
-	smbstatus_t status;
-
-if(argc<2) {
-	printf("usage: qwk2smb <qwk_dir>\r\n");
-	exit(1); }
-
-sprintf(str,"%s\\MESSAGES.DAT",argv[1]);
-if((qwk=fopen(str,"rb"))==NULL) {
-	printf("error opening %s\n",str);
-	exit(1); }
-
-size=filelength(fileno(qwk));
-smb_file[0]=0;
-
-for(l=128,i=1,msgs=total=1;l<size;l+=i*128) {
-	fseek(qwk,l,SEEK_SET);
-	if(!fread(block,1,128,qwk))
-		break;
-	i=atoi(block+116);	/* i = number of 128 byte records */
-	if(i<2) {
-		i=1;
-		continue; }
-
-	j=(ushort)block[123]|(((ushort)block[124])<<8);  /* conference number */
-
-	if(strcmp(smb_file,itoa(j,str,10))) {		 /* changed conference */
-		fclose(sdt_fp);
-		fclose(shd_fp);
-		fclose(sid_fp);
-		strcpy(smb_file,str);
-		printf("\nConference #%s\n",str);
-		msgs=1;
-		k=smb_open(10);
-		if(k) {
-			printf("smb_open returned %d\n",k);
-			exit(1); }
-		if(!filelength(fileno(shd_fp))) 		/* new conference */
-			smb_create(2000,2000,0,0,10); }
-
-	smb_getstatus(&status); 	  // Initialized for first call to smb_addcrc()
-
-	printf("%u (total=%u)\r",msgs,total);
-
-	/*****************************/
-	/* Initialize the SMB header */
-	/*****************************/
-
-	memset(&msg,0,sizeof(smbmsg_t));
-	memcpy(msg.hdr.id,"SHD\x1a",4);
-	msg.hdr.version=SMB_VERSION;
-
-	/**************************/
-	/* Convert the QWK header */
-	/**************************/
-
-	if(block[0]=='*' || block[0]=='+')
-		msg.idx.attr|=MSG_PRIVATE;
-	if(block[0]=='*' || block[0]=='-' || block[0]=='`')
-		msg.idx.attr|=MSG_READ;
-    msg.hdr.attr=msg.idx.attr;
-
-	date.da_mon=((block[8]&0xf)*10)+(block[9]&0xf);
-	date.da_day=((block[11]&0xf)*10)+(block[12]&0xf);
-	date.da_year=((block[14]&0xf)*10)+(block[15]&0xf)+1900;
-	curtime.ti_hour=((block[16]&0xf)*10)+(block[17]&0xf);
-	curtime.ti_min=((block[19]&0xf)*10)+(block[20]&0xf);
-	curtime.ti_sec=0;
-	msg.hdr.when_written.time=dostounix(&date,&curtime);
-	msg.hdr.when_written.zone=PST;		 /* set to local time zone */
-	msg.hdr.when_imported.time=time(NULL);
-	msg.hdr.when_imported.zone=PST; 	 /* set to local time zone */
-
-	sprintf(to,"%25.25s",block+21);     /* To user */
-    truncsp(to);
-    smb_hfield(&msg,RECIPIENT,strlen(to),to);
-    strlwr(to);
-    msg.idx.to=crc16(to);
-
-	sprintf(from,"%25.25s",block+46);   /* From user */
-    truncsp(from);
-    smb_hfield(&msg,SENDER,strlen(from),from);
-    strlwr(from);
-    msg.idx.from=crc16(from);
-
-	sprintf(subj,"%25.25s",block+71);   /* Subject */
-	truncsp(subj);
-	smb_hfield(&msg,SUBJECT,strlen(subj),subj);
-	strlwr(subj);
-    msg.idx.subj=crc16(subj);
-
-	/********************************/
-	/* Convert the QWK message text */
-	/********************************/
-
-	length=0;
-	if((buf=MALLOC((i-1)*128*2))==NULL) {
-		printf("memory allocation error\n");
-		exit(1); }
-	for(j=1;j<i;j++) {
-		if(!fread(block,1,128,qwk))
-			break;
-		for(k=0;k<128;k++) {
-			if(block[k]==0)
-				continue;
-			if(block[k]==0xE3) {	   /* expand 0xe3 to crlf */
-				buf[length++]=CR;
-				buf[length++]=LF;
-				continue; }
-			buf[length++]=block[k]; } }
-
-	while(length && buf[length-1]<=SP) length--; /* remove trailing garbage */
-
-	/*****************/
-	/* Calculate CRC */
-	/*****************/
-
-	crc=0xffffffffUL;
-	for(m=0;m<length;m++)
-		crc=ucrc32(buf[m],crc);
-	crc=~crc;
-
-	/*******************/
-	/* Check for dupes */
-	/*******************/
-
-	j=smb_addcrc(status.max_crcs,crc,10);
-    if(j) {
-        if(j==1) {
-            printf("\nDuplicate message\n");
-            smb_freemsgmem(msg);
-			FREE(buf);
-            continue; }
-        printf("smb_addcrc returned %d\n",j);
-        exit(1); }
-
-	/*************************************/
-	/* Write SMB message header and text */
-	/*************************************/
-
-	length+=2;	/* for translation string */
-
-	if(smb_open_da(10)) {
-		printf("error opening %s.SDA\n",smb_file);
-		exit(1); }
-	msg.hdr.offset=smb_fallocdat(length,1);
-	fclose(sda_fp);
-	if(msg.hdr.offset && msg.hdr.offset<1L) {
-		printf("error %ld allocating blocks\r\n",msg.hdr.offset);
-		exit(1); }
-	fseek(sdt_fp,msg.hdr.offset,SEEK_SET);
-    xlat=XLAT_NONE;
-    fwrite(&xlat,2,1,sdt_fp);
-	fwrite(buf,length,1,sdt_fp);
-	fflush(sdt_fp);
-
-	smb_dfield(&msg,TEXT_BODY,length);
-
-	k=smb_addmsghdr(&msg,&status,1,10);
-	if(k) {
-		printf("smb_addmsghdr returned %d\n",k);
-		exit(1); }
-	smb_freemsgmem(msg);
-	FREE(buf);
-	msgs++;
-	total++; }
-
-return(0);
-}
-
diff --git a/src/sbbs2/smb/121a/qwk2smb.mak b/src/sbbs2/smb/121a/qwk2smb.mak
deleted file mode 100644
index 242f1111d2..0000000000
--- a/src/sbbs2/smb/121a/qwk2smb.mak
+++ /dev/null
@@ -1,34 +0,0 @@
-###############################
-# Makefile for QWK2SMB	      #
-# For use with Borland C++    #
-# Tabstop=8		      #
-###############################
-
-# Macros
-CC	= bcc
-LD	= tlink
-INCLUDE = \bc31\include
-LIB	= \bc31\lib
-MODEL	= s
-CFLAGS	= -d -C -m$(MODEL) -I$(INCLUDE)
-LFLAGS	= -n -c
-MAIN	= qwk2smb.exe
-OBJS	= qwk2smb.obj smblib.obj smbvars.obj
-HEADERS = smblib.h smbdefs.h crc32.h
-
-# Implicit C Compile Rule
-{.}.c.obj:
-	@echo Compiling (I) $< to $@ ...
-	$(CC) $(CFLAGS) -n$(OS) -c $<
-
-# Main EXE Link Rule
-$(MAIN): $(OBJS)
-    	@echo Linking $< ...
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c0$(MODEL) $(OBJS) 
-+ $*, $*, $(LIB)\c$(MODEL).lib $(LIB)\math$(MODEL).lib $(LIB)\emu.lib
-
-# All .obj modules
-qwk2smb.obj:	$(HEADERS)
-smbvars.obj:    $(HEADERS)
-smblib.obj:     $(HEADERS)
diff --git a/src/sbbs2/smb/121a/smb.hst b/src/sbbs2/smb/121a/smb.hst
deleted file mode 100644
index 24472860e6..0000000000
--- a/src/sbbs2/smb/121a/smb.hst
+++ /dev/null
@@ -1,303 +0,0 @@
-Synchronet Message Base Specification Modification History
-==========================================================
-
-******************************
-01/20/94 Initial Release v1.00
-******************************
-
-Quite a few spelling errors in SMB.TXT corrected.
-
-Estimated maximum number of messages (in Introduction of SMB.TXT) formula
-corrected (1500 rounded to nearest 256 is 1536, not 2048).
-
-Pages 32 and 38 (SENDEREXT and RECIPIENTEXT header field types) incorrectly
-stated the index record contains CRC-32s, when in fact the index contains
-CRC-16s of the agent names or extensions.
-
-FORWARDTO header field types incorrectly stated they were for replies, rather
-than forwarding instructions.
-
-Trigger header field types incorrectly stated they were "attachments" rather
-than triggers.
-
-Bug fixed in smb_open() function in smblib.c: was allocating buffer via
-setvbuf for wrong file pointer when opening header file. Caused loss of 
-memory (2k) everytime smb_open() was called.
-
-Bug fixed in smb_getmsghdr() function in smblib.c: msg->from_agent,to_agent,
-and replyto_agent were not initialized properly.
-
-Added from_ext, to_ext, and replyto_ext fields to msg struct. Initialized
-with call to smb_getmsghdr() function. These are convenience pointers for
-the to, from, and replyto agent extensions (user numbers, usually).
-
-Fixed a nasty bug in the smb_freemsgdat() function, causing odd values in the
-SDA file and cross-linked messages when fast allocation mode was not used for
-new messages.
-
-smb_putmsghdr() function replaced by smb_putmsg() and it calls smb_putmsghdr()
-and smb_putmsgidx() - previously smb_putmsghdr() actually wrote the header
-and the index. So you must change any occurances of smb_putmsghdr() to
-smb_putmsg() if you intend to write to both the index and header records.
-
-smb_open() now takes a "retry_time" parameter (number of seconds) to lock
-and read the message base header and verify the "id" and "version". Added
-new error codes: -1 indicates failure to lock message base header, -2 indicates
-id mismatch, and -3 indicates incompatible message base version.
-
-rewind() and clearerr() calls added to library functions to eliminate the
-problem of "sticky" error flags when using fread() and fwrite(). Reordered
-the use of chsize() to force seeking (with fseek()) before using the file
-descriptor operation (chsize()) would would fail under some circumstances.
-
-smb_getmsgidx() function now uses "fast" message number look-up algorythm.
-
-Added smb_getlastidx() function to retrieve the last index in the message
-base.
-
-Allocation strategy for hfield and dfield elements of the smbmsg_t structure
-were changed to require less memory. Rather than an array of pointers (pointer
-to a pointer) of type hfield_t or dfield_t, they are simply an array (pointer)
-of type hfield_t or dfield_t. The only change you need to make are any
-references to "smbmsg_t.hfield[x]->etc" to "smbmsg_t.hfield[x].etc".
-
-Added several new error codes to smb_getmsghdr(). -7 indicates missing one
-of the three mandatory header fields (sender, recipient, or subject). -8
-indicates that total_dfields element of smbhdr_t is incorrect (extends beyond
-smbhdr_t.length). -9 indicates incompatible header version.
-
-New error code to smb_addcrc(), -4 indicates error getting length of file.
-
-smb_putmsghdr() returns -2 on failure write header, -3 on failure to write
-dfield, -4 on failure to write hfield (fixed), -5 on failure to write hfield
-(data), and -6 on failure to pad record with NULLs.
-
-Bugs fixed in sample conversion source code and SMBUTIL: Overwriting first
-two bytes of next record when using self-packing storage, SBBSFIDO would
-crash on blank kludge lines, SEEN-BYs weren't converted properly by SBBSFIDO,
-and more.
-
-*** IMPORTANT ***
-Index format changed, added message time field to idxrec_t for fast pointer
-manipulation by (import) date/time stamp. This is SMB format v1.10 and is
-not compatible with the v1.00 format. A conversion program (100TO110.EXE)
-is included with source code for converted any existing message bases.
-
-CHKSMB, a utility for checking message bases for corruption, included with
-SMBLIB.
-
-SMBUTIL and CHKSMB both accept wildcard arguments for processing multiple
-message bases.
-
-idxrec_t.to and idxrec_t.from may contain USER NUMBER instead of CRC of user
-names. This implementation is currently specific to E-mail boxes on Synchronet
-BBS. E-mail from non-local users are stored with a "from" field of 0.
-
-**********************
-03/28/94 Release v1.10
-**********************
-
-Forgot to include this file (oops).
-
-***********************
-03/28/94 Release v1.10a
-***********************
-
-Fixed problem with buffered fread() routine attempting to read into a locked
-regions.
-
-Added smb_stack() function for saving (pushing) currently open message base
-and ability to pop it off later.
-
-Added fix for keeping original sender information in smbmsg_t structure when
-a message has been forwarded.
-
-CHKSMB now correctly support multiple destination messages (without reporting
-missallocated active data blocks) and now reports packable bytes available.
-
-SMBUTIL can now conditionally compress a message base, only if so many K are
-compressable.
-
-Fixed problem with incorrect UTC value.
-
-Added NET_WWIV network type.
-
-**********************
-06/02/94 Release v1.11
-**********************
-
-Created Watcom compatible MAKEFILE for DOS, 32-bit DOS, and 32-bit OS/2
-versions of SMBUTIL.
-
-Enhanced macro definitions in SMBDEFS.H for MALLOC, FREE, and REALLOC to
-support Watcom and other compilers other than Borland. Also added LMALLOC
-and LFREE macros for large allocation (>64k) operations.
-
-Fixed problem with multiple calls to setvbuf() when using Watcom C libraries.
-Memory allocated by setvbuf() would never be released. To work around this
-Watcom C bug, a static buffer, shd_buf[], is now used instead.
-
-Fixed bug in smb_getmsghdr() that would cause it to return -6 when attempting
-to allocate 0 length header fields.
-
-Added LZH.C to SMBLIB for message data compression/decompression.
-
-Removed the 16-bit CRC functions from SMBUTIL and put them in CRC16.C (now part
-of SMBLIB) for easier integration into other applications.
-
-Added Hyper Allocation storage method to specification: smbstatus_t.reserved
-changed to smbstatus_t.attr and SMB_HYPERALLOC bit is set when Hyper Allocation
-storage is used for a message base. This is the only change between v1.10 and 
-v1.20 of the message base format. No other bits in smbstatus_t.attr are 
-currently defined. See the specification for definition of the Hyper Allocation
-storage method.
-
-Changed SMB Storage and Retrieval Protocol chapters in the specification to
-Pseudo-code examples.
-
-Added SMBLIB Storage and Retrieval C example chapters to the specification.
-
-Added field descriptions for message base header record fields and Status Info
-(base header #1) record fields to the specification.
-
-Changed SMBLIB smb_addmsghdr() 'fast' argument to 'storage' to specify the
-storage method to use (either SMB_SELFPACK, SMB_FASTALLOC, or SMB_HYPERALLOC).
-Previous usage (0 for self-pack, 1 for fast) still compatible.
-
-Added smb_hallocdat() and smb_hallochdr() to SMBLIB functions for the Hyper
-Allocation storage method.
-
-Added SMB_STACK_XCHNG operation to smb_stack() function, to exchange the top
-of the stack with the currently open message base.
-
-**********************
-02/14/95 Release v1.20
-**********************
-
-smb_close() was modified in the following ways:
-	Only attempts to close non-NULL file pointers
-	If shd_fp is currently open, calls smb_unlocksmbhdr() before closing
-		(just in case it was left locked by application)
-
-smb_open() was modified in the following ways:
-	Initializes all file pointers to NULL
-	calls smb_close() if any of the files couldn't be opened
-
-smb_locksmbhdr() was modified in the following ways:
-	If lock fails, attempts to unlock the header before next lock
-		attempt (just incase application attempts to lock a locked
-		header without first unlocking it)
-
-smb_lockmsghdr() was modified in the following ways:
-	If lock fails, attempts to unlock the header before next lock
-		attempt (same reason stated above)
-
-CHKSMB (1.21) was modified in the following ways:
-	Tests for valid translations strings in the .SDT files
-	Displays totals for bytes used by header and data blocks, bytes used
-		by deleted messages, and bytes saved by LZH compression
-
-SMBUTIL (1.21) underwent some minor cosmetic changes.
-
-***********************
-03/18/95 Release v1.20a
-***********************
-
-SMBUTIL (1.22) now compiles correctly under Watcom, using correct time zone
-information. SMBUTIL maint() will no longer delete messages if max_age is
-specified in the SMB header and the when_imported time for a message is in the
-future.
-
-Fixed problem in LZH.C that would cause lzh_decode() to generate exception
-errors when compiled with a 32-bit compiler.
-
-CHKSMB (1.22) now supports /E command line switch to display extended
-information about corrupted messages. CHKSMB.C is now Watcom compatible.
-
-Added fflush() calls to all smblib functions that write to the SDT, SHA, or SDA
-files. This eliminates the problem of duplicate data offsets (data blocks for
-multiple messages pointing to the same location) causing corrupted SDT files
-(unsupported translation types reported by CHKSMB).
-
-Added fflush() call after writing to SDT file in SMB_PUT example in SMB.TXT.
-
-Fixed example *2SMB.C files to be compatible with SMBLIB v1.20 smb_create()
-function.
-
-Fixed smb_hallocdat() function prototype to stop redeclaration warnings.
-
-Minor typos in specification fixed.
-
-***********************
-04/24/95 Release v1.20b
-***********************
-
-Added SMB_EMAIL (1<<0) attribute definition for the message base status header
-to specify a local e-mail message base where index "to" and "from" fields are
-stored as user numbers, not CRC-16s (this is the only change between v1.20
-and v1.21 of the SMB format).
-
-Version 1.21 of FIXSMB no longer needs the "/M" switch to correctly fix a
-Synchronet e-mail message base (as long as the SMB_EMAIL status attr is set).
-
-Version 1.23 of SMBUTIL can now import text into a Synchronet e-mail message
-base (as long as the SMB_EMAIL status attr has been set). It will ask for the
-sender and recipient user numbers. Fixed an apparently nasty bug that would
-cause damage to message bases when (I)mporting (check for SMB_HYPERALLOC
-attribute was backwards). Excess baggage in the SMBUTIL source code was also
-removed (no longer supports /L, /F, and /D command line switches). Only
-supports self-packing and hyper-allocated message bases (it will not damage
-fast allocated bases, however). "SMBUTIL M" now correctly handles message bases
-that contain messages that have been pre-flagged for deletion (MSG_DELETE attr
-set).
-
-Changed smb_open(int retry_count) function: if retry_count is 0, then a "fast
-open" method is used which doesn't lock and read the status header to check
-for compatibility and validity of message base.
-
-Added SMBLIB_VERSION definition (string constant) to contain the current
-version and revision (if applicable) of the SMB library. This version number
-may not always be the same as SMB_VERSION (version of the SMB format) or the
-current version of the specification. It may be helpful to include a display
-of this version number somewhere in your application (i.e. printf("SMBLIB v%s"
-,SMBLIB_VERSION);).
-
-Changed smb_stack() example in the Performance Issues chapter to keep two
-message bases always open using SMB_STACK_XCHNG.
-
-Fixed bug in SMBUTIL that would cause an infinite loop when analysing an
-extrememly corrupted HyperAllocated message base.
-
-Fixed bug in smb_stack() function when using SMB_STACK_XCHNG operation. Would
-previously set current message base to an undefined message base, rather than
-the message base on top of the stack (last pushed or exchanged).
-
-CHKSMB v1.22 compiled in the 1.20b release did not support wildcards (wasn't
-linked with WILDARGS.OBJ) - this has been fixed and is the only change in
-CHKSMB v1.23.
-
-**********************
-05/31/95 Release v1.21
-**********************
-
-Add uchar forwarded element to smbmsg_t structure. This variable is initialized
-by the smb_getmsghdr() function. If the message has been forwarded, it will
-be set to non-zero.
-
-Fixed bug in LZH.C which caused lzh_decode() to produce incorrect results
-(usually t's and spaces) when compiled with a 32-bit compiler.
-
-Added HUGE16 and FAR16 macros to SMBDEFS.H for huge and far pointers for
-16-bit compilers only (default pointer type for 32-bit compilers).
-
-Fixed bug in FIXSMB.C that would initialize the SDA file to the wrong length.
-
-Added net type NET_MHS for MHS gateways.
-
-SMBUTIL (1.24) will no longer free deleted headers when maintaining a message
-base if the /A (no analysis) command line switch is used. This speeds up the
-message base maintenance/pack operation significantly by using: SMBUTIL /A MP
-
-***********************
-08/31/95 Release v1.21a
-***********************
diff --git a/src/sbbs2/smb/121a/smb.prn b/src/sbbs2/smb/121a/smb.prn
deleted file mode 100644
index 904897ea1e..0000000000
--- a/src/sbbs2/smb/121a/smb.prn
+++ /dev/null
@@ -1,5661 +0,0 @@
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	                     Synchronet Message Base Specification
-	                                 Version 1.21
-	                               Updated 08/31/95
-	
-	                        Copyright 1995 Digital Dynamics
-	
-	                                  PO Box 501
-	                             Yorba Linda, CA 92686
-	
-	                 Voice: 714-529-6328   BBS: 714-529-9525 V.32/V.32bis
-	                   FAX: 714-529-9721        714-529-9547 V.FC
-	                  Fido: 1:103/705      ftp: netcom.com /pub/sb/sbbs
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	Table of Contents
-	=================
-	
-	Introduction.............................................................3
-	Implementation Levels....................................................8
-	Definitions.............................................................10
-	        Acronyms........................................................12
-	        Data Types......................................................13
-	File Formats............................................................18
-	        Index.....................(*.SID)...............................18
-	        Header....................(*.SHD)...............................20
-	        Header Allocation.........(*.SHA)...............................30
-	        Data......................(*.SDT)...............................31
-	        Data Allocation...........(*.SDA)...............................32
-	        CRC History...............(*.SCH)...............................33
-	Header Field Types......................................................34
-	Data Field Types........................................................58
-	Messsage Attributes.....................................................60
-	Translation Types.......................................................61
-	Agent Types.............................................................62
-	Network Types...........................................................63
-	Media Types.............................................................64
-	Message Storage Pseudo Code.............................................67
-	Message Retrieval Pseudo Code...........................................69
-	SMBUTIL.................................................................70
-	CHKSMB..................................................................71
-	FIXSMB..................................................................72
-	SMBLIB (C library)......................................................73
-	        Data Types and Constants..(SMBDEFS.H)...........................74
-	        Global Variables..........(SMBVARS.C)...........................75
-	        Function Prototypes.......(SMBLIB.H)............................76
-	        Library Functions.........(SMBLIB.C)............................77
-	        Miscellaneous.............(CRC*.* and LZH.*)....................84
-	SMBLIB Storage Example..................................................86
-	SMBLIB Retrieval Example................................................89
-	SMBLIB Performance Issues...............................................91
-	Bibliography............................................................95
-	Implementations.........................................................96
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                            2                                Contents
-
-
-	Introduction
-	============
-	
-	Q. What is SMB?
-	
-	A. SMB (Synchronet Message Base) is a technical specification for the storage
-	   format of electronic mail messages. These e-mail messages may all be
-	   contained in one database, or, more commonly, separated into catagorized
-	   databases. These message databases (or message bases) are also referred to
-	   as "sub-boards", "forums", "conferences", and "SIGs". The messages may be
-	   directed to an individual person, sent to a group of individuals, or sent
-	   to everyone who can read messages in that message base. Messages may be
-	   created and read soley at one physical location, or imported from and
-	   exported to a message network that may span continents. Message bases that
-	   are connected to a message network are often called "echoes".
-	
-	
-	Q. Why SMB?
-	
-	A. The Synchronet Message Base is designed to store high volumes of messages
-	   while maintaining optimum search, retrieval, and creation performance.
-	   These messages are not limited to mere text. In addition to text, SMB
-	   defines the storage of digitized sound, MIDI, graphics, fonts, animation,
-	   as well as other multimedia data and triggers for localized multimedia.
-	   SMB thrives on a multi-user environment where messages are being created,
-	   read, modified, and deleted by multiple tasks simultaneously. With the
-	   large message networks of today being the rule, rather than the exception,
-	   and high volumes of messages being imported on a daily, sometimes hourly
-	   basis, creation and deletion speed is of the utmost importance. This is
-	   where SMB really shines. Being extensible enough to handle message formats
-	   from networks of today and tomorrow, and fast enough to import more messages
-	   that humanly readable, the SMB format will more than meet your message
-	   storage needs.
-	
-	
-	Q. Why a specification?
-	
-	A. Message bases are often accessed and modified by a number of different
-	   programs. Often these programs are developed by individuals or companies
-	   other than the original designer of the message base format. This
-	   specification is an attempt to aid developers in creating programs that
-	   access or modify a message base stored in the SMB format.
-	
-	
-	Q. Who can use this specification?
-	
-	A. Anyone that has interest in the Synchronet Message Base format at either
-	   an educational or professional level. Specifically, software developers
-	   interested or currently involved in the development of message readers,
-	   editors, echomail (toss/scan) programs, message transfer agents (MTAs),
-	   network gateways, and bulletin board systems. Much of the information in
-	   this specification is intended for those with preexisting programming
-	   knowledge, so those with little or no programming experience may find it
-	   hard to comprehend.
-
-	_______________________________________________________________________________
-	Synchronet                            3                            Introduction
-
-
-	
-	
-	Q. What does the SMB specification include?
-	
-	A. The text you are reading is part of the SMB specification: a single text
-	   document that defines the storage format of each of the six files of an
-	   SMB format message base and how they are related to each other.
-	
-	   Included with this specification is C source code to be used as an example
-	   to programmers of how to access an SMB format message base and public domain
-	   library functions (SMBLIB) that can be compiled and linked into programs
-	   that access an SMB format message base developed by third parties. An SMB
-	   utility program (SMBUTIL) is also included with C source code as an example
-	   of how to use the SMBLIB functions.
-	
-	
-	Q. Where did the SMB specification come from?
-	
-	A. Digital Dynamics (southern California based software development company)
-	   released "Synchronet Multinode BBS Software Version 1a" in June of 1992 as
-	   one of the first BBS packages to be designed from the ground-up to operate
-	   in a multinode environment with incredible speed and reliability, with a
-	   large suite of multinode specific features and design innovations.
-	
-	   The original message base format was designed with localized messaging and
-	   low volume message networks in mind. By January of 1993, it was clear that
-	   high volume message networks (FidoNet, RelayNet, Usenet, etc.) were the
-	   preference of most BBS users and a new message base format was required to
-	   allow for high volume message storage, improved storage, retrieval, and
-	   maintenance performance, as well as lower storage space requirements.
-	
-	   Rather than introduce another new message format, Digital Dynamics sought
-	   to implement an existing public specification for a format that would meet
-	   current and future message storage needs. More than a few specifications
-	   were seriously considered at one time or another, but after careful
-	   examination, design flaws and lack of extensibility eliminated them from the
-	   long term plans of Digital Dynamics and Synchronet BBS Software. Thus began
-	   the design of the "Synchronet Message Base" (SMB) format.
-	
-	   At the request of many message related program developers, Digital Dynamics
-	   created and released the SMB specification before the release of "Synchronet
-	   Version 2.00" to allow lead-time on developing support programs for the new
-	   format.
-	
-	   Digital Dynamics strongly encourages developers of message related programs
-	   (including software that directly competes with Synchronet or other Digital
-	   Dynamics products) to implement support for SMB. Though this is a public
-	   specification and Digital Dynamics encourages developer suggestions, it will
-	   remain under the sole control of Digital Dynamics unless specifically stated
-	   otherwise in a future revision of this specification.
-	
-	   Digital Dynamics requests that any organizations that wish to adopt or
-	   ratify this specification, in part or whole, notify Digital Dynamics through
-	   any of the contact methods listed at the beginning of this document.
-
-	_______________________________________________________________________________
-	Synchronet                            4                            Introduction
-
-
-	
-	
-	Q. How does SMB store messages?
-	
-	A. Each message base is stored in a set of binary files. This set consists
-	   of between three and six files depending the storage method used. The base
-	   filename (maximum of eight characters under DOS) is the same for all six
-	   files of the same message base and unique amoung the filenames of other
-	   message bases in the same directory. The six files each have a different
-	   three character extension. The first character of the extension is always
-	   the letter 'S' (for SMB), while the second and third characters define the
-	   contents of the file.
-	
-	   Two of the six files associated with each message base are not recreatable
-	   and therefore are the most important when considering data integrity. These
-	   two files are the data file (with a .SDT extension) and header file (.SHD
-	   extension). Both of these files use 256 byte blocks and have associated
-	   block allocation tables (stored in .SDA and .SHA respectively) so that
-	   deleted message blocks may be used by new messages without creating odd
-	   sized unused 'holes' in the files. The block allocation table files (.SDA
-	   and .SHA) can be recreated with the information stored in the header (.SHD)
-	   file. When using Hyper Allocation storage method, the allocation files (.SDA
-	   and .SHA) are not used.
-	
-	   For fast indexing, there is a small fixed length index file (with a .SID
-	   extension). This file allows for the immediate location of message header
-	   records based on sender's name or user number, recipient's name or user
-	   number, subject, message number, or message attributes. This file can be
-	   recreated with the data stored in the header (.SHD) file.
-	
-	   The last file is an optional CRC history (.SCH) file. It contains 32-bit
-	   CRCs of a configurable number of messages imported or created locally. This
-	   is to help eliminate duplicate messages created by user or program error.
-	   The CRC history file can be recreated with the combination of information
-	   stored in the data (.SDT) and header (.SHD) files.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                            5                            Introduction
-
-
-	Q. How fast do messages import into an SMB message base?
-	
-	A. This is a very important question for systems for that import large volumes
-	   of messages. Of course, the answer depends on the storage format which you
-	   are importing from, the average length of messages, the design of the
-	   program which is peforming the import process, as well as the hardware and
-	   system software being used. What's important is that SMB will allow the
-	   fastest import process possible with any given combination of the above
-	   factors.
-	
-	   Since system storage capacity is rarely infinite, neither is the number
-	   of messages which can be stored in a message base. System operators must
-	   define the maximum number of messages to be stored in a message base, the
-	   maximum age of the messages in that message base, or a combination of both.
-	   When using the Self-packing storage method (defined later in this document),
-	   the smaller the number of messages stored in a message base, the faster the
-	   import process. The SMB format is flexible enough to support multiple levels
-	   of import performance based on optimizations for storage space or speed.
-	   Most system operators will almost invariably choose speed over space, but
-	   which choices are available is determined by the importing program. This
-	   specification defines three storage methods, from slowest to fastest:
-	   Self-packing, Fast Allocation, and Hyper Allocation. Other options defined
-	   in this specification may affect storage performance, including duplicate
-	   message checking and message compression/encryption.
-	
-	
-	Q. How much storage is required for an SMB message base?
-	
-	A. The biggest factor in determining storage requirements for a message base
-	   is the maximum number of messages to be stored in the base (defined by the
-	   system operator) and the average size of each message. The minimum required
-	   storage for a message base is 32 bytes plus 532 bytes per message (plus four
-	   bytes per message if duplicate message checking is used and three bytes
-	   per message if Self-packing or Fast Allocation storage methods are used).
-	
-	   The SMB format was originally designed to be "self-packing", meaning purged
-	   (deleted) message header and data blocks will be used automatically by new
-	   messages. Relying solely on self-packing, an SMB format message base will
-	   never "shrink" in size. This is not to say that it will continually "grow"
-	   in size, but that without specific packing procedures, deleted message
-	   blocks may remain unused for extended periods of time, meanwhile using some
-	   amount of storage space that could be recovered using specific packing
-	   procedures. The Fast Allocation and Hyper Allocation storage methods do not
-	   use deleted message blocks for new messages so specific packing procedures
-	   must be used if any messages are deleted and that storage space is to ever
-	   be recovered.
-	
-	   Limiting the maximum age of messages in an SMB message base is another way
-	   to control the storage requirements. While maximum message age definition is
-	   optional, the definition of the maximum number of messages is not.
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                            6                            Introduction
-
-
-	Q. How many messages can be stored per SMB message base?
-	
-	A. Without considering storage limitations or message data lengths greater than
-	   256, the theoretical maximum number of messages that can be stored in a
-	   single SMB message base is 16.7 million. Considering the variable length
-	   nature of message and header data, it is suggested that the system operator
-	   allow no more than 1 million messages per base.
-	
-	   To determine an estimated maximum number of messages for a message base
-	   using the average message data length as a factor, use the following
-	   formula:
-	
-	   4.2 billion divided by the average message length rounded up to be evenly
-	   divisible by 256.
-	
-	   If the average message data length is 1500 bytes, the estimated maximum
-	   number of messages would be 2,734,375 (4.2 billion divided by 1536).
-	
-	   Implementations of this format may be further limited by available system
-	   memory.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                            7                            Introduction
-
-
-	Implementation Levels
-	=====================
-	The SMB format can be implemented to varying degrees between programs without
-	creating compatibilty issues. Rather than have developers specifically state
-	which features they have and have not implemented, we have defined seven levels
-	of implementation (represented by Roman numerals I through VII). For a program
-	or software package to meet an implementation level, it must have all of the
-	features listed for that level and all of those for each level below it. The
-	minimum suggested imlementation is level I. The SMBUTIL program included with
-	this specification is an example of a level I implementation with features
-	from some of the higher implementation levels.
-	
-	Level I
-	-------
-	The minimum suggested level of implementation. Messages contain merely ASCII
-	text displayable on an ANSI terminal. Messages can be added to the message
-	base and if the maximum number of messages is exceeded, messages are removed
-	or marked for deletion.
-	
-	Level II
-	--------
-	The addition of file attachments, multiple index/header entries per message
-	(multiple destinations), multiple text bodies for the separation of message
-	text and tag/origin lines (for example), forwarding, threading, and specific
-	FidoNet kludge header field support makes this level of implementation more
-	realistic for bulletin board system and EchoMail software implementation.
-	
-	Synchronet Multinode BBS Software v2.00 has a level II implementation of this
-	specification.
-	
-	Level III
-	---------
-	This implementation adds support for translation strings defined later in this
-	document for data compression, encryption, escaping, and encoding. This level
-	is still limited to basic ASCII text and ANSI escape sequence entry and
-	retrieval.
-	
-	Synchronet Multinode BBS Software v2.10 has a level III implementation of this
-	specification.
-	
-	Level IV
-	--------
-	The storage and retrieval of embedded and attached images is added in this
-	level of implementation. Supported images are limited to single binary or text
-	data blocks that can be displayed or transferred to the user (automatically,
-	or by request) if their display and translation protocols define specific
-	support for the image type.
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                            8                   Implementation Levels
-
-
-	Level V
-	-------
-	This level of implementation adds support for embedded and attached sound data.
-	This includes digitized sound and MIDI data. Supported sounds are limited to
-	single binary or text data blocks that can be played or transferred to the user
-	(automatically or by request) if their presentation and translation protocols
-	define specific support for the sound type.
-	
-	Level VI
-	--------
-	Localized sound and image data can be triggered by messages stored and
-	retrieved in an implementation of this level.
-	
-	Level VII
-	---------
-	Complete multimedia support is reached in this implementation level with
-	support for embedded and attached animation, sound, and video data.
-	
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                            9                   Implementation Levels
-
-
-	Definitions
-	===========
-	
-	Control Characters
-	------------------
-	When specifying control characters (ASCII 1 through 31), the caret symbol "^"
-	or the abreviation "ctrl-" followed by a character will be used to indicate the
-	value. ^A is equivalent to ASCII 1, ^B ASCII 2, etc. The case of the control
-	character is not significant (i.e. ^z and ^Z are equivalent). The control
-	character ^@ (ASCII 0) will be specified as NULL or 0.
-	
-	
-	Hexadecimal
-	-----------
-	Base sixteen numbering system which includes the digits 0-9 and A-F.
-	Hexadecimal numbers are represented in this document with a prefix of "0x" or
-	"\x" or a suffix of "h". Hexadecimal letter digits are not case sensitive
-	(i.e. the number 0xff is the same as 0xFF).
-	
-	
-	File dump
-	---------
-	When example file dumps are displayed, the format is similar to that of the
-	output from the DOS DEBUG program. With the exception of the ASCII characters,
-	all numbers are in hexadecimal.
-	
-	Offset    Byte values                                          ASCII characters
-	
-	000000    53 4D 42 1A 10 01 20 00   F4 01 00 00 F4 01 00 00    SMB... .�...�...
-	000010    20 00 00 00 D0 07 00 00   D0 07 00 00 00 00 00 00     ...�...�.......
-	
-	
-	Bit values
-	----------
-	Bit (or flag) values are represented in C notation as (1<<x) where x is the bit
-	number. (i.e. bit number 7 (1<<7) is the same as 0x80).
-	
-	
-	Word storage
-	------------
-	All words (16-bit) and double words (32-bit) are stored in Intel 80x86 (little
-	endian) format with bytes stored from low to high (reverse of the Motorola
-	680x0 word storage format).
-	
-	A 16-bit word with the value 1234h is stored as 34h 12h.
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           10                             Definitions
-
-
-	Translation strings
-	-------------------
-	Translation strings (xlat variables) are arrays of words (16-bit) in the order
-	of the original storage translation. The last translation type is followed by a
-	16-bit zero (defined later as XLAT_NONE). If there are no translations, then
-	the first and only element of the array is XLAT_NONE.
-	
-	If multiple translations are used, the translation order must be reversed
-	upon retrieval to obtain the proper data.
-	
-	
-	Local e-mail
-	------------
-	When referring to the local e-mail message base of a Synchronet BBS, we are
-	referring specifically the message base with the name "MAIL" stored in the
-	"DATA" directory (e.g. \SBBS\DATA\MAIL).
-	
-	Messages stored in this message base are different in the following respects:
-	
-	    The SMB_EMAIL status header attribute is set ON
-	    Hyper Allocation storage method is not supported
-	    The "To" and and "From" fields of the message indexes do NOT contain CRCs
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           11                             Definitions
-
-
-	Acronyms:
-	========
-	
-	ANSI            American National Standards Institute
-	ASCII           American Standard Code for Information Interchange
-	BBS             Bulletin Board System
-	C               The C programming language as defined by ANSI X3.159-1989
-	CR              Carriage Return character (ASCII 13)
-	CRC             Cyclic Redundancy Check
-	CRC-16          Standard 16-bit CRC using 1021h polynomial (seed 0)
-	CRC-32          Standard 32-bit CRC using EDB88320h polynomial (seed -1)
-	CRLF            Carriage Return character followed by a Line Feed character
-	FSC             FidoNet Standards Commitee (FTS proposal)
-	FTN             FidoNet Technology Network
-	FTS             FidoNet Technical Standard
-	LF              Line Feed character (ASCII 10)
-	QWK             Compressed message packet format for message reading/networking
-	RFC             Request for Comments
-	SMB             Synchronet Message Base
-	UT              Universal Time (formerly called "Greenwhich Mean Time")
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           12                  Definition of Acronyms
-
-
-	Data types
-	==========
-	
-	uchar           Unsigned 8-bit value (0 through 255).
-	                C example:
-	
-	                #define uchar unsigned char
-	
-	
-	short           Signed 16-bit value (-32768 through 32767).
-	                "short" is a C keyword indicating "short int".
-	
-	
-	ushort          Unsigned 16-bit value (0 through 65535).
-	                C example:
-	
-	                #define ushort unsigned short
-	
-	
-	ulong           Unsigned 32-bit value (0 through 4294967295).
-	                C example:
-	
-	                #define ulong unsigned long
-	
-	
-	time_t          Unsigned 32-bit value.
-	                Seconds since 00:00 Jan 01 1970 (Unix format).
-	                Used for all time/date storage in SMB as part of the when_t
-	                data type. This time format will support dates through the year
-	                2105.
-	                time_t is defined by ANSI C as a long (signed) which can
-	                limit its date support to the year 2038 depending on the
-	                library routines used.
-	
-	
-	ASCII           String (aka character array) of 8-bit ASCII characters.
-	                Characters with the bit 7 set (80h through FFh) represent
-	                the IBM PC extended ASCII character set. When data or header
-	                fields of this type are stored in the header, a NULL
-	                terminator may or may not be present.
-	                C example:
-	
-	                uchar str[80];
-	
-	
-	ASCIIZ          ASCII string with (non-optional) NULL terminator.
-	                C example:
-	
-	                uchar str[81];
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           13                Definition of Data Types
-
-
-	nulstr          ASCII string immediately terminated by NULL.
-	                C example:
-	
-	                uchar *nulstr="";
-	
-	
-	undef           Data buffer with undefined contents.
-	                C example:
-	
-	                uchar buf[BUF_LEN];
-	
-	when_t          Date/Time stamp including time-zone adjustment information.
-	                C example:
-	
-	                typedef struct {
-	
-	                    time_t  time;   // Time stamp (in local time)
-	                    short   zone;   // Zone constant or Minutes (+/-) from UT
-	
-	                    } when_t;
-	
-	                time:
-	
-	                A time value of 0 is invalid and indicates an uninitialized
-	                time stamp.
-	
-	                Time stamps are always stored in universal time. i.e.
-	                Regardless of what the local time zone is, Jan 1st 1994 00:00
-	                will always be stored as 2D24BD00h.
-	
-	                zone:
-	
-	                If the zone is in the range -720 to +720, it represents the
-	                number of minutes east or west of UT. Values in this range
-	                should only be used for time zones not otherwise represented
-	                here.
-	
-	                If the zone is greater than 720 or less than -720, then the
-	                following bits have special meaning:
-	
-	                (1<<12)         // Non-US time zone     (east of UT)
-	                (1<<13)         // Non-US time zone     (west of UT)
-	                (1<<14)         // U.S. time zone
-	                (1<<15)         // Daylight savings
-	
-	                The lower 12 bits (0 through 11) contain the number of minutes
-	                east or west of UT (not accounting for daylight savings).
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           14                Definition of Data Types
-
-
-	                If the time zone is one specified in the U.S. Uniform Time Act,
-	                the following values represent the zone:
-	
-	                AST 0x40F0      // Atlantic             (-04:00)
-	                EST 0x412C      // Eastern              (-05:00)
-	                CST 0x4168      // Central              (-06:00)
-	                MST 0x41A4      // Mountain             (-07:00)
-	                PST 0x41E0      // Pacific              (-08:00)
-	                YST 0x421C      // Yukon                (-09:00)
-	                HST 0x4258      // Hawaii/Alaska        (-10:00)
-	                BST 0x4294      // Bering               (-11:00)
-	
-	                With bit 15 set, the following values represent the same zone
-	                with the presence of daylight savings:
-	
-	                ADT 0xC0F0      // Atlantic             (-03:00)
-	                EDT 0xC12C      // Eastern              (-04:00)
-	                CDT 0xC168      // Central              (-05:00)
-	                MDT 0xC1A4      // Mountain             (-06:00)
-	                PDT 0xC1E0      // Pacific              (-07:00)
-	                YDT 0xC21C      // Yukon                (-08:00)
-	                HDT 0xC258      // Hawaii/Alaska        (-09:00)
-	                BDT 0xC294      // Bering               (-10:00)
-	
-	                The following non-standard time zone specifications may also be
-	                used:
-	
-	                MID 0x2294      // Midway               (-11:00)
-	                VAN 0x21E0      // Vancouver            (-08:00)
-	                EDM 0x21A4      // Edmonton             (-07:00)
-	                WIN 0x2168      // Winnipeg             (-06:00)
-	                BOG 0x212C      // Bogota               (-05:00)
-	                CAR 0x20F0      // Caracas              (-04:00)
-	                RIO 0x20B4      // Rio de Janeiro       (-03:00)
-	                FER 0x2078      // Fernando de Noronha  (-02:00)
-	                AZO 0x203C      // Azores               (-01:00)
-	                LON 0x1000      // London               (+00:00)
-	                BER 0x103C      // Berlin               (+01:00)
-	                ATH 0x1078      // Athens               (+02:00)
-	                MOS 0x10B4      // Moscow               (+03:00)
-	                DUB 0x10F0      // Dubai                (+04:00)
-	                KAB 0x110E      // Kabul                (+04:30)
-	                KAR 0x112C      // Karachi              (+05:00)
-	                BOM 0x114A      // Bombay               (+05:30)
-	                KAT 0x1159      // Kathmandu            (+05:45)
-	                DHA 0x1168      // Dhaka                (+06:00)
-	                BAN 0x11A4      // Bangkok              (+07:00)
-	                HON 0x11E0      // Hong Kong            (+08:00)
-	                TOK 0x121C      // Tokyo                (+09:00)
-	                SYD 0x1258      // Sydney               (+10:00)
-	                NOU 0x1294      // Noumea               (+11:00)
-	                WEL 0x12D0      // Wellington           (+12:00)
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           15                Definition of Data Types
-
-
-	fidoaddr_t      FidoNet address stored as four ushorts that represent the zone,
-	                network, node, and point (in that order).
-	                C example:
-	
-	                typedef struct {
-	
-	                    ushort zone,
-	                           net,
-	                           node,
-	                           point;
-	
-	                    } fidoaddr_t;
-	
-	
-	typestr_t       ASCIIZ string with ushort type prefix.
-	                C example:
-	
-	                typedef struct {
-	
-	                    ushort  type;   // Specifier for type of 'str'
-	                    uchar   str[];  // ASCIIZ filename or other string data
-	
-	                    } typestr_t;
-	
-	
-	mattach_t       File attachment information with type prefix, translation
-	                string, and filename.
-	                C example:
-	
-	                typedef struct {
-	
-	                    ushort  type;   // Attachment type
-	                    ushort  xlat[]; // Translations of data in attachment
-	                    uchar   str[];  // ASCIIZ filename
-	
-	                    } mattach_t;
-	
-	vattach_t       Video file attachment information with type, compression,
-	                translation string, and filename.
-	                C example:
-	
-	                typedef struct {
-	
-	                    ushort  type;   // Attachment type
-	                    ushort  comp;   // Compression method
-	                    ushort  xlat[]; // Translations of data in attachment
-	                    uchar   str[];  // ASCIIZ filename
-	
-	                    } vattach_t;
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           16                Definition of Data Types
-
-
-	mtext_t         Message text with translation string prefix.
-	                C example:
-	
-	                typedef struct {
-	
-	                    ushort  xlat[]; // Translations of text
-	                    uchar   text[]; // Actual text data
-	
-	                    } mtext_t;
-	
-	
-	ftext_t         Formatted message text with translation string prefix and
-	                format type.
-	                C example:
-	
-	                typedef struct {
-	
-	                    ushort  type;   // See Image Types for valid types
-	                    ushort  xlat[]; // Translations of data
-	                    uchar   data[]; // Actual formatted text data
-	
-	                    } ftext_t;
-	
-	
-	membed_t        Embedded data with type prefix, translation string, and ASCIIZ
-	                description.
-	                C example:
-	
-	                typedef struct {
-	
-	                    ushort  type;   // Specifier for type of 'dat'
-	                    ushort  xlat[]; // Translations of embedded data
-	                    uchar   name[]; // ASCIIZ char description of embedded data
-	                    uchar   dat[];  // Binary data
-	
-	                    } membed_t;
-	
-	vembed_t        Embedded video data with type, compression method, translation
-	                string, and ASCIIZ description.
-	                C example:
-	
-	                typedef struct {
-	
-	                    ushort  type;   // Specifier for type of 'dat'
-	                    ushort  comp;   // Compression method
-	                    ushort  xlat[]; // Translations of embedded data
-	                    uchar   name[]; // ASCIIZ char description of embedded data
-	                    uchar   dat[];  // Binary data
-	
-	                    } vembed_t;
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           17                Definition of Data Types
-
-
-	File formats
-	============
-	
-	Index File (*.SID)
-	------------------
-	The index file for each message base contains one record per message in the
-	base. Each record is fixed length using the following format:
-	
-	Index Record:
-	------------
-	C example:
-	
-	typedef struct {
-	
-	    ushort  to;     // 16-bit CRC of recipient name (lower case) or user number
-	    ushort  from;   // 16-bit CRC of sender name (lower case) or user number
-	    ushort  subj;   // 16-bit CRC of title/subject (lower case)
-	    ushort  attr;   // attributes (MSG_PRIVATE, MSG_READ, etc. flags)
-	    ulong   offset; // byte offset of message header in header file
-	    ulong   number; // message serial number (1 based)
-	    time_t  time;   // import date/time stamp (Unix format)
-	
-	    } idxrec_t;
-	
-	
-	Example file dump (16 messages starting with message number 15):
-	---------------------------------------------------------------
-	000000    36 4F 13 07 2A 77 00 00   20 00 00 00 0F 00 00 00    6O..*w.. .......
-	000010    BE 62 76 2C 36 4F 46 0A   7F B2 00 00 20 01 00 00    �bv,6OF.�.. ...
-	000020    10 00 00 00 C7 29 78 2C   36 4F 70 6F 46 FF 00 00    ....�)x,6OpoF�..
-	000030    20 02 00 00 11 00 00 00   AD D3 7A 2C 70 6F 13 07     .......��z,po..
-	000040    46 FF 00 00 20 03 00 00   12 00 00 00 D6 F8 7F 2C    F�.. .......��,
-	000050    36 4F E1 EA E7 E9 00 00   20 04 00 00 13 00 00 00    6O����.. .......
-	000060    1E 7B 85 2C 37 0D 2E DF   4D 79 00 00 20 05 00 00    .{�,7..�My.. ...
-	000070    14 00 00 00 5C E1 A1 2C   90 54 2D 5A 86 62 00 00    ....\�,�T-Z�b..
-	000080    20 06 00 00 15 00 00 00   39 2E A2 2C 70 6F 1A 8B     .......9.�,po.�
-	000090    46 FF 00 00 20 07 00 00   16 00 00 00 D0 7B A8 2C    F�.. .......�{�,
-	0000A0    2E DF 1A 8B 4D 79 00 00   20 08 00 00 17 00 00 00    .�.�My.. .......
-	0000B0    FF 7B A8 2C B4 D9 35 7C   23 B1 00 00 20 09 00 00    �{�,��5|#�.. ...
-	0000C0    18 00 00 00 CE D4 BA 2C   36 4F BC D8 B2 E7 00 00    ....�Ժ,6O�ز�..
-	0000D0    20 0A 00 00 19 00 00 00   14 5F C3 2C BA A8 4E B0     ........_�,��N�
-	0000E0    67 76 00 00 20 0B 00 00   1A 00 00 00 6F 89 C3 2C    gv.. .......o��,
-	0000F0    36 4F 0C 01 19 9C 00 00   20 0C 00 00 1B 00 00 00    6O...�.. .......
-	000100    F8 30 C6 2C 36 4F FA 48   0E 55 00 00 20 0D 00 00    �0�,6O�H.U.. ...
-	000110    1C 00 00 00 6A 94 D3 2C   36 4F F1 CE CF A2 00 00    ....j��,6O��Ϣ..
-	000120    20 0E 00 00 1D 00 00 00   53 DB D5 2C 8D A6 21 CE     .......S��,��!�
-	000130    F7 AB 00 00 20 0F 00 00   1E 00 00 00 31 29 DC 2C    ��.. .......1)�,
-	
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           18               Index (*.SID) File Format
-
-
-	Field descriptions:
-	------------------
-	To:
-	The 'To' field is the CRC-16 of the name of the intended recipient agent of
-	this message or the intended recipient's user number. If the CRC is stored, the
-	text must be converted to lower case (A-Z changed to a-z) before the CRC is
-	calculated. If the message is forwarded to another agent, the original or new
-	index record must be changed to contain the CRC-16 of the new recipient name or
-	user number. This field must always contain the recipient user number for local
-	e-mail on a Synchronet BBS. Outbound netmail stored in the Synchronet local
-	e-mail message base will contain 0 in this field.
-	
-	From:
-	This field, similar to the 'To' field, contains the CRC-16 of the name of the
-	sending agent of this message or the sender's user number. If the CRC is
-	stored, the text must be converted to lower case (A-Z changed to a-z) before
-	the CRC is calculated. If the message is forwarded to another agent, the
-	original or new index record must be changed to contain the CRC-16 of the new
-	sender name or user number. If the message was imported into the local e-mail
-	message base on a Synchronet BBS via netmail, this field will contain 0.
-	
-	Subj:
-	The 'Subj' field contains the CRC-16 of the message's subject. The subject
-	must be converted to lower case (A-Z changed to a-z) and all preceeding
-	"re: "'s and "re:"'s removed before calculating the CRC-16.
-	
-	Attr:
-	This ushort is a bit field of the specific attributes for this message.
-	It is a clone of the 'attr' element of the msghdr_t structure.
-	
-	Offset:
-	This ulong is the offset (in bytes) in the header file for this message's
-	header record.
-	
-	Number:
-	This ulong is the serial number of this message. Valid values are 1 through
-	0xffffffff. No two index records in the same message base may have the same
-	message number. All index records must have sequential, but not necessarily
-	consequetive, message numbers.
-	
-	Time:
-	This field is the date/time stamp the message was imported to or posted in
-	the message base. It is a clone of the 'when_imported.time' element of the
-	msghdr_t structure.
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           19               Index (*.SID) File Format
-
-
-	Header File (*.SHD)
-	===================
-	
-	Each SMB header file is made up of two distinct sections: base header records
-	and message header records (usually the bulk of the file).
-	
-	Base Header Records:
-	-------------------
-	Base header records are blocks of data that apply to the entire message base
-	and are of variable length. This specification defines only one base header
-	record, the "Status info" (smbstatus_t) record. This status info record must be
-	the first base header record in the file and must be modified if additional
-	base header records are added.
-	
-	Additional header records allow other developers to store configuration and
-	status information particular to their application needs. It also allows for
-	future header record definitions as part of this specification without causing
-	backward compatibility issues.
-	
-	Each base header record contains a fixed length portion (smbhdr_t) and an
-	optional variable length portion.
-	
-	Whenever a base header record is read or updated (written), it must first
-	be successfully locked and subsequently unlocked.
-	
-	The first base header record (Status Info) is used as a semaphore when writing
-	to the message index (.SID) file and, when using the Hyper Allocation storage
-	method, writing to the message data (.SDT) file. This record must be
-	succesfully locked before writing and subsequently unlocked. This is to insure
-	that multiple applications simultaneously writing to the same message base
-	does result in corrrupted data.
-	
-	
-	Message Header Records:
-	----------------------
-	Following the last base header record is the first message header record. Each
-	header record is stored in one or more 256 byte blocks. There must be exactly
-	one active message header record for every index record in the index file.
-	(Note: This does not include deleted message headers that have not been
-	overwritten by a new message header).
-	
-	Each message header record contains a fixed length portion (msghdr_t), a list
-	of zero or more fixed length data fields (dfield_t), and a list of three or
-	more variable length header fields (hfield_t).
-	
-	The value of the data stored in the zero or more unused bytes of the last
-	header record block have an undefined value, though whenever possible
-	developers should initialize to binary zero for human readability.
-	
-	Whenever a message header record is read or updated (written), it must first
-	be successfully locked and subsequently unlocked.
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           20              Header File (*.SHD) Format
-
-
-	Base Header Record (Fixed Portion):
-	----------------------------------
-	C example:
-	
-	typedef struct {
-	
-	    uchar   id[4];          // text or binary unique hdr ID
-	    ushort  version;        // version number (initially 100h for 1.00)
-	    ushort  length;         // length including this struct
-	
-	    } smbhdr_t;
-	
-	
-	Base Header Record Field Descriptions:
-	-------------------------------------
-	Id:
-	This is a four byte unique ID identifying the type of the base header record.
-	The bytes may contain any value, but printable ASCII characters are preferred.
-	The only ID defined in this specification is "SMB^Z" used by the Status Info
-	base header record.
-	
-	Version:
-	This is a version number of the base header record type. Base header records
-	of different versions may have different formats or contain different
-	information. This is to aid the application in determining if the record
-	is pertinent and if so, to what degree. The Status Info base header record
-	uses this version field to define the version of the format for the entire
-	message base (currently 0x121 for version 1.21).
-	
-	Length:
-	This is entire length in bytes of this header record (including both fixed
-	and variable portions).
-	
-	
-	Base Header #1 (Status info) Record (Variable Portion):
-	------------------------------------------------------
-	C example:
-	
-	typedef struct {
-	
-	    ulong   last_msg;       // last message number posted or imported
-	    ulong   total_msgs;     // total messages currently in message base
-	    ulong   header_offset;  // byte offset to first header record
-	    ulong   max_crcs;       // Maximum number of CRCs to keep in history
-	    ulong   max_msgs;       // Maximum number of messages to keep in base
-	    ushort  max_age;        // Maximum age of messages (days) to keep in base
-	    ushort  attr;           // Attribute bits
-	
-	    } smbstatus_t;
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           21              Header File (*.SHD) Format
-
-
-	Base Header #1 (Status Info) Record (Variable Portion) Field Descriptions:
-	-------------------------------------------------------------------------
-	Last_msg:
-	This is the serial number of the last message imported or posted into this
-	message base. The index, header, and data records for this message may possibly
-	not exist (due to deletion). This field is used for determining the message
-	number to give to a new message being imported or posted into this message
-	base. This field must be updated for every message added to the message base.
-	
-	Total_msgs:
-	This is the total number of active messages currently in the message base.
-	This number should match the number of records in the index (.SID) file
-	and active header records in the header (.SHD) file. This field must be
-	updated whenever a message is added to or removed from the message base.
-	
-	Header_offset:
-	This is the byte offset to the first message header record. It is useful
-	for skipping all the base header records and going directly to the first
-	message header record.
-	
-	Max_crcs:
-	This is the maximum number of message CRCs to store in the CRC history (.SCH)
-	file for duplicate message checking. If this field contains 0, then duplicate
-	message checking is disabled.
-	
-	Max_msgs:
-	This is the preferred maximum number of messages to keep in this message
-	base as specified by the system operator. It is used by maintenance programs
-	that trim the message base down by removing old messages. This field should
-	be ignored by applications importing or posting messages allowing them to
-	exceed this maximum at will.
-	
-	Max_age:
-	This field is the maximum age (in days) of messages to keep in the message
-	base. It is used by maintenance programs to purge out-dated messages from
-	the message base.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           22              Header File (*.SHD) Format
-
-
-	Attr:
-	This is a bit field containing specific attributes (or flags) that may define
-	the way messages are stored or retrieved from the this message base. The
-	following attributes are defined:
-	
-	    SMB_EMAIL       (1<<0)
-	
-	    Indicates the message base is specifically for messages to or from local
-	    users. When this bit is set, the idxrec.to and idxrec.from fields will
-	    contain the user numbers (or 0 for non-user destination/source) instead of
-	    the CRC-16 of the agent name.
-	
-	    SMB_HYPERALLOC  (1<<1)
-	
-	    Indicates the message base uses the Hyper Allocation storage method. This
-	    bit should not be cleared by an application without first deleting all the
-	    messages in the message base. This is due to the fact the Hyper Allocation
-	    is not downward compatible with the Self-packing and Fast Allocation
-	    storage methods.
-	
-	When used with Synchronet BBS software, a message base must NOT have both of
-	the above attributes set. The only message base that should have the SMB_EMAIL
-	attribute set is the DATA\MAIL message base.
-	
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           23              Header File (*.SHD) Format
-
-
-	Base Header #1 (Status info) Record Contents:
-	--------------------------------------------
-	smbhdr.id="SMB\x1a";        // SMB^Z
-	smbhdr.version=0x121;       // v1.21
-	smbhdr.length=sizeof(smbhdr_t)+sizeof(smbstatus_t); smbstatus_t status;
-	
-	
-	Additional Base Headers:
-	-----------------------
-	Additional headers from developers must have initial 8 bytes in smbhdr_t
-	format, length must include size of smbhdr_t, and header_offset of smbstatus_t
-	must be changed to include the size of the additional header(s).
-	
-	
-	Example file dump (base header portion only):
-	--------------------------------------------
-	000000    53 4D 42 1A 20 01 20 00   F4 01 00 00 F4 01 00 00    SMB. . .�...�...
-	000010    20 00 00 00 D0 07 00 00   D0 07 00 00 00 00 00 00     ...�...�.......
-	
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           24              Header File (*.SHD) Format
-
-
-	Message Header Record (Fixed portion):
-	-------------------------------------
-	C example:
-	
-	typedef struct {
-	
-	    uchar   id[4];          // SHD^Z (same for all types and versions)
-	    ushort  type;           // Message type (this is the definition of type 0)
-	    ushort  version;        // Version of type (initially 100h for 1.00)
-	    ushort  length;         // Total length of fixed portion + all fields
-	    ushort  attr;           // Attributes (bit field) (duplicated in SID)
-	    ulong   auxattr;        // Auxillary attributes (bit field)
-	    ulong   netattr;        // Network attributes (bit field)
-	    when_t  when_written;   // Date/Time message was originally created
-	    when_t  when_imported;  // Date/Time message was imported (locally)
-	    ulong   number;         // Message number (unique, not necessarily seq.)
-	    ulong   thread_orig;    // Original message number in thread
-	    ulong   thread_next;    // Next message in thread
-	    ulong   thread_first;   // Number of first reply to this message
-	    uchar   reserved[16];   // 16 reserved bytes for future use
-	    ulong   offset;         // Offset for buffer into data file (0 or mod 256)
-	    ushort  total_dfields;  // Total number of data fields
-	
-	    } msghdr_t;
-	
-	typedef struct {
-	
-	    ushort  type;           // See "Data Field Types" values
-	    ulong   offset;         // Offset into buffer 
-	    ulong   length;         // Length of data field in buffer
-	
-	    } dfield_t;
-	
-	typedef struct {
-	
-	    ushort  type;           // See "Header Field Types" for values
-	    ushort  length;         // Length of buffer
-	    uchar   dat[length];
-	
-	    } hfield_t;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           25              Header File (*.SHD) Format
-
-
-	Example file dump (one header record, both fixed and variable length portions):
-	------------------------------------------------------------------------------
-	000020    53 48 44 1A 00 00 20 01   F5 00 00 00 00 00 00 00    SHD... .�.......
-	000030    00 00 00 00 46 DB F7 2C   00 00 7D D7 29 2D 00 00    ....F��,..}�)-..
-	000040    01 00 00 00 00 00 00 00   00 00 00 00 00 00 00 00    ................
-	000050    00 00 00 00 00 00 00 00   00 00 00 00 00 00 00 00    ................
-	000060    00 00 00 00 02 00 00 00   00 00 00 00 4A 01 00 00    ............J...
-	000070    02 00 4A 01 00 00 53 00   00 00 00 00 13 00 4D 61    ..J...S.......Ma
-	000080    72 69 61 6E 6E 65 20 4D   6F 6E 74 67 6F 6D 65 72    rianne Montgomer
-	000090    79 30 00 0C 00 43 61 72   6F 6C 20 47 61 69 73 65    y0...Carol Gaise
-	0000A0    72 60 00 07 00 46 61 72   6E 68 61 6D A4 00 14 00    r`...Farnham�...
-	0000B0    31 3A 31 33 38 2F 31 30   32 2E 30 20 32 63 66 38    1:138/102.0 2cf8
-	0000C0    30 35 37 36 A5 00 14 00   31 3A 33 34 33 2F 31 30    0576�...1:343/10
-	0000D0    30 2E 30 20 32 63 66 33   62 39 30 61 A3 00 23 00    0.0 2cf3b90a�.#.
-	0000E0    31 33 38 2F 31 30 32 20   31 20 32 37 30 2F 31 30    138/102 1 270/10
-	0000F0    31 20 32 30 39 2F 32 30   39 20 31 30 33 2F 30 20    1 209/209 103/0 
-	000100    33 35 35 02 00 02 00 02   00 03 00 08 00 01 00 8A    355............�
-	000110    00 66 00 00 00 00 00 00   00 00 00 00 00 00 00 00    .f..............
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           26              Header File (*.SHD) Format
-
-
-	Contents of example header:
-	--------------------------
-	id                   SHD^Z
-	type                 0000h
-	version              0120h
-	length               245
-	attr                 0000h
-	auxattr              00000000h
-	netattr              00000000h
-	when_written         Sat Nov 27 17:57:10 1993
-	when_imported        Tue Jan 04 15:54:21 1994
-	number               1
-	thread_orig          0
-	thread_next          0
-	thread_first         0
-	reserved[16]         
-	offset               0
-	total_dfields        2
-	
-	dfield[0].type       00h
-	dfield[0].offset     0
-	dfield[0].length     330
-	dfield[1].type       02h
-	dfield[1].offset     330
-	dfield[1].length     83
-	
-	hfield[0].type       00h
-	hfield[0].length     19
-	hfield[0]_dat        Marianne Montgomery
-	hfield[1].type       30h
-	hfield[1].length     12
-	hfield[1]_dat        Carol Gaiser
-	hfield[2].type       60h
-	hfield[2].length     7
-	hfield[2]_dat        Farnham
-	hfield[3].type       A4h
-	hfield[3].length     20
-	hfield[3]_dat        1:138/102.0 2cf80576
-	hfield[4].type       A5h
-	hfield[4].length     20
-	hfield[4]_dat        1:343/100.0 2cf3b90a
-	hfield[5].type       A3h
-	hfield[5].length     35
-	hfield[5]_dat        138/102 1 270/101 209/209 103/0 355
-	hfield[6].type       02h
-	hfield[6].length     2
-	hfield[6]_dat        02 00
-	hfield[7].type       03h
-	hfield[7].length     8
-	hfield[7]_dat        01 00 8A 00 66 00 00 00
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           27              Header File (*.SHD) Format
-
-
-	Fixed Portion Field descriptions:
-	--------------------------------
-	Id:
-	This field (regardless of the header type or version) must always contain the
-	the string "SHD^Z". This is to aid in the restoration of a corrupted header
-	file and give a visual indication of the beginning of a new header record when
-	viewing dumps of the header file.
-	
-	Type:
-	This is the message header type. Only one type is currently defined by this
-	specification (type 0). Any and all future header types will have the first
-	4 fields (10 bytes) in the same format of type 0. This allows other types
-	(with different lengths) to be skipped because the 4th field (length) will
-	always be in the same position.
-	
-	Version:
-	This is the version of this header type. This specification defines version
-	1.21 of message header type 0 (stored as 121h).
-	
-	Length:
-	This is the total length of this message header record (including both fixed
-	and variable length portions, but NOT including unused block space).
-	
-	Attr:
-	This is a bit field (16-bit) containing basic message attributes (flags) for
-	this message. An exact duplicate of this field is stored in the index file as
-	well. They must always match.
-	
-	Auxattr:
-	This is a bit field (32-bit) containing the auxillary attributes (flags) for
-	this message. The attributes stored in this variable are more specific in
-	nature and less critical than those in the Attr field.
-	
-	Netattr:
-	This is a bit field (32-bit) containing the network attributes (flags) for this
-	message. The attributes stored in this variable are related solely to message
-	networking.
-	
-	When_written:
-	This is the date and time when the message was originally created.
-	
-	When_imported:
-	This is the date and time when the message was posted on or imported into the
-	local message system.
-	
-	Number:
-	This is the message's unique serial number (from 1 to FFFFFFFFh). This field
-	is duplicated in the index file. They must always match.
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           28              Header File (*.SHD) Format
-
-
-	Thread_orig:
-	If this message is a reply, then this field contains the number of the original
-	message that was replied to. If this message was not a reply, this field will
-	contain the value 0.
-	
-	Thread_next:
-	If this message is a reply, and there are later replies to that message
-	(the message number contained in the Thread_orig field), then this field will
-	contain the number of the next reply in the chain. If this message is the only
-	reply to the orignal message, this field will contain the value 0.
-	
-	Thread_first:
-	If there are any replies to this message (after it has been posted), this field
-	will contain the number of the first reply to this message. If there are no
-	replies to this message, this field will contain the value 0.
-	
-	Reserved:
-	Unused bytes, reserved for future definition in the message header type 0
-	specification.
-	
-	Offset:
-	The byte offset into the data file, specifying the start of the buffer for
-	all data associated with this message. This value must be either 0 or modula
-	256. When retrieving the actual data portion of data fields, the physical
-	offset into the file will be the offset of the message data buffer (this field)
-	plus the offset of the individual data field (msghdr_t.offset+dfield_t.offset).
-	
-	Total_dfields:
-	This field contains the total number of data fields associated with this
-	message. The value of this field must match the actual number of data fields
-	stored in the header (dfield_t data types following the fixed portion of the
-	message header).
-	
-	
-	Variable Portion Field descriptions:
-	-----------------------------------
-	See the Header Field Type and Data Field Type sections for the descriptions
-	of the values contained in these fields.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           29              Header File (*.SHD) Format
-
-
-	Message Header Block Allocation (*.SHA)
-	=======================================
-	
-	If this message base uses the Hyper Allocation storage method (the
-	SMB_HYPERALLOC bit is set in the smbstatus_t.attr field), then this file is
-	not created or used.
-	
-	This file contains no header or signature data. Each byte (uchar) in the file
-	specifies the allocation state of the corresponding 256 byte block in the
-	header (*.SHD) file. A value of 0 indicates a free header block, and a value of
-	1 indicates an allocated block. Other non-zero values are undefined.
-	
-	This file must always be opened DENY ALL (non-shareable).
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           30   Header Allocation File (*.SHA) Format
-
-
-	Message Data (*.SDT)
-	====================
-	
-	This file contains no header or signature data. It contains the text and other
-	embedded data for the messages in a single message base. The data for each
-	message always begins on a 256 byte block boundary. The data in the unused
-	portion of a data block is undefined, but should be initialized to NULL
-	whenever possible.
-	
-	This file must always be opened DENY NONE (shareable).
-	
-	Data fields of type TEXT_BODY and TEXT_TAIL must have all trailing white space
-	and control characters removed (i.e. the last character of the data record
-	must be in the range 21h to FFh). The only exception to this rule, is if the
-	TEXT_BODY is terminated with multiple contiguous CRLFs, only the last CRLF
-	should be removed. A CRLF should always be appended to the text data when it is
-	displayed.
-	
-	When reading from this file, it is a good idea to make sure the message header
-	for the data being read is currently locked (though no single message header
-	should be locked for extended durations of time). This will insure that no
-	other application will write to this portion of the file while it's being
-	read (read from disk, not displayed).
-	
-	When using the Hyper Allocation storage method, the Status Info message base
-	header must be successfully locked before writing to this file and subsequently
-	unlocked.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           31                Data File (*.SDT) Format
-
-
-	Message Data Block Allocation (*.SDA)
-	=====================================
-	
-	If this message base uses the Hyper Allocation storage method (the
-	SMB_HYPERALLOC bit is set in the smbstatus_t.attr field), then this file is
-	not created or used.
-	
-	This file contains no header or signature data. Each word (ushort) in the file
-	specifies the allocation state of the corresponding 256 byte block in the data
-	(*.SDT) file. A value of 0 indicates a free block, and a non-zero value
-	indicates the number of message header records associated with this message
-	data (most often 1). Each block can be used by up to 65,535 header records.
-	
-	This file must always be opened DENY ALL (non-shareable).
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           32     Data Allocation File (*.SDA) Format
-
-
-	CRC history for duplicate message checking (*.SCH)
-	==================================================
-	
-	This file is optional and contains no header or signature data. Each long word
-	(ulong) in the file contains a CRC-32 of previously posted/imported messages.
-	These CRCs can be used to check a candidate message for posting/import to be
-	sure the message isn't a duplicate created by human or program error. The
-	maximum number of CRCs to store is defined in the first message base header
-	record (smbstatus_t.max_crcs).
-	
-	The CRC is calculated on the first TEXT_BODY data field before any translations
-	are applied (e.g. encoding, compression, encryption).
-	
-	This file must always be opened DENY ALL (non-shareable).
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           33         CRC History File (*.SCH) Format
-
-
-	Header Field Types:
-	==================
-	
-	These are the defined valid values for hfield_t.type:
-	
-	Name     : SENDER
-	Value    : 00h
-	Data     : ASCII
-	Multiple : Yes, order significant
-	Required : Yes
-	Summary  : Name of agent that sent this message
-	
-	If blank (0 length or nulstr), assumed "Anonymous". If multiple SENDER fields
-	exist, then the message has been forwarded and the order of the fields in the
-	record must match the forwarding order (chronologically). When forwarding a
-	message, the original SENDER field should be left intact and new SENDER,
-	FORWARDED, and RECIPIENT fields added to the end of the record.
-	
-	
-	Name     : SENDERAGENT
-	Value    : 01h
-	Data     : ushort
-	Multiple : Yes, order significant
-	Required : No
-	Default  : AGENT_PERSON or previous SENDERAGENT if exists
-	Summary  : Type of agent that sent this message
-	
-	If multiple SENDER fields exist, then the message has been forwarded. If any of the
-	forwarding agents is of a type other than AGENT_PERSON, then this field must
-	follow that SENDER field to specify the agent type.
-	
-	Name     : SENDERNETTYPE
-	Value    : 02h
-	Data     : ushort
-	Multiple : Yes, order significant
-	Required : No
-	Default  : NET_NONE or previous SENDERNETTYPE if exists
-	Summary  : Type of network message was sent from
-	
-	If multiple SENDERNETADDR fields are included, a SENDERNETTYPE field should be
-	included before each to determine what data type the address is stored in.
-	
-	Name     : SENDERNETADDR
-	Value    : 03h
-	Data     : undef
-	Multiple : Yes, order significant
-	Required : No
-	Default  : Previous SENDERNETADDR if exists
-	Summary  : Network address for agent that sent this message
-	
-	The SENDERNETTYPE field indicates the data type of this field. If the
-	SENDERNETTYPE is of type NET_INTERNET, the local-part of the Internet
-	address is optional. If the local-part separator character ('@') is omitted,
-	the SENDER field is assumed to be the local-part of the address.
-
-	_______________________________________________________________________________
-	Synchronet                           34                      Header Field Types
-
-
-	
-	Name     : SENDEREXT
-	Value    : 04h
-	Data     : ASCII
-	Multiple : Yes, order significant
-	Required : No
-	Default  : Previous SENDEREXT if exists
-	Summary  : Extension of sending agent
-	
-	This field is useful for storing the sending agent's extension, when the
-	agent's extension binds more tightly than the agent's name.
-	
-	For example, Synchronet Multinode BBS Software stores local e-mail with the
-	sending and receiving agent's user numbers stored as their respective
-	extensions. This is done so that if a user name changes for some reason,
-	messages will not "disappear" from the user's mail box.
-	
-	If the SMB_EMAIL status header attribute is set, then the "From" field in the
-	index must contain the binary value of this field rather than the CRC-16 of the
-	SENDER (name) field.
-	
-	Name     : SENDERPOS
-	Value    : 05h
-	Data     : ASCII
-	Multiple : Yes, order significant
-	Required : No
-	Default  : Previous SENDERPOS if exists
-	Summary  : Position of sending agent
-	
-	Primarily for documentary purposes, this field contains the position of the
-	sending agent (i.e. President, Sysop, C.E.O., MIS Director, etc).
-	
-	It can also be useful for getting a message or reply to the intended
-	recipient when the agent name is not located or is unknown, but the position
-	of the agent is known and specified.
-	
-	Name     : SENDERORG
-	Value    : 06h
-	Data     : ASCII
-	Multiple : Yes, order significant
-	Required : No
-	Default  : Previous SENDERORG if exists
-	Summary  : Organization name of sending agent
-	
-	Primarily for documentary purposes, this field contains the organization to
-	which the sending agent belongs (i.e. Microsoft, Joe's BBS, SoCal User's Group,
-	etc).
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           35                      Header Field Types
-
-
-	Name     : AUTHOR
-	Value    : 10h
-	Data     : ASCII
-	Multiple : Yes
-	Required : No
-	Default  : First SENDER
-	Summary  : Name of agent that created this message
-	
-	This field can only be added by the process that originally creates the
-	message. It should not be included if same as first SENDER field. If multiple
-	AUTHOR fields exist, then the message was created by multiple agents and is
-	considered valid. The order of multiple AUTHOR fields in the record is not
-	significant.
-	
-	Name     : AUTHORAGENT
-	Value    : 11h
-	Data     : ushort
-	Multiple : Yes, order significant
-	Required : No
-	Default  : SENDERAGENT or previous AUTHORAGENT if exists
-	Summary  : Type of agent that created this message
-	
-	This field can only be added by the process that originally creates the
-	message. It should not be included if same as first SENDERAGENT field. If
-	multiple AUTHOR fields exist, then the message was created by multiple agents
-	and if the agent type for any of the authors is other than AGENT_PERSON, an
-	AUTHORAGENT field must follow to specify the agent type.
-	
-	Name     : AUTHORNETTYPE
-	Value    : 12h
-	Data     : ushort
-	Multiple : Yes, order significant
-	Required : No
-	Default  : SENDERNETTYPE or previous AUTHORNETTYPE if exists
-	Summary  : Type of network this author is member of
-	
-	Name     : AUTHORNETADDR
-	Value    : 13h
-	Data     : undef
-	Multiple : Yes, order significant
-	Required : No
-	Default  : SENDERNETADDR or previous AUTHORNETADDR if exists
-	Summary  : Network address of this author
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           36                      Header Field Types
-
-
-	Name     : AUTHOREXT
-	Value    : 14h
-	Data     : ASCII
-	Multiple : Yes, order significant
-	Required : No
-	Default  : SENDEREXT or previous AUTHOREXT if exists
-	Summary  : Extension of this author
-	
-	Name     : AUTHORPOS
-	Value    : 15h
-	Data     : ASCII
-	Multiple : Yes, order significant
-	Required : No
-	Default  : SENDERPOS or previous AUTHORPOS if exists
-	Summary  : Position of this author
-	
-	Name     : AUTHORORG
-	Value    : 16h
-	Data     : ASCII
-	Multiple : Yes, order significant
-	Required : No
-	Default  : SENDERORG or previous AUTHORORG if exists
-	Summary  : Organization this author belongs to
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           37                      Header Field Types
-
-
-	Name     : REPLYTO
-	Value    : 20h
-	Data     : ASCII
-	Multiple : Yes, but only last is valid
-	Required : No
-	Default  : SENDER
-	Summary  : Name of agent that replies should go to
-	
-	Name     : REPLYTOAGENT
-	Value    : 21h
-	Data     : ushort
-	Multiple : Yes, but only last is valid
-	Required : No
-	Default  : SENDERAGENT
-	Summary  : Type of agent that replies should go to
-	
-	Name     : REPLYTONETTYPE
-	Value    : 22h
-	Data     : ushort
-	Multiple : Yes, but only last is valid
-	Required : No
-	Default  : SENDERNETTYPE
-	Summary  : Type of network that replies should go to
-	
-	Name     : REPLYTONETADDR
-	Value    : 23h
-	Data     : undef
-	Multiple : Yes, but only last is valid
-	Required : No
-	Default  : SENDERNETADDR
-	Summary  : Network address that replies should go to
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           38                      Header Field Types
-
-
-	Name     : REPLYTOEXT
-	Value    : 24h
-	Data     : ASCII
-	Multiple : Yes, but only last is valid
-	Required : No
-	Default  : SENDEREXT
-	Summary  : Extension of agent that replies should go to
-	
-	Name     : REPLYTOPOS
-	Value    : 25h
-	Data     : ASCII
-	Multiple : Yes, but only last is valid
-	Required : No
-	Default  : SENDERPOS
-	Summary  : Position of agent that replies should go to
-	
-	Name     : REPLYTOORG
-	Value    : 26h
-	Data     : ASCII
-	Multiple : Yes, but only last is valid
-	Required : No
-	Default  : SENDERORG
-	Summary  : Organization of agent that replies should go to
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           39                      Header Field Types
-
-
-	Name     : RECIPIENT
-	Value    : 30h
-	Data     : ASCII
-	Multiple : Yes, order significant
-	Required : Yes
-	Default  : "All"
-	Summary  : Name of agent to receive this message
-	
-	If multiple RECIPIENT fields exist, the message has been forwarded and for each
-	additional RECIPIENT field (after the initial RECIPIENT), there should be a
-	FORWARDED field. The order of the RECIPIENT fields in the record must match the
-	order in which the message was sent and forwarded (chronologically).
-	
-	Name     : RECIPIENTAGENT
-	Value    : 31h
-	Data     : ushort
-	Multiple : Yes, order significant
-	Required : No
-	Default  : AGENT_PERSON or previous RECIPIENTAGENT if exists
-	Summary  : Type of agent to receive this message
-	
-	If multiple RECIPIENT fields exist, the message has been forwarded. If any of
-	the recipient agents are of a type other than AGENT_PERSON, this field must
-	follow the RECIPIENT field to specify the agent type.
-	
-	Name     : RECIPIENTNETTYPE
-	Value    : 32h
-	Data     : ushort
-	Multiple : Yes, order significant
-	Required : No
-	Default  : NET_NONE or previous RECIPIENTNETTYPE if exists
-	Summary  : Type of network to receive this message
-	
-	Name     : RECIPIENTNETADDR
-	Value    : 33h
-	Data     : undef
-	Multiple : Yes, order significant
-	Required : No
-	Default  : Previous RECIPIENTNETADDR if exists
-	Summary  : Address of network to receive this message
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           40                      Header Field Types
-
-
-	Name     : RECIPIENTEXT
-	Value    : 34h
-	Data     : ASCII
-	Multiple : Yes, order significant
-	Required : No
-	Default  : Previous RECIPIENTEXT if exists
-	Summary  : Extension of agent to receive this message
-	
-	If SMB_EMAIL status header attribute is set, then the "To" field in the index
-	must contain the binary value of this field rather than the CRC-16 of the
-	RECIPIENT (name) field. This is the case specifically with the local e-mail
-	message base on a Synchronet BBS.
-	
-	Name     : RECIPIENTPOS
-	Value    : 35h
-	Data     : ASCII
-	Multiple : Yes, order significant
-	Required : No
-	Default  : Previous RECIPIENTPOS if exists
-	Summary  : Position of agent to receive this message
-	
-	Name     : RECIPIENTORG
-	Value    : 36h
-	Data     : ASCII
-	Multiple : Yes, order significant
-	Required : No
-	Default  : Previous RECIPIENTORG if exists
-	Summary  : Type of agent to receive this message
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           41                      Header Field Types
-
-
-	Name     : FORWARDTO
-	Value    : 40h
-	Data     : ASCII
-	Multiple : Yes, order significant
-	Required : No
-	Summary  : Name of agent this message is to be forwarded to
-	
-	Name     : FORWARDTOAGENT
-	Value    : 41h
-	Data     : ushort
-	Multiple : Yes, order significant
-	Required : No
-	Default  : RECIPIENTAGENT or previous FORWARDTOAGENT if exists
-	Summary  : Type of agent this message is to be forwarded to
-	
-	Name     : FORWARDTONETTYPE
-	Value    : 42h
-	Data     : ushort
-	Multiple : Yes, order significant
-	Required : No
-	Default  : RECIPIENTNETTYPE or previous FORWARDTONETTYPE if exists
-	Summary  : Type of network this message is to be forwarded to
-	
-	Name     : FORWARDTONETADDR
-	Value    : 43h
-	Data     : undef
-	Multiple : Yes, order significant
-	Required : No
-	Default  : RECIPIENTNETADDR or previous FORWARDTONETADDR if exists
-	Summary  : Network address this message is to be forwarded to
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           42                      Header Field Types
-
-
-	Name     : FORWARDTOEXT
-	Value    : 44h
-	Data     : ASCII
-	Multiple : Yes, order significant
-	Required : No
-	Default  : RECIPIENTEXT or previous FORWARDTOEXT if exists
-	Summary  : Extension of agent this message is to be forwarded to
-	
-	Name     : FORWARDTOPOS
-	Value    : 45h
-	Data     : ASCII
-	Multiple : Yes, order significant
-	Required : No
-	Default  : RECIPIENTPOS or previous FORWARDTOPOS if exists
-	Summary  : Position of agent this message is to be forwarded to
-	
-	Name     : FORWARDTOORG
-	Value    : 46h
-	Data     : ASCII
-	Multiple : Yes, order significant
-	Required : No
-	Default  : RECIPIENTORG or previous FORWARDTOORG if exists
-	Summary  : Organization of agent this message is to be forwarded to
-	
-	Name     : FORWARDED
-	Value    : 48h
-	Data     : when_t
-	Multiple : Yes, order significant
-	Required : Yes, if forwarded
-	Summary  : Date/Time this message was forwarded to another agent
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           43                      Header Field Types
-
-
-	Name     : RECEIVEDBY
-	Value    : 50h
-	Data     : ASCII
-	Multiple : Yes, order significant
-	Required : Yes, if receiving agent is other than RECIPIENT
-	Summary  : Name of agent that received this message
-	
-	Name     : RECEIVEDBYAGENT
-	Value    : 51h
-	Data     : ushort
-	Multiple : Yes, order significant
-	Required : No
-	Default  : RECIPIENTAGENT or previous RECEIVEDBYAGENT if exists
-	Summary  : Type of agent that received this message
-	
-	Name     : RECEIVEDBYNETTYPE
-	Value    : 52h
-	Data     : ushort
-	Multiple : Yes, order significant
-	Required : No
-	Default  : RECIPIENTNETTYPE or previous RECEIVEDBYNETTYPE if exists
-	Summary  : Type of network that received this message
-	
-	Name     : RECEIVEDBYNETADDR
-	Value    : 53h
-	Data     : undef
-	Multiple : Yes, order significant
-	Required : No
-	Default  : RECIPIENTNETADDR or previous RECEIVEDBYNETADDR if exists
-	Summary  : Network address that received this message
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           44                      Header Field Types
-
-
-	Name     : RECEIVEDBYEXT
-	Value    : 54h
-	Data     : ASCII
-	Multiple : Yes, order significant
-	Required : No
-	Default  : RECIPIENTEXT or previous RECEIVEDBYEXT if exists
-	Summary  : Extension of agent that received this message
-	
-	Name     : RECEIVEDBYPOS
-	Value    : 55h
-	Data     : ASCII
-	Multiple : Yes, order significant
-	Required : No
-	Default  : RECIPIENTPOS or previous RECEIVEDBYPOS if exists
-	Summary  : Position of agent that received this message
-	
-	Name     : RECEIVEDBYORG
-	Value    : 56h
-	Data     : ASCII
-	Multiple : Yes, order significant
-	Required : No
-	Default  : RECIPIENTORG or previous RECEIVEDBYORG if exists
-	Summary  : Organization of agent that received this message
-	
-	Name     : RECEIVED
-	Value    : 58h
-	Data     : when_t
-	Multiple : Yes, order significant
-	Required : Yes, if received
-	Default  : NULL
-	Summary  : Date/Time this message was received
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           45                      Header Field Types
-
-
-	Name     : SUBJECT
-	Value    : 60h
-	Data     : ASCII
-	Multiple : No
-	Required : Yes, but may be blank (0 length or nulstr)
-	Summary  : Subject/title of message
-	
-	Name     : SUMMARY
-	Value    : 61h
-	Data     : ASCII
-	Multiple : No
-	Required : No
-	Summary  : Summary of message contents, created by AUTHOR
-	
-	Name     : COMMENT
-	Value    : 62h
-	Data     : ASCII
-	Multiple : Yes
-	Required : No
-	Summary  : Comment about this message, created by SENDER
-	
-	This field is useful for adding notes to a message when forwarding to a new
-	recipient.
-	
-	Name     : CARBONCOPY
-	Value    : 63h
-	Data     : ASCII
-	Multiple : Yes
-	Required : No
-	Summary  : List of agents this message was also sent to
-	
-	This field is optional and only for the use of notifying the recipient of who
-	else received the message.
-	
-	Name     : GROUP
-	Value    : 64h
-	Data     : ASCII
-	Multiple : Yes
-	Required : No
-	Summary  : Name of group of users to receive message on recipient system
-	
-	This field is used when sending to a group name across a network, where the
-	group can be expanded into multiple header records for each agent on the
-	destination system.
-	
-	Name     : EXPIRATION
-	Value    : 65h
-	Data     : when_t
-	Multiple : No
-	Required : No
-	Summary  : Date/Time that this message will expire
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           46                      Header Field Types
-
-
-	Name     : PRIORITY
-	Value    : 66h
-	Data     : ulong
-	Multiple : No
-	Required : No
-	Default  : 0
-	Summary  : Message priority (0 is lowest, FFFFFFFFh is highest)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           47                      Header Field Types
-
-
-	Name     : FILEATTACH
-	Value    : 70h
-	Data     : ASCII
-	Multiple : Yes
-	Required : No
-	Summary  : Name/file specification of attached file(s)
-	
-	Name of attached file(s). Wildcards allowed. MSG_FILEATTACH attribute must be
-	set. If the MSG_FILEATTACH attribute is set but this field is not included,
-	the SUBJECT field is assumed to be the filename(s).
-	
-	Name     : DESTFILE
-	Value    : 71h
-	Data     : ASCII
-	Multiple : Yes, order significant
-	Required : No
-	Summary  : Destination name for attached file(s)
-	
-	Wildcards allowed. FILEATTACH field must also be included.
-	
-	Name     : FILEATTACHLIST
-	Value    : 72h
-	Data     : ASCII
-	Multiple : Yes
-	Required : No
-	Summary  : Name of ASCII list of attached filenames
-	
-	Wildcards not allowed in ASCII list filename. Wildcards allowed in ASCII list.
-	MSG_FILEATTACH attribute must be set.
-	
-	Name     : DESTFILELIST
-	Value    : 73h
-	Data     : ASCII
-	Multiple : Yes, order significant
-	Required : No
-	Summary  : Name of ASCII list of destination filenames
-	
-	Wildcards not allowed in ASCII list filename. Wildcards allowed in ASCII list.
-	
-	Name     : FILEREQUEST
-	Value    : 74h
-	Data     : ASCII
-	Multiple : Yes
-	Required : No
-	Summary  : Name of requested file
-	
-	Wildcards allowed. MSG_FILEREQUEST attribute must be set
-	
-	Name     : FILEPASSWORD
-	Value    : 75h
-	Data     : ASCII
-	Multiple : Yes, order significant
-	Required : No
-	Summary  : Password for FILEREQUEST
-
-	_______________________________________________________________________________
-	Synchronet                           48                      Header Field Types
-
-
-	
-	Name     : FILEREQUESTLIST
-	Value    : 76h
-	Data     : ASCII
-	Multiple : Yes
-	Required : No
-	Summary  : Name of ASCII list of filenames to request
-	
-	Wildcards allowed.
-	
-	Name     : FILEPASSWORDLIST
-	Value    : 77h
-	Data     : ASCII
-	Multiple : Yes, order significant
-	Required : No
-	Summary  : Name of ASCII list of passwords for FILEREQUESTLIST
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           49                      Header Field Types
-
-
-	Name     : IMAGEATTACH
-	Value    : 80h
-	Data     : mattach_t
-	Multiple : Yes, order significant
-	Required : No
-	Summary  : Type and filename of attached image file for display
-	
-	MSG_FILEATTACH attribute must be set. See Image Types for valid
-	mattach_t.type values.
-	
-	Name     : ANIMATTACH
-	Value    : 81h
-	Data     : mattach_t
-	Multiple : Yes, order significant
-	Required : No
-	Summary  : Type and filename of attached graphical animation file for display
-	
-	MSG_FILEATTACH attribute must be set. See Animation Types for valid
-	mattach_t.type values.
-	
-	Name     : FONTATTACH
-	Value    : 82h
-	Data     : mattach_t
-	Multiple : Yes, order significant
-	Required : No
-	Summary  : Type and filename of attached font definition file
-	
-	MSG_FILEATTACH attribute must be set. See Font Types for valid mattach_t.type
-	values.
-	
-	Name     : SOUNDATTACH
-	Value    : 83h
-	Data     : mattach_t
-	Multiple : Yes, order significant
-	Required : No
-	Summary  : Type and filename of attached sound file for playback
-	
-	MSG_FILEATTACH attribute must be set. See Sound Types for valid mattach_t.type
-	values.
-	
-	Name     : PRESENTATTACH
-	Value    : 84h
-	Data     : mattach_t
-	Multiple : Yes, order significant
-	Required : No
-	Summary  : Type and filename of attached presentation definition file
-	
-	MSG_FILEATTACH attribute must be set. See Present Types for valid
-	mattach_t.type values.
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           50                      Header Field Types
-
-
-	Name     : VIDEOATTACH
-	Value    : 85h
-	Data     : vattach_t
-	Multiple : Yes, order significant
-	Required : No
-	Summary  : Type and filename of attached interleaved video/sound file
-	
-	MSG_FILEATTACH attribute must be set. See Video Types for valid
-	vattach_t.type values and Video Compression Types for valid vattach_t.comp
-	values.
-	
-	Name     : APPDATAATTACH
-	Value    : 86h
-	Data     : mattach_t
-	Multiple : Yes, order significant
-	Required : No
-	Summary  : Name of attached application data file for process/display
-	
-	MSG_FILEATTACH attribute must be set. See Application Data Types for valid
-	mattach_t.type values.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           51                      Header Field Types
-
-
-	Name     : IMAGETRIGGER
-	Value    : 90h
-	Data     : typestr_t
-	Multiple : Yes, order significant
-	Required : No
-	Summary  : Type and filename of image file to trigger for display
-	
-	See Image Types for valid typestr_t.type values.
-	
-	Name     : ANIMTRIGGER
-	Value    : 91h
-	Data     : typestr_t
-	Multiple : Yes, order significant
-	Required : No
-	Summary  : Type and filename of animation file to trigger for display
-	
-	See Animation Types for valid typestr_t.type values.
-	
-	Name     : FONTTRIGGER
-	Value    : 92h
-	Data     : typestr_t
-	Multiple : Yes, order significant
-	Required : No
-	Summary  : Type and filename of font definition file to trigger
-	
-	See Font Types for valid typestr_t.type values.
-	
-	Name     : SOUNDTRIGGER
-	Value    : 93h
-	Data     : typestr_t
-	Multiple : Yes, order significant
-	Required : No
-	Summary  : Type and filename of sound file to trigger for playback
-	
-	See Sound Types for valid typestr_t.type values.
-	
-	Name     : PRESENTTRIGGER
-	Value    : 94h
-	Data     : typestr_t
-	Multiple : Yes, order significant
-	Required : No
-	Summary  : Type and filename of presentation definition file to trigger
-	
-	See Present Types for valid typestr_t.type values.
-	
-	Name     : VIDEOTRIGGER
-	Value    : 95h
-	Data     : typestr_t
-	Multiple : Yes, order significant
-	Required : No
-	Summary  : Type and filename of interleaved video/sound file to trigger
-	
-	See Video Types for valid typestr_t.type values.
-	
-
-	_______________________________________________________________________________
-	Synchronet                           52                      Header Field Types
-
-
-	Name     : APPDATATRIGGER
-	Value    : 96h
-	Data     : typestr_t
-	Multiple : Yes, order significant
-	Required : No
-	Summary  : Type and filename of application data file to trigger
-	
-	See Application Data Types for valid typestr_t.type values.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           53                      Header Field Types
-
-
-	Name     : FIDOCTRL
-	Value    : A0h
-	Data     : ASCII
-	Multiple : Yes, order significant
-	Required : No
-	Format   : keyword ":" [" "] appdata
-	Summary  : FTS/FSC-compliant control information line
-	
-	Any FidoNet FTS/FSC-compliant control information ("kludge") line that
-	does not have an equivalent representation here. All data not unique to the
-	actual control line, including leading and trailing white space, Ctrl-A (01h)
-	character and terminating CR must be ommited. Defined in FTS-0001.
-	
-	Name     : FIDOAREA
-	Value    : A1h
-	Data     : ASCII
-	Multiple : No
-	Required : No
-	Summary  : FTN EchoMail conference name.
-	
-	Defined in FTS-0004.
-	
-	Name     : FIDOSEENBY
-	Value    : A2h
-	Data     : ASCII
-	Multiple : Yes, order significant
-	Required : No
-	Format   : net"/"node [" "[net"/"]node] [...]
-	Summary  : Used to store two-dimensional (net/node) SEEN-BY information
-	
-	Often used in FTN EchoMail environments. Only the actual SEEN-BY data is stored
-	and SEEN-BY: is stripped along with any leading and trailing white space
-	characters. Defined in FTS-0004.
-	
-	Name     : FIDOPATH
-	Value    : A3h
-	Data     : ASCII
-	Multiple : Yes, order significant
-	Required : No
-	Format   : net"/"node [" "[net"/"]node] [...]
-	Summary  : Used to store two-dimensional (net/node)
-	
-	Defined in FTS-0004. ^aPATH: is stripped along with any leading and trailing
-	white space characters.
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           54                      Header Field Types
-
-
-	Name     : FIDOMSGID
-	Value    : A4h
-	Data     : ASCII
-	Multiple : No
-	Required : No
-	Format   : origaddr " " serialno
-	Summary  : MSGID field as specified in FTS-0009.
-	
-	Name     : FIDOREPLYID
-	Value    : A5h
-	Data     : ASCII
-	Multiple : No
-	Required : No
-	Format   : origaddr " " serialno
-	Summary  : REPLY field as specified in FTS-0009.
-	
-	Name     : FIDOPID
-	Value    : A6h
-	Data     : ASCII
-	Multiple : No
-	Required : No
-	Format   : pID " " version [" "serialno]
-	Summary  : Indentification string of program that created this message
-	
-	Defined FSC-0046. "^aPID:" and any white space is not included.
-	
-	Name     : FIDOFLAGS
-	Value    : A7h
-	Data     : ASCII
-	Multiple : Yes
-	Required : No
-	Summary  : Used to store the FTN FLAGS kludge information
-	
-	Note that all FLAG options that have binary representation in the message
-	header must be removed from the FLAGS string prior to storing it. Only the
-	actual flags option string is stored and ^aFLAGS is stripped along with any
-	leading and trailing white space characters. Defined in FSC-0053.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           55                      Header Field Types
-
-
-	Name     : RFC822HEADER
-	Value    : B0h
-	Data     : ASCII
-	Multiple : Yes, order significant
-	Required : No
-	Format   : field-name ":" [field-body] [CRLF]
-	Summary  : Undefined RFC-822 header field
-	
-	Internet Message storage format, that does not have an equivalent
-	representation here. Folded header fields are allowed. Terminating CRLF may be
-	ommited.
-	
-	Name     : RFC822MSGID
-	Value    : B1h
-	Data     : ASCII
-	Multiple : No
-	Required : No
-	Format   : "<" addr-spec ">"
-	Summary  : Message-ID field as specified in RFC-822.
-	
-	Name     : RFC822REPLYID
-	Value    : B2h
-	Data     : ASCII
-	Multiple : No
-	Required : No
-	Format   : "<" addr-spec ">"
-	Summary  : In-Reply-To field as specified in RFC-822.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           56                      Header Field Types
-
-
-	Name     : UNKNOWN
-	Value    : F0h
-	Data     : undef
-	Multiple : Yes
-	Required : No
-	Summary  : Undefined header field of undefined type
-	
-	This field is useful for retaining binary header fields (that do not have an
-	equivalent representation here) between message storage formats.
-	
-	Name     : UNKNOWNASCII
-	Value    : F1h
-	Data     : ASCII
-	Multiple : Yes
-	Required : No
-	Summary  : Undefined header field of type ASCII
-	
-	This field is useful for retaining ASCII header fields (that do not have an
-	equivalent representation here) between message storage formats.
-	
-	Name     : UNUSED
-	Value    : FFh
-	Data     : undef
-	Multiple : Yes
-	Required : No
-	Summary  : Unused (deleted) header field
-	
-	The data contained in this header field is of an unknown type and should not be
-	processed.
-	
-	
-	Note:
-	----
-	Specifically, not defined are the values F000h through FFFFh. These values
-	are to be used for user or system defined header fields. Digital Dynamics
-	requests that any developers or organizations that wish to have additional
-	header fields added to this specification notify Digital Dynamics through any
-	of the contact methods listed at the beginning of this document.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           57                      Header Field Types
-
-
-	Data Field Types:
-	================
-	
-	These are the defined valid values for dfield_t.type:
-	
-	
-	Val Name                Data        Description
-	--- ----                ----        -----------
-	00h TEXT_BODY           mtext_t     Displayable text (body of message).
-	                                    Included in duplicate message checking.
-	                                    All terminating white space and control
-	                                    characters are to be truncated from data
-	                                    (except when multiple contiguous CRLFs
-	                                    terminate the text, only the last CRLF
-	                                    is removed).
-	
-	01h TEXT_SOUL           mtext_t     Non-displayed text.
-	                                    Not normally displayed. Not necessarily
-	                                    displayable.
-	                                    Included in duplicate message checking.
-	
-	02h TEXT_TAIL           mtext_t     Displayable text (tag/tear/origin lines,
-	                                    etc).
-	                                    Not included in duplicate message checking.
-	                                    All terminating white space and control
-	                                    characters are to be truncated from data.
-	
-	03h TEXT_WING           mtext_t     Non-displayed text.
-	                                    Not normally displayed. Not necessarily
-	                                    displayable.
-	                                    Not included in duplicate message checking.
-	
-	10h FTEXT_BODY          ftext_t     Formatted equivalent of TEXT_BODY to be
-	                                    displayed in place of TEXT_BODY if format
-	                                    is supported. See Image Types for valid
-	                                    values of ftext_t.type.
-	
-	12h FTEXT_TAIL          ftext_t     Formatted equivalent of TEXT_TAIL to be
-	                                    displayed in place of TEXT_TAIL if format
-	                                    is supported. See Image Types for valid
-	                                    values of ftext_t.type.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           58                        Data Field Types
-
-
-	20h IMAGEEMBED          membed_t    Type and data of embedded raster image file
-	                                    for display.
-	                                    See Image Types for valid membed.type
-	                                    values.
-	
-	21h ANIMEMBED           membed_t    Type and data of embedded graphical
-	                                    animation file for display.
-	                                    See Animation Types for valid membed.type
-	                                    values.
-	
-	22h FONTEMBED           membed_t    Type and data of embedded font definition
-	                                    file. See Font Types for valid
-	                                    membed_t.type values.
-	
-	23h SOUNDEMBED          membed_t    Type and data of embedded sound file for
-	                                    playback.
-	                                    See Sound Types for valid membed_t.type
-	                                    values.
-	
-	24h PRESENTEMBED        membed_t    Type and data of embedded presentation
-	                                    definition file.
-	                                    See Present Types for valid membed_t.type
-	                                    values.
-	
-	25h VIDEOEMBED          vembed_t    Type and data of embedded video/sound file
-	                                    for playback.
-	                                    See Video Types for valid vembed_t.type
-	                                    values.
-	                                    See Video Compression Types for valid
-	                                    vembed_t.comp values.
-	
-	26h APPDATAEMBED        membed_t    Type and data of embedded application data
-	                                    file for process/display.
-	                                    See Application Data Types for valid
-	                                    membed_t.type values.
-	
-	FFh UNUSED              undef       Space allocated for future update/expansion
-	
-	
-	Specifically, not defined are the values F000h through FFFFh. These values
-	are to be used for user or system defined data fields. Digital Dynamics
-	requests that any developers or organizations that wish to have additional
-	data fields added to this specification notify Digital Dynamics through any
-	of the contact methods listed at the beginning of this document.
-	
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           59                        Data Field Types
-
-
-	Message Attributes:
-	------------------
-	
-	These are the bit values for idxrec_t.attr and msghdr_t.attr:
-	
-	MSG_PRIVATE         (1<<0)  // Private
-	MSG_READ            (1<<1)  // Read by addressee
-	MSG_PERMANENT       (1<<2)  // Permanent
-	MSG_LOCKED          (1<<3)  // Msg is locked, no editing possible
-	MSG_DELETE          (1<<4)  // Msg is marked for deletion
-	MSG_ANONYMOUS       (1<<5)  // Anonymous author
-	MSG_KILLREAD        (1<<6)  // Delete message after it has been read
-	MSG_MODERATED       (1<<7)  // This message must be validated before export
-	MSG_VALIDATED       (1<<8)  // This message has been validated by a moderator
-	
-	
-	Auxillary Attributes:
-	--------------------
-	These are the bit values for msghdr_t.auxattr:
-	
-	MSG_FILEREQUEST     (1<<0)  // File request
-	MSG_FILEATTACH      (1<<1)  // File(s) attached to Msg
-	MSG_TRUNCFILE       (1<<2)  // Truncate file(s) when sent
-	MSG_KILLFILE        (1<<3)  // Delete file(s) when sent
-	MSG_RECEIPTREQ      (1<<4)  // Return receipt requested
-	MSG_CONFIRMREQ      (1<<5)  // Confirmation receipt requested
-	MSG_NODISP          (1<<6)  // Msg may not be displayed to user
-	
-	
-	Network Attributes:
-	------------------
-	These are the bit values for msghdr_t.netattr:
-	
-	MSG_LOCAL           (1<<0)  // Msg created locally
-	MSG_INTRANSIT       (1<<1)  // Msg is in-transit
-	MSG_SENT            (1<<2)  // Sent to remote
-	MSG_KILLSENT        (1<<3)  // Kill when sent
-	MSG_ARCHIVESENT     (1<<4)  // Archive when sent
-	MSG_HOLD            (1<<5)  // Hold for pick-up
-	MSG_CRASH           (1<<6)  // Crash
-	MSG_IMMEDIATE       (1<<7)  // Send Msg now, ignore restrictions
-	MSG_DIRECT          (1<<8)  // Send directly to destination
-	MSG_GATE            (1<<9)  // Send via gateway
-	MSG_ORPHAN          (1<<10) // Unknown destination
-	MSG_FPU             (1<<11) // Force pickup
-	MSG_TYPELOCAL       (1<<12) // Msg is for local use only
-	MSG_TYPEECHO        (1<<13) // Msg is for conference distribution
-	MSG_TYPENET         (1<<14) // Msg is direct network mail
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           60                      Message Attributes
-
-
-	Translation Types:
-	-----------------
-	
-	Definition for values of *.xlat[x]:
-	
-	XLAT_NONE           0       // No translation/End of translation list
-	XLAT_LF2CRLF        1       // Expand sole LF to CRLF
-	XLAT_ESCAPED        2       // 7-bit ASCII escaping for ctrl and 8-bit data
-	XLAT_HUFFMAN        3       // Static and adaptive Huffman coding compression
-	XLAT_LZW            4       // LZW (Lempel-Ziv-Welch) encoding for compression
-	                            // Terry Welch, IEEE Computer Vol 17, No 6
-	                            // June 1984, pp 8-19
-	XLAT_LZC            5       // LZC (modified LZW) encoding for compression
-	                            // Unix compress program
-	XLAT_RLE            6       // Run length encoding compression
-	XLAT_IMPLODE        7       // Implode compression (PKZIP v1.x)
-	XLAT_SHRINK         8       // Shrink compression (PKZIP v1.x)
-	XLAT_LZH            9       // LZH dynamic Huffman coding
-	                            // Haruyasu Yoshizaki, LHarc
-	                            // November, 1988
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           61                       Translation Types
-
-
-	Agent Types:
-	-----------
-	
-	AGENT_PERSON        0       // To or from person
-	AGENT_PROCESS       1       // Unknown process, identified by agent name
-	
-	Agent types E000h through EFFFh are reserved for Synchronet process types
-	(defined specifically by Digital Dynamics).
-	
-	Note:
-	----
-	Specifically not defined are agent types F000h through FFFFh. These values
-	are to be used for user or system defined agent types. Digital Dynamics
-	requests that any developers or organizations that wish to have additional
-	agent types added to this specification notify Digital Dynamics through any
-	of the contact methods listed at the beginning of this document.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           62                             Agent Types
-
-
-	Network Types:
-	-------------
-	
-	                            // Net Type             Address Format
-	                            // -----------------------------------
-	NET_NONE            0       // Locally created      none
-	NET_UNKNOWN         1       // Unknown              undef
-	NET_FIDO            2       // FTN network          fidoaddr_t
-	NET_POSTLINK        3       // PostLink network     none
-	NET_QWK             4       // QWK based network    ASCII
-	NET_INTERNET        5       // The Internet         ASCII
-	NET_WWIV            6       // WWIV based network   ulong
-	NET_MHS             7       // MHS network          ASCII
-	
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           63                           Network Types
-
-
-	Media Types:
-	===========
-	
-	Image Types:
-	-----------
-	
-	IMAGE_UNKNOWN       0x00    // Use image signature header to determine format
-	IMAGE_ASC           0x01    // ASCII text/IBM extended ASCII graphics
-	IMAGE_ANS           0x02    // ANSI X3.64 terminal escape sequences
-	IMAGE_AVT           0x03    // AVATAR terminal escape sequences
-	IMAGE_LVI           0x04    // LVI terminal escape sequences
-	IMAGE_GIF           0x05    // Compuserve Graphics Interchange Format (GIF)
-	IMAGE_TIF           0x06    // Tagged Image Format (AKA TIFF)
-	IMAGE_JPG           0x07    // Joint Photographers Electronics Group (JPEG)
-	IMAGE_T16           0x08    // TrueVision 16-bit bitmap (TGA)
-	IMAGE_T24           0x09    // TrueVision 24-bit bitmap (TGA)
-	IMAGE_T32           0x0a    // TrueVision 32-bit bitmpa (TGA)
-	IMAGE_PCX           0x0b    // ZSoft PaintBrush graphics
-	IMAGE_BMP           0x0c    // Windows bitmap
-	IMAGE_RLE           0x0d    // Windows bitmap (compressed)
-	IMAGE_DIB           0x0e    // Display independant bitmap
-	IMAGE_PCD           0x0f    // Kodak PhotoCD
-	IMAGE_G3F           0x10    // Group 3 FAX
-	IMAGE_EPS           0x11    // Ecapsulated PostScript
-	IMAGE_RTF           0x12    // Rich text format
-	IMAGE_RIP           0x13    // Remote Imaging Protocol Script (RIPscrip)
-	IMAGE_NAP           0x14    // NAPLPS
-	IMAGE_CDR           0x15    // Corel Draw!
-	IMAGE_CGM           0x16    // Computer graphics metafile
-	IMAGE_WMF           0x17    // Windows metafile
-	IMAGE_DFX           0x18    // Autodesk AutoCAD
-	IMAGE_IFF           0x19    // Amiga Interchange File Format
-	
-	
-	Animation Types:
-	---------------
-	
-	ANIM_UNKNOWN        0       // Use file signature header to determine format
-	ANIM_FLI            1       // Autodesk animator
-	ANIM_FLC            2       // Autodesk
-	ANIM_GL             3       // Grasprt
-	ANIM_IFF            4       // Amiga Interchange File Format
-	
-	
-	Video Types:
-	-----------
-	
-	VIDEO_UNKNOWN       0       // Use file signature header to determine format
-	VIDEO_QTIME         1       // Apple Quick-time
-	VIDEO_FQTIME        2       // Apple Flattened Quick-time
-	VIDEO_AVI           3       // Windows Auto/Video Interleave
-	VIDEO_ULT           4       // OS/2 Ultimotion
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           64                             Media Types
-
-
-	Video Compression Types:
-	-----------------------
-	
-	VCOMP_UNKNOWN       0       // Use file signature header to determine codec
-	VCOMP_RLE           1       // Apple animation
-	VCOMP_SMC           2       // Apple graphics
-	VCOMP_RPZA          3       // Apple video
-	VCOMP_KLIC          4       // Captain crunch
-	VCOMP_CVID          5       // CinePak
-	VCOMP_RT21          6       // Intel indeo R2
-	VCOMP_IV31          7       // Intel indeo R3
-	VCOMP_YVU9          8       // Intel YVU9
-	VCOMP_JPEG          9       // JPEG
-	VCOMP_MRLE          10      // Microsoft RLE
-	VCOMP_MSVC          11      // Microsoft video 1
-	
-	
-	Font Types:
-	----------
-	
-	FONT_UNKNOWN        0       // Use file signature header to determine format
-	FONT_TTF            1       // Windows TrueType
-	FONT_PFB            2       // PostScript Type 1 Font Binary
-	FONT_PFM            3       // PostScript Type 1 Font Metric
-	FONT_AMIGA          4       // Amiga Bitmapped
-	FONT_AGFA           5       // CompuGraphic Fonts
-	
-	
-	Sound Types:
-	-----------
-	
-	SOUND_UNKNOWN       0       // Use file signature header to determine format
-	SOUND_MOD           1       // MOD format
-	SOUND_VOC           2       // Sound Blaster VOC format
-	SOUND_WAV           3       // Windows 3.1 WAV RIFF format
-	SOUND_MID           4       // MIDI format
-	SOUND_GMID          5       // General MIDI format (standardized patches)
-	SOUND_SMP           6       // Turtle Beach SampleVision format
-	SOUND_SF            7       // IRCAM format
-	SOUND_AU            8       // Sun Microsystems AU format
-	SOUND_IFF           9       // Amiga Interchange File Format
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           65                             Media Types
-
-
-	Application Data Types:
-	----------------------
-	
-	APPDATA_UNKNOWN     0       // Use file signature header to determine format
-	APPDATA_WORDPERFECT 1       // WordPerfect Document
-	APPDATA_WKS         2       // Lotus 123 Worksheet (?)
-	APPDATA_WK1         3       // Lotus 123 Worksheet rev 1
-	APPDATA_WK2         4       // Lotus 123 Worksheet rev 2
-	APPDATA_WK3         5       // Lotus 123 Worksheet rev 3
-	APPDATA_DBF         6       // dBase III data file
-	APPDATA_PDX         7       // Paradox data file
-	APPDATA_EXCEL       8       // Excel data file
-	APPDATA_QUATRO      9       // Borland Quatro Pro file
-	APPDATA_WORD        10      // Microsoft Word
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           66                             Media Types
-
-
-	Message Storage Pseudo Code
-	===========================
-	
-	The following is a "C like" pseudo code listing example of adding a message to
-	an SMB message base. SMBLIB contains C functions to do most of the following
-	operations. We are supplying this pseudo code as a general definition of the
-	order of required operations in writing to the message base. Many details have
-	been left out to simplify the code and to demonstrate only the basic
-	principles.
-	
-	shd = open ( MSGBASE.SHD , READ/WRITE/DENY_NONE )
-	sdt = open ( MSGBASE.SDT , READ/WRITE/DENY_NONE )
-	sid = open ( MSGBASE.SDT , READ/WRITE/DENY_NONE )
-	
-	lock ( shd , smbhdr )
-	read ( shd , smbstatus )
-	
-	if ( smbstatus.attr & SMB_HYPERALLOC )
-	    msg.hdr.offset = filelength ( sdt )
-	
-	else {
-	    number_of_blocks = length_of_message_data / SDT_BLOCK_LEN
-	    if ( length_of_message_data % SDT_BLOCK_LEN )   /* unevenly divisible */
-	        number_of_blocks = number_of_blocks + 1
-	
-	    sda = open ( MSGBASE.SDA , READ/WRITE/DENY_ALL )
-	
-	    if ( fast_allocation_mode )
-	        seek ( sda , END_OF_FILE )
-	
-	    else {
-	        seek ( sda , BEGINNING_OF_FILE )
-	        while ( not end_of_file ( sda ) ) {
-	            read ( sda , allocated , number_of_blocks * 2 )
-	            if ( allocated = 0 ) {
-	                seek_backwards ( sda , number_of_blocks * 2 )
-	                break
-	            }
-	        }
-	    }
-	
-	    msg.hdr.offset = ( current_position ( sda ) / 2 ) * SDT_BLOCK_LEN
-	
-	    allocated = 1
-	
-	    write ( sda , allocated , number_of_blocks * 2 )
-	
-	    close ( sda )
-	}
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           67             Message Storage Pseudo Code
-
-
-	seek ( sdt , msg.hdr.offset )
-	
-	write ( sdt , message_data )
-	
-	if ( smbstatus.attr & SMB_HYPERALLOC )
-	    msg.idx.offset = filelength ( shd )
-	
-	else {
-	    number_of_blocks = length_of_message_header / SHD_BLOCK_LEN
-	    if ( length_of_message_header % SHD_BLOCK_LEN )   /* unevenly divisible */
-	        number_of_blocks = number_of_blocks + 1
-	
-	    sha = open ( MSGBASE.SHA , READ/WRITE/DENY_ALL )
-	
-	    if ( fast_allocation_mode )
-	        seek ( sha , END_OF_FILE )
-	
-	    else {
-	        seek ( sha , BEGINNING_OF_FILE )
-	        while ( not end_of_file ( sha ) ) {
-	            read ( sha , allocated , number_of_blocks )
-	            if ( allocated = 0 ) {
-	                seek_backwards ( sha , number_of_blocks )
-	                break
-	            }
-	        }
-	    }
-	
-	    msg.idx.offset = ( current_position ( sha ) * SHD_BLOCK_LEN )
-	    msg.idx.offset = msg.idx.offset + smbstatus.header_offset
-	
-	    allocated = 1
-	
-	    write ( sha , allocated , number_of_blocks )
-	
-	    close ( sha )
-	}
-	
-	seek ( shd , msg.idx.offset )
-	
-	msg.hdr.number = smbstatus.last_msg+1
-	
-	write ( shd , msg.hdr )
-	
-	smbstatus.total_msgs = smbstatus.total_msgs + 1
-	smbstatus.last_msg = msg.hdr.number
-	
-	write ( shd , smbstatus )
-	
-	write ( sid , msg.idx )
-	
-	unlock ( shd , smbstatus )
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           68             Message Storage Pseudo Code
-
-
-	Message Retrieval Pseudo Code
-	=============================
-	
-	shd = open ( MSGBASE.SHD , READ/WRITE/DENY_NONE )
-	sdt = open ( MSGBASE.SDT , READ/WRITE/DENY_NONE )
-	sid = open ( MSGBASE.SDT , READ/WRITE/DENY_NONE )
-	
-	read ( sid , msg.idx )
-	
-	seek ( shd , msg.idx.offset )
-	
-	lock ( shd , msg.hdr )
-	
-	read ( shd , msg.hdr )
-	
-	seek ( sdt , msg.hdr.offset )
-	
-	read ( sdt , msg.hdr.data_length )
-	
-	unlock ( shd , msg.hdr )
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           69           Message Retrieval Pseudo Code
-
-
-	SMBUTIL
-	=======
-	
-	SMBUTIL is a utility that can perform various functions on an SMB message base.
-	The primary purpose of SMBUTIL is as an example to C programmers of how to use
-	the SMBLIB functions to access and modify an SMB message base. The complete C
-	source code for SMBUTIL is included and functions from it can be used or
-	modified by developers at their own discretion. The following files make up
-	SMBUTIL:
-	
-	SMBUTIL.EXE     Compiled and linked for 16-bit DOS (ready to run)
-	SMBUTIL.C       C functions
-	SMBUTIL.H       C definitions and variable prototypes
-	SMBUTIL.WAT     Makefile for Watcom C/C++ (type wmake -f smbutil.wat)
-	SMBUTIL.BOR     Makefile for Borland C/C++ (type make -f smbutil.bor)
-	
-	The usage syntax is as follows:
-	
-	SMBUTIL [/opts] cmd smb_filespec.shd
-	
-	where cmd is one or more of the following:
-	
-	       l[n] = list msgs starting at number n
-	       r[n] = read msgs starting at number n
-	       v[n] = view msg headers starting at number n
-	       k[n] = kill (delete) n msgs
-	       i<f> = import from text file f
-	       s    = display msg base status
-	       c    = change msg base status
-	       m    = maintain msg base - delete old msgs and msgs over max
-	       p[k] = pack msg base (k specifies minimum packable Kbytes)
-	
-	where opts is one or more of the following:
-	
-	       a    = always (force) packing
-	       z<n> = set time zone (n=min +/- from UT or 'EST','EDT','CST',etc)
-	
-	and smb_filespec is the base filename or file specification (wildcards) for the
-	message base. If wildcards are used, the ".SHD" extension must be specified.
-	
-	An example command line:
-	
-	SMBUTIL MP C:\SBBS\DATA\SUBS\*.SHD
-	
-	would maintain and pack all the message bases found in the C:\SBBS\DATA\SUBS
-	directory.
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           70                                 SMBUTIL
-
-
-	CHKSMB
-	======
-	
-	CHKSMB is a utility that performs a comprehensive analysis of a message base
-	to find any possible errors and calculate the number of packable bytes. It does
-	not "fix" a message base if any errors are found, it only reports the specific
-	errors (and exits with a non-zero error level). If any errors are reported,
-	packing the message base with SMBUTIL may rebuild the damaged files. If that
-	doesn't work, then use FIXSMB as a last resort.
-	
-	C source code for CHKSMB is also included as an example to programmers of how
-	to use SMBLIB functions.
-	
-	The usage syntax is as follows:
-	
-	CHKSMB [/opts] smb_filespec.shd
-	
-	where opts is one or more of the following:
-	
-	        q   = quiet mode (no beeps)
-	        s   = stop after an errored message base (for use with wildcards)
-	        p   = pause after an errored message base (wait for key press)
-	        t   = don't check for unsupported translation strings (faster)
-	        e   = display extended information on corrupted messages
-	
-	An example command line:
-	
-	CHKSMB /QP C:\SBBS\DATA\SUBS\*.SHD
-	
-	would check all the message bases in the C:\SBBS\DATA\SUBS directory, without
-	beeping on errors, and pausing after an errored message base.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           71                                  CHKSMB
-
-
-	FIXSMB
-	======
-	
-	FIXSMB is a utility that will rebuild the index and allocation files for a
-	message base. Since the message headers are not necessarily stored
-	sequentially, the order of the messages in the index may be changed when the
-	index is rebuilt. Messages are also re-numbered, so only use this program if
-	the index is corrupted and the messages are extremely important.
-	
-	C source code for FIXSMB is also included as an example to programmers of how
-	to use SMBLIB functions.
-	
-	The usage syntax is as follows:
-	
-	FIXSMB [/M] smb_file
-	
-	An example command line:
-	
-	FIXSMB \SBBS\DATA\MAIL
-	
-	Only use the "/M" command line switch if fixing an older Synchronet e-mail
-	message base (created with SBBS v2.1 or earlier). Once the SMB_EMAIL status
-	attr is set ("SMBUTIL S" will report a status attr of 1), the "/M" is not
-	required.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           72                                  FIXSMB
-
-
-	SMBLIB
-	======
-	
-	SMBLIB is a library of C functions for accessing and storing messages in an
-	SMB format message base. It can eliminate much of the development time for
-	developers that wish to use the library in whole or in part, or use the
-	functions as examples for their own message base function library. The library
-	consists of the following files:
-	
-	SMBDEFS.H       Constant definitions, macros, and data types
-	SMBLIB.H        Library constants and function prototypes
-	SMBLIB.C        Function definitions
-	SMBVARS.C       Global variable definitions (doubles as declaration file)
-	
-	For developers to use this library with their program, they must include the
-	"SMBLIB.H" header file at the top of each C file that uses any of the library
-	functions, global variables, data types, macros, and constants. This can be
-	done by simply adding the following line to each .C file:
-	
-	#include "smblib.h"
-	
-	If SMBLIB.H is included, there is no need to include SMBDEFS.H or SMBVARS.C.
-	
-	To link the library functions and variables with a main program, the files
-	SMBVARS.OBJ and SMBLIB.OBJ must be linked with the main program .OBJ files.
-	If the operating system is DOS, be sure that all .OBJ files are compiled for
-	the same memory model.
-	
-	Example MAKEFILEs for compiling and linking SMBUTIL with Borland C/C++
-	(SMBUTIL.BOR) and Watcom C/C++ (SMBUTIL.WAT) are included.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           73                                  SMBLIB
-
-
-	SMBDEFS.H
-	=========
-	
-	The SMBDEFS.H file contains important constant definitions and data types (also
-	defined in this document). If ever this document and SMBDEFS.H are inconsistent
-	with each other, then SMBDEFS.H is to be considered correct and this document
-	in error. If such a discrepency is found, please notifiy Digital Dynamics so it
-	can be corrected in a future revision of the specification.
-	
-	Most notable of the data types is a structure called smbmsg_t (not defined
-	in this document). It contains the fixed and variable portions of a message's
-	header record as well as convenience pointers to the sender's name
-	(smbmsg_t.to), recipient's name (smbmsg_t.from), network addresses, and more.
-	If multiple SENDER header fields are included (for example), then smbmsg_t.to
-	will point to the last SENDER header field in the header record. Convenience
-	pointers for other data items work in the same fasion if multiple header fields
-	of the same type exist in the header record.
-	
-	Variables of the smbmsg_t data type (and pointers to variables of smbmsg_t
-	type) are used as arguments to many of the SMBLIB functions.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           74                               SMBDEFS.H
-
-
-	SMBVARS.C
-	=========
-	
-	The SMBVARS.C file contains definitions of the global variables used by the
-	SMBLIB functions. It is a fairly small file since their are a small number of
-	global variables (by design). This file is used for both definitions and
-	declarations, so no "extern" declarations need to be made in developers source
-	code as long as SMBVARS.C or (preferably) SMBLIB.H is included in the source
-	code.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           75                               SMBVARS.C
-
-
-	SMBLIB.H
-	=======
-	
-	The SMBLIB.H file contains prototypes of all the functions in the SMBLIB.C
-	file. It is necessary to include this file in C source code if any of the
-	SMBLIB functions are used. The following C source line will include this file:
-	
-	#include "smblib.h"
-	
-	and should be placed near the top of all C source files that use SMBLIB
-	functions, variables, constants, or data types.
-	
-	Function prototypes are necessary for compilers to know the correct calling
-	syntax of a function and detect incorrect usage. Prototypes are also useful
-	as a quick reference for programmers as to the correct calling syntax of a
-	specific function.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           76                                SMBLIB.H
-
-
-	SMBLIB.C
-	=======
-	
-	The SMBLIB.C file contains the actual SMBLIB library functions. This source
-	file is not a stand alone program, but instead must be compiled and linked
-	with a main source file to create the executable program.
-	
-	The functions in this file are organized in a logical order, but their order
-	is actually irrelevant to the compiling, linking, and execution of the
-	resulting program.
-	
-	A comment block preceeds each function, explaining what the function does,
-	how the passed parameters are used, and what the return code (if any)
-	indicates. A more detailed explanation of each function is included here:
-	
-	int smb_open(int retry_time)
-	----------------------------
-	The smb_open() function must be called before the message base is accessed
-	(read from or written to). The parameter, retry_time, is the maximum number
-	of seconds to wait while retrying to lock the message base header. If
-	retry_time is 0, then the message base header is not locked or read (this is
-	called "Fast Open" and should only be used when speed is more important than
-	checking for compatibility and validity upon opening). The global variable
-	smb_file must be initialized with the path and base filename of the message
-	base. This function returns 0 on success, 1 if the .SDT file could not be
-	opened, 2 if the .SHD file could not be opened, and 3 if the .SID file could
-	not be opened. If the message base header could not be locked, this function
-	returns -1. If the message base ID is incorrect, it returns -2. And if the
-	message base is of an incompatible version, it returns -3.
-	
-	The errno global variable (standard of most C libraries) will most likely
-	contain the error code for open failure.
-	
-	int smb_open_da(int retry_time)
-	-------------------------------
-	The smb_open_da() function is used to open the data block allocation file for
-	writing messages to a message base. The parameter, retry_time, is the maximum
-	number of seconds to wait while retrying to open the file. This function
-	returns 0 on success. -1 is returned if an open error other than "Access
-	Denied" is returned from the operating system, and the global variable errno
-	will contain the error code. -2 is returned if the retry_time has been
-	reached, and -3 is returned if the file descriptor could not be converted to
-	a stream by the fdopen() function.
-	
-	fclose(sda_fp) should be called immediately after all necessary file access
-	has been completed.
-	
-	This function is not used with the Hyper Allocation storage method.
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           77                                SMBLIB.C
-
-
-	int smb_open_ha(int retry_time)
-	-------------------------------
-	The smb_open_ha() function is used to open the header block allocation file for
-	writing messages to a message base. The parameter, retry_time, is the maximum
-	number of seconds to wait while retrying to open the file. This function
-	returns 0 on success. -1 is returned if an open error other than "Access
-	Denied" is returned from the operating system, and the global variable errno
-	will contain the error code. -2 is returned if the retry_time has been
-	reached, and -3 is returned if the file descriptor could not be converted to
-	a stream by the fdopen() function.
-	
-	fclose(sha_fp) should be called immediately after all necessary file access
-	has been completed.
-	
-	This function is not used with the Hyper Allocation storage method.
-	
-	int smb_create(ulong max_crcs, ulong max_msgs, ushort max_age, ushort attr
-	    ,int retry_time)
-	--------------------------------------------------------------------------
-	The smb_create() function is used to create a new message base or reset an
-	existing message base. The parameters max_crcs, max_msgs, max_age, and attr
-	are used to set the initial status of the message base status header. The
-	parameter, retry_time is the maximum number of seconds to wait while retrying
-	to lock the message base header. This functions returns 0 on success or 1 if
-	the message base header could not be locked.
-	
-	int smb_trunchdr(int retry_time)
-	--------------------------------
-	The smb_trunchdr() function is used to truncate the header file when packing
-	the message base and writing the new header information back to the header
-	file. The parameter, retry_time is the maximum number of seconds to wait while
-	retrying to truncate the header file. Returns 0 on success, -1 if error was
-	other than "Access Denied", or -2 if retry_time reached.
-	
-	int smb_locksmbhdr(int retry_time)
-	----------------------------------
-	The smb_locksmbhdr() function is used to lock the first message base (status)
-	header. The parameter, retry_time is the number of seconds to wait while
-	retrying to lock the header. The smb_unlocksmbhdr() function should always be
-	used to unlock the header after accessing the message base header (usually
-	with smb_getstatus() and/or smb_putstatus()). Returns 0 if successful, -1 if
-	unsuccessful.
-	
-	int smb_unlocksmbhdr()
-	----------------------
-	The smb_unlocksmbhdr() function is used to unlock a previously locked message
-	base header (using smb_lockmsghdr()). Returns 0 on success, non-zero on
-	failure.
-	
-	int smb_getstatus(smbstatus_t *hdr)
-	-----------------------------------
-	The smb_getstatus() function is used to read the status message base header
-	into the hdr structure. Returns 0 on success, 1 on failure.
-
-
-	_______________________________________________________________________________
-	Synchronet                           78                                SMBLIB.C
-
-
-	int smb_putstatus(smbstatus_t hdr)
-	----------------------------------
-	The smb_putstatus() function is used to write the status information to the
-	first message base header. The parameter hdr, contains the status information
-	to be written. Returns 0 on success, 1 on failure.
-	
-	int smb_getmsgidx(smbmsg_t *msg)
-	--------------------------------
-	The smb_getmsgidx() function is used to get the byte offset for a specific
-	message header in the message header file based on the message base index.
-	
-	If msg->hdr.number is non-zero when this function is called, then the index
-	will be searched for this message number. If the message number is found in
-	the index, the msg->idx.offset is set to the byte offset of the message header
-	record in the header file and msg->offset is set to the record offset of the
-	index record in the index file, and the function returns 0. If the message
-	number is not found in the index, the function returns 1.
-	
-	If msg->hdr.number is zero, msg->idx.offset and msg->idx.number are obtained
-	from the index record at record offset msg->offset. If msg->offset is an
-	invalid record offset when this function is called, the function returns 1.
-	Otherwise, the function returns 0.
-	
-	int smb_getlastidx(idxrec_t *idx)
-	---------------------------------
-	Reads the last index record of the currently open message base into the
-	idxrec_t structure pointed to by idx. Returns 0 if successful, -1 if the index
-	is empty or unopened, or -2 if the record can't be read.
-	
-	int smb_getmsghdrlen(smbmsg_t msg)
-	----------------------------------
-	The smb_getmsghdrlen() function is used to calculate the total length of
-	message header msg including both fixed and variable length portions. This
-	function returns the length of the header record in bytes.
-	
-	long smb_getmsgdatlen(smbmsg_t msg)
-	-----------------------------------
-	The smb_getmsgdatlen() function is used to calculate the total length of the
-	data for message msg. This function returns the length of all data fields
-	combined.
-	
-	int smb_lockmsghdr(smbmsg_t msg, int retry_time)
-	------------------------------------------------
-	The smb_lockmsghdr() function is used to lock the header record for message
-	msg. The parameter retry_time is the maximum number of seconds to wait while
-	retrying to lock the header. Returns 0 on success, -1 on failure. The function
-	smb_unlockmsghdr() should immediately be called after accessing the message
-	header (usually with smb_getmsghdr() or smb_putmsghdr()).
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           79                                SMBLIB.C
-
-
-	int smb_getmsghdr(smbmsg_t *msg)
-	--------------------------------
-	The function smb_getmsghdr() is used to read the header record for message
-	msg. msg->idx.offset must be initialized to the byte offset of the header
-	record in the header file before this function is called. The function
-	smb_freemsgmem() must be called to free the memory allocated by this function
-	for the header and data felds. This function returns 0 on success, -1 if
-	the fixed portion of the message header record could not be read, -2 if the
-	message header ID was incorrect, -3 if memory could not be allocated, -4
-	if a data field could not be read, -5 if the fixed length portion of a header
-	field could not be read, -6 if the variable length portion of a header field
-	could not be read, -7 if one or more of the mandatory header fields (SENDER,
-	RECIPIENT, or SUBJECT) are missing, -8 if total_dfields extends beyond the
-	end of the header record, or -9 if incompatible header version.
-	
-	Several convenience pointers in the msg structure are initialized by this
-	function to point to the last occurance of the SENDER (msg->from), RECIPIENT
-	(msg->to), SUBJECT (msg->subj), etc.
-	
-	int smb_unlockmsghdr(smbmsg_t msg)
-	----------------------------------
-	The smb_unlockmsghdr() function is used to unlock a previously locked message
-	header (with smb_lockmsghdr()). This function returns 0 on success, non-zero
-	on failure.
-	
-	int smb_addcrc(ulong max_crcs, ulong crc, int retry_time)
-	---------------------------------------------------------
-	The smb_addcrc() function is used to add a CRC-32 to the CRC history file
-	for a message base, automatically checking for duplicates. The parameter
-	max_crcs should be the max_crcs defined in the status header of the message
-	base. The parameter crc, is the CRC-32 of the TEXT_BODY and TEXT_SOUL data
-	fields for the message. The parameter retry_time is the maximum number of
-	seconds to wait when retrying to open the CRC history file.
-	
-	This function returns -1 if there was an open error, -2 if the retry_time
-	was reached, -3 if there was a memory allocation error, 1 if the CRC already
-	exists in the CRC history file (indicating a duplicate message), or 0 on
-	success (and no duplicate).
-	
-	int smb_hfield(smbmsg_t *msg, ushort type, ushort length, void *data)
-	---------------------------------------------------------------------
-	The smb_hfield() function is used to add a header field to the structure msg.
-	The parameters type, length, and data, must be specified according to the
-	header field values listed in this specification. This function returns 0
-	on success, non-zero on memory allocation error. The function smb_freemsgmem()
-	must be called to free the memory allocated by this function.
-	
-	int smb_dfield(smbmsg_t *msg, ushort type, ulong length)
-	--------------------------------------------------------
-	The smb_dfield() function is used to add a data field to the structure msg.
-	The parameters type and length must be specified according to the data field
-	values listed in this specification. This function returns 0 on success,
-	non-zero on memory allocation error. The function smb_freemsgmem() must be
-	called to free the memory allocated by this function.
-
-	_______________________________________________________________________________
-	Synchronet                           80                                SMBLIB.C
-
-
-	int smb_addmsghdr(smbmsg_t *msg,smbstatus_t *status,int storage,int retry_time)
-	-------------------------------------------------------------------------------
-	The smb_addmsghdr() function is used to add a new message header to the message
-	header file and update the index file. The msg and status structures are
-	updated to reflect the new total messages, last message number, etc. The
-	storage parameter is used to indicate the storage method to use (either
-	SMB_SELFPACK, SMB_FASTALLOC, or SMB_HYPERALLOC). If the storage type is
-	SMB_SELFPACK, the header block allocation file will be searched for unused
-	block(s) to store this header. If the storage type is SMB_FASTALLOC or
-	SMB_HYPERALLOC, the header is stored at the end of the header file. Returns 0
-	on success, non-zero on failure. The parameter retry_time is the maximum number
-	of seconds to wait while retrying to lock and open files.
-	
-	int smb_putmsg(smbmsg_t msg)
-	----------------------------
-	The smb_putmsg() function calls both the smb_putmsghdr() and smb_putmsgidx()
-	functions to write the header and index elements of a message to the
-	appropriate files. Returns 0 on success, non-zero on failure.
-	
-	int smb_putmsgidx(smbmsg_t msg)
-	-------------------------------
-	The smb_putmsgidx() function is used to store a message index in the message
-	index file. The message index can be for a new message or an existing
-	message. Returns 0 on success, non-zero on failure.
-	
-	int smb_putmsghdr(smbmsg_t msg)
-	-------------------------------
-	The smb_putmsghdr() function is used to store a message header in the message
-	header file. The message header can be for a new message or an existing
-	message. Returns 0 on success, non-zero on failure.
-	
-	void smb_freemsgmem(smbmsg_t msg)
-	---------------------------------
-	Frees allocated memory for the header and data fields in the msg structure.
-	This function must be called to free the memory allocated by the functions
-	smb_hfield(), smb_dfield(), and smb_getmsghdr().
-	
-	long smb_hdrblocks(ulong length)
-	--------------------------------
-	The smb_hdrblocks() function is used to calculate the number of blocks
-	required to store a message header of length size (in bytes). This function
-	returns the number of blocks required.
-	
-	long smb_datblocks(ulong length)
-	--------------------------------
-	The smb_datblocks() function is used to calculate the number of blocks
-	required to store message data of length size (in byte). This function returns
-	the number of blocks required.
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           81                                SMBLIB.C
-
-
-	long smb_allochdr(ulong length)
-	-------------------------------
-	The smb_allochdr() function is used to search for free blocks to store a
-	message header of length bytes and mark the free blocks as allocated in the
-	header allocation file. This function returns the byte offset to the header
-	record or a negative number on error. The function smb_open_ha() should be
-	called prior to calling this function and fclose(sha_fp) should be called
-	after. The function is called from smb_addmsghdr(), so you probably have no
-	need to call this function directly.
-	
-	long smb_fallochdr(ulong length)
-	--------------------------------
-	The smb_fallochdr() function works exactly the same as the smb_allochdr()
-	function except it is much faster because the header allocation file is not
-	searched for free blocks. The function is called from smb_addmsghdr(), so you
-	probably have no need to call this function directly.
-	
-	long smb_hallochdr(ulong header_offset)
-	---------------------------------------
-	This smb_hallochdr() functions works exactly the same as the smb_fallochdr()
-	function except the status.header_offset is passed as the argument and the
-	header allocation (.SHA) file is not updated so smb_open_ha() need not be
-	called. The function is called from smb_addmsghdr(), so you probably have no
-	need to call this function directly.
-	
-	long smb_allocdat(ulong length, ushort headers)
-	-----------------------------------------------
-	The smb_allocdat() function is used to search for free blocks to store length
-	amount of data for a message. The parameter headers, indicates the number of
-	message headers that are associated with this data. Normally, the headers
-	parameter will be 1, unless this message is part of a mass mailing. The offset
-	to the allocated data blocks is returned, or a negative value on error. The
-	function smb_open_da() should be called prior to calling this function and
-	fclose(sda_fp) should be called after.
-	
-	long smb_fallocdat(ulong length, ushort headers)
-	------------------------------------------------
-	The smb_fallocdat() function works exactly the same as the smb_allocdat()
-	function except it is much faster because the data allocation file is not
-	searched for free blocks.
-	
-	long smb_hallocdat()
-	--------------------
-	The smb_hallocdat() function works exactly the same as the smb_hallocdat()
-	function except no argument is passed and the data allocation file (.SDA) is
-	not updated so smb_open_da() need not be called.
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           82                                SMBLIB.C
-
-
-	int smb_incdat(ulong offset, ulong length, ushort headers)
-	----------------------------------------------------------
-	The smb_incdat() function is used to increment the header counter in the data
-	allocation file for the data starting at the byte offset and length size in
-	bytes. The parameter headers, indicates the number of headers to add to the
-	current allocation value in the data allocation file. Returns 0 on success,
-	non-zero on failure.
-	
-	int smb_freemsg(smbmsg_t msg, smbstatus_t status)
-	-------------------------------------------------
-	The smb_freemsg() function is used to free the disk space allocated for the
-	header and data fields of the message msg. Returns 0 on success, non-zero on
-	failure. The parameter, status, must be the current status from the message
-	base header for this message base.
-	
-	int smb_freemsgdat(ulong offset, ulong length, ushort headers)
-	--------------------------------------------------------------
-	The smb_freemsgdat() function is used to decrement the data block allocation
-	records in the data allocation file associated with the data in the data file
-	by the value of the headers parameter (normally 1). The parameter offset
-	indicates the byte offset to the beginning of the message data in the data
-	file and the parameter length is the total length of the message data.
-	Returns 0 on success, non-zero on failure.
-	
-	int smb_freemsghdr(ulong offset, ulong length)
-	----------------------------------------------
-	The smb_freemsghdr() function is used to set the header block allocation
-	records in the header allocation file to 0 (indicated non-allocated block).
-	The parameter offset indicates the byte offset to the beginning of the header
-	record being freed and the parameter length indicates the total length of the
-	header record. Returns 0 on success, non-zero on failure.
-	
-	int smb_stack(int op)
-	---------------------
-	The smb_stack() function is used to save and restore message base information
-	so that multiple message bases can be open simultaneously. The stack can
-	save up to 4 message bases (allowing 5 simultaneously open message bases).
-	The stack is a "last in, first out" storage area for open message bases.
-	If the op parameter is SMB_STACK_PUSH, smb_stack() will save (push) the current
-	message base onto the stack. Calling smb_stack(SMB_STACK_POP) will restore
-	(pop) the most recently pushed message base off the stack. Calling
-	smb_stack(SMB_STACK_XCHNG) will exchange the most recently pushed message base
-	and the current message base (replacing the top of the stack with the current
-	message base).
-	
-	void smb_close()
-	----------------
-	Closes the header, data, and index files for the currently open message base.
-	
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           83                                SMBLIB.C
-
-
-	Miscellaneous SMBLIB Files
-	==========================
-	
-	CRC32.H         C header file for CRC-32 calculations
-	-----------------------------------------------------
-	This file contains a static 32-bit CRC table (crc32tbl[]) and a macro (ucrc32)
-	that uses this table to calculate 32-bit CRCs one byte at a time.
-	
-	Example:
-	
-	    ulong crc=0xffffffff;
-	
-	for(i=0;i<length;i++)
-	    crc=ucrc32(buf[i],crc);
-	crc=~crc;
-	
-	
-	CRC16.C         C functions for 16-bit CRC calculations
-	-------------------------------------------------------
-	This file contains a function (ucrc16), to calculate 16-bit CRCs one byte at a
-	time and a function (crc16) that uses the ucrc16() function to calculate the
-	16-bit CRC of an ASCIIZ character string.
-	
-	Example:
-	
-	    ushort crc;
-	
-	crc=crc16("Text");
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           84              Miscellaneous SMBLIB Files
-
-
-	LZH.H           Function prototypes for LZH.C
-	---------------------------------------------
-	This file contains function prototypes for the two most important functions
-	in LZH.C, lzh_encode() and lzh_decode().
-	
-	Example:
-	
-	    uchar str[256],lzh[512];
-	    long length;
-	
-	strcpy(str,"This is a string of text");
-	length=lzh_encode(str,strlen(str),lzh);
-	lzh_decode(lzh,length,str);
-	
-	
-	LZH.C           C functions for LZH encoding (compression/decompression)
-	------------------------------------------------------------------------
-	This file contains the functions for encoding and decoding LZH compressed
-	data. If the macro LZH_DYNAMIC_BUF is defined when this file is compiled,
-	temporary buffers will be dynamically allocated as opposed to static. This
-	may be slower than the static buffer method, but frees the allocated memory
-	after encoding or decoding. If free memory for your application is an issue,
-	then define this macro when compiling this file.
-	
-	Example (Borland C):
-	
-	bcc -c -DLZH_DYNAMIC_BUF lzh
-	
-	Example (Watcom C):
-	
-	wcc -dLZH_DYNAMIC_BUF lzh
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           85              Miscellaneous SMBLIB Files
-
-
-	SMBLIB Storage Example
-	======================
-	
-	#include "smblib.h"
-	#include "crc16.c"
-	
-	int main(void)
-	{
-	    char    str[256]                        // General purpose string
-	           ,*msg_text="Hello, world!"       // Message text
-	           ,nul_buf[SDT_BLOCK_LEN]={0}      // NULL initialized buffer
-	           ;
-	    int     i                               // General purpose integer
-	           ,storage=SMB_SELFPACK            // Default storage method
-	           ,retry=10                        // Retry for opening/locking files
-	           ;
-	    ushort  max_age=0                       // Default maximum age of messages
-	           ,xlat=XLAT_NONE                  // Translation string
-	           ,tzone=PST                       // Time zone
-	           ,copies=1                        // Number of copies of this msg
-	           ;
-	    ulong   max_msgs=500                    // Default max number of msgs
-	           ,max_crcs=0                      // Default max crcs
-	           ,length                          // Length of msg text
-	           ,offset                          // Offset to msg text in data file
-	           ;
-	    smbmsg_t    msg;                        // Message structure
-	    smbstatus_t status;                     // Message base status record
-	
-	strcpy(smb_file,"MSGBASE");                 // We'll use "MSGBASE" for the name
-	if((i=smb_open(retry))!=0) {                // Can't open!?!
-	    printf("smb_open returned %d\n",i);
-	    return(1); }
-	
-	if(!filelength(fileno(shd_fp)))             // Message base not created yet
-	    smb_create(max_crcs                     // Create with default settings
-	              ,max_msgs
-	              ,max_age
-	              ,storage==SMB_HYPERALLOC
-	                    ? SMB_HYPERALLOC : 0    // SMB_EMAIL if this was e-mail
-	              ,retry
-	              );
-	
-	if((i=smb_locksmbhdr(retry))!=0) {          // Can't lock status base header
-	    printf("smb_locksmbhdr returned %d\n",i);
-	    smb_close();
-	    return(1); }
-	
-	if((i=smb_getstatus(&status))!=0) {         // Can't read status base header
-	    smb_unlocksmbhdr();
-	    smb_close();
-	    printf("smb_getstatus returned %d\n",i);
-	    return(1); }
-
-
-	_______________________________________________________________________________
-	Synchronet                           86                  SMBLIB Storage Example
-
-
-	if(status.attr&SMB_HYPERALLOC)
-	    storage=SMB_HYPERALLOC;
-	else
-	    storage=SMB_SELFPACK;
-	
-	length=strlen(msg_text);                    // Get length of message
-	length+=sizeof(xlat);                       // Add length of xlat string
-	
-	if(storage==SMB_HYPERALLOC)                 // Allocate space for message text
-	    offset=smb_hallocdat();
-	else {
-	    if((i=smb_open_da(retry))!=0) {
-	        smb_unlocksmbhdr();
-	        printf("smb_open_da returned %d\n",i);
-	        smb_close();
-	        return(1); }
-	    if(storage==SMB_FASTALLOC)
-	        offset=smb_fallocdat(length,copies);
-	    else
-	        offset=smb_allocdat(length,copies);
-	    fclose(sda_fp); }
-	
-	fseek(sdt_fp,offset,SEEK_SET);              // Seek to beginning of data block
-	fwrite(&xlat,sizeof(xlat),1,sdt_fp);        // Write xlat string
-	fwrite(msg_text,strlen(msg_text),1,sdt_fp); // Write message text
-	fwrite(nul_buf,SDT_BLOCK_LEN-length         // Write NULLs out to end of block
-	    ,1,sdt_fp);
-	fflush(sdt_fp);                             // Flush output buffer
-	smb_unlocksmbhdr();                         // Unlock status base header
-	
-	memset(&msg,0,sizeof(smbmsg_t));            // Initialize header to NULL
-	memcpy(msg.hdr.id,"SHD\x1a",4);             // Always set to SHD^Z
-	msg.hdr.version=SMB_VERSION;
-	msg.hdr.when_written.time=time(NULL);
-	msg.hdr.when_written.zone=tzone;
-	msg.hdr.when_imported.time=time(NULL);
-	msg.hdr.when_imported.zone=tzone;
-	msg.hdr.offset=offset;
-	
-	strcpy(str,"All");                          // Send message to "All"
-	if((i=smb_hfield(&msg,RECIPIENT,strlen(str),str))!=0) {
-	    printf("smb_hfield returned %d\n",i);
-	    smb_freemsgdat(offset,length,copies);
-	    smb_close();
-	    return(1); }
-	strlwr(str);                                // If this were e-mail, idx.to
-	msg.idx.to=crc16(str);                      // would be the "to" user number
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           87                  SMBLIB Storage Example
-
-
-	strcpy(str,"Sysop");                        // Send message from "Sysop"
-	if((i=smb_hfield(&msg,SENDER,strlen(str),str))!=0) {
-	    printf("smb_hfield returned %d\n",i);
-	    smb_freemsgdat(offset,length,copies);
-	    smb_freemsgmem(msg);
-	    smb_close();
-	    return(1); }
-	strlwr(str);                                // If this were e-mail, idx.from
-	msg.idx.from=crc16(str);                    // would be the "from" user number
-	
-	strcpy(str,"This is a test");               // Set the message subject/title
-	if((i=smb_hfield(&msg,SUBJECT,strlen(str),str))!=0) {
-	    printf("smb_hfield returned %d\n",i);
-	    smb_freemsgdat(offset,length,copies);
-	    smb_freemsgmem(msg);
-	    smb_close();
-	    return(1); }
-	strlwr(str);
-	msg.idx.subj=crc16(str);
-	
-	if((i=smb_dfield(&msg,TEXT_BODY,length))!=0) {
-	    printf("smb_dfield returned %d\n",i);
-	    smb_freemsgdat(offset,length,copies);
-	    smb_freemsgmem(msg);
-	    smb_close();
-	    return(1); }
-	
-	if((i=smb_addmsghdr(&msg,&status,storage,retry))!=0) {
-	    printf("smb_addmsghdr returned %d\n",i);
-	    smb_freemsgdat(offset,length,copies);
-	    smb_freemsgmem(msg);
-	    smb_close();
-	    return(1); }
-	
-	smb_freemsgmem(msg);                        // Unnecessary if exiting main()
-	smb_close();                                // Unnecessary if exiting main()
-	return(0);
-	}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           88                  SMBLIB Storage Example
-
-
-	SMBLIB Retrieval Example
-	========================
-	
-	#include "smblib.h"
-	
-	int main(void)
-	{
-	    char        ch;                         // General purpose character
-	    int         i,                          // General purpose integer
-	                retry=10;                   // Retry for opening/locking files
-	    ushort      xlat;                       // Translation string
-	    ulong       l;                          // General purpose long integer
-	    smbmsg_t    msg;                        // Message structure
-	
-	strcpy(smb_file,"MSGBASE");                 // We'll use "MSGBASE" for the name
-	if((i=smb_open(retry))!=0) {                // Can't open!?!
-	    printf("smb_open returned %d\n",i);
-	    return(1); }
-	
-	if(!filelength(fileno(shd_fp))) {           // Message base not created yet
-	    printf("Empty\n");
-	    smb_close();
-	    return(0); }
-	
-	for(msg.offset=0;!ferror(sid_fp);msg.offset++) {
-	
-	    fseek(sid_fp,msg.offset*sizeof(idxrec_t),SEEK_SET);
-	    if(!fread(&msg.idx,1,sizeof(idxrec_t),sid_fp))
-	        break;
-	
-	    if((i=smb_lockmsghdr(msg,retry))!=0) {
-	        printf("smb_lockmsghdr returned %d\n",i);
-	        break; }
-	    if((i=smb_getmsghdr(&msg))!=0) {
-	        smb_unlockmsghdr(msg);
-	        printf("smb_getmsghdr returned %d\n",i);
-	        break; }
-	    if((i=smb_unlockmsghdr(msg))!=0) {
-	        smb_freemsgmem(msg);
-	        printf("smb_unlockmsghdr returned %d\n",i);
-	        break; }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           89                SMBLIB Retrieval Example
-
-
-	    printf("Subj : %s\n",msg.subj);
-	    printf("To   : %s\n",msg.to);
-	    printf("From : %s\n",msg.from);
-	    printf("Date : %s\n",ctime((time_t *)&msg.hdr.when_written.time));
-	
-	    for(i=0;i<msg.hdr.total_dfields;i++)
-	        switch(msg.dfield[i].type) {
-	            case TEXT_BODY:             // Only show BODY and TAIL data fields
-	            case TEXT_TAIL:
-	                fseek(sdt_fp,msg.hdr.offset+msg.dfield[i].offset
-	                    ,SEEK_SET);
-	                fread(&xlat,sizeof(xlat),1,sdt_fp);
-	                if(xlat!=XLAT_NONE)     // No translations supported
-	                    continue;
-	                for(l=sizeof(xlat);l<msg.dfield[i].length;l++) {
-	                    ch=fgetc(sdt_fp);
-	                    if(ch)
-	                        putchar(ch); }
-	                printf("\n");
-	                break; }
-	    printf("\n");
-	
-	    smb_freemsgmem(msg); }          // Free memory allocated by smb_getmsghdr()
-	
-	smb_close();
-	return(0);
-	}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           90                SMBLIB Retrieval Example
-
-
-	SMBLIB Performance Issues
-	=========================
-	
-	Since importing messages is the usually the most time consuming task likely
-	undertaken by an SMB application, it is also the most susceptable to design
-	issues that effect performance.
-	
-	Opening and Closing
-	-------------------
-	When importing multiple messages for a single message base, it appears logical
-	to open the message base, import all the messages, then close it. This indeed
-	is preferred over opening and closing the message base for each message.
-	
-	When importing multiple messages for possibly non-consecutive message bases,
-	developers may eaily make the mistake of opening and closing the message base
-	for each message. This is not necessary and can considerably hinder the
-	import performance. The easiest solution is to only close the message base and
-	open a new one if the next message to be imported is not for the same message
-	base as the previously imported message. Example:
-	
-	smb_file[0]=0;
-	for(i=0;i<total_messages_to_be_imported;i++) {
-	    if(stricmp(get_messagebase_for_this_message(i),smb_file)) {
-	        if(smb_file[0])     /* We've already opened one */
-	            smb_close();
-	        strcpy(smb_file,get_messagebase_for_this_message(i));
-	        smb_open(10); }
-	    /* Import this message */
-	    }
-	if(smb_file[0])
-	    smb_close();
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           91               SMBLIB Performance Issues
-
-
-	A more advanced method is to keep multiple message bases open at the same time.
-	Due to the likely limitation of total file handles on the system, it is
-	suggested to keep the number of simultaneously open message bases at or below
-	3. SMBLIB includes the function smb_stack() to easily "push" and "pop" message
-	bases without closing them (push is the equivalent to "save" and pop is the
-	equivalent to "restore"). The downside of this function is that you cannot
-	access message bases on the stack without actually popping them off (in reverse
-	of the order they were pushed). You can however "exchange" the current message
-	base with the message base on the top of the stack (most recently pushed).
-	To intelligently juggle more than two open message bases, the developer should
-	create their own equivalent of the smb_stack() function so they can access the
-	message bases on the stack without popping them off. An example of keeping a
-	maximum of two message bases open using smb_stack():
-	
-	    char last_messagebase[128],new_messagebase[128];
-	
-	smb_file[0]=0;
-	last_messagebase[0]=0;
-	for(i=0;i<total_messages_to_be_imported;i++) {
-	    strcpy(new_messagebase,get_messagebase_for_this_message(i));
-	    if(stricmp(new_messagebase,smb_file)) {     /* Not current message base */
-	        if(smb_file[0]) {                       /* We've already opened one */
-	            if(!stricmp(new_messagebase,last_messagebase)) { /* Same as last */
-	                strcpy(last_messagebase,smb_file);
-	                smb_stack(SMB_STACK_XCHNG); }       /* Retore previous base */
-	            else {
-	                if(last_messagebase[0]) {
-	                    smb_stack(SMB_STACK_XCHNG);
-	                    smb_close();
-	                    strcpy(last_messagebase,new_messagebase); }
-	                else {
-	                    strcpy(last_messagebase,smb_file);
-	                    smb_stack(SMB_STACK_PUSH); }    /* Save current base */
-	                strcpy(smb_file,new_messagebase);
-	                smb_open(10); } }
-	        else {
-	            strcpy(smb_file,new_messagebase);
-	            smb_open(10); } }
-	    /* Import this message */
-	    }
-	if(smb_file[0])
-	    smb_close();
-	if(last_messagebase[0]) {
-	    smb_stack(SMB_STACK_POP);
-	    smb_close(); }
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           92               SMBLIB Performance Issues
-
-
-	The second example would be of negligible performance gain over the first
-	example (6 open operations versus 7) if the messages to import were in the
-	following order:
-	
-	msg[0] --> msgbase[0]       // 0 opened
-	msg[1] --> msgbase[1]       // 0 pushed 1 opened
-	msg[2] --> msgbase[1]
-	msg[3] --> msgbase[2]       // 1 closed 0 popped 0 closed 2 opened
-	msg[4] --> msgbase[0]       // 2 pushed 0 opened
-	msg[5] --> msgbase[2]       // 0 pushed 2 popped (exchanged)
-	msg[6] --> msgbase[3]       // 2 closed 0 popped 0 closed 3 opened
-	msg[7] --> msgbase[0]       // 3 pushed 0 opened
-	
-	The second example would be of significant performance gain over the first
-	example (4 open operations versus 8) if the messages to import were in the
-	following order:
-	
-	msg[0] --> msgbase[0]       // 0 opened
-	msg[1] --> msgbase[1]       // 0 pushed 1 opened
-	msg[2] --> msgbase[0]       // 1 pushed 0 popped (exchanged)
-	msg[3] --> msgbase[1]       // 0 pushed 1 popped (exchanged)
-	msg[4] --> msgbase[0]       // 1 pushed 0 popped (exchanged)
-	msg[5] --> msgbase[2]       // 0 pushed 1 popped (exchanged) 1 closed 2 opened
-	msg[6] --> msgbase[3]       // 2 pushed 0 popped (exchanged) 0 closed 3 opened
-	msg[7] --> msgbase[2]       // 3 pushed 2 popped (exchanged)
-	
-	More advanced use of "stack-like" message base file handle storage can easily
-	reduce the number of open operations, therefore increasing import performance
-	under more adverse message base ordering conditions.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           93               SMBLIB Performance Issues
-
-
-	Compression
-	-----------
-	If any message data compression features are offered by the application, it
-	is important the the application not unnecessarily compress data that will
-	not save any storage space. While this may seem an obvious statement, please
-	review the following pseudo-code example:
-	
-	if ( message_data_length < SDT_BLOCK_LEN )
-	    // Store uncompressed data
-	else {
-	    // Compress data
-	    if ( ( compressed_data_length / SDT_BLOCK_LEN )
-	        < ( message_data_length / SDT_BLOCK_LEN ) ) // Saves a block or more
-	        // Store compressed data
-	    else
-	        // Store uncompressed data
-	    }
-	
-	Since the SMB format stores message data in fixed length blocks, there is no
-	point in storing a message in compressed format if it requires the same number
-	of blocks as the uncompressed format (i.e. a message that is two blocks in
-	length in uncompressed format and only a block and a half in length when
-	compressed should not be stored in compressed format since it still requires
-	two full blocks of storage). It is important to note that in the above example,
-	the length of the data translation string was not taken into account in
-	determining the number of required blocks. Also, the smb_datblocks() function
-	is normally used in determing the number of required blocks to store a given
-	data length and it is a little more involved than simply dividing the length of
-	the data by SDT_BLOCK_LEN.
-	
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           94               SMBLIB Performance Issues
-
-
-	Bibliography
-	============
-	
-	Title     : The C Programming Language
-	Publisher : Prentice Hall
-	Author    : Brian W. Kernighan and Dennis M. Ritchie
-	
-	Document  : ARPANET Request for Comments (RFC) #822
-	Title     : Standard for the Format of ARPA Internet text messages
-	Publisher : SRI International
-	Author    : David H. Crocker, University of Delaware
-	
-	Document  : FTS-0001
-	Publisher : FSC
-	Author    : Randy Bush, Pacific Systems Group
-	
-	Document  : FTS-0004
-	Title     : EchoMail Specification
-	Publisher : FSC
-	Author    : Bob Hartman
-	
-	Document  : FTS-0009
-	Title     : A standard for unique message identifiers and reply chain linkage
-	Publisher : FSC
-	Author    : Jim Nutt
-	
-	Document  : FSC-00046
-	Title     : A Product Idenfifier for FidoNet Message Handlers
-	Publisher : FSC
-	Author    : Joaquim H. Homrighausen
-	
-	Document  : FSC-00053
-	Title     : Specifications for the ^aFLAGS field
-	Publisher : FSC
-	Author    : Joaquim H. Homrighausen
-	
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           95                            Bibliography
-
-
-	Implementations
-	===============
-	
-	Product   : Synchronet Multinode BBS Software
-	Developer : Digital Dynamics
-	Level     : III
-	Version   : 2.20
-	
-	Product   : Synchronet/FidoNet Import/Export Utility (SBBSFIDO)
-	Developer : Digital Dynamics
-	Level     : III
-	Version   : 2.23
-	
-	Product   : Synchronet UTI (Universal Text Interface) Driver
-	Developer : Digital Dynamics
-	Level     : III
-	Version   : 2.23
-	
-	Product   : SBBSecho FidoNet Packet Tosser for Synchronet
-	Developer : Digital Dynamics
-	Level     : III
-	Version   : 1.11
-	
-	Product   : NetXpress Internet UUCP for Synchronet
-	Developer : Merlin Systems
-	Level     : II
-	Version   : 1.50
-	
-	Product   : InterEcho FidoNet Packet Tosser
-	Developer : InterMail Sales Inc
-	Level     : II
-	Version   : 1.11
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-	_______________________________________________________________________________
-	Synchronet                           96                                   Index
-
-
diff --git a/src/sbbs2/smb/121a/smb.txt b/src/sbbs2/smb/121a/smb.txt
deleted file mode 100644
index 96c50c01ac..0000000000
--- a/src/sbbs2/smb/121a/smb.txt
+++ /dev/null
@@ -1,5661 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-                     Synchronet Message Base Specification
-                                 Version 1.21
-                               Updated 08/31/95
-
-                        Copyright 1995 Digital Dynamics
-
-                                  PO Box 501
-                             Yorba Linda, CA 92686
-
-                 Voice: 714-529-6328   BBS: 714-529-9525 V.32/V.32bis
-                   FAX: 714-529-9721        714-529-9547 V.FC
-                  Fido: 1:103/705      ftp: netcom.com /pub/sb/sbbs
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Table of Contents
-=================
-
-Introduction.............................................................3
-Implementation Levels....................................................8
-Definitions.............................................................10
-        Acronyms........................................................12
-        Data Types......................................................13
-File Formats............................................................18
-        Index.....................(*.SID)...............................18
-        Header....................(*.SHD)...............................20
-        Header Allocation.........(*.SHA)...............................30
-        Data......................(*.SDT)...............................31
-        Data Allocation...........(*.SDA)...............................32
-        CRC History...............(*.SCH)...............................33
-Header Field Types......................................................34
-Data Field Types........................................................58
-Messsage Attributes.....................................................60
-Translation Types.......................................................61
-Agent Types.............................................................62
-Network Types...........................................................63
-Media Types.............................................................64
-Message Storage Pseudo Code.............................................67
-Message Retrieval Pseudo Code...........................................69
-SMBUTIL.................................................................70
-CHKSMB..................................................................71
-FIXSMB..................................................................72
-SMBLIB (C library)......................................................73
-        Data Types and Constants..(SMBDEFS.H)...........................74
-        Global Variables..........(SMBVARS.C)...........................75
-        Function Prototypes.......(SMBLIB.H)............................76
-        Library Functions.........(SMBLIB.C)............................77
-        Miscellaneous.............(CRC*.* and LZH.*)....................84
-SMBLIB Storage Example..................................................86
-SMBLIB Retrieval Example................................................89
-SMBLIB Performance Issues...............................................91
-Bibliography............................................................95
-Implementations.........................................................96
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                            2                                Contents
-
-
-Introduction
-============
-
-Q. What is SMB?
-
-A. SMB (Synchronet Message Base) is a technical specification for the storage
-   format of electronic mail messages. These e-mail messages may all be
-   contained in one database, or, more commonly, separated into catagorized
-   databases. These message databases (or message bases) are also referred to
-   as "sub-boards", "forums", "conferences", and "SIGs". The messages may be
-   directed to an individual person, sent to a group of individuals, or sent
-   to everyone who can read messages in that message base. Messages may be
-   created and read soley at one physical location, or imported from and
-   exported to a message network that may span continents. Message bases that
-   are connected to a message network are often called "echoes".
-
-
-Q. Why SMB?
-
-A. The Synchronet Message Base is designed to store high volumes of messages
-   while maintaining optimum search, retrieval, and creation performance.
-   These messages are not limited to mere text. In addition to text, SMB
-   defines the storage of digitized sound, MIDI, graphics, fonts, animation,
-   as well as other multimedia data and triggers for localized multimedia.
-   SMB thrives on a multi-user environment where messages are being created,
-   read, modified, and deleted by multiple tasks simultaneously. With the
-   large message networks of today being the rule, rather than the exception,
-   and high volumes of messages being imported on a daily, sometimes hourly
-   basis, creation and deletion speed is of the utmost importance. This is
-   where SMB really shines. Being extensible enough to handle message formats
-   from networks of today and tomorrow, and fast enough to import more messages
-   that humanly readable, the SMB format will more than meet your message
-   storage needs.
-
-
-Q. Why a specification?
-
-A. Message bases are often accessed and modified by a number of different
-   programs. Often these programs are developed by individuals or companies
-   other than the original designer of the message base format. This
-   specification is an attempt to aid developers in creating programs that
-   access or modify a message base stored in the SMB format.
-
-
-Q. Who can use this specification?
-
-A. Anyone that has interest in the Synchronet Message Base format at either
-   an educational or professional level. Specifically, software developers
-   interested or currently involved in the development of message readers,
-   editors, echomail (toss/scan) programs, message transfer agents (MTAs),
-   network gateways, and bulletin board systems. Much of the information in
-   this specification is intended for those with preexisting programming
-   knowledge, so those with little or no programming experience may find it
-   hard to comprehend.
-
-_______________________________________________________________________________
-Synchronet                            3                            Introduction
-
-
-
-
-Q. What does the SMB specification include?
-
-A. The text you are reading is part of the SMB specification: a single text
-   document that defines the storage format of each of the six files of an
-   SMB format message base and how they are related to each other.
-
-   Included with this specification is C source code to be used as an example
-   to programmers of how to access an SMB format message base and public domain
-   library functions (SMBLIB) that can be compiled and linked into programs
-   that access an SMB format message base developed by third parties. An SMB
-   utility program (SMBUTIL) is also included with C source code as an example
-   of how to use the SMBLIB functions.
-
-
-Q. Where did the SMB specification come from?
-
-A. Digital Dynamics (southern California based software development company)
-   released "Synchronet Multinode BBS Software Version 1a" in June of 1992 as
-   one of the first BBS packages to be designed from the ground-up to operate
-   in a multinode environment with incredible speed and reliability, with a
-   large suite of multinode specific features and design innovations.
-
-   The original message base format was designed with localized messaging and
-   low volume message networks in mind. By January of 1993, it was clear that
-   high volume message networks (FidoNet, RelayNet, Usenet, etc.) were the
-   preference of most BBS users and a new message base format was required to
-   allow for high volume message storage, improved storage, retrieval, and
-   maintenance performance, as well as lower storage space requirements.
-
-   Rather than introduce another new message format, Digital Dynamics sought
-   to implement an existing public specification for a format that would meet
-   current and future message storage needs. More than a few specifications
-   were seriously considered at one time or another, but after careful
-   examination, design flaws and lack of extensibility eliminated them from the
-   long term plans of Digital Dynamics and Synchronet BBS Software. Thus began
-   the design of the "Synchronet Message Base" (SMB) format.
-
-   At the request of many message related program developers, Digital Dynamics
-   created and released the SMB specification before the release of "Synchronet
-   Version 2.00" to allow lead-time on developing support programs for the new
-   format.
-
-   Digital Dynamics strongly encourages developers of message related programs
-   (including software that directly competes with Synchronet or other Digital
-   Dynamics products) to implement support for SMB. Though this is a public
-   specification and Digital Dynamics encourages developer suggestions, it will
-   remain under the sole control of Digital Dynamics unless specifically stated
-   otherwise in a future revision of this specification.
-
-   Digital Dynamics requests that any organizations that wish to adopt or
-   ratify this specification, in part or whole, notify Digital Dynamics through
-   any of the contact methods listed at the beginning of this document.
-
-_______________________________________________________________________________
-Synchronet                            4                            Introduction
-
-
-
-
-Q. How does SMB store messages?
-
-A. Each message base is stored in a set of binary files. This set consists
-   of between three and six files depending the storage method used. The base
-   filename (maximum of eight characters under DOS) is the same for all six
-   files of the same message base and unique amoung the filenames of other
-   message bases in the same directory. The six files each have a different
-   three character extension. The first character of the extension is always
-   the letter 'S' (for SMB), while the second and third characters define the
-   contents of the file.
-
-   Two of the six files associated with each message base are not recreatable
-   and therefore are the most important when considering data integrity. These
-   two files are the data file (with a .SDT extension) and header file (.SHD
-   extension). Both of these files use 256 byte blocks and have associated
-   block allocation tables (stored in .SDA and .SHA respectively) so that
-   deleted message blocks may be used by new messages without creating odd
-   sized unused 'holes' in the files. The block allocation table files (.SDA
-   and .SHA) can be recreated with the information stored in the header (.SHD)
-   file. When using Hyper Allocation storage method, the allocation files (.SDA
-   and .SHA) are not used.
-
-   For fast indexing, there is a small fixed length index file (with a .SID
-   extension). This file allows for the immediate location of message header
-   records based on sender's name or user number, recipient's name or user
-   number, subject, message number, or message attributes. This file can be
-   recreated with the data stored in the header (.SHD) file.
-
-   The last file is an optional CRC history (.SCH) file. It contains 32-bit
-   CRCs of a configurable number of messages imported or created locally. This
-   is to help eliminate duplicate messages created by user or program error.
-   The CRC history file can be recreated with the combination of information
-   stored in the data (.SDT) and header (.SHD) files.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                            5                            Introduction
-
-
-Q. How fast do messages import into an SMB message base?
-
-A. This is a very important question for systems for that import large volumes
-   of messages. Of course, the answer depends on the storage format which you
-   are importing from, the average length of messages, the design of the
-   program which is peforming the import process, as well as the hardware and
-   system software being used. What's important is that SMB will allow the
-   fastest import process possible with any given combination of the above
-   factors.
-
-   Since system storage capacity is rarely infinite, neither is the number
-   of messages which can be stored in a message base. System operators must
-   define the maximum number of messages to be stored in a message base, the
-   maximum age of the messages in that message base, or a combination of both.
-   When using the Self-packing storage method (defined later in this document),
-   the smaller the number of messages stored in a message base, the faster the
-   import process. The SMB format is flexible enough to support multiple levels
-   of import performance based on optimizations for storage space or speed.
-   Most system operators will almost invariably choose speed over space, but
-   which choices are available is determined by the importing program. This
-   specification defines three storage methods, from slowest to fastest:
-   Self-packing, Fast Allocation, and Hyper Allocation. Other options defined
-   in this specification may affect storage performance, including duplicate
-   message checking and message compression/encryption.
-
-
-Q. How much storage is required for an SMB message base?
-
-A. The biggest factor in determining storage requirements for a message base
-   is the maximum number of messages to be stored in the base (defined by the
-   system operator) and the average size of each message. The minimum required
-   storage for a message base is 32 bytes plus 532 bytes per message (plus four
-   bytes per message if duplicate message checking is used and three bytes
-   per message if Self-packing or Fast Allocation storage methods are used).
-
-   The SMB format was originally designed to be "self-packing", meaning purged
-   (deleted) message header and data blocks will be used automatically by new
-   messages. Relying solely on self-packing, an SMB format message base will
-   never "shrink" in size. This is not to say that it will continually "grow"
-   in size, but that without specific packing procedures, deleted message
-   blocks may remain unused for extended periods of time, meanwhile using some
-   amount of storage space that could be recovered using specific packing
-   procedures. The Fast Allocation and Hyper Allocation storage methods do not
-   use deleted message blocks for new messages so specific packing procedures
-   must be used if any messages are deleted and that storage space is to ever
-   be recovered.
-
-   Limiting the maximum age of messages in an SMB message base is another way
-   to control the storage requirements. While maximum message age definition is
-   optional, the definition of the maximum number of messages is not.
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                            6                            Introduction
-
-
-Q. How many messages can be stored per SMB message base?
-
-A. Without considering storage limitations or message data lengths greater than
-   256, the theoretical maximum number of messages that can be stored in a
-   single SMB message base is 16.7 million. Considering the variable length
-   nature of message and header data, it is suggested that the system operator
-   allow no more than 1 million messages per base.
-
-   To determine an estimated maximum number of messages for a message base
-   using the average message data length as a factor, use the following
-   formula:
-
-   4.2 billion divided by the average message length rounded up to be evenly
-   divisible by 256.
-
-   If the average message data length is 1500 bytes, the estimated maximum
-   number of messages would be 2,734,375 (4.2 billion divided by 1536).
-
-   Implementations of this format may be further limited by available system
-   memory.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                            7                            Introduction
-
-
-Implementation Levels
-=====================
-The SMB format can be implemented to varying degrees between programs without
-creating compatibilty issues. Rather than have developers specifically state
-which features they have and have not implemented, we have defined seven levels
-of implementation (represented by Roman numerals I through VII). For a program
-or software package to meet an implementation level, it must have all of the
-features listed for that level and all of those for each level below it. The
-minimum suggested imlementation is level I. The SMBUTIL program included with
-this specification is an example of a level I implementation with features
-from some of the higher implementation levels.
-
-Level I
--------
-The minimum suggested level of implementation. Messages contain merely ASCII
-text displayable on an ANSI terminal. Messages can be added to the message
-base and if the maximum number of messages is exceeded, messages are removed
-or marked for deletion.
-
-Level II
---------
-The addition of file attachments, multiple index/header entries per message
-(multiple destinations), multiple text bodies for the separation of message
-text and tag/origin lines (for example), forwarding, threading, and specific
-FidoNet kludge header field support makes this level of implementation more
-realistic for bulletin board system and EchoMail software implementation.
-
-Synchronet Multinode BBS Software v2.00 has a level II implementation of this
-specification.
-
-Level III
----------
-This implementation adds support for translation strings defined later in this
-document for data compression, encryption, escaping, and encoding. This level
-is still limited to basic ASCII text and ANSI escape sequence entry and
-retrieval.
-
-Synchronet Multinode BBS Software v2.10 has a level III implementation of this
-specification.
-
-Level IV
---------
-The storage and retrieval of embedded and attached images is added in this
-level of implementation. Supported images are limited to single binary or text
-data blocks that can be displayed or transferred to the user (automatically,
-or by request) if their display and translation protocols define specific
-support for the image type.
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                            8                   Implementation Levels
-
-
-Level V
--------
-This level of implementation adds support for embedded and attached sound data.
-This includes digitized sound and MIDI data. Supported sounds are limited to
-single binary or text data blocks that can be played or transferred to the user
-(automatically or by request) if their presentation and translation protocols
-define specific support for the sound type.
-
-Level VI
---------
-Localized sound and image data can be triggered by messages stored and
-retrieved in an implementation of this level.
-
-Level VII
----------
-Complete multimedia support is reached in this implementation level with
-support for embedded and attached animation, sound, and video data.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                            9                   Implementation Levels
-
-
-Definitions
-===========
-
-Control Characters
-------------------
-When specifying control characters (ASCII 1 through 31), the caret symbol "^"
-or the abreviation "ctrl-" followed by a character will be used to indicate the
-value. ^A is equivalent to ASCII 1, ^B ASCII 2, etc. The case of the control
-character is not significant (i.e. ^z and ^Z are equivalent). The control
-character ^@ (ASCII 0) will be specified as NULL or 0.
-
-
-Hexadecimal
------------
-Base sixteen numbering system which includes the digits 0-9 and A-F.
-Hexadecimal numbers are represented in this document with a prefix of "0x" or
-"\x" or a suffix of "h". Hexadecimal letter digits are not case sensitive
-(i.e. the number 0xff is the same as 0xFF).
-
-
-File dump
----------
-When example file dumps are displayed, the format is similar to that of the
-output from the DOS DEBUG program. With the exception of the ASCII characters,
-all numbers are in hexadecimal.
-
-Offset    Byte values                                          ASCII characters
-
-000000    53 4D 42 1A 10 01 20 00   F4 01 00 00 F4 01 00 00    SMB... .�...�...
-000010    20 00 00 00 D0 07 00 00   D0 07 00 00 00 00 00 00     ...�...�.......
-
-
-Bit values
-----------
-Bit (or flag) values are represented in C notation as (1<<x) where x is the bit
-number. (i.e. bit number 7 (1<<7) is the same as 0x80).
-
-
-Word storage
-------------
-All words (16-bit) and double words (32-bit) are stored in Intel 80x86 (little
-endian) format with bytes stored from low to high (reverse of the Motorola
-680x0 word storage format).
-
-A 16-bit word with the value 1234h is stored as 34h 12h.
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           10                             Definitions
-
-
-Translation strings
--------------------
-Translation strings (xlat variables) are arrays of words (16-bit) in the order
-of the original storage translation. The last translation type is followed by a
-16-bit zero (defined later as XLAT_NONE). If there are no translations, then
-the first and only element of the array is XLAT_NONE.
-
-If multiple translations are used, the translation order must be reversed
-upon retrieval to obtain the proper data.
-
-
-Local e-mail
-------------
-When referring to the local e-mail message base of a Synchronet BBS, we are
-referring specifically the message base with the name "MAIL" stored in the
-"DATA" directory (e.g. \SBBS\DATA\MAIL).
-
-Messages stored in this message base are different in the following respects:
-
-    The SMB_EMAIL status header attribute is set ON
-    Hyper Allocation storage method is not supported
-    The "To" and and "From" fields of the message indexes do NOT contain CRCs
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           11                             Definitions
-
-
-Acronyms:
-========
-
-ANSI            American National Standards Institute
-ASCII           American Standard Code for Information Interchange
-BBS             Bulletin Board System
-C               The C programming language as defined by ANSI X3.159-1989
-CR              Carriage Return character (ASCII 13)
-CRC             Cyclic Redundancy Check
-CRC-16          Standard 16-bit CRC using 1021h polynomial (seed 0)
-CRC-32          Standard 32-bit CRC using EDB88320h polynomial (seed -1)
-CRLF            Carriage Return character followed by a Line Feed character
-FSC             FidoNet Standards Commitee (FTS proposal)
-FTN             FidoNet Technology Network
-FTS             FidoNet Technical Standard
-LF              Line Feed character (ASCII 10)
-QWK             Compressed message packet format for message reading/networking
-RFC             Request for Comments
-SMB             Synchronet Message Base
-UT              Universal Time (formerly called "Greenwhich Mean Time")
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           12                  Definition of Acronyms
-
-
-Data types
-==========
-
-uchar           Unsigned 8-bit value (0 through 255).
-                C example:
-
-                #define uchar unsigned char
-
-
-short           Signed 16-bit value (-32768 through 32767).
-                "short" is a C keyword indicating "short int".
-
-
-ushort          Unsigned 16-bit value (0 through 65535).
-                C example:
-
-                #define ushort unsigned short
-
-
-ulong           Unsigned 32-bit value (0 through 4294967295).
-                C example:
-
-                #define ulong unsigned long
-
-
-time_t          Unsigned 32-bit value.
-                Seconds since 00:00 Jan 01 1970 (Unix format).
-                Used for all time/date storage in SMB as part of the when_t
-                data type. This time format will support dates through the year
-                2105.
-                time_t is defined by ANSI C as a long (signed) which can
-                limit its date support to the year 2038 depending on the
-                library routines used.
-
-
-ASCII           String (aka character array) of 8-bit ASCII characters.
-                Characters with the bit 7 set (80h through FFh) represent
-                the IBM PC extended ASCII character set. When data or header
-                fields of this type are stored in the header, a NULL
-                terminator may or may not be present.
-                C example:
-
-                uchar str[80];
-
-
-ASCIIZ          ASCII string with (non-optional) NULL terminator.
-                C example:
-
-                uchar str[81];
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           13                Definition of Data Types
-
-
-nulstr          ASCII string immediately terminated by NULL.
-                C example:
-
-                uchar *nulstr="";
-
-
-undef           Data buffer with undefined contents.
-                C example:
-
-                uchar buf[BUF_LEN];
-
-when_t          Date/Time stamp including time-zone adjustment information.
-                C example:
-
-                typedef struct {
-
-                    time_t  time;   // Time stamp (in local time)
-                    short   zone;   // Zone constant or Minutes (+/-) from UT
-
-                    } when_t;
-
-                time:
-
-                A time value of 0 is invalid and indicates an uninitialized
-                time stamp.
-
-                Time stamps are always stored in universal time. i.e.
-                Regardless of what the local time zone is, Jan 1st 1994 00:00
-                will always be stored as 2D24BD00h.
-
-                zone:
-
-                If the zone is in the range -720 to +720, it represents the
-                number of minutes east or west of UT. Values in this range
-                should only be used for time zones not otherwise represented
-                here.
-
-                If the zone is greater than 720 or less than -720, then the
-                following bits have special meaning:
-
-                (1<<12)         // Non-US time zone     (east of UT)
-                (1<<13)         // Non-US time zone     (west of UT)
-                (1<<14)         // U.S. time zone
-                (1<<15)         // Daylight savings
-
-                The lower 12 bits (0 through 11) contain the number of minutes
-                east or west of UT (not accounting for daylight savings).
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           14                Definition of Data Types
-
-
-                If the time zone is one specified in the U.S. Uniform Time Act,
-                the following values represent the zone:
-
-                AST 0x40F0      // Atlantic             (-04:00)
-                EST 0x412C      // Eastern              (-05:00)
-                CST 0x4168      // Central              (-06:00)
-                MST 0x41A4      // Mountain             (-07:00)
-                PST 0x41E0      // Pacific              (-08:00)
-                YST 0x421C      // Yukon                (-09:00)
-                HST 0x4258      // Hawaii/Alaska        (-10:00)
-                BST 0x4294      // Bering               (-11:00)
-
-                With bit 15 set, the following values represent the same zone
-                with the presence of daylight savings:
-
-                ADT 0xC0F0      // Atlantic             (-03:00)
-                EDT 0xC12C      // Eastern              (-04:00)
-                CDT 0xC168      // Central              (-05:00)
-                MDT 0xC1A4      // Mountain             (-06:00)
-                PDT 0xC1E0      // Pacific              (-07:00)
-                YDT 0xC21C      // Yukon                (-08:00)
-                HDT 0xC258      // Hawaii/Alaska        (-09:00)
-                BDT 0xC294      // Bering               (-10:00)
-
-                The following non-standard time zone specifications may also be
-                used:
-
-                MID 0x2294      // Midway               (-11:00)
-                VAN 0x21E0      // Vancouver            (-08:00)
-                EDM 0x21A4      // Edmonton             (-07:00)
-                WIN 0x2168      // Winnipeg             (-06:00)
-                BOG 0x212C      // Bogota               (-05:00)
-                CAR 0x20F0      // Caracas              (-04:00)
-                RIO 0x20B4      // Rio de Janeiro       (-03:00)
-                FER 0x2078      // Fernando de Noronha  (-02:00)
-                AZO 0x203C      // Azores               (-01:00)
-                LON 0x1000      // London               (+00:00)
-                BER 0x103C      // Berlin               (+01:00)
-                ATH 0x1078      // Athens               (+02:00)
-                MOS 0x10B4      // Moscow               (+03:00)
-                DUB 0x10F0      // Dubai                (+04:00)
-                KAB 0x110E      // Kabul                (+04:30)
-                KAR 0x112C      // Karachi              (+05:00)
-                BOM 0x114A      // Bombay               (+05:30)
-                KAT 0x1159      // Kathmandu            (+05:45)
-                DHA 0x1168      // Dhaka                (+06:00)
-                BAN 0x11A4      // Bangkok              (+07:00)
-                HON 0x11E0      // Hong Kong            (+08:00)
-                TOK 0x121C      // Tokyo                (+09:00)
-                SYD 0x1258      // Sydney               (+10:00)
-                NOU 0x1294      // Noumea               (+11:00)
-                WEL 0x12D0      // Wellington           (+12:00)
-
-
-
-_______________________________________________________________________________
-Synchronet                           15                Definition of Data Types
-
-
-fidoaddr_t      FidoNet address stored as four ushorts that represent the zone,
-                network, node, and point (in that order).
-                C example:
-
-                typedef struct {
-
-                    ushort zone,
-                           net,
-                           node,
-                           point;
-
-                    } fidoaddr_t;
-
-
-typestr_t       ASCIIZ string with ushort type prefix.
-                C example:
-
-                typedef struct {
-
-                    ushort  type;   // Specifier for type of 'str'
-                    uchar   str[];  // ASCIIZ filename or other string data
-
-                    } typestr_t;
-
-
-mattach_t       File attachment information with type prefix, translation
-                string, and filename.
-                C example:
-
-                typedef struct {
-
-                    ushort  type;   // Attachment type
-                    ushort  xlat[]; // Translations of data in attachment
-                    uchar   str[];  // ASCIIZ filename
-
-                    } mattach_t;
-
-vattach_t       Video file attachment information with type, compression,
-                translation string, and filename.
-                C example:
-
-                typedef struct {
-
-                    ushort  type;   // Attachment type
-                    ushort  comp;   // Compression method
-                    ushort  xlat[]; // Translations of data in attachment
-                    uchar   str[];  // ASCIIZ filename
-
-                    } vattach_t;
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           16                Definition of Data Types
-
-
-mtext_t         Message text with translation string prefix.
-                C example:
-
-                typedef struct {
-
-                    ushort  xlat[]; // Translations of text
-                    uchar   text[]; // Actual text data
-
-                    } mtext_t;
-
-
-ftext_t         Formatted message text with translation string prefix and
-                format type.
-                C example:
-
-                typedef struct {
-
-                    ushort  type;   // See Image Types for valid types
-                    ushort  xlat[]; // Translations of data
-                    uchar   data[]; // Actual formatted text data
-
-                    } ftext_t;
-
-
-membed_t        Embedded data with type prefix, translation string, and ASCIIZ
-                description.
-                C example:
-
-                typedef struct {
-
-                    ushort  type;   // Specifier for type of 'dat'
-                    ushort  xlat[]; // Translations of embedded data
-                    uchar   name[]; // ASCIIZ char description of embedded data
-                    uchar   dat[];  // Binary data
-
-                    } membed_t;
-
-vembed_t        Embedded video data with type, compression method, translation
-                string, and ASCIIZ description.
-                C example:
-
-                typedef struct {
-
-                    ushort  type;   // Specifier for type of 'dat'
-                    ushort  comp;   // Compression method
-                    ushort  xlat[]; // Translations of embedded data
-                    uchar   name[]; // ASCIIZ char description of embedded data
-                    uchar   dat[];  // Binary data
-
-                    } vembed_t;
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           17                Definition of Data Types
-
-
-File formats
-============
-
-Index File (*.SID)
-------------------
-The index file for each message base contains one record per message in the
-base. Each record is fixed length using the following format:
-
-Index Record:
-------------
-C example:
-
-typedef struct {
-
-    ushort  to;     // 16-bit CRC of recipient name (lower case) or user number
-    ushort  from;   // 16-bit CRC of sender name (lower case) or user number
-    ushort  subj;   // 16-bit CRC of title/subject (lower case)
-    ushort  attr;   // attributes (MSG_PRIVATE, MSG_READ, etc. flags)
-    ulong   offset; // byte offset of message header in header file
-    ulong   number; // message serial number (1 based)
-    time_t  time;   // import date/time stamp (Unix format)
-
-    } idxrec_t;
-
-
-Example file dump (16 messages starting with message number 15):
----------------------------------------------------------------
-000000    36 4F 13 07 2A 77 00 00   20 00 00 00 0F 00 00 00    6O..*w.. .......
-000010    BE 62 76 2C 36 4F 46 0A   7F B2 00 00 20 01 00 00    �bv,6OF.�.. ...
-000020    10 00 00 00 C7 29 78 2C   36 4F 70 6F 46 FF 00 00    ....�)x,6OpoF�..
-000030    20 02 00 00 11 00 00 00   AD D3 7A 2C 70 6F 13 07     .......��z,po..
-000040    46 FF 00 00 20 03 00 00   12 00 00 00 D6 F8 7F 2C    F�.. .......��,
-000050    36 4F E1 EA E7 E9 00 00   20 04 00 00 13 00 00 00    6O����.. .......
-000060    1E 7B 85 2C 37 0D 2E DF   4D 79 00 00 20 05 00 00    .{�,7..�My.. ...
-000070    14 00 00 00 5C E1 A1 2C   90 54 2D 5A 86 62 00 00    ....\�,�T-Z�b..
-000080    20 06 00 00 15 00 00 00   39 2E A2 2C 70 6F 1A 8B     .......9.�,po.�
-000090    46 FF 00 00 20 07 00 00   16 00 00 00 D0 7B A8 2C    F�.. .......�{�,
-0000A0    2E DF 1A 8B 4D 79 00 00   20 08 00 00 17 00 00 00    .�.�My.. .......
-0000B0    FF 7B A8 2C B4 D9 35 7C   23 B1 00 00 20 09 00 00    �{�,��5|#�.. ...
-0000C0    18 00 00 00 CE D4 BA 2C   36 4F BC D8 B2 E7 00 00    ....�Ժ,6O�ز�..
-0000D0    20 0A 00 00 19 00 00 00   14 5F C3 2C BA A8 4E B0     ........_�,��N�
-0000E0    67 76 00 00 20 0B 00 00   1A 00 00 00 6F 89 C3 2C    gv.. .......o��,
-0000F0    36 4F 0C 01 19 9C 00 00   20 0C 00 00 1B 00 00 00    6O...�.. .......
-000100    F8 30 C6 2C 36 4F FA 48   0E 55 00 00 20 0D 00 00    �0�,6O�H.U.. ...
-000110    1C 00 00 00 6A 94 D3 2C   36 4F F1 CE CF A2 00 00    ....j��,6O��Ϣ..
-000120    20 0E 00 00 1D 00 00 00   53 DB D5 2C 8D A6 21 CE     .......S��,��!�
-000130    F7 AB 00 00 20 0F 00 00   1E 00 00 00 31 29 DC 2C    ��.. .......1)�,
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           18               Index (*.SID) File Format
-
-
-Field descriptions:
-------------------
-To:
-The 'To' field is the CRC-16 of the name of the intended recipient agent of
-this message or the intended recipient's user number. If the CRC is stored, the
-text must be converted to lower case (A-Z changed to a-z) before the CRC is
-calculated. If the message is forwarded to another agent, the original or new
-index record must be changed to contain the CRC-16 of the new recipient name or
-user number. This field must always contain the recipient user number for local
-e-mail on a Synchronet BBS. Outbound netmail stored in the Synchronet local
-e-mail message base will contain 0 in this field.
-
-From:
-This field, similar to the 'To' field, contains the CRC-16 of the name of the
-sending agent of this message or the sender's user number. If the CRC is
-stored, the text must be converted to lower case (A-Z changed to a-z) before
-the CRC is calculated. If the message is forwarded to another agent, the
-original or new index record must be changed to contain the CRC-16 of the new
-sender name or user number. If the message was imported into the local e-mail
-message base on a Synchronet BBS via netmail, this field will contain 0.
-
-Subj:
-The 'Subj' field contains the CRC-16 of the message's subject. The subject
-must be converted to lower case (A-Z changed to a-z) and all preceeding
-"re: "'s and "re:"'s removed before calculating the CRC-16.
-
-Attr:
-This ushort is a bit field of the specific attributes for this message.
-It is a clone of the 'attr' element of the msghdr_t structure.
-
-Offset:
-This ulong is the offset (in bytes) in the header file for this message's
-header record.
-
-Number:
-This ulong is the serial number of this message. Valid values are 1 through
-0xffffffff. No two index records in the same message base may have the same
-message number. All index records must have sequential, but not necessarily
-consequetive, message numbers.
-
-Time:
-This field is the date/time stamp the message was imported to or posted in
-the message base. It is a clone of the 'when_imported.time' element of the
-msghdr_t structure.
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           19               Index (*.SID) File Format
-
-
-Header File (*.SHD)
-===================
-
-Each SMB header file is made up of two distinct sections: base header records
-and message header records (usually the bulk of the file).
-
-Base Header Records:
--------------------
-Base header records are blocks of data that apply to the entire message base
-and are of variable length. This specification defines only one base header
-record, the "Status info" (smbstatus_t) record. This status info record must be
-the first base header record in the file and must be modified if additional
-base header records are added.
-
-Additional header records allow other developers to store configuration and
-status information particular to their application needs. It also allows for
-future header record definitions as part of this specification without causing
-backward compatibility issues.
-
-Each base header record contains a fixed length portion (smbhdr_t) and an
-optional variable length portion.
-
-Whenever a base header record is read or updated (written), it must first
-be successfully locked and subsequently unlocked.
-
-The first base header record (Status Info) is used as a semaphore when writing
-to the message index (.SID) file and, when using the Hyper Allocation storage
-method, writing to the message data (.SDT) file. This record must be
-succesfully locked before writing and subsequently unlocked. This is to insure
-that multiple applications simultaneously writing to the same message base
-does result in corrrupted data.
-
-
-Message Header Records:
-----------------------
-Following the last base header record is the first message header record. Each
-header record is stored in one or more 256 byte blocks. There must be exactly
-one active message header record for every index record in the index file.
-(Note: This does not include deleted message headers that have not been
-overwritten by a new message header).
-
-Each message header record contains a fixed length portion (msghdr_t), a list
-of zero or more fixed length data fields (dfield_t), and a list of three or
-more variable length header fields (hfield_t).
-
-The value of the data stored in the zero or more unused bytes of the last
-header record block have an undefined value, though whenever possible
-developers should initialize to binary zero for human readability.
-
-Whenever a message header record is read or updated (written), it must first
-be successfully locked and subsequently unlocked.
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           20              Header File (*.SHD) Format
-
-
-Base Header Record (Fixed Portion):
-----------------------------------
-C example:
-
-typedef struct {
-
-    uchar   id[4];          // text or binary unique hdr ID
-    ushort  version;        // version number (initially 100h for 1.00)
-    ushort  length;         // length including this struct
-
-    } smbhdr_t;
-
-
-Base Header Record Field Descriptions:
--------------------------------------
-Id:
-This is a four byte unique ID identifying the type of the base header record.
-The bytes may contain any value, but printable ASCII characters are preferred.
-The only ID defined in this specification is "SMB^Z" used by the Status Info
-base header record.
-
-Version:
-This is a version number of the base header record type. Base header records
-of different versions may have different formats or contain different
-information. This is to aid the application in determining if the record
-is pertinent and if so, to what degree. The Status Info base header record
-uses this version field to define the version of the format for the entire
-message base (currently 0x121 for version 1.21).
-
-Length:
-This is entire length in bytes of this header record (including both fixed
-and variable portions).
-
-
-Base Header #1 (Status info) Record (Variable Portion):
-------------------------------------------------------
-C example:
-
-typedef struct {
-
-    ulong   last_msg;       // last message number posted or imported
-    ulong   total_msgs;     // total messages currently in message base
-    ulong   header_offset;  // byte offset to first header record
-    ulong   max_crcs;       // Maximum number of CRCs to keep in history
-    ulong   max_msgs;       // Maximum number of messages to keep in base
-    ushort  max_age;        // Maximum age of messages (days) to keep in base
-    ushort  attr;           // Attribute bits
-
-    } smbstatus_t;
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           21              Header File (*.SHD) Format
-
-
-Base Header #1 (Status Info) Record (Variable Portion) Field Descriptions:
--------------------------------------------------------------------------
-Last_msg:
-This is the serial number of the last message imported or posted into this
-message base. The index, header, and data records for this message may possibly
-not exist (due to deletion). This field is used for determining the message
-number to give to a new message being imported or posted into this message
-base. This field must be updated for every message added to the message base.
-
-Total_msgs:
-This is the total number of active messages currently in the message base.
-This number should match the number of records in the index (.SID) file
-and active header records in the header (.SHD) file. This field must be
-updated whenever a message is added to or removed from the message base.
-
-Header_offset:
-This is the byte offset to the first message header record. It is useful
-for skipping all the base header records and going directly to the first
-message header record.
-
-Max_crcs:
-This is the maximum number of message CRCs to store in the CRC history (.SCH)
-file for duplicate message checking. If this field contains 0, then duplicate
-message checking is disabled.
-
-Max_msgs:
-This is the preferred maximum number of messages to keep in this message
-base as specified by the system operator. It is used by maintenance programs
-that trim the message base down by removing old messages. This field should
-be ignored by applications importing or posting messages allowing them to
-exceed this maximum at will.
-
-Max_age:
-This field is the maximum age (in days) of messages to keep in the message
-base. It is used by maintenance programs to purge out-dated messages from
-the message base.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           22              Header File (*.SHD) Format
-
-
-Attr:
-This is a bit field containing specific attributes (or flags) that may define
-the way messages are stored or retrieved from the this message base. The
-following attributes are defined:
-
-    SMB_EMAIL       (1<<0)
-
-    Indicates the message base is specifically for messages to or from local
-    users. When this bit is set, the idxrec.to and idxrec.from fields will
-    contain the user numbers (or 0 for non-user destination/source) instead of
-    the CRC-16 of the agent name.
-
-    SMB_HYPERALLOC  (1<<1)
-
-    Indicates the message base uses the Hyper Allocation storage method. This
-    bit should not be cleared by an application without first deleting all the
-    messages in the message base. This is due to the fact the Hyper Allocation
-    is not downward compatible with the Self-packing and Fast Allocation
-    storage methods.
-
-When used with Synchronet BBS software, a message base must NOT have both of
-the above attributes set. The only message base that should have the SMB_EMAIL
-attribute set is the DATA\MAIL message base.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           23              Header File (*.SHD) Format
-
-
-Base Header #1 (Status info) Record Contents:
---------------------------------------------
-smbhdr.id="SMB\x1a";        // SMB^Z
-smbhdr.version=0x121;       // v1.21
-smbhdr.length=sizeof(smbhdr_t)+sizeof(smbstatus_t); smbstatus_t status;
-
-
-Additional Base Headers:
------------------------
-Additional headers from developers must have initial 8 bytes in smbhdr_t
-format, length must include size of smbhdr_t, and header_offset of smbstatus_t
-must be changed to include the size of the additional header(s).
-
-
-Example file dump (base header portion only):
---------------------------------------------
-000000    53 4D 42 1A 20 01 20 00   F4 01 00 00 F4 01 00 00    SMB. . .�...�...
-000010    20 00 00 00 D0 07 00 00   D0 07 00 00 00 00 00 00     ...�...�.......
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           24              Header File (*.SHD) Format
-
-
-Message Header Record (Fixed portion):
--------------------------------------
-C example:
-
-typedef struct {
-
-    uchar   id[4];          // SHD^Z (same for all types and versions)
-    ushort  type;           // Message type (this is the definition of type 0)
-    ushort  version;        // Version of type (initially 100h for 1.00)
-    ushort  length;         // Total length of fixed portion + all fields
-    ushort  attr;           // Attributes (bit field) (duplicated in SID)
-    ulong   auxattr;        // Auxillary attributes (bit field)
-    ulong   netattr;        // Network attributes (bit field)
-    when_t  when_written;   // Date/Time message was originally created
-    when_t  when_imported;  // Date/Time message was imported (locally)
-    ulong   number;         // Message number (unique, not necessarily seq.)
-    ulong   thread_orig;    // Original message number in thread
-    ulong   thread_next;    // Next message in thread
-    ulong   thread_first;   // Number of first reply to this message
-    uchar   reserved[16];   // 16 reserved bytes for future use
-    ulong   offset;         // Offset for buffer into data file (0 or mod 256)
-    ushort  total_dfields;  // Total number of data fields
-
-    } msghdr_t;
-
-typedef struct {
-
-    ushort  type;           // See "Data Field Types" values
-    ulong   offset;         // Offset into buffer 
-    ulong   length;         // Length of data field in buffer
-
-    } dfield_t;
-
-typedef struct {
-
-    ushort  type;           // See "Header Field Types" for values
-    ushort  length;         // Length of buffer
-    uchar   dat[length];
-
-    } hfield_t;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           25              Header File (*.SHD) Format
-
-
-Example file dump (one header record, both fixed and variable length portions):
-------------------------------------------------------------------------------
-000020    53 48 44 1A 00 00 20 01   F5 00 00 00 00 00 00 00    SHD... .�.......
-000030    00 00 00 00 46 DB F7 2C   00 00 7D D7 29 2D 00 00    ....F��,..}�)-..
-000040    01 00 00 00 00 00 00 00   00 00 00 00 00 00 00 00    ................
-000050    00 00 00 00 00 00 00 00   00 00 00 00 00 00 00 00    ................
-000060    00 00 00 00 02 00 00 00   00 00 00 00 4A 01 00 00    ............J...
-000070    02 00 4A 01 00 00 53 00   00 00 00 00 13 00 4D 61    ..J...S.......Ma
-000080    72 69 61 6E 6E 65 20 4D   6F 6E 74 67 6F 6D 65 72    rianne Montgomer
-000090    79 30 00 0C 00 43 61 72   6F 6C 20 47 61 69 73 65    y0...Carol Gaise
-0000A0    72 60 00 07 00 46 61 72   6E 68 61 6D A4 00 14 00    r`...Farnham�...
-0000B0    31 3A 31 33 38 2F 31 30   32 2E 30 20 32 63 66 38    1:138/102.0 2cf8
-0000C0    30 35 37 36 A5 00 14 00   31 3A 33 34 33 2F 31 30    0576�...1:343/10
-0000D0    30 2E 30 20 32 63 66 33   62 39 30 61 A3 00 23 00    0.0 2cf3b90a�.#.
-0000E0    31 33 38 2F 31 30 32 20   31 20 32 37 30 2F 31 30    138/102 1 270/10
-0000F0    31 20 32 30 39 2F 32 30   39 20 31 30 33 2F 30 20    1 209/209 103/0 
-000100    33 35 35 02 00 02 00 02   00 03 00 08 00 01 00 8A    355............�
-000110    00 66 00 00 00 00 00 00   00 00 00 00 00 00 00 00    .f..............
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           26              Header File (*.SHD) Format
-
-
-Contents of example header:
---------------------------
-id                   SHD^Z
-type                 0000h
-version              0120h
-length               245
-attr                 0000h
-auxattr              00000000h
-netattr              00000000h
-when_written         Sat Nov 27 17:57:10 1993
-when_imported        Tue Jan 04 15:54:21 1994
-number               1
-thread_orig          0
-thread_next          0
-thread_first         0
-reserved[16]         
-offset               0
-total_dfields        2
-
-dfield[0].type       00h
-dfield[0].offset     0
-dfield[0].length     330
-dfield[1].type       02h
-dfield[1].offset     330
-dfield[1].length     83
-
-hfield[0].type       00h
-hfield[0].length     19
-hfield[0]_dat        Marianne Montgomery
-hfield[1].type       30h
-hfield[1].length     12
-hfield[1]_dat        Carol Gaiser
-hfield[2].type       60h
-hfield[2].length     7
-hfield[2]_dat        Farnham
-hfield[3].type       A4h
-hfield[3].length     20
-hfield[3]_dat        1:138/102.0 2cf80576
-hfield[4].type       A5h
-hfield[4].length     20
-hfield[4]_dat        1:343/100.0 2cf3b90a
-hfield[5].type       A3h
-hfield[5].length     35
-hfield[5]_dat        138/102 1 270/101 209/209 103/0 355
-hfield[6].type       02h
-hfield[6].length     2
-hfield[6]_dat        02 00
-hfield[7].type       03h
-hfield[7].length     8
-hfield[7]_dat        01 00 8A 00 66 00 00 00
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           27              Header File (*.SHD) Format
-
-
-Fixed Portion Field descriptions:
---------------------------------
-Id:
-This field (regardless of the header type or version) must always contain the
-the string "SHD^Z". This is to aid in the restoration of a corrupted header
-file and give a visual indication of the beginning of a new header record when
-viewing dumps of the header file.
-
-Type:
-This is the message header type. Only one type is currently defined by this
-specification (type 0). Any and all future header types will have the first
-4 fields (10 bytes) in the same format of type 0. This allows other types
-(with different lengths) to be skipped because the 4th field (length) will
-always be in the same position.
-
-Version:
-This is the version of this header type. This specification defines version
-1.21 of message header type 0 (stored as 121h).
-
-Length:
-This is the total length of this message header record (including both fixed
-and variable length portions, but NOT including unused block space).
-
-Attr:
-This is a bit field (16-bit) containing basic message attributes (flags) for
-this message. An exact duplicate of this field is stored in the index file as
-well. They must always match.
-
-Auxattr:
-This is a bit field (32-bit) containing the auxillary attributes (flags) for
-this message. The attributes stored in this variable are more specific in
-nature and less critical than those in the Attr field.
-
-Netattr:
-This is a bit field (32-bit) containing the network attributes (flags) for this
-message. The attributes stored in this variable are related solely to message
-networking.
-
-When_written:
-This is the date and time when the message was originally created.
-
-When_imported:
-This is the date and time when the message was posted on or imported into the
-local message system.
-
-Number:
-This is the message's unique serial number (from 1 to FFFFFFFFh). This field
-is duplicated in the index file. They must always match.
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           28              Header File (*.SHD) Format
-
-
-Thread_orig:
-If this message is a reply, then this field contains the number of the original
-message that was replied to. If this message was not a reply, this field will
-contain the value 0.
-
-Thread_next:
-If this message is a reply, and there are later replies to that message
-(the message number contained in the Thread_orig field), then this field will
-contain the number of the next reply in the chain. If this message is the only
-reply to the orignal message, this field will contain the value 0.
-
-Thread_first:
-If there are any replies to this message (after it has been posted), this field
-will contain the number of the first reply to this message. If there are no
-replies to this message, this field will contain the value 0.
-
-Reserved:
-Unused bytes, reserved for future definition in the message header type 0
-specification.
-
-Offset:
-The byte offset into the data file, specifying the start of the buffer for
-all data associated with this message. This value must be either 0 or modula
-256. When retrieving the actual data portion of data fields, the physical
-offset into the file will be the offset of the message data buffer (this field)
-plus the offset of the individual data field (msghdr_t.offset+dfield_t.offset).
-
-Total_dfields:
-This field contains the total number of data fields associated with this
-message. The value of this field must match the actual number of data fields
-stored in the header (dfield_t data types following the fixed portion of the
-message header).
-
-
-Variable Portion Field descriptions:
------------------------------------
-See the Header Field Type and Data Field Type sections for the descriptions
-of the values contained in these fields.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           29              Header File (*.SHD) Format
-
-
-Message Header Block Allocation (*.SHA)
-=======================================
-
-If this message base uses the Hyper Allocation storage method (the
-SMB_HYPERALLOC bit is set in the smbstatus_t.attr field), then this file is
-not created or used.
-
-This file contains no header or signature data. Each byte (uchar) in the file
-specifies the allocation state of the corresponding 256 byte block in the
-header (*.SHD) file. A value of 0 indicates a free header block, and a value of
-1 indicates an allocated block. Other non-zero values are undefined.
-
-This file must always be opened DENY ALL (non-shareable).
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           30   Header Allocation File (*.SHA) Format
-
-
-Message Data (*.SDT)
-====================
-
-This file contains no header or signature data. It contains the text and other
-embedded data for the messages in a single message base. The data for each
-message always begins on a 256 byte block boundary. The data in the unused
-portion of a data block is undefined, but should be initialized to NULL
-whenever possible.
-
-This file must always be opened DENY NONE (shareable).
-
-Data fields of type TEXT_BODY and TEXT_TAIL must have all trailing white space
-and control characters removed (i.e. the last character of the data record
-must be in the range 21h to FFh). The only exception to this rule, is if the
-TEXT_BODY is terminated with multiple contiguous CRLFs, only the last CRLF
-should be removed. A CRLF should always be appended to the text data when it is
-displayed.
-
-When reading from this file, it is a good idea to make sure the message header
-for the data being read is currently locked (though no single message header
-should be locked for extended durations of time). This will insure that no
-other application will write to this portion of the file while it's being
-read (read from disk, not displayed).
-
-When using the Hyper Allocation storage method, the Status Info message base
-header must be successfully locked before writing to this file and subsequently
-unlocked.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           31                Data File (*.SDT) Format
-
-
-Message Data Block Allocation (*.SDA)
-=====================================
-
-If this message base uses the Hyper Allocation storage method (the
-SMB_HYPERALLOC bit is set in the smbstatus_t.attr field), then this file is
-not created or used.
-
-This file contains no header or signature data. Each word (ushort) in the file
-specifies the allocation state of the corresponding 256 byte block in the data
-(*.SDT) file. A value of 0 indicates a free block, and a non-zero value
-indicates the number of message header records associated with this message
-data (most often 1). Each block can be used by up to 65,535 header records.
-
-This file must always be opened DENY ALL (non-shareable).
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           32     Data Allocation File (*.SDA) Format
-
-
-CRC history for duplicate message checking (*.SCH)
-==================================================
-
-This file is optional and contains no header or signature data. Each long word
-(ulong) in the file contains a CRC-32 of previously posted/imported messages.
-These CRCs can be used to check a candidate message for posting/import to be
-sure the message isn't a duplicate created by human or program error. The
-maximum number of CRCs to store is defined in the first message base header
-record (smbstatus_t.max_crcs).
-
-The CRC is calculated on the first TEXT_BODY data field before any translations
-are applied (e.g. encoding, compression, encryption).
-
-This file must always be opened DENY ALL (non-shareable).
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           33         CRC History File (*.SCH) Format
-
-
-Header Field Types:
-==================
-
-These are the defined valid values for hfield_t.type:
-
-Name     : SENDER
-Value    : 00h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : Yes
-Summary  : Name of agent that sent this message
-
-If blank (0 length or nulstr), assumed "Anonymous". If multiple SENDER fields
-exist, then the message has been forwarded and the order of the fields in the
-record must match the forwarding order (chronologically). When forwarding a
-message, the original SENDER field should be left intact and new SENDER,
-FORWARDED, and RECIPIENT fields added to the end of the record.
-
-
-Name     : SENDERAGENT
-Value    : 01h
-Data     : ushort
-Multiple : Yes, order significant
-Required : No
-Default  : AGENT_PERSON or previous SENDERAGENT if exists
-Summary  : Type of agent that sent this message
-
-If multiple SENDER fields exist, then the message has been forwarded. If any of the
-forwarding agents is of a type other than AGENT_PERSON, then this field must
-follow that SENDER field to specify the agent type.
-
-Name     : SENDERNETTYPE
-Value    : 02h
-Data     : ushort
-Multiple : Yes, order significant
-Required : No
-Default  : NET_NONE or previous SENDERNETTYPE if exists
-Summary  : Type of network message was sent from
-
-If multiple SENDERNETADDR fields are included, a SENDERNETTYPE field should be
-included before each to determine what data type the address is stored in.
-
-Name     : SENDERNETADDR
-Value    : 03h
-Data     : undef
-Multiple : Yes, order significant
-Required : No
-Default  : Previous SENDERNETADDR if exists
-Summary  : Network address for agent that sent this message
-
-The SENDERNETTYPE field indicates the data type of this field. If the
-SENDERNETTYPE is of type NET_INTERNET, the local-part of the Internet
-address is optional. If the local-part separator character ('@') is omitted,
-the SENDER field is assumed to be the local-part of the address.
-
-_______________________________________________________________________________
-Synchronet                           34                      Header Field Types
-
-
-
-Name     : SENDEREXT
-Value    : 04h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : Previous SENDEREXT if exists
-Summary  : Extension of sending agent
-
-This field is useful for storing the sending agent's extension, when the
-agent's extension binds more tightly than the agent's name.
-
-For example, Synchronet Multinode BBS Software stores local e-mail with the
-sending and receiving agent's user numbers stored as their respective
-extensions. This is done so that if a user name changes for some reason,
-messages will not "disappear" from the user's mail box.
-
-If the SMB_EMAIL status header attribute is set, then the "From" field in the
-index must contain the binary value of this field rather than the CRC-16 of the
-SENDER (name) field.
-
-Name     : SENDERPOS
-Value    : 05h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : Previous SENDERPOS if exists
-Summary  : Position of sending agent
-
-Primarily for documentary purposes, this field contains the position of the
-sending agent (i.e. President, Sysop, C.E.O., MIS Director, etc).
-
-It can also be useful for getting a message or reply to the intended
-recipient when the agent name is not located or is unknown, but the position
-of the agent is known and specified.
-
-Name     : SENDERORG
-Value    : 06h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : Previous SENDERORG if exists
-Summary  : Organization name of sending agent
-
-Primarily for documentary purposes, this field contains the organization to
-which the sending agent belongs (i.e. Microsoft, Joe's BBS, SoCal User's Group,
-etc).
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           35                      Header Field Types
-
-
-Name     : AUTHOR
-Value    : 10h
-Data     : ASCII
-Multiple : Yes
-Required : No
-Default  : First SENDER
-Summary  : Name of agent that created this message
-
-This field can only be added by the process that originally creates the
-message. It should not be included if same as first SENDER field. If multiple
-AUTHOR fields exist, then the message was created by multiple agents and is
-considered valid. The order of multiple AUTHOR fields in the record is not
-significant.
-
-Name     : AUTHORAGENT
-Value    : 11h
-Data     : ushort
-Multiple : Yes, order significant
-Required : No
-Default  : SENDERAGENT or previous AUTHORAGENT if exists
-Summary  : Type of agent that created this message
-
-This field can only be added by the process that originally creates the
-message. It should not be included if same as first SENDERAGENT field. If
-multiple AUTHOR fields exist, then the message was created by multiple agents
-and if the agent type for any of the authors is other than AGENT_PERSON, an
-AUTHORAGENT field must follow to specify the agent type.
-
-Name     : AUTHORNETTYPE
-Value    : 12h
-Data     : ushort
-Multiple : Yes, order significant
-Required : No
-Default  : SENDERNETTYPE or previous AUTHORNETTYPE if exists
-Summary  : Type of network this author is member of
-
-Name     : AUTHORNETADDR
-Value    : 13h
-Data     : undef
-Multiple : Yes, order significant
-Required : No
-Default  : SENDERNETADDR or previous AUTHORNETADDR if exists
-Summary  : Network address of this author
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           36                      Header Field Types
-
-
-Name     : AUTHOREXT
-Value    : 14h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : SENDEREXT or previous AUTHOREXT if exists
-Summary  : Extension of this author
-
-Name     : AUTHORPOS
-Value    : 15h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : SENDERPOS or previous AUTHORPOS if exists
-Summary  : Position of this author
-
-Name     : AUTHORORG
-Value    : 16h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : SENDERORG or previous AUTHORORG if exists
-Summary  : Organization this author belongs to
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           37                      Header Field Types
-
-
-Name     : REPLYTO
-Value    : 20h
-Data     : ASCII
-Multiple : Yes, but only last is valid
-Required : No
-Default  : SENDER
-Summary  : Name of agent that replies should go to
-
-Name     : REPLYTOAGENT
-Value    : 21h
-Data     : ushort
-Multiple : Yes, but only last is valid
-Required : No
-Default  : SENDERAGENT
-Summary  : Type of agent that replies should go to
-
-Name     : REPLYTONETTYPE
-Value    : 22h
-Data     : ushort
-Multiple : Yes, but only last is valid
-Required : No
-Default  : SENDERNETTYPE
-Summary  : Type of network that replies should go to
-
-Name     : REPLYTONETADDR
-Value    : 23h
-Data     : undef
-Multiple : Yes, but only last is valid
-Required : No
-Default  : SENDERNETADDR
-Summary  : Network address that replies should go to
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           38                      Header Field Types
-
-
-Name     : REPLYTOEXT
-Value    : 24h
-Data     : ASCII
-Multiple : Yes, but only last is valid
-Required : No
-Default  : SENDEREXT
-Summary  : Extension of agent that replies should go to
-
-Name     : REPLYTOPOS
-Value    : 25h
-Data     : ASCII
-Multiple : Yes, but only last is valid
-Required : No
-Default  : SENDERPOS
-Summary  : Position of agent that replies should go to
-
-Name     : REPLYTOORG
-Value    : 26h
-Data     : ASCII
-Multiple : Yes, but only last is valid
-Required : No
-Default  : SENDERORG
-Summary  : Organization of agent that replies should go to
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           39                      Header Field Types
-
-
-Name     : RECIPIENT
-Value    : 30h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : Yes
-Default  : "All"
-Summary  : Name of agent to receive this message
-
-If multiple RECIPIENT fields exist, the message has been forwarded and for each
-additional RECIPIENT field (after the initial RECIPIENT), there should be a
-FORWARDED field. The order of the RECIPIENT fields in the record must match the
-order in which the message was sent and forwarded (chronologically).
-
-Name     : RECIPIENTAGENT
-Value    : 31h
-Data     : ushort
-Multiple : Yes, order significant
-Required : No
-Default  : AGENT_PERSON or previous RECIPIENTAGENT if exists
-Summary  : Type of agent to receive this message
-
-If multiple RECIPIENT fields exist, the message has been forwarded. If any of
-the recipient agents are of a type other than AGENT_PERSON, this field must
-follow the RECIPIENT field to specify the agent type.
-
-Name     : RECIPIENTNETTYPE
-Value    : 32h
-Data     : ushort
-Multiple : Yes, order significant
-Required : No
-Default  : NET_NONE or previous RECIPIENTNETTYPE if exists
-Summary  : Type of network to receive this message
-
-Name     : RECIPIENTNETADDR
-Value    : 33h
-Data     : undef
-Multiple : Yes, order significant
-Required : No
-Default  : Previous RECIPIENTNETADDR if exists
-Summary  : Address of network to receive this message
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           40                      Header Field Types
-
-
-Name     : RECIPIENTEXT
-Value    : 34h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : Previous RECIPIENTEXT if exists
-Summary  : Extension of agent to receive this message
-
-If SMB_EMAIL status header attribute is set, then the "To" field in the index
-must contain the binary value of this field rather than the CRC-16 of the
-RECIPIENT (name) field. This is the case specifically with the local e-mail
-message base on a Synchronet BBS.
-
-Name     : RECIPIENTPOS
-Value    : 35h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : Previous RECIPIENTPOS if exists
-Summary  : Position of agent to receive this message
-
-Name     : RECIPIENTORG
-Value    : 36h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : Previous RECIPIENTORG if exists
-Summary  : Type of agent to receive this message
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           41                      Header Field Types
-
-
-Name     : FORWARDTO
-Value    : 40h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Summary  : Name of agent this message is to be forwarded to
-
-Name     : FORWARDTOAGENT
-Value    : 41h
-Data     : ushort
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTAGENT or previous FORWARDTOAGENT if exists
-Summary  : Type of agent this message is to be forwarded to
-
-Name     : FORWARDTONETTYPE
-Value    : 42h
-Data     : ushort
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTNETTYPE or previous FORWARDTONETTYPE if exists
-Summary  : Type of network this message is to be forwarded to
-
-Name     : FORWARDTONETADDR
-Value    : 43h
-Data     : undef
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTNETADDR or previous FORWARDTONETADDR if exists
-Summary  : Network address this message is to be forwarded to
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           42                      Header Field Types
-
-
-Name     : FORWARDTOEXT
-Value    : 44h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTEXT or previous FORWARDTOEXT if exists
-Summary  : Extension of agent this message is to be forwarded to
-
-Name     : FORWARDTOPOS
-Value    : 45h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTPOS or previous FORWARDTOPOS if exists
-Summary  : Position of agent this message is to be forwarded to
-
-Name     : FORWARDTOORG
-Value    : 46h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTORG or previous FORWARDTOORG if exists
-Summary  : Organization of agent this message is to be forwarded to
-
-Name     : FORWARDED
-Value    : 48h
-Data     : when_t
-Multiple : Yes, order significant
-Required : Yes, if forwarded
-Summary  : Date/Time this message was forwarded to another agent
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           43                      Header Field Types
-
-
-Name     : RECEIVEDBY
-Value    : 50h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : Yes, if receiving agent is other than RECIPIENT
-Summary  : Name of agent that received this message
-
-Name     : RECEIVEDBYAGENT
-Value    : 51h
-Data     : ushort
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTAGENT or previous RECEIVEDBYAGENT if exists
-Summary  : Type of agent that received this message
-
-Name     : RECEIVEDBYNETTYPE
-Value    : 52h
-Data     : ushort
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTNETTYPE or previous RECEIVEDBYNETTYPE if exists
-Summary  : Type of network that received this message
-
-Name     : RECEIVEDBYNETADDR
-Value    : 53h
-Data     : undef
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTNETADDR or previous RECEIVEDBYNETADDR if exists
-Summary  : Network address that received this message
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           44                      Header Field Types
-
-
-Name     : RECEIVEDBYEXT
-Value    : 54h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTEXT or previous RECEIVEDBYEXT if exists
-Summary  : Extension of agent that received this message
-
-Name     : RECEIVEDBYPOS
-Value    : 55h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTPOS or previous RECEIVEDBYPOS if exists
-Summary  : Position of agent that received this message
-
-Name     : RECEIVEDBYORG
-Value    : 56h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTORG or previous RECEIVEDBYORG if exists
-Summary  : Organization of agent that received this message
-
-Name     : RECEIVED
-Value    : 58h
-Data     : when_t
-Multiple : Yes, order significant
-Required : Yes, if received
-Default  : NULL
-Summary  : Date/Time this message was received
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           45                      Header Field Types
-
-
-Name     : SUBJECT
-Value    : 60h
-Data     : ASCII
-Multiple : No
-Required : Yes, but may be blank (0 length or nulstr)
-Summary  : Subject/title of message
-
-Name     : SUMMARY
-Value    : 61h
-Data     : ASCII
-Multiple : No
-Required : No
-Summary  : Summary of message contents, created by AUTHOR
-
-Name     : COMMENT
-Value    : 62h
-Data     : ASCII
-Multiple : Yes
-Required : No
-Summary  : Comment about this message, created by SENDER
-
-This field is useful for adding notes to a message when forwarding to a new
-recipient.
-
-Name     : CARBONCOPY
-Value    : 63h
-Data     : ASCII
-Multiple : Yes
-Required : No
-Summary  : List of agents this message was also sent to
-
-This field is optional and only for the use of notifying the recipient of who
-else received the message.
-
-Name     : GROUP
-Value    : 64h
-Data     : ASCII
-Multiple : Yes
-Required : No
-Summary  : Name of group of users to receive message on recipient system
-
-This field is used when sending to a group name across a network, where the
-group can be expanded into multiple header records for each agent on the
-destination system.
-
-Name     : EXPIRATION
-Value    : 65h
-Data     : when_t
-Multiple : No
-Required : No
-Summary  : Date/Time that this message will expire
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           46                      Header Field Types
-
-
-Name     : PRIORITY
-Value    : 66h
-Data     : ulong
-Multiple : No
-Required : No
-Default  : 0
-Summary  : Message priority (0 is lowest, FFFFFFFFh is highest)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           47                      Header Field Types
-
-
-Name     : FILEATTACH
-Value    : 70h
-Data     : ASCII
-Multiple : Yes
-Required : No
-Summary  : Name/file specification of attached file(s)
-
-Name of attached file(s). Wildcards allowed. MSG_FILEATTACH attribute must be
-set. If the MSG_FILEATTACH attribute is set but this field is not included,
-the SUBJECT field is assumed to be the filename(s).
-
-Name     : DESTFILE
-Value    : 71h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Summary  : Destination name for attached file(s)
-
-Wildcards allowed. FILEATTACH field must also be included.
-
-Name     : FILEATTACHLIST
-Value    : 72h
-Data     : ASCII
-Multiple : Yes
-Required : No
-Summary  : Name of ASCII list of attached filenames
-
-Wildcards not allowed in ASCII list filename. Wildcards allowed in ASCII list.
-MSG_FILEATTACH attribute must be set.
-
-Name     : DESTFILELIST
-Value    : 73h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Summary  : Name of ASCII list of destination filenames
-
-Wildcards not allowed in ASCII list filename. Wildcards allowed in ASCII list.
-
-Name     : FILEREQUEST
-Value    : 74h
-Data     : ASCII
-Multiple : Yes
-Required : No
-Summary  : Name of requested file
-
-Wildcards allowed. MSG_FILEREQUEST attribute must be set
-
-Name     : FILEPASSWORD
-Value    : 75h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Summary  : Password for FILEREQUEST
-
-_______________________________________________________________________________
-Synchronet                           48                      Header Field Types
-
-
-
-Name     : FILEREQUESTLIST
-Value    : 76h
-Data     : ASCII
-Multiple : Yes
-Required : No
-Summary  : Name of ASCII list of filenames to request
-
-Wildcards allowed.
-
-Name     : FILEPASSWORDLIST
-Value    : 77h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Summary  : Name of ASCII list of passwords for FILEREQUESTLIST
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           49                      Header Field Types
-
-
-Name     : IMAGEATTACH
-Value    : 80h
-Data     : mattach_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of attached image file for display
-
-MSG_FILEATTACH attribute must be set. See Image Types for valid
-mattach_t.type values.
-
-Name     : ANIMATTACH
-Value    : 81h
-Data     : mattach_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of attached graphical animation file for display
-
-MSG_FILEATTACH attribute must be set. See Animation Types for valid
-mattach_t.type values.
-
-Name     : FONTATTACH
-Value    : 82h
-Data     : mattach_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of attached font definition file
-
-MSG_FILEATTACH attribute must be set. See Font Types for valid mattach_t.type
-values.
-
-Name     : SOUNDATTACH
-Value    : 83h
-Data     : mattach_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of attached sound file for playback
-
-MSG_FILEATTACH attribute must be set. See Sound Types for valid mattach_t.type
-values.
-
-Name     : PRESENTATTACH
-Value    : 84h
-Data     : mattach_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of attached presentation definition file
-
-MSG_FILEATTACH attribute must be set. See Present Types for valid
-mattach_t.type values.
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           50                      Header Field Types
-
-
-Name     : VIDEOATTACH
-Value    : 85h
-Data     : vattach_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of attached interleaved video/sound file
-
-MSG_FILEATTACH attribute must be set. See Video Types for valid
-vattach_t.type values and Video Compression Types for valid vattach_t.comp
-values.
-
-Name     : APPDATAATTACH
-Value    : 86h
-Data     : mattach_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Name of attached application data file for process/display
-
-MSG_FILEATTACH attribute must be set. See Application Data Types for valid
-mattach_t.type values.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           51                      Header Field Types
-
-
-Name     : IMAGETRIGGER
-Value    : 90h
-Data     : typestr_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of image file to trigger for display
-
-See Image Types for valid typestr_t.type values.
-
-Name     : ANIMTRIGGER
-Value    : 91h
-Data     : typestr_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of animation file to trigger for display
-
-See Animation Types for valid typestr_t.type values.
-
-Name     : FONTTRIGGER
-Value    : 92h
-Data     : typestr_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of font definition file to trigger
-
-See Font Types for valid typestr_t.type values.
-
-Name     : SOUNDTRIGGER
-Value    : 93h
-Data     : typestr_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of sound file to trigger for playback
-
-See Sound Types for valid typestr_t.type values.
-
-Name     : PRESENTTRIGGER
-Value    : 94h
-Data     : typestr_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of presentation definition file to trigger
-
-See Present Types for valid typestr_t.type values.
-
-Name     : VIDEOTRIGGER
-Value    : 95h
-Data     : typestr_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of interleaved video/sound file to trigger
-
-See Video Types for valid typestr_t.type values.
-
-
-_______________________________________________________________________________
-Synchronet                           52                      Header Field Types
-
-
-Name     : APPDATATRIGGER
-Value    : 96h
-Data     : typestr_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of application data file to trigger
-
-See Application Data Types for valid typestr_t.type values.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           53                      Header Field Types
-
-
-Name     : FIDOCTRL
-Value    : A0h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Format   : keyword ":" [" "] appdata
-Summary  : FTS/FSC-compliant control information line
-
-Any FidoNet FTS/FSC-compliant control information ("kludge") line that
-does not have an equivalent representation here. All data not unique to the
-actual control line, including leading and trailing white space, Ctrl-A (01h)
-character and terminating CR must be ommited. Defined in FTS-0001.
-
-Name     : FIDOAREA
-Value    : A1h
-Data     : ASCII
-Multiple : No
-Required : No
-Summary  : FTN EchoMail conference name.
-
-Defined in FTS-0004.
-
-Name     : FIDOSEENBY
-Value    : A2h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Format   : net"/"node [" "[net"/"]node] [...]
-Summary  : Used to store two-dimensional (net/node) SEEN-BY information
-
-Often used in FTN EchoMail environments. Only the actual SEEN-BY data is stored
-and SEEN-BY: is stripped along with any leading and trailing white space
-characters. Defined in FTS-0004.
-
-Name     : FIDOPATH
-Value    : A3h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Format   : net"/"node [" "[net"/"]node] [...]
-Summary  : Used to store two-dimensional (net/node)
-
-Defined in FTS-0004. ^aPATH: is stripped along with any leading and trailing
-white space characters.
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           54                      Header Field Types
-
-
-Name     : FIDOMSGID
-Value    : A4h
-Data     : ASCII
-Multiple : No
-Required : No
-Format   : origaddr " " serialno
-Summary  : MSGID field as specified in FTS-0009.
-
-Name     : FIDOREPLYID
-Value    : A5h
-Data     : ASCII
-Multiple : No
-Required : No
-Format   : origaddr " " serialno
-Summary  : REPLY field as specified in FTS-0009.
-
-Name     : FIDOPID
-Value    : A6h
-Data     : ASCII
-Multiple : No
-Required : No
-Format   : pID " " version [" "serialno]
-Summary  : Indentification string of program that created this message
-
-Defined FSC-0046. "^aPID:" and any white space is not included.
-
-Name     : FIDOFLAGS
-Value    : A7h
-Data     : ASCII
-Multiple : Yes
-Required : No
-Summary  : Used to store the FTN FLAGS kludge information
-
-Note that all FLAG options that have binary representation in the message
-header must be removed from the FLAGS string prior to storing it. Only the
-actual flags option string is stored and ^aFLAGS is stripped along with any
-leading and trailing white space characters. Defined in FSC-0053.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           55                      Header Field Types
-
-
-Name     : RFC822HEADER
-Value    : B0h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Format   : field-name ":" [field-body] [CRLF]
-Summary  : Undefined RFC-822 header field
-
-Internet Message storage format, that does not have an equivalent
-representation here. Folded header fields are allowed. Terminating CRLF may be
-ommited.
-
-Name     : RFC822MSGID
-Value    : B1h
-Data     : ASCII
-Multiple : No
-Required : No
-Format   : "<" addr-spec ">"
-Summary  : Message-ID field as specified in RFC-822.
-
-Name     : RFC822REPLYID
-Value    : B2h
-Data     : ASCII
-Multiple : No
-Required : No
-Format   : "<" addr-spec ">"
-Summary  : In-Reply-To field as specified in RFC-822.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           56                      Header Field Types
-
-
-Name     : UNKNOWN
-Value    : F0h
-Data     : undef
-Multiple : Yes
-Required : No
-Summary  : Undefined header field of undefined type
-
-This field is useful for retaining binary header fields (that do not have an
-equivalent representation here) between message storage formats.
-
-Name     : UNKNOWNASCII
-Value    : F1h
-Data     : ASCII
-Multiple : Yes
-Required : No
-Summary  : Undefined header field of type ASCII
-
-This field is useful for retaining ASCII header fields (that do not have an
-equivalent representation here) between message storage formats.
-
-Name     : UNUSED
-Value    : FFh
-Data     : undef
-Multiple : Yes
-Required : No
-Summary  : Unused (deleted) header field
-
-The data contained in this header field is of an unknown type and should not be
-processed.
-
-
-Note:
-----
-Specifically, not defined are the values F000h through FFFFh. These values
-are to be used for user or system defined header fields. Digital Dynamics
-requests that any developers or organizations that wish to have additional
-header fields added to this specification notify Digital Dynamics through any
-of the contact methods listed at the beginning of this document.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           57                      Header Field Types
-
-
-Data Field Types:
-================
-
-These are the defined valid values for dfield_t.type:
-
-
-Val Name                Data        Description
---- ----                ----        -----------
-00h TEXT_BODY           mtext_t     Displayable text (body of message).
-                                    Included in duplicate message checking.
-                                    All terminating white space and control
-                                    characters are to be truncated from data
-                                    (except when multiple contiguous CRLFs
-                                    terminate the text, only the last CRLF
-                                    is removed).
-
-01h TEXT_SOUL           mtext_t     Non-displayed text.
-                                    Not normally displayed. Not necessarily
-                                    displayable.
-                                    Included in duplicate message checking.
-
-02h TEXT_TAIL           mtext_t     Displayable text (tag/tear/origin lines,
-                                    etc).
-                                    Not included in duplicate message checking.
-                                    All terminating white space and control
-                                    characters are to be truncated from data.
-
-03h TEXT_WING           mtext_t     Non-displayed text.
-                                    Not normally displayed. Not necessarily
-                                    displayable.
-                                    Not included in duplicate message checking.
-
-10h FTEXT_BODY          ftext_t     Formatted equivalent of TEXT_BODY to be
-                                    displayed in place of TEXT_BODY if format
-                                    is supported. See Image Types for valid
-                                    values of ftext_t.type.
-
-12h FTEXT_TAIL          ftext_t     Formatted equivalent of TEXT_TAIL to be
-                                    displayed in place of TEXT_TAIL if format
-                                    is supported. See Image Types for valid
-                                    values of ftext_t.type.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           58                        Data Field Types
-
-
-20h IMAGEEMBED          membed_t    Type and data of embedded raster image file
-                                    for display.
-                                    See Image Types for valid membed.type
-                                    values.
-
-21h ANIMEMBED           membed_t    Type and data of embedded graphical
-                                    animation file for display.
-                                    See Animation Types for valid membed.type
-                                    values.
-
-22h FONTEMBED           membed_t    Type and data of embedded font definition
-                                    file. See Font Types for valid
-                                    membed_t.type values.
-
-23h SOUNDEMBED          membed_t    Type and data of embedded sound file for
-                                    playback.
-                                    See Sound Types for valid membed_t.type
-                                    values.
-
-24h PRESENTEMBED        membed_t    Type and data of embedded presentation
-                                    definition file.
-                                    See Present Types for valid membed_t.type
-                                    values.
-
-25h VIDEOEMBED          vembed_t    Type and data of embedded video/sound file
-                                    for playback.
-                                    See Video Types for valid vembed_t.type
-                                    values.
-                                    See Video Compression Types for valid
-                                    vembed_t.comp values.
-
-26h APPDATAEMBED        membed_t    Type and data of embedded application data
-                                    file for process/display.
-                                    See Application Data Types for valid
-                                    membed_t.type values.
-
-FFh UNUSED              undef       Space allocated for future update/expansion
-
-
-Specifically, not defined are the values F000h through FFFFh. These values
-are to be used for user or system defined data fields. Digital Dynamics
-requests that any developers or organizations that wish to have additional
-data fields added to this specification notify Digital Dynamics through any
-of the contact methods listed at the beginning of this document.
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           59                        Data Field Types
-
-
-Message Attributes:
-------------------
-
-These are the bit values for idxrec_t.attr and msghdr_t.attr:
-
-MSG_PRIVATE         (1<<0)  // Private
-MSG_READ            (1<<1)  // Read by addressee
-MSG_PERMANENT       (1<<2)  // Permanent
-MSG_LOCKED          (1<<3)  // Msg is locked, no editing possible
-MSG_DELETE          (1<<4)  // Msg is marked for deletion
-MSG_ANONYMOUS       (1<<5)  // Anonymous author
-MSG_KILLREAD        (1<<6)  // Delete message after it has been read
-MSG_MODERATED       (1<<7)  // This message must be validated before export
-MSG_VALIDATED       (1<<8)  // This message has been validated by a moderator
-
-
-Auxillary Attributes:
---------------------
-These are the bit values for msghdr_t.auxattr:
-
-MSG_FILEREQUEST     (1<<0)  // File request
-MSG_FILEATTACH      (1<<1)  // File(s) attached to Msg
-MSG_TRUNCFILE       (1<<2)  // Truncate file(s) when sent
-MSG_KILLFILE        (1<<3)  // Delete file(s) when sent
-MSG_RECEIPTREQ      (1<<4)  // Return receipt requested
-MSG_CONFIRMREQ      (1<<5)  // Confirmation receipt requested
-MSG_NODISP          (1<<6)  // Msg may not be displayed to user
-
-
-Network Attributes:
-------------------
-These are the bit values for msghdr_t.netattr:
-
-MSG_LOCAL           (1<<0)  // Msg created locally
-MSG_INTRANSIT       (1<<1)  // Msg is in-transit
-MSG_SENT            (1<<2)  // Sent to remote
-MSG_KILLSENT        (1<<3)  // Kill when sent
-MSG_ARCHIVESENT     (1<<4)  // Archive when sent
-MSG_HOLD            (1<<5)  // Hold for pick-up
-MSG_CRASH           (1<<6)  // Crash
-MSG_IMMEDIATE       (1<<7)  // Send Msg now, ignore restrictions
-MSG_DIRECT          (1<<8)  // Send directly to destination
-MSG_GATE            (1<<9)  // Send via gateway
-MSG_ORPHAN          (1<<10) // Unknown destination
-MSG_FPU             (1<<11) // Force pickup
-MSG_TYPELOCAL       (1<<12) // Msg is for local use only
-MSG_TYPEECHO        (1<<13) // Msg is for conference distribution
-MSG_TYPENET         (1<<14) // Msg is direct network mail
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           60                      Message Attributes
-
-
-Translation Types:
------------------
-
-Definition for values of *.xlat[x]:
-
-XLAT_NONE           0       // No translation/End of translation list
-XLAT_LF2CRLF        1       // Expand sole LF to CRLF
-XLAT_ESCAPED        2       // 7-bit ASCII escaping for ctrl and 8-bit data
-XLAT_HUFFMAN        3       // Static and adaptive Huffman coding compression
-XLAT_LZW            4       // LZW (Lempel-Ziv-Welch) encoding for compression
-                            // Terry Welch, IEEE Computer Vol 17, No 6
-                            // June 1984, pp 8-19
-XLAT_LZC            5       // LZC (modified LZW) encoding for compression
-                            // Unix compress program
-XLAT_RLE            6       // Run length encoding compression
-XLAT_IMPLODE        7       // Implode compression (PKZIP v1.x)
-XLAT_SHRINK         8       // Shrink compression (PKZIP v1.x)
-XLAT_LZH            9       // LZH dynamic Huffman coding
-                            // Haruyasu Yoshizaki, LHarc
-                            // November, 1988
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           61                       Translation Types
-
-
-Agent Types:
------------
-
-AGENT_PERSON        0       // To or from person
-AGENT_PROCESS       1       // Unknown process, identified by agent name
-
-Agent types E000h through EFFFh are reserved for Synchronet process types
-(defined specifically by Digital Dynamics).
-
-Note:
-----
-Specifically not defined are agent types F000h through FFFFh. These values
-are to be used for user or system defined agent types. Digital Dynamics
-requests that any developers or organizations that wish to have additional
-agent types added to this specification notify Digital Dynamics through any
-of the contact methods listed at the beginning of this document.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           62                             Agent Types
-
-
-Network Types:
--------------
-
-                            // Net Type             Address Format
-                            // -----------------------------------
-NET_NONE            0       // Locally created      none
-NET_UNKNOWN         1       // Unknown              undef
-NET_FIDO            2       // FTN network          fidoaddr_t
-NET_POSTLINK        3       // PostLink network     none
-NET_QWK             4       // QWK based network    ASCII
-NET_INTERNET        5       // The Internet         ASCII
-NET_WWIV            6       // WWIV based network   ulong
-NET_MHS             7       // MHS network          ASCII
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           63                           Network Types
-
-
-Media Types:
-===========
-
-Image Types:
------------
-
-IMAGE_UNKNOWN       0x00    // Use image signature header to determine format
-IMAGE_ASC           0x01    // ASCII text/IBM extended ASCII graphics
-IMAGE_ANS           0x02    // ANSI X3.64 terminal escape sequences
-IMAGE_AVT           0x03    // AVATAR terminal escape sequences
-IMAGE_LVI           0x04    // LVI terminal escape sequences
-IMAGE_GIF           0x05    // Compuserve Graphics Interchange Format (GIF)
-IMAGE_TIF           0x06    // Tagged Image Format (AKA TIFF)
-IMAGE_JPG           0x07    // Joint Photographers Electronics Group (JPEG)
-IMAGE_T16           0x08    // TrueVision 16-bit bitmap (TGA)
-IMAGE_T24           0x09    // TrueVision 24-bit bitmap (TGA)
-IMAGE_T32           0x0a    // TrueVision 32-bit bitmpa (TGA)
-IMAGE_PCX           0x0b    // ZSoft PaintBrush graphics
-IMAGE_BMP           0x0c    // Windows bitmap
-IMAGE_RLE           0x0d    // Windows bitmap (compressed)
-IMAGE_DIB           0x0e    // Display independant bitmap
-IMAGE_PCD           0x0f    // Kodak PhotoCD
-IMAGE_G3F           0x10    // Group 3 FAX
-IMAGE_EPS           0x11    // Ecapsulated PostScript
-IMAGE_RTF           0x12    // Rich text format
-IMAGE_RIP           0x13    // Remote Imaging Protocol Script (RIPscrip)
-IMAGE_NAP           0x14    // NAPLPS
-IMAGE_CDR           0x15    // Corel Draw!
-IMAGE_CGM           0x16    // Computer graphics metafile
-IMAGE_WMF           0x17    // Windows metafile
-IMAGE_DFX           0x18    // Autodesk AutoCAD
-IMAGE_IFF           0x19    // Amiga Interchange File Format
-
-
-Animation Types:
----------------
-
-ANIM_UNKNOWN        0       // Use file signature header to determine format
-ANIM_FLI            1       // Autodesk animator
-ANIM_FLC            2       // Autodesk
-ANIM_GL             3       // Grasprt
-ANIM_IFF            4       // Amiga Interchange File Format
-
-
-Video Types:
------------
-
-VIDEO_UNKNOWN       0       // Use file signature header to determine format
-VIDEO_QTIME         1       // Apple Quick-time
-VIDEO_FQTIME        2       // Apple Flattened Quick-time
-VIDEO_AVI           3       // Windows Auto/Video Interleave
-VIDEO_ULT           4       // OS/2 Ultimotion
-
-
-
-_______________________________________________________________________________
-Synchronet                           64                             Media Types
-
-
-Video Compression Types:
------------------------
-
-VCOMP_UNKNOWN       0       // Use file signature header to determine codec
-VCOMP_RLE           1       // Apple animation
-VCOMP_SMC           2       // Apple graphics
-VCOMP_RPZA          3       // Apple video
-VCOMP_KLIC          4       // Captain crunch
-VCOMP_CVID          5       // CinePak
-VCOMP_RT21          6       // Intel indeo R2
-VCOMP_IV31          7       // Intel indeo R3
-VCOMP_YVU9          8       // Intel YVU9
-VCOMP_JPEG          9       // JPEG
-VCOMP_MRLE          10      // Microsoft RLE
-VCOMP_MSVC          11      // Microsoft video 1
-
-
-Font Types:
-----------
-
-FONT_UNKNOWN        0       // Use file signature header to determine format
-FONT_TTF            1       // Windows TrueType
-FONT_PFB            2       // PostScript Type 1 Font Binary
-FONT_PFM            3       // PostScript Type 1 Font Metric
-FONT_AMIGA          4       // Amiga Bitmapped
-FONT_AGFA           5       // CompuGraphic Fonts
-
-
-Sound Types:
------------
-
-SOUND_UNKNOWN       0       // Use file signature header to determine format
-SOUND_MOD           1       // MOD format
-SOUND_VOC           2       // Sound Blaster VOC format
-SOUND_WAV           3       // Windows 3.1 WAV RIFF format
-SOUND_MID           4       // MIDI format
-SOUND_GMID          5       // General MIDI format (standardized patches)
-SOUND_SMP           6       // Turtle Beach SampleVision format
-SOUND_SF            7       // IRCAM format
-SOUND_AU            8       // Sun Microsystems AU format
-SOUND_IFF           9       // Amiga Interchange File Format
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           65                             Media Types
-
-
-Application Data Types:
-----------------------
-
-APPDATA_UNKNOWN     0       // Use file signature header to determine format
-APPDATA_WORDPERFECT 1       // WordPerfect Document
-APPDATA_WKS         2       // Lotus 123 Worksheet (?)
-APPDATA_WK1         3       // Lotus 123 Worksheet rev 1
-APPDATA_WK2         4       // Lotus 123 Worksheet rev 2
-APPDATA_WK3         5       // Lotus 123 Worksheet rev 3
-APPDATA_DBF         6       // dBase III data file
-APPDATA_PDX         7       // Paradox data file
-APPDATA_EXCEL       8       // Excel data file
-APPDATA_QUATRO      9       // Borland Quatro Pro file
-APPDATA_WORD        10      // Microsoft Word
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           66                             Media Types
-
-
-Message Storage Pseudo Code
-===========================
-
-The following is a "C like" pseudo code listing example of adding a message to
-an SMB message base. SMBLIB contains C functions to do most of the following
-operations. We are supplying this pseudo code as a general definition of the
-order of required operations in writing to the message base. Many details have
-been left out to simplify the code and to demonstrate only the basic
-principles.
-
-shd = open ( MSGBASE.SHD , READ/WRITE/DENY_NONE )
-sdt = open ( MSGBASE.SDT , READ/WRITE/DENY_NONE )
-sid = open ( MSGBASE.SDT , READ/WRITE/DENY_NONE )
-
-lock ( shd , smbhdr )
-read ( shd , smbstatus )
-
-if ( smbstatus.attr & SMB_HYPERALLOC )
-    msg.hdr.offset = filelength ( sdt )
-
-else {
-    number_of_blocks = length_of_message_data / SDT_BLOCK_LEN
-    if ( length_of_message_data % SDT_BLOCK_LEN )   /* unevenly divisible */
-        number_of_blocks = number_of_blocks + 1
-
-    sda = open ( MSGBASE.SDA , READ/WRITE/DENY_ALL )
-
-    if ( fast_allocation_mode )
-        seek ( sda , END_OF_FILE )
-
-    else {
-        seek ( sda , BEGINNING_OF_FILE )
-        while ( not end_of_file ( sda ) ) {
-            read ( sda , allocated , number_of_blocks * 2 )
-            if ( allocated = 0 ) {
-                seek_backwards ( sda , number_of_blocks * 2 )
-                break
-            }
-        }
-    }
-
-    msg.hdr.offset = ( current_position ( sda ) / 2 ) * SDT_BLOCK_LEN
-
-    allocated = 1
-
-    write ( sda , allocated , number_of_blocks * 2 )
-
-    close ( sda )
-}
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           67             Message Storage Pseudo Code
-
-
-seek ( sdt , msg.hdr.offset )
-
-write ( sdt , message_data )
-
-if ( smbstatus.attr & SMB_HYPERALLOC )
-    msg.idx.offset = filelength ( shd )
-
-else {
-    number_of_blocks = length_of_message_header / SHD_BLOCK_LEN
-    if ( length_of_message_header % SHD_BLOCK_LEN )   /* unevenly divisible */
-        number_of_blocks = number_of_blocks + 1
-
-    sha = open ( MSGBASE.SHA , READ/WRITE/DENY_ALL )
-
-    if ( fast_allocation_mode )
-        seek ( sha , END_OF_FILE )
-
-    else {
-        seek ( sha , BEGINNING_OF_FILE )
-        while ( not end_of_file ( sha ) ) {
-            read ( sha , allocated , number_of_blocks )
-            if ( allocated = 0 ) {
-                seek_backwards ( sha , number_of_blocks )
-                break
-            }
-        }
-    }
-
-    msg.idx.offset = ( current_position ( sha ) * SHD_BLOCK_LEN )
-    msg.idx.offset = msg.idx.offset + smbstatus.header_offset
-
-    allocated = 1
-
-    write ( sha , allocated , number_of_blocks )
-
-    close ( sha )
-}
-
-seek ( shd , msg.idx.offset )
-
-msg.hdr.number = smbstatus.last_msg+1
-
-write ( shd , msg.hdr )
-
-smbstatus.total_msgs = smbstatus.total_msgs + 1
-smbstatus.last_msg = msg.hdr.number
-
-write ( shd , smbstatus )
-
-write ( sid , msg.idx )
-
-unlock ( shd , smbstatus )
-
-
-
-_______________________________________________________________________________
-Synchronet                           68             Message Storage Pseudo Code
-
-
-Message Retrieval Pseudo Code
-=============================
-
-shd = open ( MSGBASE.SHD , READ/WRITE/DENY_NONE )
-sdt = open ( MSGBASE.SDT , READ/WRITE/DENY_NONE )
-sid = open ( MSGBASE.SDT , READ/WRITE/DENY_NONE )
-
-read ( sid , msg.idx )
-
-seek ( shd , msg.idx.offset )
-
-lock ( shd , msg.hdr )
-
-read ( shd , msg.hdr )
-
-seek ( sdt , msg.hdr.offset )
-
-read ( sdt , msg.hdr.data_length )
-
-unlock ( shd , msg.hdr )
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           69           Message Retrieval Pseudo Code
-
-
-SMBUTIL
-=======
-
-SMBUTIL is a utility that can perform various functions on an SMB message base.
-The primary purpose of SMBUTIL is as an example to C programmers of how to use
-the SMBLIB functions to access and modify an SMB message base. The complete C
-source code for SMBUTIL is included and functions from it can be used or
-modified by developers at their own discretion. The following files make up
-SMBUTIL:
-
-SMBUTIL.EXE     Compiled and linked for 16-bit DOS (ready to run)
-SMBUTIL.C       C functions
-SMBUTIL.H       C definitions and variable prototypes
-SMBUTIL.WAT     Makefile for Watcom C/C++ (type wmake -f smbutil.wat)
-SMBUTIL.BOR     Makefile for Borland C/C++ (type make -f smbutil.bor)
-
-The usage syntax is as follows:
-
-SMBUTIL [/opts] cmd smb_filespec.shd
-
-where cmd is one or more of the following:
-
-       l[n] = list msgs starting at number n
-       r[n] = read msgs starting at number n
-       v[n] = view msg headers starting at number n
-       k[n] = kill (delete) n msgs
-       i<f> = import from text file f
-       s    = display msg base status
-       c    = change msg base status
-       m    = maintain msg base - delete old msgs and msgs over max
-       p[k] = pack msg base (k specifies minimum packable Kbytes)
-
-where opts is one or more of the following:
-
-       a    = always (force) packing
-       z<n> = set time zone (n=min +/- from UT or 'EST','EDT','CST',etc)
-
-and smb_filespec is the base filename or file specification (wildcards) for the
-message base. If wildcards are used, the ".SHD" extension must be specified.
-
-An example command line:
-
-SMBUTIL MP C:\SBBS\DATA\SUBS\*.SHD
-
-would maintain and pack all the message bases found in the C:\SBBS\DATA\SUBS
-directory.
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           70                                 SMBUTIL
-
-
-CHKSMB
-======
-
-CHKSMB is a utility that performs a comprehensive analysis of a message base
-to find any possible errors and calculate the number of packable bytes. It does
-not "fix" a message base if any errors are found, it only reports the specific
-errors (and exits with a non-zero error level). If any errors are reported,
-packing the message base with SMBUTIL may rebuild the damaged files. If that
-doesn't work, then use FIXSMB as a last resort.
-
-C source code for CHKSMB is also included as an example to programmers of how
-to use SMBLIB functions.
-
-The usage syntax is as follows:
-
-CHKSMB [/opts] smb_filespec.shd
-
-where opts is one or more of the following:
-
-        q   = quiet mode (no beeps)
-        s   = stop after an errored message base (for use with wildcards)
-        p   = pause after an errored message base (wait for key press)
-        t   = don't check for unsupported translation strings (faster)
-        e   = display extended information on corrupted messages
-
-An example command line:
-
-CHKSMB /QP C:\SBBS\DATA\SUBS\*.SHD
-
-would check all the message bases in the C:\SBBS\DATA\SUBS directory, without
-beeping on errors, and pausing after an errored message base.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           71                                  CHKSMB
-
-
-FIXSMB
-======
-
-FIXSMB is a utility that will rebuild the index and allocation files for a
-message base. Since the message headers are not necessarily stored
-sequentially, the order of the messages in the index may be changed when the
-index is rebuilt. Messages are also re-numbered, so only use this program if
-the index is corrupted and the messages are extremely important.
-
-C source code for FIXSMB is also included as an example to programmers of how
-to use SMBLIB functions.
-
-The usage syntax is as follows:
-
-FIXSMB [/M] smb_file
-
-An example command line:
-
-FIXSMB \SBBS\DATA\MAIL
-
-Only use the "/M" command line switch if fixing an older Synchronet e-mail
-message base (created with SBBS v2.1 or earlier). Once the SMB_EMAIL status
-attr is set ("SMBUTIL S" will report a status attr of 1), the "/M" is not
-required.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           72                                  FIXSMB
-
-
-SMBLIB
-======
-
-SMBLIB is a library of C functions for accessing and storing messages in an
-SMB format message base. It can eliminate much of the development time for
-developers that wish to use the library in whole or in part, or use the
-functions as examples for their own message base function library. The library
-consists of the following files:
-
-SMBDEFS.H       Constant definitions, macros, and data types
-SMBLIB.H        Library constants and function prototypes
-SMBLIB.C        Function definitions
-SMBVARS.C       Global variable definitions (doubles as declaration file)
-
-For developers to use this library with their program, they must include the
-"SMBLIB.H" header file at the top of each C file that uses any of the library
-functions, global variables, data types, macros, and constants. This can be
-done by simply adding the following line to each .C file:
-
-#include "smblib.h"
-
-If SMBLIB.H is included, there is no need to include SMBDEFS.H or SMBVARS.C.
-
-To link the library functions and variables with a main program, the files
-SMBVARS.OBJ and SMBLIB.OBJ must be linked with the main program .OBJ files.
-If the operating system is DOS, be sure that all .OBJ files are compiled for
-the same memory model.
-
-Example MAKEFILEs for compiling and linking SMBUTIL with Borland C/C++
-(SMBUTIL.BOR) and Watcom C/C++ (SMBUTIL.WAT) are included.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           73                                  SMBLIB
-
-
-SMBDEFS.H
-=========
-
-The SMBDEFS.H file contains important constant definitions and data types (also
-defined in this document). If ever this document and SMBDEFS.H are inconsistent
-with each other, then SMBDEFS.H is to be considered correct and this document
-in error. If such a discrepency is found, please notifiy Digital Dynamics so it
-can be corrected in a future revision of the specification.
-
-Most notable of the data types is a structure called smbmsg_t (not defined
-in this document). It contains the fixed and variable portions of a message's
-header record as well as convenience pointers to the sender's name
-(smbmsg_t.to), recipient's name (smbmsg_t.from), network addresses, and more.
-If multiple SENDER header fields are included (for example), then smbmsg_t.to
-will point to the last SENDER header field in the header record. Convenience
-pointers for other data items work in the same fasion if multiple header fields
-of the same type exist in the header record.
-
-Variables of the smbmsg_t data type (and pointers to variables of smbmsg_t
-type) are used as arguments to many of the SMBLIB functions.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           74                               SMBDEFS.H
-
-
-SMBVARS.C
-=========
-
-The SMBVARS.C file contains definitions of the global variables used by the
-SMBLIB functions. It is a fairly small file since their are a small number of
-global variables (by design). This file is used for both definitions and
-declarations, so no "extern" declarations need to be made in developers source
-code as long as SMBVARS.C or (preferably) SMBLIB.H is included in the source
-code.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           75                               SMBVARS.C
-
-
-SMBLIB.H
-=======
-
-The SMBLIB.H file contains prototypes of all the functions in the SMBLIB.C
-file. It is necessary to include this file in C source code if any of the
-SMBLIB functions are used. The following C source line will include this file:
-
-#include "smblib.h"
-
-and should be placed near the top of all C source files that use SMBLIB
-functions, variables, constants, or data types.
-
-Function prototypes are necessary for compilers to know the correct calling
-syntax of a function and detect incorrect usage. Prototypes are also useful
-as a quick reference for programmers as to the correct calling syntax of a
-specific function.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           76                                SMBLIB.H
-
-
-SMBLIB.C
-=======
-
-The SMBLIB.C file contains the actual SMBLIB library functions. This source
-file is not a stand alone program, but instead must be compiled and linked
-with a main source file to create the executable program.
-
-The functions in this file are organized in a logical order, but their order
-is actually irrelevant to the compiling, linking, and execution of the
-resulting program.
-
-A comment block preceeds each function, explaining what the function does,
-how the passed parameters are used, and what the return code (if any)
-indicates. A more detailed explanation of each function is included here:
-
-int smb_open(int retry_time)
-----------------------------
-The smb_open() function must be called before the message base is accessed
-(read from or written to). The parameter, retry_time, is the maximum number
-of seconds to wait while retrying to lock the message base header. If
-retry_time is 0, then the message base header is not locked or read (this is
-called "Fast Open" and should only be used when speed is more important than
-checking for compatibility and validity upon opening). The global variable
-smb_file must be initialized with the path and base filename of the message
-base. This function returns 0 on success, 1 if the .SDT file could not be
-opened, 2 if the .SHD file could not be opened, and 3 if the .SID file could
-not be opened. If the message base header could not be locked, this function
-returns -1. If the message base ID is incorrect, it returns -2. And if the
-message base is of an incompatible version, it returns -3.
-
-The errno global variable (standard of most C libraries) will most likely
-contain the error code for open failure.
-
-int smb_open_da(int retry_time)
--------------------------------
-The smb_open_da() function is used to open the data block allocation file for
-writing messages to a message base. The parameter, retry_time, is the maximum
-number of seconds to wait while retrying to open the file. This function
-returns 0 on success. -1 is returned if an open error other than "Access
-Denied" is returned from the operating system, and the global variable errno
-will contain the error code. -2 is returned if the retry_time has been
-reached, and -3 is returned if the file descriptor could not be converted to
-a stream by the fdopen() function.
-
-fclose(sda_fp) should be called immediately after all necessary file access
-has been completed.
-
-This function is not used with the Hyper Allocation storage method.
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           77                                SMBLIB.C
-
-
-int smb_open_ha(int retry_time)
--------------------------------
-The smb_open_ha() function is used to open the header block allocation file for
-writing messages to a message base. The parameter, retry_time, is the maximum
-number of seconds to wait while retrying to open the file. This function
-returns 0 on success. -1 is returned if an open error other than "Access
-Denied" is returned from the operating system, and the global variable errno
-will contain the error code. -2 is returned if the retry_time has been
-reached, and -3 is returned if the file descriptor could not be converted to
-a stream by the fdopen() function.
-
-fclose(sha_fp) should be called immediately after all necessary file access
-has been completed.
-
-This function is not used with the Hyper Allocation storage method.
-
-int smb_create(ulong max_crcs, ulong max_msgs, ushort max_age, ushort attr
-    ,int retry_time)
---------------------------------------------------------------------------
-The smb_create() function is used to create a new message base or reset an
-existing message base. The parameters max_crcs, max_msgs, max_age, and attr
-are used to set the initial status of the message base status header. The
-parameter, retry_time is the maximum number of seconds to wait while retrying
-to lock the message base header. This functions returns 0 on success or 1 if
-the message base header could not be locked.
-
-int smb_trunchdr(int retry_time)
---------------------------------
-The smb_trunchdr() function is used to truncate the header file when packing
-the message base and writing the new header information back to the header
-file. The parameter, retry_time is the maximum number of seconds to wait while
-retrying to truncate the header file. Returns 0 on success, -1 if error was
-other than "Access Denied", or -2 if retry_time reached.
-
-int smb_locksmbhdr(int retry_time)
-----------------------------------
-The smb_locksmbhdr() function is used to lock the first message base (status)
-header. The parameter, retry_time is the number of seconds to wait while
-retrying to lock the header. The smb_unlocksmbhdr() function should always be
-used to unlock the header after accessing the message base header (usually
-with smb_getstatus() and/or smb_putstatus()). Returns 0 if successful, -1 if
-unsuccessful.
-
-int smb_unlocksmbhdr()
-----------------------
-The smb_unlocksmbhdr() function is used to unlock a previously locked message
-base header (using smb_lockmsghdr()). Returns 0 on success, non-zero on
-failure.
-
-int smb_getstatus(smbstatus_t *hdr)
------------------------------------
-The smb_getstatus() function is used to read the status message base header
-into the hdr structure. Returns 0 on success, 1 on failure.
-
-
-_______________________________________________________________________________
-Synchronet                           78                                SMBLIB.C
-
-
-int smb_putstatus(smbstatus_t hdr)
-----------------------------------
-The smb_putstatus() function is used to write the status information to the
-first message base header. The parameter hdr, contains the status information
-to be written. Returns 0 on success, 1 on failure.
-
-int smb_getmsgidx(smbmsg_t *msg)
---------------------------------
-The smb_getmsgidx() function is used to get the byte offset for a specific
-message header in the message header file based on the message base index.
-
-If msg->hdr.number is non-zero when this function is called, then the index
-will be searched for this message number. If the message number is found in
-the index, the msg->idx.offset is set to the byte offset of the message header
-record in the header file and msg->offset is set to the record offset of the
-index record in the index file, and the function returns 0. If the message
-number is not found in the index, the function returns 1.
-
-If msg->hdr.number is zero, msg->idx.offset and msg->idx.number are obtained
-from the index record at record offset msg->offset. If msg->offset is an
-invalid record offset when this function is called, the function returns 1.
-Otherwise, the function returns 0.
-
-int smb_getlastidx(idxrec_t *idx)
----------------------------------
-Reads the last index record of the currently open message base into the
-idxrec_t structure pointed to by idx. Returns 0 if successful, -1 if the index
-is empty or unopened, or -2 if the record can't be read.
-
-int smb_getmsghdrlen(smbmsg_t msg)
-----------------------------------
-The smb_getmsghdrlen() function is used to calculate the total length of
-message header msg including both fixed and variable length portions. This
-function returns the length of the header record in bytes.
-
-long smb_getmsgdatlen(smbmsg_t msg)
------------------------------------
-The smb_getmsgdatlen() function is used to calculate the total length of the
-data for message msg. This function returns the length of all data fields
-combined.
-
-int smb_lockmsghdr(smbmsg_t msg, int retry_time)
-------------------------------------------------
-The smb_lockmsghdr() function is used to lock the header record for message
-msg. The parameter retry_time is the maximum number of seconds to wait while
-retrying to lock the header. Returns 0 on success, -1 on failure. The function
-smb_unlockmsghdr() should immediately be called after accessing the message
-header (usually with smb_getmsghdr() or smb_putmsghdr()).
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           79                                SMBLIB.C
-
-
-int smb_getmsghdr(smbmsg_t *msg)
---------------------------------
-The function smb_getmsghdr() is used to read the header record for message
-msg. msg->idx.offset must be initialized to the byte offset of the header
-record in the header file before this function is called. The function
-smb_freemsgmem() must be called to free the memory allocated by this function
-for the header and data felds. This function returns 0 on success, -1 if
-the fixed portion of the message header record could not be read, -2 if the
-message header ID was incorrect, -3 if memory could not be allocated, -4
-if a data field could not be read, -5 if the fixed length portion of a header
-field could not be read, -6 if the variable length portion of a header field
-could not be read, -7 if one or more of the mandatory header fields (SENDER,
-RECIPIENT, or SUBJECT) are missing, -8 if total_dfields extends beyond the
-end of the header record, or -9 if incompatible header version.
-
-Several convenience pointers in the msg structure are initialized by this
-function to point to the last occurance of the SENDER (msg->from), RECIPIENT
-(msg->to), SUBJECT (msg->subj), etc.
-
-int smb_unlockmsghdr(smbmsg_t msg)
-----------------------------------
-The smb_unlockmsghdr() function is used to unlock a previously locked message
-header (with smb_lockmsghdr()). This function returns 0 on success, non-zero
-on failure.
-
-int smb_addcrc(ulong max_crcs, ulong crc, int retry_time)
----------------------------------------------------------
-The smb_addcrc() function is used to add a CRC-32 to the CRC history file
-for a message base, automatically checking for duplicates. The parameter
-max_crcs should be the max_crcs defined in the status header of the message
-base. The parameter crc, is the CRC-32 of the TEXT_BODY and TEXT_SOUL data
-fields for the message. The parameter retry_time is the maximum number of
-seconds to wait when retrying to open the CRC history file.
-
-This function returns -1 if there was an open error, -2 if the retry_time
-was reached, -3 if there was a memory allocation error, 1 if the CRC already
-exists in the CRC history file (indicating a duplicate message), or 0 on
-success (and no duplicate).
-
-int smb_hfield(smbmsg_t *msg, ushort type, ushort length, void *data)
----------------------------------------------------------------------
-The smb_hfield() function is used to add a header field to the structure msg.
-The parameters type, length, and data, must be specified according to the
-header field values listed in this specification. This function returns 0
-on success, non-zero on memory allocation error. The function smb_freemsgmem()
-must be called to free the memory allocated by this function.
-
-int smb_dfield(smbmsg_t *msg, ushort type, ulong length)
---------------------------------------------------------
-The smb_dfield() function is used to add a data field to the structure msg.
-The parameters type and length must be specified according to the data field
-values listed in this specification. This function returns 0 on success,
-non-zero on memory allocation error. The function smb_freemsgmem() must be
-called to free the memory allocated by this function.
-
-_______________________________________________________________________________
-Synchronet                           80                                SMBLIB.C
-
-
-int smb_addmsghdr(smbmsg_t *msg,smbstatus_t *status,int storage,int retry_time)
--------------------------------------------------------------------------------
-The smb_addmsghdr() function is used to add a new message header to the message
-header file and update the index file. The msg and status structures are
-updated to reflect the new total messages, last message number, etc. The
-storage parameter is used to indicate the storage method to use (either
-SMB_SELFPACK, SMB_FASTALLOC, or SMB_HYPERALLOC). If the storage type is
-SMB_SELFPACK, the header block allocation file will be searched for unused
-block(s) to store this header. If the storage type is SMB_FASTALLOC or
-SMB_HYPERALLOC, the header is stored at the end of the header file. Returns 0
-on success, non-zero on failure. The parameter retry_time is the maximum number
-of seconds to wait while retrying to lock and open files.
-
-int smb_putmsg(smbmsg_t msg)
-----------------------------
-The smb_putmsg() function calls both the smb_putmsghdr() and smb_putmsgidx()
-functions to write the header and index elements of a message to the
-appropriate files. Returns 0 on success, non-zero on failure.
-
-int smb_putmsgidx(smbmsg_t msg)
--------------------------------
-The smb_putmsgidx() function is used to store a message index in the message
-index file. The message index can be for a new message or an existing
-message. Returns 0 on success, non-zero on failure.
-
-int smb_putmsghdr(smbmsg_t msg)
--------------------------------
-The smb_putmsghdr() function is used to store a message header in the message
-header file. The message header can be for a new message or an existing
-message. Returns 0 on success, non-zero on failure.
-
-void smb_freemsgmem(smbmsg_t msg)
----------------------------------
-Frees allocated memory for the header and data fields in the msg structure.
-This function must be called to free the memory allocated by the functions
-smb_hfield(), smb_dfield(), and smb_getmsghdr().
-
-long smb_hdrblocks(ulong length)
---------------------------------
-The smb_hdrblocks() function is used to calculate the number of blocks
-required to store a message header of length size (in bytes). This function
-returns the number of blocks required.
-
-long smb_datblocks(ulong length)
---------------------------------
-The smb_datblocks() function is used to calculate the number of blocks
-required to store message data of length size (in byte). This function returns
-the number of blocks required.
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           81                                SMBLIB.C
-
-
-long smb_allochdr(ulong length)
--------------------------------
-The smb_allochdr() function is used to search for free blocks to store a
-message header of length bytes and mark the free blocks as allocated in the
-header allocation file. This function returns the byte offset to the header
-record or a negative number on error. The function smb_open_ha() should be
-called prior to calling this function and fclose(sha_fp) should be called
-after. The function is called from smb_addmsghdr(), so you probably have no
-need to call this function directly.
-
-long smb_fallochdr(ulong length)
---------------------------------
-The smb_fallochdr() function works exactly the same as the smb_allochdr()
-function except it is much faster because the header allocation file is not
-searched for free blocks. The function is called from smb_addmsghdr(), so you
-probably have no need to call this function directly.
-
-long smb_hallochdr(ulong header_offset)
----------------------------------------
-This smb_hallochdr() functions works exactly the same as the smb_fallochdr()
-function except the status.header_offset is passed as the argument and the
-header allocation (.SHA) file is not updated so smb_open_ha() need not be
-called. The function is called from smb_addmsghdr(), so you probably have no
-need to call this function directly.
-
-long smb_allocdat(ulong length, ushort headers)
------------------------------------------------
-The smb_allocdat() function is used to search for free blocks to store length
-amount of data for a message. The parameter headers, indicates the number of
-message headers that are associated with this data. Normally, the headers
-parameter will be 1, unless this message is part of a mass mailing. The offset
-to the allocated data blocks is returned, or a negative value on error. The
-function smb_open_da() should be called prior to calling this function and
-fclose(sda_fp) should be called after.
-
-long smb_fallocdat(ulong length, ushort headers)
-------------------------------------------------
-The smb_fallocdat() function works exactly the same as the smb_allocdat()
-function except it is much faster because the data allocation file is not
-searched for free blocks.
-
-long smb_hallocdat()
---------------------
-The smb_hallocdat() function works exactly the same as the smb_hallocdat()
-function except no argument is passed and the data allocation file (.SDA) is
-not updated so smb_open_da() need not be called.
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           82                                SMBLIB.C
-
-
-int smb_incdat(ulong offset, ulong length, ushort headers)
-----------------------------------------------------------
-The smb_incdat() function is used to increment the header counter in the data
-allocation file for the data starting at the byte offset and length size in
-bytes. The parameter headers, indicates the number of headers to add to the
-current allocation value in the data allocation file. Returns 0 on success,
-non-zero on failure.
-
-int smb_freemsg(smbmsg_t msg, smbstatus_t status)
--------------------------------------------------
-The smb_freemsg() function is used to free the disk space allocated for the
-header and data fields of the message msg. Returns 0 on success, non-zero on
-failure. The parameter, status, must be the current status from the message
-base header for this message base.
-
-int smb_freemsgdat(ulong offset, ulong length, ushort headers)
---------------------------------------------------------------
-The smb_freemsgdat() function is used to decrement the data block allocation
-records in the data allocation file associated with the data in the data file
-by the value of the headers parameter (normally 1). The parameter offset
-indicates the byte offset to the beginning of the message data in the data
-file and the parameter length is the total length of the message data.
-Returns 0 on success, non-zero on failure.
-
-int smb_freemsghdr(ulong offset, ulong length)
-----------------------------------------------
-The smb_freemsghdr() function is used to set the header block allocation
-records in the header allocation file to 0 (indicated non-allocated block).
-The parameter offset indicates the byte offset to the beginning of the header
-record being freed and the parameter length indicates the total length of the
-header record. Returns 0 on success, non-zero on failure.
-
-int smb_stack(int op)
----------------------
-The smb_stack() function is used to save and restore message base information
-so that multiple message bases can be open simultaneously. The stack can
-save up to 4 message bases (allowing 5 simultaneously open message bases).
-The stack is a "last in, first out" storage area for open message bases.
-If the op parameter is SMB_STACK_PUSH, smb_stack() will save (push) the current
-message base onto the stack. Calling smb_stack(SMB_STACK_POP) will restore
-(pop) the most recently pushed message base off the stack. Calling
-smb_stack(SMB_STACK_XCHNG) will exchange the most recently pushed message base
-and the current message base (replacing the top of the stack with the current
-message base).
-
-void smb_close()
-----------------
-Closes the header, data, and index files for the currently open message base.
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           83                                SMBLIB.C
-
-
-Miscellaneous SMBLIB Files
-==========================
-
-CRC32.H         C header file for CRC-32 calculations
------------------------------------------------------
-This file contains a static 32-bit CRC table (crc32tbl[]) and a macro (ucrc32)
-that uses this table to calculate 32-bit CRCs one byte at a time.
-
-Example:
-
-    ulong crc=0xffffffff;
-
-for(i=0;i<length;i++)
-    crc=ucrc32(buf[i],crc);
-crc=~crc;
-
-
-CRC16.C         C functions for 16-bit CRC calculations
--------------------------------------------------------
-This file contains a function (ucrc16), to calculate 16-bit CRCs one byte at a
-time and a function (crc16) that uses the ucrc16() function to calculate the
-16-bit CRC of an ASCIIZ character string.
-
-Example:
-
-    ushort crc;
-
-crc=crc16("Text");
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           84              Miscellaneous SMBLIB Files
-
-
-LZH.H           Function prototypes for LZH.C
----------------------------------------------
-This file contains function prototypes for the two most important functions
-in LZH.C, lzh_encode() and lzh_decode().
-
-Example:
-
-    uchar str[256],lzh[512];
-    long length;
-
-strcpy(str,"This is a string of text");
-length=lzh_encode(str,strlen(str),lzh);
-lzh_decode(lzh,length,str);
-
-
-LZH.C           C functions for LZH encoding (compression/decompression)
-------------------------------------------------------------------------
-This file contains the functions for encoding and decoding LZH compressed
-data. If the macro LZH_DYNAMIC_BUF is defined when this file is compiled,
-temporary buffers will be dynamically allocated as opposed to static. This
-may be slower than the static buffer method, but frees the allocated memory
-after encoding or decoding. If free memory for your application is an issue,
-then define this macro when compiling this file.
-
-Example (Borland C):
-
-bcc -c -DLZH_DYNAMIC_BUF lzh
-
-Example (Watcom C):
-
-wcc -dLZH_DYNAMIC_BUF lzh
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           85              Miscellaneous SMBLIB Files
-
-
-SMBLIB Storage Example
-======================
-
-#include "smblib.h"
-#include "crc16.c"
-
-int main(void)
-{
-    char    str[256]                        // General purpose string
-           ,*msg_text="Hello, world!"       // Message text
-           ,nul_buf[SDT_BLOCK_LEN]={0}      // NULL initialized buffer
-           ;
-    int     i                               // General purpose integer
-           ,storage=SMB_SELFPACK            // Default storage method
-           ,retry=10                        // Retry for opening/locking files
-           ;
-    ushort  max_age=0                       // Default maximum age of messages
-           ,xlat=XLAT_NONE                  // Translation string
-           ,tzone=PST                       // Time zone
-           ,copies=1                        // Number of copies of this msg
-           ;
-    ulong   max_msgs=500                    // Default max number of msgs
-           ,max_crcs=0                      // Default max crcs
-           ,length                          // Length of msg text
-           ,offset                          // Offset to msg text in data file
-           ;
-    smbmsg_t    msg;                        // Message structure
-    smbstatus_t status;                     // Message base status record
-
-strcpy(smb_file,"MSGBASE");                 // We'll use "MSGBASE" for the name
-if((i=smb_open(retry))!=0) {                // Can't open!?!
-    printf("smb_open returned %d\n",i);
-    return(1); }
-
-if(!filelength(fileno(shd_fp)))             // Message base not created yet
-    smb_create(max_crcs                     // Create with default settings
-              ,max_msgs
-              ,max_age
-              ,storage==SMB_HYPERALLOC
-                    ? SMB_HYPERALLOC : 0    // SMB_EMAIL if this was e-mail
-              ,retry
-              );
-
-if((i=smb_locksmbhdr(retry))!=0) {          // Can't lock status base header
-    printf("smb_locksmbhdr returned %d\n",i);
-    smb_close();
-    return(1); }
-
-if((i=smb_getstatus(&status))!=0) {         // Can't read status base header
-    smb_unlocksmbhdr();
-    smb_close();
-    printf("smb_getstatus returned %d\n",i);
-    return(1); }
-
-
-_______________________________________________________________________________
-Synchronet                           86                  SMBLIB Storage Example
-
-
-if(status.attr&SMB_HYPERALLOC)
-    storage=SMB_HYPERALLOC;
-else
-    storage=SMB_SELFPACK;
-
-length=strlen(msg_text);                    // Get length of message
-length+=sizeof(xlat);                       // Add length of xlat string
-
-if(storage==SMB_HYPERALLOC)                 // Allocate space for message text
-    offset=smb_hallocdat();
-else {
-    if((i=smb_open_da(retry))!=0) {
-        smb_unlocksmbhdr();
-        printf("smb_open_da returned %d\n",i);
-        smb_close();
-        return(1); }
-    if(storage==SMB_FASTALLOC)
-        offset=smb_fallocdat(length,copies);
-    else
-        offset=smb_allocdat(length,copies);
-    fclose(sda_fp); }
-
-fseek(sdt_fp,offset,SEEK_SET);              // Seek to beginning of data block
-fwrite(&xlat,sizeof(xlat),1,sdt_fp);        // Write xlat string
-fwrite(msg_text,strlen(msg_text),1,sdt_fp); // Write message text
-fwrite(nul_buf,SDT_BLOCK_LEN-length         // Write NULLs out to end of block
-    ,1,sdt_fp);
-fflush(sdt_fp);                             // Flush output buffer
-smb_unlocksmbhdr();                         // Unlock status base header
-
-memset(&msg,0,sizeof(smbmsg_t));            // Initialize header to NULL
-memcpy(msg.hdr.id,"SHD\x1a",4);             // Always set to SHD^Z
-msg.hdr.version=SMB_VERSION;
-msg.hdr.when_written.time=time(NULL);
-msg.hdr.when_written.zone=tzone;
-msg.hdr.when_imported.time=time(NULL);
-msg.hdr.when_imported.zone=tzone;
-msg.hdr.offset=offset;
-
-strcpy(str,"All");                          // Send message to "All"
-if((i=smb_hfield(&msg,RECIPIENT,strlen(str),str))!=0) {
-    printf("smb_hfield returned %d\n",i);
-    smb_freemsgdat(offset,length,copies);
-    smb_close();
-    return(1); }
-strlwr(str);                                // If this were e-mail, idx.to
-msg.idx.to=crc16(str);                      // would be the "to" user number
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           87                  SMBLIB Storage Example
-
-
-strcpy(str,"Sysop");                        // Send message from "Sysop"
-if((i=smb_hfield(&msg,SENDER,strlen(str),str))!=0) {
-    printf("smb_hfield returned %d\n",i);
-    smb_freemsgdat(offset,length,copies);
-    smb_freemsgmem(msg);
-    smb_close();
-    return(1); }
-strlwr(str);                                // If this were e-mail, idx.from
-msg.idx.from=crc16(str);                    // would be the "from" user number
-
-strcpy(str,"This is a test");               // Set the message subject/title
-if((i=smb_hfield(&msg,SUBJECT,strlen(str),str))!=0) {
-    printf("smb_hfield returned %d\n",i);
-    smb_freemsgdat(offset,length,copies);
-    smb_freemsgmem(msg);
-    smb_close();
-    return(1); }
-strlwr(str);
-msg.idx.subj=crc16(str);
-
-if((i=smb_dfield(&msg,TEXT_BODY,length))!=0) {
-    printf("smb_dfield returned %d\n",i);
-    smb_freemsgdat(offset,length,copies);
-    smb_freemsgmem(msg);
-    smb_close();
-    return(1); }
-
-if((i=smb_addmsghdr(&msg,&status,storage,retry))!=0) {
-    printf("smb_addmsghdr returned %d\n",i);
-    smb_freemsgdat(offset,length,copies);
-    smb_freemsgmem(msg);
-    smb_close();
-    return(1); }
-
-smb_freemsgmem(msg);                        // Unnecessary if exiting main()
-smb_close();                                // Unnecessary if exiting main()
-return(0);
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           88                  SMBLIB Storage Example
-
-
-SMBLIB Retrieval Example
-========================
-
-#include "smblib.h"
-
-int main(void)
-{
-    char        ch;                         // General purpose character
-    int         i,                          // General purpose integer
-                retry=10;                   // Retry for opening/locking files
-    ushort      xlat;                       // Translation string
-    ulong       l;                          // General purpose long integer
-    smbmsg_t    msg;                        // Message structure
-
-strcpy(smb_file,"MSGBASE");                 // We'll use "MSGBASE" for the name
-if((i=smb_open(retry))!=0) {                // Can't open!?!
-    printf("smb_open returned %d\n",i);
-    return(1); }
-
-if(!filelength(fileno(shd_fp))) {           // Message base not created yet
-    printf("Empty\n");
-    smb_close();
-    return(0); }
-
-for(msg.offset=0;!ferror(sid_fp);msg.offset++) {
-
-    fseek(sid_fp,msg.offset*sizeof(idxrec_t),SEEK_SET);
-    if(!fread(&msg.idx,1,sizeof(idxrec_t),sid_fp))
-        break;
-
-    if((i=smb_lockmsghdr(msg,retry))!=0) {
-        printf("smb_lockmsghdr returned %d\n",i);
-        break; }
-    if((i=smb_getmsghdr(&msg))!=0) {
-        smb_unlockmsghdr(msg);
-        printf("smb_getmsghdr returned %d\n",i);
-        break; }
-    if((i=smb_unlockmsghdr(msg))!=0) {
-        smb_freemsgmem(msg);
-        printf("smb_unlockmsghdr returned %d\n",i);
-        break; }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           89                SMBLIB Retrieval Example
-
-
-    printf("Subj : %s\n",msg.subj);
-    printf("To   : %s\n",msg.to);
-    printf("From : %s\n",msg.from);
-    printf("Date : %s\n",ctime((time_t *)&msg.hdr.when_written.time));
-
-    for(i=0;i<msg.hdr.total_dfields;i++)
-        switch(msg.dfield[i].type) {
-            case TEXT_BODY:             // Only show BODY and TAIL data fields
-            case TEXT_TAIL:
-                fseek(sdt_fp,msg.hdr.offset+msg.dfield[i].offset
-                    ,SEEK_SET);
-                fread(&xlat,sizeof(xlat),1,sdt_fp);
-                if(xlat!=XLAT_NONE)     // No translations supported
-                    continue;
-                for(l=sizeof(xlat);l<msg.dfield[i].length;l++) {
-                    ch=fgetc(sdt_fp);
-                    if(ch)
-                        putchar(ch); }
-                printf("\n");
-                break; }
-    printf("\n");
-
-    smb_freemsgmem(msg); }          // Free memory allocated by smb_getmsghdr()
-
-smb_close();
-return(0);
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           90                SMBLIB Retrieval Example
-
-
-SMBLIB Performance Issues
-=========================
-
-Since importing messages is the usually the most time consuming task likely
-undertaken by an SMB application, it is also the most susceptable to design
-issues that effect performance.
-
-Opening and Closing
--------------------
-When importing multiple messages for a single message base, it appears logical
-to open the message base, import all the messages, then close it. This indeed
-is preferred over opening and closing the message base for each message.
-
-When importing multiple messages for possibly non-consecutive message bases,
-developers may eaily make the mistake of opening and closing the message base
-for each message. This is not necessary and can considerably hinder the
-import performance. The easiest solution is to only close the message base and
-open a new one if the next message to be imported is not for the same message
-base as the previously imported message. Example:
-
-smb_file[0]=0;
-for(i=0;i<total_messages_to_be_imported;i++) {
-    if(stricmp(get_messagebase_for_this_message(i),smb_file)) {
-        if(smb_file[0])     /* We've already opened one */
-            smb_close();
-        strcpy(smb_file,get_messagebase_for_this_message(i));
-        smb_open(10); }
-    /* Import this message */
-    }
-if(smb_file[0])
-    smb_close();
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           91               SMBLIB Performance Issues
-
-
-A more advanced method is to keep multiple message bases open at the same time.
-Due to the likely limitation of total file handles on the system, it is
-suggested to keep the number of simultaneously open message bases at or below
-3. SMBLIB includes the function smb_stack() to easily "push" and "pop" message
-bases without closing them (push is the equivalent to "save" and pop is the
-equivalent to "restore"). The downside of this function is that you cannot
-access message bases on the stack without actually popping them off (in reverse
-of the order they were pushed). You can however "exchange" the current message
-base with the message base on the top of the stack (most recently pushed).
-To intelligently juggle more than two open message bases, the developer should
-create their own equivalent of the smb_stack() function so they can access the
-message bases on the stack without popping them off. An example of keeping a
-maximum of two message bases open using smb_stack():
-
-    char last_messagebase[128],new_messagebase[128];
-
-smb_file[0]=0;
-last_messagebase[0]=0;
-for(i=0;i<total_messages_to_be_imported;i++) {
-    strcpy(new_messagebase,get_messagebase_for_this_message(i));
-    if(stricmp(new_messagebase,smb_file)) {     /* Not current message base */
-        if(smb_file[0]) {                       /* We've already opened one */
-            if(!stricmp(new_messagebase,last_messagebase)) { /* Same as last */
-                strcpy(last_messagebase,smb_file);
-                smb_stack(SMB_STACK_XCHNG); }       /* Retore previous base */
-            else {
-                if(last_messagebase[0]) {
-                    smb_stack(SMB_STACK_XCHNG);
-                    smb_close();
-                    strcpy(last_messagebase,new_messagebase); }
-                else {
-                    strcpy(last_messagebase,smb_file);
-                    smb_stack(SMB_STACK_PUSH); }    /* Save current base */
-                strcpy(smb_file,new_messagebase);
-                smb_open(10); } }
-        else {
-            strcpy(smb_file,new_messagebase);
-            smb_open(10); } }
-    /* Import this message */
-    }
-if(smb_file[0])
-    smb_close();
-if(last_messagebase[0]) {
-    smb_stack(SMB_STACK_POP);
-    smb_close(); }
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           92               SMBLIB Performance Issues
-
-
-The second example would be of negligible performance gain over the first
-example (6 open operations versus 7) if the messages to import were in the
-following order:
-
-msg[0] --> msgbase[0]       // 0 opened
-msg[1] --> msgbase[1]       // 0 pushed 1 opened
-msg[2] --> msgbase[1]
-msg[3] --> msgbase[2]       // 1 closed 0 popped 0 closed 2 opened
-msg[4] --> msgbase[0]       // 2 pushed 0 opened
-msg[5] --> msgbase[2]       // 0 pushed 2 popped (exchanged)
-msg[6] --> msgbase[3]       // 2 closed 0 popped 0 closed 3 opened
-msg[7] --> msgbase[0]       // 3 pushed 0 opened
-
-The second example would be of significant performance gain over the first
-example (4 open operations versus 8) if the messages to import were in the
-following order:
-
-msg[0] --> msgbase[0]       // 0 opened
-msg[1] --> msgbase[1]       // 0 pushed 1 opened
-msg[2] --> msgbase[0]       // 1 pushed 0 popped (exchanged)
-msg[3] --> msgbase[1]       // 0 pushed 1 popped (exchanged)
-msg[4] --> msgbase[0]       // 1 pushed 0 popped (exchanged)
-msg[5] --> msgbase[2]       // 0 pushed 1 popped (exchanged) 1 closed 2 opened
-msg[6] --> msgbase[3]       // 2 pushed 0 popped (exchanged) 0 closed 3 opened
-msg[7] --> msgbase[2]       // 3 pushed 2 popped (exchanged)
-
-More advanced use of "stack-like" message base file handle storage can easily
-reduce the number of open operations, therefore increasing import performance
-under more adverse message base ordering conditions.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           93               SMBLIB Performance Issues
-
-
-Compression
------------
-If any message data compression features are offered by the application, it
-is important the the application not unnecessarily compress data that will
-not save any storage space. While this may seem an obvious statement, please
-review the following pseudo-code example:
-
-if ( message_data_length < SDT_BLOCK_LEN )
-    // Store uncompressed data
-else {
-    // Compress data
-    if ( ( compressed_data_length / SDT_BLOCK_LEN )
-        < ( message_data_length / SDT_BLOCK_LEN ) ) // Saves a block or more
-        // Store compressed data
-    else
-        // Store uncompressed data
-    }
-
-Since the SMB format stores message data in fixed length blocks, there is no
-point in storing a message in compressed format if it requires the same number
-of blocks as the uncompressed format (i.e. a message that is two blocks in
-length in uncompressed format and only a block and a half in length when
-compressed should not be stored in compressed format since it still requires
-two full blocks of storage). It is important to note that in the above example,
-the length of the data translation string was not taken into account in
-determining the number of required blocks. Also, the smb_datblocks() function
-is normally used in determing the number of required blocks to store a given
-data length and it is a little more involved than simply dividing the length of
-the data by SDT_BLOCK_LEN.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           94               SMBLIB Performance Issues
-
-
-Bibliography
-============
-
-Title     : The C Programming Language
-Publisher : Prentice Hall
-Author    : Brian W. Kernighan and Dennis M. Ritchie
-
-Document  : ARPANET Request for Comments (RFC) #822
-Title     : Standard for the Format of ARPA Internet text messages
-Publisher : SRI International
-Author    : David H. Crocker, University of Delaware
-
-Document  : FTS-0001
-Publisher : FSC
-Author    : Randy Bush, Pacific Systems Group
-
-Document  : FTS-0004
-Title     : EchoMail Specification
-Publisher : FSC
-Author    : Bob Hartman
-
-Document  : FTS-0009
-Title     : A standard for unique message identifiers and reply chain linkage
-Publisher : FSC
-Author    : Jim Nutt
-
-Document  : FSC-00046
-Title     : A Product Idenfifier for FidoNet Message Handlers
-Publisher : FSC
-Author    : Joaquim H. Homrighausen
-
-Document  : FSC-00053
-Title     : Specifications for the ^aFLAGS field
-Publisher : FSC
-Author    : Joaquim H. Homrighausen
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           95                            Bibliography
-
-
-Implementations
-===============
-
-Product   : Synchronet Multinode BBS Software
-Developer : Digital Dynamics
-Level     : III
-Version   : 2.20
-
-Product   : Synchronet/FidoNet Import/Export Utility (SBBSFIDO)
-Developer : Digital Dynamics
-Level     : III
-Version   : 2.23
-
-Product   : Synchronet UTI (Universal Text Interface) Driver
-Developer : Digital Dynamics
-Level     : III
-Version   : 2.23
-
-Product   : SBBSecho FidoNet Packet Tosser for Synchronet
-Developer : Digital Dynamics
-Level     : III
-Version   : 1.11
-
-Product   : NetXpress Internet UUCP for Synchronet
-Developer : Merlin Systems
-Level     : II
-Version   : 1.50
-
-Product   : InterEcho FidoNet Packet Tosser
-Developer : InterMail Sales Inc
-Level     : II
-Version   : 1.11
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-_______________________________________________________________________________
-Synchronet                           96                                   Index
-
-
diff --git a/src/sbbs2/smb/121a/smb_read.me b/src/sbbs2/smb/121a/smb_read.me
deleted file mode 100644
index b1c1ec64d7..0000000000
--- a/src/sbbs2/smb/121a/smb_read.me
+++ /dev/null
@@ -1,65 +0,0 @@
-Synchronet Message Base (SMB) Specification v1.21 - READ.ME -
-=============================================================
-
-Files:
-
-        Miscellaneous
-        -------------
-        SMB_READ.ME     This file
-        FILE_ID.DIZ     Description of archive
-        SMB.HST         History of changes made since v1.00
-
-	Technical Specification
-        -----------------------
-        SMB.PRN         Paginated, to be printed at 12cpi (!)
-        SMB.TXT         Not paginated, for online viewing
-
-        Message Base C Library
-        ----------------------
-        SMBDEFS.H       C data types and constants
-        SMBVARS.C       C global variables
-        SMBLIB.H        C function prototypes
-        SMBLIB.C        C library functions
-	CRC32.H 	C header file for 32-bit CRC calculations
-        CRC16.C         C source file for 16-bit CRC calculations
-        LZH.H           C header file for LZH compression functions
-        LZH.C           C source file for LZH compression functions
-
-        Message Base Utility
-        --------------------
-        SMBUTIL.H       C header file
-        SMBUTIL.C       C source file
-        SMBUTIL.BOR     C makefile (for Borland C: make -f smbutil.bor)
-	SMBUTIL.WAT     C makefile (for Watcom C: wmake -f smbutil.wat
-                                      32-bit OS2: wmake -f smbutil.wat OS=OS2
-				      32-bit DOS: wmake -f smbutil.wat OS=DOSX)
-        SMBUTIL.EXE     Compiled and linked for 16-bit DOS
-
-        Check Message Base for Corruption
-        ---------------------------------
-        CHKSMB.C        C source file
-        CHKSMB.MAK      C makefile (for Borland C: make -f chksmb)
-        CHKSMB.EXE      Compiled and linked for 16-bit DOS
-
-	Rebuild Message Base Index and Allocation Files
-	-----------------------------------------------
-	FIXSMB.C	C source file
-	FIXSMB.MAK	C makefile (for Borland C: make -f fixsmb)
-	FIXSMB.EXE	Compiled and linked for 16-bit DOS
-
-        Convert from FidoNet (FTSC-1) to SMB
-        ------------------------------------
-        FIDO2SMB.C      C source file
-        FIDO2SMB.MAK    C makefile (for Borland C: make -f fido2smb)
-
-        Convert from Internet (RFC-822) to SMB
-        --------------------------------------
-        INET2SMB.C      C source file
-        INET2SMB.MAK    C makefile (for Borland C: make -f inet2smb)
-
-        Convert from QWK to SMB
-        -----------------------
-        QWK2SMB.C       C source file
-        QWK2SMB.MAK     C makefile (for Borland C: make -f qwk2smb)
-
-/* END of SMB_READ.ME */
diff --git a/src/sbbs2/smb/121a/smbdefs.h b/src/sbbs2/smb/121a/smbdefs.h
deleted file mode 100644
index 71791e6952..0000000000
--- a/src/sbbs2/smb/121a/smbdefs.h
+++ /dev/null
@@ -1,449 +0,0 @@
-/* SMBDEFS.H */
-
-#ifndef _SMBDEFS_H
-#define _SMBDEFS_H
-
-/**********/
-/* Macros */
-/**********/
-
-#define SMB_VERSION 		0x0121		/* SMB format version */
-										/* High byte major, low byte minor */
-#define SMBLIB_VERSION		"1.21a"     /* SMB library version */
-
-										/* Control characters */
-#define TAB 				0x09		/* Horizontal tabulation	^I */
-#define LF					0x0a		/* Line feed				^J */
-#define FF					0x0c		/* Form feed				^L */
-#define CR					0x0d		/* Carriage return			^M */
-#define ESC 				0x1b		/* Escape					^[ */
-#define SP					0x20		/* Space					   */
-
-#define ulong				unsigned long
-#define ushort				unsigned short
-#define uchar				unsigned char
-#define uint				unsigned int
-
-/****************************************************************************/
-/* Memory allocation macros for various compilers and environments			*/
-/* MALLOC is used for allocations of 64k or less							*/
-/* FREE is used to free buffers allocated with MALLOC						*/
-/* LMALLOC is used for allocations of possibly larger than 64k				*/
-/* LFREE is used to free buffers allocated with LMALLOC 					*/
-/* REALLOC is used to re-size a previously MALLOCed or LMALLOCed buffer 	*/
-/****************************************************************************/
-#if defined(__COMPACT__) || defined(__LARGE__) || defined(__HUGE__)
-#	define HUGE16 huge
-#	define FAR16 far
-#	if defined(__TURBOC__)
-#		define REALLOC(x,y) farrealloc(x,y)
-#		define LMALLOC(x) farmalloc(x)
-#		define MALLOC(x) farmalloc(x)
-#		define LFREE(x) farfree(x)
-#		define FREE(x) farfree(x)
-#	elif defined(__WATCOMC__)
-#		define REALLOC realloc
-#		define LMALLOC(x) halloc(x,1)  /* far heap, but slow */
-#		define MALLOC malloc		   /* far heap, but 64k max */
-#		define LFREE hfree
-#		define FREE free
-#	else	/* Other 16-bit Compiler */
-#		define REALLOC realloc
-#		define LMALLOC malloc
-#		define MALLOC malloc
-#		define LFREE free
-#		define FREE free
-#	endif
-#else		/* 32-bit Compiler or Small Memory Model */
-#	define HUGE16
-#	define FAR16
-#	define REALLOC realloc
-#	define LMALLOC malloc
-#	define MALLOC malloc
-#	define LFREE free
-#	define FREE free
-#endif
-
-
-#define SDT_BLOCK_LEN		256 		/* Size of data blocks */
-#define SHD_BLOCK_LEN		256 		/* Size of header blocks */
-
-#define SMB_SELFPACK		0			/* Self-packing storage allocation */
-#define SMB_FASTALLOC		1			/* Fast allocation */
-#define SMB_HYPERALLOC		2			/* No allocation */
-
-#define SMB_EMAIL			1			/* User numbers stored in Indexes */
-
-										/* Time zone macros for when_t.zone */
-#define DAYLIGHT			0x8000		/* Daylight savings is active */
-#define US_ZONE 			0x4000		/* U.S. time zone */
-#define WESTERN_ZONE		0x2000		/* Non-standard zone west of UT */
-#define EASTERN_ZONE		0x1000		/* Non-standard zone east of UT */
-
-										/* US Time Zones (standard) */
-#define AST 				0x40F0		// Atlantic 			(-04:00)
-#define EST 				0x412C		// Eastern				(-05:00)
-#define CST 				0x4168		// Central				(-06:00)
-#define MST 				0x41A4		// Mountain 			(-07:00)
-#define PST 				0x41E0		// Pacific				(-08:00)
-#define YST 				0x421C		// Yukon				(-09:00)
-#define HST 				0x4258		// Hawaii/Alaska		(-10:00)
-#define BST 				0x4294		// Bering				(-11:00)
-
-										/* US Time Zones (daylight) */
-#define ADT 				0xC0F0		// Atlantic 			(-03:00)
-#define EDT 				0xC12C		// Eastern				(-04:00)
-#define CDT 				0xC168		// Central				(-05:00)
-#define MDT 				0xC1A4		// Mountain 			(-06:00)
-#define PDT 				0xC1E0		// Pacific				(-07:00)
-#define YDT 				0xC21C		// Yukon				(-08:00)
-#define HDT 				0xC258		// Hawaii/Alaska		(-09:00)
-#define BDT 				0xC294		// Bering				(-10:00)
-
-										/* Non-standard Time Zones */
-#define MID 				0x2294		// Midway				(-11:00)
-#define VAN 				0x21E0		// Vancouver			(-08:00)
-#define EDM 				0x21A4		// Edmonton 			(-07:00)
-#define WIN 				0x2168		// Winnipeg 			(-06:00)
-#define BOG 				0x212C		// Bogota				(-05:00)
-#define CAR 				0x20F0		// Caracas				(-04:00)
-#define RIO 				0x20B4		// Rio de Janeiro		(-03:00)
-#define FER 				0x2078		// Fernando de Noronha	(-02:00)
-#define AZO 				0x203C		// Azores				(-01:00)
-#define LON 				0x1000		// London				(+00:00)
-#define BER 				0x103C		// Berlin				(+01:00)
-#define ATH 				0x1078		// Athens				(+02:00)
-#define MOS 				0x10B4		// Moscow				(+03:00)
-#define DUB 				0x10F0		// Dubai				(+04:00)
-#define KAB 				0x110E		// Kabul				(+04:30)
-#define KAR 				0x112C		// Karachi				(+05:00)
-#define BOM 				0x114A		// Bombay				(+05:30)
-#define KAT 				0x1159		// Kathmandu			(+05:45)
-#define DHA 				0x1168		// Dhaka				(+06:00)
-#define BAN 				0x11A4		// Bangkok				(+07:00)
-#define HON 				0x11E0		// Hong Kong			(+08:00)
-#define TOK 				0x121C		// Tokyo				(+09:00)
-#define SYD 				0x1258		// Sydney				(+10:00)
-#define NOU 				0x1294		// Noumea				(+11:00)
-#define WEL 				0x12D0		// Wellington			(+12:00)
-
-										/* Valid hfield_t.types */
-#define SENDER				0x00
-#define SENDERAGENT 		0x01
-#define SENDERNETTYPE		0x02
-#define SENDERNETADDR		0x03
-#define SENDEREXT			0x04
-#define SENDERPOS			0x05
-#define SENDERORG			0x06
-
-#define AUTHOR				0x10
-#define AUTHORAGENT 		0x11
-#define AUTHORNETTYPE		0x12
-#define AUTHORNETADDR		0x13
-#define AUTHOREXT			0x14
-#define AUTHORPOS			0x15
-#define AUTHORORG			0x16
-
-#define REPLYTO 			0x20
-#define REPLYTOAGENT		0x21
-#define REPLYTONETTYPE		0x22
-#define REPLYTONETADDR		0x23
-#define REPLYTOEXT			0x24
-#define REPLYTOPOS			0x25
-#define REPLYTOORG			0x26
-
-#define RECIPIENT			0x30
-#define RECIPIENTAGENT		0x31
-#define RECIPIENTNETTYPE	0x32
-#define RECIPIENTNETADDR	0x33
-#define RECIPIENTEXT		0x34
-#define RECIPIENTPOS		0x35
-#define RECIPIENTORG		0x36
-
-#define FORWARDTO			0x40
-#define FORWARDTOAGENT		0x41
-#define FORWARDTONETTYPE	0x42
-#define FORWARDTONETADDR	0x43
-#define FORWARDTOEXT		0x44
-#define FORWARDTOPOS		0x45
-#define FORWARDTOORG		0x46
-
-#define FORWARDED			0x48
-
-#define RECEIVEDBY			0x50
-#define RECEIVEDBYAGENT 	0x51
-#define RECEIVEDBYNETTYPE	0x52
-#define RECEIVEDBYNETADDR	0x53
-#define RECEIVEDBYEXT		0x54
-#define RECEIVEDBYPOS		0x55
-#define RECEIVEDBYORG		0x56
-
-#define RECEIVED			0x58
-
-#define SUBJECT 			0x60
-#define SUMMARY 			0x61
-#define COMMENT 			0x62
-#define CARBONCOPY			0x63
-#define GROUP				0x64
-#define EXPIRATION			0x65
-#define PRIORITY			0x66
-
-#define FILEATTACH			0x70
-#define DESTFILE			0x71
-#define FILEATTACHLIST		0x72
-#define DESTFILELIST		0x73
-#define FILEREQUEST 		0x74
-#define FILEPASSWORD		0x75
-#define FILEREQUESTLIST 	0x76
-#define FILEPASSWORDLIST	0x77
-
-#define IMAGEATTACH 		0x80
-#define ANIMATTACH			0x81
-#define FONTATTACH			0x82
-#define SOUNDATTACH 		0x83
-#define PRESENTATTACH		0x84
-#define VIDEOATTACH 		0x85
-#define APPDATAATTACH		0x86
-
-#define IMAGETRIGGER		0x90
-#define ANIMTRIGGER 		0x91
-#define FONTTRIGGER 		0x92
-#define SOUNDTRIGGER		0x93
-#define PRESENTTRIGGER		0x94
-#define VIDEOTRIGGER		0x95
-#define APPDATATRIGGER		0x96
-
-#define FIDOCTRL			0xa0
-#define FIDOAREA			0xa1
-#define FIDOSEENBY			0xa2
-#define FIDOPATH			0xa3
-#define FIDOMSGID			0xa4
-#define FIDOREPLYID 		0xa5
-#define FIDOPID 			0xa6
-#define FIDOFLAGS			0xa7
-
-#define RFC822HEADER		0xb0
-#define RFC822MSGID 		0xb1
-#define RFC822REPLYID		0xb2
-
-#define UNKNOWN 			0xf1
-#define UNKNOWNASCII		0xf2
-#define UNUSED				0xff
-
-										/* Valid dfield_t.types */
-#define TEXT_BODY			0x00
-#define TEXT_SOUL			0x01
-#define TEXT_TAIL			0x02
-#define TEXT_WING			0x03
-#define IMAGEEMBED			0x20
-#define ANIMEMBED			0x21
-#define FONTEMBED			0x22
-#define SOUNDEMBED			0x23
-#define PRESENTEMBED		0x24
-#define VIDEOEMBED			0x25
-#define APPDATAEMBED		0x26
-#define UNUSED				0xff
-
-
-										/* Message attributes */
-#define MSG_PRIVATE 		(1<<0)
-#define MSG_READ			(1<<1)
-#define MSG_PERMANENT		(1<<2)
-#define MSG_LOCKED			(1<<3)
-#define MSG_DELETE			(1<<4)
-#define MSG_ANONYMOUS		(1<<5)
-#define MSG_KILLREAD		(1<<6)
-#define MSG_MODERATED		(1<<7)
-#define MSG_VALIDATED		(1<<8)
-
-										/* Auxillary header attributes */
-#define MSG_FILEREQUEST 	(1<<0)		// File request
-#define MSG_FILEATTACH		(1<<1)		// File(s) attached to Msg
-#define MSG_TRUNCFILE		(1<<2)		// Truncate file(s) when sent
-#define MSG_KILLFILE		(1<<3)		// Delete file(s) when sent
-#define MSG_RECEIPTREQ		(1<<4)		// Return receipt requested
-#define MSG_CONFIRMREQ		(1<<5)		// Confirmation receipt requested
-#define MSG_NODISP			(1<<6)		// Msg may not be displayed to user
-
-										/* Message network attributes */
-#define MSG_LOCAL			(1<<0)		// Msg created locally
-#define MSG_INTRANSIT		(1<<1)		// Msg is in-transit
-#define MSG_SENT			(1<<2)		// Sent to remote
-#define MSG_KILLSENT		(1<<3)		// Kill when sent
-#define MSG_ARCHIVESENT 	(1<<4)		// Archive when sent
-#define MSG_HOLD			(1<<5)		// Hold for pick-up
-#define MSG_CRASH			(1<<6)		// Crash
-#define MSG_IMMEDIATE		(1<<7)		// Send Msg now, ignore restrictions
-#define MSG_DIRECT			(1<<8)		// Send directly to destination
-#define MSG_GATE			(1<<9)		// Send via gateway
-#define MSG_ORPHAN			(1<<10) 	// Unknown destination
-#define MSG_FPU 			(1<<11) 	// Force pickup
-#define MSG_TYPELOCAL		(1<<12) 	// Msg is for local use only
-#define MSG_TYPEECHO		(1<<13) 	// Msg is for conference distribution
-#define MSG_TYPENET 		(1<<14) 	// Msg is direct network mail
-
-
-enum {
-     NET_NONE
-    ,NET_UNKNOWN
-    ,NET_FIDO
-    ,NET_POSTLINK
-    ,NET_QWK
-	,NET_INTERNET
-	,NET_WWIV
-	,NET_MHS
-
-/* Add new ones here */
-
-    ,NET_TYPES
-    };
-
-enum {
-     AGENT_PERSON
-    ,AGENT_PROCESS
-
-/* Add new ones here */
-
-    ,AGENT_TYPES
-    };
-
-enum {
-     XLAT_NONE              // No translation/End of translation list
-    ,XLAT_ENCRYPT           // Encrypted data
-    ,XLAT_ESCAPED           // 7-bit ASCII escaping for ctrl and 8-bit data
-    ,XLAT_HUFFMAN           // Static and adaptive Huffman coding compression
-    ,XLAT_LZW               // Limpel/Ziv/Welch compression
-    ,XLAT_MLZ78             // Modified LZ78 compression
-    ,XLAT_RLE               // Run length encoding compression
-    ,XLAT_IMPLODE           // Implode compression (PkZIP)
-    ,XLAT_SHRINK            // Shrink compression (PkZIP)
-	,XLAT_LZH				// LHarc (LHA) Dynamic Huffman coding
-
-/* Add new ones here */
-
-    ,XLAT_TYPES
-    };
-
-
-/************/
-/* Typedefs */
-/************/
-
-typedef struct {
-
-	ulong	time;			// Local time (unix format)
-	short	zone;			// Time zone
-
-	} when_t;
-
-typedef struct {
-
-	ushort	to; 			// 16-bit CRC of recipient name (lower case)
-	ushort	from;			// 16-bit CRC of sender name (lower case)
-	ushort	subj;			// 16-bit CRC of subject (lower case, w/o RE:)
-	ushort	attr;			// attributes (read, permanent, etc.)
-	ulong	offset; 		// offset into header file
-	ulong	number; 		// number of message (1 based)
-	ulong	time;			// time/date message was imported/posted
-
-	} idxrec_t;
-
-typedef struct {
-
-    uchar   id[4];          // text or binary unique hdr ID
-    ushort  version;        // version number (initially 100h for 1.00)
-    ushort  length;         // length including this struct
-
-	} smbhdr_t;
-
-typedef struct {
-
-	ulong	last_msg;		// last message number
-	ulong	total_msgs; 	// total messages
-	ulong	header_offset;	// byte offset to first header record
-	ulong	max_crcs;		// Maximum number of CRCs to keep in history
-    ulong   max_msgs;       // Maximum number of message to keep in sub
-    ushort  max_age;        // Maximum age of message to keep in sub (in days)
-	ushort	attr;			// Attributes for this message base (SMB_HYPER,etc)
-
-	} smbstatus_t;
-
-typedef struct {
-
-	uchar	id[4];			// SHD<^Z>
-    ushort  type;           // Message type (normally 0)
-    ushort  version;        // Version of type (initially 100h for 1.00)
-    ushort  length;         // Total length of fixed record + all fields
-	ushort	attr;			// Attributes (bit field) (duped in SID)
-	ulong	auxattr;		// Auxillary attributes (bit field)
-    ulong   netattr;        // Network attributes
-	when_t	when_written;	// Time message was written (unix format)
-	when_t	when_imported;	// Time message was imported
-    ulong   number;         // Message number
-    ulong   thread_orig;    // Original message number in thread
-    ulong   thread_next;    // Next message in thread
-    ulong   thread_first;   // First reply to this message
-	uchar	reserved[16];	// Reserved for future use
-    ulong   offset;         // Offset for buffer into data file (0 or mod 256)
-	ushort	total_dfields;	// Total number of data fields
-
-	} msghdr_t;
-
-typedef struct {
-
-	ushort	type;			// Type of data field
-    ulong   offset;         // Offset into buffer 
-    ulong   length;         // Length of data field
-
-    } dfield_t;
-
-typedef struct {
-
-	ushort	type;
-	ushort	length; 		// Length of buffer
-
-	} hfield_t;
-
-typedef struct {
-
-	ushort	zone;
-	ushort	net;
-	ushort	node;
-	ushort	point;
-
-    } fidoaddr_t;
-
-typedef struct {
-
-    ushort  type;
-	void	*addr;
-
-	} net_t;
-
-typedef struct {
-
-	idxrec_t	idx;			// Index
-	msghdr_t	hdr;			// Header record (fixed portion)
-	uchar		*to,			// To name
-				*to_ext,		// To extension
-				*from,			// From name
-				*from_ext,		// From extension
-				*replyto,		// Reply-to name
-				*replyto_ext,	// Reply-to extension */
-				*subj;			// Subject
-	ushort		to_agent,		// Type of agent message is to
-				from_agent, 	// Type of agent message is from
-				replyto_agent;	// Type of agent replies should be sent to
-	net_t		to_net, 		// Destination network type and address
-                from_net,       // Origin network address
-                replyto_net;    // Network type and address for replies
-	ushort		total_hfields;	// Total number of header fields
-	hfield_t	*hfield;		// Header fields (fixed length portion)
-	void		**hfield_dat;	// Header fields (variable length portion)
-	dfield_t	*dfield;		// Data fields (fixed length portion)
-	ulong		offset; 		// Offset (number of records) into index
-	uchar		forwarded;		// Forwarded from agent to another
-
-	} smbmsg_t;
-
-#endif /* Don't add anything after this #endif statement */
diff --git a/src/sbbs2/smb/121a/smblib.c b/src/sbbs2/smb/121a/smblib.c
deleted file mode 100644
index e2d8a474b8..0000000000
--- a/src/sbbs2/smb/121a/smblib.c
+++ /dev/null
@@ -1,1121 +0,0 @@
-/* SMBLIB.C */
-
-#include "smblib.h"
-
-/****************************************************************************/
-/* Open a message base of name 'smb_file'                                   */
-/* If retry_time is 0, fast open method (no compatibility/validity check)	*/
-/* Opens files for READing messages or updating message indices only        */
-/****************************************************************************/
-int smb_open(int retry_time)
-{
-    int file;
-    char str[128];
-	smbhdr_t hdr;
-
-shd_fp=sdt_fp=sid_fp=NULL;
-sprintf(str,"%s.SHD",smb_file);
-if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYNO,S_IWRITE|S_IREAD))==-1
-	|| (shd_fp=fdopen(file,"r+b"))==NULL) {
-	if(file!=-1)
-		close(file);
-    return(2); }
-
-if(retry_time && filelength(file)>=sizeof(smbhdr_t)) {
-	setvbuf(shd_fp,shd_buf,_IONBF,SHD_BLOCK_LEN);
-    if(smb_locksmbhdr(retry_time)) {
-		smb_close();
-        return(-1); }
-	memset(&hdr,0,sizeof(smbhdr_t));
-    fread(&hdr,sizeof(smbhdr_t),1,shd_fp);
-    if(memcmp(hdr.id,"SMB\x1a",4)) {
-		smb_close();
-        return(-2); }
-    if(hdr.version<0x110) {         /* Compatibility check */
-		smb_close();
-        return(-3); }
-    smb_unlocksmbhdr();
-	rewind(shd_fp); }
-
-setvbuf(shd_fp,shd_buf,_IOFBF,SHD_BLOCK_LEN);
-
-sprintf(str,"%s.SDT",smb_file);
-if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYNO,S_IWRITE|S_IREAD))==-1
-	|| (sdt_fp=fdopen(file,"r+b"))==NULL) {
-	if(file!=-1)
-		close(file);
-	smb_close();
-	return(1); }
-setvbuf(sdt_fp,NULL,_IOFBF,2*1024);
-
-sprintf(str,"%s.SID",smb_file);
-if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYNO,S_IWRITE|S_IREAD))==-1
-	|| (sid_fp=fdopen(file,"r+b"))==NULL) {
-	if(file!=-1)
-		close(file);
-	smb_close();
-	return(3); }
-setvbuf(sid_fp,NULL,_IOFBF,2*1024);
-
-return(0);
-}
-
-/****************************************************************************/
-/* Closes the currently open message base									*/
-/****************************************************************************/
-void smb_close(void)
-{
-if(shd_fp!=NULL) {
-	smb_unlocksmbhdr(); 			/* In case it's been locked */
-	fclose(shd_fp); }
-if(sid_fp!=NULL)
-	fclose(sid_fp);
-if(sdt_fp!=NULL)
-	fclose(sdt_fp);
-sid_fp=shd_fp=sdt_fp=NULL;
-}
-
-/****************************************************************************/
-/* Opens the data block allocation table message base 'smb_file'            */
-/* Retrys for retry_time number of seconds									*/
-/* Return 0 on success, non-zero otherwise									*/
-/****************************************************************************/
-int smb_open_da(int retry_time)
-{
-    int file;
-    char str[128];
-	long start;
-
-start=time(NULL);
-sprintf(str,"%s.SDA",smb_file);
-while(1) {
-	if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYRW,S_IWRITE|S_IREAD))!=-1)
-		break;
-	if(errno!=EACCES)
-		return(-1);
-	if(time(NULL)-start>=retry_time)
-		return(-2); }
-if((sda_fp=fdopen(file,"r+b"))==NULL)
-	return(-3);
-setvbuf(sda_fp,NULL,_IOFBF,2*1024);
-return(0);
-}
-
-/****************************************************************************/
-/* Opens the header block allocation table for message base 'smb_file'      */
-/* Retrys for retry_time number of seconds									*/
-/* Return 0 on success, non-zero otherwise									*/
-/****************************************************************************/
-int smb_open_ha(int retry_time)
-{
-    int file;
-    char str[128];
-	long start;
-
-start=time(NULL);
-sprintf(str,"%s.SHA",smb_file);
-while(1) {
-	if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYRW,S_IWRITE|S_IREAD))!=-1)
-		break;
-	if(errno!=EACCES)
-		return(-1);
-	if(time(NULL)-start>=retry_time)
-		return(-2); }
-if((sha_fp=fdopen(file,"r+b"))==NULL)
-	return(-3);
-setvbuf(sha_fp,NULL,_IOFBF,2*1024);
-return(0);
-}
-
-/****************************************************************************/
-/* If the parameter 'push' is non-zero, this function stores the currently  */
-/* open message base to the "virtual" smb stack. Up to SMB_STACK_LEN        */
-/* message bases may be stored (defined in SMBDEFS.H).						*/
-/* The parameter 'op' is the operation to perform on the stack. Either      */
-/* SMB_STACK_PUSH, SMB_STACK_POP, or SMB_STACK_XCHNG						*/
-/* If the operation is SMB_STACK_POP, this function restores a message base */
-/* previously saved with a SMB_STACK_PUSH call to this same function.		*/
-/* If the operation is SMB_STACK_XCHNG, then the current message base is	*/
-/* exchanged with the message base on the top of the stack (most recently	*/
-/* pushed.																	*/
-/* If the current message base is not open, the SMB_STACK_PUSH and			*/
-/* SMB_STACK_XCHNG operations do nothing									*/
-/* Returns 0 on success, non-zero if stack full.                            */
-/* If operation is SMB_STACK_POP or SMB_STACK_XCHNG, it always returns 0.	*/
-/****************************************************************************/
-int smb_stack(int op)
-{
-	static char stack_file[SMB_STACK_LEN][128];
-	static FILE *stack_sdt[SMB_STACK_LEN],
-				*stack_shd[SMB_STACK_LEN],
-				*stack_sid[SMB_STACK_LEN],
-				*stack_sda[SMB_STACK_LEN],
-				*stack_sha[SMB_STACK_LEN];
-	static int	stack_idx;
-	char		tmp_file[128];
-	FILE		*tmp_sdt,
-				*tmp_shd,
-				*tmp_sid,
-				*tmp_sda,
-				*tmp_sha;
-
-if(op==SMB_STACK_PUSH) {
-	if(stack_idx>=SMB_STACK_LEN)
-		return(1);
-	if(shd_fp==NULL || sdt_fp==NULL || sid_fp==NULL) /* Msg base not open */
-		return(0);
-	memcpy(stack_file[stack_idx],smb_file,128);
-	stack_sdt[stack_idx]=sdt_fp;
-	stack_shd[stack_idx]=shd_fp;
-	stack_sid[stack_idx]=sid_fp;
-	stack_sda[stack_idx]=sda_fp;
-	stack_sha[stack_idx]=sha_fp;
-	stack_idx++;
-	return(0); }
-/* pop or xchng */
-if(!stack_idx)	/* Nothing on the stack, so do nothing */
-	return(0);
-if(op==SMB_STACK_XCHNG) {
-	if(!shd_fp)
-		return(0);
-	memcpy(tmp_file,smb_file,128);
-	tmp_sdt=sdt_fp;
-	tmp_shd=shd_fp;
-	tmp_sid=sid_fp;
-	tmp_sda=sda_fp;
-	tmp_sha=sha_fp; }
-
-stack_idx--;
-memcpy(smb_file,stack_file[stack_idx],128);
-sdt_fp=stack_sdt[stack_idx];
-shd_fp=stack_shd[stack_idx];
-sid_fp=stack_sid[stack_idx];
-sda_fp=stack_sda[stack_idx];
-sha_fp=stack_sha[stack_idx];
-if(op==SMB_STACK_XCHNG) {
-	stack_idx++;
-	memcpy(stack_file[stack_idx-1],tmp_file,128);
-	stack_sdt[stack_idx-1]=tmp_sdt;
-	stack_shd[stack_idx-1]=tmp_shd;
-	stack_sid[stack_idx-1]=tmp_sid;
-	stack_sda[stack_idx-1]=tmp_sda;
-	stack_sha[stack_idx-1]=tmp_sha; }
-return(0);
-}
-
-/****************************************************************************/
-/* Truncates header file													*/
-/* Retrys for retry_time number of seconds									*/
-/* Return 0 on success, non-zero otherwise									*/
-/****************************************************************************/
-int smb_trunchdr(int retry_time)
-{
-	long start;
-
-start=time(NULL);
-rewind(shd_fp);
-while(1) {
-	if(!chsize(fileno(shd_fp),0L))
-		break;
-	if(errno!=EACCES)
-		return(-1);
-	if(time(NULL)-start>=retry_time)		/* Time-out */
-		return(-2); }
-return(0);
-}
-
-/*********************************/
-/* Message Base Header Functions */
-/*********************************/
-
-/****************************************************************************/
-/* Attempts for retry_time number of seconds to lock the message base hdr	*/
-/****************************************************************************/
-int smb_locksmbhdr(int retry_time)
-{
-	ulong start;
-
-start=time(NULL);
-while(1) {
-	if(!lock(fileno(shd_fp),0L,sizeof(smbhdr_t)+sizeof(smbstatus_t)))
-		return(0);
-	if(time(NULL)-start>=retry_time)
-		break;							/* Incase we've already locked it */
-	unlock(fileno(shd_fp),0L,sizeof(smbhdr_t)+sizeof(smbstatus_t)); }
-return(-1);
-}
-
-/****************************************************************************/
-/* Read the SMB header from the header file and place into "status"         */
-/****************************************************************************/
-int smb_getstatus(smbstatus_t *status)
-{
-    char    str[128];
-	int 	i;
-
-setvbuf(shd_fp,shd_buf,_IONBF,SHD_BLOCK_LEN);
-clearerr(shd_fp);
-fseek(shd_fp,sizeof(smbhdr_t),SEEK_SET);
-i=fread(status,1,sizeof(smbstatus_t),shd_fp);
-setvbuf(shd_fp,shd_buf,_IOFBF,SHD_BLOCK_LEN);
-if(i==sizeof(smbstatus_t))
-	return(0);
-return(1);
-}
-
-/****************************************************************************/
-/* Writes message base header												*/
-/****************************************************************************/
-int smb_putstatus(smbstatus_t status)
-{
-	int i;
-
-clearerr(shd_fp);
-fseek(shd_fp,sizeof(smbhdr_t),SEEK_SET);
-i=fwrite(&status,1,sizeof(smbstatus_t),shd_fp);
-fflush(shd_fp);
-if(i==sizeof(smbstatus_t))
-	return(0);
-return(1);
-}
-
-/****************************************************************************/
-/* Unlocks previously locks message base header 							*/
-/****************************************************************************/
-int smb_unlocksmbhdr()
-{
-return(unlock(fileno(shd_fp),0L,sizeof(smbhdr_t)+sizeof(smbstatus_t)));
-}
-
-/********************************/
-/* Individual Message Functions */
-/********************************/
-
-/****************************************************************************/
-/* Attempts for retry_time number of seconds to lock the header for 'msg'   */
-/****************************************************************************/
-int smb_lockmsghdr(smbmsg_t msg, int retry_time)
-{
-    ulong start;
-
-start=time(NULL);
-while(1) {
-	if(!lock(fileno(shd_fp),msg.idx.offset,sizeof(msghdr_t)))
-        return(0);
-    if(time(NULL)-start>=retry_time)
-		break;
-	unlock(fileno(shd_fp),msg.idx.offset,sizeof(msghdr_t)); }
-return(-1);
-}
-
-/****************************************************************************/
-/* Fills msg->idx with message index based on msg->hdr.number				*/
-/* OR if msg->hdr.number is 0, based on msg->offset (record offset).		*/
-/* if msg.hdr.number does not equal 0, then msg->offset is filled too.		*/
-/* Either msg->hdr.number or msg->offset must be initialized before 		*/
-/* calling this function													*/
-/* Returns 1 if message number wasn't found, 0 if it was                    */
-/****************************************************************************/
-int smb_getmsgidx(smbmsg_t *msg)
-{
-	idxrec_t idx;
-	ulong	 l,length,total,bot,top;
-
-clearerr(sid_fp);
-if(!msg->hdr.number) {
-	fseek(sid_fp,msg->offset*sizeof(idxrec_t),SEEK_SET);
-	if(!fread(&msg->idx,sizeof(idxrec_t),1,sid_fp))
-		return(1);
-	return(0); }
-
-length=filelength(fileno(sid_fp));
-if(!length)
-	return(1);
-total=length/sizeof(idxrec_t);
-if(!total)
-	return(1);
-
-bot=0;
-top=total;
-l=total/2; /* Start at middle index */
-while(1) {
-	fseek(sid_fp,l*sizeof(idxrec_t),SEEK_SET);
-	if(!fread(&idx,sizeof(idxrec_t),1,sid_fp))
-		return(1);
-	if(bot==top-1 && idx.number!=msg->hdr.number)
-        return(1);
-	if(idx.number>msg->hdr.number) {
-		top=l;
-		l=bot+((top-bot)/2);
-		continue; }
-	if(idx.number<msg->hdr.number) {
-		bot=l;
-		l=top-((top-bot)/2);
-		continue; }
-	break; }
-msg->idx=idx;
-msg->offset=l;
-return(0);
-}
-
-/****************************************************************************/
-/* Reads the last index record in the open message base 					*/
-/****************************************************************************/
-int smb_getlastidx(idxrec_t *idx)
-{
-	long length;
-
-clearerr(sid_fp);
-length=filelength(fileno(sid_fp));
-if(length<sizeof(idxrec_t))
-	return(-1);
-fseek(sid_fp,length-sizeof(idxrec_t),SEEK_SET);
-if(!fread(idx,sizeof(idxrec_t),1,sid_fp))
-	return(-2);
-return(0);
-}
-
-/****************************************************************************/
-/* Figures out the total length of the header record for 'msg'              */
-/* Returns length															*/
-/****************************************************************************/
-uint smb_getmsghdrlen(smbmsg_t msg)
-{
-	int i;
-
-/* fixed portion */
-msg.hdr.length=sizeof(msghdr_t);
-/* data fields */
-msg.hdr.length+=msg.hdr.total_dfields*sizeof(dfield_t);
-/* header fields */
-for(i=0;i<msg.total_hfields;i++) {
-	msg.hdr.length+=sizeof(hfield_t);
-	msg.hdr.length+=msg.hfield[i].length; }
-return(msg.hdr.length);
-}
-
-/****************************************************************************/
-/* Figures out the total length of the data buffer for 'msg'                */
-/* Returns length															*/
-/****************************************************************************/
-ulong smb_getmsgdatlen(smbmsg_t msg)
-{
-	int i;
-	ulong length=0L;
-
-for(i=0;i<msg.hdr.total_dfields;i++)
-	length+=msg.dfield[i].length;
-return(length);
-}
-
-/****************************************************************************/
-/* Read header information into 'msg' structure                             */
-/* msg->idx.offset must be set before calling this function 				*/
-/* Must call smb_freemsgmem() to free memory allocated for var len strs 	*/
-/* Returns 0 on success, non-zero if error									*/
-/****************************************************************************/
-int smb_getmsghdr(smbmsg_t *msg)
-{
-	ushort	i;
-	ulong	l,offset;
-	idxrec_t idx;
-
-rewind(shd_fp);
-fseek(shd_fp,msg->idx.offset,SEEK_SET);
-idx=msg->idx;
-offset=msg->offset;
-memset(msg,0,sizeof(smbmsg_t));
-msg->idx=idx;
-msg->offset=offset;
-if(!fread(&msg->hdr,sizeof(msghdr_t),1,shd_fp))
-	return(-1);
-if(memcmp(msg->hdr.id,"SHD\x1a",4))
-	return(-2);
-if(msg->hdr.version<0x110)
-	return(-9);
-l=sizeof(msghdr_t);
-if(msg->hdr.total_dfields && (msg->dfield
-	=(dfield_t *)MALLOC(sizeof(dfield_t)*msg->hdr.total_dfields))==NULL) {
-	smb_freemsgmem(*msg);
-	return(-3); }
-i=0;
-while(i<msg->hdr.total_dfields && l<msg->hdr.length) {
-	if(!fread(&msg->dfield[i],sizeof(dfield_t),1,shd_fp)) {
-		smb_freemsgmem(*msg);
-		return(-4); }
-	i++;
-	l+=sizeof(dfield_t); }
-if(i<msg->hdr.total_dfields) {
-	smb_freemsgmem(*msg);
-	return(-8); }
-
-while(l<msg->hdr.length) {
-	i=msg->total_hfields;
-	if((msg->hfield_dat=(void **)REALLOC(msg->hfield_dat,sizeof(void *)*(i+1)))
-		==NULL) {
-		smb_freemsgmem(*msg);
-		return(-3); }
-	if((msg->hfield=(hfield_t *)REALLOC(msg->hfield
-		,sizeof(hfield_t)*(i+1)))==NULL) {
-		smb_freemsgmem(*msg);
-		return(-3); }
-	msg->total_hfields++;
-	if(!fread(&msg->hfield[i],sizeof(hfield_t),1,shd_fp)) {
-		smb_freemsgmem(*msg);
-		return(-5); }
-	l+=sizeof(hfield_t);
-	if((msg->hfield_dat[i]=(char *)MALLOC(msg->hfield[i].length+1))
-		==NULL) {			/* Allocate 1 extra for NULL terminator */
-		smb_freemsgmem(*msg);  /* or 0 length field */
-		return(-3); }
-	memset(msg->hfield_dat[i],0,msg->hfield[i].length+1);  /* init to NULL */
-	if(msg->hfield[i].length
-		&& !fread(msg->hfield_dat[i],msg->hfield[i].length,1,shd_fp)) {
-		smb_freemsgmem(*msg);
-		return(-6); }
-
-	switch(msg->hfield[i].type) {	/* convenience variables */
-		case SENDER:
-			if(!msg->from) {
-				msg->from=msg->hfield_dat[i];
-				break; }
-		case FORWARDED: 	/* fall through */
-			msg->forwarded=1;
-			break;
-		case SENDERAGENT:
-			if(!msg->forwarded)
-				msg->from_agent=*(ushort *)msg->hfield_dat[i];
-            break;
-		case SENDEREXT:
-			if(!msg->forwarded)
-				msg->from_ext=msg->hfield_dat[i];
-			break;
-		case SENDERNETTYPE:
-			if(!msg->forwarded)
-				msg->from_net.type=*(ushort *)msg->hfield_dat[i];
-            break;
-		case SENDERNETADDR:
-			if(!msg->forwarded)
-				msg->from_net.addr=msg->hfield_dat[i];
-            break;
-		case REPLYTO:
-			msg->replyto=msg->hfield_dat[i];
-            break;
-		case REPLYTOEXT:
-			msg->replyto_ext=msg->hfield_dat[i];
-			break;
-		case REPLYTOAGENT:
-			msg->replyto_agent=*(ushort *)msg->hfield_dat[i];
-            break;
-		case REPLYTONETTYPE:
-			msg->replyto_net.type=*(ushort *)msg->hfield_dat[i];
-            break;
-		case REPLYTONETADDR:
-			msg->replyto_net.addr=msg->hfield_dat[i];
-            break;
-		case RECIPIENT:
-			msg->to=msg->hfield_dat[i];
-            break;
-		case RECIPIENTEXT:
-			msg->to_ext=msg->hfield_dat[i];
-			break;
-		case RECIPIENTAGENT:
-			msg->to_agent=*(ushort *)msg->hfield_dat[i];
-            break;
-		case RECIPIENTNETTYPE:
-			msg->to_net.type=*(ushort *)msg->hfield_dat[i];
-            break;
-		case RECIPIENTNETADDR:
-			msg->to_net.addr=msg->hfield_dat[i];
-            break;
-		case SUBJECT:
-			msg->subj=msg->hfield_dat[i];
-			break; }
-	l+=msg->hfield[i].length; }
-
-if(!msg->from || !msg->to || !msg->subj) {
-	smb_freemsgmem(*msg);
-	return(-7); }
-return(0);
-}
-
-/****************************************************************************/
-/* Frees memory allocated for 'msg'                                         */
-/****************************************************************************/
-void smb_freemsgmem(smbmsg_t msg)
-{
-	ushort	i;
-
-if(msg.dfield)
-	FREE(msg.dfield);
-for(i=0;i<msg.total_hfields;i++)
-	if(msg.hfield_dat[i])
-		FREE(msg.hfield_dat[i]);
-if(msg.hfield)
-	FREE(msg.hfield);
-if(msg.hfield_dat)
-	FREE(msg.hfield_dat);
-}
-
-/****************************************************************************/
-/* Unlocks header for 'msg'                                                 */
-/****************************************************************************/
-int smb_unlockmsghdr(smbmsg_t msg)
-{
-return(unlock(fileno(shd_fp),msg.idx.offset,sizeof(msghdr_t)));
-}
-
-
-/****************************************************************************/
-/* Adds a header field to the 'msg' structure (in memory only)              */
-/****************************************************************************/
-int smb_hfield(smbmsg_t *msg, ushort type, ushort length, void *data)
-{
-	int i;
-
-i=msg->total_hfields;
-if((msg->hfield=(hfield_t *)REALLOC(msg->hfield,sizeof(hfield_t)*(i+1)))
-	==NULL)
-	return(1);
-if((msg->hfield_dat=(void **)REALLOC(msg->hfield_dat,sizeof(void *)*(i+1)))
-	==NULL)
-	return(2);
-msg->total_hfields++;
-msg->hfield[i].type=type;
-msg->hfield[i].length=length;
-if(length) {
-	if((msg->hfield_dat[i]=(void *)MALLOC(length))==NULL)
-		return(4);
-	memcpy(msg->hfield_dat[i],data,length); }
-else
-	msg->hfield_dat[i]=NULL;
-return(0);
-}
-
-/****************************************************************************/
-/* Adds a data field to the 'msg' structure (in memory only)                */
-/* Automatically figures out the offset into the data buffer from existing	*/
-/* dfield lengths															*/
-/****************************************************************************/
-int smb_dfield(smbmsg_t *msg, ushort type, ulong length)
-{
-	int i,j;
-
-i=msg->hdr.total_dfields;
-if((msg->dfield=(dfield_t *)REALLOC(msg->dfield,sizeof(dfield_t)*(i+1)))
-	==NULL)
-	return(1);
-msg->hdr.total_dfields++;
-msg->dfield[i].type=type;
-msg->dfield[i].length=length;
-for(j=msg->dfield[i].offset=0;j<i;j++)
-	msg->dfield[i].offset+=msg->dfield[j].length;
-return(0);
-}
-
-/****************************************************************************/
-/* Checks CRC history file for duplicate crc. If found, returns 1.			*/
-/* If no dupe, adds to CRC history and returns 0, or negative if error. 	*/
-/****************************************************************************/
-int smb_addcrc(ulong max_crcs, ulong crc, int retry_time)
-{
-	char	str[128];
-	int 	file;
-	long	length;
-	ulong	l,*buf;
-	time_t	start;
-
-if(!max_crcs)
-	return(0);
-start=time(NULL);
-sprintf(str,"%s.SCH",smb_file);
-while(1) {
-	if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYRW,S_IWRITE|S_IREAD))!=-1)
-		break;
-	if(errno!=EACCES)
-		return(-1);
-	if(time(NULL)-start>=retry_time)
-        return(-2); }
-length=filelength(file);
-if(length<0L) {
-	close(file);
-	return(-4); }
-if((buf=(ulong *)MALLOC(max_crcs*4))==NULL) {
-	close(file);
-	return(-3); }
-if(length>=max_crcs*4) {			/* Reached or exceeds max crcs */
-	read(file,buf,max_crcs*4);
-	for(l=0;l<max_crcs;l++)
-		if(crc==buf[l])
-			break;
-	if(l<max_crcs) {				/* Dupe CRC found */
-		close(file);
-		FREE(buf);
-		return(1); }
-	chsize(file,0L);				/* truncate it */
-	lseek(file,0L,SEEK_SET);
-	write(file,buf+4,(max_crcs-1)*4); }
-
-else if(length/4) { 						/* Less than max crcs */
-	read(file,buf,length);
-	for(l=0;l<length/4;l++)
-		if(crc==buf[l])
-			break;
-	if(l<length/4) {					/* Dupe CRC found */
-		close(file);
-		FREE(buf);
-		return(1); } }
-
-lseek(file,0L,SEEK_END);
-write(file,&crc,4); 			   /* Write to the end */
-FREE(buf);
-close(file);
-return(0);
-}
-
-
-/****************************************************************************/
-/* Creates a new message header record in the header file.					*/
-/* If storage is SMB_SELFPACK, self-packing conservative allocation is used */
-/* If storage is SMB_FASTALLOC, fast allocation is used 					*/
-/* If storage is SMB_HYPERALLOC, no allocation tables are used (fastest)	*/
-/****************************************************************************/
-int smb_addmsghdr(smbmsg_t *msg, smbstatus_t *status, int storage
-	,int retry_time)
-{
-	int i;
-	long l;
-
-if(smb_locksmbhdr(retry_time))
-    return(1);
-if(smb_getstatus(status))
-    return(2);
-
-if(storage!=SMB_HYPERALLOC && (i=smb_open_ha(retry_time))!=0)
-    return(i);
-
-msg->hdr.length=smb_getmsghdrlen(*msg);
-if(storage==SMB_HYPERALLOC)
-	l=smb_hallochdr(status->header_offset);
-else if(storage==SMB_FASTALLOC)
-    l=smb_fallochdr(msg->hdr.length);
-else
-    l=smb_allochdr(msg->hdr.length);
-if(l==-1L) {
-	smb_unlocksmbhdr();
-	fclose(sha_fp);
-	return(-1); }
-
-status->last_msg++;
-msg->idx.number=msg->hdr.number=status->last_msg;
-msg->idx.offset=status->header_offset+l;
-msg->idx.time=msg->hdr.when_imported.time;
-msg->idx.attr=msg->hdr.attr;
-msg->offset=status->total_msgs;
-status->total_msgs++;
-smb_putstatus(*status);
-
-if(storage!=SMB_HYPERALLOC)
-	fclose(sha_fp);
-i=smb_putmsg(*msg);
-smb_unlocksmbhdr();
-return(i);
-}
-
-/****************************************************************************/
-/* Writes both header and index information for msg 'msg'                   */
-/****************************************************************************/
-int smb_putmsg(smbmsg_t msg)
-{
-	int i;
-
-i=smb_putmsghdr(msg);
-if(i)
-	return(i);
-return(smb_putmsgidx(msg));
-}
-
-/****************************************************************************/
-/* Writes index information for 'msg'                                       */
-/* msg.idx																	*/
-/* and msg.offset must be set prior to calling to this function             */
-/* Returns 0 if everything ok                                               */
-/****************************************************************************/
-int smb_putmsgidx(smbmsg_t msg)
-{
-
-clearerr(sid_fp);
-fseek(sid_fp,msg.offset*sizeof(idxrec_t),SEEK_SET);
-if(!fwrite(&msg.idx,sizeof(idxrec_t),1,sid_fp))
-	return(1);
-fflush(sid_fp);
-return(0);
-}
-
-/****************************************************************************/
-/* Writes header information for 'msg'                                      */
-/* msg.hdr.length                                                           */
-/* msg.idx.offset                                                           */
-/* and msg.offset must be set prior to calling to this function             */
-/* Returns 0 if everything ok                                               */
-/****************************************************************************/
-int smb_putmsghdr(smbmsg_t msg)
-{
-	ushort	i;
-	ulong	l;
-
-clearerr(shd_fp);
-if(fseek(shd_fp,msg.idx.offset,SEEK_SET))
-	return(-1);
-
-/************************************************/
-/* Write the fixed portion of the header record */
-/************************************************/
-if(!fwrite(&msg.hdr,sizeof(msghdr_t),1,shd_fp))
-	return(-2);
-
-/************************************************/
-/* Write the data fields (each is fixed length) */
-/************************************************/
-for(i=0;i<msg.hdr.total_dfields;i++)
-	if(!fwrite(&msg.dfield[i],sizeof(dfield_t),1,shd_fp))
-		return(-3);
-
-/*******************************************/
-/* Write the variable length header fields */
-/*******************************************/
-for(i=0;i<msg.total_hfields;i++) {
-	if(!fwrite(&msg.hfield[i],sizeof(hfield_t),1,shd_fp))
-		return(-4);
-	if(msg.hfield[i].length 					/* more then 0 bytes long */
-		&& !fwrite(msg.hfield_dat[i],msg.hfield[i].length,1,shd_fp))
-		return(-5); }
-
-l=smb_getmsghdrlen(msg);
-while(l%SHD_BLOCK_LEN) {
-	if(fputc(0,shd_fp)==EOF)
-		return(-6); 			   /* pad block with NULL */
-	l++; }
-fflush(shd_fp);
-return(0);
-}
-
-/****************************************************************************/
-/* Creates a sub-board's initial header file                                */
-/* Truncates and deletes other associated SMB files 						*/
-/****************************************************************************/
-int smb_create(ulong max_crcs, ulong max_msgs, ushort max_age, ushort attr
-	,int retry_time)
-{
-    char        str[128];
-	smbhdr_t	hdr;
-	smbstatus_t status;
-
-if(filelength(fileno(shd_fp))>=sizeof(smbhdr_t)+sizeof(smbstatus_t)
-	&& smb_locksmbhdr(retry_time))	/* header exists, so lock it */
-	return(1);
-memset(&hdr,0,sizeof(smbhdr_t));
-memset(&status,0,sizeof(smbstatus_t));
-memcpy(hdr.id,"SMB\x1a",4);     /* <S> <M> <B> <^Z> */
-hdr.version=SMB_VERSION;
-hdr.length=sizeof(smbhdr_t)+sizeof(smbstatus_t);
-status.last_msg=status.total_msgs=0;
-status.header_offset=sizeof(smbhdr_t)+sizeof(smbstatus_t);
-status.max_crcs=max_crcs;
-status.max_msgs=max_msgs;
-status.max_age=max_age;
-status.attr=attr;
-rewind(shd_fp);
-fwrite(&hdr,1,sizeof(smbhdr_t),shd_fp);
-fwrite(&status,1,sizeof(smbstatus_t),shd_fp);
-rewind(shd_fp);
-chsize(fileno(shd_fp),sizeof(smbhdr_t)+sizeof(smbstatus_t));
-fflush(shd_fp);
-
-rewind(sdt_fp);
-chsize(fileno(sdt_fp),0L);
-rewind(sid_fp);
-chsize(fileno(sid_fp),0L);
-
-sprintf(str,"%s.SDA",smb_file);
-remove(str);						/* if it exists, delete it */
-sprintf(str,"%s.SHA",smb_file);
-remove(str);                        /* if it exists, delete it */
-sprintf(str,"%s.SCH",smb_file);
-remove(str);
-smb_unlocksmbhdr();
-return(0);
-}
-
-/****************************************************************************/
-/* Returns number of data blocks required to store "length" amount of data  */
-/****************************************************************************/
-ulong smb_datblocks(ulong length)
-{
-	ulong blocks;
-
-blocks=length/SDT_BLOCK_LEN;
-if(length%SDT_BLOCK_LEN)
-	blocks++;
-return(blocks);
-}
-
-/****************************************************************************/
-/* Returns number of header blocks required to store "length" size header   */
-/****************************************************************************/
-ulong smb_hdrblocks(ulong length)
-{
-	ulong blocks;
-
-blocks=length/SHD_BLOCK_LEN;
-if(length%SHD_BLOCK_LEN)
-	blocks++;
-return(blocks);
-}
-
-/****************************************************************************/
-/* Finds unused space in data file based on block allocation table and		*/
-/* marks space as used in allocation table.                                 */
-/* File must be opened read/write DENY ALL									*/
-/* Returns offset to beginning of data (in bytes, not blocks)				*/
-/* Assumes smb_open_da() has been called									*/
-/* fclose(sda_fp) should be called after									*/
-/* Returns negative on error												*/
-/****************************************************************************/
-long smb_allocdat(ulong length, ushort headers)
-{
-    ushort  i,j;
-	ulong	l,blocks,offset=0L;
-
-blocks=smb_datblocks(length);
-j=0;	/* j is consecutive unused block counter */
-fflush(sda_fp);
-rewind(sda_fp);
-while(!feof(sda_fp)) {
-	if(!fread(&i,2,1,sda_fp))
-        break;
-	offset+=SDT_BLOCK_LEN;
-    if(!i) j++;
-    else   j=0;
-	if(j==blocks) {
-		offset-=(blocks*SDT_BLOCK_LEN);
-        break; } }
-clearerr(sda_fp);
-fseek(sda_fp,(offset/SDT_BLOCK_LEN)*2L,SEEK_SET);
-for(l=0;l<blocks;l++)
-	if(!fwrite(&headers,2,1,sda_fp))
-		return(-1);
-fflush(sda_fp);
-return(offset);
-}
-
-/****************************************************************************/
-/* Allocates space for data, but doesn't search for unused blocks           */
-/* Returns negative on error												*/
-/****************************************************************************/
-long smb_fallocdat(ulong length, ushort headers)
-{
-	ulong	l,blocks,offset;
-
-fflush(sda_fp);
-clearerr(sda_fp);
-blocks=smb_datblocks(length);
-fseek(sda_fp,0L,SEEK_END);
-offset=(ftell(sda_fp)/2L)*SDT_BLOCK_LEN;
-for(l=0;l<blocks;l++)
-	if(!fwrite(&headers,2,1,sda_fp))
-        break;
-fflush(sda_fp);
-if(l<blocks)
-	return(-1L);
-return(offset);
-}
-
-/****************************************************************************/
-/* De-allocates space for data												*/
-/* Returns non-zero on error												*/
-/****************************************************************************/
-int smb_freemsgdat(ulong offset, ulong length, ushort headers)
-{
-	ushort	i;
-	ulong	l,blocks;
-
-blocks=smb_datblocks(length);
-
-clearerr(sda_fp);
-for(l=0;l<blocks;l++) {
-	if(fseek(sda_fp,((offset/SDT_BLOCK_LEN)+l)*2L,SEEK_SET))
-		return(1);
-	if(!fread(&i,2,1,sda_fp))
-		return(2);
-	if(headers>i)
-		i=0;			/* don't want to go negative */
-	else
-		i-=headers;
-	if(fseek(sda_fp,-2L,SEEK_CUR))
-		return(3);
-	if(!fwrite(&i,2,1,sda_fp))
-		return(4); }
-fflush(sda_fp);
-return(0);
-}
-
-/****************************************************************************/
-/* Adds to data allocation records for blocks starting at 'offset'          */
-/* Returns non-zero on error												*/
-/****************************************************************************/
-int smb_incdat(ulong offset, ulong length, ushort headers)
-{
-	ushort	i;
-	ulong	l,blocks;
-
-clearerr(sda_fp);
-blocks=smb_datblocks(length);
-for(l=0;l<blocks;l++) {
-	fseek(sda_fp,((offset/SDT_BLOCK_LEN)+l)*2L,SEEK_SET);
-	if(!fread(&i,2,1,sda_fp))
-		return(1);
-	i+=headers;
-	fseek(sda_fp,-2L,SEEK_CUR);
-	if(!fwrite(&i,2,1,sda_fp))
-		return(2); }
-fflush(sda_fp);
-return(0);
-}
-
-/****************************************************************************/
-/* De-allocates blocks for header record									*/
-/* Returns non-zero on error												*/
-/****************************************************************************/
-int smb_freemsghdr(ulong offset, ulong length)
-{
-	uchar	c=0;
-	ulong	l,blocks;
-
-clearerr(sha_fp);
-blocks=smb_hdrblocks(length);
-fseek(sha_fp,offset/SHD_BLOCK_LEN,SEEK_SET);
-for(l=0;l<blocks;l++)
-	if(!fwrite(&c,1,1,sha_fp))
-		return(1);
-fflush(sha_fp);
-return(0);
-}
-
-/****************************************************************************/
-/* Frees all allocated header and data blocks for 'msg'                     */
-/****************************************************************************/
-int smb_freemsg(smbmsg_t msg, smbstatus_t status)
-{
-	int 	i;
-	ushort	x;
-
-if(status.attr&SMB_HYPERALLOC)	/* Nothing to do */
-	return(0);
-
-for(x=0;x<msg.hdr.total_dfields;x++) {
-	if((i=smb_freemsgdat(msg.hdr.offset+msg.dfield[x].offset
-		,msg.dfield[x].length,1))!=0)
-		return(i); }
-return(smb_freemsghdr(msg.idx.offset-status.header_offset,msg.hdr.length));
-}
-
-/****************************************************************************/
-/* Finds unused space in header file based on block allocation table and	*/
-/* marks space as used in allocation table.                                 */
-/* File must be opened read/write DENY ALL									*/
-/* Returns offset to beginning of header (in bytes, not blocks) 			*/
-/* Assumes smb_open_ha() has been called									*/
-/* fclose(sha_fp) should be called after									*/
-/* Returns -1L on error 													*/
-/****************************************************************************/
-long smb_allochdr(ulong length)
-{
-	uchar	c;
-	ushort	i;
-	ulong	l,blocks,offset=0;
-
-blocks=smb_hdrblocks(length);
-i=0;	/* i is consecutive unused block counter */
-fflush(sha_fp);
-rewind(sha_fp);
-while(!feof(sha_fp)) {
-	if(!fread(&c,1,1,sha_fp))
-        break;
-	offset+=SHD_BLOCK_LEN;
-	if(!c) i++;
-	else   i=0;
-	if(i==blocks) {
-		offset-=(blocks*SHD_BLOCK_LEN);
-        break; } }
-clearerr(sha_fp);
-fseek(sha_fp,offset/SHD_BLOCK_LEN,SEEK_SET);
-c=1;
-for(l=0;l<blocks;l++)
-	if(!fwrite(&c,1,1,sha_fp))
-		return(-1L);
-fflush(sha_fp);
-return(offset);
-}
-
-/****************************************************************************/
-/* Allocates space for index, but doesn't search for unused blocks          */
-/* Returns -1L on error 													*/
-/****************************************************************************/
-long smb_fallochdr(ulong length)
-{
-	uchar	c=1;
-	ulong	l,blocks,offset;
-
-blocks=smb_hdrblocks(length);
-fflush(sha_fp);
-clearerr(sha_fp);
-fseek(sha_fp,0L,SEEK_END);
-offset=ftell(sha_fp)*SHD_BLOCK_LEN;
-for(l=0;l<blocks;l++)
-	if(!fwrite(&c,1,1,sha_fp))
-		return(-1L);
-fflush(sha_fp);
-return(offset);
-}
-
-/************************************************************************/
-/* Allocate header blocks using Hyper Allocation						*/
-/* this function should be most likely not be called from anywhere but	*/
-/* smb_addmsghdr()														*/
-/************************************************************************/
-long smb_hallochdr(ulong header_offset)
-{
-	long l;
-
-fflush(shd_fp);
-fseek(shd_fp,0L,SEEK_END);
-l=ftell(shd_fp);
-if(l<header_offset) 					/* Header file truncated?!? */
-	return(header_offset);
-while((l-header_offset)%SHD_BLOCK_LEN)	/* Make sure even block boundry */
-	l++;
-return(l-header_offset);
-}
-
-/************************************************************************/
-/* Allocate data blocks using Hyper Allocation							*/
-/* smb_locksmbhdr() should be called before this function and not		*/
-/* unlocked until all data fields for this message have been written	*/
-/* to the SDT file														*/
-/************************************************************************/
-long smb_hallocdat()
-{
-	long l;
-
-fflush(sdt_fp);
-fseek(sdt_fp,0L,SEEK_END);
-l=ftell(sdt_fp);
-if(l<=0)
-	return(l);
-while(l%SDT_BLOCK_LEN)					/* Make sure even block boundry */
-	l++;
-return(l);
-}
-
-/* End of SMBLIB.C */
diff --git a/src/sbbs2/smb/121a/smblib.h b/src/sbbs2/smb/121a/smblib.h
deleted file mode 100644
index b682f74f03..0000000000
--- a/src/sbbs2/smb/121a/smblib.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/* SMBLIB.H */
-
-#ifndef _SMBLIB_H
-#define _SMBLIB_H
-
-#if defined(__WATCOMC__) || defined(__TURBOC__)
-#	include <io.h>
-#	include <mem.h>
-#	include <share.h>
-#else
-#	include <memory.h>
-#endif
-
-#ifdef __WATCOMC__
-#	include <dos.h>
-#elif defined(__TURBOC__)
-#	include <dir.h>
-#endif
-
-#include <malloc.h>
-#include <time.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#define GLOBAL extern	/* turn smbvars.c files into header */
-
-#include "smbvars.c"
-
-#define SMB_STACK_LEN		4			/* Max msg bases in smb_stack() 	*/
-#define SMB_STACK_POP       0           /* Pop a msg base off of smb_stack() */
-#define SMB_STACK_PUSH      1           /* Push a msg base onto smb_stack() */
-#define SMB_STACK_XCHNG     2           /* Exchange msg base w/last pushed */
-
-int 	smb_open(int retry_time);
-void	smb_close(void);
-int 	smb_open_da(int retry_time);
-int 	smb_open_ha(int retry_time);
-int 	smb_create(ulong max_crcs, ulong max_msgs, ushort max_age, ushort attr
-				  ,int retry_time);
-int 	smb_stack(int op);
-int 	smb_trunchdr(int retry_time);
-int 	smb_locksmbhdr(int retry_time);
-int 	smb_getstatus(smbstatus_t *status);
-int 	smb_putstatus(smbstatus_t status);
-int 	smb_unlocksmbhdr(void);
-int 	smb_getmsgidx(smbmsg_t *msg);
-int 	smb_getlastidx(idxrec_t *idx);
-uint	smb_getmsghdrlen(smbmsg_t msg);
-ulong	smb_getmsgdatlen(smbmsg_t msg);
-int 	smb_lockmsghdr(smbmsg_t msg, int retry_time);
-int 	smb_getmsghdr(smbmsg_t *msg);
-int 	smb_unlockmsghdr(smbmsg_t msg);
-int 	smb_addcrc(ulong max_crcs, ulong crc, int retry_time);
-int 	smb_hfield(smbmsg_t *msg, ushort type, ushort length, void *data);
-int 	smb_dfield(smbmsg_t *msg, ushort type, ulong length);
-int 	smb_addmsghdr(smbmsg_t *msg, smbstatus_t *status, int storage
-				,int retry_time);
-int 	smb_putmsg(smbmsg_t msg);
-int 	smb_putmsgidx(smbmsg_t msg);
-int 	smb_putmsghdr(smbmsg_t msg);
-void	smb_freemsgmem(smbmsg_t msg);
-ulong	smb_hdrblocks(ulong length);
-ulong	smb_datblocks(ulong length);
-long	smb_allochdr(ulong length);
-long	smb_fallochdr(ulong length);
-long	smb_hallochdr(ulong header_offset);
-long	smb_allocdat(ulong length, ushort headers);
-long	smb_fallocdat(ulong length, ushort headers);
-long	smb_hallocdat(void);
-int 	smb_incdat(ulong offset, ulong length, ushort headers);
-int 	smb_freemsg(smbmsg_t msg, smbstatus_t status);
-int 	smb_freemsgdat(ulong offset, ulong length, ushort headers);
-int 	smb_freemsghdr(ulong offset, ulong length);
-
-#endif /* Don't add anything after this #endif statement */
diff --git a/src/sbbs2/smb/121a/smbutil.bor b/src/sbbs2/smb/121a/smbutil.bor
deleted file mode 100644
index eaf0ec330b..0000000000
--- a/src/sbbs2/smb/121a/smbutil.bor
+++ /dev/null
@@ -1,56 +0,0 @@
-###############################
-# Makefile for SMBUTIL        #
-# For use with Borland C++    #
-# Tabstop=8		      #
-###############################
-
-# ATTN: To use this MAKEFILE, you must create a directory "l" off of the
-#       current directory to store the large model .OBJ files
-
-# Macros
-CC	= bcc
-LD	= tlink
-INCLUDE = \bc31\include
-LIB	= \bc31\lib
-MODEL	= l
-CFLAGS	= -d -N -C -m$(MODEL) -I$(INCLUDE) -DLZH_DYNAMIC_BUF -w-pro
-LFLAGS	= -n -c
-MAIN	= smbutil.exe
-OBJS	= $(MODEL)\smbutil.obj $(MODEL)\smblib.obj $(MODEL)\smbvars.obj \
-          $(MODEL)\lzh.obj
-HEADERS = smbutil.h smblib.h smbdefs.h crc32.h lzh.h
-
-!ifdef __OS2__
-CC      = c:\bcos2\bin\bcc
-LD      = c:\bcos2\bin\tlink
-INCLUDE = c:\bcos2\include;smb
-LIB     = c:\bcos2\lib
-MODEL	= os2
-CFLAGS	= -d -C -I$(INCLUDE)
-#-DLZH_DYNAMIC_BUF
-LFLAGS	= -c -w-srf
-!endif
-
-# Implicit C Compile Rule
-{.}.c.obj:
-	@echo Compiling (I) $< to $@ ...
-	$(CC) $(CFLAGS) -n$(MODEL) -c $<
-
-# Main EXE Link Rule
-$(MAIN): $(OBJS)
-    	@echo Linking $< ...
-!ifdef __OS2__
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c02.obj $(OBJS) $(LIB)\wildargs.obj
-+, $*, $*, $(LIB)\os2.lib $(LIB)\c2.lib
-!else
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c0$(MODEL) $(OBJS) $(LIB)\wildargs.obj
-+, $*, $*, $(LIB)\c$(MODEL).lib $(LIB)\math$(MODEL).lib $(LIB)\emu.lib
-!endif
-
-# All .obj modules
-$(MODEL)\smbutil.obj:	$(HEADERS)
-$(MODEL)\smbvars.obj:	$(HEADERS)
-$(MODEL)\smblib.obj:	$(HEADERS)
-$(MODEL)\lzh.obj:	$(HEADERS)
diff --git a/src/sbbs2/smb/121a/smbutil.c b/src/sbbs2/smb/121a/smbutil.c
deleted file mode 100644
index 9ed216a045..0000000000
--- a/src/sbbs2/smb/121a/smbutil.c
+++ /dev/null
@@ -1,1419 +0,0 @@
-/* SMBUTIL.C */
-
-/* Synchronet Message Base Utility */
-
-#define SMBUTIL_VER "1.24"
-
-#include "smblib.h"
-#include "smbutil.h"
-#include "crc32.h"
-#include "crc16.c"
-
-#ifdef __WATCOMC__
-	#include <dos.h>
-#endif
-
-/********************/
-/* Global variables */
-/********************/
-
-ulong mode=0L;
-ushort tzone=PST;
-char filein[128];
-char attach[128];
-
-/************************/
-/* Program usage/syntax */
-/************************/
-
-char *usage=
-"usage: smbutil [/opts] cmd <filespec.SHD>\n"
-"\n"
-"cmd:\n"
-"       l[n] = list msgs starting at number n\n"
-"       r[n] = read msgs starting at number n\n"
-"       v[n] = view msg headers starting at number n\n"
-"       k[n] = kill (delete) n msgs\n"
-"       i<f> = import from text file f\n"
-"       s    = display msg base status\n"
-"       c    = change msg base status\n"
-"       m    = maintain msg base - delete old msgs and msgs over max\n"
-"       p[k] = pack msg base (k specifies minimum packable Kbytes)\n"
-"opts:\n"
-"       a    = always pack msg base (disable compression analysis)\n"
-"       z[n] = set time zone (n=min +/- from UT or 'EST','EDT','CST',etc)\n"
-;
-
-/****************************************************************************/
-/* Checks the disk drive for the existence of a file. Returns 1 if it       */
-/* exists, 0 if it doesn't.                                                 */
-/****************************************************************************/
-char fexist(char *filespec)
-{
-	struct ffblk f;
-
-if(findfirst(filespec,&f,0)==0)
-    return(1);
-return(0);
-}
-
-/****************************************************************************/
-/* Returns the length of the file in 'filespec'                             */
-/****************************************************************************/
-long flength(char *filespec)
-{
-	struct ffblk f;
-
-if(findfirst(filespec,&f,0)==0)
-#ifdef __WATCOMC__
-	return(f.size);
-#else
-	return(f.ff_fsize);
-#endif
-return(-1L);
-}
-
-
-/****************************************************************************/
-/* Adds a new message to the message base									*/
-/****************************************************************************/
-void postmsg(smbstatus_t status)
-{
-	char	str[128],buf[SDT_BLOCK_LEN];
-	ushort	xlat;
-	int 	i,j,k,file;
-	long	length;
-	ulong	offset,crc=0xffffffffUL;
-	FILE	*instream;
-	smbmsg_t	msg;
-
-length=flength(filein);
-if(length<1L) {
-	printf("Invalid file size for '%s'\n",filein);
-	exit(1); }
-length+=2;	/* for translation string */
-if(!(status.attr&SMB_HYPERALLOC)) {
-	i=smb_open_da(10);
-	if(i) {
-		printf("smb_open_da returned %d\n",i);
-		exit(1); }
-	offset=smb_allocdat(length,1);
-	fclose(sda_fp); }
-else
-	offset=smb_hallocdat();
-
-if((file=open(filein,O_RDONLY|O_BINARY))==-1
-	|| (instream=fdopen(file,"rb"))==NULL) {
-	printf("Error opening %s for read\n",filein);
-	smb_freemsgdat(offset,length,1);
-	exit(1); }
-setvbuf(instream,NULL,_IOFBF,32*1024);
-fseek(sdt_fp,offset,SEEK_SET);
-xlat=XLAT_NONE;
-fwrite(&xlat,2,1,sdt_fp);
-k=SDT_BLOCK_LEN-2;
-while(!feof(instream)) {
-	memset(buf,0,k);
-	j=fread(buf,1,k,instream);
-	if(status.max_crcs)
-		for(i=0;i<j;i++)
-			crc=ucrc32(buf[i],crc);
-	fwrite(buf,k,1,sdt_fp);
-	k=SDT_BLOCK_LEN; }
-fflush(sdt_fp);
-fclose(instream);
-crc=~crc;
-
-memset(&msg,0,sizeof(smbmsg_t));
-memcpy(msg.hdr.id,"SHD\x1a",4);
-msg.hdr.version=SMB_VERSION;
-msg.hdr.when_written.time=time(NULL);
-msg.hdr.when_written.zone=tzone;
-msg.hdr.when_imported=msg.hdr.when_written;
-
-if(status.max_crcs) {
-	i=smb_addcrc(status.max_crcs,crc,10);
-	if(i) {
-		printf("smb_addcrc returned %d\n",i);
-		smb_freemsgdat(offset,length,1);
-		exit(1); } }
-
-msg.hdr.offset=offset;
-
-printf("To User Name: ");
-gets(str);
-i=smb_hfield(&msg,RECIPIENT,strlen(str),str);
-if(i) {
-	printf("smb_hfield returned %d\n",i);
-	smb_freemsgdat(offset,length,1);
-	exit(1); }
-if(status.attr&SMB_EMAIL) {
-	printf("To User Number: ");
-	gets(str);
-	i=smb_hfield(&msg,RECIPIENTEXT,strlen(str),str);
-	if(i) {
-		printf("smb_hfield returned %d\n",i);
-		smb_freemsgdat(offset,length,1);
-		exit(1); }
-	msg.idx.to=atoi(str); }
-else {
-	strlwr(str);
-	msg.idx.to=crc16(str); }
-
-printf("From User Name: ");
-gets(str);
-i=smb_hfield(&msg,SENDER,strlen(str),str);
-if(i) {
-	printf("smb_hfield returned %d\n",i);
-	smb_freemsgdat(offset,length,1);
-    exit(1); }
-if(status.attr&SMB_EMAIL) {
-	printf("From User Number: ");
-	gets(str);
-	i=smb_hfield(&msg,SENDEREXT,strlen(str),str);
-	if(i) {
-		printf("smb_hfield returned %d\n",i);
-		smb_freemsgdat(offset,length,1);
-		exit(1); }
-	msg.idx.from=atoi(str); }
-else {
-	strlwr(str);
-	msg.idx.from=crc16(str); }
-
-printf("Subject: ");
-gets(str);
-i=smb_hfield(&msg,SUBJECT,strlen(str),str);
-if(i) {
-	printf("smb_hfield returned %d\n",i);
-	smb_freemsgdat(offset,length,1);
-    exit(1); }
-strlwr(str);
-msg.idx.subj=crc16(str);
-
-i=smb_dfield(&msg,TEXT_BODY,length);
-if(i) {
-	printf("smb_dfield returned %d\n",i);
-	smb_freemsgdat(offset,length,1);
-	exit(1); }
-
-i=smb_addmsghdr(&msg,&status,status.attr&SMB_HYPERALLOC,10);
-
-if(i) {
-	printf("smb_addmsghdr returned %d\n",i);
-	smb_freemsgdat(offset,length,1);
-	exit(1); }
-smb_freemsgmem(msg);
-
-}
-
-/****************************************************************************/
-/* Shows the message base header											*/
-/****************************************************************************/
-void showstatus()
-{
-	int i;
-	smbstatus_t status;
-
-i=smb_locksmbhdr(10);
-if(i) {
-	printf("smb_locksmbhdr returned %d\n",i);
-	return; }
-i=smb_getstatus(&status);
-smb_unlocksmbhdr();
-if(i) {
-	printf("smb_getstatus returned %d\n",i);
-	return; }
-printf("last_msg        =%lu\n"
-	   "total_msgs      =%lu\n"
-	   "header_offset   =%lu\n"
-	   "max_crcs        =%lu\n"
-	   "max_msgs        =%lu\n"
-	   "max_age         =%u\n"
-	   "attr            =%04Xh\n"
-	   ,status.last_msg
-	   ,status.total_msgs
-	   ,status.header_offset
-	   ,status.max_crcs
-	   ,status.max_msgs
-	   ,status.max_age
-	   ,status.attr
-	   );
-}
-
-/****************************************************************************/
-/* Configure message base header											*/
-/****************************************************************************/
-void config()
-{
-	char max_msgs[128],max_crcs[128],max_age[128],header_offset[128],attr[128];
-	int i;
-	smbstatus_t status;
-
-i=smb_locksmbhdr(10);
-if(i) {
-	printf("smb_locksmbhdr returned %d\n",i);
-	return; }
-i=smb_getstatus(&status);
-smb_unlocksmbhdr();
-if(i) {
-	printf("smb_getstatus returned %d\n",i);
-	return; }
-printf("Header offset =%-5lu  New value (CR=No Change): ",status.header_offset);
-gets(header_offset);
-printf("Max msgs      =%-5lu  New value (CR=No Change): ",status.max_msgs);
-gets(max_msgs);
-printf("Max crcs      =%-5lu  New value (CR=No Change): ",status.max_crcs);
-gets(max_crcs);
-printf("Max age       =%-5u  New value (CR=No Change): ",status.max_age);
-gets(max_age);
-printf("Attributes    =%-5u  New value (CR=No Change): ",status.attr);
-gets(attr);
-i=smb_locksmbhdr(10);
-if(i) {
-	printf("smb_locksmbhdr returned %d\n",i);
-	return; }
-i=smb_getstatus(&status);
-if(i) {
-	printf("smb_getstatus returned %d\n",i);
-	smb_unlocksmbhdr();
-    return; }
-if(isdigit(max_msgs[0]))
-	status.max_msgs=atol(max_msgs);
-if(isdigit(max_crcs[0]))
-	status.max_crcs=atol(max_crcs);
-if(isdigit(max_age[0]))
-	status.max_age=atoi(max_age);
-if(isdigit(header_offset[0]))
-	status.header_offset=atol(header_offset);
-if(isdigit(attr[0]))
-	status.attr=atoi(attr);
-i=smb_putstatus(status);
-smb_unlocksmbhdr();
-if(i)
-	printf("smb_putstatus returned %d\n",i);
-}
-
-/****************************************************************************/
-/* Lists messages' to, from, and subject                                    */
-/****************************************************************************/
-void listmsgs(ulong start, ulong count)
-{
-	int i;
-	ulong l=0;
-	smbmsg_t msg;
-	idxrec_t idxrec;
-
-if(!start)
-	start=1;
-fseek(sid_fp,(start-1L)*sizeof(idxrec_t),SEEK_SET);
-while(l<count) {
-	if(!fread(&msg.idx,1,sizeof(idxrec_t),sid_fp))
-		break;
-	i=smb_lockmsghdr(msg,10);
-	if(i) {
-		printf("smb_lockmsghdr returned %d\n",i);
-		break; }
-	i=smb_getmsghdr(&msg);
-	smb_unlockmsghdr(msg);
-	if(i) {
-		printf("smb_getmsghdr returned %d\n",i);
-		break; }
-	printf("%4lu %-25.25s %-25.25s %.20s\n"
-		,msg.hdr.number,msg.from,msg.to,msg.subj);
-	smb_freemsgmem(msg);
-	l++; }
-}
-
-/****************************************************************************/
-/* Returns an ASCII string for FidoNet address 'addr'                       */
-/****************************************************************************/
-char *faddrtoa(fidoaddr_t addr)
-{
-	static char str[25];
-	char point[25];
-
-sprintf(str,"%u:%u/%u",addr.zone,addr.net,addr.node);
-if(addr.point) {
-	sprintf(point,".%u",addr.point);
-	strcat(str,point); }
-return(str);
-}
-
-char *binstr(uchar *buf, ushort length)
-{
-	static char str[128];
-	char tmp[128];
-	int i;
-
-str[0]=0;
-for(i=0;i<length;i++)
-	if(buf[i] && (buf[i]<SP || buf[i]>=0x7f))
-		break;
-if(i==length)		/* not binary */
-	return(buf);
-for(i=0;i<length;i++) {
-	sprintf(tmp,"%02X ",buf[i]);
-	strcat(str,tmp); }
-return(str);
-}
-
-/****************************************************************************/
-/* Converts when_t.zone into ASCII format									*/
-/****************************************************************************/
-char *zonestr(short zone)
-{
-	static char str[32];
-
-switch(zone) {
-	case 0: 	return("UT");
-	case AST:	return("AST");
-	case EST:	return("EST");
-	case CST:	return("CST");
-	case MST:	return("MST");
-	case PST:	return("PST");
-	case YST:	return("YST");
-	case HST:	return("HST");
-	case BST:	return("BST");
-	case ADT:	return("ADT");
-	case EDT:	return("EDT");
-	case CDT:	return("CDT");
-	case MDT:	return("MDT");
-	case PDT:	return("PDT");
-	case YDT:	return("YDT");
-	case HDT:	return("HDT");
-	case BDT:	return("BDT");
-	case MID:	return("MID");
-	case VAN:	return("VAN");
-	case EDM:	return("EDM");
-	case WIN:	return("WIN");
-	case BOG:	return("BOG");
-	case CAR:	return("CAR");
-	case RIO:	return("RIO");
-	case FER:	return("FER");
-	case AZO:	return("AZO");
-	case LON:	return("LON");
-	case BER:	return("BER");
-	case ATH:	return("ATH");
-	case MOS:	return("MOS");
-	case DUB:	return("DUB");
-	case KAB:	return("KAB");
-	case KAR:	return("KAR");
-	case BOM:	return("BOM");
-	case KAT:	return("KAT");
-	case DHA:	return("DHA");
-	case BAN:	return("BAN");
-	case HON:	return("HON");
-	case TOK:	return("TOK");
-	case SYD:	return("SYD");
-	case NOU:	return("NOU");
-	case WEL:	return("WEL");
-	}
-
-sprintf(str,"%02d:%02d",zone/60,zone<0 ? (-zone)%60 : zone%60);
-return(str);
-}
-			 
-
-/****************************************************************************/
-/* Displays message header information										*/
-/****************************************************************************/
-void viewmsgs(ulong start, ulong count)
-{
-	char when_written[128]
-		,when_imported[128];
-	int i;
-	ulong l=0;
-	smbmsg_t msg;
-	idxrec_t idxrec;
-
-if(!start)
-	start=1;
-fseek(sid_fp,(start-1L)*sizeof(idxrec_t),SEEK_SET);
-while(l<count) {
-	if(!fread(&msg.idx,1,sizeof(idxrec_t),sid_fp))
-		break;
-	i=smb_lockmsghdr(msg,10);
-	if(i) {
-		printf("smb_lockmsghdr returned %d\n",i);
-		break; }
-	i=smb_getmsghdr(&msg);
-	smb_unlockmsghdr(msg);
-	if(i) {
-		printf("smb_getmsghdr returned %d\n",i);
-		break; }
-
-	sprintf(when_written,"%.24s %s"
-		,ctime((time_t *)&msg.hdr.when_written.time)
-		,zonestr(msg.hdr.when_written.zone));
-	sprintf(when_imported,"%.24s %s"
-		,ctime((time_t *)&msg.hdr.when_imported.time)
-		,zonestr(msg.hdr.when_imported.zone));
-
-	printf( "%-20.20s %s\n"
-			"%-20.20s %s\n"
-            "%-20.20s %s\n"
-			"%-20.20s %04Xh\n"
-			"%-20.20s %04Xh\n"
-			"%-20.20s %u\n"
-			"%-20.20s %04Xh\n"
-			"%-20.20s %08lXh\n"
-			"%-20.20s %08lXh\n"
-			"%-20.20s %s\n"
-			"%-20.20s %s\n"
-			"%-20.20s %ld (%ld)\n"
-			"%-20.20s %ld\n"
-			"%-20.20s %ld\n"
-			"%-20.20s %ld\n"
-			"%-20.20s %s\n"
-			"%-20.20s %06lXh\n"
-			"%-20.20s %u\n",
-
-		"subj",
-		msg.subj,
-
-		"from",
-		msg.from,
-
-		"to",
-		msg.to,
-
-		"type",
-		msg.hdr.type,
-
-		"version",
-		msg.hdr.version,
-
-		"length",
-		msg.hdr.length,
-
-		"attr",
-		msg.hdr.attr,
-
-		"auxattr",
-		msg.hdr.auxattr,
-
-		"netattr",
-		msg.hdr.netattr,
-
-		"when_written",
-		when_written,
-
-		"when_imported",
-		when_imported,
-
-		"number",
-		msg.hdr.number,
-		ftell(sid_fp)/sizeof(idxrec_t),
-
-		"thread_orig",
-		msg.hdr.thread_orig,
-
-		"thread_next",
-		msg.hdr.thread_next,
-
-		"thread_first",
-		msg.hdr.thread_first,
-
-		"reserved[16]",
-		binstr(msg.hdr.reserved,16),
-
-		"offset",
-		msg.hdr.offset,
-
-		"total_dfields",
-		msg.hdr.total_dfields
-		);
-	for(i=0;i<msg.hdr.total_dfields;i++)
-		printf("dfield[%02u].type      %02Xh\n"
-			   "dfield[%02u].offset    %lu\n"
-			   "dfield[%02u].length    %lu\n"
-			   ,i,msg.dfield[i].type
-			   ,i,msg.dfield[i].offset
-			   ,i,msg.dfield[i].length);
-
-	for(i=0;i<msg.total_hfields;i++)
-		printf("hfield[%02u].type      %02Xh\n"
-			   "hfield[%02u].length    %d\n"
-			   "hfield[%02u]_dat       %s\n"
-			   ,i,msg.hfield[i].type
-			   ,i,msg.hfield[i].length
-			   ,i,binstr(msg.hfield_dat[i],msg.hfield[i].length));
-
-	if(msg.from_net.type)
-		printf("from_net.type        %02Xh\n"
-			   "from_net.addr        %s\n"
-            ,msg.from_net.type
-            ,msg.from_net.type==NET_FIDO
-			? faddrtoa(*(fidoaddr_t *)msg.from_net.addr) : msg.from_net.addr);
-
-	if(msg.to_net.type)
-		printf("to_net.type          %02Xh\n"
-			   "to_net.addr          %s\n"
-			,msg.to_net.type
-			,msg.to_net.type==NET_FIDO
-			? faddrtoa(*(fidoaddr_t *)msg.to_net.addr) : msg.to_net.addr);
-
-	if(msg.replyto_net.type)
-		printf("replyto_net.type     %02Xh\n"
-			   "replyto_net.addr     %s\n"
-			,msg.replyto_net.type
-			,msg.replyto_net.type==NET_FIDO
-			? faddrtoa(*(fidoaddr_t *)msg.replyto_net.addr)
-				: msg.replyto_net.addr);
-
-	printf("from_agent           %02Xh\n"
-		   "to_agent             %02Xh\n"
-		   "replyto_agent        %02Xh\n"
-		   ,msg.from_agent
-		   ,msg.to_agent
-		   ,msg.replyto_agent);
-
-	printf("\n");
-	smb_freemsgmem(msg);
-	l++; }
-}
-
-/****************************************************************************/
-/* Maintain message base - deletes messages older than max age (in days)	*/
-/* or messages that exceed maximum											*/
-/****************************************************************************/
-void maint(void)
-{
-	int i;
-	ulong l,m,n,f,flagged=0;
-	time_t now;
-	smbstatus_t status;
-	smbmsg_t msg;
-	idxrec_t HUGE16 *idx;
-
-printf("Maintaining %s\r\n",smb_file);
-now=time(NULL);
-i=smb_locksmbhdr(10);
-if(i) {
-	printf("smb_locksmbhdr returned %d\n",i);
-	return; }
-i=smb_getstatus(&status);
-if(i) {
-	smb_unlocksmbhdr();
-	printf("smb_getstatus returned %d\n",i);
-	return; }
-if(!status.total_msgs) {
-	smb_unlocksmbhdr();
-	printf("Empty\n");
-	return; }
-printf("Loading index...\n");
-if((idx=(idxrec_t *)LMALLOC(sizeof(idxrec_t)*status.total_msgs))
-	==NULL) {
-	smb_unlocksmbhdr();
-	printf("can't allocate %lu bytes of memory\n"
-		,sizeof(idxrec_t)*status.total_msgs);
-	return; }
-fseek(sid_fp,0L,SEEK_SET);
-for(l=0;l<status.total_msgs;l++) {
-	printf("%lu of %lu\r"
-		,l+1,status.total_msgs);
-	if(!fread(&idx[l],1,sizeof(idxrec_t),sid_fp))
-		break; }
-printf("\nDone.\n\n");
-
-printf("Scanning for pre-flagged messages...\n");
-for(m=0;m<l;m++) {
-	printf("\r%2u%%",m ? (long)(100.0/((float)l/m)) : 0);
-	if(idx[m].attr&MSG_DELETE)
-		flagged++; }
-printf("\r100%% (%lu pre-flagged for deletion)\n",flagged);
-
-if(status.max_age) {
-	printf("Scanning for messages more than %u days old...\n"
-		,status.max_age);
-	for(m=f=0;m<l;m++) {
-		printf("\r%2u%%",m ? (long)(100.0/((float)l/m)) : 0);
-		if(idx[m].attr&(MSG_PERMANENT|MSG_DELETE))
-			continue;
-		if(now>idx[m].time && (now-idx[m].time)/(24L*60L*60L)>status.max_age) {
-			f++;
-			flagged++;
-			idx[m].attr|=MSG_DELETE; } }  /* mark for deletion */
-	printf("\r100%% (%lu flagged for deletion)\n",f); }
-
-printf("Scanning for read messages to be killed...\n");
-for(m=f=0;m<l;m++) {
-	printf("\r%2u%%",m ? (long)(100.0/((float)l/m)) : 0);
-	if(idx[m].attr&(MSG_PERMANENT|MSG_DELETE))
-		continue;
-	if((idx[m].attr&(MSG_READ|MSG_KILLREAD))==(MSG_READ|MSG_KILLREAD)) {
-		f++;
-		flagged++;
-		idx[m].attr|=MSG_DELETE; } }
-printf("\r100%% (%lu flagged for deletion)\n",f);
-
-if(l-flagged>status.max_msgs) {
-	printf("Flagging excess messages for deletion...\n");
-	for(m=n=0,f=flagged;l-flagged>status.max_msgs && m<l;m++) {
-		if(idx[m].attr&(MSG_PERMANENT|MSG_DELETE))
-			continue;
-		printf("%lu of %lu\r",++n,(l-f)-status.max_msgs);
-		flagged++;
-		idx[m].attr|=MSG_DELETE; }			/* mark for deletion */
-	printf("\nDone.\n\n"); }
-
-if(!flagged) {				/* No messages to delete */
-	LFREE(idx);
-	smb_unlocksmbhdr();
-	return; }
-
-if(!(mode&NOANALYSIS)) {
-
-	printf("Freeing allocated header and data blocks for deleted messages...\n");
-	if(!(status.attr&SMB_HYPERALLOC)) {
-		i=smb_open_da(10);
-		if(i) {
-			smb_unlocksmbhdr();
-			printf("smb_open_da returned %d\n",i);
-			exit(1); }
-		i=smb_open_ha(10);
-		if(i) {
-			smb_unlocksmbhdr();
-			printf("smb_open_ha returned %d\n",i);
-			exit(1); } }
-
-	for(m=n=0;m<l;m++) {
-		if(idx[m].attr&MSG_DELETE) {
-			printf("%lu of %lu\r",++n,flagged);
-			msg.idx=idx[m];
-			msg.hdr.number=msg.idx.number;
-			if((i=smb_getmsgidx(&msg))!=0) {
-				printf("\nsmb_getmsgidx returned %d\n",i);
-				continue; }
-			i=smb_lockmsghdr(msg,10);
-			if(i) {
-				printf("\nsmb_lockmsghdr returned %d\n",i);
-				break; }
-			if((i=smb_getmsghdr(&msg))!=0) {
-				smb_unlockmsghdr(msg);
-				printf("\nsmb_getmsghdr returned %d\n",i);
-				break; }
-			msg.hdr.attr|=MSG_DELETE;			/* mark header as deleted */
-			if((i=smb_putmsg(msg))!=0) {
-				smb_freemsgmem(msg);
-				smb_unlockmsghdr(msg);
-				printf("\nsmb_putmsg returned %d\n",i);
-				break; }
-			smb_unlockmsghdr(msg);
-			if((i=smb_freemsg(msg,status))!=0) {
-				smb_freemsgmem(msg);
-				printf("\nsmb_freemsg returned %d\n",i);
-				break; }
-			smb_freemsgmem(msg); } }
-	if(!(status.attr&SMB_HYPERALLOC)) {
-		fclose(sha_fp);
-		fclose(sda_fp); }
-	printf("\nDone.\n\n"); }
-
-printf("Re-writing index...\n");
-rewind(sid_fp);
-if(chsize(fileno(sid_fp),0L))
-	printf("chsize failed!\n");
-for(m=n=0;m<l;m++) {
-	if(idx[m].attr&MSG_DELETE)
-		continue;
-	printf("%lu of %lu\r",++n,l-flagged);
-	fwrite(&idx[m],sizeof(idxrec_t),1,sid_fp); }
-printf("\nDone.\n\n");
-fflush(sid_fp);
-
-LFREE(idx);
-status.total_msgs-=flagged;
-smb_putstatus(status);
-smb_unlocksmbhdr();
-}
-
-/****************************************************************************/
-/* Kills 'msgs' number of messags                                           */
-/* Returns actual number of messages killed.								*/
-/****************************************************************************/
-ulong kill(ulong msgs)
-{
-    int i;
-	ulong l,m,n,flagged=0;
-	smbstatus_t status;
-	smbmsg_t msg;
-	idxrec_t *idx;
-
-i=smb_locksmbhdr(10);
-if(i) {
-	printf("smb_locksmbhdr returned %d\n",i);
-	return(0); }
-i=smb_getstatus(&status);
-if(i) {
-	smb_unlocksmbhdr();
-	printf("smb_getstatus returned %d\n",i);
-	return(0); }
-printf("Loading index...\n");
-if((idx=(idxrec_t *)LMALLOC(sizeof(idxrec_t)*status.total_msgs))
-	==NULL) {
-	smb_unlocksmbhdr();
-	printf("can't allocate %lu bytes of memory\n"
-		,sizeof(idxrec_t)*status.total_msgs);
-	return(0); }
-fseek(sid_fp,0L,SEEK_SET);
-for(l=0;l<status.total_msgs;l++) {
-	printf("%lu of %lu\r"
-		,l+1,status.total_msgs);
-	if(!fread(&idx[l],1,sizeof(idxrec_t),sid_fp))
-		break; }
-printf("\nDone.\n\n");
-
-printf("Flagging messages for deletion...\n");
-for(m=0;m<l && flagged<msgs;m++) {
-	if(idx[m].attr&(MSG_PERMANENT))
-		continue;
-	printf("%lu of %lu\r",++flagged,msgs);
-	idx[m].attr|=MSG_DELETE; }			/* mark for deletion */
-printf("\nDone.\n\n");
-
-printf("Freeing allocated header and data blocks for deleted messages...\n");
-if(!(status.attr&SMB_HYPERALLOC)) {
-	i=smb_open_da(10);
-	if(i) {
-		smb_unlocksmbhdr();
-		printf("smb_open_da returned %d\n",i);
-		exit(1); }
-	i=smb_open_ha(10);
-	if(i) {
-		smb_unlocksmbhdr();
-		printf("smb_open_ha returned %d\n",i);
-		exit(1); } }
-
-for(m=n=0;m<l;m++) {
-	if(idx[m].attr&MSG_DELETE) {
-		printf("%lu of %lu\r",++n,flagged);
-		msg.idx=idx[m];
-		i=smb_lockmsghdr(msg,10);
-		if(i) {
-			printf("\nsmb_lockmsghdr returned %d\n",i);
-			break; }
-		msg.hdr.number=msg.idx.number;
-		if((i=smb_getmsgidx(&msg))!=0) {
-			smb_unlockmsghdr(msg);
-			printf("\nsmb_getmsgidx returned %d\n",i);
-            break; }
-		if((i=smb_getmsghdr(&msg))!=0) {
-			smb_unlockmsghdr(msg);
-			printf("\nsmb_getmsghdr returned %d\n",i);
-			break; }
-		msg.hdr.attr|=MSG_DELETE;			/* mark header as deleted */
-		if((i=smb_putmsg(msg))!=0) {
-			smb_unlockmsghdr(msg);
-			printf("\nsmb_putmsg returned %d\n",i);
-            break; }
-		smb_unlockmsghdr(msg);
-		smb_freemsg(msg,status);
-		smb_freemsgmem(msg); } }
-
-if(!(status.attr&SMB_HYPERALLOC)) {
-	fclose(sha_fp);
-	fclose(sda_fp); }
-
-printf("\nDone.\n\n");
-
-printf("Re-writing index...\n");
-rewind(sid_fp);
-chsize(fileno(sid_fp),0L);
-for(m=n=0;m<l;m++) {
-    if(idx[m].attr&MSG_DELETE)
-        continue;
-    printf("%lu of %lu\r",++n,l-flagged);
-    fwrite(&idx[m],1,sizeof(idxrec_t),sid_fp); }
-printf("\nDone.\n\n");
-
-fflush(sid_fp);
-
-LFREE(idx);
-status.total_msgs-=flagged;
-smb_putstatus(status);
-smb_unlocksmbhdr();
-return(flagged);
-}
-
-typedef struct {
-	ulong old,new;
-	} datoffset_t;
-
-/****************************************************************************/
-/* Removes all unused blocks from SDT and SHD files 						*/
-/****************************************************************************/
-void packmsgs(ulong packable)
-{
-	uchar buf[SDT_BLOCK_LEN],ch,fname[128],tmpfname[128];
-	int i,file,size;
-	ulong l,m,n,datoffsets=0,length,total;
-	FILE *tmp_sdt,*tmp_shd,*tmp_sid;
-	smbhdr_t	hdr;
-	smbstatus_t status;
-	smbmsg_t	msg;
-	datoffset_t *datoffset=NULL;
-
-printf("Packing %s\n",smb_file);
-i=smb_locksmbhdr(10);
-if(i) {
-	printf("smb_locksmbhdr returned %d\n",i);
-	return; }
-i=smb_getstatus(&status);
-if(i) {
-	smb_unlocksmbhdr();
-	printf("smb_getstatus returned %d\n",i);
-    return; }
-
-if(!(status.attr&SMB_HYPERALLOC)) {
-	i=smb_open_ha(10);
-	if(i) {
-		smb_unlocksmbhdr();
-		printf("smb_open_ha returned %d\n",i);
-		return; }
-	i=smb_open_da(10);
-	if(i) {
-		smb_unlocksmbhdr();
-		fclose(sha_fp);
-		printf("smb_open_da returned %d\n",i);
-		return; } }
-
-if(!status.total_msgs) {
-    printf("Empty\n");
-	rewind(shd_fp);
-    chsize(fileno(shd_fp),status.header_offset);
-	rewind(sdt_fp);
-    chsize(fileno(sdt_fp),0L);
-	rewind(sid_fp);
-    chsize(fileno(sid_fp),0L);
-	if(!(status.attr&SMB_HYPERALLOC)) {
-		rewind(sha_fp);
-		chsize(fileno(sha_fp),0L);
-		rewind(sda_fp);
-		chsize(fileno(sda_fp),0L);
-		fclose(sha_fp);
-		fclose(sda_fp); }
-    smb_unlocksmbhdr();
-    return; }
-
-
-if(!(status.attr&SMB_HYPERALLOC) && !(mode&NOANALYSIS)) {
-    printf("Analyzing data blocks...\n");
-
-    length=filelength(fileno(sda_fp));
-
-    fseek(sda_fp,0L,SEEK_SET);
-    for(l=m=0;l<length;l+=2) {
-        printf("\r%2u%%  ",l ? (long)(100.0/((float)length/l)) : 0);
-        i=0;
-        if(!fread(&i,2,1,sda_fp))
-            break;
-        if(!i)
-            m++; }
-
-    printf("\rAnalyzing header blocks...\n");
-
-    length=filelength(fileno(sha_fp));
-
-    fseek(sha_fp,0L,SEEK_SET);
-    for(l=n=0;l<length;l++) {
-        printf("\r%2u%%  ",l ? (long)(100.0/((float)length/l)) : 0);
-		ch=0;
-		if(!fread(&ch,1,1,sha_fp))
-            break;
-		if(!ch)
-            n++; }
-
-    if(!m && !n) {
-		printf("\rAlready compressed.\n\n");
-        fclose(sha_fp);
-        fclose(sda_fp);
-        smb_unlocksmbhdr();
-        return; }
-
-	if(packable && (m*SDT_BLOCK_LEN)+(n*SHD_BLOCK_LEN)<packable*1024L) {
-		printf("\rLess than %luk compressable bytes.\n\n",packable);
-		fclose(sha_fp);
-		fclose(sda_fp);
-		smb_unlocksmbhdr();
-		return; }
-
-	printf("\rCompressing %lu data blocks (%lu bytes)\n"
-			 "        and %lu header blocks (%lu bytes)\n"
-			  ,m,m*SDT_BLOCK_LEN,n,n*SHD_BLOCK_LEN); }
-
-if(!(status.attr&SMB_HYPERALLOC)) {
-	rewind(sha_fp);
-	chsize(fileno(sha_fp),0L);		/* Reset both allocation tables */
-	rewind(sda_fp);
-	chsize(fileno(sda_fp),0L); }
-
-if(status.attr&SMB_HYPERALLOC && !(mode&NOANALYSIS)) {
-	printf("Analyzing %s\n",smb_file);
-
-	length=filelength(fileno(shd_fp));
-	m=n=0;
-	for(l=status.header_offset;l<length;l+=size) {
-		printf("\r%2u%%  ",(long)(100.0/((float)length/l)));
-		msg.idx.offset=l;
-		if((i=smb_lockmsghdr(msg,10))!=0) {
-			printf("\n(%06lX) smb_lockmsghdr returned %d\n",l,i);
-			size=SHD_BLOCK_LEN;
-			continue; }
-		if((i=smb_getmsghdr(&msg))!=0) {
-			smb_unlockmsghdr(msg);
-			m++;
-			size=SHD_BLOCK_LEN;
-			continue; }
-		smb_unlockmsghdr(msg);
-		if(msg.hdr.attr&MSG_DELETE) {
-			m+=smb_hdrblocks(msg.hdr.length);
-			total=0;
-			for(i=0;i<msg.hdr.total_dfields;i++)
-				total+=msg.dfield[i].length;
-			n+=smb_datblocks(total); }
-		size=smb_getmsghdrlen(msg);
-		if(size<1) size=SHD_BLOCK_LEN;
-		while(size%SHD_BLOCK_LEN)
-			size++;
-		smb_freemsgmem(msg); }
-
-
-    if(!m && !n) {
-		printf("\rAlready compressed.\n\n");
-        smb_unlocksmbhdr();
-        return; }
-
-	if(packable && (n*SDT_BLOCK_LEN)+(m*SHD_BLOCK_LEN)<packable*1024L) {
-		printf("\rLess than %luk compressable bytes.\n\n",packable);
-		smb_unlocksmbhdr();
-		return; }
-
-	printf("\rCompressing %lu data blocks (%lu bytes)\n"
-			 "        and %lu header blocks (%lu bytes)\n"
-			  ,n,n*SDT_BLOCK_LEN,m,m*SHD_BLOCK_LEN); }
-
-sprintf(fname,"%s.SD$",smb_file);
-tmp_sdt=fopen(fname,"wb");
-sprintf(fname,"%s.SH$",smb_file);
-tmp_shd=fopen(fname,"wb");
-sprintf(fname,"%s.SI$",smb_file);
-tmp_sid=fopen(fname,"wb");
-if(!tmp_sdt || !tmp_shd || !tmp_sid) {
-	smb_unlocksmbhdr();
-	if(!(status.attr&SMB_HYPERALLOC)) {
-		fclose(sha_fp);
-		fclose(sda_fp); }
-	printf("error opening temp file\n");
-	return; }
-setvbuf(tmp_sdt,NULL,_IOFBF,2*1024);
-setvbuf(tmp_shd,NULL,_IOFBF,2*1024);
-setvbuf(tmp_sid,NULL,_IOFBF,2*1024);
-if(!(status.attr&SMB_HYPERALLOC)
-	&& (datoffset=(datoffset_t *)LMALLOC(sizeof(datoffset_t)*status.total_msgs))
-	==NULL) {
-	smb_unlocksmbhdr();
-	fclose(sha_fp);
-	fclose(sda_fp);
-	fclose(tmp_sdt);
-	fclose(tmp_shd);
-	fclose(tmp_sid);
-	printf("error allocating mem\n");
-    return; }
-fseek(shd_fp,0L,SEEK_SET);
-fread(&hdr,1,sizeof(smbhdr_t),shd_fp);
-fwrite(&hdr,1,sizeof(smbhdr_t),tmp_shd);
-fwrite(&status,1,sizeof(smbstatus_t),tmp_shd);
-for(l=sizeof(smbhdr_t)+sizeof(smbstatus_t);l<status.header_offset;l++) {
-	fread(&ch,1,1,shd_fp);			/* copy additional base header records */
-	fwrite(&ch,1,1,tmp_shd); }
-fseek(sid_fp,0L,SEEK_SET);
-total=0;
-for(l=0;l<status.total_msgs;l++) {
-	printf("%lu of %lu\r",l+1,status.total_msgs);
-	if(!fread(&msg.idx,1,sizeof(idxrec_t),sid_fp))
-		break;
-	if(msg.idx.attr&MSG_DELETE) {
-		printf("\nDeleted index.\n");
-		continue; }
-	i=smb_lockmsghdr(msg,10);
-	if(i) {
-		printf("\nsmb_lockmsghdr returned %d\n",i);
-		continue; }
-	i=smb_getmsghdr(&msg);
-	smb_unlockmsghdr(msg);
-	if(i) {
-		printf("\nsmb_getmsghdr returned %d\n",i);
-		continue; }
-	if(msg.hdr.attr&MSG_DELETE) {
-		printf("\nDeleted header.\n");
-		smb_freemsgmem(msg);
-		continue; }
-	for(m=0;m<datoffsets;m++)
-		if(msg.hdr.offset==datoffset[m].old)
-			break;
-	if(m<datoffsets) {				/* another index pointed to this data */
-		printf("duplicate index\n");
-		msg.hdr.offset=datoffset[m].new;
-		smb_incdat(datoffset[m].new,smb_getmsgdatlen(msg),1); }
-	else {
-
-		if(!(status.attr&SMB_HYPERALLOC))
-			datoffset[datoffsets].old=msg.hdr.offset;
-
-		fseek(sdt_fp,msg.hdr.offset,SEEK_SET);
-
-		m=smb_getmsgdatlen(msg);
-        if(m>16L*1024L*1024L) {
-            printf("\nInvalid data length (%lu)\n",m);
-            continue; }
-
-		if(!(status.attr&SMB_HYPERALLOC)) {
-			datoffset[datoffsets].new=msg.hdr.offset
-				=smb_fallocdat(m,1);
-			datoffsets++;
-			fseek(tmp_sdt,msg.hdr.offset,SEEK_SET); }
-		else {
-			fseek(tmp_sdt,0L,SEEK_END);
-			msg.hdr.offset=ftell(tmp_sdt); }
-
-		/* Actually copy the data */
-
-		n=smb_datblocks(m);
-		for(m=0;m<n;m++) {
-			fread(buf,1,SDT_BLOCK_LEN,sdt_fp);
-			if(!m && *(ushort *)buf!=XLAT_NONE && *(ushort *)buf!=XLAT_LZH) {
-				printf("\nUnsupported translation type (%04X)\n"
-					,*(ushort *)buf);
-				break; }
-			fwrite(buf,1,SDT_BLOCK_LEN,tmp_sdt); }
-		if(m<n)
-			continue; }
-
-	/* Write the new index entry */
-	length=smb_getmsghdrlen(msg);
-	if(status.attr&SMB_HYPERALLOC)
-		msg.idx.offset=ftell(tmp_shd);
-	else
-		msg.idx.offset=smb_fallochdr(length)+status.header_offset;
-	fwrite(&msg.idx,1,sizeof(idxrec_t),tmp_sid);
-
-	/* Write the new header entry */
-	fseek(tmp_shd,msg.idx.offset,SEEK_SET);
-	fwrite(&msg.hdr,1,sizeof(msghdr_t),tmp_shd);
-	for(n=0;n<msg.hdr.total_dfields;n++)
-		fwrite(&msg.dfield[n],1,sizeof(dfield_t),tmp_shd);
-	for(n=0;n<msg.total_hfields;n++) {
-		fwrite(&msg.hfield[n],1,sizeof(hfield_t),tmp_shd);
-		fwrite(msg.hfield_dat[n],1,msg.hfield[n].length,tmp_shd); }
-	while(length%SHD_BLOCK_LEN) {	/* pad with NULLs */
-		fputc(0,tmp_shd);
-		length++; }
-	total++;
-	smb_freemsgmem(msg); }
-
-if(datoffset)
-	LFREE(datoffset);
-if(!(status.attr&SMB_HYPERALLOC)) {
-	fclose(sha_fp);
-	fclose(sda_fp); }
-
-/* Change *.SH$ into *.SHD */
-fclose(shd_fp);
-fclose(tmp_shd);
-sprintf(fname,"%s.SHD",smb_file);
-remove(fname);
-sprintf(tmpfname,"%s.SH$",smb_file);
-rename(tmpfname,fname);
-
-/* Change *.SD$ into *.SDT */
-fclose(sdt_fp);
-fclose(tmp_sdt);
-sprintf(fname,"%s.SDT",smb_file);
-remove(fname);
-sprintf(tmpfname,"%s.SD$",smb_file);
-rename(tmpfname,fname);
-
-/* Change *.SI$ into *.SID */
-fclose(sid_fp);
-fclose(tmp_sid);
-sprintf(fname,"%s.SID",smb_file);
-remove(fname);
-sprintf(tmpfname,"%s.SI$",smb_file);
-rename(tmpfname,fname);
-
-if((i=smb_open(10))!=0) {
-	printf("Error %d reopening %s\n",i,smb_file);
-	return; }
-
-status.total_msgs=total;
-if((i=smb_putstatus(status))!=0)
-	printf("\nsmb_putstatus returned %d\n",i);
-printf("\nDone.\n\n");
-}
-
-
-/****************************************************************************/
-/* Read messages in message base											*/
-/****************************************************************************/
-void readmsgs(ulong start)
-{
-	char	str[128],*inbuf,*outbuf;
-	int 	i,ch,done=0,domsg=1,lzh;
-	ushort	xlat;
-	ulong	l,count,outlen;
-	smbmsg_t msg;
-
-if(start)
-	msg.offset=start-1;
-else
-	msg.offset=0;
-while(!done) {
-	if(domsg) {
-		fseek(sid_fp,msg.offset*sizeof(idxrec_t),SEEK_SET);
-		if(!fread(&msg.idx,1,sizeof(idxrec_t),sid_fp))
-			break;
-		i=smb_lockmsghdr(msg,10);
-		if(i) {
-			printf("smb_lockmsghdr returned %d\n",i);
-			break; }
-		i=smb_getmsghdr(&msg);
-		if(i) {
-			printf("smb_getmsghdr returned %d\n",i);
-			break; }
-
-		printf("\n%lu (%lu)\n",msg.hdr.number,msg.offset+1);
-		printf("Subj : %s\n",msg.subj);
-		printf("To   : %s",msg.to);
-		if(msg.to_net.type)
-			printf(" (%s)",msg.to_net.type==NET_FIDO
-				? faddrtoa(*(fidoaddr_t *)msg.to_net.addr) : msg.to_net.addr);
-		printf("\nFrom : %s",msg.from);
-		if(msg.from_net.type)
-			printf(" (%s)",msg.from_net.type==NET_FIDO
-				? faddrtoa(*(fidoaddr_t *)msg.from_net.addr)
-					: msg.from_net.addr);
-		printf("\nDate : %.24s %s",ctime((time_t *)&msg.hdr.when_written.time)
-			,zonestr(msg.hdr.when_written.zone));
-		printf("\n\n");
-		for(i=0;i<msg.hdr.total_dfields;i++)
-			switch(msg.dfield[i].type) {
-				case TEXT_BODY:
-				case TEXT_TAIL:
-					fseek(sdt_fp,msg.hdr.offset+msg.dfield[i].offset
-						,SEEK_SET);
-					fread(&xlat,2,1,sdt_fp);
-					l=2;
-					lzh=0;
-					while(xlat!=XLAT_NONE) {
-						if(xlat==XLAT_LZH)
-							lzh=1;
-						fread(&xlat,2,1,sdt_fp);
-						l+=2; }
-					if(lzh) {
-						if((inbuf=(char *)LMALLOC(msg.dfield[i].length))
-							==NULL) {
-							printf("Malloc error of %lu\n"
-								,msg.dfield[i].length);
-							exit(1); }
-						fread(inbuf,msg.dfield[i].length-l,1,sdt_fp);
-						outlen=*(long *)inbuf;
-						if((outbuf=(char *)LMALLOC(outlen))==NULL) {
-							printf("Malloc error of lzh %lu\n"
-								,outlen);
-							exit(1); }
-						lzh_decode(inbuf,msg.dfield[i].length-l,outbuf);
-						LFREE(inbuf);
-						for(l=0;l<outlen;l++)
-							putchar(outbuf[l]);
-						LFREE(outbuf); }
-					else {
-						for(;l<msg.dfield[i].length;l++) {
-							ch=fgetc(sdt_fp);
-							if(ch)
-								putchar(ch); } }
-					printf("\n");
-					break; }
-		i=smb_unlockmsghdr(msg);
-        if(i) {
-			printf("smb_unlockmsghdr returned %d\n",i);
-			break; }
-		smb_freemsgmem(msg); }
-	domsg=1;
-	printf("\nReading %s (?=Menu): ",smb_file);
-	switch(toupper(getch())) {
-		case '?':
-			printf("\n"
-				   "\n"
-				   "(R)e-read current message\n"
-				   "(L)ist messages\n"
-				   "(T)en more titles\n"
-				   "(V)iew message headers\n"
-				   "(Q)uit\n"
-				   "(+/-) Forward/Backward\n"
-				   "\n");
-			domsg=0;
-			break;
-		case 'Q':
-			printf("Quit\n");
-			done=1;
-			break;
-		case 'R':
-			printf("Re-read\n");
-			break;
-		case '-':
-			printf("Backwards\n");
-			if(msg.offset)
-				msg.offset--;
-			break;
-		case 'T':
-			printf("Ten titles\n");
-			listmsgs(msg.offset+2,10);
-			msg.offset+=10;
-			domsg=0;
-			break;
-		case 'L':
-			printf("List messages\n");
-			listmsgs(1,-1);
-			domsg=0;
-			break;
-		case 'V':
-			printf("View message headers\n");
-			viewmsgs(1,-1);
-			domsg=0;
-			break;
-		case CR:
-		case '+':
-			printf("Next\n");
-			msg.offset++;
-			break; } }
-}
-
-/***************/
-/* Entry point */
-/***************/
-int main(int argc, char **argv)
-{
-	char cmd[128]="",*p,*s;
-	int i,j,x,y;
-	ulong l;
-	smbstatus_t status;
-
-#ifdef __TURBOC__
-	timezone=0; 		/* Fix for Borland C++ EST default */
-	daylight=0; 		/* Fix for Borland C++ EDT default */
-#elif defined(__WATCOMC__)
-	putenv("TZ=UCT0");  /* Fix for Watcom C++ EDT default */
-#endif
-setvbuf(stdout,0,_IONBF,0);
-
-smb_file[0]=0;
-printf("\nSynchronet Message Base Utility v%s  "\
-	"Copyright 1995 Digital Dynamics\n\n"
-	,SMBUTIL_VER);
-for(x=1;x<argc;x++) {
-	if(argv[x][0]=='/') {
-		for(j=1;argv[x][j];j++)
-			switch(toupper(argv[x][j])) {
-				case 'A':
-					mode|=NOANALYSIS;
-					break;
-				case 'Z':
-					if(isdigit(argv[x][j+1]))
-						tzone=atoi(argv[x]+j+1);
-					else if(!stricmp(argv[x]+j+1,"EST"))
-						tzone=EST;
-					else if(!stricmp(argv[x]+j+1,"EDT"))
-						tzone=EDT;
-					else if(!stricmp(argv[x]+j+1,"CST"))
-						tzone=CST;
-					else if(!stricmp(argv[x]+j+1,"CDT"))
-						tzone=CDT;
-					else if(!stricmp(argv[x]+j+1,"MST"))
-						tzone=MST;
-					else if(!stricmp(argv[x]+j+1,"MDT"))
-						tzone=MDT;
-					else if(!stricmp(argv[x]+j+1,"PST"))
-						tzone=PST;
-					else if(!stricmp(argv[x]+j+1,"PDT"))
-						tzone=PDT;
-					j=strlen(argv[x])-1;
-					break;
-				default:
-					printf("\nUnknown opt '%c'\n",argv[x][j]);
-				case '?':
-					printf("%s",usage);
-					exit(1);
-					break; } }
-	else {
-		if(!cmd[0])
-			strcpy(cmd,argv[x]);
-		else {
-			sprintf(smb_file,"%.64s",argv[x]);
-			p=strrchr(smb_file,'.');
-			s=strrchr(smb_file,'\\');
-			if(p>s) *p=0;
-			strupr(smb_file);
-			printf("Opening %s\r\n",smb_file);
-			if((i=smb_open(10))!=0) {
-				printf("error %d opening %s message base\n",i,smb_file);
-				exit(1); }
-			if(!filelength(fileno(shd_fp))) {
-				printf("Empty\n");
-				smb_close();
-				continue; }
-			for(y=0;cmd[y];y++)
-				switch(toupper(cmd[y])) {
-					case 'I':
-						strcpy(filein,cmd+1);
-						i=smb_locksmbhdr(10);
-						if(i) {
-							printf("smb_locksmbhdr returned %d\n",i);
-							return(1); }
-						i=smb_getstatus(&status);
-						if(i) {
-							printf("smb_getstatus returned %d\n",i);
-							return(1); }
-							smb_unlocksmbhdr();
-						postmsg(status);
-						y=strlen(cmd)-1;
-						break;
-					case 'K':
-						printf("Killing %lu messages...\n",atol(cmd+1));
-						l=kill(atol(cmd+1));
-						printf("%lu messages killed.\n",l);
-						y=strlen(cmd)-1;
-						break;
-					case 'S':
-						showstatus();
-						break;
-					case 'C':
-						config();
-						break;
-					case 'L':
-						listmsgs(atol(cmd+1),-1L);
-						y=strlen(cmd)-1;
-						break;
-					case 'P':
-						packmsgs(atol(cmd+y+1));
-						y=strlen(cmd)-1;
-						break;
-					case 'R':
-						readmsgs(atol(cmd+1));
-						y=strlen(cmd)-1;
-						break;
-					case 'V':
-						viewmsgs(atol(cmd+1),-1L);
-						y=strlen(cmd)-1;
-						break;
-					case 'M':
-						maint();
-						break;
-					default:
-						printf("%s",usage);
-						break; }
-			smb_close(); } } }
-if(!cmd[0])
-	printf("%s",usage);
-return(0);
-}
diff --git a/src/sbbs2/smb/121a/smbutil.h b/src/sbbs2/smb/121a/smbutil.h
deleted file mode 100644
index 1c8284fec1..0000000000
--- a/src/sbbs2/smb/121a/smbutil.h
+++ /dev/null
@@ -1,10 +0,0 @@
-/* SMBUTIL.H */
-
-#define NOANALYSIS		(1L<<0)
-
-#ifdef __WATCOMC__
-	#define ffblk find_t
-    #define findfirst(x,y,z) _dos_findfirst(x,z,y)
-	#define findnext(x) _dos_findnext(x)
-#endif
-
diff --git a/src/sbbs2/smb/121a/smbutil.wat b/src/sbbs2/smb/121a/smbutil.wat
deleted file mode 100644
index a5a588c627..0000000000
--- a/src/sbbs2/smb/121a/smbutil.wat
+++ /dev/null
@@ -1,60 +0,0 @@
-#########################################################################
-# Makefile for SMBUTIL							#
-# For use with Watcom C       						#
-# Tabstop=8                                                             #
-#									#
-# To use this makefile, you must create the following sub-directories:	#
-# DOS, OS2, and DOSX.							#
-#									#
-# You must also copy the file \WATCOM\SRC\STARTUP\WILDARGV.C into the	#
-# current directory.							#
-#########################################################################
-
-# Macros
-
-!ifndef OS
-OS	= DOS
-!endif
-
-!ifeq OS DOS
-CC	= *wcc -ml
-!else
-CC	= *wcc386
-!endif
-
-LD	= *wlink
-CFLAGS	= -I=\watcom\h -bt=$(OS) -fo=$(OS)\ -DLZH_DYNAMIC_BUF
-MAIN	= $(OS)\smbutil.exe
-OBJS	= $(OS)\smbutil.obj $(OS)\smblib.obj $(OS)\smbvars.obj $(OS)\lzh.obj &
-          $(OS)\wildargv.obj
-HEADERS = smbutil.h smblib.h smbdefs.h crc32.h lzh.h
-
-!ifeq OS DOS
-SYSTEM  = DOS
-!endif
-!ifeq OS OS2
-SYSTEM  = OS2V2
-!endif
-!ifeq OS DOSX
-SYSTEM  = DOS4G
-!endif
-
-LFLAGS	= system $(SYSTEM)
-
-
-# Implicit C Compile Rule
-.obj: $(OS)
-.c.obj:
-	@echo Compiling (I) $< to $@ ...
-	$(CC) $(CFLAGS) $<
-
-# Main EXE Link Rule
-$(MAIN): $(OBJS)
-    	@echo Linking $< ...
-	$(LD) $(LFLAGS) file { $(OBJS) }
-
-# All .obj modules
-$(OS)\smbutil.obj::   $(HEADERS)
-$(OS)\smbvars.obj::   $(HEADERS)
-$(OS)\smblib.obj::    $(HEADERS)
-$(OS)\lzh.obj::       $(HEADERS)
diff --git a/src/sbbs2/smb/121a/smbvars.c b/src/sbbs2/smb/121a/smbvars.c
deleted file mode 100644
index 9b80d699e6..0000000000
--- a/src/sbbs2/smb/121a/smbvars.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/* SMBVARS.C */
-
-/*************************************************************************/
-/* Global variables for SMBLIB. Same file used for both header and code. */
-/*************************************************************************/
-
-#ifndef GLOBAL
-#define GLOBAL
-#endif
-
-#include "smbdefs.h"
-#include <stdio.h>
-
-GLOBAL char 	smb_file[128];	/* path and filename for SMB file (no ext) */
-GLOBAL char 	shd_buf[SHD_BLOCK_LEN];
-GLOBAL FILE 	*sdt_fp;
-GLOBAL FILE 	*shd_fp;
-GLOBAL FILE 	*sid_fp;
-GLOBAL FILE 	*sda_fp;
-GLOBAL FILE 	*sha_fp;
-GLOBAL FILE 	*sch_fp;
-
diff --git a/src/sbbs2/smb/chksmb/chksmb.c b/src/sbbs2/smb/chksmb/chksmb.c
deleted file mode 100644
index 9c8a5a86f9..0000000000
--- a/src/sbbs2/smb/chksmb/chksmb.c
+++ /dev/null
@@ -1,672 +0,0 @@
-/* CHKSMB.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include <dos.h>
-#include "smblib.h"
-
-/****************************************************************************/
-/* Checks the disk drive for the existence of a file. Returns 1 if it       */
-/* exists, 0 if it doesn't.                                                 */
-/* Called from upload                                                       */
-/****************************************************************************/
-char fexist(char *filespec)
-{
-	struct find_t f;
-
-if(!_dos_findfirst(filespec,0,&f))
-    return(1);
-return(0);
-}
-
-/****************************************************************************/
-/* Returns in 'string' a character representation of the number in l with   */
-/* commas.																	*/
-/****************************************************************************/
-char *ultoac(ulong l, char *string)
-{
-	char str[256];
-	signed char i,j,k;
-
-ultoa(l,str,10);
-i=strlen(str)-1;
-j=i/3+1+i;
-string[j--]=0;
-for(k=1;i>-1;k++) {
-	string[j--]=str[i--];
-	if(j>0 && !(k%3))
-		string[j--]=','; }
-return(string);
-}
-
-/****************************************************************************/
-/* Returns an ASCII string for FidoNet address 'addr'                       */
-/****************************************************************************/
-char *faddrtoa(fidoaddr_t addr)
-{
-	static char str[25];
-	char point[25];
-
-sprintf(str,"%u:%u/%u",addr.zone,addr.net,addr.node);
-if(addr.point) {
-	sprintf(point,".%u",addr.point);
-	strcat(str,point); }
-return(str);
-}
-
-char *usage="\nusage: chksmb [/opts] <filespec.SHD>\n"
-			"\n"
-			" opts:\n"
-			"       s - stop after errored message base\n"
-			"       p - pause after errored messsage base\n"
-			"       q - quiet mode (no beeps while checking)\n"
-			"       a - don't check allocation files\n"
-			"       t - don't check translation strings\n"
-			"       e - display extended info on corrupted msgs\n";
-
-int main(int argc, char **argv)
-{
-	char		str[128],*p,*s,*beep="\7";
-	int 		i,j,x,y,lzh,errors,errlast,stop_on_error=0,pause_on_error=0
-				,chkxlat=1,chkalloc=1,lzhmsg,extinfo=0,msgerr;
-	ushort		xlat;
-	ulong		l,m,n,length,size,total=0,orphan=0,deleted=0,headers=0
-				,*offset,*number,xlaterr
-				,delhdrblocks,deldatblocks,hdrerr=0,lockerr=0,hdrnumerr=0
-				,acthdrblocks,actdatblocks
-				,dfieldlength=0,dfieldoffset=0
-				,dupenum=0,dupenumhdr=0,dupeoff=0,attr=0,actalloc=0
-				,datactalloc=0,misnumbered=0,timeerr=0,idxofferr=0,idxerr
-				,zeronum,idxzeronum,idxnumerr,packable=0L,totallzhsaved=0L
-				,totalmsgs=0,totallzhmsgs=0,totaldelmsgs=0,totalmsgbytes=0L
-				,lzhblocks,lzhsaved;
-	smb_t		smb;
-	idxrec_t	idx;
-	smbmsg_t	msg;
-
-fprintf(stderr,"\nCHKSMB v2.00� � Check Synchronet Message Base � "
-	"Devloped 1995-1997 Rob Swindell\n");
-
-if(argc<2) {
-	printf("%s",usage);
-	exit(1); }
-
-errlast=errors=0;
-for(x=1;x<argc;x++) {
-	if(stop_on_error && errors)
-		break;
-	if(pause_on_error && errlast!=errors) {
-		fprintf(stderr,"\7\nHit any key to continue...");
-        if(!getch())
-            getch();
-        printf("\n"); }
-	errlast=errors;
-	if(argv[x][0]=='/') {
-		for(y=1;argv[x][y];y++)
-			switch(toupper(argv[x][y])) {
-				case 'Q':
-					beep="";
-					break;
-				case 'P':
-					pause_on_error=1;
-					break;
-				case 'S':
-					stop_on_error=1;
-					break;
-				case 'T':
-					chkxlat=0;
-					break;
-				case 'A':
-					chkalloc=0;
-					break;
-				case 'E':
-					extinfo=1;
-					break;
-				default:
-					printf("%s",usage);
-					exit(1); }
-		continue; }
-
-strcpy(smb.file,argv[x]);
-p=strrchr(smb.file,'.');
-s=strrchr(smb.file,'\\');
-if(p>s) *p=0;
-strupr(smb.file);
-
-sprintf(str,"%s.SHD",smb.file);
-if(!fexist(str)) {
-	printf("\n%s doesn't exist.\n",smb.file);
-	continue; }
-
-fprintf(stderr,"\nChecking %s Headers\n\n",smb.file);
-
-smb.retry_time=30;
-if((i=smb_open(&smb))!=0) {
-	printf("smb_open returned %d\n",i);
-	errors++;
-	continue; }
-
-length=filelength(fileno(smb.shd_fp));
-if(length<sizeof(smbhdr_t)) {
-	printf("Empty\n");
-	smb_close(&smb);
-	continue; }
-
-if((i=smb_locksmbhdr(&smb))!=0) {
-	smb_close(&smb);
-    printf("smb_locksmbhdr returned %d\n",i);
-    errors++;
-    continue; }
-
-if((length/SHD_BLOCK_LEN)*sizeof(ulong)) {
-	if((number=(ulong *)MALLOC(((length/SHD_BLOCK_LEN)+2)*sizeof(ulong)))
-		==NULL) {
-		printf("Error allocating %lu bytes of memory\n"
-			,(length/SHD_BLOCK_LEN)*sizeof(ulong));
-		return(++errors); } }
-else
-	number=NULL;
-
-if(chkalloc && !(smb.status.attr&SMB_HYPERALLOC)) {
-	if((i=smb_open_ha(&smb))!=0) {
-		printf("smb_open_ha returned %d\n",i);
-		return(++errors); }
-
-	if((i=smb_open_da(&smb))!=0) {
-		printf("smb_open_da returned %d\n",i);
-		return(++errors); } }
-
-headers=deleted=orphan=dupenumhdr=attr=zeronum=timeerr=lockerr=hdrerr=0;
-actalloc=datactalloc=deldatblocks=delhdrblocks=xlaterr=0;
-lzhblocks=lzhsaved=acthdrblocks=actdatblocks=0;
-
-for(l=smb.status.header_offset;l<length;l+=size) {
-	fprintf(stderr,"\r%2u%%  ",(long)(100.0/((float)length/l)));
-	msg.idx.offset=l;
-	msgerr=0;
-	if((i=smb_lockmsghdr(&smb,&msg))!=0) {
-		printf("\n(%06lX) smb_lockmsghdr returned %d\n",l,i);
-		lockerr++;
-		headers++;
-		size=SHD_BLOCK_LEN;
-		continue; }
-	if((i=smb_getmsghdr(&smb,&msg))!=0) {
-		smb_unlockmsghdr(&smb,&msg);
-		if(chkalloc && !(smb.status.attr&SMB_HYPERALLOC)) {
-			fseek(smb.sha_fp
-				,(l-smb.status.header_offset)/SHD_BLOCK_LEN,SEEK_SET);
-			j=fgetc(smb.sha_fp);
-			if(j) { 			/* Allocated block or at EOF */
-				printf("%s\n(%06lX) smb_getmsghdr returned %d\n",beep,l,i);
-				hdrerr++; }
-			else
-				delhdrblocks++; }
-		else {
-			/* printf("%s\n(%06lX) smb_getmsghdr returned %d\n",beep,l,i); */
-			delhdrblocks++; }
-		size=SHD_BLOCK_LEN;
-		continue; }
-	smb_unlockmsghdr(&smb,&msg);
-	fprintf(stderr,"#%-5lu (%06lX) %-25.25s ",msg.hdr.number,l,msg.from);
-
-	lzhmsg=0;
-	if(msg.hdr.attr&MSG_DELETE) {
-		deleted++;
-		if(number)
-			number[headers]=0;
-		if(smb.status.attr&SMB_HYPERALLOC)
-			deldatblocks+=smb_datblocks(smb_getmsgdatlen(&msg)); }
-	else {
-		actdatblocks+=smb_datblocks(smb_getmsgdatlen(&msg));
-		if(msg.hdr.number>smb.status.last_msg) {
-			fprintf(stderr,"%sOut-Of-Range message number\n",beep);
-			msgerr=1;
-			if(extinfo)
-				printf("MSGERR: Header number (%lu) greater than last (%lu)\n"
-					,msg.hdr.number,smb.status.last_msg);
-			hdrnumerr++; }
-
-		if(smb_getmsgidx(&smb,&msg)) {
-			fprintf(stderr,"%sNot found in index\n",beep);
-			msgerr=1;
-			if(extinfo)
-				printf("MSGERR: Header number (%lu) not found in index\n"
-					,msg.hdr.number);
-			orphan++; }
-		else if(msg.hdr.attr!=msg.idx.attr) {
-			fprintf(stderr,"%sAttributes mismatch index\n",beep);
-			msgerr=1;
-			if(extinfo)
-				printf("MSGERR: Header attributes (%04X) do not match index "
-					"attributes (%04X)\n"
-					,msg.hdr.attr,msg.idx.attr);
-			attr++; }
-		else if(msg.hdr.when_imported.time!=msg.idx.time) {
-			fprintf(stderr,"%sImport date/time mismatch index\n",beep);
-			msgerr=1;
-			if(extinfo)
-				printf("MSGERR: Header import date/time does not match "
-					"index import date/time\n");
-			timeerr++; }
-
-		if(msg.hdr.number==0) {
-			fprintf(stderr,"%sZero message number\n",beep);
-			msgerr=1;
-			if(extinfo)
-				printf("MSGERR: Header number is zero (invalid)\n");
-			zeronum++; }
-		if(number) {
-			for(m=0;m<headers;m++)
-				if(number[m] && msg.hdr.number==number[m]) {
-					fprintf(stderr,"%sDuplicate message number\n",beep);
-					msgerr=1;
-					if(extinfo)
-						printf("MSGERR: Header number (%lu) duplicated\n"
-							,msg.hdr.number);
-					dupenumhdr++;
-					break; }
-			number[headers]=msg.hdr.number; }
-		if(chkxlat) {		/* Check translation strings */
-			for(i=0;i<msg.hdr.total_dfields;i++) {
-				fseek(smb.sdt_fp,msg.hdr.offset+msg.dfield[i].offset,SEEK_SET);
-				if(!fread(&xlat,2,1,smb.sdt_fp))
-					xlat=0xffff;
-				lzh=0;
-				if(xlat==XLAT_LZH) {
-					lzh=1;
-					if(!fread(&xlat,2,1,smb.sdt_fp))
-						xlat=0xffff; }
-				if(xlat!=XLAT_NONE) {
-					fprintf(stderr,"%sUnsupported Xlat %04X dfield[%u]\n"
-						,beep,xlat,i);
-					msgerr=1;
-					if(extinfo)
-						printf("MSGERR: Unsupported translation type (%04X) "
-							"in dfield[%u]\n"
-							,xlat,i);
-					xlaterr++; }
-				else {
-					if(lzh) {
-						lzhmsg=1;
-						if(fread(&m,4,1,smb.sdt_fp)) { /* Get uncompressed len */
-							lzhsaved+=(smb_datblocks(m+2)
-								-smb_datblocks(msg.dfield[i].length))
-								*SDT_BLOCK_LEN;
-							lzhblocks+=smb_datblocks(msg.dfield[i].length);
-						} } } } } }
-
-	size=smb_getmsghdrlen(&msg);
-	while(size%SHD_BLOCK_LEN)
-		size++;
-
-	if(chkalloc && !(smb.status.attr&SMB_HYPERALLOC)) {
-		fseek(smb.sha_fp,(l-smb.status.header_offset)/SHD_BLOCK_LEN,SEEK_SET);
-		for(m=0;m<size;m+=SHD_BLOCK_LEN) {
-/***
-			if(msg.hdr.attr&MSG_DELETE && (i=fgetc(smb.sha_fp))!=0) {
-				fprintf(stderr,"%sDeleted Header Block %lu marked %02X\n"
-					,beep,m/SHD_BLOCK_LEN,i);
-				msgerr=1;
-				delalloc++; }
-***/
-			if(!(msg.hdr.attr&MSG_DELETE) && (i=fgetc(smb.sha_fp))!=1) {
-				fprintf(stderr,"%sActive Header Block %lu marked %02X\n"
-					,beep,m/SHD_BLOCK_LEN,i);
-				msgerr=1;
-				if(extinfo)
-					printf("MSGERR: Active header block %lu marked %02X "
-						"instead of 01\n"
-						,m/SHD_BLOCK_LEN,i);
-				actalloc++; } }
-
-		if(!(msg.hdr.attr&MSG_DELETE)) {
-			acthdrblocks+=(size/SHD_BLOCK_LEN);
-			for(n=0;n<msg.hdr.total_dfields;n++) {
-				if(msg.dfield[n].offset&0x80000000UL) {
-					msgerr=1;
-					if(extinfo)
-						printf("MSGERR: Invalid Data Field [%u] Offset: %lu\n"
-							,n,msg.dfield[n].offset);
-					dfieldoffset++; }
-				if(msg.dfield[n].length&0x80000000UL) {
-					msgerr=1;
-					if(extinfo)
-						printf("MSGERR: Invalid Data Field [%u] Length: %lu\n"
-							,n,msg.dfield[n].length);
-					dfieldlength++; }
-				fseek(smb.sda_fp
-					,((msg.hdr.offset+msg.dfield[n].offset)/SDT_BLOCK_LEN)*2
-					,SEEK_SET);
-				for(m=0;m<msg.dfield[n].length;m+=SDT_BLOCK_LEN) {
-					if(!fread(&i,2,1,smb.sda_fp) || !i) {
-						fprintf(stderr
-							,"%sActive Data Block %lu.%lu marked free\n"
-							,beep,n,m/SHD_BLOCK_LEN);
-						msgerr=1;
-						if(extinfo)
-							printf("MSGERR: Active Data Block %lu.%lu "
-								"marked free\n"
-								,n,m/SHD_BLOCK_LEN);
-						datactalloc++; } } } }
-		else
-			delhdrblocks+=(size/SHD_BLOCK_LEN); }
-
-	else {	 /* Hyper Alloc */
-		if(msg.hdr.attr&MSG_DELETE)
-			delhdrblocks+=(size/SHD_BLOCK_LEN);
-		else
-			acthdrblocks+=(size/SHD_BLOCK_LEN); }
-
-	totallzhmsgs+=lzhmsg;
-	headers++;
-	if(msgerr && extinfo) {
-		printf("\n");
-		printf("%-20s: %s\n","Message Base",smb.file);
-		printf("%-20s: %lu (%lu)\n","Message Number"
-			,msg.hdr.number,msg.offset+1);
-		printf("%-20s: %s\n","Subject",msg.subj);
-		printf("%-20s: %s","To",msg.to);
-		if(msg.to_net.type)
-			printf(" (%s)",msg.to_net.type==NET_FIDO
-				? faddrtoa(*(fidoaddr_t *)msg.to_net.addr) : msg.to_net.addr);
-		printf("\n%-20s: %s","From",msg.from);
-		if(msg.from_net.type)
-			printf(" (%s)",msg.from_net.type==NET_FIDO
-				? faddrtoa(*(fidoaddr_t *)msg.from_net.addr)
-                    : msg.from_net.addr);
-		printf("\n");
-		printf("%-20s: %.24s\n","When Written"
-			,ctime((time_t *)&msg.hdr.when_written.time));
-		printf("%-20s: %.24s\n","When Imported"
-			,ctime((time_t *)&msg.hdr.when_imported.time));
-		printf("%-20s: %04hXh\n","Type"
-			,msg.hdr.type);
-		printf("%-20s: %04hXh\n","Version"
-			,msg.hdr.version);
-		printf("%-20s: %u\n","Length"
-			,msg.hdr.length);
-		printf("%-20s: %04hXh\n","Attributes"
-			,msg.hdr.attr);
-		printf("%-20s: %08lXh\n","Auxilary Attributes"
-			,msg.hdr.auxattr);
-		printf("%-20s: %08lXh\n","Network Attributes"
-			,msg.hdr.netattr);
-		printf("%-20s: %06lXh\n","Header Offset"
-			,msg.idx.offset);
-		printf("%-20s: %06lXh\n","Data Offset"
-			,msg.hdr.offset);
-		printf("%-20s: %u\n","Total Data Fields"
-			,msg.hdr.total_dfields);
-		printf("\n"); }
-
-	smb_freemsgmem(&msg); }
-
-if(number)
-    FREE(number);
-
-fprintf(stderr,"\r%79s\r100%%\n","");
-
-
-if(chkalloc && !(smb.status.attr&SMB_HYPERALLOC)) {
-
-	fprintf(stderr,"\nChecking %s Data Blocks\n\n",smb.file);
-
-	length=filelength(fileno(smb.sda_fp));
-
-	fseek(smb.sda_fp,0L,SEEK_SET);
-	for(l=0;l<length;l+=2) {
-		fprintf(stderr,"\r%2u%%  ",l ? (long)(100.0/((float)length/l)) : 0);
-		i=0;
-		if(!fread(&i,2,1,smb.sda_fp))
-			break;
-		if(!i)
-			deldatblocks++; }
-
-	fclose(smb.sha_fp);
-	fclose(smb.sda_fp);
-
-	fprintf(stderr,"\r%79s\r100%%\n",""); }
-
-total=filelength(fileno(smb.sid_fp))/sizeof(idxrec_t);
-
-dupenum=dupeoff=misnumbered=idxzeronum=idxnumerr=idxofferr=idxerr=0;
-
-if(total) {
-
-fprintf(stderr,"\nChecking %s Index\n\n",smb.file);
-
-if((offset=(ulong *)MALLOC(total*sizeof(ulong)))==NULL) {
-    printf("Error allocating %lu bytes of memory\n",total*sizeof(ulong));
-	return(++errors); }
-if((number=(ulong *)MALLOC(total*sizeof(ulong)))==NULL) {
-    printf("Error allocating %lu bytes of memory\n",total*sizeof(ulong));
-	return(++errors); }
-fseek(smb.sid_fp,0L,SEEK_SET);
-
-for(l=0;l<total;l++) {
-	fprintf(stderr,"\r%2lu%%  %5lu ",l ? (long)(100.0/((float)total/l)) : 0,l);
-	if(!fread(&idx,sizeof(idxrec_t),1,smb.sid_fp))
-		break;
-	fprintf(stderr,"#%-5lu (%06lX) 1st Pass ",idx.number,idx.offset);
-/***
-	if(idx.attr&MSG_DELETE) {
-		fprintf(stderr,"%sMarked for deletion\n",beep);
-		delidx++; }
-***/
-	for(m=0;m<l;m++)
-        if(number[m]==idx.number) {
-			fprintf(stderr,"%sDuplicate message number\n",beep);
-			dupenum++;
-			break; }
-	for(m=0;m<l;m++)
-        if(offset[m]==idx.offset) {
-			fprintf(stderr,"%sDuplicate offset\n",beep,idx.offset);
-			dupeoff++;
-			break; }
-	if(idx.offset<smb.status.header_offset) {
-		fprintf(stderr,"%sInvalid offset\n",beep);
-		idxofferr++;
-		break; }
-	if(idx.number==0) {
-		fprintf(stderr,"%sZero message number\n",beep);
-		idxzeronum++;
-		break; }
-	if(idx.number>smb.status.last_msg) {
-		fprintf(stderr,"%sOut-Of-Range message number\n",beep);
-		idxnumerr++;
-		break; }
-    number[l]=idx.number;
-    offset[l]=idx.offset; }
-
-if(l<total) {
-	fprintf(stderr,"%sError reading index record\n",beep);
-	idxerr=1; }
-else {
-	fprintf(stderr,"\r%79s\r","");
-	for(m=0;m<total;m++) {
-		fprintf(stderr,"\r%2lu%%  %5lu ",m ? (long)(100.0/((float)total/m)) : 0,m);
-		fprintf(stderr,"#%-5lu (%06lX) 2nd Pass ",number[m],offset[m]);
-		for(n=0;n<m;n++)
-			if(number[m] && number[n] && number[m]<number[n]) {
-				fprintf(stderr,"%sMisordered message number\n",beep);
-				misnumbered++;
-				number[n]=0;
-				break; } }
-	fprintf(stderr,"\r%79s\r100%%\n",""); }
-FREE(number);
-FREE(offset);
-
-}	/* if(total) */
-
-totalmsgs+=smb.status.total_msgs;
-totalmsgbytes+=(acthdrblocks*SHD_BLOCK_LEN)+(actdatblocks*SDT_BLOCK_LEN);
-totaldelmsgs+=deleted;
-totallzhsaved+=lzhsaved;
-printf("\n");
-printf("%-35.35s (=): %lu\n"
-	,"Status Total"
-	,smb.status.total_msgs);
-printf("%-35.35s (=): %lu\n"
-	,"Index Records"
-	,total);
-printf("%-35.35s (=): %lu\n"
-	,"Active Headers"
-	,headers-deleted);
-printf("%-35.35s ( ): %-8lu %13s bytes used\n"
-	,"Active Header Blocks"
-	,acthdrblocks,ultoac(acthdrblocks*SHD_BLOCK_LEN,str));
-printf("%-35.35s ( ): %-8lu %13s bytes used\n"
-	,"Active Data Blocks"
-	,actdatblocks,ultoac(actdatblocks*SDT_BLOCK_LEN,str));
-if(lzhblocks)
-	printf("%-35.35s ( ): %-8lu %13s bytes saved\n"
-		,"Active LZH Compressed Data Blocks"
-		,lzhblocks,ultoac(lzhsaved,str));
-printf("%-35.35s ( ): %lu\n"
-	,"Header Records"
-    ,headers);
-printf("%-35.35s ( ): %lu\n"
-	,"Deleted Headers"
-	,deleted);
-printf("%-35.35s ( ): %-8lu %13s bytes used\n"
-	,"Deleted Header Blocks"
-	,delhdrblocks,ultoac(delhdrblocks*SHD_BLOCK_LEN,str));
-packable+=(delhdrblocks*SHD_BLOCK_LEN);
-printf("%-35.35s ( ): %-8lu %13s bytes used\n"
-	,"Deleted Data Blocks"
-	,deldatblocks,ultoac(deldatblocks*SDT_BLOCK_LEN,str));
-packable+=(deldatblocks*SDT_BLOCK_LEN);
-
-if(orphan)
-	printf("%-35.35s (!): %lu\n"
-		,"Orphaned Headers"
-		,orphan);
-if(idxzeronum)
-	printf("%-35.35s (!): %lu\n"
-		,"Zeroed Index Numbers"
-		,idxzeronum);
-if(zeronum)
-	printf("%-35.35s (!): %lu\n"
-		,"Zeroed Header Numbers"
-		,zeronum);
-/***
-if(delidx)
-	printf("%-35.35s (!): %lu\n"
-		,"Deleted Index Records"
-		,delidx);
-***/
-if(idxofferr)
-	printf("%-35.35s (!): %lu\n"
-		,"Invalid Index Offsets"
-		,idxofferr);
-if(dupenum)
-	printf("%-35.35s (!): %lu\n"
-		,"Duplicate Index Numbers"
-		,dupenum);
-if(dupeoff)
-	printf("%-35.35s (!): %lu\n"
-		,"Duplicate Index Offsets"
-		,dupeoff);
-if(dupenumhdr)
-	printf("%-35.35s (!): %lu\n"
-		,"Duplicate Header Numbers"
-		,dupenumhdr);
-if(misnumbered)
-	printf("%-35.35s (!): %lu\n"
-		,"Misordered Index Numbers"
-		,misnumbered);
-if(lockerr)
-	printf("%-35.35s (!): %lu\n"
-		,"Unlockable Header Records"
-		,lockerr);
-if(hdrerr)
-	printf("%-35.35s (!): %lu\n"
-		,"Unreadable Header Records"
-		,hdrerr);
-if(idxnumerr)
-    printf("%-35.35s (!): %lu\n"
-		,"Out-Of-Range Index Numbers"
-		,idxnumerr);
-if(hdrnumerr)
-    printf("%-35.35s (!): %lu\n"
-		,"Out-Of-Range Header Numbers"
-		,hdrnumerr);
-if(attr)
-	printf("%-35.35s (!): %lu\n"
-		,"Mismatched Header Attributes"
-		,attr);
-if(timeerr)
-	printf("%-35.35s (!): %lu\n"
-		,"Mismatched Header Import Time"
-		,timeerr);
-if(xlaterr)
-    printf("%-35.35s (!): %lu\n"
-        ,"Unsupported Translation Types"
-        ,xlaterr);
-if(datactalloc)
-	printf("%-35.35s (!): %lu\n"
-		,"Misallocated Active Data Blocks"
-		,datactalloc);
-if(actalloc)
-	printf("%-35.35s (!): %lu\n"
-		,"Misallocated Active Header Blocks"
-		,actalloc);
-/***
-if(delalloc)
-	printf("%-35.35s (!): %lu\n"
-		,"Misallocated Deleted Header Blocks"
-		,delalloc);
-***/
-
-if(dfieldoffset)
-	printf("%-35.35s (!): %lu\n"
-		,"Invalid Data Field Offsets"
-		,dfieldoffset);
-
-if(dfieldlength)
-	printf("%-35.35s (!): %lu\n"
-		,"Invalid Data Field Lengths"
-		,dfieldlength);
-
-
-printf("\n%s Message Base ",smb.file);
-if((headers-deleted)!=smb.status.total_msgs || total!=smb.status.total_msgs
-	|| (headers-deleted)!=total || idxzeronum || zeronum
-	|| orphan || dupenumhdr || dupenum || dupeoff || attr
-	|| lockerr || hdrerr || hdrnumerr || idxnumerr || idxofferr
-	|| actalloc || datactalloc || misnumbered || timeerr
-	|| dfieldoffset || dfieldlength || xlaterr || idxerr) {
-	printf("%shas Errors!\n",beep);
-	errors++; }
-else
-	printf("is OK\n");
-
-smb_unlocksmbhdr(&smb);
-smb_close(&smb);
-}
-
-if((totalmsgs && (totalmsgs!=smb.status.total_msgs || totallzhmsgs))
-	|| packable)
-	printf("\n");
-if(totalmsgs && totalmsgs!=smb.status.total_msgs)
-	printf("%-39.39s: %-8lu %13s bytes used\n"
-		,"Total Active Messages"
-		,totalmsgs,ultoac(totalmsgbytes,str));
-if(totallzhmsgs && totalmsgs!=smb.status.total_msgs)
-	printf("%-39.39s: %-8lu %13s bytes saved\n"
-		,"Total LZH Compressed Messages"
-		,totallzhmsgs,ultoac(totallzhsaved,str));
-if(packable)
-	printf("%-39.39s: %-8lu %13s bytes used\n"
-		,"Total Deleted Messages"
-		,totaldelmsgs,ultoac(packable,str));
-
-if(pause_on_error && errlast!=errors) {
-    fprintf(stderr,"\7\nHit any key to continue...");
-    if(!getch())
-        getch();
-    fprintf(stderr,"\n"); }
-
-
-return(errors);
-}
diff --git a/src/sbbs2/smb/chksmb/makefile b/src/sbbs2/smb/chksmb/makefile
deleted file mode 100644
index 186a09f140..0000000000
--- a/src/sbbs2/smb/chksmb/makefile
+++ /dev/null
@@ -1,52 +0,0 @@
-###############################
-# Makefile for CHKSMB         #
-# For use with Borland C++    #
-# Tabstop=8		      #
-###############################
-
-# Macros
-
-OS	= DOS
-CC	= bcc
-LD	= tlink
-INCLUDE = \bc31\include;..
-LIB	= \bc31\lib
-MODEL	= l
-CFLAGS	= -d -C -m$(MODEL) -I$(INCLUDE) -w-pro
-LFLAGS	= -n -c
-
-!ifdef __OS2__
-OS	= OS2
-CC      = c:\bcos2\bin\bcc
-LD      = c:\bcos2\bin\tlink
-INCLUDE = c:\bcos2\include;..
-LIB     = c:\bcos2\lib
-CFLAGS	= -d -C -I$(INCLUDE) -w-pro
-LFLAGS  = -c -w-srf
-!endif
-
-MAIN	= $(OS)\chksmb.exe
-OBJS	= $(OS)\chksmb.obj $(OS)\smblib.obj
-HEADERS = ..\smblib.h ..\smbdefs.h ..\crc32.h
-
-# Implicit C Compile Rule
-{.;..}.c.obj:
-	@echo Compiling (I) $< to $@ ...
-	$(CC) $(CFLAGS) -n$(OS) -c $<
-
-# Main EXE Link Rule
-$(MAIN): $(OBJS)
-    	@echo Linking $< ...
-!ifdef __OS2__
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c02.obj $(OBJS) $(LIB)\wildargs.obj
-+, $*, $*, $(LIB)\os2.lib $(LIB)\c2.lib
-!else
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c0$(MODEL) $(OBJS) $(LIB)\wildargs.obj
-+, $*, $*, $(LIB)\c$(MODEL).lib $(LIB)\math$(MODEL).lib $(LIB)\emu.lib
-!endif
-
-# All .obj modules
-$(OS)\chksmb.obj:	 $(HEADERS)
-$(OS)\smblib.obj:	 $(HEADERS)
diff --git a/src/sbbs2/smb/crc16.c b/src/sbbs2/smb/crc16.c
deleted file mode 100644
index 81ba4c9a98..0000000000
--- a/src/sbbs2/smb/crc16.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* CRC16.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* 16-bit CRC routines */
-
-#include "smblib.h"
-
-/****************************************************************************/
-/* Updates 16-bit "rcrc" with character 'ch'                                */
-/****************************************************************************/
-void ucrc16(uchar ch, ushort *rcrc) {
-    ushort i, cy;
-    uchar nch=ch;
- 
-for (i=0; i<8; i++) {
-    cy=*rcrc & 0x8000;
-    *rcrc<<=1;
-    if (nch & 0x80) *rcrc |= 1;
-    nch<<=1;
-    if (cy) *rcrc ^= 0x1021; }
-}
-
-/****************************************************************************/
-/* Returns 16-crc of string (not counting terminating NULL)                 */
-/****************************************************************************/
-ushort SMBCALL crc16(char *str)
-{
-    int     i=0;
-    ushort  crc=0;
-
-ucrc16(0,&crc);
-while(str[i])
-    ucrc16(str[i++],&crc);
-ucrc16(0,&crc);
-ucrc16(0,&crc);
-return(crc);
-}
-
diff --git a/src/sbbs2/smb/crc32.c b/src/sbbs2/smb/crc32.c
deleted file mode 100644
index f432032d1c..0000000000
--- a/src/sbbs2/smb/crc32.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* CRC32.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* 32-bit CRC of a buffer */
-
-#include "smblib.h"
-#include "crc32.h"
-
-#ifdef __NT__
-#	define CRCCALL _pascal
-#else
-#	define CRCCALL
-#endif
-
-ulong CRCCALL crc32(char *buf, ulong len)
-{
-	ulong l,crc=0xffffffff;
-
-for(l=0;l<len;l++)
-	crc=ucrc32(buf[l],crc);
-return(~crc);
-}
diff --git a/src/sbbs2/smb/crc32.h b/src/sbbs2/smb/crc32.h
deleted file mode 100644
index d0127ab888..0000000000
--- a/src/sbbs2/smb/crc32.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* 32-bit CRC */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-long crc32tbl[]={	/* CRC polynomial 0xedb88320 */
-0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
-0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
-0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
-0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
-0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
-0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
-0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
-0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
-0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
-0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
-0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
-0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
-0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
-0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
-0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
-0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
-0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
-0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
-0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
-0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
-0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
-0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
-0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
-0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
-0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
-0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
-0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
-0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
-0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
-0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
-0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
-0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
-};
-
-#define ucrc32(ch,crc) (crc32tbl[(crc^ch)&0xff]^(crc>>8))
-
-
diff --git a/src/sbbs2/smb/docs/smb.hst b/src/sbbs2/smb/docs/smb.hst
deleted file mode 100644
index c13f8c1a98..0000000000
--- a/src/sbbs2/smb/docs/smb.hst
+++ /dev/null
@@ -1,327 +0,0 @@
-Synchronet Message Base Specification Modification History
-==========================================================
-
-******************************
-01/20/94 Initial Release v1.00
-******************************
-
-Quite a few spelling errors in SMB.TXT corrected.
-
-Estimated maximum number of messages (in Introduction of SMB.TXT) formula
-corrected (1500 rounded to nearest 256 is 1536, not 2048).
-
-Pages 32 and 38 (SENDEREXT and RECIPIENTEXT header field types) incorrectly
-stated the index record contains CRC-32s, when in fact the index contains
-CRC-16s of the agent names or extensions.
-
-FORWARDTO header field types incorrectly stated they were for replies, rather
-than forwarding instructions.
-
-Trigger header field types incorrectly stated they were "attachments" rather
-than triggers.
-
-Bug fixed in smb_open() function in smblib.c: was allocating buffer via
-setvbuf for wrong file pointer when opening header file. Caused loss of 
-memory (2k) everytime smb_open() was called.
-
-Bug fixed in smb_getmsghdr() function in smblib.c: msg->from_agent,to_agent,
-and replyto_agent were not initialized properly.
-
-Added from_ext, to_ext, and replyto_ext fields to msg struct. Initialized
-with call to smb_getmsghdr() function. These are convenience pointers for
-the to, from, and replyto agent extensions (user numbers, usually).
-
-Fixed a nasty bug in the smb_freemsgdat() function, causing odd values in the
-SDA file and cross-linked messages when fast allocation mode was not used for
-new messages.
-
-smb_putmsghdr() function replaced by smb_putmsg() and it calls smb_putmsghdr()
-and smb_putmsgidx() - previously smb_putmsghdr() actually wrote the header
-and the index. So you must change any occurances of smb_putmsghdr() to
-smb_putmsg() if you intend to write to both the index and header records.
-
-smb_open() now takes a "retry_time" parameter (number of seconds) to lock
-and read the message base header and verify the "id" and "version". Added
-new error codes: -1 indicates failure to lock message base header, -2 indicates
-id mismatch, and -3 indicates incompatible message base version.
-
-rewind() and clearerr() calls added to library functions to eliminate the
-problem of "sticky" error flags when using fread() and fwrite(). Reordered
-the use of chsize() to force seeking (with fseek()) before using the file
-descriptor operation (chsize()) would would fail under some circumstances.
-
-smb_getmsgidx() function now uses "fast" message number look-up algorythm.
-
-Added smb_getlastidx() function to retrieve the last index in the message
-base.
-
-Allocation strategy for hfield and dfield elements of the smbmsg_t structure
-were changed to require less memory. Rather than an array of pointers (pointer
-to a pointer) of type hfield_t or dfield_t, they are simply an array (pointer)
-of type hfield_t or dfield_t. The only change you need to make are any
-references to "smbmsg_t.hfield[x]->etc" to "smbmsg_t.hfield[x].etc".
-
-Added several new error codes to smb_getmsghdr(). -7 indicates missing one
-of the three mandatory header fields (sender, recipient, or subject). -8
-indicates that total_dfields element of smbhdr_t is incorrect (extends beyond
-smbhdr_t.length). -9 indicates incompatible header version.
-
-New error code to smb_addcrc(), -4 indicates error getting length of file.
-
-smb_putmsghdr() returns -2 on failure write header, -3 on failure to write
-dfield, -4 on failure to write hfield (fixed), -5 on failure to write hfield
-(data), and -6 on failure to pad record with NULLs.
-
-Bugs fixed in sample conversion source code and SMBUTIL: Overwriting first
-two bytes of next record when using self-packing storage, SBBSFIDO would
-crash on blank kludge lines, SEEN-BYs weren't converted properly by SBBSFIDO,
-and more.
-
-*** IMPORTANT ***
-Index format changed, added message time field to idxrec_t for fast pointer
-manipulation by (import) date/time stamp. This is SMB format v1.10 and is
-not compatible with the v1.00 format. A conversion program (100TO110.EXE)
-is included with source code for converted any existing message bases.
-
-CHKSMB, a utility for checking message bases for corruption, included with
-SMBLIB.
-
-SMBUTIL and CHKSMB both accept wildcard arguments for processing multiple
-message bases.
-
-idxrec_t.to and idxrec_t.from may contain USER NUMBER instead of CRC of user
-names. This implementation is currently specific to E-mail boxes on Synchronet
-BBS. E-mail from non-local users are stored with a "from" field of 0.
-
-**********************
-03/28/94 Release v1.10
-**********************
-
-Forgot to include this file (oops).
-
-***********************
-03/28/94 Release v1.10a
-***********************
-
-Fixed problem with buffered fread() routine attempting to read into a locked
-regions.
-
-Added smb_stack() function for saving (pushing) currently open message base
-and ability to pop it off later.
-
-Added fix for keeping original sender information in smbmsg_t structure when
-a message has been forwarded.
-
-CHKSMB now correctly support multiple destination messages (without reporting
-missallocated active data blocks) and now reports packable bytes available.
-
-SMBUTIL can now conditionally compress a message base, only if so many K are
-compressable.
-
-Fixed problem with incorrect UTC value.
-
-Added NET_WWIV network type.
-
-**********************
-06/02/94 Release v1.11
-**********************
-
-Created Watcom compatible MAKEFILE for DOS, 32-bit DOS, and 32-bit OS/2
-versions of SMBUTIL.
-
-Enhanced macro definitions in SMBDEFS.H for MALLOC, FREE, and REALLOC to
-support Watcom and other compilers other than Borland. Also added LMALLOC
-and LFREE macros for large allocation (>64k) operations.
-
-Fixed problem with multiple calls to setvbuf() when using Watcom C libraries.
-Memory allocated by setvbuf() would never be released. To work around this
-Watcom C bug, a static buffer, shd_buf[], is now used instead.
-
-Fixed bug in smb_getmsghdr() that would cause it to return -6 when attempting
-to allocate 0 length header fields.
-
-Added LZH.C to SMBLIB for message data compression/decompression.
-
-Removed the 16-bit CRC functions from SMBUTIL and put them in CRC16.C (now part
-of SMBLIB) for easier integration into other applications.
-
-Added Hyper Allocation storage method to specification: smbstatus_t.reserved
-changed to smbstatus_t.attr and SMB_HYPERALLOC bit is set when Hyper Allocation
-storage is used for a message base. This is the only change between v1.10 and 
-v1.20 of the message base format. No other bits in smbstatus_t.attr are 
-currently defined. See the specification for definition of the Hyper Allocation
-storage method.
-
-Changed SMB Storage and Retrieval Protocol chapters in the specification to
-Pseudo-code examples.
-
-Added SMBLIB Storage and Retrieval C example chapters to the specification.
-
-Added field descriptions for message base header record fields and Status Info
-(base header #1) record fields to the specification.
-
-Changed SMBLIB smb_addmsghdr() 'fast' argument to 'storage' to specify the
-storage method to use (either SMB_SELFPACK, SMB_FASTALLOC, or SMB_HYPERALLOC).
-Previous usage (0 for self-pack, 1 for fast) still compatible.
-
-Added smb_hallocdat() and smb_hallochdr() to SMBLIB functions for the Hyper
-Allocation storage method.
-
-Added SMB_STACK_XCHNG operation to smb_stack() function, to exchange the top
-of the stack with the currently open message base.
-
-**********************
-02/14/95 Release v1.20
-**********************
-
-smb_close() was modified in the following ways:
-	Only attempts to close non-NULL file pointers
-	If shd_fp is currently open, calls smb_unlocksmbhdr() before closing
-		(just in case it was left locked by application)
-
-smb_open() was modified in the following ways:
-	Initializes all file pointers to NULL
-	calls smb_close() if any of the files couldn't be opened
-
-smb_locksmbhdr() was modified in the following ways:
-	If lock fails, attempts to unlock the header before next lock
-		attempt (just incase application attempts to lock a locked
-		header without first unlocking it)
-
-smb_lockmsghdr() was modified in the following ways:
-	If lock fails, attempts to unlock the header before next lock
-		attempt (same reason stated above)
-
-CHKSMB (1.21) was modified in the following ways:
-	Tests for valid translations strings in the .SDT files
-	Displays totals for bytes used by header and data blocks, bytes used
-		by deleted messages, and bytes saved by LZH compression
-
-SMBUTIL (1.21) underwent some minor cosmetic changes.
-
-***********************
-03/18/95 Release v1.20a
-***********************
-
-SMBUTIL (1.22) now compiles correctly under Watcom, using correct time zone
-information. SMBUTIL maint() will no longer delete messages if max_age is
-specified in the SMB header and the when_imported time for a message is in the
-future.
-
-Fixed problem in LZH.C that would cause lzh_decode() to generate exception
-errors when compiled with a 32-bit compiler.
-
-CHKSMB (1.22) now supports /E command line switch to display extended
-information about corrupted messages. CHKSMB.C is now Watcom compatible.
-
-Added fflush() calls to all smblib functions that write to the SDT, SHA, or SDA
-files. This eliminates the problem of duplicate data offsets (data blocks for
-multiple messages pointing to the same location) causing corrupted SDT files
-(unsupported translation types reported by CHKSMB).
-
-Added fflush() call after writing to SDT file in SMB_PUT example in SMB.TXT.
-
-Fixed example *2SMB.C files to be compatible with SMBLIB v1.20 smb_create()
-function.
-
-Fixed smb_hallocdat() function prototype to stop redeclaration warnings.
-
-Minor typos in specification fixed.
-
-***********************
-04/24/95 Release v1.20b
-***********************
-
-Added SMB_EMAIL (1<<0) attribute definition for the message base status header
-to specify a local e-mail message base where index "to" and "from" fields are
-stored as user numbers, not CRC-16s (this is the only change between v1.20
-and v1.21 of the SMB format).
-
-Version 1.21 of FIXSMB no longer needs the "/M" switch to correctly fix a
-Synchronet e-mail message base (as long as the SMB_EMAIL status attr is set).
-
-Version 1.23 of SMBUTIL can now import text into a Synchronet e-mail message
-base (as long as the SMB_EMAIL status attr has been set). It will ask for the
-sender and recipient user numbers. Fixed an apparently nasty bug that would
-cause damage to message bases when (I)mporting (check for SMB_HYPERALLOC
-attribute was backwards). Excess baggage in the SMBUTIL source code was also
-removed (no longer supports /L, /F, and /D command line switches). Only
-supports self-packing and hyper-allocated message bases (it will not damage
-fast allocated bases, however). "SMBUTIL M" now correctly handles message bases
-that contain messages that have been pre-flagged for deletion (MSG_DELETE attr
-set).
-
-Changed smb_open(int retry_count) function: if retry_count is 0, then a "fast
-open" method is used which doesn't lock and read the status header to check
-for compatibility and validity of message base.
-
-Added SMBLIB_VERSION definition (string constant) to contain the current
-version and revision (if applicable) of the SMB library. This version number
-may not always be the same as SMB_VERSION (version of the SMB format) or the
-current version of the specification. It may be helpful to include a display
-of this version number somewhere in your application (i.e. printf("SMBLIB v%s"
-,SMBLIB_VERSION);).
-
-Changed smb_stack() example in the Performance Issues chapter to keep two
-message bases always open using SMB_STACK_XCHNG.
-
-Fixed bug in SMBUTIL that would cause an infinite loop when analysing an
-extrememly corrupted HyperAllocated message base.
-
-Fixed bug in smb_stack() function when using SMB_STACK_XCHNG operation. Would
-previously set current message base to an undefined message base, rather than
-the message base on top of the stack (last pushed or exchanged).
-
-CHKSMB v1.22 compiled in the 1.20b release did not support wildcards (wasn't
-linked with WILDARGS.OBJ) - this has been fixed and is the only change in
-CHKSMB v1.23.
-
-**********************
-05/31/95 Release v1.21
-**********************
-
-Add uchar forwarded element to smbmsg_t structure. This variable is initialized
-by the smb_getmsghdr() function. If the message has been forwarded, it will
-be set to non-zero.
-
-Fixed bug in LZH.C which caused lzh_decode() to produce incorrect results
-(usually t's and spaces) when compiled with a 32-bit compiler.
-
-Added HUGE16 and FAR16 macros to SMBDEFS.H for huge and far pointers for
-16-bit compilers only (default pointer type for 32-bit compilers).
-
-Fixed bug in FIXSMB.C that would initialize the SDA file to the wrong length.
-
-Added net type NET_MHS for MHS gateways.
-
-SMBUTIL (1.24) will no longer free deleted headers when maintaining a message
-base if the /A (no analysis) command line switch is used. This speeds up the
-message base maintenance/pack operation significantly by using: SMBUTIL /A MP
-
-***********************
-08/31/95 Release v1.21a
-***********************
-
-All smb_*() functions changed to accept pointers to an smb_t structure. This
-eliminates the use of global variables (making DLLs difficult or impossible
-to program). A pointer is used even if the function doesn't modify the data
-to maintain a consistent API and compatibility with languages that don't
-support the passing of user defined types by value (e.g. Visual Basic).
-
-The smb_t structure contains a retry_time element that defines the maximum
-number of seconds to wait while trying to open a locked message base or record.
-If this element of the passed smb_t variable is 0, a default value of 10
-seconds is used.
-
-Added smb_getmsgtxt() and smb_freemsgtxt() functions to SMBLIB.C (only included
-if SMB_GETMSGTXT is defined).
-
-*******************
-11/18/95 Beta v2.00
-*******************
-
-Bug in smb_getmsgtxt() with message data field lengths less than 2.
-
-**********************
-03/22/96 Release v2.01
-**********************
diff --git a/src/sbbs2/smb/docs/smb.src b/src/sbbs2/smb/docs/smb.src
deleted file mode 100644
index 35fe9b22c9..0000000000
--- a/src/sbbs2/smb/docs/smb.src
+++ /dev/null
@@ -1,3592 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-                     Synchronet Message Base Specification
-								 Version 1.21
-							   Updated 08/31/95
-
-						Copyright 1995 Digital Dynamics
-
-                                  PO Box 501
-                             Yorba Linda, CA 92686
-
-				 Voice: 714-529-6328   BBS: 714-529-9525 V.32/V.32bis
-				   FAX: 714-529-9721		714-529-9547 V.FC
-				  Fido: 1:103/705	   ftp: netcom.com /pub/sb/sbbs
-
-Table of Contents
-=================
-&&Contents
-
-Introduction....................................................@@INTRO___
-Implementation Levels...........................................@@IMPLEVEL
-Definitions.....................................................@@DEFINES_
-        Acronyms................................................@@ACRONYMS
-        Data Types..............................................@@DATATYPE
-File Formats....................................................@@FILEFORM
-        Index.....................(*.SID).......................@@SID_FORM
-        Header....................(*.SHD).......................@@SHD_FORM
-        Header Allocation.........(*.SHA).......................@@SHA_FORM
-        Data......................(*.SDT).......................@@SDT_FORM
-        Data Allocation...........(*.SDA).......................@@SDA_FORM
-        CRC History...............(*.SCH).......................@@SCH_FORM
-Header Field Types..............................................@@HFIELD_T
-Data Field Types................................................@@DFIELD_T
-Messsage Attributes.............................................@@ATTRBITS
-Translation Types...............................................@@XLATTYPE
-Agent Types.....................................................@@AGENTTYP
-Network Types...................................................@@NETWORKS
-Media Types.....................................................@@MEDIATYP
-Message Storage Pseudo Code.....................................@@STORPCOD
-Message Retrieval Pseudo Code...................................@@READPCOD
-SMBUTIL.........................................................@@SMBUTIL_
-CHKSMB..........................................................@@CHKSMB__
-FIXSMB..........................................................@@FIXSMB__
-SMBLIB (C library)..............................................@@SMBLIB__
-		Data Types and Constants..(SMBDEFS.H)...................@@SMBDEFS_
-        Global Variables..........(SMBVARS.C)...................@@SMBVARS_
-        Function Prototypes.......(SMBLIB.H)....................@@SMBLIB.H
-        Library Functions.........(SMBLIB.C)....................@@SMBLIB.C
-		Miscellaneous.............(CRC*.* and LZH.*)............@@SMB_MISC
-SMBLIB Storage Example..........................................@@SMB_PUT_
-SMBLIB Retrieval Example........................................@@SMB_GET_
-SMBLIB Performance Issues.......................................@@PERFORM_
-Bibliography....................................................@@BIBLIOGR
-Implementations.................................................@@IMPLEMEN
-
-Introduction
-============
-&&Introduction
-$$INTRO___
-
-Q. What is SMB?
-
-A. SMB (Synchronet Message Base) is a technical specification for the storage
-   format of electronic mail messages. These e-mail messages may all be
-   contained in one database, or, more commonly, separated into catagorized
-   databases. These message databases (or message bases) are also referred to
-   as "sub-boards", "forums", "conferences", and "SIGs". The messages may be
-   directed to an individual person, sent to a group of individuals, or sent
-   to everyone who can read messages in that message base. Messages may be
-   created and read soley at one physical location, or imported from and
-   exported to a message network that may span continents. Message bases that
-   are connected to a message network are often called "echoes".
-
-
-Q. Why SMB?
-
-A. The Synchronet Message Base is designed to store high volumes of messages
-   while maintaining optimum search, retrieval, and creation performance.
-   These messages are not limited to mere text. In addition to text, SMB
-   defines the storage of digitized sound, MIDI, graphics, fonts, animation,
-   as well as other multimedia data and triggers for localized multimedia.
-   SMB thrives on a multi-user environment where messages are being created,
-   read, modified, and deleted by multiple tasks simultaneously. With the
-   large message networks of today being the rule, rather than the exception,
-   and high volumes of messages being imported on a daily, sometimes hourly
-   basis, creation and deletion speed is of the utmost importance. This is
-   where SMB really shines. Being extensible enough to handle message formats
-   from networks of today and tomorrow, and fast enough to import more messages
-   that humanly readable, the SMB format will more than meet your message
-   storage needs.
-
-
-Q. Why a specification?
-
-A. Message bases are often accessed and modified by a number of different
-   programs. Often these programs are developed by individuals or companies
-   other than the original designer of the message base format. This
-   specification is an attempt to aid developers in creating programs that
-   access or modify a message base stored in the SMB format.
-
-
-Q. Who can use this specification?
-
-A. Anyone that has interest in the Synchronet Message Base format at either
-   an educational or professional level. Specifically, software developers
-   interested or currently involved in the development of message readers,
-   editors, echomail (toss/scan) programs, message transfer agents (MTAs),
-   network gateways, and bulletin board systems. Much of the information in
-   this specification is intended for those with preexisting programming
-   knowledge, so those with little or no programming experience may find it
-   hard to comprehend.
-
-
-Q. What does the SMB specification include?
-
-A. The text you are reading is part of the SMB specification: a single text
-   document that defines the storage format of each of the six files of an
-   SMB format message base and how they are related to each other.
-
-   Included with this specification is C source code to be used as an example
-   to programmers of how to access an SMB format message base and public domain
-   library functions (SMBLIB) that can be compiled and linked into programs
-   that access an SMB format message base developed by third parties. An SMB
-   utility program (SMBUTIL) is also included with C source code as an example
-   of how to use the SMBLIB functions.
-
-
-Q. Where did the SMB specification come from?
-
-A. Digital Dynamics (southern California based software development company)
-   released "Synchronet Multinode BBS Software Version 1a" in June of 1992 as
-   one of the first BBS packages to be designed from the ground-up to operate
-   in a multinode environment with incredible speed and reliability, with a
-   large suite of multinode specific features and design innovations.
-
-   The original message base format was designed with localized messaging and
-   low volume message networks in mind. By January of 1993, it was clear that
-   high volume message networks (FidoNet, RelayNet, Usenet, etc.) were the
-   preference of most BBS users and a new message base format was required to
-   allow for high volume message storage, improved storage, retrieval, and
-   maintenance performance, as well as lower storage space requirements.
-
-   Rather than introduce another new message format, Digital Dynamics sought
-   to implement an existing public specification for a format that would meet
-   current and future message storage needs. More than a few specifications
-   were seriously considered at one time or another, but after careful
-   examination, design flaws and lack of extensibility eliminated them from the
-   long term plans of Digital Dynamics and Synchronet BBS Software. Thus began
-   the design of the "Synchronet Message Base" (SMB) format.
-
-   At the request of many message related program developers, Digital Dynamics
-   created and released the SMB specification before the release of "Synchronet
-   Version 2.00" to allow lead-time on developing support programs for the new
-   format.
-
-   Digital Dynamics strongly encourages developers of message related programs
-   (including software that directly competes with Synchronet or other Digital
-   Dynamics products) to implement support for SMB. Though this is a public
-   specification and Digital Dynamics encourages developer suggestions, it will
-   remain under the sole control of Digital Dynamics unless specifically stated
-   otherwise in a future revision of this specification.
-
-   Digital Dynamics requests that any organizations that wish to adopt or
-   ratify this specification, in part or whole, notify Digital Dynamics through
-   any of the contact methods listed at the beginning of this document.
-
-
-Q. How does SMB store messages?
-
-A. Each message base is stored in a set of binary files. This set consists
-   of between three and six files depending the storage method used. The base
-   filename (maximum of eight characters under DOS) is the same for all six
-   files of the same message base and unique amoung the filenames of other
-   message bases in the same directory. The six files each have a different
-   three character extension. The first character of the extension is always
-   the letter 'S' (for SMB), while the second and third characters define the
-   contents of the file.
-
-   Two of the six files associated with each message base are not recreatable
-   and therefore are the most important when considering data integrity. These
-   two files are the data file (with a .SDT extension) and header file (.SHD
-   extension). Both of these files use 256 byte blocks and have associated
-   block allocation tables (stored in .SDA and .SHA respectively) so that
-   deleted message blocks may be used by new messages without creating odd
-   sized unused 'holes' in the files. The block allocation table files (.SDA
-   and .SHA) can be recreated with the information stored in the header (.SHD)
-   file. When using Hyper Allocation storage method, the allocation files (.SDA
-   and .SHA) are not used.
-
-   For fast indexing, there is a small fixed length index file (with a .SID
-   extension). This file allows for the immediate location of message header
-   records based on sender's name or user number, recipient's name or user
-   number, subject, message number, or message attributes. This file can be
-   recreated with the data stored in the header (.SHD) file.
-
-   The last file is an optional CRC history (.SCH) file. It contains 32-bit
-   CRCs of a configurable number of messages imported or created locally. This
-   is to help eliminate duplicate messages created by user or program error.
-   The CRC history file can be recreated with the combination of information
-   stored in the data (.SDT) and header (.SHD) files.
-
-Q. How fast do messages import into an SMB message base?
-
-A. This is a very important question for systems for that import large volumes
-   of messages. Of course, the answer depends on the storage format which you
-   are importing from, the average length of messages, the design of the
-   program which is peforming the import process, as well as the hardware and
-   system software being used. What's important is that SMB will allow the
-   fastest import process possible with any given combination of the above
-   factors.
-
-   Since system storage capacity is rarely infinite, neither is the number
-   of messages which can be stored in a message base. System operators must
-   define the maximum number of messages to be stored in a message base, the
-   maximum age of the messages in that message base, or a combination of both.
-   When using the Self-packing storage method (defined later in this document),
-   the smaller the number of messages stored in a message base, the faster the
-   import process. The SMB format is flexible enough to support multiple levels
-   of import performance based on optimizations for storage space or speed.
-   Most system operators will almost invariably choose speed over space, but
-   which choices are available is determined by the importing program. This
-   specification defines three storage methods, from slowest to fastest:
-   Self-packing, Fast Allocation, and Hyper Allocation. Other options defined
-   in this specification may affect storage performance, including duplicate
-   message checking and message compression/encryption.
-
-
-Q. How much storage is required for an SMB message base?
-
-A. The biggest factor in determining storage requirements for a message base
-   is the maximum number of messages to be stored in the base (defined by the
-   system operator) and the average size of each message. The minimum required
-   storage for a message base is 32 bytes plus 532 bytes per message (plus four
-   bytes per message if duplicate message checking is used and three bytes
-   per message if Self-packing or Fast Allocation storage methods are used).
-
-   The SMB format was originally designed to be "self-packing", meaning purged
-   (deleted) message header and data blocks will be used automatically by new
-   messages. Relying solely on self-packing, an SMB format message base will
-   never "shrink" in size. This is not to say that it will continually "grow"
-   in size, but that without specific packing procedures, deleted message
-   blocks may remain unused for extended periods of time, meanwhile using some
-   amount of storage space that could be recovered using specific packing
-   procedures. The Fast Allocation and Hyper Allocation storage methods do not
-   use deleted message blocks for new messages so specific packing procedures
-   must be used if any messages are deleted and that storage space is to ever
-   be recovered.
-
-   Limiting the maximum age of messages in an SMB message base is another way
-   to control the storage requirements. While maximum message age definition is
-   optional, the definition of the maximum number of messages is not.
-
-Q. How many messages can be stored per SMB message base?
-
-A. Without considering storage limitations or message data lengths greater than
-   256, the theoretical maximum number of messages that can be stored in a
-   single SMB message base is 16.7 million. Considering the variable length
-   nature of message and header data, it is suggested that the system operator
-   allow no more than 1 million messages per base.
-
-   To determine an estimated maximum number of messages for a message base
-   using the average message data length as a factor, use the following
-   formula:
-
-   4.2 billion divided by the average message length rounded up to be evenly
-   divisible by 256.
-
-   If the average message data length is 1500 bytes, the estimated maximum
-   number of messages would be 2,734,375 (4.2 billion divided by 1536).
-
-   Implementations of this format may be further limited by available system
-   memory.
-
-Implementation Levels
-=====================
-&&Implementation Levels
-$$IMPLEVEL
-The SMB format can be implemented to varying degrees between programs without
-creating compatibilty issues. Rather than have developers specifically state
-which features they have and have not implemented, we have defined seven levels
-of implementation (represented by Roman numerals I through VII). For a program
-or software package to meet an implementation level, it must have all of the
-features listed for that level and all of those for each level below it. The
-minimum suggested imlementation is level I. The SMBUTIL program included with
-this specification is an example of a level I implementation with features
-from some of the higher implementation levels.
-
-Level I
--------
-The minimum suggested level of implementation. Messages contain merely ASCII
-text displayable on an ANSI terminal. Messages can be added to the message
-base and if the maximum number of messages is exceeded, messages are removed
-or marked for deletion.
-
-Level II
---------
-The addition of file attachments, multiple index/header entries per message
-(multiple destinations), multiple text bodies for the separation of message
-text and tag/origin lines (for example), forwarding, threading, and specific
-FidoNet kludge header field support makes this level of implementation more
-realistic for bulletin board system and EchoMail software implementation.
-
-Synchronet Multinode BBS Software v2.00 has a level II implementation of this
-specification.
-
-Level III
----------
-This implementation adds support for translation strings defined later in this
-document for data compression, encryption, escaping, and encoding. This level
-is still limited to basic ASCII text and ANSI escape sequence entry and
-retrieval.
-
-Synchronet Multinode BBS Software v2.10 has a level III implementation of this
-specification.
-
-Level IV
---------
-The storage and retrieval of embedded and attached images is added in this
-level of implementation. Supported images are limited to single binary or text
-data blocks that can be displayed or transferred to the user (automatically,
-or by request) if their display and translation protocols define specific
-support for the image type.
-
-Level V
--------
-This level of implementation adds support for embedded and attached sound data.
-This includes digitized sound and MIDI data. Supported sounds are limited to
-single binary or text data blocks that can be played or transferred to the user
-(automatically or by request) if their presentation and translation protocols
-define specific support for the sound type.
-
-Level VI
---------
-Localized sound and image data can be triggered by messages stored and
-retrieved in an implementation of this level.
-
-Level VII
----------
-Complete multimedia support is reached in this implementation level with
-support for embedded and attached animation, sound, and video data.
-
-
-Definitions
-===========
-&&Definitions
-$$DEFINES_
-
-Control Characters
-------------------
-When specifying control characters (ASCII 1 through 31), the caret symbol "^"
-or the abreviation "ctrl-" followed by a character will be used to indicate the
-value. ^A is equivalent to ASCII 1, ^B ASCII 2, etc. The case of the control
-character is not significant (i.e. ^z and ^Z are equivalent). The control
-character ^@ (ASCII 0) will be specified as NULL or 0.
-
-
-Hexadecimal
------------
-Base sixteen numbering system which includes the digits 0-9 and A-F.
-Hexadecimal numbers are represented in this document with a prefix of "0x" or
-"\x" or a suffix of "h". Hexadecimal letter digits are not case sensitive
-(i.e. the number 0xff is the same as 0xFF).
-
-
-File dump
----------
-When example file dumps are displayed, the format is similar to that of the
-output from the DOS DEBUG program. With the exception of the ASCII characters,
-all numbers are in hexadecimal.
-
-Offset    Byte values                                          ASCII characters
-
-000000	  53 4D 42 1A 10 01 20 00	F4 01 00 00 F4 01 00 00    SMB... .�...�...
-000010    20 00 00 00 D0 07 00 00   D0 07 00 00 00 00 00 00     ...�...�.......
-
-
-Bit values
-----------
-Bit (or flag) values are represented in C notation as (1<<x) where x is the bit
-number. (i.e. bit number 7 (1<<7) is the same as 0x80).
-
-
-Word storage
-------------
-All words (16-bit) and double words (32-bit) are stored in Intel 80x86 (little
-endian) format with bytes stored from low to high (reverse of the Motorola
-680x0 word storage format).
-
-A 16-bit word with the value 1234h is stored as 34h 12h.
-
-Translation strings
--------------------
-Translation strings (xlat variables) are arrays of words (16-bit) in the order
-of the original storage translation. The last translation type is followed by a
-16-bit zero (defined later as XLAT_NONE). If there are no translations, then
-the first and only element of the array is XLAT_NONE.
-
-If multiple translations are used, the translation order must be reversed
-upon retrieval to obtain the proper data.
-
-
-Local e-mail
-------------
-When referring to the local e-mail message base of a Synchronet BBS, we are
-referring specifically the message base with the name "MAIL" stored in the
-"DATA" directory (e.g. \SBBS\DATA\MAIL).
-
-Messages stored in this message base are different in the following respects:
-
-	The SMB_EMAIL status header attribute is set ON
-	Hyper Allocation storage method is not supported
-	The "To" and and "From" fields of the message indexes do NOT contain CRCs
-
-Acronyms:
-========
-&&Definition of Acronyms
-$$ACRONYMS
-
-ANSI            American National Standards Institute
-ASCII           American Standard Code for Information Interchange
-BBS             Bulletin Board System
-C               The C programming language as defined by ANSI X3.159-1989
-CR              Carriage Return character (ASCII 13)
-CRC             Cyclic Redundancy Check
-CRC-16			Standard 16-bit CRC using 1021h polynomial (seed 0)
-CRC-32			Standard 32-bit CRC using EDB88320h polynomial (seed -1)
-CRLF            Carriage Return character followed by a Line Feed character
-FSC             FidoNet Standards Commitee (FTS proposal)
-FTN             FidoNet Technology Network
-FTS             FidoNet Technical Standard
-LF              Line Feed character (ASCII 10)
-QWK 			Compressed message packet format for message reading/networking
-RFC             Request for Comments
-SMB             Synchronet Message Base
-UT              Universal Time (formerly called "Greenwhich Mean Time")
-
-Data types
-==========
-&&Definition of Data Types
-$$DATATYPE
-
-uchar           Unsigned 8-bit value (0 through 255).
-                C example:
-
-                #define uchar unsigned char
-
-
-short           Signed 16-bit value (-32768 through 32767).
-				"short" is a C keyword indicating "short int".
-
-
-ushort          Unsigned 16-bit value (0 through 65535).
-                C example:
-
-                #define ushort unsigned short
-
-
-ulong           Unsigned 32-bit value (0 through 4294967295).
-                C example:
-
-                #define ulong unsigned long
-
-
-time_t          Unsigned 32-bit value.
-                Seconds since 00:00 Jan 01 1970 (Unix format).
-                Used for all time/date storage in SMB as part of the when_t
-                data type. This time format will support dates through the year
-                2105.
-                time_t is defined by ANSI C as a long (signed) which can
-                limit its date support to the year 2038 depending on the
-                library routines used.
-
-
-ASCII           String (aka character array) of 8-bit ASCII characters.
-                Characters with the bit 7 set (80h through FFh) represent
-                the IBM PC extended ASCII character set. When data or header
-                fields of this type are stored in the header, a NULL
-                terminator may or may not be present.
-                C example:
-
-                uchar str[80];
-
-
-ASCIIZ          ASCII string with (non-optional) NULL terminator.
-                C example:
-
-                uchar str[81];
-
-nulstr          ASCII string immediately terminated by NULL.
-                C example:
-
-                uchar *nulstr="";
-
-
-undef           Data buffer with undefined contents.
-                C example:
-
-                uchar buf[BUF_LEN];
-
-when_t          Date/Time stamp including time-zone adjustment information.
-                C example:
-
-                typedef struct {
-
-                    time_t  time;   // Time stamp (in local time)
-                    short   zone;   // Zone constant or Minutes (+/-) from UT
-
-                    } when_t;
-
-                time:
-
-                A time value of 0 is invalid and indicates an uninitialized
-                time stamp.
-
-				Time stamps are always stored in universal time. i.e.
-				Regardless of what the local time zone is, Jan 1st 1994 00:00
-				will always be stored as 2D24BD00h.
-
-                zone:
-
-				If the zone is in the range -720 to +720, it represents the
-				number of minutes east or west of UT. Values in this range
-				should only be used for time zones not otherwise represented
-				here.
-
-                If the zone is greater than 720 or less than -720, then the
-                following bits have special meaning:
-
-                (1<<12)         // Non-US time zone     (east of UT)
-                (1<<13)         // Non-US time zone     (west of UT)
-                (1<<14)         // U.S. time zone
-                (1<<15)         // Daylight savings
-
-                The lower 12 bits (0 through 11) contain the number of minutes
-                east or west of UT (not accounting for daylight savings).
-
-                If the time zone is one specified in the U.S. Uniform Time Act,
-                the following values represent the zone:
-
-                AST 0x40F0      // Atlantic             (-04:00)
-                EST 0x412C      // Eastern              (-05:00)
-                CST 0x4168      // Central              (-06:00)
-                MST 0x41A4      // Mountain             (-07:00)
-                PST 0x41E0      // Pacific              (-08:00)
-                YST 0x421C      // Yukon                (-09:00)
-                HST 0x4258      // Hawaii/Alaska        (-10:00)
-                BST 0x4294      // Bering               (-11:00)
-
-                With bit 15 set, the following values represent the same zone
-                with the presence of daylight savings:
-
-                ADT 0xC0F0      // Atlantic             (-03:00)
-                EDT 0xC12C      // Eastern              (-04:00)
-                CDT 0xC168      // Central              (-05:00)
-                MDT 0xC1A4      // Mountain             (-06:00)
-                PDT 0xC1E0      // Pacific              (-07:00)
-                YDT 0xC21C      // Yukon                (-08:00)
-                HDT 0xC258      // Hawaii/Alaska        (-09:00)
-                BDT 0xC294      // Bering               (-10:00)
-
-                The following non-standard time zone specifications may also be
-                used:
-
-                MID 0x2294      // Midway               (-11:00)
-                VAN 0x21E0      // Vancouver            (-08:00)
-                EDM 0x21A4      // Edmonton             (-07:00)
-                WIN 0x2168      // Winnipeg             (-06:00)
-                BOG 0x212C      // Bogota               (-05:00)
-                CAR 0x20F0      // Caracas              (-04:00)
-                RIO 0x20B4      // Rio de Janeiro       (-03:00)
-                FER 0x2078      // Fernando de Noronha  (-02:00)
-                AZO 0x203C      // Azores               (-01:00)
-                LON 0x1000      // London               (+00:00)
-                BER 0x103C      // Berlin               (+01:00)
-                ATH 0x1078      // Athens               (+02:00)
-                MOS 0x10B4      // Moscow               (+03:00)
-                DUB 0x10F0      // Dubai                (+04:00)
-                KAB 0x110E      // Kabul                (+04:30)
-                KAR 0x112C      // Karachi              (+05:00)
-                BOM 0x114A      // Bombay               (+05:30)
-                KAT 0x1159      // Kathmandu            (+05:45)
-                DHA 0x1168      // Dhaka                (+06:00)
-                BAN 0x11A4      // Bangkok              (+07:00)
-                HON 0x11E0      // Hong Kong            (+08:00)
-                TOK 0x121C      // Tokyo                (+09:00)
-                SYD 0x1258      // Sydney               (+10:00)
-                NOU 0x1294      // Noumea               (+11:00)
-                WEL 0x12D0      // Wellington           (+12:00)
-
-fidoaddr_t      FidoNet address stored as four ushorts that represent the zone,
-                network, node, and point (in that order).
-                C example:
-
-                typedef struct {
-
-                    ushort zone,
-                           net,
-                           node,
-                           point;
-
-                    } fidoaddr_t;
-
-
-typestr_t       ASCIIZ string with ushort type prefix.
-                C example:
-
-                typedef struct {
-
-                    ushort  type;   // Specifier for type of 'str'
-                    uchar   str[];  // ASCIIZ filename or other string data
-
-                    } typestr_t;
-
-
-mattach_t       File attachment information with type prefix, translation
-                string, and filename.
-                C example:
-
-                typedef struct {
-
-                    ushort  type;   // Attachment type
-                    ushort  xlat[]; // Translations of data in attachment
-                    uchar   str[];  // ASCIIZ filename
-
-                    } mattach_t;
-
-vattach_t		Video file attachment information with type, compression,
-				translation string, and filename.
-                C example:
-
-                typedef struct {
-
-                    ushort  type;   // Attachment type
-					ushort	comp;	// Compression method
-                    ushort  xlat[]; // Translations of data in attachment
-                    uchar   str[];  // ASCIIZ filename
-
-					} vattach_t;
-
-mtext_t         Message text with translation string prefix.
-                C example:
-
-                typedef struct {
-
-                    ushort  xlat[]; // Translations of text
-                    uchar   text[]; // Actual text data
-
-					} mtext_t;
-
-
-ftext_t         Formatted message text with translation string prefix and
-                format type.
-                C example:
-
-                typedef struct {
-
-					ushort	type;	// See Image Types for valid types
-					ushort	xlat[]; // Translations of data
-					uchar	data[]; // Actual formatted text data
-
-					} ftext_t;
-
-
-membed_t        Embedded data with type prefix, translation string, and ASCIIZ
-                description.
-                C example:
-
-                typedef struct {
-
-                    ushort  type;   // Specifier for type of 'dat'
-                    ushort  xlat[]; // Translations of embedded data
-                    uchar   name[]; // ASCIIZ char description of embedded data
-					uchar	data[]; // Binary data
-
-                    } membed_t;
-
-vembed_t		Embedded video data with type, compression method, translation
-				string, and ASCIIZ description.
-                C example:
-
-                typedef struct {
-
-                    ushort  type;   // Specifier for type of 'dat'
-					ushort	comp;	// Compression method
-                    ushort  xlat[]; // Translations of embedded data
-                    uchar   name[]; // ASCIIZ char description of embedded data
-					uchar	data[]; // Binary data
-
-					} vembed_t;
-
-File formats
-============
-&&File Formats
-$$FILEFORM
-&&Index (*.SID) File Format
-$$SID_FORM
-
-Index File (*.SID)
-------------------
-The index file for each message base contains one record per message in the
-base. Each record is fixed length using the following format:
-
-Index Record:
-------------
-C example:
-
-typedef struct {
-
-	ushort	to; 	// 16-bit CRC of recipient name (lower case) or user number
-	ushort	from;	// 16-bit CRC of sender name (lower case) or user number
-	ushort	subj;	// 16-bit CRC of title/subject (lower case)
-	ushort	attr;	// attributes (MSG_PRIVATE, MSG_READ, etc. flags)
-	ulong	offset; // byte offset of message header in header file
-	ulong	number; // message serial number (1 based)
-	time_t	time;	// import date/time stamp (Unix format)
-
-    } idxrec_t;
-
-
-Example file dump (16 messages starting with message number 15):
----------------------------------------------------------------
-000000	  36 4F 13 07 2A 77 00 00	20 00 00 00 0F 00 00 00    6O..*w.. .......
-000010    BE 62 76 2C 36 4F 46 0A   7F B2 00 00 20 01 00 00    �bv,6OF.�.. ...
-000020    10 00 00 00 C7 29 78 2C   36 4F 70 6F 46 FF 00 00    ....�)x,6OpoF�..
-000030    20 02 00 00 11 00 00 00   AD D3 7A 2C 70 6F 13 07     .......��z,po..
-000040    46 FF 00 00 20 03 00 00   12 00 00 00 D6 F8 7F 2C    F�.. .......��,
-000050    36 4F E1 EA E7 E9 00 00   20 04 00 00 13 00 00 00    6O����.. .......
-000060    1E 7B 85 2C 37 0D 2E DF   4D 79 00 00 20 05 00 00    .{�,7..�My.. ...
-000070    14 00 00 00 5C E1 A1 2C   90 54 2D 5A 86 62 00 00    ....\�,�T-Z�b..
-000080    20 06 00 00 15 00 00 00   39 2E A2 2C 70 6F 1A 8B     .......9.�,po.�
-000090    46 FF 00 00 20 07 00 00   16 00 00 00 D0 7B A8 2C    F�.. .......�{�,
-0000A0    2E DF 1A 8B 4D 79 00 00   20 08 00 00 17 00 00 00    .�.�My.. .......
-0000B0    FF 7B A8 2C B4 D9 35 7C   23 B1 00 00 20 09 00 00    �{�,��5|#�.. ...
-0000C0    18 00 00 00 CE D4 BA 2C   36 4F BC D8 B2 E7 00 00    ....�Ժ,6O�ز�..
-0000D0    20 0A 00 00 19 00 00 00   14 5F C3 2C BA A8 4E B0     ........_�,��N�
-0000E0    67 76 00 00 20 0B 00 00   1A 00 00 00 6F 89 C3 2C    gv.. .......o��,
-0000F0    36 4F 0C 01 19 9C 00 00   20 0C 00 00 1B 00 00 00    6O...�.. .......
-000100    F8 30 C6 2C 36 4F FA 48   0E 55 00 00 20 0D 00 00    �0�,6O�H.U.. ...
-000110    1C 00 00 00 6A 94 D3 2C   36 4F F1 CE CF A2 00 00    ....j��,6O��Ϣ..
-000120    20 0E 00 00 1D 00 00 00   53 DB D5 2C 8D A6 21 CE     .......S��,��!�
-000130    F7 AB 00 00 20 0F 00 00   1E 00 00 00 31 29 DC 2C    ��.. .......1)�,
-
-
-Field descriptions:
-------------------
-To:
-The 'To' field is the CRC-16 of the name of the intended recipient agent of
-this message or the intended recipient's user number. If the CRC is stored, the
-text must be converted to lower case (A-Z changed to a-z) before the CRC is
-calculated. If the message is forwarded to another agent, the original or new
-index record must be changed to contain the CRC-16 of the new recipient name or
-user number. This field must always contain the recipient user number for local
-e-mail on a Synchronet BBS. Outbound netmail stored in the Synchronet local
-e-mail message base will contain 0 in this field.
-
-From:
-This field, similar to the 'To' field, contains the CRC-16 of the name of the
-sending agent of this message or the sender's user number. If the CRC is
-stored, the text must be converted to lower case (A-Z changed to a-z) before
-the CRC is calculated. If the message is forwarded to another agent, the
-original or new index record must be changed to contain the CRC-16 of the new
-sender name or user number. If the message was imported into the local e-mail
-message base on a Synchronet BBS via netmail, this field will contain 0.
-
-Subj:
-The 'Subj' field contains the CRC-16 of the message's subject. The subject
-must be converted to lower case (A-Z changed to a-z) and all preceeding
-"re: "'s and "re:"'s removed before calculating the CRC-16.
-
-Attr:
-This ushort is a bit field of the specific attributes for this message.
-It is a clone of the 'attr' element of the msghdr_t structure.
-
-Offset:
-This ulong is the offset (in bytes) in the header file for this message's
-header record.
-
-Number:
-This ulong is the serial number of this message. Valid values are 1 through
-0xffffffff. No two index records in the same message base may have the same
-message number. All index records must have sequential, but not necessarily
-consequetive, message numbers.
-
-Time:
-This field is the date/time stamp the message was imported to or posted in
-the message base. It is a clone of the 'when_imported.time' element of the
-msghdr_t structure.
-
-Header File (*.SHD)
-===================
-&&Header File (*.SHD) Format
-$$SHD_FORM
-
-Each SMB header file is made up of two distinct sections: base header records
-and message header records (usually the bulk of the file).
-
-Base Header Records:
--------------------
-Base header records are blocks of data that apply to the entire message base
-and are of variable length. This specification defines only one base header
-record, the "Status info" (smbstatus_t) record. This status info record must be
-the first base header record in the file and must be modified if additional
-base header records are added.
-
-Additional header records allow other developers to store configuration and
-status information particular to their application needs. It also allows for
-future header record definitions as part of this specification without causing
-backward compatibility issues.
-
-Each base header record contains a fixed length portion (smbhdr_t) and an
-optional variable length portion.
-
-Whenever a base header record is read or updated (written), it must first
-be successfully locked and subsequently unlocked.
-
-The first base header record (Status Info) is used as a semaphore when writing
-to the message index (.SID) file and, when using the Hyper Allocation storage
-method, writing to the message data (.SDT) file. This record must be
-succesfully locked before writing and subsequently unlocked. This is to insure
-that multiple applications simultaneously writing to the same message base
-does result in corrrupted data.
-
-
-Message Header Records:
-----------------------
-Following the last base header record is the first message header record. Each
-header record is stored in one or more 256 byte blocks. There must be exactly
-one active message header record for every index record in the index file.
-(Note: This does not include deleted message headers that have not been
-overwritten by a new message header).
-
-Each message header record contains a fixed length portion (msghdr_t), a list
-of zero or more fixed length data fields (dfield_t), and a list of three or
-more variable length header fields (hfield_t).
-
-The value of the data stored in the zero or more unused bytes of the last
-header record block have an undefined value, though whenever possible
-developers should initialize to binary zero for human readability.
-
-Whenever a message header record is read or updated (written), it must first
-be successfully locked and subsequently unlocked.
-
-Base Header Record (Fixed Portion):
-----------------------------------
-C example:
-
-typedef struct {
-
-    uchar   id[4];          // text or binary unique hdr ID
-    ushort  version;        // version number (initially 100h for 1.00)
-    ushort  length;         // length including this struct
-
-    } smbhdr_t;
-
-
-Base Header Record Field Descriptions:
--------------------------------------
-Id:
-This is a four byte unique ID identifying the type of the base header record.
-The bytes may contain any value, but printable ASCII characters are preferred.
-The only ID defined in this specification is "SMB^Z" used by the Status Info
-base header record.
-
-Version:
-This is a version number of the base header record type. Base header records
-of different versions may have different formats or contain different
-information. This is to aid the application in determining if the record
-is pertinent and if so, to what degree. The Status Info base header record
-uses this version field to define the version of the format for the entire
-message base (currently 0x121 for version 1.21).
-
-Length:
-This is entire length in bytes of this header record (including both fixed
-and variable portions).
-
-
-Base Header #1 (Status info) Record (Variable Portion):
-------------------------------------------------------
-C example:
-
-typedef struct {
-
-	ulong	last_msg;		// last message number posted or imported
-	ulong	total_msgs; 	// total messages currently in message base
-    ulong   header_offset;  // byte offset to first header record
-    ulong   max_crcs;       // Maximum number of CRCs to keep in history
-	ulong	max_msgs;		// Maximum number of messages to keep in base
-    ushort  max_age;        // Maximum age of messages (days) to keep in base
-	ushort	attr;			// Attribute bits
-
-    } smbstatus_t;
-
-Base Header #1 (Status Info) Record (Variable Portion) Field Descriptions:
--------------------------------------------------------------------------
-Last_msg:
-This is the serial number of the last message imported or posted into this
-message base. The index, header, and data records for this message may possibly
-not exist (due to deletion). This field is used for determining the message
-number to give to a new message being imported or posted into this message
-base. This field must be updated for every message added to the message base.
-
-Total_msgs:
-This is the total number of active messages currently in the message base.
-This number should match the number of records in the index (.SID) file
-and active header records in the header (.SHD) file. This field must be
-updated whenever a message is added to or removed from the message base.
-
-Header_offset:
-This is the byte offset to the first message header record. It is useful
-for skipping all the base header records and going directly to the first
-message header record.
-
-Max_crcs:
-This is the maximum number of message CRCs to store in the CRC history (.SCH)
-file for duplicate message checking. If this field contains 0, then duplicate
-message checking is disabled.
-
-Max_msgs:
-This is the preferred maximum number of messages to keep in this message
-base as specified by the system operator. It is used by maintenance programs
-that trim the message base down by removing old messages. This field should
-be ignored by applications importing or posting messages allowing them to
-exceed this maximum at will.
-
-Max_age:
-This field is the maximum age (in days) of messages to keep in the message
-base. It is used by maintenance programs to purge out-dated messages from
-the message base.
-
-Attr:
-This is a bit field containing specific attributes (or flags) that may define
-the way messages are stored or retrieved from the this message base. The
-following attributes are defined:
-
-	SMB_EMAIL		(1<<0)
-
-	Indicates the message base is specifically for messages to or from local
-	users. When this bit is set, the idxrec.to and idxrec.from fields will
-	contain the user numbers (or 0 for non-user destination/source) instead of
-	the CRC-16 of the agent name.
-
-	SMB_HYPERALLOC	(1<<1)
-
-	Indicates the message base uses the Hyper Allocation storage method. This
-	bit should not be cleared by an application without first deleting all the
-	messages in the message base. This is due to the fact the Hyper Allocation
-	is not downward compatible with the Self-packing and Fast Allocation
-	storage methods.
-
-When used with Synchronet BBS software, a message base must NOT have both of
-the above attributes set. The only message base that should have the SMB_EMAIL
-attribute set is the DATA\MAIL message base.
-
-
-Base Header #1 (Status info) Record Contents:
---------------------------------------------
-smbhdr.id="SMB\x1a";        // SMB^Z
-smbhdr.version=0x121;		// v1.21
-smbhdr.length=sizeof(smbhdr_t)+sizeof(smbstatus_t); smbstatus_t status;
-
-
-Additional Base Headers:
------------------------
-Additional headers from developers must have initial 8 bytes in smbhdr_t
-format, length must include size of smbhdr_t, and header_offset of smbstatus_t
-must be changed to include the size of the additional header(s).
-
-
-Example file dump (base header portion only):
---------------------------------------------
-000000	  53 4D 42 1A 20 01 20 00	F4 01 00 00 F4 01 00 00    SMB. . .�...�...
-000010    20 00 00 00 D0 07 00 00   D0 07 00 00 00 00 00 00     ...�...�.......
-
-
-Message Header Record (Fixed portion):
--------------------------------------
-C example:
-
-typedef struct {
-
-    uchar   id[4];          // SHD^Z (same for all types and versions)
-    ushort  type;           // Message type (this is the definition of type 0)
-    ushort  version;        // Version of type (initially 100h for 1.00)
-    ushort  length;         // Total length of fixed portion + all fields
-    ushort  attr;           // Attributes (bit field) (duplicated in SID)
-    ulong   auxattr;        // Auxillary attributes (bit field)
-    ulong   netattr;        // Network attributes (bit field)
-    when_t  when_written;   // Date/Time message was originally created
-    when_t  when_imported;  // Date/Time message was imported (locally)
-    ulong   number;         // Message number (unique, not necessarily seq.)
-    ulong   thread_orig;    // Original message number in thread
-    ulong   thread_next;    // Next message in thread
-    ulong   thread_first;   // Number of first reply to this message
-    uchar   reserved[16];   // 16 reserved bytes for future use
-    ulong   offset;         // Offset for buffer into data file (0 or mod 256)
-    ushort  total_dfields;  // Total number of data fields
-
-    } msghdr_t;
-
-typedef struct {
-
-    ushort  type;           // See "Data Field Types" values
-    ulong   offset;         // Offset into buffer 
-    ulong   length;         // Length of data field in buffer
-
-    } dfield_t;
-
-typedef struct {
-
-    ushort  type;           // See "Header Field Types" for values
-    ushort  length;         // Length of buffer
-    uchar   dat[length];
-
-    } hfield_t;
-
-Example file dump (one header record, both fixed and variable length portions):
-------------------------------------------------------------------------------
-000020	  53 48 44 1A 00 00 20 01	F5 00 00 00 00 00 00 00    SHD... .�.......
-000030    00 00 00 00 46 DB F7 2C   00 00 7D D7 29 2D 00 00    ....F��,..}�)-..
-000040    01 00 00 00 00 00 00 00   00 00 00 00 00 00 00 00    ................
-000050    00 00 00 00 00 00 00 00   00 00 00 00 00 00 00 00    ................
-000060    00 00 00 00 02 00 00 00   00 00 00 00 4A 01 00 00    ............J...
-000070    02 00 4A 01 00 00 53 00   00 00 00 00 13 00 4D 61    ..J...S.......Ma
-000080    72 69 61 6E 6E 65 20 4D   6F 6E 74 67 6F 6D 65 72    rianne Montgomer
-000090    79 30 00 0C 00 43 61 72   6F 6C 20 47 61 69 73 65    y0...Carol Gaise
-0000A0    72 60 00 07 00 46 61 72   6E 68 61 6D A4 00 14 00    r`...Farnham�...
-0000B0    31 3A 31 33 38 2F 31 30   32 2E 30 20 32 63 66 38    1:138/102.0 2cf8
-0000C0    30 35 37 36 A5 00 14 00   31 3A 33 34 33 2F 31 30    0576�...1:343/10
-0000D0    30 2E 30 20 32 63 66 33   62 39 30 61 A3 00 23 00    0.0 2cf3b90a�.#.
-0000E0    31 33 38 2F 31 30 32 20   31 20 32 37 30 2F 31 30    138/102 1 270/10
-0000F0    31 20 32 30 39 2F 32 30   39 20 31 30 33 2F 30 20    1 209/209 103/0 
-000100    33 35 35 02 00 02 00 02   00 03 00 08 00 01 00 8A    355............�
-000110    00 66 00 00 00 00 00 00   00 00 00 00 00 00 00 00    .f..............
-
-Contents of example header:
---------------------------
-id					 SHD^Z
-type				 0000h
-version 			 0120h
-length               245
-attr                 0000h
-auxattr              00000000h
-netattr              00000000h
-when_written         Sat Nov 27 17:57:10 1993
-when_imported        Tue Jan 04 15:54:21 1994
-number               1
-thread_orig          0
-thread_next          0
-thread_first         0
-reserved[16]         
-offset               0
-total_dfields        2
-
-dfield[0].type       00h
-dfield[0].offset     0
-dfield[0].length     330
-dfield[1].type		 02h
-dfield[1].offset     330
-dfield[1].length     83
-
-hfield[0].type       00h
-hfield[0].length     19
-hfield[0]_dat        Marianne Montgomery
-hfield[1].type		 30h
-hfield[1].length     12
-hfield[1]_dat        Carol Gaiser
-hfield[2].type		 60h
-hfield[2].length     7
-hfield[2]_dat        Farnham
-hfield[3].type		 A4h
-hfield[3].length     20
-hfield[3]_dat        1:138/102.0 2cf80576
-hfield[4].type		 A5h
-hfield[4].length     20
-hfield[4]_dat        1:343/100.0 2cf3b90a
-hfield[5].type		 A3h
-hfield[5].length     35
-hfield[5]_dat        138/102 1 270/101 209/209 103/0 355
-hfield[6].type		 02h
-hfield[6].length     2
-hfield[6]_dat		 02 00
-hfield[7].type		 03h
-hfield[7].length     8
-hfield[7]_dat        01 00 8A 00 66 00 00 00
-
-Fixed Portion Field descriptions:
---------------------------------
-Id:
-This field (regardless of the header type or version) must always contain the
-the string "SHD^Z". This is to aid in the restoration of a corrupted header
-file and give a visual indication of the beginning of a new header record when
-viewing dumps of the header file.
-
-Type:
-This is the message header type. Only one type is currently defined by this
-specification (type 0). Any and all future header types will have the first
-4 fields (10 bytes) in the same format of type 0. This allows other types
-(with different lengths) to be skipped because the 4th field (length) will
-always be in the same position.
-
-Version:
-This is the version of this header type. This specification defines version
-1.21 of message header type 0 (stored as 121h).
-
-Length:
-This is the total length of this message header record (including both fixed
-and variable length portions, but NOT including unused block space).
-
-Attr:
-This is a bit field (16-bit) containing basic message attributes (flags) for
-this message. An exact duplicate of this field is stored in the index file as
-well. They must always match.
-
-Auxattr:
-This is a bit field (32-bit) containing the auxillary attributes (flags) for
-this message. The attributes stored in this variable are more specific in
-nature and less critical than those in the Attr field.
-
-Netattr:
-This is a bit field (32-bit) containing the network attributes (flags) for this
-message. The attributes stored in this variable are related solely to message
-networking.
-
-When_written:
-This is the date and time when the message was originally created.
-
-When_imported:
-This is the date and time when the message was posted on or imported into the
-local message system.
-
-Number:
-This is the message's unique serial number (from 1 to FFFFFFFFh). This field
-is duplicated in the index file. They must always match.
-
-Thread_orig:
-If this message is a reply, then this field contains the number of the original
-message that was replied to. If this message was not a reply, this field will
-contain the value 0.
-
-Thread_next:
-If this message is a reply, and there are later replies to that message
-(the message number contained in the Thread_orig field), then this field will
-contain the number of the next reply in the chain. If this message is the only
-reply to the orignal message, this field will contain the value 0.
-
-Thread_first:
-If there are any replies to this message (after it has been posted), this field
-will contain the number of the first reply to this message. If there are no
-replies to this message, this field will contain the value 0.
-
-Reserved:
-Unused bytes, reserved for future definition in the message header type 0
-specification.
-
-Offset:
-The byte offset into the data file, specifying the start of the buffer for
-all data associated with this message. This value must be either 0 or modula
-256. When retrieving the actual data portion of data fields, the physical
-offset into the file will be the offset of the message data buffer (this field)
-plus the offset of the individual data field (msghdr_t.offset+dfield_t.offset).
-
-Total_dfields:
-This field contains the total number of data fields associated with this
-message. The value of this field must match the actual number of data fields
-stored in the header (dfield_t data types following the fixed portion of the
-message header).
-
-
-Variable Portion Field descriptions:
------------------------------------
-See the Header Field Type and Data Field Type sections for the descriptions
-of the values contained in these fields.
-
-Message Header Block Allocation (*.SHA)
-=======================================
-&&Header Allocation File (*.SHA) Format
-$$SHA_FORM
-
-If this message base uses the Hyper Allocation storage method (the
-SMB_HYPERALLOC bit is set in the smbstatus_t.attr field), then this file is
-not created or used.
-
-This file contains no header or signature data. Each byte (uchar) in the file
-specifies the allocation state of the corresponding 256 byte block in the
-header (*.SHD) file. A value of 0 indicates a free header block, and a value of
-1 indicates an allocated block. Other non-zero values are undefined.
-
-This file must always be opened DENY ALL (non-shareable).
-
-Message Data (*.SDT)
-====================
-&&Data File (*.SDT) Format
-$$SDT_FORM
-
-This file contains no header or signature data. It contains the text and other
-embedded data for the messages in a single message base. The data for each
-message always begins on a 256 byte block boundary. The data in the unused
-portion of a data block is undefined, but should be initialized to NULL
-whenever possible.
-
-This file must always be opened DENY NONE (shareable).
-
-Data fields of type TEXT_BODY and TEXT_TAIL must have all trailing white space
-and control characters removed (i.e. the last character of the data record
-must be in the range 21h to FFh). The only exception to this rule, is if the
-TEXT_BODY is terminated with multiple contiguous CRLFs, only the last CRLF
-should be removed. A CRLF should always be appended to the text data when it is
-displayed.
-
-When reading from this file, it is a good idea to make sure the message header
-for the data being read is currently locked (though no single message header
-should be locked for extended durations of time). This will insure that no
-other application will write to this portion of the file while it's being
-read (read from disk, not displayed).
-
-When using the Hyper Allocation storage method, the Status Info message base
-header must be successfully locked before writing to this file and subsequently
-unlocked.
-
-Message Data Block Allocation (*.SDA)
-=====================================
-&&Data Allocation File (*.SDA) Format
-$$SDA_FORM
-
-If this message base uses the Hyper Allocation storage method (the
-SMB_HYPERALLOC bit is set in the smbstatus_t.attr field), then this file is
-not created or used.
-
-This file contains no header or signature data. Each word (ushort) in the file
-specifies the allocation state of the corresponding 256 byte block in the data
-(*.SDT) file. A value of 0 indicates a free block, and a non-zero value
-indicates the number of message header records associated with this message
-data (most often 1). Each block can be used by up to 65,535 header records.
-
-This file must always be opened DENY ALL (non-shareable).
-
-CRC history for duplicate message checking (*.SCH)
-==================================================
-&&CRC History File (*.SCH) Format
-$$SCH_FORM
-
-This file is optional and contains no header or signature data. Each long word
-(ulong) in the file contains a CRC-32 of previously posted/imported messages.
-These CRCs can be used to check a candidate message for posting/import to be
-sure the message isn't a duplicate created by human or program error. The
-maximum number of CRCs to store is defined in the first message base header
-record (smbstatus_t.max_crcs).
-
-The CRC is calculated on the first TEXT_BODY data field before any translations
-are applied (e.g. encoding, compression, encryption).
-
-This file must always be opened DENY ALL (non-shareable).
-
-Header Field Types:
-==================
-&&Header Field Types
-$$HFIELD_T
-
-These are the defined valid values for hfield_t.type:
-
-Name     : SENDER
-Value    : 00h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : Yes
-Summary  : Name of agent that sent this message
-
-If blank (0 length or nulstr), assumed "Anonymous". If multiple SENDER fields
-exist, then the message has been forwarded and the order of the fields in the
-record must match the forwarding order (chronologically). When forwarding a
-message, the original SENDER field should be left intact and new SENDER,
-FORWARDED, and RECIPIENT fields added to the end of the record.
-
-Name     : SENDERAGENT
-Value    : 01h
-Data     : ushort
-Multiple : Yes, order significant
-Required : No
-Default  : AGENT_PERSON or previous SENDERAGENT if exists
-Summary  : Type of agent that sent this message
-
-If multiple SENDER fields exist, then the message has been forwarded. If any of the
-forwarding agents is of a type other than AGENT_PERSON, then this field must
-follow that SENDER field to specify the agent type.
-
-Name     : SENDERNETTYPE
-Value    : 02h
-Data     : ushort
-Multiple : Yes, order significant
-Required : No
-Default  : NET_NONE or previous SENDERNETTYPE if exists
-Summary  : Type of network message was sent from
-
-If multiple SENDERNETADDR fields are included, a SENDERNETTYPE field should be
-included before each to determine what data type the address is stored in.
-
-Name     : SENDERNETADDR
-Value    : 03h
-Data     : undef
-Multiple : Yes, order significant
-Required : No
-Default  : Previous SENDERNETADDR if exists
-Summary  : Network address for agent that sent this message
-
-The SENDERNETTYPE field indicates the data type of this field. If the
-SENDERNETTYPE is of type NET_INTERNET, the local-part of the Internet
-address is optional. If the local-part separator character ('@') is omitted,
-the SENDER field is assumed to be the local-part of the address.
-
-Name     : SENDEREXT
-Value    : 04h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : Previous SENDEREXT if exists
-Summary  : Extension of sending agent
-
-This field is useful for storing the sending agent's extension, when the
-agent's extension binds more tightly than the agent's name.
-
-For example, Synchronet Multinode BBS Software stores local e-mail with the
-sending and receiving agent's user numbers stored as their respective
-extensions. This is done so that if a user name changes for some reason,
-messages will not "disappear" from the user's mail box.
-
-If the SMB_EMAIL status header attribute is set, then the "From" field in the
-index must contain the binary value of this field rather than the CRC-16 of the
-SENDER (name) field.
-
-Name     : SENDERPOS
-Value    : 05h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : Previous SENDERPOS if exists
-Summary  : Position of sending agent
-
-Primarily for documentary purposes, this field contains the position of the
-sending agent (i.e. President, Sysop, C.E.O., MIS Director, etc).
-
-It can also be useful for getting a message or reply to the intended
-recipient when the agent name is not located or is unknown, but the position
-of the agent is known and specified.
-
-Name     : SENDERORG
-Value    : 06h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : Previous SENDERORG if exists
-Summary  : Organization name of sending agent
-
-Primarily for documentary purposes, this field contains the organization to
-which the sending agent belongs (i.e. Microsoft, Joe's BBS, SoCal User's Group,
-etc).
-
-Name     : AUTHOR
-Value    : 10h
-Data     : ASCII
-Multiple : Yes
-Required : No
-Default  : First SENDER
-Summary  : Name of agent that created this message
-
-This field can only be added by the process that originally creates the
-message. It should not be included if same as first SENDER field. If multiple
-AUTHOR fields exist, then the message was created by multiple agents and is
-considered valid. The order of multiple AUTHOR fields in the record is not
-significant.
-
-Name     : AUTHORAGENT
-Value    : 11h
-Data     : ushort
-Multiple : Yes, order significant
-Required : No
-Default  : SENDERAGENT or previous AUTHORAGENT if exists
-Summary  : Type of agent that created this message
-
-This field can only be added by the process that originally creates the
-message. It should not be included if same as first SENDERAGENT field. If
-multiple AUTHOR fields exist, then the message was created by multiple agents
-and if the agent type for any of the authors is other than AGENT_PERSON, an
-AUTHORAGENT field must follow to specify the agent type.
-
-Name     : AUTHORNETTYPE
-Value    : 12h
-Data     : ushort
-Multiple : Yes, order significant
-Required : No
-Default  : SENDERNETTYPE or previous AUTHORNETTYPE if exists
-Summary  : Type of network this author is member of
-
-Name     : AUTHORNETADDR
-Value    : 13h
-Data     : undef
-Multiple : Yes, order significant
-Required : No
-Default  : SENDERNETADDR or previous AUTHORNETADDR if exists
-Summary  : Network address of this author
-
-Name     : AUTHOREXT
-Value    : 14h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : SENDEREXT or previous AUTHOREXT if exists
-Summary  : Extension of this author
-
-Name     : AUTHORPOS
-Value    : 15h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : SENDERPOS or previous AUTHORPOS if exists
-Summary  : Position of this author
-
-Name     : AUTHORORG
-Value    : 16h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : SENDERORG or previous AUTHORORG if exists
-Summary  : Organization this author belongs to
-
-Name     : REPLYTO
-Value    : 20h
-Data     : ASCII
-Multiple : Yes, but only last is valid
-Required : No
-Default  : SENDER
-Summary  : Name of agent that replies should go to
-
-Name     : REPLYTOAGENT
-Value    : 21h
-Data     : ushort
-Multiple : Yes, but only last is valid
-Required : No
-Default  : SENDERAGENT
-Summary  : Type of agent that replies should go to
-
-Name     : REPLYTONETTYPE
-Value    : 22h
-Data     : ushort
-Multiple : Yes, but only last is valid
-Required : No
-Default  : SENDERNETTYPE
-Summary  : Type of network that replies should go to
-
-Name     : REPLYTONETADDR
-Value    : 23h
-Data     : undef
-Multiple : Yes, but only last is valid
-Required : No
-Default  : SENDERNETADDR
-Summary  : Network address that replies should go to
-
-Name     : REPLYTOEXT
-Value    : 24h
-Data     : ASCII
-Multiple : Yes, but only last is valid
-Required : No
-Default  : SENDEREXT
-Summary  : Extension of agent that replies should go to
-
-Name     : REPLYTOPOS
-Value    : 25h
-Data     : ASCII
-Multiple : Yes, but only last is valid
-Required : No
-Default  : SENDERPOS
-Summary  : Position of agent that replies should go to
-
-Name     : REPLYTOORG
-Value    : 26h
-Data     : ASCII
-Multiple : Yes, but only last is valid
-Required : No
-Default  : SENDERORG
-Summary  : Organization of agent that replies should go to
-
-Name     : RECIPIENT
-Value    : 30h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : Yes
-Default  : "All"
-Summary  : Name of agent to receive this message
-
-If multiple RECIPIENT fields exist, the message has been forwarded and for each
-additional RECIPIENT field (after the initial RECIPIENT), there should be a
-FORWARDED field. The order of the RECIPIENT fields in the record must match the
-order in which the message was sent and forwarded (chronologically).
-
-Name     : RECIPIENTAGENT
-Value    : 31h
-Data     : ushort
-Multiple : Yes, order significant
-Required : No
-Default  : AGENT_PERSON or previous RECIPIENTAGENT if exists
-Summary  : Type of agent to receive this message
-
-If multiple RECIPIENT fields exist, the message has been forwarded. If any of
-the recipient agents are of a type other than AGENT_PERSON, this field must
-follow the RECIPIENT field to specify the agent type.
-
-Name     : RECIPIENTNETTYPE
-Value    : 32h
-Data     : ushort
-Multiple : Yes, order significant
-Required : No
-Default  : NET_NONE or previous RECIPIENTNETTYPE if exists
-Summary  : Type of network to receive this message
-
-Name     : RECIPIENTNETADDR
-Value    : 33h
-Data     : undef
-Multiple : Yes, order significant
-Required : No
-Default  : Previous RECIPIENTNETADDR if exists
-Summary  : Address of network to receive this message
-
-Name     : RECIPIENTEXT
-Value    : 34h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : Previous RECIPIENTEXT if exists
-Summary  : Extension of agent to receive this message
-
-If SMB_EMAIL status header attribute is set, then the "To" field in the index
-must contain the binary value of this field rather than the CRC-16 of the
-RECIPIENT (name) field. This is the case specifically with the local e-mail
-message base on a Synchronet BBS.
-
-Name     : RECIPIENTPOS
-Value    : 35h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : Previous RECIPIENTPOS if exists
-Summary  : Position of agent to receive this message
-
-Name     : RECIPIENTORG
-Value    : 36h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : Previous RECIPIENTORG if exists
-Summary  : Type of agent to receive this message
-
-Name     : FORWARDTO
-Value    : 40h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Summary  : Name of agent this message is to be forwarded to
-
-Name     : FORWARDTOAGENT
-Value    : 41h
-Data     : ushort
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTAGENT or previous FORWARDTOAGENT if exists
-Summary  : Type of agent this message is to be forwarded to
-
-Name     : FORWARDTONETTYPE
-Value    : 42h
-Data     : ushort
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTNETTYPE or previous FORWARDTONETTYPE if exists
-Summary  : Type of network this message is to be forwarded to
-
-Name     : FORWARDTONETADDR
-Value    : 43h
-Data     : undef
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTNETADDR or previous FORWARDTONETADDR if exists
-Summary  : Network address this message is to be forwarded to
-
-Name     : FORWARDTOEXT
-Value    : 44h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTEXT or previous FORWARDTOEXT if exists
-Summary  : Extension of agent this message is to be forwarded to
-
-Name     : FORWARDTOPOS
-Value    : 45h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTPOS or previous FORWARDTOPOS if exists
-Summary  : Position of agent this message is to be forwarded to
-
-Name     : FORWARDTOORG
-Value    : 46h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTORG or previous FORWARDTOORG if exists
-Summary  : Organization of agent this message is to be forwarded to
-
-Name     : FORWARDED
-Value    : 48h
-Data     : when_t
-Multiple : Yes, order significant
-Required : Yes, if forwarded
-Summary  : Date/Time this message was forwarded to another agent
-
-Name     : RECEIVEDBY
-Value    : 50h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : Yes, if receiving agent is other than RECIPIENT
-Summary  : Name of agent that received this message
-
-Name     : RECEIVEDBYAGENT
-Value    : 51h
-Data     : ushort
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTAGENT or previous RECEIVEDBYAGENT if exists
-Summary  : Type of agent that received this message
-
-Name     : RECEIVEDBYNETTYPE
-Value    : 52h
-Data     : ushort
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTNETTYPE or previous RECEIVEDBYNETTYPE if exists
-Summary  : Type of network that received this message
-
-Name     : RECEIVEDBYNETADDR
-Value    : 53h
-Data     : undef
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTNETADDR or previous RECEIVEDBYNETADDR if exists
-Summary  : Network address that received this message
-
-Name     : RECEIVEDBYEXT
-Value    : 54h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTEXT or previous RECEIVEDBYEXT if exists
-Summary  : Extension of agent that received this message
-
-Name     : RECEIVEDBYPOS
-Value    : 55h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTPOS or previous RECEIVEDBYPOS if exists
-Summary  : Position of agent that received this message
-
-Name     : RECEIVEDBYORG
-Value    : 56h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Default  : RECIPIENTORG or previous RECEIVEDBYORG if exists
-Summary  : Organization of agent that received this message
-
-Name     : RECEIVED
-Value    : 58h
-Data     : when_t
-Multiple : Yes, order significant
-Required : Yes, if received
-Default  : NULL
-Summary  : Date/Time this message was received
-
-Name     : SUBJECT
-Value    : 60h
-Data     : ASCII
-Multiple : No
-Required : Yes, but may be blank (0 length or nulstr)
-Summary  : Subject/title of message
-
-Name     : SUMMARY
-Value    : 61h
-Data     : ASCII
-Multiple : No
-Required : No
-Summary  : Summary of message contents, created by AUTHOR
-
-Name     : COMMENT
-Value    : 62h
-Data     : ASCII
-Multiple : Yes
-Required : No
-Summary  : Comment about this message, created by SENDER
-
-This field is useful for adding notes to a message when forwarding to a new
-recipient.
-
-Name     : CARBONCOPY
-Value    : 63h
-Data     : ASCII
-Multiple : Yes
-Required : No
-Summary  : List of agents this message was also sent to
-
-This field is optional and only for the use of notifying the recipient of who
-else received the message.
-
-Name     : GROUP
-Value    : 64h
-Data     : ASCII
-Multiple : Yes
-Required : No
-Summary  : Name of group of users to receive message on recipient system
-
-This field is used when sending to a group name across a network, where the
-group can be expanded into multiple header records for each agent on the
-destination system.
-
-Name     : EXPIRATION
-Value    : 65h
-Data     : when_t
-Multiple : No
-Required : No
-Summary  : Date/Time that this message will expire
-
-Name     : PRIORITY
-Value    : 66h
-Data     : ulong
-Multiple : No
-Required : No
-Default  : 0
-Summary  : Message priority (0 is lowest, FFFFFFFFh is highest)
-
-Name     : FILEATTACH
-Value    : 70h
-Data     : ASCII
-Multiple : Yes
-Required : No
-Summary  : Name/file specification of attached file(s)
-
-Name of attached file(s). Wildcards allowed. MSG_FILEATTACH attribute must be
-set. If the MSG_FILEATTACH attribute is set but this field is not included,
-the SUBJECT field is assumed to be the filename(s).
-
-Name     : DESTFILE
-Value    : 71h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Summary  : Destination name for attached file(s)
-
-Wildcards allowed. FILEATTACH field must also be included.
-
-Name     : FILEATTACHLIST
-Value    : 72h
-Data     : ASCII
-Multiple : Yes
-Required : No
-Summary  : Name of ASCII list of attached filenames
-
-Wildcards not allowed in ASCII list filename. Wildcards allowed in ASCII list.
-MSG_FILEATTACH attribute must be set.
-
-Name     : DESTFILELIST
-Value    : 73h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Summary  : Name of ASCII list of destination filenames
-
-Wildcards not allowed in ASCII list filename. Wildcards allowed in ASCII list.
-
-Name     : FILEREQUEST
-Value    : 74h
-Data     : ASCII
-Multiple : Yes
-Required : No
-Summary  : Name of requested file
-
-Wildcards allowed. MSG_FILEREQUEST attribute must be set
-
-Name     : FILEPASSWORD
-Value    : 75h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Summary  : Password for FILEREQUEST
-
-Name     : FILEREQUESTLIST
-Value    : 76h
-Data     : ASCII
-Multiple : Yes
-Required : No
-Summary  : Name of ASCII list of filenames to request
-
-Wildcards allowed.
-
-Name     : FILEPASSWORDLIST
-Value    : 77h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Summary  : Name of ASCII list of passwords for FILEREQUESTLIST
-
-Name     : IMAGEATTACH
-Value    : 80h
-Data     : mattach_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of attached image file for display
-
-MSG_FILEATTACH attribute must be set. See Image Types for valid
-mattach_t.type values.
-
-Name     : ANIMATTACH
-Value    : 81h
-Data     : mattach_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of attached graphical animation file for display
-
-MSG_FILEATTACH attribute must be set. See Animation Types for valid
-mattach_t.type values.
-
-Name     : FONTATTACH
-Value    : 82h
-Data     : mattach_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of attached font definition file
-
-MSG_FILEATTACH attribute must be set. See Font Types for valid mattach_t.type
-values.
-
-Name     : SOUNDATTACH
-Value    : 83h
-Data     : mattach_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of attached sound file for playback
-
-MSG_FILEATTACH attribute must be set. See Sound Types for valid mattach_t.type
-values.
-
-Name     : PRESENTATTACH
-Value    : 84h
-Data     : mattach_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of attached presentation definition file
-
-MSG_FILEATTACH attribute must be set. See Present Types for valid
-mattach_t.type values.
-
-Name     : VIDEOATTACH
-Value    : 85h
-Data	 : vattach_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of attached interleaved video/sound file
-
-MSG_FILEATTACH attribute must be set. See Video Types for valid
-vattach_t.type values and Video Compression Types for valid vattach_t.comp
-values.
-
-Name     : APPDATAATTACH
-Value    : 86h
-Data     : mattach_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Name of attached application data file for process/display
-
-MSG_FILEATTACH attribute must be set. See Application Data Types for valid
-mattach_t.type values.
-
-Name     : IMAGETRIGGER
-Value    : 90h
-Data     : typestr_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of image file to trigger for display
-
-See Image Types for valid typestr_t.type values.
-
-Name     : ANIMTRIGGER
-Value    : 91h
-Data     : typestr_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of animation file to trigger for display
-
-See Animation Types for valid typestr_t.type values.
-
-Name     : FONTTRIGGER
-Value    : 92h
-Data     : typestr_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of font definition file to trigger
-
-See Font Types for valid typestr_t.type values.
-
-Name     : SOUNDTRIGGER
-Value    : 93h
-Data     : typestr_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of sound file to trigger for playback
-
-See Sound Types for valid typestr_t.type values.
-
-Name     : PRESENTTRIGGER
-Value    : 94h
-Data     : typestr_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of presentation definition file to trigger
-
-See Present Types for valid typestr_t.type values.
-
-Name     : VIDEOTRIGGER
-Value    : 95h
-Data     : typestr_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of interleaved video/sound file to trigger
-
-See Video Types for valid typestr_t.type values.
-
-Name     : APPDATATRIGGER
-Value    : 96h
-Data     : typestr_t
-Multiple : Yes, order significant
-Required : No
-Summary  : Type and filename of application data file to trigger
-
-See Application Data Types for valid typestr_t.type values.
-
-Name     : FIDOCTRL
-Value    : A0h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Format   : keyword ":" [" "] appdata
-Summary  : FTS/FSC-compliant control information line
-
-Any FidoNet FTS/FSC-compliant control information ("kludge") line that
-does not have an equivalent representation here. All data not unique to the
-actual control line, including leading and trailing white space, Ctrl-A (01h)
-character and terminating CR must be ommited. Defined in FTS-0001.
-
-Name     : FIDOAREA
-Value    : A1h
-Data     : ASCII
-Multiple : No
-Required : No
-Summary  : FTN EchoMail conference name.
-
-Defined in FTS-0004.
-
-Name     : FIDOSEENBY
-Value    : A2h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Format   : net"/"node [" "[net"/"]node] [...]
-Summary  : Used to store two-dimensional (net/node) SEEN-BY information
-
-Often used in FTN EchoMail environments. Only the actual SEEN-BY data is stored
-and SEEN-BY: is stripped along with any leading and trailing white space
-characters. Defined in FTS-0004.
-
-Name     : FIDOPATH
-Value    : A3h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Format   : net"/"node [" "[net"/"]node] [...]
-Summary  : Used to store two-dimensional (net/node)
-
-Defined in FTS-0004. ^aPATH: is stripped along with any leading and trailing
-white space characters.
-
-Name     : FIDOMSGID
-Value    : A4h
-Data     : ASCII
-Multiple : No
-Required : No
-Format   : origaddr " " serialno
-Summary  : MSGID field as specified in FTS-0009.
-
-Name     : FIDOREPLYID
-Value    : A5h
-Data     : ASCII
-Multiple : No
-Required : No
-Format   : origaddr " " serialno
-Summary  : REPLY field as specified in FTS-0009.
-
-Name     : FIDOPID
-Value    : A6h
-Data     : ASCII
-Multiple : No
-Required : No
-Format   : pID " " version [" "serialno]
-Summary  : Indentification string of program that created this message
-
-Defined FSC-0046. "^aPID:" and any white space is not included.
-
-Name     : FIDOFLAGS
-Value    : A7h
-Data     : ASCII
-Multiple : Yes
-Required : No
-Summary  : Used to store the FTN FLAGS kludge information
-
-Note that all FLAG options that have binary representation in the message
-header must be removed from the FLAGS string prior to storing it. Only the
-actual flags option string is stored and ^aFLAGS is stripped along with any
-leading and trailing white space characters. Defined in FSC-0053.
-
-Name     : RFC822HEADER
-Value    : B0h
-Data     : ASCII
-Multiple : Yes, order significant
-Required : No
-Format   : field-name ":" [field-body] [CRLF]
-Summary  : Undefined RFC-822 header field
-
-Internet Message storage format, that does not have an equivalent
-representation here. Folded header fields are allowed. Terminating CRLF may be
-ommited.
-
-Name     : RFC822MSGID
-Value    : B1h
-Data     : ASCII
-Multiple : No
-Required : No
-Format   : "<" addr-spec ">"
-Summary  : Message-ID field as specified in RFC-822.
-
-Name     : RFC822REPLYID
-Value    : B2h
-Data     : ASCII
-Multiple : No
-Required : No
-Format   : "<" addr-spec ">"
-Summary  : In-Reply-To field as specified in RFC-822.
-
-Name     : UNKNOWN
-Value    : F0h
-Data     : undef
-Multiple : Yes
-Required : No
-Summary  : Undefined header field of undefined type
-
-This field is useful for retaining binary header fields (that do not have an
-equivalent representation here) between message storage formats.
-
-Name     : UNKNOWNASCII
-Value    : F1h
-Data     : ASCII
-Multiple : Yes
-Required : No
-Summary  : Undefined header field of type ASCII
-
-This field is useful for retaining ASCII header fields (that do not have an
-equivalent representation here) between message storage formats.
-
-Name     : UNUSED
-Value    : FFh
-Data     : undef
-Multiple : Yes
-Required : No
-Summary  : Unused (deleted) header field
-
-The data contained in this header field is of an unknown type and should not be
-processed.
-
-
-Note:
-----
-Specifically, not defined are the values F000h through FFFFh. These values
-are to be used for user or system defined header fields. Digital Dynamics
-requests that any developers or organizations that wish to have additional
-header fields added to this specification notify Digital Dynamics through any
-of the contact methods listed at the beginning of this document.
-
-Data Field Types:
-================
-&&Data Field Types
-$$DFIELD_T
-
-These are the defined valid values for dfield_t.type:
-
-
-Val Name                Data        Description
---- ----                ----        -----------
-00h TEXT_BODY           mtext_t     Displayable text (body of message).
-                                    Included in duplicate message checking.
-									All terminating white space and control
-									characters are to be truncated from data
-									(except when multiple contiguous CRLFs
-									terminate the text, only the last CRLF
-									is removed).
-
-01h TEXT_SOUL           mtext_t     Non-displayed text.
-                                    Not normally displayed. Not necessarily
-                                    displayable.
-                                    Included in duplicate message checking.
-
-02h TEXT_TAIL			mtext_t 	Displayable text (tag/tear/origin lines,
-									etc).
-                                    Not included in duplicate message checking.
-									All terminating white space and control
-                                    characters are to be truncated from data.
-
-03h TEXT_WING           mtext_t     Non-displayed text.
-                                    Not normally displayed. Not necessarily
-                                    displayable.
-                                    Not included in duplicate message checking.
-
-10h FTEXT_BODY			ftext_t 	Formatted equivalent of TEXT_BODY to be
-									displayed in place of TEXT_BODY if format
-									is supported. See Image Types for valid
-									values of ftext_t.type.
-
-12h FTEXT_TAIL			ftext_t 	Formatted equivalent of TEXT_TAIL to be
-									displayed in place of TEXT_TAIL if format
-									is supported. See Image Types for valid
-									values of ftext_t.type.
-
-20h IMAGEEMBED          membed_t    Type and data of embedded raster image file
-                                    for display.
-									See Image Types for valid membed.type
-									values.
-
-21h ANIMEMBED			membed_t	Type and data of embedded graphical
-									animation file for display.
-									See Animation Types for valid membed.type
-                                    values.
-
-22h FONTEMBED			membed_t	Type and data of embedded font definition
-									file. See Font Types for valid
-									membed_t.type values.
-
-23h SOUNDEMBED          membed_t    Type and data of embedded sound file for
-                                    playback.
-									See Sound Types for valid membed_t.type
-									values.
-
-24h PRESENTEMBED        membed_t    Type and data of embedded presentation
-                                    definition file.
-                                    See Present Types for valid membed_t.type
-                                    values.
-
-25h VIDEOEMBED			vembed_t	Type and data of embedded video/sound file
-                                    for playback.
-									See Video Types for valid vembed_t.type
-                                    values.
-									See Video Compression Types for valid
-									vembed_t.comp values.
-
-26h APPDATAEMBED		membed_t	Type and data of embedded application data
-									file for process/display.
-                                    See Application Data Types for valid
-                                    membed_t.type values.
-
-FFh UNUSED              undef       Space allocated for future update/expansion
-
-
-Specifically, not defined are the values F000h through FFFFh. These values
-are to be used for user or system defined data fields. Digital Dynamics
-requests that any developers or organizations that wish to have additional
-data fields added to this specification notify Digital Dynamics through any
-of the contact methods listed at the beginning of this document.
-
-
-Message Attributes:
-------------------
-&&Message Attributes
-$$ATTRBITS
-
-These are the bit values for idxrec_t.attr and msghdr_t.attr:
-
-MSG_PRIVATE         (1<<0)  // Private
-MSG_READ            (1<<1)  // Read by addressee
-MSG_PERMANENT       (1<<2)  // Permanent
-MSG_LOCKED          (1<<3)  // Msg is locked, no editing possible
-MSG_DELETE          (1<<4)  // Msg is marked for deletion
-MSG_ANONYMOUS       (1<<5)  // Anonymous author
-MSG_KILLREAD        (1<<6)  // Delete message after it has been read
-MSG_MODERATED		(1<<7)	// This message must be validated before export
-MSG_VALIDATED       (1<<8)  // This message has been validated by a moderator
-
-
-Auxillary Attributes:
---------------------
-These are the bit values for msghdr_t.auxattr:
-
-MSG_FILEREQUEST     (1<<0)  // File request
-MSG_FILEATTACH      (1<<1)  // File(s) attached to Msg
-MSG_TRUNCFILE       (1<<2)  // Truncate file(s) when sent
-MSG_KILLFILE        (1<<3)  // Delete file(s) when sent
-MSG_RECEIPTREQ      (1<<4)  // Return receipt requested
-MSG_CONFIRMREQ      (1<<5)  // Confirmation receipt requested
-MSG_NODISP          (1<<6)  // Msg may not be displayed to user
-
-
-Network Attributes:
-------------------
-These are the bit values for msghdr_t.netattr:
-
-MSG_LOCAL           (1<<0)  // Msg created locally
-MSG_INTRANSIT       (1<<1)  // Msg is in-transit
-MSG_SENT            (1<<2)  // Sent to remote
-MSG_KILLSENT        (1<<3)  // Kill when sent
-MSG_ARCHIVESENT     (1<<4)  // Archive when sent
-MSG_HOLD            (1<<5)  // Hold for pick-up
-MSG_CRASH           (1<<6)  // Crash
-MSG_IMMEDIATE       (1<<7)  // Send Msg now, ignore restrictions
-MSG_DIRECT          (1<<8)  // Send directly to destination
-MSG_GATE            (1<<9)  // Send via gateway
-MSG_ORPHAN          (1<<10) // Unknown destination
-MSG_FPU             (1<<11) // Force pickup
-MSG_TYPELOCAL       (1<<12) // Msg is for local use only
-MSG_TYPEECHO        (1<<13) // Msg is for conference distribution
-MSG_TYPENET         (1<<14) // Msg is direct network mail
-
-Translation Types:
------------------
-&&Translation Types
-$$XLATTYPE
-
-Definition for values of *.xlat[x]:
-
-XLAT_NONE           0       // No translation/End of translation list
-XLAT_LF2CRLF        1       // Expand sole LF to CRLF
-XLAT_ESCAPED        2       // 7-bit ASCII escaping for ctrl and 8-bit data
-XLAT_HUFFMAN        3       // Static and adaptive Huffman coding compression
-XLAT_LZW			4		// LZW (Lempel-Ziv-Welch) encoding for compression
-							// Terry Welch, IEEE Computer Vol 17, No 6
-							// June 1984, pp 8-19
-XLAT_LZC			5		// LZC (modified LZW) encoding for compression
-							// Unix compress program
-XLAT_RLE            6       // Run length encoding compression
-XLAT_IMPLODE		7		// Implode compression (PKZIP v1.x)
-XLAT_SHRINK 		8		// Shrink compression (PKZIP v1.x)
-XLAT_LZH			9		// LZH dynamic Huffman coding
-							// Haruyasu Yoshizaki, LHarc
-							// November, 1988
-
-Agent Types:
------------
-&&Agent Types
-$$AGENTTYP
-
-AGENT_PERSON		0		// To or from person
-AGENT_PROCESS       1       // Unknown process, identified by agent name
-
-Agent types E000h through EFFFh are reserved for Synchronet process types
-(defined specifically by Digital Dynamics).
-
-Note:
-----
-Specifically not defined are agent types F000h through FFFFh. These values
-are to be used for user or system defined agent types. Digital Dynamics
-requests that any developers or organizations that wish to have additional
-agent types added to this specification notify Digital Dynamics through any
-of the contact methods listed at the beginning of this document.
-
-Network Types:
--------------
-&&Network Types
-$$NETWORKS
-
-							// Net Type 			Address Format
-							// -----------------------------------
-NET_NONE			0		// Locally created		none
-NET_UNKNOWN 		1		// Unknown				undef
-NET_FIDO			2		// FTN network			fidoaddr_t
-NET_POSTLINK		3		// PostLink network 	none
-NET_QWK 			4		// QWK based network	ASCII
-NET_INTERNET		5		// The Internet 		ASCII
-NET_WWIV			6		// WWIV based network	ulong
-NET_MHS 			7		// MHS network			ASCII
-
-
-Media Types:
-===========
-&&Media Types
-$$MEDIATYP
-
-Image Types:
------------
-
-IMAGE_UNKNOWN       0x00    // Use image signature header to determine format
-IMAGE_ASC           0x01    // ASCII text/IBM extended ASCII graphics
-IMAGE_ANS           0x02    // ANSI X3.64 terminal escape sequences
-IMAGE_AVT           0x03    // AVATAR terminal escape sequences
-IMAGE_LVI           0x04    // LVI terminal escape sequences
-IMAGE_GIF           0x05    // Compuserve Graphics Interchange Format (GIF)
-IMAGE_TIF           0x06    // Tagged Image Format (AKA TIFF)
-IMAGE_JPG           0x07    // Joint Photographers Electronics Group (JPEG)
-IMAGE_T16           0x08    // TrueVision 16-bit bitmap (TGA)
-IMAGE_T24           0x09    // TrueVision 24-bit bitmap (TGA)
-IMAGE_T32           0x0a    // TrueVision 32-bit bitmpa (TGA)
-IMAGE_PCX           0x0b    // ZSoft PaintBrush graphics
-IMAGE_BMP           0x0c    // Windows bitmap
-IMAGE_RLE           0x0d    // Windows bitmap (compressed)
-IMAGE_DIB           0x0e    // Display independant bitmap
-IMAGE_PCD           0x0f    // Kodak PhotoCD
-IMAGE_G3F           0x10    // Group 3 FAX
-IMAGE_EPS           0x11    // Ecapsulated PostScript
-IMAGE_RTF           0x12    // Rich text format
-IMAGE_RIP           0x13    // Remote Imaging Protocol Script (RIPscrip)
-IMAGE_NAP           0x14    // NAPLPS
-IMAGE_CDR           0x15    // Corel Draw!
-IMAGE_CGM           0x16    // Computer graphics metafile
-IMAGE_WMF           0x17    // Windows metafile
-IMAGE_DFX           0x18    // Autodesk AutoCAD
-IMAGE_IFF			0x19	// Amiga Interchange File Format
-IMAGE_HTM			0x20	// HyperText Markup Language (MTML) Document
-IMAGE_OS2			0x21	// OS/2 bitmap (BMP)
-
-Animation Types:
----------------
-
-ANIM_UNKNOWN        0       // Use file signature header to determine format
-ANIM_FLI            1       // Autodesk animator
-ANIM_FLC            2       // Autodesk
-ANIM_GL             3       // Grasprt
-ANIM_IFF			4		// Amiga Interchange File Format
-
-
-Video Types:
------------
-
-VIDEO_UNKNOWN       0       // Use file signature header to determine format
-VIDEO_QTIME         1       // Apple Quick-time
-VIDEO_FQTIME        2       // Apple Flattened Quick-time
-VIDEO_AVI           3       // Windows Auto/Video Interleave
-VIDEO_ULT           4       // OS/2 Ultimotion
-
-Video Compression Types:
------------------------
-
-VCOMP_UNKNOWN		0		// Use file signature header to determine codec
-VCOMP_RLE			1		// Apple animation
-VCOMP_SMC			2		// Apple graphics
-VCOMP_RPZA			3		// Apple video
-VCOMP_KLIC			4		// Captain crunch
-VCOMP_CVID			5		// CinePak
-VCOMP_RT21			6		// Intel indeo R2
-VCOMP_IV31			7		// Intel indeo R3
-VCOMP_YVU9			8		// Intel YVU9
-VCOMP_JPEG			9		// JPEG
-VCOMP_MRLE			10		// Microsoft RLE
-VCOMP_MSVC			11		// Microsoft video 1
-
-
-Font Types:
-----------
-
-FONT_UNKNOWN        0       // Use file signature header to determine format
-FONT_TTF            1       // Windows TrueType
-FONT_PFB            2       // PostScript Type 1 Font Binary
-FONT_PFM            3       // PostScript Type 1 Font Metric
-FONT_AMIGA			4		// Amiga Bitmapped
-FONT_AGFA			5		// CompuGraphic Fonts
-
-
-Sound Types:
------------
-
-SOUND_UNKNOWN       0       // Use file signature header to determine format
-SOUND_MOD           1       // MOD format
-SOUND_VOC           2       // Sound Blaster VOC format
-SOUND_WAV			3		// Windows 3.1 WAV RIFF format
-SOUND_MID           4       // MIDI format
-SOUND_GMID          5       // General MIDI format (standardized patches)
-SOUND_SMP			6		// Turtle Beach SampleVision format
-SOUND_SF			7		// IRCAM format
-SOUND_AU			8		// Sun Microsystems AU format
-SOUND_IFF			9		// Amiga Interchange File Format
-
-Application Data Types:
-----------------------
-
-APPDATA_UNKNOWN     0       // Use file signature header to determine format
-APPDATA_WORDPERFECT 1       // WordPerfect Document
-APPDATA_WKS         2       // Lotus 123 Worksheet (?)
-APPDATA_WK1         3       // Lotus 123 Worksheet rev 1
-APPDATA_WK2         4       // Lotus 123 Worksheet rev 2
-APPDATA_WK3         5       // Lotus 123 Worksheet rev 3
-APPDATA_DBF         6       // dBase III data file
-APPDATA_PDX         7       // Paradox data file
-APPDATA_EXCEL		8		// Excel data file
-APPDATA_QUATRO		9		// Borland Quatro Pro file
-APPDATA_WORD		10		// Microsoft Word
-
-Message Storage Pseudo Code
-===========================
-&&Message Storage Pseudo Code
-$$STORPCOD
-
-The following is a "C like" pseudo code listing example of adding a message to
-an SMB message base. SMBLIB contains C functions to do most of the following
-operations. We are supplying this pseudo code as a general definition of the
-order of required operations in writing to the message base. Many details have
-been left out to simplify the code and to demonstrate only the basic
-principles.
-
-shd = open ( MSGBASE.SHD , READ/WRITE/DENY_NONE )
-sdt = open ( MSGBASE.SDT , READ/WRITE/DENY_NONE )
-sid = open ( MSGBASE.SDT , READ/WRITE/DENY_NONE )
-
-lock ( shd , smbhdr )
-read ( shd , smbstatus )
-
-if ( smbstatus.attr & SMB_HYPERALLOC )
-	msg.hdr.offset = filelength ( sdt )
-
-else {
-	number_of_blocks = length_of_message_data / SDT_BLOCK_LEN
-	if ( length_of_message_data % SDT_BLOCK_LEN )	/* unevenly divisible */
-		number_of_blocks = number_of_blocks + 1
-
-	sda = open ( MSGBASE.SDA , READ/WRITE/DENY_ALL )
-
-	if ( fast_allocation_mode )
-		seek ( sda , END_OF_FILE )
-
-	else {
-		seek ( sda , BEGINNING_OF_FILE )
-		while ( not end_of_file ( sda ) ) {
-			read ( sda , allocated , number_of_blocks * 2 )
-			if ( allocated = 0 ) {
-				seek_backwards ( sda , number_of_blocks * 2 )
-				break
-			}
-		}
-	}
-
-	msg.hdr.offset = ( current_position ( sda ) / 2 ) * SDT_BLOCK_LEN
-
-	allocated = 1
-
-	write ( sda , allocated , number_of_blocks * 2 )
-
-	close ( sda )
-}
-
-seek ( sdt , msg.hdr.offset )
-
-write ( sdt , message_data )
-
-if ( smbstatus.attr & SMB_HYPERALLOC )
-	msg.idx.offset = filelength ( shd )
-
-else {
-	number_of_blocks = length_of_message_header / SHD_BLOCK_LEN
-	if ( length_of_message_header % SHD_BLOCK_LEN )   /* unevenly divisible */
-		number_of_blocks = number_of_blocks + 1
-
-	sha = open ( MSGBASE.SHA , READ/WRITE/DENY_ALL )
-
-	if ( fast_allocation_mode )
-		seek ( sha , END_OF_FILE )
-
-	else {
-		seek ( sha , BEGINNING_OF_FILE )
-		while ( not end_of_file ( sha ) ) {
-			read ( sha , allocated , number_of_blocks )
-			if ( allocated = 0 ) {
-				seek_backwards ( sha , number_of_blocks )
-				break
-			}
-		}
-	}
-
-	msg.idx.offset = ( current_position ( sha ) * SHD_BLOCK_LEN )
-	msg.idx.offset = msg.idx.offset + smbstatus.header_offset
-
-	allocated = 1
-
-	write ( sha , allocated , number_of_blocks )
-
-	close ( sha )
-}
-
-seek ( shd , msg.idx.offset )
-
-msg.hdr.number = smbstatus.last_msg+1
-
-write ( shd , msg.hdr )
-
-smbstatus.total_msgs = smbstatus.total_msgs + 1
-smbstatus.last_msg = msg.hdr.number
-
-write ( shd , smbstatus )
-
-write ( sid , msg.idx )
-
-unlock ( shd , smbstatus )
-
-Message Retrieval Pseudo Code
-=============================
-&&Message Retrieval Pseudo Code
-$$READPCOD
-
-shd = open ( MSGBASE.SHD , READ/WRITE/DENY_NONE )
-sdt = open ( MSGBASE.SDT , READ/WRITE/DENY_NONE )
-sid = open ( MSGBASE.SDT , READ/WRITE/DENY_NONE )
-
-read ( sid , msg.idx )
-
-seek ( shd , msg.idx.offset )
-
-lock ( shd , msg.hdr )
-
-read ( shd , msg.hdr )
-
-seek ( sdt , msg.hdr.offset )
-
-read ( sdt , msg.hdr.data_length )
-
-unlock ( shd , msg.hdr )
-
-SMBUTIL
-=======
-&&SMBUTIL
-$$SMBUTIL_
-
-SMBUTIL is a utility that can perform various functions on an SMB message base.
-The primary purpose of SMBUTIL is as an example to C programmers of how to use
-the SMBLIB functions to access and modify an SMB message base. The complete C
-source code for SMBUTIL is included and functions from it can be used or
-modified by developers at their own discretion. The following files make up
-SMBUTIL:
-
-SMBUTIL.EXE 	Compiled and linked for 16-bit DOS (ready to run)
-SMBUTIL.C		C functions
-SMBUTIL.H		C definitions and variable prototypes
-SMBUTIL.WAT 	Makefile for Watcom C/C++ (type wmake -f smbutil.wat)
-SMBUTIL.BOR 	Makefile for Borland C/C++ (type make -f smbutil.bor)
-
-The usage syntax is as follows:
-
-SMBUTIL [/opts] cmd smb_filespec.shd
-
-where cmd is one or more of the following:
-
-	   l[n] = list msgs starting at number n
-	   r[n] = read msgs starting at number n
-	   v[n] = view msg headers starting at number n
-	   k[n] = kill (delete) n msgs
-	   i<f> = import from text file f
-	   s	= display msg base status
-	   c	= change msg base status
-	   m	= maintain msg base - delete old msgs and msgs over max
-       p[k] = pack msg base (k specifies minimum packable Kbytes)
-
-where opts is one or more of the following:
-
-	   a	= always (force) packing
-	   z<n> = set time zone (n=min +/- from UT or 'EST','EDT','CST',etc)
-
-and smb_filespec is the base filename or file specification (wildcards) for the
-message base. If wildcards are used, the ".SHD" extension must be specified.
-
-An example command line:
-
-SMBUTIL MP C:\SBBS\DATA\SUBS\*.SHD
-
-would maintain and pack all the message bases found in the C:\SBBS\DATA\SUBS
-directory.
-
-CHKSMB
-======
-&&CHKSMB
-$$CHKSMB__
-
-CHKSMB is a utility that performs a comprehensive analysis of a message base
-to find any possible errors and calculate the number of packable bytes. It does
-not "fix" a message base if any errors are found, it only reports the specific
-errors (and exits with a non-zero error level). If any errors are reported,
-packing the message base with SMBUTIL may rebuild the damaged files. If that
-doesn't work, then use FIXSMB as a last resort.
-
-C source code for CHKSMB is also included as an example to programmers of how
-to use SMBLIB functions.
-
-The usage syntax is as follows:
-
-CHKSMB [/opts] smb_filespec.shd
-
-where opts is one or more of the following:
-
-		q	= quiet mode (no beeps)
-		s	= stop after an errored message base (for use with wildcards)
-		p	= pause after an errored message base (wait for key press)
-		t	= don't check for unsupported translation strings (faster)
-		e	= display extended information on corrupted messages
-
-An example command line:
-
-CHKSMB /QP C:\SBBS\DATA\SUBS\*.SHD
-
-would check all the message bases in the C:\SBBS\DATA\SUBS directory, without
-beeping on errors, and pausing after an errored message base.
-
-FIXSMB
-======
-&&FIXSMB
-$$FIXSMB__
-
-FIXSMB is a utility that will rebuild the index and allocation files for a
-message base. Since the message headers are not necessarily stored
-sequentially, the order of the messages in the index may be changed when the
-index is rebuilt. Messages are also re-numbered, so only use this program if
-the index is corrupted and the messages are extremely important.
-
-C source code for FIXSMB is also included as an example to programmers of how
-to use SMBLIB functions.
-
-The usage syntax is as follows:
-
-FIXSMB [/M] smb_file
-
-An example command line:
-
-FIXSMB \SBBS\DATA\MAIL
-
-Only use the "/M" command line switch if fixing an older Synchronet e-mail
-message base (created with SBBS v2.1 or earlier). Once the SMB_EMAIL status
-attr is set ("SMBUTIL S" will report a status attr of 1), the "/M" is not
-required.
-
-SMBLIB
-======
-&&SMBLIB
-$$SMBLIB__
-
-SMBLIB is a library of C functions for accessing and storing messages in an
-SMB format message base. It can eliminate much of the development time for
-developers that wish to use the library in whole or in part, or use the
-functions as examples for their own message base function library. The library
-consists of the following files:
-
-SMBDEFS.H		Constant definitions, macros, and data types
-SMBLIB.H		Library constants and function prototypes
-SMBLIB.C		Function definitions
-SMBVARS.C		Global variable definitions (doubles as declaration file)
-
-For developers to use this library with their program, they must include the
-"SMBLIB.H" header file at the top of each C file that uses any of the library
-functions, global variables, data types, macros, and constants. This can be
-done by simply adding the following line to each .C file:
-
-#include "smblib.h"
-
-If SMBLIB.H is included, there is no need to include SMBDEFS.H or SMBVARS.C.
-
-To link the library functions and variables with a main program, the files
-SMBVARS.OBJ and SMBLIB.OBJ must be linked with the main program .OBJ files.
-If the operating system is DOS, be sure that all .OBJ files are compiled for
-the same memory model.
-
-Example MAKEFILEs for compiling and linking SMBUTIL with Borland C/C++
-(SMBUTIL.BOR) and Watcom C/C++ (SMBUTIL.WAT) are included.
-
-SMBDEFS.H
-=========
-&&SMBDEFS.H
-$$SMBDEFS_
-
-The SMBDEFS.H file contains important constant definitions and data types (also
-defined in this document). If ever this document and SMBDEFS.H are inconsistent
-with each other, then SMBDEFS.H is to be considered correct and this document
-in error. If such a discrepency is found, please notifiy Digital Dynamics so it
-can be corrected in a future revision of the specification.
-
-Most notable of the data types is a structure called smbmsg_t (not defined
-in this document). It contains the fixed and variable portions of a message's
-header record as well as convenience pointers to the sender's name
-(smbmsg_t.to), recipient's name (smbmsg_t.from), network addresses, and more.
-If multiple SENDER header fields are included (for example), then smbmsg_t.to
-will point to the last SENDER header field in the header record. Convenience
-pointers for other data items work in the same fasion if multiple header fields
-of the same type exist in the header record.
-
-Variables of the smbmsg_t data type (and pointers to variables of smbmsg_t
-type) are used as arguments to many of the SMBLIB functions.
-
-SMBVARS.C
-=========
-&&SMBVARS.C
-$$SMBVARS_
-
-The SMBVARS.C file contains definitions of the global variables used by the
-SMBLIB functions. It is a fairly small file since there are a small number of
-global variables (by design). This file is used for both definitions and
-declarations, so no "extern" declarations need to be made in developers source
-code as long as SMBVARS.C or (preferably) SMBLIB.H is included in the source
-code.
-
-SMBLIB.H
-=======
-&&SMBLIB.H
-$$SMBLIB.H
-
-The SMBLIB.H file contains prototypes of all the functions in the SMBLIB.C
-file. It is necessary to include this file in C source code if any of the
-SMBLIB functions are used. The following C source line will include this file:
-
-#include "smblib.h"
-
-and should be placed near the top of all C source files that use SMBLIB
-functions, variables, constants, or data types.
-
-Function prototypes are necessary for compilers to know the correct calling
-syntax of a function and detect incorrect usage. Prototypes are also useful
-as a quick reference for programmers as to the correct calling syntax of a
-specific function.
-
-SMBLIB.C
-=======
-&&SMBLIB.C
-$$SMBLIB.C
-
-The SMBLIB.C file contains the actual SMBLIB library functions. This source
-file is not a stand alone program, but instead must be compiled and linked
-with a main source file to create the executable program.
-
-The functions in this file are organized in a logical order, but their order
-is actually irrelevant to the compiling, linking, and execution of the
-resulting program.
-
-A comment block preceeds each function, explaining what the function does,
-how the passed parameters are used, and what the return code (if any)
-indicates. A more detailed explanation of each function is included here:
-
-int smb_open(int retry_time)
-----------------------------
-The smb_open() function must be called before the message base is accessed
-(read from or written to). The parameter, retry_time, is the maximum number
-of seconds to wait while retrying to lock the message base header. If
-retry_time is 0, then the message base header is not locked or read (this is
-called "Fast Open" and should only be used when speed is more important than
-checking for compatibility and validity upon opening). The global variable
-smb_file must be initialized with the path and base filename of the message
-base. This function returns 0 on success, 1 if the .SDT file could not be
-opened, 2 if the .SHD file could not be opened, and 3 if the .SID file could
-not be opened. If the message base header could not be locked, this function
-returns -1. If the message base ID is incorrect, it returns -2. And if the
-message base is of an incompatible version, it returns -3.
-
-The errno global variable (standard of most C libraries) will most likely
-contain the error code for open failure.
-
-int smb_open_da(int retry_time)
--------------------------------
-The smb_open_da() function is used to open the data block allocation file for
-writing messages to a message base. The parameter, retry_time, is the maximum
-number of seconds to wait while retrying to open the file. This function
-returns 0 on success. -1 is returned if an open error other than "Access
-Denied" is returned from the operating system, and the global variable errno
-will contain the error code. -2 is returned if the retry_time has been
-reached, and -3 is returned if the file descriptor could not be converted to
-a stream by the fdopen() function.
-
-fclose(sda_fp) should be called immediately after all necessary file access
-has been completed.
-
-This function is not used with the Hyper Allocation storage method.
-
-int smb_open_ha(int retry_time)
--------------------------------
-The smb_open_ha() function is used to open the header block allocation file for
-writing messages to a message base. The parameter, retry_time, is the maximum
-number of seconds to wait while retrying to open the file. This function
-returns 0 on success. -1 is returned if an open error other than "Access
-Denied" is returned from the operating system, and the global variable errno
-will contain the error code. -2 is returned if the retry_time has been
-reached, and -3 is returned if the file descriptor could not be converted to
-a stream by the fdopen() function.
-
-fclose(sha_fp) should be called immediately after all necessary file access
-has been completed.
-
-This function is not used with the Hyper Allocation storage method.
-
-int smb_create(ulong max_crcs, ulong max_msgs, ushort max_age, ushort attr
-	,int retry_time)
---------------------------------------------------------------------------
-The smb_create() function is used to create a new message base or reset an
-existing message base. The parameters max_crcs, max_msgs, max_age, and attr
-are used to set the initial status of the message base status header. The
-parameter, retry_time is the maximum number of seconds to wait while retrying
-to lock the message base header. This functions returns 0 on success or 1 if
-the message base header could not be locked.
-
-int smb_trunchdr(int retry_time)
---------------------------------
-The smb_trunchdr() function is used to truncate the header file when packing
-the message base and writing the new header information back to the header
-file. The parameter, retry_time is the maximum number of seconds to wait while
-retrying to truncate the header file. Returns 0 on success, -1 if error was
-other than "Access Denied", or -2 if retry_time reached.
-
-int smb_locksmbhdr(int retry_time)
-----------------------------------
-The smb_locksmbhdr() function is used to lock the first message base (status)
-header. The parameter, retry_time is the number of seconds to wait while
-retrying to lock the header. The smb_unlocksmbhdr() function should always be
-used to unlock the header after accessing the message base header (usually
-with smb_getstatus() and/or smb_putstatus()). Returns 0 if successful, -1 if
-unsuccessful.
-
-int smb_unlocksmbhdr()
-----------------------
-The smb_unlocksmbhdr() function is used to unlock a previously locked message
-base header (using smb_lockmsghdr()). Returns 0 on success, non-zero on
-failure.
-
-int smb_getstatus(smbstatus_t *hdr)
------------------------------------
-The smb_getstatus() function is used to read the status message base header
-into the hdr structure. Returns 0 on success, 1 on failure.
-
-int smb_putstatus(smbstatus_t hdr)
-----------------------------------
-The smb_putstatus() function is used to write the status information to the
-first message base header. The parameter hdr, contains the status information
-to be written. Returns 0 on success, 1 on failure.
-
-int smb_getmsgidx(smbmsg_t *msg)
---------------------------------
-The smb_getmsgidx() function is used to get the byte offset for a specific
-message header in the message header file based on the message base index.
-
-If msg->hdr.number is non-zero when this function is called, then the index
-will be searched for this message number. If the message number is found in
-the index, the msg->idx.offset is set to the byte offset of the message header
-record in the header file and msg->offset is set to the record offset of the
-index record in the index file, and the function returns 0. If the message
-number is not found in the index, the function returns 1.
-
-If msg->hdr.number is zero, msg->idx.offset and msg->idx.number are obtained
-from the index record at record offset msg->offset. If msg->offset is an
-invalid record offset when this function is called, the function returns 1.
-Otherwise, the function returns 0.
-
-int smb_getlastidx(idxrec_t *idx)
----------------------------------
-Reads the last index record of the currently open message base into the
-idxrec_t structure pointed to by idx. Returns 0 if successful, -1 if the index
-is empty or unopened, or -2 if the record can't be read.
-
-int smb_getmsghdrlen(smbmsg_t msg)
-----------------------------------
-The smb_getmsghdrlen() function is used to calculate the total length of
-message header msg including both fixed and variable length portions. This
-function returns the length of the header record in bytes.
-
-long smb_getmsgdatlen(smbmsg_t msg)
------------------------------------
-The smb_getmsgdatlen() function is used to calculate the total length of the
-data for message msg. This function returns the length of all data fields
-combined.
-
-int smb_lockmsghdr(smbmsg_t msg, int retry_time)
-------------------------------------------------
-The smb_lockmsghdr() function is used to lock the header record for message
-msg. The parameter retry_time is the maximum number of seconds to wait while
-retrying to lock the header. Returns 0 on success, -1 on failure. The function
-smb_unlockmsghdr() should immediately be called after accessing the message
-header (usually with smb_getmsghdr() or smb_putmsghdr()).
-
-int smb_getmsghdr(smbmsg_t *msg)
---------------------------------
-The function smb_getmsghdr() is used to read the header record for message
-msg. msg->idx.offset must be initialized to the byte offset of the header
-record in the header file before this function is called. The function
-smb_freemsgmem() must be called to free the memory allocated by this function
-for the header and data felds. This function returns 0 on success, -1 if
-the fixed portion of the message header record could not be read, -2 if the
-message header ID was incorrect, -3 if memory could not be allocated, -4
-if a data field could not be read, -5 if the fixed length portion of a header
-field could not be read, -6 if the variable length portion of a header field
-could not be read, -7 if one or more of the mandatory header fields (SENDER,
-RECIPIENT, or SUBJECT) are missing, -8 if total_dfields extends beyond the
-end of the header record, or -9 if incompatible header version.
-
-Several convenience pointers in the msg structure are initialized by this
-function to point to the last occurance of the SENDER (msg->from), RECIPIENT
-(msg->to), SUBJECT (msg->subj), etc.
-
-int smb_unlockmsghdr(smbmsg_t msg)
-----------------------------------
-The smb_unlockmsghdr() function is used to unlock a previously locked message
-header (with smb_lockmsghdr()). This function returns 0 on success, non-zero
-on failure.
-
-int smb_addcrc(ulong max_crcs, ulong crc, int retry_time)
----------------------------------------------------------
-The smb_addcrc() function is used to add a CRC-32 to the CRC history file
-for a message base, automatically checking for duplicates. The parameter
-max_crcs should be the max_crcs defined in the status header of the message
-base. The parameter crc, is the CRC-32 of the TEXT_BODY and TEXT_SOUL data
-fields for the message. The parameter retry_time is the maximum number of
-seconds to wait when retrying to open the CRC history file.
-
-This function returns -1 if there was an open error, -2 if the retry_time
-was reached, -3 if there was a memory allocation error, 1 if the CRC already
-exists in the CRC history file (indicating a duplicate message), or 0 on
-success (and no duplicate).
-
-int smb_hfield(smbmsg_t *msg, ushort type, ushort length, void *data)
----------------------------------------------------------------------
-The smb_hfield() function is used to add a header field to the structure msg.
-The parameters type, length, and data, must be specified according to the
-header field values listed in this specification. This function returns 0
-on success, non-zero on memory allocation error. The function smb_freemsgmem()
-must be called to free the memory allocated by this function.
-
-int smb_dfield(smbmsg_t *msg, ushort type, ulong length)
---------------------------------------------------------
-The smb_dfield() function is used to add a data field to the structure msg.
-The parameters type and length must be specified according to the data field
-values listed in this specification. This function returns 0 on success,
-non-zero on memory allocation error. The function smb_freemsgmem() must be
-called to free the memory allocated by this function.
-
-int smb_addmsghdr(smbmsg_t *msg,smbstatus_t *status,int storage,int retry_time)
--------------------------------------------------------------------------------
-The smb_addmsghdr() function is used to add a new message header to the message
-header file and update the index file. The msg and status structures are
-updated to reflect the new total messages, last message number, etc. The
-storage parameter is used to indicate the storage method to use (either
-SMB_SELFPACK, SMB_FASTALLOC, or SMB_HYPERALLOC). If the storage type is
-SMB_SELFPACK, the header block allocation file will be searched for unused
-block(s) to store this header. If the storage type is SMB_FASTALLOC or
-SMB_HYPERALLOC, the header is stored at the end of the header file. Returns 0
-on success, non-zero on failure. The parameter retry_time is the maximum number
-of seconds to wait while retrying to lock and open files.
-
-int smb_putmsg(smbmsg_t msg)
-----------------------------
-The smb_putmsg() function calls both the smb_putmsghdr() and smb_putmsgidx()
-functions to write the header and index elements of a message to the
-appropriate files. Returns 0 on success, non-zero on failure.
-
-int smb_putmsgidx(smbmsg_t msg)
--------------------------------
-The smb_putmsgidx() function is used to store a message index in the message
-index file. The message index can be for a new message or an existing
-message. Returns 0 on success, non-zero on failure.
-
-int smb_putmsghdr(smbmsg_t msg)
--------------------------------
-The smb_putmsghdr() function is used to store a message header in the message
-header file. The message header can be for a new message or an existing
-message. Returns 0 on success, non-zero on failure.
-
-void smb_freemsgmem(smbmsg_t msg)
----------------------------------
-Frees allocated memory for the header and data fields in the msg structure.
-This function must be called to free the memory allocated by the functions
-smb_hfield(), smb_dfield(), and smb_getmsghdr().
-
-long smb_hdrblocks(ulong length)
---------------------------------
-The smb_hdrblocks() function is used to calculate the number of blocks
-required to store a message header of length size (in bytes). This function
-returns the number of blocks required.
-
-long smb_datblocks(ulong length)
---------------------------------
-The smb_datblocks() function is used to calculate the number of blocks
-required to store message data of length size (in byte). This function returns
-the number of blocks required.
-
-long smb_allochdr(ulong length)
--------------------------------
-The smb_allochdr() function is used to search for free blocks to store a
-message header of length bytes and mark the free blocks as allocated in the
-header allocation file. This function returns the byte offset to the header
-record or a negative number on error. The function smb_open_ha() should be
-called prior to calling this function and fclose(sha_fp) should be called
-after. The function is called from smb_addmsghdr(), so you probably have no
-need to call this function directly.
-
-long smb_fallochdr(ulong length)
---------------------------------
-The smb_fallochdr() function works exactly the same as the smb_allochdr()
-function except it is much faster because the header allocation file is not
-searched for free blocks. The function is called from smb_addmsghdr(), so you
-probably have no need to call this function directly.
-
-long smb_hallochdr(ulong header_offset)
----------------------------------------
-This smb_hallochdr() functions works exactly the same as the smb_fallochdr()
-function except the status.header_offset is passed as the argument and the
-header allocation (.SHA) file is not updated so smb_open_ha() need not be
-called. The function is called from smb_addmsghdr(), so you probably have no
-need to call this function directly.
-
-long smb_allocdat(ulong length, ushort headers)
------------------------------------------------
-The smb_allocdat() function is used to search for free blocks to store length
-amount of data for a message. The parameter headers, indicates the number of
-message headers that are associated with this data. Normally, the headers
-parameter will be 1, unless this message is part of a mass mailing. The offset
-to the allocated data blocks is returned, or a negative value on error. The
-function smb_open_da() should be called prior to calling this function and
-fclose(sda_fp) should be called after.
-
-long smb_fallocdat(ulong length, ushort headers)
-------------------------------------------------
-The smb_fallocdat() function works exactly the same as the smb_allocdat()
-function except it is much faster because the data allocation file is not
-searched for free blocks.
-
-long smb_hallocdat()
---------------------
-The smb_hallocdat() function works exactly the same as the smb_hallocdat()
-function except no argument is passed and the data allocation file (.SDA) is
-not updated so smb_open_da() need not be called.
-
-int smb_incdat(ulong offset, ulong length, ushort headers)
-----------------------------------------------------------
-The smb_incdat() function is used to increment the header counter in the data
-allocation file for the data starting at the byte offset and length size in
-bytes. The parameter headers, indicates the number of headers to add to the
-current allocation value in the data allocation file. Returns 0 on success,
-non-zero on failure.
-
-int smb_freemsg(smbmsg_t msg, smbstatus_t status)
--------------------------------------------------
-The smb_freemsg() function is used to free the disk space allocated for the
-header and data fields of the message msg. Returns 0 on success, non-zero on
-failure. The parameter, status, must be the current status from the message
-base header for this message base.
-
-int smb_freemsgdat(ulong offset, ulong length, ushort headers)
---------------------------------------------------------------
-The smb_freemsgdat() function is used to decrement the data block allocation
-records in the data allocation file associated with the data in the data file
-by the value of the headers parameter (normally 1). The parameter offset
-indicates the byte offset to the beginning of the message data in the data
-file and the parameter length is the total length of the message data.
-Returns 0 on success, non-zero on failure.
-
-int smb_freemsghdr(ulong offset, ulong length)
-----------------------------------------------
-The smb_freemsghdr() function is used to set the header block allocation
-records in the header allocation file to 0 (indicated non-allocated block).
-The parameter offset indicates the byte offset to the beginning of the header
-record being freed and the parameter length indicates the total length of the
-header record. Returns 0 on success, non-zero on failure.
-
-int smb_stack(int op)
----------------------
-The smb_stack() function is used to save and restore message base information
-so that multiple message bases can be open simultaneously. The stack can
-save up to 4 message bases (allowing 5 simultaneously open message bases).
-The stack is a "last in, first out" storage area for open message bases.
-If the op parameter is SMB_STACK_PUSH, smb_stack() will save (push) the current
-message base onto the stack. Calling smb_stack(SMB_STACK_POP) will restore
-(pop) the most recently pushed message base off the stack. Calling
-smb_stack(SMB_STACK_XCHNG) will exchange the most recently pushed message base
-and the current message base (replacing the top of the stack with the current
-message base).
-
-void smb_close()
-----------------
-Closes the header, data, and index files for the currently open message base.
-
-
-Miscellaneous SMBLIB Files
-==========================
-&&Miscellaneous SMBLIB Files
-$$SMB_MISC
-
-CRC32.H 		C header file for CRC-32 calculations
------------------------------------------------------
-This file contains a static 32-bit CRC table (crc32tbl[]) and a macro (ucrc32)
-that uses this table to calculate 32-bit CRCs one byte at a time.
-
-Example:
-
-	ulong crc=0xffffffff;
-
-for(i=0;i<length;i++)
-	crc=ucrc32(buf[i],crc);
-crc=~crc;
-
-
-CRC16.C 		C functions for 16-bit CRC calculations
--------------------------------------------------------
-This file contains a function (ucrc16), to calculate 16-bit CRCs one byte at a
-time and a function (crc16) that uses the ucrc16() function to calculate the
-16-bit CRC of an ASCIIZ character string.
-
-Example:
-
-	ushort crc;
-
-crc=crc16("Text");
-
-LZH.H			Function prototypes for LZH.C
----------------------------------------------
-This file contains function prototypes for the two most important functions
-in LZH.C, lzh_encode() and lzh_decode().
-
-Example:
-
-	uchar str[256],lzh[512];
-	long length;
-
-strcpy(str,"This is a string of text");
-length=lzh_encode(str,strlen(str),lzh);
-lzh_decode(lzh,length,str);
-
-
-LZH.C           C functions for LZH encoding (compression/decompression)
-------------------------------------------------------------------------
-This file contains the functions for encoding and decoding LZH compressed
-data. If the macro LZH_DYNAMIC_BUF is defined when this file is compiled,
-temporary buffers will be dynamically allocated as opposed to static. This
-may be slower than the static buffer method, but frees the allocated memory
-after encoding or decoding. If free memory for your application is an issue,
-then define this macro when compiling this file.
-
-Example (Borland C):
-
-bcc -c -DLZH_DYNAMIC_BUF lzh
-
-Example (Watcom C):
-
-wcc -dLZH_DYNAMIC_BUF lzh
-
-SMBLIB Storage Example
-======================
-&&SMBLIB Storage Example
-$$SMB_PUT_
-
-#include "smblib.h"
-#include "crc16.c"
-
-int main(void)
-{
-	char	str[256]						// General purpose string
-		   ,*msg_text="Hello, world!"       // Message text
-		   ,nul_buf[SDT_BLOCK_LEN]={0}		// NULL initialized buffer
-		   ;
-	int 	i								// General purpose integer
-		   ,storage=SMB_SELFPACK			// Default storage method
-		   ,retry=10						// Retry for opening/locking files
-		   ;
-	ushort	max_age=0						// Default maximum age of messages
-		   ,xlat=XLAT_NONE					// Translation string
-		   ,tzone=PST						// Time zone
-		   ,copies=1						// Number of copies of this msg
-		   ;
-	ulong	max_msgs=500					// Default max number of msgs
-		   ,max_crcs=0						// Default max crcs
-		   ,length							// Length of msg text
-		   ,offset							// Offset to msg text in data file
-		   ;
-	smbmsg_t	msg;						// Message structure
-	smbstatus_t status; 					// Message base status record
-
-strcpy(smb_file,"MSGBASE");                 // We'll use "MSGBASE" for the name
-if((i=smb_open(retry))!=0) {				// Can't open!?!
-	printf("smb_open returned %d\n",i);
-	return(1); }
-
-if(!filelength(fileno(shd_fp))) 			// Message base not created yet
-	smb_create(max_crcs 					// Create with default settings
-			  ,max_msgs
-			  ,max_age
-			  ,storage==SMB_HYPERALLOC
-					? SMB_HYPERALLOC : 0	// SMB_EMAIL if this was e-mail
-			  ,retry
-			  );
-
-if((i=smb_locksmbhdr(retry))!=0) {			// Can't lock status base header
-	printf("smb_locksmbhdr returned %d\n",i);
-	smb_close();
-	return(1); }
-
-if((i=smb_getstatus(&status))!=0) { 		// Can't read status base header
-	smb_unlocksmbhdr();
-	smb_close();
-	printf("smb_getstatus returned %d\n",i);
-	return(1); }
-
-if(status.attr&SMB_HYPERALLOC)
-	storage=SMB_HYPERALLOC;
-else
-	storage=SMB_SELFPACK;
-
-length=strlen(msg_text);					// Get length of message
-length+=sizeof(xlat);						// Add length of xlat string
-
-if(storage==SMB_HYPERALLOC) 				// Allocate space for message text
-	offset=smb_hallocdat();
-else {
-	if((i=smb_open_da(retry))!=0) {
-		smb_unlocksmbhdr();
-		printf("smb_open_da returned %d\n",i);
-		smb_close();
-		return(1); }
-	if(storage==SMB_FASTALLOC)
-		offset=smb_fallocdat(length,copies);
-	else
-		offset=smb_allocdat(length,copies);
-	fclose(sda_fp); }
-
-fseek(sdt_fp,offset,SEEK_SET);				// Seek to beginning of data block
-fwrite(&xlat,sizeof(xlat),1,sdt_fp);		// Write xlat string
-fwrite(msg_text,strlen(msg_text),1,sdt_fp); // Write message text
-fwrite(nul_buf,SDT_BLOCK_LEN-length 		// Write NULLs out to end of block
-	,1,sdt_fp);
-fflush(sdt_fp); 							// Flush output buffer
-smb_unlocksmbhdr(); 						// Unlock status base header
-
-memset(&msg,0,sizeof(smbmsg_t));			// Initialize header to NULL
-memcpy(msg.hdr.id,"SHD\x1a",4);             // Always set to SHD^Z
-msg.hdr.version=SMB_VERSION;
-msg.hdr.when_written.time=time(NULL);
-msg.hdr.when_written.zone=tzone;
-msg.hdr.when_imported.time=time(NULL);
-msg.hdr.when_imported.zone=tzone;
-msg.hdr.offset=offset;
-
-strcpy(str,"All");                          // Send message to "All"
-if((i=smb_hfield(&msg,RECIPIENT,strlen(str),str))!=0) {
-	printf("smb_hfield returned %d\n",i);
-	smb_freemsgdat(offset,length,copies);
-	smb_close();
-	return(1); }
-strlwr(str);								// If this were e-mail, idx.to
-msg.idx.to=crc16(str);						// would be the "to" user number
-
-strcpy(str,"Sysop");                        // Send message from "Sysop"
-if((i=smb_hfield(&msg,SENDER,strlen(str),str))!=0) {
-	printf("smb_hfield returned %d\n",i);
-	smb_freemsgdat(offset,length,copies);
-	smb_freemsgmem(msg);
-	smb_close();
-	return(1); }
-strlwr(str);								// If this were e-mail, idx.from
-msg.idx.from=crc16(str);					// would be the "from" user number
-
-strcpy(str,"This is a test");               // Set the message subject/title
-if((i=smb_hfield(&msg,SUBJECT,strlen(str),str))!=0) {
-	printf("smb_hfield returned %d\n",i);
-	smb_freemsgdat(offset,length,copies);
-	smb_freemsgmem(msg);
-	smb_close();
-	return(1); }
-strlwr(str);
-msg.idx.subj=crc16(str);
-
-if((i=smb_dfield(&msg,TEXT_BODY,length))!=0) {
-	printf("smb_dfield returned %d\n",i);
-	smb_freemsgdat(offset,length,copies);
-	smb_freemsgmem(msg);
-	smb_close();
-	return(1); }
-
-if((i=smb_addmsghdr(&msg,&status,storage,retry))!=0) {
-	printf("smb_addmsghdr returned %d\n",i);
-	smb_freemsgdat(offset,length,copies);
-	smb_freemsgmem(msg);
-	smb_close();
-	return(1); }
-
-smb_freemsgmem(msg);						// Unnecessary if exiting main()
-smb_close();								// Unnecessary if exiting main()
-return(0);
-}
-
-SMBLIB Retrieval Example
-========================
-&&SMBLIB Retrieval Example
-$$SMB_GET_
-
-#include "smblib.h"
-
-int main(void)
-{
-	char		ch; 						// General purpose character
-	int 		i,							// General purpose integer
-				retry=10;					// Retry for opening/locking files
-	ushort		xlat;						// Translation string
-	ulong		l;							// General purpose long integer
-    smbmsg_t    msg;                        // Message structure
-
-strcpy(smb_file,"MSGBASE");                 // We'll use "MSGBASE" for the name
-if((i=smb_open(retry))!=0) {				// Can't open!?!
-	printf("smb_open returned %d\n",i);
-	return(1); }
-
-if(!filelength(fileno(shd_fp))) {			// Message base not created yet
-	printf("Empty\n");
-	smb_close();
-	return(0); }
-
-for(msg.offset=0;!ferror(sid_fp);msg.offset++) {
-
-	fseek(sid_fp,msg.offset*sizeof(idxrec_t),SEEK_SET);
-	if(!fread(&msg.idx,1,sizeof(idxrec_t),sid_fp))
-		break;
-
-	if((i=smb_lockmsghdr(msg,retry))!=0) {
-		printf("smb_lockmsghdr returned %d\n",i);
-		break; }
-	if((i=smb_getmsghdr(&msg))!=0) {
-		smb_unlockmsghdr(msg);
-		printf("smb_getmsghdr returned %d\n",i);
-		break; }
-	if((i=smb_unlockmsghdr(msg))!=0) {
-        smb_freemsgmem(msg);
-        printf("smb_unlockmsghdr returned %d\n",i);
-        break; }
-
-	printf("Subj : %s\n",msg.subj);
-	printf("To   : %s\n",msg.to);
-	printf("From : %s\n",msg.from);
-	printf("Date : %s\n",ctime((time_t *)&msg.hdr.when_written.time));
-
-	for(i=0;i<msg.hdr.total_dfields;i++)
-		switch(msg.dfield[i].type) {
-			case TEXT_BODY: 			// Only show BODY and TAIL data fields
-			case TEXT_TAIL:
-				fseek(sdt_fp,msg.hdr.offset+msg.dfield[i].offset
-					,SEEK_SET);
-				fread(&xlat,sizeof(xlat),1,sdt_fp);
-				if(xlat!=XLAT_NONE) 	// No translations supported
-					continue;
-				for(l=sizeof(xlat);l<msg.dfield[i].length;l++) {
-					ch=fgetc(sdt_fp);
-					if(ch)
-						putchar(ch); }
-				printf("\n");
-				break; }
-	printf("\n");
-
-	smb_freemsgmem(msg); }			// Free memory allocated by smb_getmsghdr()
-
-smb_close();
-return(0);
-}
-
-SMBLIB Performance Issues
-=========================
-&&SMBLIB Performance Issues
-$$PERFORM_
-
-Since importing messages is the usually the most time consuming task likely
-undertaken by an SMB application, it is also the most susceptable to design
-issues that effect performance.
-
-Opening and Closing
--------------------
-When importing multiple messages for a single message base, it appears logical
-to open the message base, import all the messages, then close it. This indeed
-is preferred over opening and closing the message base for each message.
-
-When importing multiple messages for possibly non-consecutive message bases,
-developers may easily make the mistake of opening and closing the message base
-for each message. This is not necessary and can considerably hinder the
-import performance. The easiest solution is to only close the message base and
-open a new one if the next message to be imported is not for the same message
-base as the previously imported message. Example:
-
-smb_file[0]=0;
-for(i=0;i<total_messages_to_be_imported;i++) {
-	if(stricmp(get_messagebase_for_this_message(i),smb_file)) {
-		if(smb_file[0]) 	/* We've already opened one */
-			smb_close();
-		strcpy(smb_file,get_messagebase_for_this_message(i));
-		smb_open(10); }
-	/* Import this message */
-	}
-if(smb_file[0])
-	smb_close();
-
-A more advanced method is to keep multiple message bases open at the same time.
-Due to the likely limitation of total file handles on the system, it is
-suggested to keep the number of simultaneously open message bases at or below
-3. SMBLIB includes the function smb_stack() to easily "push" and "pop" message
-bases without closing them (push is the equivalent to "save" and pop is the
-equivalent to "restore"). The downside of this function is that you cannot
-access message bases on the stack without actually popping them off (in reverse
-of the order they were pushed). You can however "exchange" the current message
-base with the message base on the top of the stack (most recently pushed).
-To intelligently juggle more than two open message bases, the developer should
-create their own equivalent of the smb_stack() function so they can access the
-message bases on the stack without popping them off. An example of keeping a
-maximum of two message bases open using smb_stack():
-
-	char last_messagebase[128],new_messagebase[128];
-
-smb_file[0]=0;
-last_messagebase[0]=0;
-for(i=0;i<total_messages_to_be_imported;i++) {
-	strcpy(new_messagebase,get_messagebase_for_this_message(i));
-	if(stricmp(new_messagebase,smb_file)) { 	/* Not current message base */
-		if(smb_file[0]) {						/* We've already opened one */
-			if(!stricmp(new_messagebase,last_messagebase)) { /* Same as last */
-				strcpy(last_messagebase,smb_file);
-				smb_stack(SMB_STACK_XCHNG); }		/* Retore previous base */
-			else {
-				if(last_messagebase[0]) {
-					smb_stack(SMB_STACK_XCHNG);
-					smb_close();
-					strcpy(last_messagebase,new_messagebase); }
-				else {
-					strcpy(last_messagebase,smb_file);
-					smb_stack(SMB_STACK_PUSH); }	/* Save current base */
-				strcpy(smb_file,new_messagebase);
-				smb_open(10); } }
-		else {
-			strcpy(smb_file,new_messagebase);
-			smb_open(10); } }
-	/* Import this message */
-	}
-if(smb_file[0])
-    smb_close();
-if(last_messagebase[0]) {
-	smb_stack(SMB_STACK_POP);
-	smb_close(); }
-
-The second example would be of negligible performance gain over the first
-example (6 open operations versus 7) if the messages to import were in the
-following order:
-
-msg[0] --> msgbase[0]		// 0 opened
-msg[1] --> msgbase[1]		// 0 pushed 1 opened
-msg[2] --> msgbase[1]
-msg[3] --> msgbase[2]		// 1 closed 0 popped 0 closed 2 opened
-msg[4] --> msgbase[0]		// 2 pushed 0 opened
-msg[5] --> msgbase[2]		// 0 pushed 2 popped (exchanged)
-msg[6] --> msgbase[3]		// 2 closed 0 popped 0 closed 3 opened
-msg[7] --> msgbase[0]		// 3 pushed 0 opened
-
-The second example would be of significant performance gain over the first
-example (4 open operations versus 8) if the messages to import were in the
-following order:
-
-msg[0] --> msgbase[0]		// 0 opened
-msg[1] --> msgbase[1]		// 0 pushed 1 opened
-msg[2] --> msgbase[0]		// 1 pushed 0 popped (exchanged)
-msg[3] --> msgbase[1]		// 0 pushed 1 popped (exchanged)
-msg[4] --> msgbase[0]		// 1 pushed 0 popped (exchanged)
-msg[5] --> msgbase[2]		// 0 pushed 1 popped (exchanged) 1 closed 2 opened
-msg[6] --> msgbase[3]		// 2 pushed 0 popped (exchanged) 0 closed 3 opened
-msg[7] --> msgbase[2]		// 3 pushed 2 popped (exchanged)
-
-More advanced use of "stack-like" message base file handle storage can easily
-reduce the number of open operations, therefore increasing import performance
-under more adverse message base ordering conditions.
-
-Compression
------------
-If any message data compression features are offered by the application, it
-is important the the application not unnecessarily compress data that will
-not save any storage space. While this may seem an obvious statement, please
-review the following pseudo-code example:
-
-if ( message_data_length < SDT_BLOCK_LEN )
-	// Store uncompressed data
-else {
-	// Compress data
-	if ( ( compressed_data_length / SDT_BLOCK_LEN )
-		< ( message_data_length / SDT_BLOCK_LEN ) ) // Saves a block or more
-		// Store compressed data
-	else
-		// Store uncompressed data
-	}
-
-Since the SMB format stores message data in fixed length blocks, there is no
-point in storing a message in compressed format if it requires the same number
-of blocks as the uncompressed format (i.e. a message that is two blocks in
-length in uncompressed format and only a block and a half in length when
-compressed should not be stored in compressed format since it still requires
-two full blocks of storage). It is important to note that in the above example,
-the length of the data translation string was not taken into account in
-determining the number of required blocks. Also, the smb_datblocks() function
-is normally used in determing the number of required blocks to store a given
-data length and it is a little more involved than simply dividing the length of
-the data by SDT_BLOCK_LEN.
-
-
-Bibliography
-============
-&&Bibliography
-$$BIBLIOGR
-
-Title	  : The C Programming Language
-Publisher : Prentice Hall
-Author	  : Brian W. Kernighan and Dennis M. Ritchie
-
-Document  : ARPANET Request for Comments (RFC) #822
-Title	  : Standard for the Format of ARPA Internet text messages
-Publisher : SRI International
-Author	  : David H. Crocker, University of Delaware
-
-Document  : FTS-0001
-Publisher : FSC
-Author	  : Randy Bush, Pacific Systems Group
-
-Document  : FTS-0004
-Title	  : EchoMail Specification
-Publisher : FSC
-Author	  : Bob Hartman
-
-Document  : FTS-0009
-Title	  : A standard for unique message identifiers and reply chain linkage
-Publisher : FSC
-Author	  : Jim Nutt
-
-Document  : FSC-00046
-Title	  : A Product Idenfifier for FidoNet Message Handlers
-Publisher : FSC
-Author	  : Joaquim H. Homrighausen
-
-Document  : FSC-00053
-Title	  : Specifications for the ^aFLAGS field
-Publisher : FSC
-Author	  : Joaquim H. Homrighausen
-
-
-Implementations
-===============
-&&Implementations
-$$IMPLEMEN
-
-Product   : Synchronet Multinode BBS Software
-Developer : Digital Dynamics
-Level	  : III
-Version   : 2.20
-
-Product   : Synchronet/FidoNet Import/Export Utility (SBBSFIDO)
-Developer : Digital Dynamics
-Level	  : III
-Version   : 2.23
-
-Product   : Synchronet UTI (Universal Text Interface) Driver
-Developer : Digital Dynamics
-Level	  : III
-Version   : 2.23
-
-Product   : SBBSecho FidoNet Packet Tosser for Synchronet
-Developer : Digital Dynamics
-Level	  : III
-Version   : 1.11
-
-Product   : NetXpress Internet UUCP for Synchronet
-Developer : Merlin Systems
-Level	  : II
-Version   : 1.50
-
-Product   : InterEcho FidoNet Packet Tosser
-Developer : InterMail Sales Inc
-Level	  : II
-Version   : 1.11
diff --git a/src/sbbs2/smb/docs/smb_read.me b/src/sbbs2/smb/docs/smb_read.me
deleted file mode 100644
index 9cccaf613b..0000000000
--- a/src/sbbs2/smb/docs/smb_read.me
+++ /dev/null
@@ -1,64 +0,0 @@
-Synchronet Message Base (SMB) Specification v2.01 - READ.ME -
-=============================================================
-
-Files:
-
-        Miscellaneous
-        -------------
-        SMB_READ.ME     This file
-        FILE_ID.DIZ     Description of archive
-        SMB.HST         History of changes made since v1.00
-
-	Technical Specification
-        -----------------------
-        SMB.PRN         Paginated, to be printed at 12cpi (!)
-        SMB.TXT         Not paginated, for online viewing
-
-        Message Base C Library
-        ----------------------
-        SMBDEFS.H       C data types and constants
-        SMBLIB.H        C function prototypes
-        SMBLIB.C        C library functions
-	CRC32.H 	C header file for 32-bit CRC calculations
-        CRC16.C         C source file for 16-bit CRC calculations
-        LZH.H           C header file for LZH compression functions
-        LZH.C           C source file for LZH compression functions
-
-        Message Base Utility
-        --------------------
-        SMBUTIL.H       C header file
-        SMBUTIL.C       C source file
-        SMBUTIL.BOR     C makefile (for Borland C: make -f smbutil.bor)
-	SMBUTIL.WAT     C makefile (for Watcom C: wmake -f smbutil.wat
-                                      32-bit OS2: wmake -f smbutil.wat OS=OS2
-				      32-bit DOS: wmake -f smbutil.wat OS=DOSX)
-        SMBUTIL.EXE     Compiled and linked for 16-bit DOS
-
-        Check Message Base for Corruption
-        ---------------------------------
-        CHKSMB.C        C source file
-        CHKSMB.MAK      C makefile (for Borland C: make -f chksmb)
-        CHKSMB.EXE      Compiled and linked for 16-bit DOS
-
-	Rebuild Message Base Index and Allocation Files
-	-----------------------------------------------
-	FIXSMB.C	C source file
-	FIXSMB.MAK	C makefile (for Borland C: make -f fixsmb)
-	FIXSMB.EXE	Compiled and linked for 16-bit DOS
-
-        Convert from FidoNet (FTSC-1) to SMB
-        ------------------------------------
-        FIDO2SMB.C      C source file
-        FIDO2SMB.MAK    C makefile (for Borland C: make -f fido2smb)
-
-        Convert from Internet (RFC-822) to SMB
-        --------------------------------------
-        INET2SMB.C      C source file
-        INET2SMB.MAK    C makefile (for Borland C: make -f inet2smb)
-
-        Convert from QWK to SMB
-        -----------------------
-        QWK2SMB.C       C source file
-        QWK2SMB.MAK     C makefile (for Borland C: make -f qwk2smb)
-
-/* END of SMB_READ.ME */
diff --git a/src/sbbs2/smb/fixsmb/fixsmb.c b/src/sbbs2/smb/fixsmb/fixsmb.c
deleted file mode 100644
index 4a6973822b..0000000000
--- a/src/sbbs2/smb/fixsmb/fixsmb.c
+++ /dev/null
@@ -1,226 +0,0 @@
-/* FIXSMB.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* Re-generates an SMB message base based on SHD and SDT files */
-
-#include "smblib.h"
-
-smb_t smb;
-
-char *usage="usage: fixsmb [/opts] <smb_file>\n"
-			"\n"
-			" opts:\n"
-			"       m - force mail format instead of sub-board format\n"
-			"\n"
-			"   ex: FIXSMB /M MAIL\n"
-			"   or: FIXSMB DEBATE\n";
-
-void remove_re(char *str)
-{
-while(!strnicmp(str,"RE:",3)) {
-	strcpy(str,str+3);
-	while(str[0]==SP)
-		strcpy(str,str+1); }
-}
-
-/****************************************************************************/
-/* Updates 16-bit "rcrc" with character 'ch'                                */
-/****************************************************************************/
-void ucrc16(uchar ch, ushort *rcrc) {
-	ushort i, cy;
-    uchar nch=ch;
- 
-for (i=0; i<8; i++) {
-    cy=*rcrc & 0x8000;
-    *rcrc<<=1;
-    if (nch & 0x80) *rcrc |= 1;
-    nch<<=1;
-    if (cy) *rcrc ^= 0x1021; }
-}
-
-/****************************************************************************/
-/* Returns 16-crc of string (not counting terminating NULL) 				*/
-/****************************************************************************/
-ushort crc16(char *str)
-{
-	int 	i=0;
-	ushort	crc=0;
-
-ucrc16(0,&crc);
-while(str[i])
-	ucrc16(str[i++],&crc);
-ucrc16(0,&crc);
-ucrc16(0,&crc);
-return(crc);
-}
-
-#define MAIL (1<<0)
-
-int main(int argc, char **argv)
-{
-	char		str[128],c;
-	int 		i,w,mode=0;
-	ulong		l,length,size,n,m;
-	smbmsg_t	msg;
-	smbstatus_t status;
-
-printf("\nFIXSMB v1.22 � Rebuild Synchronet Message Base � Developed 1995-1997 "
-	"Rob Swindell\n");
-
-smb.file[0]=0;
-for(i=1;i<argc;i++)
-	if(argv[i][0]=='/')
-		switch(toupper(argv[i][1])) {
-			case 'M':
-				mode|=MAIL;
-				break;
-			default:
-				printf(usage);
-				exit(1); }
-	else
-		strcpy(smb.file,argv[i]);
-
-if(!smb.file[0]) {
-	printf(usage);
-	exit(1); }
-
-strupr(smb.file);
-smb.retry_time=30;
-
-if((i=smb_open(&smb))!=0) {
-	printf("smb_open returned %d\n",i);
-	exit(1); }
-
-if((i=smb_locksmbhdr(&smb))!=0) {
-	smb_close(&smb);
-	printf("smb_locksmbhdr returned %d\n",i);
-	exit(1); }
-
-if((i=smb_getstatus(&smb))!=0) {
-	smb_unlocksmbhdr(&smb);
-	smb_close(&smb);
-	printf("smb_getstatus returned %d\n",i);
-	exit(1); }
-
-if(mode&MAIL && !(status.attr&SMB_EMAIL)) {
-	status.attr|=SMB_EMAIL;
-	if((i=smb_putstatus(&smb))!=0) {
-		smb_unlocksmbhdr(&smb);
-		smb_close(&smb);
-		printf("smb_putstatus returned %d\n",i);
-		exit(1); } }
-
-if(!(status.attr&SMB_HYPERALLOC)) {
-
-	if((i=smb_open_ha(&smb))!=0) {
-		smb_close(&smb);
-		printf("smb_open_ha returned %d\n",i);
-		exit(1); }
-
-	if((i=smb_open_da(&smb))!=0) {
-		smb_close(&smb);
-		printf("smb_open_da returned %d\n",i);
-		exit(1); }
-
-	rewind(smb.sha_fp);
-	chsize(fileno(smb.sha_fp),0L);		/* Truncate the header allocation file */
-	rewind(smb.sda_fp);
-	chsize(fileno(smb.sda_fp),0L);		/* Truncate the data allocation file */
-	}
-
-rewind(smb.sid_fp);
-chsize(fileno(smb.sid_fp),0L);			/* Truncate the index */
-
-
-if(!(status.attr&SMB_HYPERALLOC)) {
-	length=filelength(fileno(smb.sdt_fp));
-	w=0;
-	for(l=0;l<length;l+=SDT_BLOCK_LEN)	/* Init .SDA file to NULL */
-		fwrite(&w,2,1,smb.sda_fp);
-
-	length=filelength(fileno(smb.shd_fp));
-	c=0;
-	for(l=0;l<length;l+=SHD_BLOCK_LEN)	/* Init .SHD file to NULL */
-		fwrite(&c,1,1,smb.sha_fp); }
-else
-	length=filelength(fileno(smb.shd_fp));
-
-n=1;	/* messsage number */
-for(l=status.header_offset;l<length;l+=size) {
-	printf("\r%2u%%  ",(long)(100.0/((float)length/l)));
-	msg.idx.offset=l;
-	if((i=smb_lockmsghdr(&smb,&msg))!=0) {
-		printf("\n(%06lX) smb_lockmsghdr returned %d\n",l,i);
-		continue; }
-	if((i=smb_getmsghdr(&smb,&msg))!=0) {
-		smb_unlockmsghdr(&smb,&msg);
-		printf("\n(%06lX) smb_getmsghdr returned %d\n",l,i);
-		size=SHD_BLOCK_LEN;
-		continue; }
-	smb_unlockmsghdr(&smb,&msg);
-	printf("#%-5lu (%06lX) %-25.25s ",msg.hdr.number,l,msg.from);
-	if(!(msg.hdr.attr&MSG_DELETE)) {   /* Don't index deleted messages */
-		msg.offset=n-1;
-		msg.hdr.number=n;
-		msg.idx.number=n;
-		msg.idx.attr=msg.hdr.attr;
-		msg.idx.time=msg.hdr.when_imported.time;
-		strcpy(str,msg.subj);
-		strlwr(str);
-		remove_re(str);
-		msg.idx.subj=crc16(str);
-		if(status.attr&SMB_EMAIL) {
-			if(msg.to_ext)
-				msg.idx.to=atoi(msg.to_ext);
-			else
-				msg.idx.to=0;
-			if(msg.from_ext)
-				msg.idx.from=atoi(msg.from_ext);
-			else
-				msg.idx.from=0; }
-		else {
-			strcpy(str,msg.to);
-			strlwr(str);
-			msg.idx.to=crc16(str);
-			strcpy(str,msg.from);
-			strlwr(str);
-			msg.idx.from=crc16(str); }
-		if((i=smb_putmsg(&smb,&msg))!=0) {
-			printf("\nsmb_putmsg returned %d\n",i);
-			continue; }
-		n++; }
-	else
-		printf("Not indexing deleted message\n");
-	size=smb_getmsghdrlen(&msg);
-	while(size%SHD_BLOCK_LEN)
-		size++;
-
-	if(!(status.attr&SMB_HYPERALLOC)) {
-		/**************************/
-		/* Allocate header blocks */
-		/**************************/
-		fseek(smb.sha_fp,(l-status.header_offset)/SHD_BLOCK_LEN,SEEK_SET);
-		if(msg.hdr.attr&MSG_DELETE) c=0;		/* mark as free */
-		else c=1;								/* or allocated */
-
-		for(i=0;i<size/SHD_BLOCK_LEN;i++)
-			fputc(c,smb.sha_fp);
-
-		/************************/
-		/* Allocate data blocks */
-		/************************/
-
-		if(!(msg.hdr.attr&MSG_DELETE))
-			smb_incdat(&smb,msg.hdr.offset,smb_getmsgdatlen(&msg),1);
-		}
-
-	smb_freemsgmem(&msg); }
-printf("\nDone.\n");
-status.total_msgs=status.last_msg=n-1;
-if((i=smb_putstatus(&smb))!=0)
-	printf("\nsmb_putstatus returned %d\n",i);
-smb_unlocksmbhdr(&smb);
-smb_close(&smb);
-return(0);
-}
diff --git a/src/sbbs2/smb/fixsmb/makefile b/src/sbbs2/smb/fixsmb/makefile
deleted file mode 100644
index aaa5a8c735..0000000000
--- a/src/sbbs2/smb/fixsmb/makefile
+++ /dev/null
@@ -1,52 +0,0 @@
-###############################
-# Makefile for FIXSMB	      #
-# For use with Borland C++    #
-# Tabstop=8		      #
-###############################
-
-# Macros
-
-OS	= DOS
-CC	= bcc
-LD	= tlink
-INCLUDE = \bc31\include;..
-LIB	= \bc31\lib
-MODEL	= l
-CFLAGS	= -d -C -m$(MODEL) -I$(INCLUDE) -w-pro
-LFLAGS	= -n -c
-
-!ifdef __OS2__
-OS	= OS2
-CC      = c:\bcos2\bin\bcc
-LD      = c:\bcos2\bin\tlink
-INCLUDE = c:\bcos2\include;..
-LIB     = c:\bcos2\lib
-CFLAGS	= -d -C -I$(INCLUDE) -w-pro
-LFLAGS  = -c -w-srf
-!endif
-
-MAIN	= $(OS)\fixsmb.exe
-OBJS	= $(OS)\fixsmb.obj $(OS)\smblib.obj
-HEADERS = ..\smblib.h ..\smbdefs.h ..\crc32.h
-
-# Implicit C Compile Rule
-{.;..}.c.obj:
-	@echo Compiling (I) $< to $@ ...
-	$(CC) $(CFLAGS) -n$(OS) -c $<
-
-# Main EXE Link Rule
-$(MAIN): $(OBJS)
-    	@echo Linking $< ...
-!ifdef __OS2__
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c02.obj $(OBJS)
-+, $*, $*, $(LIB)\os2.lib $(LIB)\c2.lib
-!else
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c0$(MODEL) $(OBJS) 
-+, $*, $*, $(LIB)\c$(MODEL).lib $(LIB)\math$(MODEL).lib $(LIB)\emu.lib
-!endif
-
-# All .obj modules
-$(OS)\fixsmb.obj:	$(HEADERS)
-$(OS)\smblib.obj:     	$(HEADERS)
diff --git a/src/sbbs2/smb/lzh.c b/src/sbbs2/smb/lzh.c
deleted file mode 100644
index d7f2519beb..0000000000
--- a/src/sbbs2/smb/lzh.c
+++ /dev/null
@@ -1,784 +0,0 @@
-/* LZH.C */
-
-/* Rob Swindell's conversion of 1988 LZH (LHarc) encoding functions     */
-/* Based on Japanese version 29-NOV-1988								*/
-/* LZSS coded by Haruhiko Okumura										*/
-/* Adaptive Huffman Coding coded by Haruyasu Yoshizaki					*/
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#ifndef __WATCOMC__
-	#include <alloc.h>
-#endif
-#include "lzh.h"
-
-/****************************************************************************/
-/* Memory allocation macros for various compilers and environments			*/
-/* MALLOC is used for allocations of 64k or less							*/
-/* FREE is used to free buffers allocated with MALLOC						*/
-/* LMALLOC is used for allocations of possibly larger than 64k				*/
-/* LFREE is used to free buffers allocated with LMALLOC 					*/
-/* REALLOC is used to re-size a previously MALLOCed or LMALLOCed buffer 	*/
-/****************************************************************************/
-#if defined(__COMPACT__) || defined(__LARGE__) || defined(__HUGE__)
-	#if defined(__TURBOC__)
-		#define REALLOC(x,y) farrealloc(x,y)
-		#define LMALLOC(x) farmalloc(x)
-		#define MALLOC(x) farmalloc(x)
-		#define LFREE(x) farfree(x)
-		#define FREE(x) farfree(x)
-	#elif defined(__WATCOMC__)
-		#define REALLOC realloc
-		#define LMALLOC(x) halloc(x,1)	/* far heap, but slow */
-		#define MALLOC malloc			/* far heap, but 64k max */
-		#define LFREE hfree
-		#define FREE free
-	#else	/* Other 16-bit Compiler */
-		#define REALLOC realloc
-		#define LMALLOC malloc
-		#define MALLOC malloc
-		#define LFREE free
-		#define FREE free
-	#endif
-#else		/* 32-bit Compiler or Small Memory Model */
-	#define REALLOC realloc
-	#define LMALLOC malloc
-	#define MALLOC malloc
-	#define LFREE free
-	#define FREE free
-#endif
-
-
-
-/* LZSS Parameters */
-
-#define LZH_N			4096	/* Size of string buffer */
-#define LZH_F			60		/* Size of look-ahead buffer */
-#define LZH_THRESHOLD	2
-#define LZH_NIL 		LZH_N	/* End of tree's node  */
-
-#ifdef LZH_DYNAMIC_BUF
-
-unsigned char *lzh_text_buf;
-short int	lzh_match_position, lzh_match_length,
-	  *lzh_lson, *lzh_rson, *lzh_dad;
-
-#else
-
-unsigned char lzh_text_buf[LZH_N + LZH_F - 1];
-short int	  lzh_match_position, lzh_match_length,
-		lzh_lson[LZH_N + 1], lzh_rson[LZH_N + 257], lzh_dad[LZH_N + 1];
-
-#endif
-
-
-void lzh_init_tree(void)  /* Initializing tree */
-{
-	short int  i;
-
-	for (i = LZH_N + 1; i <= LZH_N + 256; i++)
-		lzh_rson[i] = LZH_NIL;			/* root */
-	for (i = 0; i < LZH_N; i++)
-		lzh_dad[i] = LZH_NIL;			/* node */
-}
-
-/******************************/
-/* Inserting node to the tree */
-/* Only used during encoding  */
-/******************************/
-void lzh_insert_node(short int r)
-{
-	short int  i, p, cmp;
-	unsigned char  *key;
-	unsigned c;
-
-	cmp = 1;
-	key = lzh_text_buf+r;
-	p = LZH_N + 1 + key[0];
-	lzh_rson[r] = lzh_lson[r] = LZH_NIL;
-	lzh_match_length = 0;
-	for ( ; ; ) {
-		if (cmp >= 0) {
-			if (lzh_rson[p] != LZH_NIL)
-				p = lzh_rson[p];
-			else {
-				lzh_rson[p] = r;
-				lzh_dad[r] = p;
-				return;
-			}
-		} else {
-			if (lzh_lson[p] != LZH_NIL)
-				p = lzh_lson[p];
-			else {
-				lzh_lson[p] = r;
-				lzh_dad[r] = p;
-				return;
-			}
-		}
-		for (i = 1; i < LZH_F; i++)
-			if ((cmp = key[i] - lzh_text_buf[p + i]) != 0)
-				break;
-		if (i > LZH_THRESHOLD) {
-			if (i > lzh_match_length) {
-				lzh_match_position = ((r - p) & (LZH_N - 1)) - 1;
-				if ((lzh_match_length = i) >= LZH_F)
-					break;
-			}
-			if (i == lzh_match_length) {
-				if ((c = ((r - p) & (LZH_N - 1)) - 1) < lzh_match_position) {
-					lzh_match_position = c;
-				}
-			}
-		}
-	}
-	lzh_dad[r] = lzh_dad[p];
-	lzh_lson[r] = lzh_lson[p];
-	lzh_rson[r] = lzh_rson[p];
-	lzh_dad[lzh_lson[p]] = r;
-	lzh_dad[lzh_rson[p]] = r;
-	if (lzh_rson[lzh_dad[p]] == p)
-		lzh_rson[lzh_dad[p]] = r;
-	else
-		lzh_lson[lzh_dad[p]] = r;
-	lzh_dad[p] = LZH_NIL;  /* remove p */
-}
-
-void lzh_delete_node(short int p)  /* Deleting node from the tree */
-{
-	short int  q;
-
-	if (lzh_dad[p] == LZH_NIL)
-		return;			/* unregistered */
-	if (lzh_rson[p] == LZH_NIL)
-		q = lzh_lson[p];
-	else
-	if (lzh_lson[p] == LZH_NIL)
-		q = lzh_rson[p];
-	else {
-		q = lzh_lson[p];
-		if (lzh_rson[q] != LZH_NIL) {
-			do {
-				q = lzh_rson[q];
-			} while (lzh_rson[q] != LZH_NIL);
-			lzh_rson[lzh_dad[q]] = lzh_lson[q];
-			lzh_dad[lzh_lson[q]] = lzh_dad[q];
-			lzh_lson[q] = lzh_lson[p];
-			lzh_dad[lzh_lson[p]] = q;
-		}
-		lzh_rson[q] = lzh_rson[p];
-		lzh_dad[lzh_rson[p]] = q;
-	}
-	lzh_dad[q] = lzh_dad[p];
-	if (lzh_rson[lzh_dad[p]] == p)
-		lzh_rson[lzh_dad[p]] = q;
-	else
-		lzh_lson[lzh_dad[p]] = q;
-	lzh_dad[p] = LZH_NIL;
-}
-
-/* Huffman coding parameters */
-
-#define LZH_N_CHAR		(256 - LZH_THRESHOLD + LZH_F)
-					/* character code (= 0..LZH_N_CHAR-1) */
-#define LZH_T		(LZH_N_CHAR * 2 - 1)	/* Size of table */
-#define LZH_R		(LZH_T - 1) 		/* root position */
-#define MAX_FREQ	0x8000
-					/* update when cumulative frequency */
-					/* reaches to this value */
-
-/*
- * Tables for encoding/decoding upper 6 bits of
- * sliding dictionary pointer
- */
-/* encoder table */
-uchar lzh_p_len[64] = {
-	0x03, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05,
-	0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-	0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
-	0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08
-};
-
-uchar lzh_p_code[64] = {
-	0x00, 0x20, 0x30, 0x40, 0x50, 0x58, 0x60, 0x68,
-	0x70, 0x78, 0x80, 0x88, 0x90, 0x94, 0x98, 0x9C,
-	0xA0, 0xA4, 0xA8, 0xAC, 0xB0, 0xB4, 0xB8, 0xBC,
-	0xC0, 0xC2, 0xC4, 0xC6, 0xC8, 0xCA, 0xCC, 0xCE,
-	0xD0, 0xD2, 0xD4, 0xD6, 0xD8, 0xDA, 0xDC, 0xDE,
-	0xE0, 0xE2, 0xE4, 0xE6, 0xE8, 0xEA, 0xEC, 0xEE,
-	0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
-	0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
-};
-
-/* decoder table */
-uchar lzh_d_code[256] = {
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-	0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-	0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
-	0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
-	0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
-	0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
-	0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
-	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-	0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
-	0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
-	0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
-	0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
-	0x0C, 0x0C, 0x0C, 0x0C, 0x0D, 0x0D, 0x0D, 0x0D,
-	0x0E, 0x0E, 0x0E, 0x0E, 0x0F, 0x0F, 0x0F, 0x0F,
-	0x10, 0x10, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11,
-	0x12, 0x12, 0x12, 0x12, 0x13, 0x13, 0x13, 0x13,
-	0x14, 0x14, 0x14, 0x14, 0x15, 0x15, 0x15, 0x15,
-	0x16, 0x16, 0x16, 0x16, 0x17, 0x17, 0x17, 0x17,
-	0x18, 0x18, 0x19, 0x19, 0x1A, 0x1A, 0x1B, 0x1B,
-	0x1C, 0x1C, 0x1D, 0x1D, 0x1E, 0x1E, 0x1F, 0x1F,
-	0x20, 0x20, 0x21, 0x21, 0x22, 0x22, 0x23, 0x23,
-	0x24, 0x24, 0x25, 0x25, 0x26, 0x26, 0x27, 0x27,
-	0x28, 0x28, 0x29, 0x29, 0x2A, 0x2A, 0x2B, 0x2B,
-	0x2C, 0x2C, 0x2D, 0x2D, 0x2E, 0x2E, 0x2F, 0x2F,
-	0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
-	0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
-};
-
-uchar lzh_d_len[256] = {
-	0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
-	0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
-	0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
-	0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
-	0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
-	0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
-	0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
-	0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
-	0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
-	0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
-	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-	0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
-	0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
-	0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
-};
-
-#ifdef LZH_DYNAMIC_BUF
-
-unsigned short *lzh_freq=NULL;	 /* cumulative freq table */
-
-/*
- * pointing parent nodes.
- * area [LZH_T..(LZH_T + LZH_N_CHAR - 1)] are pointers for leaves
- */
-short int *lzh_prnt=NULL;
-
-/* pointing children nodes (son[], son[] + 1)*/
-short int *lzh_son=NULL;
-
-#else	/* STATIC */
-
-unsigned short lzh_freq[LZH_T + 1];   /* cumulative freq table */
-short int lzh_prnt[LZH_T + LZH_N_CHAR];
-short int lzh_son[LZH_T + 1];		  /* bug fixed by Digital Dynamics */
-
-#endif
-
-
-unsigned short lzh_getbuf = 0;		/* Was just "unsigned" fixed 04/12/95 */
-uchar lzh_getlen = 0;
-
-int lzh_getbit(uchar *inbuf, long *incnt, long inlen)    /* get one bit */
-{
-	short int i;
-
-	while (lzh_getlen <= 8) {
-		if((*incnt)>=inlen)
-			i=0;
-		else
-			i=inbuf[(*incnt)++];
-		lzh_getbuf |= i << (8 - lzh_getlen);
-		lzh_getlen += 8;
-	}
-	i = lzh_getbuf;
-	lzh_getbuf <<= 1;
-	lzh_getlen--;
-	return (i < 0);
-}
-
-short int lzh_getbyte(uchar *inbuf, long *incnt, long inlen)   /* get a byte */
-{
-	unsigned short i;
-
-	while (lzh_getlen <= 8) {
-		if((*incnt)>=inlen)
-			i=0;
-		else
-			i=inbuf[(*incnt)++];
-		lzh_getbuf |= i << (8 - lzh_getlen);
-		lzh_getlen += 8;
-	}
-	i = lzh_getbuf;
-	lzh_getbuf <<= 8;
-	lzh_getlen -= 8;
-	return i >> 8;
-}
-
-unsigned lzh_putbuf = 0;
-uchar lzh_putlen = 0;
-
-/* output c bits */
-void lzh_putcode(short int l, unsigned short c, uchar *outbuf, long *outlen)
-{
-	lzh_putbuf |= c >> lzh_putlen;
-	if ((lzh_putlen += l) >= 8) {
-		outbuf[(*outlen)++]=(lzh_putbuf >> 8);
-		if ((lzh_putlen -= 8) >= 8) {
-			outbuf[(*outlen)++]=lzh_putbuf;
-			lzh_putlen -= 8;
-			lzh_putbuf = c << (l - lzh_putlen);
-		} else {
-			lzh_putbuf <<= 8;
-		}
-	}
-}
-
-
-/* initialize freq tree */
-
-void lzh_start_huff()
-{
-	short int i, j;
-
-lzh_getbuf = 0; 	/* Added by Digital Dynamics for repeating operations */
-lzh_getlen = 0;
-lzh_putbuf = 0;
-lzh_putlen = 0;
-
-	for (i = 0; i < LZH_N_CHAR; i++) {
-		lzh_freq[i] = 1;
-		lzh_son[i] = i + LZH_T;
-		lzh_prnt[i + LZH_T] = i;
-	}
-	i = 0; j = LZH_N_CHAR;
-	while (j <= LZH_R) {
-		lzh_freq[j] = lzh_freq[i] + lzh_freq[i + 1];
-		lzh_son[j] = i;
-		lzh_prnt[i] = lzh_prnt[i + 1] = j;
-		i += 2; j++;
-	}
-	lzh_freq[LZH_T] = 0xffff;
-    lzh_prnt[LZH_R] = 0;
-}
-
-
-/* reconstruct freq tree */
-
-void lzh_reconst()
-{
-	short int i, j, k;
-	unsigned short f, l;
-
-	/* halven cumulative freq for leaf nodes */
-	j = 0;
-	for (i = 0; i < LZH_T; i++) {
-		if (lzh_son[i] >= LZH_T) {
-			lzh_freq[j] = (lzh_freq[i] + 1) / 2;
-			lzh_son[j] = lzh_son[i];
-			j++;
-		}
-	}
-	/* make a tree : first, connect children nodes */
-	for (i = 0, j = LZH_N_CHAR; j < LZH_T; i += 2, j++) {
-		k = i + 1;
-		f = lzh_freq[j] = lzh_freq[i] + lzh_freq[k];
-		for (k = j - 1; f < lzh_freq[k]; k--);
-		k++;
-		l = (j - k) * 2;
-		
-		/* movmem() is Turbo-C dependent
-		   rewritten to memmove() by Kenji */
-		
-		/* movmem(&lzh_freq[k], &lzh_freq[k + 1], l); */
-		(void)memmove(lzh_freq+k+1,lzh_freq+k, l);
-		lzh_freq[k] = f;
-		/* movmem(&lzh_son[k], &lzh_son[k + 1], l); */
-		(void)memmove(lzh_son+k+1,lzh_son+k, l);
-		lzh_son[k] = i;
-	}
-	/* connect parent nodes */
-	for (i = 0; i < LZH_T; i++) {
-		if ((k = lzh_son[i]) >= LZH_T) {
-			lzh_prnt[k] = i;
-		} else {
-			lzh_prnt[k] = lzh_prnt[k + 1] = i;
-		}
-	}
-}
-
-/* update freq tree */
-
-void lzh_update(short int c)
-{
-	short int i, j, k, l;
-
-	if (lzh_freq[LZH_R] == MAX_FREQ) {
-		lzh_reconst();
-	}
-	c = lzh_prnt[c + LZH_T];
-	do {
-		k = ++lzh_freq[c];
-
-		/* swap nodes to keep the tree freq-ordered */
-		if (k > lzh_freq[l = c + 1]) {
-			while (k > lzh_freq[++l]);
-			l--;
-			lzh_freq[c] = lzh_freq[l];
-			lzh_freq[l] = k;
-
-			i = lzh_son[c];
-			lzh_prnt[i] = l;
-			if (i < LZH_T) lzh_prnt[i + 1] = l;
-
-			j = lzh_son[l];
-			lzh_son[l] = i;
-
-			lzh_prnt[j] = c;
-			if (j < LZH_T) lzh_prnt[j + 1] = c;
-			lzh_son[c] = j;
-
-			c = l;
-		}
-	} while ((c = lzh_prnt[c]) != 0);	/* do it until reaching the root */
-}
-
-unsigned short lzh_code, lzh_len;
-
-void lzh_encode_char(unsigned short c, uchar *outbuf, long *outlen)
-{
-	unsigned short i;
-	short int j, k;
-
-	i = 0;
-	j = 0;
-	k = lzh_prnt[c + LZH_T];
-
-	/* search connections from leaf node to the root */
-	do {
-		i >>= 1;
-
-		/*
-		if node's address is odd, output 1
-		else output 0
-		*/
-		if (k & 1) i += 0x8000;
-
-		j++;
-	} while ((k = lzh_prnt[k]) != LZH_R);
-	lzh_putcode(j, i, outbuf, outlen);
-	lzh_code = i;
-	lzh_len = j;
-	lzh_update(c);
-}
-
-void lzh_encode_position(unsigned short c, uchar *outbuf, long *outlen)
-{
-	unsigned short i;
-
-	/* output upper 6 bits with encoding */
-	i = c >> 6;
-	lzh_putcode(lzh_p_len[i], (unsigned)lzh_p_code[i] << 8, outbuf, outlen);
-
-	/* output lower 6 bits directly */
-	lzh_putcode(6, (c & 0x3f) << 10, outbuf, outlen);
-}
-
-void lzh_encode_end(uchar *outbuf, long *outlen)
-{
-	if (lzh_putlen) {
-		outbuf[(*outlen)++]=(lzh_putbuf >> 8);
-	}
-}
-
-short int lzh_decode_char(uchar *inbuf, long *incnt, long inlen)
-{
-	unsigned short c;
-
-	c = lzh_son[LZH_R];
-
-	/*
-	 * start searching tree from the root to leaves.
-	 * choose node #(lzh_son[]) if input bit == 0
-	 * else choose #(lzh_son[]+1) (input bit == 1)
-	 */
-	while (c < LZH_T) {
-		c += lzh_getbit(inbuf,incnt,inlen);
-		c = lzh_son[c];
-	}
-	c -= LZH_T;
-	lzh_update(c);
-	return c;
-}
-
-short int lzh_decode_position(uchar *inbuf, long *incnt, long inlen)
-{
-	unsigned short i, j, c;
-
-	/* decode upper 6 bits from given table */
-	i = lzh_getbyte(inbuf,incnt,inlen);
-	c = (unsigned)lzh_d_code[i] << 6;
-	j = lzh_d_len[i];
-
-	/* input lower 6 bits directly */
-	j -= 2;
-	while (j--) {
-		i = (i << 1) + lzh_getbit(inbuf,incnt,inlen);
-	}
-	return c | i & 0x3f;
-}
-
-/* Compression */
-
-/* Encoding/Compressing */
-/* Returns length of outbuf */
-long LZHCALL lzh_encode(uchar *inbuf, long inlen, uchar *outbuf)
-{
-	short int  i, c, len, r, s, last_match_length;
-	long incnt,outlen; /* textsize=0; */
-
-#ifdef LZH_DYNAMIC_BUF
-
-	if((lzh_text_buf=(uchar *)MALLOC(LZH_N + LZH_F - 1))==NULL)
-		return(-1);
-	if((lzh_freq=(unsigned short*)MALLOC((LZH_T + 1)*sizeof(unsigned short)))==NULL) {
-		FREE(lzh_text_buf);
-		return(-1); }
-	if((lzh_prnt=(short *)MALLOC((LZH_T + LZH_N_CHAR)*sizeof(short)))==NULL) {
-		FREE(lzh_text_buf);
-		FREE(lzh_freq);
-		return(-1); }
-	if((lzh_son=(short *)MALLOC((LZH_T + 1) * sizeof(short)))==NULL) {
-		FREE(lzh_text_buf);
-		FREE(lzh_prnt);
-		FREE(lzh_freq);
-		return(-1); }
-	if((lzh_lson=(short *)MALLOC((LZH_N + 1)*sizeof(short)))==NULL) {
-		FREE(lzh_text_buf);
-		FREE(lzh_prnt);
-		FREE(lzh_freq);
-		FREE(lzh_son);
-		return(-1); }
-	if((lzh_rson=(short *)MALLOC((LZH_N + 257)*sizeof(short)))==NULL) {
-		FREE(lzh_text_buf);
-		FREE(lzh_prnt);
-		FREE(lzh_freq);
-		FREE(lzh_son);
-		FREE(lzh_lson);
-		return(-1); }
-	if((lzh_dad=(short *)MALLOC((LZH_N + 1)*sizeof(short)))==NULL) {
-		FREE(lzh_text_buf);
-		FREE(lzh_prnt);
-		FREE(lzh_freq);
-		FREE(lzh_son);
-        FREE(lzh_lson);
-		FREE(lzh_rson);
-		return(-1); }
-#endif
-
-	incnt=0;
-	memcpy(outbuf,&inlen,sizeof(inlen));
-	outlen=sizeof(inlen);
-	if(!inlen) {
-#ifdef LZH_DYNAMIC_BUF
-		FREE(lzh_text_buf);
-		FREE(lzh_prnt);
-		FREE(lzh_freq);
-		FREE(lzh_son);
-        FREE(lzh_lson);
-        FREE(lzh_rson);
-		FREE(lzh_dad);
-#endif
-		return(outlen); }
-	lzh_start_huff();
-	lzh_init_tree();
-	s = 0;
-	r = LZH_N - LZH_F;
-	for (i = s; i < r; i++)
-		lzh_text_buf[i] = ' ';
-	for (len = 0; len < LZH_F && incnt<inlen; len++)
-		lzh_text_buf[r + len] = inbuf[incnt++];
-	/* textsize = len; */
-	for (i = 1; i <= LZH_F; i++)
-		lzh_insert_node(r - i);
-	lzh_insert_node(r);
-	do {
-		if (lzh_match_length > len)
-			lzh_match_length = len;
-		if (lzh_match_length <= LZH_THRESHOLD) {
-			lzh_match_length = 1;
-			lzh_encode_char(lzh_text_buf[r],outbuf,&outlen);
-		} else {
-			lzh_encode_char(255 - LZH_THRESHOLD + lzh_match_length
-				,outbuf,&outlen);
-			lzh_encode_position(lzh_match_position
-				,outbuf,&outlen);
-		}
-		last_match_length = lzh_match_length;
-		for (i = 0; i < last_match_length && incnt<inlen; i++) {
-			lzh_delete_node(s);
-			c=inbuf[incnt++];
-			lzh_text_buf[s] = c;
-			if (s < LZH_F - 1)
-				lzh_text_buf[s + LZH_N] = c;
-			s = (s + 1) & (LZH_N - 1);
-			r = (r + 1) & (LZH_N - 1);
-			lzh_insert_node(r);
-		}
-/***
-		if ((textsize += i) > printcount) {
-			printf("%12ld\r", textsize);
-			printcount += 1024;
-		}
-***/
-		while (i++ < last_match_length) {
-			lzh_delete_node(s);
-			s = (s + 1) & (LZH_N - 1);
-			r = (r + 1) & (LZH_N - 1);
-			if (--len) lzh_insert_node(r);
-		}
-	} while (len > 0);
-	lzh_encode_end(outbuf,&outlen);
-/*
-	printf("input: %ld (%ld) bytes\n", inlen,textsize);
-	printf("output: %ld bytes\n", outlen);
-	printf("output/input: %.3f\n", (double)outlen / inlen);
-*/
-
-#ifdef LZH_DYNAMIC_BUF
-	FREE(lzh_text_buf);
-	FREE(lzh_prnt);
-	FREE(lzh_freq);
-	FREE(lzh_son);
-	FREE(lzh_lson);
-	FREE(lzh_rson);
-	FREE(lzh_dad);
-#endif
-
-	return(outlen);
-}
-
-/* Decoding/Uncompressing */
-/* Returns length of outbuf */
-long LZHCALL lzh_decode(uchar *inbuf, long inlen, uchar *outbuf)
-{
-	short int  i, j, k, r, c;
-	unsigned long int  count;
-	long incnt,textsize;
-
-#ifdef LZH_DYNAMIC_BUF
-
-	if((lzh_text_buf=(uchar *)MALLOC((LZH_N + LZH_F - 1)*2))==NULL)
-		return(-1);
-	if((lzh_freq=(unsigned short *)MALLOC((LZH_T + 1)*sizeof(unsigned short)))
-		==NULL) {
-		FREE(lzh_text_buf);
-		return(-1); }
-	if((lzh_prnt=(short *)MALLOC((LZH_T + LZH_N_CHAR)*sizeof(short)))==NULL) {
-		FREE(lzh_text_buf);
-		FREE(lzh_freq);
-		return(-1); }
-	if((lzh_son=(short *)MALLOC((LZH_T + 1) * sizeof(short)))==NULL) {
-		FREE(lzh_text_buf);
-		FREE(lzh_prnt);
-		FREE(lzh_freq);
-		return(-1); }
-
-#endif
-
-	incnt=0;
-	memcpy(&textsize,inbuf,sizeof(textsize));
-	incnt+=sizeof(textsize);
-	if (textsize == 0) {
-#ifdef LZH_DYNAMIC_BUF
-		FREE(lzh_text_buf);
-		FREE(lzh_prnt);
-		FREE(lzh_freq);
-		FREE(lzh_son);
-#endif
-		return(textsize); }
-	lzh_start_huff();
-	for (i = 0; i < LZH_N - LZH_F; i++)
-		*(lzh_text_buf+i) = ' ';
-	r = LZH_N - LZH_F;
-    for (count = 0; count < textsize; ) {
-		c = lzh_decode_char(inbuf,&incnt,inlen);
-		if (c < 256) {
-			outbuf[count]=c;
-#if 0
-			if(r>(LZH_N + LZH_F - 1) || r<0) {
-				printf("Overflow! (%d)\n",r);
-				getch();
-				exit(-1); }
-#endif
-			*(lzh_text_buf+r) = c;
-			r++;
-			r &= (LZH_N - 1);
-			count++;
-		} else {
-			i = (r - lzh_decode_position(inbuf,&incnt,inlen) - 1)
-				& (LZH_N - 1);
-			j = c - 255 + LZH_THRESHOLD;
-			for (k = 0; k < j && count<textsize; k++) {
-				c = lzh_text_buf[(i + k) & (LZH_N - 1)];
-				outbuf[count]=c;
-#if 0
-				if(r>(LZH_N + LZH_F - 1) || r<0) {
-					printf("Overflow! (%d)\n",r);
-					exit(-1); }
-#endif
-				*(lzh_text_buf+r) = c;
-				r++;
-				r &= (LZH_N - 1);
-				count++;
-			}
-		}
-	}
-/***
-	printf("%12ld\n", count);
-***/
-
-#ifdef LZH_DYNAMIC_BUF
-	FREE(lzh_text_buf);
-	FREE(lzh_prnt);
-	FREE(lzh_freq);
-	FREE(lzh_son);
-#endif
-
-return(count);
-}
-
-
diff --git a/src/sbbs2/smb/lzh.h b/src/sbbs2/smb/lzh.h
deleted file mode 100644
index 4972cc3a1a..0000000000
--- a/src/sbbs2/smb/lzh.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/* LZH.H */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#ifdef __NT__
-#define LZHCALL _pascal
-#else
-#define LZHCALL
-#endif
-
-#ifndef uchar
-#define uchar unsigned char
-#endif
-
-long LZHCALL lzh_encode(uchar *inbuf, long inlen, uchar *outbuf);
-long LZHCALL lzh_decode(uchar *inbuf, long inlen, uchar *outbuf);
-
-#ifdef __WATCOMC__	/* Use MSC standard (prepended underscore) */
-#pragma aux lzh_encode			"_*"
-#pragma aux lzh_decode          "_*"
-#endif
diff --git a/src/sbbs2/smb/smbdefs.h b/src/sbbs2/smb/smbdefs.h
deleted file mode 100644
index 2e845c0fd2..0000000000
--- a/src/sbbs2/smb/smbdefs.h
+++ /dev/null
@@ -1,476 +0,0 @@
-/* SMBDEFS.H */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#ifndef _SMBDEFS_H
-#define _SMBDEFS_H
-
-#include <stdio.h>
-
-/**********/
-/* Macros */
-/**********/
-
-										/* Control characters */
-#define TAB 				0x09		/* Horizontal tabulation	^I */
-#define LF					0x0a		/* Line feed				^J */
-#define FF					0x0c		/* Form feed				^L */
-#define CR					0x0d		/* Carriage return			^M */
-#define ESC 				0x1b		/* Escape					^[ */
-#define SP					0x20		/* Space					   */
-
-#define ulong				unsigned long
-#define ushort				unsigned short
-#define uchar				unsigned char
-#define uint				unsigned int
-
-/****************************************************************************/
-/* Memory allocation macros for various compilers and environments			*/
-/* MALLOC is used for allocations of 64k or less							*/
-/* FREE is used to free buffers allocated with MALLOC						*/
-/* LMALLOC is used for allocations of possibly larger than 64k				*/
-/* LFREE is used to free buffers allocated with LMALLOC 					*/
-/* REALLOC is used to re-size a previously MALLOCed or LMALLOCed buffer 	*/
-/****************************************************************************/
-#if defined(__COMPACT__) || defined(__LARGE__) || defined(__HUGE__)
-#	define HUGE16 huge
-#	define FAR16 far
-#	if defined(__TURBOC__)
-#		define REALLOC(x,y) farrealloc(x,y)
-#		define LMALLOC(x) farmalloc(x)
-#		define MALLOC(x) farmalloc(x)
-#		define LFREE(x) farfree(x)
-#		define FREE(x) farfree(x)
-#	elif defined(__WATCOMC__)
-#		define REALLOC realloc
-#		define LMALLOC(x) halloc(x,1)  /* far heap, but slow */
-#		define MALLOC malloc		   /* far heap, but 64k max */
-#		define LFREE hfree
-#		define FREE free
-#	else	/* Other 16-bit Compiler */
-#		define REALLOC realloc
-#		define LMALLOC malloc
-#		define MALLOC malloc
-#		define LFREE free
-#		define FREE free
-#	endif
-#else		/* 32-bit Compiler or Small Memory Model */
-#	define HUGE16
-#	define FAR16
-#	define REALLOC realloc
-#	define LMALLOC malloc
-#	define MALLOC malloc
-#	define LFREE free
-#	define FREE free
-#endif
-
-
-#define SDT_BLOCK_LEN		256 		/* Size of data blocks */
-#define SHD_BLOCK_LEN		256 		/* Size of header blocks */
-
-#define SMB_SELFPACK		0			/* Self-packing storage allocation */
-#define SMB_FASTALLOC		1			/* Fast allocation */
-#define SMB_HYPERALLOC		2			/* No allocation */
-
-#define SMB_EMAIL			1			/* User numbers stored in Indexes */
-
-										/* Time zone macros for when_t.zone */
-#define DAYLIGHT			0x8000		/* Daylight savings is active */
-#define US_ZONE 			0x4000		/* U.S. time zone */
-#define WESTERN_ZONE		0x2000		/* Non-standard zone west of UT */
-#define EASTERN_ZONE		0x1000		/* Non-standard zone east of UT */
-
-										/* US Time Zones (standard) */
-#define AST 				0x40F0		// Atlantic 			(-04:00)
-#define EST 				0x412C		// Eastern				(-05:00)
-#define CST 				0x4168		// Central				(-06:00)
-#define MST 				0x41A4		// Mountain 			(-07:00)
-#define PST 				0x41E0		// Pacific				(-08:00)
-#define YST 				0x421C		// Yukon				(-09:00)
-#define HST 				0x4258		// Hawaii/Alaska		(-10:00)
-#define BST 				0x4294		// Bering				(-11:00)
-
-										/* US Time Zones (daylight) */
-#define ADT 				0xC0F0		// Atlantic 			(-03:00)
-#define EDT 				0xC12C		// Eastern				(-04:00)
-#define CDT 				0xC168		// Central				(-05:00)
-#define MDT 				0xC1A4		// Mountain 			(-06:00)
-#define PDT 				0xC1E0		// Pacific				(-07:00)
-#define YDT 				0xC21C		// Yukon				(-08:00)
-#define HDT 				0xC258		// Hawaii/Alaska		(-09:00)
-#define BDT 				0xC294		// Bering				(-10:00)
-
-										/* Non-standard Time Zones */
-#define MID 				0x2294		// Midway				(-11:00)
-#define VAN 				0x21E0		// Vancouver			(-08:00)
-#define EDM 				0x21A4		// Edmonton 			(-07:00)
-#define WIN 				0x2168		// Winnipeg 			(-06:00)
-#define BOG 				0x212C		// Bogota				(-05:00)
-#define CAR 				0x20F0		// Caracas				(-04:00)
-#define RIO 				0x20B4		// Rio de Janeiro		(-03:00)
-#define FER 				0x2078		// Fernando de Noronha	(-02:00)
-#define AZO 				0x203C		// Azores				(-01:00)
-#define LON 				0x1000		// London				(+00:00)
-#define BER 				0x103C		// Berlin				(+01:00)
-#define ATH 				0x1078		// Athens				(+02:00)
-#define MOS 				0x10B4		// Moscow				(+03:00)
-#define DUB 				0x10F0		// Dubai				(+04:00)
-#define KAB 				0x110E		// Kabul				(+04:30)
-#define KAR 				0x112C		// Karachi				(+05:00)
-#define BOM 				0x114A		// Bombay				(+05:30)
-#define KAT 				0x1159		// Kathmandu			(+05:45)
-#define DHA 				0x1168		// Dhaka				(+06:00)
-#define BAN 				0x11A4		// Bangkok				(+07:00)
-#define HON 				0x11E0		// Hong Kong			(+08:00)
-#define TOK 				0x121C		// Tokyo				(+09:00)
-#define SYD 				0x1258		// Sydney				(+10:00)
-#define NOU 				0x1294		// Noumea				(+11:00)
-#define WEL 				0x12D0		// Wellington			(+12:00)
-
-										/* Valid hfield_t.types */
-#define SENDER				0x00
-#define SENDERAGENT 		0x01
-#define SENDERNETTYPE		0x02
-#define SENDERNETADDR		0x03
-#define SENDEREXT			0x04
-#define SENDERPOS			0x05
-#define SENDERORG			0x06
-
-#define AUTHOR				0x10
-#define AUTHORAGENT 		0x11
-#define AUTHORNETTYPE		0x12
-#define AUTHORNETADDR		0x13
-#define AUTHOREXT			0x14
-#define AUTHORPOS			0x15
-#define AUTHORORG			0x16
-
-#define REPLYTO 			0x20
-#define REPLYTOAGENT		0x21
-#define REPLYTONETTYPE		0x22
-#define REPLYTONETADDR		0x23
-#define REPLYTOEXT			0x24
-#define REPLYTOPOS			0x25
-#define REPLYTOORG			0x26
-
-#define RECIPIENT			0x30
-#define RECIPIENTAGENT		0x31
-#define RECIPIENTNETTYPE	0x32
-#define RECIPIENTNETADDR	0x33
-#define RECIPIENTEXT		0x34
-#define RECIPIENTPOS		0x35
-#define RECIPIENTORG		0x36
-
-#define FORWARDTO			0x40
-#define FORWARDTOAGENT		0x41
-#define FORWARDTONETTYPE	0x42
-#define FORWARDTONETADDR	0x43
-#define FORWARDTOEXT		0x44
-#define FORWARDTOPOS		0x45
-#define FORWARDTOORG		0x46
-
-#define FORWARDED			0x48
-
-#define RECEIVEDBY			0x50
-#define RECEIVEDBYAGENT 	0x51
-#define RECEIVEDBYNETTYPE	0x52
-#define RECEIVEDBYNETADDR	0x53
-#define RECEIVEDBYEXT		0x54
-#define RECEIVEDBYPOS		0x55
-#define RECEIVEDBYORG		0x56
-
-#define RECEIVED			0x58
-
-#define SUBJECT 			0x60
-#define SUMMARY 			0x61
-#ifndef COMMENT
-#define COMMENT 			0x62
-#endif
-#define CARBONCOPY			0x63
-#define GROUP				0x64
-#define EXPIRATION			0x65
-#define PRIORITY			0x66
-
-#define FILEATTACH			0x70
-#define DESTFILE			0x71
-#define FILEATTACHLIST		0x72
-#define DESTFILELIST		0x73
-#define FILEREQUEST 		0x74
-#define FILEPASSWORD		0x75
-#define FILEREQUESTLIST 	0x76
-#define FILEPASSWORDLIST	0x77
-
-#define IMAGEATTACH 		0x80
-#define ANIMATTACH			0x81
-#define FONTATTACH			0x82
-#define SOUNDATTACH 		0x83
-#define PRESENTATTACH		0x84
-#define VIDEOATTACH 		0x85
-#define APPDATAATTACH		0x86
-
-#define IMAGETRIGGER		0x90
-#define ANIMTRIGGER 		0x91
-#define FONTTRIGGER 		0x92
-#define SOUNDTRIGGER		0x93
-#define PRESENTTRIGGER		0x94
-#define VIDEOTRIGGER		0x95
-#define APPDATATRIGGER		0x96
-
-#define FIDOCTRL			0xa0
-#define FIDOAREA			0xa1
-#define FIDOSEENBY			0xa2
-#define FIDOPATH			0xa3
-#define FIDOMSGID			0xa4
-#define FIDOREPLYID 		0xa5
-#define FIDOPID 			0xa6
-#define FIDOFLAGS			0xa7
-
-#define RFC822HEADER		0xb0
-#define RFC822MSGID 		0xb1
-#define RFC822REPLYID		0xb2
-
-#define UNKNOWN 			0xf1
-#define UNKNOWNASCII		0xf2
-#define UNUSED				0xff
-
-										/* Valid dfield_t.types */
-#define TEXT_BODY			0x00
-#define TEXT_SOUL			0x01
-#define TEXT_TAIL			0x02
-#define TEXT_WING			0x03
-#define IMAGEEMBED			0x20
-#define ANIMEMBED			0x21
-#define FONTEMBED			0x22
-#define SOUNDEMBED			0x23
-#define PRESENTEMBED		0x24
-#define VIDEOEMBED			0x25
-#define APPDATAEMBED		0x26
-#define UNUSED				0xff
-
-
-										/* Message attributes */
-#define MSG_PRIVATE 		(1<<0)
-#define MSG_READ			(1<<1)
-#define MSG_PERMANENT		(1<<2)
-#define MSG_LOCKED			(1<<3)
-#define MSG_DELETE			(1<<4)
-#define MSG_ANONYMOUS		(1<<5)
-#define MSG_KILLREAD		(1<<6)
-#define MSG_MODERATED		(1<<7)
-#define MSG_VALIDATED		(1<<8)
-#define MSG_REPLIED			(1<<9)		// User replied to this message
-
-										/* Auxillary header attributes */
-#define MSG_FILEREQUEST 	(1<<0)		// File request
-#define MSG_FILEATTACH		(1<<1)		// File(s) attached to Msg
-#define MSG_TRUNCFILE		(1<<2)		// Truncate file(s) when sent
-#define MSG_KILLFILE		(1<<3)		// Delete file(s) when sent
-#define MSG_RECEIPTREQ		(1<<4)		// Return receipt requested
-#define MSG_CONFIRMREQ		(1<<5)		// Confirmation receipt requested
-#define MSG_NODISP			(1<<6)		// Msg may not be displayed to user
-
-										/* Message network attributes */
-#define MSG_LOCAL			(1<<0)		// Msg created locally
-#define MSG_INTRANSIT		(1<<1)		// Msg is in-transit
-#define MSG_SENT			(1<<2)		// Sent to remote
-#define MSG_KILLSENT		(1<<3)		// Kill when sent
-#define MSG_ARCHIVESENT 	(1<<4)		// Archive when sent
-#define MSG_HOLD			(1<<5)		// Hold for pick-up
-#define MSG_CRASH			(1<<6)		// Crash
-#define MSG_IMMEDIATE		(1<<7)		// Send Msg now, ignore restrictions
-#define MSG_DIRECT			(1<<8)		// Send directly to destination
-#define MSG_GATE			(1<<9)		// Send via gateway
-#define MSG_ORPHAN			(1<<10) 	// Unknown destination
-#define MSG_FPU 			(1<<11) 	// Force pickup
-#define MSG_TYPELOCAL		(1<<12) 	// Msg is for local use only
-#define MSG_TYPEECHO		(1<<13) 	// Msg is for conference distribution
-#define MSG_TYPENET 		(1<<14) 	// Msg is direct network mail
-
-
-enum {
-     NET_NONE
-    ,NET_UNKNOWN
-    ,NET_FIDO
-    ,NET_POSTLINK
-    ,NET_QWK
-	,NET_INTERNET
-	,NET_WWIV
-	,NET_MHS
-
-/* Add new ones here */
-
-    ,NET_TYPES
-    };
-
-enum {
-     AGENT_PERSON
-    ,AGENT_PROCESS
-
-/* Add new ones here */
-
-    ,AGENT_TYPES
-    };
-
-enum {
-     XLAT_NONE              // No translation/End of translation list
-    ,XLAT_ENCRYPT           // Encrypted data
-    ,XLAT_ESCAPED           // 7-bit ASCII escaping for ctrl and 8-bit data
-    ,XLAT_HUFFMAN           // Static and adaptive Huffman coding compression
-    ,XLAT_LZW               // Limpel/Ziv/Welch compression
-    ,XLAT_MLZ78             // Modified LZ78 compression
-    ,XLAT_RLE               // Run length encoding compression
-    ,XLAT_IMPLODE           // Implode compression (PkZIP)
-    ,XLAT_SHRINK            // Shrink compression (PkZIP)
-	,XLAT_LZH				// LHarc (LHA) Dynamic Huffman coding
-
-/* Add new ones here */
-
-    ,XLAT_TYPES
-    };
-
-
-/************/
-/* Typedefs */
-/************/
-
-#ifdef _WIN32	/* necessary for compatibility with SBBS v2 */
-#pragma pack(push)
-#pragma pack(1)
-#endif
-
-typedef struct {			// Time with time-zone
-
-	ulong	time;			// Local time (unix format)
-	short	zone;			// Time zone
-
-	} when_t;
-
-typedef struct {			// Index record
-
-	ushort	to; 			// 16-bit CRC of recipient name (lower case)
-	ushort	from;			// 16-bit CRC of sender name (lower case)
-	ushort	subj;			// 16-bit CRC of subject (lower case, w/o RE:)
-	ushort	attr;			// attributes (read, permanent, etc.)
-	ulong	offset; 		// offset into header file
-	ulong	number; 		// number of message (1 based)
-	ulong	time;			// time/date message was imported/posted
-
-	} idxrec_t;
-
-typedef struct {			// Message base header (fixed portion)
-
-    uchar   id[4];          // text or binary unique hdr ID
-    ushort  version;        // version number (initially 100h for 1.00)
-    ushort  length;         // length including this struct
-
-	} smbhdr_t;
-
-typedef struct {			// Message base status header
-
-	ulong	last_msg;		// last message number
-	ulong	total_msgs; 	// total messages
-	ulong	header_offset;	// byte offset to first header record
-	ulong	max_crcs;		// Maximum number of CRCs to keep in history
-    ulong   max_msgs;       // Maximum number of message to keep in sub
-    ushort  max_age;        // Maximum age of message to keep in sub (in days)
-	ushort	attr;			// Attributes for this message base (SMB_HYPER,etc)
-
-	} smbstatus_t;
-
-typedef struct {			// Message header
-
-	uchar	id[4];			// SHD<^Z>
-    ushort  type;           // Message type (normally 0)
-    ushort  version;        // Version of type (initially 100h for 1.00)
-    ushort  length;         // Total length of fixed record + all fields
-	ushort	attr;			// Attributes (bit field) (duped in SID)
-	ulong	auxattr;		// Auxillary attributes (bit field)
-    ulong   netattr;        // Network attributes
-	when_t	when_written;	// Time message was written (unix format)
-	when_t	when_imported;	// Time message was imported
-    ulong   number;         // Message number
-    ulong   thread_orig;    // Original message number in thread
-    ulong   thread_next;    // Next message in thread
-    ulong   thread_first;   // First reply to this message
-	uchar	reserved[16];	// Reserved for future use
-    ulong   offset;         // Offset for buffer into data file (0 or mod 256)
-	ushort	total_dfields;	// Total number of data fields
-
-	} msghdr_t;
-
-typedef struct {			// Data field
-
-	ushort	type;			// Type of data field
-    ulong   offset;         // Offset into buffer 
-    ulong   length;         // Length of data field
-
-    } dfield_t;
-
-typedef struct {			// Header field
-
-	ushort	type;
-	ushort	length; 		// Length of buffer
-
-	} hfield_t;
-
-typedef struct {			// FidoNet address (zone:net/node.point)
-
-	ushort	zone;
-	ushort	net;
-	ushort	node;
-	ushort	point;
-
-    } fidoaddr_t;
-
-typedef struct {			// Network (type and address)
-
-    ushort  type;
-	void	*addr;
-
-	} net_t;
-
-typedef struct {				// Message
-
-	idxrec_t	idx;			// Index
-	msghdr_t	hdr;			// Header record (fixed portion)
-	char		*to,			// To name
-				*to_ext,		// To extension
-				*from,			// From name
-				*from_ext,		// From extension
-				*replyto,		// Reply-to name
-				*replyto_ext,	// Reply-to extension */
-				*subj;			// Subject
-	ushort		to_agent,		// Type of agent message is to
-				from_agent, 	// Type of agent message is from
-				replyto_agent;	// Type of agent replies should be sent to
-	net_t		to_net, 		// Destination network type and address
-                from_net,       // Origin network address
-                replyto_net;    // Network type and address for replies
-	ushort		total_hfields;	// Total number of header fields
-	hfield_t	*hfield;		// Header fields (fixed length portion)
-	void		**hfield_dat;	// Header fields (variable length portion)
-	dfield_t	*dfield;		// Data fields (fixed length portion)
-	ulong		offset; 		// Offset (number of records) into index
-	uchar		forwarded;		// Forwarded from agent to another
-	when_t		expiration; 	// Message will exipre on this day (if >0)
-
-	} smbmsg_t;
-
-typedef struct {			// Message base
-
-    char    file[128];      // Path and base filename (no extension)
-    FILE    *sdt_fp;        // File pointer for data (.sdt) file
-    FILE    *shd_fp;        // File pointer for header (.shd) file
-    FILE    *sid_fp;        // File pointer for index (.sid) file
-    FILE    *sda_fp;        // File pointer for data allocation (.sda) file
-    FILE    *sha_fp;        // File pointer for header allocation (.sha) file
-	ulong	retry_time; 	// Maximum number of seconds to retry opens/locks
-	smbstatus_t status; 	// Status header record
-	char	shd_buf[SHD_BLOCK_LEN]; 	// File I/O buffer for header file
-
-    } smb_t;
-
-#ifdef _WIN32
-#pragma pack(pop)		/* original packing */
-#endif
-
-#endif /* Don't add anything after this #endif statement */
diff --git a/src/sbbs2/smb/smblib.c b/src/sbbs2/smb/smblib.c
deleted file mode 100644
index e414456e22..0000000000
--- a/src/sbbs2/smb/smblib.c
+++ /dev/null
@@ -1,1383 +0,0 @@
-/* SMBLIB.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "smblib.h"
-
-/* Use smb_ver() and smb_lib_ver() to obtain these values */
-#define SMBLIB_VERSION		"2.10"      /* SMB library version */
-#define SMB_VERSION 		0x0121		/* SMB format version */
-										/* High byte major, low byte minor */
-
-#ifdef _MSC_VER	  /* Microsoft C */
-#define sopen(f,o,s,p)	   _sopen(f,o,s,p)
-#define close(f)		   _close(f)
-#define SH_DENYNO		   _SH_DENYNO
-#define SH_DENYRW		   _SH_DENYRW
-
-#include <sys/locking.h>
-
-int lock(int file, long offset, int size) 
-{
-	int	i;
-	long	pos;
-   
-	pos=tell(file);
-	if(offset!=pos)
-		lseek(file, offset, SEEK_SET);
-	i=locking(file,LK_NBLCK,size);
-	if(offset!=pos)
-		lseek(file, pos, SEEK_SET);
-	return(i);
-}
-
-int unlock(int file, long offset, int size)
-{
-	int	i;
-	long	pos;
-   
-	pos=tell(file);
-	if(offset!=pos)
-		lseek(file, offset, SEEK_SET);
-	i=locking(file,LK_UNLCK,size);
-	if(offset!=pos)
-		lseek(file, pos, SEEK_SET);
-	return(i);
-}
-
-#endif /* _MSC_VER */
-
-
-int SMBCALL smb_ver(void)
-{
-	return(SMB_VERSION);
-}
-
-char * SMBCALL smb_lib_ver(void)
-{
-	return(SMBLIB_VERSION);
-}
-
-/****************************************************************************/
-/* Open a message base of name 'smb->file'                                  */
-/* Opens files for READing messages or updating message indices only        */
-/****************************************************************************/
-int SMBCALL smb_open(smb_t *smb)
-{
-    int file;
-    char str[128];
-	smbhdr_t hdr;
-
-if(!smb->retry_time)
-	smb->retry_time=10;
-smb->shd_fp=smb->sdt_fp=smb->sid_fp=NULL;
-sprintf(str,"%s.SHD",smb->file);
-if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYNO,S_IWRITE|S_IREAD))==-1
-	|| (smb->shd_fp=fdopen(file,"r+b"))==NULL) {
-	if(file!=-1)
-		close(file);
-    return(2); }
-
-if(filelength(file)>=sizeof(smbhdr_t)) {
-	setvbuf(smb->shd_fp,smb->shd_buf,_IONBF,SHD_BLOCK_LEN);
-	if(smb_locksmbhdr(smb)) {
-		smb_close(smb);
-        return(-1); }
-	memset(&hdr,0,sizeof(smbhdr_t));
-	fread(&hdr,sizeof(smbhdr_t),1,smb->shd_fp);
-    if(memcmp(hdr.id,"SMB\x1a",4)) {
-		smb_close(smb);
-        return(-2); }
-    if(hdr.version<0x110) {         /* Compatibility check */
-		smb_close(smb);
-        return(-3); }
-	if(fread(&(smb->status),1,sizeof(smbstatus_t),smb->shd_fp)
-		!=sizeof(smbstatus_t)) {
-		smb_close(smb);
-		return(-4); }
-	smb_unlocksmbhdr(smb);
-	rewind(smb->shd_fp); }
-
-setvbuf(smb->shd_fp,smb->shd_buf,_IOFBF,SHD_BLOCK_LEN);
-
-sprintf(str,"%s.SDT",smb->file);
-if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYNO,S_IWRITE|S_IREAD))==-1
-	|| (smb->sdt_fp=fdopen(file,"r+b"))==NULL) {
-	if(file!=-1)
-		close(file);
-	smb_close(smb);
-	return(1); }
-setvbuf(smb->sdt_fp,NULL,_IOFBF,2*1024);
-
-sprintf(str,"%s.SID",smb->file);
-if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYNO,S_IWRITE|S_IREAD))==-1
-	|| (smb->sid_fp=fdopen(file,"r+b"))==NULL) {
-	if(file!=-1)
-		close(file);
-	smb_close(smb);
-	return(3); }
-setvbuf(smb->sid_fp,NULL,_IOFBF,2*1024);
-
-return(0);
-}
-
-/****************************************************************************/
-/* Closes the currently open message base									*/
-/****************************************************************************/
-void SMBCALL smb_close(smb_t *smb)
-{
-if(smb->shd_fp!=NULL) {
-	smb_unlocksmbhdr(smb);		   /* In case it's been locked */
-	fclose(smb->shd_fp); }
-if(smb->sid_fp!=NULL)
-	fclose(smb->sid_fp);
-if(smb->sdt_fp!=NULL)
-	fclose(smb->sdt_fp);
-smb->sid_fp=smb->shd_fp=smb->sdt_fp=NULL;
-}
-
-/****************************************************************************/
-/* Opens the data block allocation table message base 'smb->file'           */
-/* Retrys for retry_time number of seconds									*/
-/* Return 0 on success, non-zero otherwise									*/
-/****************************************************************************/
-int SMBCALL smb_open_da(smb_t *smb)
-{
-	int 	file;
-	char	str[128];
-	ulong	start=0;
-
-sprintf(str,"%s.SDA",smb->file);
-while(1) {
-	if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYRW,S_IWRITE|S_IREAD))!=-1)
-		break;
-	if(errno!=EACCES)
-		return(-1);
-	if(!start)
-		start=time(NULL);
-	else
-		if(time(NULL)-start>=smb->retry_time)
-			return(-2); }
-if((smb->sda_fp=fdopen(file,"r+b"))==NULL) {
-	close(file);
-	return(-3); }
-setvbuf(smb->sda_fp,NULL,_IOFBF,2*1024);
-return(0);
-}
-
-void SMBCALL smb_close_da(smb_t *smb)
-{
-if(smb->sda_fp!=NULL)
-	fclose(smb->sda_fp);
-smb->sda_fp=NULL;
-}
-
-/****************************************************************************/
-/* Opens the header block allocation table for message base 'smb.file'      */
-/* Retrys for smb.retry_time number of seconds								*/
-/* Return 0 on success, non-zero otherwise									*/
-/****************************************************************************/
-int SMBCALL smb_open_ha(smb_t *smb)
-{
-	int 	file;
-	char	str[128];
-	ulong	start=0;
-
-sprintf(str,"%s.SHA",smb->file);
-while(1) {
-	if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYRW,S_IWRITE|S_IREAD))!=-1)
-		break;
-	if(errno!=EACCES)
-		return(-1);
-	if(!start)
-		start=time(NULL);
-	else
-		if(time(NULL)-start>=smb->retry_time)
-			return(-2); }
-if((smb->sha_fp=fdopen(file,"r+b"))==NULL) {
-	close(file);
-	return(-3); }
-setvbuf(smb->sha_fp,NULL,_IOFBF,2*1024);
-return(0);
-}
-
-void SMBCALL smb_close_ha(smb_t *smb)
-{
-if(smb->sha_fp!=NULL)
-	fclose(smb->sha_fp);
-smb->sha_fp=NULL;
-}
-
-
-/****************************************************************************/
-/* If the parameter 'push' is non-zero, this function stores the currently  */
-/* open message base to the "virtual" smb stack. Up to SMB_STACK_LEN        */
-/* message bases may be stored (defined in SMBDEFS.H).						*/
-/* The parameter 'op' is the operation to perform on the stack. Either      */
-/* SMB_STACK_PUSH, SMB_STACK_POP, or SMB_STACK_XCHNG						*/
-/* If the operation is SMB_STACK_POP, this function restores a message base */
-/* previously saved with a SMB_STACK_PUSH call to this same function.		*/
-/* If the operation is SMB_STACK_XCHNG, then the current message base is	*/
-/* exchanged with the message base on the top of the stack (most recently	*/
-/* pushed.																	*/
-/* If the current message base is not open, the SMB_STACK_PUSH and			*/
-/* SMB_STACK_XCHNG operations do nothing									*/
-/* Returns 0 on success, non-zero if stack full.                            */
-/* If operation is SMB_STACK_POP or SMB_STACK_XCHNG, it always returns 0.	*/
-/****************************************************************************/
-int SMBCALL smb_stack(smb_t *smb, int op)
-{
-	static char stack_file[SMB_STACK_LEN][128];
-	static FILE *stack_sdt[SMB_STACK_LEN],
-				*stack_shd[SMB_STACK_LEN],
-				*stack_sid[SMB_STACK_LEN],
-				*stack_sda[SMB_STACK_LEN],
-				*stack_sha[SMB_STACK_LEN];
-	static int	stack_idx;
-	char		tmp_file[128];
-	FILE		*tmp_sdt,
-				*tmp_shd,
-				*tmp_sid,
-				*tmp_sda,
-				*tmp_sha;
-
-if(op==SMB_STACK_PUSH) {
-	if(stack_idx>=SMB_STACK_LEN)
-		return(1);
-	if(smb->shd_fp==NULL || smb->sdt_fp==NULL || smb->sid_fp==NULL)
-		return(0);	  /* Msg base not open */
-	memcpy(stack_file[stack_idx],smb->file,128);
-	stack_sdt[stack_idx]=smb->sdt_fp;
-	stack_shd[stack_idx]=smb->shd_fp;
-	stack_sid[stack_idx]=smb->sid_fp;
-	stack_sda[stack_idx]=smb->sda_fp;
-	stack_sha[stack_idx]=smb->sha_fp;
-	stack_idx++;
-	return(0); }
-/* pop or xchng */
-if(!stack_idx)	/* Nothing on the stack, so do nothing */
-	return(0);
-if(op==SMB_STACK_XCHNG) {
-	if(!smb->shd_fp)
-		return(0);
-	memcpy(tmp_file,smb->file,128);
-	tmp_sdt=smb->sdt_fp;
-	tmp_shd=smb->shd_fp;
-	tmp_sid=smb->sid_fp;
-	tmp_sda=smb->sda_fp;
-	tmp_sha=smb->sha_fp; }
-
-stack_idx--;
-memcpy(smb->file,stack_file[stack_idx],128);
-smb->sdt_fp=stack_sdt[stack_idx];
-smb->shd_fp=stack_shd[stack_idx];
-smb->sid_fp=stack_sid[stack_idx];
-smb->sda_fp=stack_sda[stack_idx];
-smb->sha_fp=stack_sha[stack_idx];
-if(op==SMB_STACK_XCHNG) {
-	stack_idx++;
-	memcpy(stack_file[stack_idx-1],tmp_file,128);
-	stack_sdt[stack_idx-1]=tmp_sdt;
-	stack_shd[stack_idx-1]=tmp_shd;
-	stack_sid[stack_idx-1]=tmp_sid;
-	stack_sda[stack_idx-1]=tmp_sda;
-	stack_sha[stack_idx-1]=tmp_sha; }
-return(0);
-}
-
-/****************************************************************************/
-/* Truncates header file													*/
-/* Retrys for smb.retry_time number of seconds								*/
-/* Return 0 on success, non-zero otherwise									*/
-/****************************************************************************/
-int SMBCALL smb_trunchdr(smb_t *smb)
-{
-	ulong	start=0;
-
-rewind(smb->shd_fp);
-while(1) {
-	if(!chsize(fileno(smb->shd_fp),0L))
-		break;
-	if(errno!=EACCES)
-		return(-1);
-	if(!start)
-		start=time(NULL);
-	else
-		if(time(NULL)-start>=smb->retry_time)		 /* Time-out */
-			return(-2); }
-return(0);
-}
-
-/*********************************/
-/* Message Base Header Functions */
-/*********************************/
-
-/****************************************************************************/
-/* Attempts for smb.retry_time number of seconds to lock the msg base hdr	*/
-/****************************************************************************/
-int SMBCALL smb_locksmbhdr(smb_t *smb)
-{
-	ulong	start=0;
-
-while(1) {
-	if(!lock(fileno(smb->shd_fp),0L,sizeof(smbhdr_t)+sizeof(smbstatus_t)))
-		return(0);
-	if(!start)
-		start=time(NULL);
-	else
-		if(time(NULL)-start>=smb->retry_time)
-			break;						/* Incase we've already locked it */
-	unlock(fileno(smb->shd_fp),0L,sizeof(smbhdr_t)+sizeof(smbstatus_t)); }
-return(-1);
-}
-
-/****************************************************************************/
-/* Read the SMB header from the header file and place into smb.status		*/
-/****************************************************************************/
-int SMBCALL smb_getstatus(smb_t *smb)
-{
-	int 	i;
-
-setvbuf(smb->shd_fp,smb->shd_buf,_IONBF,SHD_BLOCK_LEN);
-clearerr(smb->shd_fp);
-fseek(smb->shd_fp,sizeof(smbhdr_t),SEEK_SET);
-i=fread(&(smb->status),1,sizeof(smbstatus_t),smb->shd_fp);
-setvbuf(smb->shd_fp,smb->shd_buf,_IOFBF,SHD_BLOCK_LEN);
-if(i==sizeof(smbstatus_t))
-	return(0);
-return(1);
-}
-
-/****************************************************************************/
-/* Writes message base header												*/
-/****************************************************************************/
-int SMBCALL smb_putstatus(smb_t *smb)
-{
-	int i;
-
-clearerr(smb->shd_fp);
-fseek(smb->shd_fp,sizeof(smbhdr_t),SEEK_SET);
-i=fwrite(&(smb->status),1,sizeof(smbstatus_t),smb->shd_fp);
-fflush(smb->shd_fp);
-if(i==sizeof(smbstatus_t))
-	return(0);
-return(1);
-}
-
-/****************************************************************************/
-/* Unlocks previously locks message base header 							*/
-/****************************************************************************/
-int SMBCALL smb_unlocksmbhdr(smb_t *smb)
-{
-return(unlock(fileno(smb->shd_fp),0L,sizeof(smbhdr_t)+sizeof(smbstatus_t)));
-}
-
-/********************************/
-/* Individual Message Functions */
-/********************************/
-
-/****************************************************************************/
-/* Attempts for smb.retry_time number of seconds to lock the hdr for 'msg'  */
-/****************************************************************************/
-int SMBCALL smb_lockmsghdr(smb_t *smb, smbmsg_t *msg)
-{
-	ulong	start=0;
-
-while(1) {
-	if(!lock(fileno(smb->shd_fp),msg->idx.offset,sizeof(msghdr_t)))
-        return(0);
-	if(!start)
-		start=time(NULL);
-	else
-		if(time(NULL)-start>=smb->retry_time)
-			break;
-	unlock(fileno(smb->shd_fp),msg->idx.offset,sizeof(msghdr_t)); }
-return(-1);
-}
-
-/****************************************************************************/
-/* Fills msg->idx with message index based on msg->hdr.number				*/
-/* OR if msg->hdr.number is 0, based on msg->offset (record offset).		*/
-/* if msg.hdr.number does not equal 0, then msg->offset is filled too.		*/
-/* Either msg->hdr.number or msg->offset must be initialized before 		*/
-/* calling this function													*/
-/* Returns 1 if message number wasn't found, 0 if it was                    */
-/****************************************************************************/
-int SMBCALL smb_getmsgidx(smb_t *smb, smbmsg_t *msg)
-{
-	idxrec_t idx;
-	ulong	 l,length,total,bot,top;
-
-clearerr(smb->sid_fp);
-if(!msg->hdr.number) {
-	fseek(smb->sid_fp,msg->offset*sizeof(idxrec_t),SEEK_SET);
-	if(!fread(&msg->idx,sizeof(idxrec_t),1,smb->sid_fp))
-		return(1);
-	return(0); }
-
-length=filelength(fileno(smb->sid_fp));
-if(!length)
-	return(1);
-total=length/sizeof(idxrec_t);
-if(!total)
-	return(1);
-
-bot=0;
-top=total;
-l=total/2; /* Start at middle index */
-while(1) {
-	fseek(smb->sid_fp,l*sizeof(idxrec_t),SEEK_SET);
-	if(!fread(&idx,sizeof(idxrec_t),1,smb->sid_fp))
-		return(1);
-	if(bot==top-1 && idx.number!=msg->hdr.number)
-        return(1);
-	if(idx.number>msg->hdr.number) {
-		top=l;
-		l=bot+((top-bot)/2);
-		continue; }
-	if(idx.number<msg->hdr.number) {
-		bot=l;
-		l=top-((top-bot)/2);
-		continue; }
-	break; }
-msg->idx=idx;
-msg->offset=l;
-return(0);
-}
-
-/****************************************************************************/
-/* Reads the last index record in the open message base 					*/
-/****************************************************************************/
-int SMBCALL smb_getlastidx(smb_t *smb, idxrec_t *idx)
-{
-	long length;
-
-clearerr(smb->sid_fp);
-length=filelength(fileno(smb->sid_fp));
-if(length<sizeof(idxrec_t))
-	return(-1);
-fseek(smb->sid_fp,length-sizeof(idxrec_t),SEEK_SET);
-if(!fread(idx,sizeof(idxrec_t),1,smb->sid_fp))
-	return(-2);
-return(0);
-}
-
-/****************************************************************************/
-/* Figures out the total length of the header record for 'msg'              */
-/* Returns length															*/
-/****************************************************************************/
-uint SMBCALL smb_getmsghdrlen(smbmsg_t *msg)
-{
-	int i;
-
-/* fixed portion */
-msg->hdr.length=sizeof(msghdr_t);
-/* data fields */
-msg->hdr.length+=msg->hdr.total_dfields*sizeof(dfield_t);
-/* header fields */
-for(i=0;i<msg->total_hfields;i++) {
-	msg->hdr.length+=sizeof(hfield_t);
-	msg->hdr.length+=msg->hfield[i].length; }
-return(msg->hdr.length);
-}
-
-/****************************************************************************/
-/* Figures out the total length of the data buffer for 'msg'                */
-/* Returns length															*/
-/****************************************************************************/
-ulong SMBCALL smb_getmsgdatlen(smbmsg_t *msg)
-{
-	int i;
-	ulong length=0L;
-
-for(i=0;i<msg->hdr.total_dfields;i++)
-	length+=msg->dfield[i].length;
-return(length);
-}
-
-/****************************************************************************/
-/* Read header information into 'msg' structure                             */
-/* msg->idx.offset must be set before calling this function 				*/
-/* Must call smb_freemsgmem() to free memory allocated for var len strs 	*/
-/* Returns 0 on success, non-zero if error									*/
-/****************************************************************************/
-int SMBCALL smb_getmsghdr(smb_t *smb, smbmsg_t *msg)
-{
-	void	*vp,**vpp;
-	ushort	i;
-	ulong	l,offset;
-	idxrec_t idx;
-
-rewind(smb->shd_fp);
-fseek(smb->shd_fp,msg->idx.offset,SEEK_SET);
-idx=msg->idx;
-offset=msg->offset;
-memset(msg,0,sizeof(smbmsg_t));
-msg->idx=idx;
-msg->offset=offset;
-if(!fread(&msg->hdr,sizeof(msghdr_t),1,smb->shd_fp))
-	return(-1);
-if(memcmp(msg->hdr.id,"SHD\x1a",4))
-	return(-2);
-if(msg->hdr.version<0x110)
-	return(-9);
-l=sizeof(msghdr_t);
-if(msg->hdr.total_dfields && (msg->dfield
-	=(dfield_t *)MALLOC(sizeof(dfield_t)*msg->hdr.total_dfields))==NULL) {
-	smb_freemsgmem(msg);
-	return(-3); }
-i=0;
-while(i<msg->hdr.total_dfields && l<msg->hdr.length) {
-	if(!fread(&msg->dfield[i],sizeof(dfield_t),1,smb->shd_fp)) {
-		smb_freemsgmem(msg);
-		return(-4); }
-	i++;
-	l+=sizeof(dfield_t); }
-if(i<msg->hdr.total_dfields) {
-	smb_freemsgmem(msg);
-	return(-8); }
-
-while(l<msg->hdr.length) {
-	i=msg->total_hfields;
-	if((vpp=(void **)REALLOC(msg->hfield_dat,sizeof(void *)*(i+1)))==NULL) {
-		smb_freemsgmem(msg);
-		return(-3); }
-	msg->hfield_dat=vpp;
-	if((vp=(hfield_t *)REALLOC(msg->hfield,sizeof(hfield_t)*(i+1)))==NULL) {
-		smb_freemsgmem(msg);
-		return(-3); }
-	msg->hfield=vp;
-	msg->total_hfields++;
-	if(!fread(&msg->hfield[i],sizeof(hfield_t),1,smb->shd_fp)) {
-		smb_freemsgmem(msg);
-		return(-5); }
-	l+=sizeof(hfield_t);
-	if((msg->hfield_dat[i]=(char *)MALLOC(msg->hfield[i].length+1))
-		==NULL) {			/* Allocate 1 extra for NULL terminator */
-		smb_freemsgmem(msg);  /* or 0 length field */
-		return(-3); }
-	memset(msg->hfield_dat[i],0,msg->hfield[i].length+1);  /* init to NULL */
-	if(msg->hfield[i].length
-		&& !fread(msg->hfield_dat[i],msg->hfield[i].length,1,smb->shd_fp)) {
-		smb_freemsgmem(msg);
-		return(-6); }
-
-	switch(msg->hfield[i].type) {	/* convenience variables */
-		case SENDER:
-			if(!msg->from) {
-				msg->from=msg->hfield_dat[i];
-				break; }
-		case FORWARDED: 	/* fall through */
-			msg->forwarded=1;
-			break;
-		case SENDERAGENT:
-			if(!msg->forwarded)
-				msg->from_agent=*(ushort *)msg->hfield_dat[i];
-            break;
-		case SENDEREXT:
-			if(!msg->forwarded)
-				msg->from_ext=msg->hfield_dat[i];
-			break;
-		case SENDERNETTYPE:
-			if(!msg->forwarded)
-				msg->from_net.type=*(ushort *)msg->hfield_dat[i];
-            break;
-		case SENDERNETADDR:
-			if(!msg->forwarded)
-				msg->from_net.addr=msg->hfield_dat[i];
-            break;
-		case REPLYTO:
-			msg->replyto=msg->hfield_dat[i];
-            break;
-		case REPLYTOEXT:
-			msg->replyto_ext=msg->hfield_dat[i];
-			break;
-		case REPLYTOAGENT:
-			msg->replyto_agent=*(ushort *)msg->hfield_dat[i];
-            break;
-		case REPLYTONETTYPE:
-			msg->replyto_net.type=*(ushort *)msg->hfield_dat[i];
-            break;
-		case REPLYTONETADDR:
-			msg->replyto_net.addr=msg->hfield_dat[i];
-            break;
-		case RECIPIENT:
-			msg->to=msg->hfield_dat[i];
-            break;
-		case RECIPIENTEXT:
-			msg->to_ext=msg->hfield_dat[i];
-			break;
-		case RECIPIENTAGENT:
-			msg->to_agent=*(ushort *)msg->hfield_dat[i];
-            break;
-		case RECIPIENTNETTYPE:
-			msg->to_net.type=*(ushort *)msg->hfield_dat[i];
-            break;
-		case RECIPIENTNETADDR:
-			msg->to_net.addr=msg->hfield_dat[i];
-            break;
-		case SUBJECT:
-			msg->subj=msg->hfield_dat[i];
-			break; }
-	l+=msg->hfield[i].length; }
-
-if(!msg->from || !msg->to || !msg->subj) {
-	smb_freemsgmem(msg);
-	return(-7); }
-return(0);
-}
-
-/****************************************************************************/
-/* Frees memory allocated for 'msg'                                         */
-/****************************************************************************/
-void SMBCALL smb_freemsgmem(smbmsg_t *msg)
-{
-	ushort	i;
-
-	if(msg->dfield) {
-		FREE(msg->dfield);
-		msg->dfield=NULL;
-	}
-	for(i=0;i<msg->total_hfields;i++)
-		if(msg->hfield_dat[i]) {
-			FREE(msg->hfield_dat[i]);
-			msg->hfield_dat[i]=NULL;
-		}
-	msg->total_hfields=0;
-	if(msg->hfield) {
-		FREE(msg->hfield);
-		msg->hfield=NULL;
-	}
-	if(msg->hfield_dat) {
-		FREE(msg->hfield_dat);
-		msg->hfield_dat=NULL;
-	}
-}
-
-/****************************************************************************/
-/* Unlocks header for 'msg'                                                 */
-/****************************************************************************/
-int SMBCALL smb_unlockmsghdr(smb_t *smb, smbmsg_t *msg)
-{
-return(unlock(fileno(smb->shd_fp),msg->idx.offset,sizeof(msghdr_t)));
-}
-
-
-/****************************************************************************/
-/* Adds a header field to the 'msg' structure (in memory only)              */
-/****************************************************************************/
-int SMBCALL smb_hfield(smbmsg_t *msg, ushort type, ushort length, void *data)
-{
-	void *vp,**vpp;
-	int i;
-
-i=msg->total_hfields;
-if((vp=(hfield_t *)REALLOC(msg->hfield,sizeof(hfield_t)*(i+1)))==NULL)
-	return(1);
-msg->hfield=vp;
-if((vpp=(void **)REALLOC(msg->hfield_dat,sizeof(void *)*(i+1)))==NULL)
-	return(2);
-msg->hfield_dat=vpp;
-msg->total_hfields++;
-msg->hfield[i].type=type;
-msg->hfield[i].length=length;
-if(length) {
-	if((msg->hfield_dat[i]=(void *)MALLOC(length))==NULL)
-		return(4);
-	memcpy(msg->hfield_dat[i],data,length); }
-else
-	msg->hfield_dat[i]=NULL;
-return(0);
-}
-
-/****************************************************************************/
-/* Adds a data field to the 'msg' structure (in memory only)                */
-/* Automatically figures out the offset into the data buffer from existing	*/
-/* dfield lengths															*/
-/****************************************************************************/
-int SMBCALL smb_dfield(smbmsg_t *msg, ushort type, ulong length)
-{
-	void *vp;
-	int i,j;
-
-i=msg->hdr.total_dfields;
-if((vp=(dfield_t *)REALLOC(msg->dfield,sizeof(dfield_t)*(i+1)))==NULL)
-	return(1);
-msg->dfield=vp;
-msg->hdr.total_dfields++;
-msg->dfield[i].type=type;
-msg->dfield[i].length=length;
-for(j=msg->dfield[i].offset=0;j<i;j++)
-	msg->dfield[i].offset+=msg->dfield[j].length;
-return(0);
-}
-
-/****************************************************************************/
-/* Checks CRC history file for duplicate crc. If found, returns 1.			*/
-/* If no dupe, adds to CRC history and returns 0, or negative if error. 	*/
-/****************************************************************************/
-int SMBCALL smb_addcrc(smb_t *smb, ulong crc)
-{
-	char	str[128];
-	int 	file;
-	long	length;
-	ulong	l,*buf;
-	ulong	start=0;
-
-if(!smb->status.max_crcs)
-	return(0);
-
-sprintf(str,"%s.SCH",smb->file);
-while(1) {
-	if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYRW,S_IWRITE|S_IREAD))!=-1)
-		break;
-	if(errno!=EACCES)
-		return(-1);
-	if(!start)
-		start=time(NULL);
-	else
-		if(time(NULL)-start>=smb->retry_time)
-			return(-2); }
-
-length=filelength(file);
-if(length<0L) {
-	close(file);
-	return(-4); }
-if((buf=(ulong *)MALLOC(smb->status.max_crcs*4))==NULL) {
-	close(file);
-	return(-3); }
-if(length>=smb->status.max_crcs*4) { /* Reached or exceeds max crcs */
-	read(file,buf,smb->status.max_crcs*4);
-	for(l=0;l<smb->status.max_crcs;l++)
-		if(crc==buf[l])
-			break;
-	if(l<smb->status.max_crcs) {				/* Dupe CRC found */
-		close(file);
-		FREE(buf);
-		return(1); }
-	chsize(file,0L);				/* truncate it */
-	lseek(file,0L,SEEK_SET);
-	write(file,buf+4,(smb->status.max_crcs-1)*4); }
-
-else if(length/4) { 						/* Less than max crcs */
-	read(file,buf,length);
-	for(l=0;l<length/4;l++)
-		if(crc==buf[l])
-			break;
-	if(l<length/4) {					/* Dupe CRC found */
-		close(file);
-		FREE(buf);
-		return(1); } }
-
-lseek(file,0L,SEEK_END);
-write(file,&crc,4); 			   /* Write to the end */
-FREE(buf);
-close(file);
-return(0);
-}
-
-
-/****************************************************************************/
-/* Creates a new message header record in the header file.					*/
-/* If storage is SMB_SELFPACK, self-packing conservative allocation is used */
-/* If storage is SMB_FASTALLOC, fast allocation is used 					*/
-/* If storage is SMB_HYPERALLOC, no allocation tables are used (fastest)	*/
-/****************************************************************************/
-int SMBCALL smb_addmsghdr(smb_t *smb, smbmsg_t *msg, int storage)
-{
-	int i;
-	long l;
-
-if(smb_locksmbhdr(smb))
-    return(1);
-if(smb_getstatus(smb))
-    return(2);
-
-if(storage!=SMB_HYPERALLOC && (i=smb_open_ha(smb))!=0)
-    return(i);
-
-msg->hdr.length=smb_getmsghdrlen(msg);
-if(storage==SMB_HYPERALLOC)
-	l=smb_hallochdr(smb);
-else if(storage==SMB_FASTALLOC)
-	l=smb_fallochdr(smb,msg->hdr.length);
-else
-	l=smb_allochdr(smb,msg->hdr.length);
-if(l==-1L) {
-	smb_unlocksmbhdr(smb);
-	smb_close_ha(smb);
-	return(-1); }
-
-smb->status.last_msg++;
-msg->idx.number=msg->hdr.number=smb->status.last_msg;
-msg->idx.offset=smb->status.header_offset+l;
-msg->idx.time=msg->hdr.when_imported.time;
-msg->idx.attr=msg->hdr.attr;
-msg->offset=smb->status.total_msgs;
-smb->status.total_msgs++;
-smb_putstatus(smb);
-
-if(storage!=SMB_HYPERALLOC)
-	smb_close_ha(smb);
-i=smb_putmsg(smb,msg);
-smb_unlocksmbhdr(smb);
-return(i);
-}
-
-/****************************************************************************/
-/* Writes both header and index information for msg 'msg'                   */
-/****************************************************************************/
-int SMBCALL smb_putmsg(smb_t *smb, smbmsg_t *msg)
-{
-	int i;
-
-i=smb_putmsghdr(smb,msg);
-if(i)
-	return(i);
-return(smb_putmsgidx(smb,msg));
-}
-
-/****************************************************************************/
-/* Writes index information for 'msg'                                       */
-/* msg->idx 																 */
-/* and msg->offset must be set prior to calling to this function			 */
-/* Returns 0 if everything ok                                               */
-/****************************************************************************/
-int SMBCALL smb_putmsgidx(smb_t *smb, smbmsg_t *msg)
-{
-
-clearerr(smb->sid_fp);
-fseek(smb->sid_fp,msg->offset*sizeof(idxrec_t),SEEK_SET);
-if(!fwrite(&msg->idx,sizeof(idxrec_t),1,smb->sid_fp))
-	return(1);
-fflush(smb->sid_fp);
-return(0);
-}
-
-/****************************************************************************/
-/* Writes header information for 'msg'                                      */
-/* msg->hdr.length															 */
-/* msg->idx.offset															 */
-/* and msg->offset must be set prior to calling to this function			 */
-/* Returns 0 if everything ok                                               */
-/****************************************************************************/
-int SMBCALL smb_putmsghdr(smb_t *smb, smbmsg_t *msg)
-{
-	ushort	i;
-	ulong	l;
-
-clearerr(smb->shd_fp);
-if(fseek(smb->shd_fp,msg->idx.offset,SEEK_SET))
-	return(-1);
-
-/************************************************/
-/* Write the fixed portion of the header record */
-/************************************************/
-if(!fwrite(&msg->hdr,sizeof(msghdr_t),1,smb->shd_fp))
-	return(-2);
-
-/************************************************/
-/* Write the data fields (each is fixed length) */
-/************************************************/
-for(i=0;i<msg->hdr.total_dfields;i++)
-	if(!fwrite(&msg->dfield[i],sizeof(dfield_t),1,smb->shd_fp))
-		return(-3);
-
-/*******************************************/
-/* Write the variable length header fields */
-/*******************************************/
-for(i=0;i<msg->total_hfields;i++) {
-	if(!fwrite(&msg->hfield[i],sizeof(hfield_t),1,smb->shd_fp))
-		return(-4);
-	if(msg->hfield[i].length					 /* more then 0 bytes long */
-		&& !fwrite(msg->hfield_dat[i],msg->hfield[i].length,1,smb->shd_fp))
-		return(-5); }
-
-l=smb_getmsghdrlen(msg);
-while(l%SHD_BLOCK_LEN) {
-	if(fputc(0,smb->shd_fp)==EOF)
-		return(-6); 			   /* pad block with NULL */
-	l++; }
-fflush(smb->shd_fp);
-return(0);
-}
-
-/****************************************************************************/
-/* Creates a sub-board's initial header file                                */
-/* Truncates and deletes other associated SMB files 						*/
-/****************************************************************************/
-int SMBCALL smb_create(smb_t *smb)
-{
-    char        str[128];
-	smbhdr_t	hdr;
-
-if(filelength(fileno(smb->shd_fp))>=sizeof(smbhdr_t)+sizeof(smbstatus_t)
-	&& smb_locksmbhdr(smb))  /* header exists, so lock it */
-	return(1);
-memset(&hdr,0,sizeof(smbhdr_t));
-memcpy(hdr.id,"SMB\x1a",4);     /* <S> <M> <B> <^Z> */
-hdr.version=SMB_VERSION;
-hdr.length=sizeof(smbhdr_t)+sizeof(smbstatus_t);
-smb->status.last_msg=smb->status.total_msgs=0;
-smb->status.header_offset=sizeof(smbhdr_t)+sizeof(smbstatus_t);
-rewind(smb->shd_fp);
-fwrite(&hdr,1,sizeof(smbhdr_t),smb->shd_fp);
-fwrite(&(smb->status),1,sizeof(smbstatus_t),smb->shd_fp);
-rewind(smb->shd_fp);
-chsize(fileno(smb->shd_fp),sizeof(smbhdr_t)+sizeof(smbstatus_t));
-fflush(smb->shd_fp);
-
-rewind(smb->sdt_fp);
-chsize(fileno(smb->sdt_fp),0L);
-rewind(smb->sid_fp);
-chsize(fileno(smb->sid_fp),0L);
-
-sprintf(str,"%s.SDA",smb->file);
-remove(str);						/* if it exists, delete it */
-sprintf(str,"%s.SHA",smb->file);
-remove(str);                        /* if it exists, delete it */
-sprintf(str,"%s.SCH",smb->file);
-remove(str);
-smb_unlocksmbhdr(smb);
-return(0);
-}
-
-/****************************************************************************/
-/* Returns number of data blocks required to store "length" amount of data  */
-/****************************************************************************/
-ulong SMBCALL smb_datblocks(ulong length)
-{
-	ulong blocks;
-
-blocks=length/SDT_BLOCK_LEN;
-if(length%SDT_BLOCK_LEN)
-	blocks++;
-return(blocks);
-}
-
-/****************************************************************************/
-/* Returns number of header blocks required to store "length" size header   */
-/****************************************************************************/
-ulong SMBCALL smb_hdrblocks(ulong length)
-{
-	ulong blocks;
-
-blocks=length/SHD_BLOCK_LEN;
-if(length%SHD_BLOCK_LEN)
-	blocks++;
-return(blocks);
-}
-
-/****************************************************************************/
-/* Finds unused space in data file based on block allocation table and		*/
-/* marks space as used in allocation table.                                 */
-/* File must be opened read/write DENY ALL									*/
-/* Returns offset to beginning of data (in bytes, not blocks)				*/
-/* Assumes smb_open_da() has been called									*/
-/* smb_close_da() should be called after									*/
-/* Returns negative on error												*/
-/****************************************************************************/
-long SMBCALL smb_allocdat(smb_t *smb, ulong length, ushort headers)
-{
-    ushort  i,j;
-	ulong	l,blocks,offset=0L;
-
-blocks=smb_datblocks(length);
-j=0;	/* j is consecutive unused block counter */
-fflush(smb->sda_fp);
-rewind(smb->sda_fp);
-while(!feof(smb->sda_fp)) {
-	if(!fread(&i,2,1,smb->sda_fp))
-        break;
-	offset+=SDT_BLOCK_LEN;
-    if(!i) j++;
-    else   j=0;
-	if(j==blocks) {
-		offset-=(blocks*SDT_BLOCK_LEN);
-        break; } }
-clearerr(smb->sda_fp);
-fseek(smb->sda_fp,(offset/SDT_BLOCK_LEN)*2L,SEEK_SET);
-for(l=0;l<blocks;l++)
-	if(!fwrite(&headers,2,1,smb->sda_fp))
-		return(-1);
-fflush(smb->sda_fp);
-return(offset);
-}
-
-/****************************************************************************/
-/* Allocates space for data, but doesn't search for unused blocks           */
-/* Returns negative on error												*/
-/****************************************************************************/
-long SMBCALL smb_fallocdat(smb_t *smb, ulong length, ushort headers)
-{
-	ulong	l,blocks,offset;
-
-fflush(smb->sda_fp);
-clearerr(smb->sda_fp);
-blocks=smb_datblocks(length);
-fseek(smb->sda_fp,0L,SEEK_END);
-offset=(ftell(smb->sda_fp)/2L)*SDT_BLOCK_LEN;
-for(l=0;l<blocks;l++)
-	if(!fwrite(&headers,2,1,smb->sda_fp))
-        break;
-fflush(smb->sda_fp);
-if(l<blocks)
-	return(-1L);
-return(offset);
-}
-
-/****************************************************************************/
-/* De-allocates space for data												*/
-/* Returns non-zero on error												*/
-/****************************************************************************/
-int SMBCALL smb_freemsgdat(smb_t *smb, ulong offset, ulong length
-			, ushort headers)
-{
-	int		da_opened=0;
-	ushort	i;
-	ulong	l,blocks;
-
-blocks=smb_datblocks(length);
-
-if(smb->sda_fp==NULL) {
-	if((i=smb_open_da(smb))!=0)
-		return(i);
-	da_opened=1;
-}
-
-clearerr(smb->sda_fp);
-for(l=0;l<blocks;l++) {
-	if(fseek(smb->sda_fp,((offset/SDT_BLOCK_LEN)+l)*2L,SEEK_SET))
-		return(1);
-	if(!fread(&i,2,1,smb->sda_fp))
-		return(2);
-	if(headers>i)
-		i=0;			/* don't want to go negative */
-	else
-		i-=headers;
-	if(fseek(smb->sda_fp,-2L,SEEK_CUR))
-		return(3);
-	if(!fwrite(&i,2,1,smb->sda_fp))
-		return(4); }
-fflush(smb->sda_fp);
-if(da_opened)
-	smb_close_da(smb);
-return(0);
-}
-
-/****************************************************************************/
-/* Adds to data allocation records for blocks starting at 'offset'          */
-/* Returns non-zero on error												*/
-/****************************************************************************/
-int SMBCALL smb_incdat(smb_t *smb, ulong offset, ulong length, ushort headers)
-{
-	ushort	i;
-	ulong	l,blocks;
-
-clearerr(smb->sda_fp);
-blocks=smb_datblocks(length);
-for(l=0;l<blocks;l++) {
-	fseek(smb->sda_fp,((offset/SDT_BLOCK_LEN)+l)*2L,SEEK_SET);
-	if(!fread(&i,2,1,smb->sda_fp))
-		return(1);
-	i+=headers;
-	fseek(smb->sda_fp,-2L,SEEK_CUR);
-	if(!fwrite(&i,2,1,smb->sda_fp))
-		return(2); }
-fflush(smb->sda_fp);
-return(0);
-}
-
-/****************************************************************************/
-/* De-allocates blocks for header record									*/
-/* Returns non-zero on error												*/
-/****************************************************************************/
-int SMBCALL smb_freemsghdr(smb_t *smb, ulong offset, ulong length)
-{
-	uchar	c=0;
-	ulong	l,blocks;
-
-clearerr(smb->sha_fp);
-blocks=smb_hdrblocks(length);
-fseek(smb->sha_fp,offset/SHD_BLOCK_LEN,SEEK_SET);
-for(l=0;l<blocks;l++)
-	if(!fwrite(&c,1,1,smb->sha_fp))
-		return(1);
-fflush(smb->sha_fp);
-return(0);
-}
-
-/****************************************************************************/
-/* Frees all allocated header and data blocks for 'msg'                     */
-/****************************************************************************/
-int SMBCALL smb_freemsg(smb_t *smb, smbmsg_t *msg)
-{
-	int 	i;
-	ushort	x;
-
-if(smb->status.attr&SMB_HYPERALLOC)  /* Nothing to do */
-	return(0);
-
-for(x=0;x<msg->hdr.total_dfields;x++) {
-	if((i=smb_freemsgdat(smb,msg->hdr.offset+msg->dfield[x].offset
-		,msg->dfield[x].length,1))!=0)
-		return(i); }
-return(smb_freemsghdr(smb,msg->idx.offset-smb->status.header_offset
-	,msg->hdr.length));
-}
-
-/****************************************************************************/
-/* Finds unused space in header file based on block allocation table and	*/
-/* marks space as used in allocation table.                                 */
-/* File must be opened read/write DENY ALL									*/
-/* Returns offset to beginning of header (in bytes, not blocks) 			*/
-/* Assumes smb_open_ha() has been called									*/
-/* smb_close_ha() should be called after									*/
-/* Returns -1L on error 													*/
-/****************************************************************************/
-long SMBCALL smb_allochdr(smb_t *smb, ulong length)
-{
-	uchar	c;
-	ushort	i;
-	ulong	l,blocks,offset=0;
-
-blocks=smb_hdrblocks(length);
-i=0;	/* i is consecutive unused block counter */
-fflush(smb->sha_fp);
-rewind(smb->sha_fp);
-while(!feof(smb->sha_fp)) {
-	if(!fread(&c,1,1,smb->sha_fp))
-        break;
-	offset+=SHD_BLOCK_LEN;
-	if(!c) i++;
-	else   i=0;
-	if(i==blocks) {
-		offset-=(blocks*SHD_BLOCK_LEN);
-        break; } }
-clearerr(smb->sha_fp);
-fseek(smb->sha_fp,offset/SHD_BLOCK_LEN,SEEK_SET);
-c=1;
-for(l=0;l<blocks;l++)
-	if(!fwrite(&c,1,1,smb->sha_fp))
-		return(-1L);
-fflush(smb->sha_fp);
-return(offset);
-}
-
-/****************************************************************************/
-/* Allocates space for index, but doesn't search for unused blocks          */
-/* Returns -1L on error 													*/
-/****************************************************************************/
-long SMBCALL smb_fallochdr(smb_t *smb, ulong length)
-{
-	uchar	c=1;
-	ulong	l,blocks,offset;
-
-blocks=smb_hdrblocks(length);
-fflush(smb->sha_fp);
-clearerr(smb->sha_fp);
-fseek(smb->sha_fp,0L,SEEK_END);
-offset=ftell(smb->sha_fp)*SHD_BLOCK_LEN;
-for(l=0;l<blocks;l++)
-	if(!fwrite(&c,1,1,smb->sha_fp))
-		return(-1L);
-fflush(smb->sha_fp);
-return(offset);
-}
-
-/************************************************************************/
-/* Allocate header blocks using Hyper Allocation						*/
-/* this function should be most likely not be called from anywhere but	*/
-/* smb_addmsghdr()														*/
-/************************************************************************/
-long SMBCALL smb_hallochdr(smb_t *smb)
-{
-	ulong l;
-
-fflush(smb->shd_fp);
-fseek(smb->shd_fp,0L,SEEK_END);
-l=ftell(smb->shd_fp);
-if(l<smb->status.header_offset) 			 /* Header file truncated?!? */
-	return(smb->status.header_offset);
-while((l-smb->status.header_offset)%SHD_BLOCK_LEN)	/* Even block boundry */
-	l++;
-return(l-smb->status.header_offset);
-}
-
-/************************************************************************/
-/* Allocate data blocks using Hyper Allocation							*/
-/* smb_locksmbhdr() should be called before this function and not		*/
-/* unlocked until all data fields for this message have been written	*/
-/* to the SDT file														*/
-/************************************************************************/
-long SMBCALL smb_hallocdat(smb_t *smb)
-{
-	long l;
-
-fflush(smb->sdt_fp);
-fseek(smb->sdt_fp,0L,SEEK_END);
-l=ftell(smb->sdt_fp);
-if(l<=0)
-	return(l);
-while(l%SDT_BLOCK_LEN)					/* Make sure even block boundry */
-	l++;
-return(l);
-}
-
-
-int SMBCALL smb_feof(FILE *fp)
-{
-return(feof(fp));
-}
-
-int SMBCALL smb_ferror(FILE *fp)
-{
-return(ferror(fp));
-}
-
-int SMBCALL smb_fflush(FILE *fp)
-{
-return(fflush(fp));
-}
-
-int SMBCALL smb_fgetc(FILE *fp)
-{
-return(fgetc(fp));
-}
-
-int SMBCALL smb_fputc(int ch, FILE *fp)
-{
-return(fputc(ch,fp));
-}
-
-int SMBCALL smb_fseek(FILE *fp, long offset, int whence)
-{
-return(fseek(fp,offset,whence));
-}
-
-long SMBCALL smb_ftell(FILE *fp)
-{
-return(ftell(fp));
-}
-
-long SMBCALL smb_fgetlength(FILE *fp)
-{
-return(filelength(fileno(fp)));
-}
-
-int SMBCALL smb_fsetlength(FILE *fp, long length)
-{
-return(chsize(fileno(fp),length));
-}
-
-void SMBCALL smb_rewind(FILE *fp)
-{
-rewind(fp);
-}
-
-void SMBCALL smb_clearerr(FILE *fp)
-{
-clearerr(fp);
-}
-
-long SMBCALL smb_fread(void HUGE16 *buf, long bytes, FILE *fp)
-{
-#ifdef __FLAT__
-	return(fread(buf,1,bytes,fp));
-#else
-	long count;
-
-for(count=bytes;count>0x7fff;count-=0x7fff,(char*)buf+=0x7fff)
-	if(fread((char *)buf,1,0x7fff,fp)!=0x7fff)
-		return(bytes-count);
-if(fread((char *)buf,1,(size_t)count,fp)!=(size_t)count)
-	return(bytes-count);
-return(bytes);
-#endif
-}
-
-long SMBCALL smb_fwrite(void HUGE16 *buf, long bytes, FILE *fp)
-{
-#ifdef __FLAT__
-	return(fwrite(buf,1,bytes,fp));
-#else
-	long count;
-
-for(count=bytes;count>0x7fff;count-=0x7fff,(char*)buf+=0x7fff)
-	if(fwrite((char *)buf,1,0x7fff,fp)!=0x7fff)
-		return(bytes-count);
-if(fwrite((char *)buf,1,(size_t)count,fp)!=(size_t)count)
-	return(bytes-count);
-return(bytes);
-#endif
-}
-
-#ifdef SMB_GETMSGTXT
-
-char HUGE16 * SMBCALL smb_getmsgtxt(smb_t *smb, smbmsg_t *msg, ulong mode)
-{
-	char	HUGE16 *buf=NULL,HUGE16 *lzhbuf,HUGE16 *p;
-	ushort	xlat;
-	int 	i,lzh;
-	long	l=0,lzhlen,length;
-
-for(i=0;i<msg->hdr.total_dfields;i++) {
-	if(!(msg->dfield[i].type==TEXT_BODY
-		|| (mode&GETMSGTXT_TAILS && msg->dfield[i].type==TEXT_TAIL))
-		|| msg->dfield[i].length<=2L)
-		continue;
-	fseek(smb->sdt_fp,msg->hdr.offset+msg->dfield[i].offset
-		,SEEK_SET);
-	fread(&xlat,2,1,smb->sdt_fp);
-	lzh=0;
-	if(xlat==XLAT_LZH) {
-		lzh=1;
-		fread(&xlat,2,1,smb->sdt_fp); }
-	if(xlat!=XLAT_NONE) 	/* no other translations currently supported */
-		continue;
-
-	length=msg->dfield[i].length-2L;
-	if(lzh) {
-		length-=2;
-		if(length<1)
-			continue;
-		if((lzhbuf=LMALLOC(length))==NULL)
-			return(buf);
-		smb_fread(lzhbuf,length,smb->sdt_fp);
-		lzhlen=*(long *)lzhbuf;
-		if((p=REALLOC(buf,l+lzhlen+3L))==NULL) {
-			FREE(lzhbuf);
-			return(buf); }
-		buf=p;
-		lzh_decode((char *)lzhbuf,length,(char *)buf+l);
-		FREE(lzhbuf);
-		l+=lzhlen; }
-	else {
-		if((p=REALLOC(buf,l+length+3L))==NULL)
-			return(buf);
-		buf=p;
-		p=buf+l;
-		l+=fread(p,1,length,smb->sdt_fp);
-		}
-	if(!l)
-		continue;
-	l--;
-	while(l && buf[l]==0) l--;
-	l++;
-	*(buf+l)=CR;
-	l++;
-	*(buf+l)=LF;
-	l++;
-	*(buf+l)=0; }
-return(buf);
-}
-
-void SMBCALL smb_freemsgtxt(char HUGE16 *buf)
-{
-if(buf!=NULL)
-	FREE(buf);
-}
-
-#endif
-
-/* End of SMBLIB.C */
diff --git a/src/sbbs2/smb/smblib.h b/src/sbbs2/smb/smblib.h
deleted file mode 100644
index beab8210bb..0000000000
--- a/src/sbbs2/smb/smblib.h
+++ /dev/null
@@ -1,205 +0,0 @@
-/* SMBLIB.H */
-
-/* Developed 1990-2000 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#ifndef _SMBLIB_H
-#define _SMBLIB_H
-
-#include "lzh.h"
-
-#if defined(__WATCOMC__) || defined(__TURBOC__) || defined(_MSC_VER)
-#	include <io.h>
-#	include <share.h>
-#endif
-
-#if defined(__WATCOMC__) || defined(__TURBOC__)
-#	include <mem.h>
-#else
-#	include <memory.h>
-#endif
-
-#if defined(__WATCOMC__)
-#	include <dos.h>
-#elif defined(__TURBOC__)
-#	include <dir.h>
-#endif
-
-#if defined(_WIN32)
-#	ifndef __FLAT__
-#	define __FLAT__
-#	endif
-#	define SMBCALL __stdcall	/* VB Compatible */
-#	if defined (EXPORT32)
-#		undef EXPORT32
-#	endif
-#	if defined(SMBDLL)
-#		define EXPORT32 __declspec( dllexport )
-#	else
-#		define EXPORT32 __declspec( dllimport )
-#	endif
-#elif defined(__FLAT__)
-#	if defined(SMBDLL)
-#		define SMBCALL	_pascal
-#		define EXPORT32 _export
-#	else
-#		define SMBCALL
-#		define EXPORT32
-#	endif
-#
-#else
-#	define SMBCALL
-#	define EXPORT32
-#endif
-
-#include <malloc.h>
-#include <time.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#include "smbdefs.h"
-
-#define SMB_STACK_LEN		4			/* Max msg bases in smb_stack() 	*/
-#define SMB_STACK_POP       0           /* Pop a msg base off of smb_stack() */
-#define SMB_STACK_PUSH      1           /* Push a msg base onto smb_stack() */
-#define SMB_STACK_XCHNG     2           /* Exchange msg base w/last pushed */
-
-#define GETMSGTXT_TAILS 	1			/* Get message tail(s) too */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-EXPORT32 int 	SMBCALL smb_ver(void);
-EXPORT32 char *	SMBCALL smb_lib_ver(void);
-EXPORT32 int 	SMBCALL smb_open(smb_t *smb);
-EXPORT32 void	SMBCALL smb_close(smb_t *smb);
-EXPORT32 int 	SMBCALL smb_open_da(smb_t *smb);
-EXPORT32 void	SMBCALL smb_close_da(smb_t *smb);
-EXPORT32 int 	SMBCALL smb_open_ha(smb_t *smb);
-EXPORT32 void	SMBCALL smb_close_ha(smb_t *smb);
-EXPORT32 int 	SMBCALL smb_create(smb_t *smb);
-EXPORT32 int 	SMBCALL smb_stack(smb_t *smb, int op);
-EXPORT32 int 	SMBCALL smb_trunchdr(smb_t *smb);
-EXPORT32 int 	SMBCALL smb_locksmbhdr(smb_t *smb);
-EXPORT32 int 	SMBCALL smb_getstatus(smb_t *smb);
-EXPORT32 int 	SMBCALL smb_putstatus(smb_t *smb);
-EXPORT32 int 	SMBCALL smb_unlocksmbhdr(smb_t *smb);
-EXPORT32 int 	SMBCALL smb_getmsgidx(smb_t *smb, smbmsg_t *msg);
-EXPORT32 int 	SMBCALL smb_getlastidx(smb_t *smb, idxrec_t *idx);
-EXPORT32 uint	SMBCALL smb_getmsghdrlen(smbmsg_t *msg);
-EXPORT32 ulong	SMBCALL smb_getmsgdatlen(smbmsg_t *msg);
-EXPORT32 int 	SMBCALL smb_lockmsghdr(smb_t *smb, smbmsg_t *msg);
-EXPORT32 int 	SMBCALL smb_getmsghdr(smb_t *smb, smbmsg_t *msg);
-EXPORT32 int 	SMBCALL smb_unlockmsghdr(smb_t *smb, smbmsg_t *msg);
-EXPORT32 int 	SMBCALL smb_addcrc(smb_t *smb, ulong crc);
-EXPORT32 int 	SMBCALL smb_hfield(smbmsg_t *msg, ushort type, ushort length, void *data);
-EXPORT32 int 	SMBCALL smb_dfield(smbmsg_t *msg, ushort type, ulong length);
-EXPORT32 int 	SMBCALL smb_addmsghdr(smb_t *smb, smbmsg_t *msg,int storage);
-EXPORT32 int 	SMBCALL smb_putmsg(smb_t *smb, smbmsg_t *msg);
-EXPORT32 int 	SMBCALL smb_putmsgidx(smb_t *smb, smbmsg_t *msg);
-EXPORT32 int 	SMBCALL smb_putmsghdr(smb_t *smb, smbmsg_t *msg);
-EXPORT32 void	SMBCALL smb_freemsgmem(smbmsg_t *msg);
-EXPORT32 ulong	SMBCALL smb_hdrblocks(ulong length);
-EXPORT32 ulong	SMBCALL smb_datblocks(ulong length);
-EXPORT32 long	SMBCALL smb_allochdr(smb_t *smb, ulong length);
-EXPORT32 long	SMBCALL smb_fallochdr(smb_t *smb, ulong length);
-EXPORT32 long	SMBCALL smb_hallochdr(smb_t *smb);
-EXPORT32 long	SMBCALL smb_allocdat(smb_t *smb, ulong length, ushort headers);
-EXPORT32 long	SMBCALL smb_fallocdat(smb_t *smb, ulong length, ushort headers);
-EXPORT32 long	SMBCALL smb_hallocdat(smb_t *smb);
-EXPORT32 int 	SMBCALL smb_incdat(smb_t *smb, ulong offset, ulong length, ushort headers);
-EXPORT32 int 	SMBCALL smb_freemsg(smb_t *smb, smbmsg_t *msg);
-EXPORT32 int 	SMBCALL smb_freemsgdat(smb_t *smb, ulong offset, ulong length, ushort headers);
-EXPORT32 int 	SMBCALL smb_freemsghdr(smb_t *smb, ulong offset, ulong length);
-EXPORT32 void	SMBCALL smb_freemsgtxt(char HUGE16 *buf);
-EXPORT32 char HUGE16 * SMBCALL smb_getmsgtxt(smb_t *smb, smbmsg_t *msg, ulong mode);
-
-/* FILE pointer I/O functions */
-
-EXPORT32 int 	SMBCALL smb_feof(FILE *fp);
-EXPORT32 int 	SMBCALL smb_ferror(FILE *fp);
-EXPORT32 int 	SMBCALL smb_fflush(FILE *fp);
-EXPORT32 int 	SMBCALL smb_fgetc(FILE *fp);
-EXPORT32 int 	SMBCALL smb_fputc(int ch, FILE *fp);
-EXPORT32 int 	SMBCALL smb_fseek(FILE *fp, long offset, int whence);
-EXPORT32 long	SMBCALL smb_ftell(FILE *fp);
-EXPORT32 long	SMBCALL smb_fread(void HUGE16 *buf, long bytes, FILE *fp);
-EXPORT32 long	SMBCALL smb_fwrite(void HUGE16 *buf, long bytes, FILE *fp);
-EXPORT32 long	SMBCALL smb_fgetlength(FILE *fp);
-EXPORT32 int 	SMBCALL smb_fsetlength(FILE *fp, long length);
-EXPORT32 void	SMBCALL smb_rewind(FILE *fp);
-EXPORT32 void	SMBCALL smb_clearerr(FILE *fp);
-
-#ifdef __cplusplus
-}
-#endif
-
-#ifdef __WATCOMC__	/* Use MSC standard (prepended underscore) */
-#pragma aux smb_ver 			"_*"
-#pragma aux smb_lib_ver 		"_*"
-#pragma aux smb_open			"_*"
-#pragma aux smb_close			"_*"
-#pragma aux smb_open_da 		"_*"
-#pragma aux smb_close_da		"_*"
-#pragma aux smb_open_ha 		"_*"
-#pragma aux smb_close_ha		"_*"
-#pragma aux smb_create			"_*"
-#pragma aux smb_stack			"_*"
-#pragma aux smb_trunchdr		"_*"
-#pragma aux smb_locksmbhdr		"_*"
-#pragma aux smb_getstatus		"_*"
-#pragma aux smb_putstatus		"_*"
-#pragma aux smb_unlocksmbhdr	"_*"
-#pragma aux smb_getmsgidx		"_*"
-#pragma aux smb_getlastidx		"_*"
-#pragma aux smb_getmsghdrlen	"_*"
-#pragma aux smb_getmsgdatlen	"_*"
-#pragma aux smb_lockmsghdr		"_*"
-#pragma aux smb_getmsghdr		"_*"
-#pragma aux smb_unlockmsghdr	"_*"
-#pragma aux smb_addcrc			"_*"
-#pragma aux smb_hfield			"_*"
-#pragma aux smb_dfield			"_*"
-#pragma aux smb_addmsghdr		"_*"
-#pragma aux smb_putmsg			"_*"
-#pragma aux smb_putmsgidx		"_*"
-#pragma aux smb_putmsghdr		"_*"
-#pragma aux smb_freemsgmem		"_*"
-#pragma aux smb_hdrblocks		"_*"
-#pragma aux smb_datblocks		"_*"
-#pragma aux smb_allochdr		"_*"
-#pragma aux smb_fallochdr		"_*"
-#pragma aux smb_hallochdr		"_*"
-#pragma aux smb_allocdat		"_*"
-#pragma aux smb_fallocdat		"_*"
-#pragma aux smb_hallocdat		"_*"
-#pragma aux smb_incdat			"_*"
-#pragma aux smb_freemsg 		"_*"
-#pragma aux smb_freemsgdat		"_*"
-#pragma aux smb_freemsghdr		"_*"
-#pragma aux smb_getmsgtxt		"_*"
-#pragma aux smb_freemsgtxt		"_*"
-#pragma aux smb_feof			"_*"
-#pragma aux smb_ferror			"_*"
-#pragma aux smb_fflush			"_*"
-#pragma aux smb_fgetc			"_*"
-#pragma aux smb_fputc			"_*"
-#pragma aux smb_fseek			"_*"
-#pragma aux smb_ftell			"_*"
-#pragma aux smb_fread			"_*"
-#pragma aux smb_fwrite			"_*"
-#pragma aux smb_fgetlength		"_*"
-#pragma aux smb_fsetlength		"_*"
-#pragma aux smb_rewind			"_*"
-#pragma aux smb_clearerr		"_*"
-#pragma aux lzh_encode			"_*"
-#pragma aux lzh_decode			"_*"
-#endif	/* Watcom */
-
-
-#endif /* Don't add anything after this #endif statement */
diff --git a/src/sbbs2/smb/smbutil/makeall.bat b/src/sbbs2/smb/smbutil/makeall.bat
deleted file mode 100755
index e4036c9772..0000000000
--- a/src/sbbs2/smb/smbutil/makeall.bat
+++ /dev/null
@@ -1,11 +0,0 @@
-@echo off
-wmake OS=DOS %1 %2 %3 %4 %5
-if errorlevel 1 goto end
-wmake OS=DOS4G %1 %2 %3 %4 %5
-if errorlevel 1 goto end
-wmake OS=OS2 %1 %2 %3 %4 %5
-if errorlevel 1 goto end
-wmake OS=NT %1 %2 %3 %4 %5
-if errorlevel 1 goto end
-:end
-
diff --git a/src/sbbs2/smb/smbutil/makefile b/src/sbbs2/smb/smbutil/makefile
deleted file mode 100644
index 5877440fa5..0000000000
--- a/src/sbbs2/smb/smbutil/makefile
+++ /dev/null
@@ -1,73 +0,0 @@
-#########################################################################
-# Makefile for SMBUTIL							#
-# For use with Watcom C       						#
-# Tabstop=8                                                             #
-#									#
-# To use this makefile, you must create the following sub-directories:	#
-# DOS, OS2, and DOSX.							#
-#									#
-# *** IMPORTANT NOTE ***
-# You must also copy the file \WATCOM\SRC\STARTUP\WILDARGV.C into the	#
-# current directory.							#
-#########################################################################
-
-# Macros
-
-!ifndef OS
-OS	= DOS
-!endif
-
-!ifeq OS DOS
-CC	= *wcc -ml
-!else
-CC	= *wcc386
-!endif
-
-LD	= *wlink
-MAIN	= $(OS)\smbutil.exe
-OBJS	= $(OS)\smbutil.obj $(OS)\smblib.obj $(OS)\lzh.obj $(OS)\wildargv.obj
-HEADERS = smbutil.h smblib.h smbdefs.h crc32.h lzh.h
-
-!ifeq OS DOS
-CFLAGS	= -I=\watcom\h;.. -bt=$(OS) -fo=$(OS)\ -DSMB_GETMSGTXT
-!else
-CFLAGS	= -I=\watcom\h;.. -bt=$(OS) -fo=$(OS)\ -DSMB_GETMSGTXT -DLZH_DYNAMIC_BUF
-!endif
-
-!ifeq OS NT
-SYSTEM  = NT
-!endif
-!ifeq OS DOS
-SYSTEM  = DOS
-!endif
-!ifeq OS OS2
-SYSTEM  = OS2V2
-!endif
-!ifeq OS DOS4G
-SYSTEM  = DOS4G
-!endif
-
-LFLAGS	= system $(SYSTEM)
-
-
-# Implicit C Compile Rule
-.obj: $(OS)
-.c.obj:
-	@echo Compiling (I) $< to $@ ...
-	$(CC) $(CFLAGS) $<
-
-# Main EXE Link Rule
-$(MAIN): $(OBJS)
-    	@echo Linking $< ...
-	$(LD) $(LFLAGS) file { $(OBJS) }
-
-# All .obj modules
-$(OS)\smbutil.obj::   $(HEADERS)
-
-$(OS)\smblib.obj: ..\smblib.c ..\smblib.h ..\smbdefs.h
-        @echo Compiling $[@ to $^@ ...
-        $(CC) -DSMB_GETMSGTXT $(CFLAGS) $[@
-
-$(OS)\lzh.obj: ..\lzh.c ..\lzh.h
-        @echo Compiling $[@ to $^@ ...
-        $(CC) $(CFLAGS) $[@
diff --git a/src/sbbs2/smb/smbutil/makefile.bc b/src/sbbs2/smb/smbutil/makefile.bc
deleted file mode 100644
index 993c75da1d..0000000000
--- a/src/sbbs2/smb/smbutil/makefile.bc
+++ /dev/null
@@ -1,57 +0,0 @@
-###############################
-# Makefile for SMBUTIL        #
-# For use with Borland C++    #
-# Tabstop=8		      #
-###############################
-
-# ATTN: To use this MAKEFILE, you must create a directory "l" off of the
-#       current directory to store the large model .OBJ files
-
-# Macros
-OS	= DOS
-CC	= bcc
-LD	= tlink
-INCLUDE = \bc31\include;..
-LIB	= \bc31\lib
-MODEL	= l
-CFLAGS	= -d -N -C -m$(MODEL) -I$(INCLUDE) -DLZH_DYNAMIC_BUF -DSMB_GETMSGTXT -w-pro
-LFLAGS	= -n -c
-
-!ifdef __OS2__
-OS	= OS2
-CC      = c:\bcos2\bin\bcc
-LD      = c:\bcos2\bin\tlink
-INCLUDE = c:\bcos2\include;..
-LIB     = c:\bcos2\lib
-MODEL	= os2
-CFLAGS	= -d -C -I$(INCLUDE) -DSMB_GETMSGTXT -w-pro
-LFLAGS	= -c -w-srf
-!endif
-
-HEADERS = smbutil.h ..\smblib.h ..\smbdefs.h ..\crc32.h ..\lzh.h
-MAIN	= $(OS)\smbutil.exe
-OBJS	= $(OS)\smbutil.obj $(OS)\smblib.obj $(OS)\lzh.obj
-
-
-# Implicit C Compile Rule
-{.;..}.c.obj:
-	@echo Compiling (I) $< to $@ ...
-	$(CC) $(CFLAGS) -n$(OS) -c $<
-
-# Main EXE Link Rule
-$(MAIN): $(OBJS)
-    	@echo Linking $< ...
-!ifdef __OS2__
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c02.obj $(OBJS) $(LIB)\wildargs.obj
-+, $*, $*, $(LIB)\os2.lib $(LIB)\c2.lib
-!else
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c0$(MODEL) $(OBJS) $(LIB)\wildargs.obj
-+, $*, $*, $(LIB)\c$(MODEL).lib $(LIB)\math$(MODEL).lib $(LIB)\emu.lib
-!endif
-
-# All .obj modules
-$(OS)\smbutil.obj:	$(HEADERS)
-$(OS)\smblib.obj:	$(HEADERS)
-$(OS)\lzh.obj:		$(HEADERS)
diff --git a/src/sbbs2/smb/smbutil/smbutil.c b/src/sbbs2/smb/smbutil/smbutil.c
deleted file mode 100644
index 3a37a93914..0000000000
--- a/src/sbbs2/smb/smbutil/smbutil.c
+++ /dev/null
@@ -1,1428 +0,0 @@
-/* SMBUTIL.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* Synchronet Message Base Utility */
-
-#define SMBUTIL_VER "2.01"
-
-#include "smblib.h"
-#include "smbutil.h"
-#include "crc32.h"
-#include "crc16.c"
-
-#ifdef __WATCOMC__
-	#include <dos.h>
-#endif
-
-/********************/
-/* Global variables */
-/********************/
-
-smb_t smb;
-ulong mode=0L;
-ushort tzone=PST;
-char filein[128];
-char attach[128];
-
-/************************/
-/* Program usage/syntax */
-/************************/
-
-char *usage=
-"usage: smbutil [/opts] cmd <filespec.SHD>\n"
-"\n"
-"cmd:\n"
-"       l[n] = list msgs starting at number n\n"
-"       r[n] = read msgs starting at number n\n"
-"       v[n] = view msg headers starting at number n\n"
-"       i<f> = import msg from text file f\n"
-"       e<f> = import e-mail from text file f\n"
-"       n<f> = import netmail from text file f\n"
-"       s    = display msg base status\n"
-"       c    = change msg base status\n"
-"       m    = maintain msg base - delete old msgs and msgs over max\n"
-"       p[k] = pack msg base (k specifies minimum packable Kbytes)\n"
-"opts:\n"
-"       a    = always pack msg base (disable compression analysis)\n"
-"       z[n] = set time zone (n=min +/- from UT or 'EST','EDT','CST',etc)\n"
-;
-
-char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
-char *mon[]={"Jan","Feb","Mar","Apr","May","Jun"
-            ,"Jul","Aug","Sep","Oct","Nov","Dec"};
-
-
-/****************************************************************************/
-/* Checks the disk drive for the existence of a file. Returns 1 if it       */
-/* exists, 0 if it doesn't.                                                 */
-/****************************************************************************/
-char fexist(char *filespec)
-{
-	struct ffblk f;
-
-if(findfirst(filespec,&f,0)==0)
-    return(1);
-return(0);
-}
-
-/****************************************************************************/
-/* Returns the length of the file in 'filespec'                             */
-/****************************************************************************/
-long flength(char *filespec)
-{
-	struct ffblk f;
-
-if(findfirst(filespec,&f,0)==0)
-#ifdef __WATCOMC__
-	return(f.size);
-#else
-	return(f.ff_fsize);
-#endif
-return(-1L);
-}
-
-void remove_re(char *str)
-{
-while(!strnicmp(str,"RE:",3)) {
-	strcpy(str,str+3);
-	while(str[0]==SP)
-		strcpy(str,str+1); }
-}
-
-/****************************************************************************/
-/* Adds a new message to the message base									*/
-/****************************************************************************/
-void postmsg(char type)
-{
-	char	str[128],buf[SDT_BLOCK_LEN];
-	ushort	xlat,net;
-	int 	i,j,k,file;
-	long	length;
-	ulong	offset,crc=0xffffffffUL;
-	FILE	*instream;
-	smbmsg_t	msg;
-
-length=flength(filein);
-if(length<1L) {
-	printf("Invalid file size for '%s'\n",filein);
-	exit(1); }
-length+=2;	/* for translation string */
-if(!(smb.status.attr&SMB_HYPERALLOC)) {
-	i=smb_open_da(&smb);
-	if(i) {
-		printf("smb_open_da returned %d\n",i);
-		exit(1); }
-	offset=smb_allocdat(&smb,length,1);
-	smb_close_da(&smb); }
-else
-	offset=smb_hallocdat(&smb);
-
-if((file=open(filein,O_RDONLY|O_BINARY))==-1
-	|| (instream=fdopen(file,"rb"))==NULL) {
-	printf("Error opening %s for read\n",filein);
-	smb_freemsgdat(&smb,offset,length,1);
-	exit(1); }
-setvbuf(instream,NULL,_IOFBF,32*1024);
-fseek(smb.sdt_fp,offset,SEEK_SET);
-xlat=XLAT_NONE;
-fwrite(&xlat,2,1,smb.sdt_fp);
-k=SDT_BLOCK_LEN-2;
-while(!feof(instream)) {
-	memset(buf,0,k);
-	j=fread(buf,1,k,instream);
-	if(smb.status.max_crcs)
-		for(i=0;i<j;i++)
-			crc=ucrc32(buf[i],crc);
-	fwrite(buf,k,1,smb.sdt_fp);
-	k=SDT_BLOCK_LEN; }
-fflush(smb.sdt_fp);
-fclose(instream);
-crc=~crc;
-
-memset(&msg,0,sizeof(smbmsg_t));
-memcpy(msg.hdr.id,"SHD\x1a",4);
-msg.hdr.version=SMB_VERSION;
-msg.hdr.when_written.time=time(NULL);
-msg.hdr.when_written.zone=tzone;
-msg.hdr.when_imported=msg.hdr.when_written;
-
-if(smb.status.max_crcs) {
-	i=smb_addcrc(&smb,crc);
-	if(i) {
-		printf("smb_addcrc returned %d\n",i);
-		smb_freemsgdat(&smb,offset,length,1);
-		exit(1); } }
-
-msg.hdr.offset=offset;
-
-printf("To User Name: ");
-gets(str);
-i=smb_hfield(&msg,RECIPIENT,strlen(str),str);
-if(i) {
-	printf("smb_hfield returned %d\n",i);
-	smb_freemsgdat(&smb,offset,length,1);
-	exit(1); }
-if(type=='E' || type=='N')
-	smb.status.attr|=SMB_EMAIL;
-if(smb.status.attr&SMB_EMAIL) {
-	printf("To User Number (0=QWKnet or Internet): ");
-	gets(str);
-	i=smb_hfield(&msg,RECIPIENTEXT,strlen(str),str);
-	if(i) {
-		printf("smb_hfield returned %d\n",i);
-		smb_freemsgdat(&smb,offset,length,1);
-		exit(1); }
-	msg.idx.to=atoi(str); }
-else {
-	strlwr(str);
-	msg.idx.to=crc16(str); }
-
-if(type=='N') {
-	printf("To Address: ");
-	gets(str);
-	if(*str) {
-		if(strchr(str,'.'))
-			net=NET_INTERNET;
-		else
-			net=NET_QWK;
-		i=smb_hfield(&msg,RECIPIENTNETTYPE,sizeof(net),&net);
-		if(i) {
-			printf("smb_hfield returned %d\n",i);
-			smb_freemsgdat(&smb,offset,length,1);
-			exit(1); }
-		i=smb_hfield(&msg,RECIPIENTNETADDR,strlen(str),str);
-		if(i) {
-			printf("smb_hfield returned %d\n",i);
-			smb_freemsgdat(&smb,offset,length,1);
-			exit(1); } } }
-
-printf("From User Name: ");
-gets(str);
-i=smb_hfield(&msg,SENDER,strlen(str),str);
-if(i) {
-	printf("smb_hfield returned %d\n",i);
-	smb_freemsgdat(&smb,offset,length,1);
-    exit(1); }
-if(smb.status.attr&SMB_EMAIL) {
-	printf("From User Number: ");
-	gets(str);
-	i=smb_hfield(&msg,SENDEREXT,strlen(str),str);
-	if(i) {
-		printf("smb_hfield returned %d\n",i);
-		smb_freemsgdat(&smb,offset,length,1);
-		exit(1); }
-	msg.idx.from=atoi(str); }
-else {
-	strlwr(str);
-	msg.idx.from=crc16(str); }
-
-printf("Subject: ");
-gets(str);
-i=smb_hfield(&msg,SUBJECT,strlen(str),str);
-if(i) {
-	printf("smb_hfield returned %d\n",i);
-	smb_freemsgdat(&smb,offset,length,1);
-    exit(1); }
-remove_re(str);
-strlwr(str);
-msg.idx.subj=crc16(str);
-
-i=smb_dfield(&msg,TEXT_BODY,length);
-if(i) {
-	printf("smb_dfield returned %d\n",i);
-	smb_freemsgdat(&smb,offset,length,1);
-	exit(1); }
-
-i=smb_addmsghdr(&smb,&msg,smb.status.attr&SMB_HYPERALLOC);
-
-if(i) {
-	printf("smb_addmsghdr returned %d\n",i);
-	smb_freemsgdat(&smb,offset,length,1);
-	exit(1); }
-smb_freemsgmem(&msg);
-
-}
-
-/****************************************************************************/
-/* Shows the message base header											*/
-/****************************************************************************/
-void showstatus()
-{
-	int i;
-
-i=smb_locksmbhdr(&smb);
-if(i) {
-	printf("smb_locksmbhdr returned %d\n",i);
-	return; }
-i=smb_getstatus(&smb);
-smb_unlocksmbhdr(&smb);
-if(i) {
-	printf("smb_getstatus returned %d\n",i);
-	return; }
-printf("last_msg        =%lu\n"
-	   "total_msgs      =%lu\n"
-	   "header_offset   =%lu\n"
-	   "max_crcs        =%lu\n"
-	   "max_msgs        =%lu\n"
-	   "max_age         =%u\n"
-	   "attr            =%04Xh\n"
-	   ,smb.status.last_msg
-	   ,smb.status.total_msgs
-	   ,smb.status.header_offset
-	   ,smb.status.max_crcs
-	   ,smb.status.max_msgs
-	   ,smb.status.max_age
-	   ,smb.status.attr
-	   );
-}
-
-/****************************************************************************/
-/* Configure message base header											*/
-/****************************************************************************/
-void config()
-{
-	char max_msgs[128],max_crcs[128],max_age[128],header_offset[128],attr[128];
-	int i;
-
-i=smb_locksmbhdr(&smb);
-if(i) {
-	printf("smb_locksmbhdr returned %d\n",i);
-	return; }
-i=smb_getstatus(&smb);
-smb_unlocksmbhdr(&smb);
-if(i) {
-	printf("smb_getstatus returned %d\n",i);
-	return; }
-printf("Header offset =%-5lu  New value (CR=No Change): "
-	,smb.status.header_offset);
-gets(header_offset);
-printf("Max msgs      =%-5lu  New value (CR=No Change): "
-	,smb.status.max_msgs);
-gets(max_msgs);
-printf("Max crcs      =%-5lu  New value (CR=No Change): "
-	,smb.status.max_crcs);
-gets(max_crcs);
-printf("Max age       =%-5u  New value (CR=No Change): "
-	,smb.status.max_age);
-gets(max_age);
-printf("Attributes    =%-5u  New value (CR=No Change): "
-	,smb.status.attr);
-gets(attr);
-i=smb_locksmbhdr(&smb);
-if(i) {
-	printf("smb_locksmbhdr returned %d\n",i);
-	return; }
-i=smb_getstatus(&smb);
-if(i) {
-	printf("smb_getstatus returned %d\n",i);
-	smb_unlocksmbhdr(&smb);
-    return; }
-if(isdigit(max_msgs[0]))
-	smb.status.max_msgs=atol(max_msgs);
-if(isdigit(max_crcs[0]))
-	smb.status.max_crcs=atol(max_crcs);
-if(isdigit(max_age[0]))
-	smb.status.max_age=atoi(max_age);
-if(isdigit(header_offset[0]))
-	smb.status.header_offset=atol(header_offset);
-if(isdigit(attr[0]))
-	smb.status.attr=atoi(attr);
-i=smb_putstatus(&smb);
-smb_unlocksmbhdr(&smb);
-if(i)
-	printf("smb_putstatus returned %d\n",i);
-}
-
-/****************************************************************************/
-/* Lists messages' to, from, and subject                                    */
-/****************************************************************************/
-void listmsgs(ulong start, ulong count)
-{
-	int i;
-	ulong l=0;
-	smbmsg_t msg;
-	idxrec_t idxrec;
-
-if(!start)
-	start=1;
-fseek(smb.sid_fp,(start-1L)*sizeof(idxrec_t),SEEK_SET);
-while(l<count) {
-	if(!fread(&msg.idx,1,sizeof(idxrec_t),smb.sid_fp))
-		break;
-	i=smb_lockmsghdr(&smb,&msg);
-	if(i) {
-		printf("smb_lockmsghdr returned %d\n",i);
-		break; }
-	i=smb_getmsghdr(&smb,&msg);
-	smb_unlockmsghdr(&smb,&msg);
-	if(i) {
-		printf("smb_getmsghdr returned %d\n",i);
-		break; }
-	printf("%4lu %-25.25s %-25.25s %.20s\n"
-		,msg.hdr.number,msg.from,msg.to,msg.subj);
-	smb_freemsgmem(&msg);
-	l++; }
-}
-
-/****************************************************************************/
-/* Returns an ASCII string for FidoNet address 'addr'                       */
-/****************************************************************************/
-char *faddrtoa(fidoaddr_t addr)
-{
-	static char str[25];
-	char point[25];
-
-sprintf(str,"%u:%u/%u",addr.zone,addr.net,addr.node);
-if(addr.point) {
-	sprintf(point,".%u",addr.point);
-	strcat(str,point); }
-return(str);
-}
-
-char *binstr(uchar *buf, ushort length)
-{
-	static char str[128];
-	char tmp[128];
-	int i;
-
-str[0]=0;
-for(i=0;i<length;i++)
-	if(buf[i] && (buf[i]<SP || buf[i]>=0x7f))
-		break;
-if(i==length)		/* not binary */
-	return(buf);
-for(i=0;i<length;i++) {
-	sprintf(tmp,"%02X ",buf[i]);
-	strcat(str,tmp); }
-return(str);
-}
-
-/****************************************************************************/
-/* Generates a 24 character ASCII string that represents the time_t pointer */
-/* Used as a replacement for ctime()                                        */
-/****************************************************************************/
-char *timestr(time_t *intime)
-{
-    static char str[256];
-    char mer[3],hour;
-    struct tm *gm;
-
-printf("before localtime\n");
-gm=localtime(intime);
-printf("after\n");
-if(gm==NULL) {
-	strcpy(str,"Invalid Time");
-	return(str); }
-if(gm->tm_hour>=12) {
-    if(gm->tm_hour==12)
-        hour=12;
-    else
-        hour=gm->tm_hour-12;
-    strcpy(mer,"pm"); }
-else {
-    if(gm->tm_hour==0)
-        hour=12;
-    else
-        hour=gm->tm_hour;
-    strcpy(mer,"am"); }
-sprintf(str,"%s %s %02d %4d %02d:%02d %s"
-    ,wday[gm->tm_wday],mon[gm->tm_mon],gm->tm_mday,1900+gm->tm_year
-    ,hour,gm->tm_min,mer);
-return(str);
-}
-
-
-/****************************************************************************/
-/* Converts when_t.zone into ASCII format									*/
-/****************************************************************************/
-char *zonestr(short zone)
-{
-	static char str[32];
-
-switch((ushort)zone) {
-	case 0: 	return("UT");
-	case AST:	return("AST");
-	case EST:	return("EST");
-	case CST:	return("CST");
-	case MST:	return("MST");
-	case PST:	return("PST");
-	case YST:	return("YST");
-	case HST:	return("HST");
-	case BST:	return("BST");
-	case ADT:	return("ADT");
-	case EDT:	return("EDT");
-	case CDT:	return("CDT");
-	case MDT:	return("MDT");
-	case PDT:	return("PDT");
-	case YDT:	return("YDT");
-	case HDT:	return("HDT");
-	case BDT:	return("BDT");
-	case MID:	return("MID");
-	case VAN:	return("VAN");
-	case EDM:	return("EDM");
-	case WIN:	return("WIN");
-	case BOG:	return("BOG");
-	case CAR:	return("CAR");
-	case RIO:	return("RIO");
-	case FER:	return("FER");
-	case AZO:	return("AZO");
-	case LON:	return("LON");
-	case BER:	return("BER");
-	case ATH:	return("ATH");
-	case MOS:	return("MOS");
-	case DUB:	return("DUB");
-	case KAB:	return("KAB");
-	case KAR:	return("KAR");
-	case BOM:	return("BOM");
-	case KAT:	return("KAT");
-	case DHA:	return("DHA");
-	case BAN:	return("BAN");
-	case HON:	return("HON");
-	case TOK:	return("TOK");
-	case SYD:	return("SYD");
-	case NOU:	return("NOU");
-	case WEL:	return("WEL");
-	}
-
-sprintf(str,"%02d:%02u",zone/60,zone<0 ? (-zone)%60 : zone%60);
-return(str);
-}
-			 
-
-/****************************************************************************/
-/* Displays message header information										*/
-/****************************************************************************/
-void viewmsgs(ulong start, ulong count)
-{
-	char when_written[128]
-		,when_imported[128];
-	int i;
-	ulong l=0;
-	smbmsg_t msg;
-	idxrec_t idxrec;
-
-if(!start)
-	start=1;
-fseek(smb.sid_fp,(start-1L)*sizeof(idxrec_t),SEEK_SET);
-while(l<count) {
-	if(!fread(&msg.idx,1,sizeof(idxrec_t),smb.sid_fp))
-		break;
-	i=smb_lockmsghdr(&smb,&msg);
-	if(i) {
-		printf("smb_lockmsghdr returned %d\n",i);
-		break; }
-	i=smb_getmsghdr(&smb,&msg);
-	smb_unlockmsghdr(&smb,&msg);
-	if(i) {
-		printf("smb_getmsghdr returned %d\n",i);
-		break; }
-
-	sprintf(when_written,"%.24s %s"
-		,timestr((time_t *)msg.hdr.when_written.time)
-		,zonestr(msg.hdr.when_written.zone));
-	sprintf(when_imported,"%.24s %s"
-		,timestr((time_t *)msg.hdr.when_imported.time)
-		,zonestr(msg.hdr.when_imported.zone));
-
-	printf( "%-20.20s %s\n"
-			"%-20.20s %s\n"
-            "%-20.20s %s\n"
-			"%-20.20s %04Xh\n"
-			"%-20.20s %04Xh\n"
-			"%-20.20s %u\n"
-			"%-20.20s %04Xh\n"
-			"%-20.20s %08lXh\n"
-			"%-20.20s %08lXh\n"
-			"%-20.20s %s\n"
-			"%-20.20s %s\n"
-			"%-20.20s %ld (%ld)\n"
-			"%-20.20s %ld\n"
-			"%-20.20s %ld\n"
-			"%-20.20s %ld\n"
-			"%-20.20s %s\n"
-			"%-20.20s %06lXh\n"
-			"%-20.20s %u\n",
-
-		"subj",
-		msg.subj,
-
-		"from",
-		msg.from,
-
-		"to",
-		msg.to,
-
-		"type",
-		msg.hdr.type,
-
-		"version",
-		msg.hdr.version,
-
-		"length",
-		msg.hdr.length,
-
-		"attr",
-		msg.hdr.attr,
-
-		"auxattr",
-		msg.hdr.auxattr,
-
-		"netattr",
-		msg.hdr.netattr,
-
-		"when_written",
-		when_written,
-
-		"when_imported",
-		when_imported,
-
-		"number",
-		msg.hdr.number,
-		ftell(smb.sid_fp)/sizeof(idxrec_t),
-
-		"thread_orig",
-		msg.hdr.thread_orig,
-
-		"thread_next",
-		msg.hdr.thread_next,
-
-		"thread_first",
-		msg.hdr.thread_first,
-
-		"reserved[16]",
-		binstr(msg.hdr.reserved,16),
-
-		"offset",
-		msg.hdr.offset,
-
-		"total_dfields",
-		msg.hdr.total_dfields
-		);
-	for(i=0;i<msg.hdr.total_dfields;i++)
-		printf("dfield[%02u].type      %02Xh\n"
-			   "dfield[%02u].offset    %lu\n"
-			   "dfield[%02u].length    %lu\n"
-			   ,i,msg.dfield[i].type
-			   ,i,msg.dfield[i].offset
-			   ,i,msg.dfield[i].length);
-
-	for(i=0;i<msg.total_hfields;i++)
-		printf("hfield[%02u].type      %02Xh\n"
-			   "hfield[%02u].length    %d\n"
-			   "hfield[%02u]_dat       %s\n"
-			   ,i,msg.hfield[i].type
-			   ,i,msg.hfield[i].length
-			   ,i,binstr(msg.hfield_dat[i],msg.hfield[i].length));
-
-	if(msg.from_net.type)
-		printf("from_net.type        %02Xh\n"
-			   "from_net.addr        %s\n"
-			,msg.from_net.type
-			,msg.from_net.type==NET_FIDO
-			? faddrtoa(*(fidoaddr_t *)msg.from_net.addr) : msg.from_net.addr);
-
-	if(msg.to_net.type)
-		printf("to_net.type          %02Xh\n"
-			   "to_net.addr          %s\n"
-			,msg.to_net.type
-			,msg.to_net.type==NET_FIDO
-			? faddrtoa(*(fidoaddr_t *)msg.to_net.addr) : msg.to_net.addr);
-
-	if(msg.replyto_net.type)
-		printf("replyto_net.type     %02Xh\n"
-			   "replyto_net.addr     %s\n"
-			,msg.replyto_net.type
-			,msg.replyto_net.type==NET_FIDO
-			? faddrtoa(*(fidoaddr_t *)msg.replyto_net.addr)
-				: msg.replyto_net.addr);
-
-	printf("from_agent           %02Xh\n"
-		   "to_agent             %02Xh\n"
-		   "replyto_agent        %02Xh\n"
-		   ,msg.from_agent
-		   ,msg.to_agent
-		   ,msg.replyto_agent);
-
-	printf("\n");
-	smb_freemsgmem(&msg);
-	l++; }
-}
-
-/****************************************************************************/
-/* Maintain message base - deletes messages older than max age (in days)	*/
-/* or messages that exceed maximum											*/
-/****************************************************************************/
-void maint(void)
-{
-	int i;
-	ulong l,m,n,f,flagged=0;
-	time_t now;
-	smbmsg_t msg;
-	idxrec_t HUGE16 *idx;
-
-printf("Maintaining %s\r\n",smb.file);
-now=time(NULL);
-i=smb_locksmbhdr(&smb);
-if(i) {
-	printf("smb_locksmbhdr returned %d\n",i);
-	return; }
-i=smb_getstatus(&smb);
-if(i) {
-	smb_unlocksmbhdr(&smb);
-	printf("smb_getstatus returned %d\n",i);
-	return; }
-if(!smb.status.total_msgs) {
-	smb_unlocksmbhdr(&smb);
-	printf("Empty\n");
-	return; }
-printf("Loading index...\n");
-if((idx=(idxrec_t *)LMALLOC(sizeof(idxrec_t)*smb.status.total_msgs))
-	==NULL) {
-	smb_unlocksmbhdr(&smb);
-	printf("can't allocate %lu bytes of memory\n"
-		,sizeof(idxrec_t)*smb.status.total_msgs);
-	return; }
-fseek(smb.sid_fp,0L,SEEK_SET);
-for(l=0;l<smb.status.total_msgs;l++) {
-	printf("%lu of %lu\r"
-		,l+1,smb.status.total_msgs);
-	if(!fread(&idx[l],1,sizeof(idxrec_t),smb.sid_fp))
-		break; }
-printf("\nDone.\n\n");
-
-printf("Scanning for pre-flagged messages...\n");
-for(m=0;m<l;m++) {
-	printf("\r%2u%%",m ? (long)(100.0/((float)l/m)) : 0);
-	if(idx[m].attr&MSG_DELETE)
-		flagged++; }
-printf("\r100%% (%lu pre-flagged for deletion)\n",flagged);
-
-if(smb.status.max_age) {
-	printf("Scanning for messages more than %u days old...\n"
-		,smb.status.max_age);
-	for(m=f=0;m<l;m++) {
-		printf("\r%2u%%",m ? (long)(100.0/((float)l/m)) : 0);
-		if(idx[m].attr&(MSG_PERMANENT|MSG_DELETE))
-			continue;
-		if(now>idx[m].time && (now-idx[m].time)/(24L*60L*60L)
-			>smb.status.max_age) {
-			f++;
-			flagged++;
-			idx[m].attr|=MSG_DELETE; } }  /* mark for deletion */
-	printf("\r100%% (%lu flagged for deletion)\n",f); }
-
-printf("Scanning for read messages to be killed...\n");
-for(m=f=0;m<l;m++) {
-	printf("\r%2u%%",m ? (long)(100.0/((float)l/m)) : 0);
-	if(idx[m].attr&(MSG_PERMANENT|MSG_DELETE))
-		continue;
-	if((idx[m].attr&(MSG_READ|MSG_KILLREAD))==(MSG_READ|MSG_KILLREAD)) {
-		f++;
-		flagged++;
-		idx[m].attr|=MSG_DELETE; } }
-printf("\r100%% (%lu flagged for deletion)\n",f);
-
-if(l-flagged>smb.status.max_msgs) {
-	printf("Flagging excess messages for deletion...\n");
-	for(m=n=0,f=flagged;l-flagged>smb.status.max_msgs && m<l;m++) {
-		if(idx[m].attr&(MSG_PERMANENT|MSG_DELETE))
-			continue;
-		printf("%lu of %lu\r",++n,(l-f)-smb.status.max_msgs);
-		flagged++;
-		idx[m].attr|=MSG_DELETE; }			/* mark for deletion */
-	printf("\nDone.\n\n"); }
-
-if(!flagged) {				/* No messages to delete */
-	LFREE(idx);
-	smb_unlocksmbhdr(&smb);
-	return; }
-
-if(!(mode&NOANALYSIS)) {
-
-	printf("Freeing allocated header and data blocks for deleted messages...\n");
-	if(!(smb.status.attr&SMB_HYPERALLOC)) {
-		i=smb_open_da(&smb);
-		if(i) {
-			smb_unlocksmbhdr(&smb);
-			printf("smb_open_da returned %d\n",i);
-			exit(1); }
-		i=smb_open_ha(&smb);
-		if(i) {
-			smb_unlocksmbhdr(&smb);
-			printf("smb_open_ha returned %d\n",i);
-			exit(1); } }
-
-	for(m=n=0;m<l;m++) {
-		if(idx[m].attr&MSG_DELETE) {
-			printf("%lu of %lu\r",++n,flagged);
-			msg.idx=idx[m];
-			msg.hdr.number=msg.idx.number;
-			if((i=smb_getmsgidx(&smb,&msg))!=0) {
-				printf("\nsmb_getmsgidx returned %d\n",i);
-				continue; }
-			i=smb_lockmsghdr(&smb,&msg);
-			if(i) {
-				printf("\nsmb_lockmsghdr returned %d\n",i);
-				break; }
-			if((i=smb_getmsghdr(&smb,&msg))!=0) {
-				smb_unlockmsghdr(&smb,&msg);
-				printf("\nsmb_getmsghdr returned %d\n",i);
-				break; }
-			msg.hdr.attr|=MSG_DELETE;			/* mark header as deleted */
-			if((i=smb_putmsg(&smb,&msg))!=0) {
-				smb_freemsgmem(&msg);
-				smb_unlockmsghdr(&smb,&msg);
-				printf("\nsmb_putmsg returned %d\n",i);
-				break; }
-			smb_unlockmsghdr(&smb,&msg);
-			if((i=smb_freemsg(&smb,&msg))!=0) {
-				smb_freemsgmem(&msg);
-				printf("\nsmb_freemsg returned %d\n",i);
-				break; }
-			smb_freemsgmem(&msg); } }
-	if(!(smb.status.attr&SMB_HYPERALLOC)) {
-		smb_close_ha(&smb);
-		smb_close_da(&smb); }
-	printf("\nDone.\n\n"); }
-
-printf("Re-writing index...\n");
-rewind(smb.sid_fp);
-if(chsize(fileno(smb.sid_fp),0L))
-	printf("chsize failed!\n");
-for(m=n=0;m<l;m++) {
-	if(idx[m].attr&MSG_DELETE)
-		continue;
-	printf("%lu of %lu\r",++n,l-flagged);
-	fwrite(&idx[m],sizeof(idxrec_t),1,smb.sid_fp); }
-printf("\nDone.\n\n");
-fflush(smb.sid_fp);
-
-LFREE(idx);
-smb.status.total_msgs-=flagged;
-smb_putstatus(&smb);
-smb_unlocksmbhdr(&smb);
-}
-
-
-typedef struct {
-	ulong old,new;
-	} datoffset_t;
-
-/****************************************************************************/
-/* Removes all unused blocks from SDT and SHD files 						*/
-/****************************************************************************/
-void packmsgs(ulong packable)
-{
-	uchar str[128],buf[SDT_BLOCK_LEN],ch,fname[128],tmpfname[128];
-	int i,file,size;
-	ulong l,m,n,datoffsets=0,length,total,now;
-	FILE *tmp_sdt,*tmp_shd,*tmp_sid;
-	smbhdr_t	hdr;
-	smbmsg_t	msg;
-	datoffset_t *datoffset=NULL;
-
-now=time(NULL);
-printf("Packing %s\n",smb.file);
-i=smb_locksmbhdr(&smb);
-if(i) {
-	printf("smb_locksmbhdr returned %d\n",i);
-	return; }
-i=smb_getstatus(&smb);
-if(i) {
-	smb_unlocksmbhdr(&smb);
-	printf("smb_getstatus returned %d\n",i);
-    return; }
-
-if(!(smb.status.attr&SMB_HYPERALLOC)) {
-	i=smb_open_ha(&smb);
-	if(i) {
-		smb_unlocksmbhdr(&smb);
-		printf("smb_open_ha returned %d\n",i);
-		return; }
-	i=smb_open_da(&smb);
-	if(i) {
-		smb_unlocksmbhdr(&smb);
-		smb_close_ha(&smb);
-		printf("smb_open_da returned %d\n",i);
-		return; } }
-
-if(!smb.status.total_msgs) {
-    printf("Empty\n");
-	rewind(smb.shd_fp);
-	chsize(fileno(smb.shd_fp),smb.status.header_offset);
-	rewind(smb.sdt_fp);
-	chsize(fileno(smb.sdt_fp),0L);
-	rewind(smb.sid_fp);
-	chsize(fileno(smb.sid_fp),0L);
-	if(!(smb.status.attr&SMB_HYPERALLOC)) {
-		rewind(smb.sha_fp);
-		chsize(fileno(smb.sha_fp),0L);
-		rewind(smb.sda_fp);
-		chsize(fileno(smb.sda_fp),0L);
-		smb_close_ha(&smb);
-		smb_close_da(&smb); }
-	smb_unlocksmbhdr(&smb);
-    return; }
-
-
-if(!(smb.status.attr&SMB_HYPERALLOC) && !(mode&NOANALYSIS)) {
-    printf("Analyzing data blocks...\n");
-
-	length=filelength(fileno(smb.sda_fp));
-
-	fseek(smb.sda_fp,0L,SEEK_SET);
-    for(l=m=0;l<length;l+=2) {
-        printf("\r%2u%%  ",l ? (long)(100.0/((float)length/l)) : 0);
-        i=0;
-		if(!fread(&i,2,1,smb.sda_fp))
-            break;
-        if(!i)
-            m++; }
-
-    printf("\rAnalyzing header blocks...\n");
-
-	length=filelength(fileno(smb.sha_fp));
-
-	fseek(smb.sha_fp,0L,SEEK_SET);
-    for(l=n=0;l<length;l++) {
-        printf("\r%2u%%  ",l ? (long)(100.0/((float)length/l)) : 0);
-		ch=0;
-		if(!fread(&ch,1,1,smb.sha_fp))
-            break;
-		if(!ch)
-            n++; }
-
-    if(!m && !n) {
-		printf("\rAlready compressed.\n\n");
-		smb_close_ha(&smb);
-		smb_close_da(&smb);
-		smb_unlocksmbhdr(&smb);
-        return; }
-
-	if(packable && (m*SDT_BLOCK_LEN)+(n*SHD_BLOCK_LEN)<packable*1024L) {
-		printf("\rLess than %luk compressable bytes.\n\n",packable);
-		smb_close_ha(&smb);
-		smb_close_da(&smb);
-		smb_unlocksmbhdr(&smb);
-		return; }
-
-	printf("\rCompressing %lu data blocks (%lu bytes)\n"
-			 "        and %lu header blocks (%lu bytes)\n"
-			  ,m,m*SDT_BLOCK_LEN,n,n*SHD_BLOCK_LEN); }
-
-if(!(smb.status.attr&SMB_HYPERALLOC)) {
-	rewind(smb.sha_fp);
-	chsize(fileno(smb.sha_fp),0L);		/* Reset both allocation tables */
-	rewind(smb.sda_fp);
-	chsize(fileno(smb.sda_fp),0L); }
-
-if(smb.status.attr&SMB_HYPERALLOC && !(mode&NOANALYSIS)) {
-	printf("Analyzing %s\n",smb.file);
-
-	length=filelength(fileno(smb.shd_fp));
-	m=n=0;
-	for(l=smb.status.header_offset;l<length;l+=size) {
-		printf("\r%2u%%  ",(long)(100.0/((float)length/l)));
-		msg.idx.offset=l;
-		if((i=smb_lockmsghdr(&smb,&msg))!=0) {
-			printf("\n(%06lX) smb_lockmsghdr returned %d\n",l,i);
-			size=SHD_BLOCK_LEN;
-			continue; }
-		if((i=smb_getmsghdr(&smb,&msg))!=0) {
-			smb_unlockmsghdr(&smb,&msg);
-			m++;
-			size=SHD_BLOCK_LEN;
-			continue; }
-		smb_unlockmsghdr(&smb,&msg);
-		if(msg.hdr.attr&MSG_DELETE) {
-			m+=smb_hdrblocks(msg.hdr.length);
-			total=0;
-			for(i=0;i<msg.hdr.total_dfields;i++)
-				total+=msg.dfield[i].length;
-			n+=smb_datblocks(total); }
-		size=smb_getmsghdrlen(&msg);
-		if(size<1) size=SHD_BLOCK_LEN;
-		while(size%SHD_BLOCK_LEN)
-			size++;
-		smb_freemsgmem(&msg); }
-
-
-    if(!m && !n) {
-		printf("\rAlready compressed.\n\n");
-		smb_unlocksmbhdr(&smb);
-        return; }
-
-	if(packable && (n*SDT_BLOCK_LEN)+(m*SHD_BLOCK_LEN)<packable*1024L) {
-		printf("\rLess than %luk compressable bytes.\n\n",packable);
-		smb_unlocksmbhdr(&smb);
-		return; }
-
-	printf("\rCompressing %lu data blocks (%lu bytes)\n"
-			 "        and %lu header blocks (%lu bytes)\n"
-			  ,n,n*SDT_BLOCK_LEN,m,m*SHD_BLOCK_LEN); }
-
-sprintf(fname,"%s.SD$",smb.file);
-tmp_sdt=fopen(fname,"wb");
-sprintf(fname,"%s.SH$",smb.file);
-tmp_shd=fopen(fname,"wb");
-sprintf(fname,"%s.SI$",smb.file);
-tmp_sid=fopen(fname,"wb");
-if(!tmp_sdt || !tmp_shd || !tmp_sid) {
-	smb_unlocksmbhdr(&smb);
-	if(!(smb.status.attr&SMB_HYPERALLOC)) {
-		smb_close_ha(&smb);
-		smb_close_da(&smb); }
-	printf("error opening temp file\n");
-	return; }
-setvbuf(tmp_sdt,NULL,_IOFBF,2*1024);
-setvbuf(tmp_shd,NULL,_IOFBF,2*1024);
-setvbuf(tmp_sid,NULL,_IOFBF,2*1024);
-if(!(smb.status.attr&SMB_HYPERALLOC)
-	&& (datoffset=(datoffset_t *)LMALLOC(sizeof(datoffset_t)*smb.status.total_msgs))
-	==NULL) {
-	smb_unlocksmbhdr(&smb);
-	smb_close_ha(&smb);
-	smb_close_da(&smb);
-	fclose(tmp_sdt);
-	fclose(tmp_shd);
-	fclose(tmp_sid);
-	printf("error allocating mem\n");
-    return; }
-fseek(smb.shd_fp,0L,SEEK_SET);
-fread(&hdr,1,sizeof(smbhdr_t),smb.shd_fp);
-fwrite(&hdr,1,sizeof(smbhdr_t),tmp_shd);
-fwrite(&(smb.status),1,sizeof(smbstatus_t),tmp_shd);
-for(l=sizeof(smbhdr_t)+sizeof(smbstatus_t);l<smb.status.header_offset;l++) {
-	fread(&ch,1,1,smb.shd_fp);			/* copy additional base header records */
-	fwrite(&ch,1,1,tmp_shd); }
-fseek(smb.sid_fp,0L,SEEK_SET);
-total=0;
-for(l=0;l<smb.status.total_msgs;l++) {
-	printf("%lu of %lu\r",l+1,smb.status.total_msgs);
-	if(!fread(&msg.idx,1,sizeof(idxrec_t),smb.sid_fp))
-		break;
-	if(msg.idx.attr&MSG_DELETE) {
-		printf("\nDeleted index.\n");
-		continue; }
-	i=smb_lockmsghdr(&smb,&msg);
-	if(i) {
-		printf("\nsmb_lockmsghdr returned %d\n",i);
-		continue; }
-	i=smb_getmsghdr(&smb,&msg);
-	smb_unlockmsghdr(&smb,&msg);
-	if(i) {
-		printf("\nsmb_getmsghdr returned %d\n",i);
-		continue; }
-	if(msg.hdr.attr&MSG_DELETE) {
-		printf("\nDeleted header.\n");
-		smb_freemsgmem(&msg);
-		continue; }
-	if(msg.expiration.time && msg.expiration.time<=now) {
-		printf("\nExpired message.\n");
-		smb_freemsgmem(&msg);
-		continue; }
-	for(m=0;m<datoffsets;m++)
-		if(msg.hdr.offset==datoffset[m].old)
-			break;
-	if(m<datoffsets) {				/* another index pointed to this data */
-		printf("duplicate index\n");
-		msg.hdr.offset=datoffset[m].new;
-		smb_incdat(&smb,datoffset[m].new,smb_getmsgdatlen(&msg),1); }
-	else {
-
-		if(!(smb.status.attr&SMB_HYPERALLOC))
-			datoffset[datoffsets].old=msg.hdr.offset;
-
-		fseek(smb.sdt_fp,msg.hdr.offset,SEEK_SET);
-
-		m=smb_getmsgdatlen(&msg);
-        if(m>16L*1024L*1024L) {
-            printf("\nInvalid data length (%lu)\n",m);
-            continue; }
-
-		if(!(smb.status.attr&SMB_HYPERALLOC)) {
-			datoffset[datoffsets].new=msg.hdr.offset
-				=smb_fallocdat(&smb,m,1);
-			datoffsets++;
-			fseek(tmp_sdt,msg.hdr.offset,SEEK_SET); }
-		else {
-			fseek(tmp_sdt,0L,SEEK_END);
-			msg.hdr.offset=ftell(tmp_sdt); }
-
-		/* Actually copy the data */
-
-		n=smb_datblocks(m);
-		for(m=0;m<n;m++) {
-			fread(buf,1,SDT_BLOCK_LEN,smb.sdt_fp);
-			if(!m && *(ushort *)buf!=XLAT_NONE && *(ushort *)buf!=XLAT_LZH) {
-				printf("\nUnsupported translation type (%04X)\n"
-					,*(ushort *)buf);
-				break; }
-			fwrite(buf,1,SDT_BLOCK_LEN,tmp_sdt); }
-		if(m<n)
-			continue; }
-
-	/* Write the new index entry */
-	length=smb_getmsghdrlen(&msg);
-	if(smb.status.attr&SMB_HYPERALLOC)
-		msg.idx.offset=ftell(tmp_shd);
-	else
-		msg.idx.offset=smb_fallochdr(&smb,length)+smb.status.header_offset;
-	msg.idx.number=msg.hdr.number;
-	msg.idx.attr=msg.hdr.attr;
-	msg.idx.time=msg.hdr.when_imported.time;
-	sprintf(str,"%.128s",msg.subj);
-	strlwr(str);
-	remove_re(str);
-	msg.idx.subj=crc16(str);
-	if(smb.status.attr&SMB_EMAIL) {
-		if(msg.to_ext)
-			msg.idx.to=atoi(msg.to_ext);
-		else
-			msg.idx.to=0;
-		if(msg.from_ext)
-			msg.idx.from=atoi(msg.from_ext);
-		else
-			msg.idx.from=0; }
-	else {
-		sprintf(str,"%.128s",msg.to);
-		strlwr(str);
-		msg.idx.to=crc16(str);
-		sprintf(str,"%.128s",msg.from);
-		strlwr(str);
-		msg.idx.from=crc16(str); }
-	fwrite(&msg.idx,1,sizeof(idxrec_t),tmp_sid);
-
-	/* Write the new header entry */
-	fseek(tmp_shd,msg.idx.offset,SEEK_SET);
-	fwrite(&msg.hdr,1,sizeof(msghdr_t),tmp_shd);
-	for(n=0;n<msg.hdr.total_dfields;n++)
-		fwrite(&msg.dfield[n],1,sizeof(dfield_t),tmp_shd);
-	for(n=0;n<msg.total_hfields;n++) {
-		fwrite(&msg.hfield[n],1,sizeof(hfield_t),tmp_shd);
-		fwrite(msg.hfield_dat[n],1,msg.hfield[n].length,tmp_shd); }
-	while(length%SHD_BLOCK_LEN) {	/* pad with NULLs */
-		fputc(0,tmp_shd);
-		length++; }
-	total++;
-	smb_freemsgmem(&msg); }
-
-if(datoffset)
-	LFREE(datoffset);
-if(!(smb.status.attr&SMB_HYPERALLOC)) {
-	smb_close_ha(&smb);
-	smb_close_da(&smb); }
-
-/* Change *.SH$ into *.SHD */
-fclose(smb.shd_fp);
-fclose(tmp_shd);
-sprintf(fname,"%s.SHD",smb.file);
-remove(fname);
-sprintf(tmpfname,"%s.SH$",smb.file);
-rename(tmpfname,fname);
-
-/* Change *.SD$ into *.SDT */
-fclose(smb.sdt_fp);
-fclose(tmp_sdt);
-sprintf(fname,"%s.SDT",smb.file);
-remove(fname);
-sprintf(tmpfname,"%s.SD$",smb.file);
-rename(tmpfname,fname);
-
-/* Change *.SI$ into *.SID */
-fclose(smb.sid_fp);
-fclose(tmp_sid);
-sprintf(fname,"%s.SID",smb.file);
-remove(fname);
-sprintf(tmpfname,"%s.SI$",smb.file);
-rename(tmpfname,fname);
-
-if((i=smb_open(&smb))!=0) {
-	printf("Error %d reopening %s\n",i,smb.file);
-	return; }
-
-smb.status.total_msgs=total;
-if((i=smb_putstatus(&smb))!=0)
-	printf("\nsmb_putstatus returned %d\n",i);
-printf("\nDone.\n\n");
-}
-
-
-/****************************************************************************/
-/* Read messages in message base											*/
-/****************************************************************************/
-void readmsgs(ulong start)
-{
-	char	str[128],HUGE16 *inbuf,*outbuf;
-	int 	i,ch,done=0,domsg=1,lzh;
-	ushort	xlat;
-	ulong	l,count,outlen;
-	smbmsg_t msg;
-
-if(start)
-	msg.offset=start-1;
-else
-	msg.offset=0;
-while(!done) {
-	if(domsg) {
-		fseek(smb.sid_fp,msg.offset*sizeof(idxrec_t),SEEK_SET);
-		if(!fread(&msg.idx,1,sizeof(idxrec_t),smb.sid_fp))
-			break;
-		i=smb_lockmsghdr(&smb,&msg);
-		if(i) {
-			printf("smb_lockmsghdr returned %d\n",i);
-			break; }
-		i=smb_getmsghdr(&smb,&msg);
-		if(i) {
-			printf("smb_getmsghdr returned %d\n",i);
-			break; }
-
-		printf("\n%lu (%lu)\n",msg.hdr.number,msg.offset+1);
-		printf("Subj : %s\n",msg.subj);
-		printf("To   : %s",msg.to);
-		if(msg.to_net.type)
-			printf(" (%s)",msg.to_net.type==NET_FIDO
-				? faddrtoa(*(fidoaddr_t *)msg.to_net.addr) : msg.to_net.addr);
-		printf("\nFrom : %s",msg.from);
-		if(msg.from_net.type)
-			printf(" (%s)",msg.from_net.type==NET_FIDO
-				? faddrtoa(*(fidoaddr_t *)msg.from_net.addr)
-					: msg.from_net.addr);
-#if 1
-		printf("\nDate : %.24s %s"
-			,timestr((time_t *)msg.hdr.when_written.time)
-			,zonestr(msg.hdr.when_written.zone));
-#endif
-		printf("\n\n");
-#if 0
-		for(i=0;i<msg.hdr.total_dfields;i++)
-			switch(msg.dfield[i].type) {
-				case TEXT_BODY:
-				case TEXT_TAIL:
-					fseek(smb.sdt_fp,msg.hdr.offset+msg.dfield[i].offset
-						,SEEK_SET);
-					fread(&xlat,2,1,smb.sdt_fp);
-					l=2;
-					lzh=0;
-					while(xlat!=XLAT_NONE) {
-						if(xlat==XLAT_LZH)
-							lzh=1;
-						fread(&xlat,2,1,smb.sdt_fp);
-						l+=2; }
-					if(lzh) {
-						if((inbuf=(char *)LMALLOC(msg.dfield[i].length))
-							==NULL) {
-							printf("Malloc error of %lu\n"
-								,msg.dfield[i].length);
-							exit(1); }
-						fread(inbuf,msg.dfield[i].length-l,1,smb.sdt_fp);
-						outlen=*(long *)inbuf;
-						if((outbuf=(char *)LMALLOC(outlen))==NULL) {
-							printf("Malloc error of lzh %lu\n"
-								,outlen);
-							exit(1); }
-						lzh_decode(inbuf,msg.dfield[i].length-l,outbuf);
-						LFREE(inbuf);
-						for(l=0;l<outlen;l++)
-							putchar(outbuf[l]);
-						LFREE(outbuf); }
-					else {
-						for(;l<msg.dfield[i].length;l++) {
-							ch=fgetc(smb.sdt_fp);
-							if(ch)
-								putchar(ch); } }
-					printf("\n");
-					break; }
-#else
-		if((inbuf=smb_getmsgtxt(&smb,&msg,GETMSGTXT_TAILS))!=NULL) {
-			printf("%s",inbuf);
-			FREE(inbuf); }
-#endif
-		i=smb_unlockmsghdr(&smb,&msg);
-        if(i) {
-			printf("smb_unlockmsghdr returned %d\n",i);
-			break; }
-		smb_freemsgmem(&msg); }
-	domsg=1;
-	printf("\nReading %s (?=Menu): ",smb.file);
-	switch(toupper(getch())) {
-		case '?':
-			printf("\n"
-				   "\n"
-				   "(R)e-read current message\n"
-				   "(L)ist messages\n"
-				   "(T)en more titles\n"
-				   "(V)iew message headers\n"
-				   "(Q)uit\n"
-				   "(+/-) Forward/Backward\n"
-				   "\n");
-			domsg=0;
-			break;
-		case 'Q':
-			printf("Quit\n");
-			done=1;
-			break;
-		case 'R':
-			printf("Re-read\n");
-			break;
-		case '-':
-			printf("Backwards\n");
-			if(msg.offset)
-				msg.offset--;
-			break;
-		case 'T':
-			printf("Ten titles\n");
-			listmsgs(msg.offset+2,10);
-			msg.offset+=10;
-			domsg=0;
-			break;
-		case 'L':
-			printf("List messages\n");
-			listmsgs(1,-1);
-			domsg=0;
-			break;
-		case 'V':
-			printf("View message headers\n");
-			viewmsgs(1,-1);
-			domsg=0;
-			break;
-		case CR:
-		case '+':
-			printf("Next\n");
-			msg.offset++;
-			break; } }
-}
-
-/***************/
-/* Entry point */
-/***************/
-int main(int argc, char **argv)
-{
-	char cmd[128]="",*p,*s;
-	int i,j,x,y;
-	ulong l;
-
-#ifdef __TURBOC__
-	timezone=0; 		/* Fix for Borland C++ EST default */
-	daylight=0; 		/* Fix for Borland C++ EDT default */
-#elif defined(__WATCOMC__)
-	putenv("TZ=UCT0");  /* Fix for Watcom C++ EDT default */
-#endif
-setvbuf(stdout,0,_IONBF,0);
-
-smb.file[0]=0;
-printf("\nSMBUTIL Version %s (%s) SMBLIB %s � Synchronet Message Base "\
-	"Utility\n\n"
-	,SMBUTIL_VER
-#if defined(__OS2__)
-	,"OS/2"
-#elif defined(__NT__)
-	,"Win32"
-#elif defined(__DOS4G__)
-	,"DOS4G"
-#elif defined(__FLAT__)
-	,"DOS32"
-#else
-	,"DOS16"
-#endif
-	,SMBLIB_VERSION
-    );
-for(x=1;x<argc;x++) {
-	if(argv[x][0]=='/') {
-		for(j=1;argv[x][j];j++)
-			switch(toupper(argv[x][j])) {
-				case 'A':
-					mode|=NOANALYSIS;
-					break;
-				case 'Z':
-					if(isdigit(argv[x][j+1]))
-						tzone=atoi(argv[x]+j+1);
-					else if(!stricmp(argv[x]+j+1,"EST"))
-						tzone=EST;
-					else if(!stricmp(argv[x]+j+1,"EDT"))
-						tzone=EDT;
-					else if(!stricmp(argv[x]+j+1,"CST"))
-						tzone=CST;
-					else if(!stricmp(argv[x]+j+1,"CDT"))
-						tzone=CDT;
-					else if(!stricmp(argv[x]+j+1,"MST"))
-						tzone=MST;
-					else if(!stricmp(argv[x]+j+1,"MDT"))
-						tzone=MDT;
-					else if(!stricmp(argv[x]+j+1,"PST"))
-						tzone=PST;
-					else if(!stricmp(argv[x]+j+1,"PDT"))
-						tzone=PDT;
-					j=strlen(argv[x])-1;
-					break;
-				default:
-					printf("\nUnknown opt '%c'\n",argv[x][j]);
-				case '?':
-					printf("%s",usage);
-					exit(1);
-					break; } }
-	else {
-		if(!cmd[0])
-			strcpy(cmd,argv[x]);
-		else {
-			sprintf(smb.file,"%.64s",argv[x]);
-			p=strrchr(smb.file,'.');
-			s=strrchr(smb.file,'\\');
-			if(p>s) *p=0;
-			strupr(smb.file);
-			smb.retry_time=30;
-			printf("Opening %s\r\n",smb.file);
-			if((i=smb_open(&smb))!=0) {
-				printf("error %d opening %s message base\n",i,smb.file);
-				exit(1); }
-			if(!filelength(fileno(smb.shd_fp))) {
-				printf("Empty\n");
-				smb_close(&smb);
-				continue; }
-			for(y=0;cmd[y];y++)
-				switch(toupper(cmd[y])) {
-					case 'I':
-					case 'E':
-					case 'N':
-						strcpy(filein,cmd+1);
-						i=smb_locksmbhdr(&smb);
-						if(i) {
-							printf("smb_locksmbhdr returned %d\n",i);
-							return(1); }
-						postmsg(toupper(cmd[y]));
-						y=strlen(cmd)-1;
-						break;
-					case 'S':
-						showstatus();
-						break;
-					case 'C':
-						config();
-						break;
-					case 'L':
-						listmsgs(atol(cmd+1),-1L);
-						y=strlen(cmd)-1;
-						break;
-					case 'P':
-						packmsgs(atol(cmd+y+1));
-						y=strlen(cmd)-1;
-						break;
-					case 'R':
-						readmsgs(atol(cmd+1));
-						y=strlen(cmd)-1;
-						break;
-					case 'V':
-						viewmsgs(atol(cmd+1),-1L);
-						y=strlen(cmd)-1;
-						break;
-					case 'M':
-						maint();
-						break;
-					default:
-						printf("%s",usage);
-						break; }
-			smb_close(&smb); } } }
-if(!cmd[0])
-	printf("%s",usage);
-return(0);
-}
diff --git a/src/sbbs2/smb/smbutil/smbutil.h b/src/sbbs2/smb/smbutil/smbutil.h
deleted file mode 100644
index 4b5462b12a..0000000000
--- a/src/sbbs2/smb/smbutil/smbutil.h
+++ /dev/null
@@ -1,12 +0,0 @@
-/* SMBUTIL.H */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#define NOANALYSIS		(1L<<0)
-
-#ifdef __WATCOMC__
-	#define ffblk find_t
-    #define findfirst(x,y,z) _dos_findfirst(x,z,y)
-	#define findnext(x) _dos_findnext(x)
-#endif
-
diff --git a/src/sbbs2/smbactiv/makeall.bat b/src/sbbs2/smbactiv/makeall.bat
deleted file mode 100755
index d68900c3d3..0000000000
--- a/src/sbbs2/smbactiv/makeall.bat
+++ /dev/null
@@ -1,11 +0,0 @@
-@echo off
-wmake OS=DOS %1 %2 %3 %4 %5
-if errorlevel 1 goto end
-wmake OS=DOSX %1 %2 %3 %4 %5
-if errorlevel 1 goto end
-wmake OS=OS2 %1 %2 %3 %4 %5
-if errorlevel 1 goto end
-wmake OS=NT %1 %2 %3 %4 %5
-if errorlevel 1 goto end
-:end
-
diff --git a/src/sbbs2/smbactiv/makefile b/src/sbbs2/smbactiv/makefile
deleted file mode 100644
index e2a9ad55aa..0000000000
--- a/src/sbbs2/smbactiv/makefile
+++ /dev/null
@@ -1,92 +0,0 @@
-############################################
-# Makefile for Synchronet SMBACTIV Utility #
-# For use with Watcom C/C++ 		   #
-############################################
-
-!ifndef OS
-OS	= DOS
-!endif
-
-!ifeq OS DOS
-CC	= *wcc
-!else
-CC	= *wcc386
-!endif
-
-LD	= *wlink
-INCLUDE = \watcom\h;\watcom\h\os2;..;..\smb;..\rio
-
-
-!ifeq OS DOS
-CFLAGS	= -I$(INCLUDE) -s -fh=$*.pch -bt=$(OS) -fo=$(OS)\ -ml
-!else
-CFLAGS	= -I$(INCLUDE) -s -fh=$*.pch -bt=$(OS) -fo=$(OS)\
-!endif
-
-!ifeq OS DOS
-SYSTEM  = DOS
-!endif
-!ifeq OS OS2
-SYSTEM  = OS2V2
-!endif
-!ifeq OS DOSX
-SYSTEM  = DOS4G
-!endif
-!ifeq OS NT
-SYSTEM	= NT
-!endif
-
-LFLAGS  = option stack=16k system $(SYSTEM)
-
-MAIN	= $(OS)\smbactiv.exe
-OBJS	= $(OS)\smbactiv.obj $(OS)\scfgvars.obj $(OS)\scfglib1.obj &
-	  $(OS)\ars.obj $(OS)\scfglib2.obj $(OS)\smblib.obj
-HEADERS = ..\sbbs.h ..\sbbsdefs.h ..\gen_defs.h ..\scfgvars.c &
-	  ..\smb\smbdefs.h ..\smb\smblib.h
-
-# Implicit C Compile Rule
-.c.obj:
-	@echo Compiling (I) $[@ to $^@ ...
-	$(CC) $(CFLAGS) $[@
-
-# Main EXE Link Rule
-$(MAIN): $(OBJS) 
-#	 @echo Linking $< ...
-	$(LD) $(LFLAGS) file { $(OBJS) }
-
-# Global Variables
-$(OS)\scfgvars.obj: ..\scfgvars.c ..\sbbsdefs.h
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) $[@
-
-# ARS
-$(OS)\ars.obj: ..\ars.c ..\ars_defs.h
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) $[@
-
-# Shared Functions
-$(OS)\scfglib1.obj: ..\scfglib1.c ..\sbbs.h ..\sbbsdefs.h ..\scfgvars.c &
-	..\scfglib.h
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) &
--DNO_TEXT_CFG &
--DNO_XTRN_CFG &
--DNO_CMDS_CFG &
--DNO_CHAT_CFG &
-$[@
-
-# Shared Functions
-$(OS)\scfglib2.obj: ..\scfglib2.c ..\sbbs.h ..\sbbsdefs.h ..\scfgvars.c &
-	..\scfglib.h
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) &
--DNO_TEXT_CFG &
--DNO_XTRN_CFG &
--DNO_CMDS_CFG &
--DNO_CHAT_CFG &
-$[@
-
-$(OS)\smblib.obj: ..\smb\smblib.c ..\smb\smblib.h ..\smb\smbdefs.h
-	@echo Compiling $[@ to $^@ ...
-	$(CC) $(CFLAGS) $[@
-
diff --git a/src/sbbs2/smbactiv/makefile.bc b/src/sbbs2/smbactiv/makefile.bc
deleted file mode 100644
index 65e62529f4..0000000000
--- a/src/sbbs2/smbactiv/makefile.bc
+++ /dev/null
@@ -1,78 +0,0 @@
-############################################
-# Makefile for Synchronet DEADSUBS Utility #
-# For use with Borland C++ for DOS or OS/2 #
-############################################
-
-# Macros
-CC	= bcc
-LD	= tlink
-!ifdef __OS2__
-OS	= OS2
-INCLUDE = c:\bcos2\include;..;..\smb;..\rio
-LIB	= c:\bcos2\lib
-CFLAGS  = -d -C -I$(INCLUDE) -w-pro
-LFLAGS  = -c
-!else
-OS      = DOS
-INCLUDE = \bc31\include;..;..\smb;..\rio
-LIB	= \bc31\lib
-MODEL	= l
-CFLAGS	= -d -N -C -m$(MODEL) -I$(INCLUDE) -w-pro
-LFLAGS	= -n -c
-!endif
-MAIN	= $(OS)\smbactiv.exe
-OBJS	= $(OS)\smbactiv.obj $(OS)\scfgvars.obj $(OS)\scfglib1.obj \
-	  $(OS)\scfglib2.obj $(OS)\smblib.obj $(OS)\ars.obj
-HEADERS = ..\sbbs.h ..\sbbsdefs.h ..\scfgvars.c \
-	  ..\smb\smbdefs.h ..\smb\smblib.h
-
-# Implicit C Compile Rule
-{.}.c.obj:
-	@echo Compiling (I) $< to $@ ...
-        $(CC) $(CFLAGS) -n$(OS) -c $<
-
-# Main EXE Link Rule
-$(MAIN): $(OBJS) 
-    	@echo Linking $< ...
-!ifdef __OS2__
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c02.obj $(OBJS)
-+, $*, $*, $(LIB)\os2.lib $(LIB)\c2.lib
-!else
-	$(LD) $(LFLAGS) @&&+
-$(LIB)\c0$(MODEL) $(OBJS)   
-+, $*, $*, $(LIB)\c$(MODEL).lib $(LIB)\math$(MODEL).lib $(LIB)\emu.lib
-!endif
-
-# Global Variables
-$(OS)\scfgvars.obj: ..\scfgvars.c ..\sbbsdefs.h
-	@echo Compiling ..\$&.c to $< ...
-	$(CC) $(CFLAGS) -c -n$(OS) ..\$&.c
-
-# Shared Functions
-$(OS)\scfglib1.obj: ..\scfglib1.c ..\sbbs.h ..\sbbsdefs.h ..\scfgvars.c \
-        ..\scfglib.h
-        $(CC) $(CFLAGS) -c -n$(OS) @&&!
--DNO_FILE_CFG
--DNO_XTRN_CFG
--DNO_CMDS_CFG
--DNO_CHAT_CFG
-! ..\$&.c
-
-$(OS)\scfglib2.obj: ..\scfglib2.c ..\sbbs.h ..\sbbsdefs.h ..\scfgvars.c \
-        ..\scfglib.h
-	$(CC) $(CFLAGS) -c -n$(OS) @&&!
--DNO_FILE_CFG
--DNO_XTRN_CFG
--DNO_CMDS_CFG
--DNO_CHAT_CFG
-! ..\$&.c
-
-$(OS)\smblib.obj: ..\smb\smblib.c ..\smb\smblib.h ..\smb\smbdefs.h
-	@echo Compiling SMBLIB ...
-	$(CC) $(CFLAGS) -n$(OS) -c ..\smb\smblib.c
-
-$(OS)\ars.obj: ..\ars.c ..\ars_defs.h
-        @echo Compiling ..\$&.c to $< ...
-        $(CC) $(CFLAGS) -n$(OS) -c ..\ars.c
-
diff --git a/src/sbbs2/smbactiv/smbactiv.c b/src/sbbs2/smbactiv/smbactiv.c
deleted file mode 100644
index d932b8c31b..0000000000
--- a/src/sbbs2/smbactiv/smbactiv.c
+++ /dev/null
@@ -1,273 +0,0 @@
-/* SMBACTIV.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include <share.h>
-#include "sbbs.h"
-
-#define SMBACTIV_VER "1.01"
-
-typedef struct {
-	ulong read;
-	ulong firstmsg;
-} sub_status_t;
-
-smb_t smb;
-
-ulong first_msg()
-{
-	smbmsg_t msg;
-
-msg.offset=0;
-msg.hdr.number=0;
-if(smb_getmsgidx(&smb,&msg))			/* Get first message index */
-	return(0);
-return(msg.idx.number);
-}
-/****************************************************************************/
-/* Puts a backslash on path strings 										*/
-/****************************************************************************/
-void backslash(char *str)
-{
-    int i;
-
-i=strlen(str);
-if(i && str[i-1]!='\\') {
-    str[i]='\\'; str[i+1]=0; }
-}
-long lputs(char FAR16 *str)
-{
-    char tmp[256];
-    int i,j,k;
-
-j=strlen(str);
-for(i=k=0;i<j;i++)      /* remove CRs */
-    if(str[i]==CR && str[i+1]==LF)
-        continue;
-    else
-        tmp[k++]=str[i];
-tmp[k]=0;
-return(fputs(tmp,stderr));
-}
-/****************************************************************************/
-/* Network open function. Opens all files DENYALL and retries LOOP_NOPEN    */
-/* number of times if the attempted file is already open or denying access	*/
-/* for some other reason.	All files are opened in BINARY mode.			*/
-/****************************************************************************/
-int nopen(char *str, int access)
-{
-	char logstr[256];
-	int file,share,count=0;
-
-if(access==O_RDONLY) share=SH_DENYWR;
-	else share=SH_DENYRW;
-while(((file=sopen(str,O_BINARY|access,share,S_IWRITE))==-1)
-	&& errno==EACCES && count++<LOOP_NOPEN);
-if(file==-1 && errno==EACCES)
-	lputs("\7\r\nNOPEN: ACCESS DENIED\r\n\7");
-return(file);
-}
-
-/****************************************************************************/
-/* This function performs an nopen, but returns a file stream with a buffer */
-/* allocated.																*/
-/****************************************************************************/
-FILE *fnopen(int *file, char *str, int access)
-{
-	char mode[128];
-	FILE *stream;
-
-if(access&O_WRONLY) access|=O_RDWR; 	/* fdopen can't open WRONLY */
-
-if(((*file)=nopen(str,access))==-1)
-	return(NULL);
-
-if(access&O_APPEND) {
-	if(access&(O_RDONLY|O_RDWR))
-		strcpy(mode,"a+");
-	else
-		strcpy(mode,"a"); }
-else {
-	if(access&(O_WRONLY|O_RDWR))
-		strcpy(mode,"r+");
-	else
-		strcpy(mode,"r"); }
-stream=fdopen((*file),mode);
-if(stream==NULL) {
-	close(*file);
-	return(NULL); }
-setvbuf(stream,NULL,_IOFBF,16*1024);
-return(stream);
-}
-
-/****************************************************************************/
-/* Truncates white-space chars off end of 'str' and terminates at first tab */
-/****************************************************************************/
-void truncsp(char *str)
-{
-	char c;
-
-str[strcspn(str,"\t")]=0;
-c=strlen(str);
-while(c && str[c-1]<=SP) c--;
-str[c]=0;
-}
-
-/****************************************************************************/
-/* Performs printf() through local assembly routines                        */
-/* Called from everywhere                                                   */
-/****************************************************************************/
-int lprintf(char *fmat, ...)
-{
-	va_list argptr;
-	char sbuf[256];
-	int chcount;
-
-va_start(argptr,fmat);
-chcount=vsprintf(sbuf,fmat,argptr);
-va_end(argptr);
-lputs(sbuf);
-return(chcount);
-}
-void bail(int code)
-{
-exit(code);
-}
-
-void main(int argc, char **argv)
-{
-	char str[256],*p;
-	int i,j,file;
-	ulong l,length,max_users=0xffffffff;
-	sub_status_t *sub_status;
-	read_cfg_text_t txt;
-	struct find_t f;
-	FILE *stream;
-
-   _fmode=O_BINARY;
-	txt.openerr="\7\r\nError opening %s for read.\r\n";
-	txt.reading="\r\nReading %s...";
-	txt.readit="\rRead %s       ";
-	txt.allocerr="\7\r\nError allocating %u bytes of memory\r\n";
-	txt.error="\7\r\nERROR: Offset %lu in %s\r\n\r\n";
-
-fprintf(stderr,"\nSMBACTIV Version %s (%s) - Synchronet Message Base Activity "
-	"Monitor\n"
-	,SMBACTIV_VER
-#if defined(__OS2__)
-	,"OS/2"
-#elif defined(__NT__)
-    ,"Win32"
-#elif defined(__DOS4G__)
-	,"DOS4G"
-#elif defined(__FLAT__)
-	,"DOS32"
-#else
-	,"DOS16"
-#endif
-	);
-
-	if(argc>1 && (!stricmp(argv[1],"/?") || !stricmp(argv[1],"?"))) {
-		lprintf("\nusage: SMBACTIV [max_users]\n\n");
-		lprintf("max_users = limit output to subs read by this many users "
-			"or less\n");
-		exit(0); }
-
-	if(argc>1)
-		max_users=atol(argv[1]);
-
-	if(!node_dir[0]) {
-		p=getenv("SBBSNODE");
-		if(p==NULL) {
-			printf("\7\nSBBSNODE environment variable not set.\n");
-			exit(1); }
-		strcpy(node_dir,p); }
-
-	strupr(node_dir);
-
-	if(node_dir[strlen(node_dir)-1]!='\\')
-		strcat(node_dir,"\\");
-
-	read_node_cfg(txt);
-	if(ctrl_dir[0]=='.') {   /* Relative path */
-		strcpy(str,ctrl_dir);
-		sprintf(ctrl_dir,"%s%s",node_dir,str);
-		if(_fullpath(str,ctrl_dir,40))
-			strcpy(ctrl_dir,str); }
-	backslash(ctrl_dir);
-
-	read_main_cfg(txt);
-	if(data_dir[0]=='.') {   /* Relative path */
-		strcpy(str,data_dir);
-		sprintf(data_dir,"%s%s",node_dir,str);
-		if(_fullpath(str,data_dir,40))
-			strcpy(data_dir,str); }
-	backslash(data_dir);
-	if(text_dir[0]=='.') {   /* Relative path */
-		strcpy(str,text_dir);
-		sprintf(text_dir,"%s%s",node_dir,str);
-		if(_fullpath(str,text_dir,40))
-			strcpy(text_dir,str); }
-	backslash(text_dir);
-	read_msgs_cfg(txt);
-
-	if((sub_status=(sub_status_t *)MALLOC
-		(total_subs*sizeof(sub_status_t)))==NULL) {
-		printf("ERROR Allocating memory for sub_status\r\n");
-		exit(1); }
-
-	lprintf("\nReading sub-board ");
-	for(i=0;i<total_subs;i++) {
-		lprintf("%5d of %-5d\b\b\b\b\b\b\b\b\b\b\b\b\b\b",i+1,total_subs);
-		sprintf(smb.file,"%s%s",sub[i]->data_dir,sub[i]->code);
-		if((j=smb_open(&smb))!=0) {
-			lprintf("Error %d opening %s\r\n",j,smb.file);
-			sub_status[i].read=0;
-			sub_status[i].firstmsg=0L;
-            continue; }
-		sub_status[i].read=0;
-		sub_status[i].firstmsg=first_msg();
-		smb_close(&smb); }
-
-	sprintf(str,"%sUSER\\PTRS\\*.IXB",data_dir);
-	if(_dos_findfirst(str,0,&f)) {
-		lprintf("Unable to find any user pointer files.\n");
-		FREE(sub_status);
-		exit(1); }
-
-	j=0;
-	lprintf("\nComparing user pointers ");
-	while(1) {
-		lprintf("%-5d\b\b\b\b\b",++j);
-		sprintf(str,"%sUSER\\PTRS\\%s",data_dir,f.name);
-		if((file=nopen(str,O_RDONLY))==-1) {
-			if(_dos_findnext(&f))
-				break;
-			continue; }
-		length=filelength(file);
-		for(i=0;i<total_subs;i++) {
-			if(sub_status[i].read>max_users)
-				continue;
-			if(length<(sub[i]->ptridx+1)*10L)
-				continue;
-			else {
-				lseek(file,((long)sub[i]->ptridx*10L)+4L,SEEK_SET);
-				read(file,&l,4); }
-			if(l>sub_status[i].firstmsg)
-				sub_status[i].read++; }
-		close(file);
-		if(_dos_findnext(&f))
-			break; }
-
-	printf("NumUsers    Sub-board\n");
-	printf("--------    -------------------------------------------------"
-		"-----------\n");
-	for(i=0;i<total_subs;i++) {
-		if(sub_status[i].read>max_users)
-			continue;
-		printf("%8lu    %-*s %-*s\n"
-			,sub_status[i].read
-			,LEN_GSNAME,grp[sub[i]->grp]->sname
-			,LEN_SLNAME,sub[i]->lname); }
-
-}
diff --git a/src/sbbs2/smbfuncs.c b/src/sbbs2/smbfuncs.c
deleted file mode 100644
index 8c8215138b..0000000000
--- a/src/sbbs2/smbfuncs.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/* SMBFUNCS.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "smbdefs.h"
-
-int 	SMBCALL (smb_ver)(void);
-char *	SMBCALL (smb_lib_ver)(void);
-int 	SMBCALL (smb_open)(smb_t *smb);
-void	SMBCALL (smb_close)(smb_t *smb);
-int 	SMBCALL (smb_open_da)(smb_t *smb);
-void	SMBCALL (smb_close_da)(smb_t *smb);
-int 	SMBCALL (smb_open_ha)(smb_t *smb);
-void	SMBCALL (smb_close_ha)(smb_t *smb);
-int 	SMBCALL (smb_create)(smb_t *smb);
-int 	SMBCALL (smb_stack)(smb_t *smb, int op);
-int 	SMBCALL (smb_trunchdr)(smb_t *smb);
-int 	SMBCALL (smb_locksmbhdr)(smb_t *smb);
-int 	SMBCALL (smb_getstatus)(smb_t *smb);
-int 	SMBCALL (smb_putstatus)(smb_t *smb);
-int 	SMBCALL (smb_unlocksmbhdr)(smb_t *smb);
-int 	SMBCALL (smb_getmsgidx)(smb_t *smb, smbmsg_t *msg);
-int 	SMBCALL (smb_getlastidx)(smb_t *smb, idxrec_t *idx);
-uint	SMBCALL (smb_getmsghdrlen)(smbmsg_t *msg);
-ulong	SMBCALL (smb_getmsgdatlen)(smbmsg_t *msg);
-int 	SMBCALL (smb_lockmsghdr)(smb_t *smb, smbmsg_t *msg);
-int 	SMBCALL (smb_getmsghdr)(smb_t *smb, smbmsg_t *msg);
-int 	SMBCALL (smb_unlockmsghdr)(smb_t *smb, smbmsg_t *msg);
-int 	SMBCALL (smb_addcrc)(smb_t *smb, ulong crc);
-int 	SMBCALL (smb_hfield)(smbmsg_t *msg, ushort type, ushort length
-				,void *data);
-int 	SMBCALL (smb_dfield)(smbmsg_t *msg, ushort type, ulong length);
-int 	SMBCALL (smb_addmsghdr)(smb_t *smb, smbmsg_t *msg,int storage);
-int 	SMBCALL (smb_putmsg)(smb_t *smb, smbmsg_t *msg);
-int 	SMBCALL (smb_putmsgidx)(smb_t *smb, smbmsg_t *msg);
-int 	SMBCALL (smb_putmsghdr)(smb_t *smb, smbmsg_t *msg);
-void	SMBCALL (smb_freemsgmem)(smbmsg_t *msg);
-ulong	SMBCALL (smb_hdrblocks)(ulong length);
-ulong	SMBCALL (smb_datblocks)(ulong length);
-long	SMBCALL (smb_allochdr)(smb_t *smb, ulong length);
-long	SMBCALL (smb_fallochdr)(smb_t *smb, ulong length);
-long	SMBCALL (smb_hallochdr)(smb_t *smb);
-long	SMBCALL (smb_allocdat)(smb_t *smb, ulong length, ushort headers);
-long	SMBCALL (smb_fallocdat)(smb_t *smb, ulong length, ushort headers);
-long	SMBCALL (smb_hallocdat)(smb_t *smb);
-int 	SMBCALL (smb_incdat)(smb_t *smb, ulong offset, ulong length
-				,ushort headers);
-int 	SMBCALL (smb_freemsg)(smb_t *smb, smbmsg_t *msg);
-int 	SMBCALL (smb_freemsgdat)(smb_t *smb, ulong offset, ulong length
-				,ushort headers);
-int 	SMBCALL (smb_freemsghdr)(smb_t *smb, ulong offset, ulong length);
-char HUGE16 * SMBCALL smb_getmsgtxt(smb_t *smb, smbmsg_t *msg, ulong mode);
-void	SMBCALL (smb_freemsgtxt)(char HUGE16 *buf);
-
-/* FILE pointer I/O functions */
-
-int 	SMBCALL (smb_feof(FILE *fp);
-int 	SMBCALL (smb_ferror(FILE *fp);
-int 	SMBCALL (smb_fflush(FILE *fp);
-int 	SMBCALL (smb_fgetc(FILE *fp);
-int 	SMBCALL (smb_fputc(int ch, FILE *fp);
-int 	SMBCALL (smb_fseek(FILE *fp, long offset, int whence);
-long	SMBCALL (smb_ftell(FILE *fp);
-long	SMBCALL (smb_fread(char HUGE16 *buf, long bytes, FILE *fp);
-long	SMBCALL (smb_fwrite(char HUGE16 *buf, long bytes, FILE *fp);
-long	SMBCALL (smb_fgetlength(FILE *fp);
-int 	SMBCALL (smb_fsetlength(FILE *fp, long length);
-void	SMBCALL (smb_rewind(FILE *fp);
-void	SMBCALL (smb_clearerr(FILE *fp);
-
-/* LZH functions */
-
-long	SMBCALL (lzh_encode(uchar *inbuf, long inlen, uchar *outbuf);
-long	SMBCALL (lzh_decode(uchar *inbuf, long inlen, uchar *outbuf);
-
-#endif /* Don't add anything after this #endif statement */
diff --git a/src/sbbs2/smm/addphoto.c b/src/sbbs2/smm/addphoto.c
deleted file mode 100644
index 6f4294579c..0000000000
--- a/src/sbbs2/smm/addphoto.c
+++ /dev/null
@@ -1,310 +0,0 @@
-/* ADDPHOTO.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include <io.h>
-#include <dos.h>
-#include <bios.h>
-#include <time.h>
-#include <ctype.h>
-#include <stdio.h>
-#include <share.h>
-#include <conio.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <malloc.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#include "gen_defs.h"
-#include "crc32.h"
-#include "smmdefs.h"
-
-extern int daylight=0;
-extern long timezone=0L;
-
-
-char *base41(unsigned int i, char *str)
-{
-	char c;
-	unsigned int j=41*41,k;
-
-for(c=0;c<3;c++) {
-	k=i/j;
-	str[c]='0'+k;
-	i-=(k*j);
-	j/=41;
-	if(str[c]>=':')
-		str[c]='A'+(str[c]-':');
-	if(str[c]>='[')
-		str[c]='#'+(str[c]-'['); }
-str[c]=0;
-return(str);
-}
-
-/****************************************************************************/
-/* Updates 16-bit "rcrc" with character 'ch'                                */
-/****************************************************************************/
-void ucrc16(uchar ch, ushort *rcrc) {
-    ushort i, cy;
-    uchar nch=ch;
- 
-for (i=0; i<8; i++) {
-    cy=*rcrc & 0x8000;
-    *rcrc<<=1;
-    if (nch & 0x80) *rcrc |= 1;
-    nch<<=1;
-    if (cy) *rcrc ^= 0x1021; }
-}
-
-/****************************************************************************/
-/* Returns 16-crc of string (not counting terminating NULL)                 */
-/****************************************************************************/
-ushort crc16(char *str)
-{
-    int     i=0;
-    ushort  crc=0;
-
-ucrc16(0,&crc);
-while(str[i])
-    ucrc16(str[i++],&crc);
-ucrc16(0,&crc);
-ucrc16(0,&crc);
-return(crc);
-}
-
-/****************************************************************************/
-/* Returns 32-crc of string (not counting terminating NULL) 				*/
-/****************************************************************************/
-ulong crc32(char *str)
-{
-	int i=0;
-	ulong crc=0xffffffffUL;
-
-	while(str[i])
-		crc=ucrc32(str[i++],crc);
-	crc=~crc;
-	return(crc);
-}
-
-/****************************************************************************/
-/* Checks the disk drive for the existence of a file. Returns 1 if it       */
-/* exists, 0 if it doesn't.                                                 */
-/****************************************************************************/
-char fexist(char *filespec)
-{
-    struct ffblk f;
-
-if(findfirst(filespec,&f,FA_RDONLY|FA_HIDDEN|FA_SYSTEM|FA_DIREC)==0)
-    return(1);
-return(0);
-}
-
-#define MV_BUFLEN	4096
-
-/****************************************************************************/
-/* Moves or copies a file from one dir to another                           */
-/* both 'src' and 'dest' must contain full path and filename                */
-/* returns 0 if successful, -1 if error                                     */
-/****************************************************************************/
-int mv(char *src, char *dest, char copy)
-{
-	char str[256],*buf;
-	int  ind,outd;
-	long length,chunk=MV_BUFLEN,l;
-	struct ftime ftime;
-	FILE *inp,*outp;
-
-if(copy)
-	printf("Copying %s to %s\n",src,dest);
-else
-	printf("Moving %s to %s\n",src,dest);
-if(!stricmp(src,dest))	 /* source and destination are the same! */
-	return(0);
-if(!fexist(src))
-	return(1);
-if(!copy && fexist(dest))
-	return(2);
-if(!copy && ((src[1]!=':' && dest[1]!=':')
-	|| (src[1]==':' && dest[1]==':' && toupper(src[0])==toupper(dest[0])))) {
-	if(rename(src,dest))					   /* same drive, so move */
-		return(3);
-	return(0); }
-if((ind=open(src,O_RDONLY|O_BINARY))==-1)
-	return(4);
-if((inp=fdopen(ind,"rb"))==NULL) {
-	close(ind);
-	return(5); }
-setvbuf(inp,NULL,_IOFBF,32*1024);
-if((outd=open(dest,O_WRONLY|O_CREAT|O_TRUNC|O_BINARY,S_IWRITE|S_IREAD))==-1) {
-	fclose(inp);
-	return(6); }
-if((outp=fdopen(outd,"wb"))==NULL) {
-	close(outd);
-	fclose(inp);
-	return(7); }
-setvbuf(outp,NULL,_IOFBF,8*1024);
-length=filelength(ind);
-if(!length) {
-	fclose(inp);
-	fclose(outp);
-	return(8); }
-if((buf=(char *)MALLOC(MV_BUFLEN))==NULL) {
-	fclose(inp);
-	fclose(outp);
-	return(9); }
-l=0L;
-while(l<length) {
-	if(l+chunk>length)
-		chunk=length-l;
-	if(fread(buf,1,chunk,inp)!=chunk) {
-		FREE(buf);
-		fclose(inp);
-		fclose(outp);
-		return(10); }
-	if(fwrite(buf,1,chunk,outp)!=chunk) {
-		FREE(buf);
-		fclose(inp);
-		fclose(outp);
-		return(11); }
-	l+=chunk; }
-getftime(ind,&ftime);
-setftime(outd,&ftime);
-FREE(buf);
-fclose(inp);
-fclose(outp);
-if(!copy && remove(src))
-	return(12);
-return(0);
-}
-
-time_t checktime()
-{
-	struct tm tm;
-
-memset(&tm,0,sizeof(tm));
-tm.tm_year=94;
-tm.tm_mday=1;
-return(mktime(&tm)^0x2D24BD00L);
-}
-
-
-int main(int argc, char **argv)
-{
-	char str[128],fname[128],path[128],tmp[128],*p;
-	int i,file;
-	FILE *index, *stream;
-	ulong number,crc;
-	user_t user;
-	ixb_t ixb;
-
-printf("\nADDPHOTO v1.01 - Synchronet Match Maker Photograph Addition\n\n");
-
-if(checktime()) {
-    printf("Time problem!\n");
-	exit(1); }
-
-if(argc<4) {
-	printf("usage: addphoto filename.ext user_number system_name\n");
-	exit(1); }
-
-strupr(argv[1]);
-if(!fexist(argv[1])) {
-	printf("%s doesn't exist\n",argv[1]);
-	exit(1); }
-
-if((file=open("SMM.DAB",O_RDWR|O_BINARY|O_DENYNONE|O_CREAT
-    ,S_IWRITE|S_IREAD))==-1) {
-	printf("\n\7Error opening/creating SMM.DAB\n");
-    exit(1); }
-if((stream=fdopen(file,"w+b"))==NULL) {
-	printf("\n\7Error converting SMM.DAB file handle to stream\n");
-    exit(1); }
-setvbuf(stream,0L,_IOFBF,4096);
-
-if((file=open("SMM.IXB",O_RDWR|O_BINARY|O_DENYNONE|O_CREAT
-    ,S_IWRITE|S_IREAD))==-1) {
-	printf("\n\7Error opening/creating SMM.IXB\n");
-    exit(1); }
-if((index=fdopen(file,"w+b"))==NULL) {
-	printf("\n\7Error converting SMM.IXB file handle to stream\n");
-    exit(1); }
-setvbuf(stream,0L,_IOFBF,1024);
-
-number=atol(argv[2]);
-str[0]=0;
-for(i=3;i<argc;i++) {
-	if(str[0])
-		strcat(str," ");
-	strcat(str,argv[i]); }
-
-strupr(str);
-str[25]=0;
-
-crc=crc32(str);
-rewind(index);
-i=0;
-while(!feof(index)) {
-	if(!fread(&ixb,sizeof(ixb_t),1,index))
-		break;
-	if(!ixb.number)    /* DELETED */
-		continue;
-	if(ixb.system!=crc || ixb.number!=number)
-		continue;
-	fseek(stream
-		,((ftell(index)-sizeof(ixb_t))/sizeof(ixb_t))
-		*sizeof(user_t),SEEK_SET);
-	if(!fread(&user,sizeof(user_t),1,stream))
-		continue;
-	i=1;
-	break; }
-if(!i) {
-	printf("\7User #%lu @ %s not found!\n",number,str);
-	exit(2); }
-
-for(i=0;user.system[i];i++)
-	if(isalnum(user.system[i]))
-        break;
-if(!user.system[i])
-	fname[0]='~';
-else
-	fname[0]=user.system[i];
-for(i=strlen(user.system)-1;i>0;i--)
-	if(isalnum(user.system[i]))
-		break;
-if(i<=0)
-	fname[1]='~';
-else
-	fname[1]=user.system[i];
-fname[2]=0;
-strupr(user.system);
-strcat(fname,base41(crc16(user.system),tmp));
-strcat(fname,base41(user.number,tmp));
-p=strrchr(argv[1],'.');
-if(p)
-	strcat(fname,p);
-strupr(fname);
-mkdir("PHOTO");
-sprintf(path,"PHOTO\\%s",fname);
-if((i=mv(argv[1],path,1))!=0) {
-	printf("\7ERROR %d copying %s to %s\n",i,argv[1],path);
-	exit(3); }
-
-user.misc|=USER_PHOTO;
-user.updated=time(NULL);
-user.photo=0;
-fseek(stream
-	,((ftell(index)-sizeof(ixb_t))/sizeof(ixb_t))
-	*sizeof(user_t),SEEK_SET);
-fwrite(&user,sizeof(user_t),1,stream);
-ixb.updated=user.updated;
-fseek(index,ftell(index)-sizeof(ixb_t),SEEK_SET);
-fwrite(&ixb,sizeof(ixb_t),1,index);
-
-printf("%s added successfully!\n",argv[1]);
-return(0);
-}
-
diff --git a/src/sbbs2/smm/delphoto.c b/src/sbbs2/smm/delphoto.c
deleted file mode 100644
index 6934b2d96e..0000000000
--- a/src/sbbs2/smm/delphoto.c
+++ /dev/null
@@ -1,223 +0,0 @@
-/* DELPHOTO.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include <io.h>
-#include <dos.h>
-#include <dir.h>
-#include <bios.h>
-#include <time.h>
-#include <ctype.h>
-#include <stdio.h>
-#include <share.h>
-#include <conio.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <malloc.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#include "gen_defs.h"
-#include "crc32.h"
-#include "smmdefs.h"
-
-extern int daylight=0;
-extern long timezone=0L;
-
-
-
-char *base41(unsigned int i, char *str)
-{
-	char c;
-	unsigned int j=41*41,k;
-
-for(c=0;c<3;c++) {
-	k=i/j;
-	str[c]='0'+k;
-	i-=(k*j);
-	j/=41;
-	if(str[c]>=':')
-		str[c]='A'+(str[c]-':');
-	if(str[c]>='[')
-		str[c]='#'+(str[c]-'['); }
-str[c]=0;
-return(str);
-}
-
-/****************************************************************************/
-/* Updates 16-bit "rcrc" with character 'ch'                                */
-/****************************************************************************/
-void ucrc16(uchar ch, ushort *rcrc) {
-    ushort i, cy;
-    uchar nch=ch;
- 
-for (i=0; i<8; i++) {
-    cy=*rcrc & 0x8000;
-    *rcrc<<=1;
-    if (nch & 0x80) *rcrc |= 1;
-    nch<<=1;
-    if (cy) *rcrc ^= 0x1021; }
-}
-
-/****************************************************************************/
-/* Returns 16-crc of string (not counting terminating NULL)                 */
-/****************************************************************************/
-ushort crc16(char *str)
-{
-    int     i=0;
-    ushort  crc=0;
-
-ucrc16(0,&crc);
-while(str[i])
-    ucrc16(str[i++],&crc);
-ucrc16(0,&crc);
-ucrc16(0,&crc);
-return(crc);
-}
-
-/****************************************************************************/
-/* Returns 32-crc of string (not counting terminating NULL) 				*/
-/****************************************************************************/
-ulong crc32(char *str)
-{
-	int i=0;
-	ulong crc=0xffffffffUL;
-
-	while(str[i])
-		crc=ucrc32(str[i++],crc);
-	crc=~crc;
-	return(crc);
-}
-
-time_t checktime()
-{
-	struct tm tm;
-
-memset(&tm,0,sizeof(tm));
-tm.tm_year=94;
-tm.tm_mday=1;
-return(mktime(&tm)^0x2D24BD00L);
-}
-
-
-int main(int argc, char **argv)
-{
-	char str[128],fname[128],path[128],tmp[128];
-	int i,file;
-	FILE *index, *stream;
-	ulong number,crc;
-	user_t user;
-	ixb_t ixb;
-	struct ffblk ff;
-
-printf("\nDELPHOTO v1.00 - Synchronet Match Maker Photograph Deletion\n\n");
-
-if(checktime()) {
-    printf("Time problem!\n");
-    exit(1); }
-
-if(argc<3) {
-	printf("usage: delphoto user_number system_name\n");
-	exit(1); }
-
-if((file=open("SMM.DAB",O_RDWR|O_BINARY|SH_DENYNO|O_CREAT
-    ,S_IWRITE|S_IREAD))==-1) {
-	printf("\n\7Error opening/creating SMM.DAB\n");
-    exit(1); }
-if((stream=fdopen(file,"w+b"))==NULL) {
-	printf("\n\7Error converting SMM.DAB file handle to stream\n");
-    exit(1); }
-setvbuf(stream,0L,_IOFBF,4096);
-
-if((file=open("SMM.IXB",O_RDWR|O_BINARY|SH_DENYNO|O_CREAT
-    ,S_IWRITE|S_IREAD))==-1) {
-	printf("\n\7Error opening/creating SMM.IXB\n");
-    exit(1); }
-if((index=fdopen(file,"w+b"))==NULL) {
-	printf("\n\7Error converting SMM.IXB file handle to stream\n");
-    exit(1); }
-setvbuf(stream,0L,_IOFBF,1024);
-
-number=atol(argv[1]);
-str[0]=0;
-for(i=2;i<argc;i++) {
-	if(str[0])
-		strcat(str," ");
-	strcat(str,argv[i]); }
-
-strupr(str);
-str[25]=0;
-
-crc=crc32(str);
-rewind(index);
-i=0;
-while(!feof(index)) {
-	if(!fread(&ixb,sizeof(ixb_t),1,index))
-		break;
-	if(!ixb.number)    /* DELETED */
-		continue;
-	if(ixb.system!=crc || ixb.number!=number)
-		continue;
-	fseek(stream
-		,((ftell(index)-sizeof(ixb_t))/sizeof(ixb_t))
-		*sizeof(user_t),SEEK_SET);
-	if(!fread(&user,sizeof(user_t),1,stream))
-		continue;
-	i=1;
-	break; }
-if(!i) {
-	printf("\7User #%lu @ %s not found!\n",number,str);
-	exit(2); }
-
-if(!(user.misc&USER_PHOTO)) {
-	printf("\7User #%lu @ %s doesn't have a photo attached to their profile.\n"
-		,number,str);
-	exit(3); }
-
-for(i=0;user.system[i];i++)
-	if(isalnum(user.system[i]))
-        break;
-if(!user.system[i])
-	fname[0]='~';
-else
-	fname[0]=user.system[i];
-for(i=strlen(user.system)-1;i>0;i--)
-	if(isalnum(user.system[i]))
-		break;
-if(i<=0)
-	fname[1]='~';
-else
-	fname[1]=user.system[i];
-fname[2]=0;
-strupr(user.system);
-strcat(fname,base41(crc16(user.system),tmp));
-strcat(fname,base41(user.number,tmp));
-strcat(fname,".*");
-strupr(fname);
-sprintf(path,"PHOTO\\%s",fname);
-i=findfirst(path,&ff,0);
-if(i)
-	printf("\7%s doesn't exist!\n",path);
-else {
-	sprintf(path,"PHOTO\\%s",ff.ff_name);
-	if(remove(path))
-		printf("\7%s couldn't be removed!\n",path); }
-
-user.misc&=~USER_PHOTO;
-user.updated=time(NULL);
-user.photo=0;
-fseek(stream
-	,((ftell(index)-sizeof(ixb_t))/sizeof(ixb_t))
-	*sizeof(user_t),SEEK_SET);
-fwrite(&user,sizeof(user_t),1,stream);
-ixb.updated=user.updated;
-fseek(index,ftell(index)-sizeof(ixb_t),SEEK_SET);
-fwrite(&ixb,sizeof(ixb_t),1,index);
-
-printf("Photo removed successfully from database.\n");
-return(0);
-}
-
diff --git a/src/sbbs2/smm/lstphoto.c b/src/sbbs2/smm/lstphoto.c
deleted file mode 100644
index 3d5a4e908e..0000000000
--- a/src/sbbs2/smm/lstphoto.c
+++ /dev/null
@@ -1,182 +0,0 @@
-/* LSTPHOTO.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include <io.h>
-#include <dos.h>
-#include <dir.h>
-#include <bios.h>
-#include <time.h>
-#include <ctype.h>
-#include <stdio.h>
-#include <share.h>
-#include <conio.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <malloc.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#include "gen_defs.h"
-#include "crc32.h"
-#include "smmdefs.h"
-
-extern int daylight=0;
-extern long timezone=0L;
-
-
-
-char *base41(unsigned int i, char *str)
-{
-	char c;
-	unsigned int j=41*41,k;
-
-for(c=0;c<3;c++) {
-	k=i/j;
-	str[c]='0'+k;
-	i-=(k*j);
-	j/=41;
-	if(str[c]>=':')
-		str[c]='A'+(str[c]-':');
-	if(str[c]>='[')
-		str[c]='#'+(str[c]-'['); }
-str[c]=0;
-return(str);
-}
-
-/****************************************************************************/
-/* Updates 16-bit "rcrc" with character 'ch'                                */
-/****************************************************************************/
-void ucrc16(uchar ch, ushort *rcrc) {
-    ushort i, cy;
-    uchar nch=ch;
- 
-for (i=0; i<8; i++) {
-    cy=*rcrc & 0x8000;
-    *rcrc<<=1;
-    if (nch & 0x80) *rcrc |= 1;
-    nch<<=1;
-    if (cy) *rcrc ^= 0x1021; }
-}
-
-/****************************************************************************/
-/* Returns 16-crc of string (not counting terminating NULL)                 */
-/****************************************************************************/
-ushort crc16(char *str)
-{
-    int     i=0;
-    ushort  crc=0;
-
-ucrc16(0,&crc);
-while(str[i])
-    ucrc16(str[i++],&crc);
-ucrc16(0,&crc);
-ucrc16(0,&crc);
-return(crc);
-}
-
-/****************************************************************************/
-/* Returns 32-crc of string (not counting terminating NULL) 				*/
-/****************************************************************************/
-ulong crc32(char *str)
-{
-	int i=0;
-	ulong crc=0xffffffffUL;
-
-	while(str[i])
-		crc=ucrc32(str[i++],crc);
-	crc=~crc;
-	return(crc);
-}
-
-/****************************************************************************/
-/* Converts unix time format (long - time_t) into a char str MM/DD/YY		*/
-/****************************************************************************/
-char *unixtodstr(time_t unix, char *str)
-{
-	struct time curtime;
-	struct date date;
-
-if(!unix)
-	strcpy(str,"00/00/00");
-else {
-	unixtodos(unix,&date,&curtime);
-	if((unsigned)date.da_mon>12) {	  /* DOS leap year bug */
-		date.da_mon=1;
-		date.da_year++; }
-	if((unsigned)date.da_day>31)
-		date.da_day=1;
-	sprintf(str,"%02u/%02u/%02u",date.da_mon,date.da_day
-		,date.da_year>=2000 ? date.da_year-2000 : date.da_year-1900); }
-return(str);
-}
-
-
-time_t checktime()
-{
-	struct tm tm;
-
-memset(&tm,0,sizeof(tm));
-tm.tm_year=94;
-tm.tm_mday=1;
-return(mktime(&tm)^0x2D24BD00L);
-}
-
-
-int main()
-{
-	char str[128],fname[128],tmp[128];
-	int i,file;
-	FILE *stream;
-	user_t user;
-
-printf("\nLSTPHOTO v1.00 - Synchronet Match Maker Photograph List\n\n");
-
-if(checktime()) {
-    printf("Time problem!\n");
-    exit(1); }
-
-if((file=open("SMM.DAB",O_RDWR|O_BINARY|SH_DENYNO|O_CREAT
-    ,S_IWRITE|S_IREAD))==-1) {
-	printf("\n\7Error opening/creating SMM.DAB\n");
-    exit(1); }
-if((stream=fdopen(file,"w+b"))==NULL) {
-	printf("\n\7Error converting SMM.DAB file handle to stream\n");
-    exit(1); }
-setvbuf(stream,0L,_IOFBF,4096);
-
-while(!feof(stream)) {
-	if(!fread(&user,sizeof(user_t),1,stream))
-		break;
-	if(!(user.misc&USER_PHOTO) || user.misc&USER_DELETED || !user.number)
-		continue;
-
-	printf("%-25.25s %5lu  %-25.25s %s  ",user.system,user.number,user.name
-		,unixtodstr(user.photo,tmp));
-	for(i=0;user.system[i];i++)
-		if(isalnum(user.system[i]))
-			break;
-	if(!user.system[i])
-		fname[0]='~';
-	else
-		fname[0]=user.system[i];
-	for(i=strlen(user.system)-1;i>0;i--)
-		if(isalnum(user.system[i]))
-			break;
-	if(i<=0)
-		fname[1]='~';
-	else
-		fname[1]=user.system[i];
-	fname[2]=0;
-	strupr(fname);
-	strupr(user.system);
-	strcat(fname,base41(crc16(user.system),tmp));
-	strcat(fname,base41(user.number,tmp));
-	printf("%s\n",fname); }
-
-return(0);
-}
-
diff --git a/src/sbbs2/smm/makefile b/src/sbbs2/smm/makefile
deleted file mode 100644
index af70052dfb..0000000000
--- a/src/sbbs2/smm/makefile
+++ /dev/null
@@ -1,35 +0,0 @@
-# Macros
-CC	= \bc31\bin\bcc
-LD	= \bc31\bin\tlink
-SDK	= ..\sdk
-MSWAIT	= ..\..\mswait\dos
-INCLUDE = \bc31\include;$(SDK);..\smb
-LIB     = \bc31\lib
-MODEL	= l
-CFLAGS	= -d -C -m$(MODEL) -I$(INCLUDE) -w-prot
-LFLAGS  = /n /c
-OBJS	= xsdk.obj xsdkvars.obj $(MSWAIT)\mswait$(MODEL).obj ..\DOS\rciol.obj
-HEADERS = $(SDK)\xsdk.h $(SDK)\xsdkdefs.h $(SDK)\xsdkvars.c smmdefs.h
-
-# Implicit C Compile Rule
-.c.obj:
-    	@echo Compiling $*.c to $*.obj ...
-	$(CC) $(CFLAGS) -c $*.c
-
-# Main EXE Link Rule
-smm.exe: $(OBJS) smm.obj
-    	@echo Linking $< ...
-	$(LD) $(LFLAGS) @&&!
-$(LIB)\c0$(MODEL) $(OBJS) smm.obj
-!, $*, $*, $(LIB)\c$(MODEL).lib $(LIB)\math$(MODEL).lib $(LIB)\emu.lib
-
-# All .obj modules
-smm.obj: $(HEADERS)
-
-xsdk.obj: $(SDK)\xsdk.c $(HEADERS)
-	@echo Compiling $(SDK)\$*.c to $*.obj ...
-	$(CC) $(CFLAGS) -c -w+pro $(SDK)\$*.c
-
-xsdkvars.obj: $(SDK)\xsdkvars.c $(SDK)\xsdkdefs.h
-	@echo Compiling $(SDK)\$*.c to $*.obj ...
-	$(CC) $(CFLAGS) -c -w+pro $(SDK)\$*.c
diff --git a/src/sbbs2/smm/makeio.bat b/src/sbbs2/smm/makeio.bat
deleted file mode 100755
index 27cf740416..0000000000
--- a/src/sbbs2/smm/makeio.bat
+++ /dev/null
@@ -1,7 +0,0 @@
-@echo off
-bcc -w-pro -N -ml -C -n. -DSMB_GETMSGTXT -I..;..\smb smb2smm.c ..\smb\smblib.c ..\smb\lzh.c
-if errorlevel 1 goto end
-bcc -w-pro -N -ml -C -n. -I..;..\smb smm2smb.c ..\smb\smblib.c
-if errorlevel 1 goto end
-bcc -w-pro -N -ml -C -n. -I..;..\smb outphoto.c ..\smb\smblib.c
-:end
diff --git a/src/sbbs2/smm/makemsg.c b/src/sbbs2/smm/makemsg.c
deleted file mode 100644
index b2c0043394..0000000000
--- a/src/sbbs2/smm/makemsg.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/* MAKEMSG.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include <dos.h>
-#include <stdio.h>
-#include <time.h>
-#include "gen_defs.h"
-
-/****************************************************************************/
-/* Converts a date string in format MM/DD/YY into unix time format			*/
-/****************************************************************************/
-time_t dstrtounix(char *str)
-{
-	struct date date;
-	struct time curtime;
-
-if(!strcmp(str,"00/00/00") || !str[0])
-	return(NULL);
-curtime.ti_hour=curtime.ti_min=curtime.ti_sec=0;
-if(str[6]<'7')
-	date.da_year=2000+((str[6]&0xf)*10)+(str[7]&0xf);
-else
-	date.da_year=1900+((str[6]&0xf)*10)+(str[7]&0xf);
-date.da_mon=((str[0]&0xf)*10)+(str[1]&0xf);
-date.da_day=((str[3]&0xf)*10)+(str[4]&0xf);
-return(dostounix(&date,&curtime));
-}
-
-uchar cryptchar(uchar ch, ulong seed)
-{
-if(ch==1)
-	return(0xfe);
-if(ch<0x20 || ch&0x80)	/* Ctrl chars and ex-ASCII are not xlated */
-	return(ch);
-return(ch^(seed&0x1f));
-}
-
-int main(int argc, char **argv)
-{
-	char str[256];
-	FILE *in,*out;
-	int i,j;
-	long l;
-
-if(argc<4) {
-	printf("usage: makemsg infile outfile mm/dd/yy\n");
-	exit(1); }
-
-if((in=fopen(argv[1],"rb"))==NULL) {
-	printf("error opening %s\n",argv[1]);
-	exit(1); }
-
-if((out=fopen(argv[2],"wb"))==NULL) {
-	printf("error opening %s\n",argv[2]);
-	exit(1); }
-
-l=dstrtounix(argv[3]);
-if(!l) {
-	printf("Invalid date %s\n",argv[3]);
-	exit(1); }
-fprintf(out,"%lx\r\n",l^0x305F6C81UL);
-i=ftell(out);
-while(!feof(in)) {
-	if(!fgets(str,128,in))
-		break;
-	for(j=0;str[j];j++,i++)
-		fputc(cryptchar(str[j],l^(i&7)),out); }
-return(0);
-}
diff --git a/src/sbbs2/smm/makephot.bat b/src/sbbs2/smm/makephot.bat
deleted file mode 100755
index 9b6388a531..0000000000
--- a/src/sbbs2/smm/makephot.bat
+++ /dev/null
@@ -1,7 +0,0 @@
-@echo off
-bcc -I..;..\smb -w-pro -N -C -ml addphoto.c
-if errorlevel 1 goto end
-bcc -I..;..\smb -w-pro -N -C -ml delphoto.c
-if errorlevel 1 goto end
-bcc -I..;..\smb -w-pro -N -C -ml lstphoto.c
-:end
diff --git a/src/sbbs2/smm/makeutil.bat b/src/sbbs2/smm/makeutil.bat
deleted file mode 100755
index 53649bc7fd..0000000000
--- a/src/sbbs2/smm/makeutil.bat
+++ /dev/null
@@ -1,2 +0,0 @@
-@echo off
-bcc -w-pro -ml -I..;..\smb smmutil.c
diff --git a/src/sbbs2/smm/outphoto.c b/src/sbbs2/smm/outphoto.c
deleted file mode 100644
index 99e2b4e02e..0000000000
--- a/src/sbbs2/smm/outphoto.c
+++ /dev/null
@@ -1,347 +0,0 @@
-/* OUTPHOTO.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* Scans SMM database and posts any photographs into the an SMB base */
-
-#define  uint unsigned int
-
-#include <dos.h>
-#include <share.h>
-#include "smblib.h"
-#include "smmdefs.h"
-#include "crc32.h"
-
-#define DAYS 15L			 // Hatch every 15 days
-
-smb_t smb;
-extern int daylight=0;
-extern long timezone=0L;
-
-unsigned _stklen=16000; 		  /* Set stack size in code, not header */
-
-/****************************************************************************/
-/* Checks the disk drive for the existence of a file. Returns 1 if it       */
-/* exists, 0 if it doesn't.                                                 */
-/****************************************************************************/
-char fexist(char *filespec)
-{
-    struct ffblk f;
-
-if(findfirst(filespec,&f,0)==0)
-    return(1);
-return(0);
-}
-
-
-/****************************************************************************/
-/* Updates 16-bit "rcrc" with character 'ch'                                */
-/****************************************************************************/
-void ucrc16(uchar ch, ushort *rcrc) {
-	ushort i, cy;
-    uchar nch=ch;
- 
-for (i=0; i<8; i++) {
-    cy=*rcrc & 0x8000;
-    *rcrc<<=1;
-    if (nch & 0x80) *rcrc |= 1;
-    nch<<=1;
-    if (cy) *rcrc ^= 0x1021; }
-}
-
-/****************************************************************************/
-/* Returns 16-crc of string (not counting terminating NULL) 				*/
-/****************************************************************************/
-ushort crc16(char *str)
-{
-	int 	i=0;
-	ushort	crc=0;
-
-ucrc16(0,&crc);
-while(str[i])
-	ucrc16(str[i++],&crc);
-ucrc16(0,&crc);
-ucrc16(0,&crc);
-return(crc);
-}
-
-/****************************************************************************/
-/* Returns 32-crc of string (not counting terminating NULL) 				*/
-/****************************************************************************/
-ulong crc32(char *str)
-{
-	int i=0;
-	ulong crc=0xffffffffUL;
-
-	while(str[i])
-		crc=ucrc32(str[i++],crc);
-	crc=~crc;
-	return(crc);
-}
-
-
-char *base41(unsigned int i, char *str)
-{
-	char c;
-	unsigned int j=41*41,k;
-
-for(c=0;c<3;c++) {
-	k=i/j;
-	str[c]='0'+k;
-	i-=(k*j);
-	j/=41;
-	if(str[c]>=':')
-		str[c]='A'+(str[c]-':');
-	if(str[c]>='[')
-		str[c]='#'+(str[c]-'['); }
-str[c]=0;
-return(str);
-}
-
-
-
-time_t checktime()
-{
-	struct tm tm;
-
-memset(&tm,0,sizeof(tm));
-tm.tm_year=94;
-tm.tm_mday=1;
-return(mktime(&tm)^0x2D24BD00L);
-}
-
-#define BUF_LEN 8192
-
-int main(int argc, char **argv)
-{
-	uchar	str[128],tmp[128],buf[BUF_LEN],fname[64],path[128],*p,ch;
-	int 	i,j,file,in,linelen,all=0;
-	ushort	xlat;
-	long	length,l;
-	ulong	offset,crc;
-	time_t	now;
-	struct	ffblk ff;
-	user_t	user;
-	smbmsg_t msg;
-	FILE	*stream;
-
-fprintf(stderr,"\nOUTPHOTO %s - Write SMM photos to SMB - Developed 1995-1997 "
-	"Rob Swindell\n\n",__DATE__);
-
-if(checktime()) {
-    printf("Time problem!\n");
-    return(-1); }
-
-if(argc<3) {
-	fprintf(stderr,"usage: outphoto <smm.dab> <smb_file>\n\n");
-	fprintf(stderr,"example: outphoto c:\\sbbs\\xtrn\\smm\\smm.dab "
-		"c:\\sbbs\\data\\subs\\syncdata\n");
-	return(1); }
-
-for(i=3;i<argc;i++)
-	if(!stricmp(argv[i],"/ALL"))
-		all=1;
-
-strcpy(smb.file,argv[2]);
-strupr(smb.file);
-
-strcpy(str,argv[1]);
-strupr(str);
-if((file=open(str,O_RDWR|O_BINARY|O_DENYNONE))==-1) {
-	printf("error opening %s\n",str);
-	return(1); }
-if((stream=fdopen(file,"w+b"))==NULL) {
-	printf("error fdopening %s\n",str);
-	return(1); }
-setvbuf(stream,NULL,_IOFBF,4096);
-
-sprintf(str,"%s.SHD",smb.file);
-if(!fexist(str)) {
-	printf("%s doesn't exist\n",smb.file);
-	return(0); }
-fprintf(stderr,"Opening %s\n",smb.file);
-smb.retry_time=30;
-if((i=smb_open(&smb))!=0) {
-	printf("smb_open returned %d\n",i);
-	return(1); }
-
-now=time(NULL);
-while(!feof(stream)) {
-	if(!fread(&user,sizeof(user_t),1,stream))
-		break;
-
-	if(user.misc&USER_DELETED || !(user.misc&USER_PHOTO))
-		continue;
-
-	printf("Photo: %-25.25s  %.24s  "
-		,user.name,ctime(&user.photo));
-
-	if(user.photo && now-user.photo<DAYS*24L*60L*60L && !all) {
-		printf("skipping\n");
-		continue; }
-	printf("hatching\n");
-
-	for(i=0;user.system[i];i++)
-		if(isalnum(user.system[i]))
-			break;
-	if(!user.system[i])
-		fname[0]='~';
-	else
-		fname[0]=user.system[i];
-	for(i=strlen(user.system)-1;i>0;i--)
-		if(isalnum(user.system[i]))
-			break;
-	if(i<=0)
-		fname[1]='~';
-	else
-		fname[1]=user.system[i];
-	fname[2]=0;
-	strcpy(str,user.system);
-	strupr(str);
-	strcat(fname,base41(crc16(str),tmp));
-	strcat(fname,base41(user.number,tmp));
-	strcpy(path,argv[1]);
-	p=strchr(path,'\\');
-	if(p) *(p+1)=0;
-	else path[0]=0;
-	sprintf(str,"%sPHOTO\\%s.*",path,fname);
-	if(findfirst(str,&ff,0)) {
-		printf("%s doesn't exist!\n",str);
-		continue; }
-	strcpy(fname,ff.ff_name);
-	strcpy(path,argv[1]);
-	p=strchr(path,'\\');
-	if(p) *(p+1)=0;
-	else path[0]=0;
-	sprintf(str,"%sPHOTO\\%s",path,fname);
-
-	printf("Exporting %s",str);
-	if((in=open(str,O_RDONLY|O_BINARY|SH_DENYWR))==-1) {
-		printf("\nError opening %s\n",str);
-		continue; }
-
-	memset(buf,0,BUF_LEN);
-	crc=0xffffffffUL;
-	linelen=0;
-	sprintf(buf,"%lx\r\n",filelength(in)^4096);
-	l=strlen(buf);
-	while(l<(BUF_LEN-128)) {
-		if(!read(in,&ch,1))
-			break;
-		crc=ucrc32(ch,crc);
-		if(ch=='`') {
-			buf[l++]='`';
-			buf[l++]='`';
-			linelen++; }
-		else if(ch==0xff)
-			buf[l++]='\xee';
-		else if(ch<0xf)
-			buf[l++]=ch|0xf0;
-		else if(ch<0x20) {
-			buf[l++]='`';
-			buf[l++]=ch+'@';
-			linelen++; }
-		else if(ch>=0xf0) {
-			sprintf(str,"`%x",ch&0xf);
-			buf[l++]=str[0];
-			buf[l++]=str[1];
-			linelen++; }
-		else if(ch==0xe3) {
-			buf[l++]='`';
-			buf[l++]='g';
-			linelen++; }
-		else if(ch==0x8d) {
-			buf[l++]='`';
-			buf[l++]='h';
-			linelen++; }
-		else if(ch==0xee) {
-			buf[l++]='`';
-			buf[l++]='i';
-            linelen++; }
-		else
-			buf[l++]=ch;
-		linelen++;
-		if(linelen>=70) {
-			buf[l++]=CR;
-			buf[l++]=LF;
-			linelen=0; } }
-	buf[l]=0;
-	crc=~crc;
-	sprintf(str,"%lx\r\n--- OUTPHOTO %s",time(NULL),__DATE__);
-	strcat(buf,str);
-	printf("\n");
-
-	length=strlen(buf);   /* +2 for translation string */
-
-	if(smb.status.attr&SMB_HYPERALLOC)
-		offset=smb_hallocdat(&smb);
-	else {
-		i=smb_open_da(&smb);
-		if(i) {
-			printf("smb_open_da returned %d\n",i);
-			exit(1); }
-		offset=smb_allocdat(&smb,length+2,1);
-		fclose(smb.sda_fp); }
-
-	fseek(smb.sdt_fp,offset,SEEK_SET);
-	xlat=XLAT_NONE;
-	fwrite(&xlat,2,1,smb.sdt_fp);
-	fwrite(buf,length,1,smb.sdt_fp);
-	length+=2;
-
-	memset(&msg,0,sizeof(smbmsg_t));
-	memcpy(msg.hdr.id,"SHD\x1a",4);
-	msg.hdr.version=SMB_VERSION;
-	msg.hdr.when_written.time=time(NULL);
-    
-	msg.hdr.offset=offset;
-
-	strcpy(str,"SMM PHOTO");
-	i=smb_hfield(&msg,RECIPIENT,strlen(str),str);
-	if(i) {
-		printf("smb_hfield returned %d\n",i);
-		smb_freemsgdat(&smb,offset,length,1);
-		exit(1); }
-	strlwr(str);
-	msg.idx.to=crc16(str);
-
-	strcpy(str,"Digital Dynamics");
-	i=smb_hfield(&msg,SENDER,strlen(str),str);
-	if(i) {
-		printf("smb_hfield returned %d\n",i);
-		smb_freemsgdat(&smb,offset,length,1);
-		exit(1); }
-	strlwr(str);
-	msg.idx.from=crc16(str);
-
-	sprintf(tmp,"%.25s",user.system);
-	strupr(tmp);
-	sprintf(str,"%04lx%08lx%08lx%.3s"
-		,user.number^0x191L,crc32(tmp)^0x90120e71L,crc^0x05296328L,fname+9);
-	i=smb_hfield(&msg,SUBJECT,strlen(str),str);
-	if(i) {
-		printf("smb_hfield returned %d\n",i);
-		smb_freemsgdat(&smb,offset,length,1);
-		exit(1); }
-	strlwr(str);
-	msg.idx.subj=crc16(str);
-
-	i=smb_dfield(&msg,TEXT_BODY,length);
-	if(i) {
-		printf("smb_dfield returned %d\n",i);
-		smb_freemsgdat(&smb,offset,length,1);
-		exit(1); }
-
-	i=smb_addmsghdr(&smb,&msg,smb.status.attr&SMB_HYPERALLOC);
-	if(i) {
-		printf("smb_addmsghdr returned %d\n",i);
-		smb_freemsgdat(&smb,offset,length,1);
-		exit(1); }
-	smb_freemsgmem(&msg);
-	fseek(stream,ftell(stream)-sizeof(user_t),SEEK_SET);
-	user.photo=time(NULL);
-	fwrite(&user,sizeof(user_t),1,stream);
-	fseek(stream,ftell(stream),SEEK_SET); }
-return(0);
-}
-
diff --git a/src/sbbs2/smm/smb2smm.c b/src/sbbs2/smm/smb2smm.c
deleted file mode 100644
index de596dd128..0000000000
--- a/src/sbbs2/smm/smb2smm.c
+++ /dev/null
@@ -1,970 +0,0 @@
-/* SMB2SMM */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* Scans SMB message base for messages to "SMM" and adds them to the SMM    */
-/* database. */
-
-#define  uint unsigned int
-
-#define LOOP_NOPEN 500
-
-#include <dos.h>
-#include "smblib.h"
-#include "smmdefs.h"
-#include "nodedefs.h"
-#include "crc32.h"
-
-#define VERSION "2.01"
-
-extern int daylight=0;
-extern long timezone=0L;
-
-unsigned _stklen=16000; 		  /* Set stack size in code, not header */
-
-char data_dir[128];
-
-smb_t smb;
-FILE *trashfile=NULL;
-
-uchar cryptchar(uchar ch, ulong seed)
-{
-if(ch==0xfe)
-	return(1);
-if(ch<0x20 || ch&0x80)	/* Ctrl chars and ex-ASCII are not xlated */
-	return(ch);
-return(ch^(seed&0x1f));
-}
-
-void decrypt(char *str, ulong seed)
-{
-	char out[1024];
-	int i,j;
-
-j=strlen(str);
-for(i=0;i<j;i++)
-	out[i]=cryptchar(str[i],seed^(i&7));
-out[i]=0;
-strcpy(str,out);
-}
-
-/****************************************************************************/
-/* Returns 32-crc of string (not counting terminating NULL) 				*/
-/****************************************************************************/
-ulong crc32(char *str)
-{
-	int i=0;
-	ulong crc=0xffffffffUL;
-
-	while(str[i])
-		crc=ucrc32(str[i++],crc);
-	crc=~crc;
-	return(crc);
-}
-
-/***************************************************************************/
-/* Truncates white-space chars off end of 'str' and terminates at first CR  */
-/****************************************************************************/
-void truncsp(char *str)
-{
-	char c;
-
-str[strcspn(str,"\r")]=0;
-c=strlen(str);
-while(c && (uchar)str[c-1]<=SP) c--;
-str[c]=0;
-}
-
-/****************************************************************************/
-/* Converts an ASCII Hex string into an ulong                       */
-/****************************************************************************/
-ulong ahtoul(char *str)
-{
-	ulong l,val=0;
-
-while(*str>' ' && (l=(*str++)|0x20)!=0x20)
-	val=(l&0xf)+(l>>6&1)*9+val*16;
-return(val);
-}
-
-
-/****************************************************************************/
-/* Checks the disk drive for the existence of a file. Returns 1 if it       */
-/* exists, 0 if it doesn't.                                                 */
-/****************************************************************************/
-char fexist(char *filespec)
-{
-    struct ffblk f;
-
-if(findfirst(filespec,&f,0)==0)
-    return(1);
-return(0);
-}
-
-/****************************************************************************/
-/* Returns the length of the file in 'filespec'                             */
-/****************************************************************************/
-long flength(char *filespec)
-{
-    struct ffblk f;
-
-if(findfirst(filespec,&f,0)==0)
-    return(f.ff_fsize);
-return(-1L);
-}
-
-
-/****************************************************************************/
-/* Converts a date string in format MM/DD/YY into unix time format			*/
-/****************************************************************************/
-time_t dstrtounix(char *str)
-{
-	struct date date;
-	struct time curtime;
-
-if(!strncmp(str,"00/00/00",8))
-	return(0);
-curtime.ti_hour=curtime.ti_min=curtime.ti_sec=0;
-if(str[6]<'7')
-	date.da_year=2000+((str[6]&0xf)*10)+(str[7]&0xf);
-else
-	date.da_year=1900+((str[6]&0xf)*10)+(str[7]&0xf);
-date.da_mon=((str[0]&0xf)*10)+(str[1]&0xf);
-date.da_day=((str[3]&0xf)*10)+(str[4]&0xf);
-return(dostounix(&date,&curtime));
-}
-
-/****************************************************************************/
-/* Updates 16-bit "rcrc" with character 'ch'                                */
-/****************************************************************************/
-void ucrc16(uchar ch, ushort *rcrc) {
-	ushort i, cy;
-    uchar nch=ch;
- 
-for (i=0; i<8; i++) {
-    cy=*rcrc & 0x8000;
-    *rcrc<<=1;
-    if (nch & 0x80) *rcrc |= 1;
-    nch<<=1;
-    if (cy) *rcrc ^= 0x1021; }
-}
-
-/****************************************************************************/
-/* Returns the age derived from the string 'birth' in the format MM/DD/YY	*/
-/****************************************************************************/
-char getage(char *birth)
-{
-	char age;
-	struct date date;
-
-if(birth[0]<=SP)
-	return(0);
-getdate(&date);
-age=(date.da_year-1900)-(((birth[6]&0xf)*10)+(birth[7]&0xf));
-if(age>90)
-	age-=90;
-if(atoi(birth)>12 || atoi(birth+3)>31)
-	return(0);
-if(((birth[0]&0xf)*10)+(birth[1]&0xf)>date.da_mon ||
-	(((birth[0]&0xf)*10)+(birth[1]&0xf)==date.da_mon &&
-	((birth[3]&0xf)*10)+(birth[4]&0xf)>date.da_day))
-	age--;
-if(age<0)
-	return(0);
-return(age);
-}
-
-/****************************************************************************/
-/* Returns 16-crc of string (not counting terminating NULL) 				*/
-/****************************************************************************/
-ushort crc16(char *str)
-{
-	int 	i=0;
-	ushort	crc=0;
-
-ucrc16(0,&crc);
-while(str[i])
-	ucrc16(str[i++],&crc);
-ucrc16(0,&crc);
-ucrc16(0,&crc);
-return(crc);
-}
-
-
-char *base41(unsigned int i, char *str)
-{
-	char c;
-	unsigned int j=41*41,k;
-
-for(c=0;c<3;c++) {
-	k=i/j;
-	str[c]='0'+k;
-	i-=(k*j);
-	j/=41;
-	if(str[c]>=':')
-		str[c]='A'+(str[c]-':');
-	if(str[c]>='[')
-		str[c]='#'+(str[c]-'['); }
-str[c]=0;
-return(str);
-}
-
-
-/****************************************************************************/
-/* Network open function. Opens all files DENYALL and retries LOOP_NOPEN    */
-/* number of times if the attempted file is already open or denying access  */
-/* for some other reason.	All files are opened in BINARY mode.			*/
-/****************************************************************************/
-int nopen(char *str, int access)
-{
-	char logstr[256];
-	int file,share,count=0;
-
-if(access&O_DENYNONE) share=O_DENYNONE;
-else if(access==O_RDONLY) share=O_DENYWRITE;
-else share=O_DENYALL;
-while(((file=open(str,O_BINARY|share|access,S_IWRITE))==-1)
-	&& errno==EACCES && count++<LOOP_NOPEN)
-	if(count>10)
-	   delay(55);
-if(file==-1 && errno==EACCES)
-	puts("\7\nNOPEN: ACCESS DENIED\n\7");
-return(file);
-}
-
-
-/****************************************************************************/
-/* Creates a short message for 'usernumber' than contains 'strin'			*/
-/****************************************************************************/
-void putsmsg(int usernumber, char *strin)
-{
-	char str[256];
-	int file,i;
-	struct ffblk ff;
-    node_t node;
-
-sprintf(str,"%sMSGS\\%4.4u.MSG",data_dir,usernumber);
-if((file=nopen(str,O_WRONLY|O_CREAT|O_APPEND))==-1) {
-	printf("\7Error opening/creating %s for creat/append access\n",str);
-	return; }
-i=strlen(strin);
-if(write(file,strin,i)!=i) {
-	close(file);
-	printf("\7Error writing %u bytes to %s\n",i,str);
-	return; }
-close(file);
-}
-
-void puttgram(int usernumber, char *strin)
-{
-	char str[256];
-	int file,i;
-	struct ffblk ff;
-    node_t node;
-
-sprintf(str,"%4.4u.MSG",usernumber);
-if((file=nopen(str,O_WRONLY|O_CREAT|O_APPEND))==-1) {
-	printf("\7Error opening/creating %s for creat/append access\n",str);
-	return; }
-i=strlen(strin);
-if(write(file,strin,i)!=i) {
-	close(file);
-	printf("\7Error writing %u bytes to %s\n",i,str);
-	return; }
-close(file);
-}
-
-int trash(char *instr)
-{
-	char str[1024],word[128];
-
-if(!trashfile)
-	return(0);
-strcpy(str,instr);
-strupr(str);
-rewind(trashfile);
-while(!ferror(trashfile)) {
-	if(!fgets(word,125,trashfile))
-		break;
-	truncsp(word);
-	if(!word[0])
-		continue;
-	strupr(word);
-	if(strstr(str,word))
-		return(1); }
-return(0);
-}
-
-time_t checktime()
-{
-	struct tm tm;
-
-memset(&tm,0,sizeof(tm));
-tm.tm_year=94;
-tm.tm_mday=1;
-return(mktime(&tm)^0x2D24BD00L);
-}
-
-int main(int argc, char **argv)
-{
-	uchar	str[256],system[128],telegram[1024],HUGE16 *buf,HUGE16 *hp, *p
-			,min_age,fname[64],path[128],tmp[128],ch;
-	int 	i,j,file,out,wallfile,msgfile,tgramonly=0,wallonly=0,esc;
-	ulong	l,m,last,high,system_crc,crc,length;
-	ushort	smm,smm_photo,touser;
-	user_t	user;
-	wall_t	wall;
-	smbmsg_t msg;
-	FILE	*stream,*index,*tmpfile;
-	ixb_t	ixb;
-
-fprintf(stderr,"\nSMB2SMM v%s - Updates SMM via SMB - Developed 1995-1997 "
-	"Rob Swindell\n\n",VERSION);
-
-if(checktime()) {
-    printf("Time problem!\n");
-    return(-1); }
-
-if(argc<3) {
-	fprintf(stderr,"usage: smb2smm <smb_file> <smm.dab>\n\n");
-	fprintf(stderr,"example: smb2smm c:\\sbbs\\data\\subs\\syncdata "
-		"c:\\sbbs\\xtrn\\smm\\smm.dab\n");
-	return(1); }
-
-p=getenv("SBBSNODE");
-if(p==NULL) {
-	printf("\7\nSBBSNODE environment variable not set.\n");
-	exit(1); }
-strcpy(str,p);
-if(str[strlen(str)-1]!='\\')
-	strcat(str,"\\");
-strcat(str,"XTRN.DAT");
-if((file=nopen(str,O_RDONLY))==-1 || (stream=fdopen(file,"rb"))==NULL) {
-	printf("\7\nCan't open %s\n",str);
-	exit(1); }
-fgets(str,81,stream);		/* user name */
-fgets(system,81,stream);	/* system name */
-truncsp(system);
-fgets(str,81,stream);		/* sysop name */
-fgets(str,81,stream);		/* guru name */
-fgets(str,81,stream);		/* ctrl dir */
-fgets(str,81,stream);		/* data dir */
-truncsp(str);
-if(str[0]=='.') {
-	strcpy(data_dir,p); 	/* node dir */
-	if(data_dir[strlen(data_dir)-1]!='\\')
-		strcat(data_dir,"\\");
-	strcat(data_dir,str); }
-else
-	strcpy(data_dir,str);
-fclose(stream);
-
-if(argc>3 && !stricmp(argv[3],"/t"))
-	tgramonly=1;
-
-if(argc>3 && !stricmp(argv[3],"/w"))
-	wallonly=1;
-
-strcpy(smb.file,argv[1]);
-strupr(smb.file);
-
-strcpy(str,argv[2]);
-strupr(str);
-if((file=open(str,O_RDWR|O_BINARY|O_DENYNONE|O_CREAT,S_IWRITE|S_IREAD))==-1) {
-	printf("error opening %s\n",str);
-	return(1); }
-if((stream=fdopen(file,"r+b"))==NULL) {
-	printf("error fdopening %s\n",str);
-	return(1); }
-setvbuf(stream,NULL,_IOFBF,4096);
-
-p=strrchr(str,'.');
-if(!p) p=str;
-else p++;
-strcpy(p,"IXB");
-if((file=open(str,O_RDWR|O_BINARY|O_DENYNONE|O_CREAT,S_IWRITE|S_IREAD))==-1) {
-	printf("error opening %s\n",str);
-	return(1); }
-if((index=fdopen(file,"r+b"))==NULL) {
-	printf("error fdopening %s\n",str);
-	return(1); }
-setvbuf(index,NULL,_IOFBF,1024);
-
-p=strrchr(str,'.');
-if(!p) p=str;
-else p++;
-strcpy(p,"CAN");
-trashfile=NULL;
-if((file=open(str,O_RDONLY|O_DENYNONE))!=-1) {
-	trashfile=fdopen(file,"rb");
-	setvbuf(trashfile,NULL,_IOFBF,4096); }
-
-p=strrchr(str,'.');
-if(!p) p=str;
-else p++;
-strcpy(p,"CFG");
-if((file=nopen(str,O_RDONLY))==-1) {
-	printf("error opening %s\n",str);
-    return(1); }
-if((tmpfile=fdopen(file,"rb"))==NULL) {
-	printf("error fdopening %s\n",str);
-    return(1); }
-fgets(str,128,tmpfile); /* Min purity age */
-fgets(str,128,tmpfile); /* Min profile age */
-truncsp(str);
-min_age=atoi(str);
-fclose(tmpfile);
-
-sprintf(str,"%s.SMM",smb.file);
-if((file=open(str,O_RDWR|O_BINARY|O_CREAT,S_IWRITE|S_IREAD))==-1) {
-	printf("error opening %s\n",str);
-	return(1); }
-if(read(file,&last,4)!=4)
-	last=0;
-high=last;
-
-sprintf(str,"%s.SHD",smb.file);
-if(!fexist(str)) {
-	printf("%s doesn't exist\n",smb.file);
-	return(0); }
-sprintf(str,"%s.SID",smb.file);
-if(!flength(str)) {
-	printf("%s is empty\n",smb.file);
-    return(0); }
-fprintf(stderr,"Opening %s\n",smb.file);
-smb.retry_time=30;
-if((i=smb_open(&smb))!=0) {
-	printf("smb_open returned %d\n",i);
-	return(1); }
-
-smm=crc16("smm");
-smm_photo=crc16("smm photo");
-
-if((i=smb_locksmbhdr(&smb))!=0) {				/* Be sure noone deletes or */
-	printf("Error locking %d\n",i);             /* adds while we're reading */
-	return(1); }
-
-rewind(smb.sid_fp);
-while(!feof(smb.sid_fp) && !ferror(smb.sid_fp)) {
-	if(!fread(&msg.idx,sizeof(idxrec_t),1,smb.sid_fp))
-        break;
-	fprintf(stderr,"\r#%-5lu  ",msg.idx.number);
-	if(msg.idx.to!=smm && msg.idx.to!=smm_photo)
-		continue;
-	if(msg.idx.number<=last || msg.idx.attr&MSG_DELETE)
-		continue;
-	high=msg.idx.number;
-	if((i=smb_lockmsghdr(&smb,&msg))!=0) {
-		printf("\7Error %d locking msg #%lu\n",i,msg.idx.number);
-		continue; }
-	if((i=smb_getmsghdr(&smb,&msg))!=0) {
-		smb_unlockmsghdr(&smb,&msg);
-		printf("\7Error %d reading msg #%lu\n",i,msg.idx.number);
-		continue; }
-
-	smb_unlockmsghdr(&smb,&msg);
-	if(!msg.from_net.type || !strnicmp(msg.from,system,25)) { // ignore local msg
-		smb_freemsgmem(&msg);
-		continue; }
-
-	printf("From: %-25.25s  To: %-25.25s  Subj: %s\n"
-		,msg.from,msg.to,msg.subj);
-
-	if(msg.idx.to==smm_photo) {
-		buf=smb_getmsgtxt(&smb,&msg,0);
-		if(!buf) {
-			smb_freemsgmem(&msg);
-			continue; }
-		sprintf(str,"%.4s",msg.subj);
-		l=ahtoul(str);
-		l^=0x0191;
-		sprintf(str,"%.8s",msg.subj+4);
-		system_crc=ahtoul(str);
-		system_crc^=0x90120e71;
-		fprintf(stderr,"Searching...");
-
-		rewind(index);
-		memset(&user,0,sizeof(user_t));
-		while(1) {
-			if(!fread(&ixb,sizeof(ixb_t),1,index)) {
-				memset(&user,0,sizeof(user_t));
-				break; }
-			if(ixb.number==l && ixb.system==system_crc) {
-				fseek(index,ftell(index)-sizeof(ixb_t),SEEK_SET);
-				fseek(stream,(ftell(index)/sizeof(ixb_t))*sizeof(user_t)
-					,SEEK_SET);
-				fread(&user,sizeof(user_t),1,stream);
-				break; } }
-		fprintf(stderr,"\n");
-
-		if(!user.number) {
-			printf("Profile Not found\n");
-			smb_freemsgmem(&msg);
-			continue; }
-
-		for(i=0;user.system[i];i++)
-			if(isalnum(user.system[i]))
-				break;
-		if(!user.system[i])
-			fname[0]='~';
-		else
-			fname[0]=user.system[i];
-		for(i=strlen(user.system)-1;i>0;i--)
-			if(isalnum(user.system[i]))
-				break;
-		if(i<=0)
-			fname[1]='~';
-		else
-			fname[1]=user.system[i];
-		fname[2]=0;
-		strcpy(str,user.system);
-        strupr(str);
-		strcat(fname,base41(crc16(str),tmp));
-		strcat(fname,base41(user.number,tmp));
-		sprintf(str,".%.3s",msg.subj+20);
-		strcat(fname,str);
-		strupr(fname);
-
-		if((out=nopen(fname,O_CREAT|O_WRONLY|O_TRUNC))==-1) {
-			printf("Error opening %s\n",fname);
-			smb_freemsgmem(&msg);
-			continue; }
-		
-		crc=0xffffffffUL;
-		esc=0;
-		for(l=0;buf[l]!=CR;l++)
-			;
-		buf[l]=0;
-		length=ahtoul((char *)buf)^4096;
-		l+=2;	/* Skip CRLF */
-		for(m=0;buf[l] && m<length;l++) {
-			ch=buf[l];
-			if(ch<SP)
-				continue;
-			if(ch=='`') {
-				if(esc) {
-					write(out,&ch,1);
-					m++;
-					crc=ucrc32(ch,crc);
-					esc=0; }
-				else
-					esc=1;
-				continue; }
-			if(esc) {
-				if(isalpha(ch)) {
-					if(isupper(ch))
-						ch-='@';
-					else if(ch=='g')
-						ch=0xe3;
-					else if(ch=='h')
-						ch=0x8d;
-					else if(ch=='i')
-						ch=0xee;
-					else
-						ch=0xfa+(ch-'a'); }
-				else
-					ch=0xf0+(ch-'0');
-				write(out,&ch,1);
-				m++;
-				crc=ucrc32(ch,crc);
-				esc=0;
-				continue; }
-			if(ch>=0xf0)
-				ch&=0xf;
-			if(ch==0xee)
-				ch=0xff;
-			write(out,&ch,1);
-			m++;
-			crc=ucrc32(ch,crc); }
-		close(out);
-		crc=~crc;
-		crc^=0x05296328L;
-		sprintf(str,"%.8s",msg.subj+12);
-		smb_freemsgmem(&msg);
-		if(crc!=ahtoul(str)) {
-			printf("CRC error!\n");
-			remove(fname);
-			continue; }
-		sprintf(path,"PHOTO\\%s",fname);
-        mkdir("PHOTO");
-		if(rename(fname,path)) {
-			printf("Error renaming %s to %s!\n",fname,path);
-			remove(fname);
-			continue; }
-		user.misc|=USER_PHOTO;
-		fseek(stream,(ftell(index)/sizeof(ixb_t))*sizeof(user_t),SEEK_SET);
-		fwrite(&user,sizeof(user_t),1,stream);
-		if(!strnicmp(user.system,system,25))
-			putsmsg(user.number
-				,"\1n\1h\1mYour photo has been imported into "
-					"\1wMatch Maker\1n\7\r\n");
-		continue; }
-
-	if(!stricmp(msg.subj,"->WALL<-")) {
-		buf=smb_getmsgtxt(&smb,&msg,0);
-		smb_freemsgmem(&msg);
-		if(!buf)
-			continue;
-		memset(&wall,0,sizeof(wall_t));
-		hp=buf;
-		while(*hp && *hp<SP) hp++;
-		for(i=0;*hp>=SP && i<25;i++,hp++)
-			wall.name[i]=*hp;
-		wall.name[i]=0;
-		hp+=2;	 /* Skip CRLF */
-		for(i=0;*hp>=SP && i<40;i++,hp++)
-			wall.system[i]=*hp;
-		wall.system[i]=0;
-		hp+=2;	 /* Skip CRLF */
-		for(i=0;i<5;i++) {
-			for(j=0;*hp>=SP && j<70;j++,hp++)
-				wall.text[i][j]=*hp;
-			wall.text[i][j]=0;
-			hp+=2; }
-
-		wall.written=ahtoul((char *)hp);
-		wall.imported=time(NULL);
-		FREE((char *)buf);
-		decrypt(wall.name,wall.written);
-		decrypt(wall.system,wall.written);
-		for(i=0;i<5;i++) {
-			decrypt(wall.text[i],wall.written);
-			if(trash(wall.text[i])) {
-				printf("Rejected: Wall writing found in trash!\n");
-				break; } }
-		if(i<5)
-			continue;
-		if((wallfile=sopen("WALL.DAB",O_WRONLY|O_BINARY|O_CREAT,SH_DENYNO
-			,S_IWRITE|S_IREAD))==-1) {
-			printf("Couldn't open WALL.DAB!\n");
-			continue; }
-		lseek(wallfile,0L,SEEK_END);
-		write(wallfile,&wall,sizeof(wall_t));
-		close(wallfile);
-		continue; }
-
-	if(wallonly) {
-		smb_freemsgmem(&msg);
-		continue; }
-
-	if(!stricmp(msg.subj,"->ALL<-")
-		|| !stricmp(msg.subj,"->SYS<-")
-		|| !stricmp(msg.subj,"->ONE<-")) {
-		sprintf(str,"%.3s%05lu.MSG",msg.subj+2,msg.idx.number);
-		buf=smb_getmsgtxt(&smb,&msg,0);
-		smb_freemsgmem(&msg);
-		if(!buf)
-            continue;
-		l=ahtoul((char *)buf);
-		if(!l)
-            continue;
-		for(i=0;buf[i];i++)
-            if(buf[i]==LF)
-                break;
-        if(buf[i]!=LF)
-            continue;
-		if((msgfile=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1) {
-			printf("error opening %s\n",str);
-			continue; }
-		if((tmpfile=fdopen(msgfile,"wb"))==NULL) {
-			close(msgfile);
-			printf("error fdopening %s\n",str);
-			continue; }
-		fprintf(tmpfile,"%08lx\r\n",l);
-		l^=0x305F6C81UL;
-		for(i++;buf[i];i++)
-			fputc(cryptchar(buf[i],l^(i&7)),tmpfile);
-		fclose(tmpfile);
-		putsmsg(1,"\1n\1h\1mNew announcement in \1wMatch Maker\1n\7\r\n");
-		continue; }
-
-
-	j=strlen(msg.subj);
-	for(i=0;i<j;i++)
-		if(!isdigit(msg.subj[i]))
-			break;
-	if(i<j) {				/* at least one non-digit, must be telegram */
-		if(strnicmp(msg.subj,system,25)) {
-			smb_freemsgmem(&msg);
-			continue; }
-		buf=smb_getmsgtxt(&smb,&msg,0);
-		smb_freemsgmem(&msg);
-		if(!buf)
-			continue;
-		l=0;
-		while(buf[l] && buf[l]!='}')         /* Find first text on line */
-			l++;
-		if(!buf[l] || !buf[++l]) {
-			FREE(buf);
-			continue; }
-		touser=ahtoul((char *)buf+l);
-		while(buf[l] && buf[l]>=SP) 	/* Go to end of line */
-			l++;
-		while(buf[l] && buf[l]<=SP) 	/* next line */
-			l++;
-		i=0;
-		while(buf[l]) {
-			if(buf[l]==LF && buf[l+1]==CR) { /* blank line */
-				telegram[i++]=LF;
-				break; }
-			telegram[i++]=buf[l++]; }
-		telegram[i]=0;
-		decrypt(telegram,touser);
-		printf("Telegram to %u\n",touser);
-		if(trash(telegram))
-			printf("Rejected: Contents in trash!\n");
-		else {
-			putsmsg(touser,TGRAM_NOTICE);
-			puttgram(touser,telegram); }
-		FREE(buf);
-		continue;
-		}
-
-	if(tgramonly) {
-		smb_freemsgmem(&msg);
-		continue; }
-
-	if(!msg.from[0]) {
-		smb_freemsgmem(&msg);
-		printf("Blank 'from' field.\n");
-        continue; }
-
-	l=atol(msg.subj);
-	if(!l || l>65535L) {
-		smb_freemsgmem(&msg);
-		printf("Invalid profile.\n");
-		continue; }
-	fprintf(stderr,"Searching for %lu @ %s",l,msg.from);
-	sprintf(str,"%.25s",msg.from);
-	strupr(str);
-	system_crc=crc32(str);
-
-	rewind(index);
-	memset(&user,0,sizeof(user_t));
-	while(1) {
-		if(!fread(&ixb,sizeof(ixb_t),1,index)) {
-			memset(&user,0,sizeof(user_t));
-			break; }
-		if(ixb.number==l && ixb.system==system_crc) {
-			fseek(index,ftell(index)-sizeof(ixb_t),SEEK_SET);
-			fseek(stream,(ftell(index)/sizeof(ixb_t))*sizeof(user_t),SEEK_SET);
-			fread(&user,sizeof(user_t),1,stream);
-			if(!(user.misc&USER_FROMSMB)) {
-				memset(&user,0,sizeof(user_t));
-				fread(&ixb,sizeof(ixb_t),1,index);
-				continue; }
-			break; } }
-	fprintf(stderr,"\n");
-
-	if(!user.number) {
-		fprintf(stderr,"Searching for unused record...");
-		rewind(index);
-		while(1) {					/* Find deleted record */
-			if(!fread(&ixb,sizeof(ixb_t),1,index))
-				break;
-			if(ixb.number==0) {
-				fseek(index,ftell(index)-sizeof(ixb_t),SEEK_SET);
-				break; } }
-		user.created=time(NULL);
-		user.number=l;
-		sprintf(user.system,"%-.40s",msg.from);
-		fprintf(stderr,"\n"); }
-
-	fseek(stream,(ftell(index)/sizeof(ixb_t))*sizeof(user_t),SEEK_SET);
-	user.updated=time(NULL);
-	user.misc|=USER_FROMSMB;
-	buf=smb_getmsgtxt(&smb,&msg,0);
-	l=0;
-	while(buf[l]) {
-		while(buf[l] && buf[l]<=SP) 		/* Find first text on line */
-			l++;
-		if(!strnicmp((char *)buf+l,"0:",2)) {
-			l+=2;
-			sprintf(user.name,"%-.25s",(char *)buf+l);
-			truncsp(user.name);
-			decrypt(user.name,user.number); }
-		if(!strnicmp((char *)buf+l,"1:",2)) {
-			l+=2;
-			sprintf(user.realname,"%-.25s",(char *)buf+l);
-			truncsp(user.realname);
-			decrypt(user.realname,user.number); }
-		if(!strnicmp((char *)buf+l,"2:",2)) {
-			l+=2;
-			sprintf(user.birth,"%-.8s",(char *)buf+l);
-			decrypt(user.birth,user.number); }
-		if(!strnicmp((char *)buf+l,"3:",2)) {
-			l+=2;
-			sprintf(user.location,"%-.30s",(char *)buf+l);
-			truncsp(user.location);
-			decrypt(user.location,user.number); }
-		if(!strnicmp((char *)buf+l,"4:",2)) {
-            l+=2;
-			sprintf(user.zipcode,"%-.10s",(char *)buf+l);
-            truncsp(user.zipcode);
-			decrypt(user.zipcode,user.number); }
-		if(!strnicmp((char *)buf+l,"5:",2)) {
-			l+=2;
-			sprintf(user.min_zipcode,"%-.10s",(char *)buf+l);
-			truncsp(user.min_zipcode);
-			decrypt(user.min_zipcode,user.number); }
-		if(!strnicmp((char *)buf+l,"6:",2)) {
-			l+=2;
-			sprintf(user.max_zipcode,"%-.10s",(char *)buf+l);
-			truncsp(user.max_zipcode);
-			decrypt(user.max_zipcode,user.number); }
-		if(!strnicmp((char *)buf+l,"7:",2)) {
-			l+=2;
-			sprintf(user.mbtype,"%-.4s",(char *)buf+l);
-			truncsp(user.mbtype);
-			decrypt(user.mbtype,user.number); }
-
-		if(!strnicmp((char *)buf+l,"A:",2)) {
-			l+=2;
-			sprintf(user.note[0],"%-.50s",(char *)buf+l);
-			truncsp(user.note[0]);
-			decrypt(user.note[0],user.number); }
-		if(!strnicmp((char *)buf+l,"B:",2)) {
-			l+=2;
-			sprintf(user.note[1],"%-.50s",(char *)buf+l);
-			truncsp(user.note[1]);
-			decrypt(user.note[1],user.number); }
-		if(!strnicmp((char *)buf+l,"C:",2)) {
-			l+=2;
-			sprintf(user.note[2],"%-.50s",(char *)buf+l);
-			truncsp(user.note[2]);
-			decrypt(user.note[2],user.number); }
-		if(!strnicmp((char *)buf+l,"D:",2)) {
-			l+=2;
-			sprintf(user.note[3],"%-.50s",(char *)buf+l);
-			truncsp(user.note[3]);
-			decrypt(user.note[3],user.number); }
-		if(!strnicmp((char *)buf+l,"E:",2)) {
-			l+=2;
-			sprintf(user.note[4],"%-.50s",(char *)buf+l);
-			truncsp(user.note[4]);
-			decrypt(user.note[4],user.number); }
-
-		if(!strnicmp((char *)buf+l,"F:",2)) {
-			l+=2;
-			user.sex=buf[l];
-			user.pref_sex=buf[l+1]; }
-
-		if(!strnicmp((char *)buf+l,"G:",2)) {
-			l+=2;
-			user.marital=ahtoul((char *)buf+l); }
-		if(!strnicmp((char *)buf+l,"H:",2)) {
-			l+=2;
-			user.pref_marital=ahtoul((char *)buf+l); }
-
-		if(!strnicmp((char *)buf+l,"I:",2)) {
-			l+=2;
-			user.race=ahtoul((char *)buf+l); }
-		if(!strnicmp((char *)buf+l,"J:",2)) {
-			l+=2;
-			user.pref_race=ahtoul((char *)buf+l); }
-
-		if(!strnicmp((char *)buf+l,"K:",2)) {
-			l+=2;
-			user.hair=ahtoul((char *)buf+l); }
-		if(!strnicmp((char *)buf+l,"L:",2)) {
-			l+=2;
-			user.pref_hair=ahtoul((char *)buf+l); }
-
-		if(!strnicmp((char *)buf+l,"M:",2)) {
-			l+=2;
-			user.eyes=ahtoul((char *)buf+l); }
-		if(!strnicmp((char *)buf+l,"N:",2)) {
-			l+=2;
-			user.pref_eyes=ahtoul((char *)buf+l); }
-
-		if(!strnicmp((char *)buf+l,"O:",2)) {
-			l+=2;
-			user.weight=ahtoul((char *)buf+l); }
-		if(!strnicmp((char *)buf+l,"P:",2)) {
-			l+=2;
-			user.min_weight=ahtoul((char *)buf+l); }
-		if(!strnicmp((char *)buf+l,"Q:",2)) {
-			l+=2;
-			user.max_weight=ahtoul((char *)buf+l); }
-
-		if(!strnicmp((char *)buf+l,"R:",2)) {
-			l+=2;
-			user.height=ahtoul((char *)buf+l); }
-		if(!strnicmp((char *)buf+l,"S:",2)) {
-			l+=2;
-			user.min_height=ahtoul((char *)buf+l); }
-		if(!strnicmp((char *)buf+l,"T:",2)) {
-			l+=2;
-			user.max_height=ahtoul((char *)buf+l); }
-
-		if(!strnicmp((char *)buf+l,"U:",2)) {
-			l+=2;
-			user.min_age=ahtoul((char *)buf+l); }
-		if(!strnicmp((char *)buf+l,"V:",2)) {
-			l+=2;
-			user.max_age=ahtoul((char *)buf+l); }
-
-		if(!strnicmp((char *)buf+l,"W:",2)) {
-			l+=2;
-			user.purity=ahtoul((char *)buf+l); }
-
-		if(!strnicmp((char *)buf+l,"X:",2)) {
-			l+=2;
-			user.income=ahtoul((char *)buf+l); }
-		if(!strnicmp((char *)buf+l,"Y:",2)) {
-			l+=2;
-			user.min_income=ahtoul((char *)buf+l); }
-		if(!strnicmp((char *)buf+l,"Z:",2)) {
-			l+=2;
-			user.max_income=ahtoul((char *)buf+l); }
-
-		if(toupper(buf[l])=='*' && isdigit(buf[l+1])) {  /* Questionnaires */
-			i=buf[l+1]-'0';
-			l+=2;
-			sprintf(user.queans[i].name,"%-.8s",(char *)buf+l);
-			truncsp(user.queans[i].name);
-			decrypt(user.queans[i].name,user.number);
-			while(buf[l] && buf[l]>=SP) l++;	/* Go to end of line */
-			for(j=0;j<20;j++) {
-				while(buf[l] && buf[l]<=SP) l++;
-				user.queans[i].self[j]=ahtoul((char *)buf+l);
-				l+=5;
-				user.queans[i].pref[j]=ahtoul((char *)buf+l);
-				l+=5; } }
-
-		while(buf[l] && buf[l]>=SP) 	/* Go to end of line */
-			l++; }
-
-	if(getage(user.birth)<min_age)		/* Too young */
-		printf("Rejected: User's age (%u) less than minimum age (%u)\n"
-			,getage(user.birth),min_age);
-	else if(user.name[0]<SP || user.realname[0]<SP || user.system[0]<SP
-		|| user.location[0]<SP || user.zipcode[0]<SP || user.birth[0]<SP)
-		printf("Rejected: Invalid user string\n");
-	else if(trash(user.name))
-		printf("Rejected: User's name (%s) in trash!\n",user.name);
-	else if(trash(user.location))
-		printf("Rejected: User's location (%s) in trash!\n",user.location);
-	else if(trash(user.note[0]) || trash(user.note[1]) || trash(user.note[2])
-		|| trash(user.note[3]) || trash(user.note[4]))
-		printf("Rejected: User's personal text in trash!\n");
-	else {
-		fwrite(&user,sizeof(user_t),1,stream);
-		strupr(user.name);
-		ixb.name=crc32(user.name);
-		strupr(user.system);
-		user.system[25]=0;
-		ixb.system=crc32(user.system);
-		ixb.number=user.number;
-		ixb.updated=user.updated;
-		fwrite(&ixb,sizeof(ixb_t),1,index); }
-	FREE((char *)buf);
-	smb_freemsgmem(&msg);
-	}
-
-lseek(file,0L,SEEK_SET);
-write(file,&high,4);
-close(file);
-return(0);
-}
-
diff --git a/src/sbbs2/smm/smm.c b/src/sbbs2/smm/smm.c
deleted file mode 100644
index d71d058266..0000000000
--- a/src/sbbs2/smm/smm.c
+++ /dev/null
@@ -1,3993 +0,0 @@
-/* SMM.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* Synchronet Match Maker */
-
-#include "xsdk.h"
-#include "crc32.h"
-#include "smmdefs.h"
-#include "smmvars.c"
-
-/* RCIOLL.ASM */
-
-int  rioini(int com,int irq);          /* initialize com,irq */
-int  setbaud(int rate);                /* set baud rate */
-int  rioctl(int action);               /* remote i/o control */
-int  dtr(char onoff);                  /* set/reset dtr */
-int  outcom(int ch);                   /* send character */
-int  incom(void);                      /* receive character */
-int  ivhctl(int intcode);              /* local i/o redirection */
-
-/************************/
-/* Remote I/O Constants */
-/************************/
-
-							/* i/o mode and state flags */
-#define CTSCK 0x1000     	/* check cts (mode only) */
-#define RTSCK 0x2000		/* check rts (mode only) */
-#define TXBOF 0x0800		/* transmit buffer overflow (outcom only) */
-#define ABORT 0x0400     	/* check for ^C (mode), aborting (state) */
-#define PAUSE 0x0200     	/* check for ^S (mode), pausing (state) */
-#define NOINP 0x0100     	/* input buffer empty (incom only) */
-
-							/* status flags */
-#define RIODCD	0x80		/* DCD on */
-#define RI		0x40		/* Ring indicate */
-#define DSR 	0x20		/* Dataset ready */
-#define CTS 	0x10       	/* CTS on */
-#define FERR 	0x08		/* Frameing error */
-#define PERR 	0x04		/* Parity error */
-#define OVRR 	0x02		/* Overrun */
-#define RXLOST 	0x01       	/* Receive buffer overflow */
-
-/* rioctl() arguments */
-/* returns mode or state flags in high 8 bits, status flags in low 8 bits */
-
-							/* the following return mode in high 8 bits */
-#define IOMODE 0        	/* no operation */
-#define IOSM 1          	/* i/o set mode flags */
-#define IOCM 2          	/* i/o clear mode flags */
-							/* the following return state in high 8 bits */
-#define IOSTATE 4       	/* no operation */
-#define IOSS 5          	/* i/o set state flags */
-#define IOCS 6          	/* i/o clear state flags */
-#define IOFB 0x308      	/* i/o buffer flush */
-#define IOFI 0x208      	/* input buffer flush */
-#define IOFO 0x108      	/* output buffer flush */
-#define IOCE 9          	/* i/o clear error flags */
-
-							/* return count (16bit)	*/
-#define RXBC	0x0a		/* get receive buffer count */
-#define TXBC	0x0b		/* get transmit buffer count */
-#define TXSYNC  0x0c        /* sync transmition (seconds<<8|0x0c) */
-#define IDLE	0x0d		/* suspend communication routines */
-#define RESUME  0x10d		/* return from suspended state */
-#define RLERC	0x000e		/* read line error count and clear */
-#define CPTON	0x0110		/* set input translation flag for ctrl-p on */
-#define CPTOFF	0x0010		/* set input translation flag for ctrl-p off */
-#define GETCPT	0x8010		/* return the status of ctrl-p translation */
-#define MSR 	0x0011		/* read modem status register */
-#define FIFOCTL 0x0012		/* FIFO UART control */
-#define TSTYPE	0x0013		/* Time-slice API type */
-#define GETTST  0x8013      /* Get Time-slice API type */
-
-
-#define I14DB	0x001d		/* DigiBoard int 14h driver */
-#define I14PC	0x011d		/* PC int 14h driver */
-#define I14PS	0x021d		/* PS/2 int 14h driver */
-#define I14FO   0x031d      /* FOSSIL int 14h driver */
-
-
-							/* ivhctl() arguments */
-#define INT29R 1         	/* copy int 29h output to remote */
-#define INT29L 2			/* Use _putlc for int 29h */
-#define INT16  0x10      	/* return remote chars to int 16h calls */
-#define INTCLR 0            /* release int 16h, int 29h */
-
-#define CLREOL		256 	/* Character to erase to end of line		*/
-#define HIGH        8       /* High intensity for curatr             */
-
-extern uint riobp;
-extern int mswtyp;
-
-unsigned _stklen=16000; 	/* Set stack size in code, not header */
-
-int cbreakh(void);			/* ctrl-break handler */
-
-char getage(char *birth);
-char long_user_info(user_t user);
-void main_user_info(user_t user);
-
-char *nulstr="";
-char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
-char *mon[]={"Jan","Feb","Mar","Apr","May","Jun"
-            ,"Jul","Aug","Sep","Oct","Nov","Dec"};
-char tmp[256],door_sys[128];
-
-char io_int=0;
-struct date date;
-struct time curtime;
-time_t now;
-int smm_pause=1,node_scrnlen;
-questionnaire_t *que[5];
-int total_ques;
-user_t useron,tmpuser;
-ixb_t ixb;
-ulong useron_record,system_crc;
-FILE *stream,*index,*trashfile;
-
-char *PrevReadSendQuitOrMore="\r\n\1n\1b\1h[\1cP\1b]revious screen, "
-	"[\1cR\1b]ead profile, [\1cS\1b]end telegram, [\1cQ\1b]uit, or "
-	"[\1cM\1b]ore: \1w";
-
-int intocm(int in)
-{
-return(in*2.538071);
-}
-
-int cmtoin(int cm)
-{
-	int i;
-
-i=cm*0.394;
-if(((float)cm*0.394)-(float)i>=.5)
-	i++;
-return(i);
-}
-
-int kgtolp(int kg)
-{
-return(kg*2.2046);
-}
-
-int lptokg(int lp)
-{
-	int i;
-
-i=lp*0.453597;
-if(((float)lp*0.453597)-(float)i>=.5)
-	i++;
-return(i);
-}
-
-/****************************************************************************/
-/* Performs printf() through local assembly routines                        */
-/* Called from everywhere                                                   */
-/****************************************************************************/
-int lprintf(char *fmat, ...) {
-	char sbuf[256];
-	int chcount;
-
-chcount=vsprintf(sbuf,fmat,_va_ptr);
-lputs(sbuf);
-return(chcount);
-}
-
-/*****************************************************************************/
-/* Returns command line generated from instr with %c replacments             */
-/*****************************************************************************/
-char *cmdstr(char *instr, char *fpath, char *fspec, char *outstr)
-{
-	static char static_cmd[128];
-	char str[256],str2[128],*cmd;
-    int i,j,len;
-
-if(outstr==NULL)
-	cmd=static_cmd;
-else
-	cmd=outstr;
-len=strlen(instr);
-for(i=j=0;i<len && j<128;i++) {
-    if(instr[i]=='%') {
-        i++;
-        cmd[j]=0;
-        switch(toupper(instr[i])) {
-            case 'A':   /* User alias */
-				strcat(cmd,user_name);
-                break;
-            case 'B':   /* Baud (DTE) Rate */
-				strcat(cmd,ultoa(com_rate,str,10));
-                break;
-            case 'C':   /* Connect Description */
-				strcat(cmd,ultoa(user_dce,str,10));
-                break;
-            case 'F':   /* File path */
-                strcat(cmd,fpath);
-                break;
-            case 'G':   /* Temp directory */
-				strcat(cmd,temp_dir);
-                break;
-            case 'I':   /* UART IRQ Line */
-                strcat(cmd,itoa(com_irq,str,10));
-                break;
-            case 'J':
-				strcat(cmd,data_dir);
-                break;
-            case 'K':
-				strcat(cmd,ctrl_dir);
-                break;
-            case 'N':   /* Node Directory (same as SBBSNODE environment var) */
-                strcat(cmd,node_dir);
-                break;
-            case 'O':   /* SysOp */
-                strcat(cmd,sys_op);
-                break;
-            case 'P':   /* COM Port */
-				strcat(cmd,itoa(com_port,str,10));
-                break;
-            case 'Q':   /* QWK ID */
-                strcat(cmd,sys_id);
-                break;
-            case 'R':   /* Rows */
-				strcat(cmd,itoa(user_rows,str,10));
-                break;
-            case 'S':   /* File Spec */
-                strcat(cmd,fspec);
-                break;
-            case 'T':   /* Time left in seconds */
-				strcat(cmd,itoa(time(NULL)-starttime,str,10));
-                break;
-            case 'U':   /* UART I/O Address (in hex) */
-                strcat(cmd,itoa(com_base,str,16));
-                break;
-            case 'W':   /* Time-slice API type (mswtype) */
-#ifndef __OS2__
-                strcat(cmd,itoa(mswtyp,str,10));
-#endif
-                break;
-            case '&':   /* Address of msr */
-				sprintf(str,"%lu",&riobp-1);
-                strcat(cmd,str);
-                break;
-			case 'Z':
-				strcat(cmd,text_dir);
-                break;
-            case '!':   /* EXEC Directory */
-				strcat(cmd,exec_dir);
-                break;
-            case '#':   /* Node number (same as SBBSNNUM environment var) */
-                sprintf(str,"%d",node_num);
-                strcat(cmd,str);
-                break;
-            case '*':
-                sprintf(str,"%03d",node_num);
-                strcat(cmd,str);
-                break;
-            case '$':   /* Credits */
-				strcat(cmd,ultoa(user_cdt,str,10));
-                break;
-            case '%':   /* %% for percent sign */
-                strcat(cmd,"%");
-                break;
-            default:    /* unknown specification */
-                if(isdigit(instr[i])) {
-					sprintf(str,"%0*d",instr[i]&0xf,user_number);
-                    strcat(cmd,str); }
-                break; }
-        j=strlen(cmd); }
-    else
-        cmd[j++]=instr[i]; }
-cmd[j]=0;
-
-return(cmd);
-}
-
-char *base41(unsigned int i, char *str)
-{
-	char c;
-	unsigned int j=41*41,k;
-
-for(c=0;c<3;c++) {
-	k=i/j;
-	str[c]='0'+k;
-	i-=(k*j);
-	j/=41;
-	if(str[c]>=':')
-		str[c]='A'+(str[c]-':');
-	if(str[c]>='[')
-		str[c]='#'+(str[c]-'['); }
-str[c]=0;
-return(str);
-}
-
-/****************************************************************************/
-/* Updates 16-bit "rcrc" with character 'ch'                                */
-/****************************************************************************/
-void ucrc16(uchar ch, ushort *rcrc) {
-    ushort i, cy;
-    uchar nch=ch;
- 
-for (i=0; i<8; i++) {
-    cy=*rcrc & 0x8000;
-    *rcrc<<=1;
-    if (nch & 0x80) *rcrc |= 1;
-    nch<<=1;
-    if (cy) *rcrc ^= 0x1021; }
-}
-
-/****************************************************************************/
-/* Returns 16-crc of string (not counting terminating NULL)                 */
-/****************************************************************************/
-ushort crc16(char *str)
-{
-    int     i=0;
-    ushort  crc=0;
-
-ucrc16(0,&crc);
-while(str[i])
-    ucrc16(str[i++],&crc);
-ucrc16(0,&crc);
-ucrc16(0,&crc);
-return(crc);
-}
-
-
-int cdt_warning(long cdt)
-{
-if(cdt==0)
-	return(1);
-if(cdt>0) {
-	bprintf("\1m\1hYou will receive \1w%luk\1m in credits for this action!\r\n"
-		,cdt/1024L);
-	return(1); }
-
-bprintf("\1m\1hThis action will cost you \1w%luk\1m in credits.",(-cdt)/1024L);
-if(user_cdt+cdt_adjustment<-cdt) {
-	bprintf("\r\n\r\n\1r\1hSorry, you only have \1w%luk\1m in credits.\r\n"
-		,(user_cdt+cdt_adjustment)/1024L);
-	return(0); }
-return(!noyes(" Continue"));
-}
-
-void adjust_cdt(long cdt)
-{
-if(cdt==0)
-	return;
-cdt_adjustment+=cdt;
-}
-
-int got_flags(char *req, char *got)
-{
-	int i,j;
-
-for(i=0;req[i];i++) {
-	for(j=0;got[j];j++)
-		if(req[i]==got[j])
-			break;
-	if(!got[j])
-		break; }
-if(!req[i])
-	return(1);
-return(0);
-}
-
-int can_add()
-{
-	uchar age=getage(user_birth);
-
-if(user_level<min_level || (age && getage(user_birth)<min_age)
-	|| !got_flags(req_flags1,user_flags1)
-	|| !got_flags(req_flags2,user_flags2)
-	|| !got_flags(req_flags3,user_flags3)
-	|| !got_flags(req_flags4,user_flags4)
-	)
-	return(0);
-return(1);
-}
-
-
-int trash(char *instr)
-{
-	char str[128],word[128];
-
-if(!trashfile)
-	return(0);
-strcpy(str,instr);
-strupr(str);
-rewind(trashfile);
-while(!ferror(trashfile)) {
-	if(!fgets(word,125,trashfile))
-		break;
-	truncsp(word);
-	if(!word[0])
-		continue;
-	strupr(word);
-	if(strstr(str,word))
-		return(1); }
-return(0);
-}
-
-long fdate_dir(char *filespec)
-{
-    struct ffblk f;
-    struct date fd;
-    struct time ft;
-
-if(findfirst(filespec,&f,FA_RDONLY|FA_HIDDEN|FA_SYSTEM|FA_DIREC)==NULL) {
-	fd.da_day=f.ff_fdate&0x1f;
-	fd.da_mon=(f.ff_fdate>>5)&0xf;
-	fd.da_year=1980+((f.ff_fdate>>9)&0x7f);
-	ft.ti_hour=(f.ff_ftime>>11)&0x1f;
-	ft.ti_min=(f.ff_ftime>>5)&0x3f;
-	ft.ti_sec=(f.ff_ftime&0xf)*2;
-    return(dostounix(&fd,&ft)); }
-else return(NULL);
-}
-
-/****************************************************************************/
-/* Generates a 24 character ASCII string that represents the time_t pointer */
-/* Used as a replacement for ctime()                                        */
-/****************************************************************************/
-char *timestr(time_t *intime)
-{
-    static char str[256];
-    char mer[3],hour;
-    struct tm *gm;
-
-gm=localtime(intime);
-if(gm->tm_hour>=12) {
-    if(gm->tm_hour==12)
-        hour=12;
-    else
-        hour=gm->tm_hour-12;
-    strcpy(mer,"pm"); }
-else {
-    if(gm->tm_hour==0)
-        hour=12;
-    else
-        hour=gm->tm_hour;
-    strcpy(mer,"am"); }
-sprintf(str,"%s %s %02d %4d %02d:%02d %s"
-    ,wday[gm->tm_wday],mon[gm->tm_mon],gm->tm_mday,1900+gm->tm_year
-    ,hour,gm->tm_min,mer);
-return(str);
-}
-
-
-void puttgram(int usernumber, char *strin)
-{
-	char str[256];
-	int file,i;
-
-sprintf(str,"%4.4u.MSG",usernumber);
-if((file=nopen(str,O_WRONLY|O_CREAT|O_APPEND))==-1) {
-	printf("\7Error opening/creating %s for creat/append access\n",str);
-	return; }
-i=strlen(strin);
-if(write(file,strin,i)!=i) {
-	close(file);
-	printf("\7Error writing %u bytes to %s\n",i,str);
-	return; }
-close(file);
-}
-
-
-int send_telegram(user_t user)
-{
-	uchar str[256],line[256],buf[1024];
-	int i;
-
-if(!useron.number) {
-	bputs("\r\n\1h\1rYou must create a profile first.\r\n");
-	pause();
-	return(1); }
-
-if(user_level<telegram_level) {
-	bputs("\r\n\1h\1rYou have insufficient access to send telegrams."
-		"\r\n");
-	pause();
-	return(1); }
-
-main_user_info(user);
-CRLF;
-if(!cdt_warning(telegram_cdt))
-	return(0);
-if(telegram_cdt)
-	CRLF;
-bprintf("\1n\1hSending a telegram to \1y%s\1w:\r\n\r\n"
-	,user.name);
-now=time(NULL);
-memset(buf,0,512);
-sprintf(buf,"\1n\1c\1hMatch Maker\1b telegram from \1c%s\1b "
-	"on %s:\1y\r\n"
-	,useron.name,timestr(&now));
-for(i=0;i<5 && !aborted;i++) {
-	bprintf("\1n\1h\1g%u of 5: \1n\1g",i+1);
-	if(!getstr(line,70,i==4 ? K_MSG:K_MSG|K_WRAP))
-		break;
-	sprintf(str,"\1n\1g%4s%s\r\n",nulstr,line);
-	strcat(buf,str); }
-if(!i || aborted || !yesno("\r\nSave"))
-	return(0);
-if(!(user.misc&USER_FROMSMB)) {
-	putsmsg(user.number,TGRAM_NOTICE);
-	puttgram(user.number,buf); }
-else {
-	if((i=nopen("TELEGRAM.DAB",O_WRONLY|O_CREAT|O_APPEND|SH_DENYNO))
-		==-1) {
-		bprintf("\r\n\1r\1h\1iError writing telegram!\r\n");
-		pause();
-		return(1); }
-	write(i,useron.system,sizeof(useron.system));
-	write(i,user.system,sizeof(user.system));
-	write(i,&user.number,sizeof(user.number));
-	write(i,buf,512);
-	close(i); }
-adjust_cdt(telegram_cdt);
-if(notify_user && notify_user!=user_number) {
-	sprintf(str,"\1n\1hSMM: \1y%s\1m sent a telegram to \1y%s\1m "
-		"from the Match Maker\r\n",user_name,user.name);
-	if(node_dir[0])
-		putsmsg(notify_user,str);
-	else
-		puttgram(notify_user,str); }
-return(1);
-}
-
-/****************************************************************************/
-/* Returns 32-crc of string (not counting terminating NULL) 				*/
-/****************************************************************************/
-ulong crc32(char *str)
-{
-	int i=0;
-	ulong crc=0xffffffffUL;
-
-	while(str[i])
-		crc=ucrc32(str[i++],crc);
-	crc=~crc;
-	return(crc);
-}
-
-
-/****************************************************************************/
-/* Converts unix time format (long - time_t) into a char str MM/DD/YY		*/
-/****************************************************************************/
-char *unixtodstr(time_t unix, char *str)
-{
-
-if(!unix)
-	strcpy(str,"00/00/00");
-else {
-	unixtodos(unix,&date,&curtime);
-	if((unsigned)date.da_mon>12) {	  /* DOS leap year bug */
-		date.da_mon=1;
-		date.da_year++; }
-	if((unsigned)date.da_day>31)
-		date.da_day=1;
-	sprintf(str,"%02u/%02u/%02u",date.da_mon,date.da_day
-		,date.da_year>=2000 ? date.da_year-2000 : date.da_year-1900); }
-return(str);
-}
-
-/****************************************************************************/
-/* Converts a date string in format MM/DD/YY into unix time format			*/
-/****************************************************************************/
-time_t dstrtounix(char *str)
-{
-
-if(!strcmp(str,"00/00/00") || !str[0])
-	return(NULL);
-curtime.ti_hour=curtime.ti_min=curtime.ti_sec=0;
-if(str[6]<'7')
-	date.da_year=2000+((str[6]&0xf)*10)+(str[7]&0xf);
-else
-	date.da_year=1900+((str[6]&0xf)*10)+(str[7]&0xf);
-date.da_mon=((str[0]&0xf)*10)+(str[1]&0xf);
-date.da_day=((str[3]&0xf)*10)+(str[4]&0xf);
-return(dostounix(&date,&curtime));
-}
-
-/****************************************************************************/
-/* Returns the age derived from the string 'birth' in the format MM/DD/YY	*/
-/****************************************************************************/
-char getage(char *birth)
-{
-	char age;
-
-if(birth[0]<=SP)
-	return(0);
-getdate(&date);
-age=(date.da_year-1900)-(((birth[6]&0xf)*10)+(birth[7]&0xf));
-if(age>90)
-	age-=90;
-if(atoi(birth)>12 || atoi(birth+3)>31)
-	return(0);
-if(((birth[0]&0xf)*10)+(birth[1]&0xf)>date.da_mon ||
-	(((birth[0]&0xf)*10)+(birth[1]&0xf)==date.da_mon &&
-	((birth[3]&0xf)*10)+(birth[4]&0xf)>date.da_day))
-	age--;
-if(age<0)
-	return(0);
-return(age);
-}
-
-char marital_ch(char user_marital)
-{
-switch(user_marital) {
-	case MARITAL_SINGLE:
-		return('S');
-	case MARITAL_DIVORCED:
-		return('D');
-	case MARITAL_MARRIED:
-		return('M');
-	case MARITAL_WIDOWED:
-		return('W');
-	case MARITAL_OTHER:
-		return('O'); }
-if(user_marital)
-	return('*');
-return(SP);
-}
-
-char race_ch(char user_race)
-{
-switch(user_race) {
-	case RACE_WHITE:
-		return('W');
-	case RACE_BLACK:
-		return('B');
-	case RACE_HISPANIC:
-		return('H');
-	case RACE_AMERINDIAN:
-		return('I');
-	case RACE_ASIAN:
-		return('A');
-	case RACE_MIDEASTERN:
-		return('M');
-	case RACE_OTHER:
-		return('O'); }
-if(user_race)
-	return('*');
-return(SP);
-}
-
-char *hair(char user_hair)
-{
-switch(user_hair) {
-	case HAIR_BLONDE:
-		return("BLN");
-	case HAIR_BROWN:
-		return("BRN");
-	case HAIR_RED:
-		return("RED");
-	case HAIR_BLACK:
-		return("BLK");
-	case HAIR_GREY:
-		return("GRY");
-	case HAIR_OTHER:
-		return("OTH"); }
-if(user_hair)
-	return("*");
-return(nulstr);
-}
-
-char *eyes(char user_eyes)
-{
-switch(user_eyes) {
-	case EYES_BLUE:
-		return("BLU");
-	case EYES_BROWN:
-		return("BRN");
-	case EYES_GREEN:
-		return("GRN");
-	case EYES_HAZEL:
-		return("HAZ");
-	case EYES_OTHER:
-		return("OTH"); }
-if(user_eyes)
-	return("*");
-return(nulstr);
-}
-
-char *marital(char user_marital)
-{
-switch(user_marital) {
-    case MARITAL_SINGLE:
-		return("Single");
-    case MARITAL_MARRIED:
-		return("Married");
-    case MARITAL_DIVORCED:
-		return("Divorced");
-    case MARITAL_WIDOWED:
-		return("Widowed");
-	case MARITAL_OTHER:
-		return("Other"); }
-if(user_marital)
-	return("*");
-return(nulstr);
-}
-
-char *race(char user_race)
-{
-switch(user_race) {
-	case RACE_WHITE:
-		return("White");
-	case RACE_BLACK:
-		return("Black");
-	case RACE_HISPANIC:
-		return("Hispanic");
-	case RACE_ASIAN:
-		return("Asian");
-	case RACE_AMERINDIAN:
-		return("American Indian");
-	case RACE_MIDEASTERN:
-		return("Middle Eastern");
-	case RACE_OTHER:
-		return("Other"); }
-if(user_race)
-	return("*");
-return(nulstr);
-}
-
-ushort getzodiac(char *birth)
-{
-if((!strncmp(birth,"03",2) && atoi(birth+3)>=21)
-	|| (!strncmp(birth,"04",2) && atoi(birth+3)<=19))
-    return(ZODIAC_ARIES);
-if((!strncmp(birth,"04",2) && atoi(birth+3)>=20)
-	|| (!strncmp(birth,"05",2) && atoi(birth+3)<=20))
-	return(ZODIAC_TAURUS);
-if((!strncmp(birth,"05",2) && atoi(birth+3)>=21)
-	|| (!strncmp(birth,"06",2) && atoi(birth+3)<=20))
-	return(ZODIAC_GEMINI);
-if((!strncmp(birth,"06",2) && atoi(birth+3)>=21)
-	|| (!strncmp(birth,"07",2) && atoi(birth+3)<=22))
-	return(ZODIAC_CANCER);
-if((!strncmp(birth,"07",2) && atoi(birth+3)>=23)
-	|| (!strncmp(birth,"08",2) && atoi(birth+3)<=22))
-	return(ZODIAC_LEO);
-if((!strncmp(birth,"08",2) && atoi(birth+3)>=23)
-	|| (!strncmp(birth,"09",2) && atoi(birth+3)<=22))
-	return(ZODIAC_VIRGO);
-if((!strncmp(birth,"09",2) && atoi(birth+3)>=23)
-	|| (!strncmp(birth,"10",2) && atoi(birth+3)<=22))
-	return(ZODIAC_LIBRA);
-if((!strncmp(birth,"10",2) && atoi(birth+3)>=23)
-	|| (!strncmp(birth,"11",2) && atoi(birth+3)<=21))
-	return(ZODIAC_SCORPIO);
-if((!strncmp(birth,"11",2) && atoi(birth+3)>=22)
-	|| (!strncmp(birth,"12",2) && atoi(birth+3)<=21))
-	return(ZODIAC_SAGITTARIUS);
-if((!strncmp(birth,"12",2) && atoi(birth+3)>=22)
-	|| (!strncmp(birth,"01",2) && atoi(birth+3)<=19))
-	return(ZODIAC_CAPRICORN);
-if((!strncmp(birth,"01",2) && atoi(birth+3)>=20)
-	|| (!strncmp(birth,"02",2) && atoi(birth+3)<=18))
-	return(ZODIAC_AQUARIUS);
-if((!strncmp(birth,"02",2) && atoi(birth+3)>=19)
-	|| (!strncmp(birth,"03",2) && atoi(birth+3)<=20))
-	return(ZODIAC_PISCES);
-return(0xff);
-}
-
-char *zodiac(short user_zodiac)
-{
-switch(user_zodiac)
-{
-	case ZODIAC_ARIES:
-		return("Aries");
-	case ZODIAC_TAURUS:
-		return("Taurus");
-	case ZODIAC_GEMINI:
-		return("Gemini");
-	case ZODIAC_CANCER:
-		return("Cancer");
-	case ZODIAC_LEO:
-		return("Leo");
-	case ZODIAC_VIRGO:
-		return("Virgo");
-	case ZODIAC_LIBRA:
-		return("Libra");
-	case ZODIAC_SCORPIO:
-		return("Scorpio");
-	case ZODIAC_SAGITTARIUS:
-		return("Sagittarius");
-	case ZODIAC_CAPRICORN:
-		return("Capricorn");
-	case ZODIAC_AQUARIUS:
-		return("Aquarius");
-	case ZODIAC_PISCES:
-		return("Pisces"); }
-return(nulstr);
-}
-
-short ans2bits(char *str)
-{
-	int i,j;
-	ushort bits=0;
-
-j=strlen(str);
-for(i=0;i<j;i++) {
-	if(str[i]=='*')
-		return(0xffff);
-	bits|=(1<<str[i]-'A'); }
-return(bits);
-}
-
-uchar ans2uchar(char *str)
-{
-	int i,j;
-	uchar bits=0;
-
-j=strlen(str);
-for(i=0;i<j;i++) {
-	if(str[i]=='*')
-		return(0xff);
-	bits|=(1<<str[i]-'A'); }
-return(bits);
-}
-
-
-void bits2ans(ushort bits, char *str)
-{
-	char	tmp[25];
-	int 	i;
-
-str[0]=0;
-if(bits==0xffff) {
-	strcpy(str,"*");
-	return; }
-for(i=0;i<16;i++)
-	if(bits&(1<<i)) {
-		tmp[0]='A'+i;
-		tmp[1]=0;
-		strcat(str,tmp); }
-}
-
-void bits2str(ushort user, char *str)
-{
-	int 	i;
-
-str[0]=0;
-if(user==0xffff) {
-	strcpy(str,"*");
-	return; }
-for(i=0;i<16;i++)
-	if(user&(1<<i))
-		str[i]='A'+i;
-	else
-		str[i]=SP;
-str[i]=0;
-}
-
-void uchar2ans(uchar bits, char *str)
-{
-	char	tmp[25];
-	int 	i;
-
-str[0]=0;
-if(bits==0xff) {
-	strcpy(str,"*");
-	return; }
-for(i=0;i<8;i++)
-	if(bits&(1<<i)) {
-		tmp[0]='A'+i;
-		tmp[1]=0;
-		strcat(str,tmp); }
-}
-
-int basic_match(user_t user, user_t mate)
-{
-	int max=0,match=0,age=getage(mate.birth),zodiac=getzodiac(mate.birth);
-
-if(user.pref_sex!='*' && user.pref_sex!=mate.sex
-	&& !(user.misc&USER_FRIEND))
-	return(0);
-
-if(zodiac&user.pref_zodiac) match++;
-else if(user.misc&USER_REQZODIAC)
-	return(0);
-if(zodiac==user.pref_zodiac) match++;
-max+=2;
-
-if(stricmp(mate.zipcode,user.min_zipcode)>=0
-	&& stricmp(mate.zipcode,user.max_zipcode)<=0) match+=2;
-else if(user.misc&USER_REQZIP) return(0);
-max+=2;
-
-if(mate.marital&user.pref_marital) match++;
-else if(user.misc&USER_REQMARITAL)
-	return(0);
-if(mate.marital==user.pref_marital) match++;
-max+=2;
-
-if(mate.race&user.pref_race) match++;
-else if(user.misc&USER_REQRACE)
-	return(0);
-if(mate.race==user.pref_race) match++;
-max+=2;
-
-if(mate.hair&user.pref_hair) match++;
-else if(user.misc&USER_REQHAIR)
-	return(0);
-if(mate.hair==user.pref_hair) match++;
-max+=2;
-
-if(mate.eyes&user.pref_eyes) match++;
-else if(user.misc&USER_REQEYES)
-	return(0);
-if(mate.eyes==user.pref_eyes) match++;
-max+=2;
-
-if(age>=user.min_age
-	&& (!user.max_age || age<=user.max_age)) match+=2;
-else {
-	if(user.misc&USER_REQAGE) return(0);
-	if(age<user.min_age-((user.max_age-user.min_age)/2)
-		|| (user.max_age && age>user.max_age+((user.max_age-user.min_age)/2)))
-		match-=4;
-	else if(age<user.min_age-((user.max_age-user.min_age)/3)
-		|| (user.max_age && age>user.max_age+((user.max_age-user.min_age)/3)))
-		match-=3;
-	else if(age<user.min_age-((user.max_age-user.min_age)/4)
-		|| (user.max_age && age>user.max_age+((user.max_age-user.min_age)/4)))
-		match-=2;
-	else if(age<user.min_age-((user.max_age-user.min_age)/5)
-		|| (user.max_age && age>user.max_age+((user.max_age-user.min_age)/5)))
-		match--; }
-
-max+=2;
-
-if(mate.weight>=user.min_weight
-	&& (!user.max_weight || mate.weight<=user.max_weight)) match+=2;
-else {
-	if(user.misc&USER_REQWEIGHT) return(0);
-	if(mate.weight<user.min_weight-((user.max_weight-user.min_weight)/2)
-		|| (user.max_weight
-		&& mate.weight>user.max_weight+((user.max_weight-user.min_weight)/2)))
-		match-=4;
-	else if(mate.weight<user.min_weight-((user.max_weight-user.min_weight)/3)
-		|| (user.max_weight
-		&& mate.weight>user.max_weight+((user.max_weight-user.min_weight)/3)))
-		match-=3;
-	else if(mate.weight<user.min_weight-((user.max_weight-user.min_weight)/4)
-		|| (user.max_weight
-		&& mate.weight>user.max_weight+((user.max_weight-user.min_weight)/4)))
-		match-=2;
-	else if(mate.weight<user.min_weight-((user.max_weight-user.min_weight)/5)
-		|| (user.max_weight
-		&& mate.weight>user.max_weight+((user.max_weight-user.min_weight)/5)))
-		match--; }
-max+=2;
-
-if(mate.height>=user.min_height
-	&& (!user.max_height || mate.height<=user.max_height)) match+=2;
-else {
-	if(user.misc&USER_REQHEIGHT) return(0);
-	if(mate.height<user.min_height-((user.max_height-user.min_height)/2)
-		|| (user.max_height
-		&& mate.height>user.max_height+((user.max_height-user.min_height)/2)))
-		match-=4;
-	else if(mate.height<user.min_height-((user.max_height-user.min_height)/3)
-		|| (user.max_height
-		&& mate.height>user.max_height+((user.max_height-user.min_height)/3)))
-		match-=3;
-	else if(mate.height<user.min_height-((user.max_height-user.min_height)/4)
-		|| (user.max_height
-		&& mate.height>user.max_height+((user.max_height-user.min_height)/4)))
-		match-=2;
-	else if(mate.height<user.min_height-((user.max_height-user.min_height)/5)
-		|| (user.max_height
-		&& mate.height>user.max_height+((user.max_height-user.min_height)/5)))
-		match--; }
-max+=2;
-
-if(mate.income>=user.min_income
-	&& (!user.max_income || mate.income==0xffffffffUL
-	|| mate.income<=user.max_income)) match++;
-else {
-	if(user.misc&USER_REQINCOME) return(0);
-	if(mate.income<user.min_income-((user.max_income-user.min_income)/2)
-		|| (user.max_income
-		&& mate.income>user.max_income+((user.max_income-user.min_income)/2)))
-		match-=4;
-	else if(mate.income<user.min_income-((user.max_income-user.min_income)/3)
-		|| (user.max_income
-		&& mate.income>user.max_income+((user.max_income-user.min_income)/3)))
-		match-=3;
-	else if(mate.income<user.min_income-((user.max_income-user.min_income)/4)
-		|| (user.max_income
-		&& mate.income>user.max_income+((user.max_income-user.min_income)/4)))
-		match-=2;
-	else if(mate.income<user.min_income-((user.max_income-user.min_income)/5)
-		|| (user.max_income
-		&& mate.income>user.max_income+((user.max_income-user.min_income)/5)))
-		match--; }
-max++;
-
-if(match<=0)
-	return(0);
-
-return(((float)match/max)*100.0);
-}
-
-int sys_quenum(char *name)
-{
-	int i;
-
-for(i=0;i<total_ques;i++)
-	if(!stricmp(que[i]->name,name))
-		break;
-if(i<total_ques)
-	return(i);
-return(-1);
-}
-
-int user_quenum(char *name, user_t user)
-{
-	int i;
-
-for(i=0;i<5;i++)
-	if(!stricmp(user.queans[i].name,name))
-		break;
-if(i<5)
-	return(i);
-return(-1);
-}
-
-int total_match(user_t user, user_t mate)
-{
-	int i,j,s,u,match1,match2,quematches=0,quemax=0,quematch;
-
-match1=basic_match(user,mate);
-if(!match1) return(0);
-match2=basic_match(mate,user);
-if(!match2) return(0);
-
-for(i=0;i<5;i++) {
-	if(!user.queans[i].name[0])
-		continue;
-	s=sys_quenum(user.queans[i].name);
-	if(s==-1)
-		continue;
-	u=user_quenum(user.queans[i].name,mate);
-	if(u==-1)
-		continue;
-	for(j=0;j<que[s]->total_ques;j++) {
-		if(user.queans[u].pref[j]&mate.queans[i].self[j]) quematches+=4;
-		if(user.queans[u].pref[j]==mate.queans[i].self[j]) quematches+=2;
-		if(user.queans[u].self[j]&mate.queans[i].pref[j]) quematches+=2;
-		if(user.queans[u].self[j]==mate.queans[i].pref[j]) quematches++;
-		quemax+=9; } }
-
-if(!quemax) 	/* no questionnaires in common */
-	return((match1+match1+match1+match1+match2+match2)/6);
-
-quematch=((float)quematches/quemax)*100.0;
-return((match1+match1+match1+match1+match2+match2+quematch)/7);
-}
-
-
-void main_user_info(user_t user)
-{
-	char str[128],min[64],max[64];
-	int i;
-
-attr(LIGHTGRAY);
-cls();
-if(SYSOP)
-	bprintf("\1n\1gReal: \1h%.25s #%lu (%.40s)\r\n"
-		,user.realname,user.number,user.system);
-bprintf("\1n\1gName: \1h%-25.25s     \1b%-10s   \1c%-15s  \1m%s\r\n"
-	,user.name
-	,marital(user.marital),race(user.race)
-	,user.sex=='M' ? "Male":"Female");
-if(smm_misc&SMM_METRIC)
-	sprintf(str," %-4u",intocm(user.height));
-else
-	sprintf(str,"%2u'%-2u",user.height/12,user.height%12);
-bprintf("\1n\1gHair: \1h%3s  \1n\1gEyes: \1h%3s  \1n\1gHeight:"
-	"\1h%s  \1n\1gWeight: \1h%-3u  \1n\1gAge: \1h%-3u "
-    "\1n\1gZodiac: \1h%s\r\n"
-	,hair(user.hair),eyes(user.eyes),str
-	,smm_misc&SMM_METRIC ? lptokg(user.weight) : user.weight
-	,getage(user.birth),zodiac(getzodiac(user.birth)));
-bprintf("\1n\1gFrom: \1h%-30.30s   \1n\1gZip: \1h%-10.10s    "
-	"\1n\1gIncome: \1h$%sK\1n\1g/year\r\n"
-	,user.location,user.zipcode
-	,user.income==0xffffffffUL ? "?":ultoa(user.income/1000UL,tmp,10));
-if(smm_misc&SMM_METRIC) {
-	sprintf(min,"%u",intocm(user.min_height));
-	sprintf(max,"%u",intocm(user.max_height)); }
-else {
-	sprintf(min,"%u'%u",user.min_height/12,user.min_height%12);
-	sprintf(max,"%u'%u",user.max_height/12,user.max_height%12); }
-bprintf("\1n\1gPref: \1h\1%c%c\1%c%c\1m%c \1%c%3u\1n\1g-\1h\1%c%u\1n\1h  "
-	"\1%c%s \1n\1ghair  \1h\1%c%s \1n\1geyes  \1h\1%c%s\1n\1g-\1h\1%c%s  "
-	"\1%c%u\1n\1g-\1h\1%c%u\1n\1glbs  \1h\1%c$%luK\1n\1g-\1h\1%c%luK\1n\1%c  "
-	"\1h%.3s\r\n"
-	,user.misc&USER_REQMARITAL ? 'w':'b'
-	,marital_ch(user.pref_marital)
-	,user.misc&USER_REQRACE ? 'w':'g'
-	,race_ch(user.pref_race)
-	,user.pref_sex
-	,user.misc&USER_REQAGE	? 'w':'g'
-	,user.min_age
-	,user.misc&USER_REQAGE	? 'w':'g'
-	,user.max_age
-	,user.misc&USER_REQHAIR  ? 'w':'g'
-	,hair(user.pref_hair)
-	,user.misc&USER_REQEYES  ? 'w':'g'
-	,eyes(user.pref_eyes)
-	,user.misc&USER_REQHEIGHT  ? 'w':'g'
-	,min
-	,user.misc&USER_REQHEIGHT  ? 'w':'g'
-	,max
-	,user.misc&USER_REQWEIGHT  ? 'w':'g'
-	,smm_misc&SMM_METRIC ? lptokg(user.min_weight) : user.min_weight
-	,user.misc&USER_REQWEIGHT  ? 'w':'g'
-	,smm_misc&SMM_METRIC ? lptokg(user.max_weight) : user.max_weight
-	,user.misc&USER_REQINCOME  ? 'w':'g'
-	,user.min_income/1000L
-	,user.misc&USER_REQINCOME  ? 'w':'g'
-	,user.max_income/1000L
-	,user.misc&USER_REQZODIAC  ? 'w':'g'
-    ,zodiac(user.pref_zodiac));
-
-bprintf("\1r\1i%s\1n\1w\1h\r\n",user.misc&USER_PHOTO ? "PHOTO":nulstr);
-for(i=0;i<5;i++) {
-    if(!user.note[i][0])
-        break;
-	bprintf("%15s%.50s\r\n",nulstr,user.note[i]); }
-}
-
-char long_user_info(user_t user)
-{
-	char str[128],fname[128],path[128],ch;
-	int i,j,k,s,u,max,match1,match2,user_match,mate_match;
-
-while(1) {
-checkline();
-main_user_info(user);
-
-CRLF;
-/**
-if(user.misc&USER_FROMSMB)
-	bprintf("\1r\1hImported via message base from \1w%s\1r.\r\n"
-		,user.system);
-**/
-bprintf("\1h\1mThis user meets your profile preferences:\1w%3u%%            "
-	,match1=basic_match(useron,user));
-bprintf("\1n\1gCreated: \1h%s\r\n",unixtodstr(user.created,str));
-bprintf("\1h\1mYou meet this user's profile preferences:\1w%3u%%            "
-	,match2=basic_match(user,useron));
-bprintf("\1n\1gUpdated: \1h%s\r\n",unixtodstr(user.updated,str));
-
-if(!smm_pause)
-	lncntr=0;
-
-CRLF;
-bputs("\1n\1b\1hQuestionnaires:\r\n");
-for(i=0;i<5;i++) {
-	max=mate_match=user_match=0;
-	if(!user.queans[i].name[0])
-		continue;
-	s=sys_quenum(user.queans[i].name);
-	if(s==-1)
-		continue;
-	if(que[s]->req_age>getage(useron.birth))
-		continue;
-	if(match1 && match2)
-		u=user_quenum(user.queans[i].name,useron);
-	else
-		u=-1;
-	bprintf("\1h\1c%-25s ",que[s]->desc);
-	if(u==-1) {
-		CRLF;
-		continue; }
-	for(j=0;j<que[s]->total_ques;j++) {
-		if(useron.queans[u].pref[j]&user.queans[i].self[j]) user_match+=2;
-		if(useron.queans[u].pref[j]==user.queans[i].self[j]) user_match++;
-		if(useron.queans[u].self[j]&user.queans[i].pref[j]) mate_match+=2;
-		if(useron.queans[u].self[j]==user.queans[i].pref[j]) mate_match++;
-		max+=3; }
-	bprintf("\1n\1c%s matches your pref:\1h%3u%%  "
-			"\1n\1cYou match %s pref:\1h%3u%%\r\n"
-			,user.sex=='M' ? "He":"She"
-			,(int)(((float)user_match/max)*100.0)
-			,user.sex=='M' ? "his":"her"
-			,(int)(((float)mate_match/max)*100.0)); }
-
-bprintf("\r\n\1r\1hOverall match: \1w%u%%",total_match(useron,user));
-if(user.purity)
-	bprintf("        \1r\1hPurity test: \1w%u%%",user.purity);
-if(user.mbtype[0])
-	bprintf("        \1r\1hPersonality type: \1w%s",user.mbtype);
-CRLF;
-
-if(aborted) {
-	aborted=0;
-	return(0); }
-if(!smm_pause) {
-	if(kbhit())
-		return(0);
-	return(1); }
-nodesync();
-if(lncntr>=user_rows-2)
-    lncntr=0;
-CRLF;
-bputs("\1h\1b[\1cV\1b]iew questionnaires, ");
-if(user.misc&USER_PHOTO)
-	bputs("[\1cD\1b]ownload photo, ");
-bputs("[\1cS\1b]end telegram, [\1cQ\1b]uit, or [Next]: \1c");
-strcpy(str,"VSQN\r");
-if(user.misc&USER_PHOTO)
-	strcat(str,"D");
-if(SYSOP)
-	strcat(str,"+");
-switch(getkeys(str,0)) {
-	case '+':
-		user.misc|=USER_PHOTO;
-		break;
-	case 'Q':
-		return(0);
-	case CR:
-	case 'N':
-		return(1);
-	case 'D':
-		if(!useron.number) {
-			bputs("\r\n\1h\1rYou must create a profile first.\r\n");
-			pause();
-			break; }
-		if(!(useron.misc&USER_PHOTO)) {
-			bputs("\r\n\1h\1rYou cannot download photos until your photo is "
-				"added.\r\n");
-			pause();
-			break; }
-		for(i=0;user.system[i];i++)
-			if(isalnum(user.system[i]))
-				break;
-		if(!user.system[i])
-			fname[0]='~';
-		else
-			fname[0]=user.system[i];
-		for(i=strlen(user.system)-1;i>0;i--)
-			if(isalnum(user.system[i]))
-				break;
-		if(i<=0)
-			fname[1]='~';
-		else
-			fname[1]=user.system[i];
-		fname[2]=0;
-		strupr(user.system);
-		strcat(fname,base41(crc16(user.system),tmp));
-		strcat(fname,base41(user.number,tmp));
-		strcat(fname,".JPG");
-		strupr(fname);
-		sprintf(path,"PHOTO\\%s",fname);
-		if(!fexist(path)) {
-			bputs("\r\n\1n\1hUnpacking...");
-			sprintf(str,"%spkunzip photo %s photo",exec_dir,fname);
-			system(str);
-			bputs("\r\n");
-			if(!fexist(path)) {
-				bputs("\r\n\1n\1h\1i\1rUnpacking failed!\1n\r\n");
-				pause();
-				break; } }
-		if(com_port) {
-			cmdstr(zmodem_send,path,path,str);
-			ivhctl(INTCLR);
-			ivhctl(INT29L);
-			system(str);
-			ivhctl(INTCLR);
-			i=INT29L;
-			i|=(INT29R|INT16);
-			ivhctl(i); }
-		else
-			system(cmdstr(local_view,path,path,str));
-		pause();
-		break;
-
-
-	case 'S':
-		send_telegram(user);
-		break;
-	case 'V':
-
-		if(user_level<que_level) {
-			bputs("\r\n\1h\1rYou have insufficient access to read "
-				"questoinnaires.\r\n");
-			pause();
-            break; }
-
-		for(i=0;i<5;i++) {
-			aborted=0;
-			if(!user.queans[i].name[0])
-				continue;
-			s=sys_quenum(user.queans[i].name);
-			if(s==-1)
-				continue;
-			if(que[s]->req_age>getage(useron.birth))
-				continue;
-			if(match1 && match2)
-				u=user_quenum(user.queans[i].name,useron);
-			else
-				u=-1;
-			sprintf(str,"\r\nDo you wish to view the \1w%s\1b questionnaire"
-				,que[s]->desc);
-			if(!yesno(str))
-				continue;
-			if(!cdt_warning(que_cdt))
-				continue;
-			adjust_cdt(que_cdt);
-			for(j=0;j<que[s]->total_ques && !aborted;) {
-				cls();
-				bprintf("\1n\1m\1hQuestionnaire: \1y%-25s \1mQuestion: "
-					"\1y%d \1mof \1y%d  \1h\1b(Ctrl-C to Abort)\r\n\r\n"
-					,que[s]->desc,j+1,que[s]->total_ques);
-				bprintf("\1w\1h%s\r\n\r\n",que[s]->que[j].txt);
-				for(k=0;k<que[s]->que[j].answers;k++)
-					bprintf("\1h\1b%c\1w) \1g%s\r\n",'A'+k
-						,que[s]->que[j].ans[k]);
-				bits2str(user.queans[i].self[j],str);
-				bprintf("\1n\1g\r\n%25s: \1h%-16s "
-					,user.name,str);
-				bits2str(user.queans[i].pref[j],str);
-				bprintf("\1n\1g %15s: \1h%s","Preferred mate",str);
-				if(u!=-1) {
-					bits2str(useron.queans[u].pref[j],str);
-					bprintf("\1n\1g\r\n%25s: \1h%-16s "
-						,"Your preferred mate",str);
-					bits2str(useron.queans[u].self[j],str);
-					bprintf("\1n\1g %15s: \1h%s","You",str); }
-				CRLF;
-				if(!aborted) {
-					lncntr=0;
-					bputs("\r\n\1h\1b[\1cP\1b]revious, [\1cQ\1b]uit, "
-						"or [Next]: \1c");
-					ch=getkeys("PQN\r",0);
-					if(ch=='P') {
-						if(j) j--;
-						continue; }
-					if(ch=='Q')
-						break;
-					j++; } } }
-		break;
-
-	} }
-return(0);
-}
-
-
-/* Returns 0 if aborted, 1 if continue, negative if previous */
-int short_user_info(user_t user)
-{
-	char str[128],height[64],ch;
-    int i,match;
-    int records;
-    ulong  name_crc;
-	static char name[26],lastname[26],highmatch;
-    static long topixb,topdab,lastixb,lastdab;
-    static int count;
-
-if(!lncntr && smm_pause) {
-	topdab=ftell(stream)-sizeof(user_t);
-	topixb=ftell(index)-sizeof(ixb_t);
-    if(!topdab)
-        lastdab=lastixb=0;
-    count=0;
-	printfile("LIST_HDR.ASC");
-	strcpy(lastname,name);
-	name[0]=highmatch=0; }
-if(user.number) {
-	match=total_match(useron,user);
-    if(!match) str[0]=0;
-    else if(match>=90) sprintf(str,"\1w%u%%",match);
-    else if(match>=80) sprintf(str,"\1c%u%%",match);
-    else if(match>=70) sprintf(str,"\1y%u%%",match);
-    else if(match>=60) sprintf(str,"\1g%u%%",match);
-    else if(match>=50) sprintf(str,"\1m%u%%",match);
-    else if(match>=40) sprintf(str,"\1r%u%%",match);
-    else if(match>=30) sprintf(str,"\1b%u%%",match);
-    else if(match>=20) sprintf(str,"\1n\1g%u%%",match);
-    else if(match>=10) sprintf(str,"\1n\1c%u%%",match);
-    else sprintf(str,"\1n%u%%",match);
-	if(smm_misc&SMM_METRIC)
-		sprintf(height," %-4u",intocm(user.height));
-	else
-		sprintf(height,"%2u'%-2u",user.height/12,user.height%12);
-	bprintf("\1n\1h%c\1n\1g%c\1h\1c%c\1b%3u \1g%3s \1m%3s\1r%s \1y%-3u "
-		"\1n\1g%-25.25s\1r\1h\1i%c\1n\1h%-25.25s%s\r\n"
-        ,user.sex==user.pref_sex ? 'G':user.sex=='*' ? 'B'
-            : marital_ch(user.marital)
-        ,race_ch(user.race)
-        ,user.sex
-        ,getage(user.birth)
-        ,hair(user.hair)
-        ,eyes(user.eyes)
-		,height
-		,smm_misc&SMM_METRIC ? lptokg(user.weight) : user.weight
-        ,user.location
-		,user.misc&USER_PHOTO ? '+':SP
-        ,user.name
-        ,str
-        );
-	if(match &&
-		(!name[0] || !stricmp(name,lastname)
-		|| (stricmp(user.name,lastname) && match>highmatch))) {
-		highmatch=match;
-        sprintf(name,"%.25s",user.name);
-        strupr(name); }
-	}
-
-if(lncntr>=user_rows-2 || !user.number) {
-    lncntr=0;
-	bputs(PrevReadSendQuitOrMore);
-	ch=getkey(K_UPPER);
-	if(ch=='Q') {
-		cls();
-		aborted=1; }
-    else if(ch=='P') {
-		cls();
-        records=((ftell(stream)-topdab)/sizeof(user_t));
-		fseek(stream,lastdab,SEEK_SET);
-		fseek(index,lastixb,SEEK_SET);
-		lastdab-=(records)*sizeof(user_t);
-		lastixb-=(records)*sizeof(ixb_t);
-        if(lastdab<0) lastdab=0;
-        if(lastixb<0) lastixb=0;
-        return(-count); }
-	else if(ch=='R' || ch=='G' || ch=='S') {
-        bprintf("\1n\r\1>\1y\1hUser name: ");
-        if(getstr(name,25,K_NOCRLF|K_LINE|K_EDIT|K_AUTODEL|K_UPPER)) {
-			truncsp(name);
-            name_crc=crc32(name);
-            cls();
-            rewind(index);
-            while(!feof(index)) {
-                if(!fread(&ixb,sizeof(ixb_t),1,index))
-                    break;
-                if(!ixb.number)    /* DELETED */
-                    continue;
-                if(ixb.name!=name_crc)
-                    continue;
-                fseek(stream
-                    ,((ftell(index)-sizeof(ixb_t))/sizeof(ixb_t))
-                    *sizeof(user_t),SEEK_SET);
-                if(!fread(&user,sizeof(user_t),1,stream))
-                    continue;
-				if(ch=='S' && send_telegram(user))
-					break;
-				if(ch!='S' && !long_user_info(user))
-                    break; } }
-        fseek(stream,topdab,SEEK_SET);
-        fseek(index,topixb,SEEK_SET);
-		cls();
-		return(-1); }
-    else {
-        lastixb=topixb;
-		lastdab=topdab;
-		cls(); } }
-
-count++;
-if(aborted)
-    return(0);
-return(1);
-}
-
-
-int get_your_det(user_t *user)
-{
-	char	str[128],*p,*hdr;
-	int 	i;
-
-while(1) {
-checkline();
-cls();
-bputs("\1h\0014 Your Detailed Personal Information \1n  \1h\1b"
-    "(Ctrl-C to Abort)\r\n\r\n");
-
-nodesync();
-bputs("\1h\1bPlease enter your name or alias: ");
-strcpy(str,user->name);
-if(!getstr(str,25,K_LINE|K_EDIT|K_AUTODEL|K_UPRLWR))
-	return(0);
-truncsp(str);
-if(trash(str)) {
-	bprintf("\r\n\1h\1rSorry, you can't use that name.\r\n\r\n\1p");
-	continue; }
-strcpy(user->name,str);
-
-CRLF;
-nodesync();
-bprintf("\1h\1gPlease enter your height in %s: "
-	,smm_misc&SMM_METRIC ? "centimeters" : "feet'inches (example: 5'7)");
-if(user->height) {
-	if(smm_misc&SMM_METRIC)
-		sprintf(str,"%u",intocm(user->height));
-	else
-		sprintf(str,"%u'%u",user->height/12,user->height%12); }
-else
-    str[0]=0;
-if(!getstr(str,4,K_LINE|K_EDIT|K_AUTODEL))
-	return(0);
-if(smm_misc&SMM_METRIC)
-	user->height=cmtoin(atoi(str));
-else {
-	user->height=atoi(str)*12;
-	p=strchr(str,'\'');
-	if(p) user->height+=atoi(p+1); }
-
-CRLF;
-nodesync();
-bprintf("\1h\1mPlease enter your weight (in %s): "
-	,smm_misc&SMM_METRIC ? "kilograms":"pounds");
-if(user->weight)
-	sprintf(str,"%u"
-		,smm_misc&SMM_METRIC ? lptokg(user->weight) : user->weight);
-else
-    str[0]=0;
-if(!getstr(str,3,K_NUMBER|K_EDIT|K_AUTODEL|K_LINE))
-	return(0);
-if(smm_misc&SMM_METRIC)
-	user->weight=kgtolp(atoi(str));
-else
-	user->weight=atoi(str);
-
-CRLF;
-nodesync();
-bputs("\1h\1rPlease enter your annual income in dollars (ENTER=undisclosed): ");
-if(user->income && user->income!=0xffffffff)
-	sprintf(str,"%luK",user->income/1000);
-else
-    str[0]=0;
-getstr(str,6,K_UPPER|K_EDIT|K_AUTODEL|K_LINE);
-if(aborted)
-	return(0);
-if(strchr(str,'K'))
-	user->income=atol(str)*1000L;
-else if(str[0]==0)
-	user->income=0xffffffffUL;
-else
-	user->income=atol(str);
-
-CRLF;
-nodesync();
-bputs("\1h\1cPlease enter your location (city, state): ");
-strcpy(str,user->location);
-if(!getstr(str,30,K_LINE|K_EDIT|K_AUTODEL|K_UPRLWR))
-	return(0);
-truncsp(str);
-if(trash(str)) {
-	bprintf("\r\n\1r\1hSorry, you can't use that location.\r\n\r\n\1p");
-	continue; }
-strcpy(user->location,str);
-
-
-CRLF;
-nodesync();
-bputs("\1h\1gPlease enter your zip/postal code: ");
-if(!getstr(user->zipcode,10,K_LINE|K_EDIT|K_AUTODEL))
-	return(0);
-
-CRLF;
-nodesync();
-for(i=0;i<5;i++) {
-    bprintf("\1n\1gPersonal text - Line %u of 5: ",i+1);
-    if(wordwrap[0])
-        user->note[i][0]=0;
-	strcpy(str,user->note[i]);
-	if(!getstr(str,50,i==4 ? K_LINE|K_EDIT:K_LINE|K_EDIT|K_WRAP))
-		break;
-	if(trash(str)) {
-		bprintf("\r\n\1r\1hSorry, you can't use that text.\r\n\r\n");
-		i--;
-		continue; }
-	strcpy(user->note[i],str); }
-while(i++<5)
-    user->note[i][0]=0;
-aborted=0;
-nodesync();
-if(yesno("\r\nIs the above information correct"))
-    break; }
-return(1);
-}
-
-int get_pref_det(user_t *user)
-{
-	char str[128],*p,*hdr;
-	int i;
-
-while(1) {
-checkline();
-cls();
-bputs("\1h\0014 Detailed Information on Your Preferred Mate \1n  "
-    "\1h\1b(Ctrl-C to Abort)\r\n\r\n");
-
-nodesync();
-bputs("\1n\1cPlease enter the minimum age of your preferred mate: \1h");
-if(user->min_age)
-    sprintf(str,"%u",user->min_age);
-else
-    str[0]=0;
-getstr(str,3,K_NUMBER|K_EDIT|K_AUTODEL);
-if(aborted)
-	return(0);
-user->min_age=atoi(str);
-
-nodesync();
-bputs("\1h\1cPlease enter the maximum age of your preferred mate: \1h");
-if(user->max_age)
-    sprintf(str,"%u",user->max_age);
-else
-    str[0]=0;
-getstr(str,3,K_NUMBER|K_EDIT|K_AUTODEL);
-if(aborted)
-	return(0);
-user->max_age=atoi(str);
-if(user->min_age) {
-	strcpy(str,"Do you require your mate's age fall within this range");
-	if(user->misc&USER_REQAGE)
-		i=yesno(str);
-	else
-		i=!noyes(str);
-	if(i)
-		user->misc|=USER_REQAGE;
-	else
-		user->misc&=~USER_REQAGE; }
-else
-	user->misc&=~USER_REQAGE;
-if(aborted)
-	return(0);
-
-CRLF;
-nodesync();
-bprintf("\1n\1gPlease enter the minimum height of your preferred mate "
-	"in %s: \1w\1h",smm_misc&SMM_METRIC ? "centimeters":"feet'inches");
-if(user->min_height) {
-	if(smm_misc&SMM_METRIC)
-		sprintf(str,"%u",intocm(user->min_height));
-	else
-		sprintf(str,"%u'%u",user->min_height/12,user->min_height%12); }
-else
-    str[0]=0;
-getstr(str,4,K_EDIT|K_AUTODEL);
-if(aborted)
-	return(0);
-if(smm_misc&SMM_METRIC)
-	user->min_height=cmtoin(atoi(str));
-else {
-	user->min_height=atoi(str)*12;
-	p=strchr(str,'\'');
-	if(p) user->min_height+=atoi(p+1); }
-nodesync();
-bprintf("\1h\1gPlease enter the maximum height of your preferred mate "
-	"in %s: \1w",smm_misc&SMM_METRIC ? "centimeters":"feet'inches");
-if(user->max_height) {
-	if(smm_misc&SMM_METRIC)
-		sprintf(str,"%u",intocm(user->max_height));
-    else
-		sprintf(str,"%u'%u",user->max_height/12,user->max_height%12); }
-else
-    str[0]=0;
-getstr(str,4,K_EDIT|K_AUTODEL);
-if(aborted)
-	return(0);
-if(smm_misc&SMM_METRIC)
-	user->max_height=cmtoin(atoi(str));
-else {
-	user->max_height=atoi(str)*12;
-	p=strchr(str,'\'');
-	if(p) user->max_height+=atoi(p+1); }
-strcpy(str,"Do you require your mate's height fall within this range");
-if(user->misc&USER_REQHEIGHT)
-	i=yesno(str);
-else
-	i=!noyes(str);
-if(i)
-    user->misc|=USER_REQHEIGHT;
-else
-    user->misc&=~USER_REQHEIGHT;
-if(aborted)
-    return(0);
-
-
-CRLF;
-nodesync();
-bprintf("\1n\1mPlease enter the minimum weight of your preferred mate in %s:"
-	" \1w\1h",smm_misc&SMM_METRIC ? "kilograms":"pounds");
-if(user->min_weight) {
-	if(smm_misc&SMM_METRIC)
-		sprintf(str,"%u",lptokg(user->min_weight));
-	else
-		sprintf(str,"%u",user->min_weight); }
-else
-    str[0]=0;
-getstr(str,3,K_NUMBER|K_EDIT|K_AUTODEL);
-if(aborted)
-	return(0);
-if(smm_misc&SMM_METRIC)
-	user->min_weight=kgtolp(atoi(str));
-else
-	user->min_weight=atoi(str);
-
-nodesync();
-bprintf("\1h\1mPlease enter the maximum weight of your preferred mate in %s:"
-	" \1w",smm_misc&SMM_METRIC ? "kilograms":"pounds");
-if(user->max_weight) {
-	if(smm_misc&SMM_METRIC)
-		sprintf(str,"%u",lptokg(user->max_weight));
-	else
-		sprintf(str,"%u",user->max_weight); }
-else
-    str[0]=0;
-getstr(str,3,K_NUMBER|K_EDIT|K_AUTODEL);
-if(aborted)
-	return(0);
-if(smm_misc&SMM_METRIC)
-	user->max_weight=kgtolp(atoi(str));
-else
-	user->max_weight=atoi(str);
-if(user->max_weight) {
-	strcpy(str,"Do you require your mate's weight fall within this range");
-	if(user->misc&USER_REQWEIGHT)
-		i=yesno(str);
-	else
-		i=!noyes(str);
-	if(i)
-		user->misc|=USER_REQWEIGHT;
-	else
-		user->misc&=~USER_REQWEIGHT; }
-else
-	user->misc&=~USER_REQWEIGHT;
-if(aborted)
-    return(0);
-
-
-CRLF;
-nodesync();
-bputs("\1h\1cPlease enter the lowest zip/postal code of your preferred "
-    "mate: \1w");
-getstr(user->min_zipcode,10,K_EDIT|K_AUTODEL|K_UPPER);
-if(aborted)
-	return(0);
-bputs("\1h\1bPlease enter the highest zip/postal code of your preferred "
-    "mate: \1w");
-getstr(user->max_zipcode,10,K_EDIT|K_AUTODEL|K_UPPER);
-if(aborted)
-	return(0);
-strcpy(str,"Do you require your mate's zip/postal code fall within this range");
-if(user->misc&USER_REQZIP)
-	i=yesno(str);
-else
-	i=!noyes(str);
-if(i)
-	user->misc|=USER_REQZIP;
-else
-	user->misc&=~USER_REQZIP;
-if(aborted)
-    return(0);
-
-
-CRLF;
-nodesync();
-bputs("\1h\1gPlease enter the minimum annual income of your "
-    "mate in dollars: \1w");
-if(user->min_income)
-    sprintf(str,"%lu",user->min_income);
-else
-    str[0]=0;
-getstr(str,6,K_NUMBER|K_EDIT|K_AUTODEL);
-if(aborted) return(0);
-user->min_income=atol(str);
-
-nodesync();
-bputs("\1h\1yPlease enter the maximum annual income of your "
-    "mate in dollars: \1w");
-if(user->max_income)
-    sprintf(str,"%lu",user->max_income);
-else
-    str[0]=0;
-getstr(str,6,K_NUMBER|K_EDIT|K_AUTODEL);
-if(aborted) return(0);
-user->max_income=atol(str);
-if(user->min_income) {
-	strcpy(str,"Do you require that your mate's income fall within this range");
-	if(user->misc&USER_REQINCOME)
-		i=yesno(str);
-	else
-		i=!noyes(str);
-	if(i)
-		user->misc|=USER_REQINCOME;
-	else
-		user->misc&=~USER_REQINCOME; }
-else
-	user->misc&=~USER_REQINCOME;
-if(aborted)
-    return(0);
-
-
-nodesync();
-if(yesno("\r\nIs the above information correct"))
-    break; }
-return(1);
-}
-
-int get_your_multi(user_t *user)
-{
-	char str[128],*hdr,*p;
-
-while(1) {
-checkline();
-hdr="\1n\1l\1h\0014 Your Profile \1n  \1h\1b(Ctrl-C to Abort)\r\n\r\n";
-bputs(hdr);
-bputs("\1n\1h\1cYour Marital Status:\r\n\r\n");
-mnemonics("~A) Single\r\n~B) Married\r\n~C) Divorced\r\n~D) Widowed\r\n"
-    "~E) Other\r\n");
-nodesync();
-bputs("\r\n\1y\1hWhich: \1w");
-uchar2ans(user->marital,str);
-if(!getstr(str,1,K_ALPHA|K_LINE|K_EDIT|K_AUTODEL|K_UPPER))
-	return(0);
-if(str[0]<='E')
-	break; }
-user->marital=ans2uchar(str);
-
-while(1) {
-checkline();
-bputs(hdr);
-bputs("\1n\1h\1cYour Race:\r\n\r\n");
-mnemonics("~A) White\r\n~B) Black\r\n~C) Hispanic\r\n~D) Asian\r\n"
-	"~E) American Indian\r\n~F) Middle Eastern\r\n~G) Other\r\n");
-nodesync();
-bputs("\r\n\1y\1hWhich: \1w");
-uchar2ans(user->race,str);
-if(!getstr(str,1,K_ALPHA|K_LINE|K_EDIT|K_AUTODEL|K_UPPER))
-	return(0);
-if(str[0]<='G')
-    break; }
-user->race=ans2uchar(str);
-
-while(1) {
-checkline();
-bputs(hdr);
-bputs("\1n\1h\1cYour Hair Color:\r\n\r\n");
-mnemonics("~A) Blonde\r\n~B) Brown\r\n~C) Red\r\n~D) Black\r\n"
-    "~E) Grey\r\n~F) Other\r\n");
-nodesync();
-bputs("\r\n\1y\1hWhich: \1w");
-uchar2ans(user->hair,str);
-if(!getstr(str,1,K_ALPHA|K_LINE|K_EDIT|K_AUTODEL|K_UPPER))
-	return(0);
-if(str[0]<='F')
-    break; }
-user->hair=ans2uchar(str);
-
-while(1) {
-checkline();
-bputs(hdr);
-bputs("\1n\1h\1cYour Eye Color:\r\n\r\n");
-mnemonics("~A) Blue\r\n~B) Green\r\n~C) Hazel\r\n~D) Brown\r\n"
-    "~E) Other\r\n");
-nodesync();
-bputs("\r\n\1y\1hWhich: \1w");
-uchar2ans(user->eyes,str);
-if(!getstr(str,1,K_ALPHA|K_LINE|K_EDIT|K_AUTODEL|K_UPPER))
-	return(0);
-if(str[0]<='E')
-    break; }
-user->eyes=ans2uchar(str);
-return(1);
-}
-
-int get_pref_multi(user_t *user)
-{
-	char str[128],*hdr,*p;
-	int i;
-
-while(1) {
-checkline();
-hdr="\1n\1l\1h\0014 Profile of Your Preferred Mate \1n  \1h\1b"
-    "(Ctrl-C to Abort)\r\n\r\n";
-bputs(hdr);
-bputs("\1n\1h\1cSex of Your Preferred (Intimate/Romantic) Mate:\r\n\r\n");
-mnemonics("~M) Male\r\n~F) Female\r\n~*) Either\r\n");
-nodesync();
-bputs("\r\n\1y\1hWhich: ");
-str[0]=user->pref_sex;
-str[1]=0;
-if(!getstr(str,1,K_UPPER|K_EDIT|K_AUTODEL|K_LINE))
-    break;
-if(user->sex==str[0] && noyes("\r\nYou are homosexual"))
-	continue;
-if(str[0]=='M' || str[0]=='F' || str[0]=='*')
-    break; }
-user->pref_sex=str[0];
-if(aborted) return(0);
-
-strcpy(str,"\r\nAre you seeking an any-sex (non-romantic) friendship");
-if(user->misc&USER_FRIEND)
-	i=yesno(str);
-else
-	i=!noyes(str);
-if(i)
-	user->misc|=USER_FRIEND;
-else
-	user->misc&=~USER_FRIEND;
-
-bputs(hdr);
-bputs("\1n\1h\1cMarital Status of Your Preferred Mate:\r\n\r\n");
-mnemonics("~A) Single\r\n~B) Married\r\n~C) Divorced\r\n~D) Widowed\r\n"
-    "~E) Other\r\n~*) Any of the above\r\n");
-nodesync();
-bputs("\r\n\1y\1hPlease enter up to 4 answers: ");
-uchar2ans(user->pref_marital,str);
-if(!getstr(str,4,K_UPPER|K_LINE|K_EDIT|K_AUTODEL))
-	return(0);
-user->pref_marital=ans2uchar(str);
-if(user->pref_marital!=0xff) {
-	strcpy(str,"\r\nDo you require your mate have the martial status you "
-		"indicated");
-	if(user->misc&USER_REQMARITAL)
-		i=yesno(str);
-	else
-		i=!noyes(str);
-	if(i)
-        user->misc|=USER_REQMARITAL;
-	else
-		user->misc&=~USER_REQMARITAL; }
-else
-	user->misc&=~USER_REQMARITAL;
-if(aborted) return(0);
-
-bputs(hdr);
-bputs("\1n\1h\1cRace of Your Preferred Mate:\r\n\r\n");
-mnemonics("~A) White\r\n~B) Black\r\n~C) Hispanic\r\n~D) Asian\r\n"
-    "~E) American Indian\r\n~F) Middle Eastern\r\n~G) Other\r\n"
-    "~*) Any of the above\r\n");
-nodesync();
-bputs("\r\n\1y\1hPlease enter up to 6 answers: ");
-uchar2ans(user->pref_race,str);
-if(!getstr(str,6,K_UPPER|K_LINE|K_EDIT|K_AUTODEL))
-	return(0);
-user->pref_race=ans2uchar(str);
-if(user->pref_race!=0xff) {
-	strcpy(str,"\r\nDo you require your mate be of the race"
-		" you indicated");
-	if(user->misc&USER_REQRACE)
-		i=yesno(str);
-	else
-		i=!noyes(str);
-	if(i)
-		user->misc|=USER_REQRACE;
-	else
-		user->misc&=~USER_REQRACE; }
-else
-	user->misc&=~USER_REQRACE;
-if(aborted) return(0);
-
-bputs(hdr);
-bputs("\1n\1h\1cHair Color of Your Preferred Mate:\r\n\r\n");
-mnemonics("~A) Blonde\r\n~B) Brown\r\n~C) Red\r\n~D) Black\r\n"
-    "~E) Grey\r\n~F) Other\r\n~*) Any of the Above\r\n");
-nodesync();
-bputs("\r\n\1y\1hPlease enter up to 5 answers: ");
-uchar2ans(user->pref_hair,str);
-if(!getstr(str,5,K_UPPER|K_LINE|K_EDIT|K_AUTODEL))
-	return(0);
-user->pref_hair=ans2uchar(str);
-if(user->pref_hair!=0xff) {
-	strcpy(str,"\r\nDo you require your mate have the hair color"
-		" you indicated");
-	if(user->misc&USER_REQHAIR)
-		i=yesno(str);
-	else
-		i=!noyes(str);
-	if(i)
-		user->misc|=USER_REQHAIR;
-	else
-		user->misc&=~USER_REQHAIR; }
-else
-	user->misc&=~USER_REQHAIR;
-if(aborted) return(0);
-
-
-bputs(hdr);
-bputs("\1n\1h\1cEye Color of Your Preferred Mate:\r\n\r\n");
-mnemonics("~A) Blue\r\n~B) Green\r\n~C) Hazel\r\n~D) Brown\r\n"
-    "~E) Other\r\n~*) Any of the above\r\n");
-nodesync();
-bputs("\r\n\1y\1hPlease enter up to 4 answers: ");
-uchar2ans(user->pref_eyes,str);
-if(!getstr(str,4,K_UPPER|K_LINE|K_EDIT|K_AUTODEL))
-	return(0);
-user->pref_eyes=ans2uchar(str);
-if(user->pref_eyes!=0xff) {
-	strcpy(str,"\r\nDo you require your mate have the eye color"
-		" you indicated");
-	if(user->misc&USER_REQEYES)
-		i=yesno(str);
-	else
-		i=!noyes(str);
-	if(i)
-		user->misc|=USER_REQEYES;
-	else
-		user->misc&=~USER_REQEYES; }
-else
-	user->misc&=~USER_REQEYES;
-if(aborted) return(0);
-
-bputs(hdr);
-bputs("\1n\1h\1cZodiac Sign of Your Preferred Mate:\r\n\r\n");
-mnemonics("~A) Aries\r\n~B) Taurus\r\n~C) Gemini\r\n~D) Cancer\r\n"
-    "~E) Leo\r\n~F) Virgo\r\n~G) Libra\r\n~H) Scorpio\r\n");
-mnemonics("~I) Sagittarius\r\n~J) Capricorn\r\n~K) Aquarius\r\n"
-    "~L) Pisces\r\n~*) Any of the above\r\n");
-nodesync();
-bputs("\r\n\1y\1hPlease enter up to 11 answers: ");
-bits2ans(user->pref_zodiac,str);
-if(!getstr(str,11,K_UPPER|K_LINE|K_EDIT|K_AUTODEL))
-	return(0);
-user->pref_zodiac=ans2bits(str);
-if(user->pref_zodiac!=0xffff) {
-	strcpy(str,"\r\nDo you require your mate have the zodiac sign"
-		" you indicated");
-	if(user->misc&USER_REQZODIAC)
-		i=yesno(str);
-	else
-		i=!noyes(str);
-	if(i)
-		user->misc|=USER_REQZODIAC;
-	else
-		user->misc&=~USER_REQZODIAC; }
-else
-	user->misc&=~USER_REQZODIAC;
-if(aborted) return(0);
-
-return(1);
-}
-
-void mbtype_desc(char *mbtype)
-{
-	char str[128],type[128];
-
-while(1) {
-	checkline();
-	cls();
-	printfile("MB-TYPE.ASC");
-	nodesync();
-	bprintf("\r\n\1y\1hYour Type: \1w%s\r\n",mbtype);
-	bputs("\1y\1hLetter or Type to define: ");
-	memset(type,0,5);
-	if(!getstr(type,4,K_ALPHA|K_UPPER|K_LINE))
-		break;
-	sprintf(str,"MB-%s.ASC",type);
-	if(!fexist(str)) {
-		bputs("\r\nInvalid Letter or Type!\r\n\r\n");
-		pause();
-		continue; }
-	cls();
-	printfile(str);
-	if(lncntr && !aborted)
-		pause(); }
-}
-
-
-int get_mbtype(user_t *user)
-{
-	char str[256];
-	int file,i=0,e=0,n=0,s=0,f=0,t=0,p=0,j=0,q=0,ch;
-	FILE *stream;
-
-aborted=0;
-cls();
-printfile("MB-INTRO.ASC");
-if(aborted)
-	return(0);
-bputs("\1n\1hYour answers will be kept secret.\r\n\r\n"
-	"Only your personality type will be visible to other users.\r\n\r\n");
-nodesync();
-if(!yesno("Continue with test"))
-    return(0);
-
-if((file=nopen("MB-TYPE.QUE",O_RDONLY))==-1 ||
-	(stream=fdopen(file,"r"))==NULL) {
-	bputs("\7\r\i\hCan't open MBTYPE.QUE\r\n\1p");
-	return(0); }
-while(!feof(stream)) {
-	if(!fgets(str,200,stream))
-        break;
-	str[57]=0;
-	truncsp(str);
-	if(!str[0])
-		break;
-	cls();
-	nodesync();
-	bprintf("\1y\1hMyers-Briggs Personality Test  \1bQuestion #\1w%u  "
-		"\1b(Ctrl-C to Abort)\r\n"
-		"\r\n%s:\r\n\r\n"
-		"[\1wA\1b] %.44s\r\n"
-		"[\1wB\1b] %.44s\r\n"
-		"[\1wC\1b] cannot decide\r\n\r\n"
-		"Which: \1w"
-		,q+1,str,str+58,str+102);
-	ch=getkeys("ABC",0);
-	if(aborted) {
-		fclose(stream);
-		return(0); }
-	if(ch=='C') {
-		q++;
-		continue; }
-
-	if(ch=='A')
-		ch=str[146];
-	else
-		ch=str[147];
-
-	switch(ch) {
-		case 'E':
-			e++;
-			break;
-		case 'I':
-			i++;
-			break;
-		case 'S':
-			s++;
-			break;
-		case 'N':
-			n++;
-			break;
-		case 'T':
-			t++;
-			break;
-		case 'F':
-			f++;
-			break;
-		case 'J':
-			j++;
-			break;
-		case 'P':
-			p++;
-			break; }
-	q++; }
-
-fclose(stream);
-
-if(i>e)
-	user->mbtype[0]='I';
-else if(i==e)
-	user->mbtype[0]='*';
-else
-	user->mbtype[0]='E';
-
-if(s>n)
-	user->mbtype[1]='S';
-else if(s==n)
-	user->mbtype[1]='*';
-else
-	user->mbtype[1]='N';
-
-if(t>f)
-	user->mbtype[2]='T';
-else if(t==f)
-	user->mbtype[2]='*';
-else
-	user->mbtype[2]='F';
-
-if(p>j)
-	user->mbtype[3]='P';
-else if(p==j)
-	user->mbtype[3]='*';
-else
-	user->mbtype[3]='J';
-
-bprintf("\1l\1y\1hYour Myers-Briggs Personality Type is \1w%s\r\n\r\n"
-	,user->mbtype);
-
-if(yesno("Would you like to see the personality type descriptions"))
-	mbtype_desc(user->mbtype);
-return(1);
-}
-
-
-int get_purity(user_t *user)
-{
-	char str[128];
-	int file,no_ans=0,pos_ans=0;
-	FILE *stream;
-
-aborted=0;
-if(!fexist("PURITY.QUE") || purity_age>getage(user->birth))
-	return(0);
-cls();
-printfile("PURITY.ASC");
-if(aborted)
-	return(0);
-bputs("\1n\1hYour answers will be kept secret.\r\n\r\n"
-	"Only your purity score will be visible to other users.\r\n\r\n");
-nodesync();
-if(!yesno("Continue with test"))
-	return(0);
-if((file=nopen("PURITY.QUE",O_RDONLY))==-1 ||
-	(stream=fdopen(file,"r"))==NULL) {
-	bputs("\7\r\i\hCan't open PURITY.QUE\r\n\1p");
-	return(0); }
-while(!feof(stream)) {
-	if(!fgets(str,81,stream))
-		break;
-	truncsp(str);
-	cls();
-	if(str[0]=='*') {
-		printfile(str+1);
-		if(lncntr && !aborted)
-			pause();
-		if(aborted)
-			break;
-		continue; }
-	nodesync();
-	bprintf("\1y\1hPurity Test  \1bQuestion #\1w%u  \1b(Ctrl-C to Abort)\r\n"
-		"\r\nHave you ever:\r\n\r\n"
-		,++pos_ans);
-	if(noyes(str))
-		no_ans++;
-	if(aborted)
-		break; }
-
-fclose(stream);
-if(aborted)
-	return(0);
-
-user->purity=((float)no_ans/pos_ans)*100.0;
-bprintf("\1l\1y\1hCongratulations, you are \1w%u%%\1y pure!\r\n\r\n"
-	,user->purity);
-pause();
-return(1);
-}
-
-int get_que(int i, user_t *inuser)
-{
-	char str[128];
-	int j,k,x,y,u;
-	user_t user=*inuser;
-
-if(que[i]->req_age>getage(inuser->birth))
-	return(0);
-for(j=0;j<que[i]->total_ques && !aborted;j++) {
-
-	u=user_quenum(que[i]->name,user);
-	if(u==-1) { 			/* not already answered */
-		for(u=0;u<5;u++)	/* search for unused questionnaire slot */
-			if(sys_quenum(user.queans[u].name)==-1)
-				break;
-		if(u==5) {		/* All questionnaire slots used!?? */
-			bputs("\r\n\7Questionnaire error, inform sysop!\r\n");
-			pause();
-			return(0); } }
-	strcpy(user.queans[u].name,que[i]->name);
-	cls();
-	bprintf("\1n\1m\1hQuestionnaire: \1y%-25s \1mQuestion: "
-		"\1y%d \1mof \1y%d  \1h\1b(Ctrl-C to Abort)\r\n\r\n"
-		,que[i]->desc,j+1,que[i]->total_ques);
-	bprintf("\1w\1h%s\r\n\r\n",que[i]->que[j].txt);
-	for(k=0;k<que[i]->que[j].answers;k++)
-		bprintf("\1h\1b%c\1w) \1g%s\r\n",'A'+k,que[i]->que[j].ans[k]);
-	nodesync();
-	bprintf("\1n\1g\r\nChoose %s%d answer%s to describe "
-		"\1hyourself\1n\1g%s: "
-		,que[i]->que[j].allowed > 1 ? "up to ":""
-		,que[i]->que[j].allowed,que[i]->que[j].allowed > 1 ? "s":""
-		,j ? " or \1h-\1n\1g to go back" : "");
-	bits2ans(user.queans[u].self[j],str);
-	getstr(str,que[i]->que[j].allowed,K_UPPER|K_LINE|K_EDIT|K_AUTODEL);
-	if(aborted)
-		return(0);
-	truncsp(str);
-	if(!str[0]) {
-		j--;
-		continue; }
-	if(str[0]=='-') {
-		if(j) j-=2;
-		else j--;
-		continue; }
-	y=strlen(str);
-	for(x=0;x<y;x++)
-		if(!isalpha(str[x]) || str[x]-'A'>que[i]->que[j].answers-1)
-			break;
-	if(x<y) {
-		j--;
-		continue; }
-	user.queans[u].self[j]=ans2bits(str);
-	nodesync();
-	bprintf("\1n\1g\r\n%s%d answer%s to describe your \1hpreferred mate"
-		"\1n\1g or \1h*\1n\1g for any: "
-		,que[i]->que[j].answers > 1 ? "Up to ":""
-		,que[i]->que[j].answers,que[i]->que[j].answers > 1 ? "s":"");
-	if(user.queans[u].pref[j])
-		bits2ans(user.queans[u].pref[j],str);
-	getstr(str,que[i]->que[j].answers,K_UPPER|K_LINE|K_EDIT|K_AUTODEL);
-	if(aborted)
-		return(0);
-	truncsp(str);
-	if(!str[0]) {
-		j--;
-		continue; }
-	y=strlen(str);
-	for(x=0;x<y;x++)
-		if(isalpha(str[x]) && str[x]-'A'>que[i]->que[j].answers-1)
-			break;
-	if(x<y) {
-		j--;
-		continue; }
-	user.queans[u].pref[j]=ans2bits(str); }
-*inuser=user;
-return(1);
-}
-
-/* Gets/updates profile from user. Returns 0 if aborted. */
-
-char get_user_info(user_t *user)
-{
-	char str[128],*p,*hdr;
-	int i,j,k,x,y;
-
-while(1) {
-	checkline();
-	timeleft=0xffff;
-	aborted=0;
-	main_user_info(*user);
-	CRLF;
-	bputs("\1n\1h");
-	bputs("\1b[\1wA\1b] Your name, height, weight, income, location, and "
-			"text\r\n"
-		  "\1b[\1wB\1b] Your marital status, race, hair color, and eye "
-			"color\r\n"
-		  "\1b[\1wC\1b] Preferred age, height, weight, location, and income\r\n"
-		  "\1b[\1wD\1b] Preferred sex, marital status, race, hair color, eye "
-			"color, and zodiac\r\n"
-		  );
-	for(i=0;i<total_ques;i++) {
-		if(que[i]->req_age>getage(user->birth))
-			continue;
-		bprintf("\1b[\1w%u\1b] \1w%s \1bquestionnaire\1b (%u questions) \1w%s\r\n"
-			,i+1,que[i]->desc,que[i]->total_ques
-			,user_quenum(que[i]->name,*user)==-1 ? "[Unanswered]":"[Answered]");
-			}
-	bprintf("\1b[\1wM\1b] Myers-Briggs personality test (70 questions) "
-		"\1w[%s]\r\n",user->mbtype[0] ? user->mbtype : "Unanswered");
-	if(fexist("PURITY.QUE") && purity_age<=getage(user->birth))
-		bprintf("\1b[\1wP\1b] Purity test \1w(%u%% pure)\r\n"
-			,user->purity);
-	bputs("\r\n\1bWhich or [\1wQ\1b]uit: \1w");
-	i=getkeys("ABCDMPQ",total_ques);
-	if(i&0x8000) {
-		i&=~0x8000;
-		i--;
-		get_que(i,user);
-		continue; }
-
-	switch(i) {
-		case 'A':
-			get_your_det(user);
-			break;
-		case 'C':
-			get_pref_det(user);
-			break;
-		case 'B':
-			get_your_multi(user);
-			break;
-		case 'D':
-			get_pref_multi(user);
-			break;
-		case 'M':
-			get_mbtype(user);
-			break;
-		case 'P':
-			get_purity(user);
-			break;
-		case 'Q':
-			return(1); } }
-}
-
-void write_user()
-{
-    char str[256];
-
-if(auto_update && time(NULL)-useron.updated>(long)auto_update*24L*60L*60L)
-	useron.updated=time(NULL);
-fseek(stream,useron_record*sizeof(user_t),SEEK_SET);
-fwrite(&useron,sizeof(user_t),1,stream);
-fflush(stream);
-
-ixb.updated=useron.updated;
-if(useron.misc&USER_DELETED)
-    ixb.number=0;
-else
-    ixb.number=useron.number;
-strcpy(str,useron.name);
-strupr(str);
-ixb.name=crc32(str);
-ixb.system=system_crc;
-fseek(index,useron_record*sizeof(ixb_t),SEEK_SET);
-fwrite(&ixb,sizeof(ixb_t),1,index);
-fflush(index);
-if(!ixb.number) {
-	sprintf(str,"%04u.MSG",useron.number);
-	remove(str); }
-}
-
-
-void add_userinfo()
-{
-	static user_t user;
-	char str[128];
-	ushort tleft=timeleft;
-	int i;
-
-if(!cdt_warning(profile_cdt))
-	return;
-timeleft=0xffff;
-user.number=user_number;
-user.sex=user_sex;
-strcpy(user.name,user_name);
-strcpy(user.realname,user_name);
-strcpy(user.system,system_name);
-strcpy(user.birth,user_birth);
-strcpy(user.zipcode,user_zipcode);
-sprintf(user.min_zipcode,"%c0000",user_zipcode[0]);
-sprintf(user.max_zipcode,"%c9999",user_zipcode[0]);
-strcpy(user.location,user_location);
-if(user.sex!='M' && user.sex!='F') {
-	if(yesno("Are you of male gender"))
-		user.sex='M';
-	else
-		user.sex='F'; }
-if(!getage(user.birth))
-	while(1) {
-		checkline();
-		cls();
-		bputs("\1l\1y\1hYour birthdate (MM/DD/YY): ");
-		if(!getstr(user.birth,8,K_UPPER|K_LINE))
-			return;
-		if(getage(user.birth))
-			break; }
-
-user.pref_sex=user.sex=='M' ? 'F' : 'M';
-user.created=time(NULL);
-if(!get_your_det(&user) || !get_your_multi(&user) || !get_pref_multi(&user)
-	|| !get_pref_det(&user)) {
-	timeleft=tleft;
-	return; }
-for(i=0;i<total_ques;i++) {
-	aborted=0;
-	if(que[i]->req_age>getage(user.birth))
-		continue;
-	timeleft=0xffff;
-	cls();
-	bprintf("\1w\1h%s Questionnaire: \1y%u questions\r\n\r\n"
-		"\1cAnswers will be viewable by other users.\r\n\r\n"
-		,que[i]->desc,que[i]->total_ques);
-	if(yesno("Continue with questionnaire"))
-		get_que(i,&user); }
-timeleft=0xffff;
-get_mbtype(&user);
-timeleft=0xffff;
-get_purity(&user);
-if(!get_user_info(&user)) {
-	timeleft=tleft;
-	return; }
-user.updated=time(NULL);
-useron=user;
-bputs("\1n\1h\r\nSaving...");
-rewind(index);
-while(!feof(index)) {
-	if(!fread(&ixb,sizeof(ixb_t),1,index))
-		break;
-	if(!ixb.number) {	  /* Deleted User */
-		fseek(index,ftell(index)-sizeof(ixb_t),SEEK_SET);
-		break; } }
-
-useron_record=ftell(index)/sizeof(ixb_t);
-
-write_user();
-adjust_cdt(profile_cdt);
-
-if(notify_user && notify_user!=user_number) {
-	sprintf(str,"\1n\1hSMM: \1y%s \1madded %s profile to the Match Maker.\r\n"
-		,user_name,user_sex=='M' ? "his":"her");
-	if(node_dir[0])
-		putsmsg(notify_user,str);
-	else
-		puttgram(notify_user,str); }
-
-timeleft=tleft;
-}
-
-void delphoto(user_t user)
-{
-	char fname[64],path[128];
-	int i;
-	struct ffblk ff;
-
-if(!(user.misc&USER_PHOTO))
-	return;
-for(i=0;user.system[i];i++)
-	if(isalnum(user.system[i]))
-        break;
-if(!user.system[i])
-	fname[0]='~';
-else
-	fname[0]=user.system[i];
-for(i=strlen(user.system)-1;i>0;i--)
-	if(isalnum(user.system[i]))
-		break;
-if(i<=0)
-	fname[1]='~';
-else
-	fname[1]=user.system[i];
-fname[2]=0;
-strupr(user.system);
-strcat(fname,base41(crc16(user.system),tmp));
-strcat(fname,base41(user.number,tmp));
-strcat(fname,".*");
-strupr(fname);
-sprintf(path,"PHOTO\\%s",fname);
-i=findfirst(path,&ff,0);
-if(i)
-	return;
-sprintf(path,"PHOTO\\%s",ff.ff_name);
-if(remove(path))
-	bprintf("\1r\1h\7%s couldn't be removed!\1n\r\n",path);
-else
-	bprintf("\1r\1hPhoto removed.\r\n");
-}
-
-
-void smm_exit()
-{
-	char str[128];
-	int i;
-	FILE *in,*out;
-
-if(io_int) {
-	io_int=0;
-	ivhctl(0); }
-if(com_port) {
-	for(i=0;i<5;i++)
-		if(!rioctl(TXBC))		/* wait for rest of output */
-			break;
-		else
-			mswait(1000);
-    rioini(0,0); }
-if(useron.number) {
-	useron.lastin=time(NULL);
-	write_user(); }
-if(stream)
-	fclose(stream);
-if(cdt_adjustment) {
-	if(node_dir[0]) {
-		sprintf(str,"%sMODUSER.DAT",node_dir);
-		if((out=fopen(str,"wt"))==NULL) {
-			bprintf("Error opening %s for write\r\n",str);
-			return; }
-		fprintf(out,"%ld",cdt_adjustment);
-		fclose(out); }
-	else {							/* Write back credits to DOOR.SYS */
-		strcpy(str,door_sys);
-		str[strlen(str)-1]='_';
-		remove(str);
-		rename(door_sys,str);
-		if((in=fopen(str,"rb"))==NULL) {
-			bprintf("Error opening %s for read\r\n",str);
-            return; }
-		if((out=fopen(door_sys,"wb"))==NULL) {
-			bprintf("Error opening %s for write\r\n",door_sys);
-			return; }
-		for(i=0;!feof(in);i++) {
-			if(!fgets(tmp,128,in))
-				break;
-			if(i+1==30)
-				fprintf(out,"%ld\r\n",-(cdt_adjustment/1024L));
-			else if(i+1==31)
-				fprintf(out,"%ld\r\n",(user_cdt+cdt_adjustment)/1024L);
-			else
-				fprintf(out,"%s",tmp); }
-		fclose(in);
-		fclose(out);
-		remove(str);
-		} }
-}
-
-time_t checktime()
-{
-	struct tm tm;
-
-memset(&tm,0,sizeof(tm));
-tm.tm_year=94;
-tm.tm_mday=1;
-return(mktime(&tm)^0x2D24BD00L);
-}
-
-void statusline(void)
-{
-	int col,row;
-
-col=lclwx();
-row=lclwy();
-lclxy(1,node_scrnlen);
-lclatr(CYAN|HIGH|(BLUE<<4));
-lputs("  ");
-lprintf("%-25.25s %02d %-25.25s  %02d %c %s"
-    ,user_name,user_level,user_realname[0] ? user_realname : user_location
-    ,getage(user_birth)
-    ,user_sex ? user_sex : SP
-    ,user_phone);
-lputc(CLREOL);
-lclatr(LIGHTGRAY);
-lclxy(col,row);
-}
-
-
-int minor_protection(user_t user)
-{
-if(!user_number || !age_split || SYSOP)
-	return(0);
-if(getage(user_birth)<age_split && getage(user.birth)>=age_split)
-	return(1);
-if(getage(user_birth)>=age_split && getage(user.birth)<age_split)
-	return(1);
-return(0);
-}
-
-void main(int argc, char **argv)
-{
-	char	str[512],name[128],desc[128],gotoname[128],*p,ext,ch;
-	int 	i,j,k,file,match,found;
-	uint	base=0xffff;
-	ushort	tleft;
-	long	l,offset;
-	ulong	name_crc,sys_crc,*crc_lst,ul;
-	FILE	*fp,*que_lst;
-	user_t	user;
-	wall_t	wall;
-	struct	ffblk ff;
-
-nodefile=-1;
-node_misc=NM_LOWPRIO;
-com_port=-1;
-com_base=0;
-com_irq=com_rate=0;
-node_dir[0]=exec_dir[0]=temp_dir[0]=ctrl_dir[0]=door_sys[0]=system_name[0]=0;
-sys_name[0]=0;
-
-p=getenv("SBBSNODE");
-if(p) {
-	strcpy(node_dir,p);
-	if(node_dir[strlen(node_dir)-1]!='\\')
-		strcat(node_dir,"\\");
-	initdata(); }
-
-gotoname[0]=0;
-for(i=1;i<argc;i++) {
-	if(argv[i][0]=='/') {
-		switch(toupper(argv[i][1])) {
-			case 'P':
-				com_port=atoi(argv[i]+2);
-				break;
-			case 'I':
-				com_irq=atoi(argv[i]+2);
-				break;
-			case 'C':
-				com_base=ahtoul(argv[i]+2);
-				break;
-			case 'R':
-				com_rate=atol(argv[i]+2);
-				break;
-			case 'T':
-				mswtyp=atoi(argv[i]+2);
-				break;
-			case 'N':
-				node_dir[0]=0;
-				break;
-			default:
-				printf("\nusage: SMM [DOOR.SYS] [/option] [/option] [...] [user name]\n");
-				printf("\n");
-				printf("where:\n");
-				printf("       DOOR.SYS is the path and filename of DOOR.SYS\n");
-				printf("\n");
-				printf("       /p# sets com port\n");
-				printf("       /i# sets com irq\n");
-				printf("       /c# sets com I/O address (or DIGI or FOSSIL)\n");
-				printf("       /r# sets com rate\n");
-				printf("       /t# sets time-slice API support\n");
-				printf("\n");
-				printf("       user name (if specified) is user to look-up\n");
-				exit(1); }
-		continue; }
-	if(!node_dir[0] && !door_sys[0]) {
-		strcpy(door_sys,argv[i]);
-		continue; }
-	if(gotoname[0])
-		strcat(gotoname," ");
-	strcat(gotoname,argv[i]); }
-
-if(!node_dir[0] && !door_sys[0]) {
-	printf("\n\7SBBSNODE environment variable not set and DOOR.SYS not "
-		"specified.\n");
-	exit(1); }
-
-if(door_sys[0]) {
-	#ifdef __TURBOC__
-		ctrlbrk(cbreakh);
-	#endif
-
-	#ifdef __WATCOMC__
-		putenv("TZ=UCT0");
-		setvbuf(stdout,NULL,_IONBF,0);
-		setvbuf(stderr,NULL,_IONBF,0);
-	#endif
-
-	if(setmode(fileno(stderr),O_BINARY)==-1) {	 /* eliminate LF expansion */
-		printf("\n\7Can't set stderr to BINARY\n");
-		exit(1); }
-
-	starttime=time(NULL);			/* initialize start time stamp */
-	wordwrap[0]=0;					/* set wordwrap to null */
-	attr(LIGHTGRAY);				/* initialize color and curatr to plain */
-	mnehigh=LIGHTGRAY|HIGH; 		/* mnemonics highlight color */
-	mnelow=GREEN;					/* mnemonics normal text color */
-	sec_warn=180;					/* seconds till inactivity warning */
-	sec_timeout=300;				/* seconds till inactivity timeout */
-	tos=lncntr=0;					/* init topofscreen and linecounter to 0 */
-	lastnodemsg=0;					/* Last node to send message to */
-	aborted=0;						/* Ctrl-C hit flag */
-
-	fp=fopen(door_sys,"rb");
-	if(!fp) {
-		printf("\n\7ERROR opening %s\n",door_sys);
-		exit(2); }
-	user_misc=user_flags2[0]=user_flags3[0]=user_flags4[0]=0;
-	user_rest[0]=user_exempt[0]=0;
-	user_sex=user_address[0]=user_zipcode[0]=user_realname[0]=0;
-	str[0]=0;
-	fgets(str,81,fp);				// 01: COM port - if local
-	if(com_port==-1)
-		com_port=atoi(str+3);
-	str[0]=0;
-	fgets(str,81,fp);				// 02: DCE Rate
-	user_dce=atoi(str);
-	fgets(str,81,fp);				// 03: Data bits
-	str[0]=0;
-	fgets(str,81,fp);				// 04: Node num
-	node_num=atoi(str);
-	str[0]=0;
-	fgets(str,81,fp);				// 05: DTE rate
-	if(!com_rate)
-		com_rate=atol(str);
-	fgets(str,81,fp);				// 06: Screen display
-	fgets(str,81,fp);				// 07: Printer toggle
-	fgets(str,81,fp);				// 08: Page bell
-	fgets(str,81,fp);				// 09: Caller alarm
-	str[0]=0;
-	fgets(str,81,fp);				// 10: User name
-	sprintf(user_name,"%.25s",str);
-	truncsp(user_name);
-	str[0]=0;
-	fgets(str,81,fp);				// 11: User location
-	sprintf(user_location,"%.30s",str);
-	truncsp(user_location);
-	str[0]=0;
-	fgets(str,81,fp);				// 12: Home phone
-	sprintf(user_phone,"%.12s",str);
-	truncsp(user_phone);
-	fgets(str,81,fp);				// 13: Work phone
-	fgets(str,81,fp);				// 14: Password
-	str[0]=0;
-	fgets(str,81,fp);				// 15: Security Level
-	user_level=atoi(str);
-	fgets(str,81,fp);				// 16: Total logons
-	fgets(str,81,fp);				// 17: Last on date
-	str[0]=0;
-	fgets(str,81,fp);				// 18: Time left in seconds
-	timeleft=atoi(str);
-	fgets(str,81,fp);				// 19: Time left in minutes
-	str[0]=0;
-	fgets(str,81,fp);				// 20: Graphics
-	if(!strnicmp(str,"GR",2))
-		user_misc|=(COLOR|ANSI);
-	str[0]=0;
-	fgets(str,81,fp);				// 21: Screen length
-	user_rows=atoi(str);
-	if(user_rows<10)
-		user_rows=24;
-	fgets(str,81,fp);				// 22: Expert?
-	str[0]=0;
-	fgets(str,81,fp);				// 23: Registered conferences
-	sprintf(user_flags1,"%.26s",str);
-	truncsp(user_flags1);
-	fgets(str,81,fp);				// 24: Conference came from
-	str[0]=0;
-	fgets(str,81,fp);				// 25: User's expiration date
-	user_expire=dstrtounix(str);
-	str[0]=0;
-	fgets(str,81,fp);				// 26: User's number
-	user_number=atoi(str);
-	fgets(str,81,fp);				// 27: Default protocol
-	fgets(str,81,fp);				// 28: Total uploads
-	fgets(str,81,fp);				// 29: Total downloads
-	fgets(str,81,fp);				// 30: Kbytes downloaded today
-	str[0]=0;
-	fgets(str,81,fp);				// 31: Max Kbytes to download today
-	user_cdt=atol(str)*1024UL;
-	str[0]=0;
-	fgets(str,81,fp);				// 32: Birthday
-	truncsp(str);
-	sprintf(user_birth,"%.8s",str);
-	fgets(str,81,fp);				// 33: Path to MAIN
-	fgets(str,81,fp);				// 34: Path to GEN
-	str[0]=0;
-	fgets(str,81,fp);				 // 35: Sysop's name
-	sprintf(sys_op,"%.40s",str);
-	truncsp(sys_op);
-	fclose(fp);
-	con_fp=stderr;
-	if(setmode(fileno(con_fp),O_BINARY)==-1) {	 /* eliminate LF expansion */
-		printf("Can't set console output to BINARY\n");
-		exit(1); }
-	}
-
-if(!user_number) {
-	printf("\7\nERROR: Invalid user number (%u)\n",user_number);
-	exit(5); }
-
-if(*(&riobp-1)!=23) {
-    printf("Wrong rciol.obj\n");
-    exit(1); }
-
-node_scrnlen=lclini(0xd<<8);	  /* Tab expansion, no CRLF expansion */
-lclini(node_scrnlen-1);
-
-if(com_port) {
-	lprintf("\r\nInitializing COM port %u: ",com_port);
-	switch(com_base) {
-		case 0xb:
-			lputs("PC BIOS");
-			rioctl(I14PC);
-			if(!com_irq) com_irq=com_port-1;
-			break;
-		case 0xffff:
-		case 0xd:
-			lputs("DigiBoard");
-			rioctl(I14DB);
-			if(!com_irq) com_irq=com_port-1;
-			break;
-		case 0xe:
-			lputs("PS/2 BIOS");
-			rioctl(I14PS);
-			if(!com_irq) com_irq=com_port-1;
-			break;
-		case 0xf:
-			lputs("FOSSIL");
-			rioctl(I14FO);
-			if(!com_irq) com_irq=com_port-1;
-			break;
-		case 0:
-			base=com_port;
-			lputs("UART I/O (BIOS), ");
-			if(com_irq)
-				lprintf("IRQ %d",com_irq);
-			else lputs("default IRQ");
-			break;
-		default:
-			base=com_base;
-			lprintf("UART I/O %Xh, ",com_base);
-			if(com_irq)
-				lprintf("IRQ %d",com_irq);
-			else lputs("default IRQ");
-			break; }
-
-	if(base==0xffff)
-		lprintf(" channel %u",com_irq);
-	i=rioini(base,com_irq);
-	if(i) {
-		lprintf(" - Failed! (%d)\r\n",i);
-		exit(1); }
-	if(mdm_misc&MDM_FLOWCTRL)
-		rioctl(IOSM|CTSCK|RTSCK); /* set rts/cts chk */
-	if(com_rate)
-		setbaud((uint)(com_rate&0xffffL));
-	msr=&riobp-1; }
-
-/* STATUS LINE */
-statusline();
-
-rioctl(TSTYPE|mswtyp);	 /* set time-slice API type */
-
-rioctl(CPTON);			/* ctrl-p translation */
-
-i=INT29L;
-if(com_port)
-	i|=(INT29R|INT16);
-ivhctl(i);
-io_int=1;
-
-atexit(smm_exit);
-
-printf("\r\nSynchronet Match Maker  v%s  Developed 1995-1997 Rob Swindell\n\n"
-    ,SMM_VER);
-
-if(checktime()) {
-    printf("Time problem!\n");
-    return; }
-
-if((file=nopen("SMM.CFG",O_RDONLY))==-1) {
-	bprintf("\r\n\7Error opening/creating SMM.DAB\r\n");
-    exit(1); }
-if((stream=fdopen(file,"w+b"))==NULL) {
-	bprintf("\r\n\7Error converting SMM.DAB file handle to stream\r\n");
-    exit(1); }
-str[0]=0;
-fgets(str,128,stream);
-purity_age=atoi(str);
-str[0]=0;
-fgets(str,128,stream);
-min_age=atoi(str);
-str[0]=0;
-fgets(str,128,stream);
-min_level=atoi(str);
-
-req_flags1[0]=0;
-fgets(req_flags1,128,stream);
-req_flags1[27]=0;
-truncsp(req_flags1);
-
-req_flags2[0]=0;
-fgets(req_flags2,128,stream);
-req_flags2[27]=0;
-truncsp(req_flags2);
-
-req_flags3[0]=0;
-fgets(req_flags3,128,stream);
-req_flags3[27]=0;
-truncsp(req_flags3);
-
-req_flags4[0]=0;
-fgets(req_flags4,128,stream);
-req_flags4[27]=0;
-truncsp(req_flags4);
-
-str[0]=0;
-fgets(str,128,stream);
-profile_cdt=atol(str);
-str[0]=0;
-fgets(str,128,stream);
-telegram_cdt=atol(str);
-str[0]=0;
-fgets(str,128,stream);
-auto_update=atoi(str);
-str[0]=0;
-fgets(str,128,stream);
-notify_user=atoi(str);
-
-fgets(str,128,stream);		// regnum
-
-str[0]=0;
-fgets(str,128,stream);
-telegram_level=atoi(str);
-
-str[0]=0;
-fgets(str,128,stream);
-que_level=atoi(str);
-
-str[0]=0;
-fgets(str,128,stream);
-wall_level=atoi(str);
-
-str[0]=0;
-fgets(str,128,stream);
-wall_cdt=atol(str);
-
-str[0]=0;
-fgets(str,128,stream);
-que_cdt=atol(str);
-
-fgets(zmodem_send,128,stream);
-if(!zmodem_send[0])
-    strcpy(zmodem_send,DEFAULT_ZMODEM_SEND);
-truncsp(zmodem_send);
-
-str[0]=0;
-fgets(str,128,stream);
-smm_misc=atol(str);
-
-fgets(str,128,stream);
-sprintf(system_name,"%.40s",str);
-truncsp(system_name);
-
-fgets(local_view,128,stream);
-truncsp(local_view);
-
-str[0]=0;
-fgets(str,128,stream);
-sysop_level=atoi(str);
-if(!sysop_level)
-    sysop_level=90;
-
-str[0]=0;
-fgets(str,128,stream);
-wall_age=atoi(str);
-
-str[0]=0;
-fgets(str,128,stream);
-age_split=atoi(str);
-
-fclose(stream);
-
-if(!system_name[0] && sys_name[0])
-	strcpy(system_name,sys_name);
-if(!system_name[0]) {
-    printf("\7\nERROR: System name not specified\n");
-    exit(3) ; }
-
-sprintf(str,"%.25s",system_name);
-strupr(str);
-system_crc=crc32(str);
-
-if((file=open("SMM.DAB",O_RDWR|O_BINARY|SH_DENYNO|O_CREAT
-    ,S_IWRITE|S_IREAD))==-1) {
-	bprintf("\r\n\7Error opening/creating SMM.DAB\r\n");
-    exit(1); }
-if((stream=fdopen(file,"w+b"))==NULL) {
-	bprintf("\r\n\7Error converting SMM.DAB file handle to stream\r\n");
-    exit(1); }
-setvbuf(stream,0L,_IOFBF,4096);
-
-if((file=open("SMM.IXB",O_RDWR|O_BINARY|SH_DENYNO|O_CREAT
-    ,S_IWRITE|S_IREAD))==-1) {
-	bprintf("\r\n\7Error opening/creating SMM.IXB\r\n");
-    exit(1); }
-if((index=fdopen(file,"w+b"))==NULL) {
-	bprintf("\r\n\7Error converting SMM.IXB file handle to stream\r\n");
-    exit(1); }
-setvbuf(stream,0L,_IOFBF,1024);
-
-trashfile=NULL;
-if((file=open("SMM.CAN",O_RDONLY|SH_DENYNO))!=-1) {
-	trashfile=fdopen(file,"rb");
-	setvbuf(trashfile,NULL,_IOFBF,4096); }
-
-total_ques=0;
-i=nopen("QUE.LST",O_RDONLY);
-if(i!=-1)
-	que_lst=fdopen(i,"rb");
-else
-	que_lst=NULL;
-i=0;
-while(que_lst && !feof(que_lst) && i<5) {
-	if(!fgets(name,81,que_lst))
-		break;
-	truncsp(name);
-	strupr(name);
-	sprintf(str,"%s.QUE",name);
-	if(!fgets(desc,81,que_lst))
-		break;
-	truncsp(desc);
-	if(!fgets(tmp,81,que_lst))
-		break;
-	truncsp(tmp);
-	if((file=nopen(str,O_RDONLY))!=-1) {
-		fp=fdopen(file,"rb");
-		total_ques++;
-		if((que[i]=(questionnaire_t *)MALLOC(sizeof(questionnaire_t)))==NULL) {
-			bprintf("Can't malloc questionnaires!\r\n");
-			exit(1); }
-		sprintf(que[i]->name,"%.8s",name);
-		sprintf(que[i]->desc,"%.25s",desc);
-		que[i]->req_age=atoi(tmp);
-		fgets(str,128,fp);
-		que[i]->total_ques=atoi(str);
-		if(que[i]->total_ques<1 || que[i]->total_ques>20) {
-			bprintf("Invalid number of questions (%d) in questionnaire #%d\r\n"
-				,que[i]->total_ques,i+1);
-			exit(1); }
-		for(j=0;j<que[i]->total_ques;j++) {
-			if(!fgets(str,128,fp))
-				break;
-			truncsp(str);
-			if(!str[0])
-				break;
-			str[80]=0;
-			strcpy(que[i]->que[j].txt,str);
-			fgets(str,128,fp);
-			que[i]->que[j].answers=atoi(str);
-			if(que[i]->que[j].answers<1 || que[i]->que[j].answers>16) {
-				bprintf("Invalid number of answers (%d) in question #%d "
-					"of questionnaire #%d\r\n"
-					,que[i]->que[j].answers,j+1,i+1);
-				exit(1); }
-			fgets(str,128,fp);
-			que[i]->que[j].allowed=atoi(str);
-			for(k=0;k<que[i]->que[j].answers;k++) {
-				if(!fgets(str,128,fp))
-					break;
-				truncsp(str);
-				if(!str[0])
-					break;
-				str[60]=0;
-				strcpy(que[i]->que[j].ans[k],str); }
-			que[i]->que[j].answers=k; }
-
-		que[i]->total_ques=j; }
-	fclose(fp);
-	i++; }
-fclose(que_lst);
-
-lncntr=0;
-getsmsg(user_number);
-if(lncntr)
-	pause();
-
-memset(&useron,0,sizeof(user_t));
-
-atexit(smm_exit);
-
-bputs("\1n\1hSearching for your profile...");
-rewind(index);
-while(!feof(index)) {
-	if(!fread(&ixb,sizeof(ixb_t),1,index))
-		break;
-	if(ixb.system==system_crc && ixb.number==user_number) {
-		useron_record=(ftell(index)-sizeof(ixb_t))/sizeof(ixb_t);
-		fseek(stream,useron_record*sizeof(user_t),SEEK_SET);
-		fread(&user,sizeof(user_t),1,stream);
-		if(stricmp(user.realname,user_name)) {	/* new name, so delete it */
-			user.misc|=USER_DELETED;
-			fseek(stream,ftell(stream)-sizeof(user_t),SEEK_SET);
-			fwrite(&user,sizeof(user_t),1,stream);
-			fseek(stream,0,SEEK_CUR);
-			fseek(index,ftell(index)-sizeof(ixb_t),SEEK_SET);
-			ixb.number=0;
-			fwrite(&ixb,sizeof(ixb_t),1,index);
-			sprintf(str,"%04u.MSG",user_number);
-			remove(str);
-			continue; }
-		useron=user;		/* name matches, same user */
-		break; } }
-fflush(stream);
-fflush(index);
-CRLF;
-
-if(useron.number && useron.sex!='M' && useron.sex!='F') {
-	if(yesno("Are you of male gender"))
-		useron.sex='M';
-	else
-		useron.sex='F';
-	write_user();
-	user_sex=useron.sex; }
-
-if(!useron.number && user_sex!='M' && user_sex!='F' && can_add()) {
-	if(yesno("Are you of male gender"))
-		user_sex='M';
-	else
-		user_sex='F'; }
-
-if(!useron.number && can_add()) {
-	sprintf(str,"%04u.MSG",user_number);
-	remove(str);
-	printfile("SMM_LOGO.ASC");
-	if(yesno("\r\nYour profile doesn't exist. Create it now"))
-		add_userinfo(); }
-
-if(gotoname[0]) {
-	strupr(gotoname);
-	name_crc=crc32(gotoname);
-	rewind(index);
-	i=0;
-	while(!feof(index)) {
-		if(!fread(&ixb,sizeof(ixb_t),1,index))
-			break;
-		if(!ixb.number)    /* DELETED */
-			continue;
-		if(ixb.name!=name_crc)
-			continue;
-		fseek(stream
-			,((ftell(index)-sizeof(ixb_t))/sizeof(ixb_t))
-			*sizeof(user_t),SEEK_SET);
-		if(!fread(&user,sizeof(user_t),1,stream))
-			continue;
-		if(minor_protection(user))
-			continue;
-		i=1;
-		if(!long_user_info(user))
-			break; }
-	if(!i) {
-		bprintf("\r\n\1n\1h%s \1rnot found.\r\n",gotoname);
-		pause(); }
-	return; }
-
-/*********************************************/
-/* ALL User Messages (from Digital Dynamics) */
-/*********************************************/
-for(i=findfirst("ALL*.MSG",&ff,0);!i;i=findnext(&ff)) {
-	if((j=nopen(ff.ff_name,O_RDONLY))==-1) {
-		bprintf("\1n\1r\1hCan't open \1w%s\r\n",ff.ff_name);
-		pause();
-		continue; }
-	if((fp=fdopen(j,"rb"))==NULL) {
-		bprintf("\1n\1r\1hCan't fdopen \1w%s\r\n",ff.ff_name);
-		pause();
-		continue; }
-	str[0]=0;
-	fgets(str,128,fp);
-	truncsp(str);
-	ul=ahtoul(str);    /* Expiration date */
-	ul^=0x305F6C81UL;
-	attr(LIGHTGRAY);
-	cls();
-	while(!feof(fp)) {
-		if(!fgets(str,128,fp))
-			break;
-		bputs(str); }
-	fclose(fp);
-	CRLF;
-	if(ul<=time(NULL))
-		remove(ff.ff_name); }
-
-/**************************************************/
-/* One-time User Messages (from Digital Dynamics) */
-/**************************************************/
-for(i=findfirst("ONE*.MSG",&ff,0);!i;i=findnext(&ff)) {
-	if(fdate_dir(ff.ff_name)<useron.lastin)
-		continue;
-	if((j=nopen(ff.ff_name,O_RDONLY))==-1) {
-		bprintf("\1n\1r\1hCan't open \1w%s\r\n",ff.ff_name);
-		pause();
-		continue; }
-	if((fp=fdopen(j,"rb"))==NULL) {
-		bprintf("\1n\1r\1hCan't fdopen \1w%s\r\n",ff.ff_name);
-		pause();
-		continue; }
-	str[0]=0;
-	fgets(str,128,fp);
-	truncsp(str);
-	ul=ahtoul(str);    /* Expiration date */
-	ul^=0x305F6C81UL;
-	attr(LIGHTGRAY);
-	cls();
-	while(!feof(fp)) {
-		if(!fgets(str,128,fp))
-			break;
-		bputs(str); }
-	fclose(fp);
-	CRLF;
-	if(ul<=time(NULL))
-        remove(ff.ff_name); }
-
-/******************************************/
-/* Sysop Messages (from Digital Dynamics) */
-/******************************************/
-for(i=findfirst("SYS*.MSG",&ff,0);SYSOP && !i;i=findnext(&ff)) {
-	if((j=nopen(ff.ff_name,O_RDONLY))==-1) {
-		bprintf("\1n\1r\1hCan't open \1w%s\r\n",ff.ff_name);
-		pause();
-		continue; }
-	if((fp=fdopen(j,"rb"))==NULL) {
-		bprintf("\1n\1r\1hCan't fdopen \1w%s\r\n",ff.ff_name);
-		pause();
-		continue; }
-	str[0]=0;
-	fgets(str,128,fp);
-	truncsp(str);
-	ul=ahtoul(str);    /* Expiration date */
-	ul^=0x305F6C81UL;
-	attr(LIGHTGRAY);
-	cls();
-	while(!feof(fp)) {
-		if(!fgets(str,128,fp))
-			break;
-		bputs(str); }
-	fclose(fp);
-	CRLF;
-	if(ul<=time(NULL) || !noyes("Delete message"))
-        remove(ff.ff_name); }
-
-statusline();
-while(1) {
-	checkline();
-	aborted=0;
-	attr(LIGHTGRAY);
-	cls();
-
-	bprintf("\1n  \1b\1hSynchronet \1cMatch Maker  \1bv%s (XSDK v%s)  "
-		"Developed 1995-1997 Rob Swindell\1n\r\n\r\n",SMM_VER,xsdk_ver);
-	printfile("SMM_LOGO.ASC");
-	CRLF;
-
-	l=filelength(fileno(stream));
-	if(l<0) l=0;
-	sprintf(str,"\1n\1cThere are \1h%lu\1n\1c entries in the user profile "
-		"database.\r\n",l/(long)sizeof(user_t));
-	center(str);
-
-	sprintf(str,"%04u.MSG",user_number);
-	if(fexist(str))
-		center("\1h\1mYou have awaiting telegrams!\r\n");
-
-	if(flength("WALL.DAB")>0)
-		center("\1h\1cThere is writing on the Wall.\r\n");
-
-	if(!useron.number)
-		center("\1h\1rYou have not yet created a profile!\r\n");
-
-	printfile("SMM_MAIN.ASC");
-
-	nodesync(); 			/* Display any waiting messages */
-
-	bprintf("\r\n%32s\1b\1hWhich or [\1wQ\1b]uit: \1h\1w",nulstr);
-	ch=getkey(K_UPPER);
-//	  bprintf("%c\r\n",ch);
-	bputs("\r\1>");
-	switch(ch) {
-		case '?':
-			break;
-		case '*':
-			if(!SYSOP)
-				break;
-			bputs("\1n\1hSearching...");
-			rewind(stream);
-			while(!feof(stream) && !aborted) {
-				if(!fread(&user,sizeof(user_t),1,stream))
-					break;
-				if(user.misc&USER_DELETED) {
-					sprintf(str,"\r\nUndelete \1c%s \1b(\1c%s@%s\1b)"
-						,user.name,user.realname,user.system);
-					if(!yesno(str))
-						continue;
-					fseek(stream,ftell(stream)-sizeof(user_t),SEEK_SET);
-					user.misc&=~USER_DELETED;
-					fwrite(&user,sizeof(user_t),1,stream);
-					fseek(stream,0,SEEK_CUR);
-					fseek(index
-						,((ftell(stream)-sizeof(user_t))/sizeof(user_t))
-						*sizeof(ixb_t),SEEK_SET);
-					strcpy(str,user.name);
-					strupr(str);
-					ixb.name=crc32(str);
-					sprintf(str,"%.25s",user.system);
-					strupr(str);
-					ixb.system=crc32(str);
-					ixb.updated=user.updated;
-					ixb.number=user.number;
-					fwrite(&ixb,sizeof(ixb_t),1,index);
-					} }
-			fflush(stream);
-			fflush(index);
-			break;
-		case '!':
-			if(!SYSOP)
-				break;
-			cls();
-			bputs("\1n\1hSystems Participating in Your Database:\r\n\r\n\1m");
-			crc_lst=NULL;
-			j=0;
-			rewind(stream);
-			while(!feof(stream) && !aborted) {
-				if(!fread(&user,sizeof(user_t),1,stream))
-                    break;
-				if(user.misc&USER_DELETED || !(user.misc&USER_FROMSMB))
-					continue;
-				if(!smm_pause)
-					lncntr=0;
-				sprintf(str,"%.25s",user.system);
-				strupr(str);
-				sys_crc=crc32(str);
-				for(i=0;i<j;i++)
-					if(sys_crc==crc_lst[i])
-						break;
-				if(i==j) {
-					crc_lst=REALLOC(crc_lst,(j+1)*sizeof(ulong));
-					if(crc_lst==NULL) {
-						printf("REALLOC error!\n");
-						pause();
-						break; }
-					crc_lst[j++]=sys_crc;
-					bprintf("%s\r\n",user.system); } }
-			if(crc_lst)
-				FREE(crc_lst);
-			if(j)
-				bprintf("\1n\r\n\1h%u systems listed.\r\n",j);
-			pause();
-			break;
-		case '\\':
-			if(!SYSOP)
-				break;
-			bprintf("Rebuilding Index...");
-			rewind(stream);
-			rewind(index);
-			while(!feof(stream)) {
-				if(!fread(&user,sizeof(user_t),1,stream))
-					break;
-				if(user.misc&USER_DELETED)
-					ixb.number=0;
-				else
-					ixb.number=user.number;
-				strupr(user.name);
-				ixb.name=crc32(user.name);
-				strupr(user.system);
-				user.system[25]=0;
-				ixb.system=crc32(user.system);
-				ixb.updated=user.updated;
-				fwrite(&ixb,sizeof(ixb_t),1,index); }
-			break;
-		case 'R':
-			if(useron.number) {
-				bputs("\1y\1hMinimum match percentage: \1w");
-				sprintf(str,"%u",useron.min_match);
-				if(!getstr(str,3,K_NUMBER|K_EDIT|K_AUTODEL) || aborted)
-					break;
-				useron.min_match=atoi(str);
-				if(useron.min_match>100)
-					useron.min_match=100; }
-			rewind(stream);
-			bprintf("\1n\1l\1hSearching...");
-			while(!feof(stream) && !aborted) {
-				if(!fread(&user,sizeof(user_t),1,stream))
-					break;
-				if(user.misc&USER_DELETED)
-					continue;
-				if(minor_protection(user))
-					continue;
-				if(useron.min_match && useron.number) {
-					match=total_match(useron,user);
-					if(match<useron.min_match)
-						continue; }
-				if(!long_user_info(user))
-					break;
-				if(!smm_pause)
-					lncntr=0;
-				bprintf("\1n\1l\1hSearching..."); }
-			break;
-		case 'F':
-			bputs("\1y\1hText to search for: ");
-			if(!getstr(str,25,K_UPPER|K_LINE))
-                break;
-			ext=yesno("\r\nDisplay extended profiles");
-			cls();
-			if(!smm_pause && !ext)
-				printfile("LIST_HDR.ASC");
-			rewind(stream);
-			i=0;
-			while(!aborted) {
-				bprintf("\1n\1l\1hSearching...");
-				while(!feof(stream) && !aborted) {
-					if(!fread(&user,sizeof(user_t),1,stream))
-						break;
-					if(user.misc&USER_DELETED)
-						continue;
-					if(minor_protection(user))
-						continue;
-					tmpuser=user;
-					sprintf(tmp,"%lu",user.number);
-					strupr(user.name);
-					strupr(user.realname);
-					strupr(user.system);
-					strupr(user.location);
-					strupr(user.note[0]);
-					strupr(user.note[1]);
-					strupr(user.note[2]);
-					strupr(user.note[3]);
-					strupr(user.note[4]);
-					if(strstr(user.name,str)
-						|| strstr(user.location,str)
-						|| strstr(user.mbtype,str)
-						|| strstr(user.note[0],str)
-						|| strstr(user.note[1],str)
-						|| strstr(user.note[2],str)
-						|| strstr(user.note[3],str)
-						|| strstr(user.note[4],str)
-						|| (SYSOP && strstr(user.realname,str))
-						|| (SYSOP && strstr(user.system,str))
-						|| (SYSOP && !strcmp(tmp,str))
-						) {
-						i=1;
-						if(ext && !long_user_info(tmpuser))
-							break;
-						if(!ext && short_user_info(tmpuser)==0)
-							break;
-						if(!smm_pause)
-							lncntr=0; } }
-				if(aborted || ext || !lncntr)
-					break;
-				user.number=0;
-				if(short_user_info(user)>=0)
-					break; }
-			if(!i)
-				bprintf("\r\n\1n\1h%s \1rnot found.\r\n",str);
-            break;
-		case 'G':
-			bputs("\1y\1hUser name: ");
-			if(!getstr(str,25,K_UPPER|K_LINE))
-                break;
-			truncsp(str);
-			name_crc=crc32(str);
-			rewind(index);
-			i=0;
-			while(!feof(index)) {
-				if(!fread(&ixb,sizeof(ixb_t),1,index))
-					break;
-				if(!ixb.number)    /* DELETED */
-					continue;
-				if(ixb.name!=name_crc)
-					continue;
-				fseek(stream
-					,((ftell(index)-sizeof(ixb_t))/sizeof(ixb_t))
-					*sizeof(user_t),SEEK_SET);
-				if(!fread(&user,sizeof(user_t),1,stream))
-					continue;
-				if(minor_protection(user))
-                    continue;
-				i=1;
-				if(!long_user_info(user))
-					break; }
-			if(!i)
-				bprintf("\r\n\1n\1h%s \1rnot found.\r\n",str);
-            break;
-		case 'L':
-			if(useron.number) {
-				bputs("\1y\1hMinimum match percentage: \1w");
-				sprintf(str,"%u",useron.min_match);
-				if(!getstr(str,3,K_NUMBER|K_EDIT|K_AUTODEL) || aborted)
-					break;
-				useron.min_match=atoi(str);
-				if(useron.min_match>100)
-					useron.min_match=100; }
-			cls();
-			if(!smm_pause)
-				printfile("LIST_HDR.ASC");
-			rewind(stream);
-			while(!aborted) {
-				while(!feof(stream) && !aborted) {
-					if(!fread(&user,sizeof(user_t),1,stream))
-						break;
-					if(user.misc&USER_DELETED)
-						continue;
-					if(minor_protection(user))
-						continue;
-					if(useron.min_match && useron.number) {
-						match=total_match(useron,user);
-						if(match<useron.min_match)
-							continue; }
-					if(!short_user_info(user))
-						break;
-					if(!smm_pause)
-						lncntr=0; }
-				if(aborted || !lncntr)
-					break;
-				user.number=0;
-				if(short_user_info(user)>=0)
-					break; }
-            break;
-
-		case 'N':
-			while(1) {
-				checkline();
-				bputs("\1y\1hLast update (MM/DD/YY): ");
-				if(useron.number)
-					unixtodstr(useron.lastin,str);
-				else
-					str[0]=0;
-				if(!getstr(str,8,K_UPPER|K_LINE|K_EDIT|K_AUTODEL))
-					break;
-				if(isdigit(str[0]) && isdigit(str[1]) && str[2]=='/'
-					&& isdigit(str[3]) && isdigit(str[4]) && str[5]=='/'
-					&& isdigit(str[6]) && isdigit(str[7]))
-					break;
-				bputs("\r\n\1h\1rInvalid date!\r\n\r\n"); }
-			if(!str[0] || aborted)
-				break;
-			l=dstrtounix(str);
-			if(useron.number) {
-				bputs("\1y\1h\r\nMinimum match percentage: \1w");
-				sprintf(str,"%u",useron.min_match);
-				if(!getstr(str,3,K_NUMBER|K_EDIT|K_AUTODEL) || aborted)
-					break;
-				useron.min_match=atoi(str);
-				if(useron.min_match>100)
-					useron.min_match=100; }
-			ext=!noyes("\r\nDisplay extended profiles");
-			if(aborted)
-				break;
-			cls();
-			if(!ext && !smm_pause)
-				printfile("LIST_HDR.ASC");
-			rewind(index);
-			while(!aborted) {
-				while(!feof(index) && !aborted) {
-					if(!smm_pause)
-						lncntr=0;
-					if(!fread(&ixb,sizeof(ixb_t),1,index))
-						break;
-					if(!ixb.number) 	/* DELETED */
-						continue;
-					if(ixb.updated>=l) {
-						fseek(stream
-							,((ftell(index)-sizeof(ixb_t))/sizeof(ixb_t))
-							*sizeof(user_t),SEEK_SET);
-						if(!fread(&user,sizeof(user_t),1,stream))
-							continue;
-						if(minor_protection(user))
-							continue;
-						if(useron.min_match && useron.number) {
-							match=total_match(useron,user);
-							if(match<useron.min_match)
-								continue; }
-						if(ext && !long_user_info(user))
-							break;
-						if(!ext && short_user_info(user)==0)
-							break;
-						continue; } }
-				if(aborted || ext || !lncntr)
-					break;
-				user.number=0;
-				if(short_user_info(user)>=0)
-					break; }
-            break;
-
-		case 'U':
-		case 'W':       /* Create/Edit Profile */
-			if(!can_add()) {
-				bprintf("\1h\1rYou have insufficient access to create a "
-					"profile.\r\n\r\n");
-				break; }
-
-			if(!useron.number) {
-				add_userinfo();
-				break; }
-
-			user=useron;
-			tleft=timeleft;
-			if(!get_user_info(&user)) {
-				timeleft=tleft;
-				break; }
-
-			if(!memcmp(&user,&useron,sizeof(user_t))) {
-				timeleft=tleft;
-				break; }
-
-			if(!yesno("Save changes")) {
-				timeleft=tleft;
-				break; }
-			timeleft=tleft;
-			user.updated=time(NULL);
-			useron=user;
-			write_user();
-            break;
-
-		case 'D':
-			if(SYSOP) {
-				bputs("Name to Delete: ");
-				if(useron.number) {
-					strcpy(str,useron.name);
-					strupr(str); }
-				else
-					str[0]=0;
-				getstr(str,25,K_UPPER|K_LINE|K_EDIT|K_AUTODEL);
-				rewind(stream);
-				while(!feof(stream)) {
-					if(!fread(&user,sizeof(user_t),1,stream))
-						break;
-					strcpy(tmp,user.name);
-					strupr(tmp);
-					if(!(user.misc&USER_DELETED) && strstr(tmp,str)) {
-						sprintf(tmp,"Delete %s (%s@%s)"
-							,user.name,user.realname,user.system);
-						i=noyes(tmp);
-						if(aborted)
-							break;
-						if(i)
-							continue;
-						fseek(stream,ftell(stream)-sizeof(user_t),SEEK_SET);
-						fseek(index
-							,((ftell(stream)-sizeof(user_t))/sizeof(user_t))
-							*sizeof(ixb_t),SEEK_SET);
-						user.misc|=USER_DELETED;
-						fwrite(&user,sizeof(user_t),1,stream);
-						fseek(stream,0,SEEK_CUR);
-						memset(&ixb,0,sizeof(ixb_t));
-						fwrite(&ixb,sizeof(ixb_t),1,index);
-						fflush(stream);
-						fflush(index);
-						delphoto(user);
-						if(user.number==user_number
-							&& !stricmp(user.system,system_name))
-							useron.number=0;
-						break; } }
-				if(aborted)
-					break;
-				break; }
-			if(!useron.number) {
-				bputs("\1h\1rYour profile doesn't exist.\r\n\r\n");
-                break; }
-			if(noyes("Are you sure you want to delete your profile"))
-                break;
-			if(!cdt_warning(-profile_cdt))
-				break;
-			sprintf(str,"%04u.MSG",user_number);
-			remove(str);
-			fseek(stream,useron_record*sizeof(user_t),SEEK_SET);
-			useron.misc|=USER_DELETED;
-			fwrite(&useron,sizeof(user_t),1,stream);
-			fflush(stream);
-			memset(&ixb,0,sizeof(ixb_t));
-			fseek(index,useron_record*sizeof(ixb_t),SEEK_SET);
-			fwrite(&ixb,sizeof(ixb_t),1,index);
-			fflush(index);
-			delphoto(user);
-			useron.number=0;
-			aborted=0;
-			bputs("\r\n\1h\1r\1iProfile deleted.\r\n");
-			adjust_cdt(-profile_cdt);
-            break;
-		case 'P':
-			smm_pause=!smm_pause;
-			bprintf("\1r\1hScreen pause is now \1w%s\r\n\r\n"
-				,smm_pause ? "ON":"OFF");
-            break;
-		case 'M':
-			mbtype_desc(useron.mbtype);
-			break;
-		case 'H':
-			cls();
-			printfile("SMM_HELP.ASC");
-			break;
-		case 'O':
-			if(noyes("Hang-up now"))
-				break;
-			dtr(5);
-			if(node_dir) {
-				sprintf(str,"%sHANGUP.NOW",node_dir);
-				fopen(str,"wb");
-				nodesync(); }
-			return;
-		case 'S':
-			bputs("\1y\1hUser name: ");
-			if(!getstr(str,25,K_UPPER|K_LINE))
-                break;
-			truncsp(str);
-			name_crc=crc32(str);
-			rewind(index);
-			i=0;
-			while(!feof(index)) {
-				if(!fread(&ixb,sizeof(ixb_t),1,index))
-					break;
-				if(!ixb.number)    /* DELETED */
-					continue;
-				if(ixb.name!=name_crc)
-					continue;
-                fseek(stream
-					,((ftell(index)-sizeof(ixb_t))/sizeof(ixb_t))
-					*sizeof(user_t),SEEK_SET);
-				if(!fread(&user,sizeof(user_t),1,stream))
-					continue;
-				if(minor_protection(user))
-                    continue;
-				i=1;
-				if(send_telegram(user))
-					break; }
-			if(!i)
-				bprintf("\r\n\1n\1h%s \1rnot found.\r\n",str);
-            break;
-		case 'T':
-			sprintf(str,"%04u.MSG",user_number);
-			if(!fexist(str)) {
-				bputs("\1r\1hYou have no telegrams waiting.\r\n\r\n");
-				break; }
-			cls();
-			printfile(str);
-			if(noyes("\r\nDelete all telegrams waiting for you"))
-				break;
-			remove(str);
-			break;
-		case 'V':   /* Visit the wall */
-			if(getage(user_birth)<wall_age && !SYSOP) {
-				bputs("\1r\1hSorry, you're too young to view the wall.\r\n");
-				pause();
-				break; }
-			while(1) {
-				checkline();
-				bputs("\1y\1hView writing since (MM/DD/YY): ");
-                if(useron.number)
-                    unixtodstr(useron.lastin,str);
-                else
-                    str[0]=0;
-                if(!getstr(str,8,K_UPPER|K_LINE|K_EDIT|K_AUTODEL))
-                    break;
-                if(isdigit(str[0]) && isdigit(str[1]) && str[2]=='/'
-                    && isdigit(str[3]) && isdigit(str[4]) && str[5]=='/'
-                    && isdigit(str[6]) && isdigit(str[7]))
-                    break;
-                bputs("\r\n\1h\1rInvalid date!\r\n\r\n"); }
-			if(aborted)
-                break;
-			l=dstrtounix(str);
-			ext=yesno("\r\nDisplay extended information when available");
-			if(aborted)
-                break;
-			strcpy(str,"WALL.DAB");
-			if((file=sopen(str,O_RDWR|O_BINARY|O_CREAT,SH_DENYNO
-				,S_IREAD|S_IWRITE))==-1) {
-				bprintf("\r\nError opening %s\r\n",str);
-				break; }
-			cls();
-			offset=0L;
-			while(!eof(file) && !aborted) {
-				if(read(file,&wall,sizeof(wall_t))!=sizeof(wall_t))
-					break;
-				if(wall.imported<l)
-					continue;
-				strcpy(str,wall.name);
-				strupr(str);
-				name_crc=crc32(str);
-				sprintf(str,"%.25s",wall.system);
-				strupr(str);
-				sys_crc=crc32(str);
-				rewind(index);
-				i=0;
-				user.sex=0;
-				while(ext && !feof(index) && !aborted) {
-					if(!fread(&ixb,sizeof(ixb_t),1,index))
-						break;
-					if(!ixb.number)    /* DELETED */
-						continue;
-					if(ixb.name!=name_crc || ixb.system!=sys_crc)
-						continue;
-					fseek(stream
-						,((ftell(index)-sizeof(ixb_t))/sizeof(ixb_t))
-						*sizeof(user_t),SEEK_SET);
-					if(!fread(&user,sizeof(user_t),1,stream))
-						continue;
-					if(minor_protection(user))
-						break;
-					main_user_info(user);
-					if(useron.number) {
-						CRLF;
-						bprintf("\1h\1mThis user meets your profile "
-							"preferences:\1w%3u%%            "
-							,basic_match(useron,user));
-						bprintf("\1n\1gCreated: \1h%s\r\n"
-							,unixtodstr(user.created,str));
-						bprintf("\1h\1mYou meet this user's profile "
-							"preferences:\1w%3u%%            "
-							,basic_match(user,useron));
-						bprintf("\1n\1gUpdated: \1h%s\r\n"
-							,unixtodstr(user.updated,str)); }
-
-					i=1;
-					CRLF;
-					break; }
-				if(!i) {
-					if(ext)
-						cls();
-					bprintf("\1n\1h%s ",wall.name); }
-				bprintf("\1n\1h\1cWrote on %s:\r\n"
-					,timestr(&wall.written));
-				for(j=0;j<5;j++) {
-					if(!wall.text[j][0])
-						break;
-					bprintf("\1n\1%c%5s%s\r\n"
-						,user.sex=='F'?'m':'g',"",wall.text[j]); }
-				if(aborted)
-					break;
-				if(ext) {
-					nodesync();
-					if(i) {
-						bputs(PrevReadSendQuitOrMore);
-						ch=getkey(K_UPPER);
-						if(ch=='R')
-							long_user_info(user);
-						if(ch=='S')
-							send_telegram(user);
-						if(ch=='R' || ch=='S')  /* Don't move forward */
-							lseek(file,tell(file)-sizeof(wall_t),SEEK_SET); }
-					else {
-						bputs("\r\n\1n\1hProfile not found.\r\n\r\n");
-						bputs("\1b[\1cP\1b]revious, [\1cQ\1b]uit, "
-							"or [\1cM\1b]ore: \1c");
-						ch=getkey(K_UPPER); }
-					if(ch=='P') {
-						lseek(file,offset,SEEK_SET);
-						if(tell(file))
-							lseek(file,tell(file)-sizeof(wall_t),SEEK_SET);
-						offset=tell(file);
-						continue; }
-					if(ch=='Q') {
-						cls();
-						break; }
-					offset=tell(file); }
-				else if(lncntr+7>=user_rows || eof(file)) {
-					lncntr=0;
-					bputs(PrevReadSendQuitOrMore);
-					ch=getkey(K_UPPER);
-					if(ch=='Q')
-						break;
-					else if(ch=='S' || ch=='R') {
-						bprintf("\1n\r\1>\1y\1hUser name: ");
-						if(getstr(name,25,K_UPPER|K_LINE|K_NOCRLF)) {
-							truncsp(name);
-							name_crc=crc32(name);
-							rewind(index);
-							i=0;
-							while(!feof(index)) {
-								if(!fread(&ixb,sizeof(ixb_t),1,index))
-									break;
-								if(!ixb.number)    /* DELETED */
-									continue;
-								if(ixb.name!=name_crc)
-									continue;
-								fseek(stream
-									,((ftell(index)
-										-sizeof(ixb_t))/sizeof(ixb_t))
-									*sizeof(user_t),SEEK_SET);
-								if(!fread(&user,sizeof(user_t),1,stream))
-									continue;
-								if(minor_protection(user))
-									continue;
-								i=1;
-								if(ch=='S' && send_telegram(user))
-									break;
-								if(ch=='R' && !long_user_info(user))
-									break;	}
-							if(!i)
-								bprintf("\r\n\1n\1h%s \1rnot found.\r\n",name);
-								}
-						lseek(file,offset,SEEK_SET); }
-					else if(ch=='P') {
-						lseek(file,offset,SEEK_SET);
-						for(i=0;i<4;i++)
-							if(tell(file))
-								lseek(file,tell(file)-sizeof(wall_t),SEEK_SET);
-						}
-					cls();
-					offset=tell(file); } }
-			cls();
-			if(user_level<wall_level) {
-				close(file);
-                bputs("\r\n\1h\1rYou have insufficient access to write on the "
-                    "wall.\r\n");
-                pause();
-                break; }
-			if(aborted || noyes("Write on the Wall")) {
-				close(file);
-				break; }
-			if(!useron.number) {
-				bputs("\r\n\1h\1rYou must create a profile first.\r\n");
-				close(file);
-				break; }
-			if(!cdt_warning(wall_cdt)) {
-				close(file);
-				break; }
-			memset(&wall,0,sizeof(wall_t));
-			strcpy(wall.name,useron.name);
-			strcpy(wall.system,system_name);
-			wall.written=wall.imported=time(NULL);
-			bputs("\1l\1n\1hWriting on the Wall:\r\n\r\n");
-			for(i=0;i<5 && !aborted;i++) {
-				bprintf("\1n\1h\1%c%u of 5: \1n\1%c"
-					,useron.sex=='F'?'m':'g',i+1,useron.sex=='F'?'m':'g');
-				if(!getstr(wall.text[i],70,i==4 ? K_MSG:K_MSG|K_WRAP))
-					break;
-				if(trash(wall.text[i])) {
-					bprintf("\r\n\1r\1hSorry, you can't use that text."
-						"\r\n\r\n");
-					i--;
-					continue; } }
-			if(!i || aborted || !yesno("\r\nSave")) {
-				close(file);
-				break; }
-			lseek(file,0L,SEEK_END);
-			write(file,&wall,sizeof(wall_t));
-			close(file);
-			adjust_cdt(wall_cdt);
-			if(notify_user && notify_user!=user_number) {
-				sprintf(str,"\1n\1hSMM: \1y%s\1m wrote on the Match Maker "
-					"Wall\r\n",user_name);
-				if(node_dir[0])
-					putsmsg(notify_user,str);
-				else
-					puttgram(notify_user,str); }
-			break;
-		case 'Q':
-			return; } }
-}
-
-/* End of SMM.C */
diff --git a/src/sbbs2/smm/smm2msg.c b/src/sbbs2/smm/smm2msg.c
deleted file mode 100644
index 6e9a05da3c..0000000000
--- a/src/sbbs2/smm/smm2msg.c
+++ /dev/null
@@ -1,539 +0,0 @@
-/* SMM2MSG.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* Scans SMM database and posts any additions/updates into an MSG file */
-
-#define  uint unsigned int
-
-#include <dos.h>
-#include "smblib.h"
-#include "smmdefs.h"
-
-#define VERSION "1.00�"
-
-smb_t smb;
-extern int daylight=0;
-extern long timezone=0L;
-
-unsigned _stklen=16000; 		  /* Set stack size in code, not header */
-
-uchar cryptchar(uchar ch, ulong seed)
-{
-if(ch==1)
-	return(0xfe);
-if(ch<0x20 || ch&0x80)	/* Ctrl chars and ex-ASCII are not xlated */
-	return(ch);
-return(ch^(seed&0x1f));
-}
-
-char *encrypt(uchar *str, ulong seed)
-{
-	static uchar out[1024];
-	int i,j;
-
-j=strlen(str);
-for(i=0;i<j;i++)
-	out[i]=cryptchar(str[i],seed^(i&7));
-out[i]=0;
-return(out);
-}
-
-/****************************************************************************/
-/* Checks the disk drive for the existence of a file. Returns 1 if it       */
-/* exists, 0 if it doesn't.                                                 */
-/****************************************************************************/
-char fexist(char *filespec)
-{
-    struct ffblk f;
-
-if(findfirst(filespec,&f,0)==0)
-    return(1);
-return(0);
-}
-
-
-/****************************************************************************/
-/* Updates 16-bit "rcrc" with character 'ch'                                */
-/****************************************************************************/
-void ucrc16(uchar ch, ushort *rcrc) {
-	ushort i, cy;
-    uchar nch=ch;
- 
-for (i=0; i<8; i++) {
-    cy=*rcrc & 0x8000;
-    *rcrc<<=1;
-    if (nch & 0x80) *rcrc |= 1;
-    nch<<=1;
-    if (cy) *rcrc ^= 0x1021; }
-}
-
-/****************************************************************************/
-/* Returns 16-crc of string (not counting terminating NULL) 				*/
-/****************************************************************************/
-ushort crc16(char *str)
-{
-	int 	i=0;
-	ushort	crc=0;
-
-ucrc16(0,&crc);
-while(str[i])
-	ucrc16(str[i++],&crc);
-ucrc16(0,&crc);
-ucrc16(0,&crc);
-return(crc);
-}
-
-
-/****************************************************************************/
-/* Converts unix time format (long - time_t) into a char str MM/DD/YY		*/
-/****************************************************************************/
-char *unixtodstr(time_t unix, char *str)
-{
-	struct time curtime;
-	struct date date;
-
-if(!unix)
-	strcpy(str,"00/00/00");
-else {
-	unixtodos(unix,&date,&curtime);
-	if((unsigned)date.da_mon>12) {	  /* DOS leap year bug */
-		date.da_mon=1;
-		date.da_year++; }
-	if((unsigned)date.da_day>31)
-		date.da_day=1;
-	sprintf(str,"%02u/%02u/%02u",date.da_mon,date.da_day
-		,date.da_year>=2000 ? date.da_year-2000 : date.da_year-1900); }
-return(str);
-}
-
-time_t checktime()
-{
-	struct tm tm;
-
-memset(&tm,0,sizeof(tm));
-tm.tm_year=94;
-tm.tm_mday=1;
-return(mktime(&tm)^0x2D24BD00L);
-}
-
-#define BUF_LEN 8192
-
-int main(int argc, char **argv)
-{
-	uchar	str[128],tmp[128],msg_dir[128],buf[BUF_LEN],telegram[513],*p;
-	int 	i,j,file;
-	ushort	xlat;
-	long	length;
-	ulong	offset;
-	time_t	last,t;
-	user_t	user,from;
-	wall_t	wall;
-    smbmsg_t msg;
-	FILE	*stream;
-
-fprintf(stderr,"\nSMM2MSG v%s - Write SMM data to MSG - Developed 1995-1997 "
-	"Rob Swindell\n\n",VERSION);
-
-if(checktime()) {
-    printf("Time problem!\n");
-    return(-1); }
-
-if(argc<3) {
-	fprintf(stderr,"usage: smm2msg <smm.dab> <msg_dir>\n\n");
-	fprintf(stderr,"example: smm2msg c:\\sbbs\\xtrn\\smm\\smm.dab "
-		"c:\\im\\mail\n");
-	return(1); }
-
-
-strcpy(msg_dir,argv[2]);
-strupr(msg_dir);
-
-strcpy(str,argv[1]);
-strupr(str);
-if((file=open(str,O_RDONLY|O_BINARY|O_DENYNONE))==-1) {
-	printf("error opening %s\n",str);
-	return(1); }
-if((stream=fdopen(file,"rb"))==NULL) {
-	printf("error fdopening %s\n",str);
-	return(1); }
-setvbuf(stream,NULL,_IOFBF,4096);
-
-strcpy(tmp,str);
-p=strrchr(tmp,'.');
-if(p) {
-	(*p)=0;
-	strcat(tmp,"2MSG.DAB");
-	if((file=open(tmp,O_RDWR|O_BINARY|O_CREAT,S_IWRITE|S_IREAD))==-1) {
-		printf("error opening %s\n",str);
-		return(1); }
-	t=time(NULL);
-	if(read(file,&last,sizeof(time_t))!=sizeof(time_t))
-		last=0;
-	lseek(file,0L,SEEK_SET);
-	write(file,&t,sizeof(time_t));
-	close(file); }
-
-//sprintf(str,"%s.SHD",smb.file);
-//if(!fexist(str)) {
-//	  printf("%s doesn't exist\n",smb.file);
-//	  return(0); }
-//fprintf(stderr,"Opening %s\n",smb.file);
-//smb.retry_time=30;
-//if((i=smb_open(&smb))!=0) {
-//	  printf("smb_open returned %d\n",i);
-//	  return(1); }
-
-strcpy(str,argv[1]);
-strupr(str);
-p=strrchr(str,'\\');
-if(p) p++;
-else p=str;
-strcpy(p,"TELEGRAM.DAB");
-if((file=open(str,O_RDWR|O_DENYNONE|O_BINARY))!=-1) {
-	while(!eof(file)) {
-		read(file,from.system,sizeof(user.system));
-		read(file,user.system,sizeof(user.system));
-        read(file,&user.number,sizeof(user.number));
-		printf("Telegram to: %lu@%s\n",user.number,user.system);
-		read(file,telegram,512);
-		telegram[512]=0;
-		sprintf(buf,"}%lx\r\n%s",user.number,encrypt(telegram,user.number));
-		strcat(buf,"\r\n"); /* blank line terminates telegram */
-		strcat(buf,"\r\n--- SMM2MSG v");
-		strcat(buf,VERSION);
-
-		length=strlen(buf);   /* +2 for translation string */
-
-		if(smb.status.attr&SMB_HYPERALLOC)
-			offset=smb_hallocdat(&smb);
-		else {
-			i=smb_open_da(&smb);
-			if(i) {
-				printf("smb_open_da returned %d\n",i);
-				exit(1); }
-			offset=smb_allocdat(&smb,length+2,1);
-			fclose(smb.sda_fp); }
-
-		fseek(smb.sdt_fp,offset,SEEK_SET);
-		xlat=XLAT_NONE;
-		fwrite(&xlat,2,1,smb.sdt_fp);
-		fwrite(buf,length,1,smb.sdt_fp);
-		length+=2;
-
-		memset(&msg,0,sizeof(smbmsg_t));
-		memcpy(msg.hdr.id,"SHD\x1a",4);
-		msg.hdr.version=SMB_VERSION;
-		msg.hdr.when_written.time=time(NULL);
-
-		msg.hdr.offset=offset;
-
-		strcpy(str,"SMM");
-		i=smb_hfield(&msg,RECIPIENT,strlen(str),str);
-		if(i) {
-			printf("smb_hfield returned %d\n",i);
-			smb_freemsgdat(&smb,offset,length,1);
-			exit(1); }
-		strlwr(str);
-		msg.idx.to=crc16(str);
-
-		strcpy(str,from.system);
-		i=smb_hfield(&msg,SENDER,strlen(str),str);
-		if(i) {
-			printf("smb_hfield returned %d\n",i);
-			smb_freemsgdat(&smb,offset,length,1);
-			exit(1); }
-		strlwr(str);
-		msg.idx.from=crc16(str);
-
-		strcpy(str,user.system);
-		i=smb_hfield(&msg,SUBJECT,strlen(str),str);
-		if(i) {
-			printf("smb_hfield returned %d\n",i);
-			smb_freemsgdat(&smb,offset,length,1);
-			exit(1); }
-		strlwr(str);
-		msg.idx.subj=crc16(str);
-
-		i=smb_dfield(&msg,TEXT_BODY,length);
-		if(i) {
-			printf("smb_dfield returned %d\n",i);
-			smb_freemsgdat(&smb,offset,length,1);
-			exit(1); }
-
-		i=smb_addmsghdr(&smb,&msg,smb.status.attr&SMB_HYPERALLOC);
-		if(i) {
-			printf("smb_addmsghdr returned %d\n",i);
-			smb_freemsgdat(&smb,offset,length,1);
-			exit(1); }
-		smb_freemsgmem(&msg); }
-	chsize(file,0L);
-	close(file); }
-
-strcpy(str,argv[1]);
-strupr(str);
-p=strrchr(str,'\\');
-if(p) p++;
-else p=str;
-strcpy(p,"WALL.DAB");
-if((file=sopen(str,O_RDONLY|O_BINARY,SH_DENYNO))!=-1) {
-	while(!eof(file)) {
-		if(!read(file,&wall,sizeof(wall_t)))
-			break;
-		if(last && wall.imported<last)
-			continue;
-
-		if(wall.imported!=wall.written) 	/* Imported from SMB */
-			continue;
-
-		printf("Wall writing from: %s\n",wall.name);
-		sprintf(buf,"%s\r\n",encrypt(wall.name,wall.written));
-		sprintf(str,"%s\r\n",encrypt(wall.system,wall.written));
-		strcat(buf,str);
-		for(i=0;i<5;i++) {
-			sprintf(str,"%s\r\n",encrypt(wall.text[i],wall.written));
-			strcat(buf,str); }
-		sprintf(str,"%lx\r\n",wall.written);
-		strcat(buf,str);
-		strcat(buf,"\r\n--- SMM2SMB v");
-		strcat(buf,VERSION);
-
-		length=strlen(buf);   /* +2 for translation string */
-
-		if(smb.status.attr&SMB_HYPERALLOC)
-			offset=smb_hallocdat(&smb);
-		else {
-			i=smb_open_da(&smb);
-			if(i) {
-				printf("smb_open_da returned %d\n",i);
-				exit(1); }
-			offset=smb_allocdat(&smb,length+2,1);
-			fclose(smb.sda_fp); }
-
-		fseek(smb.sdt_fp,offset,SEEK_SET);
-		xlat=XLAT_NONE;
-		fwrite(&xlat,2,1,smb.sdt_fp);
-		fwrite(buf,length,1,smb.sdt_fp);
-		length+=2;
-
-		memset(&msg,0,sizeof(smbmsg_t));
-		memcpy(msg.hdr.id,"SHD\x1a",4);
-		msg.hdr.version=SMB_VERSION;
-		msg.hdr.when_written.time=time(NULL);
-
-		msg.hdr.offset=offset;
-
-		strcpy(str,"SMM");
-		i=smb_hfield(&msg,RECIPIENT,strlen(str),str);
-		if(i) {
-			printf("smb_hfield returned %d\n",i);
-			smb_freemsgdat(&smb,offset,length,1);
-			exit(1); }
-		strlwr(str);
-		msg.idx.to=crc16(str);
-
-		strcpy(str,wall.system);
-		i=smb_hfield(&msg,SENDER,strlen(str),str);
-		if(i) {
-			printf("smb_hfield returned %d\n",i);
-			smb_freemsgdat(&smb,offset,length,1);
-			exit(1); }
-		strlwr(str);
-		msg.idx.from=crc16(str);
-
-		strcpy(str,"->WALL<-");
-		i=smb_hfield(&msg,SUBJECT,strlen(str),str);
-		if(i) {
-			printf("smb_hfield returned %d\n",i);
-			smb_freemsgdat(&smb,offset,length,1);
-			exit(1); }
-		strlwr(str);
-		msg.idx.subj=crc16(str);
-
-		i=smb_dfield(&msg,TEXT_BODY,length);
-		if(i) {
-			printf("smb_dfield returned %d\n",i);
-			smb_freemsgdat(&smb,offset,length,1);
-			exit(1); }
-
-		i=smb_addmsghdr(&smb,&msg,smb.status.attr&SMB_HYPERALLOC);
-		if(i) {
-			printf("smb_addmsghdr returned %d\n",i);
-			smb_freemsgdat(&smb,offset,length,1);
-			exit(1); }
-		smb_freemsgmem(&msg); }
-    close(file); }
-
-
-while(!feof(stream)) {
-	if(!fread(&user,sizeof(user_t),1,stream))
-		break;
-	if(user.misc&(USER_FROMSMB|USER_DELETED)
-		|| (last && user.updated<last && user.created<last)
-		|| user.number&0xffff0000L
-		|| user.number==0
-		|| user.system[0]<SP
-		|| user.name[0]<SP
-		|| user.realname[0]<SP
-		|| user.location[0]<SP
-		|| user.zipcode[0]<SP
-		|| user.birth[0]<SP)
-		continue;
-
-	printf("Profile: %s\n",user.name);
-	memset(buf,0,BUF_LEN);
-
-	sprintf(str,"0:%.25s\r\n",encrypt(user.name,user.number));
-	strcat(buf,str);
-	sprintf(str,"1:%.25s\r\n",encrypt(user.realname,user.number));
-    strcat(buf,str);
-
-	sprintf(str,"2:%.8s\r\n",encrypt(user.birth,user.number));
-    strcat(buf,str);
-
-	sprintf(str,"3:%.30s\r\n",encrypt(user.location,user.number));
-    strcat(buf,str);
-
-	sprintf(str,"4:%.10s\r\n",encrypt(user.zipcode,user.number));
-    strcat(buf,str);
-	sprintf(str,"5:%.10s\r\n",encrypt(user.min_zipcode,user.number));
-    strcat(buf,str);
-	sprintf(str,"6:%.10s\r\n",encrypt(user.max_zipcode,user.number));
-    strcat(buf,str);
-	sprintf(str,"7:%.4s\r\n",encrypt(user.mbtype,user.number));
-	strcat(buf,str);
-
-	sprintf(str,"A:%.50s\r\n",encrypt(user.note[0],user.number));
-	strcat(buf,str);
-	sprintf(str,"B:%.50s\r\n",encrypt(user.note[1],user.number));
-    strcat(buf,str);
-	sprintf(str,"C:%.50s\r\n",encrypt(user.note[2],user.number));
-    strcat(buf,str);
-	sprintf(str,"D:%.50s\r\n",encrypt(user.note[3],user.number));
-    strcat(buf,str);
-	sprintf(str,"E:%.50s\r\n",encrypt(user.note[4],user.number));
-    strcat(buf,str);
-
-	sprintf(str,"F:%c%c\r\n",user.sex,user.pref_sex);
-	strcat(buf,str);
-
-	sprintf(str,"G:%x\r\n",user.marital);
-	strcat(buf,str);
-	sprintf(str,"H:%x\r\n",user.pref_marital);
-	strcat(buf,str);
-
-	sprintf(str,"I:%x\r\n",user.race);
-	strcat(buf,str);
-	sprintf(str,"J:%x\r\n",user.pref_race);
-    strcat(buf,str);
-
-	sprintf(str,"K:%x\r\n",user.hair);
-	strcat(buf,str);
-	sprintf(str,"L:%x\r\n",user.pref_hair);
-    strcat(buf,str);
-
-	sprintf(str,"M:%x\r\n",user.eyes);
-	strcat(buf,str);
-	sprintf(str,"N:%x\r\n",user.pref_eyes);
-    strcat(buf,str);
-
-	sprintf(str,"O:%x\r\nP:%x\r\nQ:%x\r\n"
-		,user.weight,user.min_weight,user.max_weight);
-	strcat(buf,str);
-
-	sprintf(str,"R:%x\r\nS:%x\r\nT:%x\r\n"
-		,user.height,user.min_height,user.max_height);
-    strcat(buf,str);
-
-	sprintf(str,"U:%x\r\nV:%x\r\nW:%x\r\n"
-		,user.min_age,user.max_age,user.purity);
-	strcat(buf,str);
-
-	sprintf(str,"X:%lx\r\nY:%lx\r\nZ:%lx\r\n!:%lx\r\n"
-		,user.income,user.min_income,user.max_income,time(NULL));
-	strcat(buf,str);
-
-	for(i=0;i<5;i++) {
-		if(!user.queans[i].name[0])
-			continue;
-		sprintf(str,"*%d%.8s\r\n",i,encrypt(user.queans[i].name,user.number));
-		strcat(buf,str);
-		for(j=0;j<20;j++) {
-			sprintf(str," %04x %04x"
-				,user.queans[i].self[j]
-				,user.queans[i].pref[j]);
-			strcat(buf,str);
-			if(!((j+1)%7))
-				strcat(buf,"\r\n"); }
-		strcat(buf,"\r\n"); }
-
-	strcat(buf,"\r\n--- SMM2MSG v");
-	strcat(buf,VERSION);
-
-	length=strlen(buf);   /* +2 for translation string */
-
-	if(smb.status.attr&SMB_HYPERALLOC)
-		offset=smb_hallocdat(&smb);
-	else {
-		i=smb_open_da(&smb);
-		if(i) {
-			printf("smb_open_da returned %d\n",i);
-			exit(1); }
-		offset=smb_allocdat(&smb,length+2,1);
-		fclose(smb.sda_fp); }
-
-	fseek(smb.sdt_fp,offset,SEEK_SET);
-	xlat=XLAT_NONE;
-	fwrite(&xlat,2,1,smb.sdt_fp);
-	fwrite(buf,length,1,smb.sdt_fp);
-	length+=2;
-
-	memset(&msg,0,sizeof(smbmsg_t));
-	memcpy(msg.hdr.id,"SHD\x1a",4);
-	msg.hdr.version=SMB_VERSION;
-	msg.hdr.when_written.time=time(NULL);
-    
-	msg.hdr.offset=offset;
-
-	strcpy(str,"SMM");
-	i=smb_hfield(&msg,RECIPIENT,strlen(str),str);
-	if(i) {
-		printf("smb_hfield returned %d\n",i);
-		smb_freemsgdat(&smb,offset,length,1);
-		exit(1); }
-	strlwr(str);
-	msg.idx.to=crc16(str);
-
-	strcpy(str,user.system);
-	i=smb_hfield(&msg,SENDER,strlen(str),str);
-	if(i) {
-		printf("smb_hfield returned %d\n",i);
-		smb_freemsgdat(&smb,offset,length,1);
-		exit(1); }
-	strlwr(str);
-	msg.idx.from=crc16(str);
-
-	sprintf(str,"%lu",user.number);
-	i=smb_hfield(&msg,SUBJECT,strlen(str),str);
-	if(i) {
-		printf("smb_hfield returned %d\n",i);
-		smb_freemsgdat(&smb,offset,length,1);
-		exit(1); }
-	strlwr(str);
-	msg.idx.subj=crc16(str);
-
-	i=smb_dfield(&msg,TEXT_BODY,length);
-	if(i) {
-		printf("smb_dfield returned %d\n",i);
-		smb_freemsgdat(&smb,offset,length,1);
-		exit(1); }
-
-	i=smb_addmsghdr(&smb,&msg,smb.status.attr&SMB_HYPERALLOC);
-	if(i) {
-		printf("smb_addmsghdr returned %d\n",i);
-		smb_freemsgdat(&smb,offset,length,1);
-		exit(1); }
-	smb_freemsgmem(&msg); }
-return(0);
-}
-
diff --git a/src/sbbs2/smm/smm2smb.c b/src/sbbs2/smm/smm2smb.c
deleted file mode 100644
index ffb670a48a..0000000000
--- a/src/sbbs2/smm/smm2smb.c
+++ /dev/null
@@ -1,540 +0,0 @@
-/* SMM2SMB.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* Scans SMM database and posts any additions/updates into the an SMB base */
-
-#define  uint unsigned int
-
-#include <dos.h>
-#include "smblib.h"
-#include "smmdefs.h"
-
-#define VERSION "2.01"
-
-smb_t smb;
-extern int daylight=0;
-extern long timezone=0L;
-
-unsigned _stklen=16000;
-
-uchar cryptchar(uchar ch, ulong seed)
-{
-if(ch==1)
-	return(0xfe);
-if(ch<0x20 || ch&0x80)	/* Ctrl chars and ex-ASCII are not xlated */
-	return(ch);
-return(ch^(seed&0x1f));
-}
-
-char *encrypt(uchar *str, ulong seed)
-{
-	static uchar out[1024];
-	int i,j;
-
-j=strlen(str);
-for(i=0;i<j;i++)
-	out[i]=cryptchar(str[i],seed^(i&7));
-out[i]=0;
-return(out);
-}
-
-/****************************************************************************/
-/* Checks the disk drive for the existence of a file. Returns 1 if it       */
-/* exists, 0 if it doesn't.                                                 */
-/****************************************************************************/
-char fexist(char *filespec)
-{
-    struct ffblk f;
-
-if(findfirst(filespec,&f,0)==0)
-    return(1);
-return(0);
-}
-
-
-/****************************************************************************/
-/* Updates 16-bit "rcrc" with character 'ch'                                */
-/****************************************************************************/
-void ucrc16(uchar ch, ushort *rcrc) {
-	ushort i, cy;
-    uchar nch=ch;
- 
-for (i=0; i<8; i++) {
-    cy=*rcrc & 0x8000;
-    *rcrc<<=1;
-    if (nch & 0x80) *rcrc |= 1;
-    nch<<=1;
-    if (cy) *rcrc ^= 0x1021; }
-}
-
-/****************************************************************************/
-/* Returns 16-crc of string (not counting terminating NULL) 				*/
-/****************************************************************************/
-ushort crc16(char *str)
-{
-	int 	i=0;
-	ushort	crc=0;
-
-ucrc16(0,&crc);
-while(str[i])
-	ucrc16(str[i++],&crc);
-ucrc16(0,&crc);
-ucrc16(0,&crc);
-return(crc);
-}
-
-
-/****************************************************************************/
-/* Converts unix time format (long - time_t) into a char str MM/DD/YY		*/
-/****************************************************************************/
-char *unixtodstr(time_t unix, char *str)
-{
-	struct time curtime;
-	struct date date;
-
-if(!unix)
-	strcpy(str,"00/00/00");
-else {
-	unixtodos(unix,&date,&curtime);
-	if((unsigned)date.da_mon>12) {	  /* DOS leap year bug */
-		date.da_mon=1;
-		date.da_year++; }
-	if((unsigned)date.da_day>31)
-		date.da_day=1;
-	sprintf(str,"%02u/%02u/%02u",date.da_mon,date.da_day
-		,date.da_year>=2000 ? date.da_year-2000 : date.da_year-1900); }
-return(str);
-}
-
-time_t checktime()
-{
-	struct tm tm;
-
-memset(&tm,0,sizeof(tm));
-tm.tm_year=94;
-tm.tm_mday=1;
-return(mktime(&tm)^0x2D24BD00L);
-}
-
-#define BUF_LEN 8192
-
-int main(int argc, char **argv)
-{
-	uchar	str[128],tmp[128],buf[BUF_LEN],telegram[513],*p;
-	int 	i,j,file;
-	ushort	xlat;
-	long	length;
-	ulong	offset;
-	time_t	last,t;
-	user_t	user,from;
-	wall_t	wall;
-	smbmsg_t msg;
-	FILE	*stream;
-
-fprintf(stderr,"\nSMM2SMB v%s - Write SMM data to SMB - Developed 1994-1997 "
-	"Rob Swindell\n\n",VERSION);
-
-if(checktime()) {
-    printf("Time problem!\n");
-    return(-1); }
-
-if(argc<3) {
-	fprintf(stderr,"usage: smm2smb <smm.dab> <smb_file>\n\n");
-	fprintf(stderr,"example: smm2smb c:\\sbbs\\xtrn\\smm\\smm.dab "
-		"c:\\sbbs\\data\\subs\\syncdata\n");
-	return(1); }
-
-
-strcpy(smb.file,argv[2]);
-strupr(smb.file);
-
-strcpy(str,argv[1]);
-strupr(str);
-if((file=open(str,O_RDONLY|O_BINARY|O_DENYNONE))==-1) {
-	printf("error opening %s\n",str);
-	return(1); }
-if((stream=fdopen(file,"rb"))==NULL) {
-	printf("error fdopening %s\n",str);
-	return(1); }
-setvbuf(stream,NULL,_IOFBF,4096);
-
-strcpy(tmp,str);
-p=strrchr(tmp,'.');
-if(p) {
-	(*p)=0;
-	strcat(tmp,"2SMB.DAB");
-	if((file=open(tmp,O_RDWR|O_BINARY|O_CREAT,S_IWRITE|S_IREAD))==-1) {
-		printf("error opening %s\n",str);
-		return(1); }
-	t=time(NULL);
-	if(read(file,&last,sizeof(time_t))!=sizeof(time_t))
-		last=0;
-	lseek(file,0L,SEEK_SET);
-	write(file,&t,sizeof(time_t));
-	close(file); }
-
-sprintf(str,"%s.SHD",smb.file);
-if(!fexist(str)) {
-	printf("%s doesn't exist\n",smb.file);
-	return(0); }
-fprintf(stderr,"Opening %s\n",smb.file);
-smb.retry_time=30;
-if((i=smb_open(&smb))!=0) {
-	printf("smb_open returned %d\n",i);
-	return(1); }
-
-strcpy(str,argv[1]);
-strupr(str);
-p=strrchr(str,'\\');
-if(p) p++;
-else p=str;
-strcpy(p,"TELEGRAM.DAB");
-if((file=open(str,O_RDWR|O_DENYNONE|O_BINARY))!=-1) {
-	while(!eof(file)) {
-		read(file,from.system,sizeof(user.system));
-		read(file,user.system,sizeof(user.system));
-        read(file,&user.number,sizeof(user.number));
-		printf("Telegram to: %lu@%s\n",user.number,user.system);
-		read(file,telegram,512);
-		telegram[512]=0;
-		sprintf(buf,"}%lx\r\n%s",user.number,encrypt(telegram,user.number));
-		strcat(buf,"\r\n"); /* blank line terminates telegram */
-		strcat(buf,"\r\n--- SMM2SMB v");
-		strcat(buf,VERSION);
-
-		length=strlen(buf);   /* +2 for translation string */
-
-		if(smb.status.attr&SMB_HYPERALLOC)
-			offset=smb_hallocdat(&smb);
-		else {
-			i=smb_open_da(&smb);
-			if(i) {
-				printf("smb_open_da returned %d\n",i);
-				exit(1); }
-			offset=smb_allocdat(&smb,length+2,1);
-			fclose(smb.sda_fp); }
-
-		fseek(smb.sdt_fp,offset,SEEK_SET);
-		xlat=XLAT_NONE;
-		fwrite(&xlat,2,1,smb.sdt_fp);
-		fwrite(buf,length,1,smb.sdt_fp);
-		length+=2;
-
-		memset(&msg,0,sizeof(smbmsg_t));
-		memcpy(msg.hdr.id,"SHD\x1a",4);
-		msg.hdr.version=SMB_VERSION;
-		msg.hdr.when_written.time=time(NULL);
-
-		msg.hdr.offset=offset;
-
-		strcpy(str,"SMM");
-		i=smb_hfield(&msg,RECIPIENT,strlen(str),str);
-		if(i) {
-			printf("smb_hfield returned %d\n",i);
-			smb_freemsgdat(&smb,offset,length,1);
-			exit(1); }
-		strlwr(str);
-		msg.idx.to=crc16(str);
-
-		strcpy(str,from.system);
-		i=smb_hfield(&msg,SENDER,strlen(str),str);
-		if(i) {
-			printf("smb_hfield returned %d\n",i);
-			smb_freemsgdat(&smb,offset,length,1);
-			exit(1); }
-		strlwr(str);
-		msg.idx.from=crc16(str);
-
-		strcpy(str,user.system);
-		i=smb_hfield(&msg,SUBJECT,strlen(str),str);
-		if(i) {
-			printf("smb_hfield returned %d\n",i);
-			smb_freemsgdat(&smb,offset,length,1);
-			exit(1); }
-		strlwr(str);
-		msg.idx.subj=crc16(str);
-
-		i=smb_dfield(&msg,TEXT_BODY,length);
-		if(i) {
-			printf("smb_dfield returned %d\n",i);
-			smb_freemsgdat(&smb,offset,length,1);
-			exit(1); }
-
-		i=smb_addmsghdr(&smb,&msg,smb.status.attr&SMB_HYPERALLOC);
-		if(i) {
-			printf("smb_addmsghdr returned %d\n",i);
-			smb_freemsgdat(&smb,offset,length,1);
-			exit(1); }
-		smb_freemsgmem(&msg); }
-	chsize(file,0L);
-	close(file); }
-
-strcpy(str,argv[1]);
-strupr(str);
-p=strrchr(str,'\\');
-if(p) p++;
-else p=str;
-strcpy(p,"WALL.DAB");
-if((file=sopen(str,O_RDONLY|O_BINARY,SH_DENYNO))!=-1) {
-	while(!eof(file)) {
-		if(!read(file,&wall,sizeof(wall_t)))
-			break;
-		if(last && wall.imported<last)
-			continue;
-
-		if(wall.imported!=wall.written) 	/* Imported from SMB */
-			continue;
-
-		printf("Wall writing from: %s\n",wall.name);
-		sprintf(buf,"%s\r\n",encrypt(wall.name,wall.written));
-		sprintf(str,"%s\r\n",encrypt(wall.system,wall.written));
-		strcat(buf,str);
-		for(i=0;i<5;i++) {
-			sprintf(str,"%s\r\n",encrypt(wall.text[i],wall.written));
-			strcat(buf,str); }
-		sprintf(str,"%lx\r\n",wall.written);
-		strcat(buf,str);
-		strcat(buf,"\r\n--- SMM2SMB v");
-		strcat(buf,VERSION);
-
-		length=strlen(buf);   /* +2 for translation string */
-
-		if(smb.status.attr&SMB_HYPERALLOC)
-			offset=smb_hallocdat(&smb);
-		else {
-			i=smb_open_da(&smb);
-			if(i) {
-				printf("smb_open_da returned %d\n",i);
-				exit(1); }
-			offset=smb_allocdat(&smb,length+2,1);
-			fclose(smb.sda_fp); }
-
-		fseek(smb.sdt_fp,offset,SEEK_SET);
-		xlat=XLAT_NONE;
-		fwrite(&xlat,2,1,smb.sdt_fp);
-		fwrite(buf,length,1,smb.sdt_fp);
-		length+=2;
-
-		memset(&msg,0,sizeof(smbmsg_t));
-		memcpy(msg.hdr.id,"SHD\x1a",4);
-		msg.hdr.version=SMB_VERSION;
-		msg.hdr.when_written.time=time(NULL);
-
-		msg.hdr.offset=offset;
-
-		strcpy(str,"SMM");
-		i=smb_hfield(&msg,RECIPIENT,strlen(str),str);
-		if(i) {
-			printf("smb_hfield returned %d\n",i);
-			smb_freemsgdat(&smb,offset,length,1);
-			exit(1); }
-		strlwr(str);
-		msg.idx.to=crc16(str);
-
-		strcpy(str,wall.system);
-		i=smb_hfield(&msg,SENDER,strlen(str),str);
-		if(i) {
-			printf("smb_hfield returned %d\n",i);
-			smb_freemsgdat(&smb,offset,length,1);
-			exit(1); }
-		strlwr(str);
-		msg.idx.from=crc16(str);
-
-		strcpy(str,"->WALL<-");
-		i=smb_hfield(&msg,SUBJECT,strlen(str),str);
-		if(i) {
-			printf("smb_hfield returned %d\n",i);
-			smb_freemsgdat(&smb,offset,length,1);
-			exit(1); }
-		strlwr(str);
-		msg.idx.subj=crc16(str);
-
-		i=smb_dfield(&msg,TEXT_BODY,length);
-		if(i) {
-			printf("smb_dfield returned %d\n",i);
-			smb_freemsgdat(&smb,offset,length,1);
-			exit(1); }
-
-		i=smb_addmsghdr(&smb,&msg,smb.status.attr&SMB_HYPERALLOC);
-		if(i) {
-			printf("smb_addmsghdr returned %d\n",i);
-			smb_freemsgdat(&smb,offset,length,1);
-			exit(1); }
-		smb_freemsgmem(&msg); }
-    close(file); }
-
-
-while(!feof(stream)) {
-	if(!fread(&user,sizeof(user_t),1,stream))
-		break;
-	if(user.misc&(USER_FROMSMB|USER_DELETED)
-		|| (last && user.updated<last && user.created<last)
-		|| user.number&0xffff0000L
-		|| user.number==0
-		|| user.system[0]<SP
-		|| user.name[0]<SP
-		|| user.realname[0]<SP
-		|| user.location[0]<SP
-		|| user.zipcode[0]<SP
-		|| user.birth[0]<SP)
-		continue;
-
-	printf("Profile: %s\n",user.name);
-	memset(buf,0,BUF_LEN);
-
-	sprintf(str,"0:%.25s\r\n",encrypt(user.name,user.number));
-	strcat(buf,str);
-	sprintf(str,"1:%.25s\r\n",encrypt(user.realname,user.number));
-    strcat(buf,str);
-
-	sprintf(str,"2:%.8s\r\n",encrypt(user.birth,user.number));
-    strcat(buf,str);
-
-	sprintf(str,"3:%.30s\r\n",encrypt(user.location,user.number));
-    strcat(buf,str);
-
-	sprintf(str,"4:%.10s\r\n",encrypt(user.zipcode,user.number));
-    strcat(buf,str);
-	sprintf(str,"5:%.10s\r\n",encrypt(user.min_zipcode,user.number));
-    strcat(buf,str);
-	sprintf(str,"6:%.10s\r\n",encrypt(user.max_zipcode,user.number));
-    strcat(buf,str);
-	sprintf(str,"7:%.4s\r\n",encrypt(user.mbtype,user.number));
-	strcat(buf,str);
-
-	sprintf(str,"A:%.50s\r\n",encrypt(user.note[0],user.number));
-	strcat(buf,str);
-	sprintf(str,"B:%.50s\r\n",encrypt(user.note[1],user.number));
-    strcat(buf,str);
-	sprintf(str,"C:%.50s\r\n",encrypt(user.note[2],user.number));
-    strcat(buf,str);
-	sprintf(str,"D:%.50s\r\n",encrypt(user.note[3],user.number));
-    strcat(buf,str);
-	sprintf(str,"E:%.50s\r\n",encrypt(user.note[4],user.number));
-    strcat(buf,str);
-
-	sprintf(str,"F:%c%c\r\n",user.sex,user.pref_sex);
-	strcat(buf,str);
-
-	sprintf(str,"G:%x\r\n",user.marital);
-	strcat(buf,str);
-	sprintf(str,"H:%x\r\n",user.pref_marital);
-	strcat(buf,str);
-
-	sprintf(str,"I:%x\r\n",user.race);
-	strcat(buf,str);
-	sprintf(str,"J:%x\r\n",user.pref_race);
-    strcat(buf,str);
-
-	sprintf(str,"K:%x\r\n",user.hair);
-	strcat(buf,str);
-	sprintf(str,"L:%x\r\n",user.pref_hair);
-    strcat(buf,str);
-
-	sprintf(str,"M:%x\r\n",user.eyes);
-	strcat(buf,str);
-	sprintf(str,"N:%x\r\n",user.pref_eyes);
-    strcat(buf,str);
-
-	sprintf(str,"O:%x\r\nP:%x\r\nQ:%x\r\n"
-		,user.weight,user.min_weight,user.max_weight);
-	strcat(buf,str);
-
-	sprintf(str,"R:%x\r\nS:%x\r\nT:%x\r\n"
-		,user.height,user.min_height,user.max_height);
-    strcat(buf,str);
-
-	sprintf(str,"U:%x\r\nV:%x\r\nW:%x\r\n"
-		,user.min_age,user.max_age,user.purity);
-	strcat(buf,str);
-
-	sprintf(str,"X:%lx\r\nY:%lx\r\nZ:%lx\r\n!:%lx\r\n"
-		,user.income,user.min_income,user.max_income,time(NULL));
-	strcat(buf,str);
-
-	for(i=0;i<5;i++) {
-		if(!user.queans[i].name[0])
-			continue;
-		sprintf(str,"*%d%.8s\r\n",i,encrypt(user.queans[i].name,user.number));
-		strcat(buf,str);
-		for(j=0;j<20;j++) {
-			sprintf(str," %04x %04x"
-				,user.queans[i].self[j]
-				,user.queans[i].pref[j]);
-			strcat(buf,str);
-			if(!((j+1)%7))
-				strcat(buf,"\r\n"); }
-		strcat(buf,"\r\n"); }
-
-	strcat(buf,"\r\n--- SMM2SMB v");
-	strcat(buf,VERSION);
-
-	length=strlen(buf);   /* +2 for translation string */
-
-	if(smb.status.attr&SMB_HYPERALLOC)
-		offset=smb_hallocdat(&smb);
-	else {
-		i=smb_open_da(&smb);
-		if(i) {
-			printf("smb_open_da returned %d\n",i);
-			exit(1); }
-		offset=smb_allocdat(&smb,length+2,1);
-		fclose(smb.sda_fp); }
-
-	fseek(smb.sdt_fp,offset,SEEK_SET);
-	xlat=XLAT_NONE;
-	fwrite(&xlat,2,1,smb.sdt_fp);
-	fwrite(buf,length,1,smb.sdt_fp);
-	length+=2;
-
-	memset(&msg,0,sizeof(smbmsg_t));
-	memcpy(msg.hdr.id,"SHD\x1a",4);
-	msg.hdr.version=SMB_VERSION;
-	msg.hdr.when_written.time=time(NULL);
-    
-	msg.hdr.offset=offset;
-
-	strcpy(str,"SMM");
-	i=smb_hfield(&msg,RECIPIENT,strlen(str),str);
-	if(i) {
-		printf("smb_hfield returned %d\n",i);
-		smb_freemsgdat(&smb,offset,length,1);
-		exit(1); }
-	strlwr(str);
-	msg.idx.to=crc16(str);
-
-	strcpy(str,user.system);
-	i=smb_hfield(&msg,SENDER,strlen(str),str);
-	if(i) {
-		printf("smb_hfield returned %d\n",i);
-		smb_freemsgdat(&smb,offset,length,1);
-		exit(1); }
-	strlwr(str);
-	msg.idx.from=crc16(str);
-
-	sprintf(str,"%lu",user.number);
-	i=smb_hfield(&msg,SUBJECT,strlen(str),str);
-	if(i) {
-		printf("smb_hfield returned %d\n",i);
-		smb_freemsgdat(&smb,offset,length,1);
-		exit(1); }
-	strlwr(str);
-	msg.idx.subj=crc16(str);
-
-	i=smb_dfield(&msg,TEXT_BODY,length);
-	if(i) {
-		printf("smb_dfield returned %d\n",i);
-		smb_freemsgdat(&smb,offset,length,1);
-		exit(1); }
-
-	i=smb_addmsghdr(&smb,&msg,smb.status.attr&SMB_HYPERALLOC);
-	if(i) {
-		printf("smb_addmsghdr returned %d\n",i);
-		smb_freemsgdat(&smb,offset,length,1);
-		exit(1); }
-	smb_freemsgmem(&msg); }
-return(0);
-}
-
-/* End of SMM2SMB.C */
diff --git a/src/sbbs2/smm/smmcfg.c b/src/sbbs2/smm/smmcfg.c
deleted file mode 100644
index b4e5003e07..0000000000
--- a/src/sbbs2/smm/smmcfg.c
+++ /dev/null
@@ -1,616 +0,0 @@
-/* SMMCFG.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include <uifc.h>
-#include <sys\stat.h>
-#include "gen_defs.h"
-#include "smmdefs.h"
-#include "smmvars.c"
-
-char **opt;
-
-void bail(int code);
-void main();
-char fexist(char *filespec);
-
-unsigned _stklen=16000; 		  /* Set stack size in code, not header */
-
-void bail(int code)
-{
-
-if(code)
-	getch();
-uifcbail();
-exit(code);
-}
-
-void main()
-{
-	char str[256];
-	int i,j,k,file,dflt,sysop_level;
-	FILE *stream;
-
-savnum=0;
-if((opt=(char **)MALLOC(sizeof(char *)*300))==NULL) {
-	cputs("memory allocation error\r\n");
-	bail(1); }
-for(i=0;i<300;i++)
-	if((opt[i]=(char *)MALLOC(MAX_OPLN))==NULL) {
-		cputs("memory allocation error\r\n");
-        bail(1); }
-uifcini();
-sprintf(str,"Synchronet Match Maker v%s",SMM_VER);
-uscrn(str);
-
-if((file=open("SMM.CFG",O_RDONLY|O_BINARY|O_DENYNONE))==-1) {
-	textattr(LIGHTGRAY);
-	clrscr();
-	lprintf("Error opening SMM.CFG\r\n");
-	bail(1); }
-if((stream=fdopen(file,"rb"))==NULL) {
-	textattr(LIGHTGRAY);
-	clrscr();
-	lprintf("Error fdopen SMM.CFG\r\n");
-	bail(1); }
-
-str[0]=0;
-fgets(str,128,stream);
-purity_age=atoi(str);
-str[0]=0;
-fgets(str,128,stream);
-min_age=atoi(str);
-str[0]=0;
-fgets(str,128,stream);
-min_level=atoi(str);
-
-req_flags1[0]=0;
-fgets(req_flags1,128,stream);
-req_flags1[27]=0;
-truncsp(req_flags1);
-
-req_flags2[0]=0;
-fgets(req_flags2,128,stream);
-req_flags2[27]=0;
-truncsp(req_flags2);
-
-req_flags3[0]=0;
-fgets(req_flags3,128,stream);
-req_flags3[27]=0;
-truncsp(req_flags3);
-
-req_flags4[0]=0;
-fgets(req_flags4,128,stream);
-req_flags4[27]=0;
-truncsp(req_flags4);
-
-str[0]=0;
-fgets(str,128,stream);
-profile_cdt=atol(str);
-str[0]=0;
-fgets(str,128,stream);
-telegram_cdt=atol(str);
-str[0]=0;
-fgets(str,128,stream);
-auto_update=atoi(str);
-str[0]=0;
-fgets(str,128,stream);
-notify_user=atoi(str);
-
-str[0]=0;
-fgets(str,128,stream);	// regnum
-
-str[0]=0;
-fgets(str,128,stream);
-telegram_level=atoi(str);
-
-str[0]=0;
-fgets(str,128,stream);
-que_level=atoi(str);
-
-str[0]=0;
-fgets(str,128,stream);
-wall_level=atoi(str);
-
-str[0]=0;
-fgets(str,128,stream);
-wall_cdt=atol(str);
-
-str[0]=0;
-fgets(str,128,stream);
-que_cdt=atol(str);
-
-zmodem_send[0]=0;
-fgets(zmodem_send,128,stream);
-if(!zmodem_send[0])
-	strcpy(zmodem_send,DEFAULT_ZMODEM_SEND);
-truncsp(zmodem_send);
-
-str[0]=0;
-fgets(str,128,stream);
-smm_misc=atol(str);
-
-str[0]=0;
-fgets(str,128,stream);
-sprintf(system_name,"%.25s",str);
-truncsp(system_name);
-
-local_view[0]=0;
-fgets(local_view,128,stream);
-truncsp(local_view);
-
-str[0]=0;
-fgets(str,128,stream);
-sysop_level=atoi(str);
-if(!sysop_level)
-	sysop_level=90;
-
-str[0]=0;
-fgets(str,128,stream);
-wall_age=atoi(str);
-
-str[0]=0;
-fgets(str,128,stream);
-age_split=atoi(str);
-
-fclose(stream);
-
-
-dflt=0;
-while(1) {
-	helpbuf=
-" Synchronet Match Maker Configuration \r\n\r\n"
-"Move through the various options using the arrow keys.  Select the\r\n"
-"highlighted options by pressing ENTER.\r\n\r\n";
-	j=0;
-	sprintf(opt[j++],"%-40.40s %s","System Name",system_name);
-	sprintf(opt[j++],"Wall Security...");
-	sprintf(opt[j++],"Profile Database Security...");
-	sprintf(str,"Credit %s for Adding Profile"
-		,profile_cdt>0 ? "Bonus":"Cost");
-	sprintf(opt[j++],"%-40.40s %ldk",str
-		,profile_cdt>0 ? profile_cdt/1024L : (-profile_cdt)/1024L);
-	sprintf(str,"Credit %s for Sending Telegram"
-		,telegram_cdt>0 ? "Bonus":"Cost");
-	sprintf(opt[j++],"%-40.40s %ldk",str
-		,telegram_cdt>0 ? telegram_cdt/1024L : (-telegram_cdt)/1024L);
-	sprintf(str,"Credit %s for Writing on the Wall"
-		,wall_cdt>0 ? "Bonus":"Cost");
-	sprintf(opt[j++],"%-40.40s %ldk",str
-		,wall_cdt>0 ? wall_cdt/1024L : (-wall_cdt)/1024L);
-	sprintf(str,"Credit %s for Reading Questionnaire"
-		,que_cdt>0 ? "Bonus":"Cost");
-	sprintf(opt[j++],"%-40.40s %ldk",str
-		,que_cdt>0 ? que_cdt/1024L : (-que_cdt)/1024L);
-	sprintf(opt[j++],"%-40.40s %u","Minimum Level to Send Telegrams"
-		,telegram_level);
-	sprintf(opt[j++],"%-40.40s %u","Minimum Level to Read Questionnaires"
-		,que_level);
-	sprintf(opt[j++],"%-40.40s %s","Minor Segregation (Protection) Age"
-		,age_split ? itoa(age_split,str,10):"Disabled");
-	sprintf(opt[j++],"%-40.40s %u","Sysop Level",sysop_level);
-	sprintf(opt[j++],"%-40.40s %s","Auto-Update Profiles"
-		,auto_update ? itoa(auto_update,str,10):"Disabled");
-	sprintf(opt[j++],"%-40.40s %s","Notify User of Activity"
-		,notify_user ? itoa(notify_user,str,10):"Disabled");
-	sprintf(opt[j++],"%-40.40s %s","Use Metric System"
-		,smm_misc&SMM_METRIC ? "Yes":"No");
-	sprintf(opt[j++],"%-40.40s %.25s","Zmodem Send Command"
-		,zmodem_send);
-	sprintf(opt[j++],"%-40.40s %.25s","Local Photo Viewer"
-		,local_view);
-	opt[j][0]=NULL;
-	switch(ulist(WIN_ORG|WIN_MID|WIN_ACT|WIN_ESC,0,0,60,&dflt,0
-	,"Synchronet Match Maker Configuration",opt)) {
-		case 0:
-helpbuf=
-" System Name \r\n\r\n"
-"This is your BBS name. Once you have configured your BBS name here, you\r\n"
-"will not be able to change it, without losing all of your local users'\r\n"
-"profiles in your database.\r\n"
-"\r\n"
-"It is highly recommended that you do not change your BBS name here,\r\n"
-"even if you decide to change your actual BBS name in the future.\r\n"
-"\r\n"
-"All BBS names in a match maker network must be unique.";
-			uinput(WIN_MID,0,0,"System Name"
-				,system_name,40,K_EDIT|K_UPPER);
-            break;
-		case 1:
-			j=0;
-			while(1) {
-				k=0;
-				sprintf(opt[k++],"%-40.40s  %u"
-					,"Minimum User Age to Access Wall"
-					,wall_age);
-				sprintf(opt[k++],"%-40.40s  %u"
-					,"Minimum Security Level to Write on Wall"
-					,wall_level);
-				opt[k][0]=NULL;
-helpbuf=
-" Wall Security \r\n\r\n"
-"This menu allows you to specify which users can access the wall.\r\n";
-
-				j=ulist(WIN_ACT|WIN_SAV|WIN_RHT|WIN_BOT,0,0,0,&j,0
-					,"Wall Security",opt);
-				if(j==-1)
-					break;
-				switch(j) {
-					case 0:
-helpbuf=
-" Minimum User Age \r\n\r\n"
-"This is the minimum user age that will be allowed to access (read or\r\n"
-"write) the wall.";
-						sprintf(str,"%u",wall_age);
-						uinput(WIN_L2R|WIN_SAV,0,0,
-							"Minimum Age to Access Wall"
-							,str,2,K_EDIT|K_NUMBER);
-						wall_age=atoi(str);
-                        break;
-					case 1:
-helpbuf=
-" Minimum User Level \r\n\r\n"
-"This is the minimum user level required to write on the wall.\r\n";
-						sprintf(str,"%u",wall_level);
-						uinput(WIN_L2R|WIN_SAV,0,0,
-							"Minimum Level to Write on Wall"
-							,str,2,K_EDIT|K_NUMBER);
-						wall_level=atoi(str);
-						break; } }
-			break;
-		case 2:
-			j=0;
-			while(1) {
-				k=0;
-				sprintf(opt[k++],"%-40.40s  %u"
-					,"Minimum User Age to Add Profile"
-					,min_age);
-				sprintf(opt[k++],"%-40.40s  %u"
-					,"Minimum User Age to Take Purity Test"
-					,purity_age);
-				sprintf(opt[k++],"%-40.40s  %u"
-					,"Minimum Security Level to Add Profile"
-					,min_level);
-				sprintf(opt[k++],"%-40.40s  %s"
-					,"Required Flags (Set 1) to Add Profile"
-					,req_flags1);
-				sprintf(opt[k++],"%-40.40s  %s"
-					,"Required Flags (Set 2) to Add Profile"
-					,req_flags2);
-				sprintf(opt[k++],"%-40.40s  %s"
-					,"Required Flags (Set 3) to Add Profile"
-					,req_flags3);
-				sprintf(opt[k++],"%-40.40s  %s"
-					,"Required Flags (Set 4) to Add Profile"
-					,req_flags4);
-				opt[k][0]=NULL;
-helpbuf=
-" Profile Security \r\n\r\n"
-"This menu allows you to specify which users can create profiles\r\n"
-"and take the purity test.";
-
-				j=ulist(WIN_ACT|WIN_SAV|WIN_RHT|WIN_BOT,0,0,0,&j,0
-					,"Profile Database Security",opt);
-				if(j==-1)
-					break;
-				switch(j) {
-					case 0:
-helpbuf=
-" Minimum User Age \r\n\r\n"
-"This is the minimum user age that will be allowed to add a profile to\r\n"
-"the database.";
-						sprintf(str,"%u",min_age);
-						uinput(WIN_L2R|WIN_SAV,0,0,
-							"Minimum Age",str,2,K_EDIT|K_NUMBER);
-						min_age=atoi(str);
-						break;
-					case 1:
-helpbuf=
-" Minimum User Age for Purity Test\r\n\r\n"
-"This is the minimum user age that will be allowed to take the purity\r\n"
-"test.";
-						sprintf(str,"%u",purity_age);
-						uinput(WIN_L2R|WIN_SAV,0,0,
-							"Minimum Age for Purity Test"
-							,str,2,K_EDIT|K_NUMBER);
-						purity_age=atoi(str);
-						break;
-					case 2:
-helpbuf=
-" Minimum Security Level \r\n\r\n"
-"This is the minimum security level that is required to add a profile\r\n"
-"to the database.";
-						sprintf(str,"%u",min_level);
-						uinput(WIN_L2R|WIN_SAV,0,0,
-							"Security Level",str,3,K_EDIT|K_NUMBER);
-						min_level=atoi(str);
-                        break;
-					case 3:
-helpbuf=
-" Required Flags from Flag Set 1 \r\n\r\n"
-"These are the flags that a required for the user to add a profile\r\n"
-"to the database.";
-						uinput(WIN_L2R|WIN_SAV,0,0,"Flag Set 1"
-							,req_flags1
-							,26,K_EDIT|K_UPPER|K_ALPHA);
-                        break;
-					case 4:
-helpbuf=
-" Required Flags from Flag Set 2 \r\n\r\n"
-"These are the flags that a required for the user to add a profile\r\n"
-"to the database.";
-						uinput(WIN_L2R|WIN_SAV,0,0,"Flag Set 2"
-							,req_flags2
-							,26,K_EDIT|K_UPPER|K_ALPHA);
-                        break;
-					case 5:
-helpbuf=
-" Required Flags from Flag Set 3 \r\n\r\n"
-"These are the flags that a required for the user to add a profile\r\n"
-"to the database.";
-						uinput(WIN_L2R|WIN_SAV,0,0,"Flag Set 3"
-							,req_flags3
-							,26,K_EDIT|K_UPPER|K_ALPHA);
-                        break;
-					case 6:
-helpbuf=
-" Required Flags from Flag Set 4 \r\n\r\n"
-"These are the flags that a required for the user to add a profile\r\n"
-"to the database.";
-						uinput(WIN_L2R|WIN_SAV,0,0,"Flag Set 4"
-							,req_flags4
-							,26,K_EDIT|K_UPPER|K_ALPHA);
-						break; } }
-            break;
-		case 3:
-helpbuf=
-" Credit Adjustment for Adding Profile \r\n\r\n"
-"You can have Synchronet Match Maker either give credits to or take\r\n"
-"credits from the user for adding a profile to the database.";
-			strcpy(opt[0],"Add Credits");
-			strcpy(opt[1],"Remove Credits");
-			opt[2][0]=0;
-			i=1;
-			i=ulist(WIN_L2R|WIN_BOT|WIN_ACT,0,0,0,&i,0
-				,"Credit Adjustment for Adding Profile",opt);
-			if(i==-1)
-				break;
-			sprintf(str,"%ld",profile_cdt<0 ? -profile_cdt:profile_cdt);
-			uinput(WIN_MID,0,0,"Credits (K=1024)"
-				,str,10,K_EDIT|K_UPPER);
-			if(strchr(str,'K'))
-				profile_cdt=atol(str)*1024L;
-			else
-				profile_cdt=atol(str);
-			if(i==1)
-				profile_cdt=-profile_cdt;
-			break;
-		case 4:
-helpbuf=
-" Credit Adjustment for Sending Telegram \r\n\r\n"
-"You can have Synchronet Match Maker either give credits to or take\r\n"
-"credits from the user for sending a telegram to another user in SMM.";
-			strcpy(opt[0],"Add Credits");
-			strcpy(opt[1],"Remove Credits");
-			opt[2][0]=0;
-			i=1;
-			i=ulist(WIN_L2R|WIN_BOT|WIN_ACT,0,0,0,&i,0
-				,"Credit Adjustment for Sending Telegram",opt);
-			if(i==-1)
-				break;
-			sprintf(str,"%ld",telegram_cdt<0 ? -telegram_cdt:telegram_cdt);
-			uinput(WIN_MID,0,0,"Credits (K=1024)"
-				,str,10,K_EDIT|K_UPPER);
-			if(strchr(str,'K'))
-				telegram_cdt=atol(str)*1024L;
-			else
-				telegram_cdt=atol(str);
-			if(i==1)
-				telegram_cdt=-telegram_cdt;
-            break;
-		case 5:
-helpbuf=
-" Credit Adjustment for Writing on the Wall \r\n\r\n"
-"You can have Synchronet Match Maker either give credits to or take\r\n"
-"credits from the user for writing on the wall.";
-			strcpy(opt[0],"Add Credits");
-			strcpy(opt[1],"Remove Credits");
-			opt[2][0]=0;
-			i=1;
-			i=ulist(WIN_L2R|WIN_BOT|WIN_ACT,0,0,0,&i,0
-				,"Credit Adjustment for Writing on the Wall",opt);
-			if(i==-1)
-				break;
-			sprintf(str,"%ld",wall_cdt<0 ? -wall_cdt:wall_cdt);
-			uinput(WIN_MID,0,0,"Credits (K=1024)"
-				,str,10,K_EDIT|K_UPPER);
-			if(strchr(str,'K'))
-				wall_cdt=atol(str)*1024L;
-			else
-				wall_cdt=atol(str);
-			if(i==1)
-				wall_cdt=-wall_cdt;
-            break;
-		case 6:
-helpbuf=
-" Credit Adjustment for Reading Questionnaire \r\n\r\n"
-"You can have Synchronet Match Maker either give credits to or take\r\n"
-"credits from the user when reading another user's questionnaire";
-			strcpy(opt[0],"Add Credits");
-			strcpy(opt[1],"Remove Credits");
-			opt[2][0]=0;
-			i=1;
-			i=ulist(WIN_L2R|WIN_BOT|WIN_ACT,0,0,0,&i,0
-				,"Credit Adjustment for Reading Questionnaire",opt);
-			if(i==-1)
-				break;
-			sprintf(str,"%ld",que_cdt<0 ? -que_cdt:que_cdt);
-			uinput(WIN_MID,0,0,"Credits (K=1024)"
-				,str,10,K_EDIT|K_UPPER);
-			if(strchr(str,'K'))
-				que_cdt=atol(str)*1024L;
-			else
-				que_cdt=atol(str);
-			if(i==1)
-				que_cdt=-que_cdt;
-            break;
-		case 7:
-helpbuf=
-" Minimum Level to Send Telegrams \r\n\r\n"
-"Use this option to restrict the sending of telegrams to users of a\r\n"
-"specific security level or higher.";
-			sprintf(str,"%u",telegram_level);
-			uinput(WIN_MID,0,0,"Minimum Level to Send Telegrams"
-				,str,3,K_EDIT|K_NUMBER);
-			telegram_level=atoi(str);
-            break;
-		case 8:
-helpbuf=
-" Minimum Level to Read Questionnaires \r\n\r\n"
-"Users will only be allowed to read other users' questionnaires if\r\n"
-"their security level is this value or higher.";
-			sprintf(str,"%u",que_level);
-			uinput(WIN_MID,0,0,"Minimum Level to Read Questionnaires"
-				,str,3,K_EDIT|K_NUMBER);
-			que_level=atoi(str);
-            break;
-		case 9:
-helpbuf=
-" Minor Segregation (Protection) Age \r\n\r\n"
-"This option (if enabled) separates all users into two groups:\r\n"
-"\r\n"
-"Minors: Those users below the specified age (normally 18)\r\n"
-"Adults: Those users at or above the specified age\r\n"
-"\r\n"
-"If enabled, adults cannot see minors' profiles or send telegrams to\r\n"
-"minors and vice versa.\r\n"
-"\r\n"
-"If disabled, all users can see eachother's profiles regardless of age.\r\n";
-			sprintf(str,"%u",age_split);
-			uinput(WIN_MID,0,0,"Minor Segregation Age (0=Disabled)"
-				,str,2,K_EDIT|K_NUMBER);
-			age_split=atoi(str);
-			break;
-		case 10:
-helpbuf=
-" Sysop Level \r\n\r\n"
-"Every user of this level or higher will be given access to sysop\r\n"
-"commands in the match maker.";
-			sprintf(str,"%u",sysop_level);
-			uinput(WIN_MID,0,0,"Sysop Level",str,3,K_EDIT|K_NUMBER);
-			sysop_level=atoi(str);
-            break;
-
-		case 11:
-helpbuf=
-" Auto-Update Profiles \r\n\r\n"
-"If you would like to have Synchronet Match Maker automatically send\r\n"
-"a network update message for a user that is active in SMM, but hasn't\r\n"
-"actually made any changes to his or her profile, set this option to the\r\n"
-"number of days between Auto-Updates (e.g. 30 days is a good value).\r\n"
-"\r\n"
-"Setting this option to 0 disables this feature.";
-			sprintf(str,"%u",auto_update);
-			uinput(WIN_MID,0,0,"Auto-Update Profiles (in Days)"
-				,str,3,K_EDIT|K_NUMBER);
-			auto_update=atoi(str);
-			break;
-		case 12:
-helpbuf=
-" Notify User of Activity \r\n\r\n"
-"If you would like to have Synchronet Match Maker automatically send\r\n"
-"a message to a specific user (most commonly the sysop) whenever a user\r\n"
-"adds a profile to the database or sends a telegram from SMM, set this\r\n"
-"option to the number of that user (e.g. 1 would indicate user #1).\r\n"
-"\r\n"
-"Setting this option to 0 disables this feature.";
-			sprintf(str,"%u",notify_user);
-			uinput(WIN_MID,0,0,"Notify User Number (0=disabled)"
-				,str,5,K_EDIT|K_NUMBER);
-			notify_user=atoi(str);
-            break;
-		case 13:
-helpbuf=
-" Use Metric System \r\n\r\n"
-"If you wish to use centimeters and kilograms instead of inches and\r\n"
-"pounds for height and weight measurements, set this option to Yes.";
-			strcpy(opt[0],"Yes");
-			strcpy(opt[1],"No");
-			opt[2][0]=0;
-			i=1;
-			i=ulist(WIN_MID|WIN_ACT,0,0,0,&i,0
-				,"Use Metric Measurement System",opt);
-			if(i==-1)
-                break;
-			if(i==1)
-				smm_misc&=~SMM_METRIC;
-			else
-				smm_misc|=SMM_METRIC;
-			break;
-
-		case 14:
-helpbuf=
-" Zmodem Send Command \r\n\r\n"
-"This is the command line to execute to send files to remote user.\r\n";
-			uinput(WIN_MID,0,0,"Zmodem Send"
-				,zmodem_send,50,K_EDIT);
-            break;
-		case 15:
-helpbuf=
-" Local Photo Viewer \r\n\r\n"
-"This is the command line to execute to view photos when logged on\r\n"
-"locally.\r\n";
-			uinput(WIN_MID,0,0,"Local Viewer"
-				,local_view,50,K_EDIT);
-            break;
-		case -1:
-helpbuf=
-" Save Configuration File \r\n\r\n"
-"Select Yes to save the config file, No to quit without saving,\r\n"
-"or hit  ESC  to go back to the menu.\r\n\r\n";
-			i=0;
-			strcpy(opt[0],"Yes");
-			strcpy(opt[1],"No");
-			opt[2][0]=0;
-			i=ulist(WIN_MID,0,0,0,&i,0,"Save Config File",opt);
-			if(i==-1) break;
-			if(i) bail(0);
-			if((file=open("SMM.CFG"
-				,O_WRONLY|O_BINARY|O_CREAT|O_DENYALL|O_TRUNC,S_IWRITE))==-1) {
-				textattr(LIGHTGRAY);
-				clrscr();
-				lprintf("Error opening SMM.CFG\r\n");
-				bail(1); }
-			if((stream=fdopen(file,"wb"))==NULL) {
-				textattr(LIGHTGRAY);
-				clrscr();
-				lprintf("Error fdopen SMM.CFG\r\n");
-				bail(1); }
-			fprintf(stream,"%u\r\n%u\r\n%u\r\n%s\r\n%s\r\n%s\r\n%s\r\n"
-				,purity_age,min_age,min_level
-				,req_flags1,req_flags2,req_flags3,req_flags4);
-			fprintf(stream,"%ld\r\n%ld\r\n%u\r\n%u\r\n%s\r\n%u\r\n%u\r\n"
-				,profile_cdt,telegram_cdt,auto_update,notify_user,""
-				,telegram_level,que_level);
-			fprintf(stream,"%u\r\n%ld\r\n%ld\r\n%s\r\n%ld\r\n%s\r\n"
-				,wall_level,wall_cdt,que_cdt,zmodem_send,smm_misc,system_name);
-			fprintf(stream,"%s\r\n%u\r\n%u\r\n%u\r\n"
-				,local_view,sysop_level,wall_age,age_split);
-			fclose(stream);
-			bail(0);
-	}
-}
-}
-/****************************************************************************/
-/* Checks the disk drive for the existance of a file. Returns 1 if it 		*/
-/* exists, 0 if it doesn't.													*/
-/* Called from upload														*/
-/****************************************************************************/
-char fexist(char *filespec)
-{
-	struct ffblk f;
-
-if(findfirst(filespec,&f,0)==NULL)
-	return(1);
-return(0);
-}
diff --git a/src/sbbs2/smm/smmcfg.mak b/src/sbbs2/smm/smmcfg.mak
deleted file mode 100644
index eeb956f5cb..0000000000
--- a/src/sbbs2/smm/smmcfg.mak
+++ /dev/null
@@ -1,35 +0,0 @@
-
-# Macros
-CC	= bcc
-LD	= tlink
-SDK	= ..\sdk
-UIFC	= ..\..\uifc
-MSWAIT	= ..\..\mswait
-INCLUDE = \bc45\include;$(UIFC);..
-LIB	= \bc45\lib
-MODEL	= l
-CFLAGS  = -d -C -m$(MODEL) -I$(INCLUDE) -w-pro
-LDFLAGS = /n /c
-OBJS	= $(MSWAIT)\dos\mswait$(MODEL).obj uifc.obj
-HEADERS = $(UIFC)\uifc.h smmdefs.h
-
-# Implicit C Compile Rule
-.c.obj:
-    	@echo Compiling $*.c to $*.obj ...
-	$(CC) $(CFLAGS) -c $*.c
-
-# Main EXE Link Rule
-smmcfg.exe: $(OBJS) smmcfg.obj
-    	@echo Linking $< ...
-	$(LD) $(LDFLAGS) @&&!
-$(LIB)\c0$(MODEL) $(OBJS) smmcfg.obj
-!, $*, $*, $(LIB)\c$(MODEL).lib $(LIB)\math$(MODEL).lib $(LIB)\emu.lib
-
-
-# All .obj modules
-smmcfg.obj: $(HEADERS)
-
-uifc.obj: $(UIFC)\uifc.h $(UIFC)\uifc.c
-	@echo Compiling $(UIFC)\$*.c to $*.obj ...
-	$(CC) $(CFLAGS) -c -DSCFG $(UIFC)\$*.c
-
diff --git a/src/sbbs2/smm/smmdefs.h b/src/sbbs2/smm/smmdefs.h
deleted file mode 100644
index 5d88b9d8f1..0000000000
--- a/src/sbbs2/smm/smmdefs.h
+++ /dev/null
@@ -1,160 +0,0 @@
-/* SMMDEFS.H */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#define SMM_VER "2.10"
-
-#define SMM_METRIC			(1<<0)	/* Use metric measurements */
-
-#define USER_DELETED		(1<<0)	/* Bits for user.misc field */
-#define USER_FROMSMB		(1<<1)	/* Imported from SMB */
-#define USER_REQZIP 		(1<<2)	/* Require mate in zip range */
-#define USER_REQAGE 		(1<<3)	/* Require mate in age range */
-#define USER_REQWEIGHT		(1<<4)	/* Require mate in weight range */
-#define USER_REQHEIGHT		(1<<5)	/* Require mate in height range */
-#define USER_REQINCOME		(1<<6)	/* Require mate in income range */
-#define USER_REQMARITAL 	(1<<7)	/* Require marital status */
-#define USER_REQZODIAC		(1<<8)	/* Require zodiac */
-#define USER_REQRACE		(1<<9)	/* Require race */
-#define USER_REQHAIR		(1<<10) /* Require hair */
-#define USER_REQEYES		(1<<11) /* Require eyes */
-#define USER_FRIEND 		(1<<12) /* Seeking same-sex friendship */
-#define USER_PHOTO			(1<<13) /* Photo attached to profile */
-
-
-#define ZODIAC_ARIES		(1<<0)	/* Mar 21 - Apr 19 */
-#define ZODIAC_TAURUS		(1<<1)	/* Apr 20 - May 20 */
-#define ZODIAC_GEMINI		(1<<2)	/* May 21 - Jun 20 */
-#define ZODIAC_CANCER		(1<<3)	/* Jun 21 - Jul 22 */
-#define ZODIAC_LEO			(1<<4)	/* Jul 23 - Aug 22 */
-#define ZODIAC_VIRGO		(1<<5)	/* Aug 23 - Sep 22 */
-#define ZODIAC_LIBRA		(1<<6)	/* Sep 23 - Oct 22 */
-#define ZODIAC_SCORPIO		(1<<7)	/* Oct 23 - Nov 21 */
-#define ZODIAC_SAGITTARIUS	(1<<8)	/* Nov 22 - Dec 21 */
-#define ZODIAC_CAPRICORN	(1<<9)	/* Dec 22 - Jan 19 */
-#define ZODIAC_AQUARIUS 	(1<<10) /* Jan 20 - Feb 18 */
-#define ZODIAC_PISCES		(1<<11) /* Feb 19 - Mar 20 */
-
-#define HAIR_BLONDE 		(1<<0)
-#define HAIR_BROWN			(1<<1)
-#define HAIR_RED			(1<<2)
-#define HAIR_BLACK			(1<<3)
-#define HAIR_GREY			(1<<4)
-#define HAIR_OTHER			(1<<5)
-
-#define EYES_BLUE			(1<<0)
-#define EYES_GREEN			(1<<1)
-#define EYES_HAZEL			(1<<2)
-#define EYES_BROWN			(1<<3)
-#define EYES_OTHER			(1<<4)
-
-#define RACE_WHITE			(1<<0)
-#define RACE_BLACK			(1<<1)
-#define RACE_HISPANIC		(1<<2)
-#define RACE_ASIAN			(1<<3)
-#define RACE_AMERINDIAN 	(1<<4)
-#define RACE_MIDEASTERN 	(1<<5)
-#define RACE_OTHER			(1<<6)
-
-#define MARITAL_SINGLE		(1<<0)
-#define MARITAL_MARRIED 	(1<<1)
-#define MARITAL_DIVORCED	(1<<2)
-#define MARITAL_WIDOWED 	(1<<3)
-#define MARITAL_OTHER		(1<<4)
-
-typedef struct {
-
-	uchar	txt[82];
-	uchar	answers;		/* Total answers */
-	uchar	allowed;		/* number of answers allowed for self */
-	uchar	ans[16][62];	/* Answers */
-
-	} question_t;
-
-typedef struct {
-
-	uchar	name[9];
-	uchar	desc[26];
-	uchar	req_age;
-	uchar	total_ques;
-	question_t	que[20];
-
-	} questionnaire_t;
-
-typedef struct {
-
-	uchar	name[9];	   /* Name of questionnaire */
-	ushort	self[20];	   /* Answers to questions */
-	ushort	pref[20];	   /* Preferred partner's answer(s) */
-
-	} queans_t;
-
-typedef struct {
-
-	ulong	number; 		/* User's number on BBS */
-	ulong	system; 		/* CRC-32 of system name */
-	ulong	name;
-	ulong	updated;
-
-	} ixb_t;
-
-typedef struct {
-
-	uchar	name[26];		/* User's name or alias */
-	uchar	realname[26];	/* User's name or alias on the BBS */
-	uchar	system[41]; 	/* BBS name */
-	ulong	number; 		/* User's number on BBS */
-	uchar	birth[9];		/* MM/DD/YY format */
-	uchar	zipcode[11];	/* Zip code */
-	uchar	location[31];	/* City, state */
-	ushort	pref_zodiac;	/* Preferred zodiac sign */
-	uchar	sex;			/* 'M' or 'F' */
-	uchar	pref_sex;
-	uchar	marital;
-	uchar	pref_marital;
-	uchar	race;
-	uchar	pref_race;
-	uchar	hair;			/* hair color */
-	uchar	pref_hair;		/* preferred hair color */
-	uchar	eyes;			/* eye color */
-	uchar	pref_eyes;		/* preferred eye color */
-	ushort	weight; 		/* Sad, we have to use 16-bits! */
-	uchar	height; 		/* in inches */
-	ushort	min_weight;
-	ushort	max_weight;
-	uchar	min_height;
-	uchar	max_height;
-	uchar	min_age;
-	uchar	max_age;
-	uchar	min_zipcode[11];
-	uchar	max_zipcode[11];
-	ulong	income;
-	ulong	min_income;
-	ulong	max_income;
-	time_t	created;
-	time_t	updated;
-	uchar	note[5][51];
-	ulong	misc;
-	time_t	lastin;
-	uchar	min_match;
-	uchar	purity; 		/* Purity % */
-	uchar	mbtype[5];		/* Myers-Briggs personality type */
-	time_t	photo;			/* Date last photo hatched */
-	uchar	filler[60]; 	/* Available for future use */
-	queans_t   queans[5];
-
-	} user_t;
-
-typedef struct {
-
-	uchar	name[26];		/* User's name or alias */
-    uchar   system[41];     /* BBS name */
-	uchar	text[5][71];	/* Writing */
-	time_t	written;		/* Date/time created */
-	time_t	imported;
-
-	} wall_t;
-
-#define TGRAM_NOTICE "\1n\1h\1mNew telegram in \1wMatch Maker \1mfor you!" \
-                "\7\1n\r\n"
-#define DEFAULT_ZMODEM_SEND "%!dsz portx %u,%i sz %f"
diff --git a/src/sbbs2/smm/smmutil.c b/src/sbbs2/smm/smmutil.c
deleted file mode 100644
index d2c5eaa695..0000000000
--- a/src/sbbs2/smm/smmutil.c
+++ /dev/null
@@ -1,713 +0,0 @@
-/* SMMUTIL.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include <stdio.h>
-#include <time.h>
-#include <stdlib.h>
-#include <io.h>
-#include <dos.h>
-#include <fcntl.h>
-#include <sys\stat.h>
-#include <malloc.h>
-#include <stdarg.h>
-#include "gen_defs.h"
-#include "smmdefs.h"
-#include "crc32.h"
-
-struct date date;
-struct time curtime;
-
-FILE *log=NULL;
-
-/****************************************************************************/
-/* Returns 32-crc of string (not counting terminating NULL) 				*/
-/****************************************************************************/
-ulong crc32(char *str)
-{
-	int i=0;
-	ulong crc=0xffffffffUL;
-
-	while(str[i])
-		crc=ucrc32(str[i++],crc);
-	crc=~crc;
-	return(crc);
-}
-
-/****************************************************************************/
-/* Returns the age derived from the string 'birth' in the format MM/DD/YY	*/
-/****************************************************************************/
-char getage(char *birth)
-{
-	char age;
-
-if(birth[0]<=SP)
-	return(0);
-getdate(&date);
-age=(date.da_year-1900)-(((birth[6]&0xf)*10)+(birth[7]&0xf));
-if(age>90)
-	age-=90;
-if(atoi(birth)>12 || atoi(birth+3)>31)
-	return(0);
-if(((birth[0]&0xf)*10)+(birth[1]&0xf)>date.da_mon ||
-	(((birth[0]&0xf)*10)+(birth[1]&0xf)==date.da_mon &&
-	((birth[3]&0xf)*10)+(birth[4]&0xf)>date.da_day))
-	age--;
-if(age<0)
-	return(0);
-return(age);
-}
-
-/**********************/
-/* Log print function */
-/**********************/
-void logprintf(char *str, ...)
-{
-    va_list argptr;
-    char buf[256];
-    time_t now;
-    struct tm *gm;
-
-va_start(argptr,str);
-vsprintf(buf,str,argptr);
-va_end(argptr);
-fprintf(stderr,"\n%s",buf);
-if(!log) return;
-now=time(NULL);
-gm=localtime(&now);
-fseek(log,0L,SEEK_END);
-fprintf(log,"%02u/%02u/%02u %02u:%02u:%02u %s\r\n"
-    ,gm->tm_mon+1,gm->tm_mday,TM_YEAR(gm->tm_year),gm->tm_hour,gm->tm_min,gm->tm_sec
-    ,buf);
-fflush(log);
-}
-
-
-char *base41(unsigned int i, char *str)
-{
-	char c;
-	unsigned int j=41*41,k;
-
-for(c=0;c<3;c++) {
-	k=i/j;
-	str[c]='0'+k;
-	i-=(k*j);
-	j/=41;
-	if(str[c]>=':')
-		str[c]='A'+(str[c]-':');
-	if(str[c]>='[')
-		str[c]='#'+(str[c]-'['); }
-str[c]=0;
-return(str);
-}
-
-/****************************************************************************/
-/* Updates 16-bit "rcrc" with character 'ch'                                */
-/****************************************************************************/
-void ucrc16(uchar ch, ushort *rcrc) {
-    ushort i, cy;
-    uchar nch=ch;
- 
-for (i=0; i<8; i++) {
-    cy=*rcrc & 0x8000;
-    *rcrc<<=1;
-    if (nch & 0x80) *rcrc |= 1;
-    nch<<=1;
-    if (cy) *rcrc ^= 0x1021; }
-}
-
-/****************************************************************************/
-/* Returns 16-crc of string (not counting terminating NULL)                 */
-/****************************************************************************/
-ushort crc16(char *str)
-{
-    int     i=0;
-    ushort  crc=0;
-
-ucrc16(0,&crc);
-while(str[i])
-    ucrc16(str[i++],&crc);
-ucrc16(0,&crc);
-ucrc16(0,&crc);
-return(crc);
-}
-
-
-void delphoto(user_t user)
-{
-	char fname[64],path[128],tmp[128];
-	int i;
-	struct ffblk ff;
-
-if(!(user.misc&USER_PHOTO))
-	return;
-for(i=0;user.system[i];i++)
-	if(isalnum(user.system[i]))
-        break;
-if(!user.system[i])
-	fname[0]='~';
-else
-	fname[0]=user.system[i];
-for(i=strlen(user.system)-1;i>0;i--)
-	if(isalnum(user.system[i]))
-		break;
-if(i<=0)
-	fname[1]='~';
-else
-	fname[1]=user.system[i];
-fname[2]=0;
-strupr(user.system);
-strcat(fname,base41(crc16(user.system),tmp));
-strcat(fname,base41(user.number,tmp));
-strcat(fname,".*");
-strupr(fname);
-sprintf(path,"PHOTO\\%s",fname);
-i=findfirst(path,&ff,0);
-if(i)
-	return;
-sprintf(path,"PHOTO\\%s",ff.ff_name);
-if(remove(path))
-	logprintf("Photo (%s) couldn't be removed!",path);
-else
-	logprintf("Photo (%s) removed",path);
-}
-
-
-int main(int argc, char **argv)
-{
-	int  i,file,max_age=0,max_wall=0,age;
-	long l,m,total_ixbs=0
-		,users=0,photos=0,networked=0
-		,male_straight=0
-		,male_gay=0
-		,male_bi=0
-		,female_straight=0
-		,female_gay=0
-		,female_bi=0
-		,age12=0
-		,age15=0
-		,age20=0,age25=0
-		,age30=0,age35=0
-		,age40=0,age45=0
-		,age50=0,age55=0
-		,age60=0,age65=0
-		,age70=0,age71=0
-		,zodiac_aries=0
-		,zodiac_taurus=0
-		,zodiac_gemini=0
-		,zodiac_cancer=0
-		,zodiac_leo=0
-		,zodiac_virgo=0
-		,zodiac_libra=0
-		,zodiac_scorpio=0
-		,zodiac_sagittarius=0
-		,zodiac_capricorn=0
-		,zodiac_aquarius=0
-		,zodiac_pisces=0
-		,hair_blonde=0
-		,hair_brown=0
-		,hair_red=0
-		,hair_black=0
-		,hair_grey=0
-		,hair_other=0
-		,eyes_blue=0
-		,eyes_green=0
-		,eyes_hazel=0
-		,eyes_brown=0
-		,eyes_other=0
-		,race_white=0
-		,race_black=0
-		,race_hispanic=0
-		,race_asian=0
-		,race_amerindian=0
-		,race_mideastern=0
-		,race_other=0
-		,marital_single=0
-		,marital_married=0
-		,marital_divorced=0
-		,marital_widowed=0
-		,marital_other=0
-		;
-	FILE *ixb_fp,*dab_fp,*tmp_fp;
-	ixb_t huge *ixb=NULL,ixbrec;
-	user_t user;
-	wall_t wall;
-	time_t now;
-
-fprintf(stderr,"\nSMMUTIL � Synchronet Match Maker Utility � v2.01�\n\n");
-
-for(i=1;i<argc;i++)
-	if(isdigit(argv[i][0])) {
-		if(max_age)
-			max_wall=atoi(argv[i]);
-		else
-			max_age=atoi(argv[i]); }
-	else {
-		printf("usage: SMMUTIL max_profile_age_in_days "
-			"max_wall_writing_age_in_days\n");
-		printf("\n");
-		printf("example: SMMUTIL 90 7\n");
-		exit(1); }
-
-if((file=open("SMM.IXB",O_RDWR|O_BINARY|O_CREAT|O_DENYNONE
-	,S_IWRITE|S_IREAD))==-1
-	|| (ixb_fp=fdopen(file,"r+b"))==NULL) {
-	printf("Error opening SMM.IXB\n");
-	exit(1); }
-
-if((file=open("SMM.DAB",O_RDWR|O_BINARY|O_DENYNONE))==-1
-	|| (dab_fp=fdopen(file,"r+b"))==NULL) {
-	printf("Error opening SMM.DAB\n");
-    exit(1); }
-
-if((file=open("SMM.TMP",O_WRONLY|O_CREAT|O_TRUNC|O_BINARY|O_DENYALL
-	,S_IWRITE|S_IREAD))==-1
-	|| (tmp_fp=fdopen(file,"r+b"))==NULL) {
-	printf("Error opening SMM.TMP\n");
-    exit(1); }
-
-if((file=open("SMMUTIL.LOG",O_WRONLY|O_CREAT|O_APPEND|O_BINARY|O_DENYALL
-	,S_IWRITE|S_IREAD))==-1
-	|| (log=fdopen(file,"w+b"))==NULL) {
-	printf("Error opening SMMUTIL.LOG\n");
-	exit(1); }
-
-fprintf(stderr,"Reading profile data...");
-rewind(dab_fp);
-while(!feof(dab_fp)) {
-	if(!fread(&user,sizeof(user_t),1,dab_fp))
-		break;
-	if((ixb=REALLOC(ixb,sizeof(ixb_t)*(total_ixbs+1)))==NULL) {
-		printf("Malloc error\n");
-		exit(1); }
-	user.name[25]=0;
-	strupr(user.name);
-	ixb[total_ixbs].name=crc32(user.name);
-	user.system[25]=0;
-	strupr(user.system);
-	ixb[total_ixbs].system=crc32(user.system);
-	ixb[total_ixbs].updated=user.updated;
-	if(user.misc&USER_DELETED)
-		ixb[total_ixbs].number=0;
-	else
-		ixb[total_ixbs].number=user.number;
-	total_ixbs++; }
-fprintf(stderr,"\n");
-
-now=time(NULL);
-fprintf(stderr,"Creating new profile index and data files...");
-chsize(fileno(ixb_fp),0);
-rewind(ixb_fp);
-rewind(tmp_fp);
-for(l=0;l<total_ixbs;l++) {
-	fseek(dab_fp,l*sizeof(user_t),SEEK_SET);
-    if(!fread(&user,sizeof(user_t),1,dab_fp)) {
-		logprintf("%04lX Couldn't read user record",l);
-        continue; }
-
-	/* Make sure all strings are NULL terminated */
-	user.name[25]=user.realname[25]=user.system[40]=user.birth[8]=0;
-	user.zipcode[10]=user.location[30]=0;
-	user.min_zipcode[10]=user.max_zipcode[10]=0;
-	for(i=0;i<5;i++)
-		user.note[i][50]=0;
-
-	if(!ixb[l].number) {
-		logprintf("%04lX %5lu %-25s Deleted user"
-			,l,user.number,user.system);
-		delphoto(user);
-		continue; }
-	if(ixb[l].number&0xffff0000UL) {
-		logprintf("%04lX %5lu %-25s Invalid user number"
-			,l,ixb[l].number,user.system);
-		delphoto(user);
-		continue; }
-	if(max_age
-		&& now>ixb[l].updated	// Not in the future
-		&& (now-ixb[l].updated)/(24UL*60UL*60UL)>max_age) {
-		logprintf("%04lX %5lu %-25s Not updated in %lu days"
-			,l,user.number,user.system,(now-ixb[l].updated)/(24UL*60UL*60UL));
-		delphoto(user);
-		continue; }
-	for(m=l+1;m<total_ixbs;m++)
-		if(ixb[l].number
-			&& ixb[l].number==ixb[m].number && ixb[l].system==ixb[m].system)
-			break;
-	if(m<total_ixbs) {		/* Duplicate found! */
-		logprintf("%04lX %5lu %-25s Duplicate user"
-			,l,user.number,user.system);
-		delphoto(user);
-		continue; }
-
-	if(user.name[0]<SP || user.realname[0]<SP || user.system[0]<SP
-		|| user.location[0]<SP || user.zipcode[0]<SP || user.birth[0]<SP) {
-		logprintf("%04lX %5lu %-25s Invalid user string"
-			,l,user.number,user.system);
-		delphoto(user);
-		continue; }
-	if(!user.sex || !user.marital || !user.race || !user.hair || !user.eyes) {
-		logprintf("%04lX %5lu %-25s Null field"
-			,l,user.number,user.system);
-		delphoto(user);
-		continue; }
-	if(user.sex=='M') {
-		if(user.pref_sex=='F')
-			male_straight++;
-		else if(user.pref_sex=='M')
-			male_gay++;
-		else
-			male_bi++; }
-	else if(user.sex=='F') {
-		if(user.pref_sex=='M')
-			female_straight++;
-		else if(user.pref_sex=='F')
-			female_gay++;
-		else
-			female_bi++; }
-	else {
-		logprintf("%04lX %5lu %-25s Invalid sex (%02X)"
-			,l,user.number,user.system,user.sex);
-		delphoto(user);
-		continue; }
-	users++;
-	if(user.misc&USER_PHOTO)
-		photos++;
-	if(user.misc&USER_FROMSMB)
-		networked++;
-	age=getage(user.birth);
-	if(age<13) age12++;
-	else if(age<16) age15++;
-	else if(age<21) age20++;
-	else if(age<26) age25++;
-	else if(age<31) age30++;
-	else if(age<36) age35++;
-	else if(age<41) age40++;
-	else if(age<46) age45++;
-	else if(age<51) age50++;
-	else if(age<56) age55++;
-	else if(age<61) age60++;
-	else if(age<66) age65++;
-	else if(age<71) age70++;
-	else age71++;
-	switch(user.hair) {
-		case HAIR_BLONDE:
-			hair_blonde++;
-			break;
-		case HAIR_BROWN:
-			hair_brown++;
-			break;
-		case HAIR_RED:
-			hair_red++;
-			break;
-		case HAIR_BLACK:
-			hair_black++;
-			break;
-		case HAIR_GREY:
-			hair_grey++;
-			break;
-		default:
-			hair_other++;
-			break; }
-
-	switch(user.eyes) {
-		case EYES_BLUE:
-			eyes_blue++;
-			break;
-        case EYES_BROWN:
-			eyes_brown++;
-			break;
-        case EYES_GREEN:
-			eyes_green++;
-            break;
-        case EYES_HAZEL:
-			eyes_hazel++;
-            break;
-		default:
-			eyes_other++;
-			break; }
-	switch(user.marital) {
-		case MARITAL_SINGLE:
-			marital_single++;
-			break;
-		case MARITAL_MARRIED:
-			marital_married++;
-            break;
-        case MARITAL_DIVORCED:
-			marital_divorced++;
-            break;
-        case MARITAL_WIDOWED:
-			marital_widowed++;
-            break;
-        default:
-			marital_other++;
-			break; }
-
-	switch(user.race) {
-		case RACE_WHITE:
-			race_white++;
-			break;
-		case RACE_BLACK:
-			race_black++;
-			break;
-		case RACE_HISPANIC:
-			race_hispanic++;
-			break;
-		case RACE_ASIAN:
-			race_asian++;
-			break;
-		case RACE_AMERINDIAN:
-			race_amerindian++;
-			break;
-		case RACE_MIDEASTERN:
-			race_mideastern++;
-			break;
-		default:
-			race_other++;
-			break; }
-
-	if((!strncmp(user.birth,"03",2) && atoi(user.birth+3)>=21)
-		|| (!strncmp(user.birth,"04",2) && atoi(user.birth+3)<=19))
-		zodiac_aries++;
-	else if((!strncmp(user.birth,"04",2) && atoi(user.birth+3)>=20)
-		|| (!strncmp(user.birth,"05",2) && atoi(user.birth+3)<=20))
-		zodiac_taurus++;
-	else if((!strncmp(user.birth,"05",2) && atoi(user.birth+3)>=21)
-		|| (!strncmp(user.birth,"06",2) && atoi(user.birth+3)<=20))
-		zodiac_gemini++;
-	else if((!strncmp(user.birth,"06",2) && atoi(user.birth+3)>=21)
-		|| (!strncmp(user.birth,"07",2) && atoi(user.birth+3)<=22))
-		zodiac_cancer++;
-	else if((!strncmp(user.birth,"07",2) && atoi(user.birth+3)>=23)
-		|| (!strncmp(user.birth,"08",2) && atoi(user.birth+3)<=22))
-		zodiac_leo++;
-	else if((!strncmp(user.birth,"08",2) && atoi(user.birth+3)>=23)
-		|| (!strncmp(user.birth,"09",2) && atoi(user.birth+3)<=22))
-		zodiac_virgo++;
-	else if((!strncmp(user.birth,"09",2) && atoi(user.birth+3)>=23)
-		|| (!strncmp(user.birth,"10",2) && atoi(user.birth+3)<=22))
-		zodiac_libra++;
-	else if((!strncmp(user.birth,"10",2) && atoi(user.birth+3)>=23)
-		|| (!strncmp(user.birth,"11",2) && atoi(user.birth+3)<=21))
-		zodiac_scorpio++;
-	else if((!strncmp(user.birth,"11",2) && atoi(user.birth+3)>=22)
-		|| (!strncmp(user.birth,"12",2) && atoi(user.birth+3)<=21))
-		zodiac_sagittarius++;
-	else if((!strncmp(user.birth,"12",2) && atoi(user.birth+3)>=22)
-		|| (!strncmp(user.birth,"01",2) && atoi(user.birth+3)<=19))
-		zodiac_capricorn++;
-	else if((!strncmp(user.birth,"01",2) && atoi(user.birth+3)>=20)
-		|| (!strncmp(user.birth,"02",2) && atoi(user.birth+3)<=18))
-		zodiac_aquarius++;
-	else if((!strncmp(user.birth,"02",2) && atoi(user.birth+3)>=19)
-		|| (!strncmp(user.birth,"03",2) && atoi(user.birth+3)<=20))
-		zodiac_pisces++;
-
-	fwrite(&ixb[l],sizeof(ixb_t),1,ixb_fp);
-	fwrite(&user,sizeof(user_t),1,tmp_fp);
-	}
-fprintf(stderr,"\n");
-fcloseall();
-remove("SMM.DAB");
-rename("SMM.TMP","SMM.DAB");
-
-printf("Synchronet Match Maker Statistics\n");
-printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
-printf("\n");
-printf("%-25s         : %lu\n","Total",users);
-printf("%-25s         : %lu\n","Photos",photos);
-printf("%-25s         : %lu\n","Networked",networked);
-// if(male_straight)
-	printf("%-25s (%4.1f%%) : %lu\n","Sex: male (hetero)"
-		,(((float)male_straight/users)*100.0),male_straight);
-// if(male_gay)
-	printf("%-25s (%4.1f%%) : %lu\n","Sex: male (gay)"
-		,(((float)male_gay/users)*100.0),male_gay);
-// if(male_bi)
-	printf("%-25s (%4.1f%%) : %lu\n","Sex: male (bi)"
-		,(((float)male_bi/users)*100.0),male_bi);
-// if(female_straight)
-	printf("%-25s (%4.1f%%) : %lu\n","Sex: female (hetero)"
-		,(((float)female_straight/users)*100.0),female_straight);
-// if(female_gay)
-	printf("%-25s (%4.1f%%) : %lu\n","Sex: female (gay)"
-		,(((float)female_gay/users)*100.0),female_gay);
-// if(female_bi)
-	printf("%-25s (%4.1f%%) : %lu\n","Sex: female (bi)"
-		,(((float)female_bi/users)*100.0),female_bi);
-// if(age12)
-	printf("%-25s (%4.1f%%) : %lu\n","Age: 12 and younger"
-		,(((float)age12/users)*100.0),age12);
-// if(age15)
-	printf("%-25s (%4.1f%%) : %lu\n","Age: 13 to 15 years old"
-		,(((float)age15/users)*100.0),age15);
-// if(age20)
-	printf("%-25s (%4.1f%%) : %lu\n","Age: 16 to 20 years old"
-		,(((float)age20/users)*100.0),age20);
-// if(age25)
-	printf("%-25s (%4.1f%%) : %lu\n","Age: 21 to 25 years old"
-		,(((float)age25/users)*100.0),age25);
-// if(age30)
-	printf("%-25s (%4.1f%%) : %lu\n","Age: 26 to 30 years old"
-		,(((float)age30/users)*100.0),age30);
-// if(age35)
-	printf("%-25s (%4.1f%%) : %lu\n","Age: 31 to 35 years old"
-		,(((float)age35/users)*100.0),age35);
-// if(age40)
-	printf("%-25s (%4.1f%%) : %lu\n","Age: 36 to 40 years old"
-		,(((float)age40/users)*100.0),age40);
-// if(age45)
-	printf("%-25s (%4.1f%%) : %lu\n","Age: 41 to 45 years old"
-		,(((float)age45/users)*100.0),age45);
-// if(age50)
-	printf("%-25s (%4.1f%%) : %lu\n","Age: 46 to 50 years old"
-		,(((float)age50/users)*100.0),age50);
-// if(age55)
-	printf("%-25s (%4.1f%%) : %lu\n","Age: 51 to 55 years old"
-		,(((float)age55/users)*100.0),age55);
-// if(age60)
-	printf("%-25s (%4.1f%%) : %lu\n","Age: 56 to 60 years old"
-		,(((float)age60/users)*100.0),age60);
-// if(age65)
-	printf("%-25s (%4.1f%%) : %lu\n","Age: 61 to 65 years old"
-		,(((float)age65/users)*100.0),age65);
-// if(age70)
-	printf("%-25s (%4.1f%%) : %lu\n","Age: 66 to 70 years old"
-		,(((float)age70/users)*100.0),age70);
-// if(age71)
-	printf("%-25s (%4.1f%%) : %lu\n","Age: 71 and older"
-		,(((float)age71/users)*100.0),age71);
-// if(hair_blonde)
-	printf("%-25s (%4.1f%%) : %lu\n","Hair: blonde"
-		,(((float)hair_blonde/users)*100.0),hair_blonde);
-// if(hair_brown)
-	printf("%-25s (%4.1f%%) : %lu\n","Hair: brown"
-		,(((float)hair_brown/users)*100.0),hair_brown);
-// if(hair_black)
-	printf("%-25s (%4.1f%%) : %lu\n","Hair: black"
-		,(((float)hair_black/users)*100.0),hair_black);
-// if(hair_red)
-	printf("%-25s (%4.1f%%) : %lu\n","Hair: red"
-		,(((float)hair_red/users)*100.0),hair_red);
-// if(hair_grey)
-	printf("%-25s (%4.1f%%) : %lu\n","Hair: grey"
-		,(((float)hair_grey/users)*100.0),hair_grey);
-// if(hair_other)
-	printf("%-25s (%4.1f%%) : %lu\n","Hair: other"
-		,(((float)hair_other/users)*100.0),hair_other);
-// if(eyes_blue)
-	printf("%-25s (%4.1f%%) : %lu\n","Eyes: blue"
-		,(((float)eyes_blue/users)*100.0),eyes_blue);
-// if(eyes_brown)
-	printf("%-25s (%4.1f%%) : %lu\n","Eyes: brown"
-        ,(((float)eyes_brown/users)*100.0),eyes_brown);
-// if(eyes_green)
-	printf("%-25s (%4.1f%%) : %lu\n","Eyes: green"
-		,(((float)eyes_green/users)*100.0),eyes_green);
-// if(eyes_hazel)
-	printf("%-25s (%4.1f%%) : %lu\n","Eyes: hazel"
-		,(((float)eyes_hazel/users)*100.0),eyes_hazel);
-// if(eyes_other)
-	printf("%-25s (%4.1f%%) : %lu\n","Eyes: other"
-		,(((float)eyes_other/users)*100.0),eyes_other);
-// if(race_white)
-	printf("%-25s (%4.1f%%) : %lu\n","Race: white"
-		,(((float)race_white/users)*100.0),race_white);
-// if(race_black)
-	printf("%-25s (%4.1f%%) : %lu\n","Race: black"
-		,(((float)race_black/users)*100.0),race_black);
-// if(race_asian)
-	printf("%-25s (%4.1f%%) : %lu\n","Race: asian"
-		,(((float)race_asian/users)*100.0),race_asian);
-// if(race_amerindian)
-	printf("%-25s (%4.1f%%) : %lu\n","Race: amerindian"
-		,(((float)race_amerindian/users)*100.0),race_amerindian);
-// if(race_mideastern)
-	printf("%-25s (%4.1f%%) : %lu\n","Race: mideastern"
-		,(((float)race_mideastern/users)*100.0),race_mideastern);
-// if(race_hispanic)
-	printf("%-25s (%4.1f%%) : %lu\n","Race: hispanic"
-		,(((float)race_hispanic/users)*100.0),race_hispanic);
-// if(race_other)
-	printf("%-25s (%4.1f%%) : %lu\n","Race: other"
-		,(((float)race_other/users)*100.0),race_other);
-// if(marital_single)
-	printf("%-25s (%4.1f%%) : %lu\n","Marital: single"
-        ,(((float)marital_single/users)*100.0),marital_single);
-// if(marital_married)
-	printf("%-25s (%4.1f%%) : %lu\n","Marital: married"
-		,(((float)marital_married/users)*100.0),marital_married);
-// if(marital_divorced)
-	printf("%-25s (%4.1f%%) : %lu\n","Marital: divorced"
-		,(((float)marital_divorced/users)*100.0),marital_divorced);
-// if(marital_widowed)
-	printf("%-25s (%4.1f%%) : %lu\n","Marital: widowed"
-		,(((float)marital_widowed/users)*100.0),marital_widowed);
-// if(marital_other)
-	printf("%-25s (%4.1f%%) : %lu\n","Marital: other"
-		,(((float)marital_other/users)*100.0),marital_other);
-// if(zodiac_aries)
-	printf("%-25s (%4.1f%%) : %lu\n","Zodiac: aries"
-		,(((float)zodiac_aries/users)*100.0),zodiac_aries);
-// if(zodiac_taurus)
-	printf("%-25s (%4.1f%%) : %lu\n","Zodiac: taurus"
-		,(((float)zodiac_taurus/users)*100.0),zodiac_taurus);
-// if(zodiac_gemini)
-	printf("%-25s (%4.1f%%) : %lu\n","Zodiac: gemini"
-		,(((float)zodiac_gemini/users)*100.0),zodiac_gemini);
-// if(zodiac_cancer)
-	printf("%-25s (%4.1f%%) : %lu\n","Zodiac: cancer"
-		,(((float)zodiac_cancer/users)*100.0),zodiac_cancer);
-// if(zodiac_leo)
-	printf("%-25s (%4.1f%%) : %lu\n","Zodiac: leo"
-		,(((float)zodiac_leo/users)*100.0),zodiac_leo);
-// if(zodiac_virgo)
-	printf("%-25s (%4.1f%%) : %lu\n","Zodiac: virgo"
-		,(((float)zodiac_virgo/users)*100.0),zodiac_virgo);
-// if(zodiac_libra)
-	printf("%-25s (%4.1f%%) : %lu\n","Zodiac: libra"
-		,(((float)zodiac_libra/users)*100.0),zodiac_libra);
-// if(zodiac_scorpio)
-	printf("%-25s (%4.1f%%) : %lu\n","Zodiac: scorpio"
-		,(((float)zodiac_scorpio/users)*100.0),zodiac_scorpio);
-// if(zodiac_sagittarius)
-	printf("%-25s (%4.1f%%) : %lu\n","Zodiac: sagittarius"
-		,(((float)zodiac_sagittarius/users)*100.0),zodiac_sagittarius);
-// if(zodiac_capricorn)
-	printf("%-25s (%4.1f%%) : %lu\n","Zodiac: capricorn"
-		,(((float)zodiac_capricorn/users)*100.0),zodiac_capricorn);
-// if(zodiac_aquarius)
-	printf("%-25s (%4.1f%%) : %lu\n","Zodiac: aquarius"
-		,(((float)zodiac_aquarius/users)*100.0),zodiac_aquarius);
-// if(zodiac_pisces)
-	printf("%-25s (%4.1f%%) : %lu\n","Zodiac: pisces"
-		,(((float)zodiac_pisces/users)*100.0),zodiac_pisces);
-
-if(!max_wall)
-	return(0);
-
-if((file=open("WALL.DAB",O_RDWR|O_BINARY|O_DENYNONE))==-1
-	|| (dab_fp=fdopen(file,"r+b"))==NULL) {
-	printf("Error opening WALL.DAB\n");
-    exit(1); }
-
-if((file=open("WALL.TMP",O_WRONLY|O_CREAT|O_TRUNC|O_BINARY|O_DENYALL
-	,S_IWRITE|S_IREAD))==-1
-	|| (tmp_fp=fdopen(file,"r+b"))==NULL) {
-	printf("Error opening WALL.TMP\n");
-    exit(1); }
-
-fprintf(stderr,"Reading wall data...");
-rewind(dab_fp);
-while(!feof(dab_fp)) {
-	if(!fread(&wall,sizeof(wall_t),1,dab_fp))
-        break;
-	if((now-wall.imported)/(24UL*60UL*60UL)<=max_wall)
-		fwrite(&wall,sizeof(wall_t),1,tmp_fp); }
-
-fprintf(stderr,"\n");
-fcloseall();
-remove("WALL.DAB");
-rename("WALL.TMP","WALL.DAB");
-
-return(0);
-}
diff --git a/src/sbbs2/smm/smmvars.c b/src/sbbs2/smm/smmvars.c
deleted file mode 100644
index 0e828145b4..0000000000
--- a/src/sbbs2/smm/smmvars.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/* SMMVARS.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-uchar purity_age=18;
-uchar min_age=15;
-uint  min_level=0;
-uchar req_flags1[128]="";
-uchar req_flags2[128]="";
-uchar req_flags3[128]="";
-uchar req_flags4[128]="";
-uchar zmodem_send[128]="";
-uchar local_view[128]="";
-uint  auto_update=0;
-long  profile_cdt=0;
-long  telegram_cdt=0;
-uint  telegram_level=0;
-long  wall_cdt=0;
-uint  wall_level=0;
-uchar wall_age=0;
-uchar age_split=0;
-uint  que_level=0;
-long  que_cdt=0;
-long  cdt_adjustment=0;
-uint  notify_user=0;
-ulong smm_misc=0;
-uchar system_name[41]="";
diff --git a/src/sbbs2/str.c b/src/sbbs2/str.c
deleted file mode 100644
index 6d4e2ade02..0000000000
--- a/src/sbbs2/str.c
+++ /dev/null
@@ -1,1080 +0,0 @@
-#line 1 "STR.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/*****************************************************/
-/* Functions that perform lengthy string i/o rotines */
-/*****************************************************/
-
-#include "sbbs.h"
-
-/****************************************************************************/
-/* Lists all users who have access to the current sub.                      */
-/****************************************************************************/
-void userlist(char mode)
-{
-	uchar name[256],sort=0;
-	int i,j,k,users=0;
-	uchar *line[1000];
-	user_t user;
-
-if(lastuser()<=1000)
-	sort=yesno(text[SortAlphaQ]);
-if(sort) {
-	bputs(text[CheckingSlots]); }
-else {
-	CRLF; }
-j=0;
-k=lastuser();
-for(i=1;i<=k && !msgabort();i++) {
-	if(sort && (online==ON_LOCAL || !rioctl(TXBC)))
-		bprintf("%-4d\b\b\b\b",i);
-	user.number=i;
-	getuserdat(&user);
-	if(user.misc&(DELETED|INACTIVE))
-		continue;
-	users++;
-	if(mode==UL_SUB) {
-		if(!usrgrps)
-			continue;
-		if(!chk_ar(grp[usrgrp[curgrp]]->ar,user))
-			continue;
-		if(!chk_ar(sub[usrsub[curgrp][cursub[curgrp]]]->ar,user)
-			|| (sub[usrsub[curgrp][cursub[curgrp]]]->read_ar[0]
-			&& !chk_ar(sub[usrsub[curgrp][cursub[curgrp]]]->read_ar,user)))
-			continue; }
-	else if(mode==UL_DIR) {
-		if(user.rest&FLAG('T'))
-			continue;
-		if(!usrlibs)
-			continue;
-		if(!chk_ar(lib[usrlib[curlib]]->ar,user))
-			continue;
-		if(!chk_ar(dir[usrdir[curlib][curdir[curlib]]]->ar,user))
-			continue; }
-	if(sort) {
-		if((line[j]=(char *)MALLOC(128))==0) {
-			errormsg(WHERE,ERR_ALLOC,nulstr,83);
-			for(i=0;i<j;i++)
-				FREE(line[i]);
-			return; }
-		sprintf(name,"%s #%d",user.alias,i);
-		sprintf(line[j],text[UserListFmt],name
-			,sys_misc&SM_LISTLOC ? user.location : user.note
-			,unixtodstr(user.laston,tmp)
-			,user.modem); }
-	else {
-		sprintf(name,"%s #%u",user.alias,i);
-		bprintf(text[UserListFmt],name
-			,sys_misc&SM_LISTLOC ? user.location : user.note
-			,unixtodstr(user.laston,tmp)
-			,user.modem); }
-	j++; }
-if(i<=k) {	/* aborted */
-	if(sort)
-		for(i=0;i<j;i++)
-			FREE(line[i]);
-	return; }
-if(!sort) {
-	CRLF; }
-bprintf(text[NTotalUsers],users);
-if(mode==UL_SUB)
-	bprintf(text[NUsersOnCurSub],j);
-else if(mode==UL_DIR)
-	bprintf(text[NUsersOnCurDir],j);
-if(!sort)
-	return;
-CRLF;
-qsort((void *)line,j,sizeof(line[0])
-	,(int(*)(const void*, const void*))pstrcmp);
-for(i=0;i<j && !msgabort();i++)
-	bputs(line[i]);
-for(i=0;i<j;i++)
-	FREE(line[i]);
-}
-
-/****************************************************************************/
-/* SIF input function. See SIF.DOC for more info        					*/
-/****************************************************************************/
-void sif(char *fname, char *answers, long len)
-{
-	char str[256],template[256],HUGE16 *buf,t,max,min,mode,cr;
-	int file;
-	ulong length,l=0,m,top,a=0;
-
-sprintf(str,"%s%s.SIF",text_dir,strupr(fname));
-if((file=nopen(str,O_RDONLY))==-1) {
-	errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-	answers[0]=0;
-	return; }
-length=filelength(file);
-if((buf=(char *)MALLOC(length))==0) {
-	close(file);
-	errormsg(WHERE,ERR_ALLOC,str,length);
-	answers[0]=0;
-	return; }
-if(lread(file,buf,length)!=length) {
-	close(file);
-	errormsg(WHERE,ERR_READ,str,length);
-	answers[0]=0;
-	return; }
-close(file);
-while(l<length && online) {
-	mode=min=max=t=cr=0;
-	top=l;
-	while(l<length && buf[l++]!=STX);
-	for(m=l;m<length;m++)
-		if(buf[m]==ETX || !buf[m]) {
-			buf[m]=0;
-			break; }
-	if(l>=length) break;
-	if(online==ON_REMOTE) {
-		rioctl(IOCM|ABORT);
-		rioctl(IOCS|ABORT); }
-	putmsg(buf+l,P_SAVEATR);
-	m++;
-	if(toupper(buf[m])!='C' && toupper(buf[m])!='S')
-        continue;
-	SYNC;
-	if(online==ON_REMOTE)
-		rioctl(IOSM|ABORT);
-	if(a>=len) {
-		errormsg(WHERE,ERR_LEN,fname,len);
-		break; }
-	if((buf[m]&0xdf)=='C') {
-    	if((buf[m+1]&0xdf)=='U') {		/* Uppercase only */
-			mode|=K_UPPER;
-			m++; }
-		else if((buf[m+1]&0xdf)=='N') {	/* Numbers only */
-			mode|=K_NUMBER;
-			m++; }
-		if((buf[m+1]&0xdf)=='L') {		/* Draw line */
-        	if(useron.misc&COLOR)
-				attr(color[clr_inputline]);
-			else
-				attr(BLACK|(LIGHTGRAY<<4));
-			bputs(" \b");
-			m++; }
-		if((buf[m+1]&0xdf)=='R') {		/* Add CRLF */
-			cr=1;
-			m++; }
-		if(buf[m+1]=='"') {
-			m+=2;
-			for(l=m;l<length;l++)
-				if(buf[l]=='"') {
-					buf[l]=0;
-					break; }
-			answers[a++]=getkeys((char *)buf+m,0); }
-		else {
-			answers[a]=getkey(mode);
-			outchar(answers[a++]);
-			attr(LIGHTGRAY);
-			CRLF; }
-		if(cr) {
-			answers[a++]=CR;
-			answers[a++]=LF; } }
-	else if((buf[m]&0xdf)=='S') {		/* String */
-		if((buf[m+1]&0xdf)=='U') {		/* Uppercase only */
-			mode|=K_UPPER;
-			m++; }
-		else if((buf[m+1]&0xdf)=='F') { /* Force Upper/Lowr case */
-			mode|=K_UPRLWR;
-			m++; }
-		else if((buf[m+1]&0xdf)=='N') {	/* Numbers only */
-			mode|=K_NUMBER;
-			m++; }
-		if((buf[m+1]&0xdf)=='L') {		/* Draw line */
-			mode|=K_LINE;
-			m++; }
-		if((buf[m+1]&0xdf)=='R') {		/* Add CRLF */
-			cr=1;
-			m++; }
-		if(isdigit(buf[m+1])) {
-			max=buf[++m]&0xf;
-			if(isdigit(buf[m+1]))
-				max=max*10+(buf[++m]&0xf); }
-		if(buf[m+1]=='.' && isdigit(buf[m+2])) {
-			m++;
-			min=buf[++m]&0xf;
-			if(isdigit(buf[m+1]))
-				min=min*10+(buf[++m]&0xf); }
-		if(buf[m+1]=='"') {
-			m++;
-			mode&=~K_NUMBER;
-			while(buf[++m]!='"' && t<80)
-				template[t++]=buf[m];
-			template[t]=0;
-			max=strlen(template); }
-		if(t) {
-			if(gettmplt(str,template,mode)<min) {
-				l=top;
-				continue; } }
-		else {
-			if(!max)
-				continue;
-			if(getstr(str,max,mode)<min) {
-				l=top;
-				continue; } }
-		if(!cr) {
-			for(cr=0;str[cr];cr++)
-				answers[a+cr]=str[cr];
-			while(cr<max)
-				answers[a+cr++]=ETX;
-			a+=max; }
-		else {
-			putrec(answers,a,max,str);
-			putrec(answers,a+max,2,crlf);
-			a+=max+2; } } }
-answers[a]=0;
-FREE((char *)buf);
-}
-
-/****************************************************************************/
-/* SIF output function. See SIF.DOC for more info        					*/
-/****************************************************************************/
-void sof(char *fname, char *answers, long len)
-{
-	char str[256],HUGE16 *buf,max,min,cr;
-	int file;
-	ulong length,l=0,m,a=0;
-
-sprintf(str,"%s%s.SIF",text_dir,strupr(fname));
-if((file=nopen(str,O_RDONLY))==-1) {
-	errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-	answers[0]=0;
-	return; }
-length=filelength(file);
-if((buf=(char *)MALLOC(length))==0) {
-	close(file);
-	errormsg(WHERE,ERR_ALLOC,str,length);
-	answers[0]=0;
-	return; }
-if(lread(file,buf,length)!=length) {
-	close(file);
-	errormsg(WHERE,ERR_READ,str,length);
-	answers[0]=0;
-	return; }
-close(file);
-while(l<length && online) {
-	min=max=cr=0;
-	while(l<length && buf[l++]!=STX);
-	for(m=l;m<length;m++)
-		if(buf[m]==ETX || !buf[m]) {
-			buf[m]=0;
-			break; }
-	if(l>=length) break;
-	if(online==ON_REMOTE) {
-		rioctl(IOCM|ABORT);
-		rioctl(IOCS|ABORT); }
-	putmsg(buf+l,P_SAVEATR);
-	m++;
-	if(toupper(buf[m])!='C' && toupper(buf[m])!='S')
-		continue;
-	SYNC;
-	if(online==ON_REMOTE)
-		rioctl(IOSM|ABORT);
-	if(a>=len) {
-		bprintf("\r\nSOF: %s defined more data than buffer size "
-			"(%lu bytes)\r\n",fname,len);
-		break; }
-	if((buf[m]&0xdf)=='C') {
-		if((buf[m+1]&0xdf)=='U')  		/* Uppercase only */
-			m++;
-		else if((buf[m+1]&0xdf)=='N')  	/* Numbers only */
-			m++;
-		if((buf[m+1]&0xdf)=='L') {		/* Draw line */
-        	if(useron.misc&COLOR)
-				attr(color[clr_inputline]);
-			else
-				attr(BLACK|(LIGHTGRAY<<4));
-			bputs(" \b");
-			m++; }
-		if((buf[m+1]&0xdf)=='R') {		/* Add CRLF */
-			cr=1;
-			m++; }
-		outchar(answers[a++]);
-		attr(LIGHTGRAY);
-		CRLF;
-		if(cr)
-			a+=2; }
-	else if((buf[m]&0xdf)=='S') {		/* String */
-		if((buf[m+1]&0xdf)=='U')
-			m++;
-		else if((buf[m+1]&0xdf)=='F')
-			m++;
-		else if((buf[m+1]&0xdf)=='N')   /* Numbers only */
-			m++;
-		if((buf[m+1]&0xdf)=='L') {
-        	if(useron.misc&COLOR)
-				attr(color[clr_inputline]);
-			else
-				attr(BLACK|(LIGHTGRAY<<4));
-			m++; }
-		if((buf[m+1]&0xdf)=='R') {
-			cr=1;
-			m++; }
-		if(isdigit(buf[m+1])) {
-			max=buf[++m]&0xf;
-			if(isdigit(buf[m+1]))
-				max=max*10+(buf[++m]&0xf); }
-		if(buf[m+1]=='.' && isdigit(buf[m+2])) {
-			m++;
-			min=buf[++m]&0xf;
-			if(isdigit(buf[m+1]))
-				min=min*10+(buf[++m]&0xf); }
-		if(buf[m+1]=='"') {
-			max=0;
-			m++;
-			while(buf[++m]!='"' && max<80)
-				max++; }
-		if(!max)
-			continue;
-		getrec(answers,a,max,str);
-		bputs(str);
-		attr(LIGHTGRAY);
-		CRLF;
-		if(!cr)
-			a+=max;
-		else
-			a+=max+2; } }
-FREE((char *)buf);
-}
-
-/****************************************************************************/
-/* Creates data file 'datfile' from input via sif file 'siffile'            */
-/****************************************************************************/
-void create_sif_dat(char *siffile, char *datfile)
-{
-	char *buf;
-	int file;
-
-if((buf=(char *)MALLOC(SIF_MAXBUF))==NULL) {
-	errormsg(WHERE,ERR_ALLOC,siffile,SIF_MAXBUF);
-	return; }
-memset(buf,SIF_MAXBUF,0);	 /* initialize to null */
-sif(siffile,buf,SIF_MAXBUF);
-if((file=nopen(datfile,O_WRONLY|O_TRUNC|O_CREAT))==-1) {
-	FREE(buf);
-	errormsg(WHERE,ERR_OPEN,datfile,O_WRONLY|O_TRUNC|O_CREAT);
-	return; }
-write(file,buf,strlen(buf));
-close(file);
-FREE(buf);
-}
-
-/****************************************************************************/
-/* Reads data file 'datfile' and displays output via sif file 'siffile'     */
-/****************************************************************************/
-void read_sif_dat(char *siffile, char *datfile)
-{
-	char *buf;
-	int file;
-	long length;
-
-if((file=nopen(datfile,O_RDONLY))==-1) {
-	errormsg(WHERE,ERR_OPEN,datfile,O_RDONLY);
-	return; }
-length=filelength(file);
-if(!length) {
-	close(file);
-	return; }
-if((buf=(char *)MALLOC(length))==NULL) {
-	close(file);
-	errormsg(WHERE,ERR_ALLOC,datfile,length);
-	return; }
-read(file,buf,length);
-close(file);
-sof(siffile,buf,length);
-FREE(buf);
-}
-
-/****************************************************************************/
-/* Get string by template. A=Alpha, N=Number, !=Anything                    */
-/* First character MUST be an A,N or !.                                     */
-/* Modes - K_LINE and K_UPPER are supported.                                */
-/****************************************************************************/
-char gettmplt(char *strout,char *template,int mode)
-{
-	uchar t=strlen(template),c=0,ch,str[256];
-
-sys_status&=~SS_ABORT;
-strupr(template);
-if(useron.misc&ANSI) {
-	if(mode&K_LINE) {
-		if(useron.misc&COLOR)
-            attr(color[clr_inputline]);
-		else
-			attr(BLACK|(LIGHTGRAY<<4)); }
-	while(c<t) {
-		if(template[c]=='N' || template[c]=='A' || template[c]=='!')
-			outchar(SP);
-		else
-			outchar(template[c]);
-		c++; }
-	bprintf("\x1b[%dD",t); }
-c=0;
-if(mode&K_EDIT) {
-	strcpy(str,strout);
-	bputs(str);
-	c=strlen(str); }
-while((ch=getkey(mode))!=CR && online && !(sys_status&SS_ABORT)) {
-	if(ch==BS) {
-		if(!c)
-			continue;
-		for(ch=1,c--;c;c--,ch++)
-			if(template[c]=='N' || template[c]=='A' || template[c]=='!')
-				break;
-		if(useron.misc&ANSI)
-			bprintf("\x1b[%dD",ch);
-		else while(ch--)
-			outchar(BS);
-		bputs(" \b");
-		continue; }
-	if(ch==24) {	/* Ctrl-X */
-		for(c--;c!=0xff;c--) {
-			outchar(BS);
-			if(template[c]=='N' || template[c]=='A' || template[c]=='!')
-				bputs(" \b"); }
-		c=0; }
-	else if(c<t) {
-		if(template[c]=='N' && !isdigit(ch))
-			continue;
-		if(template[c]=='A' && !isalpha(ch))
-			continue;
-		outchar(ch);
-		str[c++]=ch;
-		while(c<t && template[c]!='N' && template[c]!='A' && template[c]!='!'){
-			str[c]=template[c];
-			outchar(template[c++]); } } }
-str[c]=0;
-attr(LIGHTGRAY);
-CRLF;
-if(!(sys_status&SS_ABORT))
-	strcpy(strout,str);
-return(c);
-}
-
-/*****************************************************************************/
-/* Accepts a user's input to change a new-scan time pointer                  */
-/* Returns 0 if input was aborted or invalid, 1 if complete					 */
-/*****************************************************************************/
-char inputnstime(time_t *dt)
-{
-	int hour;
-	struct date tmpdate;
-	struct time tmptime;
-	char pm,str[256];
-
-bputs(text[NScanDate]);
-bputs(timestr(dt));
-CRLF;
-unixtodos(*dt,&tmpdate,&tmptime);
-bputs(text[NScanYear]);
-itoa(tmpdate.da_year,str,10);
-if(!getstr(str,4,K_EDIT|K_AUTODEL|K_NUMBER|K_NOCRLF) || sys_status&SS_ABORT) {
-	CRLF;
-	return(0); }
-tmpdate.da_year=atoi(str);
-if(tmpdate.da_year<1970) {
-	CRLF;
-	return(0); }
-bputs(text[NScanMonth]);
-itoa(tmpdate.da_mon,str,10);
-if(!getstr(str,2,K_EDIT|K_AUTODEL|K_NUMBER|K_NOCRLF) || sys_status&SS_ABORT) {
-	CRLF;
-	return(0); }
-tmpdate.da_mon=atoi(str);
-if(tmpdate.da_mon<1 || tmpdate.da_mon>12) {
-	CRLF;
-	return(0); }
-bputs(text[NScanDay]);
-itoa(tmpdate.da_day,str,10);
-if(!getstr(str,2,K_EDIT|K_AUTODEL|K_NUMBER|K_NOCRLF) || sys_status&SS_ABORT) {
-	CRLF;
-	return(0); }
-tmpdate.da_day=atoi(str);
-if(tmpdate.da_day<1 || tmpdate.da_day>31) {
-	CRLF;
-	return(0); }
-bputs(text[NScanHour]);
-if(sys_misc&SM_MILITARY)
-	hour=tmptime.ti_hour;
-else {
-	if(tmptime.ti_hour==0) {	/* 12 midnite */
-		pm=0;
-		hour=12; }
-	else if(tmptime.ti_hour>12) {
-		hour=tmptime.ti_hour-12;
-		pm=1; }
-	else {
-		hour=tmptime.ti_hour;
-		pm=0; } }
-itoa(hour,str,10);
-if(!getstr(str,2,K_EDIT|K_AUTODEL|K_NUMBER|K_NOCRLF) || sys_status&SS_ABORT) {
-	CRLF;
-	return(0); }
-
-tmptime.ti_hour=atoi(str);
-if(tmptime.ti_hour>24) {
-	CRLF;
-	return(0); }
-bputs(text[NScanMinute]);
-itoa(tmptime.ti_min,str,10);
-if(!getstr(str,2,K_EDIT|K_AUTODEL|K_NUMBER|K_NOCRLF) || sys_status&SS_ABORT) {
-	CRLF;
-	return(0); }
-
-tmptime.ti_min=atoi(str);
-if(tmptime.ti_min>59) {
-	CRLF;
-	return(0); }
-tmptime.ti_sec=0;
-if(!(sys_misc&SM_MILITARY) && tmptime.ti_hour && tmptime.ti_hour<13) {
-	if(pm && yesno(text[NScanPmQ])) {
-			if(tmptime.ti_hour<12)
-				tmptime.ti_hour+=12; }
-	else if(!pm && !yesno(text[NScanAmQ])) {
-			if(tmptime.ti_hour<12)
-				tmptime.ti_hour+=12; }
-	else if(tmptime.ti_hour==12)
-		tmptime.ti_hour=0; }
-else {
-	CRLF; }
-*dt=dostounix(&tmpdate,&tmptime);
-return(1);
-}
-
-/*****************************************************************************/
-/* Checks a password for uniqueness and validity                              */
-/*****************************************************************************/
-char chkpass(char *pass, user_t user)
-{
-	char c,d,first[128],last[128],sysop[41],sysname[41],*p;
-
-if(strlen(pass)<4) {
-	bputs(text[PasswordTooShort]);
-	return(0); }
-if(!strcmp(pass,user.pass)) {
-	bputs(text[PasswordNotChanged]);
-	return(0); }
-d=strlen(pass);
-for(c=1;c<d;c++)
-	if(pass[c]!=pass[c-1])
-		break;
-if(c==d) {
-	bputs(text[PasswordInvalid]);
-	return(0); }
-for(c=0;c<3;c++)	/* check for 1234 and ABCD */
-	if(pass[c]!=pass[c+1]+1)
-		break;
-if(c==3) {
-	bputs(text[PasswordObvious]);
-	return(0); }
-for(c=0;c<3;c++)	/* check for 4321 and ZYXW */
-	if(pass[c]!=pass[c+1]-1)
-		break;
-if(c==3) {
-	bputs(text[PasswordObvious]);
-    return(0); }
-strupr(user.name);
-strupr(user.alias);
-strcpy(first,user.alias);
-p=strchr(first,SP);
-if(p) {
-	*p=0;
-	strcpy(last,p+1); }
-else
-	last[0]=0;
-strupr(user.handle);
-strcpy(sysop,sys_op);
-strupr(sysop);
-strcpy(sysname,sys_name);
-strupr(sysname);
-if((user.pass[0]
-		&& (strstr(pass,user.pass) || strstr(user.pass,pass)))
-	|| (user.name[0]
-		&& (strstr(pass,user.name) || strstr(user.name,pass)))
-	|| strstr(pass,user.alias) || strstr(user.alias,pass)
-	|| strstr(pass,first) || strstr(first,pass)
-	|| (last[0]
-		&& (strstr(pass,last) || strstr(last,pass)))
-	|| strstr(pass,user.handle) || strstr(user.handle,pass)
-	|| (user.zipcode[0]
-		&& (strstr(pass,user.zipcode) || strstr(user.zipcode,pass)))
-	|| (sysname[0]
-		&& (strstr(pass,sysname) || strstr(sysname,pass)))
-	|| (sysop[0]
-		&& (strstr(pass,sysop) || strstr(sysop,pass)))
-	|| (sys_id[0]
-		&& (strstr(pass,sys_id) || strstr(sys_id,pass)))
-	|| (node_phone[0] && strstr(pass,node_phone))
-	|| (user.phone[0] && strstr(user.phone,pass))
-	|| !strncmp(pass,"QWER",3)
-	|| !strncmp(pass,"ASDF",3)
-	|| !strncmp(pass,"!@#$",3)
-	)
-	{
-	bputs(text[PasswordObvious]);
-	return(0); }
-return(1);
-}
-
-/****************************************************************************/
-/* Prompts user for detailed information regarding their computer 			*/
-/* and places that information into 'computer'								*/
-/* Called from function newuser												*/
-/****************************************************************************/
-void getcomputer(char *computer)
-{
-	char str[256];
-
-if(!(uq&UQ_MC_COMP)) {
-	while(online) {
-		bputs(text[EnterYourComputer]);
-		if(getstr(computer,LEN_COMP,K_LINE))
-			break; }
-	return; }
-bputs(text[ComputerTypeMenu]);
-bputs(text[ComputerTypePrompt]);
-switch(getkeys("ABCDE",0)) {
-	case 'A':
-		sif("COMPUTER",str,8);
-		if(!online) return;
-		switch(str[0]) {
-			case 'A':
-				strcpy(computer,"XT");
-				break;
-			case 'B':
-				strcpy(computer,"286");
-				break;
-			case 'C':
-				strcpy(computer,"386SX");
-				break;
-			case 'D':
-				strcpy(computer,"386DX");
-				break;
-			case 'E':
-				strcpy(computer,"486");
-				break; }
-		switch(str[1]) {
-			case 'A':
-				strcat(computer,"-4 ");
-				break;
-			case 'B':
-				strcat(computer,"-6 ");
-				break;
-			case 'C':
-				strcat(computer,"-8 ");
-				break;
-			case 'D':
-				strcat(computer,"-10 ");
-				break;
-			case 'E':
-				strcat(computer,"-12 ");
-				break;
-			case 'F':
-				strcat(computer,"-16 ");
-				break;
-			case 'G':
-				strcat(computer,"-20 ");
-				break;
-			case 'H':
-				strcat(computer,"-25 ");
-				break;
-			case 'I':
-				strcat(computer,"-33 ");
-				break;
-			case 'J':
-				strcat(computer,"-40 ");
-				break;
-			case 'K':
-				strcat(computer,"-50 ");
-				break; }
-		switch(str[2]) {
-			case 'A':
-				strcat(computer,"8bit ");
-				break;
-			case 'B':
-				strcat(computer,"ISA ");
-				break;
-			case 'C':
-				strcat(computer,"MCA ");
-				break;
-			case 'D':
-				strcat(computer,"EISA ");
-				break; }
-		switch(str[3]) {
-			case 'A':
-				strcat(computer,"MDA ");
-				break;
-			case 'B':
-				strcat(computer,"HERC ");
-				break;
-			case 'C':
-				strcat(computer,"CGA ");
-				break;
-			case 'D':
-				strcat(computer,"EGA ");
-				break;
-			case 'E':
-				strcat(computer,"MCGA ");
-				break;
-			case 'F':
-				strcat(computer,"VGA ");
-				break;
-			case 'G':
-				strcat(computer,"SVGA ");
-				break;
-			case 'H':
-				strcat(computer,"MVGA ");
-				break;
-			case 'I':
-				strcat(computer,"8514 ");
-				break;
-			case 'J':
-				strcat(computer,"XGA ");
-				break;
-			case 'K':
-				strcat(computer,"TIGA ");
-				break; }
-		switch(str[4]) {
-			case 'A':
-				strcat(computer,"<1 ");
-				break;
-			case 'B':
-				strcat(computer,"1 ");
-				break;
-			case 'C':
-				strcat(computer,"2 ");
-				break;
-			case 'D':
-				strcat(computer,"3 ");
-				break;
-			case 'E':
-				strcat(computer,"4 ");
-				break;
-			case 'F':
-				strcat(computer,"5 ");
-				break;
-			case 'G':
-				strcat(computer,"6 ");
-				break;
-			case 'H':
-				strcat(computer,"8 ");
-				break;
-			case 'I':
-				strcat(computer,"10 ");
-				break;
-			case 'J':
-				strcat(computer,"12 ");
-				break;
-			case 'K':
-				strcat(computer,"16 ");
-				break;
-			case 'L':
-				strcat(computer,"18 ");
-				break;
-			case 'M':
-				strcat(computer,"24 ");
-				break;
-			case 'N':
-				strcat(computer,"32 ");
-				break;
-			case 'O':
-				strcat(computer,"64 ");
-				break; }
-		switch(str[5]) {
-			case 'A':
-				strcat(computer,"0 ");
-				break;
-			case 'B':
-				strcat(computer,"10 ");
-				break;
-			case 'C':
-				strcat(computer,"20 ");
-				break;
-			case 'D':
-				strcat(computer,"30 ");
-				break;
-			case 'E':
-				strcat(computer,"40 ");
-				break;
-			case 'F':
-				strcat(computer,"60 ");
-				break;
-			case 'G':
-				strcat(computer,"80 ");
-				break;
-			case 'H':
-				strcat(computer,"100 ");
-				break;
-			case 'I':
-				strcat(computer,"120 ");
-				break;
-			case 'J':
-				strcat(computer,"150 ");
-				break;
-			case 'K':
-				strcat(computer,"200 ");
-				break;
-			case 'L':
-				strcat(computer,"250 ");
-				break;
-			case 'M':
-				strcat(computer,"300 ");
-				break;
-			case 'N':
-				strcat(computer,"400 ");
-				break;
-			case 'O':
-				strcat(computer,"500 ");
-				break;
-			case 'P':
-				strcat(computer,"600 ");
-				break;
-			case 'Q':
-				strcat(computer,"700 ");
-				break;
-			case 'R':
-				strcat(computer,"800 ");
-				break;
-			case 'S':
-				strcat(computer,"900 ");
-				break;
-			case 'T':
-				strcat(computer,"1GB ");
-				break; }
-		switch(str[6]) {
-			case 'A':
-				strcat(computer,"ST506");
-				break;
-			case 'B':
-				strcat(computer,"SCSI");
-				break;
-			case 'C':
-				strcat(computer,"SCSI2");
-				break;
-			case 'D':
-				strcat(computer,"ESDI");
-				break;
-			case 'E':
-				strcat(computer,"IDE"); }
-		break;
-	case 'B':
-		sprintf(computer,"%.*s",LEN_COMP,text[ComputerTypeB]);
-		return;
-	case 'C':
-		sprintf(computer,"%.*s",LEN_COMP,text[ComputerTypeC]);
-		return;
-	case 'D':
-		sprintf(computer,"%.*s",LEN_COMP,text[ComputerTypeD]);
-		return;
-	case 'E':
-		sprintf(computer,"%.*s",LEN_COMP,text[ComputerTypeE]);
-		return; }
-}
-
-/****************************************************************************/
-/* Displays information about sub-board subnum								*/
-/****************************************************************************/
-void subinfo(uint subnum)
-{
-	char str[256];
-
-bputs(text[SubInfoHdr]);
-bprintf(text[SubInfoLongName],sub[subnum]->lname);
-bprintf(text[SubInfoShortName],sub[subnum]->sname);
-bprintf(text[SubInfoQWKName],sub[subnum]->qwkname);
-bprintf(text[SubInfoMaxMsgs],sub[subnum]->maxmsgs);
-if(sub[subnum]->misc&SUB_QNET)
-	bprintf(text[SubInfoTagLine],sub[subnum]->tagline);
-if(sub[subnum]->misc&SUB_FIDO)
-	bprintf(text[SubInfoFidoNet]
-		,sub[subnum]->origline
-		,faddrtoa(sub[subnum]->faddr));
-sprintf(str,"%s%s.MSG",sub[subnum]->data_dir,sub[subnum]->code);
-if(fexist(str) && yesno(text[SubInfoViewFileQ]))
-	printfile(str,0);
-}
-
-/****************************************************************************/
-/* Displays information about transfer directory dirnum 					*/
-/****************************************************************************/
-void dirinfo(uint dirnum)
-{
-	char str[256];
-
-bputs(text[DirInfoHdr]);
-bprintf(text[DirInfoLongName],dir[dirnum]->lname);
-bprintf(text[DirInfoShortName],dir[dirnum]->sname);
-if(dir[dirnum]->exts[0])
-	bprintf(text[DirInfoAllowedExts],dir[dirnum]->exts);
-bprintf(text[DirInfoMaxFiles],dir[dirnum]->maxfiles);
-sprintf(str,"%s%s.MSG",dir[dirnum]->data_dir,dir[dirnum]->code);
-if(fexist(str) && yesno(text[DirInfoViewFileQ]))
-	printfile(str,0);
-}
-
-/****************************************************************************/
-/* Searches the file <name>.CAN in the TEXT directory for matches			*/
-/* Returns 1 if found in list, 0 if not.									*/
-/****************************************************************************/
-char trashcan(char *insearch, char *name)
-{
-	char str[256],search[256],c,found=0;
-	int file;
-	FILE *stream;
-
-sprintf(str,"%s%s.CAN",text_dir,name);
-if((stream=fnopen(&file,str,O_RDONLY))==NULL) {
-	if(fexist(str))
-		errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-	return(0); }
-strcpy(search,insearch);
-strupr(search);
-while(!feof(stream) && !ferror(stream) && !found) {
-	if(!fgets(str,81,stream))
-		break;
-	truncsp(str);
-	c=strlen(str);
-	if(c) {
-		c--;
-		strupr(str);
-		if(str[c]=='~') {
-			str[c]=0;
-			if(strstr(search,str))
-				found=1; }
-
-		else if(str[c]=='^') {
-			str[c]=0;
-			if(!strncmp(str,search,c))
-				found=1; }
-
-		else if(!strcmp(str,search))
-			found=1; } }
-fclose(stream);
-if(found) {
-	sprintf(str,"%sBAD%s.MSG",text_dir,name);
-	if(fexist(str))
-		printfile(str,0);
-	return(1); }
-return(0);
-}
-
-/****************************************************************************/
-/* Error handling routine. Prints to local and remote screens the error     */
-/* information, function, action, object and access and then attempts to    */
-/* write the error information into the file ERROR.LOG and NODE.LOG         */
-/****************************************************************************/
-void errormsg(int line, char *source, char action, char *object, ulong access)
-{
-    char str[512];
-    char actstr[256];
-
-switch(action) {
-    case ERR_OPEN:
-        strcpy(actstr,"opening");
-        break;
-    case ERR_CLOSE:
-		strcpy(actstr,"closing");
-        break;
-    case ERR_FDOPEN:
-        strcpy(actstr,"fdopen");
-        break;
-    case ERR_READ:
-        strcpy(actstr,"reading");
-        break;
-    case ERR_WRITE:
-        strcpy(actstr,"writing");
-        break;
-    case ERR_REMOVE:
-        strcpy(actstr,"removing");
-        break;
-    case ERR_ALLOC:
-        strcpy(actstr,"allocating memory");
-        break;
-    case ERR_CHK:
-        strcpy(actstr,"checking");
-        break;
-    case ERR_LEN:
-        strcpy(actstr,"checking length");
-        break;
-    case ERR_EXEC:
-        strcpy(actstr,"executing");
-        break;
-    case ERR_CHDIR:
-        strcpy(actstr,"changing directory");
-        break;
-	case ERR_CREATE:
-		strcpy(actstr,"creating");
-		break;
-	case ERR_LOCK:
-		strcpy(actstr,"locking");
-		break;
-	case ERR_UNLOCK:
-		strcpy(actstr,"unlocking");
-        break;
-    default:
-        strcpy(actstr,"UNKNOWN"); }
-bprintf("\7\r\nERROR -   action: %s",actstr);   /* tell user about error */
-bprintf("\7\r\n          object: %s",object);
-bprintf("\7\r\n          access: %ld",access);
-if(access>9 && (long)access!=-1 && (short)access!=-1 && (char)access!=-1)
-	bprintf(" (%lXh)",access);
-if(sys_misc&SM_ERRALARM) {
-	beep(500,220); beep(250,220);
-	beep(500,220); beep(250,220);
-	beep(500,220); beep(250,220);
-	nosound(); }
-bputs("\r\n\r\nThe sysop has been notified. <Hit a key>");
-getkey(0);
-CRLF;
-sprintf(str,"\r\n      file: %s\r\n      line: %d\r\n    action: %s\r\n"
-	"    object: %s\r\n    access: %ld"
-	,source,line,actstr,object,access);
-if(access>9 && (long)access!=-1 && (short)access!=-1 && (char)access!=-1) {
-	sprintf(tmp," (%lXh)",access);
-	strcat(str,tmp); }
-if(errno) {
-	sprintf(tmp,"\r\n     errno: %d",errno);
-    strcat(str,tmp); }
-if(_doserrno && _doserrno!=errno) {
-	sprintf(tmp,"\r\n  doserrno: %d",_doserrno);
-    strcat(str,tmp); }
-errno=_doserrno=0;
-errorlog(str);
-}
-
-/*****************************************************************************/
-/* Error logging to NODE.LOG and DATA\ERROR.LOG function                     */
-/*****************************************************************************/
-void errorlog(char *text)
-{
-	static char inside;
-    char hdr[256],str[256],tmp2[256];
-    int file;
-
-if(inside)		/* let's not go recursive on this puppy */
-	return;
-inside=1;
-getnodedat(node_num,&thisnode,1);
-criterrs=++thisnode.errors;
-putnodedat(node_num,thisnode);
-now=time(NULL);
-logline("!!",text);
-sprintf(str,"%sERROR.LOG",data_dir);
-if((file=nopen(str,O_WRONLY|O_CREAT|O_APPEND))==-1) {
-    sprintf(tmp2,"ERROR opening/creating %s",str);
-    logline("!!",tmp2);
-	inside=0;
-    return; }
-sprintf(hdr,"%s Node %2d: %s #%d"
-    ,timestr(&now),node_num,useron.alias,useron.number);
-write(file,hdr,strlen(hdr));
-write(file,crlf,2);
-write(file,text,strlen(text));
-write(file,"\r\n\r\n",4);
-close(file);
-inside=0;
-}
-
diff --git a/src/sbbs2/text.h b/src/sbbs2/text.h
deleted file mode 100644
index c1b29aa404..0000000000
--- a/src/sbbs2/text.h
+++ /dev/null
@@ -1,737 +0,0 @@
-/* TEXT.H */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/****************************************************************************/
-/* Macros for elements of the array of pointers (text[]) to static text		*/
-/* Should correlate with CTRL\TEXT.DAT										*/
-/****************************************************************************/
-
-#ifndef _TEXT_H
-#define _TEXT_H
-
-enum {
- MsgSubj
-,MsgAttr
-,MsgTo
-,MsgToExt
-,MsgToNet
-,MsgFrom
-,MsgFromExt
-,MsgFromNet
-,MsgDate
-,Email
-,Post
-,TooManyEmailsToday
-,TooManyPostsToday
-,CantAddToQueue
-,R_Email
-,R_Post
-,R_Feedback
-,Emailing
-,Posting
-,NewFile
-,TitlePrompt
-,EnterMsgNow
-,EnterMsgNowRaw
-,NoMoreLines
-,OnlyNLinesLeft
-,OutOfBytes
-,InvalidLineNumber
-,MsgCleared
-,WithLineNumbers
-,Aborted
-,AnonymousQ
-,Anonymous
-,Saving
-,SavedNBytes
-,WritingIndx
-,Emailed
-,Posted
-,EmailNodeMsg
-,R_Forward
-,ForwardedFrom
-,Forwarded
-,AutoMsgBy
-,AutoMsg
-,R_AutoMsg
-,NoMailWaiting
-,MailWaitingLstHdr
-,MailWaitingLstFmt
-,StartWithN
-,ReadingMail
-,CantReplyToAnonMsg
-,Regarding
-,RegardingBy
-,RegardingByTo
-,DeleteMailQ
-,OK
-,ForwardMailTo
-,SaveMsgToFile
-,FileToWriteTo
-,NoMailSent
-,MailSentLstHdr
-,ReadingSentMail
-,CantDelForwardedMail
-,NoMailOnSystem
-,ReadingAllMail
-,MailOnSystemLstHdr
-,MailOnSystemLstFmt
-,NScanStatusFmt
-,SearchSubFmt
-,NoMsgsOnSub
-,ZScanPostHdr
-,ReadingSub
-,YouDidntPostMsgN
-,DeletePostQ
-,DeletingPost
-,DeletedPost
-,SearchStringPrompt
-,SubMsgLstHdr
-,SubMsgLstFmt
-,ChangeMsgPurgeQ
-,NoTextSections
-,TextSectionLstHdr
-,TextSectionLstFmt
-,WhichTextSection
-,TextFilesLstHdr
-,TextFilesLstFmt
-,WhichTextFileSysop
-,WhichTextFile
-,AddTextFileBeforeWhich
-,AddTextFilePath
-,AddTextFileDesc
-,RemoveWhichTextFile
-,DeleteTextFileQ
-,EditWhichTextFile
-,NScanAllGrpsQ
-,SScanAllGrpsQ
-,AreYouSureQ
-,R_Chat
-,ReFeedback
-,SiHdr
-,SiSysName
-,SiSysID
-,SiSysFaddr
-,SiSysPsite
-,SiSysLocation
-,SiSysop
-,SiSysNodes
-,SiNodeNumberName
-,SiNodePhone
-,SiTotalLogons
-,SiLogonsToday
-,SiTotalTime
-,SiTimeToday
-,ViewSysInfoFileQ
-,ViewLogonMsgQ
-,R_ReadSentMail
-,MessageScan
-,MessageScanComplete
-,MessageScanAborted
-,LogOffQ
-,CantPostOnSub
-,R_TransferSection
-,NoOtherActiveNodes
-,R_ExternalPrograms
-,UserStats
-,SubLstHdr
-,SubLstFmt
-,GrpLstHdr
-,GrpLstFmt
-,NScanCfgWhichGrp
-,SScanCfgWhichGrp
-,CfgSubLstHdr
-,CfgSubLstFmt
-,CfgGrpLstHdr
-,CfgGrpLstFmt
-,NScanCfgWhichSub
-,SScanCfgWhichSub
-,SubPtrLstFmt
-,WhichOrAll
-,RawMsgInputModeIsNow
-,OFF
-,ON
-,LineStatus
-,SystemStatsHdr
-,NodeStatsHdr
-,StatsTotalLogons
-,StatsLogonsToday
-,StatsTotalTime
-,StatsTimeToday
-,StatsUploadsToday
-,StatsDownloadsToday
-,StatsPostsToday
-,StatsEmailsToday
-,StatsFeedbacksToday
-,ChUserPrompt
-,ChUserPwPrompt
-,NBytesFreeMemory
-,ErrorLogHdr
-,DeleteErrorLogQ
-,NoErrorLogExists
-,ClearErrCounter
-,InvalidNode
-,RerunThisNodeNowQ
-,DeleteGuruLogQ
-,NScanAllLibsQ
-,R_Download
-,SearchingAllDirs
-,SearchingAllLibs
-,NFilesListed
-,EmptyDir
-,NScanHdr
-,R_RemoveFiles
-,DirFull
-,R_Upload
-,CantUploadHere
-,FileSpec
-,UserTransferStats
-,NoSysopDir
-,CantUploadToSysop
-,DirLstHdr
-,DirLstFmt
-,LibLstHdr
-,LibLstFmt
-,BatDownloadFlagIsNow
-,TransferPolicyHdr
-,TpCreditValue
-,TpUpload
-,TpDownload
-,NoUserDir
-,NoFilesForYou
-,UserDirFull
-,CantUploadToUser
-,BoxHdrLib
-,BoxHdrDir
-,BoxHdrFiles
-,ShortHdrLib
-,ShortHdrDir
-,BatchDlFlags
-,BatchDlQueueIsFull
-,FileSpecStarDotStar
-,LowDiskSpace
-,DiskNBytesFree
-,Filename
-,BadFilename
-,UploadToSysopDirQ
-,UploadToUserDirQ
-,UploadToCurDirQ
-,FileAlreadyThere
-,FileOnDiskAddQ
-,FileNotOnDisk
-,TheseFileExtsOnly
-,FileAlreadyOnline
-,EnterAfterLastDestUser
-,SendFileToUser
-,DuplicateUser
-,UserWontBeAbleToDl
-,CantSendYourselfFiles
-,UserAddedToDestList
-,RateThisFile
-,Rated
-,MultipleDiskQ
-,HowManyDisksTotal
-,NumberOfFile
-,FileOneOfTen
-,FileOneOfTwo
-,EnterDescNow
-,NoDescription
-,ProtocolOrQuit
-,ProtocolBatchOrQuit
-,BatchUlQueueIsFull
-,FileAddedToUlQueue
-,UserToUserXferNodeMsg
-,FileInfoPrompt
-,QuitOrNext
-,RExemptRemoveFilePrompt
-,MoveToLibLstFmt
-,MoveToLibPrompt
-,MoveToDirLstFmt
-,MoveToDirPrompt
-,MovedFile
-,CloseFileRecordQ
-,SysopRemoveFilePrompt
-,UserRemoveFilePrompt
-,FileNotThere
-,CouldntRemoveFile
-,DeleteFileQ
-,AddToOfflineDirQ
-,RemoveCreditsQ
-,UserNotFound
-,CreditsToRemove
-,FileRemovedUserMsg
-,EditFilename
-,CouldntRenameFile
-,FileRenamed
-,EditDescription
-,DeleteExtDescriptionQ
-,EditUploader
-,EditCreditValue
-,EditTimesDownloaded
-,EditOpenCount
-,EditAltPath
-,YouOnlyHaveNCredits
-,NotEnoughCredits
-,NotEnoughTimeToDl
-,ProtocolBatchQuitOrNext
-,BulkUpload
-,BulkUploadDescPrompt
-,NoFilesInBatchQueue
-,BatchMenuPrompt
-,ClearUploadQueueQ
-,UploadQueueCleared
-,ClearDownloadQueueQ
-,DownloadQueueCleared
-,DownloadQueueIsEmpty
-,UploadQueueLstHdr
-,UploadQueueLstFmt
-,DownloadQueueLstHdr
-,DownloadQueueLstFmt
-,DownloadQueueTotals
-,RemoveWhichFromUlQueue
-,RemoveWhichFromDlQueue
-,UploadQueueIsEmpty
-,HangUpAfterXferQ
-,StartXferNow
-,Disconnecting
-,Disconnected
-,FileNotSent
-,RemovingTempFiles
-,ExtractFrom
-,UnextractableFile
-,FileNotFound
-,ExtractFilesPrompt
-,TempDirPrompt
-,TempFileNotCreatedYet
-,TempFileInfo
-,TempDirTotal
-,NFilesRemoved
-,ResortWarning
-,ResortLineFmt
-,ResortEmptyDir
-,Sorting
-,Sorted
-,Compressed
-,FileAlreadyInQueue
-,FileIsNotOnline
-,FileAddedToBatDlQueue
-,NonviewableFile
-,FileNotReceived
-,FileHadErrors
-,FileZeroLength
-,FileNBytesReceived
-,FileNBytesSent
-,DownloadUserMsg
-,Partially
-,FiLib
-,FiDir
-,FiFilename
-,FiFileSize
-,FiCredits
-,FiDescription
-,FiUploadedBy
-,FiFileDate
-,FiDateUled
-,FiDateDled
-,FiTimesDled
-,FiTransferTime
-,FiAlternatePath
-,InvalidAlternatePathN
-,FileIsOpen
-,HappyBirthday
-,TimeToChangePw
-,NewPasswordQ
-,NewPassword
-,VerifyPassword
-,Wrong
-,PasswordChanged
-,NoMoreLogons
-,R_Logons
-,EnterYourAlias
-,EnterYourRealName
-,EnterYourCompany
-,EnterYourHandle
-,EnterYourSex
-,EnterYourAddress
-,EnterYourPhoneNumber
-,EnterYourBirthday
-,EnterYourCityState
-,EnterYourZipCode
-,EnterYourComputer
-,CallingFromNorthAmericaQ
-,UserInfoCorrectQ
-,LiUserNumberName
-,LiLogonsToday
-,LiTimeonToday
-,LiMailWaiting
-,LiSysopIs
-,LiSysopAvailable
-,LiSysopNotAvailable
-,UserOnTwoNodes
-,CriticalErrors
-,UserXferForYou
-,UnreceivedUserXfer
-,ReadYourMailNowQ
-,NoNewUsers
-,NewUserPasswordPrompt
-,AutoTerminalQ
-,AnsiTerminalQ
-,ColorTerminalQ
-,RipTerminalQ
-,ExAsciiTerminalQ
-,YouCantUseThatName
-,YourPasswordIs
-,NewUserPasswordVerify
-,IncorrectPassword
-,MagicWordPrompt
-,FailedMagicWord
-,SystemFull
-,NewUserFeedbackHdr
-,NoFeedbackWarning
-,NoXtrnPrograms
-,XtrnProgLstHdr
-,XtrnProgLstTitles
-,XtrnProgLstUnderline
-,XtrnProgLstFmt
-,WhichXtrnProg
-,UserRunningXtrn
-,RemoveNodeLockQ
-,MinimumModemSpeed
-,NoNodeAccess
-,NodeLocked
-,UnknownUser
-,InvalidLogon
-,SlogFmt
-,Locally
-,SortAlphaQ
-,CheckingSlots
-,UserListFmt
-,NTotalUsers
-,NUsersOnCurSub
-,NUsersOnCurDir
-,NScanDate
-,NScanYear
-,NScanMonth
-,NScanDay
-,NScanHour
-,NScanMinute
-,NScanPmQ
-,NScanAmQ
-,PasswordTooShort
-,PasswordNotChanged
-,PasswordInvalid
-,PasswordObvious
-,ComputerTypeMenu
-,ComputerTypePrompt
-,ComputerTypeB
-,ComputerTypeC
-,ComputerTypeD
-,ComputerTypeE
-,NoUserData
-,Deleted
-,Inactive
-,UeditAliasPassword
-,UeditRealNamePhone
-,UeditAddressBirthday
-,UeditLocationZipcode
-,UeditNoteHandle
-,UeditComputerModem
-,UeditCommentLine
-,UserDates
-,UserTimes
-,UserLogons
-,UserEmails
-,UserNetMail
-,UserUploads
-,UserDownloads
-,UserLeech
-,UserCredits
-,UserMinutes
-,UeditSecLevel
-,UeditFlags
-,UeditExempts
-,UeditPrompt
-,UeditRestoreQ
-,UeditActivateQ
-,UeditDeleteQ
-,UeditReadUserMailWQ
-,UeditReadUserMailSQ
-,UeditDeactivateUserQ
-,ChangeExemptionQ
-,FlagEditing
-,GoToUser
-,UeditLastOn
-,UeditFirstOn
-,UeditExpire
-,UeditPwModDate
-,UeditML
-,UeditNote
-,UeditComment
-,UeditUlBytes
-,UeditUploads
-,UeditDlBytes
-,UeditDownloads
-,UeditLeech
-,QuickValidateFmt
-,QuickValidatePrompt
-,UeditPassword
-,UeditCredits
-,UeditMinutes
-,UeditCopyUserQ
-,UeditCopyUserToSlot
-,ChangeRestrictsQ
-,ModifyCredits
-,ModifyMinutes
-,DeleteQuestionaireQ
-,UserDefaultsHdr
-,UserDefaultsTerminal
-,UserDefaultsXeditor
-,UserDefaultsRows
-,UserDefaultsMenuMode
-,UserDefaultsPause
-,UserDefaultsHotKey
-,UserDefaultsCursor
-,UserDefaultsCLS
-,UserDefaultsAskNScan
-,UserDefaultsAskSScan
-,UserDefaultsANFS
-,UserDefaultsRemember
-,UserDefaultsBatFlag
-,UserDefaultsNetMail
-,UserDefaultsCommandSet
-,UserDefaultsQuiet
-,UserDefaultsPassword
-,UserDefaultsArcType
-,UserDefaultsProtocol
-,UserDefaultsWhich
-,On
-,Off
-,HowManyRows
-,CurrentPassword
-,ForwardMailQ
-,EnterNetMailAddress
-,SelectItemHdr
-,SelectItemFmt
-,SelectItemWhich
-,SysopIsHere
-,EndOfChat
-,ChatPrompt
-,AnonUserChatHandle
-,WelcomeToMultiChat
-,WelcomeToChannelN
-,NodeInMultiChatLocally
-,YoureOnTheAir
-,NodeJoinedMultiChat
-,NodeLeftMultiChat
-,MultiChatCommandPrompt
-,PasswordProtected
-,CorrectPassword
-,WrongPassword
-,PasswordProtectChanQ
-,PasswordPrompt
-,ChatLineFmt
-,SysopPageIsNow
-,SysopIsNotAvailable
-,ChatWithGuruInsteadQ
-,PrivateMsgPrompt
-,NodeToPrivateChat
-,NodeNAlreadyInPChat
-,NodeNIsNotInUse
-,NoNeedToPageSelf
-,CantPageNode
-,NodePageMsg
-,AllNodePageMsg
-,NodePChatPageMsg
-,R_SendMessages
-,NodeToSendMsgTo
-,NoNeedToSendMsgToSelf
-,NodeMsgPrompt
-,NodeMsgFmt
-,AllNodeMsgFmt
-,PagingGuru
-,WaitingForNodeInPChat
-,NodeJoinedPrivateChat
-,NodeLeftPrivateChat
-,NoOneHasLoggedOnToday
-,LastFewCallers
-,LastFewCallersFmt
-,CallersToday
-,DoYouMeanThisUserQ
-,UNKNOWN_USER
-,TimesUp
-,NodeLoggedOff
-,NodeLoggedOnAtNbps
-,TiLogon
-,TiNow
-,TiTimeon
-,TiTimeLeft
-,ControlKeyMenu
-,TakenTooLongToLogon
-,CallBackWhenYoureThere
-,YesNoQuestion
-,Yes
-,No
-,NoYesQuestion
-,Pause
-,Wait
-,SysStatsLogHdr
-,NodeStatsLogHdr
-,ReducedTime
-,EventInfo
-,UploadBeforeEvent
-,QWKPrompt
-,QWKCtrlACodes
-,QWKPackingSubboard
-,QWKPackedSubboard
-,QWKPackingEmail
-,QWKPackedEmail
-,QWKUnpacking
-,QWKUnpacked
-,QWKNoNewMessages
-,QWKCompressionFailed
-,QWKExtractionFailed
-,QWKReplyNotReceived
-,QWKInvalidConferenceN
-,CreatingFileList
-,CreatedFileList
-,NoFiles
-,MsgPtrsInitialized
-,ConversionRate
-,CreditsToMin
-,YouHaveTooManyMinutes
-,BillingNodeMsg
-,Convert100ktoNminQ
-,CreditedAccount
-,ANSICaptureIsNow
-,RetrievingFile
-,AltULPathIsNow
-,PrivatePostQ
-,PostTo
-,NoToUser
-,UsingRealName
-,PostingPrivately
-,PostingAnonymously
-,CantDeletePosts
-,SubInfoHdr
-,SubInfoLongName
-,SubInfoShortName
-,SubInfoQWKName
-,SubInfoMaxMsgs
-,SubInfoTagLine
-,SubInfoFidoNet
-,SubInfoViewFileQ
-,DirInfoHdr
-,DirInfoLongName
-,DirInfoShortName
-,DirInfoAllowedExts
-,DirInfoMaxFiles
-,DirInfoViewFileQ
-,NoNetMailAllowed
-,NetMailCostContinueQ
-,NetMailing
-,RemoveFromNewScanQ
-,SubGroupOrAll
-,DirLibOrAll
-,EnterPath
-,SearchExtendedQ
-,DisplayTitlesOnlyQ
-,EchoIsNow
-,WelcomeToPrivateChat
-,UploadingREP
-,ReceivedFileViaQWK
-,QWKmsgLimitReached
-,PrivatePostsNotAllowed
-,LoadingMsgPtrs
-,LoadedMsgPtrs
-,QuoteMessageQ
-,QuoteLinesPrompt
-,ChatChanLstHdr
-,ChatChanLstTitles
-,ChatChanLstUnderline
-,ChatChanLstFmt
-,CantAccessThatChannel
-,CantDownloadFromDir
-,SearchingForDupes
-,SearchedForDupes
-,AccountWillExpireInNDays
-,AccountHasExpired
-,DownloadBatchQ
-,WaitingForDeviceN
-,UserSentYouMail
-,UserSentYouFile
-,UserReadYourMail
-,UserReadYourMailNodeMsg
-,JoinWhichGrp
-,JoinWhichSub
-,JoinWhichLib
-,JoinWhichDir
-,CfgDirLstHdr
-,CfgDirLstFmt
-,CfgLibLstHdr
-,CfgLibLstFmt
-,BatchFlagPrompt
-,FileListBatchCommands
-,DownloadAttachedFileQ
-,FreeMinLeft
-,FreeMinToDeposit
-,EmailFilesNotAllowed
-,CantRunThatProgram
-,OnlyXminutesLeft
-,AreYouThere
-,NoAccessLevel
-,NoAccessAge
-,NoAccessBPS
-,NoAccessCredit
-,NoAccessNode
-,NoAccessUser
-,NoAccessExpire
-,NoAccessTimeLeft
-,NoAccessTimeUsed
-,NoAccessTime
-,NoAccessPCR
-,NoAccessUDR
-,NoAccessUDFR
-,NoAccessFlag1
-,NoAccessFlag2
-,NoAccessFlag3
-,NoAccessFlag4
-,NoAccessSex
-,NoAccessExempt
-,NoAccessRest
-,NoAccessDay
-,NoAccessGroup
-,NoAccessSub
-,NoAccessLib
-,NoAccessDir
-,NodeLstHdr
-,NodeActionMain
-,NodeActionReadMsgs
-,NodeActionReadMail
-,NodeActionSendMail
-,NodeActionReadTxt
-,NodeActionReadSentMail
-,NodeActionPostMsg
-,NodeActionAutoMsg
-,NodeActionXtrn
-,NodeActionDefaults
-,NodeActionXfer
-,NodeActionDLing
-,NodeActionULing
-,NodeActionBiXfer
-,NodeActionListFiles
-,NodeActionLoggingOn
-,NodeActionLocalChat
-,NodeActionMultiChat
-,NodeActionGuruChat
-,NodeActionChatSec
-,NodeActionSysopAct
-,NodeActionQWK
-,NodeActionPrivateChat
-,NodeActionPaging
-,NodeActionRetrieving
-,YN
-
-,TOTAL_TEXT };
-
-#endif
diff --git a/src/sbbs2/text_sec.c b/src/sbbs2/text_sec.c
deleted file mode 100644
index a63c268944..0000000000
--- a/src/sbbs2/text_sec.c
+++ /dev/null
@@ -1,200 +0,0 @@
-#line 1 "TEXT_SEC.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-
-#define MAX_TXTSECS 	500 /* Maximum number of text file sections 	*/
-#define MAX_TXTFILES    500 /* Maximum number of text files per section */
-
-/****************************************************************************/
-/* General Text File Section.                                               */
-/* Called from function main_sec                                            */
-/* Returns 1 if no text sections available, 0 otherwise.                    */
-/****************************************************************************/
-char text_sec()
-{
-	char	str[256],usrsec[MAX_TXTSECS],usrsecs,cursec,usemenu
-			,*file[MAX_TXTFILES],addpath[83],addstr[83],*buf,ch;
-	long	i,j;
-    long    l,length;
-    FILE    *stream;
-
-// ch=getage(useron.birth); Removed 05/19/96
-for(i=j=0;i<total_txtsecs;i++) {
-    if(!chk_ar(txtsec[i]->ar,useron))
-        continue;
-    usrsec[j++]=i; }
-usrsecs=j;
-if(!usrsecs) {
-    bputs(text[NoTextSections]);
-    return(1); }
-action=NODE_RTXT;
-while(online) {
-	sprintf(str,"%sMENU\\TEXT_SEC.*",text_dir);
-    if(fexist(str))
-        menu("TEXT_SEC");
-    else {
-        bputs(text[TextSectionLstHdr]);
-        for(i=0;i<usrsecs && !msgabort();i++) {
-            sprintf(str,text[TextSectionLstFmt],i+1,txtsec[usrsec[i]]->name);
-            if(i<9) outchar(SP);
-            bputs(str); } }
-    ASYNC;
-    mnemonics(text[WhichTextSection]);
-    if((cursec=getnum(usrsecs))<1)
-        break;
-    cursec--;
-    while(online) {
-		sprintf(str,"%sMENU\\TEXT%u.*",text_dir,cursec+1);
-        if(fexist(str)) {
-            sprintf(str,"TEXT%u",cursec+1);
-            menu(str);
-            usemenu=1; }
-        else {
-            bprintf(text[TextFilesLstHdr],txtsec[usrsec[cursec]]->name);
-            usemenu=0; }
-        sprintf(str,"%sTEXT\\%s.IXT",data_dir,txtsec[usrsec[cursec]]->code);
-        j=0;
-        if(fexist(str)) {
-			if((stream=fnopen((int *)&i,str,O_RDONLY))==NULL) {
-                errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-                return(0); }
-            while(!ferror(stream) && !msgabort()) {  /* file open too long */
-                if(!fgets(str,81,stream))
-                    break;
-                str[strlen(str)-2]=0;   /* chop off CRLF */
-                if((file[j]=MALLOC(strlen(str)+1))==NULL) {
-                    errormsg(WHERE,ERR_ALLOC,nulstr,strlen(str)+1);
-                    continue; }
-                strcpy(file[j],str);
-                fgets(str,81,stream);
-                if(!usemenu) bprintf(text[TextFilesLstFmt],j+1,str);
-                j++; }
-            fclose(stream); }
-        ASYNC;
-        if(SYSOP) {
-            strcpy(str,"QARE?");
-            mnemonics(text[WhichTextFileSysop]); }
-        else {
-            strcpy(str,"Q?");
-            mnemonics(text[WhichTextFile]); }
-        i=getkeys(str,j);
-		if(!(i&0x80000000L)) {		  /* no file number */
-            for(l=0;l<j;l++)
-                FREE(file[l]);
-            if((i=='E' || i=='R') && !j)
-                continue; }
-        if(i=='Q' || !i)
-            break;
-        if(i==-1) {  /* ctrl-c */
-            for(i=0;i<j;i++)
-                FREE(file[i]);
-            return(0); }
-        if(i=='?')  /* ? means re-list */
-            continue;
-        if(i=='A') {    /* Add text file */
-            if(j) {
-                bputs(text[AddTextFileBeforeWhich]);
-                i=getnum(j+1);
-                if(i<1)
-                    continue;
-                i--;    /* number of file entries to skip */ }
-            else
-                i=0;
-            bprintf(text[AddTextFilePath]
-                ,data_dir,txtsec[usrsec[cursec]]->code);
-            if(!getstr(addpath,80,K_UPPER))
-                continue;
-            strcat(addpath,crlf);
-            bputs(text[AddTextFileDesc]);
-            if(!getstr(addstr,74,0))
-                continue;
-            strcat(addstr,crlf);
-            sprintf(str,"%sTEXT\\%s.IXT"
-                ,data_dir,txtsec[usrsec[cursec]]->code);
-            if(i==j) {  /* just add to end */
-                if((i=nopen(str,O_WRONLY|O_APPEND|O_CREAT))==-1) {
-                    errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_APPEND|O_CREAT);
-                    return(0); }
-                write(i,addpath,strlen(addpath));
-                write(i,addstr,strlen(addstr));
-                close(i);
-                continue; }
-            j=i; /* inserting in middle of file */
-			if((stream=fnopen((int *)&i,str,O_RDWR))==NULL) {
-                errormsg(WHERE,ERR_OPEN,str,O_RDWR);
-                return(0); }
-            length=filelength(i);
-            for(i=0;i<j;i++) {  /* skip two lines for each entry */
-                fgets(tmp,81,stream);
-                fgets(tmp,81,stream); }
-            l=ftell(stream);
-            if((buf=(char *)MALLOC(length-l))==NULL) {
-                fclose(stream);
-                errormsg(WHERE,ERR_ALLOC,str,length-l);
-                return(0); }
-            fread(buf,1,length-l,stream);
-            fseek(stream,l,SEEK_SET); /* go back to where we need to insert */
-            fputs(addpath,stream);
-            fputs(addstr,stream);
-            fwrite(buf,1,length-l,stream);
-            fclose(stream);
-            FREE(buf);
-            continue; }
-        if(i=='R' || i=='E') {   /* Remove or Edit text file */
-            ch=i;
-            if(ch=='R')
-                bputs(text[RemoveWhichTextFile]);
-            else
-                bputs(text[EditWhichTextFile]);
-            i=getnum(j);
-            if(i<1)
-                continue;
-            sprintf(str,"%sTEXT\\%s.IXT"
-                ,data_dir,txtsec[usrsec[cursec]]->code);
-            j=i-1;
-			if((stream=fnopen((int *)&i,str,O_RDONLY))==NULL) {
-                errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-                return(0); }
-			// length=filelength(i); Removed 05/19/96
-            for(i=0;i<j;i++) {  /* skip two lines for each entry */
-                fgets(tmp,81,stream);
-                fgets(tmp,81,stream); }
-            fgets(addpath,81,stream);
-            truncsp(addpath);
-            fclose(stream);
-            if(!strchr(addpath,'\\'))
-                sprintf(tmp,"%sTEXT\\%s\\%s"
-                    ,data_dir,txtsec[usrsec[cursec]]->code,addpath);
-            else
-                strcpy(tmp,addpath);
-            if(ch=='R') {               /* Remove */
-                if(fexist(tmp)) {
-                    sprintf(str,text[DeleteTextFileQ],tmp);
-                    if(!noyes(str))
-                        if(remove(tmp)) errormsg(WHERE,ERR_REMOVE,tmp,0); }
-                sprintf(str,"%sTEXT\\%s.IXT"
-                    ,data_dir,txtsec[usrsec[cursec]]->code);
-				removeline(str,addpath,2,0); }
-            else {                      /* Edit */
-                strcpy(str,tmp);
-                editfile(str); }
-            continue; }
-		i=(i&~0x80000000L)-1;
-        if(!strchr(file[i],'\\'))
-            sprintf(str,"%sTEXT\\%s\\%s"
-                ,data_dir,txtsec[usrsec[cursec]]->code,file[i]);
-        else
-            strcpy(str,file[i]);
-        attr(LIGHTGRAY);
-        printfile(str,0);
-        sprintf(str,"Read Text File: %s",file[i]);
-        logline("T-",str);
-        pause();
-        sys_status&=~SS_ABORT;
-        for(i=0;i<j;i++)
-            FREE(file[i]); } }
-return(0);
-}
-
diff --git a/src/sbbs2/un_qwk.c b/src/sbbs2/un_qwk.c
deleted file mode 100644
index d8cfe2b6c7..0000000000
--- a/src/sbbs2/un_qwk.c
+++ /dev/null
@@ -1,200 +0,0 @@
-#line 1 "UN_QWK.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-#include "qwk.h"
-
-/****************************************************************************/
-/* Unpacks .QWK packet, hubnum is the number of the QWK net hub 			*/
-/****************************************************************************/
-void unpack_qwk(char *packet,uint hubnum)
-{
-	uchar	str[256],fname[128],block[128],ch;
-	int 	k,file;
-	uint	i,j,n,msgs,lastsub=INVALID_SUB;
-	long	l,size,misc;
-	time_t	t;
-    struct  ffblk ff;
-	FILE	*qwk;
-
-useron.number=1;
-getuserdat(&useron);
-console=CON_L_ECHO;
-i=external(cmdstr(qhub[hubnum]->unpack,packet,"*.*",NULL),EX_OUTL);
-if(i) {
-	errormsg(WHERE,ERR_EXEC,cmdstr(qhub[hubnum]->unpack,packet,"*.*",NULL),i);
-	return; }
-sprintf(str,"%sMESSAGES.DAT",temp_dir);
-if(!fexist(str)) {
-	sprintf(str,"%s.QWK doesn't contain MESSAGES.DAT",qhub[hubnum]->id);
-	errorlog(str);
-	return; }
-if((qwk=fnopen(&file,str,O_RDONLY))==NULL) {
-	errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-	return; }
-size=filelength(file);
-/********************/
-/* Process messages */
-/********************/
-bputs(text[QWKUnpacking]);
-
-for(l=128;l<size;l+=i*128) {
-	fseek(qwk,l,SEEK_SET);
-	fread(block,128,1,qwk);
-	sprintf(tmp,"%.6s",block+116);
-	i=atoi(tmp);  /* i = number of 128 byte records */
-	if(i<2) {
-		i=1;
-		continue; }
-	/*********************************/
-	/* public message on a sub-board */
-	/*********************************/
-	n=(uint)block[123]|(((uint)block[124])<<8);  /* conference number */
-
-	if(!n) {		/* NETMAIL */
-		sprintf(str,"%25.25s",block+21);
-		truncsp(str);
-		if(!stricmp(str,"NETMAIL")) {  /* QWK to FidoNet NetMail */
-			qwktonetmail(qwk,block,NULL,hubnum+1);
-            continue; }
-		if(strchr(str,'@')) {
-			qwktonetmail(qwk,block,str,hubnum+1);
-            continue; }
-		j=atoi(str);
-		if(j && j>lastuser())
-			j=0;
-		if(!j && !stricmp(str,"SYSOP"))
-			j=1;
-		if(!j)
-			j=matchuser(str);
-		if(!j && !stricmp(str,sys_id))
-			j=1;
-		if(!j) {
-			bputs(text[UnknownUser]);
-            continue; }
-
-		getuserrec(j,U_MISC,8,str);
-		misc=ahtoul(str);
-		if(misc&NETMAIL && sys_misc&SM_FWDTONET) {
-			getuserrec(j,U_NETMAIL,LEN_NETMAIL,str);
-			qwktonetmail(qwk,block,str,hubnum+1);
-            continue; }
-
-		smb_stack(&smb,SMB_STACK_PUSH);
-		sprintf(smb.file,"%sMAIL",data_dir);
-		smb.retry_time=smb_retry_time;
-		if((k=smb_open(&smb))!=0) {
-			errormsg(WHERE,ERR_OPEN,smb.file,k);
-			smb_stack(&smb,SMB_STACK_POP);
-			continue; }
-		if(!filelength(fileno(smb.shd_fp))) {
-			smb.status.max_crcs=mail_maxcrcs;
-			smb.status.max_msgs=MAX_SYSMAIL;
-			smb.status.max_age=mail_maxage;
-			smb.status.attr=SMB_EMAIL;
-			if((k=smb_create(&smb))!=0) {
-				smb_close(&smb);
-				errormsg(WHERE,ERR_CREATE,smb.file,k);
-				smb_stack(&smb,SMB_STACK_POP);
-				continue; } }
-		if((k=smb_locksmbhdr(&smb))!=0) {
-			smb_close(&smb);
-			errormsg(WHERE,ERR_LOCK,smb.file,k);
-			smb_stack(&smb,SMB_STACK_POP);
-			continue; }
-		if((k=smb_getstatus(&smb))!=0) {
-			smb_close(&smb);
-			errormsg(WHERE,ERR_READ,smb.file,k);
-			smb_stack(&smb,SMB_STACK_POP);
-            continue; }
-		smb_unlocksmbhdr(&smb);
-		qwktomsg(qwk,block,hubnum+1,INVALID_SUB,j);
-		smb_close(&smb);
-		smb_stack(&smb,SMB_STACK_POP);
-		sprintf(tmp,"%-25.25s",block+46);
-		truncsp(tmp);
-		sprintf(str,text[UserSentYouMail],tmp);
-		putsmsg(j,str);
-		continue;
-		}
-
-	for(j=0;j<qhub[hubnum]->subs;j++)
-		if(qhub[hubnum]->conf[j]==n)
-			break;
-	if(j>=qhub[hubnum]->subs)	/* ignore messages for subs not in config */
-		continue;
-
-	j=qhub[hubnum]->sub[j];
-
-	if(j!=lastsub) {
-		if(lastsub!=INVALID_SUB)
-			smb_close(&smb);
-		lastsub=INVALID_SUB;
-		sprintf(smb.file,"%s%s",sub[j]->data_dir,sub[j]->code);
-		smb.retry_time=smb_retry_time;
-		if((k=smb_open(&smb))!=0) {
-			errormsg(WHERE,ERR_OPEN,smb.file,k);
-			continue; }
-		if(!filelength(fileno(smb.shd_fp))) {
-			smb.status.max_crcs=sub[j]->maxcrcs;
-			smb.status.max_msgs=sub[j]->maxmsgs;
-			smb.status.max_age=sub[j]->maxage;
-			smb.status.attr=sub[j]->misc&SUB_HYPER ? SMB_HYPERALLOC :0;
-			if((k=smb_create(&smb))!=0) {
-				smb_close(&smb);
-				errormsg(WHERE,ERR_CREATE,smb.file,k);
-				continue; } }
-		if((k=smb_locksmbhdr(&smb))!=0) {
-			smb_close(&smb);
-			errormsg(WHERE,ERR_LOCK,smb.file,k);
-			continue; }
-		if((k=smb_getstatus(&smb))!=0) {
-			smb_close(&smb);
-			errormsg(WHERE,ERR_READ,smb.file,k);
-			continue; }
-		smb_unlocksmbhdr(&smb);
-		lastsub=j; }
-
-	if(!qwktomsg(qwk,block,hubnum+1,j,0))
-		continue;
-
-	if(sub[j]->misc&SUB_FIDO && sub[j]->echomail_sem[0]) /* update semaphore */
-		if((file=nopen(sub[j]->echomail_sem,O_WRONLY|O_CREAT|O_TRUNC))!=-1)
-			close(file);
-	bprintf(text[Posted],grp[sub[j]->grp]->sname,sub[j]->lname); }
-
-update_qwkroute(NULL);		/* Write ROUTE.DAT */
-
-fclose(qwk);
-if(lastsub!=INVALID_SUB)
-	smb_close(&smb);
-
-delfiles(temp_dir,"*.NDX");
-sprintf(str,"%sMESSAGES.DAT",temp_dir);
-remove(str);
-sprintf(str,"%sDOOR.ID",temp_dir);
-remove(str);
-sprintf(str,"%sCONTROL.DAT",temp_dir);
-remove(str);
-sprintf(str,"%sNETFLAGS.DAT",temp_dir);
-remove(str);
-
-sprintf(str,"%s*.*",temp_dir);
-i=findfirst(str,&ff,0);
-if(!i) {
-	sprintf(str,"%sQNET\\%s.IN",data_dir,qhub[hubnum]->id);
-	mkdir(str); }
-while(!i) {
-	sprintf(str,"%s%s",temp_dir,ff.ff_name);
-	sprintf(fname,"%sQNET\\%s.IN\\%s",data_dir,qhub[hubnum]->id,ff.ff_name);
-	mv(str,fname,1);
-	sprintf(str,text[ReceivedFileViaQWK],ff.ff_name,qhub[hubnum]->id);
-	putsmsg(1,str);
-	i=findnext(&ff); }
-
-bputs(text[QWKUnpacked]);
-CRLF;
-remove(packet);
-
-}
diff --git a/src/sbbs2/un_rep.c b/src/sbbs2/un_rep.c
deleted file mode 100644
index c26bc8ca34..0000000000
--- a/src/sbbs2/un_rep.c
+++ /dev/null
@@ -1,382 +0,0 @@
-#line 1 "UN_REP.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-#include "qwk.h"
-
-/****************************************************************************/
-/* Unpacks .REP packet, 'repname' is the path and filename of the packet    */
-/****************************************************************************/
-void unpack_rep()
-{
-	uchar	ch,str[256],fname[128],block[128]
-			,*AttemptedToUploadREPpacket="Attempted to upload REP packet";
-	int 	file;
-	uint	h,i,j,k,msgs,lastsub=INVALID_SUB;
-	ulong	n;
-	long	l,size,misc,crc;
-	node_t	node;
-	time_t	t;
-	file_t	f;
-    struct  ffblk ff;
-	FILE	*rep;
-
-sprintf(str,"%s%s.REP",temp_dir,sys_id);
-if(!fexist(str)) {
-	bputs(text[QWKReplyNotReceived]);
-	logline("U!",AttemptedToUploadREPpacket);
-	logline(nulstr,"REP file not received");
-	return; }
-for(k=0;k<total_fextrs;k++)
-	if(!stricmp(fextr[k]->ext,useron.tmpext) && chk_ar(fextr[k]->ar,useron))
-		break;
-if(k>=total_fextrs)
-	k=0;
-i=external(cmdstr(fextr[k]->cmd,str,"*.*",NULL),EX_OUTL|EX_OUTR);
-if(i) {
-	bputs(text[QWKExtractionFailed]);
-	logline("U!",AttemptedToUploadREPpacket);
-	logline(nulstr,"Extraction failed");
-	return; }
-sprintf(str,"%s%s.MSG",temp_dir,sys_id);
-if(!fexist(str)) {
-	bputs(text[QWKReplyNotReceived]);
-	logline("U!",AttemptedToUploadREPpacket);
-	logline(nulstr,"MSG file not received");
-	return; }
-if((rep=fnopen(&file,str,O_RDONLY))==NULL) {
-	errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-	return; }
-size=filelength(file);
-fread(block,128,1,rep);
-if(strncmpi(block,sys_id,strlen(sys_id))) {
-	fclose(rep);
-	bputs(text[QWKReplyNotReceived]);
-	logline("U!",AttemptedToUploadREPpacket);
-	logline(nulstr,"Incorrect BBSID");
-	return; }
-logline("U+","Uploaded REP packet");
-/********************/
-/* Process messages */
-/********************/
-bputs(text[QWKUnpacking]);
-
-for(l=128;l<size;l+=i*128) {
-	lncntr=0;					/* defeat pause */
-	fseek(rep,l,SEEK_SET);
-	fread(block,128,1,rep);
-	sprintf(tmp,"%.6s",block+116);
-	i=atoi(tmp);  /* i = number of 128 byte records */
-	if(i<2) {
-		sprintf(tmp,"%s blocks",str);
-		errormsg(WHERE,ERR_CHK,tmp,i);
-		i=1;
-		continue; }
-	if(atoi(block+1)==0) {					/**********/
-		if(useron.rest&FLAG('E')) {         /* E-mail */
-			bputs(text[R_Email]);			/**********/
-			continue; }
-
-        sprintf(str,"%25.25s",block+21);
-		truncsp(str);
-		if(!stricmp(str,"NETMAIL")) {  /* QWK to FidoNet NetMail */
-			qwktonetmail(rep,block,NULL,0);
-			continue; }
-		if(strchr(str,'@')) {
-			qwktonetmail(rep,block,str,0);
-			continue; }
-		if(!stricmp(str,"SBBS")) {    /* to SBBS, config stuff */
-			qwkcfgline(block+71,INVALID_SUB);
-            continue; }
-
-		if(useron.etoday>=level_emailperday[useron.level]
-			&& !(useron.rest&FLAG('Q'))) {
-			bputs(text[TooManyEmailsToday]);
-			continue; }
-		j=atoi(str);
-		if(j && j>lastuser())
-			j=0;
-		if(!j &&
-			(!stricmp(str,"SYSOP")
-			|| !stricmp(str,sys_id)
-			|| !stricmp(str,sys_op)))
-			j=1;
-		if(!j)
-			j=matchuser(str);
-		if(!j) {
-			bputs(text[UnknownUser]);
-			continue; }
-		if(j==1 && useron.rest&FLAG('S')) {
-			bprintf(text[R_Feedback],sys_op);
-			continue; }
-
-		getuserrec(j,U_MISC,8,str);
-		misc=ahtoul(str);
-		if(misc&NETMAIL && sys_misc&SM_FWDTONET) {
-			getuserrec(j,U_NETMAIL,LEN_NETMAIL,str);
-			qwktonetmail(rep,block,str,0);
-			continue; }
-
-		sprintf(smb.file,"%sMAIL",data_dir);
-		smb.retry_time=smb_retry_time;
-
-		if(lastsub!=INVALID_SUB) {
-			smb_close(&smb);
-			lastsub=INVALID_SUB; }
-
-		if((k=smb_open(&smb))!=0) {
-			errormsg(WHERE,ERR_OPEN,smb.file,k);
-			continue; }
-
-		if(!filelength(fileno(smb.shd_fp))) {
-			smb.status.max_crcs=mail_maxcrcs;
-			smb.status.max_msgs=MAX_SYSMAIL;
-			smb.status.max_age=mail_maxage;
-			smb.status.attr=SMB_EMAIL;
-			if((k=smb_create(&smb))!=0) {
-				smb_close(&smb);
-				errormsg(WHERE,ERR_CREATE,smb.file,k);
-				continue; } }
-
-		if((k=smb_locksmbhdr(&smb))!=0) {
-			smb_close(&smb);
-			errormsg(WHERE,ERR_LOCK,smb.file,k);
-			continue; }
-
-		if((k=smb_getstatus(&smb))!=0) {
-			smb_close(&smb);
-			errormsg(WHERE,ERR_READ,smb.file,k);
-			continue; }
-
-		smb_unlocksmbhdr(&smb);
-
-		if(!qwktomsg(rep,block,0,INVALID_SUB,j)) {
-			smb_close(&smb);
-			continue; }
-		smb_close(&smb);
-
-		if(j==1) {
-			useron.fbacks++;
-			logon_fbacks++;
-			putuserrec(useron.number,U_FBACKS,5
-				,itoa(useron.fbacks,tmp,10)); }
-		else {
-			useron.emails++;
-			logon_emails++;
-			putuserrec(useron.number,U_EMAILS,5
-				,itoa(useron.emails,tmp,10)); }
-		useron.etoday++;
-		putuserrec(useron.number,U_ETODAY,5
-			,itoa(useron.etoday,tmp,10));
-		bprintf(text[Emailed],username(j,tmp),j);
-		sprintf(str,"E-mailed %s #%d",username(j,tmp),j);
-		logline("E+",str);
-		if(useron.rest&FLAG('Q')) {
-			sprintf(tmp,"%-25.25s",block+46);
-			truncsp(tmp); }
-		else
-			strcpy(tmp,useron.alias);
-		for(k=1;k<=sys_nodes;k++) { /* Tell user, if online */
-			getnodedat(k,&node,0);
-			if(node.useron==j && !(node.misc&NODE_POFF)
-				&& (node.status==NODE_INUSE
-				|| node.status==NODE_QUIET)) {
-				sprintf(str,text[EmailNodeMsg]
-					,node_num,tmp);
-				putnmsg(k,str);
-				break; } }
-		if(k>sys_nodes) {
-			sprintf(str,text[UserSentYouMail],tmp);
-			putsmsg(j,str); } }    /* end of email */
-
-			/**************************/
-	else {	/* message on a sub-board */
-			/**************************/
-		n=atol((char *)block+1); /* conference number */
-		for(j=0;j<usrgrps;j++) {
-			for(k=0;k<usrsubs[j];k++)
-				if(sub[usrsub[j][k]]->qwkconf==n)
-					break;
-			if(k<usrsubs[j])
-				break; }
-
-		if(j>=usrgrps) {
-			if(n<1000) {			 /* version 1 method, start at 101 */
-				j=n/100;
-				k=n-(j*100); }
-			else {					 /* version 2 method, start at 1001 */
-				j=n/1000;
-				k=n-(j*1000); }
-			j--;	/* j is group */
-			k--;	/* k is sub */
-			if(j>=usrgrps || k>=usrsubs[j]) {
-				bprintf(text[QWKInvalidConferenceN],n);
-				sprintf(str,"Invalid conference number %d",n);
-				logline("P!",str);
-				continue; } }
-
-		n=usrsub[j][k];
-
-		/* if posting, add to new-scan config for QWKnet nodes automatically */
-        if(useron.rest&FLAG('Q'))
-			sub[n]->misc|=SUB_NSCAN;
-
-		sprintf(str,"%-25.25s","SBBS");
-		if(!strnicmp((char *)block+21,str,25)) {	/* to SBBS, config stuff */
-			qwkcfgline((char *)block+71,n);
-			continue; }
-
-		if(!SYSOP && sub[n]->misc&SUB_QNET) {	/* QWK Netted */
-			sprintf(str,"%-25.25s","DROP");         /* Drop from new-scan? */
-			if(!strnicmp((char *)block+71,str,25))	/* don't allow post */
-				continue;
-			sprintf(str,"%-25.25s","ADD");          /* Add to new-scan? */
-			if(!strnicmp((char *)block+71,str,25))	/* don't allow post */
-				continue; }
-
-		if(useron.rest&FLAG('Q') && !(sub[n]->misc&SUB_QNET)) {
-			bputs(text[CantPostOnSub]);
-			logline("P!","Attempted to post on non-QWKnet sub");
-			continue; }
-
-        if(useron.rest&FLAG('P')) {
-            bputs(text[R_Post]);
-			logline("P!","Post attempted");
-            continue; }
-
-		if(useron.ptoday>=level_postsperday[useron.level]
-			&& !(useron.rest&FLAG('Q'))) {
-			bputs(text[TooManyPostsToday]);
-			continue; }
-
-		if(useron.rest&FLAG('N')
-			&& sub[n]->misc&(SUB_FIDO|SUB_PNET|SUB_QNET|SUB_INET)) {
-			bputs(text[CantPostOnSub]);
-			logline("P!","Networked post attempted");
-			continue; }
-
-		if(!chk_ar(sub[n]->post_ar,useron)) {
-			bputs(text[CantPostOnSub]);
-			logline("P!","Post attempted");
-			continue; }
-
-		if((block[0]=='*' || block[0]=='+')
-			&& !(sub[n]->misc&SUB_PRIV)) {
-			bputs(text[PrivatePostsNotAllowed]);
-			logline("P!","Private post attempt");
-			continue; }
-
-		if(block[0]=='*' || block[0]=='+'           /* Private post */
-			|| sub[n]->misc&SUB_PONLY) {
-			sprintf(str,"%-25.25s",nulstr);
-			sprintf(tmp,"%-25.25s","ALL");
-			if(!strnicmp((char *)block+21,str,25)
-				|| !strnicmp((char *)block+21,tmp,25)) {	/* to blank */
-				bputs(text[NoToUser]);						/* or all */
-				continue; } }
-
-		if(!SYSOP && !(useron.rest&FLAG('Q'))) {
-			sprintf(str,"%-25.25s","SYSOP");
-			if(!strnicmp((char *)block+21,str,25)) {
-				sprintf(str,"%-25.25s",username(1,tmp));
-				memcpy((char *)block+21,str,25); } }	/* change from sysop */
-														/* to user #1 */
-
-#if 0	/* TWIT FILTER */
-		sprintf(str,"%25.25s",block+46);  /* From user */
-		truncsp(str);
-
-		if(!stricmp(str,"Lee Matherne")
-			|| !stricmp(str,"Big Joe")
-			) {
-			bprintf(text[Posted],grp[sub[n]->grp]->sname
-				,sub[n]->lname);
-			continue; }
-#endif
-
-		if(n!=lastsub) {
-			if(lastsub!=INVALID_SUB)
-				smb_close(&smb);
-			lastsub=INVALID_SUB;
-			sprintf(smb.file,"%s%s",sub[n]->data_dir,sub[n]->code);
-			smb.retry_time=smb_retry_time;
-			if((j=smb_open(&smb))!=0) {
-				errormsg(WHERE,ERR_OPEN,smb.file,j);
-				continue; }
-
-			if(!filelength(fileno(smb.shd_fp))) {
-				smb.status.max_crcs=sub[n]->maxcrcs;
-				smb.status.max_msgs=sub[n]->maxmsgs;
-				smb.status.max_age=sub[n]->maxage;
-				smb.status.attr=sub[n]->misc&SUB_HYPER ? SMB_HYPERALLOC:0;
-				if((j=smb_create(&smb))!=0) {
-					smb_close(&smb);
-					lastsub=INVALID_SUB;
-					errormsg(WHERE,ERR_CREATE,smb.file,j);
-					continue; } }
-
-			if((j=smb_locksmbhdr(&smb))!=0) {
-				smb_close(&smb);
-				lastsub=INVALID_SUB;
-				errormsg(WHERE,ERR_LOCK,smb.file,j);
-				continue; }
-			if((j=smb_getstatus(&smb))!=0) {
-				smb_close(&smb);
-				lastsub=INVALID_SUB;
-				errormsg(WHERE,ERR_READ,smb.file,j);
-				continue; }
-			smb_unlocksmbhdr(&smb);
-			lastsub=n; }
-
-		if(!qwktomsg(rep,block,0,n,0))
-			continue;
-
-		useron.ptoday++;
-		useron.posts++;
-//		  if(!(useron.rest&FLAG('Q')))
-		logon_posts++;
-		putuserrec(useron.number,U_POSTS,5,itoa(useron.posts,str,10));
-		putuserrec(useron.number,U_PTODAY,5,itoa(useron.ptoday,str,10));
-		bprintf(text[Posted],grp[sub[n]->grp]->sname
-			,sub[n]->lname);
-		sprintf(str,"Posted on %s %s",grp[sub[n]->grp]->sname
-			,sub[n]->lname);
-		if(sub[n]->misc&SUB_FIDO && sub[n]->echomail_sem[0])  /* semaphore */
-			if((file=nopen(sub[n]->echomail_sem,O_WRONLY|O_CREAT|O_TRUNC))!=-1)
-				close(file);
-        logline("P+",str); } }         /* end of public message */
-
-update_qwkroute(NULL);			/* Write ROUTE.DAT */
-
-if(lastsub!=INVALID_SUB)
-	smb_close(&smb);
-fclose(rep);
-
-if(useron.rest&FLAG('Q')) {             /* QWK Net Node */
-	sprintf(str,"%s%s.MSG",temp_dir,sys_id);
-	remove(str);
-	sprintf(str,"%s%s.REP",temp_dir,sys_id);
-    remove(str);
-
-	sprintf(str,"%s*.*",temp_dir);
-	i=findfirst(str,&ff,0);
-	if(!i) {
-		sprintf(str,"%sQNET\\%s.IN",data_dir,useron.alias);
-		mkdir(str); }
-	while(!i) { 						/* Extra files */
-		sprintf(str,"%s%s",temp_dir,ff.ff_name);
-		sprintf(fname,"%sQNET\\%s.IN\\%s",data_dir,useron.alias,ff.ff_name);
-		mv(str,fname,1);
-		sprintf(str,text[ReceivedFileViaQWK],ff.ff_name,useron.alias);
-		putsmsg(1,str);
-		i=findnext(&ff); } }
-
-bputs(text[QWKUnpacked]);
-CRLF;
-/**********************************************/
-/* Hang-up now if that's what the user wanted */
-/**********************************************/
-autohangup();
-
-}
diff --git a/src/sbbs2/useredit.c b/src/sbbs2/useredit.c
deleted file mode 100644
index 0b3c4fbd9f..0000000000
--- a/src/sbbs2/useredit.c
+++ /dev/null
@@ -1,966 +0,0 @@
-#line 1 "USEREDIT.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/*******************************************************************/
-/* The function useredit(), and functions that are closely related */
-/*******************************************************************/
-
-#include "sbbs.h"
-
-#define SEARCH_TXT 0
-#define SEARCH_ARS 1
-
-int searchup(char *search,int usernum);
-int searchdn(char *search,int usernum);
-
-/****************************************************************************/
-/* Edits user data. Can only edit users with a Main Security Level less 	*/
-/* than or equal to the current user's Main Security Level					*/
-/* Called from functions waitforcall, main_sec, xfer_sec and inkey			*/
-/****************************************************************************/
-void useredit(int usernumber, int local)
-{
-	uchar str[256],tmp2[256],tmp3[256],c,stype=SEARCH_TXT;
-	uchar search[256]={""},artxt[128]={""},*ar=NULL;
-	int i,j,k;
-	long l;
-	user_t user;
-
-if(online==ON_REMOTE && console&(CON_R_ECHO|CON_R_INPUT) && !chksyspass(local))
-	return;
-if(online==ON_LOCAL) {
-	if(!(sys_misc&SM_L_SYSOP))
-		return;
-	if(node_misc&NM_SYSPW && !chksyspass(local))
-		return; }
-if(usernumber)
-	user.number=usernumber;
-else
-	user.number=useron.number;
-action=NODE_SYSP;
-if(sys_status&SS_INUEDIT)
-	return;
-sys_status|=SS_INUEDIT;
-while(online) {
-	CLS;
-	attr(LIGHTGRAY);
-	getuserdat(&user);
-	if(!user.number) {
-		user.number=1;
-		getuserdat(&user);
-		if(!user.number) {
-			bputs(text[NoUserData]);
-			getkey(0);
-			sys_status&=~SS_INUEDIT;
-			return; } }
-	unixtodstr(time(NULL),str);
-	unixtodstr(user.laston,tmp);
-	if(strcmp(str,tmp) && user.ltoday) {
-		user.ltoday=user.ttoday=user.ptoday=user.etoday=user.textra=0;
-		user.freecdt=level_freecdtperday[user.level];
-		putuserdat(user); }	/* Leave alone */
-	if(user.misc&DELETED)
-		bputs(text[Deleted]);
-	else if(user.misc&INACTIVE)
-		bputs(text[Inactive]);
-	bprintf(text[UeditAliasPassword]
-		,user.alias, (user.level>useron.level && console&CON_R_ECHO)
-		|| !(sys_misc&SM_ECHO_PW) ? "XXXXXXXX" : user.pass
-		, unixtodstr(user.pwmod,tmp));
-	bprintf(text[UeditRealNamePhone]
-		,user.level>useron.level && console&CON_R_ECHO
-		? "XXXXXXXX" : user.name
-		,user.level>useron.level && console&CON_R_ECHO
-		? "XXX-XXX-XXXX" : user.phone);
-	bprintf(text[UeditAddressBirthday]
-		,user.address,getage(user.birth),user.sex,user.birth);
-	bprintf(text[UeditLocationZipcode],user.location,user.zipcode);
-	bprintf(text[UeditNoteHandle],user.note,user.handle);
-	bprintf(text[UeditComputerModem],user.comp,user.modem);
-	sprintf(str,"%sUSER\\%4.4u.MSG",data_dir,user.number);
-	i=fexist(str);
-	if(user.comment[0] || i)
-		bprintf(text[UeditCommentLine],i ? '+' : SP
-			,user.comment);
-	else
-		CRLF;
-	unixtodos(user.laston,&date,&curtime);
-	bprintf(text[UserDates]
-		,unixtodstr(user.firston,str),unixtodstr(user.expire,tmp)
-		,unixtodstr(user.laston,tmp2),curtime.ti_hour,curtime.ti_min);
-	bprintf(text[UserTimes]
-		,user.timeon,user.ttoday,level_timeperday[user.level]
-		,user.tlast,level_timepercall[user.level],user.textra);
-	if(user.posts)
-		i=user.logons/user.posts;
-	else
-		i=0;
-	bprintf(text[UserLogons]
-		,user.logons,user.ltoday,level_callsperday[user.level],user.posts
-		,i ? 100/i : user.posts>user.logons ? 100 : 0
-		,user.ptoday);
-	bprintf(text[UserEmails]
-		,user.emails,user.fbacks,getmail(user.number,0),user.etoday);
-	if(user.misc&NETMAIL)
-		bprintf(text[UserNetMail],user.netmail);
-	else
-		CRLF;
-	bprintf(text[UserUploads],ultoac(user.ulb,tmp),user.uls);
-	if(user.leech)
-		sprintf(str,text[UserLeech],user.leech);
-	else
-		str[0]=0;
-	bprintf(text[UserDownloads],ultoac(user.dlb,tmp),user.dls,str);
-	bprintf(text[UserCredits],ultoac(user.cdt,tmp)
-		,ultoac(user.freecdt,tmp2),ultoac(level_freecdtperday[user.level],str));
-	bprintf(text[UserMinutes],ultoac(user.min,tmp));
-	bprintf(text[UeditSecLevel],user.level);
-	bprintf(text[UeditFlags],ltoaf(user.flags1,tmp),ltoaf(user.flags3,tmp2)
-		,ltoaf(user.flags2,tmp3),ltoaf(user.flags4,str));
-	bprintf(text[UeditExempts],ltoaf(user.exempt,tmp),ltoaf(user.rest,tmp2));
-	l=lastuser();
-	ASYNC;
-	if(lncntr>=rows-2)
-        lncntr=0;
-	bprintf(text[UeditPrompt],user.number,l);
-	if(user.level>useron.level && console&CON_R_INPUT)
-		strcpy(str,"QG[]?/{},");
-	else
-		strcpy(str,"ABCDEFGHIJKLMNOPQRSTUVWXYZ+[]?/{}~*$#");
-	l=getkeys(str,l);
-	if(l&0x80000000L) {
-		user.number=l&~0x80000000L;
-		continue; }
-	switch(l) {
-		case 'A':
-			bputs(text[EnterYourAlias]);
-			getstr(user.alias,LEN_ALIAS,K_LINE|K_EDIT|K_AUTODEL);
-			putuserrec(user.number,U_ALIAS,LEN_ALIAS,user.alias);
-			if(!(user.misc&DELETED))
-				putusername(user.number,user.alias);
-			bputs(text[EnterYourHandle]);
-			getstr(user.handle,LEN_HANDLE,K_LINE|K_EDIT|K_AUTODEL);
-			putuserrec(user.number,U_HANDLE,LEN_HANDLE,user.handle);
-			break;
-		case 'B':
-			bputs(text[EnterYourBirthday]);
-			gettmplt(user.birth,"nn/nn/nn",K_LINE|K_EDIT|K_AUTODEL);
-			putuserrec(user.number,U_BIRTH,LEN_BIRTH,user.birth);
-			break;
-		case 'C':
-			bputs(text[EnterYourComputer]);
-			getstr(user.comp,LEN_COMP,K_LINE|K_EDIT|K_AUTODEL);
-			putuserrec(user.number,U_COMP,LEN_COMP,user.comp);
-			break;
-		case 'D':
-			if(user.misc&DELETED) {
-				if(!noyes(text[UeditRestoreQ])) {
-					putuserrec(user.number,U_MISC,8
-						,ultoa(user.misc&~DELETED,str,16));
-					putusername(user.number,user.alias); }
-				break; }
-			if(user.misc&INACTIVE) {
-				if(!noyes(text[UeditActivateQ]))
-					putuserrec(user.number,U_MISC,8
-						,ultoa(user.misc&~INACTIVE,str,16));
-				break; }
-			if(!noyes(text[UeditDeleteQ])) {
-				getsmsg(user.number);
-				if(getmail(user.number,0)) {
-					if(yesno(text[UeditReadUserMailWQ]))
-						readmail(user.number,MAIL_YOUR); }
-				if(getmail(user.number,1)) {
-					if(yesno(text[UeditReadUserMailSQ]))
-						readmail(user.number,MAIL_SENT); }
-				putuserrec(user.number,U_MISC,8
-					,ultoa(user.misc|DELETED,str,16));
-				putusername(user.number,nulstr);
-				break; }
-			if(!noyes(text[UeditDeactivateUserQ])) {
-				if(getmail(user.number,0)) {
-					if(yesno(text[UeditReadUserMailWQ]))
-						readmail(user.number,MAIL_YOUR); }
-				if(getmail(user.number,1)) {
-					if(yesno(text[UeditReadUserMailSQ]))
-						readmail(user.number,MAIL_SENT); }
-				putuserrec(user.number,U_MISC,8
-					,ultoa(user.misc|INACTIVE,str,16));
-				break; }
-			break;
-		case 'E':
-			if(!yesno(text[ChangeExemptionQ]))
-				break;
-			while(online) {
-				bprintf(text[FlagEditing],ltoaf(user.exempt,tmp));
-				c=getkeys("ABCDEFGHIJKLMNOPQRSTUVWXYZ?\r",0);
-                if(sys_status&SS_ABORT)
-					break;
-				if(c==CR) break;
-				if(c=='?') {
-					menu("EXEMPT");
-					continue; }
-				if(!(useron.exempt&FLAG(c)) && console&CON_R_INPUT)
-					continue;
-                user.exempt^=FLAG(c);
-				putuserrec(user.number,U_EXEMPT,8,ultoa(user.exempt,tmp,16)); }
-			break;
-		case 'F':
-			i=1;
-			while(online) {
-				bprintf("\r\nFlag Set #%d\r\n",i);
-				switch(i) {
-					case 1:
-						bprintf(text[FlagEditing],ltoaf(user.flags1,tmp));
-						break;
-					case 2:
-						bprintf(text[FlagEditing],ltoaf(user.flags2,tmp));
-                        break;
-					case 3:
-						bprintf(text[FlagEditing],ltoaf(user.flags3,tmp));
-                        break;
-					case 4:
-						bprintf(text[FlagEditing],ltoaf(user.flags4,tmp));
-						break; }
-				c=getkeys("ABCDEFGHIJKLMNOPQRSTUVWXYZ?1234\r",0);
-				if(sys_status&SS_ABORT)
-					break;
-				if(c==CR) break;
-				if(c=='?') {
-					sprintf(str,"FLAGS%d",i);
-					menu(str);
-					continue; }
-				if(isdigit(c)) {
-					i=c&0xf;
-					continue; }
-				if(console & CON_R_INPUT)
-					switch(i) {
-						case 1:
-							if(!(useron.flags1&FLAG(c)))
-								continue;
-							break;
-						case 2:
-							if(!(useron.flags2&FLAG(c)))
-								continue;
-                            break;
-						case 3:
-							if(!(useron.flags3&FLAG(c)))
-								continue;
-                            break;
-						case 4:
-							if(!(useron.flags4&FLAG(c)))
-								continue;
-							break; }
-				switch(i) {
-					case 1:
-						user.flags1^=FLAG(c);
-						putuserrec(user.number,U_FLAGS1,8
-							,ultoa(user.flags1,tmp,16));
-						break;
-					case 2:
-						user.flags2^=FLAG(c);
-						putuserrec(user.number,U_FLAGS2,8
-							,ultoa(user.flags2,tmp,16));
-						break;
-					case 3:
-						user.flags3^=FLAG(c);
-						putuserrec(user.number,U_FLAGS3,8
-							,ultoa(user.flags3,tmp,16));
-                        break;
-					case 4:
-						user.flags4^=FLAG(c);
-						putuserrec(user.number,U_FLAGS4,8
-							,ultoa(user.flags4,tmp,16));
-						break; } }
-			break;
-		case 'G':
-			bputs(text[GoToUser]);
-			if(getstr(str,LEN_ALIAS,K_UPPER|K_LINE)) {
-				if(isdigit(str[0])) {
-					i=atoi(str);
-					if(i>lastuser())
-						break;
-					if(i) user.number=i; }
-				else {
-					i=finduser(str);
-					if(i) user.number=i; } }
-			break;
-		case 'H': /* edit user's information file */
-			attr(LIGHTGRAY);
-            sprintf(str,"%sUSER\\%4.4u.MSG",data_dir,user.number);
-            editfile(str);
-            break;
-		case 'I':
-			maindflts(user);
-			break;
-		case 'J':   /* Edit Minutes */
-			bputs(text[UeditMinutes]);
-			ultoa(user.min,str,10);
-            if(getstr(str,10,K_NUMBER|K_LINE))
-				putuserrec(user.number,U_MIN,10,str);
-            break;
-		case 'K':	/* date changes */
-			bputs(text[UeditLastOn]);
-			unixtodstr(user.laston,str);
-			gettmplt(str,"nn/nn/nn",K_LINE|K_EDIT);
-			if(sys_status&SS_ABORT)
-				break;
-			user.laston=dstrtounix(str);
-			putuserrec(user.number,U_LASTON,8,ultoa(user.laston,tmp,16));
-			bputs(text[UeditFirstOn]);
-			unixtodstr(user.firston,str);
-			gettmplt(str,"nn/nn/nn",K_LINE|K_EDIT);
-			if(sys_status&SS_ABORT)
-				break;
-			user.firston=dstrtounix(str);
-			putuserrec(user.number,U_FIRSTON,8,ultoa(user.firston,tmp,16));
-			bputs(text[UeditExpire]);
-			unixtodstr(user.expire,str);
-			gettmplt(str,"nn/nn/nn",K_LINE|K_EDIT);
-			if(sys_status&SS_ABORT)
-				break;
-			user.expire=dstrtounix(str);
-			putuserrec(user.number,U_EXPIRE,8,ultoa(user.expire,tmp,16));
-			bputs(text[UeditPwModDate]);
-			unixtodstr(user.pwmod,str);
-			gettmplt(str,"nn/nn/nn",K_LINE|K_EDIT);
-			if(sys_status&SS_ABORT)
-				break;
-			user.pwmod=dstrtounix(str);
-			putuserrec(user.number,U_PWMOD,8,ultoa(user.pwmod,tmp,16));
-			break;
-		case 'L':
-			bputs(text[EnterYourAddress]);
-			getstr(user.address,LEN_ADDRESS,K_LINE|K_EDIT|K_AUTODEL);
-			if(sys_status&SS_ABORT)
-				break;
-			putuserrec(user.number,U_ADDRESS,LEN_ADDRESS,user.address);
-			bputs(text[EnterYourCityState]);
-			getstr(user.location,LEN_LOCATION,K_LINE|K_EDIT|K_AUTODEL);
-			if(sys_status&SS_ABORT)
-				break;
-			putuserrec(user.number,U_LOCATION,LEN_LOCATION,user.location);
-			bputs(text[EnterYourZipCode]);
-			getstr(user.zipcode,LEN_ZIPCODE,K_LINE|K_EDIT|K_AUTODEL|K_UPPER);
-			if(sys_status&SS_ABORT)
-				break;
-			putuserrec(user.number,U_ZIPCODE,LEN_ZIPCODE,user.zipcode);
-			break;
-		case 'M':
-			bputs(text[UeditML]);
-			itoa(user.level,str,10);
-			if(getstr(str,2,K_NUMBER|K_LINE))
-				if(!(atoi(str)>useron.level && console&CON_R_INPUT))
-					putuserrec(user.number,U_LEVEL,2,str);
-			break;
-		case 'N':
-			bputs(text[UeditNote]);
-			getstr(user.note,LEN_NOTE,K_LINE|K_EDIT|K_AUTODEL);
-			putuserrec(user.number,U_NOTE,LEN_NOTE,user.note);
-			break;
-		case 'O':
-			bputs(text[UeditComment]);
-			getstr(user.comment,60,K_LINE|K_EDIT|K_AUTODEL);
-			putuserrec(user.number,U_COMMENT,60,user.comment);
-			break;
-		case 'P':
-			bputs(text[EnterYourPhoneNumber]);
-			getstr(user.phone,LEN_PHONE,K_UPPER|K_LINE|K_EDIT|K_AUTODEL);
-			putuserrec(user.number,U_PHONE,LEN_PHONE,user.phone);
-			break;
-		case 'Q':
-			CLS;
-			sys_status&=~SS_INUEDIT;
-			if(ar)
-				FREE(ar);
-			return;
-		case 'R':
-			bputs(text[EnterYourRealName]);
-			getstr(user.name,LEN_NAME,K_LINE|K_EDIT|K_AUTODEL);
-			putuserrec(user.number,U_NAME,LEN_NAME,user.name);
-			break;
-		case 'S':
-			bputs(text[EnterYourSex]);
-			if(getstr(str,1,K_UPPER|K_LINE))
-				putuserrec(user.number,U_SEX,1,str);
-			break;
-		case 'T':   /* Text Search */
-			bputs(text[SearchStringPrompt]);
-			if(getstr(search,30,K_UPPER|K_LINE))
-				stype=SEARCH_TXT;
-			break;
-		case 'U':
-			bputs(text[UeditUlBytes]);
-			ultoa(user.ulb,str,10);
-			if(getstr(str,10,K_NUMBER|K_LINE|K_EDIT|K_AUTODEL))
-				putuserrec(user.number,U_ULB,10,str);
-			if(sys_status&SS_ABORT)
-				break;
-			bputs(text[UeditUploads]);
-			sprintf(str,"%u",user.uls);
-			if(getstr(str,5,K_NUMBER|K_LINE|K_EDIT|K_AUTODEL))
-				putuserrec(user.number,U_ULS,5,str);
-            if(sys_status&SS_ABORT)
-				break;
-			bputs(text[UeditDlBytes]);
-			ultoa(user.dlb,str,10);
-			if(getstr(str,10,K_NUMBER|K_LINE|K_EDIT|K_AUTODEL))
-				putuserrec(user.number,U_DLB,10,str);
-            if(sys_status&SS_ABORT)
-				break;
-			bputs(text[UeditDownloads]);
-			sprintf(str,"%u",user.dls);
-			if(getstr(str,5,K_NUMBER|K_LINE|K_EDIT|K_AUTODEL))
-				putuserrec(user.number,U_DLS,5,str);
-			break;
-		case 'V':
-			CLS;
-			attr(LIGHTGRAY);
-			for(i=0;i<10;i++) {
-				bprintf(text[QuickValidateFmt]
-					,i,val_level[i],ltoaf(val_flags1[i],str)
-					,ltoaf(val_exempt[i],tmp)
-					,ltoaf(val_rest[i],tmp3)); }
-			ASYNC;
-			bputs(text[QuickValidatePrompt]);
-			c=getkey(0);
-			if(!isdigit(c))
-				break;
-			i=c&0xf;
-			user.level=val_level[i];
-			user.flags1=val_flags1[i];
-			user.flags2=val_flags2[i];
-			user.flags3=val_flags3[i];
-			user.flags4=val_flags4[i];
-			user.exempt=val_exempt[i];
-			user.rest=val_rest[i];
-			user.cdt+=val_cdt[i];
-			now=time(NULL);
-			if(val_expire[i]) {
-				if(user.expire<now)
-					user.expire=now+((long)val_expire[i]*24L*60L*60L);
-				else
-					user.expire+=((long)val_expire[i]*24L*60L*60L); }
-			putuserdat(user);
-			break;
-		case 'W':
-			bputs(text[UeditPassword]);
-			getstr(user.pass,LEN_PASS,K_UPPER|K_LINE|K_EDIT|K_AUTODEL);
-			putuserrec(user.number,U_PASS,LEN_PASS,user.pass);
-			break;
-		case 'X':
-			attr(LIGHTGRAY);
-            sprintf(str,"%sUSER\\%4.4u.MSG",data_dir,user.number);
-			printfile(str,0);
-			pause();
-			break;
-        case 'Y':
-			if(!noyes(text[UeditCopyUserQ])) {
-				bputs(text[UeditCopyUserToSlot]);
-				i=getnum(lastuser());
-				if(i>0) {
-					user.number=i;
-					putusername(user.number,user.alias);
-					putuserdat(user); } }
-			break;
-		case 'Z':
-			if(!yesno(text[ChangeRestrictsQ]))
-				break;
-			while(online) {
-				bprintf(text[FlagEditing],ltoaf(user.rest,tmp));
-				c=getkeys("ABCDEFGHIJKLMNOPQRSTUVWXYZ?\r",0);
-                if(sys_status&SS_ABORT)
-					break;
-				if(c==CR) break;
-				if(c=='?') {
-					menu("RESTRICT");
-					continue; }
-				user.rest^=FLAG(c);
-				putuserrec(user.number,U_REST,8,ultoa(user.rest,tmp,16)); }
-			break;
-		case '?':
-			CLS;
-			menu("UEDIT");  /* Sysop Uedit Edit Menu */
-			pause();
-			break;
-		case '~':
-			bputs(text[UeditLeech]);
-			if(getstr(str,2,K_NUMBER|K_LINE))
-				putuserrec(user.number,U_LEECH,2,itoa(atoi(str),tmp,16));
-            break;
-		case '+':
-			bputs(text[ModifyCredits]);
-			getstr(str,10,K_UPPER|K_LINE);
-			l=atol(str);
-			if(strstr(str,"M"))
-				l*=0x100000L;
-			else if(strstr(str,"K"))
-				l*=1024;
-			else if(strstr(str,"$"))
-				l*=cdt_per_dollar;
-			if(l<0L && l*-1 > user.cdt)
-				user.cdt=0L;
-			else
-				user.cdt+=l;
-			putuserrec(user.number,U_CDT,10,ultoa(user.cdt,tmp,10));
-			break;
-		case '*':
-			bputs(text[ModifyMinutes]);
-			getstr(str,10,K_UPPER|K_LINE);
-			l=atol(str);
-			if(strstr(str,"H"))
-				l*=60L;
-			if(l<0L && l*-1 > user.min)
-				user.min=0L;
-			else
-				user.min+=l;
-			putuserrec(user.number,U_MIN,10,ultoa(user.min,tmp,10));
-			break;
-		case '#': /* read new user questionaire */
-			sprintf(str,"%sUSER\\%4.4u.DAT",data_dir,user.number);
-			if(!new_sof[0] || !fexist(str))
-				break;
-			read_sif_dat(new_sof,str);
-			if(!noyes(text[DeleteQuestionaireQ]))
-				remove(str);
-			break;
-		case '$':
-			bputs(text[UeditCredits]);
-            ultoa(user.cdt,str,10);
-            if(getstr(str,10,K_NUMBER|K_LINE))
-                putuserrec(user.number,U_CDT,10,str);
-            break;
-		case '/':
-			bputs(text[SearchStringPrompt]);
-			if(getstr(artxt,40,K_UPPER|K_LINE))
-				stype=SEARCH_ARS;
-			if(ar && ar[0])
-				FREE(ar);
-			ar=arstr(0,artxt);
-            break;
-		case '{':
-			if(stype==SEARCH_TXT)
-				user.number=searchdn(search,user.number);
-			else {
-				if(!ar)
-					break;
-				k=user.number;
-				for(i=k-1;i;i--) {
-					user.number=i;
-					getuserdat(&user);
-					if(chk_ar(ar,user)) {
-						outchar(7);
-						break; } }
-				if(!i)
-					user.number=k; }
-			break;
-		case '}':
-			if(stype==SEARCH_TXT)
-				user.number=searchup(search,user.number);
-			else {
-				if(!ar)
-					break;
-				j=lastuser();
-				k=user.number;
-				for(i=k+1;i<=j;i++) {
-					user.number=i;
-					getuserdat(&user);
-					if(chk_ar(ar,user)) {
-						outchar(7);
-						break; } }
-				if(i>j)
-                    user.number=k; }
-			break;
-		case ']':
-			if(user.number==lastuser())
-				user.number=1;
-			else user.number++;
-			break;
-		case '[':
-			if(user.number==1)
-				user.number=lastuser();
-			else user.number--;
-			break; } }
-sys_status&=~SS_INUEDIT;
-}
-
-/****************************************************************************/
-/* Seaches forward through the USER.DAT file for the ocurrance of 'search'  */
-/* starting at the offset for usernum+1 and returning the usernumber of the */
-/* record where the string was found or the original usernumber if the 		*/
-/* string wasn't found														*/
-/* Called from the function useredit										*/
-/****************************************************************************/
-int searchup(char *search,int usernum)
-{
-	char userdat[U_LEN+1];
-	int file,count;
-	uint i=usernum+1;
-
-if(!search[0])
-	return(usernum);
-sprintf(userdat,"%sUSER\\USER.DAT",data_dir);
-if((file=nopen(userdat,O_RDONLY|O_DENYNONE))==-1)
-	return(usernum);
-lseek(file,(long)((long)usernum*U_LEN),0);
-
-while(!eof(file)) {
-	count=0;
-	while(count<LOOP_NODEDAB
-		&& lock(file,(long)((long)(i-1)*U_LEN),U_LEN)==-1) {
-		if(count>10)
-			mswait(55);
-		count++; }
-
-	if(count>=LOOP_NODEDAB) {
-		close(file);
-		errormsg(WHERE,ERR_LOCK,"USER.DAT",i);
-		return(usernum); }
-
-	if(read(file,userdat,U_LEN)!=U_LEN) {
-		unlock(file,(long)((long)(i-1)*U_LEN),U_LEN);
-		close(file);
-		errormsg(WHERE,ERR_READ,"USER.DAT",U_LEN);
-		return(usernum); }
-
-	unlock(file,(long)((long)(i-1)*U_LEN),U_LEN);
-	userdat[U_LEN]=0;
-	strupr(userdat);
-	if(strstr(userdat,search)) {
-		outchar(7);
-		close(file);
-		return(i); }
-	i++; }
-close(file);
-return(usernum);
-}
-
-/****************************************************************************/
-/* Seaches backward through the USER.DAT file for the ocurrance of 'search' */
-/* starting at the offset for usernum-1 and returning the usernumber of the */
-/* record where the string was found or the original usernumber if the 		*/
-/* string wasn't found														*/
-/* Called from the function useredit										*/
-/****************************************************************************/
-int searchdn(char *search,int usernum)
-{
-	char userdat[U_LEN+1];
-	int file,count;
-	uint i=usernum-1;
-
-if(!search[0])
-	return(usernum);
-sprintf(userdat,"%sUSER\\USER.DAT",data_dir);
-if((file=nopen(userdat,O_RDONLY))==-1)
-	return(usernum);
-while(i) {
-	lseek(file,(long)((long)(i-1)*U_LEN),0);
-	count=0;
-	while(count<LOOP_NODEDAB
-		&& lock(file,(long)((long)(i-1)*U_LEN),U_LEN)==-1) {
-		if(count>10)
-			mswait(55);
-		count++; }
-
-	if(count>=LOOP_NODEDAB) {
-		close(file);
-		errormsg(WHERE,ERR_LOCK,"USER.DAT",i);
-        return(usernum); }
-
-	if(read(file,userdat,U_LEN)==-1) {
-		unlock(file,(long)((long)(i-1)*U_LEN),U_LEN);
-		close(file);
-		errormsg(WHERE,ERR_READ,"USER.DAT",U_LEN);
-		return(usernum); }
-	unlock(file,(long)((long)(i-1)*U_LEN),U_LEN);
-	userdat[U_LEN]=0;
-	strupr(userdat);
-	if(strstr(userdat,search)) {
-		outchar(7);
-		close(file);
-		return(i); }
-	i--; }
-close(file);
-return(usernum);
-}
-
-/****************************************************************************/
-/* This function view/edits the users main default settings.				*/
-/****************************************************************************/
-void maindflts(user_t user)
-{
-	char str[256],ch;
-	int i;
-
-action=NODE_DFLT;
-while(online) {
-	CLS;
-/*
-	if(user.number==useron.number && useron.rest&FLAG('G')) /* Guest */
-		user=useron;
-	else
-*/
-		getuserdat(&user);
-    if(user.rows)
-		rows=user.rows;
-	bprintf(text[UserDefaultsHdr],user.alias,user.number);
-	sprintf(str,"%s%s%s%s%s"
-						,user.misc&AUTOTERM ? "Auto Detect ":nulstr
-						,user.misc&ANSI ? "ANSI ":"TTY "
-						,user.misc&COLOR ? "(Color) ":"(Mono) "
-						,user.misc&WIP	? "WIP" : user.misc&RIP ? "RIP "
-							:nulstr
-						,user.misc&NO_EXASCII ? "ASCII Only":nulstr);
-	bprintf(text[UserDefaultsTerminal],str);
-	if(total_xedits)
-		bprintf(text[UserDefaultsXeditor]
-			,user.xedit ? xedit[user.xedit-1]->name : "None");
-	if(user.rows)
-		itoa(user.rows,tmp,10);
-	else
-		sprintf(tmp,"Auto Detect (%d)",rows);
-	bprintf(text[UserDefaultsRows],tmp);
-	if(total_shells>1)
-		bprintf(text[UserDefaultsCommandSet]
-			,shell[user.shell]->name);
-	bprintf(text[UserDefaultsArcType]
-		,user.tmpext);
-	bprintf(text[UserDefaultsMenuMode]
-		,user.misc&EXPERT ? text[On] : text[Off]);
-	bprintf(text[UserDefaultsPause]
-		,user.misc&UPAUSE ? text[On] : text[Off]);
-	bprintf(text[UserDefaultsHotKey]
-		,user.misc&COLDKEYS ? text[Off] : text[On]);
-	bprintf(text[UserDefaultsCursor]
-		,user.misc&SPIN ? text[On] : text[Off]);
-	bprintf(text[UserDefaultsCLS]
-		,user.misc&CLRSCRN ? text[On] : text[Off]);
-	bprintf(text[UserDefaultsAskNScan]
-		,user.misc&ASK_NSCAN ? text[On] : text[Off]);
-	bprintf(text[UserDefaultsAskSScan]
-        ,user.misc&ASK_SSCAN ? text[On] : text[Off]);
-	bprintf(text[UserDefaultsANFS]
-		,user.misc&ANFSCAN ? text[On] : text[Off]);
-	bprintf(text[UserDefaultsRemember]
-		,user.misc&CURSUB ? text[On] : text[Off]);
-	bprintf(text[UserDefaultsBatFlag]
-		,user.misc&BATCHFLAG ? text[On] : text[Off]);
-	if(sys_misc&SM_FWDTONET)
-		bprintf(text[UserDefaultsNetMail]
-			,user.misc&NETMAIL ? text[On] : text[Off]);
-	if(useron.exempt&FLAG('Q') || user.misc&QUIET)
-		bprintf(text[UserDefaultsQuiet]
-			,user.misc&QUIET ? text[On] : text[Off]);
-	if(user.prot!=SP)
-		sprintf(str,"%c",user.prot);
-	else
-		strcpy(str,"None");
-	bprintf(text[UserDefaultsProtocol],str
-        ,user.misc&AUTOHANG ? "(Hang-up After Xfer)":nulstr);
-	if(sys_misc&SM_PWEDIT && !(user.rest&FLAG('G')))
-		bputs(text[UserDefaultsPassword]);
-
-	ASYNC;
-	bputs(text[UserDefaultsWhich]);
-	strcpy(str,"HTBALPRSYFNCQXZ\r");
-	if(sys_misc&SM_PWEDIT && !(user.rest&FLAG('G')))
-		strcat(str,"W");
-	if(useron.exempt&FLAG('Q') || user.misc&QUIET)
-		strcat(str,"D");
-	if(total_xedits)
-		strcat(str,"E");
-	if(sys_misc&SM_FWDTONET)
-		strcat(str,"M");
-	if(total_shells>1)
-		strcat(str,"K");
-	ch=getkeys(str,0);
-	switch(ch) {
-		case 'T':
-			if(yesno(text[AutoTerminalQ])) {
-				user.misc|=AUTOTERM;
-				user.misc&=~(ANSI|RIP|WIP);
-				user.misc|=autoterm; }
-			else
-				user.misc&=~AUTOTERM;
-			if(!(user.misc&AUTOTERM)) {
-				if(yesno(text[AnsiTerminalQ]))
-					user.misc|=ANSI;
-				else
-					user.misc&=~(ANSI|COLOR); }
-			if(user.misc&ANSI) {
-				if(yesno(text[ColorTerminalQ]))
-					user.misc|=COLOR;
-				else
-					user.misc&=~COLOR; }
-			if(!yesno(text[ExAsciiTerminalQ]))
-				user.misc|=NO_EXASCII;
-			else
-				user.misc&=~NO_EXASCII;
-			if(!(user.misc&AUTOTERM)) {
-				if(!noyes(text[RipTerminalQ]))
-					user.misc|=RIP;
-				else
-					user.misc&=~RIP; }
-			putuserrec(user.number,U_MISC,8,ultoa(user.misc,str,16));
-			break;
-		case 'B':
-			user.misc^=BATCHFLAG;
-			putuserrec(user.number,U_MISC,8,ultoa(user.misc,str,16));
-			break;
-		case 'E':
-			if(noyes("Use an external editor")) {
-				putuserrec(user.number,U_XEDIT,8,nulstr);
-				break; }
-			if(user.xedit)
-				user.xedit--;
-			for(i=0;i<total_xedits;i++)
-				uselect(1,i,"External Editor",xedit[i]->name,xedit[i]->ar);
-			if((i=uselect(0,user.xedit,0,0,0))>=0)
-				putuserrec(user.number,U_XEDIT,8,xedit[i]->code);
-			break;
-		case 'K':   /* Command shell */
-			for(i=0;i<total_shells;i++)
-				uselect(1,i,"Command Shell",shell[i]->name,shell[i]->ar);
-			if((i=uselect(0,user.shell,0,0,0))>=0)
-				putuserrec(user.number,U_SHELL,8,shell[i]->code);
-			break;
-		case 'A':
-			for(i=0;i<total_fcomps;i++)
-				uselect(1,i,"Archive Type",fcomp[i]->ext,fcomp[i]->ar);
-			if((i=uselect(0,0,0,0,0))>=0)
-				putuserrec(user.number,U_TMPEXT,3,fcomp[i]->ext);
-			break;
-		case 'L':
-			bputs(text[HowManyRows]);
-			if((ch=getnum(99))!=-1)
-				putuserrec(user.number,U_ROWS,2,itoa(ch,tmp,10));
-			break;
-		case 'P':
-			user.misc^=UPAUSE;
-			putuserrec(user.number,U_MISC,8,ultoa(user.misc,str,16));
-			break;
-		case 'H':
-			user.misc^=COLDKEYS;
-			putuserrec(user.number,U_MISC,8,ultoa(user.misc,str,16));
-            break;
-		case 'S':
-			user.misc^=SPIN;
-			putuserrec(user.number,U_MISC,8,ultoa(user.misc,str,16));
-			break;
-		case 'F':
-			user.misc^=ANFSCAN;
-			putuserrec(user.number,U_MISC,8,ultoa(user.misc,str,16));
-			break;
-		case 'X':
-			user.misc^=EXPERT;
-			putuserrec(user.number,U_MISC,8,ultoa(user.misc,str,16));
-			break;
-		case 'R':   /* Remember current sub/dir */
-			user.misc^=CURSUB;
-			putuserrec(user.number,U_MISC,8,ultoa(user.misc,str,16));
-			break;
-		case 'Y':   /* Prompt for scanning message to you */
-			user.misc^=ASK_SSCAN;
-			putuserrec(user.number,U_MISC,8,ultoa(user.misc,str,16));
-            break;
-		case 'N':   /* Prompt for new message/files scanning */
-			user.misc^=ASK_NSCAN;
-			putuserrec(user.number,U_MISC,8,ultoa(user.misc,str,16));
-			break;
-		case 'M':   /* NetMail address */
-			if(noyes(text[ForwardMailQ]))
-				user.misc&=~NETMAIL;
-			else {
-				user.misc|=NETMAIL;
-				bputs(text[EnterNetMailAddress]);
-				if(!getstr(user.netmail,LEN_NETMAIL,K_EDIT|K_AUTODEL|K_LINE))
-					break;
-				putuserrec(user.number,U_NETMAIL,LEN_NETMAIL,user.netmail); }
-			putuserrec(user.number,U_MISC,8,ultoa(user.misc,str,16));
-			break;
-		case 'C':
-			user.misc^=CLRSCRN;
-			putuserrec(user.number,U_MISC,8,ultoa(user.misc,str,16));
-			break;
-		case 'D':
-			user.misc^=QUIET;
-			putuserrec(user.number,U_MISC,8,ultoa(user.misc,str,16));
-			break;
-		case 'W':
-			if(noyes(text[NewPasswordQ]))
-				break;
-			bputs(text[CurrentPassword]);
-			console|=CON_R_ECHOX;
-			if(!(sys_misc&SM_ECHO_PW))
-				console|=CON_L_ECHOX;
-			ch=getstr(str,LEN_PASS,K_UPPER);
-			console&=~(CON_R_ECHOX|CON_L_ECHOX);
-			if(strcmp(str,user.pass)) {
-				bputs(text[WrongPassword]);
-				pause();
-                break; }
-			bputs(text[NewPassword]);
-			if(!getstr(str,LEN_PASS,K_UPPER|K_LINE))
-				break;
-			truncsp(str);
-			if(!chkpass(str,user)) {
-				CRLF;
-				pause();
-				break; }
-			bputs(text[VerifyPassword]);
-			console|=CON_R_ECHOX;
-			if(!(sys_misc&SM_ECHO_PW))
-				console|=CON_L_ECHOX;
-			getstr(tmp,LEN_PASS,K_UPPER);
-			console&=~(CON_R_ECHOX|CON_L_ECHOX);
-			if(strcmp(str,tmp)) {
-				bputs(text[WrongPassword]);
-				pause();
-				break; }
-			if(!online)
-				break;
-			putuserrec(user.number,U_PASS,LEN_PASS,str);
-			now=time(NULL);
-			putuserrec(user.number,U_PWMOD,8,ultoa(now,tmp,16));
-			bputs(text[PasswordChanged]);
-			logline(nulstr,"Changed password");
-			pause();
-			break;
-		case 'Z':
-			menu("DLPROT");
-            SYNC;
-            mnemonics(text[ProtocolOrQuit]);
-			strcpy(str,"Q");
-            for(i=0;i<total_prots;i++)
-				if(prot[i]->dlcmd[0] && chk_ar(prot[i]->ar,useron)) {
-                    sprintf(tmp,"%c",prot[i]->mnemonic);
-					strcat(str,tmp); }
-			ch=getkeys(str,0);
-			if(ch=='Q' || sys_status&SS_ABORT) {
-				ch=SP;
-				putuserrec(user.number,U_PROT,1,&ch); }
-			else
-				putuserrec(user.number,U_PROT,1,&ch);
-			if(yesno(text[HangUpAfterXferQ]))
-				user.misc|=AUTOHANG;
-			else
-				user.misc&=~AUTOHANG;
-			putuserrec(user.number,U_MISC,8,ultoa(user.misc,str,16));
-			break;
-		default:
-			return; } }
-}
-
-void purgeuser(int usernumber)
-{
-	uchar str[128];
-	user_t user;
-
-user.number=usernumber;
-getuserdat(&user);
-sprintf(str,"Purged %s #%u",user.alias,usernumber);
-logentry("!*",str);
-delallmail(usernumber);
-putusername(usernumber,nulstr);
-putuserrec(usernumber,U_MISC,8,ultoa(user.misc|DELETED,str,16));
-}
diff --git a/src/sbbs2/userrec.c b/src/sbbs2/userrec.c
deleted file mode 100644
index 91fe764d72..0000000000
--- a/src/sbbs2/userrec.c
+++ /dev/null
@@ -1,194 +0,0 @@
-#line 1 "USERREC.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-
-/****************************************************************************/
-/* Fills 'str' with record for usernumber starting at start for length bytes*/
-/* Called from function ???													*/
-/****************************************************************************/
-void getuserrec(int usernumber,int start, char length, char *str)
-{
-	char c,path[256];
-	int i,file;
-
-if(!usernumber) {
-	errormsg(WHERE,ERR_CHK,"user number",0);
-	return; }
-sprintf(path,"%sUSER\\USER.DAT",data_dir);
-if((file=nopen(path,O_RDONLY|O_DENYNONE))==-1) {
-	errormsg(WHERE,ERR_OPEN,path,O_RDONLY);
-	return; }
-if(usernumber<1
-	|| filelength(file)<(long)((long)(usernumber-1L)*U_LEN)+(long)start) {
-	close(file);
-	errormsg(WHERE,ERR_CHK,"user number",usernumber);
-	return; }
-lseek(file,(long)((long)(usernumber-1)*U_LEN)+start,SEEK_SET);
-
-i=0;
-while(i<LOOP_NODEDAB
-	&& lock(file,(long)((long)(usernumber-1)*U_LEN)+start,length)==-1) {
-	if(i>10)
-		mswait(55);
-	i++; }
-
-if(i>=LOOP_NODEDAB) {
-	close(file);
-	errormsg(WHERE,ERR_LOCK,"USER.DAT",usernumber);
-    return; }
-
-if(read(file,str,length)!=length) {
-	unlock(file,(long)((long)(usernumber-1)*U_LEN)+start,length);
-	close(file);
-	errormsg(WHERE,ERR_READ,"USER.DAT",length);
-	return; }
-
-unlock(file,(long)((long)(usernumber-1)*U_LEN)+start,length);
-close(file);
-for(c=0;c<length;c++)
-	if(str[c]==ETX || str[c]==CR) break;
-str[c]=0;
-}
-
-/****************************************************************************/
-/* Places into USER.DAT at the offset for usernumber+start for length bytes */
-/* Called from various locations											*/
-/****************************************************************************/
-void putuserrec(int usernumber,int start, char length, char *str)
-{
-	char c,str2[256];
-	int file,i;
-	node_t node;
-
-if(usernumber<1) {
-	errormsg(WHERE,ERR_CHK,"user number",usernumber);
-	return; }
-sprintf(str2,"%sUSER\\USER.DAT",data_dir);
-if((file=nopen(str2,O_WRONLY|O_DENYNONE))==-1) {
-	errormsg(WHERE,ERR_OPEN,str2,O_WRONLY);
-	return; }
-strcpy(str2,str);
-if(strlen(str2)<length) {
-	for(c=strlen(str2);c<length;c++)
-		str2[c]=ETX;
-	str2[c]=0; }
-lseek(file,(long)((long)((long)((long)usernumber-1)*U_LEN)+start),SEEK_SET);
-
-i=0;
-while(i<LOOP_NODEDAB
-	&& lock(file,(long)((long)(usernumber-1)*U_LEN)+start,length)==-1) {
-	if(i>10)
-		mswait(55);
-	i++; }
-
-if(i>=LOOP_NODEDAB) {
-	close(file);
-	errormsg(WHERE,ERR_LOCK,"USER.DAT",usernumber);
-    return; }
-
-write(file,str2,length);
-unlock(file,(long)((long)(usernumber-1)*U_LEN)+start,length);
-close(file);
-for(i=1;i<=sys_nodes;i++) {	/* instant user data update */
-	if(i==node_num)
-		continue;
-	getnodedat(i,&node,0);
-	if(node.useron==usernumber && (node.status==NODE_INUSE
-		|| node.status==NODE_QUIET)) {
-		getnodedat(i,&node,1);
-		node.misc|=NODE_UDAT;
-		putnodedat(i,node);
-		break; } }
-}
-
-/****************************************************************************/
-/* Updates user 'usernumber's record (numeric string) by adding 'adj' to it */
-/* returns the new value.													*/
-/****************************************************************************/
-ulong adjustuserrec(int usernumber,int start, char length, long adj)
-{
-	char str[256],c,path[256];
-	int i,file;
-	ulong val;
-	node_t node;
-
-if(usernumber<1) {
-	errormsg(WHERE,ERR_CHK,"user number",usernumber);
-	return(0UL); }
-sprintf(path,"%sUSER\\USER.DAT",data_dir);
-if((file=nopen(path,O_RDWR|O_DENYNONE))==-1) {
-	errormsg(WHERE,ERR_OPEN,path,O_RDWR);
-	return(0UL); }
-lseek(file,(long)((long)(usernumber-1)*U_LEN)+start,SEEK_SET);
-
-i=0;
-while(i<LOOP_NODEDAB
-	&& lock(file,(long)((long)(usernumber-1)*U_LEN)+start,length)==-1) {
-	if(i>10)
-		mswait(55);
-	i++; }
-
-if(i>=LOOP_NODEDAB) {
-	close(file);
-	errormsg(WHERE,ERR_LOCK,"USER.DAT",usernumber);
-	return(0); }
-
-if(read(file,str,length)!=length) {
-	unlock(file,(long)((long)(usernumber-1)*U_LEN)+start,length);
-	close(file);
-	errormsg(WHERE,ERR_READ,path,length);
-	return(0UL); }
-for(c=0;c<length;c++)
-	if(str[c]==ETX || str[c]==CR) break;
-str[c]=0;
-val=atol(str);
-if(adj<0L && val<-adj)		/* don't go negative */
-	val=0UL;
-else val+=adj;
-lseek(file,(long)((long)(usernumber-1)*U_LEN)+start,SEEK_SET);
-putrec(str,0,length,ultoa(val,tmp,10));
-if(write(file,str,length)!=length) {
-	unlock(file,(long)((long)(usernumber-1)*U_LEN)+start,length);
-	close(file);
-	errormsg(WHERE,ERR_WRITE,path,length);
-	return(val); }
-unlock(file,(long)((long)(usernumber-1)*U_LEN)+start,length);
-close(file);
-for(i=1;i<=sys_nodes;i++) { /* instant user data update */
-	if(i==node_num)
-		continue;
-	getnodedat(i,&node,0);
-	if(node.useron==usernumber && (node.status==NODE_INUSE
-		|| node.status==NODE_QUIET)) {
-		getnodedat(i,&node,1);
-		node.misc|=NODE_UDAT;
-		putnodedat(i,node);
-        break; } }
-return(val);
-}
-
-/****************************************************************************/
-/* Subtract credits from the current user online, accounting for the new    */
-/* "free credits" field.                                                    */
-/****************************************************************************/
-void subtract_cdt(long amt)
-{
-    long mod;
-
-if(!amt)
-    return;
-if(useron.freecdt) {
-    if(amt>useron.freecdt) {      /* subtract both credits and */
-        mod=amt-useron.freecdt;   /* free credits */
-        putuserrec(useron.number,U_FREECDT,10,"0");
-        useron.freecdt=0;
-        useron.cdt=adjustuserrec(useron.number,U_CDT,10,-mod); }
-    else {                          /* subtract just free credits */
-        useron.freecdt-=amt;
-        putuserrec(useron.number,U_FREECDT,10
-            ,ultoa(useron.freecdt,tmp,10)); } }
-else    /* no free credits */
-    useron.cdt=adjustuserrec(useron.number,U_CDT,10,-amt);
-}
diff --git a/src/sbbs2/uti/makefile b/src/sbbs2/uti/makefile
deleted file mode 100644
index fc92d412c3..0000000000
--- a/src/sbbs2/uti/makefile
+++ /dev/null
@@ -1,90 +0,0 @@
-###############################
-# Makefile for Synchronet UTI #
-# For use with Turbo C++      #
-# Tabstop=8		      #
-###############################
-
-# Macros
-CC	= bcc
-LD	= tlink
-INCLUDE = \bc31\include;..;..\smb;..\rio
-LIB     = \bc31\lib
-MODEL	= l
-CFLAGS	= -d -C -m$(MODEL) -I$(INCLUDE) -w-pro
-LFLAGS  = /n /c
-OBJS	= scfgvars.obj scfglib1.obj uti.obj ars.obj
-SMB	= smblib.obj 
-LZH	= lzh.obj
-HEADERS = ..\sbbs.h ..\sbbsdefs.h ..\scfgvars.c \
-	  ..\smb\smblib.h ..\smb\smbdefs.h
-
-# Implicit C Compile Rule
-.c.obj:
-        @echo Compiling $*.c to $*.obj ...
-	$(CC) $(CFLAGS) -o$*.obj -c $*.c
-
-all: utilist.exe utihigh.exe utiexprt.exe utilstrd.exe utiimprt.exe utiver.exe
-
-utilist.exe: $(OBJS) utilist.obj
-    	@echo Linking $< ...
-	$(LD) $(LFLAGS) @&&!
-$(LIB)\c0$(MODEL) $(OBJS) utilist.obj
-!, $*, $*, $(LIB)\c$(MODEL).lib $(LIB)\math$(MODEL).lib $(LIB)\emu.lib
-
-utihigh.exe: $(OBJS) $(SMB) utihigh.obj
-    	@echo Linking $< ...
-	$(LD) $(LFLAGS) @&&!
-$(LIB)\c0$(MODEL) $(OBJS) $(SMB) utihigh.obj
-!, $*, $*, $(LIB)\c$(MODEL).lib $(LIB)\math$(MODEL).lib $(LIB)\emu.lib
-
-utiexprt.exe: $(OBJS) $(SMB) $(LZH) utiexprt.obj
-    	@echo Linking $< ...
-	$(LD) $(LFLAGS) @&&!
-$(LIB)\c0$(MODEL) $(OBJS) $(SMB) $(LZH) utiexprt.obj
-!, $*, $*, $(LIB)\c$(MODEL).lib $(LIB)\math$(MODEL).lib $(LIB)\emu.lib
-
-utiimprt.exe: $(OBJS) $(SMB) $(LZH) utiimprt.obj
-    	@echo Linking $< ...
-	$(LD) $(LFLAGS) @&&!
-$(LIB)\c0$(MODEL) $(OBJS) $(SMB) $(LZH) utiimprt.obj
-!, $*, $*, $(LIB)\c$(MODEL).lib $(LIB)\math$(MODEL).lib $(LIB)\emu.lib
-
-utilstrd.exe: $(OBJS) utilstrd.obj
-    	@echo Linking $< ...
-	$(LD) $(LFLAGS) @&&!
-$(LIB)\c0$(MODEL) $(OBJS) utilstrd.obj
-!, $*, $*, $(LIB)\c$(MODEL).lib $(LIB)\math$(MODEL).lib $(LIB)\emu.lib
-
-utiver.exe: uti.h utiver.obj utiver.c
-	bcc -w-pro utiver.c
-
-# SMBLIB Functions
-smblib.obj: ..\smb\smblib.c ..\smb\smbdefs.h ..\smb\smblib.h
-	@echo Compiling ..\$*.c to $*.obj ...
-        $(CC) $(CFLAGS) -c ..\smb\$*.c
-
-# SMB LZH Functions
-lzh.obj: ..\smb\lzh.c ..\smb\lzh.h 
-	@echo Compiling ..\$*.c to $*.obj ...
-        $(CC) $(CFLAGS) -c ..\smb\$*.c
-
-# Global Variables
-scfgvars.obj: ..\scfgvars.c ..\smb\smbdefs.h 
-	@echo Compiling ..\$*.c to $*.obj ...
-	$(CC) $(CFLAGS) -c ..\$*.c
-
-ars.obj: ..\ars.c ..\ars_defs.h
-        @echo Compiling ..\$&.c to $< ...
-	$(CC) $(CFLAGS) -c ..\ars.c
-
-
-# Shared Functions
-scfglib1.obj: ..\sbbs.h ..\sbbsdefs.h ..\scfglib1.c ..\scfgvars.c ..\scfglib.h
-	@echo Compiling ..\$*.c to $*.obj ...
-        $(CC) $(CFLAGS) -c ..\$*.c
-
-utiimprt.obj:	uti.h
-utiexprt.obj:	uti.h
-utilstrd.obj:	uti.h
-utihigh.obj:	uti.h
-utilist.obj:	uti.h
diff --git a/src/sbbs2/uti/uti.c b/src/sbbs2/uti/uti.c
deleted file mode 100644
index fb290e0a33..0000000000
--- a/src/sbbs2/uti/uti.c
+++ /dev/null
@@ -1,298 +0,0 @@
-#line 1 "UTI.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* Shared routines for most of the UTI driver programs */
-
-#include "sbbs.h"
-#include "uti.h"
-
-#define bputs	lputs
-#define bprintf lprintf
-
-int logfile;
-char scrnbuf[4000],tmp[256];
-struct text_info txtinfo;
-
-/****************************************************************************/
-/* Performs printf() through local assembly routines                        */
-/* Called from everywhere                                                   */
-/****************************************************************************/
-int lprintf(char *fmat, ...) {
-	char sbuf[256];
-	int chcount;
-
-chcount=vsprintf(sbuf,fmat,_va_ptr);
-lputs(sbuf);
-return(chcount);
-}
-
-long lputs(char far *str)
-{
-	char tmp[256];
-	int i,j,k;
-
-j=strlen(str);
-for(i=k=0;i<j;i++)		/* remove CRs */
-	if(str[i]==CR && str[i+1]==LF)
-		continue;
-	else
-		tmp[k++]=str[i];
-tmp[k]=0;
-return(fputs(tmp,stdout));
-}
-
-/****************************************************************************/
-/* Truncates white-space chars off end of 'str' and terminates at first tab */
-/****************************************************************************/
-void truncsp(char *str)
-{
-	char c;
-
-str[strcspn(str,"\t")]=0;
-c=strlen(str);
-while(c && str[c-1]<=SP) c--;
-str[c]=0;
-}
-
-/****************************************************************************/
-/* Puts a backslash on path strings 										*/
-/****************************************************************************/
-void backslash(char *str)
-{
-    int i;
-
-i=strlen(str);
-if(i && str[i-1]!='\\') {
-    str[i]='\\'; str[i+1]=0; }
-}
-
-
-/****************************************************************************/
-/* Converts an ASCII Hex string into an ulong                       */
-/****************************************************************************/
-ulong ahtoul(char *str)
-{
-	ulong l,val=0;
-
-while((l=(*str++)|0x20)!=0x20)
-	val=(l&0xf)+(l>>6&1)*9+val*16;
-return(val);
-}
-
-/****************************************************************************/
-/* Network open function. Opens all files DENYALL and retries LOOP_NOPEN    */
-/* number of times if the attempted file is already open or denying access  */
-/* for some other reason.	All files are opened in BINARY mode.			*/
-/****************************************************************************/
-int nopen(char *str, int access)
-{
-	char logstr[256];
-	int file,share,count=0;
-
-if(access==O_RDONLY) share=O_DENYWRITE;
-	else share=O_DENYALL;
-while(((file=open(str,O_BINARY|share|access,S_IWRITE))==-1)
-	&& errno==EACCES && count++<LOOP_NOPEN);
-if(count>(LOOP_NOPEN/2))
-	lprintf("NOPEN COLLISION - File: %s Count: %d"
-		,str,count);
-if(file==-1 && errno==EACCES)
-	lputs("\7\r\nNOPEN: ACCESS DENIED\r\n\7");
-return(file);
-}
-
-/****************************************************************************/
-/* This function performs an nopen, but returns a file stream with a buffer */
-/* allocated.																*/
-/****************************************************************************/
-FILE *fnopen(int *file, char *str, int access)
-{
-	char mode[128];
-	FILE *stream;
-
-if(((*file)=nopen(str,access))==-1)
-	return(NULL);
-
-if(access&O_APPEND) {
-	if(access&O_RDONLY)
-		strcpy(mode,"a+");
-	else
-		strcpy(mode,"a"); }
-else {
-	if(access&O_WRONLY)
-		strcpy(mode,"r+");
-	else
-		strcpy(mode,"r"); }
-stream=fdopen((*file),mode);
-if(stream==NULL) {
-	close(*file);
-	return(NULL); }
-setvbuf(stream,NULL,_IOFBF,16*1024);
-return(stream);
-}
-
-
-/****************************************************************************/
-/* Returns the length of the file in 'filespec'                             */
-/****************************************************************************/
-long flength(char *filespec)
-{
-    struct ffblk f;
-
-if(findfirst(filespec,&f,0)==NULL)
-    return(f.ff_fsize);
-return(-1L);
-}
-
-
-/****************************************************************************/
-/* Error handling routine. Prints to local and remote screens the error     */
-/* information, function, action, object and access and then attempts to    */
-/* write the error information into the file ERROR.LOG and NODE.LOG         */
-/****************************************************************************/
-void errormsg(int line, char *source, char action, char *object, ulong access)
-{
-    char str[512];
-    char actstr[256];
-
-switch(action) {
-    case ERR_OPEN:
-        strcpy(actstr,"opening");
-        break;
-    case ERR_CLOSE:
-        strcpy(actstr,"closeing");
-        break;
-    case ERR_FDOPEN:
-        strcpy(actstr,"fdopen");
-        break;
-    case ERR_READ:
-        strcpy(actstr,"reading");
-        break;
-    case ERR_WRITE:
-        strcpy(actstr,"writing");
-        break;
-    case ERR_REMOVE:
-        strcpy(actstr,"removing");
-        break;
-    case ERR_ALLOC:
-        strcpy(actstr,"allocating memory");
-        break;
-    case ERR_CHK:
-        strcpy(actstr,"checking");
-        break;
-    case ERR_LEN:
-        strcpy(actstr,"checking length");
-        break;
-    case ERR_EXEC:
-        strcpy(actstr,"executing");
-        break;
-    default:
-        strcpy(actstr,"UNKNOWN"); }
-lprintf("\7\r\nERROR -     file: %s",source);
-lprintf("\7\r\n            line: %u",line);
-lprintf("\7\r\n          action: %s",actstr);   /* tell user about error */
-lprintf("\7\r\n          object: %s",object);
-lprintf("\7\r\n          access: %lu (%lxh)",access,access);
-lputs("\r\n\r\n<Hit any key>");
-getch();
-lputs("\r\n");
-}
-
-
-void allocfail(uint size)
-{
-lprintf("\7Error allocating %u bytes of memory.\r\n",size);
-exit(1);
-}
-
-void bail(int code)
-{
-	char str[256];
-	time_t t;
-	struct time curtime;
-	struct date date;
-
-if(!code) {
-	puttext(1,1,80,25,scrnbuf); /* restore screen if no error */
-	textattr(txtinfo.attribute);
-	gotoxy(txtinfo.curx,txtinfo.cury); }
-t=time(NULL);
-unixtodos(t,&date,&curtime);
-sprintf(str,"%02u/%02u/%u %02u:%02u:%02u    Exiting (%d)\r\n\r\n"
-	,date.da_mon,date.da_day,date.da_year
-	,curtime.ti_hour,curtime.ti_min,curtime.ti_sec
-	,code);
-write(logfile,str,strlen(str));
-exit(code);
-}
-
-int getsubnum(char *code)
-{
-	int i;
-
-for(i=0;i<total_subs;i++) {
-//	  printf("%s vs %s\n",code,sub[i]->code);
-	if(!stricmp(code,sub[i]->code))
-		return(i); }
-return(-1);
-}
-
-void uti_init(char *name, int argc, char **argv)
-{
-	char str[256],*p;
-	int i;
-	read_cfg_text_t txt;
-	time_t t;
-	struct tm *tm;
-
-setvbuf(stdout,NULL,_IONBF,0);
-putenv("TZ=UTC0");
-
-txt.openerr="\7\r\nError opening %s for read.\r\n";
-txt.reading="\r\nReading %s...";
-txt.readit="\rRead %s       ";
-txt.allocerr="\7\r\nError allocating %u bytes of memory\r\n";
-txt.error="\7\r\nERROR: Offset %lu in %s\r\n\r\n";
-
-p=getenv("SBBSNODE");
-if(p==NULL) {
-	printf("\7\nSBBSNODE environment variable not set.\n");
-	exit(1); }
-strcpy(node_dir,p);
-
-strupr(node_dir);
-
-if(node_dir[strlen(node_dir)-1]!='\\')
-	strcat(node_dir,"\\");
-
-read_node_cfg(txt);
-if(ctrl_dir[0]=='.') {   /* Relative path */
-	strcpy(str,ctrl_dir);
-	sprintf(ctrl_dir,"%s%s",node_dir,str); }
-read_main_cfg(txt);
-if(data_dir[0]=='.') {   /* Relative path */
-	strcpy(str,data_dir);
-	sprintf(data_dir,"%s%s",node_dir,str); }
-read_msgs_cfg(txt);
-sprintf(str,"%sUTI.LOG",data_dir);
-if((logfile=nopen(str,O_WRONLY|O_CREAT|O_APPEND))==-1) {
-	printf("\7\nCan't open %s\n",str);
-	exit(-1); }
-t=time(NULL);
-tm=gmtime(&t);
-sprintf(str,"%02u/%02u/%02u %02u:%02u:%02u    %-8s %s \""
-	,tm->tm_mon+1,tm->tm_mday,TM_YEAR(tm->tm_year)
-	,tm->tm_hour,tm->tm_min,tm->tm_sec
-	,name,VER);
-printf("\n\n");
-for(i=1;i<argc;i++) {
-	if(i>1)
-		strcat(str," ");
-	strcat(str,argv[i]);
-	printf("%s ",argv[i]); }
-strcat(str,"\"");
-write(logfile,str,strlen(str));
-write(logfile,"\r\n",2);
-printf("\n\nWorking...");
-}
diff --git a/src/sbbs2/uti/uti.h b/src/sbbs2/uti/uti.h
deleted file mode 100644
index a5e0ba2786..0000000000
--- a/src/sbbs2/uti/uti.h
+++ /dev/null
@@ -1,14 +0,0 @@
-/* UTI.H */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-extern char scrnbuf[4000];
-extern struct text_info txtinfo;
-extern int logfile;
-
-#define PREPSCREEN gettext(1,1,80,25,scrnbuf); gettextinfo(&txtinfo); \
-	textattr(LIGHTGRAY); clrscr()
-
-#define VER "2.30"
-
-void uti_init(char *name,int argc, char **argv);
diff --git a/src/sbbs2/uti/utiexprt.c b/src/sbbs2/uti/utiexprt.c
deleted file mode 100644
index a5a44daf2b..0000000000
--- a/src/sbbs2/uti/utiexprt.c
+++ /dev/null
@@ -1,228 +0,0 @@
-/* UTIEXPRT.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-#include "uti.h"
-#include "post.h"
-
-char *nulstr="";
-smb_t smb;
-
-ulong loadmsgs(post_t huge **post, ulong ptr)
-{
-	int i;
-	long l=0;
-	idxrec_t idx;
-
-
-if((i=smb_locksmbhdr(&smb))!=0) {				  /* Be sure noone deletes or */
-	errormsg(WHERE,ERR_LOCK,smb.file,i);		/* adds while we're reading */
-	return(0L); }
-
-fseek(smb.sid_fp,0L,SEEK_SET);
-while(!feof(smb.sid_fp)) {
-	if(!fread(&idx,sizeof(idxrec_t),1,smb.sid_fp))
-        break;
-
-	if(idx.number<ptr || idx.attr&MSG_DELETE)
-		continue;
-
-	if(idx.attr&MSG_MODERATED && !(idx.attr&MSG_VALIDATED))
-		break;
-
-	if(((*post)=(post_t huge *)REALLOC((*post),sizeof(post_t)*(l+1)))
-        ==NULL) {
-		smb_unlocksmbhdr(&smb);
-		errormsg(WHERE,ERR_ALLOC,smb.file,sizeof(post_t)*(l+1));
-		return(l); }
-	(*post)[l].offset=idx.offset;
-	(*post)[l].number=idx.number;
-	l++; }
-smb_unlocksmbhdr(&smb);
-return(l);
-}
-
-
-int main(int argc, char **argv)
-{
-	char	str[512],*buf,ch,*outbuf;
-	ushort	xlat;
-	int 	i,file,tear,cr,net=0,lzh;
-	uint	subnum;
-	long	l,m,length,buflen;
-	ulong	msgnum,posts,exported=0;
-	FILE	*stream;
-	post_t	huge *post;
-	smbmsg_t msg;
-	struct	date date;
-	struct	time curtime;
-
-PREPSCREEN;
-
-printf("Synchronet UTIEXPRT v%s\n",VER);
-
-if(argc<3)
-	exit(1);
-
-if(argc>4 && !stricmp(argv[4],"/NETWORK"))
-	net=1;
-
-uti_init("UTIEXPRT",argc,argv);
-
-if((file=nopen(argv[3],O_CREAT|O_TRUNC|O_WRONLY))==-1)
-	bail(2);
-if((stream=fdopen(file,"wb"))==NULL)
-	bail(2);
-setvbuf(stream,0,_IOFBF,4096);
-
-subnum=getsubnum(argv[1]);
-if((int)subnum==-1)
-	bail(7);
-msgnum=atol(argv[2]);
-
-sprintf(smb.file,"%s%s",sub[subnum]->data_dir,sub[subnum]->code);
-smb.retry_time=30;
-if((i=smb_open(&smb))!=0) {
-	errormsg(WHERE,ERR_OPEN,smb.file,i);
-	bail(5); }
-
-post=NULL;
-posts=loadmsgs(&post,msgnum);
-
-printf("\nExporting\n\n");
-for(l=0;l<posts;l++) {
-	printf("\rScanning: %lu of %lu  Exported: %lu",l+1,posts,exported);
-	msg.idx.offset=post[l].offset;
-	if((i=smb_lockmsghdr(&smb,&msg))!=0) {
-		errormsg(WHERE,ERR_LOCK,smb.file,i);
-		continue; }
-	i=smb_getmsghdr(&smb,&msg);
-	if(i || msg.hdr.number!=post[l].number) {
-		smb_unlockmsghdr(&smb,&msg);
-		smb_freemsgmem(&msg);
-
-		msg.hdr.number=post[l].number;
-		if((i=smb_getmsgidx(&smb,&msg))!=0) {
-			errormsg(WHERE,ERR_READ,smb.file,i);
-			continue; }
-		if((i=smb_lockmsghdr(&smb,&msg))!=0) {
-			errormsg(WHERE,ERR_LOCK,smb.file,i);
-			continue; }
-		if((i=smb_getmsghdr(&smb,&msg))!=0) {
-			smb_unlockmsghdr(&smb,&msg);
-			errormsg(WHERE,ERR_READ,smb.file,i);
-			continue; } }
-
-	if(net										/* Network */
-		&& (!strncmpi(msg.subj,"NE:",3)         /* No Echo */
-		|| msg.from_net.type==NET_POSTLINK)) {	/* from PostLink */
-		smb_unlockmsghdr(&smb,&msg);
-		smb_freemsgmem(&msg);
-		continue; } 					/* From a Fido node, ignore it */
-
-	if(net && !(sub[subnum]->misc&SUB_GATE) && msg.from_net.type) {
-		smb_unlockmsghdr(&smb,&msg);
-		smb_freemsgmem(&msg);
-		continue; }
-
-	exported++;
-
-	fprintf(stream,"%s\r\n%s\r\n%s\r\n"
-		,msg.to,msg.from,msg.subj);
-	unixtodos(msg.hdr.when_written.time,&date,&curtime);
-	fprintf(stream,"%lu\r\n%lu\r\n%02u/%02u/%02u\r\n%02u:%02u\r\n"
-		"%s\r\n%c\r\n%c\r\nTEXT:\r\n"
-		,msg.hdr.number
-		,msg.hdr.thread_orig
-		,date.da_mon,date.da_day,TM_YEAR(date.da_year-1900)
-		,curtime.ti_hour,curtime.ti_min
-		,msg.hdr.attr&MSG_PRIVATE ? "PRIVATE" : "PUBLIC"
-		,msg.hdr.attr&MSG_READ ? 'Y':'N'
-		,strncmpi(msg.subj,"NE:",3) ? 'Y':'N');
-
-	for(i=0;i<msg.hdr.total_dfields;i++) {
-
-		if(msg.dfield[i].type!=TEXT_BODY
-			&& msg.dfield[i].type!=TEXT_TAIL)
-			continue;					/* skip non-text data fields */
-
-		if(msg.dfield[i].length<3)		/* need at least 3 bytes */
-			continue;
-
-		fseek(smb.sdt_fp,msg.hdr.offset+msg.dfield[i].offset,SEEK_SET);
-
-		lzh=0;
-		fread(&xlat,2,1,smb.sdt_fp);
-		if(xlat==XLAT_LZH) {
-			lzh=1;
-			fread(&xlat,2,1,smb.sdt_fp); }
-		if(xlat!=XLAT_NONE) 			/* no translations supported */
-			continue;
-
-		length=msg.dfield[i].length-2;
-		if(lzh)
-			length-=2;
-
-		if((buf=MALLOC(length))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,nulstr,length);
-			continue; }
-
-		fread(buf,length,1,smb.sdt_fp);
-
-		if(lzh) {
-			buflen=*(long *)buf;
-			if((outbuf=MALLOC(buflen))==NULL) {
-				errormsg(WHERE,ERR_ALLOC,"lzh",buflen);
-				FREE(buf);
-				continue; }
-			length=lzh_decode(buf,length,outbuf);
-			FREE(buf);
-			buf=outbuf; }
-
-		tear=0;
-		for(m=0,cr=1;m<length;m++) {
-			if(buf[m]==1) { /* Ctrl-A, so skip it and the next char */
-				m++;
-				continue; }
-			if(buf[m]==0)  /* Ignore line feeds */
-				continue;
-
-			if(m+3<length && cr && buf[m]=='-' && buf[m+1]=='-'
-				&& buf[m+2]=='-' && (buf[m+3]==CR || buf[m+3]==SP))
-				tear=1;
-
-			if(buf[m]==LF)
-				cr=1;
-			else
-				cr=0;
-
-			if(sub[subnum]->misc&SUB_ASCII) {
-				if(buf[m]<SP && buf[m]!=CR) /* Ctrl ascii */
-					buf[m]='.';             /* converted to '.' */
-				if((uchar)buf[m]>0x7f)		/* extended ASCII */
-					buf[m]='*'; }           /* converted to '*' */
-			fputc(buf[m],stream); }
-		fprintf(stream,"\r\n");
-		FREE(buf); }
-
-	if(!(sub[subnum]->misc&SUB_NOTAG)) {
-		if(!tear)	/* No previous tear line */
-			fprintf(stream,"---\r\n");            /* so add one */
-		if(sub[subnum]->misc&SUB_ASCII) ch='*';
-		else ch='�';
-		fprintf(stream," %c Synchronet UTI v%s\r\n",ch,VER); }
-
-	fprintf(stream,"\xff\r\n");
-	smb_unlockmsghdr(&smb,&msg);
-	smb_freemsgmem(&msg); }
-
-sprintf(str,"%20s Scanned %lu, Exported %lu\r\n"
-	,"",posts,exported);
-write(logfile,str,strlen(str));
-printf("\nDone.\n");
-smb_close(&smb);
-FREE(post);
-bail(0);
-return(0);
-}
diff --git a/src/sbbs2/uti/utihigh.c b/src/sbbs2/uti/utihigh.c
deleted file mode 100644
index 49e29ebca0..0000000000
--- a/src/sbbs2/uti/utihigh.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/* UTIHIGH.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-#include "uti.h"
-
-smb_t smb;
-
-/****************************************************************************/
-/* Returns the total number of msgs in the sub-board and sets 'ptr' to the  */
-/* number of the last message in the sub (0) if no messages.                */
-/****************************************************************************/
-ulong getlastmsg(uint subnum, ulong *ptr, time_t *t)
-{
-    char        str[256];
-    int         i;
-    ulong       total;
-    idxrec_t    idx;
-
-if(ptr)
-    (*ptr)=0;
-if(t)
-    (*t)=0;
-
-sprintf(smb.file,"%s%s",sub[subnum]->data_dir,sub[subnum]->code);
-smb.retry_time=30;
-if((i=smb_open(&smb))!=0) {
-	errormsg(WHERE,ERR_OPEN,smb.file,i);
-    return(0); }
-
-if(!filelength(fileno(smb.sid_fp))) {			/* Empty base */
-	smb_close(&smb);
-    return(0); }
-if((i=smb_locksmbhdr(&smb))!=0) {
-	smb_close(&smb);
-	errormsg(WHERE,ERR_LOCK,smb.file,i);
-    return(0); }
-if((i=smb_getlastidx(&smb,&idx))!=0) {
-	smb_close(&smb);
-	errormsg(WHERE,ERR_READ,smb.file,i);
-    return(0); }
-total=filelength(fileno(smb.sid_fp))/sizeof(idxrec_t);
-smb_unlocksmbhdr(&smb);
-smb_close(&smb);
-if(ptr)
-    (*ptr)=idx.number;
-if(t)
-    (*t)=idx.time;
-return(total);
-}
-
-
-int main(int argc, char **argv)
-{
-	char str[256];
-	int file,subnum,i;
-	ulong ptr;
-
-PREPSCREEN;
-
-printf("Synchronet UTIHIGH v%s\n",VER);
-
-
-if(argc<3)
-	exit(1);
-
-uti_init("UTIHIGH",argc,argv);
-
-subnum=getsubnum(argv[1]);
-if((int)subnum==-1)
-	bail(7);
-getlastmsg(subnum,&ptr,0);
-
-if((file=nopen(argv[2],O_CREAT|O_TRUNC|O_WRONLY))==-1)
-	bail(2);
-
-sprintf(str,"%lu",ptr);
-write(file,str,strlen(str));
-close(file);
-sprintf(str,"%20s Last message #%lu\r\n","",ptr);
-write(logfile,str,strlen(str));
-printf("\nDone.\n");
-bail(0);
-return(0);
-}
diff --git a/src/sbbs2/uti/utiimprt.c b/src/sbbs2/uti/utiimprt.c
deleted file mode 100644
index acfac0697e..0000000000
--- a/src/sbbs2/uti/utiimprt.c
+++ /dev/null
@@ -1,335 +0,0 @@
-/* UTIIMPRT.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-#include "uti.h"
-#include "crc32.h"
-
-smb_t smb;
-
-/****************************************************************************/
-/* Updates 16-bit "rcrc" with character 'ch'                                */
-/****************************************************************************/
-void ucrc16(uchar ch, ushort *rcrc) {
-	ushort i, cy;
-    uchar nch=ch;
- 
-for (i=0; i<8; i++) {
-    cy=*rcrc & 0x8000;
-    *rcrc<<=1;
-    if (nch & 0x80) *rcrc |= 1;
-    nch<<=1;
-    if (cy) *rcrc ^= 0x1021; }
-}
-
-/****************************************************************************/
-/* Returns 16-crc of string (not counting terminating NULL) 				*/
-/****************************************************************************/
-ushort crc16(char *str)
-{
-	int 	i=0;
-	ushort	crc=0;
-
-ucrc16(0,&crc);
-while(str[i])
-	ucrc16(str[i++],&crc);
-ucrc16(0,&crc);
-ucrc16(0,&crc);
-return(crc);
-}
-
-
-#define PRIVATE 0
-#define PUBLIC	1
-
-#define DEBUG 0
-
-
-char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
-char *mon[]={"Jan","Feb","Mar","Apr","May","Jun"
-            ,"Jul","Aug","Sep","Oct","Nov","Dec"};
-
-void remove_re(char *str)
-{
-while(!strnicmp(str,"RE:",3)) {
-	strcpy(str,str+3);
-	while(str[0]==SP)
-		strcpy(str,str+1); }
-}
-
-/****************************************************************************/
-/* Converts a date string in format MM/DD/YY into unix time format			*/
-/****************************************************************************/
-time_t dstrtounix(char *str)
-{
-	struct time curtime;
-	struct date date;
-
-#if DEBUG
-printf("\rdstrtounix           ");
-#endif
-
-curtime.ti_hour=curtime.ti_min=curtime.ti_sec=0;
-date.da_year=((str[6]&0xf)*10)+(str[7]&0xf);
-if(date.da_year<Y2K_2DIGIT_WINDOW)
-	date.da_year+=100;
-date.da_year+=1900;
-date.da_mon=((str[0]&0xf)*10)+(str[1]&0xf);
-date.da_day=((str[3]&0xf)*10)+(str[4]&0xf);
-return(dostounix(&date,&curtime));
-}
-
-/****************************************************************************/
-/* Checks the disk drive for the existence of a file. Returns 1 if it       */
-/* exists, 0 if it doesn't.                                                 */
-/* Called from upload                                                       */
-/****************************************************************************/
-char fexist(char *filespec)
-{
-    struct ffblk f;
-
-if(findfirst(filespec,&f,0)==NULL)
-    return(1);
-return(0);
-}
-
-/****************************************************************************/
-/* This function reads files that are potentially larger than 32k.  		*/
-/* Up to one megabyte of data can be read with each call.                   */
-/****************************************************************************/
-long lread(int file, char huge *buf,long bytes)
-{
-	long count;
-
-for(count=bytes;count>32767;count-=32767,buf+=32767)
-	if(read(file,(char *)buf,32767)!=32767)
-		return(-1L);
-if(read(file,(char *)buf,(int)count)!=count)
-	return(-1L);
-return(bytes);
-}
-
-
-int main(int argc, char **argv)
-{
-	char	str[256],to[256],from[256],title[256],*p,*buf,*outbuf;
-	ushort	xlat,net=0;
-	int 	i,j,file,lzh,storage;
-	uint	subnum,imported=0;
-	ulong	l,length,lzhlen,offset,crc;
-	FILE	*stream;
-	smbmsg_t	msg;
-	smbstatus_t status;
-
-PREPSCREEN;
-
-printf("Synchronet UTIIMPRT v%s\n",VER);
-
-if(argc<3)
-	exit(1);
-
-if((argc>3 && !stricmp(argv[3],"/NETWORK"))
-	|| (argc>4 && !stricmp(argv[4],"/NETWORK")))
-	net=NET_POSTLINK;
-
-uti_init("UTIIMPRT",argc,argv);
-
-if((file=nopen(argv[2],O_RDONLY))==-1)
-	bail(2);
-if((stream=fdopen(file,"rb"))==NULL)
-	bail(2);
-
-subnum=getsubnum(argv[1]);
-if((int)subnum==-1)
-	bail(7);
-
-sprintf(smb.file,"%s%s",sub[subnum]->data_dir,sub[subnum]->code);
-smb.retry_time=30;
-if((i=smb_open(&smb))!=0) {
-	errormsg(WHERE,ERR_OPEN,smb.file,i);
-	bail(5); }
-
-if(filelength(fileno(smb.shd_fp))<1) {	 /* Create it if it doesn't exist */
-	smb.status.max_crcs=sub[subnum]->maxcrcs;
-	smb.status.max_msgs=sub[subnum]->maxmsgs;
-	smb.status.max_age=sub[subnum]->maxage;
-	smb.status.attr=sub[subnum]->misc&SUB_HYPER ? SMB_HYPERALLOC : 0;
-	if((i=smb_create(&smb))!=0) {
-		errormsg(WHERE,ERR_CREATE,smb.file,i);
-		bail(5); } }
-
-printf("\r\nImporting ");
-
-while(!feof(stream) && !ferror(stream)) {
-	memset(&msg,0,sizeof(smbmsg_t));
-	memcpy(msg.hdr.id,"SHD\x1a",4);
-	msg.hdr.version=SMB_VERSION;
-	msg.hdr.when_imported.time=time(NULL);
-	msg.hdr.when_imported.zone=sys_timezone;
-	if(sub[subnum]->misc&SUB_AONLY)
-		msg.hdr.attr|=MSG_ANONYMOUS;
-
-	if(!fgets(to,250,stream))
-		break;
-	if(!fgets(from,250,stream))
-		break;
-	if(!fgets(title,250,stream))
-		break;
-	imported++;
-	printf("%-5u\b\b\b\b\b",imported);
-	truncsp(to);
-	truncsp(from);
-	truncsp(title);
-
-	smb_hfield(&msg,RECIPIENT,strlen(to),to);
-	strlwr(to);
-	msg.idx.to=crc16(to);
-
-	smb_hfield(&msg,SENDER,strlen(from),from);
-	strlwr(from);
-	msg.idx.from=crc16(from);
-
-	if(net)
-		i=smb_hfield(&msg,SENDERNETTYPE,2,&net);
-
-	i=smb_hfield(&msg,SUBJECT,strlen(title),title);
-	strlwr(title);
-	remove_re(title);
-	msg.idx.subj=crc16(title);
-
-	fgets(str,128,stream);	 /* skip msg # */
-	fgets(str,128,stream);	 /* ref # */
-	msg.hdr.thread_orig=atol(str);
-	fgets(str,128,stream);	 /* date */
-	msg.hdr.when_written.time=dstrtounix(str);
-	fgets(str,128,stream);	 /* time */
-	msg.hdr.when_written.time+=atoi(str)*60*60;  /* hours */
-	p=strchr(str,':');
-	if(p)
-		msg.hdr.when_written.time+=atoi(p+1)*60; /* mins */
-	fgets(str,128,stream);	 /* private/public */
-	if(!stricmp(str,"PRIVATE"))
-		msg.hdr.attr|=MSG_PRIVATE;
-	fgets(str,128,stream);	 /* Read? Y/N */
-	if(toupper(str[0])=='Y')
-		msg.hdr.attr|=MSG_READ;
-	fgets(str,128,stream);	 /* Net? Y/N - ignore */
-	if(toupper(str[0])=='Y')
-		msg.hdr.netattr|=MSG_TYPELOCAL;
-	while(!feof(stream) && !ferror(stream)) {
-		fgets(str,128,stream);
-		if(!strcmp(str,"TEXT:\r\n"))
-			break; }
-
-	buf=NULL;
-	length=0;
-	crc=0xffffffff;
-	while(!feof(stream) && !ferror(stream)) {
-		fgets(str,128,stream);
-		if(!strcmp(str,"\xff\r\n"))     /* end of text */
-			break;
-		j=strlen(str);
-		if((buf=REALLOC(buf,length+j+1))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,argv[1],length+j+1);
-			bail(3); }
-		if(sub[subnum]->maxcrcs) {
-			for(i=0;i<j;i++)
-				crc=ucrc32(str[i],crc); }
-		strcpy(buf+length,str);
-		length+=strlen(str); }
-	crc=~crc;
-
-	if((i=smb_locksmbhdr(&smb))!=0) {
-		errormsg(WHERE,ERR_LOCK,smb.file,i);
-		bail(11); }
-
-	if((i=smb_getstatus(&smb))!=0) {
-		errormsg(WHERE,ERR_READ,smb.file,i);
-		bail(12); }
-
-	if(sub[subnum]->maxcrcs) {
-		i=smb_addcrc(&smb,crc);
-		if(i) {
-			printf("\nDuplicate message!\n");
-			FREE(buf);
-			smb_unlocksmbhdr(&smb);
-			smb_freemsgmem(&msg);
-			continue; } }
-
-	if(length>=2 && buf[length-1]==LF && buf[length-2]==CR)
-		length-=2;
-	if(length>=2 && buf[length-1]==LF && buf[length-2]==CR)
-        length-=2;
-
-	lzh=0;
-	if(sub[subnum]->misc&SUB_LZH && length+2>=SDT_BLOCK_LEN) {
-		if((outbuf=(char *)MALLOC(length*2))==NULL) {
-			errormsg(WHERE,ERR_ALLOC,"lzh",length*2);
-			smb_unlocksmbhdr(&smb);
-			smb_freemsgmem(&msg);
-			bail(3); }
-		lzhlen=lzh_encode(buf,length,outbuf);
-		if(lzhlen>1
-			&& smb_datblocks(lzhlen+4)
-				<smb_datblocks(length+2)) { /* Compressable */
-			length=lzhlen+2;
-			FREE(buf);
-			lzh=1;
-			buf=outbuf; }
-		else				/* Uncompressable */
-			FREE(outbuf); }
-
-	length+=2;						/* for translation string */
-
-	if(status.attr&SMB_HYPERALLOC) {
-		offset=smb_hallocdat(&smb);
-		storage=SMB_HYPERALLOC; }
-	else {
-		if((i=smb_open_da(&smb))!=0) {
-			errormsg(WHERE,ERR_OPEN,smb.file,i);
-			bail(5); }
-		if(sub[subnum]->misc&SUB_FAST) {
-			offset=smb_fallocdat(&smb,length,1);
-			storage=SMB_FASTALLOC; }
-		else {
-			offset=smb_allocdat(&smb,length,1);
-			storage=SMB_SELFPACK; }
-		fclose(smb.sda_fp); }
-
-	msg.hdr.offset=offset;
-
-	smb_dfield(&msg,TEXT_BODY,length);
-
-	fseek(smb.sdt_fp,offset,SEEK_SET);
-	if(lzh) {
-		xlat=XLAT_LZH;
-		fwrite(&xlat,2,1,smb.sdt_fp); }
-	xlat=XLAT_NONE;
-	fwrite(&xlat,2,1,smb.sdt_fp);
-	j=SDT_BLOCK_LEN-2;				/* Don't read/write more than 255 */
-	if(lzh)
-		j-=2;
-	l=0;
-	length-=2;
-	if(lzh)
-		length-=2;
-	while(l<length) {
-		if(l+j>length)
-			j=length-l;
-		fwrite(buf+l,j,1,smb.sdt_fp);
-		l+=j;
-		j=SDT_BLOCK_LEN; }
-	fflush(smb.sdt_fp);
-	FREE(buf);
-	smb_unlocksmbhdr(&smb);
-	smb_addmsghdr(&smb,&msg,storage);
-	smb_freemsgmem(&msg); }
-
-sprintf(str,"%20s Imported %u\r\n","",imported);
-write(logfile,str,strlen(str));
-printf("\nDone.\n");
-bail(0);
-return(0);
-}
-
diff --git a/src/sbbs2/uti/utilist.c b/src/sbbs2/uti/utilist.c
deleted file mode 100644
index a880ba429b..0000000000
--- a/src/sbbs2/uti/utilist.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* UTILIST.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-#include "uti.h"
-
-int main(int argc, char **argv)
-{
-	char str[256];
-	int i,j,file;
-
-PREPSCREEN;
-
-printf("Synchronet UTILIST v%s\n",VER);
-
-if(argc<2)
-	exit(1);
-
-uti_init("UTILIST",argc,argv);
-
-if((file=nopen(argv[1],O_CREAT|O_TRUNC|O_WRONLY))==-1)
-    exit(2);
-
-for(j=0;j<total_grps;j++)
-	for(i=0;i<total_subs;i++) {
-		if(sub[i]->grp!=j)
-			continue;
-		sprintf(str,"%s\r\n%s\r\n",sub[i]->code,sub[i]->code);
-		write(file,str,strlen(str));
-		sprintf(str,"%s\r\n",sub[i]->lname);
-		write(file,str,strlen(str)); }
-close(file);
-printf("\nDone.\n");
-bail(0);
-return(0);
-}
diff --git a/src/sbbs2/uti/utilstrd.c b/src/sbbs2/uti/utilstrd.c
deleted file mode 100644
index 1c8bf05222..0000000000
--- a/src/sbbs2/uti/utilstrd.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/* UTILSTRD.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-#include "uti.h"
-
-#define READ	1
-#define WRITE	2
-
-int main(int argc, char **argv)
-{
-	char	*p,str[256],name[256],mode=0;
-	int 	i,file;
-	uint	usernumber;
-	time_t	ptr;
-	FILE	*stream;
-
-PREPSCREEN;
-
-printf("Synchronet UTILSTRD v%s\n",VER);
-
-if(argc<4)
-	exit(1);
-
-if(!stricmp(argv[1],"READ"))
-    mode=READ;
-else if(!stricmp(argv[1],"WRITE"))
-    mode=WRITE;
-if(!mode)
-    exit(1);
-
-uti_init("UTILSTRD",argc,argv);
-
-if(mode==READ) {
-	if((file=nopen(argv[2],O_CREAT|O_TRUNC|O_WRONLY))==-1)
-		exit(2); }
-else {
-	if((file=nopen(argv[2],O_RDONLY))==-1)
-		exit(2); }
-
-if((stream=fdopen(file,"wb"))==NULL)
-	exit(2);
-
-
-strcpy(name,argv[3]);		/* build the user name */
-for(i=4;i<argc;i++) {
-	strcat(name," ");
-	strcat(name,argv[i]); }
-
-sprintf(str,"%sUSER\\NAME.DAT",data_dir);
-if((file=nopen(str,O_RDONLY))==-1)
-	exit(8);
-
-usernumber=1;
-while(!eof(file)) {
-	read(file,str,LEN_ALIAS+2);
-	str[25]=0;
-	p=strchr(str,3);
-	if(p) *p=0;
-	if(!stricmp(str,name))
-		break;
-	usernumber++; }
-if(stricmp(str,name)) {
-	printf("Username '%s' not found.\n",name);
-	exit(9); }
-close(file);
-
-sprintf(str,"%sUSER\\PTRS\\%4.4u.IXB",data_dir,usernumber);
-if((file=nopen(str,mode==READ ? O_RDONLY : O_WRONLY|O_CREAT))==-1)
-	exit(10);
-for(i=0;i<total_subs;i++) {
-	lseek(file,((long)sub[i]->ptridx)*10L,SEEK_SET);
-	if(mode==READ) {
-		read(file,&ptr,4);
-		fprintf(stream,"%lu\r\n",ptr); }
-	else {
-		fgets(str,81,stream);
-		ptr=atol(str);
-		write(file,&ptr,4); } }
-close(file);
-printf("\nDone.\n");
-bail(0);
-return(0);
-}
-
diff --git a/src/sbbs2/uti/utiver.c b/src/sbbs2/uti/utiver.c
deleted file mode 100644
index 6f0111f25b..0000000000
--- a/src/sbbs2/uti/utiver.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* UTIVER.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include <stdio.h>
-#include <conio.h>
-#include <io.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-#include "uti.h"
-
-int main(int argc, char **argv)
-{
-	char str[1024];
-	int file;
-
-sprintf(str,"2\r\nSynchronet UTI Driver v%s - "
-			"Developed 1995-1997 Rob Swindell\r\n",VER);
-if(argc<2)
-	exit(1);
-if((file=open(argv[1],O_WRONLY|O_CREAT|O_TRUNC,S_IWRITE))==-1)
-	exit(2);
-write(file,str,strlen(str));
-close(file);
-return(0);
-}
diff --git a/src/sbbs2/vars.c b/src/sbbs2/vars.c
deleted file mode 100644
index 5fb3e2bc22..0000000000
--- a/src/sbbs2/vars.c
+++ /dev/null
@@ -1,154 +0,0 @@
-/* VARS.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/*************************************************************/
-/* External (Global/Public) Variables for use only with SBBS */
-/*************************************************************/
-
-#include <stdio.h>
-#include <dos.h>
-
-#ifndef GLOBAL
-#define GLOBAL
-unsigned _stklen=22000; 			/* Set stack size in code, not header */
-									/* 20k, NOT enough */
-#endif
-
-#include "sbbsdefs.h"
-#include "smbdefs.h"
-#include "text.h"
-
-GLOBAL char 	*envp[128]; 	/* Original environment */
-
-GLOBAL char 	menu_dir[128];	/* Over-ride default menu dir */
-GLOBAL char 	menu_file[128]; /* Over-ride menu file */
-
-GLOBAL user_t	useron; 		/* User currently online */
-GLOBAL node_t	thisnode;		/* Node information */
-GLOBAL smb_t	smb;			/* Currently open message base */
-
-								/* Batch download queue */
-GLOBAL char 	**batdn_name;	/* Filenames */
-GLOBAL ushort	*batdn_alt; 	/* Alternate path */
-GLOBAL uint 	*batdn_dir, 	/* Directory for each file */
-				batdn_total;	/* Total files */
-GLOBAL long 	*batdn_offset;	/* Offset for data */
-GLOBAL ulong	*batdn_size;	/* Size of file in bytes */
-GLOBAL ulong	*batdn_cdt; 	/* Credit value of file */
-
-								/* Batch upload queue */
-GLOBAL char 	**batup_desc,	/* Description for each file */
-				**batup_name,	/* Filenames */
-				*batup_misc;	/* Miscellaneous bits */
-GLOBAL ushort	*batup_alt; 	/* Alternate path */
-GLOBAL uint 	*batup_dir, 	/* Directory for each file */
-				batup_total;	/* Total files */
-
-/*********************************/
-/* Color Configuration Variables */
-/*********************************/
-GLOBAL char 	*text[TOTAL_TEXT];			/* Text from CTRL\TEXT.DAT */
-GLOBAL char 	*text_sav[TOTAL_TEXT];		/* Text from CTRL\TEXT.DAT */
-GLOBAL int		directvideo;	/* Turbo C's video flag - direct or bios */
-GLOBAL char 	qoc;			/* Quit after one caller */
-GLOBAL long 	freedosmem; 	/* Amount of free DOS memory */
-GLOBAL char 	orgcmd[129];	/* Original command to execute bbs */
-GLOBAL char 	dszlog[127];	/* DSZLOG enviornment variable */
-GLOBAL char 	debug;			/* Flag to allow debug writes */
-GLOBAL int		keybuftop,keybufbot;	/* Keyboard input buffer pointers */
-GLOBAL char 	keybuf[KEY_BUFSIZE];	/* Keyboard input buffer */
-GLOBAL char 	connection[LEN_MODEM+1];/* Connection Description */
-GLOBAL ulong	cur_rate;		/* Current Connection (DCE) Rate */
-GLOBAL ulong	cur_cps;		/* Current Average Transfer CPS */
-GLOBAL ulong	dte_rate;		/* Current COM Port (DTE) Rate */
-GLOBAL time_t 	timeout;		/* User inactivity timeout reference */
-GLOBAL char 	timeleft_warn;	/* low timeleft warning flag */
-GLOBAL char 	curatr; 		/* Current Text Attributes Always */
-GLOBAL long 	lncntr; 		/* Line Counter - for PAUSE */
-GLOBAL long 	tos;			/* Top of Screen */
-GLOBAL long 	rows;			/* Current Rows for User */
-GLOBAL long 	autoterm;		/* Autodetected terminal type */
-GLOBAL char 	slbuf[SAVE_LINES][LINE_BUFSIZE+1]; /* Saved for redisplay */
-GLOBAL char 	slatr[SAVE_LINES];	/* Starting attribute of each line */
-GLOBAL char 	slcnt;			/* Number of lines currently saved */
-GLOBAL char 	lbuf[LINE_BUFSIZE+1];/* Temp storage for each line output */
-GLOBAL int		lbuflen;		/* Number of characters in line buffer */
-GLOBAL char 	latr;			/* Starting attribute of line buffer */
-GLOBAL ulong	console;		/* Defines current Console settings */
-GLOBAL char 	tmp[256];		/* Used all over as temp string */
-GLOBAL char 	*nulstr;		/* Null string pointer */
-GLOBAL char 	*crlf;			/* CRLF string pointer */
-GLOBAL char 	wordwrap[81];	/* Word wrap buffer */
-GLOBAL time_t	now,			/* Used to store current time in Unix format */
-				answertime, 	/* Time call was answered */
-				logontime,		/* Time user logged on */
-				starttime,		/* Time stamp to use for time left calcs */
-				ns_time,		/* File new-scan time */
-				last_ns_time;	/* Most recent new-file-scan this call */
-GLOBAL uchar 	action;			/* Current action of user */
-GLOBAL char 	statline;		/* Current Status Line number */
-GLOBAL long 	online; 		/* Remote/Local or not online */
-GLOBAL long 	sys_status; 	/* System Status */
-GLOBAL char 	*sub_misc;		/* Save misc and ptrs for subs */
-GLOBAL ulong	*sub_ptr;		/* for fast pointer update */
-GLOBAL ulong	*sub_last;		/* last read message pointer */
-
-GLOBAL ulong	logon_ulb,		/* Upload Bytes This Call */
-				logon_dlb,		/* Download Bytes This Call */
-				logon_uls,		/* Uploads This Call */
-				logon_dls,		/* Downloads This Call */
-				logon_posts,	/* Posts This Call */
-				logon_emails,	/* Emails This Call */
-				logon_fbacks;	/* Feedbacks This Call */
-GLOBAL uchar	logon_ml;		/* ML of the user apon logon */
-
-GLOBAL int 		node_disk;		/* Number of Node's disk */
-GLOBAL uint 	main_cmds;		/* Number of Main Commands this call */
-GLOBAL uint 	xfer_cmds;		/* Number of Xfer Commands this call */
-GLOBAL ulong	posts_read; 	/* Number of Posts read this call */
-GLOBAL char 	temp_uler[31];  /* User who uploaded the files to temp dir */
-GLOBAL char 	temp_file[41];	/* Origin of extracted temp files */
-GLOBAL long 	temp_cdt;		/* Credit value of file that was extracted */
-GLOBAL char 	autohang;		/* Used for auto-hangup after transfer */
-GLOBAL char 	cap_fname[41];	/* Capture filename - default is CAPTURE.TXT */
-GLOBAL FILE 	*capfile;		/* File string to use for capture file */
-GLOBAL int 		inputfile;		/* File handle to use for input */
-GLOBAL int 		logfile; 		/* File handle for node.log */
-GLOBAL int 		nodefile;		/* File handle for node.dab */
-GLOBAL int		node_ext;		/* File handle for node.exb */
-GLOBAL char 	logcol; 		/* Current column of log file */
-GLOBAL uint 	criterrs; 		/* Critical error counter */
-GLOBAL struct date date;		/* Used for DOS compatible date pointer */
-GLOBAL struct time curtime; 	/* Used for DOS compatible time pointer */
-
-GLOBAL uint 	curgrp, 		/* Current group */
-				*cursub,		/* Current sub-board for each group */
-				curlib, 		/* Current library */
-				*curdir;		/* Current directory for each library */
-GLOBAL uint 	*usrgrp,		/* Real group numbers */
-				usrgrps;		/* Number groups this user has access to */
-GLOBAL uint 	*usrlib,		/* Real library numbers */
-				usrlibs;		/* Number of libs this user can access */
-GLOBAL uint 	**usrsub,		/* Real sub numbers */
-				*usrsubs;		/* Num of subs with access for each grp */
-GLOBAL uint 	**usrdir,		/* Real dir numbers */
-				*usrdirs;		/* Num of dirs with access for each lib */
-GLOBAL int		cursubnum;		/* For ARS */
-GLOBAL int		curdirnum;		/* For ARS */
-GLOBAL long 	timeleft;		/* Number of seconds user has left online */
-GLOBAL uchar	sbbsnode[81];	/* Environment var to contain node dir path */
-GLOBAL uchar	sbbsnnum[81];	/* Environment var to contain node num */
-GLOBAL char 	*comspec;		/* Pointer to environment variable COMSPEC */
-GLOBAL ushort	altul;			/* Upload to alternate path flag */
-GLOBAL uint 	inDV;			/* DESQview version, or 0 if not under DV */
-GLOBAL uchar	lastnodemsg;	/* Number of node last message was sent to */
-GLOBAL char 	color[TOTAL_COLORS];	/* Different colors for the BBS */
-GLOBAL time_t	next_event; 	/* Next event time - from front-end */
-GLOBAL char 	lastuseron[LEN_ALIAS+1];  /* Name of user last online */
-GLOBAL char 	cid[LEN_CID+1]; /* Caller ID of current caller */
-GLOBAL uint 	emshandle;		/* EMS handle for overlay swap */
-GLOBAL char 	emsver; 		/* Version of EMS installed */
-GLOBAL char 	*noaccess_str;	/* Why access was denied via ARS */
-GLOBAL long 	noaccess_val;	/* Value of parameter not met in ARS */
-GLOBAL int		errorlevel; 	/* Error level of external program */
diff --git a/src/sbbs2/ver.c b/src/sbbs2/ver.c
deleted file mode 100644
index caac3f66c7..0000000000
--- a/src/sbbs2/ver.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/* VER.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include <dos.h>
-#include "sbbs.h"
-#include "riolib.h"
-#include "riodefs.h"
-#include "etext.h"
-
-extern uint inDV;
-extern uint asmrev;
-extern uint emshandle;
-extern char emsver;
-
-char *compile_time=__TIME__,*compile_date=__DATE__;
-
-char *decrypt(ulong [], char *str);
-
-void ver()
-{
-	char str[128],tmp[128];
-	int i;
-
-i=rioctl(FIFOCTL);
-CRLF;
-#if defined(__OS2__)
-strcpy(str,decrypt(VersionNoticeOS2,0));
-#elif defined(__WIN32__)
-strcpy(str,decrypt(VersionNoticeW32,0));
-#else
-strcpy(str,decrypt(VersionNoticeDOS,0));
-#endif
-center(str);
-CRLF;
-
-sprintf(str,"Revision %c%s %s %.5s  "
-#ifdef __FLAT__
-	"RIOLIB %u.%02u"
-#else
-	"RCIOL %u"
-#endif
-	"  SMBLIB %s  BCC %X.%02X"
-	,REVISION,BETA,compile_date,compile_time
-#ifdef __FLAT__
-	,rioctl(GVERS)/100,rioctl(GVERS)%100
-#else
-	,rioctl(GVERS)
-#endif
-	,smb_lib_ver()
-	,__BORLANDC__>>8
-	,__BORLANDC__&0xff);
-center(str);
-CRLF;
-
-center(decrypt(CopyrightAddress,0));
-CRLF;
-
-#if defined(__OS2__)
-
-sprintf(str,"OS/2 %u.%u (%u.%u)",_osmajor/10,_osminor/10,_osmajor,_osminor);
-
-#elif defined(__WIN32__)
-
-sprintf(str,"Win32 %u.%02u",_osmajor,_osminor);
-
-#else	/* DOS */
-
-sprintf(str,"DOS %u.%02u",_osmajor,_osminor);
-if(inDV) {
-	sprintf(tmp,"   DESQview %u.%02u",inDV>>8,inDV&0xff);
-	strcat(str,tmp); }
-if(emsver) {
-	sprintf(tmp,"   EMS %u.%u",(emsver&0xf0)>>4,emsver&0xf);
-	strcat(str,tmp);
-    if(emshandle!=0xffff)
-		strcat(str," (overlay)"); }
-
-#endif
-
-if(i&0xc0) {
-	strcat(str,"   16550 UART");
-	if(i&0xc)
-		strcat(str," FIFO"); }
-#if DEBUG
-	i=open("NODE.CFG",0);
-	bprintf("   Files (%d)",i);
-	close(i);
-#endif
-center(str);
-}
diff --git a/src/sbbs2/viewfile.c b/src/sbbs2/viewfile.c
deleted file mode 100644
index 24c234f674..0000000000
--- a/src/sbbs2/viewfile.c
+++ /dev/null
@@ -1,73 +0,0 @@
-#line 1 "VIEWFILE.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-
-void viewfilecontents(file_t f)
-{
-	char str[128],cmd[128];
-	int i;
-
-if(f.size<=0L) {
-	bputs(text[FileNotThere]);
-	return; }
-
-sprintf(str,"%s%s",f.altpath > 0 && f.altpath<=altpaths
-	? altpath[f.altpath-1] : dir[f.dir]->path
-	,unpadfname(f.name,tmp));
-strcpy(tmp,f.name);
-truncsp(tmp);
-for(i=0;i<total_fviews;i++) {
-	if(!stricmp(tmp+9,fview[i]->ext)
-		&& chk_ar(fview[i]->ar,useron)) {
-		strcpy(cmd,fview[i]->cmd);
-		break; } }
-if(i==total_fviews)
-	bprintf(text[NonviewableFile],tmp+9);
-else
-	if((i=external(cmdstr(cmd,str,str,NULL)
-		,EX_OUTL|EX_OUTR|EX_INR|EX_CC))!=0)
-		errormsg(WHERE,ERR_EXEC,cmdstr(cmd,str,str,NULL),i);
-}
-
-/****************************************************************************/
-/* Views file with:                                                         */
-/* (B)atch download, (V)iew file (E)xtended info, (Q)uit, or [Next]:        */
-/* call with ext=1 for default to extended info, or 0 for file view         */
-/* Returns -1 for Batch, 1 for Next, or 0 for Quit                          */
-/****************************************************************************/
-int viewfile(file_t f, int ext)
-{
-	char ch,str[256];
-    int i;
-
-curdirnum=f.dir;	/* for ARS */
-while(online) {
-    if(ext)
-        fileinfo(f);
-	else
-		viewfilecontents(f);
-    ASYNC;
-    CRLF;
-    sprintf(str,text[FileInfoPrompt],unpadfname(f.name,tmp));
-    mnemonics(str);
-    ch=getkeys("BEVQ\r",0);
-    if(ch=='Q' || sys_status&SS_ABORT)
-        return(0);
-    switch(ch) {
-        case 'B':
-            addtobatdl(f);
-            CRLF;
-            return(-1);
-        case 'E':
-            ext=1;
-            continue;
-        case 'V':
-            ext=0;
-            continue;
-        case CR:
-            return(1); } }
-return(0);
-}
-
diff --git a/src/sbbs2/xfer_hi.c b/src/sbbs2/xfer_hi.c
deleted file mode 100644
index 78e8f36bc7..0000000000
--- a/src/sbbs2/xfer_hi.c
+++ /dev/null
@@ -1,1516 +0,0 @@
-#line 1 "XFER_HI.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-
-uint temp_dirnum;
-
-/****************************************************************************/
-/* Uploads files                                                            */
-/****************************************************************************/
-void upload(uint dirnum)
-{
-    static char lastdesc[59];
-	uchar str[256],src[256]={""},descbeg[25]={""},descend[25]={""},path[256]
-        ,fname[13],keys[256],ch,*p;
-    time_t start,end;
-    int i,j,file,destuser[MAX_USERXFER],destusers=0;
-	uint k;
-    file_t f;
-    struct dfree d;
-    user_t user;
-    node_t node;
-
-if(sys_status&SS_EVENT && online==ON_REMOTE && !dir_op(dirnum))
-    bprintf(text[UploadBeforeEvent],timeleft/60);
-if(altul)
-    strcpy(path,altpath[altul-1]);
-else
-    strcpy(path,dir[dirnum]->path);
-if(path[1]==':')
-    i=path[0]-'A'+1;
-else i=0;
-getdfree(i,&d);
-if(d.df_sclus==0xffff)
-    errormsg(WHERE,ERR_CHK,path,0);
-if((ulong)d.df_bsec*(ulong)d.df_sclus
-    *(ulong)d.df_avail<(ulong)min_dspace*1024L) {
-    bputs(text[LowDiskSpace]);
-    sprintf(str,"Diskspace is low: %s",path);
-    errorlog(str);
-	if(!dir_op(dirnum))
-        return; }
-bprintf(text[DiskNBytesFree],ultoac((ulong)d.df_bsec
-    *(ulong)d.df_sclus*(ulong)d.df_avail,tmp));
-f.dir=curdirnum=dirnum;
-f.misc=0;
-f.altpath=altul;
-bputs(text[Filename]);
-if(!getstr(fname,12,K_UPPER) || strchr(fname,'?') || strchr(fname,'*')
-	|| !checkfname(fname) || (trashcan(fname,"FILE") && !dir_op(dirnum))) {
-	if(fname[0])
-		bputs(text[BadFilename]);
-	return; }
-if(dirnum==sysop_dir)
-    sprintf(str,text[UploadToSysopDirQ],fname);
-else if(dirnum==user_dir)
-    sprintf(str,text[UploadToUserDirQ],fname);
-else
-    sprintf(str,text[UploadToCurDirQ],fname,lib[dir[dirnum]->lib]->sname
-        ,dir[dirnum]->sname);
-if(!yesno(str)) return;
-action=NODE_ULNG;
-padfname(fname,f.name);
-sprintf(str,"%s%s",path,fname);
-if(fexist(str)) {   /* File is on disk */
-	if(!dir_op(dirnum) && online!=ON_LOCAL) {		 /* local users or sysops */
-        bprintf(text[FileAlreadyThere],fname);
-        return; }
-    if(!yesno(text[FileOnDiskAddQ]))
-        return; }
-else if(online==ON_LOCAL) {
-    bputs(text[FileNotOnDisk]);
-    bputs(text[EnterPath]);
-    if(!getstr(tmp,60,K_LINE|K_UPPER))
-        return;
-    backslash(tmp);
-    sprintf(src,"%s%s",tmp,fname); }
-strcpy(str,dir[dirnum]->exts);
-strcpy(tmp,f.name);
-truncsp(tmp);
-j=strlen(str);
-for(i=0;i<j;i+=ch+1) { /* Check extension of upload with allowable exts */
-    p=strchr(str+i,',');
-    if(p!=NULL)
-        *p=0;
-    ch=strlen(str+i);
-    if(!strcmp(tmp+9,str+i))
-        break; }
-if(j && i>=j) {
-    bputs(text[TheseFileExtsOnly]);
-    bputs(dir[dirnum]->exts);
-    CRLF;
-	if(!dir_op(dirnum)) return; }
-bputs(text[SearchingForDupes]);
-for(i=k=0;i<usrlibs;i++)
-	for(j=0;j<usrdirs[i];j++,k++) {
-		outchar('.');
-		if(k && !(k%5))
-			bputs("\b\b\b\b\b     \b\b\b\b\b");
-		if((usrdir[i][j]==dirnum || dir[usrdir[i][j]]->misc&DIR_DUPES)
-			&& findfile(usrdir[i][j],f.name)) {
-            bputs(text[SearchedForDupes]);
-			bprintf(text[FileAlreadyOnline],f.name);
-			if(!dir_op(dirnum))
-				return; 	 /* File is in database for another dir */
-			if(usrdir[i][j]==dirnum)
-				return; } } /* don't allow duplicates */
-bputs(text[SearchedForDupes]);
-if(dirnum==user_dir) {  /* User to User transfer */
-    bputs(text[EnterAfterLastDestUser]);
-	while((!dir_op(dirnum) && destusers<max_userxfer) || destusers<MAX_USERXFER) {
-        bputs(text[SendFileToUser]);
-		if(!getstr(str,LEN_ALIAS,K_UPRLWR))
-            break;
-        if((user.number=finduser(str))!=0) {
-			if(!dir_op(dirnum) && user.number==useron.number) {
-                bputs(text[CantSendYourselfFiles]);
-                continue; }
-            for(i=0;i<destusers;i++)
-                if(user.number==destuser[i])
-                    break;
-            if(i<destusers) {
-                bputs(text[DuplicateUser]);
-                continue; }
-            getuserdat(&user);
-            if((user.rest&(FLAG('T')|FLAG('D')))
-                || !chk_ar(lib[dir[user_dir]->lib]->ar,user)
-                || !chk_ar(dir[user_dir]->dl_ar,user)) {
-                bprintf(text[UserWontBeAbleToDl],user.alias); }
-            else {
-                bprintf(text[UserAddedToDestList],user.alias);
-                destuser[destusers++]=user.number; } }
-        else {
-            CRLF; } }
-    if(!destusers)
-        return; }
-if(dir[dirnum]->misc&DIR_RATE) {
-    SYNC;
-    bputs(text[RateThisFile]);
-	ch=getkey(K_ALPHA);
-	if(!isalpha(ch) || sys_status&SS_ABORT)
-		return;
-	CRLF;
-	sprintf(descbeg,text[Rated],toupper(ch)); }
-if(dir[dirnum]->misc&DIR_ULDATE) {
-    now=time(NULL);
-    if(descbeg[0])
-        strcat(descbeg," ");
-    sprintf(str,"%s  ",unixtodstr(now,tmp));
-    strcat(descbeg,str); }
-if(dir[dirnum]->misc&DIR_MULT) {
-    SYNC;
-    if(!noyes(text[MultipleDiskQ])) {
-        bputs(text[HowManyDisksTotal]);
-        if((i=getnum(99))<2)
-            return;
-        bputs(text[NumberOfFile]);
-        if((j=getnum(i))<1)
-            return;
-        if(j==1)
-            lastdesc[0]=0;
-        if(i>9)
-            sprintf(descend,text[FileOneOfTen],j,i);
-        else
-            sprintf(descend,text[FileOneOfTwo],j,i); }
-    else
-        lastdesc[0]=0; }
-else
-    lastdesc[0]=0;
-bputs(text[EnterDescNow]);
-i=LEN_FDESC-(strlen(descbeg)+strlen(descend));
-getstr(lastdesc,i,K_LINE|K_EDIT|K_AUTODEL);
-if(sys_status&SS_ABORT)
-	return;
-if(descend[0])      /* end of desc specified, so pad desc with spaces */
-    sprintf(f.desc,"%s%-*s%s",descbeg,i,lastdesc,descend);
-else                /* no end specified, so string ends at desc end */
-    sprintf(f.desc,"%s%s",descbeg,lastdesc);
-
-if(dir[dirnum]->misc&DIR_ANON && !(dir[dirnum]->misc&DIR_AONLY)
-	&& (dir_op(dirnum) || useron.exempt&FLAG('A'))) {
-    if(!noyes(text[AnonymousQ]))
-        f.misc|=FM_ANON; }
-sprintf(str,"%s%s",path,fname);
-if(src[0]) {    /* being copied from another local dir */
-    bprintf(text[RetrievingFile],fname);
-    if(mv(src,str,1))
-        return;
-    CRLF; }
-if(fexist(str)) {   /* File is on disk */
-	if(!uploadfile(&f))
-        return; }
-else {
-    menu("ULPROT");
-    SYNC;
-    strcpy(keys,"Q");
-    if(dirnum==user_dir || !max_batup)  /* no batch user to user xfers */
-        mnemonics(text[ProtocolOrQuit]);
-    else {
-        mnemonics(text[ProtocolBatchOrQuit]);
-        strcat(keys,"B"); }
-    for(i=0;i<total_prots;i++)
-		if(prot[i]->ulcmd[0] && chk_ar(prot[i]->ar,useron)) {
-            sprintf(tmp,"%c",prot[i]->mnemonic);
-            strcat(keys,tmp); }
-    ch=getkeys(keys,0);
-	if(ch=='Q')
-		return;
-    if(ch=='B') {
-        if(batup_total>=max_batup)
-            bputs(text[BatchUlQueueIsFull]);
-        else {
-            for(i=0;i<batup_total;i++)
-                if(!strcmp(batup_name[i],f.name)) {
-					bprintf(text[FileAlreadyInQueue],f.name);
-                    return; }
-            strcpy(batup_name[batup_total],f.name);
-            strcpy(batup_desc[batup_total],f.desc);
-            batup_dir[batup_total]=dirnum;
-            batup_misc[batup_total]=f.misc;
-            batup_alt[batup_total]=altul;
-            batup_total++;
-            bprintf(text[FileAddedToUlQueue]
-                ,f.name,batup_total,max_batup); } }
-    else {
-        for(i=0;i<total_prots;i++)
-			if(prot[i]->ulcmd[0] && prot[i]->mnemonic==ch
-				&& chk_ar(prot[i]->ar,useron))
-                break;
-        if(i<total_prots) {
-            start=time(NULL);
-			protocol(cmdstr(prot[i]->ulcmd,str,nulstr,NULL),0);
-            end=time(NULL);
-			if(!(dir[dirnum]->misc&DIR_ULTIME)) /* Don't deduct upload time */
-				starttime+=end-start;
-			ch=uploadfile(&f);
-            autohangup();
-			if(!ch)  /* upload failed, don't process user to user xfer */
-				return; } } }
-if(dirnum==user_dir) {  /* Add files to XFER.IXT in INDX dir */
-	sprintf(str,"%sXFER.IXT",data_dir);
-    if((file=nopen(str,O_WRONLY|O_CREAT|O_APPEND))==-1) {
-        errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_APPEND);
-        return; }
-    for(j=0;j<destusers;j++) {
-        for(i=1;i<=sys_nodes;i++) { /* Tell user, if online */
-            getnodedat(i,&node,0);
-            if(node.useron==destuser[j] && !(node.misc&NODE_POFF)
-                && (node.status==NODE_INUSE || node.status==NODE_QUIET)) {
-                sprintf(str,text[UserToUserXferNodeMsg],node_num,useron.alias);
-                putnmsg(i,str);
-                break; } }
-        if(i>sys_nodes) {   /* User not online */
-            sprintf(str,text[UserSentYouFile],useron.alias);
-            putsmsg(destuser[j],str); }
-        sprintf(str,"%4.4u %12.12s %4.4u\r\n"
-            ,destuser[j],f.name,useron.number);
-        write(file,str,strlen(str)); }
-    close(file); }
-}
-
-/****************************************************************************/
-/* Checks directory for 'dir' and prompts user to enter description for     */
-/* the files that aren't in the database.                                   */
-/* Returns 1 if the user aborted, 0 if not.                                 */
-/****************************************************************************/
-char bulkupload(uint dirnum)
-{
-    char done,str[256];
-    struct ffblk ff;
-    file_t f;
-
-memset(&f,0,sizeof(file_t));
-f.dir=dirnum;
-f.altpath=altul;
-bprintf(text[BulkUpload],lib[dir[dirnum]->lib]->sname,dir[dirnum]->sname);
-sprintf(str,"%s*.*",altul>0 && altul<=altpaths ? altpath[altul-1]
-    : dir[dirnum]->path);
-done=findfirst(str,&ff,0);
-action=NODE_ULNG;
-SYNC;
-while(!done && !msgabort()) {
-    if(gettotalfiles(dirnum)>dir[dirnum]->maxfiles) {
-        bputs(text[DirFull]);
-        return(0); }
-    strupr(ff.ff_name);
-    padfname(ff.ff_name,str);
-    if(findfile(f.dir,str)==0) {
-        strcpy(f.name,str);
-		f.cdt=ff.ff_fsize;
-        bprintf(text[BulkUploadDescPrompt],f.name,f.cdt);
-		getstr(f.desc,LEN_FDESC,K_LINE);
-		if(sys_status&SS_ABORT)
-			return(1);
-		uploadfile(&f); }	/* used to abort here if the file failed upload */
-    done=findnext(&ff); }
-return(0);
-}
-
-
-
-/****************************************************************************/
-/* This is the batch menu section                                           */
-/****************************************************************************/
-void batchmenu()
-{
-    char str[129],tmp2[250],done=0,ch;
-	uint i,j,xfrprot,xfrdir;
-    ulong totalcdt,totalsize,totaltime;
-    time_t start,end;
-    int file,n;
-    file_t f;
-
-if(!batdn_total && !batup_total && upload_dir==INVALID_DIR) {
-    bputs(text[NoFilesInBatchQueue]);
-    return; }
-if(useron.misc&(RIP|WIP) && !(useron.misc&EXPERT))
-    menu("BATCHXFR");
-lncntr=0;
-while(online && !done && (batdn_total || batup_total
-	|| upload_dir!=INVALID_DIR)) {
-	if(!(useron.misc&(EXPERT|RIP|WIP))) {
-        sys_status&=~SS_ABORT;
-        if(lncntr) {
-            SYNC;
-            CRLF;
-            if(lncntr)          /* CRLF or SYNC can cause pause */
-                pause(); }
-        menu("BATCHXFR"); }
-    ASYNC;
-    bputs(text[BatchMenuPrompt]);
-    ch=getkeys("BCDLQRU?\r",0);
-    if(ch>SP)
-        logch(ch,0);
-    switch(ch) {
-        case '?':
-			if(useron.misc&(EXPERT|RIP|WIP))
-                menu("BATCHXFR");
-            break;
-        case CR:
-        case 'Q':
-            lncntr=0;
-            done=1;
-            break;
-        case 'B':   /* Bi-directional transfers */
-            if(useron.rest&FLAG('D')) {
-                bputs(text[R_Download]);
-				break; }
-            if(useron.rest&FLAG('U')) {
-                bputs(text[R_Upload]);
-				break; }
-            if(!batdn_total) {
-                bputs(text[DownloadQueueIsEmpty]);
-                break; }
-			if(!batup_total && upload_dir==INVALID_DIR) {
-                bputs(text[UploadQueueIsEmpty]);
-                break; }
-            for(i=0,totalcdt=0;i<batdn_total;i++)
-                    totalcdt+=batdn_cdt[i];
-            if(!(useron.exempt&FLAG('D'))
-                && totalcdt>useron.cdt+useron.freecdt) {
-                bprintf(text[YouOnlyHaveNCredits]
-                    ,ultoac(useron.cdt+useron.freecdt,tmp));
-                break; }
-            for(i=0,totalsize=totaltime=0;i<batdn_total;i++) {
-                totalsize+=batdn_size[i];
-                if(!(dir[batdn_dir[i]]->misc&DIR_TFREE) && cur_cps)
-                    totaltime+=batdn_size[i]/(ulong)cur_cps; }
-			if(!(useron.exempt&FLAG('T')) && !SYSOP && totaltime>timeleft) {
-                bputs(text[NotEnoughTimeToDl]);
-                break; }
-            menu("BIPROT");
-            if(!create_batchdn_lst())
-                break;
-            if(!create_batchup_lst())
-                break;
-            if(!create_bimodem_pth())
-                break;
-            SYNC;
-            mnemonics(text[ProtocolOrQuit]);
-            strcpy(tmp2,"Q");
-            for(i=0;i<total_prots;i++)
-				if(prot[i]->bicmd[0] && chk_ar(prot[i]->ar,useron)) {
-                    sprintf(tmp,"%c",prot[i]->mnemonic);
-                    strcat(tmp2,tmp); }
-			ungetkey(useron.prot);
-            ch=getkeys(tmp2,0);
-            if(ch=='Q')
-                break;
-            for(i=0;i<total_prots;i++)
-				if(prot[i]->bicmd[0] && prot[i]->mnemonic==ch
-					&& chk_ar(prot[i]->ar,useron))
-                    break;
-            if(i<total_prots) {
-                xfrprot=i;
-                action=NODE_BXFR;
-                SYNC;
-				for(i=0;i<batdn_total;i++)
-                    if(dir[batdn_dir[i]]->seqdev) {
-                        lncntr=0;
-                        unpadfname(batdn_name[i],tmp);
-                        sprintf(tmp2,"%s%s",temp_dir,tmp);
-                        if(!fexist(tmp2)) {
-                            seqwait(dir[batdn_dir[i]]->seqdev);
-                            bprintf(text[RetrievingFile],tmp);
-                            sprintf(str,"%s%s"
-                                ,batdn_alt[i]>0 && batdn_alt[i]<=altpaths
-                                ? altpath[batdn_alt[i]-1]
-                                : dir[batdn_dir[i]]->path
-                                ,tmp);
-                            mv(str,tmp2,1); /* copy the file to temp dir */
-                            getnodedat(node_num,&thisnode,1);
-							thisnode.aux=0xff;
-                            putnodedat(node_num,thisnode);
-                            CRLF; } }
-                sprintf(str,"%sBATCHDN.LST",node_dir);
-                sprintf(tmp2,"%sBATCHUP.LST",node_dir);
-                start=time(NULL);
-				protocol(cmdstr(prot[xfrprot]->bicmd,str,tmp2,NULL),0);
-                end=time(NULL);
-				for(i=0;i<batdn_total;i++)
-					if(dir[batdn_dir[i]]->seqdev) {
-						unpadfname(batdn_name[i],tmp);
-						sprintf(tmp2,"%s%s",temp_dir,tmp);
-						remove(tmp2); }
-                batch_upload();
-                batch_download(xfrprot);
-                if(batdn_total)     /* files still in queue, not xfered */
-                    notdownloaded(totalsize,start,end);
-                autohangup(); }
-            break;
-        case 'C':
-            if(batup_total) {
-                if(!noyes(text[ClearUploadQueueQ])) {
-                    batup_total=0;
-                    bputs(text[UploadQueueCleared]); } }
-            if(batdn_total) {
-                if(!noyes(text[ClearDownloadQueueQ])) {
-                    for(i=0;i<batdn_total;i++) {
-                        f.dir=batdn_dir[i];
-                        f.datoffset=batdn_offset[i];
-                        f.size=batdn_size[i];
-                        strcpy(f.name,batdn_name[i]);
-                        closefile(f); }
-                    batdn_total=0;
-                    bputs(text[DownloadQueueCleared]); } }
-            break;
-        case 'D':
-            if(useron.rest&FLAG('D')) {
-                bputs(text[R_Download]);
-				break; }
-            if(!batdn_total) {
-                bputs(text[DownloadQueueIsEmpty]);
-                break; }
-            start_batch_download();
-            break;
-        case 'L':
-            if(batup_total) {
-                bputs(text[UploadQueueLstHdr]);
-                for(i=0;i<batup_total;i++)
-                    bprintf(text[UploadQueueLstFmt],i+1,batup_name[i]
-                        ,batup_desc[i]); }
-            if(batdn_total) {
-                bputs(text[DownloadQueueLstHdr]);
-                for(i=0,totalcdt=0,totalsize=0;i<batdn_total;i++) {
-                    bprintf(text[DownloadQueueLstFmt],i+1
-                        ,batdn_name[i],ultoac(batdn_cdt[i],tmp)
-                        ,ultoac(batdn_size[i],str)
-                        ,cur_cps
-                        ? sectostr(batdn_size[i]/(ulong)cur_cps,tmp2)
-                        : "??:??:??");
-                    totalsize+=batdn_size[i];
-                    totalcdt+=batdn_cdt[i]; }
-                bprintf(text[DownloadQueueTotals]
-                    ,ultoac(totalcdt,tmp),ultoac(totalsize,str),cur_cps
-                    ? sectostr(totalsize/(ulong)cur_cps,tmp2)
-                    : "??:??:??"); }
-            break;  /* Questionable line ^^^, see note above function */
-        case 'R':
-            if(batup_total) {
-                bprintf(text[RemoveWhichFromUlQueue],batup_total);
-                n=getnum(batup_total);
-                if(n>=1) {
-                    n--;
-                    batup_total--;
-                    while(n<batup_total) {
-                        batup_dir[n]=batup_dir[n+1];
-                        batup_misc[n]=batup_misc[n+1];
-                        batup_alt[n]=batup_alt[n+1];
-                        strcpy(batup_name[n],batup_name[n+1]);
-                        strcpy(batup_desc[n],batup_desc[n+1]);
-                        n++; }
-                    if(!batup_total)
-                        bputs(text[UploadQueueCleared]); } }
-             if(batdn_total) {
-                bprintf(text[RemoveWhichFromDlQueue],batdn_total);
-                n=getnum(batdn_total);
-                if(n>=1) {
-                    n--;
-                    f.dir=batdn_dir[n];
-                    strcpy(f.name,batdn_name[n]);
-                    f.datoffset=batdn_offset[n];
-                    f.size=batdn_size[n];
-                    closefile(f);
-                    batdn_total--;
-                    while(n<batdn_total) {
-                        strcpy(batdn_name[n],batdn_name[n+1]);
-                        batdn_dir[n]=batdn_dir[n+1];
-                        batdn_cdt[n]=batdn_cdt[n+1];
-                        batdn_alt[n]=batdn_alt[n+1];
-                        batdn_size[n]=batdn_size[n+1];
-                        batdn_offset[n]=batdn_offset[n+1];
-                        n++; }
-                    if(!batdn_total)
-                        bputs(text[DownloadQueueCleared]); } }
-            break;
-       case 'U':
-			if(useron.rest&FLAG('U')) {
-                bputs(text[R_Upload]);
-				break; }
-			if(!batup_total && upload_dir==INVALID_DIR) {
-                bputs(text[UploadQueueIsEmpty]);
-                break; }
-            menu("BATUPROT");
-            if(!create_batchup_lst())
-                break;
-            if(!create_bimodem_pth())
-                break;
-            ASYNC;
-            mnemonics(text[ProtocolOrQuit]);
-            strcpy(str,"Q");
-            for(i=0;i<total_prots;i++)
-				if(prot[i]->batulcmd[0] && chk_ar(prot[i]->ar,useron)) {
-                    sprintf(tmp,"%c",prot[i]->mnemonic);
-                    strcat(str,tmp); }
-            ch=getkeys(str,0);
-            if(ch=='Q')
-                break;
-            for(i=0;i<total_prots;i++)
-				if(prot[i]->batulcmd[0] && prot[i]->mnemonic==ch
-					&& chk_ar(prot[i]->ar,useron))
-                    break;
-            if(i<total_prots) {
-                sprintf(str,"%sBATCHUP.LST",node_dir);
-                xfrprot=i;
-				if(batup_total)
-					xfrdir=batup_dir[0];
-				else
-					xfrdir=upload_dir;
-                action=NODE_ULNG;
-                SYNC;
-				if(online==ON_REMOTE) {
-					delfiles(temp_dir,"*.*");
-					start=time(NULL);
-					protocol(cmdstr(prot[xfrprot]->batulcmd,str,nulstr,NULL),1);
-					end=time(NULL);
-					if(!(dir[xfrdir]->misc&DIR_ULTIME))
-						starttime+=end-start; }
-                batch_upload();
-                delfiles(temp_dir,"*.*");
-                autohangup(); }
-            break; } }
-delfiles(temp_dir,"*.*");
-}
-
-/****************************************************************************/
-/* Download files from batch queue                                          */
-/****************************************************************************/
-void start_batch_download()
-{
-	char ch,str[256],tmp2[256],tmp3[128],fname[64];
-    int j;
-    uint i,xfrprot;
-    ulong totalcdt,totalsize,totaltime;
-    time_t start,end;
-    file_t f;
-
-if(useron.rest&FLAG('D')) {     /* Download restriction */
-    bputs(text[R_Download]);
-    return; }
-for(i=0,totalcdt=0;i<batdn_total;i++)
-    totalcdt+=batdn_cdt[i];
-if(!(useron.exempt&FLAG('D'))
-    && totalcdt>useron.cdt+useron.freecdt) {
-    bprintf(text[YouOnlyHaveNCredits]
-        ,ultoac(useron.cdt+useron.freecdt,tmp));
-    return; }
-
-if(online==ON_LOCAL) {          /* Local download */
-    bputs(text[EnterPath]);
-    if(!getstr(str,60,K_LINE|K_UPPER))
-        return;
-    backslash(str);
-    for(i=0;i<batdn_total;i++) {
-		curdirnum=batdn_dir[i]; 		/* for ARS */
-        lncntr=0;
-        unpadfname(batdn_name[i],tmp);
-        sprintf(tmp2,"%s%s",str,tmp);
-		seqwait(dir[batdn_dir[i]]->seqdev);
-        bprintf(text[RetrievingFile],tmp);
-        sprintf(tmp3,"%s%s"
-            ,batdn_alt[i]>0 && batdn_alt[i]<=altpaths
-            ? altpath[batdn_alt[i]-1]
-            : dir[batdn_dir[i]]->path
-            ,tmp);
-        j=mv(tmp3,tmp2,1);
-        getnodedat(node_num,&thisnode,1);
-		thisnode.aux=30; /* clear the seq dev # */
-        putnodedat(node_num,thisnode);
-        CRLF;
-        if(j)   /* copy unsuccessful */
-			return;
-		for(j=0;j<total_dlevents;j++)
-			if(!stricmp(dlevent[j]->ext,batdn_name[i]+9)
-				&& chk_ar(dlevent[j]->ar,useron)) {
-				bputs(dlevent[j]->workstr);
-				external(cmdstr(dlevent[j]->cmd,tmp2,nulstr,NULL),EX_OUTL);
-				CRLF; }
-		}
-    for(i=0;i<batdn_total;i++) {
-		curdirnum=batdn_dir[i]; 		/* for ARS */
-        f.dir=batdn_dir[i];
-        strcpy(f.name,batdn_name[i]);
-        f.datoffset=batdn_offset[i];
-        f.size=batdn_size[i];
-        f.altpath=batdn_alt[i];
-        downloadfile(f);
-        closefile(f); }
-    batdn_total=0;
-    return; }
-
-for(i=0,totalsize=totaltime=0;i<batdn_total;i++) {
-    totalsize+=batdn_size[i];
-    if(!(dir[batdn_dir[i]]->misc&DIR_TFREE) && cur_cps)
-        totaltime+=batdn_size[i]/(ulong)cur_cps; }
-if(!(useron.exempt&FLAG('T')) && !SYSOP && totaltime>timeleft) {
-    bputs(text[NotEnoughTimeToDl]);
-    return; }
-menu("BATDPROT");
-if(!create_batchdn_lst())
-    return;
-if(!create_bimodem_pth())
-    return;
-ASYNC;
-mnemonics(text[ProtocolOrQuit]);
-strcpy(tmp2,"Q");
-for(i=0;i<total_prots;i++)
-	if(prot[i]->batdlcmd[0] && chk_ar(prot[i]->ar,useron)) {
-        sprintf(tmp,"%c",prot[i]->mnemonic);
-        strcat(tmp2,tmp); }
-ungetkey(useron.prot);
-ch=getkeys(tmp2,0);
-if(ch=='Q' || sys_status&SS_ABORT)
-    return;
-for(i=0;i<total_prots;i++)
-	if(prot[i]->batdlcmd[0] && prot[i]->mnemonic==ch
-		&& chk_ar(prot[i]->ar,useron))
-        break;
-if(i<total_prots) {
-    xfrprot=i;
-    /* delfiles(temp_dir,"*.*"); fix for CD-ROM */
-	for(i=0;i<batdn_total;i++) {
-		curdirnum=batdn_dir[i]; 		/* for ARS */
-		unpadfname(batdn_name[i],fname);
-        if(dir[batdn_dir[i]]->seqdev) {
-            lncntr=0;
-			sprintf(tmp2,"%s%s",temp_dir,fname);
-            if(!fexist(tmp2)) {
-                seqwait(dir[batdn_dir[i]]->seqdev);
-				bprintf(text[RetrievingFile],fname);
-                sprintf(str,"%s%s"
-                    ,batdn_alt[i]>0 && batdn_alt[i]<=altpaths
-                    ? altpath[batdn_alt[i]-1]
-                    : dir[batdn_dir[i]]->path
-					,fname);
-                mv(str,tmp2,1); /* copy the file to temp dir */
-                getnodedat(node_num,&thisnode,1);
-				thisnode.aux=40; /* clear the seq dev # */
-                putnodedat(node_num,thisnode);
-                CRLF; } }
-		else
-			sprintf(tmp2,"%s%s"
-				,batdn_alt[i]>0 && batdn_alt[i]<=altpaths
-				? altpath[batdn_alt[i]-1]
-				: dir[batdn_dir[i]]->path
-				,fname);
-		sprintf(str,"total_dlevents=%d",total_dlevents);
-//		  logline("dl",str);
-		for(j=0;j<total_dlevents;j++) {
-//			  logline("dl",dlevent[j]->ext);
-  //		  logline("dl",dlevent[j]->cmd);
-	//		  logline("dl",tmp2);
-			if(stricmp(dlevent[j]->ext,batdn_name[i]+9))
-				continue;
-//			  logline("dl","chkar");
-			if(!chk_ar(dlevent[j]->ar,useron))
-				continue;
-//			  logline("dl","bputs");
-			bputs(dlevent[j]->workstr);
-//			  logline("dl","external");
-			external(cmdstr(dlevent[j]->cmd,tmp2,nulstr,NULL),EX_OUTL);
-//			  logline("dl","crlf");
-			CRLF; }
-//		  logline("dl","after dlevents");
-		}
-
-    sprintf(str,"%sBATCHDN.LST",node_dir);
-    getnodedat(node_num,&thisnode,1);
-    action=NODE_DLNG;
-    if(cur_cps)
-        unixtodos(now+(totalsize/(ulong)cur_cps)
-            ,&date,&curtime);
-    thisnode.aux=(curtime.ti_hour*60)+curtime.ti_min;
-	thisnode.action=action;
-    putnodedat(node_num,thisnode); /* calculate ETA */
-    start=time(NULL);
-	protocol(cmdstr(prot[xfrprot]->batdlcmd,str,nulstr,NULL),0);
-    end=time(NULL);
-    batch_download(xfrprot);
-    if(batdn_total)
-        notdownloaded(totalsize,start,end);
-    /* delfiles(temp_dir,"*.*"); fix for CD-ROM */
-    autohangup(); }
-}
-
-/*****************************************************************************/
-/* Temp directory section. Files must be extracted here and both temp_uler   */
-/* and temp_uler fields should be filled before entrance.                    */
-/*****************************************************************************/
-void temp_xfer()
-{
-    char str[256],tmp2[256],done=0,ch;
-    uint i,dirnum=total_dirs,j,files;
-    ulong bytes;
-    time_t start,end;
-    struct ffblk ff;
-    struct dfree d;
-    file_t f;
-
-if(!usrlibs)
-	return;
-if(useron.rest&FLAG('D')) {
-    bputs(text[R_Download]);
-    return; }
-/*************************************/
-/* Create TEMP directory information */
-/*************************************/
-if((dir[dirnum]=(dir_t *)MALLOC(sizeof(dir_t)))==0) {
-    errormsg(WHERE,ERR_ALLOC,"temp_dir",sizeof(dir_t));
-    return; }
-memset(dir[dirnum],0,sizeof(dir_t));
-dir[dirnum]->lname="Temporary";
-dir[dirnum]->sname="Temp";
-strcpy(dir[dirnum]->code,"TEMP");
-dir[dirnum]->path=temp_dir;
-dir[dirnum]->maxfiles=MAX_FILES;
-dir[dirnum]->data_dir=dir[0]->data_dir;
-dir[dirnum]->op_ar=nulstr;
-temp_dirnum=curdirnum=usrdir[curlib][curdir[curlib]];
-total_dirs++;
-
-/****************************/
-/* Fill filedat information */
-/****************************/
-sprintf(f.name,"TEMP_%3.3d.%s",node_num,useron.tmpext);
-strcpy(f.desc,"Temp File");
-f.dir=dirnum;
-f.misc=f.timesdled=f.dateuled=f.datedled=0L;
-
-if(useron.misc&(RIP|WIP) && !(useron.misc&EXPERT))
-    menu("TEMPXFER");
-lncntr=0;
-while(online && !done) {
-	if(!(useron.misc&(EXPERT|RIP|WIP))) {
-        sys_status&=~SS_ABORT;
-        if(lncntr) {
-            SYNC;
-            CRLF;
-            if(lncntr)          /* CRLF or SYNC can cause pause */
-                pause(); }
-        menu("TEMPXFER"); }
-    ASYNC;
-    bputs(text[TempDirPrompt]);
-    strcpy(f.uler,temp_uler);
-    ch=getkeys("ADEFNILQRVX?\r",0);
-    if(ch>SP)
-        logch(ch,0);
-    switch(ch) {
-        case 'A':   /* add to temp file */
-            if(temp_dir[1]==':')
-                i=temp_dir[0]-'A'+1;
-            else i=0;
-            getdfree(i,&d);
-            if(d.df_sclus==0xffff)
-                errormsg(WHERE,ERR_CHK,temp_dir,0);
-            if((ulong)d.df_bsec*(ulong)d.df_sclus
-                *(ulong)d.df_avail<(ulong)min_dspace*1024L) {
-                bputs(text[LowDiskSpace]);
-                sprintf(str,"Diskspace is low: %s",temp_dir);
-                errorlog(str);
-				if(!dir_op(dirnum))
-                    break; }
-            bprintf(text[DiskNBytesFree],ultoac((ulong)d.df_bsec
-                *(ulong)d.df_sclus*(ulong)d.df_avail,tmp));
-			if(!getfilespec(str))
-                break;
-            if(!checkfname(str))
-                break;
-            sprintf(tmp2,"Added %s to %s",str,f.name);
-            logline(nulstr,tmp2);
-            sprintf(tmp2,"%s%s",temp_dir,str);
-            sprintf(str,"%s%s",temp_dir,f.name);
-			external(cmdstr(temp_cmd(),str,tmp2,NULL),EX_CC|EX_OUTL|EX_OUTR);
-            break;
-        case 'D':   /* download from temp dir */
-            sprintf(str,"%s%s",temp_dir,f.name);
-            if(!fexist(str)) {
-                bprintf(text[TempFileNotCreatedYet],f.name);
-                break; }
-            f.size=f.cdt=flength(str);
-            f.opencount=0;
-            if(temp_cdt)    /* if file was not free */
-				f.cdt=f.size;
-            else
-                f.cdt=0;
-            if(!(useron.exempt&FLAG('D'))
-                && f.cdt>useron.cdt+useron.freecdt) {
-                bprintf(text[YouOnlyHaveNCredits]
-                    ,ultoac(useron.cdt+useron.freecdt,tmp));
-                break; }    /* f.cdt must equal size here */
-			if(!(useron.exempt&FLAG('T')) && !dir_op(dirnum)
-                && !(dir[temp_dirnum]->misc&DIR_TFREE) && cur_cps
-                && f.size/(ulong)cur_cps>timeleft) {
-                bputs(text[NotEnoughTimeToDl]);
-                break; }
-            if(!chk_ar(dir[temp_dirnum]->dl_ar,useron)) {
-                bputs(text[CantDownloadFromDir]);
-                break; }
-            addfiledat(&f);
-            menu("DLPROT");
-            SYNC;
-            mnemonics(text[ProtocolOrQuit]);
-            strcpy(tmp2,"Q");
-            for(i=0;i<total_prots;i++)
-				if(prot[i]->dlcmd[0] && chk_ar(prot[i]->ar,useron)) {
-                    sprintf(tmp,"%c",prot[i]->mnemonic);
-                    strcat(tmp2,tmp); }
-			ungetkey(useron.prot);
-            ch=getkeys(tmp2,0);
-            for(i=0;i<total_prots;i++)
-				if(prot[i]->dlcmd[0] && prot[i]->mnemonic==ch
-					&& chk_ar(prot[i]->ar,useron))
-                    break;
-            if(i<total_prots) {
-                getnodedat(node_num,&thisnode,1);
-                action=NODE_DLNG;
-                if(cur_cps)
-                    unixtodos(now+(f.size/(ulong)cur_cps)
-                        ,&date,&curtime);
-                thisnode.aux=(curtime.ti_hour*60)+curtime.ti_min;
-                putnodedat(node_num,thisnode); /* calculate ETA */
-                start=time(NULL);
-				j=protocol(cmdstr(prot[i]->dlcmd,str,nulstr,NULL),0);
-                end=time(NULL);
-                if(dir[temp_dirnum]->misc&DIR_TFREE)
-                    starttime+=end-start;
-                if(prot[i]->misc&PROT_DSZLOG) {
-                    if(checkprotlog(f))
-                        downloadfile(f);
-                    else
-                        notdownloaded(f.size,start,end); }
-                else {
-                    if(!j)
-                        downloadfile(f);
-                    else {
-                        bprintf(text[FileNotSent],f.name);
-                        notdownloaded(f.size,start,end); } }
-                autohangup(); }
-            removefiledat(f);
-            break;
-        case 'E':
-			extract(usrdir[curlib][curdir[curlib]]);
-            sys_status&=~SS_ABORT;
-            break;
-        case 'F':   /* Create a file list */
-            delfiles(temp_dir,"*.*");
-            create_filelist("FILELIST.TXT",0);
-            if(!(sys_status&SS_ABORT))
-                logline(nulstr,"Created list of all files");
-            CRLF;
-            sys_status&=~SS_ABORT;
-            break;
-        case 'I':   /* information on what's here */
-            bprintf(text[TempFileInfo],f.uler,temp_file);
-            break;
-        case 'L':   /* list files in dir */
-            if(!getfilespec(str))
-                break;
-			if(!checkfname(str))
-				break;
-            bytes=files=0L;
-            CRLF;
-            sprintf(tmp2,"%s%s",temp_dir,str);
-            i=findfirst(tmp2,&ff,0);
-            while(!i && !msgabort()) {
-                bprintf("%s %10s\r\n",padfname(ff.ff_name,str)
-                    ,ultoac(ff.ff_fsize,tmp));
-                files++;
-                bytes+=ff.ff_fsize;
-                i=findnext(&ff); }
-            if(!files)
-                bputs(text[EmptyDir]);
-            else if(files>1)
-                bprintf(text[TempDirTotal],ultoac(bytes,tmp),files);
-            break;
-        case 'N':   /* Create a list of new files */
-            delfiles(temp_dir,"*.*");
-            create_filelist("NEWFILES.TXT",FL_ULTIME);
-            if(!(sys_status&SS_ABORT))
-                logline(nulstr,"Created list of new files");
-            CRLF;
-            sys_status&=~SS_ABORT;
-            break;
-        case 'R':   /* Remove files from dir */
-            if(!getfilespec(str))
-                break;
-			// padfname(str,tmp);  Removed 04/14/96
-			bprintf(text[NFilesRemoved],delfiles(temp_dir,tmp));
-            break;
-        case 'V':   /* view files in dir */
-            bputs(text[FileSpec]);
-            if(!getstr(str,12,K_UPPER) || !checkfname(str))
-                break;
-            viewfiles(dirnum,str);
-            break;
-        case CR:
-        case 'Q':   /* quit */
-            done=1;
-            break;
-        case 'X':   /* extract from archive in temp dir */
-            extract(dirnum);
-            sys_status&=~SS_ABORT;
-            break;
-        case '?':   /* menu */
-			if(useron.misc&(EXPERT|RIP|WIP))
-                menu("TEMPXFER");
-            break; }
-    if(sys_status&SS_ABORT)
-        break; }
-FREE(dir[dirnum]);
-total_dirs--;
-}
-
-
-/****************************************************************************/
-/* Re-sorts file directory 'dirnum' according to dir[dirnum]->sort type     */
-/****************************************************************************/
-void resort(uint dirnum)
-{
-	char str[25],ixbfname[128],datfname[128],exbfname[128],txbfname[128]
-		,ext[512],nulbuf[512];
-	uchar HUGE16 *ixbbuf, HUGE16 *datbuf;
-	uchar HUGE16 *ixbptr[MAX_FILES];
-	int ixbfile,datfile,exbfile,txbfile,i,j;
-	ulong ixblen,datlen,offset,newoffset,l;
-
-memset(nulbuf,0,512);
-bprintf(text[ResortLineFmt],lib[dir[dirnum]->lib]->sname,dir[dirnum]->sname);
-sprintf(ixbfname,"%s%s.IXB",dir[dirnum]->data_dir,dir[dirnum]->code);
-sprintf(datfname,"%s%s.DAT",dir[dirnum]->data_dir,dir[dirnum]->code);
-sprintf(exbfname,"%s%s.EXB",dir[dirnum]->data_dir,dir[dirnum]->code);
-sprintf(txbfname,"%s%s.TXB",dir[dirnum]->data_dir,dir[dirnum]->code);
-
-if(flength(ixbfname)<1L || flength(datfname)<1L) {
-	remove(exbfname);
-	remove(txbfname);
-    remove(ixbfname);
-    remove(datfname);
-    bputs(text[ResortEmptyDir]);
-    return; }
-bputs(text[Sorting]);
-if((ixbfile=nopen(ixbfname,O_RDONLY))==-1) {
-    errormsg(WHERE,ERR_OPEN,ixbfname,O_RDONLY);
-    return; }
-if((datfile=nopen(datfname,O_RDONLY))==-1) {
-    close(ixbfile);
-    errormsg(WHERE,ERR_OPEN,datfname,O_RDONLY);
-    return; }
-ixblen=filelength(ixbfile);
-datlen=filelength(datfile);
-if((ixbbuf=MALLOC(ixblen))==NULL) {
-    close(ixbfile);
-    close(datfile);
-    errormsg(WHERE,ERR_ALLOC,ixbfname,ixblen);
-    return; }
-if((datbuf=MALLOC(datlen))==NULL) {
-    close(ixbfile);
-    close(datfile);
-    FREE((char *)ixbbuf);
-    errormsg(WHERE,ERR_ALLOC,datfname,datlen);
-    return; }
-if(lread(ixbfile,ixbbuf,ixblen)!=ixblen) {
-    close(ixbfile);
-    close(datfile);
-    FREE((char *)ixbbuf);
-    FREE((char *)datbuf);
-    errormsg(WHERE,ERR_READ,ixbfname,ixblen);
-    return; }
-if(lread(datfile,datbuf,datlen)!=datlen) {
-    close(ixbfile);
-    close(datfile);
-    FREE((char *)ixbbuf);
-    FREE((char *)datbuf);
-    errormsg(WHERE,ERR_READ,datfname,datlen);
-    return; }
-close(ixbfile);
-close(datfile);
-if((ixbfile=nopen(ixbfname,O_WRONLY|O_TRUNC))==-1) {
-    FREE((char *)ixbbuf);
-    FREE((char *)datbuf);
-    errormsg(WHERE,ERR_OPEN,ixbfname,O_WRONLY|O_TRUNC);
-    return; }
-if((datfile=nopen(datfname,O_WRONLY|O_TRUNC))==-1) {
-    close(ixbfile);
-    FREE((char *)ixbbuf);
-    FREE((char *)datbuf);
-    errormsg(WHERE,ERR_OPEN,datfname,O_WRONLY|O_TRUNC);
-    return; }
-for(l=0,i=0;l<ixblen && i<MAX_FILES;l+=F_IXBSIZE,i++)
-    ixbptr[i]=ixbbuf+l;
-switch(dir[dirnum]->sort) {
-    case SORT_NAME_A:
-        qsort((void *)ixbptr,ixblen/F_IXBSIZE,sizeof(ixbptr[0])
-            ,(int(*)(const void*, const void*))fnamecmp_a);
-        break;
-    case SORT_NAME_D:
-        qsort((void *)ixbptr,ixblen/F_IXBSIZE,sizeof(ixbptr[0])
-            ,(int(*)(const void*, const void*))fnamecmp_d);
-        break;
-    case SORT_DATE_A:
-        qsort((void *)ixbptr,ixblen/F_IXBSIZE,sizeof(ixbptr[0])
-            ,(int(*)(const void*, const void*))fdatecmp_a);
-        break;
-    case SORT_DATE_D:
-        qsort((void *)ixbptr,ixblen/F_IXBSIZE,sizeof(ixbptr[0])
-            ,(int(*)(const void*, const void*))fdatecmp_d);
-        break; }
-
-if((exbfile=nopen(exbfname,O_RDWR|O_CREAT))==-1) {
-	close(ixbfile);
-	close(datfile);
-	FREE((char *)ixbbuf);
-    FREE((char *)datbuf);
-    errormsg(WHERE,ERR_OPEN,exbfname,O_RDWR|O_CREAT);
-	return; }
-if((txbfile=nopen(txbfname,O_RDWR|O_CREAT))==-1) {
-    close(exbfile);
-	close(datfile);
-	close(exbfile);
-	FREE((char *)ixbbuf);
-    FREE((char *)datbuf);
-	errormsg(WHERE,ERR_OPEN,txbfname,O_RDWR|O_CREAT);
-	return; }
-
-for(i=0;i<ixblen/F_IXBSIZE;i++) {
-    offset=ixbptr[i][11]|((long)ixbptr[i][12]<<8)|((long)ixbptr[i][13]<<16);
-    lwrite(datfile,&datbuf[offset],F_LEN);
-
-	newoffset=(ulong)i*(ulong)F_LEN;
-
-	j=datbuf[offset+F_MISC];  /* misc bits */
-	if(j!=ETX) j-=SP;
-	if(j&FM_EXTDESC) { /* extended description */
-		lseek(exbfile,(offset/F_LEN)*512L,SEEK_SET);
-		memset(ext,0,512);
-		read(exbfile,ext,512);
-		while(filelength(txbfile)<(newoffset/F_LEN)*512L) {
-//			  lseek(txbfile,0L,SEEK_END);
-			write(txbfile,nulbuf,512); }
-		lseek(txbfile,(newoffset/F_LEN)*512L,SEEK_SET);
-		write(txbfile,ext,512); }
-
-	str[0]=newoffset&0xff;	   /* Get offset within DAT file for IXB file */
-	str[1]=(newoffset>>8)&0xff;
-	str[2]=(newoffset>>16)&0xff;
-    lwrite(ixbfile,ixbptr[i],11);       /* filename */
-    lwrite(ixbfile,str,3);              /* offset */
-    lwrite(ixbfile,ixbptr[i]+14,8); }   /* upload and download times */
-close(exbfile);
-close(txbfile);
-close(ixbfile);
-close(datfile);
-remove(exbfname);
-rename(txbfname,exbfname);
-if(!flength(exbfname))
-	remove(exbfname);
-FREE((char *)ixbbuf);
-FREE((char *)datbuf);
-if(ixblen/F_IXBSIZE==datlen/F_LEN)
-    bputs(text[Sorted]);
-else
-    bprintf(text[Compressed]
-        ,(uint)((datlen/F_LEN)-(ixblen/F_IXBSIZE))
-        ,ultoac(((datlen/F_LEN)-(ixblen/F_IXBSIZE))*F_LEN,tmp));
-}
-
-/*****************************************************************************/
-/* Handles extraction from a normal transfer file to the temp directory      */
-/*****************************************************************************/
-void extract(uint dirnum)
-{
-    char fname[13],str[256],excmd[256],path[256],done
-		,files[256],tmp[256],intmp=0;
-    int i,j;
-    struct ffblk ff;
-    file_t f;
-    struct dfree d;
-
-temp_dirnum=curdirnum=dirnum;
-if(!strcmp(dir[dirnum]->code,"TEMP"))
-    intmp=1;
-if(temp_dir[1]==':')
-    i=temp_dir[0]-'A'+1;
-else i=0;
-getdfree(i,&d);
-if(d.df_sclus==0xffff)
-    errormsg(WHERE,ERR_CHK,temp_dir,0);
-if((ulong)d.df_bsec*(ulong)d.df_sclus
-    *(ulong)d.df_avail<(ulong)min_dspace*1024L) {
-    bputs(text[LowDiskSpace]);
-    sprintf(str,"Diskspace is low: %s",temp_dir);
-    errorlog(str);
-	if(!dir_op(dirnum))
-        return; }
-else if(!intmp) {   /* not in temp dir */
-    CRLF; }
-bprintf(text[DiskNBytesFree],ultoac((ulong)d.df_bsec
-    *(ulong)d.df_sclus*(ulong)d.df_avail,tmp));
-if(!intmp) {    /* not extracting FROM temp directory */
-    sprintf(str,"%s*.*",temp_dir);
-    if(fexist(str)) {
-        bputs(text[RemovingTempFiles]);
-        done=findfirst(str,&ff,0);
-        while(!done) {
-            sprintf(str,"%s%s",temp_dir,ff.ff_name);
-            remove(str);
-            done=findnext(&ff); }
-        CRLF; } }
-bputs(text[ExtractFrom]);
-if(!getstr(fname,12,K_UPPER) || !checkfname(fname) || strchr(fname,'*')
-    || strchr(fname,'?'))
-    return;
-padfname(fname,f.name);
-strcpy(str,f.name);
-truncsp(str);
-for(i=0;i<total_fextrs;i++)
-	if(!strcmp(str+9,fextr[i]->ext) && chk_ar(fextr[i]->ar,useron)) {
-        strcpy(excmd,fextr[i]->cmd);
-        break; }
-if(i==total_fextrs) {
-    bputs(text[UnextractableFile]);
-    return; }
-if(!intmp && !findfile(dirnum,f.name)) {    /* not temp dir */
-    bputs(text[SearchingAllDirs]);
-    for(i=0;i<usrdirs[curlib] && !msgabort();i++) {
-        if(i==dirnum) continue;
-        if(findfile(usrdir[curlib][i],f.name))
-            break; }
-    if(i==usrdirs[curlib]) { /* not found in cur lib */
-        bputs(text[SearchingAllLibs]);
-        for(i=0;i<usrlibs;i++) {
-            if(i==curlib) continue;
-            for(j=0;j<usrdirs[i] && !msgabort();j++)
-                if(findfile(usrdir[i][j],f.name))
-                    break;
-            if(j<usrdirs[i])
-                break; }
-        if(i==usrlibs) {
-            bputs(text[FileNotFound]);  /* not in database */
-            return; }
-		dirnum=usrdir[i][j]; }
-	else
-        dirnum=usrdir[curlib][i]; }
-if(sys_status&SS_ABORT)
-    return;
-sprintf(path,"%s%s",dir[dirnum]->path,fname);
-if(!intmp) {    /* not temp dir, so get temp_file info */
-    f.datoffset=f.dateuled=f.datedled=0L;
-    f.dir=dirnum;
-    getfileixb(&f);
-    if(!f.datoffset && !f.dateuled && !f.datedled)  /* error reading ixb */
-        return;
-    f.size=0;
-    getfiledat(&f);
-    fileinfo(f);
-    if(f.altpath>0 && f.altpath<=altpaths)
-        sprintf(path,"%s%s",altpath[f.altpath-1],fname);
-    temp_dirnum=dirnum;
-    if(dir[f.dir]->misc&DIR_FREE)
-        temp_cdt=0L;
-    else
-        temp_cdt=f.cdt;
-    strcpy(temp_uler,f.uler);
-    strcpy(temp_file,f.name); }     /* padded filename */
-if(!fexist(path)) {
-    bputs(text[FileNotThere]);  /* not on disk */
-    return; }
-done=0;
-while(online && !done) {
-    mnemonics(text[ExtractFilesPrompt]);
-    switch(getkeys("EVQ",0)) {
-        case 'E':
-			if(!getfilespec(str))
-                break;
-            if(!checkfname(str))
-                break;
-			if((i=external(cmdstr(excmd,path,str,NULL)
-                ,EX_INR|EX_OUTL|EX_OUTR|EX_CC))!=0) {
-				errormsg(WHERE,ERR_EXEC,cmdstr(excmd,path,str,NULL),i);
-                return; }
-			sprintf(tmp,"Extracted %s from %s",str,path);
-			logline(nulstr,tmp);
-            CRLF;
-            break;
-        case 'V':
-            viewfiles(dirnum,fname);
-            break;
-        default:
-            done=1;
-            break; } }
-}
-
-/****************************************************************************/
-/* Creates the file BATCHDN.LST in the node directory. Returns 1 if         */
-/* everything goes okay. 0 if not.                                          */
-/****************************************************************************/
-int create_batchdn_lst()
-{
-    char str[256];
-    int i,file;
-
-sprintf(str,"%sBATCHDN.LST",node_dir);
-if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1) {
-    errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
-    return(0); }
-for(i=0;i<batdn_total;i++) {
-    if(batdn_dir[i]>=total_dirs || dir[batdn_dir[i]]->seqdev)
-        strcpy(str,temp_dir);
-    else
-        strcpy(str,batdn_alt[i]>0 && batdn_alt[i]<=altpaths
-            ? altpath[batdn_alt[i]-1] : dir[batdn_dir[i]]->path);
-    write(file,str,strlen(str));
-    unpadfname(batdn_name[i],str);
-    strcat(str,crlf);
-    write(file,str,strlen(str)); }
-close(file);
-return(1);
-}
-
-/****************************************************************************/
-/* Creates the file BATCHUP.LST in the node directory. Returns 1 if         */
-/* everything goes okay. 0 if not.                                          */
-/* This list is not used by any protocols to date.                          */
-/****************************************************************************/
-int create_batchup_lst()
-{
-    char str[256];
-    int i,file;
-
-sprintf(str,"%sBATCHUP.LST",node_dir);
-if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1) {
-    errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
-    return(0); }
-for(i=0;i<batup_total;i++) {
-    if(batup_dir[i]>=total_dirs)
-        strcpy(str,temp_dir);
-    else
-        strcpy(str,batup_alt[i]>0 && batup_alt[i]<=altpaths
-            ? altpath[batup_alt[i]-1] : dir[batup_dir[i]]->path);
-    write(file,str,strlen(str));
-    unpadfname(batup_name[i],str);
-    strcat(str,crlf);
-    write(file,str,strlen(str)); }
-close(file);
-return(1);
-}
-
-/****************************************************************************/
-/* Creates the file BIMODEM.PTH in the node directory. Returns 1 if         */
-/* everything goes okay. 0 if not.                                          */
-/****************************************************************************/
-int create_bimodem_pth()
-{
-    char str[256],tmp2[512];
-    int i,file;
-
-sprintf(str,"%sBIMODEM.PTH",node_dir);  /* Create bimodem file */
-if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1) {
-    errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
-    return(0); }
-for(i=0;i<batup_total;i++) {
-    sprintf(str,"%s%s",batup_dir[i]>=total_dirs ? temp_dir
-        : batup_alt[i]>0 && batup_alt[i]<=altpaths
-        ? altpath[batup_alt[i]-1] : dir[batup_dir[i]]->path
-        ,unpadfname(batup_name[i],tmp));
-    sprintf(tmp2,"D       %-80.80s%-160.160s"
-        ,unpadfname(batup_name[i],tmp),str);
-    write(file,tmp2,248); }
-for(i=0;i<batdn_total;i++) {
-    sprintf(str,"%s%s"
-        ,(batdn_dir[i]>=total_dirs || dir[batdn_dir[i]]->seqdev)
-        ? temp_dir : batdn_alt[i]>0 && batdn_alt[i]<=altpaths
-            ? altpath[batdn_alt[i]-1] : dir[batdn_dir[i]]->path
-            ,unpadfname(batdn_name[i],tmp));
-    sprintf(tmp2,"U       %-240.240s",str);
-    write(file,tmp2,248); }
-close(file);
-return(1);
-}
-
-/****************************************************************************/
-/* Processes files that were supposed to be received in the batch queue     */
-/****************************************************************************/
-void batch_upload()
-{
-    char str1[256],str2[256];
-	int i,j,x,y;
-    file_t f;
-	struct ffblk ff;
-
-for(i=0;i<batup_total;) {
-	curdirnum=batup_dir[i]; 			/* for ARS */
-    lncntr=0;                               /* defeat pause */
-    unpadfname(batup_name[i],tmp);
-    sprintf(str1,"%s%s",temp_dir,tmp);
-    sprintf(str2,"%s%s",dir[batup_dir[i]]->path,tmp);
-    if(fexist(str1) && fexist(str2)) { /* file's in two places */
-        bprintf(text[FileAlreadyThere],batup_name[i]);
-        remove(str1);    /* this is the one received */
-        i++;
-        continue; }
-    if(fexist(str1))
-        mv(str1,str2,0);
-    strcpy(f.name,batup_name[i]);
-    strcpy(f.desc,batup_desc[i]);
-    f.dir=batup_dir[i];
-    f.misc=batup_misc[i];
-    f.altpath=batup_alt[i];
-	if(uploadfile(&f)) {
-        batup_total--;
-        for(j=i;j<batup_total;j++) {
-            batup_dir[j]=batup_dir[j+1];
-            batup_alt[j]=batup_alt[j+1];
-            batup_misc[j]=batup_misc[j+1];
-            strcpy(batup_name[j],batup_name[j+1]);
-            strcpy(batup_desc[j],batup_desc[j+1]); } }
-    else i++; }
-if(upload_dir==INVALID_DIR)
-	return;
-sprintf(str1,"%s*.*",temp_dir);
-i=findfirst(str1,&ff,0);
-while(!i) {
-	memset(&f,0,sizeof(file_t));
-	f.dir=upload_dir;
-	padfname(ff.ff_name,f.name);
-	strupr(f.name);
-	sprintf(str1,"%s%s",temp_dir,ff.ff_name);
-	for(x=0;x<usrlibs;x++) {
-		for(y=0;y<usrdirs[x];y++)
-			if(dir[usrdir[x][y]]->misc&DIR_DUPES
-				&& findfile(usrdir[x][y],f.name))
-				break;
-		if(y<usrdirs[x])
-            break; }
-	sprintf(str2,"%s%s",dir[f.dir]->path,ff.ff_name);
-	if(x<usrlibs || fexist(str2)) {
-		bprintf(text[FileAlreadyOnline],f.name);
-		remove(str1); }
-	else {
-		mv(str1,str2,0);
-		uploadfile(&f); }
-	i=findnext(&ff); }
-}
-
-/****************************************************************************/
-/* Processes files that were supposed to be sent from the batch queue       */
-/* xfrprot is -1 if downloading files from within QWK (no DSZLOG)           */
-/****************************************************************************/
-void batch_download(int xfrprot)
-{
-    int i,j;
-    file_t f;
-
-for(i=0;i<batdn_total;) {
-    lncntr=0;                               /* defeat pause */
-	f.dir=curdirnum=batdn_dir[i];
-    strcpy(f.name,batdn_name[i]);
-    f.datoffset=batdn_offset[i];
-    f.size=batdn_size[i];
-/*											   Removed 05/18/95
-	if(dir[f.dir]->misc&DIR_TFREE && cur_cps)  Looks like it gave back double
-        starttime+=f.size/(ulong)cur_cps;
-*/
-    f.altpath=batdn_alt[i];
-    if(xfrprot==-1 || (prot[xfrprot]->misc&PROT_DSZLOG && checkprotlog(f))
-        || !(prot[xfrprot]->misc&PROT_DSZLOG)) {
-        if(dir[f.dir]->misc&DIR_TFREE && cur_cps)
-            starttime+=f.size/(ulong)cur_cps;
-        downloadfile(f);
-        closefile(f);
-        batdn_total--;
-        for(j=i;j<batdn_total;j++) {
-            strcpy(batdn_name[j],batdn_name[j+1]);
-            batdn_dir[j]=batdn_dir[j+1];
-            batdn_cdt[j]=batdn_cdt[j+1];
-            batdn_alt[j]=batdn_alt[j+1];
-            batdn_size[j]=batdn_size[j+1];
-            batdn_offset[j]=batdn_offset[j+1]; } }
-    else i++; }
-}
-
-/****************************************************************************/
-/* Adds a list of files to the batch download queue 						*/
-/****************************************************************************/
-void batch_add_list(char *list)
-{
-    char str[128];
-	int file,i,j,k;
-    FILE *stream;
-	file_t	f;
-
-if((stream=fnopen(&file,list,O_RDONLY))!=NULL) {
-	bputs(text[SearchingAllLibs]);
-	while(!feof(stream)) {
-		checkline();
-		if(!online)
-			break;
-        if(!fgets(str,127,stream))
-            break;
-        truncsp(str);
-        sprintf(f.name,"%.12s",str);
-		strupr(f.name);
-		lncntr=0;
-        for(i=k=0;i<usrlibs;i++) {
-            for(j=0;j<usrdirs[i];j++,k++) {
-                outchar('.');
-                if(k && !(k%5))
-                    bputs("\b\b\b\b\b     \b\b\b\b\b");
-                if(findfile(usrdir[i][j],f.name))
-                    break; }
-            if(j<usrdirs[i])
-                break; }
-        if(i<usrlibs) {
-            f.dir=usrdir[i][j];
-            getfileixb(&f);
-            f.size=0;
-            getfiledat(&f);
-            if(f.size==-1L)
-				bprintf(text[FileIsNotOnline],f.name);
-            else
-                addtobatdl(f); } }
-    fclose(stream);
-	remove(list);
-	CRLF; }
-}
-
-/****************************************************************************/
-/* Creates a text file named NEWFILES.DAT in the temp directory that        */
-/* all new files since p-date. Returns number of files in list.             */
-/****************************************************************************/
-ulong create_filelist(char *name, char mode)
-{
-    char str[256];
-	int i,j,d,file;
-	ulong	l,k;
-
-bprintf(text[CreatingFileList],name);
-sprintf(str,"%s%s",temp_dir,name);
-if((file=nopen(str,O_CREAT|O_WRONLY|O_APPEND))==-1) {
-	errormsg(WHERE,ERR_OPEN,str,O_CREAT|O_WRONLY|O_APPEND);
-    return(0); }
-k=0;
-if(mode&FL_ULTIME) {
-    sprintf(str,"New files since: %s\r\n",timestr(&ns_time));
-    write(file,str,strlen(str)); }
-for(i=d=0;i<usrlibs;i++) {
-	for(j=0;j<usrdirs[i];j++,d++) {
-		outchar('.');
-		if(d && !(d%5))
-			bputs("\b\b\b\b\b     \b\b\b\b\b");
-		if(mode&FL_ULTIME /* New-scan */
-			&& (lib[usrlib[i]]->offline_dir==usrdir[i][j]
-			|| dir[usrdir[i][j]]->misc&DIR_NOSCAN))
-            continue;
-        l=listfiles(usrdir[i][j],nulstr,file,mode);
-		if((long)l==-1)
-            break;
-        k+=l; }
-    if(j<usrdirs[i])
-        break; }
-if(k>1) {
-    sprintf(str,"\r\n%d Files Listed.\r\n",k);
-    write(file,str,strlen(str)); }
-close(file);
-if(k)
-    bprintf(text[CreatedFileList],name);
-else {
-    bputs(text[NoFiles]);
-    sprintf(str,"%s%s",temp_dir,name);
-    remove(str); }
-strcpy(temp_file,name);
-strcpy(temp_uler,"File List");
-return(k);
-}
-
diff --git a/src/sbbs2/xfer_lo.c b/src/sbbs2/xfer_lo.c
deleted file mode 100644
index 21fb1e7f96..0000000000
--- a/src/sbbs2/xfer_lo.c
+++ /dev/null
@@ -1,209 +0,0 @@
-#line 1 "XFER_LO.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-
-/****************************************************************************/
-/* Prompts user for file specification. <CR> is *.* and .* is assumed.      */
-/* Returns padded file specification.                                       */
-/* Returns NULL if input was aborted.                                       */
-/****************************************************************************/
-char *getfilespec(char *str)
-{
-bputs(text[FileSpecStarDotStar]);
-if(!getstr(str,12,K_UPPER))
-    strcpy(str,"*.*");
-else if(!strchr(str,'.') && strlen(str)<=8)
-    strcat(str,".*");
-if(sys_status&SS_ABORT)
-    return(0);
-return(str);
-}
-
-/****************************************************************************/
-/* Turns FILE.EXT into FILE    .EXT                                         */
-/****************************************************************************/
-char *padfname(char *filename, char *str)
-{
-    char c,d;
-
-for(c=0;c<8;c++)
-    if(filename[c]=='.' || !filename[c]) break;
-    else str[c]=filename[c];
-d=c;
-if(filename[c]=='.') c++;
-while(d<8)
-    str[d++]=SP;
-str[d++]='.';
-while(d<12)
-    if(!filename[c]) break;
-    else str[d++]=filename[c++];
-while(d<12)
-    str[d++]=SP;
-str[d]=0;
-return(str);
-}
-
-/****************************************************************************/
-/* Turns FILE    .EXT into FILE.EXT                                         */
-/****************************************************************************/
-char *unpadfname(char *filename, char *str)
-{
-    char c,d;
-
-for(c=0,d=0;c<strlen(filename);c++)
-    if(filename[c]!=SP) str[d++]=filename[c];
-str[d]=0;
-return(str);
-}
-
-/****************************************************************************/
-/* Checks to see if filename matches filespec. Returns 1 if yes, 0 if no    */
-/****************************************************************************/
-char filematch(char *filename, char *filespec)
-{
-    char c;
-
-for(c=0;c<8;c++) /* Handle Name */
-    if(filespec[c]=='*') break;
-    else if(filespec[c]=='?') continue;
-    else if(filename[c]!=filespec[c]) return(0);
-for(c=9;c<12;c++)
-    if(filespec[c]=='*') break;
-    else if(filespec[c]=='?') continue;
-    else if(filename[c]!=filespec[c]) return(0);
-return(1);
-}
-
-/****************************************************************************/
-/* Deletes all files in dir 'path' that match file spec 'spec'              */
-/****************************************************************************/
-int delfiles(char *inpath, char *spec)
-{
-	char str[256],path[128],done;
-    int files=0;
-    struct ffblk ff;
-
-strcpy(path,inpath);
-backslash(path);
-sprintf(str,"%s%s",path,spec);
-done=findfirst(str,&ff,0);
-while(!done) {
-    sprintf(str,"%s%s",path,ff.ff_name);
-	_chmod(str,1,FA_NORMAL);	// Incase it's been marked RDONLY
-    if(remove(str))
-        errormsg(WHERE,ERR_REMOVE,str,0);
-    else
-        files++;
-    done=findnext(&ff); }
-return(files);
-}
-
-/*****************************************************************************/
-/* Checks the filename 'fname' for invalid symbol or character sequences     */
-/*****************************************************************************/
-char checkfname(char *fname)
-{
-	char str[256],c=0,d;
-
-if(strcspn(fname,"\\/|<>+[]:=\";,%")!=strlen(fname)) {
-	sprintf(str,"Suspicious filename attempt: '%s'",fname);
-    errorlog(str);
-	return(0); }
-if(strstr(fname,".."))
-	return(0);
-if(strcspn(fname,".")>8)
-	return(0);
-d=strlen(fname);
-while(c<d) {
-	if(fname[c]<=SP || fname[c]&0x80)
-		return(0);
-	c++; }
-return(1);
-}
-
-/**************************************************************************/
-/* Add file 'f' to batch download queue. Return 1 if successful, 0 if not */
-/**************************************************************************/
-char addtobatdl(file_t f)
-{
-    char str[256],tmp2[256];
-    uint i;
-	ulong totalcdt, totalsize, totaltime;
-
-if(useron.rest&FLAG('D')) {
-	bputs(text[R_Download]);
-	return(0); }
-/***
-sprintf(str,"%s%s",f.altpath>0 && f.altpath<=altpaths ? altpath[f.altpath-1]
-    : dir[f.dir]->path,unpadfname(f.name,tmp));
-***/
-for(i=0;i<batdn_total;i++) {
-    if(!strcmp(batdn_name[i],f.name) && f.dir==batdn_dir[i]) {
-		bprintf(text[FileAlreadyInQueue],f.name);
-        return(0); } }
-if(f.size<=0 /* !fexist(str) */) {
-	bprintf(text[CantAddToQueue],f.name);
-    bputs(text[FileIsNotOnline]);
-    return(0); }
-if(batdn_total>=max_batdn) {
-	bprintf(text[CantAddToQueue],f.name);
-    bputs(text[BatchDlQueueIsFull]);
-    return(0); }
-for(i=0,totalcdt=0;i<batdn_total;i++)
-    totalcdt+=batdn_cdt[i];
-if(dir[f.dir]->misc&DIR_FREE) f.cdt=0L;
-totalcdt+=f.cdt;
-if(!(useron.exempt&FLAG('D')) && totalcdt>useron.cdt+useron.freecdt) {
-	bprintf(text[CantAddToQueue],f.name);
-	bprintf(text[YouOnlyHaveNCredits],ultoac(useron.cdt+useron.freecdt,tmp));
-    return(0); }
-if(!chk_ar(dir[f.dir]->dl_ar,useron)) {
-	bprintf(text[CantAddToQueue],f.name);
-	bputs(text[CantDownloadFromDir]);
-	return(0); }
-for(i=0,totalsize=totaltime=0;i<batdn_total;i++) {
-    totalsize+=batdn_size[i];
-	if(!(dir[batdn_dir[i]]->misc&DIR_TFREE) && cur_cps)
-		totaltime+=batdn_size[i]/(ulong)cur_cps; }
-totalsize+=f.size;
-if(!(dir[f.dir]->misc&DIR_TFREE) && cur_cps)
-	totaltime+=f.size/(ulong)cur_cps;
-if(!(useron.exempt&FLAG('T')) && totaltime>timeleft) {
-	bprintf(text[CantAddToQueue],f.name);
-    bputs(text[NotEnoughTimeToDl]);
-    return(0); }
-strcpy(batdn_name[batdn_total],f.name);
-batdn_dir[batdn_total]=f.dir;
-batdn_cdt[batdn_total]=f.cdt;
-batdn_offset[batdn_total]=f.datoffset;
-batdn_size[batdn_total]=f.size;
-batdn_alt[batdn_total]=f.altpath;
-batdn_total++;
-openfile(f);
-bprintf(text[FileAddedToBatDlQueue]
-    ,f.name,batdn_total,max_batdn,ultoac(totalcdt,tmp)
-    ,ultoac(totalsize,tmp2)
-    ,sectostr(totalsize/(ulong)cur_cps,str));
-return(1);
-}
-
-/****************************************************************************/
-/* This function returns the command line for the temp file extension for	*/
-/* current user online. 													*/
-/****************************************************************************/
-char *temp_cmd(void)
-{
-	int i;
-
-if(!total_fcomps) {
-	errormsg(WHERE,ERR_CHK,"compressable file types",0);
-	return(nulstr); }
-for(i=0;i<total_fcomps;i++)
-	if(!stricmp(useron.tmpext,fcomp[i]->ext)
-		&& chk_ar(fcomp[i]->ar,useron))
-		return(fcomp[i]->cmd);
-return(fcomp[0]->cmd);
-}
-
diff --git a/src/sbbs2/xfer_mid.c b/src/sbbs2/xfer_mid.c
deleted file mode 100644
index 4d1cbfe6ce..0000000000
--- a/src/sbbs2/xfer_mid.c
+++ /dev/null
@@ -1,792 +0,0 @@
-#line 1 "XFER_MID.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-
-/****************************************************************************/
-/* This function is called when a file is unsuccessfully downloaded.        */
-/* It logs the tranfer time and checks for possible leech protocol use.     */
-/****************************************************************************/
-void notdownloaded(ulong size, time_t start, time_t end)
-{
-    char str[256],tmp2[256];
-
-sprintf(str,"Estimated Time: %s  Transfer Time: %s"
-    ,sectostr(cur_cps ? size/cur_cps : 0,tmp)
-    ,sectostr((uint)end-start,tmp2));
-logline(nulstr,str);
-if(leech_pct && cur_cps                 /* leech detection */
-    && end-start>=leech_sec
-    && end-start>=(double)(size/cur_cps)*(double)leech_pct/100.0) {
-    sprintf(str,"Possible use of leech protocol (leech=%u  downloads=%u)"
-        ,useron.leech+1,useron.dls);
-    errorlog(str);
-    useron.leech=adjustuserrec(useron.number,U_LEECH,2,1); }
-}
-
-/****************************************************************************/
-/* List detailed information about the files in 'filespec'. Prompts for     */
-/* action depending on 'mode.'                                              */
-/* Returns number of files matching filespec that were found                */
-/****************************************************************************/
-int listfileinfo(uint dirnum, char *filespec, char mode)
-{
-	uchar str[258],path[258],dirpath[256],done=0,ch,fname[13],ext[513];
-	uchar HUGE16 *ixbbuf,*usrxfrbuf=NULL,*p;
-    int i,j,found=0,file;
-    ulong l,m,usrcdt,usrxfrlen;
-    time_t start,end;
-    file_t f;
-
-sprintf(str,"%sXFER.IXT",data_dir);
-if(mode==FI_USERXFER && flength(str)>0L) {
-    if((file=nopen(str,O_RDONLY))==-1) {
-        errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
-        return(0); }
-    usrxfrlen=filelength(file);
-	if((usrxfrbuf=MALLOC(usrxfrlen))==NULL) {
-        close(file);
-        errormsg(WHERE,ERR_ALLOC,str,usrxfrlen);
-        return(0); }
-    if(read(file,usrxfrbuf,usrxfrlen)!=usrxfrlen) {
-        close(file);
-		FREE(usrxfrbuf);
-        errormsg(WHERE,ERR_READ,str,usrxfrlen);
-        return(0); }
-    close(file); }
-sprintf(str,"%s%s.IXB",dir[dirnum]->data_dir,dir[dirnum]->code);
-if((file=nopen(str,O_RDONLY))==-1)
-    return(0);
-l=filelength(file);
-if(!l) {
-    close(file);
-    return(0); }
-if((ixbbuf=(char *)MALLOC(l))==NULL) {
-    close(file);
-    errormsg(WHERE,ERR_ALLOC,str,l);
-    return(0); }
-if(lread(file,ixbbuf,l)!=l) {
-    close(file);
-    errormsg(WHERE,ERR_READ,str,l);
-	FREE((char *)ixbbuf);
-    if(usrxfrbuf)
-		FREE(usrxfrbuf);
-    return(0); }
-close(file);
-sprintf(str,"%s%s.DAT",dir[dirnum]->data_dir,dir[dirnum]->code);
-if((file=nopen(str,O_RDONLY))==-1) {
-    errormsg(WHERE,ERR_READ,str,O_RDONLY);
-	FREE((char *)ixbbuf);
-    if(usrxfrbuf)
-		FREE(usrxfrbuf);
-    return(0); }
-close(file);
-m=0;
-while(online && !done && m<l) {
-	if(mode==FI_REMOVE && dir_op(dirnum))
-        action=NODE_SYSP;
-    else action=NODE_LFIL;
-    if(msgabort()) {
-        found=-1;
-        break; }
-    for(i=0;i<12 && m<l;i++)
-        if(i==8)
-            str[i]='.';
-        else
-            str[i]=ixbbuf[m++];     /* Turns FILENAMEEXT into FILENAME.EXT */
-    str[i]=0;
-    unpadfname(str,fname);
-    if(filespec[0] && !filematch(str,filespec)) {
-        m+=11;
-        continue; }
-    f.datoffset=ixbbuf[m]|((long)ixbbuf[m+1]<<8)|((long)ixbbuf[m+2]<<16);
-    f.dateuled=ixbbuf[m+3]|((long)ixbbuf[m+4]<<8)
-        |((long)ixbbuf[m+5]<<16)|((long)ixbbuf[m+6]<<24);
-    f.datedled=ixbbuf[m+7]|((long)ixbbuf[m+8]<<8)
-        |((long)ixbbuf[m+9]<<16)|((long)ixbbuf[m+10]<<24);
-    m+=11;
-    if(mode==FI_OLD && f.datedled>ns_time)
-        continue;
-    if((mode==FI_OLDUL || mode==FI_OLD) && f.dateuled>ns_time)
-        continue;
-	f.dir=curdirnum=dirnum;
-    strcpy(f.name,str);
-	f.size=0;
-    getfiledat(&f);
-	if(mode==FI_OFFLINE && f.size>=0)
-		continue;
-    if(f.altpath>0 && f.altpath<=altpaths)
-        strcpy(dirpath,altpath[f.altpath-1]);
-    else
-        strcpy(dirpath,dir[f.dir]->path);
-    if(mode==FI_CLOSE && !f.opencount)
-        continue;
-    if(mode==FI_USERXFER) {
-        for(p=usrxfrbuf;p<usrxfrbuf+usrxfrlen;p+=24) {
-            sprintf(str,"%17.17s",p);   /* %4.4u %12.12s */
-            if(!strcmp(str+5,f.name) && useron.number==atoi(str))
-                break; }
-        if(p>=usrxfrbuf+usrxfrlen) /* file wasn't found */
-            continue; }
-	if((mode==FI_REMOVE) && (!dir_op(dirnum) && strcmpi(f.uler
-		,useron.alias) && !(useron.exempt&FLAG('R'))))
-		continue;
-    found++;
-	if(mode==FI_INFO) {
-		if(!viewfile(f,1)) {
-			done=1;
-			found=-1; } }
-	else
-		fileinfo(f);
-    if(mode==FI_CLOSE) {
-        if(!noyes(text[CloseFileRecordQ])) {
-            f.opencount=0;
-            putfiledat(f); } }
-    else if(mode==FI_REMOVE || mode==FI_OLD || mode==FI_OLDUL
-        || mode==FI_OFFLINE) {
-        SYNC;
-        CRLF;
-        if(f.opencount) {
-            mnemonics(text[QuitOrNext]);
-            strcpy(str,"Q\r"); }
-		else if(dir_op(dirnum)) {
-            mnemonics(text[SysopRemoveFilePrompt]);
-			strcpy(str,"VEFMCQR\r"); }
-        else if(useron.exempt&FLAG('R')) {
-            mnemonics(text[RExemptRemoveFilePrompt]);
-			strcpy(str,"VEMQR\r"); }
-        else {
-            mnemonics(text[UserRemoveFilePrompt]);
-			strcpy(str,"VEQR\r"); }
-        switch(getkeys(str,0)) {
-			case 'V':
-				viewfilecontents(f);
-				CRLF;
-				ASYNC;
-				pause();
-				m-=F_IXBSIZE;
-				continue;
-            case 'E':   /* edit file information */
-				if(dir_op(dirnum)) {
-                    bputs(text[EditFilename]);
-                    strcpy(str,fname);
-					getstr(str,12,K_EDIT|K_AUTODEL|K_UPPER);
-                    if(strcmp(str,fname)) { /* rename */
-                        padfname(str,path);
-                        if(findfile(f.dir,path))
-                            bprintf(text[FileAlreadyThere],path);
-                        else {
-                            sprintf(path,"%s%s",dirpath,fname);
-                            sprintf(tmp,"%s%s",dirpath,str);
-                            if(rename(path,tmp))
-                                bprintf(text[CouldntRenameFile],path,tmp);
-                            else {
-                                bprintf(text[FileRenamed],path,tmp);
-                                strcpy(fname,str);
-                                removefiledat(f);
-                                strcpy(f.name,padfname(str,tmp));
-                                addfiledat(&f); } } } }
-                bputs(text[EditDescription]);
-				getstr(f.desc,LEN_FDESC,K_LINE|K_EDIT|K_AUTODEL);
-                if(f.misc&FM_EXTDESC) {
-					if(!noyes(text[DeleteExtDescriptionQ])) {
-                        remove(str);
-                        f.misc&=~FM_EXTDESC; } }
-				if(!dir_op(dirnum)) {
-                    putfiledat(f);
-                    break; }
-                bputs(text[EditUploader]);
-				getstr(f.uler,LEN_ALIAS,K_UPRLWR|K_EDIT|K_AUTODEL);
-                ultoa(f.cdt,str,10);
-                bputs(text[EditCreditValue]);
-				getstr(str,7,K_NUMBER|K_EDIT|K_AUTODEL);
-                f.cdt=atol(str);
-                itoa(f.timesdled,str,10);
-                bputs(text[EditTimesDownloaded]);
-				getstr(str,5,K_NUMBER|K_EDIT|K_AUTODEL);
-                f.timesdled=atoi(str);
-                if(f.opencount) {
-                    itoa(f.opencount,str,10);
-                    bputs(text[EditOpenCount]);
-					getstr(str,3,K_NUMBER|K_EDIT|K_AUTODEL);
-                    f.opencount=atoi(str); }
-                if(altpaths || f.altpath) {
-                    itoa(f.altpath,str,10);
-                    bputs(text[EditAltPath]);
-					getstr(str,3,K_NUMBER|K_EDIT|K_AUTODEL);
-                    f.altpath=atoi(str);
-                    if(f.altpath>altpaths)
-                        f.altpath=0; }
-                putfiledat(f);
-				inputnstime(&f.dateuled);
-				update_uldate(f);
-                break;
-            case 'F':   /* delete file only */
-                sprintf(str,"%s%s",dirpath,fname);
-                if(!fexist(str))
-                    bputs(text[FileNotThere]);
-                else {
-                    if(!noyes(text[AreYouSureQ])) {
-                        if(remove(str))
-                            bprintf(text[CouldntRemoveFile],str);
-                        else {
-                            sprintf(tmp,"Deleted %s",str);
-                            logline(nulstr,tmp); } } }
-                break;
-            case 'R':   /* remove file from database */
-                if(noyes(text[AreYouSureQ]))
-                    break;
-                removefiledat(f);
-                sprintf(str,"Removed %s from %s %s",f.name
-                    ,lib[dir[f.dir]->lib]->sname,dir[f.dir]->sname);
-                logline("U-",str);
-                sprintf(str,"%s%s",dirpath,fname);
-                if(fexist(str)) {
-					if(dir_op(dirnum)) {
-                        if(!noyes(text[DeleteFileQ])) {
-                            if(remove(str))
-                                bprintf(text[CouldntRemoveFile],str);
-                            else {
-                                sprintf(tmp,"Deleted %s",str);
-                                logline(nulstr,tmp); } } }
-                    else if(remove(str))    /* always remove if not sysop */
-                        bprintf(text[CouldntRemoveFile],str); }
-				if(dir_op(dirnum) || useron.exempt&FLAG('R')) {
-                    i=lib[dir[f.dir]->lib]->offline_dir;
-                    if(i!=dirnum && i!=(int)INVALID_DIR
-                        && !findfile(i,f.name)) {
-                        sprintf(str,text[AddToOfflineDirQ]
-                            ,fname,lib[dir[i]->lib]->sname,dir[i]->sname);
-                        if(yesno(str)) {
-							getextdesc(f.dir,f.datoffset,ext);
-                            f.dir=i;
-							addfiledat(&f);
-							if(f.misc&FM_EXTDESC)
-								putextdesc(f.dir,f.datoffset,ext); } } }
-				if(dir_op(dirnum) || strcmpi(f.uler,useron.alias)) {
-                    if(noyes(text[RemoveCreditsQ]))
-/* Fall through */      break; }
-            case 'C':   /* remove credits only */
-                if((i=matchuser(f.uler))==0) {
-					bputs(text[UnknownUser]);
-                    break; }
-				if(dir_op(dirnum)) {
-					usrcdt=(ulong)(f.cdt*(dir[f.dir]->up_pct/100.0));
-                    if(f.timesdled)     /* all downloads */
-                        usrcdt+=(ulong)((long)f.timesdled
-							*f.cdt*(dir[f.dir]->dn_pct/100.0));
-                    ultoa(usrcdt,str,10);
-                    bputs(text[CreditsToRemove]);
-					getstr(str,10,K_NUMBER|K_LINE|K_EDIT|K_AUTODEL);
-                    f.cdt=atol(str); }
-                usrcdt=adjustuserrec(i,U_CDT,10,-f.cdt);
-                if(i==useron.number)
-                    useron.cdt=usrcdt;
-                sprintf(str,text[FileRemovedUserMsg]
-					,f.name,f.cdt ? ultoac(f.cdt,tmp) : text[No]);
-                putsmsg(i,str);
-                usrcdt=adjustuserrec(i,U_ULB,10,-f.size);
-                if(i==useron.number)
-                    useron.ulb=usrcdt;
-                usrcdt=adjustuserrec(i,U_ULS,5,-1);
-                if(i==useron.number)
-                    useron.uls=usrcdt;
-                break;
-            case 'M':   /* move the file to another dir */
-				CRLF;
-                for(i=0;i<usrlibs;i++)
-                    bprintf(text[MoveToLibLstFmt],i+1,lib[usrlib[i]]->lname);
-                SYNC;
-                bprintf(text[MoveToLibPrompt],dir[dirnum]->lib+1);
-				if((i=getnum(usrlibs))==-1)
-                    continue;
-                if(!i)
-                    i=dir[dirnum]->lib;
-                else
-                    i--;
-                CRLF;
-                for(j=0;j<usrdirs[i];j++)
-                    bprintf(text[MoveToDirLstFmt]
-                        ,j+1,dir[usrdir[i][j]]->lname);
-                SYNC;
-                bprintf(text[MoveToDirPrompt],usrdirs[i]);
-                if((j=getnum(usrdirs[i]))==-1)
-                    continue;
-                if(!j)
-                    j=usrdirs[i]-1;
-                else j--;
-                CRLF;
-                if(findfile(usrdir[i][j],f.name)) {
-                    bprintf(text[FileAlreadyThere],f.name);
-                    break; }
-				getextdesc(f.dir,f.datoffset,ext);
-                removefiledat(f);
-				if(f.dir==upload_dir || f.dir==sysop_dir)
-					f.dateuled=time(NULL);
-                f.dir=usrdir[i][j];
-                addfiledat(&f);
-                bprintf(text[MovedFile],f.name
-                    ,lib[dir[f.dir]->lib]->sname,dir[f.dir]->sname);
-                sprintf(str,"Moved %s to %s %s",f.name
-                    ,lib[dir[f.dir]->lib]->sname,dir[f.dir]->sname);
-                logline(nulstr,str);
-                if(!f.altpath) {    /* move actual file */
-                    sprintf(str,"%s%s",dir[dirnum]->path,fname);
-                    if(fexist(str)) {
-                        sprintf(path,"%s%s",dir[f.dir]->path,fname);
-                        mv(str,path,0); } }
-				if(f.misc&FM_EXTDESC)
-					putextdesc(f.dir,f.datoffset,ext);
-                break;
-            case 'Q':   /* quit */
-                found=-1;
-                done=1;
-                break; } }
-    else if(mode==FI_DOWNLOAD || mode==FI_USERXFER) {
-        sprintf(path,"%s%s",dirpath,fname);
-        if(f.size<1L) { /* getfiledat will set this to -1 if non-existant */
-            SYNC;       /* and 0 byte files shouldn't be d/led */
-            mnemonics(text[QuitOrNext]);
-            if(getkeys("\rQ",0)=='Q') {
-                found=-1;
-                break; }
-            continue; }
-        if(!(dir[f.dir]->misc&DIR_FREE) && !(useron.exempt&FLAG('D'))
-			&& f.cdt>(useron.cdt+useron.freecdt)) {
-            SYNC;
-			bprintf(text[YouOnlyHaveNCredits]
-				,ultoac(useron.cdt+useron.freecdt,tmp));
-            mnemonics(text[QuitOrNext]);
-            if(getkeys("\rQ",0)=='Q') {
-                found=-1;
-                break; }
-            continue; }
-		if(!chk_ar(dir[f.dir]->dl_ar,useron)) {
-			SYNC;
-			bputs(text[CantDownloadFromDir]);
-			mnemonics(text[QuitOrNext]);
-            if(getkeys("\rQ",0)=='Q') {
-                found=-1;
-                break; }
-            continue; }
-		if(!(dir[f.dir]->misc&DIR_TFREE) && f.timetodl>timeleft && !dir_op(dirnum)
-			&& !(useron.exempt&FLAG('T'))) {
-            SYNC;
-            bputs(text[NotEnoughTimeToDl]);
-            mnemonics(text[QuitOrNext]);
-            if(getkeys("\rQ",0)=='Q') {
-                found=-1;
-                break; }
-            continue; }
-        menu("DLPROT");
-        openfile(f);
-        SYNC;
-        mnemonics(text[ProtocolBatchQuitOrNext]);
-        strcpy(str,"BQ\r");
-        for(i=0;i<total_prots;i++)
-			if(prot[i]->dlcmd[0]
-				&& chk_ar(prot[i]->ar,useron)) {
-                sprintf(tmp,"%c",prot[i]->mnemonic);
-                strcat(str,tmp); }
-//		  ungetkey(useron.prot);
-		ch=getkeys(str,0);
-        if(ch=='Q') {
-            found=-1;
-            done=1; }
-        else if(ch=='B') {
-            if(!addtobatdl(f)) {
-                closefile(f);
-                break; } }
-        else if(ch!=CR) {
-            for(i=0;i<total_prots;i++)
-				if(prot[i]->dlcmd[0] && prot[i]->mnemonic==ch
-					&& chk_ar(prot[i]->ar,useron))
-                    break;
-            if(i<total_prots) {
-				if(online==ON_LOCAL) {
-					bputs(text[EnterPath]);
-					if(getstr(path,60,K_UPPER|K_LINE)) {
-						backslash(path);
-						strcat(path,fname);
-						sprintf(str,"%s%s",dirpath,fname);
-						if(!mv(str,path,1))
-							downloadfile(f);
-						for(j=0;j<total_dlevents;j++)
-							if(!stricmp(dlevent[j]->ext,f.name+9)
-								&& chk_ar(dlevent[j]->ar,useron)) {
-								bputs(dlevent[j]->workstr);
-								external(cmdstr(dlevent[j]->cmd,path,nulstr
-									,NULL)
-									,EX_OUTL);
-								CRLF; }
-							} }
-				else {
-					delfiles(temp_dir,"*.*");
-					if(dir[f.dir]->seqdev) {
-						lncntr=0;
-						seqwait(dir[f.dir]->seqdev);
-						bprintf(text[RetrievingFile],fname);
-						sprintf(str,"%s%s",dirpath,fname);
-						sprintf(path,"%s%s",temp_dir,fname);
-						mv(str,path,1); /* copy the file to temp dir */
-						getnodedat(node_num,&thisnode,1);
-						thisnode.aux=0xf0;
-						putnodedat(node_num,thisnode);
-						CRLF; }
-					for(j=0;j<total_dlevents;j++)
-						if(!stricmp(dlevent[j]->ext,f.name+9)
-							&& chk_ar(dlevent[j]->ar,useron)) {
-							bputs(dlevent[j]->workstr);
-							external(cmdstr(dlevent[j]->cmd,path,nulstr,NULL)
-								,EX_OUTL);
-							CRLF; }
-					getnodedat(node_num,&thisnode,1);
-					action=NODE_DLNG;
-					unixtodos(now+f.timetodl,&date,&curtime);
-					thisnode.aux=(curtime.ti_hour*60)+curtime.ti_min;
-					putnodedat(node_num,thisnode); /* calculate ETA */
-					start=time(NULL);
-					j=protocol(cmdstr(prot[i]->dlcmd,path,nulstr,NULL),0);
-					end=time(NULL);
-					if(dir[f.dir]->misc&DIR_TFREE)
-						starttime+=end-start;
-					if(prot[i]->misc&PROT_DSZLOG) {
-						if(checkprotlog(f))
-							downloadfile(f);
-						else
-							notdownloaded(f.size,start,end); }
-					else {
-						if(!j)
-							downloadfile(f);
-						else {
-							bprintf(text[FileNotSent],f.name);
-							notdownloaded(f.size,start,end); } }
-					delfiles(temp_dir,"*.*");
-					autohangup(); } } }
-        closefile(f); }
-    if(filespec[0] && !strchr(filespec,'*') && !strchr(filespec,'?')) break; }
-FREE((char *)ixbbuf);
-if(usrxfrbuf)
-	FREE(usrxfrbuf);
-return(found);
-}
-
-
-/****************************************************************************/
-/* Checks  directory data file for 'filename' (must be padded). If found,   */
-/* it returns the 1, else returns 0.                                        */
-/* Called from upload and bulkupload                                        */
-/****************************************************************************/
-char findfile(uint dirnum, char *filename)
-{
-	char str[256],c,fname[13],HUGE16 *ixbbuf;
-    int file;
-    ulong length,l;
-
-sprintf(fname,"%.12s",filename);
-strupr(fname);
-for(c=8;c<12;c++)   /* Turn FILENAME.EXT into FILENAMEEXT */
-    fname[c]=fname[c+1];
-sprintf(str,"%s%s.IXB",dir[dirnum]->data_dir,dir[dirnum]->code);
-if((file=nopen(str,O_RDONLY))==-1) return(0);
-length=filelength(file);
-if(!length) {
-    close(file);
-    return(0); }
-if((ixbbuf=(char *)MALLOC(length))==NULL) {
-    close(file);
-    errormsg(WHERE,ERR_ALLOC,str,length);
-    return(0); }
-if(lread(file,ixbbuf,length)!=length) {
-    close(file);
-    errormsg(WHERE,ERR_READ,str,length);
-	FREE((char *)ixbbuf);
-    return(0); }
-close(file);
-for(l=0;l<length;l+=F_IXBSIZE) {
-    for(c=0;c<11;c++)
-        if(fname[c]!=toupper(ixbbuf[l+c])) break;
-    if(c==11) break; }
-FREE((char *)ixbbuf);
-if(l!=length)
-    return(1);
-return(0);
-}
-
-/****************************************************************************/
-/* Prints one file's information on a single line to a file 'file'          */
-/****************************************************************************/
-void listfiletofile(char *fname, char HUGE16 *buf, uint dirnum, int file)
-{
-    char str[256],exist=1;
-    uchar alt;
-    ulong cdt;
-
-strcpy(str,fname);
-if(buf[F_MISC]!=ETX && (buf[F_MISC]-SP)&FM_EXTDESC)
-    strcat(str,"+");
-else
-    strcat(str," ");
-write(file,str,13);
-getrec((char *)buf,F_ALTPATH,2,str);
-alt=(uchar)ahtoul(str);
-sprintf(str,"%s%s",alt>0 && alt<=altpaths ? altpath[alt-1]
-    : dir[dirnum]->path,unpadfname(fname,tmp));
-if(dir[dirnum]->misc&DIR_FCHK && !fexist(str))
-    exist=0;
-getrec((char *)buf,F_CDT,LEN_FCDT,str);
-cdt=atol(str);
-if(!cdt)
-    strcpy(str,"   FREE");
-else
-    sprintf(str,"%7lu",cdt);
-if(exist)
-    strcat(str," ");
-else
-    strcat(str,"-");
-write(file,str,8);
-getrec((char *)buf,F_DESC,LEN_FDESC,str);
-write(file,str,strlen(str));
-write(file,crlf,2);
-}
-
-
-
-/****************************************************************************/
-/* Handles start and stop routines for transfer protocols                   */
-/****************************************************************************/
-int protocol(char *cmdline, int cd)
-{
-	char tmp[128];
-    int i;
-
-sprintf(tmp,"%sPROTOCOL.LOG",node_dir);
-remove(tmp);                            /* Deletes the protocol log */
-if(useron.misc&AUTOHANG)
-	autohang=1;
-else
-	autohang=yesno(text[HangUpAfterXferQ]);
-if(sys_status&SS_ABORT) {				/* if ctrl-c */
-	autohang=0;
-	return(-1); }
-bputs(text[StartXferNow]);
-RIOSYNC(0);
-lprintf("%s\r\n",cmdline);
-if(cd) {
-	if(temp_dir[1]==':')    /* fix for DSZ */
-		setdisk(toupper(temp_dir[0])-'A');
-	strcpy(tmp,temp_dir);
-	tmp[strlen(tmp)-1]=0;	/* take off '\' */
-	if(chdir(tmp))
-		errormsg(WHERE,ERR_CHDIR,tmp,0); }
-i=external(cmdline,EX_OUTL);	/* EX_CC removed because of error level prob */
-if(online==ON_REMOTE)
-    rioctl(IOFB);
-CRLF;
-if(autohang) sys_status|=SS_PAUSEOFF;	/* Pause off after download */
-return(i);
-}
-
-/****************************************************************************/
-/* Invokes the timed auto-hangup after transfer routine                     */
-/****************************************************************************/
-void autohangup()
-{
-    char a,c,k;
-
-SYNC;
-sys_status&=~SS_PAUSEOFF;		/* turn pause back on */
-rioctl(IOFI);
-if(!autohang) return;
-lncntr=0;
-bputs(text[Disconnecting]);
-attr(GREEN);
-outchar('[');
-for(c=9,a=0;c>-1 && online && !a;c--) {
-    checkline();
-    attr(LIGHTGRAY|HIGH);
-    bputs(itoa(c,tmp,10));
-    attr(GREEN);
-    outchar(']');
-	while((k=inkey(0))!=0 && online) {
-        if(toupper(k)=='H') {
-            c=0;
-            break; }
-        if(toupper(k)=='A') {
-            a=1;
-            break; } }
-	mswait(DELAY_AUTOHG);
-	if(!a) {
-		outchar(BS);
-		outchar(BS); } }
-if(c==-1) {
-    bputs(text[Disconnected]);
-    hangup(); }
-else
-    CRLF;
-}
-
-/****************************************************************************/
-/* Checks dsz compatible log file for errors in transfer                    */
-/* Returns 1 if the file in the struct file_t was successfuly transfered    */
-/****************************************************************************/
-char checkprotlog(file_t f)
-{
-	char str[256],size[128];
-    int file;
-    FILE *stream;
-
-sprintf(str,"%sPROTOCOL.LOG",node_dir);
-if((stream=fnopen(&file,str,O_RDONLY))==NULL) {
-    bprintf(text[FileNotSent],f.name);
-    if(f.dir<total_dirs)
-		sprintf(str,"Attempted to download %s (%s) from %s %s"
-			,f.name,ultoac(f.size,size)
-            ,lib[dir[f.dir]->lib]->sname,dir[f.dir]->sname);
-	else if(f.dir==total_dirs)
-        strcpy(str,"Attempted to download QWK packet");
-	else if(f.dir==total_dirs+1)
-		sprintf(str,"Attempted to download attached file: %s",f.name);
-    logline("D!",str);
-    return(0); }
-unpadfname(f.name,tmp);
-if(tmp[strlen(tmp)-1]=='.')     /* DSZ log uses FILE instead of FILE. */
-    tmp[strlen(tmp)-1]=0;       /* when there isn't an extension.     */
-while(!ferror(stream)) {
-    if(!fgets(str,256,stream))
-        break;
-    if(str[strlen(str)-2]==CR)
-        str[strlen(str)-2]=0;       /* chop off CRLF */
-    strupr(str);
-    if(strstr(str,tmp)) {   /* Only check for name, Bimodem doesn't put path */
-        logline(nulstr,str);
-		if(str[0]=='E' || str[0]=='L' || (str[6]==SP && str[7]=='0'))
-            break;          /* E for Error or L for Lost Carrier */
-        fclose(stream);     /* or only sent 0 bytes! */
-        return(1); } }
-fclose(stream);
-bprintf(text[FileNotSent],f.name);
-if(f.dir<total_dirs)
-    sprintf(str,"Attempted to download %s (%s) from %s %s",f.name
-        ,ultoac(f.size,tmp),lib[dir[f.dir]->lib]->sname,dir[f.dir]->sname);
-else
-    strcpy(str,"Attempted to download QWK packet");
-logline("D!",str);
-return(0);
-}
-
-/*****************************************************************************/
-/* View viewable file types from dir 'dirnum'                                */
-/* 'fspec' must be padded                                                    */
-/*****************************************************************************/
-void viewfiles(uint dirnum, char *fspec)
-{
-    char viewcmd[256];
-    int i;
-
-curdirnum=dirnum;	/* for ARS */
-sprintf(viewcmd,"%s%s",dir[dirnum]->path,fspec);
-if(!fexist(viewcmd)) {
-    bputs(text[FileNotFound]);
-    return; }
-padfname(fspec,tmp);
-truncsp(tmp);
-for(i=0;i<total_fviews;i++)
-	if(!strcmp(tmp+9,fview[i]->ext) && chk_ar(fview[i]->ar,useron)) {
-        strcpy(viewcmd,fview[i]->cmd);
-        break; }
-if(i==total_fviews) {
-	bprintf(text[NonviewableFile],tmp+9);
-    return; }
-sprintf(tmp,"%s%s",dir[dirnum]->path,fspec);
-if((i=external(cmdstr(viewcmd,tmp,tmp,NULL),EX_OUTL|EX_OUTR|EX_INR|EX_CC))!=0)
-	errormsg(WHERE,ERR_EXEC,viewcmd,i);    /* must of EX_CC to ^C */
-}
-
-/****************************************************************************/
-/* Compares filenames for ascending name sort								*/
-/****************************************************************************/
-int fnamecmp_a(char **str1, char **str2)
-{
-return(strncmp(*str1,*str2,11));
-}
-
-/****************************************************************************/
-/* Compares filenames for descending name sort								*/
-/****************************************************************************/
-int fnamecmp_d(char **str1, char **str2)
-{
-return(strncmp(*str2,*str1,11));
-}
-
-/****************************************************************************/
-/* Compares file upload dates for ascending date sort						*/
-/****************************************************************************/
-int fdatecmp_a(uchar **buf1, uchar **buf2)
-{
-	time_t date1,date2;
-
-date1=((*buf1)[14]|((long)(*buf1)[15]<<8)|((long)(*buf1)[16]<<16)
-	|((long)(*buf1)[17]<<24));
-date2=((*buf2)[14]|((long)(*buf2)[15]<<8)|((long)(*buf2)[16]<<16)
-	|((long)(*buf2)[17]<<24));
-if(date1>date2)	return(1);
-if(date1<date2)	return(-1);
-return(0);
-}
-
-/****************************************************************************/
-/* Compares file upload dates for descending date sort						*/
-/****************************************************************************/
-int fdatecmp_d(uchar **buf1, uchar **buf2)
-{
-	time_t date1,date2;
-
-date1=((*buf1)[14]|((long)(*buf1)[15]<<8)|((long)(*buf1)[16]<<16)
-	|((long)(*buf1)[17]<<24));
-date2=((*buf2)[14]|((long)(*buf2)[15]<<8)|((long)(*buf2)[16]<<16)
-	|((long)(*buf2)[17]<<24));
-if(date1>date2)	return(-1);
-if(date1<date2)	return(1);
-return(0);
-}
-
-/************************************************************************/
-/* Wait (for a limited period of time) for sequential dev to become 	*/
-/* available for file retrieval 										*/
-/************************************************************************/
-void seqwait(uint devnum)
-{
-	char loop=0;
-	int i;
-	time_t start;
-	node_t node;
-
-
-if(!devnum)
-	return;
-for(start=now=time(NULL);online && now-start<90;now=time(NULL)) {
-	if(msgabort())				/* max wait ^^^^ sec */
-		break;
-	getnodedat(node_num,&thisnode,1);	/* open and lock this record */
-	for(i=1;i<=sys_nodes;i++) {
-		if(i==node_num) continue;
-		getnodedat(i,&node,1);
-		if((node.status==NODE_INUSE || node.status==NODE_QUIET)
-			&& node.action==NODE_RFSD && node.aux==devnum) {
-			putnodedat(i,node);
-			break; }
-		putnodedat(i,node); }
-	if(i>sys_nodes) {
-		thisnode.action=NODE_RFSD;
-		thisnode.aux=devnum;
-		putnodedat(node_num,thisnode);	/* write devnum, unlock, and ret */
-		return; }
-	putnodedat(node_num,thisnode);
-	if(!loop)
-		bprintf(text[WaitingForDeviceN],devnum);
-	loop=1;
-	mswait(100); }
-
-}
diff --git a/src/sbbs2/xfer_sec.c b/src/sbbs2/xfer_sec.c
deleted file mode 100644
index 4b3ec2afec..0000000000
--- a/src/sbbs2/xfer_sec.c
+++ /dev/null
@@ -1,134 +0,0 @@
-#line 1 "XFER_SEC.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/*****************************************************/
-/* This file contains the single function xfer_sec() */
-/*****************************************************/
-
-#include "sbbs.h"
-
-void xfer_cfg_cmd();
-void xfer_ext_cmd(char ch);
-void xfer_str_cmd(char *str);
-
-void scandirs(char mode);
-
-extern char no_rip_menu;
-
-/****************************************************************************/
-/* Used to scan single or multiple directories. 'mode' is the scan type.    */
-/****************************************************************************/
-void scandirs(char mode)
-{
-	char ch,str[256];
-	int s;
-	uint i,k;
-
-if(!usrlibs) return;
-mnemonics(text[DirLibOrAll]);
-ch=getkeys("DLA\r",0);
-if(sys_status&SS_ABORT || ch==CR) {
-	lncntr=0;
-	return; }
-if(ch!='A') {
-	if(mode&FL_ULTIME) {			/* New file scan */
-		bprintf(text[NScanHdr],timestr(&ns_time));
-		str[0]=0; }
-	else if(mode==FL_NO_HDR) {		/* Search for a string */
-		if(!getfilespec(tmp))
-			return;
-		padfname(tmp,str); }
-	else if(mode==FL_FINDDESC) {	/* Find text in description */
-		if(!noyes(text[SearchExtendedQ]))
-			mode=FL_EXFIND;
-		if(sys_status&SS_ABORT) {
-			lncntr=0;
-			return; }
-		bputs(text[SearchStringPrompt]);
-		if(!getstr(str,40,K_LINE|K_UPPER)) {
-			lncntr=0;
-			return; } } }
-if(ch=='D') {
-	if((s=listfiles(usrdir[curlib][curdir[curlib]],str,0,mode))==-1)
-		return;
-	bputs("\r\1>");
-	if(s>1)
-		bprintf(text[NFilesListed],s);
-	else if(!s && !(mode&FL_ULTIME))
-		bputs(text[FileNotFound]);
-	return; }
-if(ch=='L') {
-	k=0;
-	for(i=0;i<usrdirs[curlib] && !msgabort();i++) {
-		attr(LIGHTGRAY);
-		outchar('.');
-		if(i && !(i%5))
-			bputs("\b\b\b\b\b     \b\b\b\b\b");
-		if(mode&FL_ULTIME	/* New-scan */
-			&& (lib[usrlib[curlib]]->offline_dir==usrdir[curlib][i]
-			|| dir[usrdir[curlib][i]]->misc&DIR_NOSCAN))
-			continue;
-		else if((s=listfiles(usrdir[curlib][i],str,0,mode))==-1)
-			return;
-		else k+=s; }
-	bputs("\r\1>");
-	if(k>1)
-		bprintf(text[NFilesListed],k);
-	else if(!k && !(mode&FL_ULTIME))
-		bputs(text[FileNotFound]);
-	return; }
-
-scanalldirs(mode);
-}
-
-/****************************************************************************/
-/* Scan all directories in all libraries for files							*/
-/****************************************************************************/
-void scanalldirs(char mode)
-{
-	char str[256];
-	int s;
-	uint i,j,k,d;
-
-if(!usrlibs) return;
-k=0;
-if(mode&FL_ULTIME) {			/* New file scan */
-	bprintf(text[NScanHdr],timestr(&ns_time));
-	str[0]=0; }
-else if(mode==FL_NO_HDR) {		/* Search for a string */
-	if(!getfilespec(tmp))
-		return;
-	padfname(tmp,str); }
-else if(mode==FL_FINDDESC) {	/* Find text in description */
-	if(!noyes(text[SearchExtendedQ]))
-		mode=FL_EXFIND;
-	if(sys_status&SS_ABORT) {
-		lncntr=0;
-		return; }
-	bputs(text[SearchStringPrompt]);
-	if(!getstr(str,40,K_LINE|K_UPPER)) {
-		lncntr=0;
-		return; } }
-for(i=d=0;i<usrlibs;i++) {
-	for(j=0;j<usrdirs[i] && !msgabort();j++,d++) {
-		attr(LIGHTGRAY);
-		outchar('.');
-		if(d && !(d%5))
-			bputs("\b\b\b\b\b     \b\b\b\b\b");
-		if(mode&FL_ULTIME /* New-scan */
-			&& (lib[usrlib[i]]->offline_dir==usrdir[i][j]
-			|| dir[usrdir[i][j]]->misc&DIR_NOSCAN))
-			continue;
-		else if((s=listfiles(usrdir[i][j],str,0,mode))==-1)
-			return;
-		else k+=s; }
-	if(j<usrdirs[i])   /* aborted */
-		break; }
-bputs("\r\1>");
-if(k>1)
-	bprintf(text[NFilesListed],k);
-else if(!k && !(mode&FL_ULTIME))
-	bputs(text[FileNotFound]);
-}
-
diff --git a/src/sbbs2/xtrn.c b/src/sbbs2/xtrn.c
deleted file mode 100644
index d7a1d14c93..0000000000
--- a/src/sbbs2/xtrn.c
+++ /dev/null
@@ -1,500 +0,0 @@
-#line 1 "XTRN.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/***************************************************************************/
-/* Functions that pertain to external programs (other EXE or COM programs) */
-/***************************************************************************/
-
-#include "sbbs.h"
-#include "cmdshell.h"
-
-#ifndef __FLAT__
-
-#include "spawno.h"
-
-void interrupt (*oldfunc)(void);
-
-/*****************************************************************************/
-/* Interrupt routine to expand WWIV Ctrl-C# codes into ANSI escape sequences */
-/*****************************************************************************/
-void interrupt wwiv_expand()
-{
-	char str[256],al;
-	static int ctrl_c;
-	int i,j;
-
-al=_AL;
-if(al!=3 && !ctrl_c)
-	oldfunc();
-else if(al!=3 && ctrl_c) {
-	ctrl_c=0;
-	if(useron.misc&ANSI) {
-		switch(al) {
-			default:
-				strcpy(str,"\x1b[0m");          /* low grey */
-				break;
-			case '1':
-				strcpy(str,"\x1b[0;1;36m");     /* high cyan */
-				break;
-			case '2':
-				strcpy(str,"\x1b[0;1;33m");     /* high yellow */
-				break;
-			case '3':
-				strcpy(str,"\x1b[0;35m");       /* low magenta */
-				break;
-			case '4':
-				strcpy(str,"\x1b[0;1;44m");     /* white on blue */
-				break;
-			case '5':
-				strcpy(str,"\x1b[0;32m");       /* low green */
-				break;
-			case '6':
-				strcpy(str,"\x1b[0;1;5;31m");   /* high blinking red */
-				break;
-			case '7':
-				strcpy(str,"\x1b[0;1;34m");     /* high blue */
-				break;
-			case '8':
-				strcpy(str,"\x1b[0;34m");       /* low blue */
-				break;
-			case '9':
-				strcpy(str,"\x1b[0;36m");       /* low cyan */
-				break; }
-		j=strlen(str);
-		for(i=0;i<j;i++) {
-			_AL=str[i];
-			oldfunc(); } } }
-else
-	ctrl_c=1;
-}
-#endif
-
-/****************************************************************************/
-/* Runs an external program directly using spawnvp							*/
-/****************************************************************************/
-int external(char *cmdline,char mode)
-{
-	char c,d,cmdlen,*arg[30],str[256],str2[256],fname[128],*p,x,y;
-	int i,file,rmode=0;
-	long l;
-	FILE *fp;
-#ifdef __OS2__
-	RESULTCODES rc;
-#endif
-
-if(cmdline[0]=='*') {   /* Baja module */
-	strcpy(str,cmdline+1);
-	p=strchr(str,SP);
-	if(p) {
-		strcpy(main_csi.str,p+1);
-		*p=0; }
-	return(exec_bin(str,&main_csi)); }
-
-#ifdef __MSDOS__
-nosound();						/* if page is on, turn off sound */
-#endif
-attr(LIGHTGRAY);                /* set attributes to normal text */
-
-strcpy(str,cmdline);		/* Set str to program name only */
-p=strchr(str,SP);
-if(p) *p=0;
-strcpy(fname,str);
-
-
-if(!(mode&EX_CC)) {
-	if(strcspn(cmdline,"<>|")!=strlen(cmdline))
-		mode|=EX_CC;	/* DOS I/O redirection; so, use command.com */
-	else {
-		i=strlen(str);
-		if(i>4 && !stricmp(str+(i-4),".BAT"))   /* specified .BAT file */
-			mode|=EX_CC;
-		else {
-			strcat(str,".BAT");
-			if(fexist(str)) 					/* and it's a .BAT file */
-				mode|=EX_CC; } } }
-
-p=strrchr(fname,'\\');
-if(!p) p=strchr(fname,':');
-if(!p) p=fname;
-else   p++;
-
-#ifndef __FLAT__
-
-for(i=0;i<total_swaps;i++)
-	if(!stricmp(p,swap[i]->cmd))
-		break;
-if(i<total_swaps)
-	mode|=EX_SWAP;
-
-#else
-
-for(i=0;i<total_os2pgms;i++)
-	if(!stricmp(p,os2pgm[i]->name))
-		break;
-if(i<total_os2pgms) {
-	mode|=EX_OS2;
-	if(os2pgm[i]->misc&OS2_POPEN)
-		mode|=EX_POPEN; }
-
-#endif
-
-#ifndef __FLAT__
-
-if(node_swap&SWAP_NONE || mode&EX_WWIV)
-	mode&=~EX_SWAP;
-
-if(mode&EX_SWAP) {
-	if(lclwy()>1 || lclwx()>1)
-        lputs(crlf);
-	lputs("Swapping...\r\n"); }
-
-#endif
-
-
-if(!(mode&EX_OS2) && mode&EX_CC)
-	sprintf(str,"%s /C %s",
-#ifdef __OS2__
-	node_comspec	 // Only used node_comspec for OS/2 ver
-#else
-	comspec
-#endif
-	,cmdline);
-
-else strcpy(str,cmdline);
-if(!(mode&EX_OS2) && strlen(str)>126) {
-	errormsg(WHERE,ERR_LEN,str,strlen(str));
-	errorlevel=-1;
-	return(-1); }
-
-#ifndef __FLAT__
-
-arg[0]=str;	/* point to the beginning of the string */
-cmdlen=strlen(str);
-for(c=0,d=1;c<cmdlen;c++)	/* Break up command line */
-	if(str[c]==SP) {
-		str[c]=0;			/* insert nulls */
-		arg[d++]=str+c+1; } /* point to the beginning of the next arg */
-arg[d]=0;
-
-#endif
-
-if(mode&EX_OUTR && (console&CON_R_ECHO))
-	rmode|=INT29R;
-if(mode&EX_OUTL)
-	rmode|=INT29L;
-if(mode&EX_INR && (console&CON_R_INPUT))
-	rmode|=INT16;
-
-#ifndef __FLAT__
-
-if(rmode)
-	ivhctl(rmode);	/* set DOS output interception vectors */
-
-if(mode&EX_WWIV) {	/* WWIV code expansion */
-	rioctl(CPTOFF); /* turn off ctrl-p translation */
-	oldfunc=getvect(0x29);
-	setvect(0x29,wwiv_expand); }
-
-if(com_port && sys_status&SS_COMISR && !(mode&(EX_OUTR|EX_INR))) {
-	riosync(0);
-	rioini(0,0);
-	sys_status&=~SS_COMISR; }
-
-if(!rmode) {					/* clear the status line */
-    lclini(node_scrnlen);
-    x=lclwx();
-    y=lclwy();
-	STATUSLINE;
-    lclxy(1,node_scrnlen);
-	lputc(CLREOL);
-	TEXTWINDOW;
-	lclxy(x,y); }
-
-if(mode&EX_SWAP) {				/* set the resident size */
-	if(rmode)
-		__spawn_resident=7000;	/* was 6000 */
-	else
-		__spawn_resident=0;
-	i=spawnvpeo(node_swapdir,arg[0],(const char **)arg
-		,(const char **)environ); }
-else
-	i=spawnvpe(P_WAIT,arg[0],arg,environ);
-
-#else //lif defined(__OS2__)
-
-if(com_port && !(mode&EX_POPEN)
-	&& sys_status&SS_COMISR) {	/* Uninstall COM routines */
-	riosync(0);
-	rioini(0,0);
-	sys_status&=~SS_COMISR; }
-
-textattr(LIGHTGRAY);	// Redundant
-if(!(mode&EX_OS2)) {	/* DOS pgm */
-	if(lclwy()>1 || lclwx()>1)
-        lputs(crlf);
-	lprintf("Executing DOS program: %s\r\n",str);
-	sprintf(str2,"%sEXECDOS.DAT",node_dir);
-	if((file=nopen(str2,O_WRONLY|O_TRUNC|O_CREAT))!=-1) {
-		sprintf(str2,"V1.00\r\n%X\r\n%lu\r\n%u\r\n%X\r\n%X\r\n%lX\r\n%u\r\n"
-			"%s\r\n"
-			,online==ON_REMOTE ? com_base:0
-			,com_irq,dte_rate,rmode,mode,useron.misc,node_num,str);
-		write(file,str2,strlen(str2));
-		sprintf(str2,"%u\r\nDSZLOG=%s\r\n"
-			,1	/* Total env vars to setup */
-			,getenv("DSZLOG"));
-		write(file,str2,strlen(str2));
-		if(online) {
-			sprintf(str2,"%s\r\n%s\r\n%u\r\n%u\r\n%c\r\n%s\r\n%s\r\n"
-				,useron.alias
-				,useron.name
-				,useron.level
-				,getage(useron.birth)
-				,useron.sex
-				,useron.phone
-				,useron.location);
-			write(file,str2,strlen(str2)); }
-		close(file); }
-
-	sprintf(str,"%sEXECDOS.EXE %s",exec_dir,node_dir);
-
-	x=wherex();
-	y=wherey();
-	i=system(str);
-	gotoxy(x,y); }
-else {	 /* OS/2 pgm */
-	window(1,1,80,node_scrnlen);
-	x=lclwx();
-    y=lclwy();
-    lclxy(1,node_scrnlen);
-	lputc(CLREOL);
-    lclxy(x,y);
-	i=system(cmdline);
-	lputs(crlf);
-	lputs(crlf);
-	lclxy(1,node_scrnlen-1);
-	}
-
-#ifdef __OS2__
-fixkbdmode();
-#endif
-textattr(LIGHTGRAY);
-
-#endif
-
-#ifndef __WIN32__
-while(lkbrd(0)) 	/* suck up any chars in the keyboard buffer */
-	;
-#endif
-
-#ifdef __MSDOS__
-setcbrk(0);
-
-lclatr(LIGHTGRAY);
-c=wherey();
-if(c>=node_scrnlen)
-	c=node_scrnlen-1;
-lclxy(wherex(),c);			/* put the cursor where BIOS thinks it is */
-
-#endif
-
-if(com_port && !(mode&EX_POPEN)
-#ifndef __OS2__
-	&& !(mode&(EX_OUTR|EX_INR))
-#endif
-	) {
-	comini();
-	setrate();
-	rioctl(IOSM|PAUSE|ABORT); }
-
-rioctl(CPTON);	/* turn on ctrl-p translation */
-
-#ifndef __FLAT__
-if(mode&EX_WWIV)
-	setvect(0x29,oldfunc);
-
-if(rmode)
-	ivhctl(0);		/* replace DOS output interrupt vectors */
-#endif
-
-setdisk(node_disk);
-strcpy(str,node_dir);
-str[strlen(str)-1]=0;
-if(chdir(str))
-	errormsg(WHERE,ERR_CHDIR,str,0);
-
-#ifndef __FLAT__
-lclini(node_scrnlen-1);
-#endif
-
-lncntr=0;
-if(online)
-	statusline();  /*  Replace status line after calling external program */
-errorlevel=i;
-return(i);
-}
-
-#ifndef __FLAT__
-extern uint riobp;
-extern mswtyp;
-#endif
-
-uint fakeriobp=0xffff;
-
-/*****************************************************************************/
-/* Returns command line generated from instr with %c replacments             */
-/*****************************************************************************/
-char *cmdstr(char *instr, char *fpath, char *fspec, char *outstr)
-{
-	static char static_cmd[128];
-	char str[256],str2[128],*cmd;
-    int i,j,len;
-
-if(outstr==NULL)
-	cmd=static_cmd;
-else
-	cmd=outstr;
-len=strlen(instr);
-for(i=j=0;i<len && j<128;i++) {
-    if(instr[i]=='%') {
-        i++;
-        cmd[j]=0;
-        switch(toupper(instr[i])) {
-            case 'A':   /* User alias */
-                strcat(cmd,useron.alias);
-                break;
-            case 'B':   /* Baud (DTE) Rate */
-                strcat(cmd,ultoa(dte_rate,str,10));
-                break;
-            case 'C':   /* Connect Description */
-                strcat(cmd,connection);
-                break;
-            case 'D':   /* Connect (DCE) Rate */
-                strcat(cmd,ultoa((ulong)cur_rate,str,10));
-                break;
-            case 'E':   /* Estimated Rate */
-                strcat(cmd,ultoa((ulong)cur_cps*10,str,10));
-                break;
-            case 'F':   /* File path */
-                strcat(cmd,fpath);
-                break;
-            case 'G':   /* Temp directory */
-				strcat(cmd,temp_dir);
-                break;
-			case 'H':   /* Port Handle or Hardware Flow Control */
-#ifdef __OS2__
-				strcat(cmd,itoa(rio_handle,str,10));
-#else
-                if(mdm_misc&MDM_CTS)
-                    strcat(cmd,"Y");
-                else
-                    strcat(cmd,"N");
-#endif
-                break;
-            case 'I':   /* UART IRQ Line */
-                strcat(cmd,itoa(com_irq,str,10));
-                break;
-            case 'J':
-				strcat(cmd,data_dir);
-                break;
-            case 'K':
-				strcat(cmd,ctrl_dir);
-                break;
-            case 'L':   /* Lines per message */
-                strcat(cmd,itoa(level_linespermsg[useron.level],str,10));
-                break;
-            case 'M':   /* Minutes (credits) for user */
-                strcat(cmd,ultoa(useron.min,str,10));
-                break;
-            case 'N':   /* Node Directory (same as SBBSNODE environment var) */
-                strcat(cmd,node_dir);
-                break;
-            case 'O':   /* SysOp */
-                strcat(cmd,sys_op);
-                break;
-            case 'P':   /* COM Port */
-                strcat(cmd,itoa(online==ON_LOCAL ? 0:com_port,str,10));
-                break;
-            case 'Q':   /* QWK ID */
-                strcat(cmd,sys_id);
-                break;
-            case 'R':   /* Rows */
-                strcat(cmd,itoa(rows,str,10));
-                break;
-            case 'S':   /* File Spec */
-                strcat(cmd,fspec);
-                break;
-            case 'T':   /* Time left in seconds */
-                gettimeleft();
-                strcat(cmd,itoa(timeleft,str,10));
-                break;
-            case 'U':   /* UART I/O Address (in hex) */
-                strcat(cmd,itoa(com_base,str,16));
-                break;
-            case 'V':   /* Synchronet Version */
-                sprintf(str,"%s%c",VERSION,REVISION);
-                break;
-            case 'W':   /* Time-slice API type (mswtype) */
-#ifndef __FLAT__
-                strcat(cmd,itoa(mswtyp,str,10));
-#endif
-                break;
-            case 'X':
-                strcat(cmd,shell[useron.shell]->code);
-                break;
-            case '&':   /* Address of msr */
-#ifndef __FLAT__
-                sprintf(str,"%lu",sys_status&SS_DCDHIGH ? &fakeriobp
-                    : online==ON_REMOTE ? &riobp-1 : 0);
-                strcat(cmd,str);
-#else
-				strcat(cmd,"%&");
-#endif
-                break;
-			case 'Y':
-				strcat(cmd,
-#ifdef __OS2__
-				node_comspec
-#else
-				comspec
-#endif
-				);
-				break;
-			case 'Z':
-				strcat(cmd,text_dir);
-                break;
-            case '!':   /* EXEC Directory */
-				strcat(cmd,exec_dir);
-                break;
-            case '#':   /* Node number (same as SBBSNNUM environment var) */
-                sprintf(str,"%d",node_num);
-                strcat(cmd,str);
-                break;
-            case '*':
-                sprintf(str,"%03d",node_num);
-                strcat(cmd,str);
-                break;
-            case '$':   /* Credits */
-                strcat(cmd,ultoa(useron.cdt+useron.freecdt,str,10));
-                break;
-            case '%':   /* %% for percent sign */
-                strcat(cmd,"%");
-                break;
-            default:    /* unknown specification */
-                if(isdigit(instr[i])) {
-                    sprintf(str,"%0*d",instr[i]&0xf,useron.number);
-                    strcat(cmd,str); }
-/*
-                else
-                    errormsg(WHERE,ERR_CHK,instr,i);
-*/
-                break; }
-        j=strlen(cmd); }
-    else
-        cmd[j++]=instr[i]; }
-cmd[j]=0;
-
-return(cmd);
-}
-
diff --git a/src/sbbs2/xtrn_ovl.c b/src/sbbs2/xtrn_ovl.c
deleted file mode 100644
index 3066305eb9..0000000000
--- a/src/sbbs2/xtrn_ovl.c
+++ /dev/null
@@ -1,1459 +0,0 @@
-#line 1 "XTRN_OVL.C"
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-#include "sbbs.h"
-
-char *hungupstr="\1n\1h%s\1n hung up on \1h%s\1n %s\r\n";
-
-#ifndef __FLAT__
-extern uint riobp;
-#endif
-
-extern mswtyp;
-extern uint fakeriobp;
-
-/****************************************************************************/
-/* Convert C string to pascal string										*/
-/****************************************************************************/
-void str2pas(char *instr, char *outstr)
-{
-	int i;
-
-outstr[0]=strlen(instr);
-for(i=0;i<outstr[0];i++)
-	outstr[i+1]=instr[i];
-}
-
-/****************************************************************************/
-/* Convert from unix time (seconds since 1/70) to julian (days since 1900)	*/
-/****************************************************************************/
-int unixtojulian(time_t unix)
-{
-	int days[12]={0,31,59,90,120,151,181,212,243,273,304,334};
-	long j;
-	struct date d;
-	struct time t;
-
-unixtodos(unix,&d,&t);
-j=36525L*d.da_year;
-if(!(j%100) && d.da_mon<3)
-	j--;
-j=(j-(1900*36525))/100;
-j+=d.da_day+days[d.da_mon-1];
-return(j);
-}
-
-/****************************************************************************/
-/* Convert julian date into unix format 									*/
-/****************************************************************************/
-time_t juliantounix(ulong j)
-{
-    int days[2][12] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334,
-                       0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335};
-    long temp;
-	int leap,counter;
-
-	if(!j) return(0L);
-
-	date.da_year=(100L*j)/36525L;
-	temp=(long)date.da_year*36525L;
-	date.da_year+=1900;
-	j-=temp/100L;
-
-	if (!(temp%100)) {
-		j++;
-		leap=1; }
-	else leap=0;
-
-	for(date.da_mon=counter=0;counter<12;counter++)
-		if(days[leap][counter]<j)
-			date.da_mon=counter;
-
-	date.da_day=j-days[leap][date.da_mon];
-	date.da_mon++;	/* go from 0 to 1 based */
-
-	curtime.ti_hour=curtime.ti_min=curtime.ti_sec=0;
-	return(dostounix(&date,&curtime));
-}
-
-/****************************************************************************/
-/* Creates various types of xtrn (Doors, Chains, etc.) data files.		 */
-/****************************************************************************/
-void xtrndat(char *name, char *dropdir, uchar type, ulong tleft)
-{
-	char	str[1024],tmp2[128],c,*p;
-	int		i,file;
-	long	l;
-	ushort	w;
-	FILE *	stream;
-	struct	time lastcall;
-	stats_t stats;
-
-if(type==XTRN_SBBS) {	/* SBBS XTRN.DAT file */
-	sprintf(str,"%sXTRN.DAT",dropdir);
-	if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1) {
-		errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
-		return; }
-
-	sprintf(str,"%s\r\n%s\r\n%s\r\n%s\r\n"
-		,name								/* User name */
-		,sys_name							/* System name */
-		,sys_op 							/* Sysop name */
-		,sys_guru); 						/* Guru name */
-	write(file,str,strlen(str));
-
-	sprintf(str,"%s\r\n%s\r\n%u\r\n%u\r\n%lu\r\n%s\r\n%lu\r\n%lu\r\n"
-		,ctrl_dir							/* Ctrl dir */
-		,data_dir							/* Data dir */
-		,sys_nodes							/* Total system nodes */
-		,node_num							/* Current node */
-		,tleft								/* User Timeleft in seconds */
-		,useron.misc&ANSI					/* User ANSI ? (Yes/Mono/No) */
-			? useron.misc&COLOR
-			? "Yes":"Mono":"No"
-		,rows								/* User Screen lines */
-		,useron.cdt+useron.freecdt);		/* User Credits */
-	write(file,str,strlen(str));
-
-	sprintf(str,"%u\r\n%u\r\n%s\r\n%c\r\n%u\r\n%s\r\n"
-		,useron.level						/* User main level */
-		,useron.level						/* User transfer level */
-		,useron.birth						/* User birthday */
-		,useron.sex 						/* User sex (M/F) */
-		,useron.number						/* User number */
-		,useron.phone); 					/* User phone number */
-	write(file,str,strlen(str));
-
-	sprintf(str,"%u\r\n%u\r\n%x\r\n%lu\r\n%s\r\n%s\r\n"
-		"%s\r\n%s\r\n%s\r\n%s\r\n%s\r\n%s\r\n%lu\r\n"
-		,online==ON_LOCAL ? 0:com_port		/* Com port or 0 if local */
-		,com_irq							/* Com IRQ */
-		,com_base							/* Com base in hex */
-		,dte_rate							/* Com rate */
-		,mdm_misc&MDM_CTS	   ? "Yes":"No" /* Hardware flow ctrl Y/N */
-		,mdm_misc&MDM_STAYHIGH ? "Yes":"No" /* Locked DTE rate Y/N */
-		,mdm_init							/* Modem initialization string */
-		,mdm_spec							/* Modem special init string */
-		,mdm_term							/* Modem terminal mode init str */
-		,mdm_dial							/* Modem dial string */
-		,mdm_offh							/* Modem off-hook string */
-		,mdm_answ							/* Modem answer string */
-#ifndef __FLAT__
-		,sys_status&SS_DCDHIGH ? &fakeriobp : &riobp-1							 /* Modem status register */
-#else
-		,0
-#endif
-		);
-	write(file,str,strlen(str));
-
-	sprintf(str,"%u\r\n",total_xtrns);
-	write(file,str,strlen(str));			/* Total external programs */
-
-	for(i=0;i<total_xtrns;i++) {			/* Each program's name */
-		if(SYSOP || chk_ar(xtrn[i]->ar,useron))
-			strcpy(str,xtrn[i]->name);
-		else
-			str[0]=0;						/* Blank if no access */
-		strcat(str,crlf);
-		write(file,str,strlen(str)); }
-
-	sprintf(str,"%s\r\n%s\r\n"
-		,ltoaf(useron.flags1,tmp)			 /* Main flags */
-		,ltoaf(useron.flags2,tmp2)			 /* Transfer flags */
-		);
-	write(file,str,strlen(str));
-
-	sprintf(str,"%s\r\n%s\r\n%lx\r\n%s\r\n%s\r\n%s\r\n"
-		,ltoaf(useron.exempt,tmp)			/* Exemptions */
-		,ltoaf(useron.rest,tmp2)			/* Restrictions */
-		,useron.expire						/* Expiration date in unix form */
-		,useron.address 					/* Address */
-		,useron.location					/* City/State */
-		,useron.zipcode 					/* Zip/Postal code */
-		);
-	write(file,str,strlen(str));
-
-	sprintf(str,"%s\r\n%s\r\n%d\r\n%s\r\n%lu\r\n%s\r\n%s\r\n%s\r\n%s\r\n"
-		"%lx\r\n%d\r\n"
-		,ltoaf(useron.flags3,tmp)			/* Flag set #3 */
-		,ltoaf(useron.flags4,tmp2)			/* Flag set #4 */
-		,mswtyp 							/* Time-slice type */
-		,useron.name						/* Real name/company */
-		,cur_rate							/* DCE rate */
-		,exec_dir
-		,text_dir
-		,temp_dir
-		,sys_id
-		,node_misc
-#ifdef __FLAT__
-		,rio_handle
-#else
-		,-1
-#endif
-		);
-    write(file,str,strlen(str));
-
-	close(file); }
-
-else if(type==XTRN_WWIV) {	/*	WWIV CHAIN.TXT File */
-	sprintf(str,"%sCHAIN.TXT",dropdir);
-	if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1) {
-		errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
-		return; }
-
-	sprintf(str,"%u\r\n%s\r\n%s\r\n%s\r\n%u\r\n%c\r\n"
-		,useron.number						/* User number */
-		,name								/* User name */
-		,useron.name						/* User real name */
-		,nulstr 							/* User call sign */
-		,getage(useron.birth)				/* User age */
-		,useron.sex);						/* User sex (M/F) */
-	strupr(str);
-	write(file,str,strlen(str));
-
-	sprintf(str,"%lu\r\n%s\r\n%u\r\n%lu\r\n%u\r\n%u\r\n%u\r\n%u\r\n%u\r\n"
-		,useron.cdt+useron.freecdt			/* Gold */
-		,unixtodstr(useron.laston,tmp)		/* User last on date */
-		,80 								/* User screen width */
-		,rows								/* User screen length */
-		,useron.level						/* User SL */
-		,0									/* Cosysop? */
-		,SYSOP								/* Sysop? (1/0) */
-		,(useron.misc&ANSI) ? 1:0			/* ANSI ? (1/0) */
-		,online==ON_REMOTE);				/* Remote (1/0) */
-	write(file,str,strlen(str));
-
-	sprintf(str,"%lu\r\n%s\r\n%s\r\n%s\r\n%lu\r\n%d\r\n%s\r\n%s\r\n"
-		"%u\r\n%u\r\n%lu\r\n%u\r\n%lu\r\n%u\r\n%s\r\n"
-		,tleft								/* Time left in seconds */
-		,node_dir							/* Gfiles dir (log dir) */
-		,data_dir							/* Data dir */
-		,"NODE.LOG"                         /* Name of log file */
-		,dte_rate							/* DTE rate */
-		,com_port							/* COM port number */
-		,sys_name							/* System name */
-		,sys_op 							/* Sysop name */
-		,0									/* Logon time (sec past 12am) */
-		,0									/* Current time (sec past 12am) */
-		,useron.ulb/1024UL					/* User uploaded kbytes */
-		,useron.uls 						/* User uploaded files */
-		,useron.dlb/1024UL					/* User downloaded kbytes */
-		,useron.dls 						/* User downloaded files */
-		,"8N1");                            /* Data, parity, stop bits */
-	write(file,str,strlen(str));
-
-	close(file); }
-
-else if(type==XTRN_GAP) {	/* Gap DOOR.SYS File */
-	sprintf(str,"%sDOOR.SYS",dropdir);
-	if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1) {
-		errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
-		return; }
-
-	sprintf(str,"COM%d:\r\n%lu\r\n%u\r\n%u\r\n%lu\r\n%c\r\n%c\r\n%c\r\n%c\r\n"
-		,online==ON_REMOTE ? com_port:0 	/* 01: COM port - 0 if Local */
-		,cur_rate							/* 02: DCE rate */
-		,8									/* 03: Data bits */
-		,node_num							/* 04: Node number */
-		,dte_rate							/* 05: DTE rate */
-		,console&CON_L_ECHO ? 'Y':'N'       /* 06: Screen display */
-		,'Y'                                /* 07: Printer toggle */
-		,'Y'                                /* 08: Page bell */
-		,'Y');                              /* 09: Caller alarm */
-	write(file,str,strlen(str));
-
-	sprintf(str,"%s\r\n%s\r\n%s\r\n%s\r\n%s\r\n"
-		,name								/* 10: User name */
-		,useron.location					/* 11: User location */
-		,useron.phone						/* 12: User home phone */
-		,useron.phone						/* 13: User work/data phone */
-		,useron.pass);						/* 14: User password */
-	write(file,str,strlen(str));
-
-	sprintf(str,"%u\r\n%u\r\n%s\r\n%lu\r\n%lu\r\n%s\r\n"
-		,useron.level						/* 15: User security level */
-		,useron.logons						/* 16: User total logons */
-		,unixtodstr(useron.laston,tmp)		/* 17: User last on date */
-		,tleft								/* 18: User time left in sec */
-		,tleft/60							/* 19: User time left in min */
-		,useron.misc&NO_EXASCII 			/* 20: GR if COLOR ANSI */
-			? "7E" : (useron.misc&(ANSI|COLOR))==(ANSI|COLOR) ? "GR" : "NG");
-	write(file,str,strlen(str));
-
-	sprintf(str,"%lu\r\n%c\r\n%s\r\n%u\r\n%s\r\n%u\r\n%c\r\n%u\r\n%u\r\n"
-		,rows								/* 21: User screen length */
-		,useron.misc&EXPERT ? 'Y':'N'       /* 22: Expert? (Y/N) */
-		,ltoaf(useron.flags1,tmp2)			/* 23: Registered conferences */
-		,0									/* 24: Conference came from */
-		,unixtodstr(useron.expire,tmp)		/* 25: User expiration date */
-		,useron.number						/* 26: User number */
-		,'Y'                                /* 27: Default protocol */
-		,useron.uls 						/* 28: User total uploads */
-		,useron.dls);						/* 29: User total downloads */
-	write(file,str,strlen(str));
-
-	sprintf(str,"%u\r\n%lu\r\n%s\r\n%s\r\n%s\r\n%s"
-		"\r\n%s\r\n%02d:%02d\r\n%c\r\n"
-		,0									/* 30: Kbytes downloaded today */
-		,(useron.cdt+useron.freecdt)/1024UL /* 31: Max Kbytes to download today */
-		,useron.birth						/* 32: User birthday */
-		,node_dir							/* 33: Path to MAIN directory */
-		,data_dir							/* 34: Path to GEN directory */
-		,sys_op 							/* 35: Sysop name */
-		,nulstr 							/* 36: Alias name */
-		,0 // sys_eventtime/60				/* 37: Event time HH:MM */
-		,0 // sys_eventtime%60
-		,'Y');                              /* 38: Error correcting connection */
-	write(file,str,strlen(str));
-
-	unixtodos(ns_time,&date,&curtime);
-	sprintf(str,"%c\r\n%c\r\n%u\r\n%lu\r\n%02d/%02d/%02d\r\n"
-		,(useron.misc&(NO_EXASCII|ANSI|COLOR))==ANSI
-			? 'Y':'N'                       /* 39: ANSI supported but NG mode */
-		,'Y'                                /* 40: Use record locking */
-		,14 								/* 41: BBS default color */
-		,useron.min 						/* 42: Time credits in minutes */
-		,date.da_mon						/* 43: File new-scan date */
-		,date.da_day
-		,TM_YEAR(date.da_year-1900));
-	write(file,str,strlen(str));
-
-	unixtodos(logontime,&date,&curtime);
-	unixtodos(useron.laston,&date,&lastcall);
-	sprintf(str,"%02d:%02d\r\n%02d:%02d\r\n%u\r\n%u\r\n%lu\r\n"
-		"%lu\r\n%s\r\n%u\r\n%u\r\n"
-		,curtime.ti_hour					/* 44: Time of this call */
-		,curtime.ti_min
-		,lastcall.ti_hour					/* 45: Time of last call */
-		,lastcall.ti_min
-		,999								/* 46: Max daily files available */
-		,0									/* 47: Files downloaded so far today */
-		,useron.ulb/1024UL					/* 48: Total Kbytes uploaded */
-		,useron.dlb/1024UL					/* 49: Total Kbytes downloaded */
-		,useron.comment 					/* 50: User comment */
-		,0									/* 51: Total doors opened */
-		,useron.posts); 					/* 52: User message left */
-	write(file,str,strlen(str));
-
-	close(file); }
-
-else if(type==XTRN_RBBS || type==XTRN_RBBS1) {
-	if(type==XTRN_RBBS)
-		sprintf(str,"%sDORINFO%X.DEF",dropdir,node_num);   /* support 1-F */
-	else
-		sprintf(str,"%sDORINFO1.DEF",dropdir);
-	if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1) {
-		errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
-        return; }
-
-	strcpy(tmp,sys_op);
-	p=strchr(tmp,SP);
-	if(p)
-		*(p++)=0;
-	else
-        p=nulstr;
-
-	sprintf(str,"%s\r\n%s\r\n%s\r\nCOM%d\r\n%lu BAUD,N,8,1\r\n%u\r\n"
-		,sys_name							/* Name of BBS */
-		,tmp								/* Sysop's firstname */
-		,p									/* Sysop's lastname */
-		,online==ON_REMOTE ? com_port:0 	/* COM port number, 0 if local */
-		,dte_rate							/* DTE rate */
-		,0);								/* Network type */
-	strupr(str);
-	write(file,str,strlen(str));
-
-	strcpy(tmp,name);
-	p=strchr(tmp,SP);
-	if(p)
-		*(p++)=0;
-	else
-		p=nulstr;
-	sprintf(str,"%s\r\n%s\r\n%s\r\n%u\r\n%u\r\n%lu\r\n"
-		,tmp								/* User's firstname */
-		,p									/* User's lastname */
-		,useron.location					/* User's city */
-		,(useron.misc&ANSI)==ANSI			/* 1=ANSI 0=ASCII */
-		,useron.level						/* Security level */
-		,tleft/60); 						/* Time left in minutes */
-	strupr(str);
-	write(file,str,strlen(str));
-
-	close(file);
-
-	sprintf(str,"%sEXITINFO.BBS",dropdir);
-	if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1) {
-		errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
-        return; }
-	w=dte_rate;
-	write(file,&w,sizeof(short));	  /* BaudRate */
-	/* SysInfo */
-	getstats(0,&stats);
-	write(file,&stats.logons,sizeof(long)); /* CallCount */
-	write(file,nulstr,36);					/* LastCallerName */
-	write(file,nulstr,36);					/* LastCallerAlias */
-	write(file,nulstr,92);					/* ExtraSpace */
-	/* TimeLogInfo */
-	write(file,nulstr,9);					/* StartDate */
-	write(file,nulstr,24*sizeof(short));		/* BusyPerHour */
-	write(file,nulstr,7*sizeof(short));		/* BusyPerDay */
-	/* UserInfo */
-	str2pas(name,str);				/* Name */
-	write(file,str,36);
-	str2pas(useron.location,str);
-	write(file,str,26); 					/* City */
-	str2pas(useron.pass,str);
-	write(file,str,16); 					/* Pwd */
-	str2pas(useron.phone,str);
-	write(file,str,13); 					/* DataPhone */
-	write(file,str,13); 					/* HomePhone */
-	unixtodos(useron.laston,&date,&lastcall);
-	sprintf(tmp,"%02d:%02d",lastcall.ti_hour,lastcall.ti_min);
-	str2pas(tmp,str);
-	write(file,str,6);						/* LastTime */
-	unixtodstr(useron.laston,tmp);
-	str2pas(tmp,str);
-	write(file,str,9);						/* LastDate */
-	c=0;
-	if(useron.misc&DELETED) c|=(1<<0);
-	if(useron.misc&CLRSCRN) c|=(1<<1);
-	if(useron.misc&UPAUSE)	 c|=(1<<2);
-	if(useron.misc&ANSI)	c|=(1<<3);
-	if(useron.sex=='F')     c|=(1<<7);
-	write(file,&c,1);						/* Attrib */
-	write(file,&useron.flags1,4);			/* Flags */
-	i=0;
-	w=0;
-	write(file,&w,sizeof(short)); 			/* Credit */
-	write(file,&w,sizeof(short)); 			/* Pending */
-	write(file,&useron.posts,sizeof(short));	/* TimesPosted */
-	write(file,&w,sizeof(short)); 			/* HighMsgRead */
-	w=useron.level;
-	write(file,&w,sizeof(short)); 			/* SecLvl */
-	w=0;
-	write(file,&w,sizeof(short)); 			/* Times */
-	write(file,&useron.uls,sizeof(short));	/* Ups */
-	write(file,&useron.dls,sizeof(short));	/* Downs */
-	w=useron.ulb/1024UL;
-	write(file,&w,sizeof(short)); 			/* UpK */
-	w=useron.dlb/1024UL;
-	write(file,&w,sizeof(short)); 			/* DownK */
-	w=logon_dlb/1024UL;
-	write(file,&w,sizeof(short)); 			/* TodayK */
-	w=0;
-	write(file,&w,sizeof(short)); 			/* Elapsed */
-	write(file,&w,sizeof(short)); 			/* Len */
-	write(file,&w,sizeof(short)); 			/* CombinedPtr */
-	write(file,&w,sizeof(short)); 			/* AliasPtr */
-	l=0;
-	write(file,&l,sizeof(long));			/* Birthday (as a long?) */
-	/* EventInfo */
-	c=0;
-	write(file,&c,sizeof(char));			/* Status */
-	write(file,&l /* sys_eventtime */,sizeof(long));	/* RunTime */
-	write(file,&c,sizeof(char));			/* ErrorLevel */
-	c=0xff;
-	write(file,&c,sizeof(char));			/* Days */
-	// c=sys_eventnode==node_num || sys_misc&SM_TIMED_EX ? 1 : 0;
-	c=0;
-	write(file,&c,sizeof(char));			/* Forced */
-	if(!total_events)
-		l=0;
-	else
-		l=event[0]->last;
-	write(file,&l,sizeof(long));			/* LastTimeRun */
-	memset(str,0,40);
-	write(file,str,7);						/* Spare */
-
-	c=0;
-	write(file,&c,1);						/* NetMailEntered */
-	write(file,&c,1);						/* EchoMailEntered */
-
-	unixtodos(logontime,&date,&curtime);
-	sprintf(tmp,"%02d:%02d",curtime.ti_hour,curtime.ti_min);
-	str2pas(tmp,str);
-	write(file,str,6);						/* LoginTime */
-	unixtodstr(logontime,tmp);
-	str2pas(tmp,str);
-	write(file,str,9);						/* LoginDate */
-	write(file,&level_timepercall[useron.level],sizeof(short));  /* TmLimit */
-	write(file,&logontime,sizeof(long));	/* LoginSec */
-	write(file,&useron.cdt,sizeof(long));	/* Credit */
-	write(file,&useron.number,sizeof(short)); /* UserRecNum */
-	write(file,&i,2);						/* ReadThru */
-	write(file,&i,2);						/* PageTimes */
-	write(file,&i,2);						/* DownLimit */
-	c=sys_status&SS_SYSPAGE ? 1:0;
-	write(file,&c,1);						/* WantChat */
-	c=0;
-	write(file,&c,1);						/* GosubLevel */
-
-	memset(str,0,255);
-	for(i=1;i<20;i++)
-		write(file,str,9);					/* GosubData */
-	write(file,str,9);						/* Menu */
-	c=useron.misc&CLRSCRN ? 1:0;
-	write(file,&c,1);						/* ScreenClear */
-	c=useron.misc&UPAUSE ? 1:0;
-	write(file,&c,1);						/* MorePrompts */
-	c=useron.misc&NO_EXASCII ? 0:1;
-	write(file,&c,1);						/* GraphicsMode */
-	c=useron.xedit ? 1:0;
-	write(file,&c,1);						/* ExternEdit */
-	i=rows;
-	write(file,&i,2);						/* ScreenLength */
-	c=1;
-	write(file,&c,1);						/* MNP_Connect */
-	write(file,str,49); 					/* ChatReason */
-	c=0;
-	write(file,&c,1);						/* ExternLogoff */
-	c=useron.misc&ANSI ? 1:0;
-	write(file,&c,1);						/* ANSI_Capable */
-	close(file);
-	}
-
-else if(type==XTRN_WILDCAT) { /* WildCat CALLINFO.BBS File */
-	sprintf(str,"%sCALLINFO.BBS",dropdir);
-	if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1) {
-		errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
-        return; }
-
-	if(online==ON_LOCAL) i=5;
-	else
-		switch(dte_rate) {
-			case 300:
-				i=1;
-				break;
-			case 1200:
-				i=2;
-				break;
-			case 2400:
-				i=0;
-				break;
-			case 9600:
-				i=3;
-				break;
-			case 19200:
-				i=4;
-				break;
-			case 38400:
-				i=6;
-				break;
-			default:
-				i=7;
-				break; }
-	sprintf(str,"%s\r\n%u\r\n%s\r\n%u\r\n%lu\r\n%s\r\n%s\r\n%u\r\n"
-		,name								/* User name */
-		,i									/* DTE rate */
-		,useron.location					/* User location */
-		,useron.level						/* Security level */
-		,tleft/60							/* Time left in min */
-		,useron.misc&ANSI ? "COLOR":"MONO"  /* ANSI ??? */
-		,useron.pass						/* Password */
-		,useron.number);					/* User number */
-	write(file,str,strlen(str));
-
-	unixtodos(now,&date,&curtime);
-	sprintf(str,"%lu\r\n%02d:%02d\r\n%02d:%02d %02d/%02d/%02d\r\n%s\r\n"
-		,tleft								/* Time left in seconds */
-		,curtime.ti_hour,curtime.ti_min 	/* Current time HH:MM */
-		,curtime.ti_hour,curtime.ti_min 	/* Current time and date HH:MM */
-		,date.da_mon,date.da_day			/* MM/DD/YY */
-		,TM_YEAR(date.da_year-1900)
-		,nulstr);							/* Conferences with access */
-	write(file,str,strlen(str));
-
-	unixtodos(useron.laston,&date,&lastcall);
-	sprintf(str,"%u\r\n%u\r\n%u\r\n%u\r\n%s\r\n%s %02u:%02u\r\n"
-		,0									/* Daily download total */
-		,0									/* Max download files */
-		,0									/* Daily download k total */
-		,0									/* Max download k total */
-		,useron.phone						/* User phone number */
-		,unixtodstr(useron.laston,tmp)		/* Last on date and time */
-		,lastcall.ti_hour					/* MM/DD/YY  HH:MM */
-		,lastcall.ti_min);
-	write(file,str,strlen(str));
-
-	unixtodos(ns_time,&date,&curtime);
-	sprintf(str,"%s\r\n%s\r\n%02d/%02d/%02d\r\n%u\r\n%lu\r\n%u"
-		"\r\n%u\r\n%u\r\n"
-		,useron.misc&EXPERT 				/* Expert or Novice mode */
-			? "EXPERT":"NOVICE"
-		,"All"                              /* Transfer Protocol */
-		,date.da_mon,date.da_day			/* File new-scan date */
-		,TM_YEAR(date.da_year-1900)			/* in MM/DD/YY */
-		,useron.logons						/* Total logons */
-		,rows								/* Screen length */
-		,0									/* Highest message read */
-		,useron.uls 						/* Total files uploaded */
-		,useron.dls);						/* Total files downloaded */
-	write(file,str,strlen(str));
-
-	sprintf(str,"%u\r\n%s\r\nCOM%u\r\n%s\r\n%lu\r\n%s\r\n%s\r\n"
-		,8									/* Data bits */
-		,online==ON_LOCAL?"LOCAL":"REMOTE"  /* Online local or remote */
-		,com_port							/* COMx port */
-		,useron.birth						/* User birthday */
-		,dte_rate							/* DTE rate */
-		,"FALSE"                            /* Already connected? */
-		,"Normal Connection");              /* Normal or ARQ connect */
-	write(file,str,strlen(str));
-
-	sprintf(str,"%02d/%02d/%02d %02d:%02d\r\n%u\r\n%u\r\n"
-		,date.da_mon,date.da_day			/* Current date MM/DD/YY */
-		,TM_YEAR(date.da_year-1900)
-		,curtime.ti_hour,curtime.ti_min 	/* Current time HH:MM */
-		,node_num							/* Node number */
-		,0);								/* Door number */
-	write(file,str,strlen(str));
-
-	close(file); }
-
-else if(type==XTRN_PCBOARD) { /* PCBoard Files */
-	sprintf(str,"%sPCBOARD.SYS",dropdir);
-	if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1) {
-		errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
-        return; }
-
-	sprintf(str,"%2d%2d%2d%2d%c%2d%c%c%5u%-5.5s"
-		,-1 								/* Display on/off */
-		,0									/* Printer on/off */
-		,sys_status&SS_SYSPAGE ? -1:0		/* Page Bell on/off */
-		,node_misc&NM_ANSALARM ? -1:0		/* Caller Alarm on/off */
-		,SP 								/* Sysop next flag */
-		,0									/* Error corrected */
-		,useron.misc&NO_EXASCII ? '7'       /* Graphics mode */
-			: (useron.misc&(COLOR|ANSI))==(COLOR|ANSI) ? 'Y':'N'
-		,'A'                                /* Node chat status */
-		,(uint)dte_rate 					/* DTE Port Speed */
-		,connection 						/* Connection description */
-		);
-	write(file,str,23);
-
-	write(file,&useron.number,2);			/* User record number */
-
-	strcpy(tmp,name);
-	p=strchr(tmp,SP);
-	if(p) *p=0;
-	sprintf(str,"%-15.15s%-12s"
-		,tmp								/* User's first name */
-		,useron.pass);						/* User's password */
-	write(file,str,27);
-
-	unixtodos(logontime,&date,&curtime);
-	i=(curtime.ti_hour*60)+curtime.ti_min;
-	write(file,&i,2);						/* Logon time in min since mid */
-
-	now=time(NULL);
-	i=-(((now-starttime)/60)+useron.ttoday); /* Negative minutes used */
-	write(file,&i,2);
-
-	sprintf(str,"%02d:%02d",curtime.ti_hour,curtime.ti_min);
-	write(file,str,5);
-
-	i=level_timepercall[useron.level];		/* Time allowed on */
-	write(file,&i,2);
-
-	i=0;									/* Allowed K-bytes for D/L */
-	write(file,&i,2);
-	write(file,&i,1);						/* Conference user was in */
-	write(file,&i,2);						/* Conferences joined */
-	write(file,&i,2);						/* "" */
-	write(file,&i,2);						/* "" */
-	write(file,&i,2);						/* Conferences scanned */
-	write(file,&i,2);						/* "" */
-	write(file,&i,2);						/* Conference add time */
-	write(file,&i,2);						/* Upload/Sysop Chat time min */
-
-	strcpy(str,"    ");
-	write(file,str,4);						/* Language extension */
-
-	sprintf(str,"%-25.25s",name);           /* User's full name */
-	write(file,str,25);
-
-	i=(tleft/60);
-	write(file,&i,2);						/* Minutes remaining */
-
-	write(file,&node_num,1);				/* Node number */
-
-	sprintf(str,"%02d:%02d%2d%2d"           /* Scheduled Event time */
-		,0 // sys_eventtime/60
-		,0 // sys_eventtime%60
-		,0 // sys_timed[0] ? -1:0				 /* Event active ? */
-		,0									/* Slide event ? */
-		);
-	write(file,str,9);
-
-	l=0L;
-	write(file,&l,4);						/* Memorized message number */
-
-	sprintf(str,"%d%c%c%d%s%c%c%d%d%d%c%c"
-		,com_port							/* COM Port number */
-		,SP 								/* Reserved */
-		,SP 								/* "" */
-		,(useron.misc&ANSI)==ANSI			/* 1=ANSI 0=NO ANSI */
-		,"01-01-80"                         /* last event date */
-		,0,0								/* last event minute */
-		,0									/* caller exited to dos */
-		,sys_status&SS_EVENT ? 1:0			/* event up coming */
-		,0									/* stop uploads */
-		,0,0								/* conference user was in */
-		);
-	write(file,str,19);
-
-	close(file);			/* End of PCBOARD.SYS creation */
-
-	sprintf(str,"%sUSERS.SYS",dropdir);
-	if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1) {
-		errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
-        return; }
-
-	/* Write goof-ball header */
-
-	i=145;
-	write(file,&i,2);		/* PCBoard version number (i.e. 145) */
-	l=useron.number;
-	write(file,&l,4);		/* Record number for USER's file */
-	i=218;
-	write(file,&i,2);		/* Size of "fixed" user record */
-	i=1;
-	write(file,&i,2);		/* Number of conference areas */
-	i=7;
-	write(file,&i,2);		/* Number of bit map fields for conferences */
-	i=5;
-	write(file,&i,2);		/* Size of each bit map field */
-	memset(str,0,15);
-	write(file,str,15); 	/* Name of Third Party Application (if any) */
-	i=0;
-	write(file,&i,2);		/* Version number for application (if any) */
-	write(file,&i,2);		/* Size of a "fixed length" record (if any) */
-	write(file,&i,2);		/* Size of conference record (if any) */
-	l=0;
-	write(file,&l,4);		/* Offset of AppRec into USERS.INF (if any) */
-	i=0;
-	write(file,&i,1);		/* 1, if USERS.SYS file has been updated */
-
-	/* Write fixed record portion */
-
-	write(file,name,26);			/* Name */
-	sprintf(str,"%.24s",useron.location);
-	write(file,str,25); 			/* Location */
-	write(file,useron.pass,13); 	/* Password */
-	write(file,useron.phone,14);	/* Business or Data Phone */
-	write(file,useron.phone,14);	/* Home or Voice Phone */
-	i=unixtojulian(useron.laston);
-	write(file,&i,2);				/* Date last on */
-	unixtodos(useron.laston,&date,&curtime);
-	sprintf(str,"%02d:%02d",curtime.ti_hour,curtime.ti_min);
-	write(file,str,6);				/* Last time on */
-	if(useron.misc&EXPERT)
-		i=1;
-	else
-		i=0;
-	write(file,&i,1);				/* Expert mode */
-	i='Z';
-	write(file,&i,1);				/* Protocol (A-Z) */
-	if(useron.misc&CLRSCRN)
-		i=2;
-	else
-		i=0;
-	write(file,&i,1);				/* bit packed flags */
-	i=0;
-	write(file,&i,2);				/* DOS date for last DIR Scan */
-	i=useron.level;
-	write(file,&i,2);				/* Security level */
-	write(file,&useron.logons,2);	/* Number of times caller has connected */
-	c=rows;
-	write(file,&c,1);				/* Page length */
-	write(file,&useron.uls,2);		/* Number of uploads */
-	write(file,&useron.dls,2);		/* Number of downloads */
-	l=0;
-	write(file,&l,4);				/* Number of download bytes today */
-	write(file,&useron.note,31);	/* Comment #1 */
-	write(file,&useron.comp,31);	/* Comment #2 */
-	i=(now-starttime)/60;
-	write(file,&i,2);				/* Minutes online (this logon?) */
-	i=unixtojulian(useron.expire);
-	write(file,&i,2);				/* Expiration date */
-	i=expired_level;
-	write(file,&i,2);				/* Expired security level */
-	i=1;
-	write(file,&i,2);				/* Current conference */
-	write(file,&useron.dlb,4);		/* Bytes downloaded */
-	write(file,&useron.ulb,4);		/* Bytes uploaded */
-	if(useron.misc&DELETED)
-		i=1;
-	else
-		i=0;
-	write(file,&i,1);				/* Deleted? */
-	l=useron.number;
-	write(file,&l,4);				/* Record number in USERS.INF file */
-	l=0;
-	memset(str,0,9);
-	write(file,str,9);				/* Reserved */
-	write(file,&l,4);				/* Number of messages read */
-	l=useron.posts+useron.emails+useron.fbacks;
-	write(file,&l,4);				/* Number of messages left */
-	close(file);
-
-	/* End of USERS.SYS creation */
-
-	}
-
-else if(type==XTRN_SPITFIRE) {	 /* SpitFire SFDOORS.DAT File */
-	sprintf(str,"%sSFDOORS.DAT",dropdir);
-	if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1) {
-		errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
-		return; }
-
-	now=time(NULL);
-	unixtodos(now,&date,&curtime);
-	l=((((long)curtime.ti_hour*60L)+(long)curtime.ti_min)*60L)
-		+(long)curtime.ti_sec;
-
-	strcpy(tmp,name);
-	if((p=strchr(tmp,SP))!=NULL)
-		*p=0;
-
-	sprintf(str,"%u\r\n%s\r\n%s\r\n%s\r\n%lu\r\n%u\r\n%lu\r\n%lu\r\n"
-		,useron.number						/* User number */
-		,name								/* User name */
-		,useron.pass						/* Password */
-		,tmp								/* User's first name */
-		,dte_rate							/* DTE Rate */
-		,com_port							/* COM Port */
-		,tleft/60							/* Time left in minutes */
-		,l									/* Seconds since midnight (now) */
-		);
-	write(file,str,strlen(str));
-
-	unixtodos(logontime,&date,&curtime);
-	l=((((long)curtime.ti_hour*60L)+(long)curtime.ti_min)*60L)
-		+(long)curtime.ti_sec;
-
-	sprintf(str,"%s\r\n%s\r\n%u\r\n%u\r\n%u\r\n%u\r\n%lu\r\n%lu\r\n%s\r\n"
-		"%s\r\n%s\r\n%lu\r\n%s\r\n%u\r\n%u\r\n%u\r\n%u\r\n%u\r\n%lu\r\n%u\r\n"
-		"%lu\r\n%lu\r\n%s\r\n%s\r\n"
-		,dropdir
-		,useron.misc&ANSI ? "TRUE":"FALSE"  /* ANSI ? True or False */
-		,useron.level						/* Security level */
-		,useron.uls 						/* Total uploads */
-		,useron.dls 						/* Total downloads */
-		,level_timepercall[useron.level]	/* Minutes allowed this call */
-		,l									/* Secs since midnight (logon) */
-		,starttime-logontime				/* Extra time in seconds */
-		,"FALSE"                            /* Sysop next? */
-		,"FALSE"                            /* From Front-end? */
-		,"FALSE"                            /* Software Flow Control? */
-		,dte_rate							/* DTE Rate */
-		,"FALSE"                            /* Error correcting connection? */
-		,0									/* Current conference */
-		,0									/* Current file dir */
-		,node_num							/* Node number */
-		,15 								/* Downloads allowed per day */
-		,0									/* Downloads already this day */
-		,100000 							/* Download bytes allowed/day */
-		,0									/* Downloaded bytes already today */
-		,useron.ulb/1024L					/* Kbytes uploaded */
-		,useron.dlb/1024L					/* Kbytes downloaded */
-		,useron.phone						/* Phone Number */
-		,useron.location					/* City, State */
-		);
-	write(file,str,strlen(str));
-
-    close(file); }
-
-else if(type==XTRN_UTI) { /* UTI v2.1 - UTIDOOR.TXT */
-	sprintf(str,"%sUTIDOOR.TXT",dropdir);
-	if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1) {
-		errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
-        return; }
-
-	strcpy(tmp,name);
-	strupr(tmp);
-	sprintf(str,"%s\r\n%lu\r\n%u\r\n%lu\r\n%lu\r\n"
-		,tmp								/* User name */
-		,cur_rate							/* Actual BPS rate */
-		,online==ON_LOCAL ? 0: com_port 	/* COM Port */
-		,dte_rate							/* DTE rate */
-		,tleft);							/* Time left in sec */
-    write(file,str,strlen(str));
-
-	close(file); }
-
-else if(type==XTRN_SR) { /* Solar Realms DOORFILE.SR */
-	sprintf(str,"%sDOORFILE.SR",dropdir);
-	if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1) {
-		errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
-		return; }
-
-	sprintf(str,"%s\r\n%d\r\n%d\r\n%lu\r\n%lu\r\n%u\r\n%lu\r\n"
-		,name								/* Complete name of user */
-		,useron.misc&ANSI ? 1:0 			/* ANSI ? */
-		,useron.misc&NO_EXASCII ? 0:1		/* IBM characters ? */
-		,rows								/* Page length */
-		,dte_rate							/* Baud rate */
-		,online==ON_LOCAL ? 0:com_port		/* COM port */
-		,tleft/60							/* Time left (in minutes) */
-		);
-	write(file,str,strlen(str));
-	close(file); }
-
-else if(type==XTRN_TRIBBS) { /* TRIBBS.SYS */
-	sprintf(str,"%sTRIBBS.SYS",dropdir);
-	if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1) {
-		errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
-		return; }
-
-	sprintf(str,"%u\r\n%s\r\n%s\r\n%u\r\n%c\r\n%c\r\n%lu\r\n%s\r\n%s\r\n%s\r\n"
-		,useron.number						/* User's record number */
-		,name								/* User's name */
-		,useron.pass						/* User's password */
-		,useron.level						/* User's level */
-		,useron.misc&EXPERT ? 'Y':'N'       /* Expert? */
-		,useron.misc&ANSI ? 'Y':'N'         /* ANSI? */
-		,tleft/60							/* Minutes left */
-		,useron.phone						/* User's phone number */
-		,useron.location					/* User's city and state */
-		,useron.birth						/* User's birth date */
-		);
-	write(file,str,strlen(str));
-
-	sprintf(str,"%u\r\n%u\r\n%lu\r\n%lu\r\n%c\r\n%c\r\n%s\r\n%s\r\n%s\r\n"
-		,node_num							/* Node number */
-		,com_port							/* Serial port */
-		,online==ON_LOCAL ? 0L:cur_rate 	/* Baud rate */
-		,dte_rate							/* Locked rate */
-		,mdm_misc&(MDM_RTS|MDM_CTS) ? 'Y':'N'
-		,'Y'                                /* Error correcting connection */
-		,sys_name							/* Board's name */
-		,sys_op 							/* Sysop's name */
-		,useron.handle						/* User's alias */
-		);
-	write(file,str,strlen(str));
-	close(file); }
-
-else if(type)
-	errormsg(WHERE,ERR_CHK,"Drop file type",type);
-
-}
-
-/****************************************************************************/
-/* Reads in MODUSER.DAT, EXITINFO.BBS, or DOOR.SYS and modify the current	*/
-/* user's values.                                                           */
-/****************************************************************************/
-void moduserdat(uint xtrnnum)
-{
-	char str[256],path[256],c,startup[128];
-	uint i;
-	long mod;
-    int file;
-    FILE *stream;
-
-sprintf(startup,"%s\\",xtrn[xtrnnum]->path);
-if(xtrn[xtrnnum]->type==XTRN_RBBS) {
-	sprintf(path,"%sEXITINFO.BBS"
-		,xtrn[xtrnnum]->misc&STARTUPDIR ? startup : node_dir);
-	if((file=nopen(path,O_RDONLY))!=-1) {
-		lseek(file,361,SEEK_SET);
-		read(file,&useron.flags1,4); /* Flags */
-		putuserrec(useron.number,U_FLAGS1,8,ultoa(useron.flags1,tmp,16));
-		lseek(file,373,SEEK_SET);
-		read(file,&i,2);			/* SecLvl */
-		if(i<90) {
-			useron.level=i;
-			putuserrec(useron.number,U_LEVEL,2,itoa(useron.level,tmp,10)); }
-		close(file);
-		remove(path); }
-	return; }
-else if(xtrn[xtrnnum]->type==XTRN_GAP) {
-	sprintf(path,"%sDOOR.SYS"
-		,xtrn[xtrnnum]->misc&STARTUPDIR ? startup : node_dir);
-	if((stream=fopen(path,"rb"))!=NULL) {
-		for(i=0;i<15;i++)			/* skip first 14 lines */
-			if(!fgets(str,128,stream))
-				break;
-		if(i==15 && isdigit(str[0])) {
-			mod=atoi(str);
-			if(mod<90) {
-				useron.level=mod;
-				putuserrec(useron.number,U_LEVEL,2,itoa(useron.level,tmp,10)); } }
-
-		for(;i<23;i++)
-			if(!fgets(str,128,stream))
-				break;
-		if(i==23) { 					/* set main flags */
-			useron.flags1=aftol(str);
-			putuserrec(useron.number,U_FLAGS1,8,ultoa(useron.flags1,tmp,16)); }
-
-		for(;i<25;i++)
-			if(!fgets(str,128,stream))
-				break;
-		if(i==25 && isdigit(str[0]) && isdigit(str[1])
-			&& (str[2]=='/' || str[2]=='-') /* xx/xx/xx or xx-xx-xx */
-			&& isdigit(str[3]) && isdigit(str[4])
-			&& (str[5]=='/' || str[5]=='-')
-			&& isdigit(str[6]) && isdigit(str[7])) { /* valid expire date */
-			useron.expire=dstrtounix(str);
-			putuserrec(useron.number,U_EXPIRE,8,ultoa(useron.expire,tmp,16)); }
-
-		for(;i<29;i++)					/* line 29, total downloaded files */
-			if(!fgets(str,128,stream))
-				break;
-		if(i==29) {
-			truncsp(str);
-			useron.dls=atoi(str);
-			putuserrec(useron.number,U_DLS,5,str); }
-
-		if(fgets(str,128,stream)) { 	/* line 30, Kbytes downloaded today */
-            i++;
-			truncsp(str);
-			mod=atol(str)*1024L;
-			if(mod) {
-				useron.dlb=adjustuserrec(useron.number,U_DLB,10,mod);
-				subtract_cdt(mod); } }
-
-		for(;i<42;i++)
-			if(!fgets(str,128,stream))
-				break;
-		if(i==42 && isdigit(str[0])) {	/* Time Credits in Minutes */
-			useron.min=atol(str);
-			putuserrec(useron.number,U_MIN,10,ultoa(useron.min,tmp,10)); }
-
-		fclose(stream); }
-	return; }
-
-else if(xtrn[xtrnnum]->type==XTRN_PCBOARD) {
-	sprintf(path,"%sUSERS.SYS"
-		,xtrn[xtrnnum]->misc&STARTUPDIR ? startup : node_dir);
-	if((file=nopen(path,O_RDONLY))!=-1) {
-		lseek(file,39,SEEK_SET);
-		read(file,&c,1);
-		if(c==1) {	 /* file has been updated */
-			lseek(file,105,SEEK_CUR);	/* read security level */
-			read(file,&i,2);
-			if(i<90) {
-				useron.level=i;
-				putuserrec(useron.number,U_LEVEL,2,itoa(useron.level,tmp,10)); }
-			lseek(file,75,SEEK_CUR);	/* read in expiration date */
-			read(file,&i,2);	/* convert from julian to unix */
-			useron.expire=juliantounix(i);
-			putuserrec(useron.number,U_EXPIRE,8,ltoa(useron.expire,tmp,16)); }
-		close(file); }
-	return; }
-
-sprintf(path,"%sMODUSER.DAT"
-		,xtrn[xtrnnum]->misc&STARTUPDIR ? startup : node_dir);
-if((stream=fopen(path,"rb"))!=NULL) {        /* File exists */
-	if(fgets(str,81,stream) && (mod=atol(str))!=0) {
-		ultoac(mod>0L ? mod : -mod,tmp);		/* put commas in the # */
-		strcpy(str,"Credit Adjustment: ");
-		if(mod<0L)
-			strcat(str,"-");                    /* negative, put '-' */
-		strcat(str,tmp);
-		if(mod>0L)
-			strcpy(tmp,"$+");
-		else
-			strcpy(tmp,"$-");
-		logline(tmp,str);
-		if(mod>0L)			/* always add to real cdt */
-			useron.cdt=adjustuserrec(useron.number,U_CDT,10,mod);
-		else
-			subtract_cdt(-mod); }	/* subtract from free cdt first */
-	if(fgets(str,81,stream)) {		/* main level */
-		mod=atoi(str);
-		if(isdigit(str[0]) && mod<90) {
-			useron.level=mod;
-			putuserrec(useron.number,U_LEVEL,2,itoa(useron.level,tmp,10)); } }
-	fgets(str,81,stream);		 /* was transfer level, now ignored */
-	if(fgets(str,81,stream)) {		/* flags #1 */
-		if(strchr(str,'-'))         /* remove flags */
-			useron.flags1&=~aftol(str);
-		else						/* add flags */
-			useron.flags1|=aftol(str);
-		putuserrec(useron.number,U_FLAGS1,8,ultoa(useron.flags1,tmp,16)); }
-
-	if(fgets(str,81,stream)) {		/* flags #2 */
-		if(strchr(str,'-'))         /* remove flags */
-			useron.flags2&=~aftol(str);
-		else						/* add flags */
-			useron.flags2|=aftol(str);
-		putuserrec(useron.number,U_FLAGS2,8,ultoa(useron.flags2,tmp,16)); }
-
-	if(fgets(str,81,stream)) {		/* exemptions */
-		if(strchr(str,'-'))
-			useron.exempt&=~aftol(str);
-		else
-			useron.exempt|=aftol(str);
-		putuserrec(useron.number,U_EXEMPT,8,ultoa(useron.exempt,tmp,16)); }
-	if(fgets(str,81,stream)) {		/* restrictions */
-		if(strchr(str,'-'))
-			useron.rest&=~aftol(str);
-		else
-			useron.rest|=aftol(str);
-		putuserrec(useron.number,U_REST,8,ultoa(useron.rest,tmp,16)); }
-	if(fgets(str,81,stream)) {		/* Expiration date */
-		if(isxdigit(str[0]))
-			putuserrec(useron.number,U_EXPIRE,8,str); }
-	if(fgets(str,81,stream)) {		/* additional minutes */
-		mod=atol(str);
-		if(mod) {
-			sprintf(str,"Minute Adjustment: %s",ultoac(mod,tmp));
-			logline("*+",str);
-			useron.min=adjustuserrec(useron.number,U_MIN,10,mod); } }
-
-	if(fgets(str,81,stream)) {		/* flags #3 */
-		if(strchr(str,'-'))         /* remove flags */
-			useron.flags3&=~aftol(str);
-		else						/* add flags */
-			useron.flags3|=aftol(str);
-		putuserrec(useron.number,U_FLAGS3,8,ultoa(useron.flags3,tmp,16)); }
-
-	if(fgets(str,81,stream)) {		/* flags #4 */
-		if(strchr(str,'-'))         /* remove flags */
-			useron.flags4&=~aftol(str);
-		else						/* add flags */
-			useron.flags4|=aftol(str);
-		putuserrec(useron.number,U_FLAGS4,8,ultoa(useron.flags4,tmp,16)); }
-
-	if(fgets(str,81,stream)) {		/* flags #1 to REMOVE only */
-		useron.flags1&=~aftol(str);
-		putuserrec(useron.number,U_FLAGS1,8,ultoa(useron.flags1,tmp,16)); }
-	if(fgets(str,81,stream)) {		/* flags #2 to REMOVE only */
-		useron.flags2&=~aftol(str);
-		putuserrec(useron.number,U_FLAGS2,8,ultoa(useron.flags2,tmp,16)); }
-	if(fgets(str,81,stream)) {		/* flags #3 to REMOVE only */
-		useron.flags3&=~aftol(str);
-		putuserrec(useron.number,U_FLAGS3,8,ultoa(useron.flags3,tmp,16)); }
-	if(fgets(str,81,stream)) {		/* flags #4 to REMOVE only */
-		useron.flags4&=~aftol(str);
-		putuserrec(useron.number,U_FLAGS4,8,ultoa(useron.flags4,tmp,16)); }
-	if(fgets(str,81,stream)) {		/* exemptions to remove */
-		useron.exempt&=~aftol(str);
-		putuserrec(useron.number,U_EXEMPT,8,ultoa(useron.exempt,tmp,16)); }
-	if(fgets(str,81,stream)) {		/* restrictions to remove */
-		useron.rest&=~aftol(str);
-		putuserrec(useron.number,U_REST,8,ultoa(useron.rest,tmp,16)); }
-
-	fclose(stream);
-	remove(path); }
-}
-
-/****************************************************************************/
-/* This is the external programs (doors) section of the bbs                 */
-/* Return 1 if no externals available, 0 otherwise. 						*/
-/****************************************************************************/
-char xtrn_sec()
-{
-	char str[256];
-	int file,j,k,xsec,*usrxtrn,usrxtrns,*usrxsec,usrxsecs;
-	uint i;
-
-if(!total_xtrns || !total_xtrnsecs) {
-	bputs(text[NoXtrnPrograms]);
-	return(1); }
-
-if((usrxtrn=(int *)MALLOC(total_xtrns*sizeof(int)))==NULL) {
-	errormsg(WHERE,ERR_ALLOC,nulstr,total_xtrns);
-	return(1); }
-if((usrxsec=(int *)MALLOC(total_xtrnsecs*sizeof(int)))==NULL) {
-	errormsg(WHERE,ERR_ALLOC,nulstr,total_xtrnsecs);
-	FREE(usrxtrn);
-    return(1); }
-
-while(online) {
-	for(i=0,usrxsecs=0;i<total_xtrnsecs;i++)
-		if(chk_ar(xtrnsec[i]->ar,useron))
-			usrxsec[usrxsecs++]=i;
-	if(!usrxsecs) {
-		bputs(text[NoXtrnPrograms]);
-		FREE(usrxtrn);
-		FREE(usrxsec);
-		return(1); }
-	if(usrxsecs>1) {
-		sprintf(str,"%sMENU\\XTRN_SEC.*",text_dir);
-		if(fexist(str)) {
-			menu("XTRN_SEC");
-			xsec=getnum(usrxsecs);
-			if(xsec<=0)
-				break;
-			xsec--;
-			xsec=usrxsec[xsec]; }
-		else {
-			for(i=0;i<total_xtrnsecs;i++)
-				uselect(1,i,"External Program Section"
-					,xtrnsec[i]->name,xtrnsec[i]->ar);
-			xsec=uselect(0,0,0,0,0); }
-		if(xsec==-1)
-			break; }
-	else
-		xsec=0;
-
-	while(!chk_ar(xtrnsec[xsec]->ar,useron))
-		xsec++;
-
-	if(xsec>=total_xtrnsecs) {
-		bputs(text[NoXtrnPrograms]);
-		FREE(usrxtrn);
-		FREE(usrxsec);
-        return(1); }
-
-	while(online) {
-		for(i=0,usrxtrns=0;i<total_xtrns; i++) {
-			if(xtrn[i]->sec!=xsec)
-				continue;
-			if(xtrn[i]->misc&EVENTONLY)
-				continue;
-			if(!chk_ar(xtrn[i]->ar,useron))
-				continue;
-			usrxtrn[usrxtrns++]=i; }
-		if(!usrxtrns) {
-			bputs(text[NoXtrnPrograms]);
-			pause();
-			break; }
-		sprintf(str,"%sMENU\\XTRN%u.*",text_dir,xsec+1);
-		if(fexist(str)) {
-			sprintf(str,"XTRN%u",xsec+1);
-			menu(str); }
-		else {
-			bprintf(text[XtrnProgLstHdr],xtrnsec[xsec]->name);
-			bputs(text[XtrnProgLstTitles]);
-			if(usrxtrns>=10) {
-				bputs("     ");
-				bputs(text[XtrnProgLstTitles]); }
-			CRLF;
-			bputs(text[XtrnProgLstUnderline]);
-			if(usrxtrns>=10) {
-				bputs("     ");
-				bputs(text[XtrnProgLstUnderline]); }
-			CRLF;
-			if(usrxtrns>=10)
-				j=(usrxtrns/2)+(usrxtrns&1);
-			else
-				j=usrxtrns;
-			for(i=0;i<j && !msgabort();i++) {
-				bprintf(text[XtrnProgLstFmt],i+1
-					,xtrn[usrxtrn[i]]->name,xtrn[usrxtrn[i]]->cost);
-				if(usrxtrns>=10) {
-					k=(usrxtrns/2)+i+(usrxtrns&1);
-					if(k<usrxtrns) {
-						bputs("     ");
-						bprintf(text[XtrnProgLstFmt],k+1
-							,xtrn[usrxtrn[k]]->name
-							,xtrn[usrxtrn[k]]->cost); } }
-				CRLF; }
-			ASYNC;
-			mnemonics(text[WhichXtrnProg]); }
-		getnodedat(node_num,&thisnode,1);
-		thisnode.aux=0; /* aux is 0, only if at menu */
-		putnodedat(node_num,thisnode);
-		action=NODE_XTRN;
-		SYNC;
-		if((j=getnum(usrxtrns))<1)
-			break;
-		exec_xtrn(usrxtrn[j-1]); }
-	if(usrxsecs<2)
-		break; }
-FREE(usrxtrn);
-FREE(usrxsec);
-return(0);
-}
-
-/****************************************************************************/
-/* This function handles configured external program execution. 			*/
-/****************************************************************************/
-void exec_xtrn(uint xtrnnum)
-{
-	char str[256],str2[256],path[256],dropdir[128],name[32],c,e,mode;
-    int file;
-	uint i;
-	long mod;
-	ulong tleft;
-    FILE *stream;
-    node_t node;
-	time_t start,end;
-
-
-if(!chk_ar(xtrn[xtrnnum]->run_ar,useron)
-	|| !chk_ar(xtrnsec[xtrn[xtrnnum]->sec]->ar,useron)) {
-	bputs(text[CantRunThatProgram]);
-	return; }
-
-if(xtrn[xtrnnum]->cost && !(useron.exempt&FLAG('X'))) {    /* costs */
-	if(xtrn[xtrnnum]->cost>useron.cdt+useron.freecdt) {
-		bputs(text[NotEnoughCredits]);
-		pause();
-		return; }
-	subtract_cdt(xtrn[xtrnnum]->cost); }
-
-if(!(xtrn[xtrnnum]->misc&MULTIUSER)) {
-	for(i=1;i<=sys_nodes;i++) {
-		getnodedat(i,&node,0);
-		c=i;
-		if((node.status==NODE_INUSE || node.status==NODE_QUIET)
-			&& node.action==NODE_XTRN && node.aux==(xtrnnum+1)) {
-			if(node.status==NODE_QUIET) {
-				strcpy(str,sys_guru);
-				c=sys_nodes+1; }
-			else if(node.misc&NODE_ANON)
-				strcpy(str,"UNKNOWN USER");
-			else
-				username(node.useron,str);
-			bprintf(text[UserRunningXtrn],str
-				,xtrn[xtrnnum]->name,c);
-			pause();
-			break; } }
-	if(i<=sys_nodes)
-		return; }
-
-sprintf(str,"%s\\",xtrn[xtrnnum]->path);
-strcpy(path,xtrn[xtrnnum]->misc&STARTUPDIR ? str : node_dir);
-strcpy(dropdir,xtrn[xtrnnum]->misc&STARTUPDIR ? str : node_dir);
-
-switch(xtrn[xtrnnum]->type) {
-	case XTRN_WWIV:
-		strcat(path,"CHAIN.TXT");
-		break;
-	case XTRN_GAP:
-		strcat(path,"DOOR.SYS");
-		break;
-	case XTRN_RBBS:
-		sprintf(str,"DORINFO%X.DEF",node_num);
-		strcat(path,str);
-		break;
-	case XTRN_RBBS1:
-		strcat(path,"DORINFO1.DEF");
-		break;
-	case XTRN_WILDCAT:
-		strcat(path,"CALLINFO.BBS");
-		break;
-	case XTRN_PCBOARD:
-		strcat(path,"PCBOARD.SYS");
-		break;
-	case XTRN_UTI:
-		strcat(path,"UTIDOOR.TXT");
-		break;
-	case XTRN_SR:
-		strcat(path,"DOORFILE.SR");
-		break;
-	default:
-		strcat(path,"XTRN.DAT");
-		break; }
-getnodedat(node_num,&thisnode,1);
-thisnode.aux=xtrnnum+1;
-thisnode.action=NODE_XTRN;
-putnodedat(node_num,thisnode);
-
-if(xtrn[xtrnnum]->misc&REALNAME)
-    strcpy(name,useron.name);
-else
-    strcpy(name,useron.alias);
-
-gettimeleft();
-tleft=timeleft+(xtrn[xtrnnum]->textra*60);
-if(xtrn[xtrnnum]->maxtime && tleft>xtrn[xtrnnum]->maxtime)
-	tleft=(xtrn[xtrnnum]->maxtime*60);
-xtrndat(name,dropdir,xtrn[xtrnnum]->type,tleft);
-if(!online)
-	return;
-sprintf(str,"Ran external: %s",xtrn[xtrnnum]->name);
-logline("X-",str);
-if(xtrn[xtrnnum]->cmd[0]!='*' && sys_status&SS_LOGOPEN) {
-	close(logfile);
-	sys_status&=~SS_LOGOPEN; }
-
-sprintf(str,"%sINTRSBBS.DAT"
-		,xtrn[xtrnnum]->path[0] ? xtrn[xtrnnum]->path : node_dir);
-remove(str);
-sprintf(str,"%sHANGUP.NOW",node_dir);
-remove(str);
-sprintf(str,"%sFILE\\%04u.DWN",data_dir,useron.number);
-remove(str);
-
-mode=0; 	/* EX_CC */
-if(xtrn[xtrnnum]->misc&IO_INTS)
-	mode|=(EX_OUTR|EX_INR|EX_OUTL);
-if(xtrn[xtrnnum]->misc&WWIVCOLOR)
-	mode|=EX_WWIV;
-if(xtrn[xtrnnum]->misc&SWAP)
-	mode|=EX_SWAP;
-if(xtrn[xtrnnum]->misc&MODUSERDAT) {	 /* Delete MODUSER.DAT */
-	sprintf(str,"%sMODUSER.DAT",dropdir);       /* if for some weird  */
-	remove(str); }								/* reason it's there  */
-
-if(xtrn[xtrnnum]->path[0]) {
-	if(xtrn[xtrnnum]->path[1]==':')                /* drive letter specified */
-		setdisk(toupper(xtrn[xtrnnum]->path[0])-'A');
-	if(chdir(xtrn[xtrnnum]->path))
-		errormsg(WHERE,ERR_CHDIR,xtrn[xtrnnum]->path,0); }
-
-start=time(NULL);
-external(cmdstr(xtrn[xtrnnum]->cmd,path,dropdir,NULL),mode);
-end=time(NULL);
-if(xtrn[xtrnnum]->misc&FREETIME)
-	starttime+=end-start;
-if(xtrn[xtrnnum]->clean[0]) {
-	if(xtrn[xtrnnum]->path[0]) {
-		if(xtrn[xtrnnum]->path[1]==':')             /* drive letter specified */
-			setdisk(toupper(xtrn[xtrnnum]->path[0])-'A');
-		if(chdir(xtrn[xtrnnum]->path))
-			errormsg(WHERE,ERR_CHDIR,xtrn[xtrnnum]->path,0); }
-	external(cmdstr(xtrn[xtrnnum]->clean,path,nulstr,NULL)
-		,mode&~EX_INR); }
-/* Re-open the logfile */
-if(!(sys_status&SS_LOGOPEN)) {
-	sprintf(str,"%sNODE.LOG",node_dir);
-	if((logfile=nopen(str,O_WRONLY|O_CREAT|O_APPEND))==-1)
-		errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_APPEND);
-	else
-		sys_status|=SS_LOGOPEN; }
-
-sprintf(str,"%sFILE\\%04u.DWN",data_dir,useron.number);
-batch_add_list(str);
-
-sprintf(str,"%sHANGUP.NOW",node_dir);
-if(fexist(str)) {
-	remove(str);
-	hangup(); }
-if(online==ON_REMOTE) {
-	checkline();
-	if(!online) {
-		sprintf(str,"%sHUNGUP.LOG",data_dir);
-		if((file=nopen(str,O_WRONLY|O_CREAT|O_APPEND))==-1) {
-			errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_APPEND);
-			return; }
-		getnodedat(node_num,&thisnode,0);
-		now=time(NULL);
-		sprintf(str,hungupstr,useron.alias,xtrn[thisnode.aux-1]->name
-			,timestr(&now));
-		write(file,str,strlen(str));
-		close(file); } }
-if(xtrn[xtrnnum]->misc&MODUSERDAT) {	/* Modify user data */
-	moduserdat(xtrnnum);
-	statusline(); }
-
-getnodedat(node_num,&thisnode,1);
-thisnode.aux=0; /* aux is 0, only if at menu */
-putnodedat(node_num,thisnode);
-}
-
-/****************************************************************************/
-/* This function will execute an external program if it is configured to    */
-/* run during the event specified.                                          */
-/****************************************************************************/
-void user_event(char event)
-{
-    uint i;
-
-for(i=0;i<total_xtrns;i++) {
-	if(xtrn[i]->event!=event)
-        continue;
-	if(!chk_ar(xtrn[i]->ar,useron)
-		|| !chk_ar(xtrnsec[xtrn[i]->sec]->ar,useron))
-        continue;
-    exec_xtrn(i); }
-}
-
-
diff --git a/src/stp/make.bat b/src/stp/make.bat
deleted file mode 100755
index 3d8cfa45b0..0000000000
--- a/src/stp/make.bat
+++ /dev/null
@@ -1,2 +0,0 @@
-@echo off
-bcc -P-c -N -C -ms -w-pro stp rciols.obj ..\mswait\dos\mswaits.obj
diff --git a/src/stp/rciols.obj b/src/stp/rciols.obj
deleted file mode 100644
index 1103dcd172d4b32820e0783ff1b1fccc9d3ee1ca..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 8736
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
H7#K<bK}9B)

diff --git a/src/stp/stp.c b/src/stp/stp.c
deleted file mode 100644
index 6ed9f706ce..0000000000
--- a/src/stp/stp.c
+++ /dev/null
@@ -1,2017 +0,0 @@
-/* STP.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* Synchronet Transfer Protocols */
-
-#include <io.h>
-#include <dos.h>
-#include <dir.h>
-#include <time.h>
-#include <alloc.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <sys/stat.h>
-
-#define STP 1
-
-#include "zmodem.h"
-
-#define MAXERRORS	10
-
-#define ERROR -1
-							/* Various Character/Ctrl-Code Definitions	*/
-#define SP			32		/* Space bar								*/
-#define ESC			27		/* ESC Char 								*/
-#define	CR			13		/* Carriage Return							*/
-#define FF          12      /* Form Feed								*/
-#define	LF			10		/* Line Feed								*/
-#define TAB			9		/* Horizontal Tabulation					*/
-#define BS			8		/* Back Space								*/
-#define SOH 		1		/* Start of header							*/
-#define STX         2		/* Start of text                            */
-#define ETX         3       /* End of text                              */
-#define EOT 		4		/* End of transmission						*/
-#define ACK 		6		/* Acknowledge								*/
-#define DLE 		16		/* Data link escape 						*/
-#define XON 		17		/* Ctrl-Q - resume transmission 			*/
-#define XOFF		19		/* Ctrl-S - pause transmission				*/
-#define NAK 		21		/* Negative Acknowledge 					*/
-#define CAN 		24		/* Cancel									*/
-#define CPMEOF		26		/* CP/M End of file (^Z)					*/
-#define LOC_ABORT	0x2e03	/* Local abort key	(^C)					*/
-
-#define uchar	unsigned char
-#define uint	unsigned int
-#define ulong   unsigned long
-
-#define SEND		(1<<0)	/* Sending file(s)							*/
-#define RECV		(1<<1)	/* Receiving file(s)						*/
-#define XMODEM		(1<<2)	/* Use Xmodem								*/
-#define YMODEM		(1<<3)	/* Use Ymodem								*/
-#define ZMODEM		(1<<4)	/* Use Zmodem								*/
-#define CRC 		(1<<5)	/* Use CRC error correction 				*/
-#define GMODE		(1<<6)	/* For Qmodem-G and Ymodem-G				*/
-#define DIR 		(1<<7)	/* Directory specified to download to		*/
-#define DEBUG		(1<<8)	/* Debug output 							*/
-#define OVERWRITE	(1<<9)	/* Overwrite receiving files				*/
-#define IGNORE_DCD	(1<<10) /* Ignore DCD								*/
-#define ALARM		(1<<11) /* Alarm when starting and stopping xfer	*/
-#define NO_LOCAL	(1<<12) /* Don't check local keyboard               */
-
-							/* Zmodem mode bits 						*/
-#define CTRL_ESC	(1<<0)	/* Escape all control chars 				*/
-#define VAR_HDRS	(1<<1)	/* Use variable headers 					*/
-
-#define LOOP_NOPEN	50
-
-#define MAX_FNAMES	100 	/* Up to 100 filenames						*/
-
-/************************/
-/* Remote I/O Constants */
-/************************/
-
-							/* i/o mode and state flags */
-#define CTSCK 0x1000     	/* check cts (mode only) */
-#define RTSCK 0x2000		/* check rts (mode only) */
-#define TXBOF 0x0800		/* transmit buffer overflow (outcom only) */
-#define ABORT 0x0400     	/* check for ^C (mode), aborting (state) */
-#define PAUSE 0x0200     	/* check for ^S (mode), pausing (state) */
-#define NOINP 0x0100     	/* input buffer empty (incom only) */
-
-							/* status flags */
-#define DCD 	0x80       	/* DCD on */
-#define RI		0x40		/* Ring indicate */
-#define DSR 	0x20		/* Dataset ready */
-#define CTS 	0x10       	/* CTS on */
-#define FERR 	0x08		/* Frameing error */
-#define PERR 	0x04		/* Parity error */
-#define OVRR 	0x02		/* Overrun */
-#define RXLOST 	0x01       	/* Receive buffer overflow */
-
-/* rioctl() arguments */
-/* returns mode or state flags in high 8 bits, status flags in low 8 bits */
-
-							/* the following return mode in high 8 bits */
-#define IOMODE 0        	/* no operation */
-#define IOSM 1          	/* i/o set mode flags */
-#define IOCM 2          	/* i/o clear mode flags */
-
-#define GVERS 0x007 		/* get version */
-#define GUART 0x107 		/* get uart */
-#define GIRQN 0x207 		/* get IRQ number */
-#define GBAUD 0x307 		/* get baud */
-
-							/* the following return state in high 8 bits */
-#define IOSTATE 4       	/* no operation */
-#define IOSS 5          	/* i/o set state flags */
-#define IOCS 6          	/* i/o clear state flags */
-#define IOFB 0x308      	/* i/o buffer flush */
-#define IOFI 0x208      	/* input buffer flush */
-#define IOFO 0x108      	/* output buffer flush */
-#define IOCE 9          	/* i/o clear error flags */
-
-#define TS_INT28	 1
-#define TS_WINOS2	 2
-#define TS_NODV 	 4
-
-							/* return count (16bit)	*/
-#define RXBC	0x000a		/* get receive buffer count */
-#define RXBS	0x010a		/* get receive buffer size */
-#define TXBC	0x000b		/* get transmit buffer count */
-#define TXBS	0x010b		/* get transmit buffer size */
-#define TXBF	0x020b		/* get transmit buffer free space */
-#define TXSYNC	0x000c		/* sync transmition (seconds<<8|0x0c) */
-#define IDLE	0x000d		/* suspend communication routines */
-#define RESUME	0x010d		/* return from suspended state */
-#define RLERC	0x000e		/* read line error count and clear */
-#define CPTON	0x0110		/* set input translation flag for ctrl-p on */
-#define CPTOFF	0x0010		/* set input translation flag for ctrl-p off */
-#define GETCPT	0x8010		/* return the status of ctrl-p translation */
-#define MSR 	0x0011		/* read modem status register */
-#define FIFOCTL 0x0012		/* FIFO UART control */
-#define TSTYPE	0x0013		/* Time-slice API type */
-#define GETTST	0x8013		/* Get Time-slice API type */
-
-							/* ivhctl() arguments */
-#define INT29R 1         	/* copy int 29h output to remote */
-#define INT29L 2			/* Use _putlc for int 29h */
-#define INT16  0x10      	/* return remote chars to int 16h calls */
-#define INTCLR 0            /* release int 16h, int 29h */
-
-#define DCDHIGH (rioctl(IOSTATE)&DCD || mode&IGNORE_DCD)
-
-/**************/
-/* Prototypes */
-/**************/
-
-/* LCLOLL.ASM */
-int	 lclini(int);
-void lclxy(int,int);
-int  lclwx(void);
-int  lclwy(void);
-int  lclatr(int);
-int  lclaes(void);
-void lputc(int);
-long lputs(char far *);
-uint lkbrd(int);
-
-/* RCIOLL.ASM */
-
-int  rioini(int com,int irq);          /* initialize com,irq */
-int  setbaud(int rate);                /* set baud rate */
-int  rioctl(int action);               /* remote i/o control */
-int  dtr(char onoff);                  /* set/reset dtr */
-int  incom(void);                      /* receive character */
-int  ivhctl(int intcode);              /* local i/o redirection */
-
-void riosync();
-void cancel();
-
-extern	mswtyp;
-extern uint riobp;
-
-uint	asmrev;
-
-/***************/
-/* Global Vars */
-/***************/
-long	mode=0L;						/* Program mode 					*/
-long	zmode=0L;						/* Zmodem mode						*/
-uchar	hdr_block_num;					/* Block number received in header	*/
-uchar	block[1024];					/* Block buffer 					*/
-uint	block_size; 					/* Block size (128 or 1024) 		*/
-ulong	block_num;						/* Block number 					*/
-ulong	last_block_num; 				/* Last block number sent			*/
-uint	flows=0;						/* Number of flow controls			*/
-
-/**************************************/
-/* Zmodem specific, from Chuck's RZSZ */
-/**************************************/
-char	Txhdr[ZMAXHLEN];				/* Zmodem transmit header			*/
-char	Rxhdr[ZMAXHLEN];				/* Zmodem receive header			*/
-char	attn[ZATTNLEN]; 				/* Attention string for sender		*/
-char	zconv;
-char	zmanag;
-char	ztrans;
-int 	tryzhdrtype;
-int 	Rxtimeout = 100;		/* Tenths of seconds to wait for something */
-int 	Rxframeind; 			/* ZBIN ZBIN32, or ZHEX type of frame */
-int 	Rxtype; 				/* Type of header received */
-int 	Rxhlen; 				/* Length of header received */
-int 	Rxcount;				/* Count of data bytes received */
-
-/********/
-/* Code */
-/********/
-
-int cbreakh()
-{
-return(1);
-}
-
-/****************************************************************************/
-/* Performs printf() through local assembly routines                        */
-/****************************************************************************/
-int lprintf(char *fmat, ...)
-{
-	va_list argptr;
-	char sbuf[2048];
-	int chcount;
-
-va_start(argptr,fmat);
-chcount=vsprintf(sbuf,fmat,argptr);
-va_end(argptr);
-lputs(sbuf);
-return(chcount);
-}
-
-void newline()
-{
-if(lclwx()>1)
-	lputs("\r\n");
-}
-
-/****************************************************************************/
-/* Network open function. Opens all files DENYALL and retries LOOP_NOPEN    */
-/* number of times if the attempted file is already open or denying access  */
-/* for some other reason.	All files are opened in BINARY mode.			*/
-/****************************************************************************/
-int nopen(char *str, int access)
-{
-	char count=0,logstr[256];
-	int file,share;
-
-if(access==O_RDONLY) share=O_DENYWRITE;
-	else share=O_DENYALL;
-while(((file=open(str,O_BINARY|share|access,S_IWRITE))==-1)
-	&& errno==EACCES && count++<LOOP_NOPEN);
-if(file==-1 && errno==EACCES)
-	lprintf("\7\r\nNOPEN: ACCESS DENIED\r\n\7");
-return(file);
-}
-
-
-/****************************************************************************/
-/* Converts an ASCII Hex string into an ulong								*/
-/****************************************************************************/
-ulong ahtoul(char *str)
-{
-	ulong l,val=0;
-
-while((l=(*str++)|0x20)!=0x20)
-	val=(l&0xf)+(l>>6&1)*9+val*16;
-return(val);
-}
-
-/****************************************************************************/
-/* Checks the disk drive for the existence of a file. Returns 1 if it       */
-/* exists, 0 if it doesn't.                                                 */
-/****************************************************************************/
-char fexist(char *filespec)
-{
-    struct ffblk f;
-
-if(findfirst(filespec,&f,0)==NULL)
-    return(1);
-return(0);
-}
-
-/****************************************************************************/
-/* Truncates white-space chars off end of 'str' and terminates at first tab */
-/****************************************************************************/
-void truncsp(char *str)
-{
-	char c;
-
-str[strcspn(str,"\t")]=0;
-c=strlen(str);
-while(c && str[c-1]<=SP) c--;
-str[c]=0;
-}
-
-/**************/
-/* Exit Point */
-/**************/
-void bail(int code)
-{
-
-if(mode&ALARM) {
-	sound(2000);
-	mswait(500);
-	sound(1000);
-	mswait(500);
-	nosound(); }
-riosync();
-rioini(0,0);	/* uninstall com routines */
-newline();
-lprintf("Exiting - Error level: %d  Flow restraint count: %u\r\n",code,flows);
-fcloseall();
-exit(code);
-}
-
-/************************************************************/
-/* Get a character from com port, time out after 10 seconds */
-/************************************************************/
-int getcom(char timeout)
-{
-	uint	i,ch;
-	time_t	start;
-
-if((ch=incom())!=NOINP)
-	return(ch);
-for(i=0;i<10000;i++)			   /* ten consecutive re-tries */
-	if((ch=incom())!=NOINP)
-		return(ch);
-flows++;
-start=time(NULL);
-while(time(NULL)-start<(long)timeout) {   /* wait up to ten seconds */
-	if((ch=incom())!=NOINP)
-		return(ch);
-	if(!DCDHIGH) {
-		newline();
-		lprintf("No carrier\r\n");
-		bail(1); }
-	mswait(0);
-	if(!(mode&NO_LOCAL) && lkbrd(0)==LOC_ABORT) {
-		newline();
-		lprintf("Local abort\r\n");
-		cancel();
-		bail(1); } }
-newline();
-lprintf("Input timeout\r\n");
-return(NOINP);
-}
-
-/**********************************/
-/* Output a character to COM port */
-/**********************************/
-void putcom(uchar ch)
-{
-	int i=0;
-
-while(outcom(ch)&TXBOF && i<180) { /* 10 sec delay */
-	if(!i) lputc('F');
-	if(!DCDHIGH) {
-		newline();
-		lprintf("No carrier\r\n");
-		bail(1); }
-	i++;
-	mswait(1);
-	if(!(mode&NO_LOCAL) && lkbrd(0)==LOC_ABORT) {
-		newline();
-		lprintf("Local abort\r\n");
-		bail(1); } }
-if(i) {
-	lprintf("\b \b");
-	flows++;
-	if(i==180) {
-		newline();
-		lprintf("Output timeout\r\n");
-		bail(1); } }
-}
-
-void put_nak()
-{
-while(getcom(1)!=NOINP && (mode&NO_LOCAL || lkbrd(0)!=LOC_ABORT))
-	;				/* wait for any trailing data */
-putcom(NAK);
-}
-
-void cancel()
-{
-	int i;
-
-for(i=0;i<10;i++)
-	putcom(CAN);
-for(i=0;i<10;i++)
-	putcom(BS);
-}
-
-/********************************/
-/* Update the CRC bytes 		*/
-/********************************/
-/****
-void update_crc(uchar c, uchar *crc1, uchar *crc2)
-{
-	int i, temp;
-	uchar carry, c_crc1, c_crc2;
-
-for (i=0; i < 8; i++) {
-	temp = c * 2;
-	c = temp;			/* rotate left */
-	carry = ((temp > 255) ? 1 : 0);
-	temp = (*crc2) * 2;
-	(*crc2) = temp;
-	(*crc2) |= carry;		   /* rotate with carry */
-	c_crc2 = ((temp > 255) ? 1 : 0);
-	temp = (*crc1) * 2;
-	(*crc1) = temp;
-	(*crc1) |= c_crc2;
-	c_crc1 = ((temp > 255) ? 1 : 0);
-	if (c_crc1) {
-		(*crc2) ^= 0x21;
-		(*crc1) ^= 0x10; } }
-}
-****/
-
-void ucrc16(uchar ch, uint *rcrc) {
-    uint i, cy;
-    uchar nch=ch;
- 
-for (i=0; i<8; i++) {
-    cy=*rcrc & 0x8000;
-    *rcrc<<=1;
-    if (nch & 0x80) *rcrc |= 1;
-    nch<<=1;
-    if (cy) *rcrc ^= 0x1021; }
-}
-
-
-char *chr(uchar ch)
-{
-	static char str[25];
-
-switch(ch) {
-	case SOH:
-		return("SOH");
-	case STX:
-		return("STX");
-	case ETX:
-		return("ETX");
-	case EOT:
-		return("EOT");
-	case ACK:
-		return("ACK");
-	case NAK:
-		return("NAK");
-	case CAN:
-		return("CAN");
-	default:
-		sprintf(str,"%02Xh",ch);
-		return(str); }
-}
-
-/****************************************************************/
-/* Gets the filename from the filename and optional path in buf */
-/****************************************************************/
-char *justfname(char *buf, char *out)
-{
-	char *p1,*p2;
-
-if(mode&DEBUG)
-	lprintf("justfname:  in: '%s'\r\n",buf);
-p1=buf;
-while(*p1) {
-	if((p2=strchr(p1,':'))!=NULL) {      /* Remove path */
-		p1=p2+1;
-		continue; }
-	if((p2=strchr(p1,'/'))!=NULL) {
-		p1=p2+1;
-		continue; }
-	if((p2=strchr(p1,'\\'))!=NULL) {
-		p1=p2+1;
-		continue; }
-	break; }
-if(!*p1) {
-	lprintf("Invalid filename\r\n");
-	strcpy(out,""); }
-else
-	strcpy(out,p1); 					   /* Use just the filename */
-if(mode&DEBUG)
-	lprintf("justfname: out: '%s'\r\n",out);
-return(out);
-}
-
-/****************************************************************************/
-/* Receive a X/Y/Zmodem block (sector) from COM port						*/
-/* hdrblock is 1 if attempting to get Ymodem header block, 0 if data block	*/
-/* Returns 0 if all went well, -1 on error or CAN, and EOT if EOT			*/
-/****************************************************************************/
-int get_block(int hdrblock)
-{
-	uchar chksum,calc_chksum;
-	int i,b,errors,eot=0,can=0;
-	uint crc,calc_crc;
-
-for(errors=0;errors<MAXERRORS;errors++) {
-	i=getcom(10);
-	if(eot && i!=EOT)
-		eot=0;
-	if(can && i!=CAN)
-		can=0;
-	switch(i) {
-		case SOH: /* 128 byte blocks */
-			block_size=128;
-			break;
-		case STX: /* 1024 byte blocks */
-			block_size=1024;
-			break;
-		case EOT:
-			if((mode&(YMODEM|GMODE))==YMODEM && !eot) {
-				eot=1;
-				put_nak();		/* chuck's double EOT trick */
-				continue; }
-			return(EOT);
-		case CAN:
-			newline();
-			if(!can) {			/* must get two CANs in a row */
-				can=1;
-				lprintf("Received CAN  Expected SOH, STX, or EOT\r\n");
-				continue; }
-			lprintf("Cancelled remotely\r\n");
-			return(-1);
-		case NOINP: 	/* Nothing came in */
-			continue;
-		default:
-			newline();
-			lprintf("Received %s  Expected SOH, STX, or EOT\r\n",chr(i));
-			if(hdrblock)  /* Trying to get Ymodem header block */
-				return(-1);
-			put_nak();
-			continue; }
-	i=getcom(1);
-	if(i==NOINP) {
-		put_nak();
-		continue; }
-	hdr_block_num=i;
-	i=getcom(1);
-	if(i==NOINP) {
-		put_nak();
-		continue; }
-	if(hdr_block_num!=(uchar)~i) {
-		newline();
-		lprintf("Block number error\r\n");
-		put_nak();
-		continue; }
-	calc_crc=calc_chksum=0;
-	for(b=0;b<block_size;b++) {
-		i=getcom(1);
-		if(i==NOINP)
-			break;
-		block[b]=i;
-		if(mode&CRC)
-			ucrc16(block[b],&calc_crc);
-		else
-			calc_chksum+=block[b]; }
-
-	if(b<block_size) {
-		put_nak();
-		continue; }
-
-	if(mode&CRC) {
-		crc=getcom(1)<<8;
-		crc|=getcom(1); }
-	else
-		chksum=getcom(1);
-
-	if(mode&CRC) {
-		ucrc16(0,&calc_crc);
-		ucrc16(0,&calc_crc);
-		if(crc==calc_crc)
-			break;
-		newline();
-		lprintf("CRC error\r\n"); }
-
-	else {	/* CHKSUM */
-		if(chksum==calc_chksum)
-			break;
-		newline();
-		lprintf("Checksum error\r\n"); }
-
-	if(mode&GMODE) {	/* Don't bother sending a NAK. He's not listening */
-		cancel();
-		bail(1); }
-	put_nak(); }
-
-if(errors>=MAXERRORS) {
-	newline();
-	lprintf("Too many errors\r\n");
-	return(-1); }
-return(0);
-}
-
-/*****************/
-/* Sends a block */
-/*****************/
-void put_block()
-{
-	uchar ch,chksum;
-    int i;
-	uint crc;
-
-if(block_size==128)
-	putcom(SOH);
-else			/* 1024 */
-	putcom(STX);
-ch=(block_num&0xff);
-putcom(ch);
-putcom(~ch);
-chksum=crc=0;
-for(i=0;i<block_size;i++) {
-	putcom(block[i]);
-	if(mode&CRC)
-		ucrc16(block[i],&crc);
-	else
-		chksum+=block[i]; }
-
-if(mode&CRC) {
-	ucrc16(0,&crc);
-	ucrc16(0,&crc);
-	putcom(crc>>8);
-	putcom(crc&0xff); }
-else
-	putcom(chksum);
-}
-
-/************************************************************/
-/* Gets an acknowledgement - usually after sending a block	*/
-/* Returns 1 if ack received, 0 otherwise.					*/
-/************************************************************/
-int get_ack()
-{
-	int i,errors,can=0;
-
-for(errors=0;errors<MAXERRORS;errors++) {
-
-	if(mode&GMODE) {		/* Don't wait for ACK on Ymodem-G */
-		if(incom()==CAN) {
-			newline();
-			lprintf("Cancelled remotely\r\n");
-			cancel();
-			bail(1); }
-		return(1); }
-
-	i=getcom(10);
-	if(can && i!=CAN)
-		can=0;
-	if(i==ACK)
-		return(1);
-	if(i==CAN) {
-		if(can) {
-			newline();
-			lprintf("Cancelled remotely\r\n");
-			cancel();
-			bail(1); }
-		can=1; }
-	if(i!=NOINP) {
-		newline();
-		lprintf("Received %s  Expected ACK\r\n",chr(i));
-		if(i!=CAN)
-			return(0); } }
-
-return(0);
-}
-
-/****************************************************************************/
-/* Syncronizes the remote and local machines								*/
-/****************************************************************************/
-void riosync()
-{
-	int 	i=0;
-
-while(rioctl(TXBC) && i<180) { /* 10 sec */
-	if(!(mode&NO_LOCAL) && lkbrd(0)==LOC_ABORT) {
-		newline();
-		lprintf("Local abort\r\n");
-		cancel();
-		break; }
-	if(!DCDHIGH)
-		break;
-	mswait(1);
-	i++; }
-}
-
-/*********************************************************/
-/* Returns the number of blocks required to send n bytes */
-/*********************************************************/
-long blocks(long n)
-{
-	long l;
-
-l=n/(long)block_size;
-if(l*(long)block_size<n)
-	l++;
-return(l);
-}
-
-/****************************************/
-/* Zmodem specific functions start here */
-/****************************************/
-
-/**********************************************/
-/* Output single byte as two hex ASCII digits */
-/**********************************************/
-void putzhex(uchar val)
-{
-	char *digits="0123456789abcdef";
-
-putcom(digits[(val&0xF0)>>4]);
-putcom(digits[val&0xF]);
-}
-
-/***********************/
-/* Output a hex header */
-/***********************/
-void putzhhdr(char type)
-{
-	uint i,crc=0;
-
-putcom(ZPAD);
-putcom(ZPAD);
-putcom(ZDLE);
-if(zmode&VAR_HDRS) {
-	putcom(ZVHEX);
-	putzhex(4); }
-else
-	putcom(ZHEX);
-putzhex(type);
-ucrc16(type,&crc);
-for(i=0;i<4;i++) {
-	putzhex(Txhdr[i]);
-	ucrc16(Txhdr[i],&crc); }
-ucrc16(0,&crc);
-ucrc16(0,&crc);
-putzhex(crc>>8);
-putzhex(crc&0xff);
-putcom(CR);
-putcom(LF); 	/* Chuck's RZ.C sends LF|0x80 for some unknown reason */
-if(type!=ZFIN && type!=ZACK)
-	putcom(XON);
-}
-
-/****************************************************************************/
-/* Stores a long in the Zmodem transmit header (usually position offset)	*/
-/****************************************************************************/
-void ltohdr(long l)
-{
-
-Txhdr[ZP0] = l;
-Txhdr[ZP1] = l>>8;
-Txhdr[ZP2] = l>>16;
-Txhdr[ZP3] = l>>24;
-}
-
-/****************************************************************************/
-/* Outputs single Zmodem character, escaping with ZDLE when appropriate     */
-/****************************************************************************/
-void putzcom(uchar ch)
-{
-    static lastsent;
-
-if(ch&0x60) /* not a control char */
-    putcom(lastsent=ch);
-else
-    switch(ch) {
-        case DLE:
-        case DLE|0x80:          /* even if high-bit set */
-        case XON:
-        case XON|0x80:
-        case XOFF:
-        case XOFF|0x80:
-        case ZDLE:
-            putcom(ZDLE);
-            ch^=0x40;
-            putcom(lastsent=ch);
-            break;
-        case CR:
-        case CR|0x80:
-            if(!(zmode&CTRL_ESC) && (lastsent&0x7f)!='@')
-                putcom(lastsent=ch);
-            else {
-                putcom(ZDLE);
-                ch^=0x40;
-                putcom(lastsent=ch); }
-            break;
-        default:
-            if(zmode&CTRL_ESC && !(ch&0x60)) {  /* it's a ctrl char */
-                putcom(ZDLE);
-                ch^=0x40; }
-            putcom(lastsent=ch);
-            break; }
-}
-
-/*
- * Read a byte, checking for ZMODEM escape encoding
- *  including CAN*5 which represents a quick abort
- */
-int getzcom()
-{
-	int i;
-
-while(1) {
-	/* Quick check for non control characters */
-	if((i=getcom(Rxtimeout))&0x60)
-		return(i);
-	if(i==ZDLE)
-		break;
-	if((i&0x7f)==XOFF || (i&0x7f)==XON)
-		continue;
-	if(zmode&CTRL_ESC && !(i&0x60))
-		continue;
-	return(i); }
-
-while(1) {	/* Escaped characters */
-	if((i=getcom(Rxtimeout))<0)
-		return(i);
-	if(i==CAN && (i=getcom(Rxtimeout))<0)
-		return(i);
-	if(i==CAN && (i=getcom(Rxtimeout))<0)
-        return(i);
-	if(i==CAN && (i=getcom(Rxtimeout))<0)
-        return(i);
-	switch (i) {
-		case CAN:
-			return(GOTCAN);
-		case ZCRCE:
-		case ZCRCG:
-		case ZCRCQ:
-		case ZCRCW:
-			return(i|GOTOR);
-		case ZRUB0:
-			return(0x7f);
-		case ZRUB1:
-			return(0xff);
-		case XON:
-		case XON|0x80:
-		case XOFF:
-		case XOFF|0x80:
-			continue;
-		default:
-			if (zmode&CTRL_ESC && !(i&0x60))
-				continue;
-			if ((i&0x60)==0x40)
-				return(i^0x40);
-			break; }
-	break; }
-return(ERROR);
-}
-
-
-
-/*
- * Read a character from the modem line with timeout.
- *  Eat parity, XON and XOFF characters.
- */
-int getcom7()
-{
-	int i;
-
-while(1) {
-	i=getcom(10);
-	switch(i) {
-		case XON:
-		case XOFF:
-			continue;
-		case CR:
-		case LF:
-		case NOINP:
-		case ZDLE:
-			return(i);
-		default:
-			if(!(i&0x60) && zmode&CTRL_ESC)
-				continue;
-			return(i); } }
-}
-
-
-#if 0
-
-int getzhdr()
-{
-	int done=0;
-
-while(!done) {
-	i=getcom(10);
-	switch(i) {
-		case NOINP:
-			done=1;
-			continue;
-		case XON:
-		case XON|0x80:
-			continue;
-		case ZPAD|0x80:
-		case ZPAD:
-			break;
-		case CAN:
-			cancount++;
-			if(cancount>=5) {
-				i=ZCAN;
-				done=1;
-				break; }
-			i=getcom(10);
-			switch(i) {
-				case NOINP:
-					continue;
-				case ZCRCW:
-					switch(getcom(10)) {
-						case NOINP:
-							i=ERROR
-							done=1;
-							break;
-						case RCDO:
-							done=1;
-							break;
-						default:
-							continue; }
-					break;
-				case RCDO:
-					done=1;
-					break;
-				case CAN:
-					cancount++;
-					if(cancount>=5) {
-						i=ZCAN;
-						done=1;
-					continue;
-				default:
-					break; }
-			continue;
-		default:
-			continue; }
-
-	i=Rxframeind=getcom7();
-	switch (i) {
-		case ZVBIN32:
-			if((Rxhlen=c=getzcom())<0)
-				goto fifi;
-			if(c>ZMAXHLEN)
-				goto agn2;
-			Crc32r=1;
-			c=zrbhd32(hdr);
-			break;
-		case ZBIN32:
-			if(zmode&VAR_HDRS)
-				goto agn2;
-			Crc32r=1;
-			c=zrbhd32(hdr);
-			break;
-		case ZVBINR32:
-			if((Rxhlen=c=getzcom())<0)
-				goto fifi;
-			if(c>ZMAXHLEN)
-				goto agn2;
-			Crc32r=2;
-			c=zrbhd32(hdr);
-			break;
-		case ZBINR32:
-			if(zmode&VAR_HDRS)
-				goto agn2;
-			Crc32r=2;
-			c=zrbhd32(hdr);
-			break;
-		case RCDO:
-		case TIMEOUT:
-			goto fifi;
-		case ZVBIN:
-			if((Rxhlen=c=getzcom())<0)
-				goto fifi;
-			if(c>ZMAXHLEN)
-				goto agn2;
-			Crc32r=0;
-			c=zrbhdr(hdr);
-			break;
-		case ZBIN:
-			if(zmode&VAR_HDRS)
-				goto agn2;
-			Crc32r=0;
-			c=zrbhdr(hdr);
-			break;
-		case ZVHEX:
-			if((Rxhlen=c=zgethex()) < 0)
-				goto fifi;
-			if(c>ZMAXHLEN)
-				goto agn2;
-			Crc32r=0;
-			c=zrhhdr(hdr);
-			break;
-		case ZHEX:
-			if(zmode&VAR_HDRS)
-				goto agn2;
-			Crc32r=0;
-			c=zrhhdr(hdr);
-			break;
-		case CAN:
-			goto gotcan;
-		default:
-			goto agn2;
-		}
-
-
-
-/****************************************************************************/
-/* Get the receiver's init parameters                                       */
-/****************************************************************************/
-int getzrxinit()
-{
-	int i;
-	struct stat f;
-
-for(i=0;i<10;i++) {
-	switch(zgethdr(Rxhdr,1)) {
-		case ZCHALLENGE:	/* Echo receiver's challenge numbr */
-			ltohdr(Rxpos);
-			putzhhdr(ZACK);
-			continue;
-		case ZCOMMAND:		/* They didn't see out ZRQINIT */
-			ltohdr(0L);
-			putzhhdr(ZRQINIT);
-			continue;
-		case ZRINIT:
-			Rxflags=Rxhdr[ZF0]&0x7f;
-			if(Rxhdr[ZF1]&CANVHDR)
-                zmode|=VAR_HDRS;
-			Txfcs32 = (Wantfcs32 && (Rxflags & CANFC32));
-			Zctlesc |= Rxflags & TESCCTL;
-			Rxbuflen = (0377 & Rxhdr[ZP0])+((0377 & Rxhdr[ZP1])<<8);
-			if ( !(Rxflags & CANFDX))
-				Txwindow = 0;
-
-			/* Override to force shorter frame length */
-			if (Rxbuflen && (Rxbuflen>Tframlen) && (Tframlen>=32))
-				Rxbuflen = Tframlen;
-			if ( !Rxbuflen && (Tframlen>=32) && (Tframlen<=1024))
-				Rxbuflen = Tframlen;
-			vfile("Rxbuflen=%d", Rxbuflen);
-
-			/*
-			 * If input is not a regular file, force ACK's to
-			 *	prevent running beyond the buffer limits
-			 */
-			if ( !Command) {
-				fstat(fileno(in), &f);
-				if ((f.st_mode & S_IFMT) != S_IFREG) {
-					Canseek = -1;
-	ef TXBSIZE
-					Txwindow = TXBSIZE - 1024;
-					Txwspac = TXBSIZE/4;
-	e
-					return ERROR;
-	if
-				}
-			}
-
-			/* Set initial subpacket length */
-			if (blklen < 1024) {	/* Command line override? */
-				if (Effbaud > 300)
-					blklen = 256;
-				if (Effbaud > 1200)
-					blklen = 512;
-				if (Effbaud > 2400)
-					blklen = 1024;
-			}
-			if (Rxbuflen && blklen>Rxbuflen)
-				blklen = Rxbuflen;
-			if (blkopt && blklen > blkopt)
-				blklen = blkopt;
-			vfile("Rxbuflen=%d blklen=%d", Rxbuflen, blklen);
-			vfile("Txwindow = %u Txwspac = %d", Txwindow, Txwspac);
-
-
-			if (Lztrans == ZTRLE && (Rxflags & CANRLE))
-				Txfcs32 = 2;
-			else
-				Lztrans = 0;
-
-			return (sendzsinit());
-		case ZCAN:
-		case TIMEOUT:
-			return ERROR;
-		case ZRQINIT:
-			if (Rxhdr[ZF0] == ZCOMMAND)
-				continue;
-		default:
-			putzhhdr(ZNAK);
-			continue; } }
-return(ERROR);
-}
-
-
-getzdata(char *buf, int length)
-{
-	int c,d;
-	uint crc;
-	char *end;
-
-	switch (Crc32r) {
-	case 1:
-		return zrdat32(buf, length);
-	case 2:
-		return zrdatr32(buf, length);
-	}
-
-	crc = Rxcount = 0;  end = buf + length;
-	while (buf <= end) {
-		if ((c = getzcom()) & ~0377) {
-crcfoo:
-			switch (c) {
-			case GOTCRCE:
-			case GOTCRCG:
-			case GOTCRCQ:
-			case GOTCRCW:
-				crc = updcrc((d=c)&0377, crc);
-				if ((c = getzcom()) & ~0377)
-					goto crcfoo;
-				crc = updcrc(c, crc);
-				if ((c = getzcom()) & ~0377)
-					goto crcfoo;
-				crc = updcrc(c, crc);
-				if (crc & 0xFFFF) {
-					zperr(badcrc);
-					return ERROR;
-				}
-				Rxcount = length - (end - buf);
-#ifndef DSZ
-				vfile("zrdata: %d  %s", Rxcount,
-				 Zendnames[d-GOTCRCE&3]);
-#endif
-				return d;
-			case GOTCAN:
-				zperr("Sender Canceled");
-				return ZCAN;
-			case TIMEOUT:
-				zperr("TIMEOUT");
-				return c;
-			default:
-				garbitch(); return c;
-			}
-		}
-		*buf++ = c;
-		crc = updcrc(c, crc);
-	}
-#ifdef DSZ
-	garbitch(); 
-#else
-	zperr("Data subpacket too long");
-#endif
-	return ERROR;
-}
-
-#endif
-
-/************************************************/
-/* Dump the current blockm contents - for debug */
-/************************************************/
-void dump_block()
-{
-	long l;
-
-for(l=0;l<block_size;l++)
-	lprintf("%02X  ",block[l]);
-lputs("\r\n");
-}
-
-char	*usage=
-"usage: STP <port> [chan] [opts] <cmd> [file | path | +list]\r\n\r\n"
-"where:\r\n\r\n"
-"port   = COM port (1-4), D for DigiBoard, or UART I/O address (hex)\r\n"
-"chan   = IRQ channel (2-15) or DigiBoard channel (4+)\r\n"
-"opts   = b# to set DTE rate to #bps\r\n"
-"         t# to set time-slice API type (default=1)\r\n"
-"         o  to overwrite files when receiving\r\n"
-"         d  to disable dropped carrier detection\r\n"
-"         a  to sound alarm at start and stop of transfer\r\n"
-"         l  to disable local keyboard (Ctrl-C) checking\r\n"
-"cmd    = sx to send Xmodem     rx to recv Xmodem\r\n"
-"         sX to send Xmodem-1k  rc to recv Xmodem-CRC\r\n"
-"         sy to send Ymodem     ry to recv Ymodem\r\n"
-"         sY to send Ymodem-1k  rg to recv Ymodem-G\r\n"
-"         sz to send Zmodem     rz to recv Zmodem\r\n"
-"file   = filename to send or receive\r\n"
-"path   = path to receive files into\r\n"
-"list   = name of text file with list of filenames to send or receive\r\n";
-
-/***************/
-/* Entry Point */
-/***************/
-int main(int argc, char **argv)
-{
-	char	str[256],tmp[256],tmp2[256],irq,errors,*p,*p2,first_block
-			,*fname[MAX_FNAMES],fnames=0,fnum,success;
-	int 	ch,i,j,k,file,last,total_files=0,sent_files=0,can;
-	uint	base=0,baud=0,cps;
-	long	b,l,m,file_bytes_left,serial_num;
-	ulong	file_bytes=0,total_bytes=0,sent_bytes=0;
-	time_t	t,startall,startfile,ftime;
-	struct	ffblk ff;
-	struct	ftime ft;
-	struct	date dosdate;
-	struct	time dostime;
-	FILE	*stream,*log=NULL;
-
-mswtyp=TS_INT28;   /* default to int 28 only */
-
-ctrlbrk(cbreakh);
-
-if((asmrev=*(&riobp-1))!=19) {
-	printf("Wrong rciol.obj\n");
-    exit(1); }
-
-lclini(0xd<<8);
-
-lprintf("\r\nSynchronet Transfer Protocols v1.00"
-	"  Developed 1993-1997 Rob Swindell\r\n\r\n");
-
-lputs("Command line: ");
-for(i=1;i<argc;i++)
-	lprintf("%s ",argv[i]);
-lputs("\r\n");
-
-if(argc<3) {
-	lprintf(usage);
-	exit(1); }
-
-i=1;
-
-base=ahtoul(argv[i]);
-if(base>4 && base<0x100)	/* 'D' and 'FFFF' are the same */
-	base=0xffff;
-if(base!=0xffff && base<5)
-	switch(atoi(argv[i])) {
-		case 1:
-			base=0x3f8;
-			irq=4;
-			break;
-		case 2:
-			base=0x2f8;
-			irq=3;
-			break;
-		case 3:
-			base=0x3e8;
-			irq=4;
-			break;
-		case 4:
-			base=0x2e8;
-			irq=3;
-			break;
-		default:
-			lprintf("Invalid COM Port (%s)\r\n",argv[1]);
-			lprintf(usage);
-			exit(1); }
-
-if(base>4 || isdigit(argv[i+1][0]))
-	irq=atoi(argv[++i]);
-
-for(i++;i<argc;i++) {
-
-	if(!(mode&(SEND|RECV))) {
-		if(toupper(argv[i][0])=='S' || toupper(argv[i][0])=='R') { /* cmd */
-			if(toupper(argv[i][0])=='R')
-				mode|=RECV;
-			else
-				mode|=SEND;
-
-			block_size=1024;
-
-			switch(argv[i][1]) {
-				case 'c':
-				case 'C':
-					mode|=CRC;
-				case 'x':
-					block_size=128;
-				case 'X':
-					mode|=XMODEM;
-					break;
-				case 'y':
-					block_size=128;
-				case 'Y':
-					mode|=(YMODEM|CRC);
-					break;
-				case 'g':
-				case 'G':
-					mode|=(YMODEM|CRC|GMODE);
-					break;
-				case 'z':
-				case 'Z':
-					mode|=(ZMODEM|CRC);
-					break;
-				default:
-					lprintf("Unrecognized command '%s'\r\n\r\n",argv[i]);
-					lprintf(usage);
-					exit(1); } }
-
-		else if(toupper(argv[i][0])=='B')
-			baud=atoi(argv[i]+1);
-
-		else if(toupper(argv[i][0])=='T')
-			mswtyp=atoi(argv[i]+1);
-
-		else if(toupper(argv[i][0])=='O')
-			mode|=OVERWRITE;
-
-		else if(toupper(argv[i][0])=='D')
-			mode|=IGNORE_DCD;
-
-		else if(toupper(argv[i][0])=='A')
-			mode|=ALARM;
-
-		else if(toupper(argv[i][0])=='L')
-			mode|=NO_LOCAL;
-
-		else if(argv[i][0]=='*')
-			mode|=DEBUG; }
-
-	else if(argv[i][0]=='+') {
-		if(mode&DIR) {
-			lprintf("Cannot specify both directory and filename\r\n");
-			exit(1); }
-		sprintf(str,"%s",argv[i]+1);
-		if((file=nopen(str,O_RDONLY))==-1
-			|| (stream=fdopen(file,"rb"))==NULL) {
-			lprintf("Error opening filelist %s\r\n",str);
-			exit(1); }
-		while(!feof(stream) && !ferror(stream) && fnames<MAX_FNAMES) {
-			if(!fgets(str,128,stream))
-				break;
-			truncsp(str);
-			strupr(str);
-			if((fname[fnames]=(char *)malloc(strlen(str)+1))==NULL) {
-				lprintf("Error allocating memory for filename\r\n");
-				exit(1); }
-			strcpy(fname[fnames++],str); }
-		fclose(stream); }
-
-	else if(mode&(SEND|RECV)){
-		if((fname[fnames]=(char *)malloc(128))==NULL) {
-			lprintf("Error allocating memory for filename\r\n");
-			exit(1); }
-		strcpy(fname[fnames],argv[i]);
-		strupr(fname[fnames]);
-		j=strlen(fname[fnames]);
-		if(fname[fnames][j-1]=='\\'                 /* Ends in \ */
-			|| !strcmp(fname[fnames]+1,":")) {      /* Drive letter only */
-/*			  || !findfirst(fname[fnames],&ff,FA_DIREC)) {	  is a directory */
-			if(mode&DIR) {
-				lprintf("Only one directory can be specified\r\n");
-				exit(1); }
-			if(fnames) {
-				lprintf("Cannot specify both directory and filename\r\n");
-				exit(1); }
-			if(mode&SEND) {
-				lprintf("Cannot send directory '%s'\r\n",fname[fnames]);
-				exit(1);}
-			mode|=DIR; }
-		fnames++; } }
-
-if(!(mode&(SEND|RECV))) {
-	lprintf("No command specified\r\n");
-	lprintf(usage);
-	exit(1); }
-
-if(mode&(SEND|XMODEM) && !fnames) { /* Sending with any or recv w/Xmodem */
-	lprintf("Must specify filename or filelist\r\n");
-	lprintf(usage);
-	exit(1); }
-
-i=strlen(fname[0]); 	/* Make sure the directory ends in \ or : */
-if(mode&DIR && fname[0][i-1]!='\\' && fname[0][i-1]!=':')
-	strcat(fname[0],"\\");
-
-i=rioini(base,irq);
-if(i) {
-	lprintf("STP: Error (%d) initializing COM port base %x irq %d\r\n"
-		,i,base,irq);
-	exit(1); }
-
-if(mode&ALARM) {
-	sound(1000);
-	mswait(500);
-	sound(2000);
-	mswait(500);
-	nosound(); }
-
-if(baud) {
-	i=setbaud(baud);
-	if(i) {
-		lprintf("STP: Error setting baud rate to %u\r\n",baud);
-		bail(1); } }
-else
-	baud=rioctl(GBAUD);
-
-rioctl(IOSM|CTSCK|RTSCK);
-
-rioctl(TSTYPE|mswtyp);			/* set time-slice API type */
-
-if(!DCDHIGH) {
-	newline();
-	lprintf("No carrier\r\n");
-	bail(1); }
-
-p=getenv("DSZLOG");
-if(p) {
-	if((file=open(p,O_WRONLY|O_BINARY|O_CREAT,S_IWRITE|S_IREAD))==-1
-		|| (log=fdopen(file,"wb"))==NULL) {
-		lprintf("Error opening DSZLOG file '%s'\r\n",p);
-		bail(1); }
-	setvbuf(log,NULL,_IOFBF,16*1024); }
-
-startall=time(NULL);
-
-if(mode&RECV) {
-	if(fnames>1)
-		lprintf("Receiving %u files\r\n",fnames);
-	fnum=0;
-	while(1) {
-		if(mode&XMODEM) {
-			strcpy(str,fname[0]);
-			file_bytes=file_bytes_left=0x7fffffff;
-			serial_num=-1; }
-
-		else if(mode&YMODEM) {
-			lprintf("Fetching Ymodem header block\r\n");
-			for(errors=0;errors<MAXERRORS;errors++) {
-				if(errors>3 && mode&CRC && !(mode&GMODE))
-					mode&=~CRC;
-				if(mode&GMODE)		/* G for Ymodem-G */
-					putcom('G');
-				else if(mode&CRC)	/* C for CRC */
-					putcom('C');
-				else				/* NAK for checksum */
-					putcom(NAK);
-				for(i=60;i;i--) {
-					if(rioctl(RXBC))	/* no chars in-bound */
-						break;
-					mswait(100); }		/* so wait */
-
-				if(!i) {				/* none after 6 secs */
-					if(errors)
-						lprintf("Ymodem header timeout (%d)\r\n",errors);
-					continue; }
-				if(!get_block(1)) { 	 /* block received successfully */
-					putcom(ACK);
-					break; } }
-			if(errors==MAXERRORS) {
-				lprintf("Error fetching Ymodem header block\r\n");
-				cancel();
-				bail(1); }
-			if(!block[0]) {
-				lputs("Received Ymodem termination block\r\n");
-				bail(0); }
-			p=block+strlen(block)+1;
-			sscanf(p,"%ld %lo %lo %lo %d %ld"
-				,&file_bytes			/* file size (decimal) */
-				,&ftime 				/* file time (octal unix format) */
-				,&m 					/* file mode (not used) */
-				,&serial_num			/* program serial number */
-				,&total_files			/* remaining files to be sent */
-				,&total_bytes			/* remaining bytes to be sent */
-				);
-			if(!file_bytes)
-				file_bytes=0x7fffffff;
-			file_bytes_left=file_bytes;
-			if(!total_files)
-				total_files=fnames-fnum;
-			if(!total_files)
-				total_files=1;
-			if(total_bytes<file_bytes)
-				total_bytes=file_bytes;
-			if(!serial_num)
-				serial_num=-1;
-			strupr(block);
-			lprintf("Incoming filename: %.64s ",block);
-			if(mode&DIR)
-				sprintf(str,"%s%s",fname[0],justfname(block,tmp));
-			else {
-				justfname(block,str);
-				for(i=0;i<fnames;i++) {
-					if(!fname[i][0])	/* name blank or already used */
-						continue;
-					justfname(fname[i],tmp);
-					if(!stricmp(tmp,str)) {
-						strcpy(str,fname[i]);
-						fname[i][0]=0;
-						break; } }
-				if(i==fnames) { 				/* Not found in list */
-					if(fnames)
-						lputs(" - Not in receive list!");
-					if(!fnames || fnum>=fnames || !fname[fnum][0])
-						justfname(block,str);	/* worst case */
-					else {
-						strcpy(str,fname[fnum]);
-						fname[fnum][0]=0; } } }
-			lputs("\r\n"); }
-
-		else {	/* Zmodem */
-#if 0
-			tryzhdrtype=ZRINIT;
-			while(1) {
-				Txhdr[ZF0]=(CANFC32|CANFDX|CANOVIO|CANRLE);
-				/* add CANBRK if we can send break signal */
-				if(zmode&CTRL_ESC)
-					Txhdr[ZF0]|=TESCCTL;
-				Txhdr[ZF1]=CANVHDR;
-				Txhdr[ZP0]=0;
-				Txhdr[ZP1]=0;
-				putzhhdr(tryzhdrtype);
-				done=0;
-				while(!done) {
-					done=1;
-					switch(getzhdr()) {
-						case ZRQINIT:
-							if(Rxhdr[ZF3]&0x80)
-								zmode|=VAR_HDRS;   /* we can var header */
-							break;
-						case ZFILE:
-							zconv=Rxhdr[ZF0];
-							zmanag=Rxhdr[ZF1];
-							ztrans=Rxhdr[ZF2];
-							if(Rxhdr[ZF3]&ZCANVHDR)
-								zmode|=VAR_HDRS;
-							tryzhdrtype=ZRINIT;
-							if(getzdata(block, 1024)==GOTCRCW) {
-								/* something */
-								done=1; }
-							putzhhdr(ZNAK);
-							done=0;
-							break;
-						case ZSINIT:
-							if(Rxhdr[ZF0]&TESCCTL)
-								zmode|=CTRL_ESC;
-							if (getzdata(attn,ZATTNLEN)==GOTCRCW) {
-								ltohdr(1L);
-								putzhhdr(ZACK); }
-							else
-								putzhhdr(ZNAK);
-							done=0;
-							break;
-						case ZFREECNT:
-							ltohdr(0);			/* should be free disk space */
-							putzhhdr(ZACK);
-							done=0;
-							break;
-						case ZCOMMAND:
-/***
-							cmdzack1flg = Rxhdr[ZF0];
-							if(getzdata(block,1024)==GOTCRCW) {
-								if (cmdzack1flg & ZCACK1)
-									ltohdr(0L);
-								else
-									ltohdr((long)sys2(block));
-								purgeline();	/* dump impatient questions */
-								do {
-									zshhdr(4,ZCOMPL, Txhdr);
-								}
-								while (++errors<20 && zgethdr(Rxhdr,1)!=ZFIN);
-								ackbibi();
-								if (cmdzack1flg & ZCACK1)
-									exec2(block);
-								return ZCOMPL;
-							}
-***/
-							putzhhdr(ZNAK);
-							done=0;
-							break;
-						case ZCOMPL:
-							done=0;
-							break;
-						case ZFIN:
-							ackbibi();
-							return ZCOMPL;
-						case ZCAN:
-							return ERROR; } }
-#endif
-			}
-
-		fnum++;
-
-		if(!(mode&DIR) && fnames && fnum>fnames) {
-			newline();
-			lprintf("Attempt to send more files than specified\r\n");
-			cancel();
-			break; }
-
-		k=strlen(str);	/* strip out control characters and high ASCII */
-		for(i=j=0;i<k;i++)
-			if(str[i]>SP && (uchar)str[i]<0x7f)
-				str[j++]=str[i];
-		str[j]=0;
-		strupr(str);
-		if(fexist(str) && !(mode&OVERWRITE)) {
-			lprintf("%s already exists\r\n",str);
-			cancel();
-			bail(1); }
-		if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1
-			|| (stream=fdopen(file,"wb"))==NULL) {
-			lprintf("Error creating %s\r\n",str);
-			cancel();
-			bail(1); }
-		setvbuf(stream,NULL,_IOFBF,8*1024);
-		startfile=time(NULL);
-		lprintf("Receiving %s (%lu bytes) via %s %s\r\n"
-			,str
-			,mode&XMODEM ? 0 : file_bytes
-			,mode&XMODEM ? "Xmodem" : mode&YMODEM ? mode&GMODE ? "Ymodem-G"
-			: "Ymodem" :"Zmodem"
-			,mode&CRC ? "CRC-16":"Checksum");
-
-		errors=0;
-		block_num=0;
-		if(mode&GMODE)		/* G for Ymodem-G */
-			putcom('G');
-		else if(mode&CRC)	/* C for CRC */
-			putcom('C');
-		else				/* NAK for checksum */
-			putcom(NAK);
-		while(errors<MAXERRORS) {
-			if(block_num && !(mode&GMODE))
-				putcom(ACK);
-			i=get_block(0); 	/* returns 0 if block okay */
-			if(i==EOT)			/* end of transfer */
-				break;
-			if(i) { 			/* other error */
-				cancel();
-				bail(1); }
-			if(file_bytes_left<=0L)  { /* No more bytes to send */
-				newline();
-				lputs("Attempt to send more than header specified\r\n");
-				break; }
-			if(hdr_block_num==((block_num+1)&0xff)) {	/* correct block */
-				block_num++;
-				if(file_bytes_left<block_size) {
-					if(fwrite(block,1,file_bytes_left,stream)
-						!=file_bytes_left) {
-						newline();
-						lprintf("Error writing to file\r\n");
-						cancel();
-						bail(1); } }
-				else {
-					if(fwrite(block,1,block_size,stream)
-						!=block_size) {
-						newline();
-						lprintf("Error writing to file\r\n");
-						cancel();
-						bail(1); } }
-				file_bytes_left-=block_size; }
-			else {
-				newline();
-				lprintf("Block number %u instead of %u\r\n"
-					,hdr_block_num,(block_num+1)&0xff);
-				// dump_block();
-				errors++; }
-			t=time(NULL)-startfile;
-			if(!t) t=1;
-			cps=(uint)((block_num*(long)block_size)/t); 	/* cps so far */
-			if(!cps) cps=1;
-			l=file_bytes/cps;  /* total transfer est time */
-			l-=t;				/* now, it's est time left */
-            if(l<0) l=0;
-			b=blocks(file_bytes);
-			if(mode&YMODEM)
-				lprintf("\rBlock (%lu%s): %lu/%lu  Byte: %lu  Time: %lu:%02lu  "
-					"Left: %lu:%02lu  CPS: %u  %lu%% "
-					,block_size%1024L ? block_size: block_size/1024L
-					,block_size%1024L ? "" : "k"
-					,block_num
-					,b
-					,block_num*(long)block_size
-					,t/60L
-					,t%60L
-					,l/60L
-					,l%60L
-					,cps
-					,(long)(((float)block_num/(float)b)*100.0)
-					);
-			else	/* Xmodem */
-				lprintf("\rBlock (%lu%s): %lu  Byte: %lu  Time: %lu:%02lu  "
-					"CPS: %u "
-					,block_size%1024L ? block_size: block_size/1024L
-					,block_size%1024L ? "" : "k"
-					,block_num
-					,block_num*(long)block_size
-					,t/60L
-					,t%60L
-					,cps
-                    );
-		}
-
-		putcom(ACK);
-		if(!(mode&XMODEM) && ftime) {
-			unixtodos(ftime,&dosdate,&dostime);
-			if(dosdate.da_year>=1980) {
-				ft.ft_min=dostime.ti_min;
-				ft.ft_hour=dostime.ti_hour;
-				ft.ft_tsec=dostime.ti_sec/2;
-				ft.ft_year=dosdate.da_year-1980;
-				ft.ft_day=dosdate.da_day;
-				ft.ft_month=dosdate.da_mon;
-				setftime(file,&ft); } }
-		fclose(stream);
-		t=time(NULL)-startfile;
-		if(!t) t=1;
-		l=(block_num-1)*(long)block_size;
-		if(l>file_bytes)
-			l=file_bytes;
-		newline();
-		lprintf("Successsful - Time: %lu:%02lu  CPS: %lu\r\n"
-			,t/60,t%60,l/t);
-		if(log) {
-			fprintf(log,"%c %6lu %5u bps %4lu cps %3u errors %5u %4u "
-				"%s %d\r\n"
-				,mode&ZMODEM ? 'Z' : 'R'
-				,l
-				,baud
-				,l/t
-				,errors
-				,flows
-				,block_size
-				,str
-				,serial_num); }
-		if(mode&XMODEM)
-			break;
-		total_files--;
-		total_bytes-=file_bytes;
-		if(total_files>1 && total_bytes)
-			lprintf("Remaining - Time: %lu:%02lu  Files: %u  Bytes: %lu\r\n"
-				,(total_bytes/cps)/60
-				,(total_bytes/cps)%60
-				,total_files
-				,total_bytes
-                );
-		}
-	bail(0); }
-
-/********/
-/* SEND */
-/********/
-
-/****************************************************/
-/* Search through all to find total files and bytes */
-/****************************************************/
-for(fnum=0;fnum<fnames;fnum++) {
-	last=findfirst(fname[fnum],&ff,0);	/* incase wildcards are used */
-	if(last)
-		lprintf("%s not found\r\n",fname[fnum]);
-	while(!last) {
-		total_files++;
-		total_bytes+=ff.ff_fsize;
-		last=findnext(&ff); } }
-
-if(fnames>1)
-	lprintf("Sending %u files (%lu bytes total)\r\n"
-		,total_files,total_bytes);
-
-rioctl(IOFB);
-
-/***********************************************/
-/* Send every file matching names or filespecs */
-/***********************************************/
-for(fnum=0;fnum<fnames;fnum++) {
-	last=findfirst(fname[fnum],&ff,0);
-	while(!last) {
-		if(mode&ZMODEM) {
-#if 0
-			putcom('r'); putcom('z'); putcom(CR);       /* send rz\r */
-			ltohdr(0L); 	/* Zero the header */
-			putzhhdr(ZRQINIT);
-			getzrxinit();
-#endif
-			} /* Zmodem */
-		else {
-			mode&=~GMODE;
-			flows=0;
-			for(errors=can=0;errors<MAXERRORS;errors++) {
-				i=getcom(10);
-				if(can && i!=CAN)
-					can=0;
-				if(i==NAK) {		/* csum */
-					mode&=~CRC;
-					break; }
-				if(i=='C') {
-					mode|=CRC;
-					break; }
-				if(i=='G') {
-					mode|=(GMODE|CRC);
-					break; }
-				if(i==CAN) {
-					if(can) {
-						newline();
-						lprintf("Cancelled remotely\r\n");
-						bail(1); }
-					can=1; }
-				rioctl(IOFB);	/* flush buffers cause we have crap-o-la */
-				if(i!=NOINP) {
-					newline();
-					lprintf("Received %s  Expected NAK, C, or G\r\n"
-						,chr(i)); } }
-			if(errors==MAXERRORS) {
-				lprintf("Timeout starting transfer\r\n");
-				cancel();
-				bail(1); } } /* X/Ymodem */
-
-		strcpy(str,fname[fnum]);
-		if(strchr(str,'*') || strchr(str,'?')) {    /* wildcards used */
-			p=strrchr(str,'\\');
-			if(!p)
-				p=strchr(str,':');
-			if(p)
-				*(p+1)=NULL;
-			else
-				str[0]=0;
-			strcat(str,ff.ff_name); }
-
-		lprintf("Sending %s (%lu bytes) via %s %s\r\n"
-			,str,ff.ff_fsize
-			,mode&XMODEM ? "Xmodem" : mode&YMODEM ? mode&GMODE ? "Ymodem-G"
-			: "Ymodem" :"Zmodem"
-            ,mode&CRC ? "CRC-16":"Checksum");
-
-		if((file=nopen(str,O_RDONLY))==-1
-			|| (stream=fdopen(file,"rb"))==NULL) {
-			lprintf("Error opening %s for read\r\n",str);
-			cancel();
-			bail(1); }
-		setvbuf(stream,NULL,_IOFBF,8*1024);
-		rioctl(IOFB);	/* flush buffers cause extra 'G', 'C', or NAKs */
-		if(!(mode&XMODEM)) {
-			getftime(file,&ft);
-			dostime.ti_min=ft.ft_min;
-			dostime.ti_hour=ft.ft_hour;
-			dostime.ti_hund=0;
-			dostime.ti_sec=ft.ft_tsec*2;
-			dosdate.da_year=1980+ft.ft_year;
-			dosdate.da_day=ft.ft_day;
-			dosdate.da_mon=ft.ft_month;
-			t=dostounix(&dosdate,&dostime);
-			memset(block,NULL,128);
-			strcpy(block,ff.ff_name);
-			strlwr(block);
-			sprintf(block+strlen(block)+1,"%lu %lo 0 0 %d %ld"
-				,ff.ff_fsize,t,total_files-sent_files,total_bytes-sent_bytes);
-			/*
-			lprintf("Sending Ymodem block '%s'\r\n",block+strlen(block)+1);
-			*/
-			block_num=0;
-			i=block_size;
-			block_size=128; 	/* Always use 128 for first block */
-			for(errors=0;errors<MAXERRORS;errors++) {
-				put_block();
-				if(get_ack())
-					break; }
-			if(errors==MAXERRORS) {
-				newline();
-				lprintf("Failed to send header block\r\n");
-				cancel();
-				bail(1); }
-			block_size=i;		/* Restore block size */
-			mode&=~GMODE;
-			for(errors=can=0;errors<MAXERRORS;errors++) {
-				i=getcom(10);
-				if(can && i!=CAN)
-					can=0;
-				if(i==NAK) {		/* csum */
-					mode&=~CRC;
-					break; }
-				if(i=='C') {
-					mode|=CRC;
-					break; }
-				if(i=='G') {
-					mode|=(GMODE|CRC);
-					break; }
-				if(i==CAN) {
-					if(can) {
-						newline();
-						lprintf("Cancelled remotely\r\n");
-						bail(1); }
-					can=1; }
-				rioctl(IOFB);
-				if(i!=NOINP) {
-					newline();
-					lprintf("Received %s  Expected NAK, C, or G\r\n"
-						,chr(i)); } }
-			if(errors==MAXERRORS) {
-				newline();
-				lprintf("Too many errors waiting for receiver\r\n");
-				cancel();
-				bail(1); } }
-		last_block_num=block_num=1;
-		startfile=time(NULL);
-		errors=0;
-		while((block_num-1)*(long)block_size<ff.ff_fsize && errors<MAXERRORS) {
-			if(last_block_num==block_num) {  /* block_num didn't increment */
-				fseek(stream,(block_num-1)*(long)block_size,SEEK_SET);
-				i=fread(block,1,block_size,stream);
-				while(i<block_size)
-					block[i++]=CPMEOF; }
-			last_block_num=block_num;
-			put_block();
-			i=fread(block,1,block_size,stream); /* read next block from disk */
-			while(i<block_size)
-				block[i++]=CPMEOF;
-			t=time(NULL)-startfile;
-			if(!t) t=1; 		/* t is time so far */
-			cps=(uint)((block_num*(long)block_size)/t); 	/* cps so far */
-			if(!cps) cps=1;
-			l=ff.ff_fsize/cps;	/* total transfer est time */
-			l-=t;				/* now, it's est time left */
-			if(l<0) l=0;
-			b=blocks(ff.ff_fsize);
-			lprintf("\rBlock (%lu%s): %lu/%lu  Byte: %lu  "
-				"Time: %lu:%02lu  Left: %lu:%02lu  CPS: %u  %lu%% "
-				,block_size%1024L ? block_size: block_size/1024L
-				,block_size%1024L ? "" : "k"
-				,block_num
-				,b
-				,block_num*(long)block_size
-				,t/60L
-				,t%60L
-				,l/60L
-				,l%60L
-				,cps
-				,(long)(((float)block_num/(float)b)*100.0)
-				);
-			if(!get_ack())
-				errors++;
-			else
-				block_num++; }
-		fclose(stream);
-		success=0;
-		if((block_num-1)*(long)block_size>=ff.ff_fsize) {
-			sent_files++;
-			sent_bytes+=ff.ff_fsize;
-			riosync();
-			lprintf("\n");
-
-			for(i=0;i<10;i++) {
-				lprintf("\rSending EOT (%d)",i+1);
-				rioctl(IOFI);
-				putcom(EOT);
-				ch=getcom(10);
-				if(ch==ACK)
-					break;
-				if(ch==NAK && i==0 && (mode&(YMODEM|GMODE))==YMODEM)
-					continue;  /* chuck's double EOT trick so don't complain */
-				if(ch!=NOINP) {
-					newline();
-					lprintf("Received %s  Expected ACK\r\n"
-						,chr(ch)); } }
-			if(i==3)
-				lprintf("\rNo ACK on EOT   \n");
-			t=time(NULL)-startfile;
-			if(!t) t=1;
-			lprintf("\rSuccesssful - Time: %lu:%02lu  CPS: %lu\r\n"
-				,t/60,t%60,ff.ff_fsize/t);
-			success=1; }
-		else {
-			newline();
-			lputs("Unsuccessful!\r\n");
-			t=time(NULL)-startfile;
-			if(!t) t=1; }
-
-		if(total_files>1 && total_files-sent_files>1)
-			lprintf("Remaining - Time: %lu:%02lu  Files: %u  Bytes: %lu\r\n"
-				,((total_bytes-sent_bytes)/cps)/60
-				,((total_bytes-sent_bytes)/cps)%60
-				,total_files-sent_files
-				,total_bytes-sent_bytes
-				);
-		if(log) {
-			l=(block_num-1)*(long)block_size;
-			if(l>ff.ff_fsize)
-				l=ff.ff_fsize;
-			fprintf(log,"%c %6lu %5u bps %4lu cps %3u errors %5u %4u "
-				"%s -1\r\n"
-				,success ? (mode&ZMODEM ? 'z':'S') : 'E'
-				,l
-				,baud
-				,l/t
-				,errors
-				,flows
-				,block_size
-				,fname[fnum]); }
-
-		last=findnext(&ff); } }
-if(mode&XMODEM)
-	bail(0);
-mode&=~GMODE;
-i=getcom(10);
-if(i==NAK)
-	mode&=~CRC;
-else if(i=='C')
-	mode|=CRC;
-else if(i=='G')
-	mode|=(GMODE|CRC);
-if(i!=NOINP && i!=NAK && i!='C' && i!='G') {
-	newline();
-	lprintf("Received %s  Expected NAK, C, or G\r\n",chr(i)); }
-else if(i!=NOINP) {
-	block_num=0;
-	block[0]=0;
-	block_size=128;
-	put_block();
-	if(!get_ack()) {
-		newline();
-		lprintf("Failed to receive ACK after terminating block\r\n"); } }
-if(total_files>1) {
-	t=time(NULL)-startall;
-	if(!t) t=1;
-	newline();
-	lprintf("Overall - Time %02lu:%02lu  Bytes: %lu  CPS: %lu\r\n"
-		,t/60,t%60,sent_bytes,sent_bytes/t); }
-bail(0);
-return(0);
-}
-
diff --git a/src/stp/zmodem.h b/src/stp/zmodem.h
deleted file mode 100644
index e04b4fca24..0000000000
--- a/src/stp/zmodem.h
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- *   Z M O D E M . H     Manifest constants for ZMODEM
- *    application to application file transfer protocol
- *    Copyright 1991 Omen Technology Inc All Rights Reserved
- *    04-17-89  Chuck Forsberg Omen Technology Inc
- */
-#define ZPAD '*'	/* 052 Padding character begins frames */
-#define ZDLE 030	/* Ctrl-X Zmodem escape - `ala BISYNC DLE */
-#define ZDLEE (ZDLE^0100)	/* Escaped ZDLE as transmitted */
-#define ZBIN 'A'	/* Binary frame indicator (CRC-16) */
-#define ZHEX 'B'	/* HEX frame indicator */
-#define ZBIN32 'C'	/* Binary frame with 32 bit FCS */
-#define ZBINR32 'D'	/* RLE packed Binary frame with 32 bit FCS */
-#define ZVBIN 'a'	/* Binary frame indicator (CRC-16) */
-#define ZVHEX 'b'	/* HEX frame indicator */
-#define ZVBIN32 'c'	/* Binary frame with 32 bit FCS */
-#define ZVBINR32 'd'	/* RLE packed Binary frame with 32 bit FCS */
-#define ZRESC	0176	/* RLE flag/escape character */
-#define ZMAXHLEN 16	/* Max header information length  NEVER CHANGE */
-#define ZMAXSPLEN 1024	/* Max subpacket length  NEVER CHANGE */
-
-/* Frame types (see array "frametypes" in zm.c) */
-#define ZRQINIT	0	/* Request receive init */
-#define ZRINIT	1	/* Receive init */
-#define ZSINIT 2	/* Send init sequence (optional) */
-#define ZACK 3		/* ACK to above */
-#define ZFILE 4		/* File name from sender */
-#define ZSKIP 5		/* To sender: skip this file */
-#define ZNAK 6		/* Last packet was garbled */
-#define ZABORT 7	/* Abort batch transfers */
-#define ZFIN 8		/* Finish session */
-#define ZRPOS 9		/* Resume data trans at this position */
-#define ZDATA 10	/* Data packet(s) follow */
-#define ZEOF 11		/* End of file */
-#define ZFERR 12	/* Fatal Read or Write error Detected */
-#define ZCRC 13		/* Request for file CRC and response */
-#define ZCHALLENGE 14	/* Receiver's Challenge */
-#define ZCOMPL 15	/* Request is complete */
-#define ZCAN 16		/* Other end canned session with CAN*5 */
-#define ZFREECNT 17	/* Request for free bytes on filesystem */
-#define ZCOMMAND 18	/* Command from sending program */
-#define ZSTDERR 19	/* Output to standard error, data follows */
-
-/* ZDLE sequences */
-#define ZCRCE 'h'	/* CRC next, frame ends, header packet follows */
-#define ZCRCG 'i'	/* CRC next, frame continues nonstop */
-#define ZCRCQ 'j'	/* CRC next, frame continues, ZACK expected */
-#define ZCRCW 'k'	/* CRC next, ZACK expected, end of frame */
-#define ZRUB0 'l'	/* Translate to rubout 0177 */
-#define ZRUB1 'm'	/* Translate to rubout 0377 */
-
-/* zdlread return values (internal) */
-/* -1 is general error, -2 is timeout */
-#define GOTOR 0400
-#define GOTCRCE (ZCRCE|GOTOR)	/* ZDLE-ZCRCE received */
-#define GOTCRCG (ZCRCG|GOTOR)	/* ZDLE-ZCRCG received */
-#define GOTCRCQ (ZCRCQ|GOTOR)	/* ZDLE-ZCRCQ received */
-#define GOTCRCW (ZCRCW|GOTOR)	/* ZDLE-ZCRCW received */
-#define GOTCAN	(GOTOR|030)	/* CAN*5 seen */
-
-/* Byte positions within header array */
-#define ZF0	3	/* First flags byte */
-#define ZF1	2
-#define ZF2	1
-#define ZF3	0
-#define ZP0	0	/* Low order 8 bits of position */
-#define ZP1	1
-#define ZP2	2
-#define ZP3	3	/* High order 8 bits of file position */
-
-/* Bit Masks for ZRINIT flags byte ZF0 */
-#define CANFDX	01	/* Rx can send and receive true FDX */
-#define CANOVIO	02	/* Rx can receive data during disk I/O */
-#define CANBRK	04	/* Rx can send a break signal */
-#define CANRLE	010	/* Receiver can decode RLE */
-#define CANLZW	020	/* Receiver can uncompress */
-#define CANFC32	040	/* Receiver can use 32 bit Frame Check */
-#define ESCCTL 0100	/* Receiver expects ctl chars to be escaped */
-#define ESC8   0200	/* Receiver expects 8th bit to be escaped */
-
-/* Bit Masks for ZRINIT flags byte ZF1 */
-#define CANVHDR	01	/* Variable headers OK */
-
-/* Parameters for ZSINIT frame */
-#define ZATTNLEN 32	/* Max length of attention string */
-#define ALTCOFF ZF1	/* Offset to alternate canit string, 0 if not used */
-/* Bit Masks for ZSINIT flags byte ZF0 */
-#define TESCCTL 0100	/* Transmitter expects ctl chars to be escaped */
-#define TESC8   0200	/* Transmitter expects 8th bit to be escaped */
-
-/* Parameters for ZFILE frame */
-/* Conversion options one of these in ZF0 */
-#define ZCBIN	1	/* Binary transfer - inhibit conversion */
-#define ZCNL	2	/* Convert NL to local end of line convention */
-#define ZCRESUM	3	/* Resume interrupted file transfer */
-/* Management include options, one of these ored in ZF1 */
-#define ZMSKNOLOC	0200	/* Skip file if not present at rx */
-/* Management options, one of these ored in ZF1 */
-#define ZMMASK	037	/* Mask for the choices below */
-#define ZMNEWL	1	/* Transfer if source newer or longer */
-#define ZMCRC	2	/* Transfer if different file CRC or length */
-#define ZMAPND	3	/* Append contents to existing file (if any) */
-#define ZMCLOB	4	/* Replace existing file */
-#define ZMNEW	5	/* Transfer if source newer */
-	/* Number 5 is alive ... */
-#define ZMDIFF	6	/* Transfer if dates or lengths different */
-#define ZMPROT	7	/* Protect destination file */
-#define ZMCHNG	8	/* Change filename if destination exists */
-/* Transport options, one of these in ZF2 */
-#define ZTLZW	1	/* Lempel-Ziv compression */
-#define ZTRLE	3	/* Run Length encoding */
-/* Extended options for ZF3, bit encoded */
-#define ZXSPARS	64	/* Encoding for sparse file operations */
-#define ZCANVHDR	01	/* Variable headers OK */
-/* Receiver window size override */
-#define ZRWOVR 4	/* byte position for receive window override/256 */
-
-/* Parameters for ZCOMMAND frame ZF0 (otherwise 0) */
-#define ZCACK1	1	/* Acknowledge, then do command */
-
-#ifndef STP
-
-long rclhdr();
-
-/* Globals used by ZMODEM functions */
-extern Rxframeind;	/* ZBIN ZBIN32, or ZHEX type of frame */
-extern Rxtype;		/* Type of header received */
-extern Rxcount;		/* Count of data bytes received */
-extern Rxtimeout;	/* Tenths of seconds to wait for something */
-extern long Rxpos;	/* Received file position */
-extern long Txpos;	/* Transmitted file position */
-extern Txfcs32;		/* TURE means send binary frames with 32 bit FCS */
-extern Crc32t;		/* Display flag indicating 32 bit CRC being sent */
-extern Crc32;		/* Display flag indicating 32 bit CRC being received */
-extern Znulls;		/* Number of nulls to send at beginning of ZDATA hdr */
-extern char Attn[ZATTNLEN+1];	/* Attention string rx sends to tx on err */
-extern char *Altcan;	/* Alternate canit string */
-
-#endif
-
-/* End of ZMODEM.H */
diff --git a/src/tone/cvt$$a.c b/src/tone/cvt$$a.c
deleted file mode 100644
index 07589cc3c2..0000000000
--- a/src/tone/cvt$$a.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/* CVT$$A*/
-
-/* Converts OS/2 tune editor files to tone format */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-void main()
-{
-	char str[128]
-		,*note="abcdefgabcdefgabcdefgabcdefg"
-		,*flat="GABCDEFGABCDEFGABCDEFGABCDEFG";
-	unsigned int  bt=200,o,n,t,i;
-
-while(1) {
-	fprintf(stderr,"top\n");
-	if(!fgets(str,81,stdin))
-		break;
-	if(str[1]==':') {
-		printf("%s",str+1);
-		continue; }
-	if(str[2]!=' ') {
-		str[4]=0;
-		bt=atoi(str);
-		continue; }
-	t=atoi(str);
-	if(!t)
-		continue;
-	fprintf(stderr,"rest\n");
-	if(t>=10) {
-		if(t==10)
-			t=bt*4;
-		else if(t==11)
-			t=bt*2;
-		else if(t==12)
-			t=bt;
-		else if(t==13)
-			t=bt/2;
-		else if(t==14)
-			t=bt/4;
-		else if(t==14)
-			t=bt/8;
-		printf("r %u\n",t);
-		continue; }
-	fprintf(stderr,"time\n");
-	t=(bt*4)/t;
-	i=atoi(str+3);
-	o=2;
-	fprintf(stderr,"note\n");
-	if(i<=20) {
-		n=note[20-i];
-		if(20-i)
-			o+=((20-i)/7); }
-	else if(i<=41) { /* flats */
-		n=flat[41-i];
-		if(41-i)
-			o+=((41-i)/7); }
-	else {
-		n=toupper(note[62-i]);
-		if(62-i)
-			o+=((62-i)/7); }
-	if(toupper(n)=='A' || toupper(n)=='B' || n=='G')
-		o--;
-	printf("%c%u %u\n",n,o,t); }
-}
-
diff --git a/src/tone/make.bat b/src/tone/make.bat
deleted file mode 100755
index 7d0c2958d7..0000000000
--- a/src/tone/make.bat
+++ /dev/null
@@ -1,2 +0,0 @@
-@echo off
-bcc -P-c -w-prot tone ..\mswait\dos\mswaits.obj
diff --git a/src/tone/tone.c b/src/tone/tone.c
deleted file mode 100644
index 915665094c..0000000000
--- a/src/tone/tone.c
+++ /dev/null
@@ -1,349 +0,0 @@
-/* TONE.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* Linux modifications by Casey Martin 2000.
-
-   Note:  Permissions on /dev/console must be at least 006 for this
-   to work properly
-*/
-
-/****************************************************************************
- * @format.tab-size 4		(Plain Text/Source Code File Header)			*
- * @format.use-tabs true	(see http://www.synchro.net/ptsc_hdr.html)		*
- *																			*
- * Note: If this box doesn't appear square, then you need to fix your tabs.	*
- ****************************************************************************/
-
-/* Test sound freqs and durations from command line */
-
-#ifdef __OS2__
-	#define INCL_DOS
-	#include <os2.h>
-#endif
-
-#ifndef __unix__
-	#include <io.h>
-	#include <dos.h>
-#else
-	#include <unistd.h>
-	#include <math.h>
-	#include <time.h>
-	#include <sys/ioctl.h>
-	#include <sys/kd.h>
-	#include <sys/time.h>
-	#include <sys/types.h>
-	#include <termios.h>
-	#include <signal.h>
-#endif
-
-#include <math.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <fcntl.h>
-
-#ifdef __OS2__
-	#define mswait(x) DosSleep(x)
-	#define delay(x) DosSleep(x)
-	#define sound(x) DosBeep(x,0)
-	#define nosound() DosBeep(0,0)
-#endif
-
-#define NOT_ABORTABLE	(1<<0)
-#define SHOW_DOT		(1<<1)
-#define SHOW_FREQ		(1<<2)
-#define NO_VISUAL		(1<<3)
-#define USE_MSWAIT		(1<<4)
-
-#ifdef __unix__
-	#define nosound() ioctl(fd, KIOCSOUND, 0)
-	#define sound(f)  ioctl(fd, KIOCSOUND, (int) (1193180 / f))
-	#define mswait(x) delay(x)
-	#define kbhit()   select(1, &inp, NULL, NULL, &timeout)
-	#define delay(ms) usleep(ms * 1000)
-	#define OPENARGS O_RDONLY
-#else
-	#define OPENARGS (O_RDONLY | O_BINARY | O_DENYNONE)
-#endif
-
-
-#if defined __OS2__ || defined __unix__
-	int mswtyp;
-#else
-	extern mswtyp;
-#endif
-
-int aborted=0;	/* Ctrl-C hit? */
-int mode=0; 	/* Optional modes */
-int t=1;		/* Timing */
-int s=0;		/* Stacato */
-int octave=4;	/* Default octave */
-
-
-#ifdef __unix__
-	int fd = 0;              // file descriptor for the console
-	struct termios stored;   // for storing old term settings
-	struct timeval timeout = {0, 0}; // passed in select() call
-	fd_set inp;              // passes in select() call
-#endif
-
-double pitch=523.50/32.0;	 /* low 'C' */
-
-
-
-void play(char *freq, char *dur)
-{
-	char *notes="c d ef g a b";
-	char *sharp="BC D EF G A ";
-	int i,n,d,o=octave;
-	double f;
-
-	d=atoi(dur);
-	if(isdigit(freq[0]))
-		f=atoi(freq);
-  
-	else
-		switch(toupper(freq[0])) {
-			case 'O':               /* default octave */
-				if(isdigit(dur[0]))
-					octave=d;
-				else
-					octave+=d;
-				return;
-			case 'P':               /* pitch variation */
-				if(isdigit(dur[0]))
-					pitch=atof(dur)/32.0;
-				else
-					pitch+=atof(dur);
-				return;
-			case 'Q':               /* quit */
-				nosound();
-				exit(0);
-			case 'R':               /* rest */
-				f=0;
-				break;
-			case 'S':               /* stacato */
-				if(isdigit(dur[0]))
-					s=d;
-				else
-					s+=d;
-				return;
-			case 'T':               /* time adjust */
-				t=d;
-				return;
-			case 'V':
-				if(mode&NO_VISUAL)
-					return;
-				n=strlen(dur);
-				while(n && dur[n]<=' ')
-					n--;
-				dur[n+1]=0;
-				if(dur[n]=='\\') {
-					dur[n]=0;
-					printf("%s",dur); }
-				else
-					printf("%s\r\n",dur);
-				return;
-			case 'X':               /* exit */
-				exit(1);
-			default:
-				for(n=0;notes[n];n++)
-					if(freq[0]==notes[n] || freq[0]==sharp[n])
-						break;
-				if(isdigit(freq[1]))
-					o=(freq[1]&0xf);
-				else
-					o=octave;
-				f=pitch*pow(2,o+(double)n/12);
-				break; }
-	if(!f)
-		nosound();
-	else
-		sound(f);
-	if(f && mode&SHOW_FREQ) {
-		for(i=0;freq[i]>' ';i++)
-			;
-		freq[i]=0;
-		printf("%-4.4s",freq); }
-	if(mode&SHOW_DOT)
-		printf(".");
-	if(t>10) {
-		if(mode&USE_MSWAIT)
-			mswait((d*t)-(d*s));
-		else
-			delay((d*t)-(d*s)); }
-	else {
-		if(mode&USE_MSWAIT)
-			mswait(d*t);
-		else
-			delay(d*t); }
-	if(s) {
-		nosound();
-		if(t>10) {
-			if(mode&USE_MSWAIT)
-				mswait(d*s);
-			else
-				delay(d*s); }
-		else {
-			if(mode&USE_MSWAIT)
-				mswait(s);
-			else
-				delay(s); } }
-}
-
-void usage(void)
-{
-	printf("usage: tone [/opts] [(note[oct]|freq) dur | (cmd val) [...]] "
-		"[+filename]\n\n");
-	printf("where: note  = a,b,c,d,e,f, or g (naturals) or A,B,C,D,E,F, or "
-		"G (sharps)\n");
-	printf("       oct   = octave 1 through 9 (default=%d)\n",octave);
-	printf("       freq  = frequency (in Hz) or 0 for silence\n");
-	printf("       dur   = duration (in timer counts)\n");
-	printf("       cmd   = o set default octave (+/- to adjust) "
-		"(default=%d)\n",octave);
-	printf("               p set middle c pitch (+/- to adjust) "
-		"(default=%.2f)\n",pitch*32.0);
-	printf("               q quit program immediately\n");
-	printf("               r rest (silence) for val timer counts\n");
-	printf("               s set stacato duration (in ms) (+/- to adjust) "
-		"(default=%d)\n",s);
-	printf("               t set timer count value (in ms) "
-		"(default=%d)\n",t);
-	printf("               v visual text diplay of val (no val=cr/lf)\n");
-	printf("               x quit program immediately (leave tone on)\n");
-	printf("       opts  = d display dot for each note\n");
-	printf("               f display frequency or note value\n");
-	printf("               n not abortable with key-stroke\n");
-	printf("               v disable visual text commands\n");
-	printf("               t use time-slice aware delays\n");
-	exit(0);
-}
-
-#ifdef __unix__
-
-void cbreakh(int sig)
-{
-	nosound();
-	exit(0);
-}
-
-#else /* !unix */
-
-int cbreakh()	/* ctrl-break handler */
-{
-	aborted=1;
-	return(1);		/* 1 to continue, 0 to abort */
-}
-
-#endif
-
-int main(int argc, char **argv)
-{
-	char *p,str[128];
-	int i,j,file;
-	FILE *stream;
-
-#ifdef __unix__
-
-	// sets up the terminal for one key entry (to cancel playback)
-	struct termios newterm;
-	tcgetattr(0,&stored);
-  
-	memcpy(&newterm,&stored,sizeof(struct termios));
-	newterm.c_lflag &= (~ICANON);
-	newterm.c_cc[VTIME] = 0;
-	newterm.c_cc[VMIN] = 1;
-	tcsetattr(0,TCSANOW,&newterm);
-
-	// set up select() args
-	FD_ZERO(&inp);
-	FD_SET(0, &inp);
-
-	// install Ctrl-C handler...
-	signal(SIGINT, cbreakh);
-
-#endif
-  
-#ifndef __OS2__
-	#ifndef __unix__
-		ctrlbrk(cbreakh);
-	#else
-  		fd = open("/dev/console", O_NOCTTY);
-		if (fd < 0) {
-    		perror("open(\"/dev/console\"");
-    		exit(-1);
-		}
-	#endif
-#endif
-
-	printf("\nTone Generation Utility  v1.01  Developed 1993 Rob Swindell\n\n");
-
-	if(argc<2)
-		usage();
-
-	mswtyp=0;
-	delay(0);
-	for(i=1;i<argc;i++) {
-		if(argv[i][0]=='/') {
-			for(j=1;argv[i][j];j++)
-				switch(toupper(argv[i][j])) {
-					case 'D':
-						mode^=SHOW_DOT;
-						break;
-					case 'F':
-						mode^=SHOW_FREQ;
-						break;
-					case 'N':
-						mode^=NOT_ABORTABLE;
-						break;
-					case 'V':
-						mode^=NO_VISUAL;
-						break;
-					case 'T':
-						mode^=USE_MSWAIT;
-						mswtyp=atoi(argv[i]+j+1);
-						while(isdigit(argv[i][j+1]))
-							j++;
-						break;
-					default:
-						usage(); }
-			continue; }
-		if(argv[i][0]=='+') {
-			if((file=open(argv[i]+1, OPENARGS))==-1 || (stream=fdopen(file,"rb"))==NULL) {
-				strcpy(str,argv[0]);
-				p=strrchr(str,'\\');
-				if(p)
-					*(p+1)=0;
-				strcat(str,argv[i]+1);
-				if((file=open(str, OPENARGS))==-1
-					|| (stream=fdopen(file,"rb"))==NULL) {
-					printf("\7Error opening %s\n",argv[i]+1);
-					exit(1); } }
-			while(mode&NOT_ABORTABLE || !kbhit()) {
-				if(!fgets(str,81,stream))
-					break;
-				if(!isalnum(str[0]))
-					continue;
-				p=str;
-				while(*p>' ')
-					p++;
-				while(*p && *p<=' ')
-					p++;
-				play(str,p); }
-			fclose(stream);
-			continue; }
-		play(argv[i],argv[i+1]);
-		i++;
-		if(aborted)
-			break; }
-	nosound();
-
-#ifdef __unix__
-	close(fd);                      // close /dev/console
-	tcsetattr(0,TCSANOW,&stored);   // reset terminal to previous state
-#endif
-
-return(0);
-}
diff --git a/src/uifc/uifc.c b/src/uifc/uifc.c
deleted file mode 100644
index 6992b56304..0000000000
--- a/src/uifc/uifc.c
+++ /dev/null
@@ -1,1829 +0,0 @@
-/* uifc.c */
-
-/* Original implementation of UIFC (user interface) library based on conio */
-
-/* $Id$ */
-
-/****************************************************************************
- * @format.tab-size 4		(Plain Text/Source Code File Header)			*
- * @format.use-tabs true	(see http://www.synchro.net/ptsc_hdr.html)		*
- *																			*
- * Copyright 2002 Rob Swindell - http://www.synchro.net/copyright.html		*
- *																			*
- * This program is free software; you can redistribute it and/or			*
- * modify it under the terms of the GNU General Public License				*
- * as published by the Free Software Foundation; either version 2			*
- * of the License, or (at your option) any later version.					*
- * See the GNU General Public License for more details: gpl.txt or			*
- * http://www.fsf.org/copyleft/gpl.html										*
- *																			*
- * Anonymous FTP access to the most recent released source is available at	*
- * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net	*
- *																			*
- * Anonymous CVS access to the development source and modification history	*
- * is available at cvs.synchro.net:/cvsroot/sbbs, example:					*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs login			*
- *     (just hit return, no password is necessary)							*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs checkout src		*
- *																			*
- * For Synchronet coding style and modification guidelines, see				*
- * http://www.synchro.net/source.html										*
- *																			*
- * You are encouraged to submit any modifications (preferably in Unix diff	*
- * format) via e-mail to mods@synchro.net									*
- *																			*
- * Note: If this box doesn't appear square, then you need to fix your tabs.	*
- ****************************************************************************/
-
-#include "uifc.h"
-#include <share.h>
-#include <conio.h>
-
-#if defined(__OS2__)
-
-#define INCL_BASE
-#include <os2.h>
-
-void mswait(int msec)
-{
-DosSleep(msec ? msec : 1);
-}
-
-#elif defined(_WIN32)
-	#include <windows.h>
-	#define mswait(x) Sleep(x)
-#elif defined(__FLAT__)
-    #define mswait(x) delay(x)
-#endif
-
-							/* Bottom line elements */
-#define BL_INS      (1<<0)  /* INS key */
-#define BL_DEL      (1<<1)  /* DEL key */
-#define BL_GET      (1<<2)  /* Get key */
-#define BL_PUT      (1<<3)  /* Put key */
-
-static char hclr,lclr,bclr,cclr,show_free_mem=0;
-static int cursor;
-static char* helpfile=0;
-static uint helpline=0;
-static char blk_scrn[MAX_BFLN];
-static win_t sav[MAX_BUFS];
-static uint max_opts=MAX_OPTS;
-static uifcapi_t* api;
-
-/* Prototypes */
-static int  uprintf(char x, char y, char attr, char *fmt,...);
-static void bottomline(int line);
-static char *utimestr(time_t *intime);
-static void help();
-
-/* API routines */
-static void uifcbail(void);
-static int uscrn(char *str);
-static int ulist(int mode, char left, int top, char width, int *dflt, int *bar
-	,char *title, char **option);
-static int uinput(int imode, char left, char top, char *prompt, char *str
-	,char len ,int kmode);
-static void umsg(char *str);
-static void upop(char *str);
-static void sethelp(int line, char* file);
-
-#ifdef __FLAT__
-int inkey(int mode)
-{
-	int c;
-
-if(mode)
-	return(kbhit());
-c=getch();
-if(!c)
-	c=(getch()<<8);
-return(c);
-}
-#else
-int inkey(int mode)
-{
-if(mode)
-	return(bioskey(1));
-while(!bioskey(1));
-return(bioskey(0));
-}
-#endif
-
-static uint mousecursor=0x28;
-
-/****************************************************************************/
-/* Initialization function, see uifc.h for details.							*/
-/* Returns 0 on success.													*/
-/****************************************************************************/
-int uifcini(uifcapi_t* uifcapi)
-{
-	int 	i;
-	struct	text_info txtinfo;
-#ifndef __FLAT__
-	union	REGS r;
-#endif
-
-    if(uifcapi==NULL || uifcapi->size!=sizeof(uifcapi_t))
-        return(-1);
-
-    api=uifcapi;
-
-    /* install function handlers */            
-    api->bail=uifcbail;
-    api->scrn=uscrn;
-    api->msg=umsg;
-    api->pop=upop;
-    api->list=ulist;
-    api->input=uinput;
-    api->sethelp=sethelp;
-
-    if(api->scrn_len!=0) {
-        switch(api->scrn_len) {
-            case 14:
-                textmode(C80X14);
-                break;
-            case 21:
-                textmode(C80X21);
-                break;
-            case 25:
-                textmode(C80);
-                break;
-            case 28:
-                textmode(C80X28);
-                break;
-            case 43:
-                textmode(C80X43);
-                break;
-            case 50:
-                textmode(C80X50);
-                break;
-            case 60:
-                textmode(C80X60);
-                break;
-            default:
-                textmode(C4350);
-                break;
-        }
-    }
-
-    clrscr();
-    gettextinfo(&txtinfo);
-    /* unsupported mode? */
-    if(txtinfo.screenheight<MIN_LINES
-        || txtinfo.screenheight>MAX_LINES
-        || txtinfo.screenwidth<80) {
-        textmode(C80);  /* set mode to 80x25*/
-        gettextinfo(&txtinfo);
-    }
-
-    api->scrn_len=txtinfo.screenheight;
-    if(api->scrn_len<MIN_LINES || api->scrn_len>MAX_LINES) {
-        cprintf("\7UIFC: Screen length (%u) must be between %d and %d lines\r\n"
-            ,api->scrn_len,MIN_LINES,MAX_LINES);
-        return(-2);
-    }
-    api->scrn_len--; /* account for status line */
-
-    if(txtinfo.screenwidth<80) {
-        cprintf("\7UIFC: Screen width (%u) must be at least 80 characters\r\n"
-            ,txtinfo.screenwidth);
-        return(-3);
-    }
-
-#ifndef __FLAT__
-
-    r.w.ax=0x0000;				/* reset mouse and get driver status */
-    INT_86(0x33,&r,&r);
-
-    if(r.w.ax==0xffff) {		/* mouse driver installed */
-        uifc_status|=UIFC_MOUSE;
-
-
-        r.w.ax=0x0020;			/* enable mouse driver */
-        INT_86(0x33,&r,&r);
-
-        r.w.ax=0x000a;			/* set text pointer type */
-        r.w.bx=0x0000;			/* software cursor */
-        r.w.cx=0x77ff;
-        r.w.dx=mousecursor<<8;
-        INT_86(0x33,&r,&r);
-
-        r.w.ax=0x0013;			/* set double speed threshold */
-        r.w.dx=32;				/* double speed threshold */
-        INT_86(0x33,&r,&r);
-
-        r.w.ax=0x0001;			/* show mouse pointer */
-        INT_86(0x33,&r,&r); }
-
-    #endif
-
-
-    if(!(api->mode&UIFC_COLOR)
-        && (api->mode&UIFC_MONO
-            || txtinfo.currmode==MONO || txtinfo.currmode==BW80)) {
-        bclr=BLACK;
-        hclr=WHITE;
-        lclr=LIGHTGRAY;
-        cclr=LIGHTGRAY;
-    } else {
-        bclr=BLUE;
-        hclr=YELLOW;
-        lclr=WHITE;
-        cclr=CYAN;
-    }
-    for(i=0;i<MAX_BFLN;i+=2) {
-        blk_scrn[i]='�';
-        blk_scrn[i+1]=cclr|(bclr<<4);
-    }
-
-    cursor=_NOCURSOR;
-    _setcursortype(cursor);
-
-    return(0);
-}
-
-static void hidemouse(void)
-{
-#ifndef __FLAT__
-	union  REGS r;
-
-if(uifc_status&UIFC_MOUSE) {
-	r.w.ax=0x0002;			/* hide mouse pointer */
-	INT_86(0x33,&r,&r); }
-#endif
-}
-
-static void showmouse(void)
-{
-#ifndef __FLAT__
-	union  REGS r;
-
-if(uifc_status&UIFC_MOUSE) {
-	r.w.ax=0x0001;			/* show mouse pointer */
-	INT_86(0x33,&r,&r); }
-#endif
-}
-
-
-void uifcbail(void)
-{
-
-hidemouse();
-_setcursortype(_NORMALCURSOR);
-textattr(LIGHTGRAY);
-clrscr();
-}
-
-/****************************************************************************/
-/* Clear screen, fill with background attribute, display application title.	*/
-/* Returns 0 on success.													*/
-/****************************************************************************/
-int uscrn(char *str)
-{
-    textattr(bclr|(cclr<<4));
-    gotoxy(1,1);
-    clreol();
-    gotoxy(3,1);
-    cputs(str);
-    if(!puttext(1,2,80,api->scrn_len,blk_scrn))
-        return(-1);
-    gotoxy(1,api->scrn_len+1);
-    clreol();
-    return(0);
-}
-
-/****************************************************************************/
-/****************************************************************************/
-static void scroll_text(int x1, int y1, int x2, int y2, int down)
-{
-	uchar buf[MAX_BFLN];
-
-gettext(x1,y1,x2,y2,buf);
-if(down)
-	puttext(x1,y1+1,x2,y2,buf);
-else
-	puttext(x1,y1,x2,y2-1,buf+(((x2-x1)+1)*2));
-}
-
-/****************************************************************************/
-/* Updates time in upper left corner of screen with current time in ASCII/  */
-/* Unix format																*/
-/****************************************************************************/
-static void timedisplay()
-{
-	static time_t savetime;
-	time_t now;
-
-now=time(NULL);
-if(difftime(now,savetime)>=60) {
-	uprintf(55,1,bclr|(cclr<<4),utimestr(&now));
-	savetime=now; }
-}
-
-/****************************************************************************/
-/* General menu function, see uifc.h for details.							*/
-/****************************************************************************/
-int ulist(int mode, char left, int top, char width, int *cur, int *bar
-	, char *title, char **option)
-{
-	uchar line[256],shade[256],win[MAX_BFLN],*ptr,a,b,c,longopt
-		,search[MAX_OPLN],bline=0;
-	int height,y;
-	int i,j,opts=0,s=0; /* s=search index into options */
-
-#ifndef __FLAT__
-	union REGS reg,r;
-
-hidemouse();
-
-r.w.ax=0x0006;	/* Get button release info */
-r.w.bx=0x0000;	/* Left button */
-INT_86(0x33,&r,&r);  /* Clears any buffered mouse clicks */
-
-r.w.ax=0x0006;	/* Get button release info */
-r.w.bx=0x0001;	/* Right button */
-INT_86(0x33,&r,&r);  /* Clears any buffered mouse clicks */
-
-#endif
-
-if(mode&WIN_SAV && api->savnum>=MAX_BUFS-1)
-	putch(7);
-i=0;
-if(mode&WIN_INS) bline|=BL_INS;
-if(mode&WIN_DEL) bline|=BL_DEL;
-if(mode&WIN_GET) bline|=BL_GET;
-if(mode&WIN_PUT) bline|=BL_PUT;
-bottomline(bline);
-while(opts<max_opts && opts<MAX_OPTS)
-	if(option[opts][0]==0)
-		break;
-	else opts++;
-if(mode&WIN_XTR && opts<max_opts && opts<MAX_OPTS)
-	option[opts++][0]=0;
-height=opts+4;
-if(top+height>api->scrn_len-3)
-	height=(api->scrn_len-3)-top;
-if(!width || width<strlen(title)+6) {
-	width=strlen(title)+6;
-	for(i=0;i<opts;i++) {
-		truncsp(option[i]);
-		if((j=strlen(option[i])+5)>width)
-			width=j; } }
-if(width>(SCRN_RIGHT+1)-SCRN_LEFT)
-	width=(SCRN_RIGHT+1)-SCRN_LEFT;
-if(mode&WIN_L2R)
-	left=36-(width/2);
-else if(mode&WIN_RHT)
-	left=SCRN_RIGHT-(width+4+left);
-if(mode&WIN_T2B)
-	top=(api->scrn_len/2)-(height/2)-2;
-else if(mode&WIN_BOT)
-	top=api->scrn_len-height-3-top;
-if(mode&WIN_SAV && api->savdepth==api->savnum) {
-	if((sav[api->savnum].buf=(char *)MALLOC((width+3)*(height+2)*2))==NULL) {
-		cprintf("UIFC line %d: error allocating %u bytes."
-            ,__LINE__,(width+3)*(height+2)*2);
-		return(-1); }
-	gettext(SCRN_LEFT+left,SCRN_TOP+top,SCRN_LEFT+left+width+1
-		,SCRN_TOP+top+height,sav[api->savnum].buf);
-	sav[api->savnum].left=SCRN_LEFT+left;
-	sav[api->savnum].top=SCRN_TOP+top;
-	sav[api->savnum].right=SCRN_LEFT+left+width+1;
-	sav[api->savnum].bot=SCRN_TOP+top+height;
-	api->savdepth++; }
-else if(mode&WIN_SAV
-	&& (sav[api->savnum].left!=SCRN_LEFT+left
-	|| sav[api->savnum].top!=SCRN_TOP+top
-	|| sav[api->savnum].right!=SCRN_LEFT+left+width+1
-	|| sav[api->savnum].bot!=SCRN_TOP+top+height)) { /* dimensions have changed */
-	puttext(sav[api->savnum].left,sav[api->savnum].top,sav[api->savnum].right,sav[api->savnum].bot
-		,sav[api->savnum].buf);	/* put original window back */
-	FREE(sav[api->savnum].buf);
-	if((sav[api->savnum].buf=(char *)MALLOC((width+3)*(height+2)*2))==NULL) {
-		cprintf("UIFC line %d: error allocating %u bytes."
-            ,__LINE__,(width+3)*(height+2)*2);
-		return(-1); }
-	gettext(SCRN_LEFT+left,SCRN_TOP+top,SCRN_LEFT+left+width+1
-		,SCRN_TOP+top+height,sav[api->savnum].buf);	  /* save again */
-	sav[api->savnum].left=SCRN_LEFT+left;
-	sav[api->savnum].top=SCRN_TOP+top;
-	sav[api->savnum].right=SCRN_LEFT+left+width+1;
-	sav[api->savnum].bot=SCRN_TOP+top+height; }
-
-
-#ifndef __FLAT__
-if(show_free_mem) {
-	#if defined(__LARGE__) || defined(__HUGE__) || defined(__COMPACT__)
-	uprintf(58,1,bclr|(cclr<<4),"%10ld bytes free",farcoreleft());
-	#else
-	uprintf(58,1,bclr|(cclr<<4),"%10u bytes free",coreleft());
-	#endif
-	}
-#endif
-
-
-if(mode&WIN_ORG) { /* Clear around menu */
-	if(top)
-		puttext(SCRN_LEFT,SCRN_TOP,SCRN_RIGHT+2,SCRN_TOP+top-1,blk_scrn);
-	if(SCRN_TOP+height+top<=api->scrn_len)
-		puttext(SCRN_LEFT,SCRN_TOP+height+top,SCRN_RIGHT+2,api->scrn_len,blk_scrn);
-	if(left)
-		puttext(SCRN_LEFT,SCRN_TOP+top,SCRN_LEFT+left-1,SCRN_TOP+height+top
-			,blk_scrn);
-	if(SCRN_LEFT+left+width<=SCRN_RIGHT)
-		puttext(SCRN_LEFT+left+width,SCRN_TOP+top,SCRN_RIGHT+2
-			,SCRN_TOP+height+top,blk_scrn); }
-ptr=win;
-*(ptr++)='�';
-*(ptr++)=hclr|(bclr<<4);
-
-if(api->mode&UIFC_MOUSE) {
-	*(ptr++)='[';
-	*(ptr++)=hclr|(bclr<<4);
-	*(ptr++)='�';
-	*(ptr++)=lclr|(bclr<<4);
-	*(ptr++)=']';
-	*(ptr++)=hclr|(bclr<<4);
-	*(ptr++)='[';
-	*(ptr++)=hclr|(bclr<<4);
-	*(ptr++)='?';
-	*(ptr++)=lclr|(bclr<<4);
-	*(ptr++)=']';
-	*(ptr++)=hclr|(bclr<<4);
-	i=6; }
-else
-	i=0;
-for(;i<width-2;i++) {
-	*(ptr++)='�';
-	*(ptr++)=hclr|(bclr<<4); }
-*(ptr++)='�';
-*(ptr++)=hclr|(bclr<<4);
-*(ptr++)='�';
-*(ptr++)=hclr|(bclr<<4);
-a=strlen(title);
-b=(width-a-1)/2;
-for(i=0;i<b;i++) {
-	*(ptr++)=' ';
-	*(ptr++)=hclr|(bclr<<4); }
-for(i=0;i<a;i++) {
-	*(ptr++)=title[i];
-	*(ptr++)=hclr|(bclr<<4); }
-for(i=0;i<width-(a+b)-2;i++) {
-	*(ptr++)=' ';
-	*(ptr++)=hclr|(bclr<<4); }
-*(ptr++)='�';
-*(ptr++)=hclr|(bclr<<4);
-*(ptr++)='�';
-*(ptr++)=hclr|(bclr<<4);
-for(i=0;i<width-2;i++) {
-	*(ptr++)='�';
-	*(ptr++)=hclr|(bclr<<4); }
-*(ptr++)='�';
-*(ptr++)=hclr|(bclr<<4);
-
-if((*cur)>=opts)
-	(*cur)=opts-1;			/* returned after scrolled */
-
-if(!bar) {
-	if((*cur)>height-5)
-		(*cur)=height-5;
-	i=0; }
-else {
-	if((*bar)>=opts)
-		(*bar)=opts-1;
-	if((*bar)>height-5)
-		(*bar)=height-5;
-	if((*cur)==opts-1)
-        (*bar)=height-5;
-	if((*bar)<0)
-        (*bar)=0;
-	if((*cur)<(*bar))
-		(*cur)=(*bar);
-	i=(*cur)-(*bar);
-//
-	if(i+(height-5)>=opts) {
-		i=opts-(height-4);
-		(*cur)=i+(*bar);
-		}
-	}
-if((*cur)<0)
-    (*cur)=0;
-
-j=0;
-if(i<0) i=0;
-longopt=0;
-while(j<height-4 && i<opts) {
-	*(ptr++)='�';
-	*(ptr++)=hclr|(bclr<<4);
-	*(ptr++)=' ';
-	*(ptr++)=hclr|(bclr<<4);
-	*(ptr++)='�';
-	*(ptr++)=lclr|(bclr<<4);
-	if(i==(*cur))
-		a=bclr|(LIGHTGRAY<<4);
-	else
-		a=lclr|(bclr<<4);
-	b=strlen(option[i]);
-	if(b>longopt)
-		longopt=b;
-	if(b+4>width)
-		b=width-4;
-	for(c=0;c<b;c++) {
-		*(ptr++)=option[i][c];
-		*(ptr++)=a; }
-	while(c<width-4) {
-		*(ptr++)=' ';
-		*(ptr++)=a;
-		c++; }
-	*(ptr++)='�';
-	*(ptr++)=hclr|(bclr<<4);
-	i++;
-	j++; }
-*(ptr++)='�';
-*(ptr++)=hclr|(bclr<<4);
-for(i=0;i<width-2;i++) {
-	*(ptr++)='�';
-	*(ptr++)=hclr|(bclr<<4); }
-*(ptr++)='�';
-*(ptr++)=hclr|(bclr<<4);
-puttext(SCRN_LEFT+left,SCRN_TOP+top,SCRN_LEFT+left+width-1
-	,SCRN_TOP+top+height-1,win);
-if(bar)
-	y=top+3+(*bar);
-else
-	y=top+3+(*cur);
-if(opts+4>height && ((!bar && (*cur)!=opts-1)
-	|| (bar && ((*cur)-(*bar))+(height-4)<opts))) {
-	gotoxy(SCRN_LEFT+left+1,SCRN_TOP+top+height-2);
-	textattr(lclr|(bclr<<4));
-	putch(31);	   /* put down arrow */
-	textattr(hclr|(bclr<<4)); }
-
-if(bar && (*bar)!=(*cur)) {
-	gotoxy(SCRN_LEFT+left+1,SCRN_TOP+top+3);
-	textattr(lclr|(bclr<<4));
-	putch(30);	   /* put the up arrow */
-	textattr(hclr|(bclr<<4)); }
-
-if(bclr==BLUE) {
-	gettext(SCRN_LEFT+left+width,SCRN_TOP+top+1,SCRN_LEFT+left+width+1
-		,SCRN_TOP+top+height-1,shade);
-	for(i=1;i<height*4;i+=2)
-		shade[i]=DARKGRAY;
-	puttext(SCRN_LEFT+left+width,SCRN_TOP+top+1,SCRN_LEFT+left+width+1
-		,SCRN_TOP+top+height-1,shade);
-	gettext(SCRN_LEFT+left+2,SCRN_TOP+top+height,SCRN_LEFT+left+width+1
-		,SCRN_TOP+top+height,shade);
-	for(i=1;i<width*2;i+=2)
-		shade[i]=DARKGRAY;
-	puttext(SCRN_LEFT+left+2,SCRN_TOP+top+height,SCRN_LEFT+left+width+1
-		,SCRN_TOP+top+height,shade); }
-showmouse();
-while(1) {
-#if 0					/* debug */
-	gotoxy(30,1);
-	cprintf("y=%2d h=%2d c=%2d b=%2d s=%2d o=%2d"
-		,y,height,*cur,bar ? *bar :0xff,api->savdepth,opts);
-#endif
-	if(!show_free_mem)
-		timedisplay();
-#ifndef __FLAT__
-	if(api->mode&UIFC_MOUSE) {
-
-		r.w.ax=0x0003;		/* Get button status and mouse position */
-		INT_86(0x33,&r,&r);
-
-		if(r.w.bx&1) {		/* Left button down */
-
-			if(r.w.cx/8>=SCRN_LEFT+left
-				&& r.w.cx/8<=SCRN_LEFT+left+width
-				&& r.w.dx/8>=SCRN_TOP+top+2
-				&& r.w.dx/8<=(SCRN_TOP+top+height)-3) {
-
-				hidemouse();
-				gettext(SCRN_LEFT+3+left,SCRN_TOP+y
-					,SCRN_LEFT+left+width-2,SCRN_TOP+y,line);
-				for(i=1;i<width*2;i+=2)
-					line[i]=lclr|(bclr<<4);
-				puttext(SCRN_LEFT+3+left,SCRN_TOP+y
-					,SCRN_LEFT+left+width-2,SCRN_TOP+y,line);
-
-				(*cur)=(r.w.dx/8)-(SCRN_TOP+top+2);
-				if(bar)
-					(*bar)=(*cur);
-				y=top+3+((r.w.dx/8)-(SCRN_TOP+top+2));
-
-				gettext(SCRN_LEFT+3+left,SCRN_TOP+y
-					,SCRN_LEFT+left+width-2,SCRN_TOP+y,line);
-				for(i=1;i<width*2;i+=2)
-					line[i]=bclr|(LIGHTGRAY<<4);
-				puttext(SCRN_LEFT+3+left,SCRN_TOP+y
-					,SCRN_LEFT+left+width-2,SCRN_TOP+y,line);
-				showmouse(); } }
-
-		r.w.ax=0x0006;		/* Get button release information */
-		r.w.bx=0x0000;		/* left button */
-		INT_86(0x33,&r,&r);
-
-		if(r.w.bx) {	  /* Left button release same as CR */
-
-			if(r.w.cx/8>=SCRN_LEFT+left
-				&& r.w.cx/8<=SCRN_LEFT+left+width
-				&& r.w.dx/8>=SCRN_TOP+top+2
-				&& r.w.dx/8<=(SCRN_TOP+top+height)-3) {
-
-				(*cur)=(r.w.dx/8)-(SCRN_TOP+top+2);
-				if(bar)
-					(*bar)=(*cur);
-				y=top+3+((r.w.dx/8)-(SCRN_TOP+top+2));
-
-				if(!opts || (mode&WIN_XTR && (*cur)==opts-1))
-					continue;
-
-				if(mode&WIN_ACT) {
-					hidemouse();
-					gettext(SCRN_LEFT+left,SCRN_TOP+top,SCRN_LEFT
-						+left+width-1,SCRN_TOP+top+height-1,win);
-					for(i=1;i<(width*height*2);i+=2)
-						win[i]=lclr|(cclr<<4);
-					j=(((y-top)*width)*2)+7+((width-4)*2);
-					for(i=(((y-top)*width)*2)+7;i<j;i+=2)
-						win[i]=hclr|(cclr<<4);
-
-					puttext(SCRN_LEFT+left,SCRN_TOP+top,SCRN_LEFT
-						+left+width-1,SCRN_TOP+top+height-1,win);
-					showmouse(); }
-				else if(mode&WIN_SAV) {
-					hidemouse();
-					puttext(sav[api->savnum].left,sav[api->savnum].top
-						,sav[api->savnum].right,sav[api->savnum].bot
-						,sav[api->savnum].buf);
-					showmouse();
-					FREE(sav[api->savnum].buf);
-					api->savdepth--; }
-				return(*cur); }
-			else if(r.w.cx/8>=SCRN_LEFT+left+3
-				&& r.w.cx/8<=SCRN_LEFT+left+5
-				&& r.w.dx/8==(SCRN_TOP+top)-1)		/* Clicked help icon */
-				help();
-			else
-				goto hitesc; }
-
-		r.w.ax=0x0006;		/* Get button release information */
-		r.w.bx=0x0001;		/* right button */
-		INT_86(0x33,&r,&r);
-
-		if(r.w.bx) {	  /* Right button down, same as ESC */
-hitesc:
-            if(mode&WIN_ESC || (mode&WIN_CHE && api->changes)
-                && !(mode&WIN_SAV)) {
-                hidemouse();
-                gettext(SCRN_LEFT+left,SCRN_TOP+top,SCRN_LEFT
-                    +left+width-1,SCRN_TOP+top+height-1,win);
-                for(i=1;i<(width*height*2);i+=2)
-                    win[i]=lclr|(cclr<<4);
-                puttext(SCRN_LEFT+left,SCRN_TOP+top,SCRN_LEFT
-                    +left+width-1,SCRN_TOP+top+height-1,win);
-                showmouse(); }
-            else if(mode&WIN_SAV) {
-				hidemouse();
-                puttext(sav[api->savnum].left,sav[api->savnum].top
-                    ,sav[api->savnum].right,sav[api->savnum].bot
-                    ,sav[api->savnum].buf);
-				showmouse();
-                FREE(sav[api->savnum].buf);
-                api->savdepth--; }
-            return(-1); }
-				}
-#endif
-
-	if(inkey(1)) {
-		i=inkey(0);
-		if(!(i&0xff)) {
-			s=0;
-			switch(i>>8) {
-				case 71:	/* home */
-					if(!opts)
-						break;
-					if(opts+4>height) {
-						hidemouse();
-						gotoxy(SCRN_LEFT+left+1,SCRN_TOP+top+3);
-						textattr(lclr|(bclr<<4));
-						putch(' ');    /* Delete the up arrow */
-						gotoxy(SCRN_LEFT+left+1,SCRN_TOP+top+height-2);
-						putch(31);	   /* put the down arrow */
-						uprintf(SCRN_LEFT+left+3,SCRN_TOP+top+3
-							,bclr|(LIGHTGRAY<<4)
-							,"%-*.*s",width-4,width-4,option[0]);
-						for(i=1;i<height-4;i++)    /* re-display options */
-							uprintf(SCRN_LEFT+left+3,SCRN_TOP+top+3+i
-								,lclr|(bclr<<4)
-								,"%-*.*s",width-4,width-4,option[i]);
-						(*cur)=0;
-						if(bar)
-							(*bar)=0;
-						y=top+3;
-						showmouse();
-						break; }
-					hidemouse();
-					gettext(SCRN_LEFT+3+left,SCRN_TOP+y
-						,SCRN_LEFT+left+width-2,SCRN_TOP+y,line);
-					for(i=1;i<width*2;i+=2)
-						line[i]=lclr|(bclr<<4);
-					puttext(SCRN_LEFT+3+left,SCRN_TOP+y
-						,SCRN_LEFT+left+width-2,SCRN_TOP+y,line);
-					(*cur)=0;
-					if(bar)
-						(*bar)=0;
-					y=top+3;
-					gettext(SCRN_LEFT+3+left,SCRN_TOP+y
-						,SCRN_LEFT+left+width-2,SCRN_TOP+y,line);
-					for(i=1;i<width*2;i+=2)
-						line[i]=bclr|(LIGHTGRAY<<4);
-					puttext(SCRN_LEFT+3+left,SCRN_TOP+y
-						,SCRN_LEFT+left+width-2,SCRN_TOP+y,line);
-					showmouse();
-					break;
-				case 72:	/* up arrow */
-					if(!opts)
-						break;
-					if(!(*cur) && opts+4>height) {
-						hidemouse();
-						gotoxy(SCRN_LEFT+left+1,SCRN_TOP+top+3); /* like end */
-						textattr(lclr|(bclr<<4));
-						putch(30);	   /* put the up arrow */
-						gotoxy(SCRN_LEFT+left+1,SCRN_TOP+top+height-2);
-						putch(' ');    /* delete the down arrow */
-						for(i=(opts+4)-height,j=0;i<opts;i++,j++)
-							uprintf(SCRN_LEFT+left+3,SCRN_TOP+top+3+j
-								,i==opts-1 ? bclr|(LIGHTGRAY<<4)
-									: lclr|(bclr<<4)
-								,"%-*.*s",width-4,width-4,option[i]);
-						(*cur)=opts-1;
-						if(bar)
-							(*bar)=height-5;
-						y=top+height-2;
-						showmouse();
-                        break; }
-					hidemouse();
-					gettext(SCRN_LEFT+3+left,SCRN_TOP+y
-						,SCRN_LEFT+left+width-2,SCRN_TOP+y,line);
-					for(i=1;i<width*2;i+=2)
-						line[i]=lclr|(bclr<<4);
-					puttext(SCRN_LEFT+3+left,SCRN_TOP+y
-						,SCRN_LEFT+left+width-2,SCRN_TOP+y,line);
-					showmouse();
-					if(!(*cur)) {
-						y=top+height-2;
-						(*cur)=opts-1;
-						if(bar)
-							(*bar)=height-5; }
-					else {
-						(*cur)--;
-						y--;
-						if(bar && *bar)
-							(*bar)--; }
-					if(y<top+3) {	/* scroll */
-						hidemouse();
-						if(!(*cur)) {
-							gotoxy(SCRN_LEFT+left+1,SCRN_TOP+top+3);
-							textattr(lclr|(bclr<<4));
-							putch(' '); }  /* delete the up arrow */
-						if((*cur)+height-4==opts-1) {
-							gotoxy(SCRN_LEFT+left+1,SCRN_TOP+top+height-2);
-							textattr(lclr|(bclr<<4));
-							putch(31); }   /* put the dn arrow */
-						y++;
-						scroll_text(SCRN_LEFT+left+2,SCRN_TOP+top+3
-							,SCRN_LEFT+left+width-3,SCRN_TOP+top+height-2,1);
-						uprintf(SCRN_LEFT+left+3,SCRN_TOP+top+3
-							,bclr|(LIGHTGRAY<<4)
-							,"%-*.*s",width-4,width-4,option[*cur]);
-						showmouse(); }
-					else {
-						hidemouse();
-						gettext(SCRN_LEFT+3+left,SCRN_TOP+y
-							,SCRN_LEFT+left+width-2,SCRN_TOP+y,line);
-						for(i=1;i<width*2;i+=2)
-							line[i]=bclr|(LIGHTGRAY<<4);
-						puttext(SCRN_LEFT+3+left,SCRN_TOP+y
-							,SCRN_LEFT+left+width-2,SCRN_TOP+y,line);
-						showmouse(); }
-					break;
-#if 0
-				case 0x49;	/* PgUp */
-				case 0x51;	/* PgDn */
-					if(!opts || (*cur)==(opts-1))
-						break;
-					(*cur)+=(height-4);
-					if((*cur)>(opts-1))
-						(*cur)=(opts-1);
-
-					hidemouse();
-					gettext(SCRN_LEFT+3+left,SCRN_TOP+y
-						,SCRN_LEFT+left+width-2,SCRN_TOP+y,line);
-					for(i=1;i<width*2;i+=2)
-						line[i]=lclr|(bclr<<4);
-					puttext(SCRN_LEFT+3+left,SCRN_TOP+y
-						,SCRN_LEFT+left+width-2,SCRN_TOP+y,line);
-
-					for(i=(opts+4)-height,j=0;i<opts;i++,j++)
-						uprintf(SCRN_LEFT+left+3,SCRN_TOP+top+3+j
-							,i==(*cur) bclr|(LIGHTGRAY<<4) : lclr|(bclr<<4)
-							,"%-*.*s",width-4,width-4,option[i]);
-					y=top+height-2;
-					if(bar)
-						(*bar)=height-5;
-					gettext(SCRN_LEFT+3+left,SCRN_TOP+y
-						,SCRN_LEFT+left+width-2,SCRN_TOP+y,line);
-					for(i=1;i<148;i+=2)
-						line[i]=bclr|(LIGHTGRAY<<4);
-					puttext(SCRN_LEFT+3+left,SCRN_TOP+y
-						,SCRN_LEFT+left+width-2,SCRN_TOP+y,line);
-					showmouse();
-                    break;
-#endif
-				case 79:	/* end */
-					if(!opts)
-						break;
-					if(opts+4>height) {	/* Scroll mode */
-						hidemouse();
-						gotoxy(SCRN_LEFT+left+1,SCRN_TOP+top+3);
-						textattr(lclr|(bclr<<4));
-						putch(30);	   /* put the up arrow */
-						gotoxy(SCRN_LEFT+left+1,SCRN_TOP+top+height-2);
-						putch(' ');    /* delete the down arrow */
-						for(i=(opts+4)-height,j=0;i<opts;i++,j++)
-							uprintf(SCRN_LEFT+left+3,SCRN_TOP+top+3+j
-								,i==opts-1 ? bclr|(LIGHTGRAY<<4)
-									: lclr|(bclr<<4)
-								,"%-*.*s",width-4,width-4,option[i]);
-						(*cur)=opts-1;
-						y=top+height-2;
-						if(bar)
-							(*bar)=height-5;
-						showmouse();
-						break; }
-					hidemouse();
-					gettext(SCRN_LEFT+3+left,SCRN_TOP+y
-						,SCRN_LEFT+left+width-2,SCRN_TOP+y,line);
-					for(i=1;i<width*2;i+=2)
-						line[i]=lclr|(bclr<<4);
-					puttext(SCRN_LEFT+3+left,SCRN_TOP+y
-						,SCRN_LEFT+left+width-2,SCRN_TOP+y,line);
-					(*cur)=opts-1;
-					y=top+height-2;
-					if(bar)
-						(*bar)=height-5;
-					gettext(SCRN_LEFT+3+left,SCRN_TOP+y
-						,SCRN_LEFT+left+width-2,SCRN_TOP+y,line);
-					for(i=1;i<148;i+=2)
-						line[i]=bclr|(LIGHTGRAY<<4);
-					puttext(SCRN_LEFT+3+left,SCRN_TOP+y
-						,SCRN_LEFT+left+width-2,SCRN_TOP+y,line);
-					showmouse();
-					break;
-				case 80:	/* dn arrow */
-					if(!opts)
-						break;
-					if((*cur)==opts-1 && opts+4>height) { /* like home */
-						hidemouse();
-						gotoxy(SCRN_LEFT+left+1,SCRN_TOP+top+3);
-						textattr(lclr|(bclr<<4));
-						putch(' ');    /* Delete the up arrow */
-						gotoxy(SCRN_LEFT+left+1,SCRN_TOP+top+height-2);
-						putch(31);	   /* put the down arrow */
-						uprintf(SCRN_LEFT+left+3,SCRN_TOP+top+3
-							,bclr|(LIGHTGRAY<<4)
-							,"%-*.*s",width-4,width-4,option[0]);
-						for(i=1;i<height-4;i++)    /* re-display options */
-							uprintf(SCRN_LEFT+left+3,SCRN_TOP+top+3+i
-								,lclr|(bclr<<4)
-								,"%-*.*s",width-4,width-4,option[i]);
-						(*cur)=0;
-						y=top+3;
-						if(bar)
-							(*bar)=0;
-						showmouse();
-                        break; }
-					hidemouse();
-					gettext(SCRN_LEFT+3+left,SCRN_TOP+y
-						,SCRN_LEFT+left+width-2,SCRN_TOP+y,line);
-					for(i=1;i<width*2;i+=2)
-						line[i]=lclr|(bclr<<4);
-					puttext(SCRN_LEFT+3+left,SCRN_TOP+y
-						,SCRN_LEFT+left+width-2,SCRN_TOP+y,line);
-					showmouse();
-					if((*cur)==opts-1) {
-						(*cur)=0;
-						y=top+3;
-						if(bar) {
-							/* gotoxy(1,1); cprintf("bar=%08lX ",bar); */
-							(*bar)=0; } }
-					else {
-						(*cur)++;
-						y++;
-						if(bar && (*bar)<height-5) {
-							/* gotoxy(1,1); cprintf("bar=%08lX ",bar); */
-							(*bar)++; } }
-					if(y==top+height-1) {	/* scroll */
-						hidemouse();
-						if(*cur==opts-1) {
-							gotoxy(SCRN_LEFT+left+1,SCRN_TOP+top+height-2);
-							textattr(lclr|(bclr<<4));
-							putch(' '); }  /* delete the down arrow */
-						if((*cur)+4==height) {
-							gotoxy(SCRN_LEFT+left+1,SCRN_TOP+top+3);
-							textattr(lclr|(bclr<<4));
-							putch(30); }   /* put the up arrow */
-						y--;
-						/* gotoxy(1,1); cprintf("\rdebug: %4d ",__LINE__); */
-						scroll_text(SCRN_LEFT+left+2,SCRN_TOP+top+3
-							,SCRN_LEFT+left+width-3,SCRN_TOP+top+height-2,0);
-						/* gotoxy(1,1); cprintf("\rdebug: %4d ",__LINE__); */
-						uprintf(SCRN_LEFT+left+3,SCRN_TOP+top+height-2
-							,bclr|(LIGHTGRAY<<4)
-							,"%-*.*s",width-4,width-4,option[*cur]);
-						showmouse(); }
-					else {
-						hidemouse();
-						gettext(SCRN_LEFT+3+left,SCRN_TOP+y
-							,SCRN_LEFT+left+width-2,SCRN_TOP+y
-							,line);
-						for(i=1;i<width*2;i+=2)
-							line[i]=bclr|(LIGHTGRAY<<4);
-						puttext(SCRN_LEFT+3+left,SCRN_TOP+y
-							,SCRN_LEFT+left+width-2,SCRN_TOP+y
-							,line);
-						showmouse(); }
-					break;
-				case 0x3b:	/* F1 */
-					help();
-					break;
-				case 0x3f:	/* F5 */
-					if(mode&WIN_GET && !(mode&WIN_XTR && (*cur)==opts-1))
-						return((*cur)|MSK_GET);
-					break;
-				case 0x40:	/* F6 */
-					if(mode&WIN_PUT && !(mode&WIN_XTR && (*cur)==opts-1))
-						return((*cur)|MSK_PUT);
-					break;
-				case 82:	/* insert */
-					if(mode&WIN_INS) {
-						if(mode&WIN_INSACT) {
-							hidemouse();
-							gettext(SCRN_LEFT+left,SCRN_TOP+top,SCRN_LEFT
-								+left+width-1,SCRN_TOP+top+height-1,win);
-							for(i=1;i<(width*height*2);i+=2)
-								win[i]=lclr|(cclr<<4);
-							if(opts) {
-								j=(((y-top)*width)*2)+7+((width-4)*2);
-								for(i=(((y-top)*width)*2)+7;i<j;i+=2)
-									win[i]=hclr|(cclr<<4); }
-							puttext(SCRN_LEFT+left,SCRN_TOP+top,SCRN_LEFT
-								+left+width-1,SCRN_TOP+top+height-1,win);
-							showmouse(); }
-						if(!opts)
-							return(MSK_INS);
-						return((*cur)|MSK_INS); }
-					break;
-				case 83:	/* delete */
-					if(mode&WIN_XTR && (*cur)==opts-1)	/* can't delete */
-						break;							/* extra line */
-					if(mode&WIN_DEL) {
-						if(mode&WIN_DELACT) {
-							hidemouse();
-							gettext(SCRN_LEFT+left,SCRN_TOP+top,SCRN_LEFT
-								+left+width-1,SCRN_TOP+top+height-1,win);
-							for(i=1;i<(width*height*2);i+=2)
-								win[i]=lclr|(cclr<<4);
-							j=(((y-top)*width)*2)+7+((width-4)*2);
-							for(i=(((y-top)*width)*2)+7;i<j;i+=2)
-								win[i]=hclr|(cclr<<4);
-							puttext(SCRN_LEFT+left,SCRN_TOP+top,SCRN_LEFT
-								+left+width-1,SCRN_TOP+top+height-1,win);
-							showmouse(); }
-						return((*cur)|MSK_DEL); }
-					break;	} }
-		else {
-			i&=0xff;
-			if(isalnum(i) && opts && option[0][0]) {
-				search[s]=i;
-				search[s+1]=0;
-				for(j=(*cur)+1,a=b=0;a<2;j++) {   /* a = search count */
-					if(j==opts) {					/* j = option count */
-						j=-1;						/* b = letter count */
-						continue; }
-					if(j==(*cur)) {
-						b++;
-						continue; }
-					if(b>=longopt) {
-                        b=0;
-                        a++; }
-					if(a==1 && !s)
-                        break;
-					if(strlen(option[j])>b
-						&& ((!a && s && !strncmpi(option[j]+b,search,s+1))
-						|| ((a || !s) && toupper(option[j][b])==toupper(i)))) {
-						if(a) s=0;
-						else s++;
-						if(y+(j-(*cur))+2>height+top) {
-							(*cur)=j;
-							gotoxy(SCRN_LEFT+left+1,SCRN_TOP+top+3);
-							textattr(lclr|(bclr<<4));
-							putch(30);	   /* put the up arrow */
-							if((*cur)==opts-1) {
-								gotoxy(SCRN_LEFT+left+1,SCRN_TOP+top+height-2);
-								putch(' '); }  /* delete the down arrow */
-							for(i=((*cur)+5)-height,j=0;i<(*cur)+1;i++,j++)
-								uprintf(SCRN_LEFT+left+3,SCRN_TOP+top+3+j
-									,i==(*cur) ? bclr|(LIGHTGRAY<<4)
-										: lclr|(bclr<<4)
-									,"%-*.*s",width-4,width-4,option[i]);
-							y=top+height-2;
-							if(bar)
-								(*bar)=height-5;
-							break; }
-						if(y-((*cur)-j)<top+3) {
-							(*cur)=j;
-							gotoxy(SCRN_LEFT+left+1,SCRN_TOP+top+3);
-							textattr(lclr|(bclr<<4));
-							if(!(*cur))
-								putch(' ');    /* Delete the up arrow */
-							gotoxy(SCRN_LEFT+left+1,SCRN_TOP+top+height-2);
-							putch(31);	   /* put the down arrow */
-							uprintf(SCRN_LEFT+left+3,SCRN_TOP+top+3
-								,bclr|(LIGHTGRAY<<4)
-								,"%-*.*s",width-4,width-4,option[(*cur)]);
-							for(i=1;i<height-4;i++) 	/* re-display options */
-								uprintf(SCRN_LEFT+left+3,SCRN_TOP+top+3+i
-									,lclr|(bclr<<4)
-									,"%-*.*s",width-4,width-4
-									,option[(*cur)+i]);
-							y=top+3;
-							if(bar)
-								(*bar)=0;
-							break; }
-						hidemouse();
-						gettext(SCRN_LEFT+3+left,SCRN_TOP+y
-							,SCRN_LEFT+left+width-2,SCRN_TOP+y,line);
-						for(i=1;i<width*2;i+=2)
-							line[i]=lclr|(bclr<<4);
-						puttext(SCRN_LEFT+3+left,SCRN_TOP+y
-							,SCRN_LEFT+left+width-2,SCRN_TOP+y,line);
-						if((*cur)>j)
-							y-=(*cur)-j;
-						else
-							y+=j-(*cur);
-						if(bar) {
-							if((*cur)>j)
-								(*bar)-=(*cur)-j;
-							else
-								(*bar)+=j-(*cur); }
-						(*cur)=j;
-                        gettext(SCRN_LEFT+3+left,SCRN_TOP+y
-							,SCRN_LEFT+left+width-2,SCRN_TOP+y,line);
-						for(i=1;i<width*2;i+=2)
-							line[i]=bclr|(LIGHTGRAY<<4);
-						puttext(SCRN_LEFT+3+left,SCRN_TOP+y
-							,SCRN_LEFT+left+width-2,SCRN_TOP+y,line);
-						showmouse();
-						break; } }
-				if(a==2)
-					s=0; }
-			else
-				switch(i) {
-					case CR:
-						if(!opts || (mode&WIN_XTR && (*cur)==opts-1))
-							break;
-						if(mode&WIN_ACT) {
-							hidemouse();
-							gettext(SCRN_LEFT+left,SCRN_TOP+top,SCRN_LEFT
-								+left+width-1,SCRN_TOP+top+height-1,win);
-							for(i=1;i<(width*height*2);i+=2)
-								win[i]=lclr|(cclr<<4);
-							j=(((y-top)*width)*2)+7+((width-4)*2);
-							for(i=(((y-top)*width)*2)+7;i<j;i+=2)
-                                win[i]=hclr|(cclr<<4);
-
-							puttext(SCRN_LEFT+left,SCRN_TOP+top,SCRN_LEFT
-								+left+width-1,SCRN_TOP+top+height-1,win);
-							showmouse(); }
-						else if(mode&WIN_SAV) {
-							hidemouse();
-							puttext(sav[api->savnum].left,sav[api->savnum].top
-								,sav[api->savnum].right,sav[api->savnum].bot
-								,sav[api->savnum].buf);
-							showmouse();
-							FREE(sav[api->savnum].buf);
-							api->savdepth--; }
-						return(*cur);
-					case ESC:
-						if(mode&WIN_ESC || (mode&WIN_CHE && api->changes)
-							&& !(mode&WIN_SAV)) {
-							hidemouse();
-							gettext(SCRN_LEFT+left,SCRN_TOP+top,SCRN_LEFT
-								+left+width-1,SCRN_TOP+top+height-1,win);
-							for(i=1;i<(width*height*2);i+=2)
-								win[i]=lclr|(cclr<<4);
-							puttext(SCRN_LEFT+left,SCRN_TOP+top,SCRN_LEFT
-								+left+width-1,SCRN_TOP+top+height-1,win);
-							showmouse(); }
-						else if(mode&WIN_SAV) {
-							hidemouse();
-							puttext(sav[api->savnum].left,sav[api->savnum].top
-								,sav[api->savnum].right,sav[api->savnum].bot
-								,sav[api->savnum].buf);
-							showmouse();
-							FREE(sav[api->savnum].buf);
-							api->savdepth--; }
-						return(-1); } } }
-	else
-		mswait(1);
-	}
-}
-
-
-/*************************************************************************/
-/* This function is a windowed input string input routine.               */
-/*************************************************************************/
-int uinput(int mode, char left, char top, char *prompt, char *str,
-	char max, int kmode)
-{
-	unsigned char c,tmp[81],save_buf[2048],in_win[2048]
-		,shade[160],width,height=3;
-	int i,j,plen,slen;
-
-hidemouse();
-plen=strlen(prompt);
-if(!plen)
-	slen=4;
-else
-	slen=6;
-width=plen+slen+max;
-if(mode&WIN_T2B)
-	top=(api->scrn_len/2)-(height/2)-2;
-if(mode&WIN_L2R)
-	left=36-(width/2);
-if(mode&WIN_SAV)
-	gettext(SCRN_LEFT+left,SCRN_TOP+top,SCRN_LEFT+left+width+1
-		,SCRN_TOP+top+height,save_buf);
-i=0;
-in_win[i++]='�';
-in_win[i++]=hclr|(bclr<<4);
-for(c=1;c<width-1;c++) {
-	in_win[i++]='�';
-	in_win[i++]=hclr|(bclr<<4); }
-in_win[i++]='�';
-in_win[i++]=hclr|(bclr<<4);
-in_win[i++]='�';
-in_win[i++]=hclr|(bclr<<4);
-
-if(plen) {
-	in_win[i++]=SP;
-	in_win[i++]=lclr|(bclr<<4); }
-
-for(c=0;prompt[c];c++) {
-	in_win[i++]=prompt[c];
-	in_win[i++]=lclr|(bclr<<4); }
-
-if(plen) {
-	in_win[i++]=':';
-	in_win[i++]=lclr|(bclr<<4);
-	c++; }
-
-for(c=0;c<max+2;c++) {
-	in_win[i++]=SP;
-	in_win[i++]=lclr|(bclr<<4); }
-
-in_win[i++]='�';
-in_win[i++]=hclr|(bclr<<4);
-in_win[i++]='�';
-in_win[i++]=hclr|(bclr<<4);
-for(c=1;c<width-1;c++) {
-	in_win[i++]='�';
-	in_win[i++]=hclr|(bclr<<4); }
-in_win[i++]='�';
-in_win[i++]=hclr|(bclr<<4);
-puttext(SCRN_LEFT+left,SCRN_TOP+top,SCRN_LEFT+left+width-1
-	,SCRN_TOP+top+height-1,in_win);
-
-if(bclr==BLUE) {
-	gettext(SCRN_LEFT+left+width,SCRN_TOP+top+1,SCRN_LEFT+left+width+1
-		,SCRN_TOP+top+(height-1),shade);
-	for(c=1;c<12;c+=2)
-		shade[c]=DARKGRAY;
-	puttext(SCRN_LEFT+left+width,SCRN_TOP+top+1,SCRN_LEFT+left+width+1
-		,SCRN_TOP+top+(height-1),shade);
-	gettext(SCRN_LEFT+left+2,SCRN_TOP+top+3,SCRN_LEFT+left+width+1
-		,SCRN_TOP+top+height,shade);
-	for(c=1;c<width*2;c+=2)
-		shade[c]=DARKGRAY;
-	puttext(SCRN_LEFT+left+2,SCRN_TOP+top+3,SCRN_LEFT+left+width+1
-		,SCRN_TOP+top+height,shade); }
-
-textattr(lclr|(bclr<<4));
-if(!plen)
-	gotoxy(SCRN_LEFT+left+2,SCRN_TOP+top+1);
-else
-	gotoxy(SCRN_LEFT+left+plen+4,SCRN_TOP+top+1);
-i=getstr(str,max,kmode);
-if(mode&WIN_SAV)
-	puttext(SCRN_LEFT+left,SCRN_TOP+top,SCRN_LEFT+left+width+1
-		,SCRN_TOP+top+height,save_buf);
-showmouse();
-return(i);
-}
-
-/****************************************************************************/
-/* Displays the message 'str' and waits for the user to select "OK"         */
-/****************************************************************************/
-void umsg(char *str)
-{
-	int i=0;
-	char *ok[2]={"OK",""};
-
-if(api->mode&UIFC_INMSG)	/* non-cursive */
-	return;
-api->mode|=UIFC_INMSG;
-if(api->savdepth) api->savnum++;
-ulist(WIN_SAV|WIN_MID,0,0,0,&i,0,str,ok);
-if(api->savdepth) api->savnum--;
-api->mode&=~UIFC_INMSG;
-}
-
-/****************************************************************************/
-/* Gets a string of characters from the user. Turns cursor on. Allows 	    */
-/* Different modes - K_* macros. ESC aborts input.                          */
-/* Cursor should be at END of where string prompt will be placed.           */
-/****************************************************************************/
-static int getstr(char *outstr, int max, long mode)
-{
-	uchar   ch,str[256],ins=0,buf[256],y;
-	int     i,j,k,f=0;	/* i=offset, j=length */
-#ifndef __FLAT__
-	union  REGS r;
-#endif
-
-cursor=_NORMALCURSOR;
-_setcursortype(cursor);
-y=wherey();
-if(mode&K_EDIT) {
-/***
-	truncsp(outstr);
-***/
-	outstr[max]=0;
-	textattr(bclr|(LIGHTGRAY<<4));
-	cputs(outstr);
-	textattr(lclr|(bclr<<4));
-	strcpy(str,outstr);
-	i=j=strlen(str);
-	while(inkey(1)==0) {
-#ifndef __FLAT__
-		if(api->mode&UIFC_MOUSE) {
-			r.w.ax=0x0006;		/* Get button release information */
-			r.w.bx=0x0000;		/* Left button */
-			INT_86(0x33,&r,&r);
-			if(r.w.bx) {		/* Left button release same as CR */
-				cursor=_NOCURSOR;
-				_setcursortype(cursor);
-				return(i); }
-			r.w.ax=0x0006;		/* Get button release information */
-			r.w.bx=0x0001;		/* Right button */
-			INT_86(0x33,&r,&r);
-			if(r.w.bx) {		/* Right button release same as ESC */
-				cursor=_NOCURSOR;
-				_setcursortype(cursor);
-				return(-1); } }
-#endif
-		mswait(1);
-		}
-	f=inkey(0);
-	gotoxy(wherex()-i,y);
-	if(!isprint(f&0xff) && f!=0x5300)
-		cputs(outstr);
-	else {
-		cprintf("%*s",i,"");
-		gotoxy(wherex()-i,y);
-		i=j=0; } }
-else
-	i=j=0;
-
-
-while(1) {
-
-
-	if(i>j) j=i;
-#ifndef __FLAT__
-	if(api->mode&UIFC_MOUSE) {
-		r.w.ax=0x0006;		/* Get button release information */
-		r.w.bx=0x0000;		/* Left button */
-		INT_86(0x33,&r,&r);
-		if(r.w.bx)			/* Left button release same as CR */
-			break;
-		r.w.ax=0x0006;		/* Get button release information */
-		r.w.bx=0x0001;		/* Right button */
-		INT_86(0x33,&r,&r);
-		if(r.w.bx) {		/* Right button release same as ESC */
-			cursor=_NOCURSOR;
-			_setcursortype(cursor);
-			return(-1); } }
-#endif
-	if(f || inkey(1)) {
-		if(f) k=f;			/* First key */
-		else k=inkey(0);
-		f=0;
-		ch=k&0xff;
-		if(!ch) {
-			switch(k>>8) {
-				case 0x3b:	/* F1 Help */
-					help();
-					continue;
-				case 0x4b:	/* left arrow */
-					if(i) {
-						gotoxy(wherex()-1,y);
-						i--; }
-					continue;
-				case 0x4d:	/* right arrow */
-					if(i<j) {
-						gotoxy(wherex()+1,y);
-						i++; }
-					continue;
-				case 0x47:	/* home */
-					if(i) {
-						gotoxy(wherex()-i,y);
-						i=0; }
-					continue;
-				case 0x4f:	/* end */
-					if(i<j) {
-						gotoxy(wherex()+(j-i),y);
-						i=j; }
-					continue;
-				case 0x52:	/* insert */
-					ins=!ins;
-					if(ins)
-						cursor=_SOLIDCURSOR;
-					else
-						cursor=_NORMALCURSOR;
-					_setcursortype(cursor);
-					continue;
-				case 0x53:	/* delete */
-					if(i<j) {
-						gettext(wherex()+1,y,wherex()+(j-i),y,buf);
-						puttext(wherex(),y,wherex()+(j-i)-1,y,buf);
-						gotoxy(wherex()+(j-i),y);
-						putch(SP);
-						gotoxy(wherex()-((j-i)+1),y);
-						for(k=i;k<j;k++)
-							str[k]=str[k+1];
-						j--; }
-					continue; }
-			continue; }
-		if(ch==03 || ch==ESC) {
-			cursor=_NOCURSOR;
-			_setcursortype(cursor);
-			return(-1); }
-		if(ch==BS && i) {
-			if(i==j) {
-				cputs("\b \b");
-				j--;
-				i--; }
-			else {
-				gettext(wherex(),y,wherex()+(j-i),y,buf);
-				puttext(wherex()-1,y,wherex()+(j-i)-1,y,buf);
-				gotoxy(wherex()+(j-i),y);
-				putch(SP);
-				gotoxy(wherex()-((j-i)+2),y);
-				i--;
-				j--;
-				for(k=i;k<j;k++)
-					str[k]=str[k+1]; }
-			continue; }
-		if(ch==CR)
-			break;
-		if(ch==24) {  /* ctrl-x  */
-			if(j) {
-				gotoxy(wherex()-i,y);
-				cprintf("%*s",j,"");
-				gotoxy(wherex()-j,y);
-				i=j=0; }
-			continue; }
-		if(ch==25) {  /* ctrl-y */
-			if(i<j) {
-				cprintf("%*s",(j-i),"");
-				gotoxy(wherex()-(j-i),y);
-				j=i; }
-			continue; }
-		if(mode&K_NUMBER && !isdigit(ch))
-			continue;
-		if(mode&K_ALPHA && !isalpha(ch))
-			continue;
-		if((ch>=SP || (ch==1 && mode&K_MSG)) && i<max && (!ins || j<max)) {
-			if(mode&K_UPPER)
-				ch=toupper(ch);
-			if(ins) {
-				gettext(wherex(),y,wherex()+(j-i),y,buf);
-				puttext(wherex()+1,y,wherex()+(j-i)+1,y,buf);
-				for(k=++j;k>i;k--)
-					str[k]=str[k-1]; }
-			putch(ch);
-			str[i++]=ch; } }
-	else
-		mswait(1);
-	}
-str[j]=0;
-if(mode&K_EDIT) {
-	truncsp(str);
-	if(strcmp(outstr,str))
-		api->changes=1; }
-else {
-	if(j)
-		api->changes=1; }
-strcpy(outstr,str);
-cursor=_NOCURSOR;
-_setcursortype(cursor);
-return(j);
-}
-
-/****************************************************************************/
-/* Performs printf() through puttext() routine								*/
-/****************************************************************************/
-static int uprintf(char x, char y, char attr, char *fmat, ...)
-{
-	va_list argptr;
-	char str[256],buf[512];
-	int i,j;
-
-    va_start(argptr,fmat);
-    vsprintf(str,fmat,argptr);
-    va_end(argptr);
-    for(i=j=0;str[i];i++) {
-        buf[j++]=str[i];
-        buf[j++]=attr; }
-    puttext(x,y,x+(i-1),y,buf);
-    return(i);
-}
-
-
-/****************************************************************************/
-/* Display bottom line of screen in inverse                                 */
-/****************************************************************************/
-void bottomline(int line)
-{
-	int i=4;
-uprintf(i,api->scrn_len+1,bclr|(cclr<<4),"F1 ");
-i+=3;
-uprintf(i,api->scrn_len+1,BLACK|(cclr<<4),"Help  ");
-i+=6;
-if(line&BL_GET) {
-	uprintf(i,api->scrn_len+1,bclr|(cclr<<4),"F5 ");
-	i+=3;
-	uprintf(i,api->scrn_len+1,BLACK|(cclr<<4),"Copy Item  ");
-	i+=11; }
-if(line&BL_PUT) {
-	uprintf(i,api->scrn_len+1,bclr|(cclr<<4),"F6 ");
-	i+=3;
-	uprintf(i,api->scrn_len+1,BLACK|(cclr<<4),"Paste  ");
-    i+=7; }
-if(line&BL_INS) {
-	uprintf(i,api->scrn_len+1,bclr|(cclr<<4),"INS ");
-	i+=4;
-	uprintf(i,api->scrn_len+1,BLACK|(cclr<<4),"Add Item  ");
-	i+=10; }
-if(line&BL_DEL) {
-	uprintf(i,api->scrn_len+1,bclr|(cclr<<4),"DEL ");
-    i+=4;
-	uprintf(i,api->scrn_len+1,BLACK|(cclr<<4),"Delete Item  ");
-	i+=13; }
-uprintf(i,api->scrn_len+1,bclr|(cclr<<4),"ESC ");
-i+=4;
-uprintf(i,api->scrn_len+1,BLACK|(cclr<<4),"Exit");
-i+=4;
-gotoxy(i,api->scrn_len+1);
-textattr(BLACK|(cclr<<4));
-clreol();
-}
-
-
-/*****************************************************************************/
-/* Generates a 24 character ASCII string that represents the time_t pointer  */
-/* Used as a replacement for ctime()                                         */
-/*****************************************************************************/
-char *utimestr(time_t *intime)
-{
-	static char str[25];
-	char wday[4],mon[4],mer[3],hour;
-	struct tm *gm;
-
-gm=localtime(intime);
-switch(gm->tm_wday) {
-	case 0:
-		strcpy(wday,"Sun");
-		break;
-	case 1:
-		strcpy(wday,"Mon");
-		break;
-	case 2:
-		strcpy(wday,"Tue");
-		break;
-	case 3:
-		strcpy(wday,"Wed");
-		break;
-	case 4:
-		strcpy(wday,"Thu");
-		break;
-	case 5:
-		strcpy(wday,"Fri");
-		break;
-	case 6:
-		strcpy(wday,"Sat");
-		break; }
-switch(gm->tm_mon) {
-	case 0:
-		strcpy(mon,"Jan");
-		break;
-	case 1:
-		strcpy(mon,"Feb");
-		break;
-	case 2:
-		strcpy(mon,"Mar");
-		break;
-	case 3:
-		strcpy(mon,"Apr");
-		break;
-	case 4:
-		strcpy(mon,"May");
-		break;
-	case 5:
-		strcpy(mon,"Jun");
-		break;
-	case 6:
-		strcpy(mon,"Jul");
-		break;
-	case 7:
-		strcpy(mon,"Aug");
-		break;
-	case 8:
-		strcpy(mon,"Sep");
-		break;
-	case 9:
-		strcpy(mon,"Oct");
-		break;
-	case 10:
-		strcpy(mon,"Nov");
-		break;
-	case 11:
-		strcpy(mon,"Dec");
-		break; }
-if(gm->tm_hour>12) {
-	strcpy(mer,"pm");
-	hour=gm->tm_hour-12; }
-else {
-	if(!gm->tm_hour)
-		hour=12;
-	else
-		hour=gm->tm_hour;
-	strcpy(mer,"am"); }
-sprintf(str,"%s %s %02d %4d %02d:%02d %s",wday,mon,gm->tm_mday,1900+gm->tm_year
-	,hour,gm->tm_min,mer);
-return(str);
-}
-
-#if 0
-/****************************************************************************/
-/* Truncates white-space chars off end of 'str' and terminates at first tab */
-/****************************************************************************/
-void truncsp(char *str)
-{
-	char c,tmp[256];
-
-	tmp[0]=TAB;
-	tmp[1]=0;
-	str[strcspn(str,tmp)]=0;
-	c=strlen(str);
-	while(c && (uchar)str[c-1]<=SP) c--;
-	str[c]=0;
-}
-#endif
-
-/****************************************************************************/
-/* Status popup/down function, see uifc.h for details.						*/
-/****************************************************************************/
-void upop(char *str)
-{
-	static char sav[26*3*2];
-	char buf[26*3*2];
-	int i,j,k;
-
-	hidemouse();
-	if(!str) {
-		puttext(28,12,53,14,sav);
-		showmouse();
-		return; }
-	gettext(28,12,53,14,sav);
-	memset(buf,SP,25*3*2);
-	for(i=1;i<26*3*2;i+=2)
-		buf[i]=(hclr|(bclr<<4));
-	buf[0]='�';
-	for(i=2;i<25*2;i+=2)
-		buf[i]='�';
-	buf[i]='�'; i+=2;
-	buf[i]='�'; i+=2;
-	i+=2;
-	k=strlen(str);
-	i+=(((23-k)/2)*2);
-	for(j=0;j<k;j++,i+=2) {
-		buf[i]=str[j];
-		buf[i+1]|=BLINK; }
-	i=((25*2)+1)*2;
-	buf[i]='�'; i+=2;
-	buf[i]='�'; i+=2;
-	for(;i<((26*3)-1)*2;i+=2)
-		buf[i]='�';
-	buf[i]='�';
-
-	puttext(28,12,53,14,buf);
-	showmouse();
-}
-
-/****************************************************************************/
-/* Sets the current help index by source code file and line number.			*/
-/****************************************************************************/
-void sethelp(int line, char* file)
-{
-    helpline=line;
-    helpfile=file;
-}
-
-/************************************************************/
-/* Help (F1) key function. Uses helpbuf as the help input.	*/
-/************************************************************/
-void help()
-{
-	char *savscrn,*buf,inverse=0,high=0
-		,hbuf[HELPBUF_SIZE],str[256];
-    char *p;
-	uint i,j,k,len;
-	unsigned short line;
-	long l;
-	FILE *fp;
-#ifndef __FLAT__
-	union  REGS r;
-#endif
-
-	_setcursortype(_NOCURSOR);
-
-	if((savscrn=(char *)MALLOC(80*25*2))==NULL) {
-		cprintf("UIFC line %d: error allocating %u bytes\r\n"
-			,__LINE__,80*25*2);
-		_setcursortype(cursor);
-		return; }
-	if((buf=(char *)MALLOC(76*21*2))==NULL) {
-		cprintf("UIFC line %d: error allocating %u bytes\r\n"
-			,__LINE__,76*21*2);
-		FREE(savscrn);
-		_setcursortype(cursor);
-		return; }
-	hidemouse();
-	gettext(1,1,80,25,savscrn);
-	memset(buf,SP,76*21*2);
-	for(i=1;i<76*21*2;i+=2)
-		buf[i]=(hclr|(bclr<<4));
-	buf[0]='�';
-	for(i=2;i<30*2;i+=2)
-		buf[i]='�';
-	buf[i]='�'; i+=4;
-	buf[i]='O'; i+=2;
-	buf[i]='n'; i+=2;
-	buf[i]='l'; i+=2;
-	buf[i]='i'; i+=2;
-	buf[i]='n'; i+=2;
-	buf[i]='e'; i+=4;
-	buf[i]='H'; i+=2;
-	buf[i]='e'; i+=2;
-	buf[i]='l'; i+=2;
-	buf[i]='p'; i+=4;
-	buf[i]='�'; i+=2;
-	for(j=i;j<i+(30*2);j+=2)
-		buf[j]='�';
-	i=j;
-	buf[i]='�'; i+=2;
-	j=i;	/* leave i alone */
-	for(k=0;k<19;k++) { 		/* the sides of the box */
-		buf[j]='�'; j+=2;
-		j+=(74*2);
-		buf[j]='�'; j+=2; }
-	buf[j]='�'; j+=2;
-	for(k=j;k<j+(23*2);k+=2)
-		buf[k]='�';
-	buf[k]='�'; k+=4;
-	buf[k]='H'; k+=2;
-	buf[k]='i'; k+=2;
-	buf[k]='t'; k+=4;
-	buf[k]='a'; k+=2;
-	buf[k]='n'; k+=2;
-	buf[k]='y'; k+=4;
-	buf[k]='k'; k+=2;
-	buf[k]='e'; k+=2;
-	buf[k]='y'; k+=4;
-	buf[k]='t'; k+=2;
-	buf[k]='o'; k+=4;
-	buf[k]='c'; k+=2;
-	buf[k]='o'; k+=2;
-	buf[k]='n'; k+=2;
-	buf[k]='t'; k+=2;
-	buf[k]='i'; k+=2;
-	buf[k]='n'; k+=2;
-	buf[k]='u'; k+=2;
-	buf[k]='e'; k+=4;
-	buf[k]='�'; k+=2;
-	for(j=k;j<k+(24*2);j+=2)
-		buf[j]='�';
-	buf[j]='�';
-
-	if(!api->helpbuf) {
-		if((fp=_fsopen(api->helpixbfile,"rb",SH_DENYWR))==NULL)
-			sprintf(hbuf," ERROR  Cannot open help index:\r\n          %s"
-				,api->helpixbfile);
-		else {
-			p=strrchr(helpfile,'/');
-			if(p==NULL)
-				p=strrchr(helpfile,'\\');
-			if(p==NULL)
-				p=helpfile;
-			else
-				p++;
-			l=-1L;
-			while(!feof(fp)) {
-				if(!fread(str,12,1,fp))
-					break;
-				str[12]=0;
-				fread(&line,2,1,fp);
-				if(stricmp(str,p) || line!=helpline) {
-					fseek(fp,4,SEEK_CUR);
-					continue; }
-				fread(&l,4,1,fp);
-				break; }
-			fclose(fp);
-			if(l==-1L)
-				sprintf(hbuf," ERROR  Cannot locate help key (%s:%u) in:\r\n"
-					"         %s",p,helpline,api->helpixbfile);
-			else {
-				if((fp=_fsopen(api->helpdatfile,"rb",SH_DENYWR))==NULL)
-					sprintf(hbuf," ERROR  Cannot open help file:\r\n          %s"
-						,api->helpdatfile);
-				else {
-					fseek(fp,l,SEEK_SET);
-					fread(hbuf,HELPBUF_SIZE,1,fp);
-					fclose(fp); } } } }
-	else
-		strcpy(hbuf,api->helpbuf);
-
-	len=strlen(hbuf);
-
-	i+=78*2;
-	for(j=0;j<len;j++,i+=2) {
-		if(hbuf[j]==LF) {
-			while(i%(76*2)) i++;
-			i+=2; }
-		else if(hbuf[j]==2) {		 /* Ctrl-b toggles inverse */
-			inverse=!inverse;
-			i-=2; }
-		else if(hbuf[j]==1) {		 /* Ctrl-a toggles high intensity */
-			high=!high;
-			i-=2; }
-		else if(hbuf[j]!=CR) {
-			buf[i]=hbuf[j];
-			buf[i+1]=inverse ? (bclr|(cclr<<4))
-				: high ? (hclr|(bclr<<4)) : (lclr|(bclr<<4)); } }
-	puttext(3,3,78,23,buf);
-	showmouse();
-	while(1) {
-		if(inkey(1)) {
-			inkey(0);
-			break; }
-	#ifndef __FLAT__
-		if(api->mode&UIFC_MOUSE) {
-			r.w.ax=0x0006;		/* Get button release information */
-			r.w.bx=0x0000;		/* Left button */
-			INT_86(0x33,&r,&r);
-			if(r.w.bx)			/* Left button release same as CR */
-				break;
-			r.w.ax=0x0006;		/* Get button release information */
-			r.w.bx=0x0001;		/* Right button */
-			INT_86(0x33,&r,&r);
-			if(r.w.bx)			/* Left button release same as CR */
-				break; }
-	#endif
-		mswait(1);
-		}
-
-	hidemouse();
-	puttext(1,1,80,25,savscrn);
-	showmouse();
-	FREE(savscrn);
-	FREE(buf);
-	_setcursortype(cursor);
-}
-
diff --git a/src/uifc/uifc.h b/src/uifc/uifc.h
deleted file mode 100644
index ef7a6663b7..0000000000
--- a/src/uifc/uifc.h
+++ /dev/null
@@ -1,335 +0,0 @@
-/* uifc.h */
-
-/* Rob Swindell's Text-mode User Interface Library */
-
-/* $Id$ */
-
-/****************************************************************************
- * @format.tab-size 4		(Plain Text/Source Code File Header)			*
- * @format.use-tabs true	(see http://www.synchro.net/ptsc_hdr.html)		*
- *																			*
- * Copyright 2002 Rob Swindell - http://www.synchro.net/copyright.html		*
- *																			*
- * This program is free software; you can redistribute it and/or			*
- * modify it under the terms of the GNU General Public License				*
- * as published by the Free Software Foundation; either version 2			*
- * of the License, or (at your option) any later version.					*
- * See the GNU General Public License for more details: gpl.txt or			*
- * http://www.fsf.org/copyleft/gpl.html										*
- *																			*
- * Anonymous FTP access to the most recent released source is available at	*
- * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net	*
- *																			*
- * Anonymous CVS access to the development source and modification history	*
- * is available at cvs.synchro.net:/cvsroot/sbbs, example:					*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs login			*
- *     (just hit return, no password is necessary)							*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs checkout src		*
- *																			*
- * For Synchronet coding style and modification guidelines, see				*
- * http://www.synchro.net/source.html										*
- *																			*
- * You are encouraged to submit any modifications (preferably in Unix diff	*
- * format) via e-mail to mods@synchro.net									*
- *																			*
- * Note: If this box doesn't appear square, then you need to fix your tabs.	*
- ****************************************************************************/
-
-#include <time.h>
-#include <fcntl.h>
-#include <ctype.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdarg.h>
-#include <stdlib.h>
-/* OS Specific */
-#if defined(_WIN32)
-    #include <windows.h>
-#endif
-#if !defined(__unix__)
-    #include <io.h>
-#endif
-#if !defined(__FreeBSD__)
-	#include <malloc.h>		/* malloc prototype */
-#endif
-#if (defined(__unix__) || defined(_WIN32)) && !defined(__FLAT__)
-    #define __FLAT__
-#endif
-
-#if defined(__FLAT__)
-	#define far
-#endif
-
-#if !defined(__FLAT__)
-    #include <bios.h>
-#endif
-
-#if defined(__unix__) && !defined(stricmp)
-    #define stricmp strcasecmp
-	#define strnicmp strncasecmp
-#endif
-
-/****************************************************************************/
-/* MALLOC/FREE Macros for various compilers and environments				*/
-/* MALLOC is used for allocations of 64k or less							*/
-/* FREE is used to free buffers allocated with MALLOC						*/
-/* LMALLOC is used for allocations of possibly larger than 64k				*/
-/* LFREE is used to free buffers allocated with LMALLOC 					*/
-/* REALLOC is used to re-size a previously MALLOCed or LMALLOCed buffer 	*/
-/****************************************************************************/
-#if defined(__COMPACT__) || defined(__LARGE__) || defined(__HUGE__)
-	#if defined(__TURBOC__)
-		#define REALLOC(x,y) farrealloc(x,y)
-		#define LMALLOC(x) farmalloc(x)
-		#define MALLOC(x) farmalloc(x)
-		#define LFREE(x) farfree(x)
-		#define FREE(x) farfree(x)
-	#elif defined(__WATCOMC__)
-		#define REALLOC realloc
-		#define LMALLOC(x) halloc(x,1)	/* far heap, but slow */
-		#define MALLOC malloc			/* far heap, but 64k max */
-		#define LFREE hfree
-		#define FREE free
-	#else	/* Other 16-bit Compiler */
-		#define REALLOC realloc
-		#define LMALLOC malloc
-		#define MALLOC malloc
-		#define LFREE free
-		#define FREE free
-	#endif
-#else		/* 32-bit Compiler or Small Memory Model */
-	#define REALLOC realloc
-	#define LMALLOC malloc
-	#define MALLOC malloc
-	#define LFREE free
-	#define FREE free
-#endif
-
-#ifdef __DPMI32__
-	#define INT_86(i,j,k) int386(i,j,k)
-#else
-	#define INT_86(i,j,k) int86(i,j,k)
-#endif
-
-#ifdef __FLAT__
-	#define MAX_OPTS	10000
-	#define MSK_ON		0xf0000000
-	#define MSK_OFF 	0x0fffffff
-	#define MSK_INS 	0x10000000
-	#define MSK_DEL 	0x20000000
-	#define MSK_GET 	0x30000000
-	#define MSK_PUT 	0x40000000
-#else
-	#define MAX_OPTS	500 	/* Maximum number of options per menu call */
-	#define MSK_ON		0xf000
-	#define MSK_OFF 	0x0fff
-	#define MSK_INS 	0x1000
-	#define MSK_DEL 	0x2000
-	#define MSK_GET 	0x3000
-	#define MSK_PUT 	0x4000
-#endif
-#define MAX_OPLN	75		/* Maximum length of each option per menu call */
-#define MAX_BUFS	7		/* Maximum number of screen buffers to save */
-#define MIN_LINES   20      /* Minimum number of screen lines supported */
-#define MAX_LINES   60      /* Maximum number of screen rows supported */ 
-#define MAX_BFLN	80*MAX_LINES*2	/* Maximum size of screen buffers */
-
-#ifndef uint
-#define uint unsigned int
-#endif
-
-                            /* Bits in uifcapi_t.mode */
-#define UIFC_INMSG	(1<<0)	/* Currently in Message Routine non-recursive */
-#define UIFC_MOUSE	(1<<1)	/* Mouse installed and available */
-#define UIFC_MONO	(1<<2)	/* Force monochrome mode */
-#define UIFC_COLOR	(1<<3)	/* Force color mode */
-
-                            /* Bits in uifcapi_t.list mode */
-#define WIN_ORG 	(1<<0)	/* Original menu - destroy valid screen area */
-#define WIN_SAV 	(1<<1)	/* Save existing text and replace when finished */
-#define WIN_ACT 	(1<<2)	/* Menu remains active after a selection */
-#define WIN_L2R 	(1<<3)	/* Center the window based on 'width'   */
-#define WIN_T2B 	(1<<4)	/* Center the window based on 'height'  */
-#define WIN_INS 	(1<<5)	/* Allows user to user insert key */
-#define WIN_INSACT	(1<<6)	/* Remains active after insert key */
-#define WIN_DEL 	(1<<7)	/* Allows user to use delete key */
-#define WIN_DELACT	(1<<8)	/* Remains active after delete key */
-#define WIN_ESC 	(1<<9)	/* Screen is active when escape is hit			 */
-#define WIN_RHT 	(1<<10) /* Place window against right side of screen */
-#define WIN_BOT 	(1<<11) /* Place window against botton of screen */
-#define WIN_GET 	(1<<12) /* Allows F5 to Get a menu item */
-#define WIN_PUT 	(1<<13) /* Allows F6 to Put a menu item */
-#define WIN_CHE 	(1<<14) /* Stay active after escape if changes */
-#define WIN_XTR 	(1<<15) /* Add extra line at end for inserting at end */
-
-#define WIN_MID WIN_L2R|WIN_T2B  /* Place window in middle of screen */
-
-#define SCRN_TOP	3
-#define SCRN_LEFT	5
-#define SCRN_RIGHT  76
-
-								/* Bits in 'mode' for getkey and getstr     */
-#define K_UPPER 	(1L<<0) 	/* Converts all letters to upper case		*/
-#define K_UPRLWR	(1L<<1) 	/* Upper/Lower case automatically			*/
-#define K_NUMBER	(1L<<2) 	/* Allow numbers only						*/
-#define K_WRAP		(1L<<3) 	/* Allows word wrap 						*/
-#define K_MSG		(1L<<4) 	/* Allows ANSI, ^N ^A ^G					*/
-#define K_SPIN		(1L<<5) 	/* Spinning cursor (same as SPIN)			*/
-#define K_LINE		(1L<<6) 	/* Input line (inverse color)				*/
-#define K_EDIT		(1L<<7) 	/* Edit string passed						*/
-#define K_CHAT		(1L<<8) 	/* In chat multi-chat						*/
-#define K_NOCRLF	(1L<<9) 	/* Don't print CRLF after string input      */
-#define K_ALPHA 	(1L<<10)	/* Only allow alphabetic characters 		*/
-
-#define HELPBUF_SIZE 4000
-
-#ifndef TAB
-									/* Control characters */
-#define STX 	0x02				/* Start of text			^B	*/
-#define ETX 	0x03				/* End of text				^C	*/
-#define BS		'\b'				/* Back space				^H	*/
-#define TAB 	'\t'				/* Horizontal tabulation	^I	*/
-#define LF		'\n'				/* Line feed				^J	*/
-#define FF		0x0c				/* Form feed				^L	*/
-#define CR		'\r'				/* Carriage return			^M	*/
-#define ESC 	0x1b				/* Escape					^[	*/
-#define SP      ' '                 /* Space                        */
-
-#endif
-
-#define CLREOL 256
-
-#ifndef uchar				/* Short-hand for unsigned data types */
-#define uchar unsigned char
-#endif
-#ifndef uint
-#define uint unsigned int
-#endif
-#ifndef ulong
-#define ulong unsigned long
-#endif
-
-#ifndef BOOL
-#define BOOL    int
-#define TRUE    1
-#define FALSE   0
-#endif
-
-typedef struct {
-	uint    left,top,right,bot;
-    uchar   *buf;
-} win_t;
-
-#if !defined(__FLAT__)
-    /* LCLOLL.ASM */
-    int lclini(int);
-    void lclxy(int,int);
-    int lclwx(void);
-    int lclwy(void);
-    int lclatr(int);
-    void lputc(int);
-    long lputs(char far *);
-#endif    
-
-#if defined(__OS2__) || !defined(__FLAT__)
-void mswait(int msecs);
-extern mswtyp;
-#endif
-
-typedef struct {
-/****************************************************************************/
-/* Size of the structure (for version compatibility verification).			*/
-/****************************************************************************/
-    size_t  size;
-/****************************************************************************/
-/* Controls general UIFC library behavior.									*/
-/****************************************************************************/
-    long    mode;
-/****************************************************************************/
-/* Set to TRUE when changes to data have been made by input function.		*/ 
-/****************************************************************************/
-    BOOL    changes;
-/****************************************************************************/
-/* The overlapped-window save buffer number.								*/
-/****************************************************************************/
-    uint    savnum;
-/****************************************************************************/
-/* The current overlapped-window save buffer depth.							*/
-/****************************************************************************/
-    uint    savdepth;
-/****************************************************************************/
-/* Screen length															*/
-/****************************************************************************/
-    uint    scrn_len;
-/****************************************************************************/
-/* Alternative method of setting current help text.							*/
-/****************************************************************************/
-    char*   helpbuf;
-/****************************************************************************/
-/* Location of the help data and index files.								*/
-/****************************************************************************/
-    char    helpdatfile[256];
-    char    helpixbfile[256];
-/****************************************************************************/
-/* Exit/uninitialize function.												*/
-/****************************************************************************/
-    void    (*bail) (void);
-/****************************************************************************/
-/* Fill the screen with the appropriate background attribute.				*/
-/* str is the title for the application banner.								*/
-/* Returns 0 on success, non-zero on failure.								*/
-/****************************************************************************/
-    int     (*scrn) (char* str);
-/****************************************************************************/
-/* Popup a message, maybe wait for the user to hit a key or click button.	*/
-/****************************************************************************/
-    void    (*msg)  (char* str);
-/****************************************************************************/
-/* Popup/down a status message.												*/
-/* str is the message to display on popup.									*/
-/* if str==NULL, then the the status is to be cleared (popdown).			*/
-/****************************************************************************/
-    void    (*pop)  (char* str);
-/****************************************************************************/
-/* General menu function.													*/
-/* mode contains WIN_* flags to control display and functionality.			*/
-/* left, top and width specify desired screen locations and window size.	*/
-/* cur is a pointer to the current (default) option.						*/
-/* bar is a pointer to the current location of the lightbar (which used).	*/
-/* title is the caption for the menu.										*/
-/* Menus can centered left to right and top to bottom automatically.		*/
-/* mode bits are set with macros WIN_*.										*/
-/* option is an array of char arrays, first element of last char array		*/
-/* must be NULL.															*/
-/* Returns the 0-based selected option number, -1 for ESC, or the selected	*/
-/* option number OR'd with MSK_INS, MSK_DEL, MSK_GET, or MSK_PUT.			*/
-/****************************************************************************/
-    int     (*list) (int mode, char left, int top, char width, int* dflt
-                        ,int* bar, char *title, char** option);
-/****************************************************************************/
-/* Windowed string input routine.											*/
-/* mode contains WIN_* flags to control display and functionality.			*/
-/* left and top specify desired screen location.							*/
-/* prompt is displayed before the input is requested.						*/
-/* str is the string to input or edit.										*/
-/* len is the maximum length of the string.									*/
-/* kmode contains flags that control the string input (K_* macros).			*/
-/* This function sets uifcapi_t.changes to TRUE if the string is modified.	*/
-/* Returns the length of the string or -1 on escape/abort.					*/
-/****************************************************************************/
-    int     (*input)(int mode, char left, char top, char* prompt, char* str
-            	        ,char len, int kmode);
-/****************************************************************************/
-/* Sets the current help index by source code file and line number.			*/
-/****************************************************************************/
-    void    (*sethelp)(int line, char* file);
-} uifcapi_t;
-
-/****************************************************************************/
-/* Initialization routines for each UIFC implementation.					*/
-/* Returns 0 on success, non-zero on failure.								*/
-/****************************************************************************/
-int uifcini(uifcapi_t*);	/* Original implementation based on conio		*/
-int uifcinix(uifcapi_t*);	/* Standard I/O implementation					*/
-int uifcinid(uifcapi_t*);	/* Unix libdialog implementation (by Deuce)		*/
-/****************************************************************************/
diff --git a/src/uifc/uifcd.c b/src/uifc/uifcd.c
deleted file mode 100644
index b82c6d1a88..0000000000
--- a/src/uifc/uifcd.c
+++ /dev/null
@@ -1,420 +0,0 @@
-/* uifcd.c */
-
-/* Unix libdialog implementation of UIFC library (by Deuce)	*/
-
-/* $Id$ */
-
-/****************************************************************************
- * @format.tab-size 4		(Plain Text/Source Code File Header)			*
- * @format.use-tabs true	(see http://www.synchro.net/ptsc_hdr.html)		*
- *																			*
- * Copyright 2002 Rob Swindell - http://www.synchro.net/copyright.html		*
- *																			*
- * This program is free software; you can redistribute it and/or			*
- * modify it under the terms of the GNU General Public License				*
- * as published by the Free Software Foundation; either version 2			*
- * of the License, or (at your option) any later version.					*
- * See the GNU General Public License for more details: gpl.txt or			*
- * http://www.fsf.org/copyleft/gpl.html										*
- *																			*
- * Anonymous FTP access to the most recent released source is available at	*
- * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net	*
- *																			*
- * Anonymous CVS access to the development source and modification history	*
- * is available at cvs.synchro.net:/cvsroot/sbbs, example:					*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs login			*
- *     (just hit return, no password is necessary)							*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs checkout src		*
- *																			*
- * For Synchronet coding style and modification guidelines, see				*
- * http://www.synchro.net/source.html										*
- *																			*
- * You are encouraged to submit any modifications (preferably in Unix diff	*
- * format) via e-mail to mods@synchro.net									*
- *																			*
- * Note: If this box doesn't appear square, then you need to fix your tabs.	*
- ****************************************************************************/
-
-#include "uifc.h"
-#include "dialog.h"
-
-static char app_title[81]="";
-static char *helpfile=0;
-static uint helpline=0;
-static uifcapi_t* api;
-
-/* Prototypes */
-static void help();
-
-/* API routines */
-static void uifcbail(void);
-static int uscrn(char *str);
-static int ulist(int mode, char left, int top, char width, int *dflt, int *bar
-					,char *title, char **option);
-static int uinput(int imode, char left, char top, char *prompt, char *str
-					,char len ,int kmode);
-static void umsg(char *str);
-static void upop(char *str);
-static void sethelp(int line, char* file);
-
-/****************************************************************************/
-/* Initialization function, see uifc.h for details.                         */
-/* Returns 0 on success.                                                    */
-/****************************************************************************/
-int uifcinid(uifcapi_t* uifcapi)
-{
-
-    if(uifcapi==NULL || uifcapi->size!=sizeof(uifcapi_t))
-        return(-1);
-
-    api=uifcapi;
-
-    /* install function handlers */
-    api->bail=uifcbail;
-    api->scrn=uscrn;
-    api->msg=umsg;
-    api->pop=upop;
-    api->list=ulist;
-    api->input=uinput;
-    api->sethelp=sethelp;
-
-    setvbuf(stdout,NULL,_IONBF,0);
-    api->scrn_len=24;
-
-    init_dialog();
-
-    return(0);
-}
-
-/****************************************************************************/
-/* Exit/uninitialize UIFC implementation.                                   */
-/****************************************************************************/
-void uifcbail(void)
-{
-    end_dialog();
-}
-
-/****************************************************************************/
-/* Clear screen, fill with background attribute, display application title. */
-/* Returns 0 on success.                                                    */
-/****************************************************************************/
-int uscrn(char *str)
-{
-	sprintf(app_title,"%.*s",sizeof(app_title)-1,str);
-	/**********************************************************************/
-    /* ToDo - Does not display application title... mostly 'cause I clear */
-	/* the screen so often                                                */
-    /**********************************************************************/
-	dialog_clear();
-    return(0);
-}
-
-/**************************************************************************/
-/* General menu display function. see uifc.h for details                  */
-/**************************************************************************/
-int ulist(int mode, char left, int top, char width, int *cur, int *bar
-	, char *title, char **option)
-{
-
-    int cnt;
-    int cnt2;
-	int options;
-	int freecnt;
-    int i;
-	int	scrollpos;
-	int height=14;	/* default menu height */
-	size_t app_title_len;
-    char **it;
-    char str[128];
-    char tmpstr[128];	 //	Used for restoring the <-- At End --> bit
-    char tmpstr2[128];	//  for Add and Paste
-    int ret;
-
-	/* Count number of menu options */
-    for(cnt=0;cnt<MAX_OPTS;cnt++)
-		if(option[cnt][0]==0)
-	   		break;
-	options=cnt;
-	freecnt=cnt+5;	/* Add, Delete, Copy, Paste, At End */
-
-    // Allocate and fill **it
-    it=(char **)MALLOC(sizeof(char *)*2*(freecnt));
-	if(it==NULL)
-		return(-1);
-
-    for(i=0;i<freecnt*2;i++)  {
-        it[i]=(char *)MALLOC(MAX_OPLN+1);
-		if(it[i]==NULL)
-			return(-1);
-	}
-
-    strcpy(str,"1");
-
-    cnt2 = 0;
-    for(i=0;i<cnt;i++)  {
-		sprintf(it[cnt2++],"%u",i+1);
-		strcpy(it[cnt2++],option[i]);
-
-		/* Adjust width if it's too small */
-		if(width<strlen(option[i])+12)  
-			width=strlen(option[i])+12;
-    }
-
-	// Make up for expanding first column in width adjustment.
-	i=cnt;
-	while(i>9)  {
-		i /= 10;
-		width+=1;
-	}
-
-    if(mode&WIN_INS)  {
-		strcpy(it[cnt2++],"A");	/* Changed from "I" */
-        strcpy(it[cnt2++],"Add New");
-		cnt++;
-    }
-    if(mode&WIN_DEL)  {
-		strcpy(it[cnt2++],"D");
-        strcpy(it[cnt2++],"Delete");
-		cnt++;
-    }
-    if(mode&WIN_GET)  {
-		strcpy(it[cnt2++],"C");
-        strcpy(it[cnt2++],"Copy");
-		cnt++;
-    }
-    if(mode&WIN_PUT)  {
-		strcpy(it[cnt2++],"P");
-        strcpy(it[cnt2++],"Paste");
-		cnt++;
-    }
-
-    if(width<strlen(title)+4) 
-		width=strlen(title)+4;
-	app_title_len=strlen(app_title);
-
-    if(*cur<0 || *cur>cnt)*cur=0;
-
-	if(height>cnt)
-		height=cnt; /* no reason to display overly "tall" menus */
-
-    while(1) {
-        i=*cur;
-        if(i<0) i=0;
-		if(cnt==2 && strcmp(option[0],"Yes")==0 && strcmp(option[1],"No")==0)  {
-		    if(i==0)
-				ret=dialog_yesno((char*)NULL,title,5,width);
-	    	else
-				ret=dialog_noyes((char*)NULL,title,5,width);
-			break;
-		}
-        /* make sure we're wide enough to display the application title */
-        if(width<app_title_len+4)
-            width=app_title_len+4;
-        dialog_clear_norefresh();
-        scrollpos=0;
-
-        if(i>=height)				//  Whenever advanced was returned from, it had something
-            scrollpos=i-height+1;  //   Beyond the bottom selected
-        i=i-scrollpos;			  //	Apparently, *ch is the current position ON THE SCREEN
-        ret=dialog_menu(app_title, title, height+8, width, height, cnt, it, str, &i, &scrollpos);
-
-        if(ret==1)  {	/* Cancel */
-			ret = -1;
-			*cur = -1;
-			break;
-		}
-		if(ret==-1)		/* ESC */
-			break;
-		if(ret==-2)	{	/* Help */
-			help();
-			continue;
-		}
-        if(ret!=0)		/* ??? */
-			continue;
-		switch(str[0]) {
-			case 'A':	/* Add */
-				dialog_clear_norefresh();
-				if(options>0)  {
-					strncpy(tmpstr,it[options*2],127);
-					sprintf(it[options*2],"%u",options+1);
-					strncpy(tmpstr2,it[options*2+1],127);
-			        strcpy(it[options*2+1],"<-- At End -->");
-	        		ret=dialog_menu(title, "Insert Where?", height+8, width, height, options+1, it, str, 0, 0);
-					strncpy(it[options*2],tmpstr,127);
-					strncpy(it[options*2+1],tmpstr2,127);
-					if(ret==0)  {
-						*cur=atoi(str)-1;
-						ret=*cur|MSK_INS;
-					}
-	       		}
-				else {
-					*cur=0;
-					ret=MSK_INS;
-				}
-				break;
-			case 'D':	/* Delete */
-				dialog_clear_norefresh();
-				if(options>0)  {
-	        		ret=dialog_menu(title, "Delete Which?", height+8, width, height, options, it, str, 0, 0);
-					if(ret==0)  {
-						*cur=atoi(str)-1;
-						ret=*cur|MSK_DEL;
-					}
-	       		}
-				else {
-					*cur=0;
-					ret=MSK_DEL;
-				}
-				break;
-			case 'C':	/* Copy */
-				dialog_clear_norefresh();
-				if(options>0)  {
-	        		ret=dialog_menu(title, "Copy Which?", height+8, width, height, options, it, str, 0, 0);
-					if(ret==0)  {
-						*cur=atoi(str)-1;
-						ret=*cur|MSK_GET;
-					}
-	       		}
-				else {
-					*cur=0;
-					ret=MSK_GET;
-				}
-				break;
-			case 'P':	/* Paste */
-		       dialog_clear_norefresh();
-				if(options>0)  {
-					strncpy(tmpstr,it[options*2],127);
-					sprintf(it[options*2],"%u",options+1);
-					strncpy(tmpstr2,it[options*2+1],127);
-			        strcpy(it[options*2+1],"<-- At End -->");
-	        		ret=dialog_menu(title, "Paste Where?", height+8, width, height, options+1, it, str, 0, 0);
-					strncpy(it[options*2],tmpstr,127);
-					strncpy(it[options*2+1],tmpstr2,127);
-					if(ret==0)  {
-						*cur=atoi(str)-1;
-						ret=*cur|MSK_PUT;
-					}
-	       		}
-				else {
-					*cur=0;
-					ret=MSK_PUT;
-				}
-				break;
-			default:
-				*cur=atoi(str)-1;
-				ret=*cur;
-				break;
-		}
-		break;
-    } 
-
-    // free() the strings!
-    for(i=0;i<freecnt*2;i++)
-		free(it[i]);
-    free(it);
-    
-    return(ret);
-}
-
-
-/*************************************************************************/
-/* This function is a windowed input string input routine.               */
-/*************************************************************************/
-int uinput(int mode, char left, char top, char *prompt, char *outstr,
-	char max, int kmode)
-{
-	char str[256];
-	if(!(kmode&K_EDIT))
-		outstr[0]=0;
-	sprintf(str,"%.*s",sizeof(str)-1,outstr);
-    while(dialog_inputbox((char*)NULL, prompt, 9, max+4, outstr)==-2)
-		help();
-    if(kmode&K_UPPER)	/* convert to uppercase? */
-    	strupr(str);
-	if(strcmp(str,outstr))
-		api->changes=TRUE;
-    return strlen(outstr);
-}
-
-/****************************************************************************/
-/* Displays the message 'str' and waits for the user to select "OK"         */
-/****************************************************************************/
-void umsg(char *str)
-{
-    dialog_mesgbox((char*)NULL, str, 7, strlen(str)+4);
-}
-
-/****************************************************************************/
-/* Status popup/down function, see uifc.h for details.                      */
-/****************************************************************************/
-void upop(char *str)
-{
-	// Pop-down doesn't do much... the mext item should over-write this.
-    dialog_gauge((char*)NULL,str,8,20,7,40,0);
-}
-
-/****************************************************************************/
-/* Sets the current help index by source code file and line number.         */
-/****************************************************************************/
-void sethelp(int line, char* file)
-{
-    helpfile=file;
-    helpline=line;
-}
-
-/************************************************************/
-/* Help function. 											*/
-/************************************************************/
-void help()
-{
-	char hbuf[HELPBUF_SIZE],str[256];
-    char *p;
-	unsigned short line;
-	long l;
-	FILE *fp;
-
-    printf("\n");
-    if(!api->helpbuf) {
-        if((fp=fopen(api->helpixbfile,"rb"))==NULL)
-            sprintf(hbuf,"ERROR: Cannot open help index: %s"
-                ,api->helpixbfile);
-        else {
-            p=strrchr(helpfile,'/');
-            if(p==NULL)
-                p=strrchr(helpfile,'\\');
-            if(p==NULL)
-                p=helpfile;
-            else
-                p++;
-            l=-1L;
-            while(!feof(fp)) {
-                if(!fread(str,12,1,fp))
-                    break;
-                str[12]=0;
-                fread(&line,2,1,fp);
-                if(stricmp(str,p) || line!=helpline) {
-                    fseek(fp,4,SEEK_CUR);
-                    continue; }
-                fread(&l,4,1,fp);
-                break; }
-            fclose(fp);
-            if(l==-1L)
-                sprintf(hbuf,"ERROR: Cannot locate help key (%s:%u) in: %s"
-                    ,p,helpline,api->helpixbfile);
-            else {
-                if((fp=fopen(api->helpdatfile,"rb"))==NULL)
-                    sprintf(hbuf,"ERROR: Cannot open help file: %s"
-                        ,api->helpdatfile);
-                else {
-                    fseek(fp,l,SEEK_SET);
-                    fread(hbuf,HELPBUF_SIZE,1,fp);
-                    fclose(fp); 
-				} 
-			} 
-		} 
-	}
-    else
-        strcpy(hbuf,api->helpbuf);
-
-	dialog_mesgbox((char*)NULL, hbuf, 24, 80);
-}
diff --git a/src/uifc/uifcx.c b/src/uifc/uifcx.c
deleted file mode 100644
index b840420499..0000000000
--- a/src/uifc/uifcx.c
+++ /dev/null
@@ -1,394 +0,0 @@
-/* uifcx.c */
-
-/* Standard I/O Implementation of UIFC (user interface) library */
-
-/* $Id$ */
-
-/****************************************************************************
- * @format.tab-size 4		(Plain Text/Source Code File Header)			*
- * @format.use-tabs true	(see http://www.synchro.net/ptsc_hdr.html)		*
- *																			*
- * Copyright 2002 Rob Swindell - http://www.synchro.net/copyright.html		*
- *																			*
- * This program is free software; you can redistribute it and/or			*
- * modify it under the terms of the GNU General Public License				*
- * as published by the Free Software Foundation; either version 2			*
- * of the License, or (at your option) any later version.					*
- * See the GNU General Public License for more details: gpl.txt or			*
- * http://www.fsf.org/copyleft/gpl.html										*
- *																			*
- * Anonymous FTP access to the most recent released source is available at	*
- * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net	*
- *																			*
- * Anonymous CVS access to the development source and modification history	*
- * is available at cvs.synchro.net:/cvsroot/sbbs, example:					*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs login			*
- *     (just hit return, no password is necessary)							*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs checkout src		*
- *																			*
- * For Synchronet coding style and modification guidelines, see				*
- * http://www.synchro.net/source.html										*
- *																			*
- * You are encouraged to submit any modifications (preferably in Unix diff	*
- * format) via e-mail to mods@synchro.net									*
- *																			*
- * Note: If this box doesn't appear square, then you need to fix your tabs.	*
- ****************************************************************************/
-
-#include "uifc.h"
-
-#include <sys/types.h>
-
-#ifdef __unix__
-/*	#include <sys/time.h> why? */
-	#include <unistd.h>
-#endif
-
-static char *helpfile=0;
-static uint helpline=0;
-static uifcapi_t* api;
-
-/* Prototypes */
-static void help();
-
-/* API routines */
-static void uifcbail(void);
-static int uscrn(char *str);
-static int ulist(int mode, char left, int top, char width, int *dflt, int *bar
-	,char *title, char **option);
-static int uinput(int imode, char left, char top, char *prompt, char *str
-	,char len ,int kmode);
-static void umsg(char *str);
-static void upop(char *str);
-static void sethelp(int line, char* file);
-
-/****************************************************************************/
-/* Initialization function, see uifc.h for details.							*/
-/* Returns 0 on success.													*/
-/****************************************************************************/
-int uifcinix(uifcapi_t* uifcapi)
-{
-
-    if(uifcapi==NULL || uifcapi->size!=sizeof(uifcapi_t))
-        return(-1);
-
-    api=uifcapi;
-
-    /* install function handlers */
-    api->bail=uifcbail;
-    api->scrn=uscrn;
-    api->msg=umsg;
-    api->pop=upop;
-    api->list=ulist;
-    api->input=uinput;
-    api->sethelp=sethelp;
-
-    setvbuf(stdin,NULL,_IONBF,0);
-    setvbuf(stdout,NULL,_IONBF,0);
-    api->scrn_len=24;
-
-    return(0);
-}
-
-/****************************************************************************/
-/* Exit/uninitialize UIFC implementation.									*/
-/****************************************************************************/
-void uifcbail(void)
-{
-}
-
-/****************************************************************************/
-/* Clear screen, fill with background attribute, display application title.	*/
-/* Returns 0 on success.													*/
-/****************************************************************************/
-int uscrn(char *str)
-{
-    return(0);
-}
-
-static int getstr(char* str, int maxlen)
-{
-	char 	ch;
-    int		len=0;
-	int		istty;
-
-	istty=isatty(fileno(stdin));
-    while(1) {
-		fread(&ch,1,1,stdin);
-		if(!istty)  {
-			printf("%c",ch);
-			fflush(stdout);
-		}
-        if(ch=='\r' || ch=='\n')	/* enter */
-        	break;
-        if(ch=='\b') {				/* backspace */
-        	if(len) len--;
-            continue;
-    	}
-        if(len<maxlen)
-			str[len++]=ch;
-	}
-    str[len]=0;	/* we need The Terminator */
-    
-	return(len);
-}
-	
-
-/****************************************************************************/
-/* Local utility function.													*/
-/****************************************************************************/
-static int which(char* prompt, int max)
-{
-    char    str[41];
-    int     i;
-
-    while(1) {
-        printf("%s which (1-%d): ",prompt,max);
-        str[0]=0;
-		getstr(str,sizeof(str)-1);
-        i=atoi(str);
-        if(i>0 && i<=max)
-            return(i-1);
-    }
-}
-
-/****************************************************************************/
-/* General menu function, see uifc.h for details.							*/
-/****************************************************************************/
-int ulist(int mode, char left, int top, char width, int *cur, int *bar
-	, char *title, char **option)
-{
-    char str[128];
-	int i,j,opts;
-    int optnumlen;
-    int yesno=0;
-    int lines;
-
-    for(opts=0;opts<MAX_OPTS;opts++)
-    	if(option[opts][0]==0)
-    		break;
-
-    if((*cur)>=opts)
-        (*cur)=opts-1;			/* returned after scrolled */
-
-    if((*cur)<0)
-        (*cur)=0;
-
-    if(opts>999)
-        optnumlen=4;
-    else if(opts>99)
-        optnumlen=3;
-    else if(opts>9)
-        optnumlen=2;
-    else
-        optnumlen=1;
-    while(1) {
-        if(opts==2 && !stricmp(option[0],"Yes") && !stricmp(option[1],"No")) {
-            yesno=1;
-            printf("%s? ",title);
-        } else {
-            printf("\n[%s]\n",title);
-            lines=2;
-            for(i=0;i<opts;i++) {
-                printf("%*d: %s\n",optnumlen,i+1,option[i]);
-                lines++;
-                if(!(lines%api->scrn_len)) {
-                    printf("More? ");
-                    str[0]=0;
-                    getstr(str,sizeof(str)-1);
-                    if(toupper(*str)=='N')
-                        break;
-                }
-            }
-            str[0]=0;
-            if(mode&WIN_GET)
-                strcat(str,", Copy");
-            if(mode&WIN_PUT)
-                strcat(str,", Paste");
-            if(mode&WIN_INS)
-                strcat(str,", Add");
-            if(mode&WIN_DEL)
-                strcat(str,", Delete");
-            printf("\nWhich (Help%s or Quit): ",str);
-        }
-        str[0]=0;
-        getstr(str,sizeof(str)-1);
-        
-        truncsp(str);
-        i=atoi(str);
-        if(i>0) {
-            *cur=--i;
-            return(*cur);
-        }
-        i=atoi(str+1);
-        switch(toupper(*str)) {
-            case 0:
-            case ESC:
-            case 'Q':
-                printf("Quit\n");
-                return(-1);
-            case 'Y':
-                if(!yesno)
-                    break;
-                printf("Yes\n");
-                return(0);
-            case 'N':
-                if(!yesno)
-                    break;
-                printf("No\n");
-                return(1);
-            case 'H':
-            case '?':
-                printf("Help\n");
-                help();
-                break;
-            case 'A':   /* Add/Insert */
-				if(!opts)
-    				return(MSK_INS);
-                if(i>0 && i<=opts+1)
-        			return((i-1)|MSK_INS);
-                return(which("Add before",opts+1)|MSK_INS);
-            case 'D':   /* Delete */
-				if(!opts)
-    				break;
-                if(i>0 && i<=opts)
-        			return((i-1)|MSK_DEL);
-                if(opts==1)
-                    return(MSK_DEL);
-                return(which("Delete",opts)|MSK_DEL);
-            case 'C':   /* Copy/Get */
-				if(!opts)
-    				break;
-                if(i>0 && i<=opts)
-        			return((i-1)|MSK_GET);
-                if(opts==1)
-                    return(MSK_GET);
-                return(which("Copy",opts)|MSK_GET);
-            case 'P':   /* Paste/Put */
-				if(!opts)
-    				break;
-                if(i>0 && i<=opts)
-        			return((i-1)|MSK_PUT);
-                if(opts==1)
-                    return(MSK_PUT);
-                return(which("Paste",opts)|MSK_PUT);
-        }
-    }
-}
-
-
-/*************************************************************************/
-/* This function is a windowed input string input routine.               */
-/*************************************************************************/
-int uinput(int mode, char left, char top, char *prompt, char *outstr,
-	char max, int kmode)
-{
-    char str[256];
-    
-    while(1) {
-        printf("%s (maxlen=%u): ",prompt,max);
-
-        getstr(str,max);
-        truncsp(str);
-        if(strcmp(str,"?"))
-            break;
-        help();
-    }
-	if(strcmp(outstr,str))
-		api->changes=1;
-    if(kmode&K_UPPER)	/* convert to uppercase? */
-    	strupr(str);
-    strcpy(outstr,str);    
-    return(strlen(outstr));
-}
-
-/****************************************************************************/
-/* Displays the message 'str' and waits for the user to select "OK"         */
-/****************************************************************************/
-void umsg(char *str)
-{
-    printf("%s\n",str);
-}
-
-/****************************************************************************/
-/* Status popup/down function, see uifc.h for details.						*/
-/****************************************************************************/
-void upop(char *str)
-{
-    if(str==NULL)
-        printf("\n");
-    else
-        printf("\r%-79s",str);
-}
-
-/****************************************************************************/
-/* Sets the current help index by source code file and line number.			*/
-/****************************************************************************/
-void sethelp(int line, char* file)
-{
-    helpline=line;
-    helpfile=file;
-}
-
-/****************************************************************************/
-/* Help function.															*/
-/****************************************************************************/
-void help()
-{
-	char hbuf[HELPBUF_SIZE],str[256];
-    char *p;
-	unsigned short line;
-	long l;
-	FILE *fp;
-
-    printf("\n");
-    if(!api->helpbuf) {
-        if((fp=fopen(api->helpixbfile,"rb"))==NULL)
-            sprintf(hbuf,"ERROR: Cannot open help index: %s"
-                ,api->helpixbfile);
-        else {
-            p=strrchr(helpfile,'/');
-            if(p==NULL)
-                p=strrchr(helpfile,'\\');
-            if(p==NULL)
-                p=helpfile;
-            else
-                p++;
-            l=-1L;
-            while(!feof(fp)) {
-                if(!fread(str,12,1,fp))
-                    break;
-                str[12]=0;
-                fread(&line,2,1,fp);
-                if(stricmp(str,p) || line!=helpline) {
-                    fseek(fp,4,SEEK_CUR);
-                    continue; }
-                fread(&l,4,1,fp);
-                break; }
-            fclose(fp);
-            if(l==-1L)
-                sprintf(hbuf,"ERROR: Cannot locate help key (%s:%u) in: %s"
-                    ,p,helpline,api->helpixbfile);
-            else {
-                if((fp=fopen(api->helpdatfile,"rb"))==NULL)
-                    sprintf(hbuf,"ERROR: Cannot open help file: %s"
-                        ,api->helpdatfile);
-                else {
-                    fseek(fp,l,SEEK_SET);
-                    fread(hbuf,HELPBUF_SIZE,1,fp);
-                    fclose(fp); 
-				} 
-			} 
-		} 
-	}
-    else
-        strcpy(hbuf,api->helpbuf);
-
-    puts(hbuf);
-    if(strlen(hbuf)>200) {
-        printf("Hit enter");
-        getstr(str,sizeof(str)-1);
-    }
-}
-
-
diff --git a/src/wmakeall.bat b/src/wmakeall.bat
deleted file mode 100755
index a11b4e41fa..0000000000
--- a/src/wmakeall.bat
+++ /dev/null
@@ -1,38 +0,0 @@
-@echo off
-rem
-rem Makes all Watcom compiled Synchronet projects - April 1997 Rob Swindell
-rem
-cd sbbs\addfiles
-call makeall.bat %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\delfiles
-call makeall.bat %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\dupefind
-call makeall.bat %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\echo
-wmake -f sbbsecho.wat OS=OS2  %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-wmake -f sbbsecho.wat OS=DOS4G  %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-wmake -f sbbsecho.wat OS=NT  %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\filelist
-call makeall.bat %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\smb\smbutil
-call makeall.bat %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-cd ..\..\smbactiv
-call makeall.bat %1 %2 %3 %4 %5
-if errorlevel 1 goto err
-rem End of makes
-cd ..\..
-goto end
-:err
-rem Error occurred
-echo.
-echo There was an error!
-echo.
-:end
diff --git a/text/answer.asc b/text/answer.asc
deleted file mode 100644
index 33e72461b6..0000000000
--- a/text/answer.asc
+++ /dev/null
@@ -1,7 +0,0 @@
-ncConnection established at h@BPS@ncbps on h@DATE@nc at h@TIME@
-
-b@SYSOP@ welcomes you to y@BBS@b (Node @NODE@)
-
-If you are a new user to the system, type c"New"b now.
-Otherwise, enter your user name or number now.
-yh
diff --git a/text/answer.wip b/text/answer.wip
deleted file mode 100644
index 1440290a3c..0000000000
--- a/text/answer.wip
+++ /dev/null
@@ -1,18 +0,0 @@
-$00000D
-!|[Startup]
-!|V=1.10
-!|D=`
-!|O=15
-!|M=@BBS@
-!|L=2505
-!|T=105
-!|W=3750
-!|H=5100
-!|B=16777215
-!|
-!|[Form]
-!|001=0B`c`70`265`100`30`1`Login to BBS`0`12632256`MS Sans Serif`8.25`Continue`
-!|002=0T`text`1`20`240`40`1``0`16777215`MS Sans Serif`8.25`Synchronet BBS Software Version @VER@|mDeveloped 1990-1997 Rob Swindell`1`0
-!|003=0P`wiplogo`45`65`150`180`3``-2147483643`WIPLOGO.BMP
-!|
-$0E
diff --git a/text/computer.sif b/text/computer.sif
deleted file mode 100644
index 13bac67083..0000000000
--- a/text/computer.sif
+++ /dev/null
@@ -1,109 +0,0 @@
-This is the Synchronet Computer Information Questionaire.
-
-
-n
-hMicroprocessorn
-
-A) 8088 (XT)
-B) 80286 (AT)
-C) 80386SX
-D) 80386DX
-E) 80486
-
-yhWhich:n c"ABCDE"
-
-hClock Speedn
-
-A) 4.77mhz
-B) 6mhz
-C) 8mhz
-D) 10mhz
-E) 12mhz
-F) 16mhz
-G) 20mhz
-H) 25mhz
-I) 33mhz
-J) 40mhz
-K) 50mhz
-
-yhWhich: nc"ABCDEFGHIJK"
-
-hArchitecturen
-
-A) 8bit (XT)
-B) ISA (AT)
-C) MCA (PS/2)
-D) EISA
-
-yhWhich: nc"ABCD"
-
-hDisplayn
-
-A) MDA (Monochrome - no graphics)
-B) Hercules (Monochrome - graphics)
-C) CGA
-D) EGA
-E) MCGA
-F) VGA
-G) SVGA (640x480x256)
-H) MVGA (Monochrome VGA)
-I) 8514/A (1024x768x256)
-J) XGA
-K) TIGA (34010)
-
-yhWhich: nc"ABCDEFGHIJK"
-
-hSystem RAMn
-
-A) <1mb
-B) 1mb
-C) 2mb
-D) 3mb
-E) 4mb
-F) 5mb
-G) 6mb
-H) 8mb
-I) 10mb
-J) 12mb
-K) 16mb
-L) 18mb
-M) 24mb
-N) 32mb
-O) 64mb
-
-yhWhich: nc"ABCDEFGHIJKLMNO"
-
-hTotal Hard Disk Capacityn
-
-A) None
-B) 10mb
-C) 20mb
-D) 30mb
-E) 40mb
-F) 60mb
-G) 80mb
-H) 100mb
-I) 120mb
-J) 150mb
-K) 200mb
-L) 250mb
-M) 300mb
-N) 400mb
-O) 500mb
-P) 600mb
-Q) 700mb
-R) 800mb
-S) 900mb
-T) 1gb or more
-
-yhWhich: nc"ABCDEFGHIJKLMNOPQRST"
-
-hHard Disk Interfacen
-
-A) ST506 (Standard)
-B) SCSI
-C) SCSI2
-D) ESDI
-E) IDE
-
-yhWhich: nc"ABCDE"
diff --git a/text/example.sif b/text/example.sif
deleted file mode 100644
index e8af4378cf..0000000000
--- a/text/example.sif
+++ /dev/null
@@ -1,68 +0,0 @@
-This is an example of the Synchronet Interface File (SIF) Format:
-
-To execute this SIF, yype ;SIF at the main prompt and enter EXAMPLE as the 
-filename.
-
-Only text between STX (Start of text / Ctrl-B) and ETX (End of text / Ctrl-C)
-will be displayed to the user. After each ETX is the input mode specifier
-('c'haracter or 's'tring), then an optional mode modifier ('u'ppercase,
-'n'umeric, or 'f'orced captialization), then an optional 'l' for an input line
-to be displayed, then an optional 'r' if the data file should contain a CRLF
-after this field, then the maximum length of the string (if 's'tring mode and a
-template isn't specified), then an optional . followed by the minimum length
-of the string, and last an optional string in double-quotes that either
-specifies what keys will be accepted ('c'haracter mode) or an input template
-('s'tring mode).
-
-Inside the text area, we should use Synchronet Ctrl-A sequences for changing
-the text attributes and clearing the screen. Embeded ANSI sequences can be used
-but are not suggested as they will be displayed to ALL users (ANSI or not), and
-Ctrl-A sequences are filtered for non-ANSI users, and modified for Monochrome
-ANSI users. See SBBS\TEXT\MENU\ATTR.ALL for more information on Ctrl-A codes.
-
-Text is going to start here: 
-n
-Hello, this is an example hSIFn file.
-
-Please answer the following input prompts.
-
-mhSelect Onen
-
-A) Selection A
-B) Selection B
-C) Selection C
-
-yhWhich: nc"ABC" Text in this area is just for comments
-
-yhEnter any character: rc
-
-yhEnter any character (converted to uppercase automatically): ncu
-
-yhEnter any number (allows CR): cnl
-
-yhEnter any number (disallows CR): bc"0123456789"
-
-bhEnter a string: ws30
-
-yhEnter a string of at least 4 characters: sl8.4
-
-yhEnter a string (converted to uppercase automatically): nsu10
-
-yhEnter a numeric value of at least one digit: snl5.1
-
-yhEnter your name (forced capitalization): nsf30
-
-yhEnter your phone number (must be complete): ws.12"NNN-NNN-NNNN"
-                                                    ^ notice that the max 
-		length wasn't needed because the template was specified
-
-yhEnter your birthdate (can be incomplete): sl"NN/NN/NN"
-
-bhAre you sure (Y/N) ? wc"YN"
-
-chAll done!
-
-everything after this point doesn't matter..... (cause we're not between STX
-and ETX)
-
-See Customization chapter in the sysop manual for more information.
diff --git a/text/feedback.msg b/text/feedback.msg
deleted file mode 100644
index d08c65cb60..0000000000
--- a/text/feedback.msg
+++ /dev/null
@@ -1,10 +0,0 @@
-hy
-As a new user, your access to some of the system's facilities will be 
-restricted until the letter you are about to write has been reviewed by a
-sysop and your account has been "validated."
-
-ngPlease include in your letter:
-
-	ho ngWhere you found the number to this BBS
-	ho ngWhat prompted you to call
-        ho ngWhat your expectations are
diff --git a/text/menu/allmail.asc b/text/menu/allmail.asc
deleted file mode 100644
index 6bd691f938..0000000000
--- a/text/menu/allmail.asc
+++ /dev/null
@@ -1,9 +0,0 @@
-                           yh��� wReading All Mail y���
-�����������������������������������������������������������������������������ͻ
-�w<CR> bNext Message                        wR  bReread Last Message              y�
-�  w-  bPrevious Message                    wD  bDelete Last Message              y�
-�  wL  bList All Messages                   wS  bSave Last Message to File        y�
-�  wT  bList Ten More Messages              wE  bEdit Last Message                y�
-�  wU  bEdit Author of Last Message         wC  bChange Last Message's Flag       y�
-�  wQ  bQuit to Main Section                w#  bGo to Message #                  y�
-�����������������������������������������������������������������������������ͼ
diff --git a/text/menu/attr.asc b/text/menu/attr.asc
deleted file mode 100644
index ca29b7d6f7..0000000000
--- a/text/menu/attr.asc
+++ /dev/null
@@ -1,18 +0,0 @@
-                        Synchronet Text Attribute Menu
-              (All attribute codes must be preceeded by a Ctrl-A)
-
-		 Foreground		     Background
-Black       K   k(Low) h(High)n            0   hWhite on Blackn
-Red         R   r(Low) h(High)n            1   k1Black on Redn
-Green       G   g(Low) h(High)n            2   k2Black on Greenn
-Yellow      Y   y(Low) h(High)n            3   k3Black on Yellown
-Blue        B   b(Low) h(High)n            4   wh4White on Bluen
-Magenta     M   m(Low) h(High)n            5   wh5White on Magentan
-Cyan        C   c(Low) h(High)n            6   k6Black on Cyann
-White       W   w(Low) h(High)n            7   k7Black on Whiten
-
-High        H   hHigh Intensityn
-Blink       I   iBlinkingn
-Normal      N   No Special Attributes
-Pause       P   Insert a Pause Prompt into message
-CLS         L   Insert a Form Feed into message
diff --git a/text/menu/batchxfr.asc b/text/menu/batchxfr.asc
deleted file mode 100644
index 59ad69c759..0000000000
--- a/text/menu/batchxfr.asc
+++ /dev/null
@@ -1,13 +0,0 @@
-0lnc4���������������������������k�0
-4c� hyBatch/Bidirectional Menu nk4�0
-4c�k���������������������������0
-4b0�����4  0�4 hwUpload/Downloadnb�hw4Filesnb�����������������4 hwBatch Queue Managementnb���������
-�����
-� hyU ngUpload files in upload queue�b� hyL ngList files in batch queues�b�
-� hyD ngDownload files in download queue    b� hyR ngRemove files from batch queues    b�
-��� hyC ngClear batch queues�b�
-�������4 hwBidirectional Transfersnb������������
-�����������������������������������������
-� hyB ngBidirectional file transfer�b� hyQ ngQuit to File Transfer menu�b�
-�����
-4  hyAnytime: cCtrl-U nc4Who's online  hCtrl-P nc4Send private msg  hCtrl-C nc4Abort cmd/text n
diff --git a/text/menu/batchxfr.rip b/text/menu/batchxfr.rip
deleted file mode 100644
index 466931069f..0000000000
--- a/text/menu/batchxfr.rip
+++ /dev/null
@@ -1,13 +0,0 @@
-
-!|1K|w0010271610|W0|=00000001|1B0000020PX4050E000F080700000000000000
-!|1U0707HL0P0000<>Batch Transfers<>|c0F|S0107
-!|1B0000020PWW050E000F080700000000000000|1U0710HL2S0000<><>
-!|1B0000020QPC010E000F080200000000000000|Y00000100|1U0M161K1G0000<>U<>U
-!|1U0M1K1K1U0000<>D<>D|1U0M1Y1K280000<>B<>B
-!|1B0000020QPE010E000F080400000000000000|1U0M2C1K2M0000<>Q<>Q
-!|1B0000020QPC010E000F080200000000000000|1U9616A41G0000<>L<>L
-!|1U961KA41U0000<>R<>R|1U961YA4280000<>C<>C|c00|@1Y16Upload|@1Y1KDownload
-!|@1Y1YBidirectional Transfer|@1Y2CQuit to the Transfer Section
-!|@AK1YClear Batch Queue|@AK16List Files in Batch Queue
-!|@AK1KRemove Files from Batch Queue|w000G271610|10000$ETW$|#|#|#
-
diff --git a/text/menu/batdprot.asc b/text/menu/batdprot.asc
deleted file mode 100644
index 4e32fe9013..0000000000
--- a/text/menu/batdprot.asc
+++ /dev/null
@@ -1 +0,0 @@
-hwY bYmodem  wZ bZmodem  wG bYmodem-G  wH bHS/Link
diff --git a/text/menu/batflag.asc b/text/menu/batflag.asc
deleted file mode 100644
index 6300697723..0000000000
--- a/text/menu/batflag.asc
+++ /dev/null
@@ -1,23 +0,0 @@
-lnhcFile Listing:
-
-�nc���������If nhc+ ncthen extended description exists, but not displayed
-����������File flag for fast tagging
-�Filename   ��    ���File size
-� Extension���    � �If nhc- ncthen file is offline
-�����    � ���Description
-nhbSBBS200G.ZIP+ngA  nm851k-ngSynchronet v2.00g Multinode BBS Software
-
-nhcBatch Flagging Commands:
-
-nhb[nhcBnhb]atch Download�ncAdd file(s) to batch download queue
-nhb[nhcVnhb]iew Files�ncView archive listing or contents of file(s)
-nhb[nhcEnhb]xtended Info�ncDisplay extended information on file(s)
-nhb[nhcSnhb]kip Directory�ncSkip this directory (during scans)
-nhb[nhcPnhb]revious�ncMove backwards through this directory
-nhb[nhcQnhb]uit�ncStop listing files
-(
-nhcSysop Commands:
-
-nhb[nhcDnhb]elete Files�ncDelete file(s) from disk and/or database
-nhb[nhcMnhb]ove Files�ncMove file(s) to another directoryn
-)
diff --git a/text/menu/batuprot.asc b/text/menu/batuprot.asc
deleted file mode 100644
index 4e32fe9013..0000000000
--- a/text/menu/batuprot.asc
+++ /dev/null
@@ -1 +0,0 @@
-hwY bYmodem  wZ bZmodem  wG bYmodem-G  wH bHS/Link
diff --git a/text/menu/biprot.asc b/text/menu/biprot.asc
deleted file mode 100644
index 26816be463..0000000000
--- a/text/menu/biprot.asc
+++ /dev/null
@@ -1 +0,0 @@
-nhH bHS/Link
diff --git a/text/menu/chat.asc b/text/menu/chat.asc
deleted file mode 100644
index f6351c8cf9..0000000000
--- a/text/menu/chat.asc
+++ /dev/null
@@ -1,11 +0,0 @@
-nlc4��������������������nk4�0
-nc4� nhy4Chat Command Menu nk4�0
-nc4�nk4��������������������0
-nb��������������������nb4 nh4Join a Chat nb�����������������������nb4 nb����nb4 nh4Togglesnb����������
-�����
-� nhyJ ngJoin/initiate multinode chat�nb� nhyD ngAllow paging off/on�nb�
-� nhyP ngJoin/initiate private node to node chat�nb� nhyA ngActivity alerts off/on  nb�
-� nhyC ngChat with the sysop�nb� nhyS ngSplit screen pvt chat   nb�
-� nhyT ngTalk with the system Guru (Artificial Person) nb� nhyQ ngQuit from Chat section  nb�
-�����
-nb4  nhy4Anytime: nhc4Ctrl-U nc4Who's online  nhc4Ctrl-P nc4Send private msg  nhc4Ctrl-C nc4Abort cmd/text n
diff --git a/text/menu/chat.rip b/text/menu/chat.rip
deleted file mode 100644
index ee13258675..0000000000
--- a/text/menu/chat.rip
+++ /dev/null
@@ -1,14 +0,0 @@
-
-!|1K|w0010271610|W0|=00000001|1B0000020PX4050E000F080700000000000000
-!|1U0707HL0P0000<>Chat Section<>|c0F|S0107
-!|1B0000020PWW050E000F080700000000000000|1U0710HL2S0000<><>
-!|1B0000020QPC010E000F080500000000000000|Y00000100|1U0M161K1G0000<>D<>D
-!|1U0M1K1K1U0000<>A<>A|1U0M1Y1K280000<>J<>J
-!|1B0000020QPE010E000F080400000000000000|1U0M2C1K2M0000<>Q<>Q
-!|1B0000020QPC010E000F080500000000000000|1U9616A41G0000<>T<>T
-!|1U961KA41U0000<>P<>P|1U961YA4280000<>C<>C|w000E271610|c00
-!|@1Y16Disable/Enable Paging|@1Y1KActivity Alert Disable/Enable
-!|@1Y1YJoin/Initiate Multinode Chat|@1Y2CQuit from Chat Section
-!|@AK16Talk with the Guru|@AK1KPrivate Node to Node Chat|@AK1YChat with Sysop
-!|10000$ETW$|#|#|#
-
diff --git a/text/menu/chat.wip b/text/menu/chat.wip
deleted file mode 100644
index 5e5d48173b..0000000000
--- a/text/menu/chat.wip
+++ /dev/null
@@ -1,23 +0,0 @@
-$00000D
-!|[Startup]
-!|V=1.10
-!|D=`
-!|O=15
-!|M=Chat
-!|L=1665
-!|T=555
-!|W=4050
-!|H=4500
-!|B=12632256
-!|
-!|[Form]
-!|001=0B`p`20`20`100`60`1`Private User-to-User Chat`0`12632256`MS Sans Serif`8.25`Private`ORDER.ICO
-!|002=0B`j`140`20`100`60`2``0`12632256`MS Sans Serif`8.25`Multinode`EAR.ICO
-!|003=0B`c`20`100`100`60`3``0`12632256`MS Sans Serif`8.25`Sysop`CONTACT.ICO
-!|004=0B`t`140`100`100`60`4``0`12632256`MS Sans Serif`8.25`Guru`SOUND.ICO
-!|005=0B`d`20`180`100`30`5``0`12632256`MS Sans Serif`8.25`Pager`
-!|006=0B`a`20`225`100`30`6``0`12632256`MS Sans Serif`8.25`Activity`
-!|007=0B`s`140`180`100`30`7``0`12632256`MS Sans Serif`8.25`Split-screen`
-!|008=0B`q`140`225`100`30`8``0`12632256`MS Sans Serif`8.25`Quit`
-!|
-$0E
\ No newline at end of file
diff --git a/text/menu/dlprot.asc b/text/menu/dlprot.asc
deleted file mode 100644
index 2339a77346..0000000000
--- a/text/menu/dlprot.asc
+++ /dev/null
@@ -1 +0,0 @@
-hwX bXmodem  wY bYmodem  wZ bZmodem  wG bYmodem-G
diff --git a/text/menu/e-mail.asc b/text/menu/e-mail.asc
deleted file mode 100644
index 6e61c7ffb6..0000000000
--- a/text/menu/e-mail.asc
+++ /dev/null
@@ -1,11 +0,0 @@
-0lnc4�����������������������k�0
-4c� hyElectronic Mail Menu nk4�0
-4c�k�����������������������0
-b��������4 hwSend Mail      nb���������������4 hwRead Mail   nb��������
-�����
-� hyS ngSend mail�b� hyR ngRead mail sent to you   b�
-��hy0N ngSend NetMail�b� hyK ngRead mail you have sent b�
-������������������������������������������������������������
-� hyF ngSend feedback to the sysop b� hyQ ngQuit back to Main menu  b�
-� hyU ngUpload file to a mailbox   b���
-������������������������������������������������������������n
diff --git a/text/menu/e-mail.rip b/text/menu/e-mail.rip
deleted file mode 100644
index f98a4b507a..0000000000
--- a/text/menu/e-mail.rip
+++ /dev/null
@@ -1,12 +0,0 @@
-
-!|1K|w0010271610|W0|=00000001|1B0000020PX4050E000F080700000000000000
-!|1U0707HL0P0000<>Electronic Mail Menu<>|c0F|S0107
-!|1B0000020PWW050E000F080700000000000000|1U0710HL2E0000<><>
-!|1B0000020QPE010E000F080200000000000000|Y00000100|1U0M161K1G0000<>S<>S
-!|1U0M1K1K1U0000<>N<>N|1U9616A41G0000<>R<>R|1U961KA41U0000<>K<>K
-!|1U0M1Y1K280000<>F<>F|1B0000020QPE010E000F080400000000000000
-!|1U961YA4280000<>Q<>Q|c00|@1Y16Send Mail|@1Y1KSend NetMail
-!|@1Y1YSend Feedback to the Sysop|@AK16Read Your Mail
-!|@AK1KRead Mail You Have Sent|@AK1YQuit to the Main Menu|w000C271610
-!|10000$ETW$|#|#|#
-
diff --git a/text/menu/e-mail.wip b/text/menu/e-mail.wip
deleted file mode 100644
index 451e6cacfa..0000000000
--- a/text/menu/e-mail.wip
+++ /dev/null
@@ -1,21 +0,0 @@
-$00000D
-!|[Startup]
-!|V=1.10
-!|D=`
-!|O=15
-!|M=E-mail
-!|L=1425
-!|T=195
-!|W=4050
-!|H=4350
-!|B=12632256
-!|
-!|[Form]
-!|001=0B`s`20`20`100`60`1``0`12632256`MS Sans Serif`8.25`Send E-mail`EDIT.ICO
-!|002=0B`r`140`20`100`60`2``0`12632256`MS Sans Serif`8.25`Read E-mail`DETAIL.ICO
-!|003=0B`k`140`100`100`60`3``0`12632256`MS Sans Serif`8.25`Read Sent E-mail`SEARCH.ICO
-!|004=0B`f`20`100`100`60`4``0`12632256`MS Sans Serif`8.25`Feedback`CONTACT.ICO
-!|005=0B`n`20`180`100`60`5``0`12632256`MS Sans Serif`8.25`Send NetMail`EDIT.ICO
-!|006=0B`q`140`180`100`60`6``0`12632256`MS Sans Serif`8.25`Quit`EXIT.ICO
-!|
-$0E
\ No newline at end of file
diff --git a/text/menu/editor.asc b/text/menu/editor.asc
deleted file mode 100644
index e9ba7f799b..0000000000
--- a/text/menu/editor.asc
+++ /dev/null
@@ -1,19 +0,0 @@
-hy                    Synchronet Message Editor Commands
-                            (* ANSI users only)
-w
-/?     This Menu                    Ctrl-C       Cancel Line
-/S     Save Message                 Ctrl-V       Center Line
-/L     List Message                 Ctrl-R       Redraw Line
-/Lx    List Message from Line x     Ctrl-X       Delete Line
-/E     Edit Last Line               Ctrl-Y     * Delete to End of Line
-/Ex    Edit Line x                  Ctrl-W       Delete Word Left
-/D     Delete Last Line             Ctrl-D     * Delete Word Right
-/Dx    Delete Line x                Ctrl-B     * Move to Beginning of Line
-/I     Insert Line Before Last      Ctrl-E     * Move to End of Line
-/Ix    Insert Line Before Line x    Ctrl-N     * Move to Next Word
-/T     Edit Message Title           Ctrl-\     * Move to Previous Word
-                                    Ctrl-F     * Move Cursor Position Forward
-/ABT   Abort Message                Ctrl-[     * Move Cursor Position Backward
-/CLR   Clear Message (Start Over)   Ctrl-Minus * Toggle Insert/Overwrite Mode
-/ATTR  Menu for ^Ax Sequences       Ctrl-Ax    * Type /ATTR for more info
-n
\ No newline at end of file
diff --git a/text/menu/exempt.asc b/text/menu/exempt.asc
deleted file mode 100644
index 9473b704c3..0000000000
--- a/text/menu/exempt.asc
+++ /dev/null
@@ -1,7 +0,0 @@
-A=Anonymous         H=                  O=                  V=
-B=                  I=Interrupt Nodes   P=Permanent         W=
-C=Chat Page	    J=Chat Cost 	Q=Quiet/Anon Node   X=Xtrn Program Cost
-D=Download Cost     K=                  R=Remove Files      Y=
-E=Expire by Time    L=Logons            S=NetMail Cost      Z=
-F=CR/FR/RR NetMail  M=Modem Rate        T=Time Online
-G=Multiple Nodes    N=Node Locking      U=
diff --git a/text/menu/flags1.asc b/text/menu/flags1.asc
deleted file mode 100644
index 582f3b131c..0000000000
--- a/text/menu/flags1.asc
+++ /dev/null
@@ -1,7 +0,0 @@
-A=                  H=                  O=                  V=
-B=                  I=                  P=                  W=
-C=                  J=                  Q=                  X=
-D=                  K=                  R=                  Y=
-E=                  L=                  S=                  Z=
-F=                  M=                  T=
-G=                  N=                  U=       
diff --git a/text/menu/flags2.asc b/text/menu/flags2.asc
deleted file mode 100644
index 582f3b131c..0000000000
--- a/text/menu/flags2.asc
+++ /dev/null
@@ -1,7 +0,0 @@
-A=                  H=                  O=                  V=
-B=                  I=                  P=                  W=
-C=                  J=                  Q=                  X=
-D=                  K=                  R=                  Y=
-E=                  L=                  S=                  Z=
-F=                  M=                  T=
-G=                  N=                  U=       
diff --git a/text/menu/flags3.asc b/text/menu/flags3.asc
deleted file mode 100644
index 582f3b131c..0000000000
--- a/text/menu/flags3.asc
+++ /dev/null
@@ -1,7 +0,0 @@
-A=                  H=                  O=                  V=
-B=                  I=                  P=                  W=
-C=                  J=                  Q=                  X=
-D=                  K=                  R=                  Y=
-E=                  L=                  S=                  Z=
-F=                  M=                  T=
-G=                  N=                  U=       
diff --git a/text/menu/flags4.asc b/text/menu/flags4.asc
deleted file mode 100644
index 582f3b131c..0000000000
--- a/text/menu/flags4.asc
+++ /dev/null
@@ -1,7 +0,0 @@
-A=                  H=                  O=                  V=
-B=                  I=                  P=                  W=
-C=                  J=                  Q=                  X=
-D=                  K=                  R=                  Y=
-E=                  L=                  S=                  Z=
-F=                  M=                  T=
-G=                  N=                  U=       
diff --git a/text/menu/info.wip b/text/menu/info.wip
deleted file mode 100644
index 3e5f12920c..0000000000
--- a/text/menu/info.wip
+++ /dev/null
@@ -1,21 +0,0 @@
-$00000D
-!|[Startup]
-!|V=1.10
-!|D=`
-!|O=15
-!|M=Information
-!|L=4590
-!|T=180
-!|W=4050
-!|H=4350
-!|B=12632256
-!|
-!|[Form]
-!|001=0B`t`20`20`100`60`1`Text Files`0`12632256`MS Sans Serif`8.25`Text Files`DETAIL.ICO
-!|002=0B`y`140`20`100`60`2`Your Statistics`0`12632256`MS Sans Serif`8.25`Your Stats`CATPLUS.ICO
-!|003=0B`i`20`100`100`60`3`System Information`0`12632256`MS Sans Serif`8.25`System`INFO.ICO
-!|004=0B`l`140`100`101`59`4``0`12632256`MS Sans Serif`8.25`Calls Today`PHONE.ICO
-!|005=0B`u`20`180`100`60`5`List Users`0`12632256`MS Sans Serif`8.25`List Users`LIST.ICO
-!|006=0B`q`140`180`100`60`6`Quit to Main Menu`0`12632256`MS Sans Serif`8.25`Quit`EXIT.ICO
-!|
-$0E
\ No newline at end of file
diff --git a/text/menu/keyboard.wip b/text/menu/keyboard.wip
deleted file mode 100644
index a26ff67770..0000000000
--- a/text/menu/keyboard.wip
+++ /dev/null
@@ -1,42 +0,0 @@
-$00000D
-!|[Startup]
-!|V=1.10
-!|D=`
-!|O=8
-!|M=Keyboard
-!|L=2910
-!|T=1440
-!|W=4725
-!|H=1875
-!|B=12632256
-!|
-!|[Form]
-!|001=0B`q`10`10`20`20`1``0`255`MS Sans Serif`8.25`Q`
-!|002=0B`w`40`10`20`20`2``0`12632256`MS Sans Serif`8.25`W`
-!|003=0B`E`70`10`20`20`3``0`12632256`MS Sans Serif`8.25`E`
-!|004=0B`r`100`10`20`20`4``0`12632256`MS Sans Serif`8.25`R`
-!|005=0B`T`130`10`20`20`5``0`12632256`MS Sans Serif`8.25`T`
-!|006=0B`y`160`10`20`20`5``0`12632256`MS Sans Serif`8.25`Y`
-!|007=0B`u`190`10`20`20`6``0`12632256`MS Sans Serif`8.25`U`
-!|008=0B`i`220`10`20`20`7``0`12632256`MS Sans Serif`8.25`I`
-!|009=0B`o`250`10`20`20`8``0`12632256`MS Sans Serif`8.25`O`
-!|010=0B`p`280`10`20`20`9``0`12632256`MS Sans Serif`8.25`P`
-!|011=0B`a`20`40`20`20`10``0`12632256`MS Sans Serif`8.25`A`
-!|012=0B`S`50`40`20`20`11``0`12632256`MS Sans Serif`8.25`S`
-!|013=0B`d`80`40`20`20`12``0`12632256`MS Sans Serif`8.25`D`
-!|014=0B`f`110`40`20`20`13``0`12632256`MS Sans Serif`8.25`F`
-!|015=0B`g`140`40`20`20`14``0`12632256`MS Sans Serif`8.25`G`
-!|016=0B`h`170`40`20`20`15``0`12632256`MS Sans Serif`8.25`H`
-!|017=0B`j`200`40`20`20`16``0`12632256`MS Sans Serif`8.25`J`
-!|018=0B`k`230`40`20`20`17``0`12632256`MS Sans Serif`8.25`K`
-!|019=0B`l`260`40`20`20`18``0`12632256`MS Sans Serif`8.25`L`
-!|020=0B`Z`30`70`20`20`20``0`12632256`MS Sans Serif`8.25`Z`
-!|021=0B`x`60`70`20`20`21``0`12632256`MS Sans Serif`8.25`X`
-!|022=0B`c`90`70`20`20`22``0`12632256`MS Sans Serif`8.25`C`
-!|023=0B`v`120`70`20`20`23``0`12632256`MS Sans Serif`8.25`V`
-!|024=0B`b`150`70`20`20`24``0`12632256`MS Sans Serif`8.25`B`
-!|025=0B`n`180`70`20`20`25``0`12632256`MS Sans Serif`8.25`N`
-!|026=0B`m`210`70`20`20`26``0`12632256`MS Sans Serif`8.25`M`
-!|027=0B`|M`240`70`40`20`27``0`12632256`MS Sans Serif`8.25`Enter`
-!|
-$0E
\ No newline at end of file
diff --git a/text/menu/login.wip b/text/menu/login.wip
deleted file mode 100644
index 66a7da29d3..0000000000
--- a/text/menu/login.wip
+++ /dev/null
@@ -1,20 +0,0 @@
-$00000D
-!|[Startup]
-!|V=1.10
-!|D=`
-!|O=15
-!|M=@BBS@
-!|L=1650
-!|T=525
-!|W=4050
-!|H=3225
-!|B=12632256
-!|
-!|[Form]
-!|001=0T`rate`20`20`220`20`1``0`12632256`MS Sans Serif`8.25`Connected at @BPS@bps`1`2
-!|002=0B`l`20`60`100`60`0`Test`0`12632256`MS Sans Serif`8.25`Login`WELCOME.ICO
-!|003=0B`h`140`60`100`60`1`Test`0`12632256`MS Sans Serif`8.25`Hang-up`CANCEL.ICO
-!|004=0B`g`20`140`100`30`2`Test`0`12632256`MS Sans Serif`8.25`Guest`
-!|005=0B`n`140`140`100`30`3`Test`0`12632256`MS Sans Serif`8.25`New Account`
-!|
-$0E
\ No newline at end of file
diff --git a/text/menu/logoff.asc b/text/menu/logoff.asc
deleted file mode 100644
index 21495b84aa..0000000000
--- a/text/menu/logoff.asc
+++ /dev/null
@@ -1,6 +0,0 @@
-lnbhLog off requested on c@DATE@b at c@TIME@
-
-Time used: w@TUSED@
-
-gThank you for calling y@BBS@g, another fine Synchronet BBS...
-n
diff --git a/text/menu/logoff.msg b/text/menu/logoff.msg
deleted file mode 100644
index d0e0fe764a..0000000000
--- a/text/menu/logoff.msg
+++ /dev/null
@@ -1,28 +0,0 @@
-l
-nk0c1��3��1�y7�������hr2�w1���ny7��hr6�w3��r7��w3��r7�w3�y5�r7�y5����7�5���w1�y5�����������������������������������������nk
-h3��nc3�1�y7�c3�y7�������hw1�����r6�w3��y5�w3��y5���w3�y5��w1�y5�����w1�y5��������������������������������������r7�y5���nk
-h1���3�1�3�nc1���3�y7���r�y�r�y���hw1��r7�6�w3��y5�w3�����y5�r7�y5�w3�y5����w3�y5������w3�y5��������w3�y5���������r7�y5�����������r7�y5�nk
-h0�1��0��r�k1��������3�ny7�c3�1�hk3�nc1�y7�c3�y7���r�y��hr6�ny7�hw1�ny7�hw1�3�����y5�w3����y5�r7�w3����r7�w3�r7�w3�r7����y5����������������������nk
-h0��r�k�nk3�h0�1��0��nk3��h1��������3�1��3��1��3�1�3�nc1���3�1��r7�y��c3�y7�r�y������hw1��r2�w1��r6��w1�r6�7��w3�r7�w3�y5����������w3��y5��w3�y5��nk
-h1������0�1�����0�1����0����1���0���nk3�����h0�nk3�h0�nk3��hr0�k��r�k1�������3�1�3�����nc1�r7��y��hr2�w1�r6�7�w3�y5�r7��w3�y5�r7�w3�y5����r7�y5��nk
-h3�nc1�hk3�1�3��1�3���1�������0���1��0�1�0�1�0��nk3�h0�����nk3�h0���nk3��h0���nk3��h0�r�nk3��hr0�k�1�������nc1�3�r7�y��hr6�w3�r7�w3�r7�w3�r7�w3�y5�r7����w3�y5��nk
-h3������1��3�1�3�����nc1�hk�3�1��������0����nk3��������h0���nk3�h0�r�k����r�k�1���r0�k1��r0�k1����3�nc1�r7�y�hw1�r6�w3�r7��y5�r7��y5��r7��y5��nk
-h3�nc1�hk3�nc1�hk3���1�����r0���nk3�h0�nk3�h0���nk0������������������h�nk0��������h�����nk3��h0�1��3���nc1�hk3�nc1�r7�y����hr6��7��y5��w3�r7�y5��nk
-h1�����r0���k�nk3��h0��nk0����������������h����nk0�h����������nk0�����h�����������1�3�nc1��y7�c3�r7�y�����hw1�r7���y5��w3�nk
-hr0������nk3�h0����nk0��h�nk0�����������h��n�r6�c7�w�nk7�h0���4���6�w�n�0�7�nc7�hk0�nk0�����h��6�4��0��7�c1�w3�r7�ny7�r�c1��3�r7��y���r�y��r�hw1�3�r7�y5�nk
-hr0���nk3��h0�������nk0����������h��nk7�y�hw3�6�0�7�0�k7�4������0�4��0�nk0�������h��4�nb7�hk6�4�0�nk7�hr�w�y�w1��y5�w3��nw7�hn�y7�nr7�y�hw1�r6����w1�r6�w3��nk
-hr0��nk3�hr0�nk3��h0�����nk0���������h��3�ny7�hw3�7�����6�c7�nk7�h4���nb7���hk4�0����nk0��h���4�nb7�hk4�6�nb7�hk6�nk7�c�hw�1��3�1�7�1�nw7�h1��3�y5��w1�r6�7�y5�r6�y5�w3��r7�nk
-hr0�k1�r0��nk3��h0���nk0�������h���nk3�h�nr7�y�hw�0�1����7�1�7��c1�k6�4��nb7�hk4�nb7�hk6�4���6�4�����6�4���r6�w7�1�7��1�7�1�y7�w1�3�r6��7�y5�r6�7�w3��y5����w1�y5�nk
-h3�1�r0�nk3��h0����nk0�����h�nk3�h�nc1�hk�r0�k3�r6�7�w3�1�0�1��3�7��1�7����r6�k7�4��nb7�hk4�nb7��hk6�4����6�4�7�nw7�h0�7�1���3�r7�w3�r7�ny7�r�y�hr6���y5��w1�3�1������3�nk
-y7���hk3��1��r0�k1�r0�k����nk3��hr0��k3�ny7���r�h�w3��7�0��1��7�������6�0�7��c���nc7�hw6�7���1�0�7�1�r7�y5�r7�w3�r6��7����y5�w1���3��1��3�1���y5�w1�y5�nk
-hr7�6�w1�r6�2�w1�nc1�hk���3�1�r0�nk3�h0��nk3��hr0�k1�3�nc3�y7�r�h6�7��nw7�h1�nw7�h��0��7��0�7���0���7�0��7��1�r7�6�ny7�hw1�ny7�r�h6�7�w1�r7�w1�r7��y5�w1�r7�y5��w1��r7�y5����r7��y5�w1��nk
-hw3���r7�6�7�w3�nr7�h6�y5�r6�ny7�c1�hk3�1�r0�nk3�h0�����r�k1��3�nc3�1�r7����h6�w3�nr7��h6��nr7�h6�c1�nr7�c1�k7�h1��3�ny7�r��c1�r7�hw1�nc1�hw3�r6�7�w3��nr7�h6��w3�y5�w3�r6�w1�r6�w3�r6�w3��r7�w1������nk
-hw3�y5�r7�w3�y5�r7�y5�r7�w3���nr7�y���hk3�nc3�hk1��0�nk3�h0���nk3�h0�nk3���h0��nk3���h0��nk3�h�1�nc3�hk1�3��ny7�c1�hk3�nr7�y��hw1�3�r7�w1�3�nr7�y�hr6�ny7�hr6��w1�r6�w3�1�3���r7�y5��w1��3��1�3��1��nk
-hw3��y5��w3�y5�w3�y5��r7�w3����ny7�hw3�nc3�1���3�hk�1���nk3�h1���nc1�hk��0�1�3���w�nr7�hk3�r6�ny7��hw1�nr7�y�hw1�nr7���h6�nr7�h6�7��6�nr7�h6���7�6�7���w3��1����3���1��7�1��nk
-hr7��w3�y5���w3�y5��r7�w3�r7��w3���1�ny7�hw3�1�ny7�r�hw3�ny7��hw1��nr7�hy5�r7�ny7�hw3�ny7�hr6�ny7���hw1�ny7�r�hw3�1�ny7�r�h6�nr7�h6�ny7�hr6���ny7�hw1�r6��w1�r6�w1�3���y5��r7��w1����������3�1���nk
-hr7��w3�y5�������r7�y5�r7�y5�w3�y5�w3�r7�y5�w3���r6��w3��1��r6�w1�ny7�hr6��w1�r7�6�w1�r6��ny7�hw1��3��1�r6���w1�r6��w1�3�r6�7�w3��r7�y5��w1�y5��w1��y5�w1��3�1�7�1�3��1�3�1�3�1�nk
-hr7�6�7�w3�r7�w3�y5��r7�w3�r7�y5�r7�y5���r7��y5���nw7�hr�y5�r7�w3�r7�w3����r7�w3����r7�6�w3����r6�w3�r7�w3��r6�7�w3�r7�y5�w1�y5�r7�y5���w1�y5�w1����y5�w1�����3��1�������nk
-hw�r7���w3�r7�w3��y5�r7�y5��w3�y5�w1�y5��w1�y5��r7�y5��w1�r7�y5�r7���y5�r7��w3���r7�w3����r7�w3�r7��w3�r7��y5�w1�r7�y5�r7�y5�w1��������������������������nk
-hr6�w1�r7�y5�r7��y5�w3�y5�w3��r7�y5������w1�y5����w1�y5���nw7�hy5��r7�y5��w1����y5��w1��3�r7��w3�r7�y5�r7�y5�r7�w1����y5�w1�y5��w1������3�1�3�1����3�1������3�nk
-nw0
-lhyBig Brother is watching...
diff --git a/text/menu/logon.asc b/text/menu/logon.asc
deleted file mode 100644
index f98ccd8cb1..0000000000
--- a/text/menu/logon.asc
+++ /dev/null
@@ -1,23 +0,0 @@
-nl
-
-
-nhbWelcome to...
-
-
-n���nh��˿ n��   nh˿ n���nh� ˿ n���nh��˿ n��   nh˿ n���nh��˿ n���nh��˿ n���nh� ˿ n���nh��˿ n���nh��Ϳ
-nc���nhc��˿ nc��nhc����� nc�� nhc� �� nc������nhc��δ nc���nhc���� nc��   nhc�� nc�� nhc� �� nc���nhc��nc�nhc��
-nb���nhb����   nb�nhb��   nb�� nhb���� nb���nhb���� nb��   nhb�� nb��  nhb��� nb���nhb���� nb�� nhb���� nb���nhb����   nb�nhb��
-
-���������  ��������   �������
-����   ��� ���   ��� ���
-���������  ��������   �������
-����   ��� ���   �������
-���������  ��������   �������
-
-
-�nbڿ  nhb� nb��nhb�Ŀ nb��nhb�Ŀ nb��nhb�Ŀ nb�nhb� nb��nhb�Ŀ nb��nhbĿ �   nb��nhb�¿   nb��nhb�¿
-�nc��  nhc� nc��nhc�   nc��nhc��� nc��nhc�¿ nc�nhc� ncô  nhc� ncô nhc� �   nc��nhc���   nc��nhc���
-�n�nh��� n��nh��� n�� nh�  n��nh��� n�nh� n��nh��� n�� nh���   n��nh��� o n��nh���
-n
-
-
diff --git a/text/menu/mailread.asc b/text/menu/mailread.asc
deleted file mode 100644
index ec39e205fc..0000000000
--- a/text/menu/mailread.asc
+++ /dev/null
@@ -1,11 +0,0 @@
-0lnc4������������������������k�0
-4c�  hyReading Mail Menu    nk4�0
-4c�k������������������������b0��������������������������
-�����
-� hy<CR> ngNext message�b� hyA ngReply to last message b�
-�    hy- ngPrevious message b� hyF ngForward mail�b�
-�    hyL ngList messages    b� hyD ngDelete last message   b�
-�    hyR ngReread last msg  b���������������������������
-�    hy# ngGo to message #  b�                         b�
-�    hyN ngNext unread msg  b� hyQ ngQuit to Main section  b�
-���������������������������������������������������n
diff --git a/text/menu/mailread.rip b/text/menu/mailread.rip
deleted file mode 100644
index bdd8279207..0000000000
--- a/text/menu/mailread.rip
+++ /dev/null
@@ -1,15 +0,0 @@
-
-!|1K|w0010271610|W0|=00000001|1B0000020PX4050E000F080700000000000000
-!|1U0707HL0P0000<>Reading Mail<>|c0F|S0107
-!|1B0000020PWW050E000F080700000000000000|1U0710HL360000<><>
-!|1B0000020QPC010E000F080900000000000000|Y00000100|1U0M161K1G0000<><CR><>^M
-!|1U0M1K1K1U0000<>-<>-|1U0M1Y1K280000<>L<>L
-!|1B0000020QPE010E000F080400000000000000|1U0M2Q1K300000<>Q<>Q
-!|1B0000020QPC010E000F080900000000000000|1U0M2C1K2M0000<>#<>+ 
-!|1U9616A41G0000<>R<>R|1U961KA41U0000<>A<>A|1U961YA4280000<>F<>F
-!|1U962CA42M0000<>D<>D|c00|@1Y16Next Message|@1Y1KPrevious Message
-!|@1Y1YList Message Titles and Authors|@1Y2QQuit to Main Section
-!|@1Y2CGo to Message Number|@AK16Reread Last Message
-!|@AK1KAuto-Reply to Last Message|@AK1YForward Mail to Another User
-!|@AK2CDelete Last Message|w000F271610|10000$ETW$|#|#|#
-
diff --git a/text/menu/mailread.wip b/text/menu/mailread.wip
deleted file mode 100644
index 348d8ae5f9..0000000000
--- a/text/menu/mailread.wip
+++ /dev/null
@@ -1,29 +0,0 @@
-$00000D
-!|[Startup]
-!|V=1.10
-!|D=`
-!|O=4
-!|M=Reading E-mail
-!|L=3885
-!|T=3960
-!|W=5550
-!|H=1470
-!|B=12632256
-!|
-!|[Form]
-!|001=0B`-`10`10`40`40`1`Previous Message`0`12632256`MS Sans Serif`8.25``PREV.ICO
-!|002=0B`|M`60`10`40`40`2`Next Message`0`12632256`MS Sans Serif`8.25``NEXT.ICO
-!|003=0B`l`160`10`40`40`3``0`12632256`MS Sans Serif`8.25``LIST.ICO
-!|004=0B`r`110`10`40`40`4``0`12632256`MS Sans Serif`8.25``BACK.ICO
-!|005=0B`a`210`10`40`40`5`Reply to Last E-mail Message`0`12632256`MS Sans Serif`8.25``EDIT.ICO
-!|006=0B`q`310`10`40`40`7`Delete Last E-mail Message`0`12632256`MS Sans Serif`8.25``EXIT.ICO
-!|007=0B`d`260`10`40`40`7``0`12632256`MS Sans Serif`8.25``DELETE.ICO
-!|008=0T`prev`10`50`40`15`8``0`12632256`MS Sans Serif`8.25`Prev`1`0
-!|009=0T`Next`60`50`40`15`9``0`12632256`MS Sans Serif`8.25`Next`1`0
-!|010=0T`reread`110`50`40`15`10``0`12632256`MS Sans Serif`8.25`Again`1`0
-!|011=0T`list`160`50`40`15`11``0`12632256`MS Sans Serif`8.25`List`1`0
-!|012=0T`reply`210`50`40`15`12``0`12632256`MS Sans Serif`8.25`Reply`1`0
-!|013=0T`delete`260`50`40`15`13``0`12632256`MS Sans Serif`8.25`Delete`1`0
-!|014=0T`quit`310`50`40`15`14``0`12632256`MS Sans Serif`8.25`Quit`1`0
-!|
-$0E
\ No newline at end of file
diff --git a/text/menu/main.asc b/text/menu/main.asc
deleted file mode 100644
index d490a512c3..0000000000
--- a/text/menu/main.asc
+++ /dev/null
@@ -1,20 +0,0 @@
-0lnc4�����������������������k�0
-4c� hySynchronet Main Menu nk4�0
-4c�k�����������������������0
-4b0����4 hwRead/Post Messages nb����4 hwMessage Area Selection nb�����4 hwElectronic Mail nb�����
-�������
-� hyN ngNew message scan�b� hyJ ngJump to new msg area  b� hyE ngRead/Send E-mail�b�
-� hyR ngRead message prompt   b�����������������������������
-� hyZ ngContinuous new scan   b��hy* ngList sub-boards  b������4 hwOther Commands nb�����
-� hyB ngBrowse new scan�b��hy/* ngList groups�b���
-� hyQ ngQWK packet transfer   b� hy{ }  # ngSelect sub-board b�  hyD ngDefault user config  b�
-��������������������������� hy[ ] /# ngSelect group�b�  hy& ngMessage scan config  b�
-� hyP ngPost a message�b���  hyU ngUser lists�b�
-� hyA ngPost auto-message�b����������4 hwGo to nb����������  hyI ngInformation�b�
-�����  hyM ngMinute Bank�b�
-������4 hwMessage Search nb����� hyT ngFile Transfer section b� hy/L ngNode activity�b�
-��� hyG ngText file section�b� hy^K ngCtrl-key Menu�b�
-� hyF ngFind text in messages b� hyC ngChat section�b���������������������������
-� hyS ngScan for msgs to you  b� hyX ngExternal programs�b�  hyO ngLogoff BBS (or /O)   b�
-�������
-4  hyAnytime: cCtrl-U nc4Who's online  hCtrl-P nc4Send private msg  hCtrl-C nc4Abort cmd/text n
diff --git a/text/menu/main.rip b/text/menu/main.rip
deleted file mode 100644
index 3333ca77f9..0000000000
--- a/text/menu/main.rip
+++ /dev/null
@@ -1,48 +0,0 @@
-
-!|1K|w0010271610|W00|1B0000020PX4050E000F080700000000000000
-!|1U0707HL0P0000<>Synchronet Main Menu<>|1B0000020PWW050E000F080700000000000000
-!|1U0710HL7T0000<><>|c00|Y00000100|1B0000020QPI010E000F080900000000000000
-!|1U0Y1E1W1O2800<>  P  <>P|1U0Y1S1W222A00<>  R  <>R
-!|1U0Y261W2G2600<>  N  <>((Make a choice::ns@_S_ub-board,ng@_G_roup,na@_A_ll,^\
-M@_Q_uit))
-!|1U0Y2K1W2U2I00<>  Z  <>((Make a choice::zs@_S_ub-board,zg@_G_roup,za@_A_ll,^\
-M@_Q_uit))
-!|1U0Y2Y1W381U00<>  B  <>((Make a choice::bs@_S_ub-board,bg@_G_roup,ba@_A_ll,^\
-M@_Q_uit))
-!|1U0Y3C1W3M2900<>  Q  <>Q
-!|1U0Y3Q1W401YY0<>  F  <>((Make a choice::fs@_S_ub-board,fg@_G_roup,fa@_A_ll,^\
-M@_Q_uit))
-!|1U0Y441W4E2B00<>  S  <>((Make a choice::ss@_S_ub-board,sg@_G_roup,sa@_A_ll,^\
-M@_Q_uit))
-!|1U0Y4I1W4S1T00<>  A  <>((Choose one::ar@_R_ead,aw@_W_rite,^M@_Q_uit))
-!|1B0000020QPI010E000F080100000000000000|1U0Y5A1W5K1600<>  *  <>*
-!|1U0Y5O1W5Y2500<>  M  <>/*
-!|1U0Y621W6C2100<>  I  <>((Choose one::ii@_S_ystem,iv@_V_ersion,iy@_Y_our Stat\
-s,is@S_u_b-board,^M@_Q_uit))
-!|1U0Y6G1W6Q2D00<>  U  <>((Choose one::ul@_L_ogons Today,us@_S_ub-board,ua@_A_\
-ll,^M@_Q_uit))
-!|1U0Y6U1W742400<>  L  <>/L|1U0Y781W7I2200<>  J  <>J
-!|1B0000020QPI010E000F080300000000000000|1U8W1E9U1O1200<>&<>&
-!|1U8W1S9U222700<>O<>O$MKILL$|1U8W269U2G0L00<> ^U  <>^U
-!|1U8W2K9U2U0G00<> ^P  <>^P|1U8W2Y9U380B00<> ^K  <>^K
-!|1B0000020QPE010E000F080C00000000000000|1U7U3Y8S483G00<>{<>{
-!|1U8W3Y9U483I00<>}<>}|1U7U4C8S4M2K00<>[<>[|1U8W4C9U4M2L00<>]<>]
-!|1B0000020QPI010E000F080200000000000000|1U8W5A9U5K1X00<>  E  <>E
-!|1U8W5O9U5Y2C00<>  T  <>T|1U8W629U6C1Z00<>  G  <>G|1U8W6G9U6Q2G00<>  X  <>X
-!|1U8W6U9U741V00<>  C  <>C|1U8W789U7I1W00<>  D  <>D|@2S11Message Functions|c0F
-!|@2T12Message Functions|c00|@B111Control Functions|c0F|@B212Control Functions
-!|c00|@2N4VListing Functions|c0F|@2O4WListing Functions|c00
-!|@AV3HSub-board Selection|c0F|@AW3ISub-board Selection|c00
-!|@B44VOther Selections|c0F|@B54WOther Selections|c00|@281FPost Message
-!|@281TRead Messages|@2827New Message Scan|@282LContinuous Message Scan
-!|@282ZBrowse Message Scan|@283DQWK Packet Transfer|@283RFind Text in Messages
-!|@2845Search for Your Messages|@284JRead/Write Auto-Message
-!|@285BSub-boards within Group|@285PMessage Groups|@2863Information Commands
-!|@286HUser Lists|@286VList All Nodes|@2879Jump to a Message Area
-!|@AA1FConfiguration Commands|@AA1TLogoff (also /0)
-!|@AA27List Users Online (Anywhere)|@AA2LSend Message to Another Node
-!|@AA2ZControl Key Command Menu|@AA3YChange Sub, or Type Number
-!|@AA4CChange Group, or Type /Number|@AA5BElectronic Mail Commands
-!|@AA5PFile Transfers|@AA63General Text File Sections|@AA6HExternal Programs
-!|@AA6VChat Commands|@AA79Account Default Configuration|100AC$ETW$|#|#|#
-
diff --git a/text/menu/maincfg.asc b/text/menu/maincfg.asc
deleted file mode 100644
index f7182823ce..0000000000
--- a/text/menu/maincfg.asc
+++ /dev/null
@@ -1,8 +0,0 @@
-lnc4�����������������������������k�0
-4c� hyMessage Scan Configuration nk4�0
-4c�k�����������������������������b0������������������������������������
-�����
-� hyN ngNew-scan configuration�b� hyS ngYour message scan config  b�
-� hyP ngSet new-scan pointers�b�������������������������������
-� hyI ngReinitialize new-scan pointers b� hyQ ngQuit to Main menu�b�
-������������������������������������������������������������������n
diff --git a/text/menu/maincfg.rip b/text/menu/maincfg.rip
deleted file mode 100644
index dacf7d2e58..0000000000
--- a/text/menu/maincfg.rip
+++ /dev/null
@@ -1,12 +0,0 @@
-
-!|1K|w0010271610|W0|=00000001|1B0000020PX4050E000F080700000000000000
-!|1U0707HL0P0000<>Configuration Menu<>|c0F|S0107
-!|1B0000020PWW050E000F080700000000000000|1U0710HL2E0000<><>
-!|1B0000020QPE010E000F080300000000000000|Y00000100|1U0M161K1G0000<>C<>C
-!|1U0M1K1K1U0000<>R<>R|1U9616A41G0000<>N<>N|1U961KA41U0000<>P<>P
-!|1U961YA4280000<>I<>I|1B0000020QPE010E000F080400000000000000
-!|1U0M1Y1K280000<>Q<>Q|c00|@1Y16Convert Credits to Minutes
-!|@1Y1KUnfiltered (Raw) Input Mode|@AK1YReinitialize Message Pointers
-!|@AK16New Message Scan Configuration|@AK1KNew Message Scan Pointers
-!|@1Y1YQuit to the Main Menu|w000C271610|10000$ETW$|#|#|#
-
diff --git a/text/menu/maininfo.asc b/text/menu/maininfo.asc
deleted file mode 100644
index 40c0627e20..0000000000
--- a/text/menu/maininfo.asc
+++ /dev/null
@@ -1,8 +0,0 @@
-0lnc4��������������������������������k�0
-4c� hyMain Section Information Menu nk4�0
-4c�k��������������������������������b0���������������������������
-�����
-� hyI ngSystem information�b� hyY ngYour statistics   b�
-��hy0V ngSynchronet version information   b�����������������������
-� hyS ngInformation on current sub-board b� hyQ ngQuit to Main menu b�
-������������������������������������������������������������n
diff --git a/text/menu/maininfo.rip b/text/menu/maininfo.rip
deleted file mode 100644
index 9c1ce1d85b..0000000000
--- a/text/menu/maininfo.rip
+++ /dev/null
@@ -1,10 +0,0 @@
-
-!|1K|w0010271610|W0|=00000001|1B0000020PX4050E000F080700000000000000
-!|1U0707HL0P0000<>Information Menu<>|c0F|S0107
-!|1B0000020PWW050E000F080700000000000000|1U0710HL2E0000<><>
-!|1B0000020QPC010E000F080100000000000000|Y00000100|1U0M161K1G0000<>I<>I
-!|1U0M1K1K1U0000<>V<>V|1U961KA41U0000<>S<>S|1U9616A41G0000<>Y<>Y
-!|1B0000020QPE010E000F080400000000000000|1U0M1Y1K280000<>Q<>Q|c00|@1Y16System
-!|@1Y1KVersion|@AK1KSub-board|@AK16Your Statistics|@1Y1YQuit to the Main Menu
-!|w000F271610|10000$ETW$|#|#|#
-
diff --git a/text/menu/major/email.asc b/text/menu/major/email.asc
deleted file mode 100644
index 8d4c1495b9..0000000000
--- a/text/menu/major/email.asc
+++ /dev/null
@@ -1,10 +0,0 @@
-ghThe following E-mail services are available:
-
-c   R y=> Read message(s)
-c   W y=> Write a message
-c   E y=> Erase a message
-
-c   S y=> Send NetMail
-c   U y=> Upload a file attachment
-cs
-Select a letter from this list, or X to exit: n
\ No newline at end of file
diff --git a/text/menu/major/file.asc b/text/menu/major/file.asc
deleted file mode 100644
index 61780b1b3a..0000000000
--- a/text/menu/major/file.asc
+++ /dev/null
@@ -1,9 +0,0 @@
-ghThe following Library services are available:
-
-c   F y=> File directory
-c   D y=> Download a file
-c   U y=> Upload a file
-c   S y=> Select a LIB
-cs
-Current LIB: @LIB@ @DIR@
-Select a letter from this list (or X to exit): n
\ No newline at end of file
diff --git a/text/menu/major/main.asc b/text/menu/major/main.asc
deleted file mode 100644
index 9121960557..0000000000
--- a/text/menu/major/main.asc
+++ /dev/null
@@ -1,15 +0,0 @@
-ghPlease select one of the following:
-
-c   T y... Teleconference
-c   I y... Information Center
-c   F y... Forums (Public Message Bases)
-c   E y... Electronic Mail
-c   L y... Library of Files
-c   D y... Doors (External Programs)
-c   A y... Account Display/Edit
-c   R y... Registry of Users
-(c   S y... System Management
-)c   X y... Exit System (Logoff)
-cs
-(TOP)
-Make your selection (T,I,F,E,L,A,P,R,S,? for help, or X to exit): n
\ No newline at end of file
diff --git a/text/menu/major/msg.asc b/text/menu/major/msg.asc
deleted file mode 100644
index 673753a6cc..0000000000
--- a/text/menu/major/msg.asc
+++ /dev/null
@@ -1,9 +0,0 @@
-ghWelcome, @NAME@, to @GRP@ @SUB@
-
-c   R y... Read messages
-c   W y... Write a message
-c   Q y... Quickscan Menu
-c   T y... Teleconference
-c   S y... Select a new Forum
-cs
-Select a letter from this list, or X to exit: n
\ No newline at end of file
diff --git a/text/menu/major/quickscn.asc b/text/menu/major/quickscn.asc
deleted file mode 100644
index 6282734acf..0000000000
--- a/text/menu/major/quickscn.asc
+++ /dev/null
@@ -1,9 +0,0 @@
-ghQuickscan functions:
-
-c   S y... scan through messages
-c   L y... list messages to you
-c   K y... keyword-search for messages
-
-c   C y... configure your quickscan
-cs
-Select a letter from the above list, or X to exit: n
\ No newline at end of file
diff --git a/text/menu/major/userdefs.asc b/text/menu/major/userdefs.asc
deleted file mode 100644
index 355f83e3b7..0000000000
--- a/text/menu/major/userdefs.asc
+++ /dev/null
@@ -1,6 +0,0 @@
-gh   User-ID: @NAME@
-
-c   S y=> Display statistics on your account
-c   A y=> Display or edit account information
-cs
-Your choice (or 'X' to exit): n
\ No newline at end of file
diff --git a/text/menu/msgattr.asc b/text/menu/msgattr.asc
deleted file mode 100644
index 7d8a91ea63..0000000000
--- a/text/menu/msgattr.asc
+++ /dev/null
@@ -1 +0,0 @@
-nhb[nhRnhb]ead, [nhPnhb]rivate, [nhAnhb]non, [nhKnhb]ill, [nhMnhb]oderated, [nhVnhb]alidated, [nhNnhb]on-purgable:n z
diff --git a/text/menu/msgs.wip b/text/menu/msgs.wip
deleted file mode 100644
index b76df9a9c1..0000000000
--- a/text/menu/msgs.wip
+++ /dev/null
@@ -1,21 +0,0 @@
-$00000D
-!|[Startup]
-!|V=1.10
-!|D=`
-!|O=15
-!|M=Messages
-!|L=1770
-!|T=345
-!|W=4050
-!|H=4350
-!|B=12632256
-!|
-!|[Form]
-!|001=0B`r`20`20`100`60`1`Read Messages`0`12632256`MS Sans Serif`8.25`Read`DETAIL.ICO
-!|002=0B`p`140`20`100`60`2`Post Message`0`12632256`MS Sans Serif`8.25`Post`EDIT.ICO
-!|003=0B`s`20`100`100`60`3`Search Messages for Specific Text`0`12632256`MS Sans Serif`8.25`Text Search`SEARCH.ICO
-!|004=0B`n`140`100`100`60`4`Search for New Messages`0`12632256`MS Sans Serif`8.25`New`FIND.ICO
-!|005=0B`q`20`180`100`60`5`QWK Message Upload/Download for Offline Readers`0`12632256`MS Sans Serif`8.25`QWK`SAVE.ICO
-!|006=0B`x`140`180`100`60`6`Quit to Main Menu`0`12632256`MS Sans Serif`8.25`Quit`EXIT.ICO
-!|
-$0E
\ No newline at end of file
diff --git a/text/menu/msgscan.asc b/text/menu/msgscan.asc
deleted file mode 100644
index 904ca0398d..0000000000
--- a/text/menu/msgscan.asc
+++ /dev/null
@@ -1,19 +0,0 @@
-0lnc4������������������������k�0
-4c� hyReading Messages Menu nk4�0
-4c�k������������������������0
-4b0������4 hwRead Messages nb��������4 hwPost/Reply Messages nb������4 hwMessage Threading nb����
-�������
-� hy<CR> ngNext message�b� hyP ngPost a message�b� hy< > ng-/+ by Title�b�
-�    hy- ngPrevious message   b� hyD ngDelete a message�b� hy{ } ng-/+ by Author�b�
-�    hyC ngContiunous read    b��������������������������� hy[ ] ng-/+ by 'To User'    b�
-�    hyR ngReread last msg    b� hyA ngReply to last message b���
-�    hy# ngGo to message #    b� hyM ngReply in mail to last b������4 hwOther Commands nb�����
-�������
-�������4 hwList Titles nb�������������4 hwSearch/Find nb������� hyB ngBypass current sub    b�
-����� hyI ngInformation on sub    b�
-� hyL ngTitles and authors    b� hyY ngMessages to you�b���������������������������
-� hyT ngNext ten msg titles   b� hyF ngFind text in messages b� hyQ ngQuit to Main menu�b�
-�������
-4  hyAnytime: cCtrl-U nc4Who's online  hCtrl-P nc4Send private msg  hCtrl-C nc4Abort cmd/text n
-(
-     hyO ngOperator Commandsn
diff --git a/text/menu/msgscan.rip b/text/menu/msgscan.rip
deleted file mode 100644
index 65985a8162..0000000000
--- a/text/menu/msgscan.rip
+++ /dev/null
@@ -1,20 +0,0 @@
-
-!|1K|w0010271610|W0|=00000001|1B0000020PX4050E000F080700000000000000
-!|1U0707HL0O0000<>Reading Messages<>|c0F|S0107
-!|1B0000020PWW050E000F080700000000000000|1U0710HL4G0000<><>
-!|1B0000020QPE010E000F080900000000000000|Y00000100|1U0M161K1G0000<><CR><>^M
-!|1U0M1K1K1U0000<>-<>-|1U0M1Y1K280000<>L<>L|1U0M2C1K2M0000<>T<>T
-!|1U0M2Q1K300000<>B<>B|1U9616A41G0000<>R<>R|1U961KA41U0000<>A<>A
-!|1U961YA4280000<>M<>M|1U962CA42M0000<>Y<>Y|1U0M341K3E0000<>C<>C
-!|1B0000020QPC010E000F080400000000000000|1U0M3W1K460000<>Q<>Q
-!|1B0000020QPC010E000F080900000000000000|1U0M3I1K3S0000<>#<>
-!|1U962QA4300000<>F<>F|1U9634A43E0000<>D<>D|1U963IA43S0000<>P<>P
-!|1U963WA4460000<>I<>I|c00|@1Y16Next Message|@1Y1KPrevious Message
-!|@1Y1YList Message Titles and Authors|@1Y2CTitles of Next Ten Messages
-!|@1Y2QBypass Current Sub-Board|@1Y34Continuous Read|@1Y3WQuit to Main Section
-!|@1Y3IGo to Message Number|@AK16Reread Last Message|@AK1KReply to Last Message
-!|@AK1YReply in Mail to Last Message|@AK2CTitles of Your Messages
-!|@AK2QFind Text in All Messages|@AK34Delete Message|@AK3IPost a Message
-!|@AK3WInformation on Sub-board|w000L271610|L1V2Z1V2Z|L1D2U1D2U|100AC$ETW$|#|#
-!|#
-
diff --git a/text/menu/msgscan.wip b/text/menu/msgscan.wip
deleted file mode 100644
index 9cacaacd79..0000000000
--- a/text/menu/msgscan.wip
+++ /dev/null
@@ -1,39 +0,0 @@
-$00000D
-!|[Startup]
-!|V=1.10
-!|D=`
-!|O=4
-!|M=Reading Messages
-!|L=90
-!|T=3960
-!|W=9300
-!|H=1500
-!|B=12632256
-!|
-!|[Form]
-!|001=0B`-`10`10`40`40`1`Previous Message`0`12632256`MS Sans Serif`8.25``PREV.ICO
-!|002=0B`|M`60`10`40`40`2`Next Message`0`12632256`MS Sans Serif`8.25``NEXT.ICO
-!|003=0B`l`210`10`40`40`3``0`12632256`MS Sans Serif`8.25``LIST.ICO
-!|004=0B`r`110`10`40`40`4``0`12632256`MS Sans Serif`8.25``BACK.ICO
-!|005=0B`a`260`10`40`40`5`Reply to Last E-mail Message`0`12632256`MS Sans Serif`8.25``EDIT.ICO
-!|006=0B`m`360`10`40`40`7`Delete Last E-mail Message`0`12632256`MS Sans Serif`8.25``NOTEPAD.ICO
-!|007=0B`d`310`10`40`40`7``0`12632256`MS Sans Serif`8.25``DELETE.ICO
-!|008=0T`prev`10`50`40`15`8``0`12632256`MS Sans Serif`8.25`Prev`1`0
-!|009=0T`Next`60`50`40`15`9``0`12632256`MS Sans Serif`8.25`Next`1`0
-!|010=0T`reread`110`50`40`15`10``0`12632256`MS Sans Serif`8.25`Again`1`0
-!|011=0T`list`210`50`40`15`11``0`12632256`MS Sans Serif`8.25`List`1`0
-!|012=0T`reply`260`50`40`15`12``0`12632256`MS Sans Serif`8.25`Reply`1`0
-!|013=0T`delete`310`50`40`15`13``0`12632256`MS Sans Serif`8.25`Delete`1`0
-!|014=0T`e-mail`360`50`40`15`14``0`12632256`MS Sans Serif`8.25`E-mail`1`0
-!|015=0B`t`160`10`40`40`15``0`12632256`MS Sans Serif`8.25``2NDPAGE.ICO
-!|016=0T`ten`160`50`40`15`16``0`12632256`MS Sans Serif`8.25`Titles`1`0
-!|017=0B`p`410`10`40`40`17``0`12632256`MS Sans Serif`8.25``EDIT.ICO
-!|018=0T`post`410`50`40`15`18``0`12632256`MS Sans Serif`8.25`Post`1`0
-!|019=0B`y`460`10`40`40`19``0`12632256`MS Sans Serif`8.25``CONTACT.ICO
-!|020=0T`yours`460`50`40`15`20``0`12632256`MS Sans Serif`8.25`Yours`1`0
-!|021=0B`f`510`10`40`40`21``0`12632256`MS Sans Serif`8.25``SEARCH.ICO
-!|022=0T`find`510`50`40`15`22``0`12632256`MS Sans Serif`8.25`Find`1`0
-!|023=0B`q`560`10`40`40`23``0`12632256`MS Sans Serif`8.25``EXIT.ICO
-!|024=0T`quit`560`50`40`15`24``0`12632256`MS Sans Serif`8.25`Quit`1`0
-!|
-$0E
\ No newline at end of file
diff --git a/text/menu/multchat.asc b/text/menu/multchat.asc
deleted file mode 100644
index bb022f2028..0000000000
--- a/text/menu/multchat.asc
+++ /dev/null
@@ -1,10 +0,0 @@
-nlc4����������������������k�0
-4c� hyMultinode Chat Menu nk4�0
-4c�k����������������������b0��������������������������������������������������������
-�����
-� hy/W ngWhisper to another user  �b� hy/E ngToggle echo status�b�
-� hy/L ngList all node activity�b� hy/A ngToggle action commands b�
-� hy/* ngList Chat channels�b� hy/C ngList action commands   b�
-� hy/# ngChange Chat channel (# is channel number)    b� hy/Q ngQuit multinode chat    b�
-�����
-4  hyAnytime: cCtrl-U nc4Who's online  hCtrl-P nc4Send private msg  hCtrl-C nc4Abort cmd/text n
diff --git a/text/menu/multchat.rip b/text/menu/multchat.rip
deleted file mode 100644
index bd0e9484c9..0000000000
--- a/text/menu/multchat.rip
+++ /dev/null
@@ -1,13 +0,0 @@
-
-!|1K|*|e|w0010271610|W0|=00000001|1B0000020PX4050E000F080700000000000000
-!|1U0707HL0P0000<>Multinode Chat<>|c0F|S0107
-!|1B0000020PWW050E000F080700000000000000|1U0710HL2S0000<><>
-!|1B0000020QPE010E000F080500000000000000|Y00000100|1U0M161K1G0000<>/W<>^M/P
-!|1U0M1K1K1U0000<>/L<>^M/L|1U961KA41U0000<>/#<>|1U961YA4280000<>^U<>^U
-!|1U962CA42M0000<>^P<>^P|1U0M1Y1K280000<>/E<>^M/E|1U9616A41G0000<>/*<>^M/*
-!|1B0000020QPE010E000F080400000000000000|1U0M2C1K2M0000<>/Q<>^M/Q|c00
-!|@1Y16Whisper to another user|@1Y1KList All Nodes|@1Y1YToggle Echo Status
-!|@1Y2CQuit Chat Session|@AK16List Channels|@AK1KChange Channel Number
-!|@AK1YList Users Online|@AK2CSend Message to Another Node|w000E271610
-!|10000$ETW$|#|#|#
-
diff --git a/text/menu/namepass.wip b/text/menu/namepass.wip
deleted file mode 100644
index 1965ae1c11..0000000000
--- a/text/menu/namepass.wip
+++ /dev/null
@@ -1,20 +0,0 @@
-$00000D
-!|[Startup]
-!|V=1.10
-!|D=`
-!|O=8
-!|M=Login
-!|L=3555
-!|T=225
-!|W=3375
-!|H=3375
-!|B=12632256
-!|
-!|[Form]
-!|001=1T`name`10`30`200`30`1``0`12632256`MS Sans Serif`8.25`0`2
-!|002=0T`label`10`10`200`20`2``0`12632256`MS Sans Serif`8.25`Please enter your user name`0`0
-!|003=0B`|M`60`130`100`60`3``0`12632256`MS Sans Serif`8.25`Login`WELCOME.ICO
-!|004=1T`password`10`90`200`30`2``12632256`12632256`MS Sans Serif`8.25`0`2
-!|005=0T`enter pass`10`70`160`20`5``0`12632256`MS Sans Serif`8.25`Please enter your password`0`0
-!|
-$0E
\ No newline at end of file
diff --git a/text/menu/noyes.wip b/text/menu/noyes.wip
deleted file mode 100644
index cccb3c7a73..0000000000
--- a/text/menu/noyes.wip
+++ /dev/null
@@ -1,20 +0,0 @@
-$00000D
-!|[Startup]
-!|V=1.10
-!|D=`
-!|O=8
-!|M=No or Yes
-!|L=1815
-!|T=510
-!|W=3000
-!|H=2100
-!|B=12632256
-!|
-!|[Form]
-!|001=0T`question`10`10`170`35`1``0`12632256`MS Sans Serif`8.25`@QUESTION@`1`0
-!|002=0B`n`50`50`40`40`2``0`12632256`MS Sans Serif`8.25``CANCEL.ICO
-!|003=0B`y`100`50`40`40`3``0`12632256`MS Sans Serif`8.25``DONE.ICO
-!|004=0T`no`50`90`40`15`4``0`12632256`MS Sans Serif`8.25`No`1`0
-!|005=0T`yes`100`90`40`15`5``0`12632256`MS Sans Serif`8.25`Yes`1`0
-!|
-$0E
\ No newline at end of file
diff --git a/text/menu/number.wip b/text/menu/number.wip
deleted file mode 100644
index 0730b2f393..0000000000
--- a/text/menu/number.wip
+++ /dev/null
@@ -1,26 +0,0 @@
-$00000D
-!|[Startup]
-!|V=1.10
-!|D=`
-!|O=8
-!|M=Pick a Number
-!|L=1605
-!|T=555
-!|W=1575
-!|H=2475
-!|B=12632256
-!|
-!|[Form]
-!|001=0B`1`10`10`20`20`1``0`12632256`MS Sans Serif`8.25`1`
-!|002=0B`2`40`10`20`20`2``0`12632256`MS Sans Serif`8.25`2`
-!|003=0B`3`70`10`20`20`3``0`12632256`MS Sans Serif`8.25`3`
-!|004=0B`4`10`40`20`20`4``0`12632256`MS Sans Serif`8.25`4`
-!|005=0B`5`40`40`20`20`5``0`12632256`MS Sans Serif`8.25`5`
-!|006=0B`6`70`40`20`20`6``0`12632256`MS Sans Serif`8.25`6`
-!|007=0B`7`10`70`20`20`7``0`12632256`MS Sans Serif`8.25`7`
-!|008=0B`8`40`70`20`20`8``0`12632256`MS Sans Serif`8.25`8`
-!|009=0B`9`70`70`20`20`9``0`12632256`MS Sans Serif`8.25`9`
-!|010=0B`q`10`100`32`32`10``0`12632256`MS Sans Serif`8.25``CANCEL.ICO
-!|011=0B`|M`60`100`32`32`11``0`12632256`MS Sans Serif`8.25``DONE.ICO
-!|
-$0E
\ No newline at end of file
diff --git a/text/menu/pause.wip b/text/menu/pause.wip
deleted file mode 100644
index 5f4a9dadd9..0000000000
--- a/text/menu/pause.wip
+++ /dev/null
@@ -1,15 +0,0 @@
-$00000D
-!|[Startup]
-!|V=1.10
-!|D=`
-!|O=12
-!|M=Continue
-!|L=1695
-!|T=615
-!|W=2925
-!|H=1275
-!|B=12632256
-!|[Form]
-!|001=0B`|M`10`10`80`40`1``0`12632256`MS Sans Serif`8.25`OK`
-!|002=0B`n`100`10`80`40`2``0`12632256`MS Sans Serif`8.25`Cancel`
-$0E
\ No newline at end of file
diff --git a/text/menu/pcboard/brdm.asc b/text/menu/pcboard/brdm.asc
deleted file mode 100644
index 67c74c8c1f..0000000000
--- a/text/menu/pcboard/brdm.asc
+++ /dev/null
@@ -1,21 +0,0 @@
-nlk4������������������������������������������������������������������������������nhb4�0
-nk4� nhc4Date: nhg4@SYSDATE@               nh4M a i n   M e n u               nhc4Time: nhg4@SYSTIME@0nhb4 �0
-nk4�nc4� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �nhb4�0
-nk4� nh4(nhr4Fnh4)ile Directories      (nhr4Lnh4)ocate a filename       (nhr4EXTnh4)ended file info      nhb4�0
-nk4� nh4(nhr4Dnh4)ownload a file       (nhr4Nnh4)ew file scan           (nhr4VIEWnh4) a file before d/l  nhb4�0
-nk4� nh4(nhr4Unh4)pload a file         (nhr4Znh4)ippy Text Search       (nhr4BATCHnh4) transfer menu     nhb4�0
-nk4�                         nh4(nhr4Tnh4)emp archive menu       (nhr4REMOVEnh4) or edit a file   nhb4�0
-nk4�                                                                             nhb4�0
-nk4� nh4(nhr4Jnh4)oin a conference     (nhr4Anh4)djust pointers         (nhr4TSnh4) Text search msgs.    nhb4�0
-nk4� nh4(nhr4Enh4)nter a message       (nhr4Cnh4)omment to SysOp        (nhr4QWKnh4) Transfer QWK mail   nhb4�0
-nk4� nh4(nhr4Rnh4)ead messages         (nhr4Ynh4)our messages           (nhr4AUTOnh4) message            nhb4�0
-nk4� nh4(nhr4RNnh4) Read New messages  (nhr4RCnh4) Read New Continuous  (nhr4SELECTnh4) confs. to scan   nhb4�0
-nk4�                                                                             nhb4�0
-nk4� nh4(nhr4Mnh4)ail Send/Receive     (nhr4Xnh4)pert mode toggle       (nhr4Onh4) Page SysOp            nhb4�0
-nk4� nh4(nhr4Bnh4)ulletins             (nhr4Gnh4)oodbye (Logoff)        (nhr4Inh4)nitial logon screen    nhb4�0
-nk4� nh4(nhr4Snh4)ystem Information    (nhr4Wnh4) Change your info      (nhr4Pnh4)rivate node message    nhb4�0
-nk4� nh4(nhr4Vnh4)iew your statistics                                                      nhb4�0
-nk4�                                                                             nhb4�0
-nk4� nh4(nhy4CHATnh4) with other users                 (nhy4OPENnh4) a door                       nhb4�0
-nk4� nh4(nhy4NEWSnh4) Display system news              (nhy4USERnh4) List conference members      nhb4�0
-nk4�nhb4������������������������������������������������������������������������������n
diff --git a/text/menu/pcboard/welcome.asc b/text/menu/pcboard/welcome.asc
deleted file mode 100644
index 9a52c68c24..0000000000
--- a/text/menu/pcboard/welcome.asc
+++ /dev/null
@@ -1,22 +0,0 @@
-nl
-nh�n������������������������������������������
-�������������������������������������������
-�������������������������������������������
-�������������������������������������������
-    nk5�����������������������������������������������������������������������nhm5�0
-nhnh nh nh nh nk5�                           nh5����   ���  ����   ���  �                  nhm5�0
-nhnh nh nh nh nk5�                            nh5�  � �   �  �  � �   � �                  nhm5�0
-nhnh nh nh nh nk5�   nh5S Y N C H R O N E T      ���� �      ���� �     � ���� ���� ����   nhm5�0
-nhnh nh nh nh nk5�     V e r s i o n 2        nh5�    �   �  �  � �   � � �  � �  � ���    nhm5�0
-nhnh nh nh nh nk5�                           nh5���    ���  ����   ���  �  ��  �  �  ��    nhm5�0
-nhnh nh nh nh nk5�nhm5�����������������������������������������������������������������������0
-nh�nhk������������������������������������������
-�������������������������������������������
-�n������������������������������������������
-�������������������������������������������
-�������������������������������������������
-
-�nhk2�����������������������������������������nhg2�0
-nh�nhk2� nh2Your SysOp is: { this space for rent } nhg2�0
-nh�nhk2�nhg2�����������������������������������������0
-n
\ No newline at end of file
diff --git a/text/menu/privchat.asc b/text/menu/privchat.asc
deleted file mode 100644
index c3fc712358..0000000000
--- a/text/menu/privchat.asc
+++ /dev/null
@@ -1,8 +0,0 @@
-0lnc4��������������������k�0
-4c� hyPrivate Chat Menu nk4�0
-4c�k��������������������b0���������������������������������������
-�����
-� hy/L ngList all node activity b� hyCtrl-U ngWho's online�b�
-� hy/E ngToggle echo status�b� hyCtrl-P ngSend private message  b�
-� hy/Q ngQuit private chat�b���
-������������������������������������������������������������n
diff --git a/text/menu/privchat.rip b/text/menu/privchat.rip
deleted file mode 100644
index 1bde8bc148..0000000000
--- a/text/menu/privchat.rip
+++ /dev/null
@@ -1,11 +0,0 @@
-
-!|1K|*|e|w0010271610|W0|=00000001|1B0000020PX4050E000F080700000000000000
-!|1U0707HL0P0000<>Private Chat<>|c0F|S0107
-!|1B0000020PWW050E000F080700000000000000|1U0710HL2E0000<><>
-!|1B0000020QPE010E000F080500000000000000|Y00000100|1U0M161K1G0000<>/L<>^M/L
-!|1U9616A41G0000<>^U<>^U|1U961KA41U0000<>^P<>^P|1U0M1K1K1U0000<>/E<>^M/E
-!|1B0000020QPE010E000F080400000000000000|1U0M1Y1K280000<>/Q<>^M/Q|c00
-!|@1Y16List All Nodes|@1Y1KToggle Echo Status|@1Y1YQuit Chat Session
-!|@AK16List Users Online|@AK1KSend Message to Another Node|w000E271610
-!|10000$ETW$|#|#|#
-
diff --git a/text/menu/qwk.asc b/text/menu/qwk.asc
deleted file mode 100644
index c0d080a101..0000000000
--- a/text/menu/qwk.asc
+++ /dev/null
@@ -1,13 +0,0 @@
-lnc4����������������������������k�0
-4c�  hyQWK Offline Reader Menu  nk4�0
-4c�k����������������������������b0�������
-���
-� hyC ngChange Packet Configuration    b�
-� hyS ngSelect Message Areas to Scan   b�
-� hyP ngModify New-message Pointers    b�
-� hyU ngUpload REP reply packet�b�
-� hyD ngDownload QWK message packet    b�
-� hyB ngBidirectional REP/QWK transfer b�
-������������������������������������
-� hyQ ngQuit back to Main menu�b�
-������������������������������������n
diff --git a/text/menu/qwk.rip b/text/menu/qwk.rip
deleted file mode 100644
index 9834eb1cbc..0000000000
--- a/text/menu/qwk.rip
+++ /dev/null
@@ -1,11 +0,0 @@
-
-!|1K|w0010271610|W0|=00000001|1B0000020PX4050E000F080700000000000000
-!|1U0707HL0P0000<>QWK Packet Transfer Menu<>|c0F|S0107
-!|1B0000020PWW050E000F080700000000000000|1U0710HL200000<><>
-!|1B0000020QPE010E000F080100000000000000|Y00000100|1U0M161K1G0000<>U<>U
-!|1U0M1K1K1U0000<>D<>D|1U9616A51G0000<>B<>B
-!|1B0000020QPE010E000F080400000000000000|1U961KA51U0000<>Q<>Q|c00
-!|@1Y16Upload REP Reply Packet|@1Y1KDownload QWK Message Packet
-!|@AK16Bidirectional REP/QWK Transfer|@AK1KQuit to the Main Menu|w000A271610
-!|10000$ETW$|#|#|#
-
diff --git a/text/menu/qwk.wip b/text/menu/qwk.wip
deleted file mode 100644
index 8f93eed81a..0000000000
--- a/text/menu/qwk.wip
+++ /dev/null
@@ -1,21 +0,0 @@
-$00000D
-!|[Startup]
-!|V=1.10
-!|D=`
-!|O=15
-!|M=QWK Offline Reader
-!|L=1425
-!|T=195
-!|W=4050
-!|H=4350
-!|B=12632256
-!|
-!|[Form]
-!|001=0B`d`20`20`100`60`1``0`12632256`MS Sans Serif`8.25`Download QWK`DOWNLOAD.ICO
-!|002=0B`u`140`20`100`60`2``0`12632256`MS Sans Serif`8.25`Upload REP`EDIT.ICO
-!|003=0B`s`140`100`100`60`3``0`12632256`MS Sans Serif`8.25`Select Areas`LIST.ICO
-!|004=0B`c`20`100`100`60`4``0`12632256`MS Sans Serif`8.25`Setup`DETAIL.ICO
-!|005=0B`p`20`180`100`60`5``0`12632256`MS Sans Serif`8.25`MSG Pointers`CATPLUS.ICO
-!|006=0B`q`140`180`100`60`6``0`12632256`MS Sans Serif`8.25`Quit`EXIT.ICO
-!|
-$0E
\ No newline at end of file
diff --git a/text/menu/renegade/email.asc b/text/menu/renegade/email.asc
deleted file mode 100644
index aa27a7d26d..0000000000
--- a/text/menu/renegade/email.asc
+++ /dev/null
@@ -1,7 +0,0 @@
-�nhr������������������������������������������������������Ŀ
-��4         wSynchronet Reneclone Email System Menu       r0�
-���������������������������������������������������������
-  c4��������������������������������������������������������������������������Ŀ0
-  4� [yRc]ead Email       [yEc]nter Email                                         �0
-  4� [yVc]iew Outgoing    [yQc]uit to Main     [yGc]oodbye        [y/Gc]oodbye Fast!  �0
-  4����������������������������������������������������������������������������0n
diff --git a/text/menu/renegade/main.asc b/text/menu/renegade/main.asc
deleted file mode 100644
index 03aa3e1342..0000000000
--- a/text/menu/renegade/main.asc
+++ /dev/null
@@ -1,10 +0,0 @@
-�nhr������������������������������������������������������Ŀ
-��4         wSynchronet Reneclone Main System Menu        r0�
-���������������������������������������������������������
-  c4��������������������������������������������������������������������������Ŀ0
-  4� [yMc]essage System   [yFc]ile System      [yOc]nline System  [yEc]mail System    �0
-  4� [ySc]ystem Bulletins [yUc]ser Listing     [yYc]our Info      [yAc]uto-message    �0
-  4� [yWc]ho's online     [yLc]ist of Callers  [y!c]Offline Mail  [yPc]ersonal Info   �0
-  4� [yNc]ote to SysOp    [yCc]hat System      [yIc]nfo on System [yXc]pert Toggle    �0
-  4� [yGc]oodbye & Logoff [y/Gc]oodbye Fast!   [y$c]Time Bank     [y/Lc]ist Nodes     �0
-  4����������������������������������������������������������������������������0n
diff --git a/text/menu/renegade/message.asc b/text/menu/renegade/message.asc
deleted file mode 100644
index 8fcb58d5e9..0000000000
--- a/text/menu/renegade/message.asc
+++ /dev/null
@@ -1,10 +0,0 @@
-�nhr������������������������������������������������������Ŀ
-��4        wSynchronet Reneclone Message System Menu      r0�
-���������������������������������������������������������
-  c4�������������������������������������������������������������������������Ŀ0
-  4� [y#c]Sub Change      [y/#c]Group Change   [y[c]Previous Sub  [y]c]Next Sub      �0
-  4� [yCc]hat System      [yRc]ead Messages    [ySc]can Messages  [yPc]ost Message   �0
-  4� [yFc]ile Menu        [yGc]oodbye          [y/Gc]oodbye       [yUc]sers w/Access �0
-  4� [yNc]ew Message Scan [yQc]uit to Main     [yEc]nter Email    [yZc]Set Scan Areas�0
-  4� [yAc]rea List        [yJc]ump to Area     [y/Lc]ist Nodes    [yYc]our Messages  �0
-  4���������������������������������������������������������������������������0n
diff --git a/text/menu/renegade/transfer.asc b/text/menu/renegade/transfer.asc
deleted file mode 100644
index 8f8fb5007d..0000000000
--- a/text/menu/renegade/transfer.asc
+++ /dev/null
@@ -1,11 +0,0 @@
-�nhr������������������������������������������������������Ŀ
-��4         wSynchronet Reneclone File System Menu        r0�
-���������������������������������������������������������
-  c4��������������������������������������������������������������������������Ŀ0
-  4� [y#c]Dir Change      [y/#c]Lib Change     [y[c]Previous Dir  [y]c]Next Dir       �0
-  4� [y/Ac]rchive Menu    [yAc]rea List        [yCc]hat System    [yDc]ownload        �0
-  4� [yEc]nter Batch Mode [yFc]ind Description [yGc]oodbye        [y/Gc]oodbye        �0
-  4� [yPc]ointer Date     [yLc]ist Files       [yMc]essage Menu   [yNc]ew Files       �0
-  4� [yUc]pload!          [yQc]uit to Main     [yVc]iew Archive   [ySc]earch Filespec �0
-  4� [yYc]our File info   [yJc]ump to Area     [y/Lc]ist Nodes                      �0
-  4����������������������������������������������������������������������������0n
diff --git a/text/menu/restrict.asc b/text/menu/restrict.asc
deleted file mode 100644
index fd796cd5be..0000000000
--- a/text/menu/restrict.asc
+++ /dev/null
@@ -1,7 +0,0 @@
-A=ANSI              H=                  O=                  V=
-B=Beep              I=                  P=Post              W=Auto-message
-C=Chat              J=Quoting           Q=QWK Network Node  X=External Programs
-D=Download          K=Read Mail Sent    R=Remove Files      Y=Are you sure?
-E=E-mail	    L=Logon one/day	S=Email Sysop	    Z=
-F=Forward mail      M=Networked Mail    T=Transfers
-G=Edit Defaults     N=Networked Subs    U=Upload
diff --git a/text/menu/sdos/files.asc b/text/menu/sdos/files.asc
deleted file mode 100644
index 4ebd352de5..0000000000
--- a/text/menu/sdos/files.asc
+++ /dev/null
@@ -1,21 +0,0 @@
- Volume in drive C is BBS
- Volume Serial Number is 8317-6BE8
- Directory of C:\FILES
-
-.	     <DIR>     08/01/94  02:34 pm
-..	     <DIR>     08/01/94  02:34 pm
-DOWNLOAD EXE     24343 06/02/94  08:36 am
-UPLOAD   EXE	 48321 06/02/94  08:36 am
-REMOVE   COM      2377 06/04/94  04:55 pm
-BATCH    EXE	 30566 06/02/94  08:36 am
-VIEW	 EXE	 10485 06/02/94  08:36 am
-TEMP     EXE	114705 06/02/94  08:37 am
-LIST	 EXE	 81380 06/04/94  04:56 pm
-NEWSCAN  COM	  3146 06/02/94  08:36 am
-EXTENDED EXE	287347 06/04/94  04:56 pm
-SEARCH   COM	  1969 06/04/94  04:56 pm
-FIND	 COM	  5193 06/04/94  04:57 pm
-AREA	 COM	   905 06/02/94  08:35 am
-CONFIG	 COM	  2517 06/02/94  08:35 am
-       15 file(s)    1350784 bytes
-                    @FREESPACE@ bytes free
diff --git a/text/menu/sdos/mail.asc b/text/menu/sdos/mail.asc
deleted file mode 100644
index 45afc742f9..0000000000
--- a/text/menu/sdos/mail.asc
+++ /dev/null
@@ -1,21 +0,0 @@
- Volume in drive C is BBS
- Volume Serial Number is 8317-6BE8
- Directory of C:\MAIL
-
-.	     <DIR>     08/01/94  02:34 pm
-..	     <DIR>     08/01/94  02:34 pm
-SEND	 EXE	 54343 06/02/94  08:36 am
-SENDFILE EXE	 58981 06/02/94  08:36 am
-NETMAIL  EXE	 30566 06/02/94  08:36 am
-READ	 EXE	102485 06/02/94  08:36 am
-READSENT EXE	114705 06/02/94  08:37 am
-POST	 EXE	 81380 06/04/94  04:56 pm
-NEWSCAN  COM	  3146 06/02/94  08:36 am
-READMSGS EXE	287347 06/04/94  04:56 pm
-YOURMSGS COM	  1969 06/04/94  04:56 pm
-FIND	 COM	  5193 06/04/94  04:57 pm
-QWK	 EXE	159876 06/02/94  08:35 am
-AREA	 COM	   905 06/02/94  08:35 am
-CONFIG	 COM	  2517 06/02/94  08:35 am
-       15 file(s)    1350784 bytes
-                    @FREESPACE@ bytes free
diff --git a/text/menu/sdos/root.asc b/text/menu/sdos/root.asc
deleted file mode 100644
index f8896a1aa2..0000000000
--- a/text/menu/sdos/root.asc
+++ /dev/null
@@ -1,20 +0,0 @@
- Volume in drive C is BBS       
- Volume Serial Number is 8317-6BE8
- Directory of C:\
-
-FILES        <DIR>     08/01/94  02:34 pm       
-MAIL         <DIR>     08/01/94  02:34 pm    
-SETUP    EXE     54343 06/02/94  08:36 am        
-CHAT     EXE    102485 06/02/94  08:36 am    
-AUTOMSG  COM       894 06/04/94  04:55 pm       
-DOORS    EXE    326501 07/11/94  11:01 am       
-GFILES   EXE     31024 06/02/94  08:36 am
-LOGOFF   COM      2193 05/22/94  04:27 pm        
-NODES	 TXT	   593 @LASTDATEON@  @LASTTIMEON@
-LOGON	 LST	  1984 @LASTDATEON@  @LASTTIMEON@
-USERS	 LST	148394 @LASTDATEON@  @LASTTIMEON@
-SYSTEM	 NFO	   733 04/01/94  06:30 am        
-YOUR     NFO       252 @LASTDATEON@  @LASTTIMEON@
-(SYSOP    EXE    208419 01/01/80  00:00 am
-)       13 file(s)    1350784 bytes
-                    @FREESPACE@ bytes free
diff --git a/text/menu/sentmail.asc b/text/menu/sentmail.asc
deleted file mode 100644
index c6a942c0ba..0000000000
--- a/text/menu/sentmail.asc
+++ /dev/null
@@ -1,9 +0,0 @@
-0lnc4������������������������k�0
-4c�  hyRead Sent Mail Menu  nk4�0
-4c�k������������������������b0��������������������������
-�����
-� hy<CR> ngNext message�b� hyD ngDelete last message   b�
-�    hy- ngPrevious message b� hyR ngReread last message   b�
-�    hyL ngList messages    b� hyE ngEdit last message     b�
-�    hy# ngGo to message #  b� hyQ ngQuit to Main section  b�
-���������������������������������������������������n
diff --git a/text/menu/sentmail.rip b/text/menu/sentmail.rip
deleted file mode 100644
index 3fe25f80ee..0000000000
--- a/text/menu/sentmail.rip
+++ /dev/null
@@ -1,13 +0,0 @@
-
-!|1K|w0010271610|W0|=00000001|1B0000020PX4050E000F080700000000000000
-!|1U0707HL0P0000<>Reading Sent Mail<>|c0F|S0107
-!|1B0000020PWW050E000F080700000000000000|1U0710HL2S0000<><>
-!|1B0000020QPC010E000F080900000000000000|Y00000100|1U0M161K1G0000<><CR><>^M
-!|1U0M1K1K1U0000<>-<>-|1U0M1Y1K280000<>L<>L
-!|1B0000020QPE010E000F080400000000000000|1U0M2C1K2M0000<>Q<>Q
-!|1B0000020QPC010E000F080900000000000000|1U961YA4280000<>#<>+ 
-!|1U9616A41G0000<>R<>R|1U961KA41U0000<>D<>D|c00|@1Y16Next Message
-!|@1Y1KPrevious Message|@1Y1YList Messages|@1Y2CQuit to Main Section
-!|@AK1YGo to Message #|@AK16Reread Last Message|@AK1KDelete Last Message
-!|w000G271610|10000$ETW$|#|#|#
-
diff --git a/text/menu/sentmail.wip b/text/menu/sentmail.wip
deleted file mode 100644
index 8e71d3444f..0000000000
--- a/text/menu/sentmail.wip
+++ /dev/null
@@ -1,29 +0,0 @@
-$00000D
-!|[Startup]
-!|V=1.10
-!|D=`
-!|O=4
-!|M=Reading Sent E-mail
-!|L=3885
-!|T=3960
-!|W=5550
-!|H=1470
-!|B=12632256
-!|
-!|[Form]
-!|001=0B`-`10`10`40`40`1`Previous Message`0`12632256`MS Sans Serif`8.25``PREV.ICO
-!|002=0B`|M`60`10`40`40`2`Next Message`0`12632256`MS Sans Serif`8.25``NEXT.ICO
-!|003=0B`l`160`10`40`40`3``0`12632256`MS Sans Serif`8.25``LIST.ICO
-!|004=0B`r`110`10`40`40`4``0`12632256`MS Sans Serif`8.25``BACK.ICO
-!|005=0B`e`210`10`40`40`5`Reply to Last E-mail Message`0`12632256`MS Sans Serif`8.25``EDIT.ICO
-!|006=0B`q`310`10`40`40`7`Delete Last E-mail Message`0`12632256`MS Sans Serif`8.25``EXIT.ICO
-!|007=0B`d`260`10`40`40`7``0`12632256`MS Sans Serif`8.25``DELETE.ICO
-!|008=0T`prev`10`50`40`15`8``0`12632256`MS Sans Serif`8.25`Prev`1`0
-!|009=0T`Next`60`50`40`15`9``0`12632256`MS Sans Serif`8.25`Next`1`0
-!|010=0T`reread`110`50`40`15`10``0`12632256`MS Sans Serif`8.25`Again`1`0
-!|011=0T`list`160`50`40`15`11``0`12632256`MS Sans Serif`8.25`List`1`0
-!|012=0T`edit`210`50`40`15`12``0`12632256`MS Sans Serif`8.25`Edit`1`0
-!|013=0T`delete`260`50`40`15`13``0`12632256`MS Sans Serif`8.25`Delete`1`0
-!|014=0T`quit`310`50`40`15`14``0`12632256`MS Sans Serif`8.25`Quit`1`0
-!|
-$0E
\ No newline at end of file
diff --git a/text/menu/simple/filelist.asc b/text/menu/simple/filelist.asc
deleted file mode 100644
index 0b0e8f3654..0000000000
--- a/text/menu/simple/filelist.asc
+++ /dev/null
@@ -1,9 +0,0 @@
-nhm�nhc� nhySynchronet Listing Files nhc�
-�nhg2����������������������������������������ķ0
-nhm�nhg2� nhy2Anh2) All files in a directory            nhg2�0
-nhm�nhg2�                                        �0
-nhm�nhg2� nhy2Nnh2) New since @NEWFILETIME@ nhg2 �0
-nhm�nhg2� nhy2Snh2) Search for a filename               nhg2�0
-nhm�nhg2� nhy2Fnh2) Find text in file descriptions      nhg2�0
-nhm�nhg2�                                        �0
-�nhg2� nhy2Qnh2) Quit to Main Menu                   nhg2�0
\ No newline at end of file
diff --git a/text/menu/simple/main.asc b/text/menu/simple/main.asc
deleted file mode 100644
index f399de8eaa..0000000000
--- a/text/menu/simple/main.asc
+++ /dev/null
@@ -1,11 +0,0 @@
-nh�nhc� nhySynchronet Main nhc�
-�nhg2����������������������������������������ķ0
-nh�nhg2� nhy2Fnh2)ile list         nhy2Rnh2)ead messages/mail nhg2�0
-nh�nhg2� nhy2Dnh2)ownload file     nhy2Snh2)end messages/mail nhg2�0
-�nhg2� nhy2Unh2)pload a file     nhy2Lnh2)ist users online  nhg2�0
-nh�nhg2� nhy2Qnh2)WK offline msgs  nhy2Pnh2)age user          nhg2�0
-nh�nhg2�                                        �0
-nh�nhg2� nhy2Onh2)nline programs   nhy2Cnh2)hat menu          nhg2�0
-nh�nhg2�                                        �0
-nh�nhg2� nhy2Anh2)ccount configuration                 nhg2�0
-�nhg2� nhy2Gnh2)ood-bye (hang-up)                    nhg2�0
\ No newline at end of file
diff --git a/text/menu/simple/prompt.ans b/text/menu/simple/prompt.ans
deleted file mode 100644
index c098e78e0e..0000000000
--- a/text/menu/simple/prompt.ans
+++ /dev/null
@@ -1,2 +0,0 @@
-�nhg2����������������������������������������Ķ
-�nhg2� n                                      hg2 �[�nhg2����������������������������������������Ľ[nmhCommand: n
\ No newline at end of file
diff --git a/text/menu/simple/prompt.asc b/text/menu/simple/prompt.asc
deleted file mode 100644
index e2f3b7e790..0000000000
--- a/text/menu/simple/prompt.asc
+++ /dev/null
@@ -1,2 +0,0 @@
-�nhg2����������������������������������������Ľ
-�  mhCommand: n
\ No newline at end of file
diff --git a/text/menu/simple/readmsg.asc b/text/menu/simple/readmsg.asc
deleted file mode 100644
index 73f3c6f4eb..0000000000
--- a/text/menu/simple/readmsg.asc
+++ /dev/null
@@ -1,11 +0,0 @@
-nhm�nhc� nhySynchronet Reading Messages nhc�
-�nhg2����������������������������������������ķ0
-nhm�nhg2� nhy2Enh2) Email TO: YOU   nhy2Fnh2) Email FROM: YOU  nhg2�0
-nhm�nhg2�                                        �0
-nhm�nhg2� nhy2Bnh2) Bulletins                           nhg2�0
-nhm�nhg2� nhy2Anh2) All messages in a conference        nhg2�0
-nhm�nhg2� nhy2Nnh2) New messages in all conferences     nhg2�0
-nhm�nhg2� nhy2Ynh2) New messages TO: YOU in all conf's  nhg2�0
-nhm�nhg2� nhy2Cnh2) Configure new message scan          nhg2�0
-nhm�nhg2�                                        �0
-�nhg2� nhy2Qnh2) Quit to Main Menu                   nhg2�0
\ No newline at end of file
diff --git a/text/menu/simple/sendmsg.asc b/text/menu/simple/sendmsg.asc
deleted file mode 100644
index f0914a8b43..0000000000
--- a/text/menu/simple/sendmsg.asc
+++ /dev/null
@@ -1,7 +0,0 @@
-nhm�nhc� nhySynchronet Sending Messages nhc�
-�nhy2����������������������������������������ķ0
-nhm�nhy2� Enh2) Send Email      nhy2Nnh2) Send Netmail     nhy2�0
-nhm�nhy2�                                        �0
-nhm�nhy2� Pnh2) Post a message in a conference      nhy2�0
-nhm�nhy2�                                        �0
-nhm�nhy2� Qnh2) Quit to Main Menu                   nhy2�0
\ No newline at end of file
diff --git a/text/menu/sysmailr.asc b/text/menu/sysmailr.asc
deleted file mode 100644
index 0c92196b89..0000000000
--- a/text/menu/sysmailr.asc
+++ /dev/null
@@ -1,4 +0,0 @@
-nk4������������������������������������������������������������������������������c�0
-4k�     hyS n4Save/Append last message to file      hyU n4Edit author of last message   c�0
-4k�     hyC n4Change attributes of last message     hyP n4Purge author of last message  c�0
-4k�c������������������������������������������������������������������������������n
diff --git a/text/menu/sysmain.asc b/text/menu/sysmain.asc
deleted file mode 100644
index 9bda1e7053..0000000000
--- a/text/menu/sysmain.asc
+++ /dev/null
@@ -1,22 +0,0 @@
-0l�nhSynchronet Sysop Main Menu
-   b(All commands preceeded by a 'w;b')�(Optional parameters shown in m[]b)
-   (Required parameters shown in r<>b)�(Required exemptions shown in y()b)
-
-yNode Display/Control:�Editing:
-wNODE m[args]   cNode Utility�wUEDIT m[user]  cEdit User Account
-wDOWN r<nodes>  cToggle Down Flag�wEDIT�cEdit Text/MSG File
-wLOCK r<nodes>  cLock/Unlock m(N)
-wINTR r<nodes>  cToggle Interrupt m(I)�yViewing:
-wANON�cToggle Anonymous m(Q)�wLIST m[file]   cView Text/ANSI/MSG File
-wQUIET�cToggle Quiet�m(Q)�wLOG�cToday's Log
-�wYLOG�cYesterday's Log
-yMiscellaneous:�wNS m[node]�cNode Statistics
-wCHUSER�cChange into Another User   wSS�cSystem Statistics
-wBULKMAIL�cSend Bulk E-mail�wNLOG�cNode Statistics Log
-wSHELL�cOS Command Shell�wSLOG�cSystem Statistics Log
-wCALL r<hub>    cForce QWKnet Call-out�wERR�cCritical Error Log
-wCHAT�cPage sysop m(C)�wGURU�cDiscussions w/The Guru
-wLOAD r<file>   cLoad alternate text.dat    wMAIL�cAll Mail on System
-wEXEC r<cmd>    cExecute DOS Program�wSPY m[node]    cSpy/control Node
-wEXEC *r<mod>   cExecute Baja Module
-wFOSSIL r<cmd>  cExecute FOSSIL Program
diff --git a/text/menu/sysmscan.asc b/text/menu/sysmscan.asc
deleted file mode 100644
index 16846c01a3..0000000000
--- a/text/menu/sysmscan.asc
+++ /dev/null
@@ -1,15 +0,0 @@
-nlc4����������������������������k�0
-4c�  hySub-board Operator Menu  nk4�0
-4c�k����������������������������b0�������
-���
-� hyC ngChange Message Attributes�b�
-� hyE ngEdit Message Text�b�
-� hyH ngView Message Header�b�
-� hyM ngMove Message to Another Sub    b�
-� hyS ngSave Message to Text File�b�
-� hyU ngEdit Author's User Account�b�
-� hyP ngPurge Author's User Account    b�
-� hyV ngValidate Previous Message�b�
-������������������������������������
-� hyQ ngQuit back to Main menu�b�
-������������������������������������n
diff --git a/text/menu/syssmail.asc b/text/menu/syssmail.asc
deleted file mode 100644
index b2484e597e..0000000000
--- a/text/menu/syssmail.asc
+++ /dev/null
@@ -1,3 +0,0 @@
-nk4������������������������������������������������������������������������������c�0
-4k�     hwE n4Edit Last Message                                                     c�0
-4k�c������������������������������������������������������������������������������n
diff --git a/text/menu/sysxfer.asc b/text/menu/sysxfer.asc
deleted file mode 100644
index 895c330e0c..0000000000
--- a/text/menu/sysxfer.asc
+++ /dev/null
@@ -1,15 +0,0 @@
-                        Synchronet Sysop Transfer Menu
-                     (All commands are preceeded by a ';')
-
-PUT [s]         Direct upload file s to any drive or directory (remote)
-GET [s]         Direct download file s from any drive or directory (remote)
-OLD           *	Remove, Edit, or Move files not downloaded since new-scan date
-OLDUL         *	Remove, Edit, or Move files uploaded before new-scan date
-CLOSE         *	Search for and optionally close open file records
-ALTUL [x]	Perform uploads using alternate file path number x
-UPLOAD        *	Bulk local upload - add files on disk to database
-RESORT        *	Re-sort files by sort value and compress empty slots
-OFFLINE       *	Remove, Edit, or Move files in database that aren't on disk
-
-* Commands can be followed by LIB or ALL to specify the action to take place
-on all directories of the current library, or all directories in all libraries.
diff --git a/text/menu/tempxfer.asc b/text/menu/tempxfer.asc
deleted file mode 100644
index dbf5a8fa46..0000000000
--- a/text/menu/tempxfer.asc
+++ /dev/null
@@ -1,14 +0,0 @@
-0lnc4������������������������������k�0
-4c� hyTemp Directory Command Menu nk4�0
-4c�k������������������������������0
-4b0����������������hw4Extract from Archive  nb������������������hw4Other Commands   nb������
-�����
-� hyE ngExtract from archive in any directory�b� hyL ngList files in temp dir   b�
-� hyX ngExtract from archive in temp directory�b������������������������������
-��� hyI ngInformation on files�b�
-�������hw4Create Listnb�����������4 hwTemp Archive   nb����� hyV ngView archive contents    b�
-����� hyR ngRemove files from temp   b�
-� hyN ngList of new files  b� hyA ngCreate/add to archive b������������������������������
-� hyF ngList of all files  b� hyD ngDownload temp archive b� hyQ ngQuit to transfer menu    b�
-�������
-4  hyAnytime: cCtrl-U nc4Who's online  hCtrl-P nc4Send private msg  hCtrl-C nc4Abort cmd/text n
diff --git a/text/menu/tempxfer.rip b/text/menu/tempxfer.rip
deleted file mode 100644
index d246bb9210..0000000000
--- a/text/menu/tempxfer.rip
+++ /dev/null
@@ -1,17 +0,0 @@
-
-!|1K|w0010271610|W0|=00000001|1B0000020PX4050E000F080700000000000000
-!|1U0707HL0P0000<>Temp Directory<>|c0F|S0107
-!|1B0000020PWW050E000F080700000000000000|1U0710HL3K0000<><>
-!|1B0000020QPC010E000F080100000000000000|Y00000100|1U0M161K1G0000<>E<>E
-!|1U0M1K1K1U0000<>N<>N|1U0M1Y1K280000<>F<>F|1U0M2C1K2M0000<>A<>A
-!|1U0M2Q1K300000<>D<>D|1B0000020QPE010E000F080400000000000000
-!|1U0M341K3E0000<>Q<>Q|1B0000020QPC010E000F080100000000000000
-!|1U9616A41G0000<>I<>I|1U961KA41U0000<>V<>V|1U961YA4280000<>L<>L
-!|1U962CA42M0000<>X<>X|1U962QA4300000<>R<>R|c00|@1Y16Extract from an Archive
-!|@1Y1KCreate a List of New Files|@1Y1YCreate a List of All Files
-!|@1Y2CAdd to/Create Temp Archive|@1Y2QDownload Temp Archive
-!|@1Y34Quit to the Transfer Section|@AK1YList Files in Temp Directory
-!|@AK16Information on Files|@AK1KView Contents in Archives
-!|@AK2CExtract From Archive in Temp|@AK2QRemove Files from Temp|w000G271610
-!|10000$ETW$|#|#|#
-
diff --git a/text/menu/transfer.asc b/text/menu/transfer.asc
deleted file mode 100644
index 416807d7fc..0000000000
--- a/text/menu/transfer.asc
+++ /dev/null
@@ -1,19 +0,0 @@
-0lnc4��������������������������������k�0
-4c� hySynchronet File Transfer Menu nk4�0
-4c�k��������������������������������0
-4b0�����4 hwList/Flag Files nb�������4 hwFile Area Selection nb���������4 hwFile Search  nb������
-�������
-� hyL ngList files in dir�b� hyJ ngJump to new file area b� hyF ngFind text in descrp   b�
-� hyN ngNew file scan�b��������������������������� hyS ngSearch for filename   b�
-� hyE ngExtended file info    b��hy* ngList directories b���
-����hy/* ngList libraries   b������4 hwOther Commands nb�����
-�����4 hwUpload/Download nb����� hy{ }  # ngSelect directory b���
-��� hy[ ] /# ngSelect library   b�  hy& ngFile scan config�b�
-�  hyD ngDownload file�b���  hyR ngRemove/edit file�b�
-�  hyU ngUpload file�b����������4 hwGo to nb����������  hyI ngInformation�b�
-� hy/D ngDownload from user   b���  hyV ngView file contents   b�
-� hy/U ngUpload to user�b� hyQ ngMain/Message section  b� hy/L ngNode activity�b�
-�  hyZ ngUpload to sysop�b� hyC ngChat section�b� hy^K ngCtrl-key menu�b�
-�  hyB ngBatch/Bi-dir xfers   b� hyT ngTemp dir/Archive cmds b�  hyO ngLogoff BBS (or /O)   b�
-�������
-4  hyAnytime: cCtrl-U nc4Who's online  hCtrl-P nc4Send private msg  hCtrl-C nc4Abort cmd/text n
diff --git a/text/menu/transfer.rip b/text/menu/transfer.rip
deleted file mode 100644
index 1501d23d4b..0000000000
--- a/text/menu/transfer.rip
+++ /dev/null
@@ -1,37 +0,0 @@
-
-!|1K|w0010271610|W00|1B0000020PX4050E000F080700000000000000
-!|1U0707HL0P0000<>Synchronet File Transfer Menu<>
-!|1B0000020PWW050E000F080700000000000000|1U0710HL7T0000<><>|c00|Y00000100
-!|1B0000020QPI010E000F080900000000000000|1U0Y1E1W1O1600<>*<>*
-!|1U0Y1S1W221T00<> A <>/*|1U0Y261W2G2400<>L<>L|1U0Y2K1W2U1X00<>E<>E
-!|1U0Y2Y1W382E00<>V<>V|1U0Y3C1W3M2600<>N<>N|1U0Y3Q1W402BY0<>S<>S
-!|1U0Y441W4E1Y00<>F<>F|1U0Y4I1W4S2100<>I<>I|1U0Y4W1W560000<> /L  <>/L
-!|1U0Y5A1W5K2200<>J<>J|1B0000020QPI010E000F080100000000000000
-!|1U0Y6G1W6Q2C00<>T<>T|1U0Y6U1W741V00<>C<>C
-!|1B0000020QPI010E000F080400000000000000|1U0Y781W7I2900<>Q<>Q
-!|1B0000020QPI010E000F080300000000000000|1U8W1E9U1O1200<>&<>&
-!|1U8W1S9U222A00<>  R  <>R|1B0000020QPE010E000F080300000000000000
-!|1U8W269U2G2700<>O<>O$MKILL$|1B0000020QPI010E000F080300000000000000
-!|1U8W2K9U2U0L00<> ^U  <>^U|1U8W2Y9U380G00<> ^P  <>^P|1U8W3C9U3M0B00<> ^K  <>^K
-!|1B0000020QPE010E000F080C00000000000000|1U7U3Y8S483G00<>{<>{
-!|1U8W3Y9U483I00<>}<>}|1U7U4C8S4M2K00<>[<>[|1U8W4C9U4M2M00<>]<>]
-!|1B0000020QPI010E000F080200000000000000|1U8W5A9U5K1W00<>  D  <>D
-!|1U8W5O9U5Y0000<> /D  <>/D|1U8W629U6C1U00<>B<>B|1U8W6G9U6Q2D00<>U<>U
-!|1U8W6U9U740000<> /U  <>/U|1U8W789U7I2I00<>Z<>Z|@2S11Listing Functions|c0F
-!|@2T12Listing Functions|c00|@B111Control Functions|c0F|@B212Control Functions
-!|c00|@2N62Other Sections|c0F|@2O63Other Sections|c00|@B44VTransfer Functions
-!|c0F|@B54WTransfer Functions|c00|@281EDirectories within Library
-!|@281SFile Libraries|@2826Files in Current Directory
-!|@282KExtended File Information|@282YView Contents of File|@283CNew File Scan
-!|@283QSearch for Filename|@2844Find Text in Description
-!|@284IInformation Commands|@284WList All Nodes|@285AJump to a File Area
-!|@286GTemp Dir/Archive Commands|@286UChat Commands|@2878Quit to Main Menu
-!|@AA1EConfiguration Commands|@AA1SRemove/Edit File, Any Directory
-!|@AA26Logoff (also /O)|@AA2KList Users Online (Anywhere)
-!|@AA2YSend Message to Another Node|@AA3CControl Key Command Menu
-!|@AA3YChange Directory, or Type Number|@A94BChange Library, or Type /Number
-!|@AA5ADownload File from Any Directory|@AA5ODownload User to User
-!|@AA62Batch/Bidirectional|@AA6GUpload File to Current Directory
-!|@AA6UUpload File User to User|@AA78Upload File to Sysop Directory|10000$ETW$
-!|#|#|#
-
diff --git a/text/menu/uedit.asc b/text/menu/uedit.asc
deleted file mode 100644
index 1ccf24a2b8..0000000000
--- a/text/menu/uedit.asc
+++ /dev/null
@@ -1,21 +0,0 @@
-                           yh��� wUser Edit Menu y���
-�����������������������������������������������������������������������������Ŀ
-�  wA  bAlias and Handle                    wS  bSex (Gender)                     y�
-�  wB  bBirthday                            wT  bSet Text Search String           y�
-�  wC  bComputer                            wU  bUpload and Download Stats        y�
-�  wD  bDelete/Deactivate/Restore           wV  bQuick-Validate User              y�
-�  wE  bExemptions                          wW  bPassword                         y�
-�  wF  bFlags                               wX  bView Extended Comment            y�
-�  wG  bGo to a User                        wY  bCopy User to Another Slot        y�
-�  wH  bEdit/Create Extended Comment        wZ  bRestrictions                     y�
-�  wI  bInspect/Edit User's Defaults        w]  bGo Up One User                   y�
-�  wJ  bEdit Minutes                        w[  bGo Down One User                 y�
-�  wK  bEdit Dates                          w}  bSearch Up (Text or ARS)          y�
-�  wL  bLocation, Address, and Zip Code     w{  bSearch Down (Text or ARS)        y�
-�  wM  bMain Security Level                 w/  bSet AR String for Search         y�
-�  wN  bNote                                w~  bSet Leech Download Counter       y�
-�  wO  bComment                             w+  bAdjust Credits                   y�
-�  wP  bPhone Number                        w*  bAdjust Minutes                   y�
-�  wQ  bQuit                                w$  bEdit Credits                     y�
-�  wR  bReal Name                           w#  bView User Questionnaire          y�
-�������������������������������������������������������������������������������
diff --git a/text/menu/ulprot.asc b/text/menu/ulprot.asc
deleted file mode 100644
index 2339a77346..0000000000
--- a/text/menu/ulprot.asc
+++ /dev/null
@@ -1 +0,0 @@
-hwX bXmodem  wY bYmodem  wZ bZmodem  wG bYmodem-G
diff --git a/text/menu/wfc.asc b/text/menu/wfc.asc
deleted file mode 100644
index 5ab9a55135..0000000000
--- a/text/menu/wfc.asc
+++ /dev/null
@@ -1,3 +0,0 @@
-�nc4�������������������������������k�0
-47������������������������c4�   hSynchronet Multinode BBS   nk4�7�����������������������hw�nk7�                       c4�       hyWaiting for Call       nk4�7                       hw�nk7�                       c4�k�������������������������������7                       hw�nk7�                                                                              hw�nk7�   hw����nk7�                    hw����nk7�                    hw����nk7�                    hw�nk7�   hw� yL nk7� bToday's caller log hw� yC nk7� bConfigure BBS      hw� yM nk7� bRead all mail      hw�nk7�   hw�nk7����                    hw�nk7����                    hw�nk7����                    hw�nk7�   hw����nk7�                    hw����nk7�                    hw����nk7�                    hw�nk7�   hw� yY nk7� bYesterday's log    hw� yU nk7� bUser editor        hw� yR nk7� bRead feedback      hw�nk7�   hw�nk7����                    hw�nk7����                    hw�nk7����                    hw�nk7�   hw����nk7�                    hw����nk7�                    hw����nk7�                    hw�nk7�   hw� yN nk7� bNode statistics    hw� yT nk7� bTerminal mode      hw� yE nk7� bSend mail/netmail  hw�nk7�   hw�nk7����                    hw�nk7����                    hw�nk7����                    hw�nk7�   hw����nk7�                    hw����nk7�                    hw����nk7�                    hw�nk7�   hw� yS nk7� bSystem statistics  hw� yD nk7� bDOS shell          hw� yX nk7� bQuit (on-hook)     hw�nk7�   hw�nk7����                    hw�nk7����                    hw�nk7����                    hw�nk7�   hw����nk7�                    hw����nk7�                    hw����nk7�                    hw�nk7�   hw� yA nk7� bForce answer       hw� yF nk7� bForce QWKnet       hw� yQ nk7� bQuit (off-hook)    hw�nk7�   hw�nk7����                    hw�nk7����                    hw�nk7����                    hw�nk7�                                                                              hw�nk7�                          c4�������������������������k�7                          hw�nk7�hw��������������������������nc4�   hySpace Bar n4to logon   k�hw7���������������������������nk.�c4�k�������������������������0
-g0Synchronet BBS Version 2�(C) 1995 Digital Dynamicsn
\ No newline at end of file
diff --git a/text/menu/wildcat/file.asc b/text/menu/wildcat/file.asc
deleted file mode 100644
index 7a12f146af..0000000000
--- a/text/menu/wildcat/file.asc
+++ /dev/null
@@ -1,20 +0,0 @@
-0
-nh�nh��������������������������������������������������Ŀ
-��   ���ķ��ķ�ķ��
-��   ���  � �    ��ķ ��ķ  � �� � ��ķ ��ķ �  �   �
-��   �    � �    ���  ��ķ  � ӽ � ���  �  � �  �   �
-��   �    � ��Ľ ��Ľ ��Ľ  �    � ��Ľ �  � ��Ľ   �
-����������������������������������������������������������������Ĵn���nh����������
-nhg��������������nh��nhySynchronet Wildclone�nh�ng���nhg����������
-nhy��������������nh����������������������������������������������������n���nhy����������
-nhc������������������nc���������������������������������������������������nhc����������
-nhb���nh��������������������Ŀnhb�nh�������������������������Ŀnhb�nh��������������������Ŀnb���
-nh��ܳ nhyQ nhuit to Main��ܳ nhyL nhist Available Files   �ܳ nhyD nhownload a File   �n���
-nhg���nh� nhyU nhpload a File��nhg�nh� nhyN nhew Files Since [N]    �nhg�nh� nhyV nhiew a ZIP File   �ng���
-nhy���nh� nhyM nhessage Menu��nhy�nh� nhyS nhearch for Files��nhy�nh� nhyG nhoodbye & Logoff  �n���
-   nh� nhyI nhnfo on a File    � � nhyJ nhoin a Conference�� � nhyP nhersonal Stats    �
-   � nhyE nhdit Marked List  � � nhyF nhile Transfer Info�� � nhyH nhelp Level��
-   ���������������������� ��������������������������� ����������������������
-                                (nhy1 nhSysop Menu )
-nhyConference: nh@LIB@ @DIR@   nhyTime On: nh@TIMEON@  nhyTime Remaining: nh@LEFT@
-n
\ No newline at end of file
diff --git a/text/menu/wildcat/main.asc b/text/menu/wildcat/main.asc
deleted file mode 100644
index 9c17a85ced..0000000000
--- a/text/menu/wildcat/main.asc
+++ /dev/null
@@ -1,20 +0,0 @@
-0
-nh�nh��������������������������������������������������Ŀ
-��   �ķ�ķ��ķ�ķ��
-��   � �� � ��ķ � ��ķ    � �� � ��ķ ��ķ �  �    �
-��   � ӽ � ��Ķ � �  �    � ӽ � ���  �  � �  �    �
-��   �    � �  � � �  �    �    � ��Ľ �  � ��Ľ    �
-����������������������������������������������������������������Ĵn���nh����������
-nhg��������������nh��nhySynchronet Wildclone�nh�ng���nhg����������
-nhy��������������nh����������������������������������������������������n���nhy����������
-nhc������������������nc���������������������������������������������������nhc����������
-nhb���nh������������������Ŀnhb�nh�������������Ŀnhb�nh�������������Ŀnhb�nh������������������Ŀnb���
-nh��ܳ nhyM nhessage Menu    �ܳ nhyE nhmail��ܳ nhyU nhser List  �ܳ nhyA nhuto-message    �n���
-nhg���nh� nhyC nhomments��nhg�nh� nhyN nhewsletter �nhg�nh� nhyF nhiles Menu �nhg�nh� nhyT nhalk to Nodes   �ng���
-nhy���nh� nhyJ nhoin Conference �nhy�nh� nhyG nhoodbye    �nhy�nh� nhyP nhage Sysop �nhy�nh� nhyI nhnitial Welcome �n���
-   nh� nhyY nhour Settings   � � nhyW nhhos Online� � nhyV nherify User� � nhyR nhead Your Stats �
-   � nhyS nhystem Stats    � � nhyB nhulletins  � � nhyD nhoors�� � nhyH nhelp Level��
-   �������������������� ��������������� ��������������� ��������������������
-� (nhy1 nhSysop Menu )
-  nhyConference: nh@CONF@   nhyTime On: nh@TIMEON@  nhyTime Remaining: nh@LEFT@
-n
\ No newline at end of file
diff --git a/text/menu/wildcat/msg.asc b/text/menu/wildcat/msg.asc
deleted file mode 100644
index 4405ba83e0..0000000000
--- a/text/menu/wildcat/msg.asc
+++ /dev/null
@@ -1,18 +0,0 @@
-0
-nh�nh��������������������������������������������������������������Ŀ
-�� �ķ�ķ��ķ�ķ��
-�� � �� � ��ķ ��ķ ��ķ ��ķ ��ķ ��ķ   � �� � ��ķ ��ķ �  � �
-�� � ӽ � ���  ��ķ ��ķ ��Ķ � ķ ���    � ӽ � ���  �  � �  � �
-�� �    � ��Ľ ��Ľ ��Ľ �  � ��Ľ ��Ľ   �    � ��Ľ �  � ��Ľ �
-����������������������������������������������������������������������Ĵn���nh����
-nhg��������nh��nhySynchronet Wildclone�nh�ng���nhg����
-nhy��������nh����������������������������������������������������������������n���nhy����
-nhc������������nc���������������������������������������������������������������nhc����
-nhb���nh��������������������Ŀnhb�nh�������������������������Ŀnhb�nh��������������������Ŀnb���
-nh��ܳ nhyR nhead Messages��ܳ nhyE nhnter a New Message    �ܳ nhyF nhiles Section��n���
-nhg���nh� nhyS nhearch Messages   �nhg�nh� nhyQ nhuit to Main Menu��nhg�nh� nhyG nhoodbye & Logoff  �ng���
-nhy���nh� nhyC nhheck Personal Msg�nhy�nh� nhyU nhpdate Conf Scan/Read  �nhy�nh� nhyH nhelp Level��n���
-   nh� nhyJ nhoin a Conference � � nhyT nhQWK Message Menu�� � nhy? nhCommand Help��
-   ���������������������� ��������������������������� ����������������������
-                                (nhy1 nhSysop Menu  )
-  nhyConference: nh@CONF@   nhyTime On: nh@TIMEON@  nhyTime Remaining: nh@LEFT@n
diff --git a/text/menu/wildcat/sysop.asc b/text/menu/wildcat/sysop.asc
deleted file mode 100644
index ce3537ade8..0000000000
--- a/text/menu/wildcat/sysop.asc
+++ /dev/null
@@ -1,16 +0,0 @@
-�nh����������������������������������������������������Ŀ
-��  ���ķ��ķ�ķ��
-��  ���ķ �  � ��ķ ��ķ ��ķ  � �� � ��ķ ��ķ �  �  �
-���� ��Ľ ��ķ �  � ��Ľ  � ӽ � ���  �  � �  �  �
-��  ���Ľ  �   ��Ľ ��Ľ ���    � ��Ľ �  � ��Ľ  �
-�����������������������������������������������������������������Ĵn���nh���������
-nhg�������������nh��nhySynchronet Wildclone�nh�ng���nhg���������
-nhy�������������nh������������������������������������������������������n���nhy���������
-nhc�����������������nc���������nh�������������������������Ŀnc�����������������nhc���������
-nhb���nh��������������������Ŀnhb�nh� nhyJ nhoin Conference��nhb�nh��������������������Ŀnb���
-nh��ܳ nhyU nhser Database��ܳ nhyQ nhuit to Main Menu��ܳ nhy? nhCommand Help��n���
-nhg���nh� nhyN nhode Management   �nhg�nh� nhyA nhctivity Log Listing   �nhg�nh� nhy1 nhMessage Menu��ng���
-nhy���nh� nhyD nhrop to DOS��nhy�nh� nhy2 nhFile Menu��nhy�nh� nhyG nhoodbye & Logoff  �n���
-   nh���������������������� ��������������������������� ����������������������
-  nhyConference: nh@CONF@   nhyTime On: nh@TIMEON@  nhyTime Remaining: nh@LEFT@
-n
\ No newline at end of file
diff --git a/text/menu/wipfile.wip b/text/menu/wipfile.wip
deleted file mode 100644
index 76ad5bc648..0000000000
--- a/text/menu/wipfile.wip
+++ /dev/null
@@ -1,27 +0,0 @@
-$00000D
-!|[Startup]
-!|V=1.10
-!|D=`
-!|O=15
-!|M=File Transfers
-!|L=2055
-!|T=360
-!|W=5175
-!|H=4725
-!|B=12632256
-!|
-!|[Form]
-!|001=0B`d`10`10`100`60`1`Read/Write E-mail Messages`0`12632256`MS Sans Serif`8.25`Download`SAVE.ICO
-!|002=0B`l`120`10`100`60`2``0`12632256`MS Sans Serif`8.25`List Files`LIST.ICO
-!|003=0B`u`230`10`100`60`3``0`12632256`MS Sans Serif`8.25`Upload`ADD.ICO
-!|004=0B`b`10`80`100`60`4``0`12632256`MS Sans Serif`8.25`Batch Queue`DOWNLOAD.ICO
-!|005=0B`n`120`80`100`60`5``0`12632256`MS Sans Serif`8.25`New Files`DONE.ICO
-!|006=0B`c`230`80`100`60`6``0`12632256`MS Sans Serif`8.25`Setup`DETAIL.ICO
-!|007=0B`v`10`150`100`60`7``0`12632256`MS Sans Serif`8.25`View File`PCAL.ICO
-!|008=0B`s`120`150`100`60`8``0`12632256`MS Sans Serif`8.25`Find Filename`FIND.ICO
-!|009=0B`e`230`150`100`60`9``0`12632256`MS Sans Serif`8.25`File Info`NOTEPAD.ICO
-!|010=0B`r`10`220`100`60`10``0`12632256`MS Sans Serif`8.25`Remove File`CANCEL.ICO
-!|011=0B`f`120`220`100`60`11``0`12632256`MS Sans Serif`8.25`Find Text`SEARCH.ICO
-!|012=0B`q`230`220`100`60`12``0`12632256`MS Sans Serif`8.25`Quit`EXIT.ICO
-!|
-$0E
\ No newline at end of file
diff --git a/text/menu/wipmain.wip b/text/menu/wipmain.wip
deleted file mode 100644
index 07f2b70992..0000000000
--- a/text/menu/wipmain.wip
+++ /dev/null
@@ -1,33 +0,0 @@
-$00000D
-!|[Startup]
-!|V=1.10
-!|D=`
-!|O=15
-!|M=Main Menu
-!|L=570
-!|T=3855
-!|W=8400
-!|H=1650
-!|B=12632256
-!|
-!|[Form]
-!|001=0B`e`10`10`50`50`1`Read/Write E-mail Messages`0`12632256`MS Sans Serif`8.25``EDIT.ICO
-!|002=0B`f`70`10`50`50`2`File Transfers (Upload/Download)`0`12632256`MS Sans Serif`8.25``DOWNLOAD.ICO
-!|003=0B`c`130`10`50`50`3``0`12632256`MS Sans Serif`8.25``ORDER.ICO
-!|004=0B`m`190`10`50`50`4``0`12632256`MS Sans Serif`8.25``NEWS.ICO
-!|005=0B`s`250`10`50`50`5``0`12632256`MS Sans Serif`8.25``MMD.ICO
-!|006=0B`i`310`10`50`50`6``0`12632256`MS Sans Serif`8.25``INFO.ICO
-!|007=0B`x`370`10`50`50`7`Run External Programs (doors)`0`12632256`MS Sans Serif`8.25``WELCOME.ICO
-!|008=0B`d`430`10`50`50`8``0`12632256`MS Sans Serif`8.25``DETAIL.ICO
-!|009=0B`o`490`10`50`50`9``0`12632256`MS Sans Serif`8.25``EXITSGN.ICO
-!|010=0T`email`10`60`50`15`10``0`12632256`MS Sans Serif`8.25`E-mail`1`0
-!|011=0T`files`70`60`50`15`11``0`12632256`MS Sans Serif`8.25`Files`1`0
-!|012=0T`chat`130`60`50`15`11``0`12632256`MS Sans Serif`8.25`Chat`1`0
-!|013=0T`msgs`190`60`50`15`12``0`12632256`MS Sans Serif`8.25`Msgs`1`0
-!|014=0T`match`250`60`50`15`13``0`12632256`MS Sans Serif`8.25`Match`1`0
-!|015=0T`info`310`60`50`15`14``0`12632256`MS Sans Serif`8.25`Info`1`0
-!|016=0T`doors`370`60`50`15`16``0`12632256`MS Sans Serif`8.25`Doors`1`0
-!|017=0T`config`430`60`50`15`17``0`12632256`MS Sans Serif`8.25`Setup`1`0
-!|018=0T`logoff`490`60`50`15`18``0`12632256`MS Sans Serif`8.25`Logoff`1`0
-!|
-$0E
\ No newline at end of file
diff --git a/text/menu/xfercfg.asc b/text/menu/xfercfg.asc
deleted file mode 100644
index dd85dbbf4c..0000000000
--- a/text/menu/xfercfg.asc
+++ /dev/null
@@ -1,9 +0,0 @@
-0lnc4��������������������������k�0
-4c� hyFile Scan Configuration nk4�0
-4c�k��������������������������b0������������
-���
-� hyP ngSet new-scan pointer �b�
-��hy0B ngToggle batch file flagging on/off b�
-� hyE ngToggle extended descriptions      b�
-� hyQ ngQuit to File Transfer menu�b�
-���������������������������������������n
diff --git a/text/menu/xfercfg.rip b/text/menu/xfercfg.rip
deleted file mode 100644
index 48a36c55fd..0000000000
--- a/text/menu/xfercfg.rip
+++ /dev/null
@@ -1,10 +0,0 @@
-
-!|1K|w0010271610|W0|=00000001|1B0000020PX4050E000F080700000000000000
-!|1U0707HL0P0000<>Transfer Configuration Menu<>|c0F|S0107
-!|1B0000020PWW050E000F080700000000000000|1U0710HL200000<><>
-!|1B0000020QPE010E000F080300000000000000|Y00000100|1U0M161K1G0000<>B<>B
-!|1U9616A41G0000<>P<>P|1B0000020QPE010E000F080400000000000000
-!|1U0M1K1K1U0000<>Q<>Q|c00|@1Y16Batch Download File Flagging
-!|@AK16New File Scan Pointers|@1Y1KQuit to the Main Menu|w000A271610
-!|10000$ETW$|#|#|#
-
diff --git a/text/menu/xferinfo.asc b/text/menu/xferinfo.asc
deleted file mode 100644
index 8ed16973bb..0000000000
--- a/text/menu/xferinfo.asc
+++ /dev/null
@@ -1,8 +0,0 @@
-0lnc4��������������������������������k�0
-4c� hyFile Section Information Menu nk4�0
-4c�k����������������������������������b0�������������������������������������
-�����
-� hyT ngFile transfer policy�b� hyY ngYour file transfer statistics b�
-��hy0D ngInformation on current directory b�����������������������������������
-� hyU ngUsers with access to current dir b� hyQ ngQuit to File Transfer menu    b�
-������������������������������������������������������������������������n
diff --git a/text/menu/xferinfo.rip b/text/menu/xferinfo.rip
deleted file mode 100644
index 94ad01176a..0000000000
--- a/text/menu/xferinfo.rip
+++ /dev/null
@@ -1,11 +0,0 @@
-
-!|1K|w0010271610|W0|=00000001|1B0000020PX4050E000F080700000000000000
-!|1U0707HL0P0000<>Transfer Information Menu<>|c0F|S0107
-!|1B0000020PWW050E000F080700000000000000|1U0710HL2E0000<><>
-!|1B0000020QPE010E000F080900000000000000|Y00000100|1U0M161K1G0000<>T<>T
-!|1U0M1K1K1U0000<>D<>D|1U9616A41G0000<>U<>U|1U961KA41U0000<>Y<>Y
-!|1B0000020QPE010E000F080400000000000000|1U0M1Y1K280000<>Q<>Q|c00
-!|@1Y16Transfer Policy|@1Y1KDirectory|@AK16Users with Access to Directory
-!|@AK1KYour Transfer Statistics|@1Y1YQuit to the Main Menu|w000C271610
-!|10000$ETW$|#|#|#
-
diff --git a/text/menu/yesno.wip b/text/menu/yesno.wip
deleted file mode 100644
index b1c077883c..0000000000
--- a/text/menu/yesno.wip
+++ /dev/null
@@ -1,20 +0,0 @@
-$00000D
-!|[Startup]
-!|V=1.10
-!|D=`
-!|O=8
-!|M=Yes or No
-!|L=1815
-!|T=510
-!|W=3000
-!|H=2100
-!|B=12632256
-!|
-!|[Form]
-!|001=0T`question`10`10`170`35`5``0`12632256`MS Sans Serif`8.25`@QUESTION@`1`0
-!|002=0B`y`50`50`40`40`1``0`12632256`MS Sans Serif`8.25``DONE.ICO
-!|003=0B`n`100`50`40`40`2``0`12632256`MS Sans Serif`8.25``CANCEL.ICO
-!|004=0T`yes`50`90`40`15`3``0`12632256`MS Sans Serif`8.25`Yes`1`0
-!|005=0T`no`100`90`40`15`4``0`12632256`MS Sans Serif`8.25`No`1`0
-!|
-$0E
\ No newline at end of file
diff --git a/text/name.can b/text/name.can
deleted file mode 100644
index b42d651356..0000000000
--- a/text/name.can
+++ /dev/null
@@ -1,33 +0,0 @@
-new
-all
-sysop~
-netmail
-@~
-#~
-!~
-a
-b
-c
-d
-e
-f
-g
-h
-i
-j
-k
-l
-m
-n
-o
-p
-q
-r
-s
-t
-u
-v
-w
-x
-y
-z
diff --git a/text/newuser.msg b/text/newuser.msg
deleted file mode 100644
index b2466a562a..0000000000
--- a/text/newuser.msg
+++ /dev/null
@@ -1,8 +0,0 @@
-ngThe rules of the BBS are normally displayed here, but the sysop has not
-yet defined them. So in the meantime, please use common sense and follow the
-golden rule: "hTreat others as you yourself wish to be treatedng."
-
-Of course technical rules like "hDo not upload commercial softwareng" and
-"hDo not upload virus or trojan horse filesng" also apply, so please ask the
-sysop for details.
-
diff --git a/text/phone.can b/text/phone.can
deleted file mode 100644
index ebdfcaa4d4..0000000000
--- a/text/phone.can
+++ /dev/null
@@ -1,20 +0,0 @@
-0-^
-1-^
-000-~
-111-~
-123-^
-222-^
-333-^
-444-^
-555-~
-666-^
-777-^
-888-^
-999-^
-900-^
-411-~
-911-~
-976-~
-411^
-911^
-
diff --git a/text/sbbs.msg b/text/sbbs.msg
deleted file mode 100644
index e867b88254..0000000000
--- a/text/sbbs.msg
+++ /dev/null
@@ -1,19 +0,0 @@
-			       nch1 � Synchronet � n
-			    yhMultinode BBS Software
-
-		      bDeveloped 1990-1997 by Rob Swindell
-
-			     ng������������������͸
-			     � hKeys to Rememberng �
-			     ������������������͵
-			     �	whCtrl-C ngAbort    �
-			     �	whCtrl-S ngPause    �
-			     �	whCtrl-Q ngContinue �
-			     �       wh? ngMenu     �
-			     ��������������������
-
-		     hExample Prompt: wOngne, hwTngwo, or [Three]:
-
-			  hIndicates: wO ngOne
-				     whT ngTwo
-				 whEnter ngThree
diff --git a/text/system.msg b/text/system.msg
deleted file mode 100644
index 244aae3ce7..0000000000
--- a/text/system.msg
+++ /dev/null
@@ -1,8 +0,0 @@
-ncThis is h@BBS@nc BBS...
-
-	with your sysop, h@SYSOP@nc here to serve you.
-
-This system has received h@TCALLS@nc calls to date. 
-
-Other system information will be available in this space soon.
-
diff --git a/text/zipmsg.txt b/text/zipmsg.txt
deleted file mode 100644
index 44da951b3f..0000000000
--- a/text/zipmsg.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-This file was downloaded from a Synchronet BBS - use PKUNZIP -D <filename>
-
diff --git a/xtrn/sbj/Makefile.gnu b/xtrn/sbj/Makefile.gnu
deleted file mode 100644
index 1dee963d4d..0000000000
--- a/xtrn/sbj/Makefile.gnu
+++ /dev/null
@@ -1,50 +0,0 @@
-# Makefile.gnu
-
-#########################################################################
-# Makefile for Synchronet Blackjack										#
-# For use with GNU make and GNU C Compiler								#
-# @format.tab-size 4, @format.use-tabs true								#
-#																		#
-# Linux: make -f Makefile.gnu											#
-# Win32: make -f Makefile.gnu os=win32									#
-# FreeBSD: make -f Makefile.gnu os=freebsd								#
-#########################################################################
-
-# $Id$
-
-# Macros
-CC		=	gcc
-LD		=	ld
-
-ifeq ($(os),win32)	# Windows
-
-EXEFILE	=	.exe
-LIBDIR	:=	/gcc/i386-mingw32/lib
-CFLAGS	:=	-mno-cygwin
-LFLAGS  :=	--target=i386-mingw32 -mno-cygwin
-DELETE	=	echo y | del 
-LIBS	=	$(LIBDIR)/libwsock32.a
-
-else	# Linux
-
-EXEFILE	=	
-LIBODIR	:=	gcc.linux.lib
-EXEODIR	:=	gcc.linux.exe
-LIBDIR	:=	/usr/lib
-CFLAGS	:=	
-LFLAGS  :=	
-DELETE	=	rm -f -v
-ifeq ($(os),freebsd)	# FreeBSD
-LIBS	=	-pthread
-else
-LIBS	=	$(LIBDIR)/libpthread.a
-endif	#! FreeBSD
-
-endif
-
-CFLAGS	:=	$(CFLAGS) -I../sdk
-
-SBJ: sbj$(EXEFILE)
-
-sbj$(EXEFILE) : sbj.c ../sdk/xsdk.c ../sdk/xsdkvars.c ../sdk/xsdkwrap.c
-	$(CC) $(CFLAGS) $^ -o $@ $(LIBS)
diff --git a/xtrn/sbj/sbj.bpf b/xtrn/sbj/sbj.bpf
deleted file mode 100644
index d58a17ed04..0000000000
--- a/xtrn/sbj/sbj.bpf
+++ /dev/null
@@ -1,8 +0,0 @@
-USEUNIT("Sbj.c");
-USEUNIT("..\SDK\Xsdkvars.c");
-USEUNIT("..\SDK\Xsdk.c");
-USEUNIT("..\sdk\xsdkwrap.c");
-//---------------------------------------------------------------------------
-This file is used by the project manager only and should be treated like the project file
-
-
main
\ No newline at end of file
diff --git a/xtrn/sbj/sbj.bpr b/xtrn/sbj/sbj.bpr
deleted file mode 100644
index 71b1ef5126..0000000000
--- a/xtrn/sbj/sbj.bpr
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version='1.0' encoding='utf-8' ?>
-<!-- C++Builder XML Project -->
-<PROJECT>
-  <MACROS>
-    <VERSION value="BCB.05.03"/>
-    <PROJECT value="sbj.exe"/>
-    <OBJFILES value="Sbj.obj ..\SDK\Xsdkvars.obj ..\SDK\Xsdk.obj ..\sdk\xsdkwrap.obj"/>
-    <RESFILES value=""/>
-    <IDLFILES value=""/>
-    <IDLGENFILES value=""/>
-    <DEFFILE value=""/>
-    <RESDEPEN value="$(RESFILES)"/>
-    <LIBFILES value=""/>
-    <LIBRARIES value=""/>
-    <SPARELIBS value=""/>
-    <PACKAGES value="VCL50.bpi VCLX50.bpi bcbsmp50.bpi VCLDB50.bpi VCLADO50.bpi ibsmp50.bpi 
-      VCLBDE50.bpi VCLDBX50.bpi QRPT50.bpi TEEUI50.bpi TEEDB50.bpi TEE50.bpi 
-      DSS50.bpi TEEQR50.bpi VCLIB50.bpi VCLMID50.bpi VCLIE50.bpi INETDB50.bpi 
-      INET50.bpi NMFAST50.bpi WEBMID50.bpi bcbie50.bpi dclocx50.bpi"/>
-    <PATHCPP value=".;..\SDK"/>
-    <PATHPAS value=".;"/>
-    <PATHRC value=".;"/>
-    <PATHASM value=".;"/>
-    <DEBUGLIBPATH value="$(BCB)\lib\debug"/>
-    <RELEASELIBPATH value="$(BCB)\lib\release"/>
-    <LINKER value="tlink32"/>
-    <USERDEFINES value="_DEBUG"/>
-    <SYSDEFINES value="NO_STRICT;_NO_VCL"/>
-    <MAINSOURCE value="sbj.bpf"/>
-    <INCLUDEPATH value="..\SDK;$(BCB)\include;$(BCB)\include\vcl"/>
-    <LIBPATH value="..\SDK;$(BCB)\lib\obj;$(BCB)\lib"/>
-    <WARNINGS value="-w-par"/>
-  </MACROS>
-  <OPTIONS>
-    <IDLCFLAGS value="-I..\SDK -I$(BCB)\include -I$(BCB)\include\vcl -src_suffix cpp -D_DEBUG -boa"/>
-    <CFLAG1 value="-Od -H=$(BCB)\lib\vcl50.csm -Hc -Vx -Ve -X- -r- -a8 -b- -k -y -v -vi- -tWC 
-      -tWM -c"/>
-    <PFLAGS value="-$YD -$W -$O- -v -JPHNE -M"/>
-    <RFLAGS value=""/>
-    <AFLAGS value="/mx /w2 /zd"/>
-    <LFLAGS value="-D&quot;&quot; -ap -Tpe -x -Gn -v"/>
-  </OPTIONS>
-  <LINKER>
-    <ALLOBJ value="c0x32.obj $(OBJFILES)"/>
-    <ALLRES value="$(RESFILES)"/>
-    <ALLLIB value="$(LIBFILES) $(LIBRARIES) import32.lib cw32mt.lib"/>
-  </LINKER>
-  <IDEOPTIONS>
-[Version Info]
-IncludeVerInfo=0
-AutoIncBuild=0
-MajorVer=1
-MinorVer=0
-Release=0
-Build=0
-Debug=0
-PreRelease=0
-Special=0
-Private=0
-DLL=0
-Locale=1033
-CodePage=1252
-
-[Version Info Keys]
-CompanyName=
-FileDescription=
-FileVersion=1.0.0.0
-InternalName=
-LegalCopyright=
-LegalTrademarks=
-OriginalFilename=
-ProductName=
-ProductVersion=1.0.0.0
-Comments=
-
-[Debugging]
-DebugSourceDirs=$(BCB)\source\vcl
-
-[Parameters]
-RunParams=
-HostApplication=
-RemoteHost=
-RemotePath=
-RemoteDebug=0
-
-[Compiler]
-ShowInfoMsgs=0
-LinkDebugVcl=0
-LinkCGLIB=0
-
-[CORBA]
-AddServerUnit=1
-AddClientUnit=1
-PrecompiledHeaders=1
-  </IDEOPTIONS>
-</PROJECT>
\ No newline at end of file
diff --git a/xtrn/sbj/sbj.c b/xtrn/sbj/sbj.c
deleted file mode 100644
index 36966cac71..0000000000
--- a/xtrn/sbj/sbj.c
+++ /dev/null
@@ -1,1907 +0,0 @@
-/* SBJ.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/************************/
-/* Synchronet Blackjack */
-/************************/
-
-/*******************************************************/
-/* Multiuser Blackjack game for Synchronet BBS systems */
-/*******************************************************/
-
-/****************************************************************************/
-/* This source code is completely Public Domain and can be modified and 	*/
-/* distributed freely (as long as changes are documented).					*/
-/* It is meant as an example to programmers of how to use the XSDK			*/
-/****************************************************************************/
-
-/***********/
-/* History */
-/****************************************************************************\
-
-		Many bugs. Especially multiplayer.
-v1.0
-		Many bugs fixed. Timing problems still exist.
-v1.01
-		Fixed yet more bugs. No more timing problems. Appears bullet-proof.
-v1.02
-		Fixed dealer card up always showing card symbol (even when symbols off).
-		Added ctrl-e answer detection and user notification.
-		Fixed three 7's bug.
-		Raised maximum number of decks to 100 for large multinode systems.
-		Fixed /<CR> bug.
-		Fixed multiple split bug.
-		Fixed non-symbols being sent to other nodes bug.
-		Changed this node's hands to say "You" instead of the user name.
-v1.03
-		Changed the warning and timeout times
-v1.04
-		Fixed symbols being displayed on dealer's hand even when disabled.
-		Made different inactivity warning and timeout values for the main
-		menu and when in play.
-v1.05
-		Fixed invalid (usually negative) card bug. THELP random() doc error.
-		Card now actually contains all the cards minus one.
-		Fixed multinode play join and hang bug.
-v1.06
-		If player gets blackjack and dealer gets 21, player wins. Used to push.
-v1.07
-		Fixed split, then double bug.
-v1.08
-		Replaced bioskey(1) calls with inkey() and used XSDK v2.0 with node
-		intercommunication with users on BBS or in other external programs.
-v2.00
-		Fixed problem with loosing first character of chat lines
-		Added DESQview awareness
-v2.01
-		Replaced all calls to delay() with fdelay()
-v2.02
-		Listing users now displays what external program they're running.
-		Fixed problem with max bet being too small when users have over
-		65mb of credit.
-v2.02
-		XSDK (and consequently SBJ) now supports shrinking Synchronet to run
-		(available in v1b r1).
-		SBBSNODE environment variable will be used for the current node's dir
-		if the node dir is not specified on the command line.
-v2.03
-		XSDK and SBJ now support the new message services of Synchronet
-		(added in v1b r2) for more full-proof internode messaging.
-v2.10
-		New XSDK that supports new file retrieval node status display.
-v2.11
-		Changed getnodemsg to eliminate tiny void where messages could fall.
-
-
-\****************************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-
-#include "xsdk.h"
-
-#define MAX_DECKS	100
-#define MAX_CARDS	10		/* maximum number of cards per hand */
-#define MAX_HANDS	4		/* maximum number of hands per player */
-
-#define DEBUG 0
-
-#define J 11	/* jack */
-#define Q 12	/* queen */
-#define K 13	/* king */
-#define A 14	/* ace */
-
-#define H 0		/* heart */
-#define D 1 	/* diamond */
-#define C 2		/* club */
-#define S 3		/* spade */
-									/* bits used in misc variable */
-#define INPLAY		(1<<0)			/* hand in play */
-
-enum {								/* values for status bytes */
-	 BET							/* betting */
-	,WAIT							/* waiting for turn */
-	,PLAY							/* playing his hand */
-	,SYNC_P 						/* In sync area - player */
-	,SYNC_D 						/* In sync area - dealer */
-	};
-
-typedef struct { char value, suit; } card_t;
-
-card_t newdeck[52]={
-	 2,H, 2,D, 2,C, 2,S,
-	 3,H, 3,D, 3,C, 3,S,
-	 4,H, 4,D, 4,C, 4,S,
-	 5,H, 5,D, 5,C, 5,S,
-	 6,H, 6,D, 6,C, 6,S,
-	 7,H, 7,D, 7,C, 7,S,
-	 8,H, 8,D, 8,C, 8,S,
-	 9,H, 9,D, 9,C, 9,S,
-	10,H,10,D,10,C,10,S,
-	 J,H, J,D, J,C, J,S,
-	 Q,H, Q,D, Q,C, Q,S,
-	 K,H, K,D, K,C, K,S,
-	 A,H, A,D, A,C, A,S };
-
-uchar	misc;
-uchar	curplayer;
-uchar	total_decks,sys_decks;
-uchar	total_nodes;
-int 	cur_card;
-uchar	dc;
-card_t	dealer[MAX_CARDS];
-int 	gamedab;					 /* file handle for data file */
-card_t	card[MAX_DECKS*52];
-card_t	player[MAX_HANDS][MAX_CARDS];
-char	hands,pc[MAX_HANDS];
-uchar	total_players;
-uchar	symbols=1;
-char	autoplay=0;
-int 	logit=0,tutor=0;
-uint	node[MAX_NODES];   /* the usernumber in each node */
-char	status[MAX_NODES];
-ulong	credits;
-uint	bet[MAX_HANDS],ibet,min_bet,max_bet;
-char	tmp[81];
-char	*UserSays="\1n\1m\1h%s \1n\1msays \"\1c\1h%s\1n\1m\"\r\n";
-char	*UserWhispers="\1n\1m\1h%s \1n\1mwhispers \"\1c\1h%s\1n\1m\"\r\n";
-char	*ShoeStatus="\r\n\1_\1w\1hShoe: %u/%u\r\n";
-
-#ifndef SBJCLEAN
-
-void play(void);
-char *cardstr(card_t card);
-char hand(card_t card[MAX_CARDS], char count);
-char soft(card_t card[MAX_CARDS], char count);
-char pair(card_t card[MAX_CARDS], char count);
-void getgamedat(char lockit);
-void putgamedat(void);
-void getcarddat(void);
-void putcarddat(void);
-void shuffle(void);
-void waitturn(void);
-void nextplayer(void);
-char lastplayer(void);
-char firstplayer(void);
-void getnodemsg(void);
-void putnodemsg(char *msg, uint nodenumber);
-void putallnodemsg(char *msg);
-void syncplayer(void);
-void syncdealer(void);
-void moduserdat(void);
-char *hit(void);
-char *stand(void);
-char *doubit(void);
-char *split(void);
-void open_gamedab(void);
-void create_gamedab(void);
-char *activity(char status_type);
-void chat(void);
-void listplayers(void);
-char *joined(void);
-char *left(void);
-void strip_symbols(char *str);
-void debug(void);
-
-int my_random(int n)
-{
-	float f;
-
-	if(n<2)
-		return(0);
-	f=(float)rand()/(float)RAND_MAX;
-
-	return((int)(n*f));
-}
-
-/****************************************************************************/
-/* Entry point																*/
-/****************************************************************************/
-int main(int argc, char **argv)
-{
-	char str[81],compiler[32],*p;
-	int i,file;
-	FILE *stream;
-
-	node_dir[0]=0;
-	for(i=1;i<argc;i++)
-		if(!stricmp(argv[i],"/L"))
-			logit=1;
-		else if(!stricmp(argv[i],"/T"))
-			tutor=2;
-		else if(!stricmp(argv[i],"/S"))
-			tutor=1;
-		else strcpy(node_dir,argv[i]);
-
-	p=getenv("SBBSNODE");
-	if(!node_dir[0] && p)
-		strcpy(node_dir,p);
-
-	if(!node_dir[0]) {	  /* node directory not specified */
-		printf("usage: sbj <node directory> [/options]\r\n");
-		printf("\r\noptions: L = log wins/losses for each day\r\n");
-		getch();
-		return(1); }
-
-	if(node_dir[strlen(node_dir)-1]!='\\'
-		&& node_dir[strlen(node_dir)-1]!='/')  /* make sure node_dir ends in '\' */
-		strcat(node_dir,"/");
-
-	initdata(); 								/* read XTRN.DAT and more */
-	credits=user_cdt;
-	total_nodes=sys_nodes;
-
-	remove("debug.log");
-
-	if((file=nopen("sbj.cfg",O_RDONLY))==-1) {  /* open config file */
-		bputs("Error opening sbj.cfg\r\n");
-		pause();
-		return(1); }
-	if((stream=fdopen(file,"rb"))==NULL) {      /* convert to stream */
-		bputs("Error converting sbj.cfg handle to stream\r\n");
-		pause();
-		return(1); }
-	fgets(str,81,stream);						/* number of decks in shoe */
-	total_decks=sys_decks=atoi(str);
-	fgets(str,81,stream);						/* min bet (in k) */
-	min_bet=atoi(str);
-	fgets(str,81,stream);						/* max bet (in k) */
-	max_bet=atoi(str);
-	fgets(str,81,stream);						/* default bet (in k) */
-	ibet=atoi(str);
-	fclose(stream);
-	if(!total_decks || total_decks>MAX_DECKS) {
-		bputs("Invalid number of decks in sbj.cfg\r\n");
-		pause();
-		return(1); }
-	if(!max_bet) {
-		bputs("Invalid max bet in sbj.cfg\r\n");
-		pause();
-		return(1); }
-	if(min_bet>max_bet) {
-		bputs("Invalid min bet in sbj.cfg\r\n");
-		pause();
-		return(1); }
-	if(ibet>max_bet || ibet<min_bet) {
-		bputs("Invalid default bet in sbj.cfg\r\n");
-		pause();
-		return(1); }
-
-	if(!fexist("card.dab")) {
-		cur_card=0;
-		dc=0;
-		memset(dealer,0,sizeof(dealer));
-		memset(card,0,sizeof(card));
-		putcarddat(); }
-	else {
-		getcarddat();
-		if(total_decks!=sys_decks) {
-			remove("card.dab");
-			total_decks=sys_decks;
-			putcarddat(); } }
-
-	if(!fexist("game.dab"))         /* File's not there */
-		create_gamedab();
-
-	open_gamedab();
-
-	getgamedat(0);
-	if(total_nodes!=sys_nodes) {  /* total nodes changed */
-		close(gamedab);
-		total_nodes=sys_nodes;
-		create_gamedab();
-		open_gamedab(); }
-
-	srand((unsigned)time(NULL));
-
-#ifdef __16BIT__
-	while(_bios_keybrd(1))	 /* clear input buffer */
-		_bios_keybrd(0);
-#endif
-
-	putchar(5); /* ctrl-e */
-	mswait(500);
-	if(kbhit()) {
-#ifdef __16BIT__
-		while(_bios_keybrd(1))
-			_bios_keybrd(0);
-#else
-		getkey(0);
-#endif
-		bputs("\r\n\1r\1h\1i*** ATTENTION ***\1n\1h\r\n");
-		bputs("\r\nSynchronet Blackjack uses Ctrl-E (ENQ) for the 'club' card "
-			"symbol.");
-		bputs("\r\nYour terminal responded to this control character with an "
-			"answerback string.");
-		bputs("\r\nYou will need to disable all Ctrl-E (ENQ) answerback "
-			"strings (Including \r\nCompuserve Quick B transfers) if you wish to "
-			"toggle card symbols on.\r\n\r\n");
-		symbols=0;
-		pause(); }
-
-	getgamedat(1);
-	node[node_num-1]=0;
-	putgamedat();
-
-	/* Override default mnemonic colors */
-	mnehigh=RED|HIGH;
-	mnelow=CYAN|HIGH;
-
-	/* Override default inactivity timeout values */
-	sec_warn=120;	
-	sec_timeout=180;
-
-	COMPILER_DESC(compiler);
-
-#define SBJ_INDENT "                                "
-	while(1) {
-		cls();
-		sprintf(str,"\1n\1h\1cSynchronet \1rBlackjack! \1cv3.11 for %s\r\n"
-			,PLATFORM_DESC);
-		center(str);
-		sprintf(str,"\1w(XSDK v%s %s %s)\r\n\r\n"
-            ,xsdk_ver,compiler,__DATE__);
-		center(str);
-
-		aborted=0;
-		mnemonics(SBJ_INDENT"~Instructions\r\n");
-		mnemonics(SBJ_INDENT"~Join/Begin Game\r\n");
-		mnemonics(SBJ_INDENT"~List Players\r\n");
-		mnemonics(SBJ_INDENT"~Rules of the Game\r\n");
-		mnemonics(SBJ_INDENT"~Toggle Card Symbols\r\n");
-		sprintf(str,SBJ_INDENT"~Quit to %s\r\n",sys_name);
-		mnemonics(str);
-		nodesync();
-		bprintf("\1_\r\n"SBJ_INDENT"\1y\1hWhich: \1n");
-		switch(getkeys("IJBLRTQ|!",0)) {
-			#if DEBUG
-			case '!':
-				if(!com_port)
-					autoplay=1;
-				break;
-			case '|':
-				debug();
-				break;
-			#endif
-			case 'I':
-				cls();
-				printfile("sbj.msg");
-				break;
-			case 'L':
-				listplayers();
-				bprintf(ShoeStatus,cur_card,total_decks*52);
-				break;
-			case 'R':
-				bprintf("\1n\1c\r\nMinimum bet: \1h%uk",min_bet);
-				bprintf("\1n\1c\r\nMaximum bet: \1h%uk\r\n",max_bet);
-				bprintf("\1w\1h\r\nCard decks in shoe: \1h%u\r\n",sys_decks);
-				break;
-			case 'T':
-				symbols=!symbols;
-				bprintf("\1_\1w\r\nCard symbols now: %s\r\n",symbols ? "ON":"OFF");
-				break;
-			case 'Q':
-				exit(0);
-			case 'J':
-			case 'B':
-				sec_warn=60;	/* Override default inactivity timeout values */
-				sec_timeout=90;
-				play();
-				sec_warn=120;
-				sec_timeout=180;
-				break; 
-		} 
-	}
-}
-
-#if DEBUG
-void debug()
-{
-	int i;
-
-if(user_level<90)
-	return;
-getgamedat(0);
-getcarddat();
-
-bprintf("\r\nDeck (%d) Current: %d\r\n\r\n",total_decks,cur_card);
-for(i=0;i<total_decks*52;i++) {
-	if(!(i%11))
-		bputs("\r\n");
-	bprintf("%3d:%-11s",i,cardstr(card[i])); }
-
-pause();
-bprintf("\1n\r\nDealer (%d)\r\n\r\n",dc);
-for(i=0;i<dc;i++)
-	bprintf("%s ",cardstr(dealer[i]));
-bprintf("\1n\r\nNodes (%d) Current: %d\r\n\r\n"
-	,total_nodes,curplayer);
-for(i=0;i<total_nodes;i++)
-	bprintf("%d: node=%d status=%d %s\r\n",i+1,node[i]
-		,status[i],activity(status[i]));
-}
-
-void debugline(char *line)
-{
-	char str[256];
-	int file;
-	time_t now;
-	struct dosdate_t date;
-	struct dostime_t curtime;
-
-#if 1
-now=time(NULL);
-unixtodos(now,&date,&curtime);
-if((file=nopen("debug.log",O_WRONLY|O_APPEND|O_CREAT))==-1)
-	return;
-sprintf(str,"%d %02u:%02u:%02u %s\r\n"
-	,node_num,curtime.ti_hour,curtime.ti_min,curtime.ti_sec,line);
-write(file,str,strlen(str));
-close(file);
-#endif
-}
-
-#endif
-
-void suggest(char action)
-{
-bputs("Dealer suggests you ");
-switch(action) {
-	case 'H':
-		bputs("hit");
-		break;
-	case 'S':
-		bputs("stand");
-		break;
-	case 'D':
-		bputs("double");
-		break;
-	case 'P':
-		bputs("split");
-		break; }
-bputs("\r\n");
-}
-
-void wrong(char action)
-{
-#ifdef __16BIT__
-sound(100);
-mswait(500);
-nosound();
-#endif
-bputs("Dealer says you should have ");
-switch(action) {
-	case 'H':
-		bputs("hit");
-		break;
-	case 'S':
-		bputs("stood");
-		break;
-	case 'D':
-		bputs("doubled");
-		break;
-	case 'P':
-		bputs("split");
-		break; }
-bputs("\r\n");
-}
-
-/****************************************************************************/
-/* This function is the actual game playing loop.							*/
-/****************************************************************************/
-void play()
-{
-	char str[256],str2[256],log[81],done,doub,dh,split_card,suggestion
-		,*YouWereDealt="\1n\1k\0015 You \1n\1m were dealt: %s\r\n"
-		,*UserWasDealt="\1n\1m\1h%s\1n\1m was dealt: %s\r\n"
-		,*YourHand="\1n\1k\0015 You \1n\1m                     (%2d) %s"
-		,*UserHand="\1n\1m\1h%-25s \1n\1m(%2d) %s"
-		,*DealerHand="\1n\1hDealer                    \1n\1m(%2d) "
-		,*Bust="\1n\1r\1hBust\1n\r\n"
-		,*Natural="\1g\1h\1iNatural "
-		,*Three7s="\1r\1h\1iThree 7's "
-		,*Blackjack="\1n\0011\1k Blackjack! \1n\r\n"
-		,*TwentyOne="\1n\0012\1k Twenty-one \1n\r\n";
-	int h,i,j,file;
-	uint max;
-	long val;
-	time_t start,now;
-	struct tm* tm;
-
-sprintf(str,"MESSAGE.%d",node_num);         /* remove message if waiting */
-if(fexist(str))
-    remove(str);
-
-getgamedat(0);
-if(node[node_num-1]) {
-	getgamedat(1);
-	node[node_num-1]=0;
-	putgamedat();
-	getgamedat(0); }
-
-if(total_players && misc&INPLAY) {
-	bputs("\r\n\1hWaiting for end of hand (^A to abort)...\1n");
-	start=now=time(NULL);
-	getgamedat(0);
-	while(total_players && misc&INPLAY) {
-		if((i=inkey(0))!=0) {	 /* if key was hit */
-			if(i==1) {		 /* if ctrl-a */
-				bputs("\r\n");
-				return; } }  /* return */
-		mswait(100);
-		getgamedat(0);
-		now=time(NULL);
-		if(now-start>300) { /* only wait up to 5 minutes */
-			bputs("\r\ntimeout\r\n");
-			return; } }
-	bputs("\r\n"); }
-
-getgamedat(1);
-node[node_num-1]=user_number;
-putgamedat();
-
-if(!total_players)
-    shuffle();
-else
-	listplayers();
-
-sprintf(str,"\1n\1m\1h%s \1n\1m%s\r\n",user_name,joined());
-putallnodemsg(str);
-
-while(1) {
-	aborted=0;
-	#if DEBUG
-	debugline("top of loop");
-	#endif
-	if(autoplay)
-		lncntr=0;
-	bprintf(ShoeStatus,cur_card,total_decks*52);
-	if(cur_card>(total_decks*52)-(total_players*10)-10 && lastplayer())
-		shuffle();
-	getgamedat(1);
-	misc&=~INPLAY;
-	status[node_num-1]=BET;
-	node[node_num-1]=user_number;
-	putgamedat();
-
-	bprintf("\r\n\1n\1cYou have \1h%s\1n\1ck credits\r\n"
-		,ultoac(credits/1024L,str));
-	if(credits<min_bet/1024) {
-		bprintf("\1n\1cMinimum bet: \1h%uk\r\n",min_bet);
-		bputs("\1n\1r\1hCome back when you have more credits.\r\n");
-        break; }
-	if(credits/1024L>(ulong)max_bet)
-		max=max_bet;
-	else
-		max=credits/1024L;
-	sprintf(str,"\r\nBet amount (in kilobytes) or ~Quit [%u]: "
-		,ibet<credits/1024L ? ibet : credits/1024L);
-	chat();
-	mnemonics(str);
-	if(autoplay && kbhit())
-		autoplay=0;
-	if(autoplay)
-		i=ibet;
-	else
-		i=getnum(max);
-	if(i==-1)	/* if user hit ^C or 'Q' */
-		break;
-	bputs("\r\n");
-	if(i)		/* if user entered a value */
-		bet[0]=i;
-	else		/* if user hit enter */
-		bet[0]=ibet<credits/1024L ? ibet : credits/1024L;
-	if(bet[0]<min_bet) {
-		bprintf("\1n\1cMinimum bet: \1h%uk\r\n",min_bet);
-		bputs("\1n\1r\1hCome back when you're ready to bet more.\r\n");
-		break; }
-	ibet=bet[0];
-	getgamedat(0);	/* to get all new arrivals */
-	sprintf(str,"\1m\1h%s\1n\1m bet \1n\1h%u\1n\1mk\r\n",user_name,bet[0]);
-	putallnodemsg(str);
-
-	pc[0]=2;						/* init player's 1st hand to 2 cards */
-	for(i=1;i<MAX_HANDS;i++)		/* init player's other hands to 0 cards */
-		pc[i]=0;
-	hands=1;						/* init total player's hands to 1 */
-
-	getgamedat(1);					/* first come first serve to be the */
-	for(i=0;i<total_nodes;i++)		/* dealer in control of sync */
-		if(node[i] && status[i]==SYNC_D)
-			break;
-	if(i==total_nodes) {
-		#if DEBUG
-		debugline("syncdealer");
-		#endif
-		syncdealer();  }			/* all players meet here */
-	else {							/* first player is current after here */
-		#if DEBUG
-		debugline("syncplayer");
-		#endif
-		syncplayer(); } 			/* game is closed (INPLAY) at this point */
-
-	#if DEBUG
-	debugline("waitturn 1");
-	#endif
-    waitturn();
-	getnodemsg();
-										/* Initial deal card #1 */
-	getcarddat();
-	player[0][0]=card[cur_card++];
-	putcarddat();
-	sprintf(str,YouWereDealt,cardstr(card[cur_card-1]));
-	if(!symbols)
-		strip_symbols(str);
-    bputs(str);
-	sprintf(str,UserWasDealt,user_name,cardstr(card[cur_card-1]));
-    putallnodemsg(str);
-	
-	if(lastplayer()) {
-		getcarddat();
-		dealer[0]=card[cur_card++];
-		dc=1;
-		putcarddat(); }
-	nextplayer();
-	#if DEBUG
-	debugline("waitturn 2");
-	#endif
-	waitturn();
-	getnodemsg();
-
-	getcarddat();					   /* Initial deal card #2 */
-	player[0][1]=card[cur_card++];
-	putcarddat();
-	sprintf(str,YouWereDealt,cardstr(card[cur_card-1]));
-	if(!symbols)
-		strip_symbols(str);
-	bputs(str);
-	sprintf(str,UserWasDealt,user_name,cardstr(card[cur_card-1]));
-    putallnodemsg(str);
-	
-	if(lastplayer()) {
-		getcarddat();
-		dealer[1]=card[cur_card++];
-		dc=2;
-		putcarddat(); }
-	nextplayer();
-	#if DEBUG
-	debugline("waitturn 3");
-	#endif
-	waitturn();
-	getnodemsg();
-	getcarddat();
-
-	for(i=0;i<hands;i++) {
-		if(autoplay)
-			lncntr=0;
-		done=doub=0;
-		while(!done && pc[i]<MAX_CARDS && cur_card<total_decks*52) {
-			h=hand(player[i],pc[i]);
-			str[0]=0;
-			for(j=0;j<pc[i];j++) {
-				strcat(str,cardstr(player[i][j]));
-				strcat(str," "); }
-			j=bstrlen(str);
-			while(j++<19)
-				strcat(str," ");
-			if(h>21) {
-				strcat(str,Bust);
-				sprintf(str2,YourHand,h,str);
-				if(!symbols)
-					strip_symbols(str2);
-				bputs(str2);
-				sprintf(str2,UserHand,user_name,h,str);
-				putallnodemsg(str2);
-				break; }
-			if(h==21) {
-				if(pc[i]==2) {	/* blackjack */
-					if(player[i][0].suit==player[i][1].suit)
-						strcat(str,Natural);
-					strcat(str,Blackjack); }
-				else {
-					if(player[i][0].value==7
-						&& player[i][1].value==7
-						&& player[i][2].value==7)
-						strcat(str,Three7s);
-					strcat(str,TwentyOne); }
-				sprintf(str2,YourHand,h,str);
-				if(!symbols)
-					strip_symbols(str2);
-				bputs(str2);
-				sprintf(str2,UserHand,user_name,h,str);
-                putallnodemsg(str2);
-				// fdelay(500);
-				break; }
-			strcat(str,"\r\n");
-			sprintf(str2,YourHand,h,str);
-			if(!symbols)
-				strip_symbols(str2);
-			bputs(str2);
-			sprintf(str2,UserHand,user_name,h,str);
-			putallnodemsg(str2);
-			if(doub)
-				break;
-			sprintf(str,"\1n\1hDealer\1n\1m card up: %s\r\n"
-				,cardstr(dealer[1]));
-			if(!symbols)
-				strip_symbols(str);
-			bputs(str);
-
-			if(tutor) {
-				if(pc[i]==2)
-					split_card=pair(player[i],pc[i]);
-				else
-					split_card=0;
-                if(split_card==A
-					|| (split_card==9 && (dealer[1].value<7
-						|| (dealer[1].value>7 && dealer[1].value<10)))
-                    || split_card==8
-					|| (split_card==7 && dealer[1].value<9)
-					|| (split_card==6 && dealer[1].value<7)
-					|| (split_card==4 && dealer[1].value==5)
-					|| (split_card && split_card<4 && dealer[1].value<8))
-					suggestion='P';
-                else if(soft(player[i],pc[i])) {
-                    if(h>18)
-						suggestion='S';
-					else if(pc[i]==2
-						&& ((h==18
-							&& dealer[1].value>3 && dealer[1].value<7)
-                        || (h==17
-							&& dealer[1].value>2 && dealer[1].value<7)
-                        || (h>13
-							&& dealer[1].value>3 && dealer[1].value<7)
-                        || (h==12
-							&& dealer[1].value>4 && dealer[1].value<7)))
-						suggestion='D';
-                    else
-						suggestion='H'; }
-                else { /* hard */
-					if(h>16 || (h>13 && dealer[1].value<7)
-						|| (h==12 && dealer[1].value>3 && dealer[1].value<7))
-						suggestion='S';
-					else if(pc[i]==2
-						&& (h==11 || (h==10 && dealer[1].value<10)
-						|| (h==9 && dealer[1].value<7)))
-						suggestion='D';
-                    else
-						suggestion='H'; } }
-
-			if(tutor==1)
-				suggest(suggestion);
-			strcpy(str,"\r\n~Hit");
-			strcpy(tmp,"H\r");
-			if(bet[i]+ibet<=credits/1024L && pc[i]==2) {
-				strcat(str,", ~Double");
-				strcat(tmp,"D"); }
-			if(bet[i]+ibet<=credits/1024L && pc[i]==2 && hands<MAX_HANDS
-				&& player[i][0].value==player[i][1].value) {
-				strcat(str,", ~Split");
-				strcat(tmp,"S"); }
-			strcat(str,", or [Stand]: ");
-			chat();
-			mnemonics(str);
-			if(autoplay && kbhit())
-				autoplay=0;
-
-
-			if(autoplay) {
-				lncntr=0;
-				bputs("\r\n");
-				strcpy(str,stand());
-				bputs(str);
-				putallnodemsg(str);
-				done=1; }
-			else
-			switch(getkeys(tmp,0)) {
-				case 'H':     /* hit */
-					if(tutor==2 && suggestion!='H')
-						wrong(suggestion);
-					strcpy(str,hit());
-					bputs(str);
-					putallnodemsg(str);
-					getcarddat();
-					player[i][pc[i]++]=card[cur_card++];
-					putcarddat();
-					break;
-				case 'D':   /* double down */
-					if(tutor==2 && suggestion!='D')
-                        wrong(suggestion);
-					strcpy(str,doubit());
-					bputs(str);
-					putallnodemsg(str);
-					getcarddat();
-					player[i][pc[i]++]=card[cur_card++];
-					putcarddat();
-					doub=1;
-					bet[i]+=ibet;
-					break;
-				case 'S':   /* split */
-					if(tutor==2 && suggestion!='P')
-                        wrong(suggestion);
-					strcpy(str,split());
-					bputs(str);
-					putallnodemsg(str);
-					player[hands][0]=player[i][1];
-					getcarddat();
-					player[i][1]=card[cur_card++];
-					player[hands][1]=card[cur_card++];
-					putcarddat();
-					pc[hands]=2;
-					bet[hands]=ibet;
-					hands++;
-					break;
-				case CR:
-					if(tutor==2 && suggestion!='S')
-                        wrong(suggestion);
-					strcpy(str,stand());
-					bputs(str);
-					putallnodemsg(str);
-					done=1;
-					break; } } }
-
-	if(lastplayer()) {	/* last player plays the dealer's hand */
-		getcarddat();
-		while(hand(dealer,dc)<17 && dc<MAX_CARDS && cur_card<total_decks*52)
-			dealer[dc++]=card[cur_card++];
-		putcarddat(); }
-
-	nextplayer();
-	#if DEBUG
-	debugline("waitturn 4");
-	#endif
-	waitturn();
-	getnodemsg();
-
-	if(firstplayer()==node_num) {
-		strcpy(str,"\1n\0014\1h Final \1n\r\n");
-		bputs(str);
-		putallnodemsg(str); }
-	getcarddat();
-	dh=hand(dealer,dc); 					/* display dealer's hand */
-	sprintf(str,DealerHand,dh);
-	for(i=0;i<dc;i++) {
-		strcat(str,cardstr(dealer[i]));
-		strcat(str," "); }
-	i=bstrlen(str);
-	while(i++<50)				/* was 50 */
-		strcat(str," ");
-	if(dh>21) {
-		strcat(str,Bust);
-		if(!symbols)
-			strip_symbols(str);
-		bputs(str); }
-	else if(dh==21) {
-		if(dc==2) { 	/* blackjack */
-			if(dealer[0].suit==dealer[1].suit)
-				strcat(str,Natural);
-			strcat(str,Blackjack); }
-		else {			/* twenty-one */
-			if(dc==3 && dealer[0].value==7 && dealer[1].value==7
-				&& dealer[2].value==7)
-				strcat(str,Three7s);
-			strcat(str,TwentyOne); }
-		if(!symbols)
-            strip_symbols(str);
-		bputs(str); }
-	else {
-		if(!symbols)
-            strip_symbols(str);
-		bprintf("%s\r\n",str); }
-
-	for(i=0;i<hands;i++) {						/* display player's hand(s) */
-		h=hand(player[i],pc[i]);
-		str[0]=0;
-		for(j=0;j<pc[i];j++) {
-			strcat(str,cardstr(player[i][j]));
-			strcat(str," "); }
-		j=bstrlen(str);
-		while(j++<19)
-			strcat(str," ");
-		if(logit) {
-			now=time(NULL);
-			tm=localtime(&now);
-			sprintf(log,"%02d%02d%02d.log"                  /* log winnings */
-				,tm->tm_mon+1,tm->tm_mday,tm->tm_year%100);
-			if((file=nopen(log,O_RDONLY))!=-1) {
-				read(file,tmp,filelength(file));
-				tmp[filelength(file)]=0;
-				val=atol(tmp);
-				close(file); }
-			else
-				val=0L;
-			if((file=nopen(log,O_WRONLY|O_CREAT|O_TRUNC))==-1) {
-				bprintf("error opening %s\r\n",log);
-				return; } }
-		if(h<22 && (h>dh || dh>21	/* player won */
-			|| (h==21 && pc[i]==2 && dh==21 && dh>2))) {	/* blackjack */
-			j=bet[i];								  /* and dealer got 21 */
-			if(h==21 && 	/* natural blackjack or three 7's */
-				((player[i][0].value==7 && player[i][1].value==7
-				&& player[i][2].value==7)
-				|| (pc[i]==2 && player[i][0].suit==player[i][1].suit)))
-				j*=2;
-			else if(h==21 && pc[i]==2)	/* regular blackjack */
-				j*=1.5; /* blackjack pays 1 1/2 to 1 */
-			sprintf(tmp,"\1n\1h\1m\1iWon!\1n\1h %u\1n\1mk",j);
-			strcat(str,tmp);
-			credits+=j*1024L;
-			val-=j*1024L;
-			moduserdat(); }
-		else if(h<22 && h==dh)
-			strcat(str,"\1n\1hPush");
-		else {
-			strcat(str,"\1nLost");
-			credits-=bet[i]*1024L;
-			val+=bet[i]*1024L;
-			moduserdat(); }
-		if(logit) {
-			sprintf(tmp,"%ld",val);
-			write(file,tmp,strlen(tmp));
-			close(file); }					/* close winning log */
-		strcat(str,"\1n\r\n");
-		sprintf(str2,YourHand,h,str);
-		if(!symbols)
-			strip_symbols(str2);
-		bputs(str2);
-		sprintf(str2,UserHand,user_name,h,str);
-		putallnodemsg(str2); }
-
-	nextplayer();
-	if(!lastplayer()) {
-		#if DEBUG
-		debugline("lastplayer waitturn");
-		#endif
-		waitturn();
-		nextplayer(); }
-	#if DEBUG
-	debugline("end of loop");
-	#endif
-	getnodemsg(); }
-
-getgamedat(1);
-node[node_num-1]=0;
-putgamedat();
-sprintf(str,"\1n\1m\1h%s \1n\1m%s\r\n",user_name,left());
-putallnodemsg(str);
-}
-
-/****************************************************************************/
-/* This function returns a static string that describes the status byte 	*/
-/****************************************************************************/
-char *activity(char status_type)
-{
-	static char str[50];
-
-switch(status_type) {
-	case BET:
-		strcpy(str,"betting");
-		break;
-	case WAIT:
-		strcpy(str,"waiting for turn");
-		break;
-	case PLAY:
-		strcpy(str,"playing");
-		break;
-	case SYNC_P:
-		strcpy(str,"synchronizing");
-		break;
-	case SYNC_D:
-		strcpy(str,"synchronizing (dealer)");
-        break;
-	default:
-		strcat(str,"UNKNOWN");
-		break; }
-return(str);
-}
-
-/****************************************************************************/
-/* This function returns the string that represents a playing card. 		*/
-/****************************************************************************/
-char *cardstr(card_t card)
-{
-	static char str[20];
-	char tmp[20];
-
-strcpy(str,"\1n\0017"); /* card color - background always white */
-if(card.suit==H || card.suit==D)
-	strcat(str,"\1r");  /* hearts and diamonds - foreground red */
-else
-	strcat(str,"\1k");  /* spades and clubs - foreground black */
-if(card.value>10)	/* face card */
-	switch(card.value) {
-		case J:
-			strcat(str,"J");
-			break;
-		case Q:
-			strcat(str,"Q");
-			break;
-		case K:
-			strcat(str,"K");
-			break;
-		case A:
-			strcat(str,"A");
-			break; }
-else {
-	sprintf(tmp,"%d",card.value);
-	strcat(str,tmp); }
-switch(card.suit) {  /* suit */
-	case H:
-		strcat(str,"\3");
-		break;
-	case D:
-		strcat(str,"\4");
-		break;
-	case C:
-		strcat(str,"\5");
-		break;
-	case S:
-		strcat(str,"\6");
-		break; }
-strcat(str,"\1n");
-return(str);
-}
-
-
-/****************************************************************************/
-/* This function returns the best value of a given hand.					*/
-/****************************************************************************/
-char hand(card_t card[MAX_CARDS],char count)
-{
-	char c,total=0,ace=0;
-
-for(c=0;c<count;c++) {
-	if(card[c].value==A) {		/* Ace */
-		if(total+11>21)
-			total++;
-		else {
-			ace++;
-			total+=11; } }
-	else if(card[c].value>=J)	/* Jack, Queen, King */
-		total+=10;
-	else						/* Number cards */
-		total+=card[c].value; }
-while(total>21 && ace) { /* ace is low if bust */
-	total-=10;
-	ace--; }
-return(total);
-}
-
-/****************************************************************************/
-/* This function returns number of soft aces in a given hand				*/
-/****************************************************************************/
-char soft(card_t card[MAX_CARDS],char count)
-{
-	char c,total=0,ace=0;
-
-for(c=0;c<count;c++) {
-	if(card[c].value==A) {		/* Ace */
-		if(total+11>21)
-			total++;
-		else {
-			ace++;
-			total+=11; } }
-	else if(card[c].value>=J)	/* Jack, Queen, King */
-		total+=10;
-	else						/* Number cards */
-		total+=card[c].value; }
-while(total>21 && ace) { /* ace is low if bust */
-	total-=10;
-	ace--; }
-return(ace);
-}
-
-/****************************************************************************/
-/* This function returns card that is paired in the hand					*/
-/****************************************************************************/
-char pair(card_t card[MAX_CARDS],char count)
-{
-	char c,d;
-
-for(c=0;c<count;c++)
-	for(d=c+1;d<count;d++)
-		if(card[c].value==card[d].value)	   /* Ace */
-			return(card[c].value);
-return(0);
-}
-
-
-/****************************************************************************/
-/* This function shuffles the deck. 										*/
-/****************************************************************************/
-void shuffle()
-{
-	char str[81];
-	uint i,j;
-	card_t shufdeck[52*MAX_DECKS];
-
-
-getcarddat();
-
-sprintf(str,"\1_\1w\1h\r\nShuffling %d Deck Shoe...",total_decks);
-bputs(str);
-strcat(str,"\r\n");     /* add crlf for other nodes */
-putallnodemsg(str);
-
-for(i=0;i<total_decks;i++)
-	memcpy(shufdeck+(i*52),newdeck,sizeof(newdeck));	  /* fresh decks */
-
-i=0;
-while(i<(uint)(total_decks*52)-1) {
-	j=my_random((total_decks*52)-1);
-	if(!shufdeck[j].value)	/* card already used */
-		continue;
-	card[i]=shufdeck[j];
-	shufdeck[j].value=0;	/* mark card as used */
-	i++; }
-
-cur_card=0;
-for(i=0;i<MAX_HANDS;i++)
-	pc[i]=0;
-hands=0;
-dc=0;
-putcarddat();
-bputs("\r\n");
-}
-
-/****************************************************************************/
-/* This function reads and displays a message waiting for this node, if 	*/
-/* there is one.															*/
-/****************************************************************************/
-void getnodemsg()
-{
-	char str[81], *buf;
-	int file;
-	ulong length;
-
-nodesync();
-sprintf(str,"message.%d",node_num);
-if(flength(str)<1L) 					/* v1.02 fix */
-	return;
-if((file=nopen(str,O_RDWR))==-1) {
-	bprintf("Couldn't open %s\r\n",str);
-	return; }
-length=filelength(file);
-if((buf=malloc(length+1L))==NULL) {
-	close(file);
-	bprintf("\7\r\ngetnodemsg: Error allocating %lu bytes of memory for %\r\n"
-		,length+1L,str);
-	return; }
-buf[read(file,buf,length)]=0;
-chsize(file,0);
-close(file);
-if(!symbols)
-	strip_symbols(buf);
-bputs(buf);
-free(buf);
-}
-
-/****************************************************************************/
-/* This function creates a message for a certain node.						*/
-/****************************************************************************/
-void putnodemsg(char *msg, uint nodenumber)
-{
-	char str[81];
-	int file;
-
-sprintf(str,"message.%d",nodenumber);
-if((file=nopen(str,O_WRONLY|O_CREAT|O_APPEND))==-1) {
-	bprintf("\r\n\7putnodemsg: error opening/creating %s\r\n",str);
-	return; }
-write(file,msg,strlen(msg));
-close(file);
-}
-
-/****************************************************************************/
-/* This function creates a message for all nodes in the game.				*/
-/****************************************************************************/
-void putallnodemsg(char *msg)
-{
-	int i;
-
-for(i=0;i<total_nodes;i++)
-	if(node[i] && i+1!=node_num)
-		putnodemsg(msg,i+1);
-}
-
-/****************************************************************************/
-/* This function waits until it is the current player.						*/
-/****************************************************************************/
-void waitturn()
-{
-	time_t start,now;
-
-start=now=time(NULL);
-getgamedat(1);
-status[node_num-1]=WAIT;
-putgamedat();
-while(curplayer!=node_num) {
-	chat();
-	mswait(100);
-	getgamedat(0);
-	if(curplayer && !node[curplayer-1] /*  || status[curplayer-1]==BET */ )
-		nextplayer();		/* current player is not playing? */
-
-	if(!node[node_num-1]) { /* current node not in game? */
-		getgamedat(1);
-		node[node_num-1]=user_number;	/* fix it */
-		putgamedat(); }
-
-	now=time(NULL);
-	if(now-start>300) { /* only wait upto 5 minutes */
-		bputs("\r\nwaitturn: timeout\r\n");
-		break; } }
-getgamedat(1);
-status[node_num-1]=PLAY;
-putgamedat();
-}
-
-/****************************************************************************/
-/* This is the function that is called to see if the user has hit a key,	*/
-/* and if so, read in a line of chars and send them to the other nodes. 	*/
-/****************************************************************************/
-void chat()
-{
-	char str1[150],str2[256],ch;
-	int i;
-
-aborted=0;
-if((ch=inkey(0))!=0 || wordwrap[0]) {
-	if(ch=='/') {
-		bputs("\1n\1y\1hCommand: \1n");
-		ch=getkeys("?LS|%\r",0);
-		switch(ch) {
-			case CR:
-				return;
-			#if DEBUG
-			case '|':
-				debug();
-				return;
-			#endif
-			case '%':
-				if(!com_port)	/* only if local */
-					exit(0);
-				break;
-			case '?':
-				mnemonics("\r\n~List Players");
-				mnemonics("\r\n~Send Private Message to Player");
-				bputs("\r\n");
-				return;
-			case 'L':
-				listplayers();
-				bprintf(ShoeStatus,cur_card,total_decks*52);
-				return;
-			case 'S':
-				listplayers();
-				bputs("\1n\r\n\1y\1hWhich node: \1n");
-				i=getnum(sys_nodes);
-				getgamedat(0);
-				if(i>0 && i!=node_num && node[i-1]) {
-					bputs("\r\n\1n\1y\1hMessage: ");
-					if(getstr(str1,50,K_LINE)) {
-						sprintf(str2,UserWhispers,user_name
-							,str1);
-						putnodemsg(str2,i); } }
-				else
-					bputs("\1n\r\n\1r\1hInvalid node.\1n\r\n");
-				return; } }
-	ungetkey(ch);
-	if(!getstr(str1,50,K_CHAT|K_WRAP))
-		return;
-	sprintf(str2,UserSays,user_name,str1);
-	putallnodemsg(str2); }
-getnodemsg();
-}
-
-/****************************************************************************/
-/* This function returns 1 if the current node is the highest (or last) 	*/
-/* node in the game, or 0 if there is another node with a higher number 	*/
-/* in the game. Used to determine if this node is to perform the dealer   */
-/* function 															  */
-/****************************************************************************/
-char lastplayer()
-{
-	int i;
-
-getgamedat(0);
-if(total_players==1 && node[node_num-1])	/* if only player, definetly */
-	return(1);								/* the last */
-
-for(i=node_num;i<total_nodes;i++)			  /* look for a higher number */
-	if(node[i])
-		break;
-if(i<total_nodes)							  /* if one found, return 0 */
-	return(0);
-return(1);									/* else return 1 */
-}
-
-/****************************************************************************/
-/* Returns the node number of the lower player in the game					*/
-/****************************************************************************/
-char firstplayer()
-{
-	int i;
-
-for(i=0;i<total_nodes;i++)
-	if(node[i])
-		break;
-if(i==total_nodes)
-	return(0);
-return(i+1);
-}
-
-/****************************************************************************/
-/* This function is only run on the highest node number in the game. It 	*/
-/* waits until all other nodes are waiting in their sync routines, and then */
-/* releases them by changing the status byte from SYNC_P to PLAY			*/
-/* it is assumed that getgamedat(1) is called immediately prior.			*/
-/****************************************************************************/
-void syncdealer()
-{
-	char *Dealing="\1n\1hDealing...\r\n\1n";
-	int i;
-	time_t start,now;
-
-status[node_num-1]=SYNC_D;
-putgamedat();
-start=now=time(NULL);
-// fdelay(1000);				 /* wait for stragglers to join game v1.02 */
-getgamedat(0);
-while(total_players) {
-	for(i=0;i<total_nodes;i++)
-		if(i!=node_num-1 && node[i] && status[i]!=SYNC_P)
-			break;
-	if(i==total_nodes)		  /* all player nodes are waiting */
-		break;
-	chat();
-	mswait(100);
-	getgamedat(0);
-	if(!node[node_num-1]) { /* current node not in game? */
-		getgamedat(1);
-		node[node_num-1]=user_number;	/* fix it */
-		putgamedat(); }
-	now=time(NULL);
-	if(now-start>300) { /* only wait upto 5 minutes */
-		bputs("\r\nsyncdealer: timeout\r\n");
-        break; } }
-
-getgamedat(1);
-misc|=INPLAY;
-curplayer=firstplayer();
-putgamedat();
-
-getnodemsg();
-bputs(Dealing);
-putallnodemsg(Dealing);
-
-getgamedat(1);
-for(i=0;i<total_nodes;i++)		  /* release player nodes */
-	if(node[i])
-		status[i]=PLAY;
-putgamedat();
-}
-
-
-/****************************************************************************/
-/* This function halts this node until the dealer releases it by changing	*/
-/* the status byte from SYNC_P to PLAY										*/
-/* it is assumed that getgamedat(1) is called immediately prior.			*/
-/****************************************************************************/
-void syncplayer()
-{
-	time_t start,now;
-
-status[node_num-1]=SYNC_P;
-putgamedat();
-start=now=time(NULL);
-while(node[node_num-1] && status[node_num-1]==SYNC_P) {
-	chat();
-	mswait(100);
-	getgamedat(0);
-	if(!node[node_num-1]) { /* current node not in game? */
-		getgamedat(1);
-		node[node_num-1]=user_number;	/* fix it */
-		putgamedat(); }
-	now=time(NULL);
-	if(now-start>300) { /* only wait upto 5 minutes */
-		bputs("\r\nsyncplayer: timeout\r\n");
-        break; } }
-}
-
-/****************************************************************************/
-/* Updates the MODUSER.DAT file that SBBS reads to ajust the user's credits */
-/* This function is called whenever the user's credits are adjust so that   */
-/* the file will be current in any event.									*/
-/****************************************************************************/
-void moduserdat()
-{
-	char str[128];
-	FILE *stream;
-
-sprintf(str,"%sMODUSER.DAT",node_dir);
-if((stream=fopen(str,"wt"))==NULL) {
-	bprintf("Error opening %s for write\r\n",str);
-	return; }
-fprintf(stream,"%ld",credits-user_cdt);
-fclose(stream);
-
-}
-
-/****************************************************************************/
-/* This function reads the entire shoe of cards and the dealer's hand from  */
-/* the card database file (CARD.DAB)										*/
-/****************************************************************************/
-void getcarddat()
-{
-	int file;
-
-if((file=nopen("card.dab",O_RDONLY))==-1) {
-	bputs("getcarddat: Error opening card.dab\r\n");
-	return; }
-read(file,&dc,1);
-read(file,dealer,sizeof(dealer));
-read(file,&total_decks,1);
-read(file,&cur_card,2);
-read(file,card,total_decks*52*sizeof(card_t));
-close(file);
-}
-
-/****************************************************************************/
-/* This function writes the entire shoe of cards and the dealer's hand to   */
-/* the card database file (CARD.DAB)										*/
-/****************************************************************************/
-void putcarddat()
-{
-	int file;
-
-if((file=nopen("card.dab",O_WRONLY|O_CREAT))==-1) {
-	bputs("putcarddat: Error opening card.dab\r\n");
-	return; }
-write(file,&dc,1);
-write(file,dealer,sizeof(dealer));
-write(file,&total_decks,1);
-write(file,&cur_card,2);
-write(file,card,total_decks*52*sizeof(card_t));
-close(file);
-}
-
-/****************************************************************************/
-/* This function creates random ways to say "hit"                           */
-/****************************************************************************/
-char *hit()
-{
-	static char str[81];
-
-strcpy(str,"\1n\1r\1h");
-switch(rand()%10) {
-	case 1:
-		strcat(str,"Hit it.");
-		break;
-	case 2:
-		strcat(str,"Hit me, Baby!");
-		break;
-	case 3:
-		strcat(str,"Give me an ace.");
-		break;
-	case 4:
-		strcat(str,"One more.");
-		break;
-	case 5:
-		strcat(str,"Just one more.");
-		break;
-	case 6:
-		strcat(str,"Give me a baby card.");
-		break;
-	case 7:
-		strcat(str,"Hit it, Dude.");
-		break;
-	case 8:
-		strcat(str,"Hit.");
-		break;
-	case 9:
-		strcat(str,"Um... Hit.");
-		break;
-	case 10:
-		strcat(str,"Thank you Sir, may I have another.");
-		break;
-	default:
-		strcat(str,"Face card, please.");
-		break; }
-strcat(str,"\1n\r\n");
-return(str);
-}
-
-/****************************************************************************/
-/* This function creates random ways to say "double"                        */
-/****************************************************************************/
-char *doubit()
-{
-	static char str[81];
-
-strcpy(str,"\1n\1b\1h");
-switch(rand()%10) {
-	case 1:
-		strcat(str,"Double.");
-		break;
-	case 2:
-		strcat(str,"Double Down, Man.");
-		break;
-	case 3:
-		strcat(str,"Double it, Dude.");
-		break;
-	case 4:
-		strcat(str,"One more card for double the dough.");
-		break;
-	case 5:
-		strcat(str,"Double me.");
-		break;
-	case 6:
-		strcat(str,"Oh yeah... Double!");
-		break;
-	case 7:
-		strcat(str,"I shouldn't do it, but... Double!");
-		break;
-	case 8:
-		strcat(str,"Double my bet and give me one more card.");
-		break;
-	case 9:
-		strcat(str,"Um... Double.");
-		break;
-	case 10:
-		strcat(str,"Thank you Sir, may I Double?");
-		break;
-	default:
-		strcat(str,"Double - face card, please.");
-		break; }
-strcat(str,"\1n\r\n");
-return(str);
-}
-
-/****************************************************************************/
-/* This function creates random ways to say "stand"                         */
-/****************************************************************************/
-char *stand()
-{
-	static char str[81];
-
-strcpy(str,"\1n\1c\1h");
-switch(rand()%10) {
-	case 1:
-		strcat(str,"Stand.");
-		break;
-	case 2:
-		strcat(str,"Stay.");
-		break;
-	case 3:
-		strcat(str,"No more.");
-		break;
-	case 4:
-		strcat(str,"Just right.");
-		break;
-	case 5:
-		strcat(str,"I should hit, but I'm not gonna.");
-		break;
-	case 6:
-		strcat(str,"Whoa!");
-		break;
-	case 7:
-		strcat(str,"Hold it.");
-		break;
-	case 8:
-		strcat(str,"No way, Jose!");
-		break;
-	case 9:
-		strcat(str,"Um... Stand.");
-		break;
-	case 10:
-		strcat(str,"Thanks, but no thanks.");
-		break;
-	default:
-		strcat(str,"No card, no bust.");
-		break; }
-strcat(str,"\1n\r\n");
-return(str);
-}
-
-/****************************************************************************/
-/* This function creates random ways to say "split"                         */
-/****************************************************************************/
-char *split()
-{
-	static char str[81];
-
-strcpy(str,"\1n\1y\1h");
-switch(rand()%10) {
-	case 1:
-		strcat(str,"Split.");
-		break;
-	case 2:
-		strcat(str,"Split 'em.");
-		break;
-	case 3:
-		strcat(str,"Split it.");
-		break;
-	case 4:
-		strcat(str,"Split, please.");
-		break;
-	case 5:
-		strcat(str,"I should hit, but I'm gonna split instead.");
-		break;
-	case 6:
-		strcat(str,"Whoa! Split them puppies...");
-		break;
-	case 7:
-		strcat(str,"Split 'em, Dude.");
-		break;
-	case 8:
-		strcat(str,"Double the cards, for double the money.");
-		break;
-	case 9:
-		strcat(str,"Um... Split.");
-		break;
-	case 10:
-		strcat(str,"Thank you Sir, I think I'll split 'em.");
-		break;
-	default:
-		strcat(str,"Banana Split.");
-		break; }
-strcat(str,"\1n\r\n");
-return(str);
-}
-
-/****************************************************************************/
-/* This function creates random ways to say "joined"                        */
-/****************************************************************************/
-char *joined()
-{
-	static char str[81];
-
-switch(rand()%10) {
-	case 1:
-		strcpy(str,"joined.");
-		break;
-	case 2:
-		strcpy(str,"sat down to play.");
-		break;
-	case 3:
-		strcpy(str,"plopped on the chair next to you.");
-		break;
-	case 4:
-		strcpy(str,"belched loudly to announce his entrance.");
-		break;
-	case 5:
-		strcpy(str,"dropped in.");
-		break;
-	case 6:
-		strcpy(str,"joined our game.");
-		break;
-	case 7:
-		strcpy(str,"fell on his face entering the casino!");
-		break;
-	case 8:
-		strcpy(str,"slams a roll of credits on the table.");
-		break;
-	case 9:
-		strcpy(str,"rolled in to join the game.");
-		break;
-	case 10:
-		strcpy(str,"smiles widely as he takes your wife's seat.");
-		break;
-	default:
-		strcpy(str,"spills a drink on your pants while sitting down.");
-		break; }
-return(str);
-}
-
-/****************************************************************************/
-/* This function creates random ways to say "left"                          */
-/****************************************************************************/
-char *left()
-{
-	static char str[81];
-
-switch(rand()%10) {
-	case 1:
-		strcpy(str,"left abruptly.");
-		break;
-	case 2:
-		strcpy(str,"sneaked away.");
-		break;
-	case 3:
-		strcpy(str,"took the credits and ran.");
-		break;
-	case 4:
-		strcpy(str,"fell out of the chair.");
-		break;
-	case 5:
-		strcpy(str,"left the game.");
-		break;
-	case 6:
-		strcpy(str,"slipped out the door.");
-		break;
-	case 7:
-		strcpy(str,"giggled as he left the table.");
-		break;
-	case 8:
-		strcpy(str,"left clenching empty pockets.");
-		break;
-	case 9:
-		strcpy(str,"went to the pawn shop to hawk a watch.");
-		break;
-	case 10:
-		strcpy(str,"bailed out the back door.");
-		break;
-	default:
-		strcpy(str,"made like a train and left.");
-		break; }
-return(str);
-}
-
-/****************************************************************************/
-/* This function creates the file "GAME.DAB" in the current directory.      */
-/****************************************************************************/
-void create_gamedab()
-{
-
-if((gamedab=sopen("game.dab"
-	,O_WRONLY|O_CREAT|O_BINARY,SH_DENYNO))==-1) {
-	bputs("Error creating game.dab\r\n");
-	pause();
-	exit(1); }
-misc=0;
-curplayer=0;
-memset(node,0,sizeof(node));
-memset(status,0,sizeof(status));
-write(gamedab,&misc,1);
-write(gamedab,&curplayer,1);
-write(gamedab,&total_nodes,1);
-write(gamedab,node,total_nodes*2);
-write(gamedab,status,total_nodes);
-close(gamedab);
-}
-
-/****************************************************************************/
-/* This function opens the file "GAME.DAB" in the current directory and     */
-/* leaves it open with deny none access. This file uses record locking		*/
-/* for shared access.														*/
-/****************************************************************************/
-void open_gamedab()
-{
-if((gamedab=sopen("game.dab",O_RDWR|O_BINARY,SH_DENYNO))==-1) {
-    bputs("Error opening game.dab\r\n");                /* open deny none */
-    pause();
-	exit(1); }
-}
-
-/****************************************************************************/
-/* Lists the players currently in the game and the status of the shoe.		*/
-/****************************************************************************/
-void listplayers()
-{
-	int i;
-
-getgamedat(0);
-bputs("\r\n");
-if(!total_players) {
-	bputs("\1_\1w\1hNo game in progress\r\n");
-	return; }
-for(i=0;i<total_nodes;i++)
-	if(node[i])
-		bprintf("\1-\1mNode %2d: \1h%s \1n\1m%s\r\n"
-			,i+1,username(node[i]),activity(status[i]));
-getcarddat();
-/***
-bprintf("\r\nCurrent player=Node %d user #%d\r\n",curplayer,node[curplayer-1]);
-***/
-}
-
-/****************************************************************************/
-/* This function replaces the card symbols in 'str' with letters to         */
-/* represent the different suits.											*/
-/****************************************************************************/
-void strip_symbols(char *str)
-{
-	int i,j;
-
-j=strlen(str);
-for(i=0;i<j;i++)
-	if(str[i]>=3 && str[i]<=6)
-		switch(str[i]) {
-			case 3:
-				str[i]='H';
-				break;
-			case 4:
-				str[i]='D';
-				break;
-			case 5:
-				str[i]='C';
-				break;
-			case 6:
-				str[i]='S';
-				break; }
-}
-
-#endif	/* end of function not needed for SBJCLEAN.C */
-
-/****************************************************************************/
-/* Reads information from GAME.DAB file. If 'lockit' is 1, the file is      */
-/* and putgamedat must be called to unlock it. If your updating the info	*/
-/* in GAME.DAB, you must first call getgamedat(1), then putgamedat().		*/
-/****************************************************************************/
-void getgamedat(char lockit)
-{
-    int i=0;
-
-/* retry 100 times taking at least 3 seconds */
-while(lock(gamedab,0L,filelength(gamedab))==-1 && i++<100)
-	mswait(30);  /* lock the whole thing */
-if(i>=100) {
-//	  printf("gamedab=%d %04X:%p %04X\r\n",gamedab,_psp,&gamedab,_DS);
-	printf("\7getgamedat: error locking game.dab\r\n"); }
-
-lseek(gamedab,0L,SEEK_SET);
-read(gamedab,&misc,1);
-read(gamedab,&curplayer,1);
-read(gamedab,&total_nodes,1);
-read(gamedab,node,total_nodes*2);	   /* user number playing for each node */
-read(gamedab,status,total_nodes);	   /* the status of the player */
-total_players=0;
-for(i=0;i<total_nodes;i++)
-    if(node[i])
-        total_players++;
-if(!lockit)
-	unlock(gamedab,0L,filelength(gamedab));
-}
-
-/****************************************************************************/
-/* Writes information to GAME.DAB file. getgamedat(1) MUST be called before  */
-/* this function is called.                                                 */
-/****************************************************************************/
-void putgamedat()
-{
-
-lseek(gamedab,0L,SEEK_SET);
-write(gamedab,&misc,1);
-write(gamedab,&curplayer,1);
-write(gamedab,&total_nodes,1);
-write(gamedab,node,total_nodes*2);
-write(gamedab,status,total_nodes);
-unlock(gamedab,0L,filelength(gamedab));
-}
-
-/***************************************************************/
-/* This function makes the next active node the current player */
-/***************************************************************/
-void nextplayer()
-{
-    int i;
-
-getgamedat(1);                      /* get current info and lock */
-
-if((!curplayer						/* if no current player */
-    || total_players==1)            /* or only one player in game */
-    && node[node_num-1]) {          /* and this node is in the game */
-	curplayer=node_num; 			/* make this node current player */
-    putgamedat();                   /* write data and unlock */
-    return; }                       /* and return */
-
-for(i=curplayer;i<total_nodes;i++)	/* search for the next highest node */
-    if(node[i])                     /* that is active */
-        break;
-if(i>=total_nodes) {				/* if no higher active nodes, */
-	for(i=0;i<curplayer-1;i++)		/* start at bottom and go up  */
-        if(node[i])
-            break;
-	if(i==curplayer-1)				/* if no active nodes found */
-		curplayer=0;				/* make current player 0 */
-    else
-		curplayer=i+1; }
-else
-	curplayer=i+1;					/* else active node current player */
-
-putgamedat();                       /* write info and unlock */
-}
-
-/* End of SBJ.C */
diff --git a/xtrn/sbj/sbj.cfg b/xtrn/sbj/sbj.cfg
deleted file mode 100644
index 9e5236e6ed..0000000000
--- a/xtrn/sbj/sbj.cfg
+++ /dev/null
@@ -1,4 +0,0 @@
-6					Number of decks
-10					Minimum bet (in kilobytes)
-1000					Maximum bet (in kilobytes)
-100					Default bet (in kilobytes)
diff --git a/xtrn/sbj/sbj.doc b/xtrn/sbj/sbj.doc
deleted file mode 100644
index 8066b29359739102e2da37ed88d4cfdb2047633b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2131
zcmd<&R8UX|uFOl$D9X=EEm3gFNlebpN=(jH&<J+&(o}HCPcF?(%_~VP$;{8=0;{eg
z5^!;aWTYyj<>%z&muKdsE2L%Sq!ue^Xes37mnh_=CZ`q`Cl*yIq~#YOY}K^l;^GW;
z^3rpSa8=;M;j)0D{Pd#4T(ClCA6G{|kZN3topVwX^K?rK6p(f4IdgJqDFo-27A2=D
zB<H7qoLQs*wHL`;XY8urmV%Y)IlH-o-0Ga4mzJ4cS_BR%1-Hx`xTz3jF8<CSWg!`v
z#o(}ji24SDHGAe2mlTyIgF?BOi!&l5$WPD3F$83NVs1fBszR`nQ?P<-MM-K=USbZ+
zFA6D%C5ce8B7$AKq25BoCWeM!7jG_3uu>0D2q-Dw14<C3VU9t;dZ3UXO0|otTd<x7
zr<MXi)xM72u5O+_uAEv5zKPkXpyUBg4A5v$NX$zCMF}FXxq>tDOLI~bl2R2i^OAE)
zQ&LkDGV>HlKmi)%82}Clu&&gKlA^@q60mehzCxlxN@h`Na!Gzsr9yFOa)v@;u@#rI
zRSYOhV?aS26YS*0#pRfnqELd8Vl(s7@{4jI@mUPFJ0mrxAgwe9WOXt$%0bCH*vU&F
zu~;E7Pa!`qCo?aVD-{-71(5V=#l_{9n48MU$;pW=!zpqFmn0UI=#~~JxWJst$*HG@
zaG`U4ZZ0TLd@}PurW7Y-Dd^{L!4o*Dba7HvGAQYDIr;^ADg>n#mSz^Erf_m{`sH)^
zmgbaXmKLWLadL7-rWSK~=9Q!tC8rjYD0u4oD}Z@Lr3EF$V9DT&qRhN(1t+IqsOJ2X
z%(O~{(Bjl01((E<M6eMG`9%tT`COsJsl^K6;htd%&iOg{MGDUODXGO^D?!N@q*?)-
zFG4B{Qc*$y6bqmP&%njS<(Z~XnO~|<o>`os0E)eo6oo{E;?(5)ycC7>#N1Sc{4_*?
zp-_^MSfWs#nUe!9RuYp-N)vN(DixA567$kiLGj52@~C>TLUK`RN@hthDB3`=oRn0o
zpy8LV5R_S*t*N7so0y#nio4W`#N-l%<otq4kToEMiAniosR~@Ms0OD79fhRQ5{Mp<
zl01;Bl(0rB!VV=Jg`(74kXa=esa#6>IZ6s?MftfPCn_i*$DNWwegUW)&;h4qgh!yl
z3QE3cF`%TtRg$lu<d?6c#|0^LQ5*}&7og%CR8nawWP%fEVsUb2rb0<-MF~W{JhLPN
z>=t-|%>{8ru@x5=B*nR;7AF^Fg53sA#HH!!sl}jN7M7S(n#x6FwLnN2mmw#oUukYq
zY7r;~Qc{z%!EqLxk)Nu-$!W%A#L4NKnU|ScnyZkMS^|pBY)(#2Ljx{jPEOy%3QP$D
z11=LzPM6fQ#L}D+R6Pb<TwFf+>EJ|JjPL*`34-D^8Jgih*;%2uJhLP@LqT2NM;#P|
zrNyZ!I-me6N`)l9q*R5Rd{`})T$Gv!3K?+ml*$Dv8xUm>L=aTg<tCOW`1-oIL`LfQ
z_`5^Wa&mrNNn&OmD9vZ)rRSt76lbRArKTw4<maU;aAoF|q^749L6jDyrsbq2mlP|M
zXXfQ)=A{>d%mld!lv@=v3i69HOESw+74pErsR_!YIr+t)Jj$h!mzti4Bw4Hp)|*<E
zT2!f!l2{3`02Bz&(n}#Du~;D~H8oEmwIVgSv?Mh}kBduROTpF81r$%gPF{MT3QkL(
F3jjt7tG56E

diff --git a/xtrn/sbj/sbj.dsp b/xtrn/sbj/sbj.dsp
deleted file mode 100644
index 567f753f39..0000000000
--- a/xtrn/sbj/sbj.dsp
+++ /dev/null
@@ -1,102 +0,0 @@
-# Microsoft Developer Studio Project File - Name="sbj" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=sbj - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "sbj.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "sbj.mak" CFG="sbj - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "sbj - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "sbj - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "sbj - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "win32"
-# PROP Intermediate_Dir "msvc.win32.release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "c:\sbbs\xtrn\sdk" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /map /machine:I386
-
-!ELSEIF  "$(CFG)" == "sbj - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "win32"
-# PROP Intermediate_Dir "msvc.win32.debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\sdk" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /map /debug /machine:I386 /pdbtype:sept
-
-!ENDIF 
-
-# Begin Target
-
-# Name "sbj - Win32 Release"
-# Name "sbj - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\Sbj.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\Sdk\Xsdk.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\Sdk\Xsdkvars.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\sdk\xsdkwrap.c
-# End Source File
-# End Target
-# End Project
diff --git a/xtrn/sbj/sbj.msg b/xtrn/sbj/sbj.msg
deleted file mode 100644
index 3c4d55db67..0000000000
--- a/xtrn/sbj/sbj.msg
+++ /dev/null
@@ -1,23 +0,0 @@
-                                  chSynchronet
-                                 r Blackjack! 
-w
-        As you might have guessed, this is a blackjack game. But not just any
-blackjack game. With Synchronet Blackjack, you play against the house for
-credits and your friends can play along side you simultaneously from the same
-card shoe. You can even carry on a conversation while a hand is in play!
-
-        Beware, you are gambling with your credits if you choose to play, but
-the odds are pretty good. House pays double on a natural blackjack or three
-sevens, 1� to 1 on regular blackjack, even money on other winning hands and 
-ties (pushes) break even. You can double down if you have enough dough and even
-split pairs!
-
-        If you choose to play, note that it is much more enjoyable with a
-friend at the table with you. While the dealer is fast and curteous, he doesn't
-make a very good conversationalist.
-
-	If you notice that you're not seeing the card symbols for 'clubs' you
-may have Compuserve Quick B transfers enabled or another answerback to Ctrl-E.
-This should be disabled, or you should toggle card symbols OFF.
-
-
diff --git a/xtrn/sbj/sbjclean.c b/xtrn/sbj/sbjclean.c
deleted file mode 100644
index 814f3edba8..0000000000
--- a/xtrn/sbj/sbjclean.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/* SBJCLEAN.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* Clean-up program for Synchronet Blackjack Online External Program */
-
-#define SBJCLEAN
-
-#include "sbj.c"
-
-
-int main(int argc, char **argv)
-{
-	char *p;
-	int i;
-
-node_dir[0]=0;
-for(i=1;i<argc;i++)
-	if(!stricmp(argv[i],"/L"))
-		logit=1;
-	else strcpy(node_dir,argv[i]);
-
-p=getenv("SBBSNODE");
-if(!node_dir[0] && p)
-	strcpy(node_dir,p);
-
-if(!node_dir[0]) {	  /* node directory not specified */
-	printf("usage: sbjclean <node directory>\r\n");
-	getch();
-	return(1); }
-
-if(node_dir[strlen(node_dir)-1]!='\\')  /* make sure node_dir ends in '\' */
-    strcat(node_dir,"\\");
-
-initdata();                                 /* read XTRN.DAT and more */
-
-if((gamedab=open("GAME.DAB",O_RDWR|O_DENYNONE|O_BINARY))==-1) {
-	printf("Error opening GAME.DAB\r\n");                /* open deny none */
-    return(1); }
-getgamedat(1);
-node[node_num-1]=0;
-status[node_num-1]=0;
-putgamedat();
-if(curplayer==node_num)
-	nextplayer();
-close(gamedab);
-return(0);
-}
diff --git a/xtrn/sbl/Makefile.gnu b/xtrn/sbl/Makefile.gnu
deleted file mode 100644
index ce3996ed49..0000000000
--- a/xtrn/sbl/Makefile.gnu
+++ /dev/null
@@ -1,50 +0,0 @@
-# Makefile.gnu
-
-#########################################################################
-# Makefile for Synchronet BBS List										#
-# For use with GNU make and GNU C Compiler								#
-# @format.tab-size 4, @format.use-tabs true								#
-#																		#
-# Linux: make -f Makefile.gnu											#
-# Win32: make -f Makefile.gnu os=win32									#
-# FreeBSD: make -f Makefile.gnu os=freebsd								#
-#########################################################################
-
-# $Id$
-
-# Macros
-CC		=	gcc
-LD		=	ld
-
-ifeq ($(os),win32)	# Windows
-
-EXEFILE	=	.exe
-LIBDIR	:=	/gcc/i386-mingw32/lib
-CFLAGS	:=	-mno-cygwin
-LFLAGS  :=	--target=i386-mingw32 -mno-cygwin
-DELETE	=	echo y | del 
-LIBS	=	$(LIBDIR)/libwsock32.a
-
-else	# Linux
-
-EXEFILE	=	
-LIBODIR	:=	gcc.linux.lib
-EXEODIR	:=	gcc.linux.exe
-LIBDIR	:=	/usr/lib
-CFLAGS	:=	
-LFLAGS  :=	
-DELETE	=	rm -f -v
-ifeq ($(os),freebsd)	# FreeBSD
-LIBS	=	-pthread
-else
-LIBS	=	$(LIBDIR)/libpthread.a
-endif
-
-endif
-
-CFLAGS	:=	$(CFLAGS) -I../sdk
-
-SBL: sbl$(EXEFILE)
-
-sbl$(EXEFILE) : sbl.c ../sdk/xsdk.c ../sdk/xsdkvars.c ../sdk/xsdkwrap.c
-	$(CC) $(CFLAGS) $^ -o $@ $(LIBS)
diff --git a/xtrn/sbl/makefile.bor b/xtrn/sbl/makefile.bor
deleted file mode 100644
index 71c853b6c6..0000000000
--- a/xtrn/sbl/makefile.bor
+++ /dev/null
@@ -1,40 +0,0 @@
-##################################################################
-# Makefile for SBL (Synchronet BBS List Online External Program) #
-# For use with Turbo C++ 			  		 #
-# Tabstop=8				 	  		 #
-##################################################################
-
-# Macros
-CC	= \bc31\bin\bcc
-LD	= \bc31\bin\tlink
-SDK	= ..\sdk
-INCLUDE = \bc31\include;$(SDK)
-LIB     = \bc31\lib
-MODEL	= l
-CFLAGS	= -N -d -C -m$(MODEL) -I$(INCLUDE)
-LFLAGS  = /n /c
-OBJS    = xsdk.obj xsdkvars.obj $(SDK)\mswait$(MODEL).obj
-HEADERS = $(SDK)\xsdk.h $(SDK)\xsdkdefs.h $(SDK)\xsdkvars.c sbldefs.h
-
-# Implicit C Compile Rule
-.c.obj:
-    	@echo Compiling $*.c to $*.obj ...
-	$(CC) $(CFLAGS) -c $*.c
-
-# Main EXE Link Rule
-sbl.exe: $(OBJS) sbl.obj
-    	@echo Linking $< ...
-	$(LD) $(LFLAGS) @&&!
-$(LIB)\c0$(MODEL) $(OBJS) sbl.obj
-!, $*, $*, $(LIB)\c$(MODEL).lib $(LIB)\math$(MODEL).lib $(LIB)\emu.lib
-
-# All .obj modules
-sbl.obj: $(HEADERS)
-
-xsdk.obj: $(SDK)\xsdk.c $(HEADERS)
-	@echo Compiling $(SDK)\$*.c to $*.obj ...
-	$(CC) $(CFLAGS) -c $(SDK)\$*.c
-
-xsdkvars.obj: $(SDK)\xsdkvars.c $(SDK)\xsdkdefs.h
-	@echo Compiling $(SDK)\$*.c to $*.obj ...
-	$(CC) $(CFLAGS) -c $(SDK)\$*.c
diff --git a/xtrn/sbl/sbbslist.c b/xtrn/sbl/sbbslist.c
deleted file mode 100644
index dc2fdd7644..0000000000
--- a/xtrn/sbl/sbbslist.c
+++ /dev/null
@@ -1,768 +0,0 @@
-/* SBBSLIST.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* Converts Synchronet BBS List (SBL.DAB) to text file */
-
-#include "xsdk.h"
-#include "telnet.h"
-#include "sbldefs.h"
-
-char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
-char *mon[]={"Jan","Feb","Mar","Apr","May","Jun"
-            ,"Jul","Aug","Sep","Oct","Nov","Dec"};
-char *nulstr="";
-char tmp[256];
-
-extern int daylight=0;
-extern long timezone=0L;
-
-#undef  ERROR_VALUE
-#define ERROR_VALUE			(GetLastError()-WSABASEERR)
-
-#define SORT	TRUE
-#define VERIFY	TRUE
-
-typedef struct {
-
-	time_t	date;
-	ulong	count;
-	ulong	attempts;
-	short	offset;
-
-    } sort_t;
-
-
-int sort_cmp(sort_t **str1, sort_t **str2)
-{
-	int diff;
-	
-	/* sort descending by date */
-	diff=((*str2)->date&0xffff0000)-((*str1)->date&0xffff0000);
-
-	if(diff)
-		return(diff);
-
-	/* sort descending by verfication counter */
-	diff=(((*str2)->count)-((*str1)->count));
-
-	if(diff)
-		return(diff);
-
-	/* sort ascending by verification attempts */
-	return(((*str1)->attempts)-((*str2)->attempts));
-}
-
-/****************************************************************************/
-/* Truncates white-space chars off end of 'str'								*/
-/****************************************************************************/
-void truncsp(uchar *str)
-{
-	uint c;
-
-	c=strlen(str);
-	while(c && (uchar)str[c-1]<=SP) c--;
-	str[c]=0;
-}
-
-/****************************************************************************/
-/* Generates a 24 character ASCII string that represents the time_t pointer */
-/* Used as a replacement for ctime()										*/
-/****************************************************************************/
-char *timestr(time_t *intime)
-{
-	static char str[256];
-    char mer[3],hour;
-    struct tm *gm;
-
-	gm=localtime(intime);
-
-	if(gm==NULL) {
-		sprintf(str,"Invalid time: %08lX",*intime);
-		return(str);
-	}
-
-	if(gm->tm_hour>=12) {
-		if(gm->tm_hour==12)
-			hour=12;
-		else
-			hour=gm->tm_hour-12;
-		strcpy(mer,"pm"); }
-	else {
-		if(gm->tm_hour==0)
-			hour=12;
-		else
-			hour=gm->tm_hour;
-		strcpy(mer,"am"); }
-	sprintf(str,"%s %s %02d %4d %02d:%02d %s"
-		,wday[gm->tm_wday],mon[gm->tm_mon],gm->tm_mday,1900+gm->tm_year
-		,hour,gm->tm_min,mer);
-	return(str);
-}
-
-/****************************************************************************/
-/* Converts unix time format (long - time_t) into a char str MM/DD/YY		*/
-/****************************************************************************/
-char *unixtodstr(time_t unix, char *str)
-{
-	struct tm* tm;
-
-	if(!unix)
-		strcpy(str,"00/00/00");
-	else {
-		tm=gmtime(&unix);
-		if(tm==NULL)
-			strcpy(str,"00/00/00");
-		else {
-			if(tm->tm_mon>11) {	  /* DOS leap year bug */
-				tm->tm_mon=0;
-				tm->tm_year++; }
-			if(tm->tm_mday>31)
-				tm->tm_mday=1;
-			sprintf(str,"%02u/%02u/%02u",tm->tm_mon+1,tm->tm_mday
-				,tm->tm_year%100); }
-		}
-	return(str);
-}
-
-
-void long_bbs_info(FILE *out, bbs_t bbs)
-{
-	int i;
-
-fprintf(out,"BBS Name: %s since %s\r\n"
-	,bbs.name,unixtodstr(bbs.birth,tmp));
-fprintf(out,"Operator: ");
-for(i=0;i<bbs.total_sysops && i<MAX_SYSOPS;i++) {
-	if(i) {
-		if(bbs.total_sysops>2)
-			fprintf(out,", ");
-		else
-			fputc(SP,out);
-		if(!(i%4))
-			fprintf(out,"\r\n          ");
-		if(i+1==bbs.total_sysops)
-			fprintf(out,"and "); }
-	fprintf(out,"%s",bbs.sysop[i]); }
-fprintf(out,"\r\n");
-fprintf(out,"Software: %-15.15s Nodes: %-5u "
-	"Users: %-5u Doors: %u\r\n"
-	,bbs.software,bbs.nodes,bbs.users,bbs.xtrns);
-fprintf(out,"Download: %lu files in %u directories of "
-	"%luMB total space\r\n"
-	,bbs.files,bbs.dirs,bbs.megs);
-fprintf(out,"Messages: %lu messages in %u sub-boards\r\n"
-	,bbs.msgs,bbs.subs);
-fprintf(out,"Networks: ");
-for(i=0;i<bbs.total_networks && i<MAX_NETS;i++) {
-	if(i) {
-		if(bbs.total_networks>2)
-			fprintf(out,", ");
-		else
-			fputc(SP,out);
-		if(!(i%3))
-			fprintf(out,"\r\n          ");
-		if(i+1==bbs.total_networks)
-			fprintf(out,"and "); }
-	fprintf(out,"%s [%s]",bbs.network[i],bbs.address[i]); }
-fprintf(out,"\r\n");
-fprintf(out,"Terminal: ");
-for(i=0;i<bbs.total_terminals && i<MAX_TERMS;i++) {
-	if(i) {
-		if(bbs.total_terminals>2)
-			fprintf(out,", ");
-		else
-			fputc(SP,out);
-		if(i+1==bbs.total_terminals)
-			fprintf(out,"and "); }
-	fprintf(out,"%s",bbs.terminal[i]); }
-fprintf(out,"\r\n\r\n");
-for(i=0;i<bbs.total_numbers && i<MAX_NUMBERS;i++) {
-	fprintf(out,"%-30.30s "
-	   ,i && !strcmp(bbs.number[i].modem.location,bbs.number[i-1].modem.location)
-			? nulstr : bbs.number[i].modem.location);
-	if(bbs.number[i].modem.min_rate==0xffff)
-		fprintf(out,"%s:%d\r\n"
-			,bbs.number[i].telnet.addr
-			,bbs.number[i].telnet.port);
-	else
-		fprintf(out,"%12.12s %5u %-15.15s "
-			"Minimum: %u\r\n"
-			,bbs.number[i].modem.number
-			,bbs.number[i].modem.max_rate,bbs.number[i].modem.desc
-			,bbs.number[i].modem.min_rate);
-}
-fprintf(out,"\r\n");
-for(i=0;i<5;i++) {
-	if(!bbs.desc[i][0])
-		break;
-	fprintf(out,"%15s%s\r\n",nulstr,bbs.desc[i]); }
-
-fprintf(out,"\r\n");
-fprintf(out,"Entry created on %s by %s\r\n"
-	,timestr(&bbs.created),bbs.user);
-if(bbs.updated && bbs.userupdated[0])
-	fprintf(out," Last updated on %s by %s\r\n"
-		,timestr(&bbs.updated),bbs.userupdated);
-if(bbs.verified && bbs.userverified[0])
-	fprintf(out,"Last verified on %s by %s\r\n"
-        ,timestr(&bbs.verified),bbs.userverified);
-}
-
-u_long resolve_ip(char *addr)
-{
-	HOSTENT*	host;
-
-	if(isdigit(addr[0]))
-		return(inet_addr(addr));
-	if ((host=gethostbyname(addr))==NULL) {
-//		printf("!ERROR resolving hostname: %s\n",addr);
-		return(0);
-	}
-	return(*((ulong*)host->h_addr_list[0]));
-}
-
-int telnet_negotiate(SOCKET sock, uchar* buf, int rd, int max_rd)
-{
-	int		i;
-	int		rsplen;
-	uchar	rsp[512];
-
-	return(rd);
-
-	do {
-		rsplen=0;
-		for(i=0; i<rd && rsplen<sizeof(rsp)-2;i++) {
-			if(buf[i]!=TELNET_IAC)
-				continue;
-			i++;
-			printf("telnet cmd: %02X %02X\n"
-				,buf[i],buf[i+1]);
-			if(buf[i]==TELNET_DO) {
-				rsp[rsplen++]=TELNET_IAC;
-				rsp[rsplen++]=TELNET_WILL;
-				rsp[rsplen++]=buf[i+1];
-			}
-			if(buf[i]==TELNET_DONT) {
-				rsp[rsplen++]=TELNET_IAC;
-				rsp[rsplen++]=TELNET_WONT;
-				rsp[rsplen++]=buf[i+1];
-			}
-			i++;
-		}
-		if(!rsplen)
-			break;
-		printf("telnet rsp: ");
-		for(i=0; i<rsplen; i++) 
-			printf("%02X  ",rsp[i]);	
-		printf("\n");
-		send(sock,rsp,rsplen,0);
-		Sleep(3000);
-		rd=recv(sock,buf,max_rd,0);
-
-	} while(rd>0);
-
-	return(rd);
-
-}
-
-int main(int argc, char **argv)
-{
-	char	str[128],name[128],*location,nodes[32],*sysop;
-	char	sysop_email[128];
-	char	buf[256];
-	char	verify_result[128];
-	char	version[128];
-	char*	p;
-	char*	sp;
-	char*	tp;
-	char*	for_os;
-	char*	fontstr="<FONT FACE=\"Arial\" SIZE=\"-1\">";
-	char	telnet_addr_buf[128];
-	char*	telnet_addr;
-	char	telnet_portstr[32];
-	ushort	telnet_port;
-	BOOL	verified;
-	ushort	index;
-	int		i,j,file,ff,rd;
-	long	l;
-	ulong	ip_addr;
-	ulong	total_systems;
-	ulong	total_attempts=0;
-	ulong	total_verified=0;
-	FILE	*in,*shrt,*lng,*html;
-	bbs_t	bbs;
-	sort_t **sort=NULL;
-	time_t	now;
-
-	/* socket stuff */
-	SOCKET	sock;
-	SOCKADDR_IN	addr;
-	int		status;             /* Status Code */
-	WSADATA WSAData;
-
-    if((status = WSAStartup(MAKEWORD(1,1), &WSAData))!=0) {
-	    printf("!WinSock startup ERROR %d\n", status);
-		return(1);
-	}
-
-	if(_putenv("TZ=UCT0"))
-		printf("!putenv() FAILED");
-	tzset();
-
-	now=time(NULL);
-
-	if((i=_sopen("SBL.DAB",O_RDWR|O_BINARY,SH_DENYNO,S_IREAD|S_IWRITE))==-1) {
-		printf("error opening SBL.DAB\n");
-		return(1); }
-
-	if((in=fdopen(i,"rb"))==NULL) {
-		printf("error opening SBL.DAB\n");
-		return(1); }
-
-	if((shrt=fopen("SBBS.LST","wb"))==NULL) {
-		printf("error opening/creating SBBS.LST\n");
-		return(1); }
-
-	if((lng=fopen("SBBS_DET.LST","wb"))==NULL) {
-		printf("error opening/creating SBBS_DET.LST\n");
-		return(1); }
-
-	if((html=fopen("sbbslist.html","w"))==NULL) {
-		printf("error opening/creating sbbslist.html\n");
-		return(1); }
-
-	fprintf(shrt,"Synchronet BBS List exported from Vertrauen on %s\r\n"
-				 "======================================================="
-				 "\r\n\r\n"
-		,unixtodstr(time(NULL),str));
-
-	fprintf(lng,"Detailed Synchronet BBS List exported from Vertrauen on %s\r\n"
-				"================================================================"
-				"\r\n\r\n"
-		,unixtodstr(time(NULL),str));
-
-	fprintf(html,"<HTML><HEAD><TITLE>Synchronet BBS List</TITLE></HEAD>\n");
-	fprintf(html,"<BODY><FONT FACE=\"Arial\" SIZE=\"-1\">\n");
-
-	printf("Sorting...");
-	fseek(in,0L,SEEK_SET);
-	i=j=0;
-	while(1) {
-		if(!fread(&bbs,sizeof(bbs_t),1,in))
-			break;
-		j++;
-		printf("%4u\b\b\b\b",j);
-		if(!bbs.name[0] || strnicmp(bbs.software,"SYNCHRONET",10)) {
-//			printf("%s\n",bbs.software);
-			continue;
-		}
-		i++;
-		if((sort=(sort_t **)REALLOC(sort
-			,sizeof(sort_t *)*i))==NULL) {
-			printf("\r\n\7Memory allocation error\r\n");
-			return(1); }
-		if((sort[i-1]=(sort_t *)LMALLOC(sizeof(sort_t)
-			))==NULL) {
-			printf("\r\n\7Memory allocation error\r\n");
-			return(1); }
-		sort[i-1]->date=bbs.verified;
-		sort[i-1]->count=bbs.verification_count;
-		sort[i-1]->attempts=bbs.verification_attempts;
-		sort[i-1]->offset=j-1; 
-	}
-	total_systems=i;
-
-#if SORT
-	qsort((void *)sort,total_systems,sizeof(sort[0])
-		,(int(*)(const void *, const void *))sort_cmp);
-#endif
-	printf(" Done.\n");
-		
-	printf("Creating index...");
-	sprintf(str,"SBBSSORT.NDX");
-	if((file=open(str,O_RDWR|O_CREAT|O_TRUNC|O_BINARY,S_IWRITE|S_IREAD))==-1) {
-		printf("\n\7Error creating %s\n",str);
-		return(1); }
-	for(j=0;j<(int)total_systems;j++)
-		write(file,&sort[j]->offset,2);
-	lseek(file,0L,SEEK_SET);
-	printf(" Done.\n");
-
-
-	printf("Creating lists...\n");
-
-	fprintf(html,"<CENTER>");
-	fprintf(html,"<H1><I><A HREF=http://www.synchro.net>Synchronet"
-		"</A> BBS List</H1></I>\n");
-	
-	fprintf(html,"(%d systems) exported from "
-		"<B><A HREF=http://vert.synchro.net>Vertrauen</A></B> on %s\n"
-		,total_systems ,timestr(&now));
-
-	fprintf(html,"<P></CENTER>\n");
-
-	fprintf(html,"<TABLE WIDTH=\"100%%\">\n");
-	fprintf(html,"<COLGROUP ALIGN=LEFT><COLGROUP ALIGN=LEFT>"
-		"<COLGROUP ALIGN=CENTER><COLGROUP ALIGN=CENTER>"
-		"<COLGROUP ALIGN=RIGHT><COLGROUP ALIGN=CENTER>\n");
-	fprintf(html,"<TR BGCOLOR=\"#000000\">\n");
-	fprintf(html,"<TH><FONT FACE=\"Arial\" SIZE=\"-1\" COLOR=\"#FFFFFF\">BBS Name\n");
-	fprintf(html,"<TH><FONT FACE=\"Arial\" SIZE=\"-1\" COLOR=\"#FFFFFF\">Sysop\n");
-	fprintf(html,"<TH><FONT FACE=\"Arial\" SIZE=\"-1\" COLOR=\"#FFFFFF\">Location\n");
-	fprintf(html,"<TH><FONT FACE=\"Arial\" SIZE=\"-1\" COLOR=\"#FFFFFF\">Nodes\n");
-	fprintf(html,"<TH><FONT FACE=\"Arial\" SIZE=\"-1\" COLOR=\"#FFFFFF\">Modem/Telnet Address\n");
-	fprintf(html,"<TH><FONT FACE=\"Arial\" SIZE=\"-1\" COLOR=\"#FFFFFF\">Verification Results\n");
-	ff=0;
-	while(1) {
-		if(read(file,&index,2)!=2)
-			break;
-		fseek(in,(long)index*sizeof(bbs_t),SEEK_SET);
-		if(!fread(&bbs,sizeof(bbs_t),1,in))
-			break;
-		long_bbs_info(lng,bbs);
-		if(ff)
-			fprintf(lng,"\x0c\r\n");
-		else
-			fprintf(lng,"\r\n---------------------------------------------"
-				"----------------------------------\r\n\r\n");
-		ff=!ff;
-		verified=FALSE;
-		total_attempts++;
-		for(i=0;i<bbs.total_numbers && i<MAX_NUMBERS;i++) {
-			if(!i) {
-				if(bbs.sysop_email[0]) {
-					sprintf(sysop_email,"<A HREF=mailto:%s>%s</A>",bbs.sysop_email,bbs.sysop[0]);
-					sysop=sysop_email;
-				} else
-					sysop=bbs.sysop[0];
-				sprintf(nodes,"%u",bbs.nodes);
-			} else {
-				sysop="";
-				nodes[0]=0;
-			}
-			if(i && !stricmp(bbs.number[i].modem.number,bbs.number[i-1].modem.number))
-				continue;	// duplicate
-			if(i && !stricmp(bbs.number[i].modem.location,bbs.number[i-1].modem.location))
-				location="";
-			else
-				location=bbs.number[i].modem.location;
-			fprintf(shrt,"%-25.25s %-25.25s %s\r\n"
-				,i ? "" : bbs.name, location
-				,bbs.number[i].modem.number);
-			if(!i) {
-				fprintf(html,"<A NAME=\"%s.index\">",bbs.name);
-				fprintf(html,"<TR BGCOLOR=\"#EEEEEE\">");
-			} else
-				fprintf(html,"<TR>");
-				sprintf(name,"<A HREF=\"#%s\">%s</A>",bbs.name,bbs.name);
-
-			if(bbs.number[i].modem.min_rate==0xffff /* && bbs.name[0]=='E' */) {
-
-				telnet_port=bbs.number[i].telnet.port;
-				if(telnet_port==0)
-					telnet_port=23;
-				strcpy(telnet_addr_buf,bbs.number[i].telnet.addr);
-				telnet_addr=telnet_addr_buf;
-
-				if(!strnicmp(telnet_addr,"TELNET:",7))
-					telnet_addr+=7;
-				if(!strnicmp(telnet_addr,"//",2))
-					telnet_addr+=2;
-				p=strchr(telnet_addr,':');
-				if(p!=NULL) {
-					*p=0;
-					telnet_port=atoi(p+1);
-				}
-
-#if !VERIFY	/* set to 1 for no-verification */
-				verified=TRUE;
-				strcpy(verify_result,"<B>v3.00x for Win32</B>");
-#else
-				printf("Verifying %d/%d %s:%d "
-					,total_attempts,total_systems,telnet_addr,telnet_port);
-
-				ip_addr=resolve_ip(telnet_addr);
-				if(!ip_addr) 
-					strcpy(verify_result,"bad hostname");
-				else {
-
-					if((sock = socket(AF_INET,SOCK_STREAM,IPPROTO_IP)) == INVALID_SOCKET) {
-						printf("\n\7Error %d opening socket",ERROR_VALUE);
-						return(1);
-					}
-
-					memset(&addr,0,sizeof(addr));
-					addr.sin_family = AF_INET;
-
-					if(bind(sock, (struct sockaddr *) &addr, sizeof (addr))!=0) {
-						closesocket(sock);
-						printf("!ERROR %d binding to socket %d",ERROR_VALUE, sock);
-						return(1);
-					}
-
-					memset(&addr,0,sizeof(addr));
-					addr.sin_addr.S_un.S_addr = ip_addr;
-					addr.sin_family = AF_INET;
-					addr.sin_port   = htons(telnet_port);
-
-					if(connect(sock, (struct sockaddr *)&addr, sizeof(addr))!=0) 
-						sprintf(verify_result,"no connect (%ld)"
-							,ERROR_VALUE);
-					else {
-						l=1;
-						ioctlsocket(sock, FIONBIO, &l);
-						Sleep(3000);
-
-						buf[0]=0;
-						rd=recv(sock,buf,sizeof(buf)-1,0);
-						if((rd=telnet_negotiate(sock,buf,rd,sizeof(buf)-1))<1)
-							sprintf(verify_result,"no data (%ld)"
-								,rd==SOCKET_ERROR ? ERROR_VALUE : rd);
-						else {
-							
-							buf[rd]=0;
-							sp=buf+(rd-1);
-							while(*sp && sp!=buf) sp--;	// Skip garbage (with null)
-							if(*sp==0)
-								sp++;
-							p=strstr(sp,"Synchronet");
-							if(p!=NULL) {
-								verified=TRUE;
-								for_os=strstr(sp," for ");
-								if(for_os==NULL) 
-									for_os="";
-								p=strstr(sp,"Version ");
-								if(p==NULL)
-									version[0]=0;
-								else {
-									p+=8;
-									tp=strchr(p,'\r');
-									if(tp!=NULL) *tp=0;
-									truncsp(p);
-									for_os[11]=0;
-									truncsp(for_os);
-									sprintf(version,"v%s%s",p,for_os);
-								}
-								sprintf(verify_result,"<B>%s</B>"
-									,version[0] ? version : "Verified");
-							} else {
-								printf("rd=%d buf='%s' sp='%s'\n",rd,buf,sp);
-								sprintf(verify_result,"non-Synchronet");
-							}
-						}
-					}
-
-					closesocket(sock);
-				}
-
-				printf("%s\n",verify_result);
-				bbs.verification_attempts++;
-#endif
-
-				if(telnet_port==23)
-					telnet_portstr[0]=0;
-				else
-					sprintf(telnet_portstr,":%d",telnet_port);
-
-				fprintf(html,"<TD><B>%s%s</B><TD>%s%s<TD>%s%s<TD>%s%s<TD%s>"
-					"<A HREF=telnet://%s%s>%s%s%s%s%s</A><TD%s>%s%s\n"
-					,fontstr,i ? "":name
-					,fontstr,sysop
-					,fontstr,location
-					,fontstr,nodes
-					,i ? " BGCOLOR=\"#EEEEEE\"":""
-					,telnet_addr, telnet_portstr
-						,fontstr
-						,verified ? "<B>":"", telnet_addr, telnet_portstr
-						, verified ? "</B>":""
-					,i ? " BGCOLOR=\"#EEEEEE\"":""
-					,fontstr,verify_result);
-			} else
-				fprintf(html,"<TD><B>%s%s</B><TD>%s%s<TD>%s%s<TD>%s%s<TD%s>%s%s"
-					"<TD%s>%s%s\n"
-					,fontstr,i ? "":name
-					,fontstr,sysop
-					,fontstr,location
-					,fontstr,nodes
-					,i ? " BGCOLOR=\"#EEEEEE\"":""
-					,fontstr,bbs.number[i].modem.number
-					,i ? " BGCOLOR=\"#EEEEEE\"":""
-					,fontstr,"N/A");
-		} /* for(numbers) */
-#if VERIFY
-		if(verified) {
-			total_verified++;
-			bbs.verified=time(NULL);
-			bbs.verification_count++;
-			strcpy(bbs.userverified,"SBBS List Verifier");
-		}
-		fseek(in,(long)index*sizeof(bbs_t),SEEK_SET);
-		fwrite(&bbs,sizeof(bbs_t),1,in);
-#endif
-	}
-	fprintf(html,"</TABLE>\n");
-
-	now=time(NULL);
-	fprintf(html,"<CENTER>\n");
-	fprintf(html,"%d systems verified from "
-		"<B><A HREF=http://vert.synchro.net>Vertrauen</A></B> on %s\n"
-		,total_verified ,timestr(&now));
-	fprintf(html,"<H1><I>Detailed Synchronet BBS List</I></H1>\n");
-	fprintf(html,"</CENTER>\n");
-
-	/* Generate Detailed List */
-	lseek(file,0L,SEEK_SET);
-	while(1) {
-		if(read(file,&index,2)!=2)
-			break;
-		fseek(in,(long)index*sizeof(bbs_t),SEEK_SET);
-		if(!fread(&bbs,sizeof(bbs_t),1,in))
-			break;
-
-		fprintf(html,"<P><A NAME=\"%s\">\n",bbs.name);
-
-		fprintf(html,"<H2><A HREF=\"#%s.index\">%s</A></H2>",bbs.name,bbs.name);
-		fprintf(html,"<FONT FACE=\"Arial\" SIZE=\"-1\">\n");
-
-		fprintf(html,"Online since: %s<BR>\n",unixtodstr(bbs.birth,tmp));
-
-		if(bbs.sysop_email[0]) {
-			sprintf(sysop_email,"<A HREF=mailto:%s>%s</A>",bbs.sysop_email,bbs.sysop[0]);
-			sysop=sysop_email;
-		} else
-			sysop=bbs.sysop[0];
-
-		fprintf(html,"Operator: %s", sysop);
-
-		for(i=1;i<bbs.total_sysops && i<MAX_SYSOPS;i++) {
-			if(bbs.total_sysops>2)
-				fprintf(html,", ");
-			else
-				fputc(SP,html);
-			if(i+1==bbs.total_sysops)
-				fprintf(html,"and "); 
-			fprintf(html,"%s",bbs.sysop[i]); 
-		}
-		fprintf(html,"<BR>\n");
-
-		if(bbs.web_url[0]) 
-			fprintf(html,"Web-site: <A HREF=http://%s>%s</A><BR>\n",bbs.web_url,bbs.web_url);
-
-		fprintf(html,"Nodes: %u, "
-			"Users: %u, Doors: %u<BR>\n"
-			,bbs.nodes,bbs.users,bbs.xtrns);
-		fprintf(html,"Download: %lu files in %u directories of "
-			"%luMB total space<BR>\n"
-			,bbs.files,bbs.dirs,bbs.megs);
-		fprintf(html,"Messages: %lu messages in %u sub-boards<BR>\n"
-			,bbs.msgs,bbs.subs);
-
-		if(bbs.total_networks) {
-			fprintf(html,"Networks: ");
-			for(i=0;i<bbs.total_networks && i<MAX_NETS;i++) {
-				if(i) {
-					if(bbs.total_networks>2)
-						fprintf(html,", ");
-					else
-						fputc(SP,html);
-					if(!(i%2))
-						fprintf(html,"<BR>");
-					if(i+1==bbs.total_networks)
-						fprintf(html,"and "); 
-				}
-				fprintf(html,"%s [%s]",bbs.network[i],bbs.address[i]); }
-			fprintf(html,"<BR>\n");
-		}
-
-		if(bbs.total_terminals) {
-			fprintf(html,"Terminal: ");
-			for(i=0;i<bbs.total_terminals && i<MAX_TERMS;i++) {
-				if(i) {
-					if(bbs.total_terminals>2)
-						fprintf(html,", ");
-					else
-						fputc(SP,html);
-					if(i+1==bbs.total_terminals)
-						fprintf(html,"and "); }
-				fprintf(html,"%s",bbs.terminal[i]); }
-			fprintf(html,"<BR>\n");
-		}
-
-		fprintf(html,"<BR>\n");
-		for(i=0;i<bbs.total_numbers && i<MAX_NUMBERS;i++) {
-			if(bbs.number[i].modem.min_rate==0xffff) {
-
-				telnet_port=bbs.number[i].telnet.port;
-				if(telnet_port==0)
-					telnet_port=23;
-				strcpy(telnet_addr_buf,bbs.number[i].telnet.addr);
-				telnet_addr=telnet_addr_buf;
-
-				if(!strnicmp(telnet_addr,"TELNET:",7))
-					telnet_addr+=7;
-				if(!strnicmp(telnet_addr,"//",2))
-					telnet_addr+=2;
-				p=strchr(telnet_addr,':');
-				if(p!=NULL) {
-					*p=0;
-					telnet_port=atoi(p+1);
-				}
-
-				if(telnet_port==23)
-					telnet_portstr[0]=0;
-				else
-					sprintf(telnet_portstr,":%d",telnet_port);
-
-				fprintf(html,"<A HREF=telnet://%s%s>telnet://%s%s</A>"
-					,telnet_addr
-					,telnet_portstr
-					,telnet_addr
-					,telnet_portstr);
-			} else
-				fprintf(html,"%s %u %s "
-					"Minimum: %u"
-					,bbs.number[i].modem.number
-					,bbs.number[i].modem.max_rate,bbs.number[i].modem.desc
-					,bbs.number[i].modem.min_rate);
-
-			fprintf(html," %s<BR>\n"
-			   ,i && !strcmp(bbs.number[i].modem.location,bbs.number[i-1].modem.location)
-					? nulstr : bbs.number[i].modem.location);
-		}
-		fprintf(html,"<BR>\n");
-
-		fprintf(html,"<BLOCKQUOTE>\n");
-		for(i=0;i<5;i++) {
-			if(!bbs.desc[i][0])
-				break;
-			fprintf(html,"%s<BR>\n",bbs.desc[i]); 
-		}
-		fprintf(html,"</BLOCKQUOTE>\n");
-
-		fprintf(html,"<PRE>\n");
-		fprintf(html,"Entry created on %s by %s\n"
-			,timestr(&bbs.created),bbs.user);
-		if(bbs.updated && bbs.userupdated[0])
-			fprintf(html," Last updated on %s by %s\n"
-				,timestr(&bbs.updated),bbs.userupdated);
-		if(bbs.verified && bbs.userverified[0])
-			fprintf(html,"Last verified on %s by %s\n"
-				,timestr(&bbs.verified),bbs.userverified);
-
-		fprintf(html,"</PRE></P>\n");
-	}
-	fprintf(html,"<CENTER><H1>End</H1></CENTER>\n");
-
-	fprintf(html,"<P>If you are a sysop of a <B>Synchronet BBS</B> and you would "
-		"like to add your system to this list, please do one of the following:\n");
-	fprintf(html,"<UL>\n");
-	fprintf(html,"<LI>Install <I>Synchronet BBS List <B>v2.00+</B></I> on your BBS and "
-		"link it into the <B>SYNCDATA</B> message conference (on <B>DOVE-Net</B> or <B>FidoNet</B>)\n");
-	fprintf(html,"<LI><B>OR</B> log on to <A HREF=telnet://vert.synchro.net>Vertrauen</A> and "
-		"manually add your system into the online BBS List database.\n");
-	fprintf(html,"</UL>\n");
-	fprintf(html,"</BODY></HTML>\n");
-	printf(" Done.\n");
-	return(0);
-}
diff --git a/xtrn/sbl/sbl.bpf b/xtrn/sbl/sbl.bpf
deleted file mode 100644
index 4d4d9faa08..0000000000
--- a/xtrn/sbl/sbl.bpf
+++ /dev/null
@@ -1,9 +0,0 @@
-USEUNIT("Sbl.c");
-USEUNIT("..\SDK\Xsdkvars.c");
-USEUNIT("..\SDK\Xsdk.c");
-USELIB("D:\Borland\CBuilder5\Lib\ws2_32.lib");
-USEUNIT("..\sdk\xsdkwrap.c");
-//---------------------------------------------------------------------------
-This file is used by the project manager only and should be treated like the project file
-
-
main
\ No newline at end of file
diff --git a/xtrn/sbl/sbl.bpr b/xtrn/sbl/sbl.bpr
deleted file mode 100644
index 00d8b4fdb9..0000000000
--- a/xtrn/sbl/sbl.bpr
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version='1.0' encoding='utf-8' ?>
-<!-- C++Builder XML Project -->
-<PROJECT>
-  <MACROS>
-    <VERSION value="BCB.05.03"/>
-    <PROJECT value="sbl.exe"/>
-    <OBJFILES value="Sbl.obj ..\SDK\Xsdkvars.obj ..\SDK\Xsdk.obj ..\sdk\xsdkwrap.obj"/>
-    <RESFILES value=""/>
-    <IDLFILES value=""/>
-    <IDLGENFILES value=""/>
-    <DEFFILE value=""/>
-    <RESDEPEN value="$(RESFILES)"/>
-    <LIBFILES value="D:\Borland\CBuilder5\Lib\ws2_32.lib"/>
-    <LIBRARIES value=""/>
-    <SPARELIBS value=""/>
-    <PACKAGES value="VCL50.bpi VCLX50.bpi bcbsmp50.bpi VCLDB50.bpi VCLADO50.bpi ibsmp50.bpi 
-      VCLBDE50.bpi VCLDBX50.bpi QRPT50.bpi TEEUI50.bpi TEEDB50.bpi TEE50.bpi 
-      DSS50.bpi TEEQR50.bpi VCLIB50.bpi VCLMID50.bpi VCLIE50.bpi INETDB50.bpi 
-      INET50.bpi NMFAST50.bpi WEBMID50.bpi bcbie50.bpi dclocx50.bpi"/>
-    <PATHCPP value=".;..\SDK"/>
-    <PATHPAS value=".;"/>
-    <PATHRC value=".;"/>
-    <PATHASM value=".;"/>
-    <DEBUGLIBPATH value="$(BCB)\lib\debug"/>
-    <RELEASELIBPATH value="$(BCB)\lib\release"/>
-    <LINKER value="tlink32"/>
-    <USERDEFINES value="_DEBUG"/>
-    <SYSDEFINES value="NO_STRICT;_NO_VCL"/>
-    <MAINSOURCE value="sbl.bpf"/>
-    <INCLUDEPATH value="$(BCB)\include;$(BCB)\include\vcl;..\sdk"/>
-    <LIBPATH value="..\SDK;$(BCB)\lib\obj;$(BCB)\lib"/>
-    <WARNINGS value="-w-par"/>
-  </MACROS>
-  <OPTIONS>
-    <IDLCFLAGS value="-I$(BCB)\include -I$(BCB)\include\vcl -I..\sdk -src_suffix cpp -D_DEBUG -boa"/>
-    <CFLAG1 value="-Od -H=$(BCB)\lib\vcl50.csm -Hc -Vx -Ve -X- -r- -a8 -b- -k -y -v -vi- -tWC 
-      -tWM -c"/>
-    <PFLAGS value="-$YD -$W -$O- -v -JPHNE -M"/>
-    <RFLAGS value=""/>
-    <AFLAGS value="/mx /w2 /zd"/>
-    <LFLAGS value="-D&quot;&quot; -ap -Tpe -x -Gn -v"/>
-  </OPTIONS>
-  <LINKER>
-    <ALLOBJ value="c0x32.obj $(OBJFILES)"/>
-    <ALLRES value="$(RESFILES)"/>
-    <ALLLIB value="$(LIBFILES) $(LIBRARIES) import32.lib cw32mt.lib"/>
-  </LINKER>
-  <IDEOPTIONS>
-[Version Info]
-IncludeVerInfo=0
-AutoIncBuild=0
-MajorVer=1
-MinorVer=0
-Release=0
-Build=0
-Debug=0
-PreRelease=0
-Special=0
-Private=0
-DLL=0
-Locale=1033
-CodePage=1252
-
-[Version Info Keys]
-CompanyName=
-FileDescription=
-FileVersion=1.0.0.0
-InternalName=
-LegalCopyright=
-LegalTrademarks=
-OriginalFilename=
-ProductName=
-ProductVersion=1.0.0.0
-Comments=
-
-[HistoryLists\hlIncludePath]
-Count=3
-Item0=$(BCB)\include;$(BCB)\include\vcl;..\sdk
-Item1=$(BCB)\include;$(BCB)\include\vcl;c:\sbbs\xtrn\sdk
-Item2=$(BCB)\include;$(BCB)\include\vcl
-
-[HistoryLists\hlLibraryPath]
-Count=2
-Item0=..\SDK;$(BCB)\lib\obj;$(BCB)\lib
-Item1=$(BCB)\lib\obj;$(BCB)\lib
-
-[HistoryLists\hlDebugSourcePath]
-Count=1
-Item0=$(BCB)\source\vcl
-
-[HistoryLists\hlConditionals]
-Count=1
-Item0=_DEBUG
-
-[Debugging]
-DebugSourceDirs=$(BCB)\source\vcl
-
-[Parameters]
-RunParams=
-HostApplication=
-RemoteHost=
-RemotePath=
-RemoteDebug=0
-
-[Compiler]
-ShowInfoMsgs=0
-LinkDebugVcl=0
-LinkCGLIB=0
-
-[CORBA]
-AddServerUnit=1
-AddClientUnit=1
-PrecompiledHeaders=1
-
-[Language]
-ActiveLang=
-ProjectLang=
-RootDir=
-  </IDEOPTIONS>
-</PROJECT>
\ No newline at end of file
diff --git a/xtrn/sbl/sbl.c b/xtrn/sbl/sbl.c
deleted file mode 100644
index efa3b2f24c..0000000000
--- a/xtrn/sbl/sbl.c
+++ /dev/null
@@ -1,1525 +0,0 @@
-/* sbl.c */
-
-/* Synchronet BBS List Door */
-
-/* $Id$ */
-
-/****************************************************************************
- * @format.tab-size 4		(Plain Text/Source Code File Header)			*
- * @format.use-tabs true	(see http://www.synchro.net/ptsc_hdr.html)		*
- *																			*
- * Copyright 2000 Rob Swindell - http://www.synchro.net/copyright.html		*
- *																			*
- * This program is free software; you can redistribute it and/or			*
- * modify it under the terms of the GNU General Public License				*
- * as published by the Free Software Foundation; either version 2			*
- * of the License, or (at your option) any later version.					*
- * See the GNU General Public License for more details: gpl.txt or			*
- * http://www.fsf.org/copyleft/gpl.html										*
- *																			*
- * Anonymous FTP access to the most recent released source is available at	*
- * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net	*
- *																			*
- * Anonymous CVS access to the development source and modification history	*
- * is available at cvs.synchro.net:/cvsroot/sbbs, example:					*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs login			*
- *     (just hit return, no password is necessary)							*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs checkout src		*
- *																			*
- * For Synchronet coding style and modification guidelines, see				*
- * http://www.synchro.net/source.html										*
- *																			*
- * You are encouraged to submit any modifications (preferably in Unix diff	*
- * format) via e-mail to mods@synchro.net									*
- *																			*
- * Note: If this box doesn't appear square, then you need to fix your tabs.	*
- ****************************************************************************/
-
-/***********
- * History *
- ***********
-
-******************
-* RELEASE: v1.00 *
-******************
-
-07/03/93 03:16am
-Fixed bug with "Auto-deleting" already deleted entries. This would cause a
-long list of "Auto-deletion" messages once a day.
-
-07/03/93 03:30am
-The name of the user who last updated the entry is now stored and displayed.
-
-07/03/93 03:45am
-Adding/Updating entries is now much easier and user friendly.
-
-07/03/93 04:00am
-Added support for user "verification" of BBS entries.
-
-07/03/93 04:10am
-Users may now update or remove entries using partial system names.
-
-07/03/93 04:30am
-Sysops may now un-delete purged entries with the '*' key.
-
-******************
-* RELEASE: v1.10 *
-******************
-
-10/18/93 06:04pm
-Fixed bug that would cause entries to be purged almost immediately.
-
-10/18/93 07:01pm
-(F)ind text now searches user names who last updated and verified.
-
-10/19/93 01:34am
-Added option for users to change the format of BBS listings.
-
-******************
-* RELEASE: v1.20 *
-******************
-
-10/20/93 04:44pm
-Fixed cosmetic problem with opening menu (for users, not sysop).
-
-******************
-* RELEASE: v1.21 *
-******************
-
-11/29/93 09:40pm
-More cosmetic changes.	Added "Saving..." message.
-
-******************
-* RELEASE: v1.22 *
-******************
-
-02/02/94
-Added warning for pending auto-deletion of BBS entries.
-
-02/02/94
-Added option for turning screen pause off/on.
-
-02/03/94
-Added option in SBL.CFG for sysop/co-sysop notification of changes made to
-BBS list by users.
-
-02/03/94
-Converted all file operations from handles to streams for buffered i/o (speed).
-
-02/09/94
-Added options for generating a sort index and displaying sorted list based on
-various criteria.
-
-02/09/94
-Added nodesync() calls to display any messages waiting for this user/node.
-
-02/10/94
-Added search for duplicate names when adding new BBS entries.
-
-02/10/94
-Notification notice of actual auto-deletion sent to author of BBS entry upon
-auto-deletion.
-
-******************
-* RELEASE: v1.30 *
-******************
-
-03/14/94
-Added /M switch to force daily maintenance.
-
-03/22/94
-Fixed occasional double pause after listings.
-
-03/22/94
-Added total entries found to find text listings.
-
-03/22/94
-If a user verifies an entry, the user who created the entry is notified.
-
-03/29/94
-Sysop can define/change the "owner" of an entry when adding or updating.
-
-04/18/94
-Fixed bug in the sort-by-string functions that caused lock-ups when sorting
-more than 312 entries.
-
-04/18/94
-Lowered memory requirements for all sort functions.
-
-******************
-* RELEASE: v1.31 *
-******************
-
-08/23/94
-BBS entries now know whether they were created by a user or by SMB2SBL (via
-message base).
-
-08/23/94
-Fixed problem with hitting Ctrl-C locally during regular (not extended)
-listing. Returning to main menu would not clear screen or have correct colors.
-'aborted' variable is now reset in main() loop.
-
-******************
-* RELEASE: v1.32 *
-******************
-
-08/30/94
-Fixed stack overflow that would cause periodic lock-ups on some systems.
-
-******************
-* RELEASE: v1.33 *
-******************
-
-09/08/94
-When deleting an entry, the name of the BBS deleted wasn't being printed.
-
-02/01/95
-Import utility made mistake of ignoring READ messages to SBL. This has been
-fixed.
-
-12/16/99
-Fixed Y2K window bug in dstrtounix().
-
-12/16/99
-Fixed bug that caused SMB imported entries to never be autodeleted.
-
-06/01/00
-Added support for XSDK 3.0
-
-06/01/00
-Added support for MSVC 5+
-
-06/01/00
-Changed cosmetic appearance of main menu a bit
-
-06/14/99
-Added support for C++Builder 5
-*/
-
-#include <stddef.h>		/* offsetof() macro */
-#include <xsdk.h>
-#include "sbldefs.h"
-
-unsigned _stklen=16000; 		  /* Set stack size in code, not header */
-
-#define Y2K_2DIGIT_WINDOW	70
-#define VERIFICATION_MOD	FALSE
-
-typedef struct {
-
-	char	str[32];
-	short	offset;
-
-	} sortstr_t;
-
-typedef struct {
-
-	long	i;
-	short	offset;
-
-	} sortint_t;
-
-char *nulstr="";
-char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
-char *mon[]={"Jan","Feb","Mar","Apr","May","Jun"
-            ,"Jul","Aug","Sep","Oct","Nov","Dec"};
-char tmp[256];
-char list_fmt[128];
-uint del_days,add_ml,update_ml,remove_ml,verify_ml,sbl_pause=1,notify_user;
-time_t now;
-
-/****************************************************************************/
-/* Generates a 24 character ASCII string that represents the time_t pointer */
-/* Used as a replacement for ctime()										*/
-/****************************************************************************/
-char *timestr(time_t *intime)
-{
-	static char str[256];
-    char mer[3],hour;
-    struct tm *gm;
-
-gm=localtime(intime);
-if(gm->tm_hour>=12) {
-    if(gm->tm_hour==12)
-        hour=12;
-    else
-        hour=gm->tm_hour-12;
-    strcpy(mer,"pm"); }
-else {
-    if(gm->tm_hour==0)
-        hour=12;
-    else
-        hour=gm->tm_hour;
-    strcpy(mer,"am"); }
-sprintf(str,"%s %s %02d %4d %02d:%02d %s"
-    ,wday[gm->tm_wday],mon[gm->tm_mon],gm->tm_mday,1900+gm->tm_year
-    ,hour,gm->tm_min,mer);
-return(str);
-}
-
-
-/****************************************************************************/
-/* Converts a date string in format MM/DD/YY into unix time format			*/
-/****************************************************************************/
-time_t dstrtounix(char *str)
-{
-	struct tm tm;
-
-	if(!strncmp(str,"00/00/00",8))
-		return(0);
-	memset(&tm,0,sizeof(tm));
-	tm.tm_year=((str[6]&0xf)*10)+(str[7]&0xf);
-	if (tm.tm_year<Y2K_2DIGIT_WINDOW)
-		tm.tm_year+=100;
-	tm.tm_mon=((str[0]&0xf)*10)+(str[1]&0xf);
-	tm.tm_mday=((str[3]&0xf)*10)+(str[4]&0xf); 
-	if (tm.tm_mon)
-		tm.tm_mon--;	/* zero-based month field */
-	return(mktime(&tm));
-}
-
-/****************************************************************************/
-/* Converts unix time format (long - time_t) into a char str MM/DD/YY		*/
-/****************************************************************************/
-char * unixtodstr(time_t t, char *str)
-{
-	struct tm* tm;
-
-	if(t==0)
-		strcpy(str,"00/00/00");
-	else {
-		tm=gmtime(&t);
-		if(tm==NULL) {
-			strcpy(str,"00/00/00");
-			return(str);
-		}
-		if(tm->tm_mon>11) {	  /* DOS leap year bug */
-			tm->tm_mon=0;
-			tm->tm_year++; }
-		if(tm->tm_mday>31)
-			tm->tm_mday=1;
-		sprintf(str,"%02u/%02u/%02u",tm->tm_mon+1,tm->tm_mday
-			,tm->tm_year%100); }
-	return(str);
-}
-
-void dots(int show)
-{
-	static int i;
-
-if(!show) {  /* reset */
-	i=0;
-	return; }
-if(++i>5) {
-	bputs("\b\b\b\b\b     \b\b\b\b\b");
-	i=0;
-	return; }
-outchar('.');
-}
-
-
-/* Displays short information about BBS. Returns 0 if aborted. */
-
-char short_bbs_info(bbs_t bbs)
-{
-	char	str[128];
-	int		i,j;
-
-for(i=0;i<bbs.total_numbers && i<MAX_NUMBERS;i++) {
-	for(j=0;list_fmt[j];j++) {
-		if(j) bputs(" ");
-		switch(toupper(list_fmt[j])) {
-			case 'N':
-				bprintf("\1h\1m%-25.25s",i ? nulstr : bbs.name);
-				break;
-			case 'S':
-				bprintf("\1h\1c%-15.15s",i ? nulstr : bbs.software);
-				break;
-			case 'P':
-				if(bbs.number[i].modem.min_rate==0xffff) {
-					if(bbs.number[i].telnet.port!=0 
-						&& bbs.number[i].telnet.port!=IPPORT_TELNET)
-						sprintf(str,"%s:%hu"
-							,bbs.number[i].telnet.addr
-							,bbs.number[i].telnet.port);
-					else
-						strcpy(str,bbs.number[i].telnet.addr);
-					bprintf("\1h\1b%-28.28s",str);
-				} else
-					bprintf("\1n\1g%12.12s",bbs.number[i].modem.number);
-				break;
-			case 'B':
-				if(bbs.number[i].modem.min_rate!=0xffff)
-					bprintf("\1h\1g%5u",bbs.number[i].modem.max_rate);
-				break;
-			case 'M':
-				if(bbs.number[i].modem.min_rate!=0xffff)
-					bprintf("\1h\1b%-15.15s",bbs.number[i].modem.desc);
-				break;
-			case 'Y':
-				bprintf("\1h\1y%-25.25s",i ? nulstr : bbs.sysop[0]);
-				break;
-			case 'T':
-				if(i) bputs("   ");
-				else  bprintf("\1y\1h%3u",bbs.nodes);
-				break;
-			case 'U':
-				if(i) bputs("     ");
-				else  bprintf("\1n\1r%5u",bbs.users);
-                break;
-			case 'H':
-				if(i) bprintf("%10.10s",nulstr);
-				else  bprintf("\1h\1r%10u",bbs.megs);
-				break;
-			case 'L':
-				bprintf("\1n\1c%-20.20s",bbs.number[i].modem.location);
-				break;
-			case 'F':
-				bprintf("\1n\1b%s",i ? nulstr : unixtodstr(bbs.birth,tmp));
-				break;
-			case 'V':
-				bprintf("\1n\1m%s",i ? nulstr : unixtodstr(bbs.verified,tmp));
-				break;
-			case 'D':
-				bprintf("\1n%s",i ? nulstr : unixtodstr(bbs.updated,tmp));
-				break;
-			case 'C':
-				bprintf("\1n\1y%s",i ? nulstr : unixtodstr(bbs.created,tmp));
-                break;
-			default:
-				bprintf("%c",list_fmt[j]);
-				break;
-				} }
-	bputs("\r\n"); }
-if(kbhit())
-	return(0);
-return(1);
-}
-
-char long_bbs_info(bbs_t bbs)
-{
-	int i;
-
-cls();
-bprintf("\1n\1gBBS Name: \1h%s \1n\1gsince \1h%s\r\n"
-	,bbs.name,unixtodstr(bbs.birth,tmp));
-bprintf("\1n\1gOperator: ");
-for(i=0;i<bbs.total_sysops && i<MAX_SYSOPS;i++) {
-	if(i) {
-		if(bbs.total_sysops>2)
-			bputs(", ");
-		else
-			outchar(SP);
-		if(!(i%4))
-            bputs("\r\n          ");
-		if(i+1==bbs.total_sysops)
-			bputs("and "); }
-	bprintf("\1h%s\1n\1g",bbs.sysop[i]); 
-	if(!i && bbs.sysop_email[0])
-		bprintf(" <\1h%s\1n\1g>", bbs.sysop_email);
-}
-CRLF;
-bprintf("\1n\1gSoftware: \1h%-15.15s \1n\1gNodes: \1h%-5u \1n\1g"
-	"Users: \1h%-5u \1n\1gDoors: \1h%u\r\n"
-	,bbs.software,bbs.nodes,bbs.users,bbs.xtrns);
-bprintf("\1n\1gDownload: \1h%lu \1n\1gfiles in \1h%u \1n\1gdirectories of \1h"
-	"%luMB \1n\1gtotal space\r\n"
-	,bbs.files,bbs.dirs,bbs.megs);
-bprintf("Messages: \1h%lu \1n\1gmessages in \1h%u \1n\1gsub-boards\r\n"
-	,bbs.msgs,bbs.subs);
-bprintf("Networks: ");
-for(i=0;i<bbs.total_networks && i<MAX_NETS;i++) {
-	if(i) {
-		if(bbs.total_networks>2)
-			bputs(", ");
-		else
-			outchar(SP);
-		if(!(i%3))
-            bputs("\r\n          ");
-		if(i+1==bbs.total_networks)
-            bputs("and "); }
-	bprintf("\1h%s [%s]\1n\1g",bbs.network[i],bbs.address[i]); }
-CRLF;
-bprintf("Terminal: ");
-for(i=0;i<bbs.total_terminals && i<MAX_TERMS;i++) {
-	if(i) {
-		if(bbs.total_terminals>2)
-			bputs(", ");
-		else
-			outchar(SP);
-		if(i+1==bbs.total_terminals)
-            bputs("and "); }
-	bprintf("\1h%s\1n\1g",bbs.terminal[i]); }
-CRLF;
-if(bbs.web_url[0])
-	bprintf("Web-site: http://\1h%s\r\n",bbs.web_url);
-CRLF;
-for(i=0;i<bbs.total_numbers && i<MAX_NUMBERS;i++) {
-	bprintf("\1h\1b%-30.30s "
-		,i && !strcmp(bbs.number[i].modem.location,bbs.number[i-1].modem.location)
-				? nulstr : bbs.number[i].modem.location);
-	if(bbs.number[i].modem.min_rate==0xffff) {
-		if(bbs.number[i].telnet.port!=0
-			&& bbs.number[i].telnet.port!=IPPORT_TELNET)
-			bprintf("\1n\1mtelnet://\1h%s:%hu\r\n"
-				,bbs.number[i].telnet.addr
-				,bbs.number[i].telnet.port);
-		else
-			bprintf("\1n\1mtelnet://\1h%s\r\n"
-				,bbs.number[i].telnet.addr);
-	} else
-		bprintf("\1n\1g%12.12s \1h%5u \1b%-15.15s \1n\1cMinimum: \1h%u\r\n"
-			,bbs.number[i].modem.number
-			,bbs.number[i].modem.max_rate
-			,bbs.number[i].modem.desc
-			,bbs.number[i].modem.min_rate);
-}
-bputs("\r\n\1w\1h");
-for(i=0;i<DESC_LINES;i++) {
-	if(!bbs.desc[i][0])
-		break;
-	bprintf("%15s%s\r\n",nulstr,bbs.desc[i]); }
-
-CRLF;
-if(bbs.misc&FROM_SMB)
-	bputs("\1r\1hImported from message base.\r\n");
-bprintf("\1n\1cEntry created on \1h%s\1n\1c by \1h%s\r\n"
-	,timestr(&bbs.created),bbs.user);
-if(bbs.updated && bbs.userupdated[0])
-	bprintf("\1n\1c Last updated on \1h%s\1n\1c by \1h%s\r\n"
-		,timestr(&bbs.updated),bbs.userupdated);
-if(bbs.verified && bbs.userverified[0])
-	bprintf("\1n\1cLast verified on \1h%s\1n\1c by \1h%s"
-#if VERIFICATION_MOD
-	" \1y(%d/%d)"
-#endif
-	"\r\n"
-		,timestr(&bbs.verified),bbs.userverified
-		,bbs.verification_count,bbs.verification_attempts);
-CRLF;
-if(aborted) {
-	aborted=0;
-	return(0); }
-if(!sbl_pause) {
-	if(kbhit())
-		return(0);
-	return(1); }
-nodesync();
-#if VERIFICATION_MOD
-	bputs("More? Y/N/V ");
-switch(getkeys("YNV\r",0)) {
-	case '\r':
-	case 'Y':
-		return(1);
-	case 'V':
-		return(2);
-	default:
-		return(0);
-}
-#else
-	return(yesno("More"));
-#endif
-}
-
-/* Gets/updates BBS info from user. Returns 0 if aborted. */
-
-char get_bbs_info(bbs_t *bbs)
-{
-	char str[128];
-	int i;
-
-aborted=0;
-if(!(bbs->user[0]))
-	strcpy(bbs->user,user_name);
-if(SYSOP) {
-	bputs("\1y\1hUser Name (Creator/Owner of Entry): ");
-	if(!getstr(bbs->user,25,K_EDIT|K_LINE|K_AUTODEL))
-		return(0); }
-bputs("\1y\1hSystem Name: ");
-if(getstr(bbs->name,25,K_EDIT|K_LINE|K_AUTODEL)<2)
-	return(0);
-if(!bbs->software[0])
-	strcpy(bbs->software,"Synchronet");
-bprintf("\1y\1hSoftware: \1w",bbs->software);
-if(!getstr(bbs->software,15,K_AUTODEL|K_EDIT))
-	return(0);
-
-for(i=0;i<MAX_SYSOPS && !aborted;i++) {
-	bprintf("\1y\1hName of System Operator #%d [\1wNone\1y]: ",i+1);
-	if(!getstr(bbs->sysop[i],25,K_EDIT|K_LINE|K_AUTODEL))
-		break; 
-	if(!i) {
-		bprintf("\1y\1hInternet E-mail Address [\1wNone\1y]:\1w ");
-		getstr(bbs->sysop_email,40,K_EDIT|K_AUTODEL);
-	}
-}
-bbs->total_sysops=i;
-if(aborted)
-	return(0);
-
-unixtodstr(bbs->birth,str);
-bprintf("\1y\1hFirst Day Online (MM/DD/YY): \1w");
-if(getstr(str,8,K_UPPER|K_EDIT|K_AUTODEL))
-	bbs->birth=dstrtounix(str);
-if(aborted) return(0);
-
-for(i=0;i<MAX_NETS && !aborted;i++) {
-	bprintf("\1y\1hName of Message Network #%d [\1wNone\1y]: ",i+1);
-	if(!getstr(bbs->network[i],15,K_EDIT|K_AUTODEL|K_LINE))
-		break;
-	bprintf("\1y\1hNetwork Message \1wAddress\1y #%d [\1wNone\1y]: \1w",i+1);
-	getstr(bbs->address[i],25,K_EDIT|K_AUTODEL); }
-bbs->total_networks=i;
-if(aborted) return(0);
-
-for(i=0;i<MAX_TERMS && !aborted;i++) {
-	bprintf("\1y\1hSupported Terminal Type #%d (i.e. TTY, ANSI, RIP) "
-		"[\1wNone\1y]: ",i+1);
-	if(!getstr(bbs->terminal[i],15,K_EDIT|K_AUTODEL|K_LINE))
-		break; }
-bbs->total_terminals=i;
-if(aborted) return(0);
-
-bprintf("\1y\1hWeb-site [\1wNone\1y] http://\1w");
-getstr(bbs->web_url,60,K_EDIT|K_AUTODEL);
-
-if(!bbs->nodes)
-	bbs->nodes=1;
-bprintf("\1y\1hNodes (maximum number of simultaneous REMOTE users): \1w");
-sprintf(str,"%u",bbs->nodes);
-if(getstr(str,5,K_NUMBER|K_EDIT|K_AUTODEL))
-	bbs->nodes=atoi(str);
-if(!bbs->nodes)
-	bbs->nodes=1;
-if(aborted) return(0);
-
-for(i=0;i<MAX_NUMBERS;i++) {
-#if 0
-	if(!i && !bbs->number[i].modem.number[0])
-		sprintf(bbs->number[i].modem.number,"%.8s",user_phone);
-#endif
-	bprintf("\1y\1hPhone Number or \1mTelnet address\1y #%d [\1wNone\1y]: ",i+1);
-	if(!getstr(bbs->number[i].telnet.addr,28,K_EDIT|K_LINE))
-		break;
-	if(!bbs->number[i].modem.location[0]) {
-		if(!i)
-			strcpy(bbs->number[i].modem.location,user_location);
-		else
-			strcpy(bbs->number[i].modem.location,bbs->number[i-1].modem.location); }
-	if(aborted) return(0);
-	if(isalpha(bbs->number[i].telnet.addr[0]) 
-		|| yesno("Is the above a Telnet address")) {
-		bbs->number[i].modem.min_rate=0xffff;
-		if(bbs->number[i].telnet.port==0)
-			bbs->number[i].telnet.port=IPPORT_TELNET;
-		bprintf("\1y\1hTCP Port: \1w");
-		sprintf(str,"%u",bbs->number[i].telnet.port);
-		if(getstr(str,5,K_NUMBER|K_EDIT|K_AUTODEL))
-			bbs->number[i].telnet.port=atoi(str);
-		if(aborted) return(0);
-
-	} else {
-		if(bbs->number[i].modem.min_rate==0xffff)
-			bbs->number[i].modem.min_rate=300;
-		bbs->number[i].modem.number[13]=0;
-		if(!bbs->number[i].modem.min_rate) {
-			if(i)
-				bbs->number[i].modem.min_rate=bbs->number[i-1].modem.min_rate;
-			else
-				bbs->number[i].modem.min_rate=300; }
-		bprintf("\1y\1hMinimum Connect Rate: \1w");
-		sprintf(str,"%u",bbs->number[i].modem.min_rate);
-		if(getstr(str,5,K_NUMBER|K_EDIT|K_AUTODEL))
-			bbs->number[i].modem.min_rate=atoi(str);
-		if(aborted) return(0);
-
-		if(!bbs->number[i].modem.max_rate) {
-			if(i)
-				bbs->number[i].modem.max_rate=bbs->number[i-1].modem.max_rate;
-			else
-				bbs->number[i].modem.max_rate=2400; }
-		if(bbs->number[i].modem.max_rate<bbs->number[i].modem.min_rate)
-			bbs->number[i].modem.max_rate=bbs->number[i].modem.min_rate;
-		bprintf("\1y\1hMaximum Connect Rate (i.e. 2400, 9600, 14400, etc): \1w");
-		sprintf(str,"%u",bbs->number[i].modem.max_rate);
-		if(getstr(str,5,K_NUMBER|K_EDIT|K_AUTODEL))
-			bbs->number[i].modem.max_rate=atoi(str);
-		if(aborted) return(0);
-		bprintf("\1y\1hModem Description (i.e. Hayes, HST, V.32, etc): \1w");
-		getstr(bbs->number[i].modem.desc,15,K_EDIT|K_AUTODEL);  
-	}
-
-	bprintf("\1y\1hLocation (City, State): \1w");
-	if(!getstr(bbs->number[i].modem.location,30,K_EDIT|K_AUTODEL))
-		break;
-
-}
-if(!i)
-	return(0);
-bbs->total_numbers=i;
-if(aborted)
-	return(0);
-
-if(!bbs->users)
-	bbs->users=100;
-bprintf("\1y\1hTotal Number of Users: \1w");
-sprintf(str,"%u",bbs->users);
-if(getstr(str,5,K_NUMBER|K_EDIT|K_AUTODEL))
-	bbs->users=atoi(str);
-if(aborted) return(0);
-
-if(!bbs->subs)
-	bbs->subs=10;
-bprintf("\1y\1hTotal Number of Sub-boards (Message Areas): \1w");
-sprintf(str,"%u",bbs->subs);
-if(getstr(str,5,K_NUMBER|K_EDIT|K_AUTODEL))
-	bbs->subs=atoi(str);
-if(aborted) return(0);
-
-if(!bbs->msgs)
-	bbs->msgs=500;
-bprintf("\1y\1hTotal Number of Public Messages: \1w");
-sprintf(str,"%lu",bbs->msgs);
-if(getstr(str,10,K_NUMBER|K_EDIT|K_AUTODEL))
-	bbs->msgs=atol(str);
-if(aborted) return(0);
-
-if(!bbs->dirs)
-	bbs->dirs=5;
-bprintf("\1y\1hTotal Number of Directories (File Areas): \1w");
-sprintf(str,"%u",bbs->dirs);
-if(getstr(str,5,K_NUMBER|K_EDIT|K_AUTODEL))
-	bbs->dirs=atoi(str);
-if(aborted) return(0);
-
-if(!bbs->files)
-	bbs->files=250;
-bprintf("\1y\1hTotal Number of Downloadable Files: \1w");
-sprintf(str,"%lu",bbs->files);
-if(getstr(str,10,K_NUMBER|K_EDIT|K_AUTODEL))
-	bbs->files=atol(str);
-if(aborted) return(0);
-
-if(!bbs->xtrns)
-    bbs->xtrns=5;
-bprintf("\1y\1hTotal Number of External Programs (Doors): \1w");
-sprintf(str,"%u",bbs->xtrns);
-if(getstr(str,5,K_NUMBER|K_EDIT|K_AUTODEL))
-    bbs->xtrns=atoi(str);
-if(aborted) return(0);
-
-if(!bbs->megs)
-	bbs->megs=40;
-bprintf("\1y\1hTotal Storage Space (in Megabytes): \1w");
-sprintf(str,"%lu",bbs->megs);
-if(getstr(str,10,K_NUMBER|K_EDIT|K_AUTODEL))
-	bbs->megs=atol(str);
-if(aborted) return(0);
-
-for(i=0;i<DESC_LINES;i++) {
-	bprintf("\1y\1hBBS Description (%d of %d): ",i+1,DESC_LINES);
-	if(!getstr(bbs->desc[i],50,K_EDIT|K_AUTODEL|K_LINE))
-		break; }
-
-return(1);
-}
-
-char partname(char *inname, char *inpart)
-{
-	char name[128],part[128],str[256];
-
-strcpy(name,inname);
-strupr(name);
-strcpy(part,inpart);
-strupr(part);
-if(inname[0] && (strstr(name,part) || strstr(part,name))) {
-	sprintf(str,"\r\nDo you mean %s",inname);
-	if(yesno(str))
-		return(1); }
-return(0);
-}
-
-int sortint_cmp(sortint_t *int1, sortint_t *int2)
-{
-
-if(int1->i>int2->i)
-	return(-1);
-if(int1->i<int2->i)
-	return(1);
-return(0);
-}
-
-int sortstr_cmp(sortstr_t *str1, sortstr_t *str2)
-{
-return(stricmp(str1->str,str2->str));
-}
-
-int main(int argc, char **argv)
-{
-	char	str[512],name[128],*p,ch;
-	short	i,j,file,done,sort_by_str;
-	int 	maint=0;
-	long	l,found;
-	bbs_t	bbs,tmpbbs;
-	FILE	*stream;
-	sortstr_t *sortstr;
-	sortint_t *sortint;
-
-	for(i=1;i<argc;i++)
-		if(argv[i][0]=='/')
-			switch(toupper(argv[i][1])) {
-				case 'M':
-					maint=1;
-					xsdk_mode&=~XSDK_MODE_NOCONSOLE;
-					break; }
-
-	p=getenv("SBBSNODE");
-	if(p)
-		strcpy(node_dir,p);
-	else {
-		printf("\nSBBSNODE environment variable must be set\n");
-		exit(0); }
-
-	if(node_dir[strlen(node_dir)-1]!='\\' && node_dir[strlen(node_dir)-1]!='/')
-		strcat(node_dir,"/");
-
-	strcpy(str,"sbl.cfg");
-	if((file=sopen(str,O_RDONLY,SH_DENYNO))==-1) {
-		printf("error opening %s\r\n",str);
-		exit(1); }
-	if((stream=fdopen(file,"rb"))==NULL) {
-		printf("fdopen error with %s\r\n",str);
-		exit(1); }
-	fgets(str,81,stream);
-	del_days=atoi(str);
-	fgets(str,81,stream);
-	add_ml=atoi(str);
-	fgets(str,81,stream);
-	update_ml=atoi(str);
-	fgets(str,81,stream);
-	remove_ml=atoi(str);
-	fgets(str,81,stream);
-	verify_ml=atoi(str);
-	fgets(str,81,stream);
-	notify_user=atoi(str);
-	fclose(stream);
-
-	initdata();
-	if(maint) 
-		client_socket=INVALID_SOCKET;
-
-	mnehigh=HIGH|LIGHTGRAY;
-	mnelow=HIGH|YELLOW;
-	if(maint)
-		user_misc=(ANSI|COLOR);
-
-	if((file=sopen("sbl.dab",O_RDWR|O_BINARY|O_CREAT,SH_DENYNO))==-1) {
-		bprintf("\r\n\7Error opening/creating sbl.dab\r\n");
-		exit(1); }
-	if((stream=fdopen(file,"w+b"))==NULL) {
-		bprintf("\r\n\7Error converting sbl.dab file handle to stream\r\n");
-		exit(1); }
-	setvbuf(stream,0L,_IOFBF,2048);
-
-	if(del_days) {
-		now=time(NULL);
-		strcpy(str,"sblpurge.dab");
-		if((file=nopen(str,O_RDWR|O_CREAT))==-1) {
-			printf("Error creating %s\r\n",str);
-			exit(1); }
-		l=0;
-		read(file,&l,4);
-		if(now-l>(24L*60L*60L) || maint) {	 /* more than a day since update */
-			bputs("\r\n\1n\1hRunning daily maintenance for Synchronet BBS List...");
-			lseek(file,0L,SEEK_SET);
-			write(file,&now,4);
-			close(file);
-			fseek(stream,0L,SEEK_SET);
-			while(!feof(stream)) {
-				if(!fread(&bbs,sizeof(bbs_t),1,stream))
-					break;
-				if(bbs.name[0]) {
-					if((now-bbs.updated)/(24L*60L*60L)>(time_t)del_days
-						&& (now-bbs.created)/(24L*60L*60L)>(time_t)del_days
-						&& (now-bbs.verified)/(24L*60L*60L)>(time_t)del_days) {
-						lncntr=0;
-						bprintf("\r\n\1n\1hAuto-deleting \1m%s\r\n",bbs.name);
-						if(!(bbs.misc&FROM_SMB)) {
-							sprintf(str,"\1n\1hSBL: \1mYour BBS entry for \1y%s\1m\r\n"
-								"     was auto-deleted from the \1cSynchronet BBS "
-								"List\r\n",bbs.name);
-							i=usernumber(bbs.user);
-							if(i) putsmsg(i,str);
-						}
-						bbs.name[0]=0;
-						fseek(stream,-(long)(sizeof(bbs_t)),SEEK_CUR);
-						fwrite(&bbs,sizeof(bbs_t),1,stream); 
-						fflush(stream); 
-					} else if (!(bbs.misc&FROM_SMB)) { /* Warn user */
-						l=bbs.created;
-						if(l<bbs.updated)
-							l=bbs.updated;
-						if(l<bbs.verified)
-							l=bbs.verified;
-						if((now-l)/(24L*60L*60L)>=(time_t)(del_days/2)) {
-							bprintf("\r\n\1n\1hWarning \1y%s\r\n",bbs.user);
-							lncntr=0;
-							sprintf(str,"\1n\1hSBL: \1mPlease verify your BBS "
-								"entry for \1y%s\1m\r\n     "
-								"in the \1cSynchronet BBS List "
-								"\1mor it will be deleted in \1i\1r%u "
-								"\1n\1h\1mdays.\r\n"
-								,bbs.name
-								,del_days-((now-l)/(24L*60L*60L)));
-							i=usernumber(bbs.user);
-							if(i) putsmsg(i,str); } } } } }
-		else
-			close(file); }
-
-	if(maint)
-		return(0);
-
-	strcpy(list_fmt,DEF_LIST_FMT);
-	while(1) {
-		aborted=0;
-		attr(LIGHTGRAY);
-		cls();
-		COMPILER_DESC(str);
-		bprintf("\1n\1m\1hSynchronet \1wBBS List \1mv3.11 for %s\r\n (XSDK v%s %s %s) "
-			"\r\n\r\n"
-			,PLATFORM_DESC
-			,xsdk_ver
-			,str
-			,__DATE__
-			);
-
-	#define SBL_INDENT "    "
-		sprintf(str,SBL_INDENT"~List all systems (condensed)\r\n"
-					SBL_INDENT"~Change list format\r\n"
-					SBL_INDENT"~Extended information on all systems\r\n"
-					SBL_INDENT"~Turn screen pause %s\r\n"
-					SBL_INDENT"~Find text in BBS entries\r\n"
-					SBL_INDENT"~Generate sorted list\r\n"
-					SBL_INDENT"~Display sorted list\r\n"
-					SBL_INDENT"~New entry scan\r\n"
-					SBL_INDENT"~Add a BBS entry\r\n"
-					SBL_INDENT"~Update a BBS entry\r\n"
-					SBL_INDENT"~Verify a BBS entry\r\n"
-					SBL_INDENT"~Remove a BBS entry\r\n"
-					SBL_INDENT"~Quit back to BBS\r\n"
-					,sbl_pause ? "OFF" : "ON");
-		mnemonics(str);
-		if(SYSOP)
-			mnemonics(SBL_INDENT"~* Undelete entries\r\n");
-
-		bputs("\r\n");
-
-		l=filelength(fileno(stream));
-		if(l>0)
-			bprintf(SBL_INDENT"\1n\1cThere are \1h%lu\1n\1c entries in the online BBS list "
-				"database.\r\n",l/(long)sizeof(bbs_t));
-
-		if(del_days) {
-			bprintf(SBL_INDENT"\1n\1cEntries are auto-deleted \1h%u\1n\1c days after "
-				"last update or verification.\r\n",del_days);
-			bputs(SBL_INDENT"Users are encouraged to \1hV\1n\1cerify (vouch for) any listed "
-				"systems they call.\r\n"); }
-
-		nodesync(); 			/* Display any waiting messages */
-
-		bputs("\r\n"SBL_INDENT"\1y\1hWhich: \1w");
-		switch(getkeys("CLGDEFSNAURTQV!*",0)) {
-			case '!':
-				bprintf("\r\nsizeof(bbs_t)=%u\r\n",sizeof(bbs_t));
-				bprintf("\r\noffsetof(verification_count=%x)\r\n",offsetof(bbs_t,verification_count));
-				pause();
-				break;
-			case '*':
-				cls();
-				if(!SYSOP)
-					break;
-				fseek(stream,0L,SEEK_SET);
-				while(!feof(stream) && !aborted) {
-					if(!fread(&bbs,sizeof(bbs_t),1,stream))
-						break;
-					if(!bbs.name[0] && bbs.total_numbers>0) {
-						bbs.name[0]='?';
-						bbs.verified=time(NULL);
-						sprintf(bbs.userverified,"%.25s",user_name);
-						if(yesno(bbs.name)) {
-							bprintf("\1n\1gFirst char: \1h");
-							bbs.name[0]=getkey(0);
-							bprintf("%s\r\n",bbs.name);
-							fseek(stream,-(long)sizeof(bbs_t),SEEK_CUR);
-							fwrite(&bbs,sizeof(bbs_t),1,stream); 
-							fflush(stream); 
-						} 
-					} 
-				}
-				break;
-			case 'L':
-				cls();
-				fseek(stream,0L,SEEK_SET);
-				i=0;
-				while(!feof(stream) && !aborted) {
-					if(!fread(&bbs,sizeof(bbs_t),1,stream))
-						break;
-					if(!bbs.name[0] || bbs.total_numbers<1)
-						continue;
-					i++;
-					if(!short_bbs_info(bbs))
-						break;
-					if(!sbl_pause)
-						lncntr=0; }
-				bprintf("\r\n\1n\1h%u systems listed.\r\n",i);
-				if(kbhit())
-					getch();
-				if(lncntr)
-					pause();
-				break;
-			case 'C':
-				cls();
-				bputs("\1n\1c\1hList Format Specifier Definitions:\1n\r\n\r\n");
-				bputs("\1h\1w(\1mN\1w) \1n\1mName of System\r\n");
-				bputs("\1h\1w(\1mS\1w) \1n\1mSoftware Used\r\n");
-				bputs("\1h\1w(\1mP\1w) \1n\1mPhone Number\r\n");
-				bputs("\1h\1w(\1mB\1w) \1n\1mMaximum Connect Rate (in bps)\r\n");
-				bputs("\1h\1w(\1mM\1w) \1n\1mModem Type\r\n");
-				bputs("\1h\1w(\1mY\1w) \1n\1mSysop's Name\r\n");
-				bputs("\1h\1w(\1mT\1w) \1n\1mTotal Number of Nodes\r\n");
-				bputs("\1h\1w(\1mU\1w) \1n\1mTotal Number of Users\r\n");
-				bputs("\1h\1w(\1mH\1w) \1n\1mTotal Storage Capacity (in megabytes)\r\n");
-				bputs("\1h\1w(\1mL\1w) \1n\1mLocation (City, State)\r\n");
-				bputs("\1h\1w(\1mF\1w) \1n\1mDate System was First Online\r\n");
-				bputs("\1h\1w(\1mC\1w) \1n\1mDate Entry was Created\r\n");
-				bputs("\1h\1w(\1mV\1w) \1n\1mDate Entry was Last Verified\r\n");
-				bputs("\1h\1w(\1mD\1w) \1n\1mDate Entry was Last Updated\r\n");
-				bprintf("\r\n\1n\1gDefault Format: \1h%s",DEF_LIST_FMT);
-				bprintf("\r\n\1n\1gCurrent Format: \1h%s\r\n",list_fmt);
-				bprintf("\r\n\1y\1hNew Format: ");
-				if(getstr(tmp,10,K_UPPER|K_LINE)) {
-					if(!strchr(tmp,'P') || !strchr(tmp,'N')) {
-						bputs("\r\n\1h\1mP\1n\1mhone and \1hN\1n\1mame specifiers "
-							"must be present in format.\r\n\r\n");
-						pause(); }
-					else
-						strcpy(list_fmt,tmp); }
-				break;
-			case 'E':
-				fseek(stream,0L,SEEK_SET);
-				while(!feof(stream) && !aborted) {
-					if(!fread(&bbs,sizeof(bbs_t),1,stream))
-						break;
-					if(!bbs.name[0] || bbs.total_numbers<1)
-						continue;
-					i=long_bbs_info(bbs);
-					if(bbs.name[0] && !i)
-						break;
-#if VERIFICATION_MOD
-					if(i==2) {
-						bbs.verification_count++;
-						fseek(stream,-(int)sizeof(bbs_t),SEEK_CUR);
-						fwrite(&bbs,sizeof(bbs_t),1,stream);
-						fflush(stream);
-						fseek(stream,-(int)sizeof(bbs_t),SEEK_CUR);
-					}
-#endif
-					if(!sbl_pause)
-						lncntr=0; }
-				break;
-			case 'F':   /* Find text */
-				cls();
-				bputs("\1y\1hText to search for: ");
-				if(!getstr(name,25,K_UPPER|K_LINE))
-					break;
-				ch=yesno("\r\nDisplay extended information");
-
-				found=0;
-				bputs("\1n\1h\r\nSearching...\r\n\r\n");
-				fseek(stream,0L,SEEK_SET);
-				while(!feof(stream) && !aborted) {
-					if(!sbl_pause)
-						lncntr=0;
-					if(!fread(&bbs,sizeof(bbs_t),1,stream))
-						break;
-					if(!bbs.name[0] || bbs.total_numbers<1)
-						continue;
-					tmpbbs=bbs;
-					strupr(tmpbbs.name);
-					strupr(tmpbbs.user);
-					strupr(tmpbbs.software);
-					strupr(tmpbbs.userverified);
-					strupr(tmpbbs.userupdated);
-					strupr(tmpbbs.web_url);
-					for(i=0;i<DESC_LINES;i++) {
-						strupr(tmpbbs.desc[i]);
-						if(strstr(tmpbbs.desc[i],name))
-							break;
-					}
-					if(i<DESC_LINES
-						|| strstr(tmpbbs.name,name)
-						|| strstr(tmpbbs.user,name)
-						|| strstr(tmpbbs.software,name)
-						|| strstr(tmpbbs.userverified,name)
-						|| strstr(tmpbbs.userupdated,name)
-						|| strstr(tmpbbs.web_url,name)
-						) {
-						found++;
-						if(ch && !long_bbs_info(bbs))
-							break;
-						if(!ch && !short_bbs_info(bbs))
-							break;
-						continue; }
-
-					for(i=0;i<tmpbbs.total_sysops;i++) {
-						strupr(tmpbbs.sysop[i]);
-						if(strstr(tmpbbs.sysop[i],name))
-							break; }
-					if(i<tmpbbs.total_sysops) {
-						found++;
-						if(ch && !long_bbs_info(bbs))
-							break;
-						if(!ch && !short_bbs_info(bbs))
-							break;
-						continue; }
-
-					for(i=0;i<tmpbbs.total_networks;i++) {
-						strupr(tmpbbs.network[i]);
-						strupr(tmpbbs.address[i]);
-						if(strstr(tmpbbs.network[i],name)
-							|| strstr(tmpbbs.address[i],name))
-							break; }
-					if(i<tmpbbs.total_networks) {
-						found++;
-						if(ch && !long_bbs_info(bbs))
-							break;
-						if(!ch && !short_bbs_info(bbs))
-							break;
-						continue; }
-
-					for(i=0;i<tmpbbs.total_terminals;i++) {
-						strupr(tmpbbs.terminal[i]);
-						if(strstr(tmpbbs.terminal[i],name))
-							break; }
-					if(i<tmpbbs.total_terminals) {
-						found++;
-						if(ch && !long_bbs_info(bbs))
-							break;
-						if(!ch && !short_bbs_info(bbs))
-							break;
-						continue; }
-
-					for(i=0;i<tmpbbs.total_numbers;i++) {
-						strupr(tmpbbs.number[i].modem.number);
-						strupr(tmpbbs.number[i].modem.desc);
-						strupr(tmpbbs.number[i].modem.location);
-						if(strstr(tmpbbs.number[i].modem.number,name)
-							|| strstr(tmpbbs.number[i].modem.desc,name)
-							|| strstr(tmpbbs.number[i].modem.location,name))
-							break; }
-					if(i<tmpbbs.total_numbers) {
-						found++;
-						if(ch && !long_bbs_info(bbs))
-							break;
-						if(!ch && !short_bbs_info(bbs))
-							break;
-						continue; } }
-				if(!ch || !found) {
-					CRLF;
-					if(kbhit())
-						getch();
-					if(found)
-						bprintf("\1n\1h%u systems listed.\r\n",found);
-					pause(); }
-				break;
-			case 'G':   /* Generated sorted list */
-				cls();
-				if(!filelength(fileno(stream))) {
-					bprintf("No BBS list exists.\r\n");
-					pause();
-					break; }
-				bputs("\1n\1c\1hSort Options:\1n\r\n\r\n");
-				bputs("\1h\1w(\1mN\1w) \1n\1mName of System\r\n");
-				bputs("\1h\1w(\1mS\1w) \1n\1mSoftware Used\r\n");
-				bputs("\1h\1w(\1mP\1w) \1n\1mPhone Number\r\n");
-				bputs("\1h\1w(\1mB\1w) \1n\1mMaximum Connect Rate (in bps)\r\n");
-				bputs("\1h\1w(\1mM\1w) \1n\1mModem Type\r\n");
-				bputs("\1h\1w(\1mY\1w) \1n\1mSysop's Name\r\n");
-				bputs("\1h\1w(\1mT\1w) \1n\1mTotal Number of Nodes\r\n");
-				bputs("\1h\1w(\1mU\1w) \1n\1mTotal Number of Users\r\n");
-				bputs("\1h\1w(\1mH\1w) \1n\1mTotal Storage Capacity (in megabytes)\r\n");
-				bputs("\1h\1w(\1mL\1w) \1n\1mLocation (City, State)\r\n");
-				bputs("\1h\1w(\1mF\1w) \1n\1mDate System was First Online\r\n");
-				bputs("\1h\1w(\1mC\1w) \1n\1mDate Entry was Created\r\n");
-				bputs("\1h\1w(\1mV\1w) \1n\1mDate Entry was Last Verified\r\n");
-				bputs("\1h\1w(\1mD\1w) \1n\1mDate Entry was Last Updated\r\n");
-				bprintf("\r\n\1y\1hSort by (\1wQ\1y=Quit): \1w");
-				ch=getkeys("NSPBMYTUHLFCVDQ",0);
-				if(!ch || ch=='Q')
-					break;
-				cls();
-				bputs("\1n\1hSorting...     \1m");
-				fseek(stream,0L,SEEK_SET);
-				i=j=done=0;
-				sort_by_str=0;
-				sortstr=NULL;
-				sortint=NULL;
-				while(!feof(stream) && !done) {
-					if(!fread(&bbs,sizeof(bbs_t),1,stream))
-						break;
-					j++;
-					bprintf("\b\b\b\b%4u",j);
-					if(!bbs.name[0])	/* don't sort deleted entries */
-						continue;
-					if(bbs.total_numbers<1)	/* don't sort corrupted entries */
-						continue;
-					i++;
-					switch(ch) {
-						case 'N':
-							sprintf(str,"%.30s",bbs.name);
-							sort_by_str=1;
-							break;
-						case 'S':
-							sprintf(str,"%.30s",bbs.software);
-							sort_by_str=1;
-							break;
-						case 'P':
-							sprintf(str,"%.30s",bbs.number[0].modem.number);
-							sort_by_str=1;
-							break;
-						case 'M':
-							sprintf(str,"%.30s",bbs.number[0].modem.desc);
-							sort_by_str=1;
-							break;
-						case 'Y':
-							sprintf(str,"%.30s",bbs.sysop[0]);
-							sort_by_str=1;
-							break;
-						case 'L':
-							sprintf(str,"%.30s",bbs.number[0].modem.location);
-							sort_by_str=1;
-							break;
-						case 'B':
-							l=bbs.number[0].modem.max_rate;
-							break;
-						case 'T':
-							l=bbs.nodes;
-							break;
-						case 'U':
-							l=bbs.users;
-							break;
-						case 'H':
-							l=bbs.megs;
-							break;
-						case 'F':
-							l=bbs.birth;
-							break;
-						case 'C':
-							l=bbs.created;
-							break;
-						case 'V':
-							l=bbs.verified;
-							break;
-						case 'D':
-							l=bbs.updated;
-							break; }
-					if(sort_by_str) {
-						if((sortstr=(sortstr_t *)REALLOC(sortstr
-							,sizeof(sortstr_t)*i))==NULL) {
-							bprintf("\r\n\7Memory allocation error\r\n");
-							LFREE(sortstr);
-							done=1;
-							continue; }
-						strcpy(sortstr[i-1].str,str);
-						sortstr[i-1].offset=j-1; }
-					else {
-						if((sortint=(sortint_t *)REALLOC(sortint
-							,sizeof(sortint_t)*i))==NULL) {
-							bprintf("\r\n\7Memory allocation error\r\n");
-							LFREE(sortint);
-							done=1;
-							continue; }
-						sortint[i-1].i=l;
-						sortint[i-1].offset=j-1; } }
-
-				if(done) {
-					pause();
-					break; }
-
-				if(sort_by_str)
-					qsort((void *)sortstr,i,sizeof(sortstr[0])
-						,(int(*)(const void *, const void *))sortstr_cmp);
-				else
-					qsort((void *)sortint,i,sizeof(sortint[0])
-						,(int(*)(const void *, const void *))sortint_cmp);
-
-				bprintf("\r\n\r\n\1h\1gCreating index...");
-				sprintf(str,"sort_%03d.ndx",node_num);
-				if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1) {
-					bprintf("\r\n\7Error creating %s\r\n",str);
-					if(sort_by_str)
-						LFREE(sortstr);
-					else
-						LFREE(sortint);
-					pause();
-					break; }
-				for(j=0;j<i;j++)
-					if(sort_by_str)
-						write(file,&sortstr[j].offset,2);
-					else
-						write(file,&sortint[j].offset,2);
-				close(file);
-				if(sort_by_str)
-					LFREE(sortstr);
-				else
-					LFREE(sortint);
-				bputs("\r\n\r\n\1n\1hDone.\r\n");
-				pause();
-				break;
-			case 'D':
-				cls();
-				sprintf(str,"sort_%03d.ndx",node_num);
-				if((file=nopen(str,O_RDONLY))==-1) {
-					bputs("\1n\1r\1hSorted list not generated.\r\n");
-					pause(); }
-				ch=yesno("Display extended information");
-				cls();
-				while(/* !eof(file) && not on unix */ !aborted) {
-					if(read(file,&i,2)!=2)
-						break;
-					fseek(stream,(long)i*sizeof(bbs_t),SEEK_SET);
-					if(!sbl_pause)
-						lncntr=0;
-					if(!fread(&bbs,sizeof(bbs_t),1,stream))
-						break;
-					if(!bbs.name[0] || bbs.total_numbers<1)
-						continue;
-					if(ch && !long_bbs_info(bbs))
-						break;
-					if(!ch && !short_bbs_info(bbs))
-						break; }
-				close(file);
-				if(kbhit())
-					getch();
-				if(lncntr)
-					pause();
-				break;
-			case 'N':   /* New (updated) entry scan */
-				cls();
-				bputs("\1y\1hLast update (MM/DD/YY): ");
-				if(!getstr(str,8,K_UPPER|K_LINE))
-					break;
-				l=dstrtounix(str);
-				ch=yesno("\r\nDisplay extended information");
-				found=0;
-				bputs("\1n\1h\r\nSearching...\r\n\r\n");
-				fseek(stream,0L,SEEK_SET);
-				while(!feof(stream) && !aborted) {
-					if(!sbl_pause)
-						lncntr=0;
-					if(!fread(&bbs,sizeof(bbs_t),1,stream))
-						break;
-					if(!bbs.name[0] || bbs.total_numbers<1)
-						continue;
-					if(bbs.updated>=l || bbs.created>=l) {
-						if(ch && !long_bbs_info(bbs))
-							break;
-						if(!ch && !short_bbs_info(bbs))
-							break;
-						found++;
-						continue; } }
-				if(!ch || !found) {
-					CRLF;
-					pause(); }
-				break;
-			case 'A':
-				cls();
-				if((uint)user_level<add_ml) {
-					bprintf("\1h\1rYou have insufficient access.\r\n\r\n");
-					pause();
-					break; }
-				bputs("\1g\1hAdding a BBS entry:\1n\r\n\r\n");
-				bputs("\1n\1gHit ENTER for unknown data items.\r\n\r\n");
-				memset(&bbs,0,sizeof(bbs_t));
-				if(!get_bbs_info(&bbs))
-					break;
-				bputs("\1n\1h\r\nSearching for duplicates...");
-				fseek(stream,0L,SEEK_SET);
-				i=0;
-				dots(0);
-				while(!feof(stream) && !i) {
-					dots(1);
-					if(!fread(&tmpbbs,sizeof(bbs_t),1,stream))
-						break;
-					if(!stricmp(tmpbbs.name,bbs.name)) i=1; }
-				if(i) {
-					bprintf("\7\1n\1h\1r\1i\r\n\r\n%s \1n\1h\1ralready exists!"
-						"\r\n\r\n"
-						,bbs.name);
-					pause();
-					break; }
-
-				bputs("\1n\1h\r\nSaving...");
-				fseek(stream,0L,SEEK_SET);
-				dots(0);
-				while(!feof(stream)) {
-					dots(1);
-					if(!fread(&ch,1,1,stream))
-						break;
-					if(!ch) {			/* first byte is null */
-						fseek(stream,-1L,SEEK_CUR);
-						break; }
-					fseek(stream,(long)sizeof(bbs_t)-1L,SEEK_CUR); }
-				bbs.created=time(NULL);
-				fwrite(&bbs,sizeof(bbs_t),1,stream);
-				fflush(stream);
-				if(notify_user && notify_user!=user_number) {
-					sprintf(str,"\1n\1hSBL: \1y%s \1madded \1c%s\1m "
-						"to the BBS List\r\n",user_name,bbs.name);
-					putsmsg(notify_user,str); }
-				break;
-			case 'R':       /* Remove an entry */
-				cls();
-				if((uint)user_level<remove_ml) {
-					bprintf("\1h\1rYou have insufficient access.\r\n\r\n");
-					pause();
-					break; }
-				bprintf("\1y\1hRemove which system: ");
-				if(!getstr(name,25,K_LINE|K_UPPER))
-					break;
-				bputs("\1n\1h\r\nSearching...");
-				fseek(stream,0L,SEEK_SET);
-				found=0;
-				dots(0);
-				while(!feof(stream) && !aborted) {
-					dots(1);
-					if(!fread(&bbs,sizeof(bbs_t),1,stream))
-						break;
-					if(!stricmp(bbs.name,name) || partname(bbs.name,name)) {
-						found=1;
-						for(i=0;i<bbs.total_sysops && i<MAX_SYSOPS;i++)
-							if(!stricmp(bbs.sysop[i],user_name))
-								break;
-						if(SYSOP || !stricmp(bbs.user,user_name)
-							|| i<bbs.total_sysops) {
-							fseek(stream,-(long)(sizeof(bbs_t)),SEEK_CUR);
-							strcpy(tmp,bbs.name);
-							bbs.name[0]=0;
-							bbs.updated=time(NULL);
-							fwrite(&bbs,sizeof(bbs_t),1,stream);
-							fflush(stream);
-							bprintf("\r\n\r\n\1m%s\1c deleted."
-								,tmp);
-							if(notify_user && notify_user!=user_number) {
-								sprintf(str,"\1n\1hSBL: \1y%s \1mremoved \1c%s\1m "
-									"from the BBS List\r\n",user_name,tmp);
-								putsmsg(notify_user,str); } }
-						else
-							bprintf("\r\n\r\n\1rYou did not create \1m%s\1n."
-								,bbs.name);
-						break; } }
-				if(!found)
-					bprintf("\r\n\r\n\1m%s\1c not found.",name);
-				CRLF;
-				CRLF;
-				pause();
-				break;
-			case 'T':
-				sbl_pause=!sbl_pause;
-				break;
-			case 'V':       /* Verify an entry */
-				cls();
-				if((uint)user_level<verify_ml) {
-					bprintf("\1h\1rYou have insufficient access.\r\n\r\n");
-					pause();
-					break; }
-				bprintf("\1y\1hVerify which system: ");
-				if(!getstr(name,25,K_LINE|K_UPPER))
-					break;
-				bputs("\1n\1h\r\nSearching...");
-				fseek(stream,0L,SEEK_SET);
-				found=0;
-				dots(0);
-				while(!feof(stream) && !aborted) {
-					dots(1);
-					if(!fread(&bbs,sizeof(bbs_t),1,stream))
-						break;
-					if(!stricmp(bbs.name,name) || partname(bbs.name,name)) {
-						found=1;
-						bbs.verified=time(NULL);
-						sprintf(bbs.userverified,"%.25s",user_name);
-						fseek(stream,-(long)(sizeof(bbs_t)),SEEK_CUR);
-						fwrite(&bbs,sizeof(bbs_t),1,stream);
-						fflush(stream);
-						bprintf("\r\n\r\n\1m%s\1c verified. \1r\1h\1iThank you!"
-							,bbs.name);
-						sprintf(str,"\1n\1hSBL: \1y%s \1mverified \1c%s\1m "
-							"in the BBS List\r\n",user_name,bbs.name);
-						if(notify_user && notify_user!=user_number)
-							putsmsg(notify_user,str);
-						if(stricmp(bbs.user,user_name)) {
-							i=usernumber(bbs.user);
-							if(i && i!=(int)user_number) putsmsg(i,str); }
-						break; } }
-				if(!found)
-					bprintf("\r\n\r\n\1m%s\1c not found.",name);
-				CRLF;
-				CRLF;
-				pause();
-				break;
-			case 'U':       /* Update an entry */
-				cls();
-				if((uint)user_level<update_ml) {
-					bprintf("\1h\1rYou have insufficient access.\r\n\r\n");
-					pause();
-					break; }
-				bprintf("\1y\1hUpdate which system: ");
-				if(!getstr(name,25,K_LINE|K_UPPER))
-					break;
-				bputs("\1n\1h\r\nSearching...");
-				fseek(stream,0L,SEEK_SET);
-				found=0;
-				dots(0);
-				while(!feof(stream) && !aborted) {
-					dots(1);
-					l=ftell(stream);
-					if(!fread(&bbs,sizeof(bbs_t),1,stream))
-						break;
-					if(!stricmp(bbs.name,name) || partname(bbs.name,name)) {
-						found=1;
-						break; } }
-				if(found) {
-					for(i=0;i<bbs.total_sysops && i<MAX_SYSOPS;i++)
-						if(!bbs.sysop[i][0] || !stricmp(bbs.sysop[i],user_name))
-							break;
-					if(SYSOP || !stricmp(bbs.user,user_name)
-						|| i<bbs.total_sysops) {
-						CRLF;
-						CRLF;
-						if(get_bbs_info(&bbs)) {
-							bbs.misc&=~FROM_SMB;
-							bbs.updated=time(NULL);
-							sprintf(bbs.userupdated,"%.25s",user_name);
-							fseek(stream,l,SEEK_SET);
-							fwrite(&bbs,sizeof(bbs_t),1,stream);
-							fflush(stream);
-							bprintf("\r\n\1h\1m%s\1c updated.",bbs.name);
-							if(notify_user && notify_user!=user_number) {
-								sprintf(str,"\1n\1hSBL: \1y%s \1mupdated \1c%s\1m "
-									"in the BBS List\r\n",user_name,bbs.name);
-								putsmsg(notify_user,str); } } }
-					else
-						bprintf("\r\n\r\n\1h\1rYou did not create \1m%s\1n."
-						   ,bbs.name); }
-				else
-					bprintf("\r\n\r\n\1h\1m%s\1c not found.",name);
-				CRLF;
-				CRLF;
-				pause();
-				break;
-			case 'Q':
-				return(0); } }
-	return(-1);
-}
-
-/* End of SBL.C */
diff --git a/xtrn/sbl/sbl.cfg b/xtrn/sbl/sbl.cfg
deleted file mode 100644
index 6b27510098..0000000000
--- a/xtrn/sbl/sbl.cfg
+++ /dev/null
@@ -1,6 +0,0 @@
-90					Days to keep non-updated entries
-10					Minimum security level to add
-10 					Minimum security level to update
-10					Minimum security level to remove
-10					Minimum security level to verify
-1					User to notify of changes (0=none)
diff --git a/xtrn/sbl/sbl.doc b/xtrn/sbl/sbl.doc
deleted file mode 100644
index 642ba2b573..0000000000
--- a/xtrn/sbl/sbl.doc
+++ /dev/null
@@ -1,95 +0,0 @@
-Synchronet BBS List v3.11 for Win32
-===================================
-
-Create the directory: SBL off of your Synchronet XTRN directory.
-(Example: C:\SBBS\XTRN\SBL) 
-
-Make sure SBL.EXE and SBL.CFG are in this directory.
-
-Use an ASCII editor to edit the Synchronet BBS List config file (SBL.CFG) to 
-your liking.
-
-Under SCFG->External Programs->Online Programs->Main, hit INS and add 
-Synchronet BBS List with the following configuration:
-
-Name                       Synchronet BBS List
-Internal Code              SBL
-Start-up Directory         ..\XTRN\SBL
-Command Line               sbl
-Clean-up Command Line
-Execution Cost             None
-Access Requirements
-Execution Requirements
-Multiple Concurrent Users  Yes
-Intercept I/O Interrupts   No
-Swap BBS out of Memory     Yes
-Modify User Data           No
-Execute on Event           No
-BBS Drop File Type         Synchronet      XTRN.DAT
-Place Drop File In         Node Directory
-
-Since SBL v3 is a 32-bit program, you MUST add it ("SBL") to your native
-(OS/2) program list under SCFG->External Programs->OS/2 Program List.
-
-SBL Utilities
-=============
-
-SBLPACK.EXE	Remove deleted entries to save disk space and speed up listings
-SBL2TXT.EXE     Convert SBL listing to a text file
-
-Networking the Synchronet BBS List
-==================================
-
-If you wish to link your SBL database with other Synchronet BBSs, you must
-carry the Synchronet Data echo via DOVE-Net, FidoNet, or RIME and add
-the following two events in SCFG->External Programs->Timed Events:
-
-Internal Code			SMB2SBL
-Start-up Directory		..\XTRN\SBL
-Command Line			SMB2SBL %jSUBS\SYNCDATA SBL.DAB 
-Execution Node			1
-Execution Days			Sun Mon Tue Wed Thu Fri Sat
-Execution Time			04:30
-Requires Exclusive Execution	No
-Force Users Off-line for Event	No
-
-Internal Code			SBL2SMB
-Start-up Directory		..\XTRN\SBL
-Command Line			SBL2SMB SBL.DAB %jSUBS\SYNCDATA
-Execution Node			1
-Execution Days			Sun Mon Tue Wed Thu Fri Sat
-Execution Time			04:31
-Requires Exclusive Execution	No
-Force Users Off-line for Event  No
-
-Change "SYNCDATA" to the internal code of the Synchronet Data sub-board on
-your BBS. We used SYNCDATA, since that is the example given in the Synchronet
-manual for the DOVE-Net Synchronet Data sub-board internal code. It is okay
-if you used a completely different internal code, as long as you specify that
-code instead of "SYNCDATA" on the above command lines.
-
-Make note that all networked SBL entries will be deleted from Vertrauen
-(Home of the Synchronet BBS List) after 90 days unless the entry is
-retransmitted in the message base or updated manually on Vertrauen in that
-time. To cause a retransmission from your BBS, you must (U)pdate the entry
-using SBL and then SBL2SMB will re-export it automatically next time it is run
-(via Timed Event). (V)erified entries are not re-exported by SBL2SMB, only new
-and updated entries. You can also create a BBS entry message by hand (not
-using SBL). Download SBBSLIST.ZIP from Vertrauen for more details.
-
-Source Code
-===========
-
-If you are a C programmer, you may find the included source code interesting
-and/or useful as an example for writing your own XSDK and/or SMB utilities.
-
-MAKEFILE is for use with Borland C++ v3.x or v4.x and the Synchronet XSDK
-to create SBL.EXE. SBL.C and SBLDEFS.H must also in the current directory when
-MAKE is run.
-
-The SMB C library (SMB_120.ZIP) is required to compile SBL2SMB.C and SMB2SBL.C
-(MAKE.BAT included to compile them).
-
-SBL2TXT.C is included as an SBL.DAB to SBL.TXT converter.
-
-/* End of SBL.DOC */
diff --git a/xtrn/sbl/sbl.dsp b/xtrn/sbl/sbl.dsp
deleted file mode 100644
index 413b232b25..0000000000
--- a/xtrn/sbl/sbl.dsp
+++ /dev/null
@@ -1,106 +0,0 @@
-# Microsoft Developer Studio Project File - Name="sbl" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=sbl - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "sbl.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "sbl.mak" CFG="sbl - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "sbl - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "sbl - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "sbl - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "sbl___Win32_Release"
-# PROP BASE Intermediate_Dir "sbl___Win32_Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "win32"
-# PROP Intermediate_Dir "msvc.win32.release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\sdk" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /machine:I386
-
-!ELSEIF  "$(CFG)" == "sbl - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "sbl___Win32_Debug"
-# PROP BASE Intermediate_Dir "sbl___Win32_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "win32"
-# PROP Intermediate_Dir "msvc.win32.debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\sdk" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /map /debug /machine:I386 /pdbtype:sept
-
-!ENDIF 
-
-# Begin Target
-
-# Name "sbl - Win32 Release"
-# Name "sbl - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\sbl.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\sbldefs.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\Sdk\xsdk.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\Sdk\xsdkvars.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\sdk\xsdkwrap.c
-# End Source File
-# End Target
-# End Project
diff --git a/xtrn/sbl/sbl2smb.c b/xtrn/sbl/sbl2smb.c
deleted file mode 100644
index b67ae606c2..0000000000
--- a/xtrn/sbl/sbl2smb.c
+++ /dev/null
@@ -1,421 +0,0 @@
-/* sbl2smb.c */
-
-/* Scans SBL database and posts any additions/updates into the an SMB base */
-
-/* $Id$ */
-
-/****************************************************************************
- * @format.tab-size 4		(Plain Text/Source Code File Header)			*
- * @format.use-tabs true	(see http://www.synchro.net/ptsc_hdr.html)		*
- *																			*
- * Copyright 2000 Rob Swindell - http://www.synchro.net/copyright.html		*
- *																			*
- * This program is free software; you can redistribute it and/or			*
- * modify it under the terms of the GNU General Public License				*
- * as published by the Free Software Foundation; either version 2			*
- * of the License, or (at your option) any later version.					*
- * See the GNU General Public License for more details: gpl.txt or			*
- * http://www.fsf.org/copyleft/gpl.html										*
- *																			*
- * Anonymous FTP access to the most recent released source is available at	*
- * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net	*
- *																			*
- * Anonymous CVS access to the development source and modification history	*
- * is available at cvs.synchro.net:/cvsroot/sbbs, example:					*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs login			*
- *     (just hit return, no password is necessary)							*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs checkout xtrn	*
- *																			*
- * For Synchronet coding style and modification guidelines, see				*
- * http://www.synchro.net/source.html										*
- *																			*
- * You are encouraged to submit any modifications (preferably in Unix diff	*
- * format) via e-mail to mods@synchro.net									*
- *																			*
- * Note: If this box doesn't appear square, then you need to fix your tabs.	*
- ****************************************************************************/
-
-#define  uint unsigned int
-
-#ifdef _WIN32
-#include <windows.h>
-#endif
-
-#include <io.h>		/* access */
-#include <time.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-#include <share.h>
-
-#include "sbbsdefs.h"
-#include "smblib.h"
-#include "smbwrap.h"
-#include "sbldefs.h"
-#include "xsdkwrap.h"	/* PLATFORM_DESC */
-
-#define SBL2SMB_VER "2.20/" PLATFORM_DESC
-
-smb_t		smb;
-extern int	daylight=0;
-extern long timezone=0L;
-
-unsigned	_stklen=16000;
-
-/****************************************************************************/
-/* Truncates white-space chars off end of 'str'								*/
-/****************************************************************************/
-void truncsp(char *str)
-{
-	uint c;
-
-	c=strlen(str);
-	while(c && (uchar)str[c-1]<=SP) c--;
-	str[c]=0;
-}
-
-/****************************************************************************/
-/* Updates 16-bit "rcrc" with character 'ch'                                */
-/****************************************************************************/
-void ucrc16(uchar ch, ushort *rcrc) {
-	ushort i, cy;
-    uchar nch=ch;
- 
-for (i=0; i<8; i++) {
-    cy=*rcrc & 0x8000;
-    *rcrc<<=1;
-    if (nch & 0x80) *rcrc |= 1;
-    nch<<=1;
-    if (cy) *rcrc ^= 0x1021; }
-}
-
-/****************************************************************************/
-/* Returns 16-crc of string (not counting terminating NULL) 				*/
-/****************************************************************************/
-ushort crc16(char *str)
-{
-	int 	i=0;
-	ushort	crc=0;
-
-ucrc16(0,&crc);
-while(str[i])
-	ucrc16(str[i++],&crc);
-ucrc16(0,&crc);
-ucrc16(0,&crc);
-return(crc);
-}
-
-
-/****************************************************************************/
-/* Converts unix time format (long - time_t) into a char str MM/DD/YY		*/
-/****************************************************************************/
-char* unixtodstr(time_t unix_time, char *str)
-{
-	struct tm* tm;
-
-	if(!unix_time)
-		strcpy(str,"00/00/00");
-	else {
-		tm=gmtime(&unix_time);
-		if(tm==NULL) {
-			strcpy(str,"00/00/00");
-			return(str);
-		}
-		if(tm->tm_mon>11) {	  /* DOS leap year bug */
-			tm->tm_mon=0;
-			tm->tm_year++; }
-		if(tm->tm_mday>31)
-			tm->tm_mday=1;
-		sprintf(str,"%02u/%02u/%02u",tm->tm_mday,tm->tm_mon+1
-			,TM_YEAR(tm->tm_year));
-	}
-	return(str);
-}
-
-
-
-#define BUF_LEN 8192
-
-int main(int argc, char **argv)
-{
-	uchar	str[128],tmp[128],buf[BUF_LEN],*p,software[128];
-	int 	i,file;
-	ushort	xlat;
-	long	length;
-	ulong	offset;
-	time_t	last,t;
-	bbs_t	bbs;
-	smbmsg_t msg;
-	FILE	*stream;
-
-	fprintf(stderr,"\nSBL2SMB v%s - Write SBL to SMB - Developed 1994-2000 "
-		"Rob Swindell\n\n",SBL2SMB_VER);
-	if(argc<3) {
-		fprintf(stderr,"usage: sbl2smb <sbl.dab> <smb_file> [/s:software]\n\n");
-		fprintf(stderr,"ex: sbl2smb c:\\sbbs\\xtrn\\sbl\\sbl.dab "
-			"c:\\sbbs\\data\\subs\\syncdata /s:syn\n");
-		return(1); }
-
-	software[0]=0;
-	if(argc>3 && !strnicmp(argv[3],"/S:",3))
-		strcpy(software,argv[3]+3);
-
-	strcpy(smb.file,argv[2]);
-	strupr(smb.file);
-
-	strcpy(str,argv[1]);
-	strupr(str);
-	if((file=sopen(str,O_RDWR|O_BINARY,SH_DENYNO))==-1) {
-		printf("error opening %s\n",str);
-		return(1); }
-	if((stream=fdopen(file,"rb"))==NULL) {
-		printf("error fdopening %s\n",str);
-		return(1); }
-	strcpy(tmp,str);
-	p=strrchr(tmp,'.');
-	if(p) {
-		(*p)=0;
-		strcat(tmp,"2smb.dab");
-		if((file=open(tmp,O_RDWR|O_BINARY|O_CREAT,S_IWRITE|S_IREAD))==-1) {
-			printf("error opening %s\n",str);
-			return(1); }
-		t=time(NULL);
-		if(read(file,&last,sizeof(time_t))!=sizeof(time_t))
-			last=0;
-		lseek(file,0L,SEEK_SET);
-		write(file,&t,sizeof(time_t));
-		close(file); }
-
-	sprintf(str,"%s.SHD",smb.file);
-	if(!fexist(str)) {
-		printf("%s doesn't exist\n",smb.file);
-		return(0); }
-	fprintf(stderr,"Opening %s\n",smb.file);
-	smb.retry_time=30;
-	if((i=smb_open(&smb))!=0) {
-		printf("smb_open returned %d\n",i);
-		return(1); }
-	i=smb_locksmbhdr(&smb);
-	if(i) {
-		printf("smb_locksmbhdr returned %d\n",i);
-		return(1); }
-	i=smb_getstatus(&smb);
-	smb_unlocksmbhdr(&smb);
-	if(i) {
-		printf("smb_getstatus returned %d\n",i);
-		return(1); }
-
-	while(!feof(stream)) {
-		if(!fread(&bbs,sizeof(bbs_t),1,stream))
-			break;
-		if(bbs.total_numbers<1		/* corrupted? */
-			|| bbs.total_numbers>MAX_NUMBERS)
-			continue;
-		truncsp(bbs.name);
-		if(bbs.name[0]<=' '			/* corrupted? */
-			|| bbs.misc&FROM_SMB
-			|| (bbs.updated<last && bbs.created<last 
-				&& bbs.verified<last))
-			continue;
-		if(software[0] && strnicmp(software,bbs.software,strlen(software)))
-			continue;
-
-		truncsp(bbs.user);
-		if(bbs.user[0]<=' ')		/* corrupted? */
-			continue;
-		truncsp(bbs.software);
-		if(bbs.software[0]<=' ')	/* corrupted? */
-			continue;
-
-		printf("%s\r\n",bbs.name);
-		memset(buf,0,BUF_LEN);
-
-		sprintf(str,"%-15.15s%s\r\n"
-			,"Name:",bbs.name);
-		strcat(buf,str);
-
-		sprintf(str,"%-15.15s%s\r\n"
-			,"Birth:",unixtodstr(bbs.birth,tmp));
-		strcat(buf,str);
-
-		sprintf(str,"%-15.15s%s\r\n"
-			,"Software:",bbs.software);
-		strcat(buf,str);
-
-		for(i=0;i<bbs.total_sysops;i++) {
-			truncsp(bbs.sysop[i]);
-			sprintf(str,"%-15.15s%s\r\n"
-				,"Sysop:",bbs.sysop[i]);
-			strcat(buf,str); }
-
-		strcat(buf,"\r\n");
-
-		truncsp(bbs.sysop_email);
-		if(bbs.sysop_email[0]) {
-			sprintf(str,"%-15.15s%s\r\n"
-				,"E-mail:",bbs.sysop_email);
-			strcat(buf,str);
-		}
-
-		truncsp(bbs.web_url);
-		if(bbs.web_url[0]) {
-			sprintf(str,"%-15.15s%s\r\n"
-				,"Web-site:",bbs.web_url);
-			strcat(buf,str);
-		}
-
-		strcat(buf,"\r\n");
-
-		for(i=0;i<bbs.total_numbers;i++) {
-			truncsp(bbs.number[i].modem.number);
-			sprintf(str,"%-15.15s%s\r\n"
-				,"Number:",bbs.number[i].modem.number);
-			strcat(buf,str);
-
-			sprintf(str,"%-15.15s%u\r\n"
-				,"MinRate:",bbs.number[i].modem.min_rate);
-			strcat(buf,str);
-
-			sprintf(str,"%-15.15s%u\r\n"
-				,"MaxRate:",bbs.number[i].modem.max_rate);
-			strcat(buf,str);
-
-			if(bbs.number[i].modem.min_rate!=0xffff) {
-
-				sprintf(str,"%-15.15s%s\r\n"
-					,"Modem:",bbs.number[i].modem.desc);
-				strcat(buf,str);
-			}
-			truncsp(bbs.number[i].modem.location);
-			sprintf(str,"%-15.15s%s\r\n"
-			   ,"Location:",bbs.number[i].modem.location);
-			strcat(buf,str);
-			if(i+1<bbs.total_numbers)
-				strcat(buf,"\r\n"); }
-
-		if(bbs.total_networks)
-			strcat(buf,"\r\n");
-		for(i=0;i<bbs.total_networks;i++) {
-			sprintf(str,"%-15.15s%s\r\n"
-				,"Network:",bbs.network[i]);
-			strcat(buf,str);
-			sprintf(str,"%-15.15s%s\r\n"
-				,"Address:",bbs.address[i]);
-			strcat(buf,str);
-			if(i+1<bbs.total_networks)
-				strcat(buf,"\r\n"); }
-
-		strcat(buf,"\r\n");
-		for(i=0;i<bbs.total_terminals;i++) {
-			sprintf(str,"%-15.15s%s\r\n"
-				,"Terminal:",bbs.terminal[i]);
-			strcat(buf,str); }
-
-		strcat(buf,"\r\n");
-		sprintf(str,"%-15.15s%lu\r\n"
-			,"Megs:",bbs.megs);
-		strcat(buf,str);
-		sprintf(str,"%-15.15s%lu\r\n"
-			,"Msgs:",bbs.msgs);
-		strcat(buf,str);
-		sprintf(str,"%-15.15s%lu\r\n"
-			,"Files:",bbs.files);
-		strcat(buf,str);
-		sprintf(str,"%-15.15s%u\r\n"
-			,"Nodes:",bbs.nodes);
-		strcat(buf,str);
-		sprintf(str,"%-15.15s%u\r\n"
-			,"Users:",bbs.users);
-		strcat(buf,str);
-		sprintf(str,"%-15.15s%u\r\n"
-			,"Subs:",bbs.subs);
-		strcat(buf,str);
-		sprintf(str,"%-15.15s%u\r\n"
-			,"Dirs:",bbs.dirs);
-		strcat(buf,str);
-		sprintf(str,"%-15.15s%u\r\n"
-			,"Xtrns:",bbs.xtrns);
-		strcat(buf,str);
-
-		if(bbs.desc[0][0])
-			strcat(buf,"\r\n");
-		for(i=0;i<5;i++) {
-			if(!bbs.desc[i][0])
-				break;
-			sprintf(str,"%-15.15s%s\r\n"
-				,"Desc:",bbs.desc[i]);
-			strcat(buf,str); }
-
-		strcat(buf,"\r\n--- SBL2SMB v");
-		strcat(buf,SBL2SMB_VER);
-
-		length=strlen(buf);   /* +2 for translation string */
-
-		if(smb.status.attr&SMB_HYPERALLOC)
-			offset=smb_hallocdat(&smb);
-		else {
-			i=smb_open_da(&smb);
-			if(i) {
-				printf("smb_open_da returned %d\n",i);
-				exit(1); }
-			offset=smb_allocdat(&smb,length+2,1);
-			fclose(smb.sda_fp); }
-
-		fseek(smb.sdt_fp,offset,SEEK_SET);
-		xlat=XLAT_NONE;
-		fwrite(&xlat,2,1,smb.sdt_fp);
-		fwrite(buf,length,1,smb.sdt_fp);
-		length+=2;
-
-		memset(&msg,0,sizeof(smbmsg_t));
-		memcpy(msg.hdr.id,"SHD\x1a",4);
-		msg.hdr.version=smb_ver();
-		msg.hdr.when_written.time=time(NULL);
-    
-		msg.hdr.offset=offset;
-
-		strcpy(str,"SBL");
-		i=smb_hfield(&msg,RECIPIENT,(ushort)strlen(str),str);
-		if(i) {
-			printf("smb_hfield returned %d\n",i);
-			smb_freemsgdat(&smb,offset,length,1);
-			exit(1); }
-		strlwr(str);
-		msg.idx.to=crc16(str);
-
-		strcpy(str,bbs.user);
-		i=smb_hfield(&msg,SENDER,(ushort)strlen(str),str);
-		if(i) {
-			printf("smb_hfield returned %d\n",i);
-			smb_freemsgdat(&smb,offset,length,1);
-			exit(1); }
-		strlwr(str);
-		msg.idx.from=crc16(str);
-
-		strcpy(str,bbs.name);
-		i=smb_hfield(&msg,SUBJECT,(ushort)strlen(str),str);
-		if(i) {
-			printf("smb_hfield returned %d\n",i);
-			smb_freemsgdat(&smb,offset,length,1);
-			exit(1); }
-		strlwr(str);
-		msg.idx.subj=crc16(str);
-
-		i=smb_dfield(&msg,TEXT_BODY,length);
-		if(i) {
-			printf("smb_dfield returned %d\n",i);
-			smb_freemsgdat(&smb,offset,length,1);
-			exit(1); }
-
-		i=smb_addmsghdr(&smb,&msg,smb.status.attr&SMB_HYPERALLOC);
-		if(i) {
-			printf("smb_addmsghdr returned %d\n",i);
-			smb_freemsgdat(&smb,offset,length,1);
-			exit(1); }
-		smb_freemsgmem(&msg); }
-	return(0);
-}
-
-/* End of SBL2SMB.C */
diff --git a/xtrn/sbl/sbl2smb.dsp b/xtrn/sbl/sbl2smb.dsp
deleted file mode 100644
index 6af82f5bc1..0000000000
--- a/xtrn/sbl/sbl2smb.dsp
+++ /dev/null
@@ -1,96 +0,0 @@
-# Microsoft Developer Studio Project File - Name="sbl2smb" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=sbl2smb - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "sbl2smb.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "sbl2smb.mak" CFG="sbl2smb - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "sbl2smb - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "sbl2smb - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "sbl2smb - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "win32"
-# PROP Intermediate_Dir "msvc.win32.release"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /W3 /GX /O2 /I "c:\src\sbbs3" /I "..\sdk" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib  kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib  kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-
-!ELSEIF  "$(CFG)" == "sbl2smb - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "sbl2smb___Win32_Debug"
-# PROP BASE Intermediate_Dir "sbl2smb___Win32_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "win32"
-# PROP Intermediate_Dir "msvc.win32.debug"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ  /c
-# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "c:\src\sbbs3" /I "..\sdk" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ  /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib  kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib  kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-
-!ENDIF 
-
-# Begin Target
-
-# Name "sbl2smb - Win32 Release"
-# Name "sbl2smb - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\sbl2smb.c
-# End Source File
-# Begin Source File
-
-SOURCE=C:\src\sbbs3\smblib.c
-# End Source File
-# Begin Source File
-
-SOURCE=C:\src\sbbs3\smbwrap.c
-# End Source File
-# End Target
-# End Project
diff --git a/xtrn/sbl/sbl2txt.c b/xtrn/sbl/sbl2txt.c
deleted file mode 100644
index 8dd55531a0..0000000000
--- a/xtrn/sbl/sbl2txt.c
+++ /dev/null
@@ -1,190 +0,0 @@
-/* SBL2TXT.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/* Converts Synchronet BBS List (SBL.DAB) to text file */
-
-#include "xsdk.h"
-#include "sbldefs.h"
-
-char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
-char *mon[]={"Jan","Feb","Mar","Apr","May","Jun"
-            ,"Jul","Aug","Sep","Oct","Nov","Dec"};
-char *nulstr="";
-char tmp[256];
-struct date date;
-struct time curtime;
-
-extern int daylight=0;
-extern long timezone=0L;
-
-/****************************************************************************/
-/* Generates a 24 character ASCII string that represents the time_t pointer */
-/* Used as a replacement for ctime()										*/
-/****************************************************************************/
-char *timestr(time_t *intime)
-{
-	static char str[256];
-    char mer[3],hour;
-    struct tm *gm;
-
-gm=localtime(intime);
-if(gm->tm_hour>=12) {
-    if(gm->tm_hour==12)
-        hour=12;
-    else
-        hour=gm->tm_hour-12;
-    strcpy(mer,"pm"); }
-else {
-    if(gm->tm_hour==0)
-        hour=12;
-    else
-        hour=gm->tm_hour;
-    strcpy(mer,"am"); }
-sprintf(str,"%s %s %02d %4d %02d:%02d %s"
-    ,wday[gm->tm_wday],mon[gm->tm_mon],gm->tm_mday,gm->tm_year%100
-    ,hour,gm->tm_min,mer);
-return(str);
-}
-
-/****************************************************************************/
-/* Converts unix time format (long - time_t) into a char str MM/DD/YY		*/
-/****************************************************************************/
-char *unixtodstr(time_t unix, char *str)
-{
-
-if(!unix)
-	strcpy(str,"00/00/00");
-else {
-	unixtodos(unix,&date,&curtime);
-	if((unsigned)date.da_mon>12) {	  /* DOS leap year bug */
-		date.da_mon=1;
-		date.da_year++; }
-	if((unsigned)date.da_day>31)
-		date.da_day=1;
-	sprintf(str,"%02u/%02u/%02u",date.da_mon,date.da_day
-		,date.da_year>=2000 ? date.da_year-2000 : date.da_year-1900); }
-return(str);
-}
-
-
-void long_bbs_info(FILE *out, bbs_t bbs)
-{
-	int i;
-
-fprintf(out,"BBS Name: %s since %s\r\n"
-	,bbs.name,unixtodstr(bbs.birth,tmp));
-fprintf(out,"Operator: ");
-for(i=0;i<bbs.total_sysops;i++) {
-	if(i) {
-		if(bbs.total_sysops>2)
-			fprintf(out,", ");
-		else
-			fputc(SP,out);
-		if(!(i%4))
-			fprintf(out,"\r\n          ");
-		if(i+1==bbs.total_sysops)
-			fprintf(out,"and "); }
-	fprintf(out,"%s",bbs.sysop[i]); }
-fprintf(out,"\r\n");
-fprintf(out,"Software: %-15.15s Nodes: %-5u "
-	"Users: %-5u Doors: %u\r\n"
-	,bbs.software,bbs.nodes,bbs.users,bbs.xtrns);
-fprintf(out,"Download: %lu files in %u directories of "
-	"%luMB total space\r\n"
-	,bbs.files,bbs.dirs,bbs.megs);
-fprintf(out,"Messages: %lu messages in %u sub-boards\r\n"
-	,bbs.msgs,bbs.subs);
-fprintf(out,"Networks: ");
-for(i=0;i<bbs.total_networks;i++) {
-	if(i) {
-		if(bbs.total_networks>2)
-			fprintf(out,", ");
-		else
-			fputc(SP,out);
-		if(!(i%3))
-			fprintf(out,"\r\n          ");
-		if(i+1==bbs.total_networks)
-			fprintf(out,"and "); }
-	fprintf(out,"%s [%s]",bbs.network[i],bbs.address[i]); }
-fprintf(out,"\r\n");
-fprintf(out,"Terminal: ");
-for(i=0;i<bbs.total_terminals;i++) {
-	if(i) {
-		if(bbs.total_terminals>2)
-			fprintf(out,", ");
-		else
-			fputc(SP,out);
-		if(i+1==bbs.total_terminals)
-			fprintf(out,"and "); }
-	fprintf(out,"%s",bbs.terminal[i]); }
-fprintf(out,"\r\n\r\n");
-for(i=0;i<bbs.total_numbers;i++)
-	fprintf(out,"%-30.30s %12.12s %5u %-15.15s "
-		"Minimum: %u\r\n"
-		,i && !strcmp(bbs.number[i].modem.location,bbs.number[i-1].modem.location)
-			? nulstr : bbs.number[i].modem.location
-		,bbs.number[i].modem.number
-		,bbs.number[i].modem.max_rate
-		,bbs.number[i].modem.desc
-		,bbs.number[i].modem.min_rate);
-
-fprintf(out,"\r\n");
-for(i=0;i<5;i++) {
-	if(!bbs.desc[i][0])
-		break;
-	fprintf(out,"%15s%s\r\n",nulstr,bbs.desc[i]); }
-
-fprintf(out,"\r\n");
-fprintf(out,"Entry created on %s by %s\r\n"
-	,timestr(&bbs.created),bbs.user);
-fprintf(out," Last updated on %s\r\n\r\n",timestr(&bbs.updated));
-}
-
-
-void main(int argc, char **argv)
-{
-	char	software[16]="";
-	char	telnet_port[16];
-	int i,in;
-	FILE *out;
-	bbs_t bbs;
-
-for(i=1;i<argc;i++)
-	if(argv[i][0]=='s' && argv[i][1]=='=')
-		sprintf(software,"%.15s",argv[i]+2);
-
-if((in=open("SBL.DAB",O_RDONLY|O_BINARY))==-1) {
-	printf("error opening SBL.DAB\n");
-	return; }
-
-if((out=fopen("SBL.TXT","wb"))==NULL) {
-	printf("error opening/creating SBL.TXT\n");
-	return; }
-
-while(!eof(in)) {
-	read(in,&bbs,sizeof(bbs_t));
-	if(!bbs.name[0])
-		continue;
-	if(software[0] && strnicmp(bbs.software,software,strlen(software)))
-		continue;
-	// long_bbs_info(out,bbs);
-	for(i=0;i<bbs.total_numbers;i++)
-		if(bbs.number[i].modem.min_rate==0xffff) {
-			if(bbs.number[i].telnet.port && bbs.number[i].telnet.port!=23)
-				sprintf(telnet_port,":%u",bbs.number[i].telnet.port);
-			else
-				telnet_port[0]=0;
-			fprintf(out,"%-25.25s  telnet://%s%s\r\n"
-					,bbs.name
-					,bbs.number[i].telnet.addr
-					,telnet_port);
-		} else
-			fprintf(out,"%-25.25s  %12.12s  %5u  %s\r\n"
-				,bbs.name,bbs.number[i].modem.number
-				,bbs.number[i].modem.max_rate
-				,bbs.number[i].modem.desc);
-	}
-close(in);
-fclose(out);
-}
diff --git a/xtrn/sbl/sbldefs.h b/xtrn/sbl/sbldefs.h
deleted file mode 100644
index ae1b7e25e4..0000000000
--- a/xtrn/sbl/sbldefs.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/* sbldefs.h */
-
-/* Synchronet BBS List Macros, constants, and type definitions */
-
-/* $Id$ */
-
-/****************************************************************************
- * @format.tab-size 4		(Plain Text/Source Code File Header)			*
- * @format.use-tabs true	(see http://www.synchro.net/ptsc_hdr.html)		*
- *																			*
- * Copyright 2000 Rob Swindell - http://www.synchro.net/copyright.html		*
- *																			*
- * This program is free software; you can redistribute it and/or			*
- * modify it under the terms of the GNU General Public License				*
- * as published by the Free Software Foundation; either version 2			*
- * of the License, or (at your option) any later version.					*
- * See the GNU General Public License for more details: gpl.txt or			*
- * http://www.fsf.org/copyleft/gpl.html										*
- *																			*
- * Anonymous FTP access to the most recent released source is available at	*
- * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net	*
- *																			*
- * Anonymous CVS access to the development source and modification history	*
- * is available at cvs.synchro.net:/cvsroot/sbbs, example:					*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs login			*
- *     (just hit return, no password is necessary)							*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs checkout src		*
- *																			*
- * For Synchronet coding style and modification guidelines, see				*
- * http://www.synchro.net/source.html										*
- *																			*
- * You are encouraged to submit any modifications (preferably in Unix diff	*
- * format) via e-mail to mods@synchro.net									*
- *																			*
- * Note: If this box doesn't appear square, then you need to fix your tabs.	*
- ****************************************************************************/
-
-#define MAX_SYSOPS  5
-#define MAX_NUMBERS 20
-#define MAX_NETS	10
-#define MAX_TERMS	5
-#define DESC_LINES	5
-#define DEF_LIST_FMT "NSTP"
-
-#ifndef IPPORT_TELNET
-#define IPPORT_TELNET 23
-#endif
-
-#define Y2K_2DIGIT_WINDOW	70
-
-/* Misc bits */
-
-#define FROM_SMB	(1L<<0) 	/* BBS info imported from message base */
-
-#ifdef _WIN32	/* necessary for compatibility with SBL */
-#pragma pack(push)
-#pragma pack(1)
-#endif
-
-typedef union _PACK {
-
-		struct {
-			char	number[13]; 		/* Phone number */
-			char	desc[16];			/* Modem description */
-			char	location[31];		/* Location of phone number */
-			ushort	min_rate;			/* Minimum connect rate */
-			ushort	max_rate;			/* Maximum connect rate */
-		} modem;
-
-		struct {
-			char	addr[29];			/* Telnet address */
-			char	location[31];		/* Location  */
-			ushort	unused;				/* 0xffff */
-			ushort	port;				/* TCP port number */
-		} telnet;
-
-} number_t;
-
-typedef struct _PACK {
-	char	 name[26]					/* System name */
-			,user[26]					/* User who created entry */
-			,software[16]				/* BBS software */
-			,total_sysops
-			,sysop[MAX_SYSOPS][26]		/* Sysop names */
-			,total_numbers
-			,total_networks
-			,network[MAX_NETS][16]		/* Network names */
-			,address[MAX_NETS][26]		/* Network addresses */
-			,total_terminals
-			,terminal[MAX_TERMS][16]	/* Terminals supported */
-			,desc[DESC_LINES][51]		/* 5 line description */
-			;
-	ushort	 nodes						/* Total nodes */
-			,users						/* Total users */
-			,subs						/* Total sub-boards */
-			,dirs						/* Total file dirs */
-			,xtrns						/* Total external programs */
-			;
-	time_t	 created					/* Time/date entry was created */
-			,updated					/* Time/date last updated */
-			,birth						/* Birthdate of BBS */
-			;
-	ulong	 megs						/* Storage space in megabytes */
-			,msgs						/* Total messages */
-			,files						/* Total files */
-			,misc						/* Miscellaneous bits */
-			;
-	number_t number[MAX_NUMBERS];		/* Access numbers */
-
-	char	userupdated[26];			/* User who last updated */
-	time_t	verified;					/* Time/Date last vouched for */
-	char	userverified[26];			/* User who last vouched */
-	char	web_url[61];				/* Web-site address */
-	char	sysop_email[61];			/* Sysop's e-mail address */
-	time_t	exported;					/* Date last exported to SMB */
-	ulong	verification_count;			/* Number of successful auto-verifications */
-	ulong	verification_attempts;		/* Number of auto-verification attempts */
-	char	unused[310];				/* Unused space */
-} bbs_t;
-
-#ifdef _WIN32
-#pragma pack(pop)		/* original packing */
-#endif
-
-
-
-/* End of SBL.H */
-
diff --git a/xtrn/sbl/sblpack.c b/xtrn/sbl/sblpack.c
deleted file mode 100644
index 4e31ce01b5..0000000000
--- a/xtrn/sbl/sblpack.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* SBLPACK.C */
-
-/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
-
-/***************************************/
-/* Synchronet BBS List Database Packer */
-/***************************************/
-
-#include <stdio.h>
-#include <stdlib.h>		/* exit() */
-#include <share.h>
-#include <time.h>
-#include <io.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-#include "xsdkwrap.h"	/* PLATFORM_DESC */
-#include "xsdkdefs.h"
-#include "sbldefs.h"
-
-int main(void)
-{
-	int		file;
-	FILE *	in;
-	FILE *	out;
-	bbs_t	bbs;
-	ulong	records=0;
-	ulong	deleted=0;
-
-	printf("\nSBLPACK v1.10/%s  Developed 1995-2001 Rob Swindell\n\n"
-		,PLATFORM_DESC);
-
-	if((file=sopen("sbl.dab",O_RDWR|O_BINARY,SH_DENYNO))==-1) {
-		printf("\n\7Error opening/creating sbl.dab\n");
-		exit(1); }
-	if((in=fdopen(file,"w+b"))==NULL) {
-		printf("\n\7Error converting sbl.dab file handle to stream\n");
-		exit(1); }
-	setvbuf(in,0L,_IOFBF,2048);
-	if((out=fopen("sbl.tmp","wb"))==NULL) {
-		printf("\n\7Error opening sbl.tmp file\n");
-		exit(1); }
-
-	while(!feof(in)) {
-		if(!fread(&bbs,sizeof(bbs_t),1,in))
-			break;
-		records++;
-		putchar('.');
-		if(bbs.name[0]==0 
-			|| bbs.user[0]==0
-			|| bbs.total_numbers<1) {
-			deleted++;
-			continue;
-		}
-		fwrite(&bbs,sizeof(bbs_t),1,out); 
-	}
-	fcloseall();
-	putchar('\n');
-	if(remove("sbl.dab")) {
-		printf("\n\7Data file in use, can't remove.\n");
-		remove("sbl.tmp");
-		exit(1); 
-	}
-	rename("sbl.tmp","sbl.dab");
-	printf("\nDone.\n");
-	printf("\n%lu records in original file, %lu deleted (packed), new total = %lu.\n"
-		,records,deleted,records-deleted);
-	return(0);
-}
-
diff --git a/xtrn/sbl/sblpack.dsp b/xtrn/sbl/sblpack.dsp
deleted file mode 100644
index 6881368d1f..0000000000
--- a/xtrn/sbl/sblpack.dsp
+++ /dev/null
@@ -1,89 +0,0 @@
-# Microsoft Developer Studio Project File - Name="sblpack" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=sblpack - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "sblpack.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "sblpack.mak" CFG="sblpack - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "sblpack - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "sblpack - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "sblpack - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "win32"
-# PROP Intermediate_Dir "msvc.win32.release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /W3 /GX /O2 /I "..\sdk" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-
-!ELSEIF  "$(CFG)" == "sblpack - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "sblpack___Win32_Debug"
-# PROP BASE Intermediate_Dir "sblpack___Win32_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\sdk" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-
-!ENDIF 
-
-# Begin Target
-
-# Name "sblpack - Win32 Release"
-# Name "sblpack - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\sblpack.c
-# End Source File
-# End Target
-# End Project
diff --git a/xtrn/sbl/smb2sbl.c b/xtrn/sbl/smb2sbl.c
deleted file mode 100644
index 4d33de6d03..0000000000
--- a/xtrn/sbl/smb2sbl.c
+++ /dev/null
@@ -1,521 +0,0 @@
-/* smb2sbl.c */
-
-/* Scans SMB message base for messages to "SBL" and adds them to the SBL    */
-
-/* $Id$ */
-
-/****************************************************************************
- * @format.tab-size 4		(Plain Text/Source Code File Header)			*
- * @format.use-tabs true	(see http://www.synchro.net/ptsc_hdr.html)		*
- *																			*
- * Copyright 2000 Rob Swindell - http://www.synchro.net/copyright.html		*
- *																			*
- * This program is free software; you can redistribute it and/or			*
- * modify it under the terms of the GNU General Public License				*
- * as published by the Free Software Foundation; either version 2			*
- * of the License, or (at your option) any later version.					*
- * See the GNU General Public License for more details: gpl.txt or			*
- * http://www.fsf.org/copyleft/gpl.html										*
- *																			*
- * Anonymous FTP access to the most recent released source is available at	*
- * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net	*
- *																			*
- * Anonymous CVS access to the development source and modification history	*
- * is available at cvs.synchro.net:/cvsroot/sbbs, example:					*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs login			*
- *     (just hit return, no password is necessary)							*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs checkout xtrn	*
- *																			*
- * For Synchronet coding style and modification guidelines, see				*
- * http://www.synchro.net/source.html										*
- *																			*
- * You are encouraged to submit any modifications (preferably in Unix diff	*
- * format) via e-mail to mods@synchro.net									*
- *																			*
- * Note: If this box doesn't appear square, then you need to fix your tabs.	*
- ****************************************************************************/
-
-#define  uint unsigned int
-
-/* #include <dos.h> */
-#include <stdio.h>
-#include <time.h>
-#include <io.h>			/* open */
-#include <fcntl.h>		/* O_RDWR */
-#include <sys/stat.h>	/* S_IWRITE */
-#include <ctype.h>		/* isdigit */
-#include <stdlib.h>		/* atoi */
-#ifndef __FreeBSD__
-	#include <malloc.h>
-#endif
-#include <string.h>
-#include "smblib.h"
-#include "smbwrap.h"	/* fexist/flength */
-#include "sbldefs.h"
-#include "xsdkwrap.h"	/* PLATFORM_DESC */
-
-#define VERSION "2.20/" PLATFORM_DESC
-
-extern int	daylight=0;
-extern long timezone=0L;
-smb_t		smb;
-
-char *loadmsgtxt(smbmsg_t msg, int tails)
-{
-	char	*buf=NULL,*lzhbuf;
-	ushort	xlat;
-	int 	i,lzh;
-	long	l=0,lzhlen,length;
-
-for(i=0;i<msg.hdr.total_dfields;i++) {
-	if(!(msg.dfield[i].type==TEXT_BODY
-		|| (tails && msg.dfield[i].type==TEXT_TAIL)))
-		continue;
-	fseek(smb.sdt_fp,msg.hdr.offset+msg.dfield[i].offset
-		,SEEK_SET);
-	fread(&xlat,2,1,smb.sdt_fp);
-	lzh=0;
-	if(xlat==XLAT_LZH) {
-		lzh=1;
-		fread(&xlat,2,1,smb.sdt_fp); }
-	if(xlat!=XLAT_NONE) 		/* no other translations supported */
-		continue;
-
-	length=msg.dfield[i].length-2;
-	if(lzh) {
-		length-=2;
-		if((lzhbuf=MALLOC(length))==NULL) {
-			printf("ERR_ALLOC lzhbuf of %lu\n",length);
-			return(buf); }
-		fread(lzhbuf,1,length,smb.sdt_fp);
-		lzhlen=*(long *)lzhbuf;
-		if((buf=REALLOC(buf,l+lzhlen+3))==NULL) {
-			FREE(lzhbuf);
-			printf("ERR_ALLOC lzhoutbuf of %l\n",l+lzhlen+1);
-			return(buf); }
-		lzh_decode(lzhbuf,length,buf+l);
-		FREE(lzhbuf);
-		l+=lzhlen; }
-	else {
-		if((buf=REALLOC(buf,l+msg.dfield[i].length+3))==NULL) {
-			printf("ERR_ALLOC of %lu\n",l+msg.dfield[i].length+1);
-			return(buf); }
-		l+=fread(buf+l,1,length,smb.sdt_fp); }
-	buf[l]=CR;
-	l++;
-	buf[l]=LF;
-	l++;
-	buf[l]=0; }
-return(buf);
-}
-
-
-/***************************************************************************/
-/* Truncates white-space chars off end of 'str' and terminates at first CR  */
-/****************************************************************************/
-void truncsp(char *str)
-{
-	char c;
-
-str[strcspn(str,"\r")]=0;
-c=strlen(str);
-while(c && (uchar)str[c-1]<=SP) c--;
-str[c]=0;
-}
-
-/****************************************************************************/
-/* Converts a date string in format MM/DD/YY into unix time format			*/
-/****************************************************************************/
-time_t dstrtounix(char *instr)
-{
-	char*	p;
-	char*	day;
-	char	str[16];
-	struct tm tm;
-
-	if(!instr[0] || !strncmp(instr,"00/00/00",8))
-		return(0);
-
-	if(isdigit(instr[0]) && isdigit(instr[1])
-		&& isdigit(instr[3]) && isdigit(instr[4])
-		&& isdigit(instr[6]) && isdigit(instr[7]))
-		p=instr;	/* correctly formatted */
-	else {
-		p=instr;	/* incorrectly formatted */
-		while(*p && isdigit(*p)) p++;
-		if(*p==0)
-			return(0);
-		p++;
-		day=p;
-		while(*p && isdigit(*p)) p++;
-		if(*p==0)
-			return(0);
-		p++;
-		sprintf(str,"%02u/%02u/%02u"
-			,atoi(instr)%100,atoi(day)%100,atoi(p)%100);
-		p=str;
-	}
-
-	memset(&tm,0,sizeof(tm));
-	tm.tm_year=((p[6]&0xf)*10)+(p[7]&0xf);
-	if (tm.tm_year<Y2K_2DIGIT_WINDOW)
-		tm.tm_year+=100;
-	tm.tm_mon=((p[0]&0xf)*10)+(p[1]&0xf);
-	tm.tm_mday=((p[3]&0xf)*10)+(p[4]&0xf); 
-	if (tm.tm_mon)
-		tm.tm_mon--;	/* zero-based month field */
-	return(mktime(&tm));
-}
-
-/****************************************************************************/
-/* Updates 16-bit "rcrc" with character 'ch'                                */
-/****************************************************************************/
-void ucrc16(uchar ch, ushort *rcrc) {
-	ushort i, cy;
-    uchar nch=ch;
- 
-for (i=0; i<8; i++) {
-    cy=*rcrc & 0x8000;
-    *rcrc<<=1;
-    if (nch & 0x80) *rcrc |= 1;
-    nch<<=1;
-    if (cy) *rcrc ^= 0x1021; }
-}
-
-/****************************************************************************/
-/* Returns 16-crc of string (not counting terminating NULL) 				*/
-/****************************************************************************/
-ushort crc16(char *str)
-{
-	int 	i=0;
-	ushort	crc=0;
-
-ucrc16(0,&crc);
-while(str[i])
-	ucrc16(str[i++],&crc);
-ucrc16(0,&crc);
-ucrc16(0,&crc);
-return(crc);
-}
-
-time_t checktime()
-{
-	struct tm tm;
-
-memset(&tm,0,sizeof(tm));
-tm.tm_year=94;
-tm.tm_mday=1;
-return(mktime(&tm)^0x2D24BD00L);
-}
-
-int main(int argc, char **argv)
-{
-	uchar	str[128],*buf;
-	int 	i,file,sysop,number,network,terminal,desc;
-	ulong	l,last,high;
-	ushort	sbl;
-	bbs_t	bbs;
-	smbmsg_t msg;
-	FILE	*stream;
-
-	fprintf(stderr,"\nSMB2SBL v%s - Updates SBL via SMB - Developed 1994-2000 "
-		"Rob Swindell\n\n",VERSION);
-
-	if(putenv("TZ=UCT0"))
-		fprintf(stderr,"!putenv() FAILED\n");
-	tzset();
-
-	if(checktime()) {
-		printf("Time problem!\n");
-		return(-1); }
-
-	if(argc<3) {
-		fprintf(stderr,"usage: smb2sbl <smb_file> <sbl.dab>\n\n");
-		fprintf(stderr,"ex: smb2sbl /sbbs/data/subs/syncdata "
-			"/sbbs/xtrn/sbl/sbl.dab\n");
-		return(1); }
-
-	strcpy(smb.file,argv[1]);
-	strupr(smb.file);
-
-	strcpy(str,argv[2]);
-	strupr(str);
-	if((file=sopen(str,O_RDWR|O_BINARY|O_CREAT,SH_DENYNO))==-1) {
-		printf("error opening %s\n",str);
-		return(1); }
-	if((stream=fdopen(file,"r+b"))==NULL) {
-		printf("error fdopening %s\n",str);
-		return(1); }
-	setvbuf(stream,NULL,_IOFBF,4096);
-
-	sprintf(str,"%s.SBL",smb.file);
-	if((file=open(str,O_RDWR|O_BINARY|O_CREAT,S_IWRITE|S_IREAD))==-1) {
-		printf("error opening %s\n",str);
-		return(1); }
-	if(read(file,&last,4)!=4)
-		last=0;
-	high=last;
-
-	sprintf(str,"%s.SHD",smb.file);
-	if(!fexist(str)) {
-		printf("%s doesn't exist\n",smb.file);
-		return(0); }
-	sprintf(str,"%s.SID",smb.file);
-	if(!flength(str)) {
-		printf("%s is empty\n",smb.file);
-		return(0); }
-	fprintf(stderr,"Opening %s\n",smb.file);
-	smb.retry_time=30;
-	if((i=smb_open(&smb))!=0) {
-		printf("smb_open returned %d\n",i);
-		return(1); }
-
-	sbl=crc16("sbl");
-
-	if((i=smb_locksmbhdr(&smb))!=0) {				/* Be sure noone deletes or */
-		printf("Error locking %d\n",i);             /* adds while we're reading */
-		return(1); }
-
-	while(!feof(smb.sid_fp)) {
-		if(!fread(&msg.idx,sizeof(idxrec_t),1,smb.sid_fp))
-			break;
-		fprintf(stderr,"\r%lu  ",msg.idx.number);
-		if(msg.idx.number<=last || msg.idx.to!=sbl)
-			continue;
-		high=msg.idx.number;
-		if((i=smb_lockmsghdr(&smb,&msg))!=0) {
-			printf("\7Error %d locking msg #%lu\n",i,msg.idx.number);
-			continue; }
-		if((i=smb_getmsghdr(&smb,&msg))!=0) {
-			smb_unlockmsghdr(&smb,&msg);
-			printf("\7Error %d reading msg #%lu\n",i,msg.idx.number);
-			continue; }
-		smb_unlockmsghdr(&smb,&msg);
-		if(!msg.from_net.type			/* ignore local message */
-			|| msg.from[0]<=' '			/* corrupted? */
-			|| msg.subj[0]<=' '			/* corrupted */
-			) {
-			smb_freemsgmem(&msg);
-			continue; 
-		}
-
-		printf("\nMessage #%lu by %s on %.24s\n"
-			,msg.hdr.number,msg.from,ctime(&(time_t)msg.hdr.when_written.time));
-
-		truncsp(msg.subj);
-		if(!msg.subj[0]) {
-			smb_freemsgmem(&msg);
-			continue; }
-		fprintf(stderr,"Searching for %s...",msg.subj);
-		fseek(stream,0L,SEEK_SET);
-		memset(&bbs,0,sizeof(bbs_t));
-		while(1) {
-			l=ftell(stream);
-			if(!fread(&bbs,sizeof(bbs_t),1,stream)) {
-				memset(&bbs,0,sizeof(bbs_t));
-				break; }
-			if(msg.subj[0] && !stricmp(bbs.name,msg.subj)) {
-				fseek(stream,l,SEEK_SET);
-				break; } }
-		fprintf(stderr,"\n");
-		if(bbs.name[0] && strnicmp(bbs.user,msg.from,25)) {
-			printf("%s didn't create the entry for %s\n",msg.from,msg.subj);
-			smb_freemsgmem(&msg);
-			continue; }
-		if(!bbs.name[0]) {
-			fprintf(stderr,"Searching for unused record...");
-			fseek(stream,0L,SEEK_SET);
-			while(1) {					/* Find deleted record */
-				l=ftell(stream);
-				if(!fread(&bbs,sizeof(bbs_t),1,stream))
-					break;
-				if(!bbs.name[0]) {
-					fseek(stream,l,SEEK_SET);
-					break; } }
-			fprintf(stderr,"\n");
-			memset(&bbs,0,sizeof(bbs_t));
-			bbs.created=time(NULL);
-			if(!bbs.birth)
-				bbs.birth=bbs.created;
-			sprintf(bbs.user,"%-.25s",msg.from); }
-		sprintf(bbs.name,"%-.25s",msg.subj);
-		bbs.updated=time(NULL);
-		bbs.misc|=FROM_SMB;
-		sprintf(bbs.userupdated,"%-.25s",msg.from);
-		buf=loadmsgtxt(msg,0);
-		sysop=number=network=terminal=desc=0;
-		l=0;
-		while(buf[l]) {
-			while(buf[l] && buf[l]<=SP) 		/* Find first text on line */
-				l++;
-			if(!strnicmp(buf+l,"NAME:",5)) {
-				l+=5;
-				while(buf[l] && buf[l]<=SP && buf[l]!=CR)
-					l++;
-				sprintf(bbs.name,"%-.25s",buf+l);
-				truncsp(bbs.name); }
-			if(!strnicmp(buf+l,"BIRTH:",6)) {
-				l+=6;
-				while(buf[l] && buf[l]<=SP && buf[l]!=CR)
-					l++;
-				bbs.birth=dstrtounix(buf+l); }
-			if(!strnicmp(buf+l,"SOFTWARE:",9)) {
-				l+=9;
-				while(buf[l] && buf[l]<=SP && buf[l]!=CR)
-					l++;
-				sprintf(bbs.software,"%-.15s",buf+l);
-				truncsp(bbs.software); }
-			if(!strnicmp(buf+l,"WEB-SITE:",9)) {
-				l+=9;
-				while(buf[l] && buf[l]<=SP && buf[l]!=CR)
-					l++;
-				sprintf(bbs.web_url,"%-.60s",buf+l);
-				truncsp(bbs.web_url); }
-			if(!strnicmp(buf+l,"E-MAIL:",7)) {
-				l+=7;
-				while(buf[l] && buf[l]<=SP && buf[l]!=CR)
-					l++;
-				sprintf(bbs.sysop_email,"%-.60s",buf+l);
-				truncsp(bbs.sysop_email); }
-
-			if(!strnicmp(buf+l,"SYSOP:",6)) {
-				l+=6;
-				while(buf[l] && buf[l]<=SP && buf[l]!=CR)
-					l++;
-				sprintf(bbs.sysop[sysop],"%-.25s",buf+l);
-				truncsp(bbs.sysop[sysop]);
-				if(sysop<MAX_SYSOPS-1)
-					sysop++; }
-			if(!strnicmp(buf+l,"NUMBER:",7)) {
-				l+=7;
-				while(buf[l] && buf[l]<=SP && buf[l]!=CR)
-					l++;
-				sprintf(bbs.number[number].modem.number,"%-.28s",buf+l);
-				truncsp(bbs.number[number].modem.number);
-				if(number<MAX_NUMBERS-1)
-					number++; }
-			if(!strnicmp(buf+l,"MODEM:",6)) {
-				l+=6;
-				while(buf[l] && buf[l]<=SP && buf[l]!=CR)
-					l++;
-				i=number;
-				if(i) i--;
-				sprintf(bbs.number[i].modem.desc,"%-.15s",buf+l);
-				truncsp(bbs.number[i].modem.desc); }
-			if(!strnicmp(buf+l,"LOCATION:",9)) {
-				l+=9;
-				while(buf[l] && buf[l]<=SP && buf[l]!=CR)
-					l++;
-				i=number;
-				if(i) i--;
-				sprintf(bbs.number[i].modem.location,"%-.30s",buf+l);
-				truncsp(bbs.number[i].modem.location); }
-			if(!strnicmp(buf+l,"MINRATE:",8)) {
-				l+=8;
-				while(buf[l] && buf[l]<=SP && buf[l]!=CR)
-					l++;
-				i=number;
-				if(i) i--;
-				bbs.number[i].modem.min_rate=atoi(buf+l); }
-			if(!strnicmp(buf+l,"MAXRATE:",8)) {
-				l+=8;
-				while(buf[l] && buf[l]<=SP && buf[l]!=CR)
-					l++;
-				i=number;
-				if(i) i--;
-				bbs.number[i].modem.max_rate=atoi(buf+l); }
-			if(!strnicmp(buf+l,"NETWORK:",8)) {
-				l+=8;
-				while(buf[l] && buf[l]<=SP && buf[l]!=CR)
-					l++;
-				sprintf(bbs.network[network],"%-.15s",buf+l);
-				truncsp(bbs.network[network]);
-				if(network<MAX_NETS-1)
-					network++; }
-			if(!strnicmp(buf+l,"ADDRESS:",8)) {
-				l+=8;
-				while(buf[l] && buf[l]<=SP && buf[l]!=CR)
-					l++;
-				i=network;
-				if(i) i--;
-				sprintf(bbs.address[i],"%-.25s",buf+l);
-				truncsp(bbs.address[i]); }
-			if(!strnicmp(buf+l,"TERMINAL:",9)) {
-				l+=9;
-				while(buf[l] && buf[l]<=SP && buf[l]!=CR)
-					l++;
-				sprintf(bbs.terminal[terminal],"%-.15s",buf+l);
-				truncsp(bbs.terminal[terminal]);
-				if(terminal<MAX_TERMS-1)
-					terminal++; }
-			if(!strnicmp(buf+l,"DESC:",5)) {
-				l+=5;
-				while(buf[l] && buf[l]<=SP && buf[l]!=CR)
-					l++;
-				sprintf(bbs.desc[desc],"%-.50s",buf+l);
-				truncsp(bbs.desc[desc]);
-				if(desc<4)
-					desc++; }
-
-			if(!strnicmp(buf+l,"MEGS:",5)) {
-				l+=5;
-				while(buf[l] && buf[l]<=SP && buf[l]!=CR)
-					l++;
-				bbs.megs=atol(buf+l); }
-			if(!strnicmp(buf+l,"MSGS:",5)) {
-				l+=5;
-				while(buf[l] && buf[l]<=SP && buf[l]!=CR)
-					l++;
-				bbs.msgs=atol(buf+l); }
-			if(!strnicmp(buf+l,"FILES:",6)) {
-				l+=6;
-				while(buf[l] && buf[l]<=SP && buf[l]!=CR)
-					l++;
-				bbs.files=atol(buf+l); }
-			if(!strnicmp(buf+l,"NODES:",6)) {
-				l+=6;
-				while(buf[l] && buf[l]<=SP && buf[l]!=CR)
-					l++;
-				bbs.nodes=atoi(buf+l); }
-			if(!strnicmp(buf+l,"USERS:",6)) {
-				l+=6;
-				while(buf[l] && buf[l]<=SP && buf[l]!=CR)
-					l++;
-				bbs.users=atoi(buf+l); }
-			if(!strnicmp(buf+l,"SUBS:",5)) {
-				l+=5;
-				while(buf[l] && buf[l]<=SP && buf[l]!=CR)
-					l++;
-				bbs.subs=atoi(buf+l); }
-			if(!strnicmp(buf+l,"DIRS:",5)) {
-				l+=5;
-				while(buf[l] && buf[l]<=SP && buf[l]!=CR)
-					l++;
-				bbs.dirs=atoi(buf+l); }
-			if(!strnicmp(buf+l,"XTRNS:",6)) {
-				l+=6;
-				while(buf[l] && buf[l]<=SP && buf[l]!=CR)
-					l++;
-				bbs.xtrns=atoi(buf+l); }
-			while(buf[l] && buf[l]>=SP) {	 /* Go to end of line */
-				putchar(buf[l]);
-				l++; }
-			printf("\n"); }
-	//	if(bbs.total_sysops<sysop)
-			bbs.total_sysops=sysop;
-	//	if(bbs.total_networks<network)
-			bbs.total_networks=network;
-	//	if(bbs.total_terminals<terminal)
-			bbs.total_terminals=terminal;
-	//	if(bbs.total_numbers<number)
-			bbs.total_numbers=number;
-		fwrite(&bbs,sizeof(bbs_t),1,stream);
-		FREE(buf);
-		smb_freemsgmem(&msg);
-		}
-	lseek(file,0L,SEEK_SET);
-	write(file,&high,4);
-	close(file);
-	return(0);
-}
-
diff --git a/xtrn/sbl/smb2sbl.dsp b/xtrn/sbl/smb2sbl.dsp
deleted file mode 100644
index c1029cfe2b..0000000000
--- a/xtrn/sbl/smb2sbl.dsp
+++ /dev/null
@@ -1,100 +0,0 @@
-# Microsoft Developer Studio Project File - Name="smb2sbl" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=smb2sbl - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "smb2sbl.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "smb2sbl.mak" CFG="smb2sbl - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "smb2sbl - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "smb2sbl - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "smb2sbl - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "win32"
-# PROP Intermediate_Dir "msvc.win32.release"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /W3 /GX /O2 /I "c:\src\sbbs3" /I "..\sdk" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-
-!ELSEIF  "$(CFG)" == "smb2sbl - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "win32"
-# PROP Intermediate_Dir "msvc.win32.debug"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "c:\src\sbbs3" /I "..\sdk" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-
-!ENDIF 
-
-# Begin Target
-
-# Name "smb2sbl - Win32 Release"
-# Name "smb2sbl - Win32 Debug"
-# Begin Source File
-
-SOURCE=C:\src\sbbs3\lzh.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\smb2sbl.c
-# End Source File
-# Begin Source File
-
-SOURCE=C:\src\sbbs3\smblib.c
-# End Source File
-# Begin Source File
-
-SOURCE=C:\src\sbbs3\smbwrap.c
-# End Source File
-# End Target
-# End Project
diff --git a/xtrn/sbl/sysop.txt b/xtrn/sbl/sysop.txt
deleted file mode 100644
index d3351eaf0a..0000000000
--- a/xtrn/sbl/sysop.txt
+++ /dev/null
@@ -1,139 +0,0 @@
-Synchronet BBS List Sysop Information
-=====================================
-
-This list is created and distributed every Monday. It is exported from the
-online BBS List database on Vertrauen and distributed via the SYNCMAIN FidoNet
-filebone file echo as SBBSLIST.ZIP.
-
-If you are a sysop of a Synchronet BBS and would like to have your BBS included
-in future versions of this list, do any one of the following:
-
-	o  Call Vertrauen at 714-529-9525 and use the Synchronet BBS List
-	   (external program) to add your system information.
-
-	o  See \SBBS\XTRN\SBL\SBL.DOC for instructions on networking your SBL
-	   database (v1.32+) with Vertrauen through DOVE-Net or  FidoNet.
-
-	o  Post a message on the Synchronet Data echo (via DOVE-Net or the
-	   SYNCDATA echo on FidoNet backbone) in the following format:
-
-To:		SBL
-Subj:		bbs name
-
-Body Text:
-------------------------------------------------------------------------------
-Name:		bbs name		(max length: 25)
-Birth:		MM/DD/YY		(first day online)
-Sysop:		your name		(max length: 25)
-Sysop:		co-sysop		(up to 5 sysops)
-Software:	Synchronet
-
-Desc:		description		(max length: 50)
-Desc:		more description	(up to 5 description lines)
-
-Nodes:		number of nodes 	(numbers only)
-Megs:		megabytes of storage	(numbers only)
-Users:		number of users 	(numbers only)
-Subs:		message areas		(numbers only)
-Msgs:		total messages		(numbers only)
-Dirs:		file directories	(numbers only)
-Files:		total files online	(numbers only)
-Xtrns:		externals (doors)	(numbers only)
-
-Network:	name of network 	(max length: 15)
-Address:	network address 	(max length: 25)
-Network:	another network 	(up to 10 networks)
-Address:	another address
-
-Terminal:	supported terminnal	(max length: 15)
-Terminal:	another terminal	(up to 5 terminals)
-
-Number: 	phone number		(max length: 12)
-Location:	city, state		(max length: 30)
-Modem:		modem description	(max length: 15)
-MaxRate:	maximum connect rate	(numbers only)
-MinRate:	minimum connect rate	(numbers only)
-					(up to 20 phone numbers)
--------------------------------------------------------------------------------
-
-The message must be posted to "SBL". If updating an existing entry, the message
-must be posted by the person who created the original entry. The title
-(subject) must be your BBS name. If changing the BBS name, the title must be
-the original name, and "NAME:" must be specified in the body text.
-
-All entry fields are optional. Only one field can be specified per line. The
-amount of whitespace between the colon and the data is irrelevant. All lines
-that do not begin with a valid field name and colon (like these) are ignored.
-Field names are not case sensitive (e.g. NAME: and Name: are equivalent).
-The order of the entry fields in the body text is not significant.
-
-Entries must be updated at least once every 90 days or they are automatically
-deleted. If you wish to delete your entry, send a message to SBL with the BBS
-name in the title and include a blank "Name:" field.
-
-If you want to just update an entry (to keep it from being auto-deleted), you
-do not have to specify any fields in the body text. But, it is suggested that
-you re-post all of your fields for all updates so that any new systems that are
-"watching" this sub-board can add your complete entry to their list.
-
-Up to 20 phone numbers can be specified. The number is limited to 12
-characters (so please use AAA-PPP-SSSS format), location is limited to 30
-characters, and modem description is limited to 15 characters. Do NOT put
-38400 or 57600 for maximum connect rate (MaxRate), as such standards do not
-yet exist.
-
-For all numeric files (noted as: "numbers only"), do not use commas, symbols,
-or letters. A MaxRate of 14,400bps must be specified as "14400".
-
-An example of a valid BBS post body text:
--------------------------------------------------------------------------------
-Name:		Vertrauen
-Birth:		08/01/88
-Software:	Synchronet
-Sysop: 		Digital Man
-Sysop: 		Ille Homine Albe
-
-Desc:		Home of Synchronet Multinode BBS Software
-
-Nodes:		6
-Megs: 		1800
-Users: 		1600
-Subs:		100
-Msgs:		45000
-Dirs:		150
-Files:		7000
-Xtrns:		10
-
-Network:	FidoNet
-Address:	1:103/705
-Network:	RIME
-Address:	5115
-Network:	DOVE-Net
-Address:	VERT
-
-Terminal:	TTY
-Terminal:	ANSI
-Terminal:	RIP
-
-Number: 	714-529-9525
-Location: 	Yorba Linda, Ca
-Modem: 		V.32bis
-MaxRate: 	14400
-MinRate:	300
-
-Number: 	714-529-9547
-Location: 	Yorba Linda, Ca
-Modem: 		V.FC
-MaxRate: 	28800
-MinRate:	16800
-
-Number: 	714-529-9721
-Location: 	Yorba Linda, Ca
-Modem: 		ZyXEL
-MaxRate: 	19200
-MinRate:        16800
--------------------------------------------------------------------------------
-
-Rob Swindell, Digital Dynamics
-(Keeper of the Synchronet BBS List)
-
diff --git a/xtrn/scb/instruct.msg b/xtrn/scb/instruct.msg
deleted file mode 100644
index 26b95fdb36..0000000000
--- a/xtrn/scb/instruct.msg
+++ /dev/null
@@ -1,22 +0,0 @@
-l                              chSynchronet Callback
-
-	ngWhen you continue the automatic validation process, chSynchronet Callback
-(SCB) ngwill ask you for your phone number.  This rhMUSTng be the phone number that 
-your modem is connected to and it must contain all of the digits necessary for
-chSCBng to call you back (including a '1' and area code if necessary).
-
-	If you choose not to continue with the validation process, answer hNOng
-to the 'hContinue with verification?ng' question that chSCBng will ask you next.
-
-	After you have entered an hACCEPTABLEng phone number, chSCBng will display a
-short message, and call you back.  When your phone rings you will need to
-answer it with your modem.  You should see a 'hRINGng' appear on your screen
-(and you may also hear your phone ring if one is connected to the same line as
-your modem), when this happens, you will need to type 'hATAng' and press hENTERng.
-rhDO NOTng answer the phone by voice!
-
-	The modems will then connect, and you will be given several chances to
-enter your correct password.  Once you have entered the hCORRECTng password, chSCBng
-will display a short message notifying you of this, validate your account,
-and then disconnect.  If you enter your password hINCORRECTLYng, chSCBng will rhNOTng
-validate your account.
diff --git a/xtrn/scb/ld_time.msg b/xtrn/scb/ld_time.msg
deleted file mode 100644
index cee29fdbf3..0000000000
--- a/xtrn/scb/ld_time.msg
+++ /dev/null
@@ -1 +0,0 @@
-Please try again later. 
diff --git a/xtrn/scb/no_one.msg b/xtrn/scb/no_one.msg
deleted file mode 100644
index 6d72f2a2f9..0000000000
--- a/xtrn/scb/no_one.msg
+++ /dev/null
@@ -1 +0,0 @@
-Phone numbers beginning with '1' are not allowed.
diff --git a/xtrn/scb/no_zero.msg b/xtrn/scb/no_zero.msg
deleted file mode 100644
index 2905d1f464..0000000000
--- a/xtrn/scb/no_zero.msg
+++ /dev/null
@@ -1,2 +0,0 @@
-Phone numbers beginning with '0' are not allowed.
- 
\ No newline at end of file
diff --git a/xtrn/scb/phonecan.msg b/xtrn/scb/phonecan.msg
deleted file mode 100644
index 66ddf7f9f7..0000000000
--- a/xtrn/scb/phonecan.msg
+++ /dev/null
@@ -1,2 +0,0 @@
-The number you entered was found in a list of invalid or previously verified
-numbers.
diff --git a/xtrn/scb/refused.msg b/xtrn/scb/refused.msg
deleted file mode 100644
index 9b984fd684..0000000000
--- a/xtrn/scb/refused.msg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-	ngYou have chosen to refuse the callback verification process.  As a
-result, you may not be given access to the BBS.  If you intend to gain access
-to the system, you may wish to leave a note to the Sysop explaining that you
-refused the callback verification, and your reasons for doing so, as well as
-a number where you CAN be called at.
-
diff --git a/xtrn/scb/scb.cfg b/xtrn/scb/scb.cfg
deleted file mode 100644
index e8672699ba..0000000000
--- a/xtrn/scb/scb.cfg
+++ /dev/null
@@ -1,32 +0,0 @@
-5
-NYNNNNNN
-\SBBS\TEXT\PHONE.CAN
-\SBBS\TEXT\PHONE.CAN
-
-
-
-
-
-
-
-
-
-
-
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-7
-11
-
diff --git a/xtrn/scb/scb.doc b/xtrn/scb/scb.doc
deleted file mode 100644
index 878b3e6983..0000000000
--- a/xtrn/scb/scb.doc
+++ /dev/null
@@ -1,329 +0,0 @@
-	   Synchronet Callback v1.32   Copyright 1995 Digital Dynamics
-	   -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-
-      Callback Verification Program for Synchronet Multinode BBS Software
-
-
-Installation:
-============
-
- 1. Create a directory called "SCB" off of your Synchronet XTRN directory.
-
-	Example:
-
-		MD C:\SBBS\XTRN\SCB
-
- 2. Copy all SCB files into this new directory.
-
-	Example:
-
-		COPY *.* C:\SBBS\XTRN\SCB
-
-	Note, SCB files include:
-
-		SCB.DOC 	This file
-		ORDER.TXT	Purchase order form
-		SCB.EXE 	Callback verifier external program
-		SCBCFG.EXE	Sysop configuration program for SCB
-		ALLOWED.DAT	List of allowable number prefixes
-		LDPREFIX.DAT	List of same-area prefixes that are long dist
-		SCB.MSG 	The opening screen for SCB
-		REFUSED.MSG	Verification refused
-		INSTRUCT.MSG	Instructions
-		NO_ONE.MSG	Long distance starting with 1 not allowed
-		NO_ZERO.MSG	Long distance starting with 0 not allowed
-		NO_LD.MSG	Long distance in same area code not allowed
-		LD_TIME.MSG	Not within long distance callback time range
-		TOOSHORT.MSG	Phone number less than minimum number of digits
-		TOOLONG.MSG	Phone number more than maximum number of digits
-		PHONECAN.MSG	Phone number found in trash can file
-		VERIFIED.MSG	Displayed to users after verification
-
- 3. Run SCFG from your NODE1 directory.
-
- 4. Go to the External Programs->Online Programs menu.
-
- 5. Hit the <INSERT> key and enter "Synchronet Callback".
-
- 6. Hit <ENTER> to edit the configuration for this new program.
-
- 7. Set the "Start-up Directory" to "..\XTRN\SCB".
-
- 8. Set "Multiuser" to "Yes".
-
- 9. Set "Modify Uesr Data" to "Yes".
-
-10. Set "BBS Drop File Type" to "Synchronet XTRN.DAT"
-
-11. If you wish to have SCB run automatically for new users or as a logon
-    event for unvalidated users, set the "Execute on Event" option to the
-    appropriate event type. Use "Access Requirements" if you wish SCB to be
-    only available to unvalidated users (i.e. "LEVEL NOT 20").
-
-Example SCFG screen:
-
-	�[�][?]���������������������������������������������������ͻ
-	�		     Synchronet Callback		   �
-	����������������������������������������������������������͹
-	� �Name 		      Synchronet Callback	   �
-	� �Internal Code	      SCB			   �
-	� �Start-up Directory	      ..\XTRN\SCB		   �
-	� �Command Line 	      scb			   �
-	� �Clean-up Command Line				   �
-	� �Cost in Credits	      0 			   �
-	� �Access Requirements	      LEVEL NOT 20		   �
-	� �Execution Requirements				   �
-	� �Multiple Concurrent Users  Yes			   �
-	� �Intercept I/O Interrupts   No			   �
-	� �Swap BBS out of Memory     No			   �
-	� �Modify User Data	      Yes			   �
-	� �Execute on Event	      Logon			   �
-	� �BBS Drop File Type	      Synchronet      XTRN.DAT	   �
-	� �Place Drop File In	      Node Directory		   �
-	����������������������������������������������������������ͼ
-
-
-Configuration:
-=============
-
- 1. Go into your SCB directory and run SCBCFG.
-
-	Example:
-
-		CD \SBBS\XTRN\SCB
-		SCBCFG
-
-    You will see a menu similar to the following:
-
-	�[�][?]���������������������������������������������������ͻ
-	�	      Synchronet Callback Configuration 	   �
-	����������������������������������������������������������͹
-	� �Toggle Options...					   �
-	� �Validation Values... 				   �
-	� �Allowed Prefix List...				   �
-	� �Long Distance Prefix List... 			   �
-	� �Long Distance Calling Times...			   �
-	� �Phone Number Trash Can   \SBBS\TEXT\PHONE.CAN	   �
-	� �Validated Phone List     \SBBS\TEXT\PHONE.CAN	   �
-	� �Callback Attempts	    4				   �
-	� �Minimum Phone Length     7				   �
-	� �Maximum Phone Length     11				   �
-	� �BBS Area Code	    714 			   �
-	� �Send Message to Sysop    User #1			   �
-	� �Registration Number	    UNREGISTERED		   �
-	����������������������������������������������������������ͼ
-
- 2. If your Synchronet text directory is in a directory or drive other
-    than "\SBBS\TEXT", change the Phone Can and Validated Phone List options
-    to reflect the correct location of your PHONE.CAN file.
-
-    If you want to allow duplicate validated phone numbers, change the
-    Validated Phone List to another path and/or filename. If left blank,
-    the validated phone numbers will not be written to a file at all
-    (other than the SCB.LOG and possibly the user data).
-
-    The phone number list(s) use the same syntax for trashcan files as
-    Synchronet BBS. Appending a '~' to a line specifies that the string
-    cannot be located anywhere within the phone number. Appending a '^'
-    indicates that the phone number cannot begin with the string.
-
-    The stock PHONE.CAN for Synchronet BBS contains the following:
-
-	0-^
-	1-^
-	000-~
-	111-~
-	123-^
-	222-^
-	333-^
-	444-^
-	555-~
-	666-^
-	777-^
-	888-^
-	999-^
-	900-^
-	411-~
-	911-~
-	976-~
-	411^
-	911^
-
-    Since SCB does not allow non-numeric characters in phone numbers, all
-    entries with the dash (-) character above are ignored.
-
- 3. SCB uses the dial string specified in the modem configuration in SCFG
-    for each node for dialing the remote user's modem. The default dial
-    string is "ATDT".
-
- 4. Use the "Toggle Options" sub-menu to configure your preferences.
-
-	�[�][?]����������������������������������������������ͻ
-	�		     Toggle Options		      �
-	�����������������������������������������������������͹
-	� �Validate if Unable to Verify 	   No	      �
-	� �Put Result in User Note		   Yes	      �
-	� �Long Distance if not an Allowed Prefix  No	      �
-	� �Allow Long Distance (Starting with 0)   No	      �
-	� �Allow Long Distance (Starting with 1)   Yes	      �
-	� �Allow Long Distance (Same Area Code)    Yes	      �
-	� �U.S. Style Phone Format (AAA-PPP-SSSS)  Yes	      �
-	� �Stay Connected After Callback	   No	      �
-	�����������������������������������������������������ͼ
-
-    If the "Validate if Unable to Verify" option is set to "Yes", users will
-    always be validated. Even if their number was not verified.
-
-    If the "Put Result in User Note" option is set to "Yes", the result of
-    the verification attempt will be placed in the user's note field
-    (in the Synchronet BBS user database).
-
-    If the "Long Distance if not an Allowed Prefix" option is set to "Yes",
-    then all numbers will be considered long distance unless the prefix
-    is specifically listed in the "Allowed Prefix List" off of the main
-    menu. If this option is set to "Yes", the "Long Distance Prefix List"
-    is not used.
-
-    If the "Allow Long Distance (starting with 0)" option is set to "Yes",
-    then numbers starting with '0' will be allowed. This option does not
-    effect numbers included in the "Allowed Prefix List".
-
-    If the "Allow Long Distance (starting with 1)" option is set to "Yes",
-    then numbers starting with '1' will be allowed. This option does not
-    effect numbers included in the "Allowed Prefix List".
-
-    If the "Allow Long Distance (same area code)" option is set to "Yes",
-    then numbers that begin with a prefix located in the "Long Distance
-    Prefix List" will not be allowed. This option does not effect numbers
-    included in the "Allowed Prefix List".
-
-    If the "U.S. Style Phone Format" option is set to "Yes", then SCB will
-    assume that phone numbers are in the AAA-PPP-SSSS format, and will
-    automatically strip the BBS area code from the prefix if the user
-    entered a number in the same area code as the BBS and included the
-    area code (both AAA and 1AAA will be stripped).
-
-    The "Stay Connected After Callback" option can be set to "Yes", "No",
-    or "Local Only". SCB will not disconnect after calling the user back
-    if this option is set to "Yes". If set to "Local Only", SCB will only
-    remain connected if the number verfied does not begin with a '1' or '0'.
-
- 5. Use the "Validation Values" sub-menu to configure how you want validated
-    users' accounts to be modified.
-
-	�[�][?]�������������������������������������������������������ͻ
-	�			Validation Values		       �
-	��������������������������������������������������������������͹
-	� �Security Level		   23			       �
-	� �Flag Set 1			   CDLN 		       �
-	� �Flag Set 2						       �
-	� �Flag Set 3						       �
-	� �Flag Set 4			   -V			       �
-	� �Exemptions						       �
-	� �Restrictions 		   -CX			       �
-	� �Days to Extend Expiration	   0			       �
-	� �Credits to Add					       �
-	� �Minutes to Add					       �
-	��������������������������������������������������������������ͼ
-
-    Note: The DEMO version will only set new security level and add credits.
-	  The other validation options are only available in the registered
-	  version.
-
- 6. Use the "Allowed Prefix List" sub-menu to set which prefixes will NOT be
-    affected by long distance restrictions (such as long distance
-    calling times, and numbers starting with 0 or 1). This option is useful
-    for specifying local numbers in other area codes. For example, in the
-    714 area code, 529 prefix, the following non-714 prefixes are local (*):
-
-	1310690 1310691 1310694 1310697 1310902 1310905 1310943 1310947
-	1818330 1818333 1818336 1818369 1818810 1818854 1818855 1818912
-	1818913 1818937 1818961 1818964 1818965 1818968 1909396 1909468
-	1909594 1909595 1909598 1909860 1909861 1909869
-
-	* Multiple entries per line to conserve documentation space
-
-    If the "Long Distance if not an Allowed Prefix" toggle option is set to
-    "Yes", then any number that is NOT included in this list will be
-    considered long distance.
-
- 7. Use the "Long Distance Prefix List" sub-menu to set which SAME-AREA
-    prefixes will be considered long distance. If the "Long Distance if not
-    an Allowed Prefix" toggle option is set to "Yes", then this list is not
-    used. For example, in the 714 area code, 529 prefix, the following
-    714 prefixes are long distance (*):
-
-	241 258 259 265 285 418 432 433 434 435 436 437 438 479 480
-	505 513 531 540 541 542 543 544 545 546 547 549 550 554 556
-	557 558 560 564 565 566 567 568 569 571 573 641 647 648 662
-	664 665 667 668 669 691 708 730 731 751 754 755 775 832 834
-	835 836 838 839 850 953 954 957 966 967 972 973 977 979
-
-	* Multiple entries per line to conserve documentation space
-
- 8. Use the "Long Distance Calling Times" sub-menu to set the times on each day
-    when SCB is allowed to place long distance calls. All times are entered
-    in 24-hour format and ranges crossing midnight (e.g. 18:00 to 09:00) are
-    valid. Numbers included in the "Allowed Prefix List" will not be limited
-    to these calling times.
-
- 9. If you are a registered owner of SCB, be sure to enter your registration
-    number on the main menu.
-
-10. Hit ESC from the main SCB configuration menu and select "Yes" to save
-    the configuration file.
-
-
-Notes:
-=====
-
-All SCB activity is logged to the file SCB.LOG in the SCB directory in
-the format:
-
-	Node 7	     : Mon Sep 27 16:44:31 1993
-	User Name    : Digital Man
-	Voice Number : 714-529-6328
-	Modem Number : 5295313
-	Result	     : Verified
-
-Results 	Description
-------- 	-----------
-Hung up 	User hung up before or during validation process
-Refused 	User refused validation
-Long Dist	User is a long distance call and long distance is disallowed
-Invalid #	User entered a number that is in the trashcan file, less than
-		    minimum length, or begins with a disallowed number (0 or 1)
-No Init 	Modem could not be initialized
-No Connect	Modem could not connect to user's modem (possibly wrong #)
-Verified	User was called, modem connected, and password verified
-Bad Pass	User was called, modem connected, and incorrect password
-
-
-Customizations:
-==============
-
-The following files can be modified (optionally using Ctrl-A codes for color):
-
-SCB.MSG 	The opening screen for SCB
-REFUSED.MSG	Verification refused
-INSTRUCT.MSG	Instructions
-NO_ONE.MSG	Long distance numbers starting with 1 not allowed
-NO_ZERO.MSG	Long distance numbers starting with 0 not allowed
-LD_TIME.MSG	Not within allowed long distance callback time range
-TOOSHORT.MSG	Phone number is less than configured minimum number of digits
-PHONECAN.MSG	Phone number found in trashcan file
-VERIFIED.MSG	Displayed to users after verification
-
-
-Registration:
-============
-
-If you wish to order a registered copy of SCB at the same time as Synchronet,
-use the Synchronet ORDER.TXT file (in the SBBS\DOCS directory).
-
-If registering SCB after already purchasing a copy of Synchronet, call
-Digital Dynamics voice at 714-529-6328, Support BBS at 714-529-9525 (and use
-Domain Shopper), or complete the ORDER.TXT file in the SCB directory and mail
-or fax it to Digital Dynamics.
-
-/* End of SCB.DOC */
diff --git a/xtrn/scb/scb.msg b/xtrn/scb/scb.msg
deleted file mode 100644
index 617338c75d..0000000000
--- a/xtrn/scb/scb.msg
+++ /dev/null
@@ -1,8 +0,0 @@
-ng    Synchronet Callback can be used to verify your modem phone number.
-If your modem phone number is verified, your access on the BBS may be 
-immediately upgraded or the sysop will be notified of the verification and your
-access may be upgraded later.
-
-    Some BBSs may not allow long distance verification calls.  If you are 
-not a local call from this BBS and it doesn't allow long distance calls,
-you will be notified of this when you start the verification procedure.
diff --git a/xtrn/scb/toolong.msg b/xtrn/scb/toolong.msg
deleted file mode 100644
index 079411abde..0000000000
--- a/xtrn/scb/toolong.msg
+++ /dev/null
@@ -1,2 +0,0 @@
-Your phone number is too long to be valid.
-
diff --git a/xtrn/scb/tooshort.msg b/xtrn/scb/tooshort.msg
deleted file mode 100644
index e31e216680..0000000000
--- a/xtrn/scb/tooshort.msg
+++ /dev/null
@@ -1 +0,0 @@
-Your phone number is too short to be valid.
diff --git a/xtrn/scb/verified.msg b/xtrn/scb/verified.msg
deleted file mode 100644
index ae5b1c8f29..0000000000
--- a/xtrn/scb/verified.msg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-ghYour number has been verified and your access upgraded. Please call back
-to use your upgraded security!
-
-p
\ No newline at end of file
diff --git a/xtrn/scb/whats.new b/xtrn/scb/whats.new
deleted file mode 100644
index 2945099c7f..0000000000
--- a/xtrn/scb/whats.new
+++ /dev/null
@@ -1,21 +0,0 @@
-What's new in SCB v1.20
-=======================
-
- o	Supports new communications routines, supporting UART, FOSSIL,
-	BIOS (PC BIOS), EBIOS (PS/2 BIOS), and DigiBoard support.
-
-If installing over existing SCB install, just update SCB*.EXE and SCB.DOC.
-
-
-What's new in SCB v1.12
-=======================
-
- o	Updated and more comprehensive documentation.
- o	New "Long Distance if not an Allowed Prefix" toggle option.
- o	If the user's expiration date is already set to the future, it will be
-	extended by the number of days in SCBCFG. Previously, expiration dates
-	would always be set to the current date plus the number of days set in
-	SCBCFG.
-
-If installing over existing SCB install, just update SCB*.EXE and SCB.DOC.
-
diff --git a/xtrn/sdk/xsdk.c b/xtrn/sdk/xsdk.c
deleted file mode 100644
index b61b049df5..0000000000
--- a/xtrn/sdk/xsdk.c
+++ /dev/null
@@ -1,2677 +0,0 @@
-/* xsdk.c */
-
-/* Synchronet External Program Software Development Kit	*/
-
-/* $Id$ */
-
-/****************************************************************************
- * @format.tab-size 4		(Plain Text/Source Code File Header)			*
- * @format.use-tabs true	(see http://www.synchro.net/ptsc_hdr.html)		*
- *																			*
- * Copyright 2000 Rob Swindell - http://www.synchro.net/copyright.html		*
- *																			*
- * This library is free software; you can redistribute it and/or			*
- * modify it under the terms of the GNU Lesser General Public License		*
- * as published by the Free Software Foundation; either version 2			*
- * of the License, or (at your option) any later version.					*
- * See the GNU Lesser General Public License for more details: lgpl.txt or	*
- * http://www.fsf.org/copyleft/lesser.html									*
- *																			*
- * Anonymous FTP access to the most recent released source is available at	*
- * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net	*
- *																			*
- * Anonymous CVS access to the development source and modification history	*
- * is available at cvs.synchro.net:/cvsroot/sbbs, example:					*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs login			*
- *     (just hit return, no password is necessary)							*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs checkout xtrn	*
- *																			*
- * For Synchronet coding style and modification guidelines, see				*
- * http://www.synchro.net/source.html										*
- *																			*
- * You are encouraged to submit any modifications (preferably in Unix diff	*
- * format) via e-mail to mods@synchro.net									*
- *																			*
- * Note: If this box doesn't appear square, then you need to fix your tabs.	*
- ****************************************************************************/
-
-/***************************** Revision History *****************************\
-
-			Initial version for use with Synchronet v1a r6
-	1.0�	
-			Added bgotoxy() macro
-			Added mnehigh and mnelow vars for control of the mnemonic colors
-			Added sys_nodes and node_num variables to xtrn_sdk.c
-			Added MAX_NODES to xtrn_sdk.h
-			Added printfile() function to xtrn_sdk.c
-			Added rputs() (Raw put string)
-			Added getstr() (Get string)
-			Added redrwstr() (Redraw string)
-			Added stripattr() (String attributes)
-			Added sys_op var and the reading from the xtrn.dat
-			Removed user_min and the reading from the xtrn.dat
-			Changed read_xtrn_dat() to initdata()
-			Added ctrl-break handler to xtrn_sdk
-			Changed xtrn.dat format (again), adding system operator,
-				guru name, user ml, tl, birthdate and sex.
-			Added username() function
-			Renamed xtrn_sdk.* to xsdk.* and xtrnvars.c to xsdkvars.c
-				and xtrndefs.h to xsdkdefs.h
-			Added fexist() function
-	1.0
-			Ctrl-p is now switched into ctrl-^ by SBBS
-			Fixed relative data_dir bug in username()
-	1.01
-			Added flength() function and lowered disk activity
-			Lowered MAX_CARDS from 20 to 10 and made the re-shuffling happen
-				less often.
-	1.02
-			Fixed bug in attr() for monochrome users
-	1.03
-			Made warning and timeout times variables (sec_warn and sec_timeout)
-			Added SYSOP macro
-			Made it so sysop won't get timeout
-			Added user's phone number to XTRN.DAT
-			Added modem and com port information to XTRN.DAT
-			Added ahtoul function
-			Changed getstr commands Ctrl-L to Ctrl-R and Ctrl-P to Ctrl-\
-	1.04
-			Added intercommunication between the external programs and users
-			on the BBS or other external programs written with XSDK.
-			Added rprintf() function
-			Made many changes to getstr() function
-	2.00
-			Added DESQview awareness
-			Removed difftime() function calls completely
-			Added ungetkey() function
-			Added memory address of last modem status register for com routines
-				so we can track DCD incase user hangs up.
-			Added checkline function that does the checking of DCD.
-			Added new bug-free fdelay() routine to replace TC's delay() that
-				crashes multi-taskers such as DESQview and Windows
-	2.01
-			Added external program name access for user listings.
-			Added last node to send message to remembering and defaulting.
-			Added MALLOC and FREE macros for memory model non-specific memory
-				allocation.
-	2.02
-			Added INTRSBBS.DAT support for Synchronet shrinking to run programs
-				written with XSDK (new with v1b rev 01).
-			Added user's main flags, transfer flags, exemptions, and
-				restrictions to XTRN.DAT
-			Added support for the NODE_PAGE action (paging for private chat)
-				when listing nodes (printnodedat()).
-			Added user expiration date support to XTRN.DAT
-	2.03
-			Fixed bug with com_base variable being messed up.
-			New messaging system supported (for v1b r2 and higher)
-				(putnmsg and getnmsg functions).
-	2.10
-			Added support for file retrieving node status display.
-			NOPEN collision notice only appears after 25 retries.
-	2.11
-			Changed getnmsg function to not use IXB files.
-			Changed getsmsg function to not re-open for truncate.
-			Added user address, location, and zip/postal code suppport.
-			Added support for local arrow keys, home, end, ins, and del.
-			Remote keys ^] (back one space) and ^BkSpc (del) supported now.
-			Added support for high-bit Ctrl-A codes (for cursor positioning)
-			Removed file locking check - slowed down initialization sometimes.
-			Change user_ml to user_level, removed user_tl, changed user_mf to
-				user_flags1, changed user_tf to user_flags2, and added
-				user_flags3 and user_flags4.
-			cls() now updates lncntr like it should have.
-			Added ctrl-break handler so that users can abort printfile()
-			If a ctrl-c is received by inkey, the aborted flag is set.
-			Removed fdelay from XSDK and replaced with mswait for better
-				multitasker performance
-	2.20
-			New mswait that support OS2/Windows, DOS Idle, and non-DV modes.
-			XTRN.DAT passes mode of mswait configured in node setup.
-	2.21
-			Added user's real name/company name (user_realname) to XTRN.DAT
-	2.22
-			Added usernumber() function to get user number from a user name.
-	2.23
-			DTE rate (com_rate) now a ulong (instead of uint) to allow 115.2K
-	2.24
-			New K_AUTODEL mode for getstr() function, to be used in conjunction
-				with the K_EDIT mode. Makes overwriting existing strings very
-				easy for users.
-			Supports intelligent timeslice APIs while waiting for a key with
-				getkey() and with getstr() if K_LOWPRIO mode is used.
-			Hitting Ctrl-C sets the 'aborted' variable to 1.
-			Time zone and daylight savings automatically initialized to 0.
-			Modem strings up to 63 chars in XTRN.DAT now supported.
-			Fixed 10 character zip code bug in XSDKVARS.C.
-			Node directories (node_dir) up to 127 chars now supported.
-			nopen() can now open DENYNONE if passed access O_DENYNONE.
-	2.30
-			Added support for the following Ctrl-A codes: ;,.<>[]A
-			Changed definitions of TAB, SP, etc. to hex
-	2.31
-			C restriction disallows users to use Ctrl-P.
-			T exemption disables "Time's up" message.
-			Added center() function for outputting centered lines of text.
-			Added auto-pause to cls() and outchar() functions when clearing
-				the screen and lncntr is greater than 1
-			Changed bstrlen() to not count control characters (CR,LF,TAB,etc)
-			XSDK is now Watcom C++ compatible (although SBJ.C and SBL.C aren't)
-			XSDK.H is now *.CPP compatible
-			Added support for Ctrl-AQ (reset pause) and Ctrl-AZ (premature EOF)
-	2.32
-			Change bstrlen(char *str) to bstrlen(uchar *str)
-			Fixed bug in getstr() when word-wrapping a line that contains
-				ctrl-a codes and the input string did not begin at column 1.
-			Added user_dce variable (initialized by initdata from XTRN.DAT)
-			Fixed printnodedat() to not show Waiting for call (M)
-			Fixed typo in C restriction Ctrl-P message.
-			Moved call of checkline() in getkey() to immediately abort when
-				user hangs-up, even when keys are in the input buffer.
-			Added setmode() call to initdata() to set stderr to binary mode
-			Changed putchar() to write() in outchar() to elminate LF to CRLF
-				expansion
-	2.33
-			Improved cls() routine for auto-pause feature.
-			Added get_term() automatic RIP and WIP terminal detection function.
-	2.34
-			Added exec_dir, text_dir, and temp_dir variables to XTRN.DAT
-				format and initdata() function.
-			Added _fullpath() calls to initdata() to fix dir paths.
-			Added sys_id (QWK ID) to XTRN.DAT format and initdat() func.
-			Added node_misc to XTRN.DAT format and initdata() function.
-			If NM_LOWPRIO (low priority string input) is toggled on in
-				node_misc, then time-slices are always given up during input.
-			XSDK is now Symantec C++ compatible
-	2.40
-			node_misc was being read as a decimal number (it's stored in
-				the XTRN.DAT as hex), thus causing time-slice APIs to not
-				function correctly.
-	2.41
-			Ctrl-T is now intercepted by inkey() and displays the time the
-				program was launched, the current time, time used, and time
-				left (similar to SBBS).
-			Users are now warned of their last 5 minutes available (like SBBS).
-	2.42
-			Added Microsoft/Borland 32-bit compiler compatibility
-			Added socket (Telnet) compatibility
-			Changed Ctrl-Minus (Insert key) to Ctrl-V
-			Changed Ctrl-V (Center text key) to Ctrl-L
-			Added support for telnet nodes (connection=0xffff)
-	3.00
-			Fixed problem with clear screen (form feed) in node messages.
-			checkline() now exits when the remote user disconnects on 32-bit 
-				programs. Use atexit() to add cleanup code.
-	3.01
-			Eliminated warnings in ctrl_a() when compiled with VC++ 6.0.
-			Added Linux/GCC support (xsdkwrap.c, xsdkwrap.h, and xsdkinet.h)
-	3.10	
-			Added COMPILER_DESC and PLATFORM_DESC macros to xsdkwrap.h
-			Added support for no local console (XSDK_MODE_NOCONSOLE)
-				- This is now the default mode when building 32-bit programs
-			Eliminated use of ungetch() in favor of ungetkey() - more secure
-	3.11	
-
-\****************************************************************************/
-
-#include "xsdk.h"
-
-#ifdef _WINSOCKAPI_
-WSADATA WSAData;		// WinSock data
-#endif
-
-char *xsdk_ver="3.11";
-ulong xsdk_mode=XSDK_MODE_NOCONSOLE;
-
-/****************************************************************************/
-/* This allows users to abort the listing of text by using Ctrl-C           */
-/****************************************************************************/
-int cbreakh(void)	/* ctrl-break handler */
-{
-	aborted=1;
-	return(1);		/* 1 to continue, 0 to abort */
-}
-
-/****************************************************************************/
-/* Performs printf() using bbs bputs function								*/
-/****************************************************************************/
-int bprintf(char *fmt, ...)
-{
-	va_list argptr;
-	char sbuf[1024];
-	int chcount;
-
-	va_start(argptr,fmt);
-	chcount=vsprintf(sbuf,fmt,argptr);
-	va_end(argptr);
-	bputs(sbuf);
-	return(chcount);
-}
-
-/****************************************************************************/
-/* Performs printf() using bbs rputs function								*/
-/****************************************************************************/
-int rprintf(char *fmt, ...)
-{
-	va_list argptr;
-	char sbuf[1024];
-	int chcount;
-
-	va_start(argptr,fmt);
-	chcount=vsprintf(sbuf,fmt,argptr);
-	va_end(argptr);
-	rputs(sbuf);
-	return(chcount);
-}
-
-/****************************************************************************/
-/* Outputs a NULL terminated string locally and remotely (if applicable) 	*/
-/****************************************************************************/
-void bputs(char *str)
-{
-	ulong l=0;
-
-	while(str[l] && !aborted) {
-		if(str[l]==1) {				/* ctrl-a */
-			ctrl_a(str[++l]);		/* skip the ctrl-a */
-			if(str[l]=='Z')         /* Ctrl-AZ marks premature end of file */
-				break;
-			l++; }					/* skip the attribute code */
-		else
-			outchar(str[l++]); }
-}
-
-/****************************************************************************/
-/* Outputs a NULL terminated string locally and remotely (if applicable) 	*/
-/* Does not process ctrl-a codes (raw output)								*/
-/* Max length of str is 64 kbytes											*/
-/****************************************************************************/
-void rputs(char *str)
-{
-	ulong l=0;
-
-	while(str[l])
-		outchar(str[l++]);
-}
-
-/****************************************************************************/
-/* Returns the number of characters in 'str' not counting ctrl-ax codes		*/
-/* or the null terminator													*/
-/****************************************************************************/
-int bstrlen(uchar *str)
-{
-	int i=0;
-
-	while(*str) {
-		if(*str<SP) {	/* ctrl char */
-			if(*str==1) /* ctrl-A */
-				str++;
-			else if(*str!=CR && *str!=LF && *str!=FF)
-				i++; }
-		else
-			i++;
-		if(!(*str))
-			break;
-		str++; }
-	return(i);
-}
-
-/****************************************************************************/
-/* Outputs the string 'str' centered for an 80 column display               */
-/* Automatically appends "\r\n" to output                                   */
-/****************************************************************************/
-void center(char *str)
-{
-	 int i,j;
-
-	j=bstrlen(str);
-	for(i=0;i<(80-j)/2;i++)
-		outchar(SP);
-	bputs(str);
-}
-
-#ifndef __16BIT__
-
-char	outbuf[5000];
-ulong	outbufbot=0;
-ulong	outbuftop=0;
-sem_t	output_sem;
-
-void output_thread(void* arg)
-{
-	int		i,len;
-	char	str[256];
-
-	sem_init(&output_sem,0,0);
-
-	while(client_socket!=INVALID_SOCKET) {
-		if(outbufbot==outbuftop) {
-			sem_init(&output_sem,0,0);
-			sem_wait(&output_sem);
-			continue; 
-		}
-
-		if(outbuftop>outbufbot)
-			len=outbuftop-outbufbot;
-		else
-			len=sizeof(outbuf)-outbufbot;
-		i=send(client_socket,outbuf+outbufbot,len,0);
-		if(i!=len) {
-			sprintf(str,"!XSDK Error %d (%d) sending on socket %d\n"
-				,i,ERROR_VALUE,client_socket);
-#ifdef _WIN32
-			OutputDebugString(str);
-#else
-			fprintf(stderr,"%s",str);
-#endif
-		}
-		outbufbot+=len;
-		if(outbufbot>=sizeof(outbuf))
-			outbufbot=0;
-	}
-}
-#endif
-
-/****************************************************************************/
-/* Outputs one character to the screen. Handles, pause, saving and			*/
-/* restoring lines, etc.													*/
-/****************************************************************************/
-void outchar(char ch)
-{
-
-#ifndef __16BIT__
-	if(client_socket!=INVALID_SOCKET) {
-		ulong	top=outbuftop+1;
-
-		if(top==sizeof(outbuf))
-			top=0;
-		if(top!=outbufbot) {
-			outbuf[outbuftop++]=ch;
-			if(outbuftop==sizeof(outbuf))
-				outbuftop=0;
-			sem_post(&output_sem);
-		}
-	}
-#endif
-
-	if(con_fp!=NULL)
-		write(fileno(con_fp),&ch,1);
-
-	if(ch==LF) {
-		lncntr++;
-		lbuflen=0;
-		tos=0; 
-	}
-	else if(ch==FF) {
-		if(lncntr>1) {
-			lncntr=0;
-			CRLF;
-			bpause(); 
-		}
-		lncntr=0;
-		lbuflen=0;
-		tos=1; 
-	}
-	else if(ch==BS) {
-		if(lbuflen)
-			lbuflen--; 
-	}
-	else {
-		if(!lbuflen)
-			latr=curatr;
-		if(lbuflen>=LINE_BUFSIZE) lbuflen=0;
-		lbuf[lbuflen++]=ch; 
-	}
-	if(lncntr==user_rows-1) {
-		lncntr=0;
-		bpause(); 
-	}
-}
-
-/****************************************************************************/
-/* Prints PAUSE message and waits for a key stoke							*/
-/****************************************************************************/
-void bpause(void)
-{
-	char	ch;
-	uchar	tempattrs=curatr,*msg="\1_\1r\1h[Hit a key] ";
-	int		i,j;
-
-	lncntr=0;
-	bputs(msg);
-	j=bstrlen(msg);
-	ch=getkey(K_UPPER);
-	for(i=0;i<j;i++)
-		bputs("\b \b");
-	attr(tempattrs);
-	if(ch=='N' || ch=='Q')
-		aborted=1;
-}
-
-/****************************************************************************/
-/* Prompts user for Y or N (yes or no) and CR is interpreted as a Y			*/
-/* Returns 1 for Y or 0 for N												*/
-/* Called from quite a few places											*/
-/****************************************************************************/
-char yesno(char *str)
-{
-	char ch;
-
-	bprintf("\1_\1b\1h%s (Y/n) ? \1w",str);
-	while(1) {
-		ch=getkey(K_UPPER);
-		if(ch=='Y' || ch==CR) {
-			bputs("Yes\r\n");
-			return(1); }
-		if(ch=='N' || aborted) {
-			bputs("No\r\n");
-			return(0); 
-		} 
-	}
-}
-
-/****************************************************************************/
-/* Prompts user for N or Y (no or yes) and CR is interpreted as a N			*/
-/* Returns 1 for N or 0 for Y												*/
-/* Called from quite a few places											*/
-/****************************************************************************/
-char noyes(char *str)
-{
-	char ch;
-
-	bprintf("\1_\1b\1h%s (y/N) ? \1w",str);
-	while(1) {
-		ch=getkey(K_UPPER);
-		if(ch=='N' || ch==CR || aborted) {
-			bputs("No\r\n");
-			return(1); }
-		if(ch=='Y') {
-			bputs("Yes\r\n");
-			return(0); 
-		} 
-	}
-}
-
-/****************************************************************************/
-/* Outputs a string highlighting characters preceeded by a tilde with the	*/
-/* color specified in mnehigh and the rest of the line is in color mnelow.	*/
-/* If the user doesn't have ANSI, it puts the character following the tilde */
-/* in parenthesis.															*/
-/****************************************************************************/
-void mnemonics(char *str)
-{
-	long l;
-
-	attr(mnelow);
-	l=0L;
-	while(str[l]) {
-		if(str[l]=='~' && str[l+1]) {
-			if(!(user_misc&ANSI))
-				outchar('(');
-			l++;
-			attr(mnehigh);
-			outchar(str[l]);
-			l++;
-			if(!(user_misc&ANSI))
-				outchar(')');
-			attr(mnelow); 
-		}
-		else
-			outchar(str[l++]); 
-	}
-	attr(LIGHTGRAY);
-}
-
-/****************************************************************************/
-/* If a key has been pressed, the ASCII code is returned. If not, 0 is		*/
-/* returned. Ctrl-P and Ctrl-U are intercepted here.						*/
-/****************************************************************************/
-char inkey(long mode)
-{
-	static in_ctrl_p;
-	uchar ch=0,hour,min,sec;
-	long tleft;
-	int i=0;
-	time_t now;
-
-#ifndef __16BIT__
-	char	str[256];
-	ulong	cnt=0;
-
-	if(client_socket!=INVALID_SOCKET) {
-		i=ioctlsocket(client_socket,FIONREAD,&cnt);
-		if(i) {
-			sprintf(str,"!XSDK Error %d (%d) checking readcnt on socket %d\n"
-				,i,ERROR_VALUE,client_socket);
-#ifdef _WIN32
-			OutputDebugString(str);
-#else
-			fprintf(stderr,"%s",str);
-#endif
-		}
-	}
-
-	if(i==0 && cnt) 
-		recv(client_socket,&ch,1,0);
-	else
-#endif
-
-	if(keybufbot!=keybuftop) {
-		ch=keybuf[keybufbot++];
-		if(keybufbot==KEY_BUFSIZE)
-			keybufbot=0; }
-	else if(!(xsdk_mode&XSDK_MODE_NOCONSOLE) && kbhit()) {
-		i=getch();
-#ifdef __unix__
-		if(i==LF) i=CR;	/* Enter key returns Ctrl-J on Unix! (ohmygod) */
-#endif
-		if(i==0 || i==0xE0) {			/* Local Alt or Function key hit */
-			i=getch();
-			switch(i) {
-				case 0x47:	/* Home - Same as Ctrl-B */
-					return(2);	/* ctrl-b beginning of line */
-				case 0x4b:		/* Left Arrow - same as ctrl-] */
-					return(0x1d);
-				case 0x4d:		/* Right Arrow - same as ctrl-f */
-					return(6);
-				case 0x48:		/* Up arrow - same as ctrl-^ */
-					return(0x1e);
-				case 0x50:		/* Down arrow - same as CR */
-					return(CR);
-				case 0x4f:	  /* End	  - same as Ctrl-E */
-					return(5);  /* ctrl-e - end of line */
-				case 0x52:	/* Insert */
-					return(0x1f);	/* ctrl-minus - insert mode */
-				case 0x53:	/* Delete */
-					return(0x7f);   /* ctrl-bkspc - del cur char */
-				}
-			return(0); } 
-		ch=i;
-	}
-
-	if(ch==0x10 || ch==0x1e) {	/* Ctrl-P or Ctrl-^ */
-		if(in_ctrl_p || !ctrl_dir[0])	/* keep from being recursive */
-			return(0);
-		in_ctrl_p=1;
-		SAVELINE;
-		CRLF;
-		nodemsg();
-		CRLF;
-		RESTORELINE;
-		lncntr=0;
-		in_ctrl_p=0;
-		return(0); }
-
-	if(ch==20) { /* Ctrl-T Time left online */
-		SAVELINE;
-		attr(LIGHTGRAY);
-		now=time(NULL);
-		checktimeleft();
-		CRLF;
-		bprintf("\r\nStart     : %.24s",ctime(&starttime));
-		bprintf("\r\nNow       : %.24s",ctime(&now));
-		i=now-starttime;
-		hour=(i/60)/60;
-		min=(i/60)-(hour*60);
-		sec=i-((min+(hour*60))*60);
-		bprintf("\r\nTime Used : %02u:%02u:%02u",hour,min,sec);
-		tleft=timeleft-(now-starttime);
-		hour=(tleft/60)/60;
-		min=(tleft/60)-(hour*60);
-		sec=tleft-((min+(hour*60))*60);
-		bprintf("\r\nTime Left : %02u:%02u:%02u\r\n\r\n",hour,min,sec);
-		RESTORELINE;
-		lncntr=0;
-		return(0); }
-
-	if(ch==21) { /* Ctrl-U Users online */
-		if(!ctrl_dir[0])
-			return(0);
-		SAVELINE;
-		CRLF;
-		whos_online(1);
-		CRLF;
-		RESTORELINE;
-		lncntr=0;
-		return(0); }
-
-#ifndef __16BIT__
-	if(ch==LF) 
-		ch=0;		/* Ignore LF of Telnet CR/LF sequence */
-#endif
-
-	if(ch==3)
-		aborted=1;
-	else if(aborted)
-		ch=3;
-
-	if(!ch && (!(mode&K_GETSTR) || mode&K_LOWPRIO|| node_misc&NM_LOWPRIO))
-		mswait(1);
-	return(ch);
-}
-
-/****************************************************************************/
-/* Waits for remote or local user to hit a key. Inactivity timer is checked */
-/* and hangs up if inactive for 4 minutes. Returns key hit, or uppercase of */
-/* key hit if mode&K_UPPER or key out of KEY BUFFER. Does not print key.	*/
-/****************************************************************************/
-char getkey(long mode)
-{
-	char	ch,warn=0;
-	long	tleft;
-	time_t	timeout,now;
-
-	aborted=lncntr=0;
-	timeout=time(NULL);
-	do {
-		checkline();
-		ch=inkey(mode);
-		now=time(NULL);
-		if(ch) {
-			if(mode&K_NUMBER && isprint(ch) && !isdigit(ch))
-				continue;
-			if(mode&K_ALPHA && isprint(ch) && !isalpha(ch))
-				continue;
-			if(ch==LF) continue;
-			if(mode&K_UPPER)
-				return(toupper(ch));
-			return(ch); 
-		}
-		checktimeleft();
-
-		tleft=timeleft-(now-starttime);
-		if((tleft/60)<(5-timeleft_warn)) {	/* Running out of time warning */
-			timeleft_warn=5-(tleft/60);
-			SAVELINE;
-			bprintf("\1n\1h\r\n\7\r\nYou only have \1r\1i%u\1n\1h minute%s "
-				"left.\r\n\r\n"
-				,((ushort)tleft/60)+1,(tleft/60) ? "s" : "");
-			RESTORELINE; 
-		}
-
-		if(now-timeout>=(time_t)sec_warn && !warn)		/* Inactivity warning */
-			for(warn=0;warn<5;warn++)
-				outchar(7);
-	} while(now-timeout<(time_t)sec_timeout);
-
-	bputs("\r\nInactive too long.\r\n");
-	exit(0);
-	return(0);	/* never gets here, but makes compiler happy */
-}
-
-/****************************************************************************/
-/* If remote user, checks DCD to see if user has hung up or not.			*/
-/****************************************************************************/
-void checkline(void)
-{
-#ifdef __16BIT__
-	if(com_port && !((*msr)&DCD)) exit(0);
-#else
-	char	str[256];
-	char	ch;
-	int		i;
-	fd_set	socket_set;
-	struct timeval timeout;
-
-	if(client_socket!=INVALID_SOCKET) {
-		FD_ZERO(&socket_set);
-		FD_SET(client_socket,&socket_set);
-		timeout.tv_sec=0;
-		timeout.tv_usec=100;
-
-		if((i=select(client_socket+1,&socket_set,NULL,NULL,&timeout))>0) {
-			if((i=recv(client_socket,&ch,1,MSG_PEEK))!=1) {
-				sprintf(str,"!XSDK Error %d (%d) checking state of socket %d\n"
-					,i,ERROR_VALUE,client_socket);
-	#ifdef _WIN32
-				OutputDebugString(str);
-	#else
-				fprintf(stderr,"%s",str);
-				fflush(stderr);
-	#endif
-				exit(0);
-			}
-		}
-	}
-#endif
-}
-
-/****************************************************************************/
-/* Waits for remote or local user to hit a key that is contained inside str.*/
-/* 'str' should contain uppercase characters only. When a valid key is hit, */
-/* it is echoed (upper case) and is the return value.						*/
-/* If max is non-zero and a number is hit that is not in str, it will be	*/
-/* returned with the high bit set. If the return of this function has the	*/
-/* high bit set (&0x8000), just flip the bit (^0x8000) to get the number.	*/
-/****************************************************************************/
-int getkeys(char *instr,int max)
-{
-	char	str[256];
-	uchar	ch,n=0;
-	int		i=0;
-
-	sprintf(str,"%.*s",sizeof(str)-1,instr);
-	strupr(str);
-	while(!aborted) {
-		ch=getkey(K_UPPER);
-		if(max && ch>0x7f)	/* extended ascii chars are digits to isdigit() */
-			continue;
-		if(ch && !n && (strchr(str,ch))) { 	/* return character if in string */
-			outchar(ch);
-			attr(LIGHTGRAY);
-			CRLF;
-			return(ch); 
-		}
-		if(ch==CR && max) {             /* return 0 if no number */
-			attr(LIGHTGRAY);
-			CRLF;
-			if(n)
-				return(i|0x8000);		/* return number plus high bit */
-			return(0); 
-		}
-		if(ch==BS && n) {
-			bputs("\b \b");
-			i/=10;
-			n--; 
-		}
-		else if(max && isdigit(ch) && (i*10)+(ch&0xf)<=max && (ch!='0' || n)) {
-			i*=10;
-			n++;
-			i+=ch&0xf;
-			outchar(ch);
-			if(i*10>max) {
-				attr(LIGHTGRAY);
-				CRLF;
-				return(i|0x8000); 
-			} 
-		}	 
-	}
-	return(0);
-}
-
-/****************************************************************************/
-/* Hot keyed number input routine.											*/
-/****************************************************************************/
-int getnum(int max)
-{
-	uchar ch,n=0;
-	int i=0;
-
-	while(1) {
-		ch=getkey(K_UPPER);
-		if(ch>0x7f)
-			continue;
-		if(ch=='Q') {
-			outchar('Q');
-			CRLF;
-			break;
-		}
-		else if(ch==3) {		/* ctrl-c */
-			CRLF;
-			break;
-		}
-		else if(ch==CR) {
-			CRLF;
-			return(i);
-		}
-		else if(ch==BS && n) {
-			bputs("\b \b");
-			i/=10;
-			n--;
-		}
-		else if(isdigit(ch) && (i*10)+(ch&0xf)<=max && (ch!='0' || n)) {
-			i*=10;
-			n++;
-			i+=ch&0xf;
-			outchar(ch);
-			if(i*10>max) {
-				CRLF;
-				return(i);
-			}
-		}
-	}
-	return(-1);
-}
-
-/****************************************************************************/
-/* Waits for remote or local user to input a CR terminated string. 'length' */
-/* is the maximum number of characters that getstr will allow the user to 	*/
-/* input into the string. 'mode' specifies upper case characters are echoed */
-/* or wordwrap or if in message input (^A sequences allowed). ^W backspaces */
-/* a word, ^X backspaces a line, ^Gs, BSs, TABs are processed, LFs ignored. */
-/* ^N non-destructive BS, ^V center line. Valid keys are echoed.			*/
-/****************************************************************************/
-int getstr(char *strout, size_t maxlen, long mode)
-{
-	size_t i,l,x,z;	/* i=current position, l=length, j=printed chars */
-					/* x&z=misc */
-	uchar ch,str1[256],str2[256],ins=0,atr;
-
-	if(mode&K_LINE && user_misc&ANSI) {
-		attr(LIGHTGRAY|HIGH|(BLUE<<4));  /* white on blue */
-		for(i=0;i<maxlen;i++)
-			outchar(SP);
-		bprintf("\x1b[%dD",maxlen); 
-	}
-	i=l=0;	/* i=total number of chars, j=number of printable chars */
-	if(wordwrap[0]) {
-		strcpy(str1,wordwrap);
-		wordwrap[0]=0; 
-	}
-	else str1[0]=0;
-	if(mode&K_EDIT)
-		strcat(str1,strout);
-	if(strlen(str1)>maxlen)
-		str1[maxlen]=0;
-	atr=curatr;
-	if(mode&K_AUTODEL && str1[0])
-		attr(BLUE|(LIGHTGRAY<<4));
-	rputs(str1);
-	if(mode&K_EDIT && !(mode&(K_LINE|K_AUTODEL)) && user_misc&ANSI)
-		bputs("\x1b[K");  /* destroy to eol */
-	i=l=strlen(str1);
-
-	if(mode&K_AUTODEL && str1[0]) {
-		ch=getkey(mode);
-		attr(atr);
-		if(isprint(ch) || ch==0x7f) {
-			for(i=0;i<l;i++)
-				bputs("\b \b");
-			i=l=0; 
-		}
-		else {
-			for(i=0;i<l;i++)
-				outchar(BS);
-			rputs(str1);
-			i=l; 
-		}
-		if(ch!=SP && ch!=TAB)
-			ungetkey(ch); 
-	}
-
-	while((ch=getkey(mode|K_GETSTR))!=CR && !aborted) {
-		switch(ch) {
-			case 1:	/* Ctrl-A for ANSI */
-				if(!(mode&K_MSG) || i>maxlen-3)
-					break;
-				if(ins) {
-					if(l<maxlen)
-						l++;
-					for(x=l;x>i;x--)
-						str1[x]=str1[x-1];
-					rprintf("%.*s",l-i,str1+i);
-					rprintf("\x1b[%dD",l-i);
-					if(i==maxlen-1)
-						ins=0; 
-				}
-				outchar(str1[i++]=1);
-				break;
-			case 2:	/* Ctrl-B Beginning of Line */
-				if(user_misc&ANSI && i) {
-					bprintf("\x1b[%dD",i);
-					i=0; 
-				}
-				break;
-			case 4:	/* Ctrl-D Delete word right */
-        		if(i<l) {
-					x=i;
-					while(x<l && str1[x]!=SP) {
-						outchar(SP);
-						x++; 
-					}
-					while(x<l && str1[x]==SP) {
-						outchar(SP);
-						x++; 
-					}
-					bprintf("\x1b[%dD",x-i);   /* move cursor back */
-					z=i;
-					while(z<l-(x-i))  {             /* move chars in string */
-						outchar(str1[z]=str1[z+(x-i)]);
-						z++; 
-					}
-					while(z<l) {					/* write over extra chars */
-						outchar(SP);
-						z++; 
-					}
-					bprintf("\x1b[%dD",z-i);
-					l-=x-i; 						/* l=new length */
-				}
-				break;
-			case 5:	/* Ctrl-E End of line */
-				if(user_misc&ANSI && i<l) {
-					bprintf("\x1b[%dC",l-i);  /* move cursor right one */
-					i=l; 
-				}
-				break;
-			case 6:	/* Ctrl-F move cursor forewards */
-				if(i<l && (user_misc&ANSI)) {
-					bputs("\x1b[C");   /* move cursor right one */
-					i++; 
-				}
-				break;
-			case 7:
-				if(!(mode&K_MSG))
-					break;
-				 if(ins) {
-					if(l<maxlen)
-						l++;
-					for(x=l;x>i;x--)
-						str1[x]=str1[x-1];
-					if(i==maxlen-1)
-						ins=0; 
-				 }
-				 if(i<maxlen) {
-					str1[i++]=7;
-					outchar(7); 
-				 }
-				 break;
-			case 14:	/* Ctrl-N Next word */
-				if(i<l && (user_misc&ANSI)) {
-					x=i;
-					while(str1[i]!=SP && i<l)
-						i++;
-					while(str1[i]==SP && i<l)
-						i++;
-					bprintf("\x1b[%dC",i-x); 
-				}
-				break;
-			case 0x1c:	  /* Ctrl-\ Previous word */
-				if(i && (user_misc&ANSI)) {
-					x=i;
-					while(str1[i-1]==SP && i)
-						i--;
-					while(str1[i-1]!=SP && i)
-						i--;
-					bprintf("\x1b[%dD",x-i); 
-				}
-				break;
-			case 18:	/* Ctrl-R Redraw Line */
-				redrwstr(str1,i,l,0);
-				break;
-			case TAB:
-				if(!(i%TABSIZE)) {
-            		if(ins) {
-						if(l<maxlen)
-							l++;
-						for(x=l;x>i;x--)
-							str1[x]=str1[x-1];
-						if(i==maxlen-1)
-							ins=0; 
-					}
-					str1[i++]=SP;
-					outchar(SP); 
-				}
-				while(i<maxlen && i%TABSIZE) {
-            		if(ins) {
-						if(l<maxlen)
-							l++;
-						for(x=l;x>i;x--)
-							str1[x]=str1[x-1];
-						if(i==maxlen-1)
-							ins=0; 
-					}
-					str1[i++]=SP;
-					outchar(SP); 
-				}
-				if(ins)
-					redrwstr(str1,i,l,0);
-				break;
-			case BS:
-				if(!i)
-					break;
-				i--;
-				l--;
-				if(i!=l) {				/* Deleting char in middle of line */
-					outchar(BS);
-					z=i;
-					while(z<l)	{		/* move the characters in the line */
-						outchar(str1[z]=str1[z+1]);
-						z++; 
-					}
-					outchar(SP);		/* write over the last char */
-					bprintf("\x1b[%dD",(l-i)+1); 
-				}
-				else
-					bputs("\b \b");
-				break;
-			case 12:	/* Ctrl-L 	Center line (used to be Ctrl-V) */
-				str1[l]=0;
-				l=bstrlen(str1);
-				for(x=0;x<(maxlen-l)/2;x++)
-					str2[x]=SP;
-				str2[x]=0;
-				strcat(str2,str1);
-				strcpy(strout,str2);
-				l=strlen(strout);
-				if(mode&K_MSG)
-					redrwstr(strout,i,l,K_MSG);
-				else {
-					while(i--)
-						bputs("\b");
-					bputs(strout);
-					if(mode&K_LINE)
-						attr(LIGHTGRAY); 
-				}
-				CRLF;
-				return(l);
-			case 23:	/* Ctrl-W   Delete word left */
-				if(i<l) {
-					x=i;							/* x=original offset */
-					while(i && str1[i-1]==SP) {
-						outchar(BS);
-						i--; 
-					}
-					while(i && str1[i-1]!=SP) {
-						outchar(BS);
-						i--; 
-					}
-					z=i;                            /* i=z=new offset */
-					while(z<l-(x-i))  {             /* move chars in string */
-						outchar(str1[z]=str1[z+(x-i)]);
-						z++; 
-					}
-					while(z<l) {					/* write over extra chars */
-						outchar(SP);
-						z++; 
-					}
-					bprintf("\x1b[%dD",z-i);        /* back to new x corridnant */
-					l-=x-i; 						/* l=new length */
-				}
-				else {
-            		while(i && str1[i-1]==SP) {
-						i--;
-						l--;
-						bputs("\b \b"); 
-					}
-					while(i && str1[i-1]!=SP) {
-						i--;
-						l--;
-						bputs("\b \b"); 
-					} 
-				}
-				break;
-			case 24:	/* Ctrl-X   Delete entire line */
-				while(i<l) {
-					outchar(SP);
-					i++; 
-				}
-				while(l) {
-					l--;
-					bputs("\b \b"); 
-				}
-				i=0;
-				break;
-			case 25:	/* Ctrl-Y	Delete to end of line */
-				if(user_misc&ANSI) {
-					bputs("\x1b[s\x1b[K\x1b[u");
-					l=i; 
-				}
-				break;
-			case 22:	/* Ctrl-V		Toggles Insert/Overwrite */
-				if(!(user_misc&ANSI))
-					break;
-				if(ins) {
-					ins=0;
-					redrwstr(str1,i,l,0); 
-				}
-				else if(i<l) {
-					ins=1;
-					bprintf("\x1b[s\x1b[%dC",80-i);         /* save pos  */
-					z=curatr;								/* and got to EOL */
-					attr(z|BLINK|HIGH);
-					outchar('�');
-					attr(z);
-					bputs("\x1b[u");   /* restore pos */
-				}
-				break;
-			case 0x1d:	/* Ctrl-]  Reverse Cursor Movement */
-				if(i && (user_misc&ANSI)) {
-					bputs("\x1b[D");   /* move cursor left one */
-					i--; 
-				}
-				break;
-			case 0x7f:	/* Ctrl-BkSpc (DEL) Delete current char */
-				if(i==l) {	/* Backspace if end of line */
-					if(i) {
-						i--;
-						l--;
-						bputs("\b \b");
-					}
-					break;
-				}
-				l--;
-				z=i;
-				while(z<l)	{		/* move the characters in the line */
-					outchar(str1[z]=str1[z+1]);
-					z++; 
-				}
-				outchar(SP);		/* write over the last char */
-				bprintf("\x1b[%dD",(l-i)+1);
-				break;
-			case ESC:
-				if(!(user_misc&ANSI))
-					break;
-				if((ch=getkey(0x8000))!='[') {
-					ungetkey(ch);
-					break; 
-				}
-				if((ch=getkey(0x8000))=='C') {
-					if(i<l) {
-						bputs("\x1b[C");   /* move cursor right one */
-						i++; 
-					} 
-				}
-				else if(ch=='D') {
-					if(i) {
-						bputs("\x1b[D");   /* move cursor left one */
-						i--; 
-					} 
-				}
-				else {
-					while(isdigit(ch) || ch==';' || isalpha(ch)) {
-						if(isalpha(ch)) {
-							ch=getkey(0);
-							break; 
-						}
-						ch=getkey(0); 
-					}
-					ungetkey(ch); 
-				}
-				break;
-			default:
-				if(mode&K_WRAP && i==maxlen && ch>=SP && !ins) {
-					str1[i]=0;
-					if(ch==SP) {	/* don't wrap a space as last char */
-						strcpy(strout,str1);
-						if(stripattr(strout))
-							redrwstr(strout,i,l,K_MSG);
-						CRLF;
-						return(i); 
-					}
-					x=i-1;
-					z=1;
-					wordwrap[0]=ch;
-					while(str1[x]!=SP && x)
-						wordwrap[z++]=str1[x--];
-					if(x<(maxlen/2)) {
-						wordwrap[1]=0;	/* only wrap one character */
-						strcpy(strout,str1);
-						if(stripattr(strout))
-							redrwstr(strout,i,l,K_MSG);
-						CRLF;
-						return(i); 
-					}
-					wordwrap[z]=0;
-					while(z--) {
-						i--;
-						bputs("\b \b"); 
-					}
-					strrev(wordwrap);
-					str1[x]=0;
-					strcpy(strout,str1);
-					if(stripattr(strout))
-						redrwstr(strout,i,x,mode);
-					CRLF;
-					return(x); 
-				}
-				if(i<maxlen && ch>=SP) {
-					if(mode&K_UPRLWR)
-						if(!i || (i && (str1[i-1]==SP || str1[i-1]=='-'
-							|| str1[i-1]=='.' || str1[i-1]=='_')))
-							ch=toupper(ch);
-						else
-							ch=tolower(ch);
-					if(ins) {
-						if(l<maxlen)	/* l<maxlen */
-							l++;
-						for(x=l;x>i;x--)
-							str1[x]=str1[x-1];
-						rprintf("%.*s",l-i,str1+i);
-						rprintf("\x1b[%dD",l-i);
-						if(i==maxlen-1) {
-							bputs("  \b\b");
-							ins=0; 
-						} 
-					}
-					str1[i++]=ch;
-					outchar(ch); 
-				} 
-			} /* switch */
-		if(i>l)
-			l=i;
-		if(mode&K_CHAT && !l)
-			return(0); 
-	}
-	if(i>l)
-		l=i;
-	str1[l]=0;
-	if(!aborted) {
-		strcpy(strout,str1);
-		if(stripattr(strout) || ins)
-			redrwstr(strout,i,l,K_MSG); 
-	}
-	else
-		l=0;
-	if(mode&K_LINE) attr(LIGHTGRAY);
-	if(!(mode&K_NOCRLF)) {
-		outchar(CR);
-		if(!(mode&K_MSG && aborted))
-			outchar(LF); 
-	}
-	return(l);
-}
-
-/****************************************************************************/
-/* Redraws str using i as current cursor position and l as length           */
-/****************************************************************************/
-void redrwstr(char *strin, int i, int l, long mode)
-{
-	char str[256],c;
-
-	sprintf(str,"%-*.*s",l,l,strin);
-	c=i;
-	while(c--)
-		outchar(BS);
-	if(mode&K_MSG)
-		bputs(str);
-	else
-		rputs(str);
-	if(user_misc&ANSI) {
-		bputs("\x1b[K");
-		if(i<l)
-			bprintf("\x1b[%dD",l-i); 
-	}
-	else {
-		while(c<79)	{ /* clear to end of line */
-			outchar(SP);
-			c++; 
-		}
-		while(c>l) { /* back space to end of string */
-			outchar(BS);
-			c--; 
-		} 
-	}
-}
-
-/****************************************************************************/
-/* Strips invalid Ctrl-Ax sequences from str                                */
-/* Returns number of ^A's in line                                           */
-/****************************************************************************/
-char stripattr(char *strin)
-{
-	uchar str[81];
-	uchar a,c,d,e;
-
-	e=strlen(strin);
-	for(a=c=d=0;c<e;c++) {
-		if(strin[c]==1) {
-			a++;
-			switch(toupper(strin[c+1])) {
-				case '-':	/* clear 		*/
-				case '_':	/* clear		*/
-				case 'B':	/* blue 	fg 	*/
-				case 'C':	/* cyan 	fg 	*/
-				case 'G':	/* green	fg 	*/
-				case 'H':	/* high 	fg 	*/
-				case 'I':	/* blink 	   	*/
-				case 'K':	/* black 	fg 	*/
-				case 'L':	/* cls         	*/
-				case 'M':	/* magenta  fg 	*/
-				case 'N':	/* normal      	*/
-				case 'P':	/* pause       	*/
-				case 'Q':   /* pause reset  */
-				case 'R':	/* red      fg 	*/
-				case 'W':	/* white    fg 	*/
-				case 'Y':	/* yellow   fg 	*/
-				case '0':	/* black 	bg 	*/
-				case '1':	/* red   	bg 	*/
-				case '2':	/* green 	bg 	*/
-				case '3':   /* brown	bg 	*/
-				case '4':	/* blue  	bg 	*/
-				case '5':   /* magenta 	bg 	*/
-				case '6':	/* cyan    	bg 	*/
-				case '7':	/* white   	bg 	*/
-					break;
-				default:
-					c++;
-					continue; 
-			} 
-		}
-		str[d++]=strin[c]; 
-	}
-	str[d]=0;
-	strcpy(strin,str);
-	return(a);
-}
-
-/***************************************************************************/
-/* Changes local and remote text attributes accounting for monochrome      */
-/***************************************************************************/
-void attr(int atr)
-{
-
-	if(!(user_misc&ANSI) || aborted)
-		return;
-	if(!(user_misc&COLOR)) {  /* eliminate colors if user doesn't have them */
-		if(atr&LIGHTGRAY)		/* if any bits set, set all */
-			atr|=LIGHTGRAY;
-		if(atr&(LIGHTGRAY<<4))
-			atr|=(LIGHTGRAY<<4);
-		if(atr&LIGHTGRAY && atr&(LIGHTGRAY<<4))
-			atr&=~LIGHTGRAY; }	/* if background is solid, forground is black */
-	if(curatr==atr) /* attribute hasn't changed. don't send codes */
-		return;
-
-	if((!(atr&HIGH) && curatr&HIGH)	|| (!(atr&BLINK) && curatr&BLINK)
-		|| atr==LIGHTGRAY) {
-		bprintf("\x1b[0m");
-		curatr=LIGHTGRAY; }
-
-	if(atr==LIGHTGRAY) {				 /* no attributes */
-		curatr=atr;
-		return; }
-
-	if(atr&BLINK) {						/* special attributes */
-		if(!(curatr&BLINK))
-			bprintf("\x1b[5m"); }
-	if(atr&HIGH) {
-		if(!(curatr&HIGH))
-			bprintf("\x1b[1m"); }
-
-	if((atr&0x7)==BLACK) {				/* foreground colors */
-		if((curatr&0x7)!=BLACK)
-			bprintf("\x1b[30m"); }
-	else if((atr&0x7)==RED) {
-		if((curatr&0x7)!=RED)
-			bprintf("\x1b[31m"); }
-	else if((atr&0x7)==GREEN) {
-		if((curatr&0x7)!=GREEN)
-			bprintf("\x1b[32m"); }
-	else if((atr&0x7)==BROWN) {
-		if((curatr&0x7)!=BROWN)
-			bprintf("\x1b[33m"); }
-	else if((atr&0x7)==BLUE) {
-		if((curatr&0x7)!=BLUE)
-			bprintf("\x1b[34m"); }
-	else if((atr&0x7)==MAGENTA) {
-		if((curatr&0x7)!=MAGENTA)
-			bprintf("\x1b[35m"); }
-	else if((atr&0x7)==CYAN) {
-		if((curatr&0x7)!=CYAN)
-			bprintf("\x1b[36m"); }
-	else if((atr&0x7)==LIGHTGRAY) {
-		if((curatr&0x7)!=LIGHTGRAY)
-			bprintf("\x1b[37m"); }
-
-	if((atr&0x70)==(BLACK<<4)) {		/* background colors */
-		if((curatr&0x70)!=(BLACK<<4))
-			bprintf("\x1b[40m"); }
-	else if((atr&0x70)==(RED<<4)) {
-		if((curatr&0x70)!=(RED<<4))
-			bprintf("\x1b[41m"); }
-	else if((atr&0x70)==(GREEN<<4)) {
-		if((curatr&0x70)!=(GREEN<<4))
-			bprintf("\x1b[42m"); }
-	else if((atr&0x70)==(BROWN<<4)) {
-		if((curatr&0x70)!=(BROWN<<4))
-			bprintf("\x1b[43m"); }
-	else if((atr&0x70)==(BLUE<<4)) {
-		if((curatr&0x70)!=(BLUE<<4))
-			bprintf("\x1b[44m"); }
-	else if((atr&0x70)==(MAGENTA<<4)) {
-		if((curatr&0x70)!=(MAGENTA<<4))
-			bprintf("\x1b[45m"); }
-	else if((atr&0x70)==(CYAN<<4)) {
-		if((curatr&0x70)!=(CYAN<<4))
-			bprintf("\x1b[46m"); }
-	else if((atr&0x70)==(LIGHTGRAY<<4)) {
-		if((curatr&0x70)!=(LIGHTGRAY<<4))
-			bprintf("\x1b[47m"); }
-
-	curatr=atr;
-}
-
-/****************************************************************************/
-/* Peform clear screen														*/
-/****************************************************************************/
-void cls(void)
-{
-	if(lncntr>1 && !tos) {
-		lncntr=0;
-		CRLF;
-		bpause();
-		while(lncntr && !aborted)
-			bpause(); }
-
-	if(user_misc&ANSI)
-		bputs("\x1b[2J\x1b[H");	/* clear screen, home cursor */
-	else 
-		outchar(FF);
-	tos=1;
-	lncntr=0;
-}
-
-/****************************************************************************/
-/* performs the correct attribute modifications for the Ctrl-A code			*/
-/****************************************************************************/
-void ctrl_a(char x)
-{
-	char atr=curatr;
-	int i;
-
-	if((uchar)x>=0x7f) {
-		if(user_misc&ANSI)
-			bprintf("\x1b[%uC",(uchar)x-0x7f);
-		else
-			for(i=0;i<(uchar)x-0x7f;i++)
-				outchar(SP);
-		return; }
-
-	switch(toupper(x)) {
-		case '-':								/* turn off all attributes if */
-			if(atr&(HIGH|BLINK|(LIGHTGRAY<<4)))	/* high intensity, blink or */
-				attr(LIGHTGRAY);				/* background bits are set */
-			break;
-		case '_':								/* turn off all attributes if */
-			if(atr&(BLINK|(LIGHTGRAY<<4)))		/* blink or background is set */
-				attr(LIGHTGRAY);
-			break;
-		case ',':   /* Delay 1/10 sec */
-			mswait(100);
-			break;
-		case ';':   /* Delay 1/2 sec */
-			mswait(500);
-			break;
-		case '.':   /* Delay 2 secs */
-			mswait(2000);
-			break;
-		case 'P':	/* Pause */
-			bpause();
-			break;
-		case 'Q':   /* Pause reset */
-			lncntr=0;
-			break;
-		case 'L':	/* CLS (form feed) */
-			cls();
-			break;
-		case '>':   /* CLREOL */
-			if(user_misc&ANSI)
-				bputs("\x1b[K");
-#if 0
-			else {
-				i=j=wherey();
-				while(i++<80)
-					outchar(SP);
-				while(j++<80)
-					outchar(BS); }
-#endif
-			break;
-		case '<':   /* Non-destructive backspace */
-			outchar(BS);
-			break;
-		case '[':   /* Carriage return */
-			outchar(CR);
-			break;
-		case ']':   /* Line feed */
-			outchar(LF);
-			break;
-		case 'A':   /* Ctrl-A */
-			outchar(1);
-			break;
-		case 'H': 	/* High intensity */
-			atr|=HIGH;
-			attr(atr);
-			break;
-		case 'I':	/* Blink */
-			atr|=BLINK;
-			attr(atr);
-			break;
-		case 'N': 	/* Normal */
-			attr(LIGHTGRAY);
-			break;
-		case 'R':
-			atr=(atr&0xf8)|RED;
-			attr(atr);
-			break;
-		case 'S':
-			nodesync();
-			break;
-		case 'G':
-			atr=(atr&0xf8)|GREEN;
-			attr(atr);
-			break;
-		case 'B':
-			atr=(atr&0xf8)|BLUE;
-			attr(atr);
-			break;
-		case 'W':	/* White */
-			atr=(atr&0xf8)|LIGHTGRAY;
-			attr(atr);
-			break;
-		case 'C':
-			atr=(atr&0xf8)|CYAN;
-			attr(atr);
-			break;
-		case 'M':
-			atr=(atr&0xf8)|MAGENTA;
-			attr(atr);
-			break;
-		case 'Y':
-			atr=(atr&0xf8)|BROWN;
-			attr(atr);
-			break;
-		case 'K':	/* Black */
-			atr=(atr&0xf8)|BLACK;
-			attr(atr);
-			break;
-		case '0':	/* Black Background */
-			atr=(atr&0x8f)|(uchar)(BLACK<<4);
-			attr(atr);
-			break;
-		case '1':	/* Red Background */
-			atr=(atr&0x8f)|(uchar)(RED<<4);
-			attr(atr);
-			break;
-		case '2':	/* Green Background */
-			atr=(atr&0x8f)|(uchar)(GREEN<<4);
-			attr(atr);
-			break;
-		case '3':	/* Yellow Background */
-			atr=(atr&0x8f)|(uchar)(BROWN<<4);
-			attr(atr);
-			break;
-		case '4':	/* Blue Background */
-			atr=(atr&0x8f)|(uchar)(BLUE<<4);
-			attr(atr);
-			break;
-		case '5':	/* Magenta Background */
-			atr=(atr&0x8f)|(uchar)(MAGENTA<<4);
-			attr(atr);
-			break;
-		case '6':	/* Cyan Background */
-			atr=(atr&0x8f)|(uchar)(CYAN<<4);
-			attr(atr);
-			break;
-		case '7':	/* White Background */
-			atr=(atr&0x8f)|(uchar)(LIGHTGRAY<<4);
-			attr(atr);
-			break; }
-}
-
-/****************************************************************************/
-/* Network open function. Opens all files DENYALL and retries LOOP_NOPEN    */
-/* number of times if the attempted file is already open or denying access  */
-/* for some other reason.	All files are opened in BINARY mode.			*/
-/****************************************************************************/
-int nopen(char *str, int access)
-{
-	char count=0;
-	int file,share;
-
-	if(access&SH_DENYNO) share=SH_DENYNO;
-	else if(access==O_RDONLY) share=SH_DENYWR;
-	else share=SH_DENYRW;
-	while(((file=sopen(str,O_BINARY|access,share))==-1)
-		&& errno==EACCES && count++<LOOP_NOPEN)
-		if(count>10)
-			mswait(50);
-	if(count>(LOOP_NOPEN/2) && count<=LOOP_NOPEN)
-		bprintf("\r\nNOPEN COLLISION - File: %s Count: %d\r\n"
-			,str,count);
-	if(file==-1 && errno==EACCES)
-		bputs("\7\r\nNOPEN: ACCESS DENIED\r\n\7");
-	return(file);
-}
-
-/****************************************************************************/
-/* Reads data from XTRN.DAT in the node directory and fills the appropriate */
-/* global variables.														*/
-/* Initializes starttime variable with current time.						*/
-/****************************************************************************/
-void initdata(void)
-{
-	char str[256],tmp[256];
-	int i;
-	FILE *stream;
-
-#ifdef _WINSOCKAPI_
-    WSAStartup(MAKEWORD(1,1), &WSAData);
-	client_socket=INVALID_SOCKET;
-#endif
-
-#ifdef __WATCOMC__
-	putenv("TZ=UCT0");
-	setvbuf(stdout,NULL,_IONBF,0);
-	setvbuf(stderr,NULL,_IONBF,0);
-#endif
-
-#ifdef __SC__
-    setvbuf(stdout,NULL,_IONBF,0);
-	con_fp=stdout;
-#else
-	con_fp=stderr;
-#endif
-
-#ifdef __16BIT__
-
-#if defined(__TURBOC__) || defined(__SC__)	/* Borland or Symantec */
-	ctrlbrk(cbreakh);
-#endif
-
-	if(setmode(fileno(con_fp),O_BINARY)==-1) {	 /* eliminate LF expansion */
-		printf("Can't set console output to BINARY\n");
-		exit(1); }
-#endif
-
-	sprintf(str,"%sXTRN.DAT",node_dir);
-	if((stream=fopen(str,"rt"))==NULL) {
-		printf("Can't open %s\r\n",str);
-		exit(1); }
-	fgets(str,81,stream);			/* username */
-	sprintf(user_name,"%.25s",str);
-	truncsp(user_name);
-	fgets(str,81,stream);			/* system name */
-	sprintf(sys_name,"%.40s",str);
-	truncsp(sys_name);
-	fgets(str,81,stream);			/* system operator */
-	sprintf(sys_op,"%.40s",str);
-	truncsp(sys_op);
-	fgets(str,81,stream);			/* system guru */
-	sprintf(sys_guru,"%.40s",str);
-	truncsp(sys_guru);
-
-	fgets(str,81,stream);			/* ctrl dir */
-	str[50]=0;
-	if(str[0]=='.')
-		sprintf(ctrl_dir,"%s%s",node_dir,str);
-	else
-		strcpy(ctrl_dir,str);
-	truncsp(ctrl_dir);
-	if(_fullpath(str,ctrl_dir,50))
-		strcpy(ctrl_dir,str);
-	backslash(ctrl_dir);
-
-	fgets(str,81,stream);			/* data dir */
-	if(str[0]=='.')
-		sprintf(data_dir,"%s%s",node_dir,str);
-	else
-		sprintf(data_dir,"%.40s",str);
-	truncsp(data_dir);
-	if(_fullpath(str,data_dir,50))
-		strcpy(data_dir,str);
-	backslash(data_dir);
-
-	fgets(str,81,stream);			/* total nodes */
-	sys_nodes=atoi(str);
-	fgets(str,81,stream);			/* current node */
-	node_num=atoi(str);
-	fgets(str,81,stream);			/* time left */
-	timeleft=atoi(str);
-	fgets(str,81,stream);			/* ANSI? (Yes, Mono, or No) */
-	user_misc=0;
-	if(str[0]=='Y')
-		user_misc|=(ANSI|COLOR);
-	else if(str[0]=='M')
-		user_misc|=ANSI;
-	fgets(str,81,stream);			/* screen lines */
-	user_rows=atoi(str);
-	fgets(str,81,stream);			/* credits */
-	user_cdt=atol(str);
-	fgets(str,81,stream);			/* level */
-	user_level=atoi(str);
-	fgets(str,81,stream);			/* was transfer level, left for compat. */
-	fgets(str,81,stream);			/* birthdate */
-	truncsp(str);
-	sprintf(user_birth,"%.8s",str);
-	fgets(str,81,stream);			/* sex */
-	user_sex=str[0];
-	fgets(str,81,stream);			/* user number */
-	user_number=atoi(str);
-	fgets(str,81,stream);			/* user phone number */
-	sprintf(user_phone,"%.12s",str);
-	truncsp(user_phone);
-	fgets(str,81,stream);			/* com port (0 if local or no modem) */
-	com_port=atoi(str);
-	fgets(str,81,stream);			/* com (UART) irq */
-	com_irq=atoi(str);
-	fgets(str,81,stream);			/* com (UART) base address in hex */
-	truncsp(str);
-	com_base=(uint)ahtoul(str);
-	fgets(str,81,stream);			/* com rate */
-	com_rate=(ulong)atol(str);
-	fgets(str,81,stream);			/* hardware flow control (Y/N) */
-	if(toupper(str[0])=='Y')
-		mdm_misc|=MDM_FLOWCTRL;
-	fgets(str,81,stream);			/* locked DTE rate (Y/N) */
-	if(toupper(str[0])=='Y')
-		mdm_misc|=MDM_STAYHIGH;
-	fgets(str,81,stream);			/* modem initialization string */
-	sprintf(mdm_init,"%.63s",str);
-	truncsp(mdm_init);
-	fgets(str,81,stream);			/* modem special init string */
-	sprintf(mdm_spec,"%.63s",str);
-	truncsp(mdm_spec);
-	fgets(str,81,stream);			/* modem terminal mode string */
-	sprintf(mdm_term,"%.63s",str);
-	truncsp(mdm_term);
-	fgets(str,81,stream);			/* modem dial string */
-	sprintf(mdm_dial,"%.63s",str);
-	truncsp(mdm_dial);
-	fgets(str,81,stream);			/* modem off-hook string */
-	sprintf(mdm_offh,"%.63s",str);
-	truncsp(mdm_offh);
-	fgets(str,81,stream);			/* modem answer string */
-	sprintf(mdm_answ,"%.63s",str);
-	truncsp(mdm_answ);
-	fgets(str,81,stream);			/* memory address of modem status register */
-	msr=(uint FAR16 *)atol(str);
-	if(!fgets(str,81,stream))		/* total number of external programs */
-		total_xtrns=0;
-	else
-		total_xtrns=atoi(str);
-	if(total_xtrns && (xtrn=(char **)MALLOC(sizeof(char *)*total_xtrns))==NULL) {
-		printf("Allocation error 1: %u\r\n",sizeof(char *)*total_xtrns);
-		exit(1); }
-	for(i=0;i<(int)total_xtrns;i++) {
-		fgets(str,81,stream);
-		truncsp(str);
-		if((xtrn[i]=(char *)MALLOC(strlen(str)+1))==NULL) {
-			printf("Allocation error 2 (%u): %u\r\n",i,strlen(str)+1);
-			exit(1); }
-		strcpy(xtrn[i],str); }
-	fgets(str,81,stream);			/* user's main flags */
-	sprintf(user_flags1,"%.26s",str);
-	fgets(str,81,stream);			/* user's xfer flags */
-	sprintf(user_flags2,"%.26s",str);
-	fgets(str,81,stream);			/* user's exemptions */
-	sprintf(user_exempt,"%.26s",str);
-	fgets(str,81,stream);			/* user's restrictions */
-	sprintf(user_rest,"%.26s",str);
-	fgets(str,81,stream);			/* user's expiration date */
-	truncsp(str);
-	user_expire=ahtoul(str);
-	str[0]=0;
-	fgets(str,81,stream);			/* user's address */
-	sprintf(user_address,"%.30s",str);
-	truncsp(user_address);
-	fgets(str,81,stream);			/* user's location (city, state) */
-	sprintf(user_location,"%.30s",str);
-	truncsp(user_location);
-	fgets(str,81,stream);			/* user's zip/postal code */
-	sprintf(user_zipcode,"%.10s",str);
-	truncsp(user_zipcode);
-	str[0]=0;
-	fgets(str,81,stream);
-	sprintf(user_flags3,"%.26s",str);
-	fgets(str,81,stream);
-	sprintf(user_flags4,"%.26s",str);
-	if(fgets(str,81,stream))		/* Time-slice API type */
-#ifdef __16BIT__ 
-		mswtyp=ahtoul(str);
-#else
-		;
-#endif
-	str[0]=0;
-	fgets(str,81,stream);
-	truncsp(str);
-	sprintf(user_realname,"%.25s",str);
-	str[0]=0;
-	fgets(str,81,stream);
-	user_dce=atol(str);
-
-	str[0]=0;
-	fgets(str,81,stream);			/* exec dir */
-	if(!str[0])
-		sprintf(exec_dir,"%s../exec/",ctrl_dir);
-	else {
-		if(str[0]=='.')
-			sprintf(exec_dir,"%s%s",node_dir,str);
-		else
-			sprintf(exec_dir,"%.50s",str); }
-	truncsp(exec_dir);
-	if(_fullpath(str,exec_dir,50))
-		strcpy(exec_dir,str);
-	backslash(exec_dir);
-
-	str[0]=0;
-	fgets(str,81,stream);			/* text dir */
-	if(!str[0])
-		sprintf(text_dir,"%s../text/",ctrl_dir);
-	else {
-		if(str[0]=='.')
-			sprintf(text_dir,"%s%s",node_dir,str);
-		else
-			sprintf(text_dir,"%.50s",str); }
-	truncsp(text_dir);
-	if(_fullpath(str,text_dir,50))
-		strcpy(text_dir,str);
-	backslash(text_dir);
-
-	str[0]=0;
-	fgets(str,81,stream);			/* temp dir */
-	if(!str[0])
-		sprintf(temp_dir,"%stemp/",node_dir);
-	else {
-		if(str[0]!=BACKSLASH && str[1]!=':')
-			sprintf(temp_dir,"%s%s",node_dir,str);
-		else
-			sprintf(temp_dir,"%.50s",str); }
-	truncsp(temp_dir);
-	if(_fullpath(str,temp_dir,50))
-		strcpy(temp_dir,str);
-	backslash(temp_dir);
-
-	str[0]=0;
-	fgets(str,81,stream);
-	sprintf(sys_id,"%.8s",str);
-
-	str[0]=0;
-	fgets(str,81,stream);
-	truncsp(str);
-	if(str[0])
-		node_misc=(uint)ahtoul(str);
-	else
-		node_misc=NM_LOWPRIO;
-
-#ifndef __16BIT__
-	str[0]=0;
-	fgets(str,81,stream);
-	client_socket=atoi(str);
-
-	if(client_socket!=INVALID_SOCKET) {
-
-#ifdef _WIN32
-		output_sem=CreateEvent(
-						 NULL	// pointer to security attributes
-						,TRUE	// flag for manual-reset event
-						,FALSE	// flag for initial state
-						,NULL	// pointer to event-object name
-						);
-		if(output_sem==NULL) {
-			printf("\r\n\7Error %d creating output_event\r\n",GetLastError());
-			exit(1);
-		}
-#else
-		sem_init(&output_sem,0,0);
-#endif
-		_beginthread(output_thread,0,NULL);
-	}
-#endif
-
-	fclose(stream);
-
-	sprintf(str,"%sINTRSBBS.DAT",node_dir);     /* Shrank to run! */
-	if(fexist(str)) {
-		if((stream=fopen(str,"rt"))==NULL) {
-			printf("Can't open %s\n",str);
-			exit(1); 
-		}
-		fgets(tmp,81,stream);					/* so get MSR address from file */
-		msr=(uint FAR16 *)atol(tmp);
-		fclose(stream);
-		remove(str); 
-	}
-
-	starttime=time(NULL);			/* initialize start time stamp */
-	wordwrap[0]=0;					/* set wordwrap to null */
-	mnehigh=LIGHTGRAY|HIGH; 		/* mnemonics highlight color */
-	mnelow=GREEN;					/* mnemonics normal text color */
-	sec_warn=180;					/* seconds till inactivity warning */
-	sec_timeout=300;				/* seconds till inactivity timeout */
-	tos=lncntr=0;					/* init topofscreen and linecounter to 0 */
-	lastnodemsg=0;					/* Last node to send message to */
-	aborted=0;                      /* Ctrl-C hit flag */
-	sysop_level=90; 				/* Minimum level to be considered sysop */
-	timeleft_warn=0;				/* Running out of time warning */
-
-	sprintf(str,"%s%s",ctrl_dir,"node.dab");
-	if((nodefile=sopen(str,O_BINARY|O_RDWR,SH_DENYNO))==-1) {
-		printf("\r\n\7Error opening %s\r\n",str);
-		exit(1); 
-	}
-
-	sprintf(str,"%suser/name.dat",data_dir);
-	if((i=nopen(str,O_RDONLY))==-1) {
-		printf("\r\n\7Error opening %s\r\n",str);
-		exit(1); 
-	}
-	memset(str,0,30);
-	read(i,str,26);
-	close(i);
-	if(str[25]==CR) 	/* Version 1b */
-		name_len=25;
-	else				/* Version 1a */
-		name_len=30;
-
-#ifdef __unix__
-	_termios_setup();
-#endif
-
-	if(xsdk_mode&XSDK_MODE_NOCONSOLE) {
-		con_fp=NULL;
-#ifdef _WIN32
-		FreeConsole();
-#endif
-	}
-
-	attr(LIGHTGRAY);				/* initialize color and curatr to plain */
-}
-
-/****************************************************************************/
-/* Automatic RIP & WIP terminal detection function. Sets RIP and WIP bits	*/
-/* in user_misc variable. Must be called AFTER initdat(), not before.		*/
-/****************************************************************************/
-void get_term(void)
-{
-	char str[128],ch;
-	int i;
-
-	bputs("\r\x1b[!_\x1b[0t_\r        \r");
-	mswait(500);
-	for(i=0;i<120;i++) {
-		ch=inkey(0);
-		if(!ch)
-			break;
-		mswait(1);
-		str[i]=ch; }
-	str[i]=0;
-	if(strstr(str,"RIPSCRIP"))
-		user_misc|=RIP;
-	if(strstr(str,"DC-TERM"))
-		user_misc|=WIP;
-}
-
-/****************************************************************************/
-/* Truncates white-space chars off end of 'str' and terminates at first tab */
-/****************************************************************************/
-void truncsp(uchar *str)
-{
-	char c;
-
-	str[strcspn(str,"\t")]=0;
-	c=strlen(str);
-	while(c && (uchar)str[c-1]<=SP) c--;
-	str[c]=0;
-}
-
-/****************************************************************************/
-/* Puts a backslash on path strings 										*/
-/****************************************************************************/
-void backslash(char *str)
-{
-    int i;
-
-	i=strlen(str);
-	if(i && str[i-1]!='\\' && str[i-1]!='/') {
-		str[i]=BACKSLASH; 
-		str[i+1]=0; 
-	}
-}
-
-
-/****************************************************************************/
-/* Checks the amount of time inside the external program against the amount */
-/* of time the user had left online before running the external program and */
-/* prints a message and exits the program if time has run out.				*/
-/****************************************************************************/
-void checktimeleft(void)
-{
-	if(!SYSOP && !strchr(user_exempt,'T') && time(NULL)-starttime>timeleft) {
-		bputs("\1_\n\1r\1hTime's up.\n");
-		exit(0);  }
-}
-
-/****************************************************************************/
-/* Prints a file remotely and locally, interpreting ^A sequences.			*/
-/* 'str' is the path of the file to print                                   */
-/****************************************************************************/
-void printfile(char *str)
-{
-	char *buf;
-	int file;
-	ulong length;
-
-	if(!tos)
-		CRLF;
-	if((file=nopen(str,O_RDONLY))==-1) {
-		bprintf("File not Found: %s\r\n",str);
-		return; }
-	length=filelength(file);
-	if((buf=MALLOC(length+1L))==NULL) {
-		close(file);
-		bprintf("\7\r\nPRINTFILE: Error allocating %lu bytes of memory for %s.\r\n"
-			,length+1L,str);
-		return; }
-	buf[read(file,buf,length)]=0;
-	close(file);
-	bputs(buf);
-	aborted=0;
-	FREE(buf);
-}
-
-/****************************************************************************/
-/* Returns a char pointer to the name of the user that corresponds to		*/
-/* usernumber. Takes value directly from database.							*/
-/****************************************************************************/
-char *username(uint usernumber)
-{
-	static	char name[26];
-	char	str[128];
-	int 	i,file;
-
-	strcpy(name,"UNKNOWN USER");
-	if(!data_dir[0])
-		return(name);
-	if(!usernumber) {
-		bputs("\7username: called with zero usernumber\r\n");
-		return(name); }
-	sprintf(str,"%suser/name.dat",data_dir);
-	if((file=nopen(str,O_RDONLY))==-1) {
-		bprintf("\7username: couldn't open %s\r\n",str);
-		return(name); }
-	if(filelength(file)<(long)(usernumber-1)*((long)name_len+2L)) {
-		close(file);
-		return(name); }
-	lseek(file,(long)(usernumber-1)*((long)name_len+2L),SEEK_SET);
-	read(file,name,25);
-	close(file);
-	for(i=0;i<25;i++)
-		if(name[i]==3)
-			break;
-	name[i]=0;
-	if(!name[0])
-		strcpy(name,"DELETED USER");
-	return(name);
-}
-
-/****************************************************************************/
-/* Returns the number of the user 'username' from the NAME.DAT file.        */
-/* If the username is not found, the function returns 0.					*/
-/****************************************************************************/
-uint usernumber(char *username)
-{
-	char str[128];
-	int i,file;
-	FILE *stream;
-
-	if(!data_dir[0])
-		return(0);
-	sprintf(str,"%suser/name.dat",data_dir);
-	if((file=nopen(str,O_RDONLY))==-1 || (stream=fdopen(file,"rb"))==NULL) {
-		if(file!=-1)
-			close(file);
-		bprintf("\7usernumber: couldn't open %s\r\n",str);
-		return(0); }
-	for(i=1;!feof(stream);i++) {
-		if(!fread(str,27,1,stream))
-			break;
-		str[25]=0;
-		truncsp(str);	/* chop of trailing EOTs and spaces */
-		if(!stricmp(str,username)) {
-			fclose(stream);
-			return(i); } }
-	fclose(stream);
-	return(0);
-}
-
-
-/****************************************************************************/
-/* Returns in 'string' a character representation of the number in l with   */
-/* commas. Maximum value of l is 4 gigabytes.								*/
-/****************************************************************************/
-char *ultoac(ulong l, char *string)
-{
-	char str[81];
-	char i,j,k;
-
-	sprintf(str,"%lu",l);
-	i=strlen(str)-1;
-	j=i/3+1+i;
-	string[j--]=0;
-	for(k=1;i>-1;k++) {
-		string[j--]=str[i--];
-		if(j>0 && !(k%3))
-			string[j--]=','; }
-	return(string);
-}
-
-/****************************************************************************/
-/* Converts an ASCII Hex string into a ulong								*/
-/****************************************************************************/
-ulong ahtoul(char *str)
-{
-	ulong l,val=0;
-
-	while((l=(*str++)|0x20)!=0x20)
-		val=(l&0xf)+(l>>6&1)*9+val*16;
-	return(val);
-}
-
-/****************************************************************************/
-/* Reads the data for node number 'number' into the structure 'node'        */
-/* from NODE.DAB															*/
-/* if lockit is non-zero, locks this node's record. putnodedat() unlocks it */
-/****************************************************************************/
-void getnodedat(int number, node_t *node, char lockit)
-{
-	int count=0;
-
-	if(nodefile<0)
-		return;
-	number--;	/* make zero based */
-	while(count<LOOP_NODEDAB) {
-		lseek(nodefile,(long)number*sizeof(node_t),SEEK_SET);
-		if(lockit
-			&& lock(nodefile,(long)number*sizeof(node_t),sizeof(node_t))==-1) {
-			count++;
-			continue; }
-		if(read(nodefile,node,sizeof(node_t))==sizeof(node_t))
-			break;
-		count++; }
-	if(count==LOOP_NODEDAB)
-		bprintf("\7Error unlocking and reading node.dab\r\n");
-}
-
-/****************************************************************************/
-/* Write the data from the structure 'node' into NODE.DAB  					*/
-/* getnodedat(num,&node,1); must have been called before calling this func  */
-/*          NOTE: ------^   the indicates the node record has been locked   */
-/****************************************************************************/
-void putnodedat(int number, node_t node)
-{
-	if(nodefile<0)
-		return;
-	number--;	/* make zero based */
-	lseek(nodefile,(long)number*sizeof(node_t),SEEK_SET);
-	if(write(nodefile,&node,sizeof(node_t))!=sizeof(node_t)) {
-		unlock(nodefile,(long)number*sizeof(node_t),sizeof(node_t));
-		bprintf("\7Error writing node.dab for node %u\r\n",number+1);
-		return; }
-	unlock(nodefile,(long)number*sizeof(node_t),sizeof(node_t));
-}
-
-/****************************************************************************/
-/* Checks for messages waiting for this node or interruption.				*/
-/****************************************************************************/
-void nodesync(void)
-{
-	node_t node;
-
-	if(!ctrl_dir[0])
-		return;
-	getnodedat(node_num,&node,0);
-
-	if(node.misc&NODE_MSGW)
-		getsmsg(user_number);		/* getsmsg clears MSGW flag */
-
-	if(node.misc&NODE_NMSG) 		/* getnmsg clears NMSG flag */
-		getnmsg();
-
-	if(node.misc&NODE_INTR)
-		exit(0);
-
-}
-
-/****************************************************************************/
-/* Displays the information for node number 'number' contained in 'node'    */
-/****************************************************************************/
-void printnodedat(int number, node_t node)
-{
-	char hour,mer[3],tmp[256];
-	int i;
-
-	attr(LIGHTGRAY|HIGH);
-	bprintf("Node %2d: ",number);
-	attr(GREEN);
-	switch(node.status) {
-		case NODE_WFC:
-			bputs("Waiting for call");
-			break;
-		case NODE_OFFLINE:
-			bputs("Offline");
-			break;
-		case NODE_NETTING:
-			bputs("Networking");
-			break;
-		case NODE_LOGON:
-			bputs("At logon prompt");
-			break;
-		case NODE_EVENT_WAITING:
-			bputs("Waiting for all nodes to become inactive");
-			break;
-		case NODE_EVENT_LIMBO:
-			bprintf("Waiting for node %d to finish external event",node.aux);
-			break;
-		case NODE_EVENT_RUNNING:
-			bputs("Running external event");
-			break;
-		case NODE_NEWUSER:
-			attr(GREEN|HIGH);
-			bputs("New user");
-			attr(GREEN);
-			bputs(" applying for access ");
-			if(!node.connection)
-				bputs("Locally");
-			else if(node.connection==0xffff)
-				bprintf("via telnet");
-			else
-				bprintf("at %ubps",node.connection);
-			break;
-		case NODE_QUIET:
-			if(!SYSOP) {
-				bputs("Waiting for call");
-				break; }
-		case NODE_INUSE:
-			attr(GREEN|HIGH);
-			if(node.misc&NODE_ANON && !SYSOP)
-				bputs("UNKNOWN USER");
-			else
-				bputs(username(node.useron));
-			attr(GREEN);
-			bputs(" ");
-			switch(node.action) {
-				case NODE_MAIN:
-					bputs("at main menu");
-					break;
-				case NODE_RMSG:
-					bputs("reading messages");
-					break;
-				case NODE_RMAL:
-					bputs("reading mail");
-					break;
-				case NODE_RSML:
-					bputs("reading sent mail");
-					break;
-				case NODE_RTXT:
-					bputs("reading text files");
-					break;
-				case NODE_PMSG:
-					bputs("posting message");
-					break;
-				case NODE_SMAL:
-					bputs("sending mail");
-					break;
-				case NODE_AMSG:
-					bputs("posting auto-message");
-					break;
-				case NODE_XTRN:
-					if(!node.aux)
-						bputs("at external program menu");
-					else {
-						bputs("running ");
-						i=node.aux-1;
-						if(i>=(int)total_xtrns || i<0 || !xtrn[i][0])
-							bputs("external program");
-						else
-							bputs(xtrn[i]); }
-					break;
-				case NODE_DFLT:
-					bputs("changing defaults");
-					break;
-				case NODE_XFER:
-					bputs("at transfer menu");
-					break;
-				case NODE_RFSD:
-					bprintf("retrieving from device #%d",node.aux);
-					break;
-				case NODE_DLNG:
-					bprintf("downloading");
-					break;
-				case NODE_ULNG:
-					bputs("uploading");
-					break;
-				case NODE_BXFR:
-					bputs("transferring bidirectional");
-					break;
-				case NODE_LFIL:
-					bputs("listing files");
-					break;
-				case NODE_LOGN:
-					bputs("logging on");
-					break;
-				case NODE_LCHT:
-					bprintf("in local chat with %s",sys_op);
-					break;
-				case NODE_MCHT:
-					if(node.aux) {
-						bprintf("in multinode chat channel %d",node.aux&0xff);
-						if(node.aux&0x1f00)  /* password */
-							outchar('*'); }
-					else
-						bputs("in multinode global chat channel");
-					break;
-				case NODE_PAGE:
-					bprintf("paging node %u for private chat",node.aux);
-					break;
-				case NODE_PCHT:
-					bprintf("in private chat with node %u",node.aux);
-					break;
-				case NODE_GCHT:
-					bprintf("chatting with %s",sys_guru);
-					break;
-				case NODE_CHAT:
-					bputs("in chat section");
-					break;
-				case NODE_TQWK:
-					bputs("transferring QWK packet");
-					break;
-				case NODE_SYSP:
-					bputs("performing sysop activities");
-					break;
-				default:
-					bputs(ultoa(node.action,tmp,10));
-					break;  }
-			if(!node.connection)
-				bputs(" locally");
-			else if(node.connection==0xffff)
-				bprintf(" via telnet");
-			else
-				bprintf(" at %ubps",node.connection);
-			if(node.action==NODE_DLNG) {
-				if((node.aux/60)>12) {
-					hour=(node.aux/60)-12;
-					strcpy(mer,"pm"); }
-				else {
-					if((node.aux/60)==0)    /* 12 midnite */
-						hour=12;
-					else hour=node.aux/60;
-					strcpy(mer,"am"); }
-				bprintf(" ETA %02d:%02d %s"
-					,hour,node.aux%60,mer); }
-			break; }
-	i=NODE_LOCK;
-	if(node.status==NODE_INUSE || SYSOP)
-		i|=NODE_POFF|NODE_AOFF|NODE_MSGW|NODE_NMSG;
-	if(node.misc&i) {
-		bputs(" (");
-		if(node.misc&(i&NODE_AOFF))
-			outchar('A');
-		if(node.misc&NODE_LOCK)
-			outchar('L');
-		if(node.misc&(i&(NODE_MSGW|NODE_NMSG)))
-			outchar('M');
-		if(node.misc&(i&NODE_POFF))
-			outchar('P');
-		outchar(')'); }
-	if(SYSOP && ((node.misc
-		&(NODE_ANON|NODE_UDAT|NODE_INTR|NODE_RRUN|NODE_EVENT|NODE_DOWN))
-		|| node.status==NODE_QUIET)) {
-		bputs(" [");
-		if(node.misc&NODE_ANON)
-			outchar('A');
-		if(node.misc&NODE_INTR)
-			outchar('I');
-		if(node.misc&NODE_RRUN)
-			outchar('R');
-		if(node.misc&NODE_UDAT)
-			outchar('U');
-		if(node.status==NODE_QUIET)
-			outchar('Q');
-		if(node.misc&NODE_EVENT)
-			outchar('E');
-		if(node.misc&NODE_DOWN)
-			outchar('D');
-		outchar(']'); }
-	if(node.errors && SYSOP) {
-		attr(RED|HIGH|BLINK);
-		bprintf(" %d error%c",node.errors, node.errors>1 ? 's' : '\0' ); }
-	CRLF;
-}
-
-/****************************************************************************/
-/* Prints short messages waiting for 'usernumber', if any...				*/
-/* then deletes them.														*/
-/****************************************************************************/
-void getsmsg(int usernumber)
-{
-	char str[256], *buf;
-	int file;
-	long length;
-	node_t node;
-
-	if(!data_dir[0])
-		return;
-	sprintf(str,"%smsgs/%4.4u.msg",data_dir,usernumber);
-	if(flength(str)<1L) {
-		return; }
-	if((file=nopen(str,O_RDWR))==-1) {
-		bprintf("\7Error opening %s for read/write access\r\n",str);
-		return; }
-	length=filelength(file);
-	if((buf=MALLOC(length+1))==NULL) {
-		close(file);
-		bprintf("\7Error allocating %u bytes of memory for %s\r\n",length+1,str);
-		return; }
-	if(read(file,buf,length)!=length) {
-		close(file);
-		FREE(buf);
-		bprintf("\7Error reading %u bytes from %s\r\n",length,str);
-		return; }
-	chsize(file,0L);
-	close(file);
-	buf[length]=0;
-	getnodedat(node_num,&node,0);
-	if(node.action==NODE_MAIN || node.action==NODE_XFER) {
-		CRLF; }
-	if(node.misc&NODE_MSGW) {
-		getnodedat(node_num,&node,1);
-		node.misc&=~NODE_MSGW;
-		putnodedat(node_num,node); }
-	bputs(buf);
-	FREE(buf);
-}
-
-/****************************************************************************/
-/* Creates a short message for 'usernumber' than contains 'strin'			*/
-/****************************************************************************/
-void putsmsg(int usernumber, char *strin)
-{
-	char str[256];
-	int file,i;
-    node_t node;
-
-	if(!data_dir[0])
-		return;
-	sprintf(str,"%smsgs/%4.4u.msg",data_dir,usernumber);
-	if((file=nopen(str,O_WRONLY|O_CREAT|O_APPEND))==-1) {
-		bprintf("\7Error opening/creating %s for creat/append access\r\n",str);
-		return; }
-	i=strlen(strin);
-	if(write(file,strin,i)!=i) {
-		close(file);
-		bprintf("\7Error writing %u bytes to %s\r\n",i,str);
-		return; }
-	close(file);
-	for(i=1;i<=sys_nodes;i++) {		/* flag node if user on that msg waiting */
-		getnodedat(i,&node,0);
-		if(node.useron==(ushort)usernumber
-			&& (node.status==NODE_INUSE || node.status==NODE_QUIET)
-			&& !(node.misc&NODE_MSGW)) {
-			getnodedat(i,&node,1);
-			node.misc|=NODE_MSGW;
-			putnodedat(i,node); } }
-}
-
-/****************************************************************************/
-/* Prints short messages waiting for this node, if any...					*/
-/****************************************************************************/
-void getnmsg(void)
-{
-	char str[256], *buf;
-	int file;
-	long length;
-	node_t thisnode;
-
-	if(!data_dir[0])
-		return;
-	getnodedat(node_num,&thisnode,1);
-	thisnode.misc&=~NODE_NMSG;			/* clear the NMSG flag */
-	putnodedat(node_num,thisnode);
-
-	sprintf(str,"%smsgs/n%3.3u.msg",data_dir,node_num);
-	if(flength(str)<1L) {
-		return; }
-	if((file=nopen(str,O_RDWR))==-1) {
-		printf("Couldn't open %s for read/write\r\n",str);
-		return; }
-	length=filelength(file);
-	if((buf=MALLOC(length+1))==NULL) {
-		close(file);
-		printf("Couldn't allocate %lu bytes for %s\r\n",length+1,str);
-		return; }
-	if(read(file,buf,length)!=length) {
-		close(file);
-		FREE(buf);
-		printf("Couldn't read %lu bytes from %s\r\n",length,str);
-		return; }
-	chsize(file,0L);
-	close(file);
-	buf[length]=0;
-
-	bputs(buf);
-	FREE(buf);
-}
-
-/****************************************************************************/
-/* Creates a short message for node 'num' than contains 'strin'             */
-/****************************************************************************/
-void putnmsg(int num, char *strin)
-{
-	char str[256];
-	int file,i;
-    node_t node;
-
-	if(!data_dir[0])
-		return;
-	sprintf(str,"%smsgs/n%3.3u.msg",data_dir,num);
-	if((file=nopen(str,O_WRONLY|O_CREAT|O_APPEND))==-1) {
-		printf("Couldn't open %s for append\r\n",str);
-		return; }
-	i=strlen(strin);
-	if(write(file,strin,i)!=i) {
-		close(file);
-		printf("Error writing %u bytes to %s\r\n",i,str);
-		return; }
-	close(file);
-	getnodedat(num,&node,0);
-	if((node.status==NODE_INUSE || node.status==NODE_QUIET)
-		&& !(node.misc&NODE_NMSG)) {
-		getnodedat(num,&node,1);
-		node.misc|=NODE_NMSG;
-		putnodedat(num,node); }
-}
-
-/****************************************************************************/
-/* This function lists users that are online.								*/
-/* If listself is true, it will list the current node.						*/
-/* Returns number of active nodes (not including current node). 			*/
-/****************************************************************************/
-int whos_online(char listself)
-{
-	int i,j;
-	node_t node;
-
-	if(!ctrl_dir[0])
-		return(0);
-	CRLF;
-	for(j=0,i=1;i<=sys_nodes;i++) {
-		getnodedat(i,&node,0);
-		if(i==node_num) {
-			if(listself)
-				printnodedat(i,node);
-			continue; }
-		if(node.status==NODE_INUSE || (SYSOP && node.status==NODE_QUIET)) {
-			printnodedat(i,node);
-			if(!lastnodemsg)
-				lastnodemsg=i;
-			j++; } }
-	if(!j)
-		bputs("\1nNo other active nodes.\r\n");
-	return(j);
-}
-
-/****************************************************************************/
-/* Sending single line messages between nodes                               */
-/****************************************************************************/
-void nodemsg(void)
-{
-	char	line[256],buf[512];
-	int 	i;
-	node_t	thisnode;
-	node_t 	node;
-
-	if(!ctrl_dir[0])
-		return;
-	if(strchr(user_rest,'C')) {
-		bputs("You cannot send messages.\r\n");
-		return; }
-	getnodedat(node_num,&thisnode,0);
-	wordwrap[0]=0;
-	if(lastnodemsg) {
-		getnodedat(lastnodemsg,&node,0);
-		if(node.status!=NODE_INUSE)
-			lastnodemsg=0; }
-	if(!whos_online(0))
-		return;
-	bprintf("\r\n\1n\1gNumber of node to send message to, \1w\1hA\1n\1gll, "
-		"or \1w\1hQ\1n\1guit [%u]: \1w\1h",lastnodemsg);
-	i=getkeys("QA",sys_nodes);
-	if(i==-1)
-		return;
-	if(i&0x8000 || !i) {
-		if(!i)
-			i=lastnodemsg;
-		else {
-			i^=0x8000;
-			lastnodemsg=i; }
-		if(!i || i>sys_nodes)
-			return;
-		getnodedat(i,&node,0);
-		if(node.status!=NODE_INUSE && !SYSOP)
-			bprintf("\r\n\1_\1w\1hNode %d is not in use.\r\n",i);
-		else if(i==node_num)
-			bputs("\r\nThere's no need to send a message to yourself.\r\n");
-		else if(node.misc&NODE_POFF && !SYSOP)
-			bprintf("\r\n\1r\1h\1iDon't bug %s.\1n\r\n"
-				,node.misc&NODE_ANON ? "UNKNOWN USER"
-				: username(node.useron));
-		else {
-			bputs("\1_\1y\1hMessage: ");
-			if(!getstr(line,70,K_LINE))
-				return;
-			sprintf(buf
-				,"\7\1_\1w\1hNode %2d: \1g%s\1n\1g sent you a message:\r\n"
-				"\1w\1h\0014%s\1n\r\n"
-				,node_num
-				,thisnode.misc&NODE_ANON ? "UNKNOWN USER" : user_name,line);
-			putnmsg(i,buf); } }
-	else if(i=='A') {
-		bputs("\1_\1y\1hMessage: ");
-		if(!getstr(line,70,K_LINE))
-			return;
-		sprintf(buf
-			,"\7\1_\1w\1hNode %2d: \1g%s\1n\1g sent all nodes a message:\r\n"
-				"\1w\1h\0014%s\1n\r\n"
-			,node_num
-			,thisnode.misc&NODE_ANON ? "UNKNOWN USER" : user_name,line);
-		for(i=1;i<=sys_nodes;i++) {
-			if(i==node_num)
-				continue;
-			getnodedat(i,&node,0);
-			if((node.status==NODE_INUSE || (SYSOP && node.status==NODE_QUIET))
-				&& (SYSOP || !(node.misc&NODE_POFF)))
-				putnmsg(i,buf); } }
-
-}
-
-/****************************************************************************/
-/* Puts a character into the input buffer									*/
-/****************************************************************************/
-void ungetkey(char ch)
-{
-
-	keybuf[keybuftop++]=ch;
-	if(keybuftop==KEY_BUFSIZE)
-		keybuftop=0;
-}
-
diff --git a/xtrn/sdk/xsdk.h b/xtrn/sdk/xsdk.h
deleted file mode 100644
index dbdf440b96..0000000000
--- a/xtrn/sdk/xsdk.h
+++ /dev/null
@@ -1,278 +0,0 @@
-/* xsdk.h */
-
-/* Synchronet XSDK function prototypes */
-
-/* $Id$ */
-
-/****************************************************************************
- * @format.tab-size 4		(Plain Text/Source Code File Header)			*
- * @format.use-tabs true	(see http://www.synchro.net/ptsc_hdr.html)		*
- *																			*
- * Copyright 2000 Rob Swindell - http://www.synchro.net/copyright.html		*
- *																			*
- * This library is free software; you can redistribute it and/or			*
- * modify it under the terms of the GNU Lesser General Public License		*
- * as published by the Free Software Foundation; either version 2			*
- * of the License, or (at your option) any later version.					*
- * See the GNU Lesser General Public License for more details: lgpl.txt or	*
- * http://www.fsf.org/copyleft/lesser.html									*
- *																			*
- * Anonymous FTP access to the most recent released source is available at	*
- * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net	*
- *																			*
- * Anonymous CVS access to the development source and modification history	*
- * is available at cvs.synchro.net:/cvsroot/sbbs, example:					*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs login			*
- *     (just hit return, no password is necessary)							*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs checkout xtrn	*
- *																			*
- * For Synchronet coding style and modification guidelines, see				*
- * http://www.synchro.net/source.html										*
- *																			*
- * You are encouraged to submit any modifications (preferably in Unix diff	*
- * format) via e-mail to mods@synchro.net									*
- *																			*
- * Note: If this box doesn't appear square, then you need to fix your tabs.	*
- ****************************************************************************/
-
-
-#ifndef _XSDK_H
-#define _XSDK_H
-
-/*********************************************/
-/* Standard Borland/Turbo C/C++ Header Files */
-/*********************************************/
-#ifndef __unix__
-	#include <io.h>
-	#include <dos.h>
-	#include <share.h>
-	#include <conio.h>
-#endif
-#ifdef _WIN32
-	#include <windows.h>
-#endif
-#include <time.h>
-#include <ctype.h>
-#include <stdio.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#ifndef __FreeBSD__		/* FreeBSD uses stdlib.h for malloc() */
-	#include <malloc.h>
-#endif
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#define GLOBAL extern	/* turns XSDKVARS.C into a header file */
-#include "xsdkinet.h"
-#include "xsdkwrap.h"
-#include "xsdkvars.c"
-
-#ifdef __cplusplus
-	extern "C" {
-#endif
-
-extern char *xsdk_ver;	/* XSDK version number */
-extern ulong xsdk_mode;	/* XSDK mode bits */
-extern int mswtyp;		/* MSwait type */
-
-/***********************/
-/* Function Prototypes */
-/***********************/
-
-/* Initialize Data
-	- Reads XTRN.DAT and initializes variables */
-void initdata(void);
-
-/* Get Terminal Type
-	- Detects RIP and WIP terminal compatibility */
-void get_term(void);
-
-/* BBS Print String
-	- Displays a string locally and remotely (with Ctrl-A codes) */
-void bputs(char *str);
-
-/* Raw Print String
-	- Oututs a string locally and remotely (verbatim) */
-void rputs(char *str);
-
-/* BBS Print Formatted
-	- Displays a formatted string locally and remotely (with Ctrl-A codes)
-	- printf() equivalent */
-int  bprintf(char *fmt, ...);
-
-/* Raw Print Formated
-	- Displays a formatted string locally and remotely (verbatim)
-	- printf() equivalent */
-int  rprintf(char *fmt, ...);
-
-/* BBS String Length
-	- Returns length of string, excluding Ctrl-A codes */
-int  bstrlen(uchar *str);
-
-/* Output character
-	- Displays a single character */
-void outchar(char ch);
-
-/* Mnemonics
-	- Display a string expanding ~letter combinations to command keys
-	- Automatically colorizes mnemonic letters or places them in parenthesis
-	  for non-ANSI users */
-void mnemonics(char *str);
-
-/* Pause prompt
-	- Displays [Hit a key] and waits for the user to hit a key */
-void bpause(void);
-
-/* Yes/no Question
-	- Displays a string with (Y/n) ? appended and waits for the user to hit
-	  'Y', 'N' or enter
-	- Returns 1 if the user hit 'Y' or enter
-	- Automatic colorization */
-char yesno(char *str);
-
-/* No/yes Question
-	- Displays a string with (y/N) ? appended and waits for the user to hit
-	  'Y', 'N' or enter
-	- Returns 1 if the user hit 'N' or enter */
-char noyes(char *str);
-
-/* Inbound Keystroke
-	- If the local or remote user has struck a key, this function returns the
-	  key, otherwise it returns 0
-	- Does not wait for a keystroke */
-char inkey(long mode);
-
-/* Get a Key
-	- Waits for the local or remote user to hit a valid key
-	- See K_* constants in XSDKDEFS.H for possible values of mode */
-char getkey(long mode);
-
-/* Get One of these Keys or a Number
-	- Waits for the user to hit a valid key or if max is non-zero, then enter
-	  a number not greater than max
-	- Hot-keyed input, automatically displays the struck key (in upper case)
-	  followed by CRLF
-	- If the user entered a number, the number is ORed with 0x8000 and returned
-	  you must XOR (or not) this bit to get the correct number */
-int  getkeys(char *str, int max);
-
-/* Get a Number
-	- Waits for the user to enter a number from 0 to max, 'Q' or ENTER
-	- Returns -1 if the user hit 'Q' or Ctrl-C
-	- Returns 0 if the user just hit ENTER */
-int  getnum(int max);
-
-/* Change Attribute
-	- Sends ANSI escape sequences (if user supports ANSI) to change color
-	- Valid color bits are defined in INCLUDE\CONIO.H */
-void attr(int atr);
-
-/* Clear Screen
-	- Clears local and remote screen (using ANSI if appropriate)
-	- Automatically pauses before clearing if lncntr is >1 */
-void cls(void);
-
-/* Process Ctrl-A Code
-	- Changes color or performs special Ctrl-A function */
-void ctrl_a(char x);
-
-/* Network Open
-	- Opens a file in DENYNONE or DENYWRITE mode, automatically retrying */
-int  nopen(char *str, int access);
-
-/* Truncate Space
-	- Removes white space characters from the end of a string */
-void truncsp(uchar *str);
-
-/* Adds Backslash
-	- Adds backslash to end of string if it doesn't exist */
-void backslash(char *str);
-
-/* Check Time Left
-	- Checks the amount of time the user has left and sets the timeleft
-	  variable
-	- Automatically exits if user runs out of time */
-void checktimeleft(void);
-
-/* Print File
-	- Displays contents of file (expanding Ctrl-A characters if appropriate) */
-void printfile(char *str);
-
-/* Get String
-	- Waits for the user to enter a string
-	- maxlen is the maximum length of the string
-	- See K_* constants in XSDKDEFS.H for possible values of mode */
-int  getstr(char *str, size_t maxlen, long mode);
-
-/* Redraw String
-	- Redisplays a string, mainly called by getstr() */
-void redrwstr(char *strin, int i, int l, long mode);
-
-/* Strip Invalid Ctrl-A codes */
-char stripattr(char *strin);
-
-/* Returns the name of the user number passed */
-char *username(uint usernumber);
-
-/* Returns the number of the user name passed */
-uint usernumber(char *username);
-
-/* Convert unsigned long to an ASCII string with commas */
-char *ultoac(ulong l, char *string);
-
-/* Convert an ASCII string of hex digits into an unsigned long */
-ulong ahtoul(char *str);
-
-/* Display status of node */
-void printnodedat(int number, node_t node);
-
-/* Checks to see if this node has been interrupted or any messages waiting */
-void nodesync(void);
-
-/* Writes the node information to disk */
-void putnodedat(int number, node_t node);
-
-/* Reads the node information from disk */
-void getnodedat(int number, node_t *node, char lockit);
-
-/* Writes a short message (telegram) for specified user number */
-void putsmsg(int usernumber, char *strin);
-
-/* Reads and displays short message for specified user number */
-void getsmsg(int usernumber);
-
-/* Writes a node message for specified node */
-void putnmsg(int num, char *strin);
-
-/* Reads and displays node message for current node */
-void getnmsg(void);
-
-/* Displays users online */
-int whos_online(char listself);
-
-/* Send a node-message (ctrl-P) */
-void nodemsg(void);
-
-/* Put a key into the keyboard buffer */
-void ungetkey(char ch);
-
-/* Check to see if the user has hung-up */
-void checkline(void);
-
-/* Display a line (with ctrl-A codes) centered on the screen */
-void center(char *str);
-
-#ifdef _MSC_VER
-int lock(int file, long offset, int size);
-int unlock(int file, long offset, int size);
-#endif
-
-#ifdef __cplusplus
-	}
-#endif
-
-
-#endif	/* Don't add anything after this #endif */
diff --git a/xtrn/sdk/xsdk.txt b/xtrn/sdk/xsdk.txt
deleted file mode 100644
index 9e1183e4db..0000000000
--- a/xtrn/sdk/xsdk.txt
+++ /dev/null
@@ -1,127 +0,0 @@
-	  Synchronet External Program Software Developer's Kit (XSDK)
-		  Version 3.11 - March 2001 - Rob Swindell
-
-
-What is it?
-===========
-
-The Synchronet XSDK is a software development kit for C/C++ programmers that
-are interested in writing external online programs (aka "doors") for
-Synchronet BBS Software (www.synchro.net). The XSDK consists of C source and
-header files that contain functions and variables that make writing an external
-program for Synchronet much easier than "from scratch".
-
-The Synchronet XSDK can be used to create 16-bit DOS programs supported by
-all versions of Synchronet and native 32-bit programs supported by Synchronet 
-Version 3.0 for Win32 and Linux.
-
-Programs written using the XSDK will automatically inherit the following
-features:
-
-o Reads Synchronet's XTRN.DAT drop file from the current node directory
-  without any required command line parameters (easy configuration)
-  initializing many user and system variables for the programmer to use
-
-o Automatically supports remote user I/O with dropped connection detection
-
-o Synchronet internode messaging (Ctrl-P), activity alerts, and node listings
-
-o Automatic terminal type detection
-
-o Intelligent Ctrl-A code expansion for Color/ANSI users
-
-o Automatic screen pausing based on screen length (optional)
-
-o 32-bit programs will default to no local console I/O (new in v3.11)
-
-
-Supported Compilers
-===================
-
-o All Borland 16-bit and 32-bit C/C++ compilers for DOS and Windows
-  e.g. Turbo C/C++, Borland C/C++, and Borland C++ Builder
-  See xtrn/sbl/sbl.bpr and xtrn/sbj/sbj.bpr for example BCB 5 XSDK projects
-
-o Microsoft Visual C++ Version 5 and 6
-  (earlier 32-bit versions should work too)
-  See xtrn/sbl/sbl.dsp and xtrn/sbj/sbj.dsp for example MSVC 6 XSDK projects
-
-o GNU Compiler Collection
-  (including Cygwin/MinGW for Win32)
-  See xtrn/sbl/Makefile.gnu and xtrn/sbj/Makefile.gnu for example XSDK projects
-
-o Watcom C/C++
-
-o Symantec C/C++
-
-o Other C/C++ compilers may be supported with slight modifications to the code
-  (please share your modifications with me: sysop@vert.synchro.net)
-
-
-How do I use it?
-================
-
-1. Copy the following files into the source directory for your project (or
-   copy them to and build them from your Synchronet XTRN\SDK directory):
-
-   xsdk.c
-   xsdk.h
-   xsdkvars.c
-   xsdkwrap.c -> New in XSDK v3.10
-   xsdkwrap.h -> New in XSDK v3.10
-   xsdkinet.h -> New in XSDK v3.10
-   xsdkdefs.h
-   mswaits.obj (16-bit compilers only)
-   mswaitl.obj (16-bit copmilers only)
-
-2. Add the following line towards the top of your main .c file:
-
-   #include "xsdk.h"
-
-3. Compile your main .c file to verify that you do not have any
-   incompatibilities with the contents of xsdk.h. If you receive any
-   compilation errors, you'll need to resolve these errors (possibly by
-   editing xsdk*.c or xsdk*.h) before you can continue.
-
-4. Add a call to the XSDK "initdata" function to your program's entry point
-   (typically main()). The XSDK "initdata" function will read in the BBS drop
-   file (XTRN.DAT) and initialize the appropriate variables. See xsdk.h for a
-   complete list of functions available to you and their descriptions.
-
-5. Somewhere after the call to initdata(), add the following line to your
-   code:
-
-   bprintf("XSDK v%s",xsdk_ver);
-
-   Note: You may also want to use the COMPILER_DESC and PLATFORM_DESC macros
-         (new in v3.11) to describe the compiler used and the target platform.
-
-6. Include xsdk.c, xsdkwrap.c and xsdkvars.c in your project or "make" file.
-
-7. If you are using a 16-bit compiler, you will need to include mswaits.obj
-   (for small memory models) or mswaitl.obj (for large memory models) in your
-   project's linked library/object list. This is the millisecond wait/
-   time-slice surrender library used by the 16-bit DOS version of Synchronet.
-
-8. Compile and link your project.
-
-
-Configuring Synchronet To Run Your Program
-==========================================
-
-Make sure you have the program configured (in SCFG) to create the XTRN.DAT
-drop file in the Node Directory.
-
-16-bit Programs
----------------
-16-bit XSDK programs must have "Intercept I/O Interrupts" set to "Yes".
-
-32-bit Programs
----------------
-32-bit XSDK programs are only supported by Synchronet version 3. To configure 
-a 32-bit program with Synchronet v3.0b, add the program's base filename to the
-OS/2 program list in SCFG (this will be replaced with a toggle option in the 
-extenral program configuration menu in the future).
-
-
-/* End of XSDK.TXT */
diff --git a/xtrn/sdk/xsdkdefs.h b/xtrn/sdk/xsdkdefs.h
deleted file mode 100644
index fe1f1d3cc5..0000000000
--- a/xtrn/sdk/xsdkdefs.h
+++ /dev/null
@@ -1,348 +0,0 @@
-/* xsdkdefs.h */
-
-/* Synchronet XSDK constants, macros, and type definitions */
-
-/* $Id$ */
-
-/****************************************************************************
- * @format.tab-size 4		(Plain Text/Source Code File Header)			*
- * @format.use-tabs true	(see http://www.synchro.net/ptsc_hdr.html)		*
- *																			*
- * Copyright 2000 Rob Swindell - http://www.synchro.net/copyright.html		*
- *																			*
- * This library is free software; you can redistribute it and/or			*
- * modify it under the terms of the GNU Lesser General Public License		*
- * as published by the Free Software Foundation; either version 2			*
- * of the License, or (at your option) any later version.					*
- * See the GNU Lesser General Public License for more details: lgpl.txt or	*
- * http://www.fsf.org/copyleft/lesser.html									*
- *																			*
- * Anonymous FTP access to the most recent released source is available at	*
- * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net	*
- *																			*
- * Anonymous CVS access to the development source and modification history	*
- * is available at cvs.synchro.net:/cvsroot/sbbs, example:					*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs login			*
- *     (just hit return, no password is necessary)							*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs checkout xtrn	*
- *																			*
- * For Synchronet coding style and modification guidelines, see				*
- * http://www.synchro.net/source.html										*
- *																			*
- * You are encouraged to submit any modifications (preferably in Unix diff	*
- * format) via e-mail to mods@synchro.net									*
- *																			*
- * Note: If this box doesn't appear square, then you need to fix your tabs.	*
- ****************************************************************************/
-
-#ifndef _XSDKDEFS_H
-#define _XSDKDEFS_H
-
-/**********/
-/* Macros */
-/**********/
-
-									/* Control characters */
-#define STX 	0x02				/* Start of text			^B	*/
-#define ETX 	0x03				/* End of text				^C	*/
-#define BS		0x08				/* Back space				^H	*/
-#define TAB 	0x09				/* Horizontal tabulation	^I	*/
-#define LF		0x0a				/* Line feed				^J	*/
-#define FF		0x0c				/* Form feed				^L	*/
-#define CR		0x0d				/* Carriage return			^M	*/
-#define ESC 	0x1b				/* Escape					^[	*/
-#define SP      0x20                /* Space                        */
-
-
-#define DCD    0x8000		/* Data carrier detect bit in msr			*/
-
-#define TABSIZE 	4		/* Tabs will expand to 4 chars upon input	*/
-
-#define SAVE_LINES	 4		/* Maximum number of lines to save			*/
-#define LINE_BUFSIZE 512    /* Size of line output buffer               */
-
-#define HIGH 8				/* High intensity attribute bit */
-
-							/* user_misc bits */
-#define ANSI	(1<<0)		/* user has ANSI capability */
-#define COLOR	(1<<1)		/* user has monochrome ANSI display */
-#define RIP 	(1<<2)		/* RIP compatible terminal detected */
-#define WIP 	(1<<3)		/* WIP compatible terminal detected */
-
-#ifndef MAX_PATH
-	#ifdef MAXPATHLEN
-		#define MAX_PATH MAXPATHLEN	/* clib.h */
-	#elif defined PATH_MAX
-		#define MAX_PATH PATH_MAX
-	#elif defined _MAX_PATH
-		#define MAX_PATH _MAX_PATH
-	#else
-		#define MAX_PATH 260		
-	#endif
-#endif
-
-#ifndef uchar				/* Short-hand for unsigned data types */
-#define uchar unsigned char
-#endif
-#ifndef uint
-#define uint unsigned int
-#endif
-#ifndef ushort
-#define ushort unsigned short
-#endif
-#ifndef ulong
-#define ulong unsigned long
-#endif
-
-									/* Valid bits for xsdk_mode			*/
-#define XSDK_MODE_NOCONSOLE	(1<<0)	/* No Local Console					*/
-
-							/* Bits in 'mode' for getkey and getstr     */
-#define K_UPPER		(1<<0)	/* Converts all letters to upper case 		*/
-#define K_UPRLWR    (1<<1)  /* Upper/Lower case automatically           */
-#define K_NUMBER    (1<<2)  /* Allow numbers only                       */
-#define K_WRAP	    (1<<3)  /* Allows word wrap							*/
-#define K_MSG		(1<<4)  /* Allows ANSI, ^N ^A ^G					*/
-#define K_SPIN      (1<<5)  /* Spinning cursor (same as SPIN)           */
-#define K_LINE      (1<<6)  /* Input line (inverse color)               */
-#define K_EDIT      (1<<7)  /* Edit string passed                       */
-#define K_CHAT		(1<<8)	/* In chat multi-chat 						*/
-#define K_NOCRLF    (1<<9)	/* Don't print CRLF after string input      */
-#define K_ALPHA     (1<<10) /* Only allow alphabetic characters         */
-#define K_AUTODEL	(1<<11) /* Auto-delete text (used with K_EDIT)		*/
-#define K_LOWPRIO	(1<<12) /* Low priority getstr() operation			*/
-#define K_GETSTR	(1<<13) /* getkey() called from getstr()			*/
-
-							/* Miscellaneous Modem Settings (mdm_misc)	*/
-#define MDM_FLOWCTRL (1<<0)	/* Use flow control with modem				*/
-#define MDM_STAYHIGH (1<<1) /* Stay at highest DTE rate                 */
-
-#define LOOP_NOPEN   50    	/* Retries before file access denied        */
-#define LOOP_NODEDAB 100	/* Retries on NODE.DAB locking/unlocking	*/
-
-#define MAX_NODES	250 	/* Maximum number of nodes					*/
-
-enum {								/* Node Status */
-	 NODE_WFC			        	/* Waiting for Call */
-	,NODE_LOGON                  	/* at logon prompt */
-	,NODE_NEWUSER         			/* New user applying */
-	,NODE_INUSE			 			/* In Use */
-	,NODE_QUIET			 			/* In Use - quiet mode */
-	,NODE_OFFLINE		 			/* Offline */
-	,NODE_NETTING		 			/* Networking */
-	,NODE_EVENT_WAITING				/* Waiting for all nodes to be inactive */
-	,NODE_EVENT_RUNNING				/* Running an external event */
-	,NODE_EVENT_LIMBO				/* Allowing another node to run an event */
-	};
-
-									/* Bit values for node.misc */
-#define	NODE_ANON	(1<<0)			/* Anonymous User */
-#define	NODE_LOCK	(1<<1)			/* Locked for sysops only */
-#define	NODE_INTR	(1<<2)			/* Interrupted - hang up */
-#define NODE_MSGW   (1<<3)			/* Message is waiting */
-#define NODE_POFF   (1<<4)        	/* Page disabled */
-#define NODE_AOFF	(1<<5)			/* Activity Alert disabled */
-#define NODE_UDAT	(1<<6)			/* User data has been updated */
-#define NODE_RRUN	(1<<7)			/* Re-run this node when log off */
-#define NODE_EVENT	(1<<8)			/* Must run node event after log off */
-#define NODE_DOWN	(1<<9)			/* Down this node after logoff */
-#define NODE_RPCHT	(1<<10) 		/* Reset private chat */
-#define NODE_NMSG   (1<<11)         /* Node message waiting (new way) */
-
-
-enum {								/* Node Action */
-	 NODE_MAIN						/* Main Prompt */
-	,NODE_RMSG			 			/* Reading Messages */
-	,NODE_RMAL						/* Reading Mail */
-	,NODE_SMAL			 			/* Sending Mail */
-	,NODE_RTXT			 			/* Reading G-Files */
-	,NODE_RSML			 			/* Reading Sent Mail */
-	,NODE_PMSG			 			/* Posting Message */
-	,NODE_AMSG			 			/* Auto-message */
-	,NODE_XTRN			  			/* Running External Program */
-	,NODE_DFLT			  			/* Main Defaults Section */
-	,NODE_XFER			   			/* Transfer Prompt */
-	,NODE_DLNG		    			/* Downloading File */
-	,NODE_ULNG			    		/* Uploading File */
-	,NODE_BXFR						/* Bidirectional Transfer */
-	,NODE_LFIL			    		/* Listing Files */
-	,NODE_LOGN			    		/* Logging on */
-	,NODE_LCHT			    		/* In Local Chat with Sysop */
-	,NODE_MCHT		     			/* In Multi-Chat with Other Nodes */
-	,NODE_GCHT			   			/* In Local Chat with Guru */
-	,NODE_CHAT			   			/* In Chat Section */
-	,NODE_SYSP		     			/* Sysop Activity */
-	,NODE_TQWK						/* Transferring QWK packet */
-	,NODE_PCHT						/* Private node-to-node chat */
-	,NODE_PAGE						/* Paging node for Private Chat */
-	,NODE_RFSD						/* Retrieving file from sequential dev */
-	};
-
-							/* Different bits in node_misc				*/
-#define NM_ANSALARM (1<<0)	/* Alarm locally on answer					*/
-#define NM_WFCSCRN  (1<<1)	/* Wait for call screen                     */
-#define NM_WFCMSGS	(1<<2)	/* Include total messages/files on WFC		*/
-#define NM_LCL_EDIT (1<<3)	/* Use local editor to create messages		*/
-#define NM_EMSOVL	(1<<4)	/* Use expanded memory of overlays			*/
-#define NM_WINOS2	(1<<5)	/* Use Windows/OS2 time slice API call		*/
-#define NM_INT28	(1<<6)	/* Make int 28 DOS idle calls				*/
-#define NM_NODV 	(1<<7)	/* Don't detect and use DESQview API        */
-#define NM_NO_NUM	(1<<8)	/* Don't allow logons by user number        */
-#define NM_LOGON_R	(1<<9)	/* Allow logons by user real name			*/
-#define NM_LOGON_P	(1<<10) /* Secure logons (always ask for password)	*/
-#define NM_NO_LKBRD (1<<11) /* No local keyboard (at all)				*/
-#define NM_SYSPW	(1<<12) /* Protect WFC keys and Alt keys with SY:	*/
-#define NM_NO_INACT (1<<13) /* No local inactivity alert/logoff 		*/
-#define NM_NOBEEP	(1<<14) /* Don't beep locally                       */
-#define NM_LOWPRIO	(1<<15) /* Always use low priority input			*/
-#define NM_7BITONLY (1L<<16) /* Except 7-bit input only (E71 terminals)  */
-
-#if !defined(__COLORS)
-#define __COLORS
-
-	enum COLORS {
-		BLACK,			/* dark colors */
-		BLUE,
-		GREEN,
-		CYAN,
-		RED,
-		MAGENTA,
-		BROWN,
-		LIGHTGRAY,
-		DARKGRAY,		/* light colors */
-		LIGHTBLUE,
-		LIGHTGREEN,
-		LIGHTCYAN,
-		LIGHTRED,
-		LIGHTMAGENTA,
-		YELLOW,
-		WHITE
-	};
-#endif
-
-#ifndef BLINK
-#define BLINK		128 /* blink bit */
-#endif
-
-#ifdef __WATCOMC__
-
-
-	#define ffblk find_t
-    #define findfirst(x,y,z) _dos_findfirst(x,z,y)
-	#define findnext(x) _dos_findnext(x)
-	#pragma aux mswait "_*"
-#endif
-
-/* Windows Types */
-#ifndef BYTE
-#define BYTE	uchar
-#endif
-#ifndef WORD
-#define WORD	ushort
-#endif
-#ifndef DWORD
-#define DWORD	ulong
-#endif
-#ifndef BOOL
-#define BOOL	int
-#endif
-#ifndef TRUE
-#define TRUE	1
-#define FALSE	0
-#endif
-#ifndef HANDLE
-#define HANDLE	void*
-#endif
-
-/****************************************************************************/
-/* MALLOC/FREE Macros for various compilers and environments				*/
-/* MALLOC is used for allocations of 64k or less							*/
-/* FREE is used to free buffers allocated with MALLOC						*/
-/* LMALLOC is used for allocations of possibly larger than 64k				*/
-/* LFREE is used to free buffers allocated with LMALLOC 					*/
-/* REALLOC is used to re-size a previously MALLOCed or LMALLOCed buffer 	*/
-/* FAR16 is used to create a far (32-bit) pointer in 16-bit compilers		*/
-/* HUGE16 is used to create a huge (32-bit) pointer in 16-bit compilers 	*/
-/****************************************************************************/
-#if defined(__COMPACT__) || defined(__LARGE__) || defined(__HUGE__)
-	#define __16BIT__
-	#define HUGE16 huge
-	#define FAR16 far
-	#if defined(__TURBOC__)
-		#define REALLOC(x,y) farrealloc(x,y)
-		#define LMALLOC(x) farmalloc(x)
-		#define MALLOC(x) farmalloc(x)
-		#define LFREE(x) farfree(x)
-		#define FREE(x) farfree(x)
-	#elif defined(__WATCOMC__)
-		#define REALLOC realloc
-		#define LMALLOC(x) halloc(x,1)	/* far heap, but slow */
-		#define MALLOC malloc			/* far heap, but 64k max */
-		#define LFREE hfree
-		#define FREE free
-	#else	/* Other 16-bit Compiler */
-		#define REALLOC realloc
-		#define LMALLOC malloc
-		#define MALLOC malloc
-		#define LFREE free
-		#define FREE free
-	#endif
-#else		/* 32-bit Compiler or Small Memory Model */
-	#define HUGE16
-	#define FAR16
-	#define REALLOC realloc
-	#define LMALLOC malloc
-	#define MALLOC malloc
-	#define LFREE free
-	#define FREE free
-#endif
-
-#define KEY_BUFSIZE 256
-
-#define CRLF  { outchar(CR); outchar(LF); }
-
-#define SYSOP (user_level>=sysop_level) /* Is current user sysop t/f macro	 */
-
-#define bgotoxy(x,y)	printf("\x1b[%d;%dH",y,x)   /* place the cursor at   */
-													/* location x,y via ANSI */
-
-#define SAVELINE		{ slatr[slcnt]=latr; \
-							sprintf(slbuf[slcnt<SAVE_LINES ? slcnt++ : slcnt] \
-							,"%.*s",lbuflen,lbuf); \
-							lbuflen=0; }
-#define RESTORELINE 	{ lbuflen=0; attr(slatr[--slcnt]); \
-							bputs(slbuf[slcnt]); }
-
-#define pause bpause	/* backwards compatibility with pre-3.1 XSDK */
-
-/************/
-/* Typedefs */
-/************/
-
-#ifdef _WIN32	/* necessary for compatibility with SBBS v2 */
-#pragma pack(push)
-#pragma pack(1)
-#endif
-
-#ifdef __GNUC__ 
-	#define _PACK __attribute__ ((packed))
-#else
-	#define _PACK
-#endif
-
-typedef struct _PACK {					/* Node information kept in NODE.DAB */
-	uchar	status,						/* Current Status of Node */
-			errors,						/* Number of Critical Errors */
-			action;						/* Action User is doing on Node */
-	ushort	useron,						/* User on Node */
-			connection,					/* Connection rate of Node */
-			misc,						/* Miscellaneous bits for node */
-			aux;						/* Auxillary word for node */
-	ulong	extaux;						/* Extended aux dword for node */
-            } node_t;
-
-#ifdef _WIN32
-#pragma pack(pop)		/* original packing */
-#endif
-
-#endif	/* Don't add anything after this endif */
diff --git a/xtrn/sdk/xsdkinet.h b/xtrn/sdk/xsdkinet.h
deleted file mode 100644
index b89bb28be6..0000000000
--- a/xtrn/sdk/xsdkinet.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/* xsdkinet.h */
-
-/* Synchronet platform-specific Internet stuff */
-
-/* $Id$ */
-
-/****************************************************************************
- * @format.tab-size 4		(Plain Text/Source Code File Header)			*
- * @format.use-tabs true	(see http://www.synchro.net/ptsc_hdr.html)		*
- *																			*
- * Copyright 2000 Rob Swindell - http://www.synchro.net/copyright.html		*
- *																			*
- * This library is free software; you can redistribute it and/or			*
- * modify it under the terms of the GNU Lesser General Public License		*
- * as published by the Free Software Foundation; either version 2			*
- * of the License, or (at your option) any later version.					*
- * See the GNU Lesser General Public License for more details: lgpl.txt or	*
- * http://www.fsf.org/copyleft/lesser.html									*
- *																			*
- * Anonymous FTP access to the most recent released source is available at	*
- * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net	*
- *																			*
- * Anonymous CVS access to the development source and modification history	*
- * is available at cvs.synchro.net:/cvsroot/sbbs, example:					*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs login			*
- *     (just hit return, no password is necessary)							*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs checkout xtrn	*
- *																			*
- * For Synchronet coding style and modification guidelines, see				*
- * http://www.synchro.net/source.html										*
- *																			*
- * You are encouraged to submit any modifications (preferably in Unix diff	*
- * format) via e-mail to mods@synchro.net									*
- *																			*
- * Note: If this box doesn't appear square, then you need to fix your tabs.	*
- ****************************************************************************/
-
-#ifndef _XSDKINET_H
-#define _XSDKINET_H
-
-/***************/
-/* OS-specific */
-/***************/
-#if defined _WIN32	|| defined __OS2__	/* Use WinSock */
-
-#include <winsock.h>	/* socket/bind/etc. */
-
-/* Let's agree on a standard WinSock symbol here, people */
-#ifndef _WINSOCKAPI_
-#define _WINSOCKAPI_	
-#endif
-
-#elif defined __unix__	/* Unix-variant */
-
-#include <netdb.h>		/* gethostbyname */
-#include <netinet/in.h>	/* IPPROTO_IP */
-#include <sys/socket.h>	/* socket/bind/etc. */
-#include <sys/ioctl.h>	/* FIONBIO */
-#include <sys/time.h>	/* struct timeval */
-#include <arpa/inet.h>	/* inet_ntoa */
-#include <unistd.h>		/* close */
-#include <errno.h>		/* errno */
-
-#endif
-
-/**********************************/
-/* Socket Implementation-specific */
-/**********************************/
-#ifdef _WINSOCKAPI_
-
-#undef  EINTR
-#define EINTR			WSAEINTR
-#undef  ENOTSOCK
-#define ENOTSOCK		WSAENOTSOCK
-#undef  EWOULDBLOCK
-#define EWOULDBLOCK		WSAEWOULDBLOCK
-#undef  ECONNRESET
-#define ECONNRESET		WSAECONNRESET
-#undef  ECONNABORTED
-#define ECONNABORTED	WSAECONNABORTED
-
-#define s_addr			S_un.S_addr
-
-#define socklen_t		int
-
-#define ERROR_VALUE		WSAGetLastError()
-
-#else	/* BSD sockets */
-
-/* WinSock-isms */
-#define HOSTENT			struct hostent
-#define SOCKADDR_IN		struct sockaddr_in
-#define LINGER			struct linger
-#define SOCKET			int
-#define SOCKET_ERROR	-1
-#define INVALID_SOCKET  (SOCKET)(~0)
-#define closesocket		close
-#define ioctlsocket		ioctl
-#define ERROR_VALUE		errno
-
-#endif	/* __unix__ */
-
-#ifndef SHUT_RDWR
-#define SHUT_RDWR		2	/* for shutdown() */
-#endif
-
-#endif	/* Don't add anything after this line */
diff --git a/xtrn/sdk/xsdkvars.c b/xtrn/sdk/xsdkvars.c
deleted file mode 100644
index 9ffcccfadb..0000000000
--- a/xtrn/sdk/xsdkvars.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/* xsdkvars.c */
-
-/* Synchronet XSDK global variables */
-
-/* $Id$ */
-
-/****************************************************************************
- * @format.tab-size 4		(Plain Text/Source Code File Header)			*
- * @format.use-tabs true	(see http://www.synchro.net/ptsc_hdr.html)		*
- *																			*
- * Copyright 2000 Rob Swindell - http://www.synchro.net/copyright.html		*
- *																			*
- * This library is free software; you can redistribute it and/or			*
- * modify it under the terms of the GNU Lesser General Public License		*
- * as published by the Free Software Foundation; either version 2			*
- * of the License, or (at your option) any later version.					*
- * See the GNU Lesser General Public License for more details: lgpl.txt or	*
- * http://www.fsf.org/copyleft/lesser.html									*
- *																			*
- * Anonymous FTP access to the most recent released source is available at	*
- * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net	*
- *																			*
- * Anonymous CVS access to the development source and modification history	*
- * is available at cvs.synchro.net:/cvsroot/sbbs, example:					*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs login			*
- *     (just hit return, no password is necessary)							*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs checkout xtrn	*
- *																			*
- * For Synchronet coding style and modification guidelines, see				*
- * http://www.synchro.net/source.html										*
- *																			*
- * You are encouraged to submit any modifications (preferably in Unix diff	*
- * format) via e-mail to mods@synchro.net									*
- *																			*
- * Note: If this box doesn't appear square, then you need to fix your tabs.	*
- ****************************************************************************/
-
-#include <time.h>
-#include <stdio.h>
-#include "xsdkinet.h"	/* SOCKET */
-#include "xsdkdefs.h"
-
-#ifndef GLOBAL
-#define GLOBAL
-#endif
-
-#ifdef __cplusplus
-	extern "C" {
-#endif
-
-/*******************************/
-/* Global Variable Definitions */
-/*******************************/
-GLOBAL char 	lncntr; 			/* Line counter */
-GLOBAL char 	tos;				/* Top of screen */
-GLOBAL uchar	curatr; 			/* Current attribute */
-GLOBAL char 	mnehigh,			/* Colors for mnemonics */
-				mnelow;
-GLOBAL uchar	sys_nodes,			/* Number of nodes on system */
-				node_num;			/* Current node number */
-GLOBAL ulong	node_misc;			/* Misc. node toggles */
-GLOBAL char 	sys_name[41],		/* System name */
-				sys_id[9],			/* System QWK ID */
-				sys_op[41], 		/* System operator name */
-				sys_guru[41];		/* System guru name */
-GLOBAL ushort	timeleft;			/* Time left in seconds */
-GLOBAL char 	ctrl_dir[128],		/* SBBS dirs */
-				data_dir[128],
-				node_dir[128],
-				exec_dir[128],
-				text_dir[128],
-				temp_dir[128];
-GLOBAL uint 	user_number;		/* User's number */
-GLOBAL char 	user_name[45],		/* User's name/alias */
-				user_misc,			/* User's misc settings */
-				user_rows,			/* User's rows per screen */
-				user_level, 		/* User's main level */
-				user_flags1[27],	/* User's flag set #1 */
-				user_flags2[27],	/* User's flag set #2 */
-				user_flags3[27],	/* User's flag set #3 */
-				user_flags4[27],	/* User's flag set #4 */
-				user_exempt[27],	/* User's exemptions */
-				user_rest[27],		/* User's restrictions */
-				user_sex,			/* User's sex */
-				user_birth[9],		/* User's birthday */
-				user_phone[13], 	/* User's phone number */
-				user_address[31],	/* User's address */
-				user_location[31],	/* User's location */
-				user_zipcode[11],	/* User's zip/postal code */
-				user_realname[26];	/* User's real name or company name */
-GLOBAL ulong	user_cdt,			/* User's credits */
-				user_dce;			/* User's DCE rate */
-GLOBAL time_t	user_expire;		/* User's expiration date */
-
-									/* COM port registers: */
-GLOBAL uint 	com_base,			/* COM base address */
-				com_irq;			/* irq line number	   */
-GLOBAL ulong	com_rate;			/* DTE rate in bps	   */
-GLOBAL char  	com_port;			/* Number of COM port  */
-
-									/* Modem command strings */
-GLOBAL char 	mdm_init[64],		/* Initialization */
-				mdm_spec[64],		/* Special Initialization */
-				mdm_term[64],		/* Terminal Initialization String */
-				mdm_dial[64],		/* Dial */
-				mdm_offh[64],		/* Off hook */
-				mdm_answ[64],		/* Answer */
-                mdm_misc;           /* Misc bits used for flags */
-
-GLOBAL time_t	starttime;			/* Start time-stamp */
-GLOBAL char 	wordwrap[81];		/* Wordwrap buffer */
-GLOBAL uint 	sec_warn,			/* Seconds till inactivity warning */
-				sec_timeout;		/* Seconds till disconnect */
-GLOBAL char 	timeleft_warn;		/* Minutes left warning */
-
-GLOBAL int		nodefile;			/* File descriptor for NODE.DAB */
-
-GLOBAL char 	slbuf[SAVE_LINES][LINE_BUFSIZE+1]; /* Saved for redisplay */
-GLOBAL char 	slatr[SAVE_LINES];	/* Starting attribute of each line */
-GLOBAL char 	slcnt;			/* Number of lines currently saved */
-GLOBAL char 	lbuf[LINE_BUFSIZE];/* Temp storage for each line output */
-GLOBAL int		lbuflen;		/* Number of characters in line buffer */
-GLOBAL char     latr;           /* Starting attribute of line buffer */
-GLOBAL uint 	inDV;			/* DESQview version if running under DV */
-GLOBAL int		keybuftop,keybufbot;	/* Keyboard input buffer pointers */
-GLOBAL char     keybuf[KEY_BUFSIZE];    /* Keyboard input buffer */
-GLOBAL uint FAR16 *msr;			/* Last modem status register contents */
-GLOBAL char 	**xtrn; 		/* List of external program names */
-GLOBAL uint 	total_xtrns;	/* Total number of external programs */
-GLOBAL uchar	lastnodemsg;	/* Last node to send a message to */
-GLOBAL uchar	name_len;		/* Length of name field in NAME.DAT */
-GLOBAL char 	aborted;		/* Aborted flag - if ctrl-c hit */
-GLOBAL char 	sysop_level;	/* Sysop Level */
-GLOBAL FILE 	*con_fp;		/* Console file pointer (stdout/stderr) */
-
-#ifndef __16BIT__	/* Sockets */
-
-GLOBAL SOCKET	client_socket;
-
-#endif
-
-#ifdef __cplusplus
-	}
-#endif
diff --git a/xtrn/sdk/xsdkwrap.c b/xtrn/sdk/xsdkwrap.c
deleted file mode 100644
index c929aa5a67..0000000000
--- a/xtrn/sdk/xsdkwrap.c
+++ /dev/null
@@ -1,483 +0,0 @@
-/* xsdkwrap.c */
-
-/* Synchronet XSDK system-call wrappers (compiler & platform portability) */
-
-/* $Id$ */
-
-/****************************************************************************
- * @format.tab-size 4		(Plain Text/Source Code File Header)			*
- * @format.use-tabs true	(see http://www.synchro.net/ptsc_hdr.html)		*
- *																			*
- * Copyright 2000 Rob Swindell - http://www.synchro.net/copyright.html		*
- *																			*
- * This library is free software; you can redistribute it and/or			*
- * modify it under the terms of the GNU Lesser General Public License		*
- * as published by the Free Software Foundation; either version 2			*
- * of the License, or (at your option) any later version.					*
- * See the GNU Lesser General Public License for more details: lgpl.txt or	*
- * http://www.fsf.org/copyleft/lesser.html									*
- *																			*
- * Anonymous FTP access to the most recent released source is available at	*
- * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net	*
- *																			*
- * Anonymous CVS access to the development source and modification history	*
- * is available at cvs.synchro.net:/cvsroot/sbbs, example:					*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs login			*
- *     (just hit return, no password is necessary)							*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs checkout xtrn	*
- *																			*
- * For Synchronet coding style and modification guidelines, see				*
- * http://www.synchro.net/source.html										*
- *																			*
- * You are encouraged to submit any modifications (preferably in Unix diff	*
- * format) via e-mail to mods@synchro.net									*
- *																			*
- * Note: If this box doesn't appear square, then you need to fix your tabs.	*
- ****************************************************************************/
-
-/* OS-specific */
-#if defined(_WIN32)
-
-	#include <windows.h>	/* DWORD */
-
-#elif defined(__unix__)
-
-	#include <glob.h>       /* glob() wildcard matching */
-	#include <string.h>     /* strlen() */
-	#include <unistd.h>     /* getpid() */
-	#include <fcntl.h>      /* fcntl() file/record locking */
-	#include <stdlib.h>
-	#include <unistd.h>
-	#include <termios.h>
-	#ifdef __FreeBSD__
-	#include <sys/kbio.h>
-	#else
-	#include <sys/kd.h>
-	#endif
-	#include <sys/time.h>
-	#include <sys/types.h>
-	#include <signal.h>
-
-#endif
-
-/* ANSI */
-#include <sys/types.h>	/* _dev_t */
-#include <sys/stat.h>	/* struct stat */
-
-/* XSDK-specific */
-#include "xsdkdefs.h"	/* MAX_PATH */
-#include "xsdkwrap.h"	/* Verify prototypes */
-
-#ifdef _WIN32
-#define stat(f,s)	_stat(f,s)
-#define STAT		struct _stat
-#else
-#define STAT		struct stat
-#endif
-
-#ifdef __unix__
-
-/****************************************************************************/
-/* Wrapper for Win32 create/begin thread function							*/
-/* Uses POSIX threads														*/
-/****************************************************************************/
-#ifdef _POSIX_THREADS
-ulong _beginthread(void( *start_address )( void * )
-		,unsigned stack_size, void *arglist)
-{
-	pthread_t	thread;
-	pthread_attr_t attr;
-
-	pthread_attr_init(&attr);     /* initialize attribute structure */
-
-	/* set thread attributes to PTHREAD_CREATE_DETACHED which will ensure
-	   that thread resources are freed on exit() */
-	pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
-
-	if(pthread_create(&thread
-		,&attr	/* default attributes */
-		/* POSIX defines this arg as "void *(*start_address)" */
-		,(void *) start_address
-		,arglist)==0)
-		return((int) thread /* thread handle */);
-
-	return(-1);	/* error */
-}
-#else
-
-#error "Need _beginthread implementation for non-POSIX thread library."
-
-#endif
-
-/****************************************************************************/
-/* Convert ASCIIZ string to upper case										*/
-/****************************************************************************/
-char* strupr(char* str)
-{
-	char*	p=str;
-
-	while(*p) {
-		*p=toupper(*p);
-		p++;
-	}
-	return(str);
-}
-/****************************************************************************/
-/* Convert ASCIIZ string to lower case										*/
-/****************************************************************************/
-char* strlwr(char* str)
-{
-	char*	p=str;
-
-	while(*p) {
-		*p=tolower(*p);
-		p++;
-	}
-	return(str);
-}
-
-/****************************************************************************/
-/* Reverse chars in string													*/
-/****************************************************************************/
-char* strrev(char* str)
-{
-    char t, *i=str, *j=str+strlen(str);
-
-    while (i<j) {
-        t=*i; *(i++)=*(--j); *j=t;
-    }
-    return str;
-}
-
-/* This is a bit of a hack, but it works */
-char* _fullpath(char* absPath, const char* relPath, size_t maxLength)
-{
-	char *curdir = (char *) malloc(MAX_PATH+1);
-
-	if(curdir == NULL) {
-		strcpy(absPath,relPath);
-		return(absPath);
-	}
-
-    getcwd(curdir, MAX_PATH);
-    if(chdir(relPath)!=0) /* error, invalid dir */
-		strcpy(absPath,relPath);
-	else {
-		getcwd(absPath, maxLength);
-		chdir(curdir);
-	}
-	free(curdir);
-
-    return absPath;
-}
-
-/***************************************/
-/* Console I/O Stuff (by Casey Martin) */
-/***************************************/
-
-static struct termios current;				// our current term settings
-static struct termios original;				// old termios settings
-static struct timeval timeout = {0, 0};		// passed in select() call
-static fd_set inp;							// ditto
-static int beensetup = 0;					// has _termios_setup() been called?
-								
-
-/* Resets the termios to its previous state */
-void _termios_reset(void)
-{
-	tcsetattr(0, TCSANOW, &original);
-}
-
-/************************************************
-  This pair of functions handles Ctrl-Z presses
-************************************************/
-
-void _sighandler_stop(int sig)
-{
-    // clean up the terminal
-    _termios_reset();
-
-    // ... and stop
-	kill(getpid(), SIGSTOP);
-}
-
-void _sighandler_cont(int sig)
-{
-    // restore terminal
-	tcsetattr(0, TCSANOW, &current);
-}
-
-
-/* Prepares termios for non-blocking action */
-void _termios_setup(void)
-{
-	beensetup = 1;
-    
-	tcgetattr(0, &original);
-  
-	memcpy(&current, &original, sizeof(struct termios));
-	current.c_cc[VMIN] = 1;           // read() will return with one char
-	current.c_cc[VTIME] = 0;          // read() blocks forever
-	current.c_lflag &= ~ICANON;       // character mode
-    current.c_lflag &= ~ECHO;         // turn off echoing
-	tcsetattr(0, TCSANOW, &current);
-
-    // Let's install an exit function, also.  This way, we can reset
-    // the termios silently
-    atexit(_termios_reset);
-
-    // install the Ctrl-Z handler
-    signal(SIGSTOP, _sighandler_stop);
-    signal(SIGCONT, _sighandler_cont);
-}
-
-
-int kbhit(void)
-{
-	if(!isatty(0))
-		return(0);
-
-	// set up select() args
-	FD_ZERO(&inp);
-	FD_SET(0, &inp);
-
-	return select(1, &inp, NULL, NULL, &timeout);
-}
-
-int getch(void)
-{
-	char c;
-
-    if (!beensetup)
-    	// I hate to test for this every time, but this shouldn't be
-        // called that often anyway...
-    	_termios_setup();
-
-    // get a char out of stdin
-    read(0, &c, 1);
-
-    return c;
-}
-
-#endif // __unix__
-
-/**************/
-/* File Stuff */
-/**************/
-
-/****************************************************************************/
-/* Returns the length of the file in 'filename'                             */
-/****************************************************************************/
-long flength(char *filename)
-{
-	STAT st;
-
-	if(stat(filename, &st)!=0)
-		return(-1L);
-
-	return(st.st_size);
-}
-
-/****************************************************************************/
-/* Checks the file system for the existence of one or more files.			*/
-/* Returns TRUE if it exists, FALSE if it doesn't.                          */
-/* 'filespec' may contain wildcards!										*/
-/****************************************************************************/
-BOOL fexist(char *filespec)
-{
-#ifdef _WIN32
-
-	long	handle;
-	struct _finddata_t f;
-
-	if((handle=_findfirst(filespec,&f))==-1)
-		return(FALSE);
-
- 	_findclose(handle);
-
- 	if(f.attrib&_A_SUBDIR)
-		return(FALSE);
-
-	return(TRUE);
-
-#elif defined(__unix__)	/* portion by cmartin */
-
-	glob_t g;
-    int c;
-    int l;
-
-    // start the search
-    glob(filespec, GLOB_MARK | GLOB_NOSORT, NULL, &g);
-
-    if (!g.gl_pathc) {
-	    // no results
-    	globfree(&g);
-    	return FALSE;
-    }
-
-    // make sure it's not a directory
-	c = g.gl_pathc;
-    while (c--) {
-    	l = strlen(g.gl_pathv[c]);
-    	if (l && g.gl_pathv[c][l-1] != '/') {
-        	globfree(&g);
-            return TRUE;
-        }
-    }
-        
-    globfree(&g);
-    return FALSE;
-
-#else
-
-#warning "fexist() port needs to support wildcards!"
-
-	return(FALSE);
-
-#endif
-}
-
-#if defined(__unix__)
-
-/****************************************************************************/
-/* Returns the length of the file in 'fd'									*/
-/****************************************************************************/
-long filelength(int fd)
-{
-	STAT st;
-
-	if(fstat(fd, &st)!=0)
-		return(-1L);
-
-	return(st.st_size);
-}
-
-/* Sets a lock on a portion of a file */
-int lock(int fd, long pos, int len)
-{
-	int	flags;
- 	struct flock alock;
-
-	if((flags=fcntl(fd,F_GETFL))<0)
-		return -1;
-
-	if(flags==O_RDONLY)
-		alock.l_type = F_RDLCK; // set read lock to prevent writes
-	else
-		alock.l_type = F_WRLCK; // set write lock to prevent all access
-	alock.l_whence = L_SET;	  // SEEK_SET
-	alock.l_start = pos;
-	alock.l_len = len;
-
-	return fcntl(fd, F_SETLK, &alock);
-}
-
-/* Removes a lock from a file record */
-int unlock(int fd, long pos, int len)
-{
-	struct flock alock;
-
-	alock.l_type = F_UNLCK;   // remove the lock
-	alock.l_whence = L_SET;
-	alock.l_start = pos;
-	alock.l_len = len;
-	return fcntl(fd, F_SETLK, &alock);
-}
-
-/* Opens a file in specified sharing (file-locking) mode */
-int sopen(char *fn, int access, int share)
-{
-	int fd;
-	struct flock alock;
-
-	if ((fd = open(fn, access, S_IREAD|S_IWRITE)) < 0)
-		return -1;
-
-	if (share == SH_DENYNO)
-		// no lock needed
-		return fd;
-
-	alock.l_type = share;
-	alock.l_whence = L_SET;
-	alock.l_start = 0;
-	alock.l_len = 0;       // lock to EOF
-
-#if 0
-	/* The l_pid field is only used with F_GETLK to return the process 
-		ID of the process holding a blocking lock.  */
-	alock.l_pid = getpid();
-#endif
-
-	if (fcntl(fd, F_SETLK, &alock) < 0) {
-		close(fd);
-		return -1;
-	}
-
-	return fd;
-}
-
-#elif defined _MSC_VER || defined __MINGW32__
-
-#include <io.h>				/* tell */
-#include <stdio.h>			/* SEEK_SET */
-#include <sys/locking.h>	/* _locking */
-
-/* Fix MinGW locking.h typo */
-#if defined LK_UNLOCK && !defined LK_UNLCK
-	#define LK_UNLCK LK_UNLOCK
-#endif
-
-int lock(int file, long offset, int size) 
-{
-	int	i;
-	long	pos;
-   
-	pos=tell(file);
-	if(offset!=pos)
-		lseek(file, offset, SEEK_SET);
-	i=_locking(file,LK_NBLCK,size);
-	if(offset!=pos)
-		lseek(file, pos, SEEK_SET);
-	return(i);
-}
-
-int unlock(int file, long offset, int size)
-{
-	int	i;
-	long	pos;
-   
-	pos=tell(file);
-	if(offset!=pos)
-		lseek(file, offset, SEEK_SET);
-	i=_locking(file,LK_UNLCK,size);
-	if(offset!=pos)
-		lseek(file, pos, SEEK_SET);
-	return(i);
-}
-
-#endif	/* !Unix && (MSVC || MinGW) */
-
-/****************************************************************************/
-/* Return ASCII string representation of ulong								*/
-/* There may be a native GNU C Library function to this...					*/
-/****************************************************************************/
-#if !defined _MSC_VER && !defined __BORLANDC__
-char* ultoa(unsigned long val, char* str, int radix)
-{
-	switch(radix) {
-		case 8:
-			sprintf(str,"%lo",val);
-			break;
-		case 10:
-			sprintf(str,"%lu",val);
-			break;
-		case 16:
-			sprintf(str,"%lx",val);
-			break;
-		default:
-			sprintf(str,"bad radix: %d",radix);
-			break;
-	}
-	return(str);
-}
-#endif
diff --git a/xtrn/sdk/xsdkwrap.h b/xtrn/sdk/xsdkwrap.h
deleted file mode 100644
index af811ab268..0000000000
--- a/xtrn/sdk/xsdkwrap.h
+++ /dev/null
@@ -1,250 +0,0 @@
-/* xsdkwrap.h */
-
-/* Synchronet XSDK system-call wrappers */
-
-/* $Id$ */
-
-/****************************************************************************
- * @format.tab-size 4		(Plain Text/Source Code File Header)			*
- * @format.use-tabs true	(see http://www.synchro.net/ptsc_hdr.html)		*
- *																			*
- * Copyright 2000 Rob Swindell - http://www.synchro.net/copyright.html		*
- *																			*
- * This library is free software; you can redistribute it and/or			*
- * modify it under the terms of the GNU Lesser General Public License		*
- * as published by the Free Software Foundation; either version 2			*
- * of the License, or (at your option) any later version.					*
- * See the GNU Lesser General Public License for more details: lgpl.txt or	*
- * http://www.fsf.org/copyleft/lesser.html									*
- *																			*
- * Anonymous FTP access to the most recent released source is available at	*
- * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net	*
- *																			*
- * Anonymous CVS access to the development source and modification history	*
- * is available at cvs.synchro.net:/cvsroot/sbbs, example:					*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs login			*
- *     (just hit return, no password is necessary)							*
- * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs checkout xtrn	*
- *																			*
- * For Synchronet coding style and modification guidelines, see				*
- * http://www.synchro.net/source.html										*
- *																			*
- * You are encouraged to submit any modifications (preferably in Unix diff	*
- * format) via e-mail to mods@synchro.net									*
- *																			*
- * Note: If this box doesn't appear square, then you need to fix your tabs.	*
- ****************************************************************************/
-
-#ifndef _XSDKWRAP_H
-#define _XSDKWRAP_H
-
-/*********************/
-/* Compiler-specific */
-/*********************/
-
-/* Compiler Description */
-#if defined(__BORLANDC__)
-
-	#define COMPILER_DESC(str) sprintf(str,"BCC %X.%02X" \
-		,__BORLANDC__>>8,__BORLANDC__&0xff);	
-
-#elif defined(_MSC_VER)
-
-	#define COMPILER_DESC(str) sprintf(str,"MSC %u", _MSC_VER);
-
-/***
-#elif defined(__GNUC__) && defined(__GLIBC__)
-
-	#define COMPILER_DESC(str) sprintf(str,"GCC %u.%02u (GLIBC %u.%u)" \
-		,__GNUC__,__GNUC_MINOR__,__GLIBC__,__GLIBC_MINOR__);
-***/
-
-#elif defined(__GNUC__)
-
-	#define COMPILER_DESC(str) sprintf(str,"GCC %u.%02u" \
-		,__GNUC__,__GNUC_MINOR__);
-
-#else /* Unknown compiler */
-
-	#define COMPILER_DESC(str) strcpy(str,"UNKNOWN COMPILER");
-
-#endif
-
-#if defined(__unix__)
-	#define BACKSLASH	'/'
-#else /* MS-DOS based OS */
-	#define BACKSLASH	'\\'
-#endif
-
-/* Target Platform Description */
-#if defined(_WIN32)
-	#define PLATFORM_DESC	"Win32"
-#elif defined(__OS2__)
-	#define PLATFORM_DESC	"OS/2"
-#elif defined(__MSDOS__)
-	#define PLATFORM_DESC	"DOS"
-#elif defined(__linux__)
-	#define PLATFORM_DESC	"Linux"
-#elif defined(__FreeBSD__)
-	#define PLATFORM_DESC	"FreeBSD"
-#elif defined(BSD)
-	#define PLATFORM_DESC	"BSD"
-#elif defined(__unix__)
-	#define PLATFORM_DESC	"Unix"
-#else
-	#warning "Need to describe target platform"
-	#define PLATFORM_DESC	"UNKNOWN"
-#endif
-
-#if defined(__unix__)
-
-	int kbhit(void);
-	int getch(void);
-	#define ungetch(x)	/* !need a wrapper for this */
-
-#else	/* DOS-Based */
-
-	#include <conio.h>
-
-#endif
-
-#if defined(_WIN32)
-
-	#include <io.h>				/* _sopen */
-	#include <sys/stat.h>		/* S_IREAD */
-	#include <fcntl.h>			/* O_BINARY */
-	#include <windows.h>		/* OF_SHARE_ */
-
-	#define sopen(f,o,s)		_sopen(f,o,s,S_IREAD|S_IWRITE)
-	#define close(f)			_close(f)
-							
-	#ifndef SH_DENYNO
-	#define SH_DENYNO			OF_SHARE_DENY_NONE
-	#define SH_DENYWR			OF_SHARE_DENY_WRITE
-	#define SH_DENYRW			OF_SHARE_EXCLUSIVE
-	#endif
-	#ifndef O_DENYNONE
-	#define O_DENYNONE			SH_DENYNO
-	#endif
-
-#elif defined(__unix__)
-
-	#include <fcntl.h>
-
-	#define O_BINARY	0		/* all files in binary mode on Unix */
-	#define O_DENYNONE  (1<<31)	/* req'd for Baja/nopen compatibility */
-
-	#define SH_DENYNO	2          // no locks
-	#define SH_DENYRW	F_WRLCK	   // exclusive lock
-	#define SH_DENYWR   F_RDLCK    // shareable lock
-
-	#define stricmp(x,y)		strcasecmp(x,y)
-	#define strnicmp(x,y,z)		strncasecmp(x,y,z)
-	#define chsize(fd,size)		ftruncate(fd,size)
-
-#endif
-
-#ifdef __unix__
-
-	#include <pthread.h>	/* POSIX threads and mutexes */
-	#include <semaphore.h>	/* POSIX semaphores */
-	unsigned long _beginthread(void( *start_address )( void * )
-		,unsigned stack_size, void *arglist);
-
-#elif defined(_WIN32)	
-
-	#include <process.h>	/* _beginthread() */
-
-	/* POSIX semaphores */
-	typedef HANDLE sem_t;
-	#define sem_init(psem,ps,v)			ResetEvent(*(psem))
-	#define sem_wait(psem)				WaitForSingleObject(*(psem),INFINITE)
-	#define sem_post(psem)				SetEvent(*(psem))
-	#define sem_destroy(psem)			CloseHandle(*(psem))
-
-	/* POIX mutexes */
-	typedef HANDLE pthread_mutex_t;
-	#define pthread_mutex_init(pmtx,v)	*(pmtx)=CreateMutex(NULL,FALSE,NULL)
-	#define pthread_mutex_lock(pmtx)	WaitForSingleObject(*(pmtx),INFINITE)
-	#define pthread_mutex_unlock(pmtx)	ReleaseMutex(*(pmtx))
-	#define	pthread_mutex_destroy(pmtx)	CloseHandle(*(pmtx))
-
-
-#elif defined(__MSDOS__)
-
-	/* No semaphores */
-
-#else
-
-	#warning "Need semaphore wrappers."
-
-#endif
-
-
-#if defined(_WIN32)
-
-	#define mswait(x)			Sleep(x)
-
-#elif defined(__OS2__)
-
-	#define mswait(x)			DosSleep(x)
-
-#elif defined(__unix__)
-
-	#define mswait(x)			usleep(x*1000)
-	#define _mkdir(dir)			mkdir(dir,0777)
-	#define _rmdir(dir)			rmdir(dir)
-	#define tell(fd)			lseek(fd,0,SEEK_CUR)
-
-	int		sopen(char *fn, int access, int share);
-	long	filelength(int fd);
-	char*	strupr(char* str);
-	char*	strlwr(char* str);
-
-	char*	strrev(char* str);
-	char*	_fullpath(char* absPath, const char* relPath
-								,size_t maxLength);
-
-#elif defined(__MSDOS__)
-
-	void mswait(int ms);	/* Wait a specific number of milliseconds */
-
-#else	/* Unsupported OS */
-
-	#warning "Unsupported Target: Need some macros of function prototypes here."
-
-#endif
-
-#ifndef BOOL
-	#define BOOL	int
-#endif
-#ifndef TRUE
-	#define TRUE	1
-	#define FALSE	0
-#endif
-
-/**************/
-/* Prototypes */
-/**************/
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if !defined(__BORLANDC__)
-	int	lock(int fd, long pos, int len);
-	int	unlock(int fd, long pos, int len);
-#endif
-
-#if !defined(_MSC_VER) && !defined(__BORLANDC__)
-	char*	ultoa(unsigned long val, char* str, int radix);
-#endif
-
-BOOL	fexist(char *filespec);
-long	flength(char *filename);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif	/* Don't add anything after this line */
diff --git a/xtrn/smm/adult.que b/xtrn/smm/adult.que
deleted file mode 100644
index dd10f2f4c8..0000000000
--- a/xtrn/smm/adult.que
+++ /dev/null
@@ -1,93 +0,0 @@
-20
-How old were you when you lost your virginity?
-9
-1
-I still have it
-Younger than 12
-Between 12 and 14
-Between 15 and 16
-Between 17 and 18
-Between 19 and 20
-Between 21 and 25
-Between 25 and 30
-Older than 30
-How many sexual partners have you had?
-8
-1
-None
-Between 1 and 5
-Between 6 and 10
-Between 11 and 20
-Between 21 and 30
-Between 31 and 50
-Between 51 and 100
-More than 100
-When engaged in a relationship, how often do you prefer to have sex?
-8
-1
-Never
-At least once a day
-Between 4 and 6 times a week
-Between 1 and 3 times a week
-Between 1 and 3 times a month
-Between 6 and 11 times a year
-Between 1 and 5 times a year
-Less than once a year
-What form of sexually transmitted disease protection do you prefer?
-5
-1
-I don't know
-Abstinence
-No protection
-Male condoms
-Female condoms
-Do you enjoy oral sex?
-5
-1
-I don't know
-No
-Yes, giving
-Yes, receiving
-Yes, both giving and receiving
-Do you enjoy anal sex?
-5
-1
-I don't know
-No
-Yes, giving
-Yes, receiving
-Yes, both giving and receiving
-How often do you masturbate?
-8
-1
-At least once a day
-Between 4 and 6 times a week
-Between 1 and 3 times a week
-Between 1 and 3 times a month
-Between 6 and 11 times a year
-Between 1 and 5 times a year
-Less than once a year
-Never
-Do you reach orgasm (alone or with a partner)?
-5
-1
-I don't know
-Yes, always
-Yes, occasionally
-Yes, rarely
-No
-Have you had sexual partners of your same gender?
-6
-1
-I don't know
-Yes, always
-Yes, occasionally
-Yes, rarely
-No, but I'm curious
-No, never
-Do you shave your pubic area?
-3
-1
-Yes, all of it
-Yes, some of it
-No
diff --git a/xtrn/smm/appear.que b/xtrn/smm/appear.que
deleted file mode 100644
index b7b1b7ea02..0000000000
--- a/xtrn/smm/appear.que
+++ /dev/null
@@ -1,119 +0,0 @@
-8
-Do you wear any of the following?
-16
-16
-Eye glasses
-Partial beard (goatee, five o'clock shadow, etc.)
-Full beard
-Mustache
-Side burns
-Earring(s)
-Make-up
-Body piercing (nose, tongue, naval, eyebrow, etc.)
-Visible tatoos
-Covered tatoos
-Unnaturally colored/bleached hair (blue, purple, pink, etc.)
-Brades or dreds
-Pony tail
-Long fingernails
-Painted fingernails
-None of the above
-Larger than average or smaller than average attributes?
-16
-8
-Small eyes
-Large eyes
-Small ears
-Large ears
-Small nose
-Large nose
-Small breasts
-Large breasts
-Large arms
-Large legs
-Large hips/buttocks
-Thin-lips
-Thick-lips
-Thin eyebrows
-Thick eyebrows
-None of the above
-Do you have a sun-tan?
-5
-1
-No, I'm naturally dark
-No, but I will this summer
-No, I don't try to tan
-No, I always burn
-Yes
-Your (natural) complexion?
-9
-3
-Very dark
-Medium dark (olive)
-Light dark
-White
-Whiter than white (alabaster)
-Sparse freckles
-Dense freckles
-Mild acne
-Cystic acne
-Your hair (on your head)?
-16
-5
-Gone (bald)
-Thin (balding)
-Thinner than average
-Average thickness
-Thicker than average
-Feathered
-All one length
-Curly
-Wavy
-Straight
-Partially shaved
-Completely shaved
-Short length
-Medium length
-Long length
-Very long length
-Your teeth?
-11
-4
-Very white
-Average whiteness
-Slightly stained (smoke, coffee, etc.)
-Very stained (smoke, coffee, etc.)
-Very straight
-Average straightness
-Slightly crooked
-Very crooked
-Visible missing teeth
-Visible caps (gold or silver)
-Visible braces
-Your build?
-6
-1
-Thin, wirey
-Thin, but toned
-Average
-Chunky
-Stocky
-Muscle-bound
-Physical disabilities/deformities?
-14
-5
-Missing fingers
-Gimpy or missing limbs
-Scarred face
-Scarred arms or hands
-Mongloidian eyes
-Lazy/cross/cock-eyed
-Cleft pallette
-Paraplegic
-Quadriplegic
-Blind
-Deaf
-Mute
-Other
-None
-
diff --git a/xtrn/smm/basic.que b/xtrn/smm/basic.que
deleted file mode 100644
index aaf3634eb0..0000000000
--- a/xtrn/smm/basic.que
+++ /dev/null
@@ -1,179 +0,0 @@
-17
-What is your religious belief?
-9
-1
-Christian
-Jewish
-Catholic
-Buddihst
-Muslim
-Mormon
-Jehovah's Witness
-Other
-None
-Do you participate in organized religion?
-3
-1
-Yes
-No
-Sometimes
-Do you smoke tobacco?
-5
-1
-Yes, daily
-Yes, occasionally
-Yes, I'm trying to quit
-No, I quit
-No, I never smoked tobacco regularly
-Do you use forms of nicotine other than tobacco (dip, snuff, etc)?
-5
-1
-Yes, daily
-Yes, occasionally
-Yes, I'm trying to quit
-No, I quit
-No, never
-Do you drink alcohol?
-6
-1
-Yes, daily
-Yes, occasionally
-Yes, but never enough to get drunk
-Yes, I'm trying to quit
-No, I quit
-No, I never drank
-Do you dance?
-7
-1
-Yes, professionally (exotic)
-Yes, professionally (tame)
-Yes, regularly
-Yes, occasionally
-Yes, rarely
-No, not recently
-No, not ever
-Favorite types of music?
-16
-16
-Easy Listening
-New Age
-Classical
-Classic Rock
-Heavy Metal
-Punk Rock
-Alternative
-Industrial
-Techno
-Pop
-Rap
-Disco
-Rhthym and Blues
-Jazz
-Folk
-Country and Western
-Completed education?
-7
-6
-Grade school
-High school
-Trade school
-College (Associate's)
-College (Bachelor's)
-College (Master's)
-None
-Are you currently enrolled in school?
-8
-1
-Yes, grade school
-Yes, high school
-Yes, trade school
-Yes, city college
-Yes, state college
-No, but I plan to return
-No, but I plan to start
-No, and I have no plans to
-Are you currently employed?
-4
-1
-Yes, full-time
-Yes, part-time
-No, but I'm seeking employment
-No, I don't need/want to work right now
-Are you financially independant?
-5
-1
-Yes
-No, I depend on my parent(s)
-No, I depend on other relative(s)
-No, I depend on my spouse
-No, I depend on a significant other
-Do you play sports?
-5
-1
-Yes, professionally
-Yes, frequently
-Yes, occasionally
-Yes, rarely
-No
-Do you do any recreational reading?
-4
-1
-Yes, frequently
-Yes, occasionally
-Yes, rarely
-No
-Favorite out-door activities?
-16
-16
-Water (swimming, skiing, surfing, etc.)
-Snow (skiing, boarding, ice skating, etc.)
-Hiking/camping/climbing
-Roller skating/blading
-Bicycling
-Running/jogging/walking
-Team sports (baseball, basketball, football, soccer, etc.)
-Racket sports (tennis, racquetball, badminton, etc.)
-Golf
-Shooting (firearms, archery, etc.)
-Off-road (motorcycles, ATVs, etc.)
-Sky diving/bungee jumping
-Gardening
-Fishing/hunting
-Horseback riding
-None of the above
-Favorite in-home activities?
-16
-16
-Painting/drawing/sculpting/etc.
-Sewing/weaving/etc.
-Cooking
-Writing
-Reading
-Playing a musical instrument/singing
-Playing video/computer games
-Playing card/board games
-Cleaning
-Computer programming/exploring
-BBS/E-mail/Internet communications
-CB/HAM/shortwave radio communications
-Electronics/chemistry/physics experiments
-Talking on the telephone
-Watching television
-Listening to music (CDs, records, tapes, radio, etc.)
-Do you have any children?
-6
-1
-Yes, three or more
-Yes, two
-Yes, one
-No, but definitely someday
-No, but possibly someday
-No, I don't ever want children
-What kind of relationship are you seeking?
-5
-5
-Platonic friendship (no intimacy)
-Dating (no commitment)
-Long term relationship (boyfriend/girlfriend/lover)
-Marriage
-None of the above
diff --git a/xtrn/smm/file_id.diz b/xtrn/smm/file_id.diz
deleted file mode 100644
index 5b423d7a3f..0000000000
--- a/xtrn/smm/file_id.diz
+++ /dev/null
@@ -1,7 +0,0 @@
-Synchronet Match Maker (BBS door) v2.10
-supports any DOOR.SYS or Synchronet BBS.
-Internationally networked profiles, 
-telegrams, wall, photographs, and more! 
-Developed by Digital Dynamics, makers of 
-Synchronet BBS Software. Perhaps the most 
-comprehensive match maker available.
diff --git a/xtrn/smm/list_hdr.asc b/xtrn/smm/list_hdr.asc
deleted file mode 100644
index 182a1298dd..0000000000
--- a/xtrn/smm/list_hdr.asc
+++ /dev/null
@@ -1,5 +0,0 @@
-nh���Marital Status or Orientation (Single, Married, Divorced, Widowed, etc)
-�ng��Race (White, Black, Hispanic, Indian, Middle Eastern, Asian, or Other)
-hw�ng�hc�Sex  m   �Eyes    y�Weight 
-w�ng�hc�bAge gHairm�  rHeighty�   ng�Location           cPhoto�hw�Name/Alias           mMatch�
-w�ng�hc� b�  g�   m�   r�    y�ng   �                        c�hw�m                          �
diff --git a/xtrn/smm/material.que b/xtrn/smm/material.que
deleted file mode 100644
index 2de521f015..0000000000
--- a/xtrn/smm/material.que
+++ /dev/null
@@ -1,91 +0,0 @@
-16
-Do you own a passenger vehicle?
-5
-1
-Yes, more than one
-Yes
-No, but I will soon
-No, and I don't know when/if I will
-No, I don't have a driver's license
-Do you own a recreational vehicle?
-2
-1
-Yes
-No
-Do you own a home (mortage counts)?
-4
-1
-Yes, more than one
-Yes
-No, I'm renting
-No
-Do you own furniture?
-3
-1
-Yes
-No, I'm renting
-No
-Do you own a computer?
-4
-1
-Yes, more than one
-Yes
-No, I'm renting
-No
-Do you have a savings account?
-2
-1
-Yes
-No
-Do you have a checking account?
-2
-1
-Yes
-No
-Do you have a credit card?
-3
-1
-Yes, more than one
-Yes
-No
-Do you have health insurance?
-2
-1
-Yes
-No
-Do you have life insurance?
-2
-1
-Yes
-No
-Do you have car insurance?
-2
-1
-Yes
-No
-Do you have an accountant?
-2
-1
-Yes
-No
-Do you have a maid?
-2
-1
-Yes
-No
-Do you own a swimming pool (i.e. in your backyard)?
-2
-1
-Yes
-No
-Do you own an acre or more of land?
-2
-1
-Yes
-No
-Do you own any stocks or bonds?
-2
-1
-Yes
-No
-
diff --git a/xtrn/smm/mb-e.asc b/xtrn/smm/mb-e.asc
deleted file mode 100644
index 2b612f78b2..0000000000
--- a/xtrn/smm/mb-e.asc
+++ /dev/null
@@ -1,7 +0,0 @@
-An Extrovert is energized by people. A strong extrovert feels very much alone
-without lots of people around. E's tend to talk first & think later, know a
-lot of people, don't mind having a conversation while the TV is on, are
-approachable, don't consider the telephone to be an interruption, tend to 
-think out loud and use people as a sounding board for their ideas, need
-affirmation from friends about  who I am & how do I look. 
-About 75% of the population are type E.
diff --git a/xtrn/smm/mb-enfj.asc b/xtrn/smm/mb-enfj.asc
deleted file mode 100644
index 7dadc77fe7..0000000000
--- a/xtrn/smm/mb-enfj.asc
+++ /dev/null
@@ -1,134 +0,0 @@
-ENFJs in short:
-
-Responsive and responsible.  Generally feel real concern for what
-others think or want, and try to handle things with due regard for
-other person's feelings.  Can present a proposal or lead a group
-discussion with ease and tact.  Sociable, popular, sympathetic.
-Responsive to praise and criticism.
-
-About 5% of the population.
-
-Details about ENFJs:
-
-ENFJs are outstanding leaders of groups, both task groups and
-growth groups.  They have the charming characteristic of seeming to
-take for granted that they will be followed, never doubting that
-people will want to do what they suggest.  And, more often than
-not, people do, because this type of has unusual charisma.  ENFJs
-place a high value on cooperation from others and are most willing
-to cooperate themselves.
-
-Found in only about 5 percent of the general population, ENFJs
-place people as being of highest importance and priority.  As a
-result, ENFJs may find themselves feeling responsible for the
-feelings of others to an extent which places a burden on the
-relationship.
-
-An ENFJ communicates caring, concern, and a willingness to be
-involved.  Thus people turn to ENFJs for nurture and support, which
-an ENFJ is usually able to deliver.  At times, however, these kinds
-of demands can overwhelm ENFJs, who find at this point that they
-lack the skills to dissociate.  ENFJs do not seem able to turn away
-from these demands even when they become unreasonable.  Or, if
-forced to let go of the burden through sheer unavailability of time
-or energy, ENFJs experience a guilt all out of proportion to the
-realities of the commitment to the relationship.
-
-ENFJs are vulnerable to idealize interpersonal relationships,
-raising these relationships to a plane which seldom can sustain the
-realities of human nature.  Because of this tendency to raise
-interpersonal relations to the ideal, ENFJs may unwittingly
-overpower their friends, who believe that they cannot possibly live
-up to an ENFJ's perception of them.  The fact is, ENFJs are
-extraordinarily tolerant of others, seldom critical, and always
-trustworthy.
-
-ENFJs take communication for granted and believe that they are
-understood and that their communications are accepted.  Just as
-they themselves are accepting, so do they assume that others are
-the same.  When ENFJs find that their position or beliefs were not
-comprehended or accepted, they are surprised, puzzled, and
-sometimes hurt.  Fortunately, this does not happen with high
-frequency, as ENFJs have a remarkable fluency with language,
-especially in speech; they are particularly adept when
-communicating face-to-face as opposed to communicating in writing.
-
-They are influential, therefore, in groups, having no hesitation
-about speaking out, no matter how large or small the group may be.
-
-ENFJs have an unusual ability to relate to others with empathy,
-taking into themselves the characteristics, emotions, and beliefs
-of others.  This can pose a danger for ENFJs, they can
-unconsciously over-identify with others and pick up their burdens
-as if they were their own.  In the process, ENFJs may risk their
-own sense of identity.
-
-They have a natural ability to mimic because of this highly
-developed ability to empathize by interjection.  They are likely to
-be very concerned about the problems of those close to them, but
-they also may get as deeply involved in the problems of those not
-so close and may find themselves overextended emotionally.
-
-ENFJs would do well to follow their hunches, for their intuition
-tends to be well developed.  Decisions made purely on the basis of
-logic may not be so sound, and checking with a person who has a
-strong T preference might be at times advisable for the ENFJ.  In
-the framework of values, however, the ENFJ is on certain ground.
-Generally, they know what they prefer and can read other people
-with outstanding accuracy.  Seldom is an ENFJ wrong about the
-motivations or intents of another, hidden or not.
-
-ENFJs are socially adept and make excellent companions and mates.
-They also are deeply devoted to their children, yet tend not to be
-domineering to either the children or a mate.  In fact, the ENFJ is
-so even-tempered that he or she can be victimized by a mate who
-might have become more than demanding.
-
-ENFJ mates always try to please and feel personally responsible
-when home life does not go smoothly.  They are tireless in their
-efforts to see that it does, providing generously from available
-income, time and energy.  This dedication often exists, however,
-side by side with an ENFJ's dream of the perfect relationship - a
-characteristic of all NFs, but one which is particularly strong in
-an ENFJ.  Thus an ENFJ has that longing for the ideal which results
-in a vague dissatisfaction with whatever is in the way of
-relationships, mating as well as friendship.
-
-This longing for the perfect carries over into the careers of
-ENFJs, who experience some degree of restlessness whatever their
-jobs.  And, as with ENFPs, ENFJs have a wide range of occupations
-which offer success.
-
-Being verbally adept, ENFJs contribute to an unusual level when
-dealing with people, particularly face-to-face: the media, the
-ministry, and the stage and screen are populated with successful
-ENFJs.  They make superior therapists, charismatic teachers,
-excellent executives, and personalized executives.  Areas that
-would not permit utilization of the interaction talents of the
-ENFJs, for example, accounting, should be avoided; otherwise,
-almost any people-to-people occupation where personal, sustained
-contact is involved capitalizes on the personality of an ENFJ.
-
-ENFJs like to have things organized and settled.  They prefer to
-plan both work and social engagements ahead and tend to be
-absolutely reliable in honoring these commitments.  ENFJs are very
-much at home in complex situations which require the juggling of
-much data.  At the same time they can handle people with charm and
-concern.
-
-ENFJs are usually popular wherever they are.  Their ability to be
-comfortable either leading or following makes them easy to have
-around, whatever the situation.  A well-developed ENFJ group leader
-can provide, almost endlessly, activities for groups to play.  In
-some, this can amount to genius which other types find hard to
-emulate.  In this ability to organize without planning there is a
-certain, similarity to the ESFJ, but the latter acts more as a
-master of ceremonies than as a leader of groups.  The ESFJ is more
-of a recreational leader, who insures that each member has fun at a
-party and that the right things are expressed at social occasions,
-especially institutional social occasions such as weddings,
-funerals, parties, and the like.
-
-ENFJs, just like ESFJs, value harmonious human relations above all
-else; but ENFJs are not so easily crushed by indifference as are
-ESFJs and are more independent of others' valuations.
diff --git a/xtrn/smm/mb-enfp.asc b/xtrn/smm/mb-enfp.asc
deleted file mode 100644
index b8bcfdb153..0000000000
--- a/xtrn/smm/mb-enfp.asc
+++ /dev/null
@@ -1,157 +0,0 @@
-ENFPs in short:
-
-Warmly enthusiastic, high-spirited, ingenious, imaginative.  Able
-to do almost anything that interests them.  Quick with a solution
-for any difficulty and ready to help anyone with a problem.  Often
-rely on their ability to improvise instead of preparing in advance.
-Can usually find compelling reasons for whatever they want.
-
-About 5% of the population.
-
-Details on ENFPs:
-
-For ENFPs nothing occurs which does not have some significance, and
-they have an uncanny sense of the motivations of others.  This
-gives them a talent for seeing life as an exciting drama, pregnant
-with possibilities for both good and evil.  This type is found in
-only about 5 percent of the general population, but they have great
-influence because of their extraordinary impact on others.
-
-ENFPs strive toward the authentic, even when acting spontaneously,
-and this intent is usually communicated nonverbally to others, who
-find this characteristic attractive.  ENFPs, however, find their
-own efforts of authenticity and spontaneity always lacking, and
-tend to heap coals of fire on themselves, always berating
-themselves for being so conscious of self.
-
-ENFPs consider intense emotional experiences vital; when they have
-these, however, they are made uneasy by a sense of being there but
-with a part of themselves cut off.  They strive for congruency, but
-always see themselves in some danger of losing touch with their
-real feelings, which ENFPs possess in a wide range and variety.
-
-ENFPs exercise a continuous scanning of the external environment
-and nothing out of the ordinary is likely to escape their
-attention.  They are keen and penetrating observers and are capable
-of intense concentration on another individual while aware of what
-is going on about them.  Their attention is never passive or
-casual, never wandering, but always directed.
-
-At times, ENFPs find themselves interpreting events in terms of
-another's "hidden motive," giving special meaning to words or
-actions.  This interpretation tends to be negative and, more often
-than not, inaccurately negative.  In the process, an ENFP may find
-that he or she has introduced an unnecessary, toxic element into
-the relationship.
-
-While ENFPs are brilliantly perceptive, they can make serious
-mistakes in judgement, which works to their discomfort.  These
-mistakes derive from their tendency to focus on data which confirm
-their own biases.  They may be absolutely correct in their
-perceptions but wrong in their conclusions.
-
-Because they tend to be hypersensitive and hyperalert, they may
-suffer from muscle tension.  They live in readiness for
-emergencies; because they have this facility, they assume this is
-true for others.  They can become bored rather quickly with both
-situations and people, and resist repeating experiences.
-
-They enjoy the process of creating something - an idea or a project
-- but are not as interested in the follow-through.  They are
-typically enthusiastic, and this is contagious.  People get caught
-up and entranced by an ENFP.  Yet this type is marked with a fierce
-independence, repudiating any kind of subordination, either in
-themselves or in others in relation to them.
-
-They do tend to attribute more power to authority figures than is
-there and give over to these figures an ability to "see through"
-them - which also is not apt to be there.
-
-While ENFPs resist the notion of others becoming dependent or
-having power over them, their charisma draws followers who wish to
-be shown the way.  ENFPs constantly find themselves surrounded by
-others who look toward the ENFP for wisdom, inspiration, courage,
-leadership, and so on - an expectancy which, at times, weighs
-rather heavily on an ENFP.
-
-ENFPs are characteristically optimistic and are surprised when
-people and events do not turn out as anticipated.  Often their
-confidence in the innate goodness of fate and human nature is a
-self-fulfilling prophecy.
-
-ENFPs have a remarkable latitude in career choices and succeed in
-many fields.  As workers, they are warmly enthusiastic, high
-spirited, ingenious, imaginative, and can do almost anything that
-interests them.  They can solve most problems, particularly those
-dealing with people.  They are charming and at ease with
-colleagues; others enjoy their presence.
-
-ENFPs are outstanding in getting people together, and are good at
-initiating meetings and conferences, although not as talented at
-providing for the operational details of these events.  They enjoy
-inventing new ways of doing things, and their projects tend to
-become a cause, quickly becoming personalized.
-
-They are imaginative themselves, but can have difficulty picking up
-on ideas and projects initiated by others.  They must make these
-ideas and projects their own if ENFPs are to lend energy and
-interest.  Once people or projects become routine, ENFPs are likely
-to lose interest; what 'might be' is always more fascinating than
-'what is.'
-
-ENFPs make extensive use of their intuitive powers.  They usually
-have a wide range of personal and telephone contacts, expending
-energy in maintaining both career and personal relationships.
-
-ENFPs make excellent salespeople, advertising people, politicians,
-screen or play writers, and in general are attracted to the
-interpretive arts, particularly, character acting.
-People-to-people work is essential for ENFPs, who need the feedback
-of interaction with others.
-
-ENFPs may find it difficult to work within the constraints of an
-institution, especially in following rules, regulations, and
-standard operating procedures.  More frequently, institutional
-procedures and policies are targets to be challenged and bent by
-the will of an ENFP.  Colleagues and superiors sometimes find
-themselves in the position of having to accommodate and salvage.
-
-At times, ENFPs demonstrate impatience with others; they may get
-into difficulty in an organization by siding with its detractors,
-who find in an ENFP a sympathetic ear and a natural rescuer.  In
-occupational choice, ENFPs quickly become restless if the choice
-involves painstaking detail and follow-through over a period of
-time.  Variety in day-to-day operations and interactions best suits
-the talents of ENFPs, who need quite a bit of latitude in which to
-exercise their adaptive ingenuity.
-
-As mates, ENFPs tend to be charming, gentle, sympathetic, and
-nonconformist.  They are not likely to be interested in the
-less-inspired routines of daily maintenance and ever will be
-seeking new outlets for their inspirations.
-
-As parents, ENFPs are devoted to their children, shifting from a
-role of "friend in need rescuer" to stern authority figure.  They
-may not always be willing to enforce their impulsive
-pronouncements, but leave it to their mates to follow through.
-
-A mate of an ENFP can expect charming surprises: extravagant
-generosity punctuated by periods of frugality.  Independent actions
-regarding money on the part of an ENFP's mate are not ordinarily
-welcomed, and the mate may find him or herself in an embarrassing
-situation of having to return purchases.
-
-ENFPs generally are the ones in charge of the home, and a
-conflict-free home is desired, almost demanded.  When he or she is
-in charge of economic resources, the ENFPs may contain extravagant
-luxuries, while necessities may be missing.  They are not always
-interested in saving for the future and may be casual in giving
-consideration to such things as life insurance, savings accounts,
-and even a ready cash supply for mate and children.
-
-ENFPs are characteristic in their pursuit of the novel, their
-strong sense of the possible, and outstanding intuitive powers.  At
-the same time, they have warmth and fun with people and generally
-are unusually skilled in handling people.  Their extroverted role
-tends to be well developed, as is their capacity for the novel and
-the dramatic.
diff --git a/xtrn/smm/mb-entj.asc b/xtrn/smm/mb-entj.asc
deleted file mode 100644
index a37af1d7e6..0000000000
--- a/xtrn/smm/mb-entj.asc
+++ /dev/null
@@ -1,105 +0,0 @@
-ENTJs in short:
-
-Hearty, frank, decisive, leaders in activities.  Usually good in
-anything that requires reasoning and intelligent talk, such as
-public speaking.  Are usually well-informed and enjoy adding to
-their fund of knowledge.  May sometimes be more positive and
-confident than their experience in an area warrants.
-
-About 5% of the population.
-
-Details about ENTJs:
-
-If one word were used to capture ENTJ's style, it would be
-commandant.  The basic driving force and need of ENTJs is to lead,
-and from an early age they can be observed taking over groups. This
-type is found in approximately 5 percent of the total population.
-
-ENTJs have a strong urge to give structure wherever they are - to
-harness people to distant goals.  Their empirical, objective, and
-extroverted thinking may be highly developed; if this is the case,
-they use classification, generalization, summarization, adduction
-of evidence, and demonstration with ease.
-
-They resemble ESTJs in their tendency to establish plans for a
-task, enterprise, or organization, but ENTJs search more for policy
-and goals than for regulations and procedures.
-
-An ENTJ's introverted thinking (analysis and conservation) may be
-less well developed than the extroverted thinking processes, and
-the ENTJ leader may turn to an ENTP or INTP to provide this kind of
-input.  ENTJs are similar to INTJs except that the former places
-greater trust in empirical thought than in intuition; it is the
-ENTJs own intuitive sense of coherence, however, that augments and
-supports their empirical thinking.
-
-Although ENTJs are tolerant of established procedures, they can
-abandon any procedure when it can be shown to be indifferent to the
-goal it seemingly serves.  Inefficiency is especially rejected by
-ENTJs, and repetition of error causes them to become impatient. For
-the ENTJ, there must always be a reason for doing anything, and
-people's feelings usually are not sufficient reason.
-
-When in charge of an organization, ENTJs more than any other type
-desire (and generally have the ability) to visualize where the
-organization is going and seem able to communicate that vision to
-others.  They are the natural organization builders, and they
-cannot not lead.  They find themselves in command and sometimes are
-mystified as to how this happened.
-
-As administrators, ENTJs organize their units into a smooth
-functioning system, planning in advance, keeping both short-term
-and long-range objectives well in mind.  They seek and can see
-efficiency and effectiveness in personnel.  They prefer decisions
-to be based on impersonal data, want to work from well-thought-out
-plans, and like to use engineered operations - and they prefer that
-others follow suit.  ENTJs will support the policy of the
-organization and will expect others to do so.
-
-ENTJs will usually rise to positions of responsibility and enjoy
-being executives.  They are tireless in their devotion to their
-jobs and can easily block out other areas of life for the sake of
-work.  They will be able to reduce inefficiency, ineffectiveness,
-and aimless confusion, being willing to dismiss employees who
-perpetuate such behaviors.
-
-ENTJs tend to work in organizational structures of some sort, tend
-to be in charge administratively, and rise to top levels of
-responsibility, whether in the military, business, education, or
-government.
-
-ENTJs take charge of the home.  When the ENTJ is present, there
-will be little doubt as to who is in command.  Because their work
-is so important to them, however, they can become increasingly
-absent, especially if male.
-
-Male or female, ENTJs expect a great deal of their mates, who need
-to possess a strong personality of their own, a well-developed
-autonomy, many and varied interests, and a healthy self-esteem.  A
-career wife, however, may not be appealing to an ENTJ male, who is
-apt to view his home and family as a part of his professional
-background, a resource, and adjunct to his own career development.
-
-As a parent, an ENTJ will be thoroughly in charge, and the children
-will know what is expected of them - and will be expected to obey.
-When this does not occur, an ENTJ parent is not apt to make a
-scene; rather, there is likely to be a low-key, firm issuance of
-reprimand and a taking-for-granted of immediate obedience.
-
-While both mating and parenting are roles of importance to the
-ENTJ, they are to some degree preempted by the ENTJ's strong career
-interest.  The romantic dream and the quest for the ideal mate is
-usually not a characteristic of this type.
-
-ENTJs generally do, however, expect a home to be attractive,
-well-ordered, with meals served punctually and maintenance
-accomplished on schedule - all these in the service of the larger
-goal of creating a family system where children can be reared to be
-productive and healthy and establishing a devoted, harmonious
-relationship between man and woman.
-
-An ENTJ male might expect his mate to be active in civic and
-community affairs, to be socially sophisticated, and to be as
-well-educated as he.  The ENTJ female may find it difficult to
-select a mate who is not overwhelmed by her strong personality and
-will.
diff --git a/xtrn/smm/mb-entp.asc b/xtrn/smm/mb-entp.asc
deleted file mode 100644
index 4817854f1d..0000000000
--- a/xtrn/smm/mb-entp.asc
+++ /dev/null
@@ -1,145 +0,0 @@
-ENTPs in short:
-
-Quick, ingenious, good at many things.  Stimulating company, alert
-and outspoken.  May argue for fun on either side of a question.
-Resourceful in solving new and challenging problems, but may
-neglect routine assignments.  Apt to turn to one new interest after
-another.  Skillful in finding logical reasons for what they want.
-
-About 5% of the population.
-
-Details about ENTPs:
-
-ENTPs wish to exercise their ingenuity in the world of people and
-things.  Found in about five out of every hundred people, ENTPs
-extrovert intuition; thus they deal imaginatively with social
-relationships as well as physical and mechanical relations.  They
-are very alert to what is apt to occur next, and always sensitive
-to possibilities.
-
-ENTPs are good at analysis, especially functional analysis, and
-have both a tolerance for and enjoyment of the complex.  Usually
-enthusiastic, ENTPs are apt to express interest in everything, and
-thus are a source of inspiration to others, who find themselves
-caught up by the ENTP's enthusiasm.  This type is delighted over
-many things and so is easy to please, often showing the
-effervescence of their NF counterpart, the ENFP.
-
-The ENTP is the most reluctant of all the types to do things in a
-particular manner just because that is the way things have always
-been done.  They characteristically have an eye for a better way,
-always on the lookout for new projects, new activities, new
-procedures.
-
-ENTPs are confident in the value of their pursuits and display a
-charming capacity to ignore the standard, the traditional, and the
-authoritative.  As a result of this open attitude, they often bring
-a fresh, new approach to their work and their lives.  The ENTP is a
-keen judge of the pragmatics of both the social and the mechanical,
-and may become expert at directing relationships between means and
-ends.
-
-Where the introverted NTP sees design as an end in itself, the
-extroverted NTP sees design as a 'means'; the end is the invention
-that works, the prototype that is replicatable.  Ideas are valuable
-when and only when they make possible actions and objects.  "It
-can't be done" is a challenge to an ENFP and elicits a reaction of
-"I can do it."
-
-They are not, however, the movers of mountains as are the INTJs.
-Rather, the faith of the ENTPs is in their ability to improvise
-something, and they display an unusual talent for rising to the
-expectancy of a situation.
-
-Superficially, ENTPs resemble ESTPs in their derring-do.  But the
-focus of the ENTP is on competency and the sense of power this
-gives, rather than on the feeling of freedom of action experienced
-by the ESTP.
-
-ENTPs can be fascinating conversationalists, able as they are to
-follow the complex verbalizations of others.  They may deliberately
-employ debate tactics to the disadvantage of their opponents, even
-when the "opponents" are close associates and valued friends.
-
-ENTPs are the most able of all types to maintain a one-up position
-with others.  They value adaptability and innovation and thus
-respond quickly and adeptly to another's shifting position.  They
-may even be several jumps ahead.
-
-The ENTP, talkative and motivating, is often the life of an
-enterprise.  The ENTP can be an entrepreneur and cleverly makes do
-with whatever or whoever is at hand, counting on ingenuity to solve
-problems as they arise, rather than carefully generating a detailed
-blueprint in advance.  A rough draft is all an ENTP needs to feel
-confident and ready to proceed into action, counting on the ability
-to improvise as a situation develops.
-
-Because of this tendency to depend on ingenuity and improvisation,
-they may neglect very necessary preparation at times.  After
-repeated failures in situations where improvising has met with
-defeat, the ENTP may develop ways of avoiding such situations as a
-substitute to thorough preparation.
-
-ENTPs can succeed in a variety of occupations, as long as the job
-does not involve too much humdrum routine.  At this point, they
-become restless.  If a project in which they are engaged is no
-longer challenging, they tend to lose interest in that project and
-fail to follow through - often to the discomfort of colleagues.
-
-Seldom are ENTPs conformists.  ENTPs enjoy outwitting the system
-and use rules and regulations within the system to win the game -
-whatever it may be.  They understand well the politics of
-institutions and deal with these realities very well, always aiming
-to understand the people within the system rather than to judge
-them.
-
-ENTPs are good at innovative projects and can administer them well
-if dull routine is not involved.  They usually are outstanding
-teachers, continuously devising new participative ways to make
-learning exciting for the students.
-
-As an employee, an ENTP may work against the system just for the
-joy of being one-up.  For ENTPs, to be taken-in, to be manipulated
-by another, is humiliating; this offends their joy in being masters
-of the art of one-upmanship.
-
-ENTPs are the natural engineers of human relationships and human
-systems.  Their good humor and optimistic outlook tend to be
-contagious, and people seek out their company.
-
-As mates, ENTPs tend to create a lively living environment.  They
-are gregarious, laugh easily and often, and are typically in good
-humor.
-
-Orderliness in the routines of daily living is not apt to inspire
-them; they usually solve this problem by mobilizing those around
-them.  Tom Sawyer illustrated this talent when he solved the
-problem of getting his Aunt Polly's fence whitewashed.  Life with
-ENTPs is likely to be a daring adventure; they can lead families
-into physical and economic dangers.  ENTPs improvise to remain
-unaware that they do not have the necessary knowledge of the
-situation to ward off such dangers.
-
-If the mate of an ENTP is not competitive, he or she is likely to
-find the one-up/one-down transactions somewhat wearing.  If the
-mate is competitive, the result might be conflict.
-
-Although usually good providers of economic necessities, ENTPs at
-times engage in brinkmanship with their careers, placing them in
-jeopardy and behaving as if unaware of the consequences; they may
-thus offer unnecessary challenges to those who have power over
-their professional success.  When challenges elicit negative
-responses from superiors, ENTPs are apt to react with delight at
-having an opportunity to improvise a solution to the crisis - and,
-more often than not, they succeed in doing so.
-
-ENTPs are likely to have all sorts of hobbies and to be experts in
-unexpected areas, but they are not apt to share these hobbies with
-their mates or children in the sense of teaching them.  In fact,
-ENTPs may be very inconsistent in the attention given to offspring.
-
-Usually, it is feast or famine.  ENTPs have a lively circle of
-friends and are interested in their ideas and activities.  They are
-usually easygoing, seldom critical or nagging.  At their worst,
-they can show undependable, fickle characteristics and may be
-easily discouraged.
diff --git a/xtrn/smm/mb-esfj.asc b/xtrn/smm/mb-esfj.asc
deleted file mode 100644
index c3801a37f6..0000000000
--- a/xtrn/smm/mb-esfj.asc
+++ /dev/null
@@ -1,118 +0,0 @@
-ESFJs in short:
-
-Warmhearted, talkative, popular, conscientious, born cooperators,
-active committee members.  Need harmony and may be good at creating
-it.  Always doing something nice for someone.  Work best with
-encouragement and praise.  Little interest in abstract thinking or
-technical subjects.  Main interest is in things that directly and
-visibly affect people's lives.
-
-About 13% of the population.
-
-Details about ESFJs:
-
-ESFJs, the most sociable of all the types, are energized by
-interactions with people, tending to idealize whatever or whoever
-they admire.  'Harmony' is a key to this type, which is represented
-in about 13 percent of the general population.
-
-ESFJs are the great nurturers of established institutions such as
-the home, the school, the church, and civic groups.  Wherever they
-go, they promote harmony and harmonious relationships.  They are
-outstanding hosts or hostesses, able to call people by name,
-usually after one introduction.  At a social gathering they can be
-observed attending to the needs of others, trying to insure that
-all are comfortable and involved.
-
-Social ties matter to the ESFJs, and their conversations often
-drift to the nostalgic recounting of past memories.  Traditions are
-developed, supported, and carefully observed by the ESFJ.
-
-ESFJs are hurt by indifference and need to be appreciated both for
-themselves and for the abundance, typically in the form of
-services, they give to others.  They are conscious of appearances
-and take the opinions of others regarding social standards very
-seriously.  Values in an ESFJ may take the form of 'shoulds' and
-'should nots' and may be freely expressed.  Conscientious and
-orderly, ESFJs may become restless when isolated from people.
-
-Career selection by ESFJs may lean toward service occupations.
-They have such outgoing personalities that they are outstanding at
-selling, being an invariable winner in sales contests.  They are
-apt to have seniority in any sales group within an organization.
-Observation of ESFJs at work in a sales transaction will
-demonstrate how this type personalizes the sale: The customer is
-not buying the product; he or she is buying personally from the
-ESFJ.
-
-This same characteristic causes ESFJs to be good in teaching,
-preaching, supervision, administration, coaching, and, in general,
-people-to-people jobs.  They seldom become a source of irritation
-to their superiors, for they respect and obey the rules and
-regulations, are duty and service oriented.  They are loyal to
-their bosses.
-
-ESFJs are likely to be aware of and enjoy discussing events and
-problems in the lives of their colleagues; but when conversations
-turn to abstractions of philosophy or science, the ESFJ may become
-restive.  Analysis of the complex - for example, an attempt to find
-an explanation of events through an analysis of principles - does
-not excite their interest, as it does the NTs.
-
-ESFJ mates have a set of values which contain clear 'shoulds' and
-'should-nots', and they expect their family to abide by these.
-They are conscientious about home responsibilities, are orderly
-about the home, and prefer that other occupants be the same.  They
-enjoy socializing and entertaining.
-
-ESFJs want family decisions settled efficiently and quickly and
-want family living routinized, scheduled, and correctly executed.
-They do not rebel against routine operations, and are devoted to
-the traditional values of home and hearth, respect their marriage
-vows, and are the most sympathetic of all types.
-
-They tend to be dependent on their mates and may marry to insure
-that they have a proper place in the social strata.  They enjoy the
-rituals in connected with serving of good food and beverages,
-thrive on festive occasions, respect and accumulate a goodly store
-of material possessions.  They take their role in the community
-seriously and are sensitive to the acknowledged, official
-decision-makers and identify with them.  They are aware of status,
-and often depend on higher authority as the source of opinions and
-attitudes.
-
-ESFJs wear their hearts on their sleeves and are outgoing in their
-emotional reactions.  They need to be needed, loved, and
-appreciated and may spend much energy reassuring themselves that
-this is the case.  They can become melancholy and depressed and
-even suicidal if they take the blame for whatever might be wrong in
-their institution or their personal relationships - as they are
-prone to do.
-
-ESFJs usually respect and revere their parents, and as children
-were responsive and obedient pupils.  They seem able to express the
-right feeling for a given situation.
-
-They are softhearted, sentimental, and usually observe with gusto
-and a flourish birthdays, anniversaries, and the like, making of
-the event a delightful, important occasion.  At the same time,
-however, ESFJs can cause others undue tension by expressing
-anticipations of gloom and doom, exhibiting a bent toward the
-pessimistic that can be contagious.  They need to control their
-fears that the worst is sure to happen and suppress their tendency
-toward crepe-hanging and anticipating disasters.
-
-The children of an ESFJ are seen as an extension of the family, and
-all they do reflects on the ESFJ.  If things do not go well, the
-SFJ may be critical, even carping toward his or her mate and
-children.
-
-This type may marry alcoholics or others who are particularly
-needy.  If a female ESFJ is married to a mate who is not a good
-provider, she can become nagging and brood over a comparison of her
-possessions and status with that of others.
-
-ESFJs, male or female, live in terms of people and things rather
-than in terms of ideas and principles.  They enjoy the process of
-decision-making, particularly when focus is on the 'usefulness' of
-things and people.
diff --git a/xtrn/smm/mb-esfp.asc b/xtrn/smm/mb-esfp.asc
deleted file mode 100644
index 633ade2c9b..0000000000
--- a/xtrn/smm/mb-esfp.asc
+++ /dev/null
@@ -1,89 +0,0 @@
-ESFPs in short:
-
-Outgoing, easygoing, accepting, friendly, enjoy everything and make
-things more fun others by their enjoyment.  Like sports and making
-things.  Know what's going and join in eagerly.  Find remembering
-facts easier than mastering theories.  Are best in situations that
-need sound common sense and practical ability with people as well
-as with things.
-
-About 13% of the population.
-
-Details about ESFPs:
-
-ESFPs radiate attractive warmth and optimism.  Smooth, witty,
-charming, clever, voluble, and open to the environment - this
-describes ESFPs who, like ESTPs, represent about 13 percent of the
-general population.  They are great fun to be with and are the most
-generous of all the types.  'Performer' would be the word which
-best describes an ESFP.
-
-ESFPs will avoid being alone and seek the company of others
-whenever possible.  ESFPs easily find company, for others are
-usually highly entertained by the presence of an ESFP.  ESFPs love
-excitement and create it wherever they are.  Their joy of living is
-contagious and generally they wear happy faces.  Often outstanding
-conversationalists, their flowing banter is amusing in its wit.
-
-ESFPs have an air of sophistication and are likely to be dressed in
-the latest fashion, displaying an enjoyment of all the good things
-of life: dress, food, physical comfort, and happy times.  ESFPs
-create a mood of "eat, drink, and be merry" wherever they go, and
-around them life can have a continual party-like atmosphere of
-gaiety.
-
-ESFPs make exciting, if somewhat unpredictable mates, which may
-give quieter type mates some anxiety and tension from living on the
-edge of adventure.  The home of an ESFP is likely to be filled with
-people all having a good time.  Problems will not be allowed to
-make their appearance.  The ESFP accomplishes this by taking an
-attitude of "walking by the graveyard whistling," refusing to
-recognize doom and gloom.
-
-ESFPs can be generous to a fault.  What is theirs is yours, and
-what is yours is yours still.  They give assistance to one and all
-without expectation of a return, just as they love freely without
-expecting something in return.  ESFPs seem to view life as an
-eternal cornucopia from which flows an endless supply of pleasures
-that require no effort on their part to insure.
-
-ESFPs' talent for enjoying life can make them more subject to
-temptations than are other types.  They are inclined to be
-impulsive, and thus both male and female ESFPs are vulnerable to
-psychological seduction, if not physical seduction, with an ESFP
-giving in easily and agreeably to the demands of others.  As a
-parent, the ESFP will be entertaining, a friend, and a source of
-fun and excitement.  When there is sickness, or trouble, however,
-ESFPs may become impatient and may want to absent themselves.
-
-ESFPs' tolerance for anxiety is the lowest of all types.  Anxiety
-is avoided by ignoring the dark side of a situation as long as
-possible.  They are inclined to be somewhat self-indulgent, but,
-rather than make an outward show of resistance or make waves, ESFPs
-will give apparent compliance - and then go their own way to what
-they enjoy.
-
-ESFPs prefer active jobs and should not be given lonely, solitary
-assignments.  Outstanding in public relations, they love working
-with people.  Decisions are made with personal warmth, based on
-personal reference or reference to significant others.  This type
-relies on their personal experiences and generally show good common
-sense.
-
-The gregarious sociability and adaptability of ESFPs make them a
-source of warmth to others.  They do not mind telephone or personal
-interruptions and are verbally facile in both situations.  They can
-be counted on to have accurate data about the people around them,
-gaining these data through effortless and continuous observations.
-
-ESFPs are not deeply interested in scholastic pursuits, wanting
-knowledge only for immediate utility.  They avoid science and
-engineering, gravitate toward business, and are adept at selling,
-particularly selling tangibles.
-
-They can be effective in education, especially elementary school
-teaching, and can enjoy nursing for its drama.  They are good at
-working with people in crisis, a facility, which often leads ESFPs
-into social work.  They also enjoy entertaining people and are thus
-drawn to the performing arts, thriving on the excitement of being
-in the limelight.
diff --git a/xtrn/smm/mb-estj.asc b/xtrn/smm/mb-estj.asc
deleted file mode 100644
index a58f235e23..0000000000
--- a/xtrn/smm/mb-estj.asc
+++ /dev/null
@@ -1,70 +0,0 @@
-ESTJs in short:
-
-Practical, realistic, matter-of-fact, with a natural head for
-business or mechanics.  Not interested in subjects they see no use
-for, but can apply themselves when necessary.  Like to organize and
-run activities.  May make good administrators, especially if they
-remember to consider others' feelings and points of view.
-
-About 13% of the population.
-
-Details about ESTJs:
-
-ESTJs are very much in touch with the external environment.  They
-know their community and usually are pillars of strength.  The best
-adjective to describe ESTJs would be 'responsible.'  They represent
-about 13 percent of the general population.
-
-ESTJs are outstanding at organizing procedures and in detailing
-rules and regulations.  They like to see things done correctly.
-They tend to be impatient with those who do not carry out
-procedures with sufficient attention to those details, prescribed
-by those with the most experience, that will get the job done
-right.
-
-ESTJs are comfortable in evaluating others and tend to judge how a
-person is doing in terms of standard operating procedures.  They
-may, at times, be abrupt with those who do not follow the rules
-correctly.  ESTJs are realistic, matter-of-fact, and more curious
-about new devices and processes than about new principles and
-theories.
-
-ESTJs generally are loyal to their institutions, work, and
-community and make excellent, faithful mates and parents.  They see
-where their duty lies and are not likely to shirk the doing of that
-duty, even when this requires considerable sacrifice on their part.
-
-They frequently rise to positions of responsibility in their jobs,
-in the community, and in their religious affiliations.  They very
-often belong to several civic clubs and support them both through
-steady attendance and through their spoken attitudes.  ESTJs
-themselves are punctual and expect others to be also.
-
-ESTJs may not always be responsive to points of view and emotions
-of others and may have a tendency to jump to conclusions too
-quickly at times.  They may not always be willing to listen
-patiently to opposing views; they are especially vulnerable to this
-tendency when in positions of authority.  They may need to make
-special effort to remain open to input from others who are
-dependent on them - their children, spouses, and employees.
-
-ESTJs are so in tune with the established, time-honored
-institutions and ways of behaving within those institutions that
-they cannot understand those who might wish to abandon or radically
-change those institutions.  They follow routines well at home and
-at work, tending to have a place for everything and wanting
-everything in its place.  They are usually neat and orderly at work
-and at play.
-
-They approach human relations through traditions and rituals,
-promoting harmony and contentment in their relationships through
-creating well-worked-out routines and procedures.  Family
-traditions have meaning for ESTJs, and they willingly participate
-in observing these.  They enjoy opportunities to see friends,
-former colleagues, and relatives at functions such as retirement
-dinners, annual picnics, Thanksgiving gatherings, and weddings.
-
-ESTJs are relatively easy to get to know; they do not tend to
-confuse people by sending double messages.  They are dependable and
-consistent, and what they seem to be is what they are.
-
diff --git a/xtrn/smm/mb-estp.asc b/xtrn/smm/mb-estp.asc
deleted file mode 100644
index e8c8c956fe..0000000000
--- a/xtrn/smm/mb-estp.asc
+++ /dev/null
@@ -1,119 +0,0 @@
-ESTPs in short:
-
-Matter-of-fact, do not worry or hurry, enjoy whatever comes along.
-Tend to like mechanical things and sports, with friends on the
-side.  May be a bit blunt or insensitive.  Adaptable, tolerant,
-generally conservative in values.  Dislike long explanations.  Are
-best with real things that can be worked, handled, taken apart or
-put together.
-
-About 13% of the population.
-
-Details about ESTPs:
-
-ESTPs are men and women of action.  When someone of this
-personality is present, things begin to happen.  The lights come
-on, the music plays, the game begins.  And a game it is for the
-ESTP, The outstanding entrepreneur, the international diplomat, the
-conciliator, and the negotiator 'par excellence.'
-
-Approximately 13 percent of the general population are of this
-extroverted, sensing, thinking, perceiving type, and if only one
-adjective could be used to describe ESTPs 'resourceful' would be an
-apt choice.
-
-Life is never dull around ESTPs.  Their attractive, friendly style
-has a theatrical flourish which makes even the most routine,
-mundane event seem exciting.  ESTPs usually know the location of
-the best restaurants, and headwaiters are likely to call them by
-name.  ESTPs are socially sophisticated, suave, and urbane and are
-master manipulators of the external environment.
-
-ESTPs are uncanny at observing people's motivations, somehow
-hypersensitive to minimal nonverbal cues which other types might
-miss.  And they are masters at using these observations to "sell"
-the "client."  The eye of the ESTP is ever on the eye of the
-beholder, and all actions are directed toward this audience.
-
-Witty, clever, and fun, ESTPs seem to possess an unusual amount of
-empathy, when in fact this is not the case; rather, they are so
-acutely aware of minimal signals from others that they are usually
-several jumps ahead in anticipation of another's position.  And
-ESTPs can use information gained to the ends they have in mind -
-apparently with nerves of steel, engaging in what seems to others
-to be suicidal brinkmanship.  Other types may find this exhausting,
-but ESTPs are exhilarated by working close to the edge of disaster.
-
-ESTPs are ruthless pragmatists and often offer the ends as
-justification for whatever means they see as necessary -
-regrettable, perhaps, but necessary.  Usually, however, ESTPs do
-not care to justify actions, but prefer instead to get on to the
-next action.
-
-ESTPs are outstanding as initiators of enterprises that bring
-people together to negotiate.  They make invaluable itinerant
-administrators who can pull troubled companies or institutions out
-of the red very quickly, and with style!
-
-They can sell an idea or project in a way no other type can, but
-won't follow through on the tedious administrative details of a
-project.  This characteristic often causes ESTPs to be
-unappreciated for the extraordinary talents they have, for people
-lose sight of the idea contributed and focus on the details left
-undone, becoming critical of ESTPs' weaknesses rather than
-appreciating their strength.
-
-Few enterprises which are institutionally based use ESTPs as they
-should be used.  When they strike out on their own, however, they
-do not always succeed, for their unwillingness to bother with
-follow-up details may cause an otherwise excellent project to fail.
-ESTPs need to be sure they have someone who will take care of
-follow-up if at all possible.
-
-If the promotional, entrepreneurial capabilities of ESTPs are used
-to constructive ends, an institution is fortunate for their
-presence.
-
-If their desire for excitement is not met constructively, however,
-these energies may be channeled into destructive, antisocial
-activities such as those of the confidence rackets -
-counterfeiting, bad-check artistry, safe-cracking, and swindling. A
-movie of the early 1970's which caught this use of the ESTP's
-talent was The Sting.
-
-ESTPs live in the immediate moment and as mates lend excitement -
-and unpredictability - to the relationship.  The ESTP mate is
-usually extremely attentive in public and smooth in social rituals.
-They carry on amusing repartee, and laughter surrounds them as they
-recount from their endless supply of clever jokes and stories.
-
-Charm radiates from ESTPs.  Nothing is too good for their friends,
-although family responsibilities may, at times, be given second
-priority.  The ESTP's mate may in time come to feel like an object
-- the female a chattel and the male a negotiable commodity.  Deep
-commitments do not always occur in the lives of ESTPs, although
-they are always popular and know many, many people by name.
-
-Relationships usually are conditional, and the condition is the
-consideration of what the ESTP has to gain  from the relationship.
-Anything gained, however, is shared freely and generously with the
-mate.  The unexpected gift, the impulsive trip to Paris, the
-extravagant surprise at Christmas - all these an ESTP brings to a
-mate.  Fun, excitement, laughter, and that element of
-unpredictability are characteristic of their relationship.
-
-The ESTPs have a low tolerance for anxiety and are apt to avoid or
-leave situations that are consistently filled with interpersonal
-tensions.  ESTPs are usually somewhat of a mystery to their mates
-and to others.  Few people comprehend this unique personality.
-
-ESTPs themselves understand well the maxim, "He who travels
-fastest, travels alone."  Still, ESTPs are not likely to be lonely
-for long.
-
-ESTPs meet life with a hearty appetite for the good things of the
-world, searching out excitement, perhaps as a warrior, an athlete,
-an adventurer, or as a professional gambler, but always seeking the
-thrill of courting Lady Luck in one fashion or another.  A theme of
-seeking excitement through taking of risks runs through the lives
-of ESTPs.
diff --git a/xtrn/smm/mb-f.asc b/xtrn/smm/mb-f.asc
deleted file mode 100644
index 49cec2c046..0000000000
--- a/xtrn/smm/mb-f.asc
+++ /dev/null
@@ -1,7 +0,0 @@
-The Feeler tends toward subjective & social values, personal feelings, 
-harmony, intimacy, sympathy and devotion. The F overextends himself to meet
-others needs, enjoys serving people, tends to retract statements that offend
-others, asks himself 'how will this affect the people involved'.
-The feeler feels the thinker has ice in his veins.
-The population is equally divided between Ts and Fs, although more men tend
-to be Thinkers & more women tend to be Feelers.
diff --git a/xtrn/smm/mb-fp.asc b/xtrn/smm/mb-fp.asc
deleted file mode 100644
index cdc07cb81e..0000000000
--- a/xtrn/smm/mb-fp.asc
+++ /dev/null
@@ -1 +0,0 @@
-You should never have a party without an FP.
diff --git a/xtrn/smm/mb-i.asc b/xtrn/smm/mb-i.asc
deleted file mode 100644
index 8ff52b2d3e..0000000000
--- a/xtrn/smm/mb-i.asc
+++ /dev/null
@@ -1,9 +0,0 @@
-An Introvert gets his energy from inside himself and needs his own space for 
-recharging his batteries. An Introvert is drained by being around people.
-I is perceived as a good listener, tends to be shy, likes to share occasions
-with a few close friends, doesn't like interruptions, is suspicious if people 
-are too complimentary, gets irritated if people repeat what has already been
-said. 'I' tends to consider - then speak, An 'I' is reluctant to reveal himself
-and may resist taking this test for fear of being exposed, but can complete 
-the test in a short time without carefully considering & weighing each 
-question. About 25% of the population are type I.
diff --git a/xtrn/smm/mb-infj.asc b/xtrn/smm/mb-infj.asc
deleted file mode 100644
index 73e1893f97..0000000000
--- a/xtrn/smm/mb-infj.asc
+++ /dev/null
@@ -1,144 +0,0 @@
-INFJs in short:
-
-Succeed by perseverance, originality and desire to do whatever is
-needed or wanted.  Put their best efforts into their work.  Quietly
-forceful, conscientious, concerned for others.  Respected for their
-firm principles.  Likely to be honored and followed for their clear
-convictions as to how best to serve the common good.
-
-About 1% of the population.
-
-Details about INFJs:
-
-INFJs focus on possibilities, think in terms of values, and come
-easily to decisions.  The small number of this type (1 percent) is
-regrettable, since INFJs have an unusually strong drive to
-contribute to the welfare of others and genuinely enjoy helping
-their fellow men.  This type has great depth of personality; they
-are themselves complicated, and can understand and deal with
-complex issues and people.
-
-It is an INFJ who is likely to have visions of human events past,
-present, or future.  If a person demonstrates an ability to
-understand psychic phenomenon better than most others, this person
-is likely to be an INFJ.
-
-Characteristically, INFJs have strong empathetic abilities and can
-be aware of another's emotions or intents even before that person
-is conscious of these.  This can take the form of feeling the
-distress or illnesses of others to an extent which is difficult for
-other types.  INFJs can intuit good and evil in others, although
-they seldom can tell how they came to know.  Subsequent events tend
-to bear them out, however.
-
-INFJs are usually good students, achievers who exhibit an
-unostentatious creativity.  They take their work seriously and
-enjoy academic activity.  They can exhibit qualities of
-over-perfectionism and put more into a task than perhaps is
-justified by the nature of the task.  They generally will not be
-visible leaders, but will quietly exert influence behind the
-scenes.
-
-INFJs are hard to get to know.  They have an unusually rich inner
-life, but they are reserved and tend not to share their reactions
-with those they trust.  Because of their vulnerability through a
-strong facility to interject, INFJs can be hurt rather easily by
-others, which, perhaps, is at least one reason they tend to be
-private people.  People who have known an INFJ for years may find
-sides emerging which come as a surprise.  Not that INFJs are
-inconsistent; they are very consistent and value integrity.  But
-they have convoluted, complex personalities which sometimes puzzle
-even them.
-
-INFJs like to please others and tend to contribute their best
-efforts in all situations.  They prefer and enjoy agreeing with
-others, and find conflict disagreeable and destructive.  What is
-known as ESP is likely found in an INFJ.
-
-INFJs have vivid imaginations exercised both as memory and
-intuition, and this can amount to genius, resulting at times in an
-INFJs being seen as mystical.  This unfettered imagination often
-will enable this person to compose complex and often aesthetic
-works of arts such as music, mathematical systems, poems, plays,
-and novels.  In a sense the INFJ is the most poetic of all the
-types.  INFJs can have uncanny communications with certain
-individuals at a distance.
-
-INFJs often select liberal arts as a college major and opt for
-occupations which involve interacting with people, but on a
-one-to-one basis.  For example, the general practitioner in
-medicine might be an INFJ, or the psychiatrist or psychologist.  As
-with all NFs, the ministry holds attraction, although the INFJ must
-develop an extroverted role here which requires a great deal of
-energy.
-
-INFJs may be attracted to writing as a profession, and often they
-use language which contains an unusual degree of imagery.  They are
-masters of the metaphor, and both their verbal and written
-communications tend to be elegant and complex.  Their great talent
-for language usually is directed toward people, describing people
-and writing to communicate with people in a personalized way. INFJs
-who write comment often that they write with a particular person in
-mind; writing to a faceless abstract audience leaves them
-uninspired.
-
-INFJs make outstanding individual therapists who have the ability
-to get in touch with the archetypes of their patients in a way some
-other types do not.  The INFJs are also the most vulnerable of all
-types to the eruptions of their own archetypal material.  As
-therapists, INFJs may choose counseling, clinical psychology, or
-psychiatry, or may choose to teach in these fields.  Writing about
-these professions often intrigues an INFJ.
-
-Whatever their choice, they generally are successful in these
-fields because of their great personal warmth, their enthusiasm,
-their insight, their depth of concentration, their originality, and
-their organizational skills can all be brought into play.
-
-At work as well as socially, INFJs are highly sensitive in their
-handling of others and tend to work well in an organizational
-structure.  They have a capacity for working at jobs which require
-solitude and concentration, but also do well when in contact with
-people, providing the human interaction is not superficial.
-
-INFJs enjoy problem-solving and can understand and use human
-systems creatively and humanistically.  As employees and employers,
-INFJs are concerned with people's feelings and are able to provide
-in themselves a barometer of the feelings of individuals and groups
-within the organization.  INFJs listen well and are  willing and
-able to consult and cooperate with others.  Once a decision is
-made, they work to implement it.
-
-INFJs are usually good at public relations and themselves have good
-interpersonal relations.  They value staff harmony and want an
-organization to run smoothly and pleasantly, themselves making
-every effort to contribute to that end.
-
-They are crushed by too much criticism and can have their feelings
-hurt rather easily.  They respond to praise and use approval as a
-means of motivating others, just as they, the INFJs, are motivated
-by approval.  If they are subject to a hostile, unfriendly working
-condition or to constant criticism, they tend to lose confidence,
-become unhappy and immobilized, and finally become physically ill.
-
-As mates INFJs are devoted to their spouses, but may not always be
-open to physical approaches.  They tend to be physically
-demonstrative at times, but wish to choose when, which is when they
-are in the mood.  This may be quite confusing to an extroverted
-mate.
-
-Often an INFJs expressions of affection will be subtle, taking a
-humorous, unexpected turn.  INFJs need and want harmony in their
-home and find constant conflict, overt or covert, extremely
-destructive to their psyches.  Their friendship circle is likely to
-be small, deep, and longstanding.
-
-As parents, INFJs usually are fiercely devoted.  A female INFJ,
-particularly, is linked to her children in a way different from the
-other types: with almost a psychic symbiosis.  This deep bond can
-create an overdependency that can be unhealthy for both mother and
-child.  At the same time, INFJs tend to be good friends with their
-children, while firm in discipline.  They usually are concerned
-about the comfort of a home and most especially the comfort,
-physical health, and emotional well-being of both mates and
-children.
diff --git a/xtrn/smm/mb-infp.asc b/xtrn/smm/mb-infp.asc
deleted file mode 100644
index f99ff2b82f..0000000000
--- a/xtrn/smm/mb-infp.asc
+++ /dev/null
@@ -1,118 +0,0 @@
-INFPs in short:
-
-Full of enthusiasms and loyalties, but seldom talk of these until
-they know you well.  Care about learning, ideas, language, and
-independent projects of their own.  Tend to undertake too much,
-then somehow get it done.  Friendly, but often too absorbed in what
-they are doing to be sociable.  Little concerned with possessions
-or physical surroundings.
-
-About 1% of the population.
-
-Details about INFPs:
-
-INFPs present a calm, pleasant face to the world and are seen as
-reticent and even shy.  Although they demonstrate a cool reserve
-toward others, inside they are anything but distant.  They have a
-capacity for caring which is not always found in other types.  They
-care deeply - indeed passionately - about a few special persons or
-cause.  One word that captures this type is 'idealistic'.  At
-times, this characteristic leaves them feeling isolated, especially
-since INFPs are found in only 1 percent of the general population.
-
-INFPs have a profound sense of honor derived from internal values.
-The INFP is the Prince or Princess of mythology, the King's
-champion, Defender of the Faith, and guardian of the castle.  Sir
-Galahad and Joan of Arc are male and female prototypes of an INFP.
-To understand INFPs their cause must be understood, for they are
-willing to make unusual sacrifices for someone or something
-believed in.
-
-INFPs seek unity in their lives, unity of body and mind, emotions
-and intellect.  They often have a subtle tragic motif running
-through their lives, but others seldom detect this inner minor key.
-The deep commitment of INFPs to the positive and the good causes
-them to be alert to the negative and the evil, which can take the
-form of a fascination with the profane.  Thus INFPs may live a
-paradox, drawn toward purity and unity but looking over the
-shoulder toward the sullied and desecrated.  When INFPs believe
-that they have yielded to an impure temptation, they may be given
-to acts of self-sacrifice in atonement.  The atonement, however, is
-within the INFP, who does not feel compelled to make public the
-issue.
-
-INFPs prefer the valuing process over the purely logical.  They
-respond to the beautiful versus the ugly, the good versus the bad,
-and the moral versus the immoral.  Impressions are gained in a
-fluid, global, diffused way.  Metaphors and similes come naturally
-but may be strained.
-
-INFPs have a gift of interpreting symbols, as well as creating
-them, and thus often write in lyric fashion.  They may demonstrate
-a tendency to take deliberate liberties with logic.  Unlike the NT,
-they see logic as something optional.
-
-INFPs also may, at times, assume an unwarranted familiarity with a
-domain, because their global, impressionistic way of dealing with
-reality may have failed to register a sufficient number of details
-for mastery.  INFPs may have difficulty thinking in terms of a
-conditional framework; they see things as either real or fancied,
-and are impatient with the hypothetical.
-
-At work, INFPs are adaptable, welcome new ideas and new
-information, are well aware of people and their feelings, and
-relate well to most, albeit with some psychological distance.
-INFPs dislike telephone interruptions and work well alone, as well
-as with others.  They are patient with complicated situations, but
-impatient with routine details.  They can make errors of fact, but
-seldom of values.  Their career choices may be toward the ministry,
-missionary work, college teaching, psychiatry, architecture,
-psychology - and away from business.
-
-They seem willing and usually are able to apply themselves
-scholastically to gain the necessary training for professional
-work, often doing better in college than in high school.  They have
-a natural interest in scholarly activities and demonstrate, as do
-other NFs, a remarkable facility for languages.  Often they hear a
-calling to go forth into the world to help others; they seem
-willing to make the necessary personal sacrifices involved in
-responding to that call, even if it means asking others to do
-likewise.
-
-INFPs can make outstanding novelists and character actors, for they
-able to efface their own personalities in their portrayal of a
-character in a way other types cannot.
-
-As mates, INFPs have a deep commitment to their pledges.  They like
-to live in harmony and may go to great lengths to avoid constant
-conflict.  They are sensitive to the feelings of others and enjoy
-pleasing those they care for.  They may find it difficult to
-reconcile a romantic, idealized concept of conjugal life with the
-realities of everyday living with another person.
-
-At times, INFPs may seem fearful of exuberant attainment, afraid
-that current advances may have to be paid for with later
-sacrifices.  The devil is sure to get his due if the INFP
-experiences too freely of success, or beauty, or health, or wealth,
-or knowledge.  And thus, INFPs guard against giving way to relaxing
-in the happiness of mating.  They may have difficulty in expressing
-affection directly, but communicate interest and affection
-indirectly.
-
-For INFPs, their home is their castle.  As parents, they are fierce
-in protection of their home and family and are devoted to the
-welfare of family members.  They have a strong capacity for
-devotion, sympathy, and adaptability in their relationships, and
-thus are easy to live with.  They are loyal to their family and,
-although they may dream of greener pastures, they soon locate the
-nettles.  The almost preconscious conviction that pleasure must be
-paid for with pain can cause a sense of uneasiness in the family
-system of an INFP, who may transmit an air of being ever-vigilant
-against invasion.
-
-In the routine rituals of daily living, INFPs tend to be compliant
-and may even prefer having decisions made on their behalf - until
-their value system is violated!  Then INFPs dig in their heels and
-will not budge from ideals.  Life with an INFP will go gently along
-for long periods, until an ideal is struck and violated.  Then an
-INFP will resist and insist.
diff --git a/xtrn/smm/mb-intj.asc b/xtrn/smm/mb-intj.asc
deleted file mode 100644
index 18d1d03349..0000000000
--- a/xtrn/smm/mb-intj.asc
+++ /dev/null
@@ -1,169 +0,0 @@
-INTJs in short:
-
-Usually have original minds and great drive for their own ideas and
-purposes.  In fields that appeal to them, they have a fine power to
-organize a job and carry it through with or without help.
-Skeptical, critical, independent, determined, often stubborn.  Must
-learn to yield less important points in order to win the most
-important.
-
-About 1% of the population.
-
-Details about INTJs:
-
-INTJs are the most self-confident of all the types, having
-"self-power" awareness.  Found in about 1 percent of the general
-population, the INTJs live in an introspective reality,  focusing
-on possibilities, using thinking in the form of empirical logic,
-and preferring that events and people serve some positive use.
-Decisions come naturally to the INTJs; once a decision is made,
-INTJs are at rest.  INTJs look to the future rather than the past,
-and a word which captures the essence of INTJs is 'builder' - a
-builder of systems and the applier of theoretical models.
-
-To INTJs, authority based on position, rank, title, or publication
-has absolutely no force.  This type is not likely to succumb to the
-magic of slogans, watchwords, or shibboleths.  If an idea or
-position makes sense to an INTJ, it will be adopted; if it doesn't,
-it won't, regardless of who took the position or generated the
-idea.  As with the INTP, authority per se does not impress the
-INTJ.
-
-INTJs do, however, tend to conform to rules if they are useful, not
-because they believe in them, or because they make sense, but
-because of their unique view of reality.  They are the supreme
-pragmatists, who see reality as something which is quite arbitrary
-and made up.  Thus it can be used as a tool - or ignored.
-
-Reality is quite malleable and can be changed, conquered, or
-brought to a heel.  Reality is a crucible for the refining of
-ideas, and in this sense, INTJs are the most theoretical of all the
-types. An INTJ sees reality as the pawn of ideas: No idea is too
-farfetched to be entertained.  INTJs are natural brainstormers,
-always open to new concepts, and, in fact, aggressively seeking
-them.
-
-INTJs manipulate the world of theory as if on a gigantic chess
-board, always seeking strategies and tactics that have high payoff.
-In their penchant for logic, the INTJs resemble the INTPs.  The
-logic of an INTJ, however, is not confined to the expressibly
-logical.  Unlike INTPs, INTJs need only to have a vague, intuitive
-impression of the unexpressed logic of a system to continue surely
-on their way.  Things need only 'seem' logical; this is entirely
-sufficient.
-
-Moreover, they always have a keen eye for the consequences of the
-application of new ideas or positions.  They can be quite ruthless
-in the implementation of systems, seldom counting personal cost in
-terms of time and energy.  Theories which cannot be made to work
-are quickly discarded by the INTJs.
-
-To understand INTJs, their way of dealing with reality rather than
-their way of dealing with ideas should be observed closely.  Their
-conscious thought is extroverted and empirical.  Hence, they are
-better at generalizing, classifying, summarizing, adducing
-evidence, proving and demonstrating than are the INTPs.
-
-The INTJs are somewhat less at home with pure reason, that is,
-systemic logic, where principles are explicit.  In this respect
-they resemble the ENTJs.  The INTJs, rather than using deductive
-logic, use their intuition to grasp coherence.
-
-INTJs have a drive to completion, always with an eye to long-term
-consequences.  Ideas seem to carry their own force for INTJs,
-although they subject every idea to the test of usefulness.
-
-Difficulties are highly stimulating to INTJs, who love responding
-to a challenge that requires creativity.  Those personality traits
-lead INTJs to occupations where theoretical models can be
-translated into actuality.  They build data and human systems
-wherever they work if given even a slight opportunity.  They can be
-outstanding in scientific research and also outstanding as
-executives who generate a plethora of implementations of ideas.
-
-Teamed with an INTP who is the architect of systems, the INTJ
-provides a dimension to an organization which insures that the work
-of the INTP does not gather dust on library shelves.
-
-INTJs can be very single-minded at times; this can be either a
-weakness or a strength in their careers, for they can ignore the
-points of view and wishes of others.  INTJs usually rise to
-positions of responsibility, for they work long and hard and steady
-in their pursuit of goals, sparing neither time nor effort on their
-part or that of their colleagues and employees.
-
-INTJs live to see systems translated into substance; an INTP, by
-way of contrast, is content to design the system.  In both, these
-types, however, coherence is the master.  Both internal and
-external consistency are important, and if an INTJ finds that he or
-she is in a working situation where overlapping functions,
-duplication of effort, inefficient paper flow, and waste of human
-and material resources abound, the INTJ cannot rest until an effort
-is made to correct the situation.  Cost-effectiveness is a concept
-which has a strong imperative for INTJs, who frequently select
-occupations in engineering, particularly human engineering.
-
-They also can be found in the physical sciences, in roles which
-require development, such as curriculum building, and, in general,
-any job which requires the creation and application of technology
-to complex areas.
-
-Fellow workers of INTJs often feel as if the INTJ can see right
-through them, and often believe that the INTJ finds them wanting.
-This tendency of people to feel transparent in the presence of the
-INTJ often results in relationships which have psychological
-distance.  Thus colleagues find the INTJ apparently unemotional
-and, at times, cold and dispassionate.  Because of their tendency
-to drive others as hard as themselves, INTJs often seem demanding
-and difficult to satisfy.
-
-INTJs are high achievers in school and on the job.  On the job,
-they take the goals of the institution seriously and continually
-strive to respond to these goals.  They make dedicated, loyal
-employees whose loyalties are directed toward the system, rather
-than toward individuals within the system.  So as the people of an
-institution come and go, the INTJs have little difficulty - unlike
-the NFs, who have their loyalties involved more with persons than
-offices.
-
-INTJs ordinarily tend to verbalize the positive and eschew comments
-of a negative nature; they are more interested in moving an
-institution forward than commiserating about mistakes of the past.
-
-As mates, INTJs want harmony and order in the home and in
-relationships.  They are the most independent of all the types.
-They will trust their intuitions about others when making choices
-of friends and mates, even in the face of contradictory evidence
-and pressures applied by others.
-
-The emotions of an INTJ are hard to read, and neither male nor
-female INTJ is apt to express emotional reactions.  At times, both
-will seem cold, reserved, and unresponsive, while in fact INTJs are
-almost hypersensitive to signals of rejection from those for whom
-they care.
-
-In social situations, INTJs may also be unresponsive and may
-neglect to observe small rituals designed to put others at their
-ease.  For example, INTJs may communicate that time is wasted if
-used for idle dialogue, and thus people receive a sense of hurry
-from an INTJ which is not always intended.  In their interpersonal
-relationships, INTJs are usually better in a working situation than
-in recreational situations.  They do not enjoy physical contact
-except with a chosen few.
-
-As parents, INTJs are dedicated and single-minded in their
-devotion: Their children are a major focus in life.  They are
-supportive of their children and tend to allow them to develop in
-directions of their own choosing.  INTJs usually are firm and
-consistent in their discipline and rarely care to repeat directions
-given to children - or others.
-
-Being the most independent of all the types, they have a strong
-need for autonomy; indifference or criticism from people in general
-does not particularly bother INTJs, if they believe that they are
-right.  They also have a strong need for privacy.
-
-The most important preference of an INTJ is 'intuition', but this
-is seldom seen.  Rather, the function of 'thinking' is used to deal
-with the world and with people.  INTJs are vulnerable in the
-emotional area and may make serious mistakes here.
diff --git a/xtrn/smm/mb-intp.asc b/xtrn/smm/mb-intp.asc
deleted file mode 100644
index 97594584b5..0000000000
--- a/xtrn/smm/mb-intp.asc
+++ /dev/null
@@ -1,118 +0,0 @@
-INTPs in short:
-
-Quiet, reserved, impersonal.  Enjoy especially theoretical or
-scientific subjects.  Logical to the point of hairsplitting.
-Usually interested mainly in ideas, with little liking for parties
-or small talk.  Tend to have sharply defined interests.  Need
-careers where some strong interest can be used and useful.
-
-About 1% of the population.
-
-Details on INTPs:
-
-INTPs exhibit the greatest precision in thought and language of all
-the types; they tend to see the distinctions and inconsistencies in
-thought and language instantaneously.  The one word which captures
-the unique style of INTPs is 'architect' - the architect of ideas
-and systems as well as the architect of edifices.  This type is
-found in only 1 percent of the population and therefore is not
-encountered as frequently as some of the other types.
-
-INTPs detect contradictions in statements no matter how distant in
-space or time the contradictory statements were produced.  The
-intellectual scanning of INTPs has a principled quality; that is,
-INTPs search for whatever is relevant and pertinent to the issue at
-hand.  Consequently, INTPs can concentrate better than any other
-type.
-
-Authority derived from office, position, or wide acceptance does
-not impress INTPs.  External authority per se is irrelevant.  INTPs
-abhor redundancy and incoherence.
-
-Possessing a desire to understand the universe, an INTP is
-constantly looking for natural law.  Curiosity concerning these
-keys to the universe is a driving force in this type.
-
-INTPs prize intelligence in themselves and in others, but can
-become intellectual dilettantes as a result of their need to amass
-ideas, principles, or understanding of behavior.  And once they
-know something, it is remembered.
-
-INTPs can become obsessed with analysis.  Once caught up in a
-thought process that thought process seems to have a will of its
-own for INTPs, and they persevere until the issue is comprehended
-in all its complexity.  They can be intellectual snobs and may show
-impatience at times with others less endowed intellectually.  This
-quality, INTPs find, generates hostility and defensive behaviors on
-the part of others, who may describe an INTP as arrogant.
-
-For INTPs, the world exists primarily to be understood.  Reality is
-trivial, a mere arena for proving ideas.  It is essential that the
-universe is understood and that whatever is stated about the
-universe is stated correctly, with coherence and without
-redundancy.  This is the INTP's final purpose.  It matters not
-whether others understand or accept his or her truths.
-
-The INTP is the logician, the mathematician, the philosopher, the
-scientist; any pursuit requiring architecture of ideas intrigues
-this type.
-
-INTPs should not, however, be asked to work out the implementation
-of application of their models to the real world.  The INTP is the
-architect of a system and leaves it to others to be the builder and
-the applicator.  Very often, therefore, the INTP's work is not
-credited to him or her.  The builder and the applier gains fame and
-fortune, while the INTP's name remains obscure.  Appreciation of an
-INTP's theoretical work frequently comes posthumously - or the work
-may never be removed from library shelves at all and thus lost.
-
-INTPs tend not to be writers or to go into sales work.  They are,
-however, often excellent teachers, particularly for advanced
-students, although INTPs do not always enjoy much popularity, for
-they can be hard taskmasters.
-
-They are not good at clerical tasks and are impatient with routine
-details.  They prefer to work quietly, without interruption, and
-often alone.  If an organization is to use the talents of an INTP
-appropriately, the INTP must be given an efficient support staff
-who can capture ideas as they emerge and before the INTP loses
-interest and turns to another idea.
-
-INTPs take their mating relationship seriously and usually are
-faithful and devoted - albeit preoccupied at times.  They are not
-likely to welcome constant social activity or disorganization in
-the home.
-
-In all probability, the mate of an INTP will initiate and manage
-the social life.  If left to his or her own devices, the INTP mate
-will retreat into the world of books and emerge only when physical
-needs become imperative.
-
-INTPs are, however, willing, compliant, and easy to live with,
-although somewhat forgetful of appointments, anniversaries, and the
-rituals of daily living - unless reminded.  They may have
-difficulty expressing their emotions verbally, and the mate of an
-INTP may believe that he/she is somewhat taken for granted.
-
-As a parent, the INTP is devoted; they enjoy children and are
-serious about their upbringing.  The home of an INTP parent is
-usually calm, low-key in discipline, but well run and ordered.
-
-INTPs deal with the environment primarily through intuition, and
-their strongest quality, the thinking function, remains relatively
-hidden except in close associations.  Therefore, INTPs are often
-misunderstood, seen as difficult to know, and seldom perceived at
-their true level of competency.
-
-They are inclined to be shy except with close friends, and their
-reserve is difficult to penetrate.  They are very adaptable until
-one of their principles is violated.  Then INTPs are not adaptable
-at all!
-
-They may have difficulty in being understood by others because they
-tend to think in a complicated fashion and want to be precise,
-never redundant in their communications.
-
-Because their feeling qualities may be underdeveloped, they may be
-insensitive to the wants and wishes of others, often quiet unaware
-of the existence of these wants and wishes.
diff --git a/xtrn/smm/mb-intro.asc b/xtrn/smm/mb-intro.asc
deleted file mode 100644
index bdd60da67d..0000000000
--- a/xtrn/smm/mb-intro.asc
+++ /dev/null
@@ -1,18 +0,0 @@
-nyhThe Myers-Briggs Personality Test nc
-
-The test you are about to take is titled, "hThe Keirsey Temperament Sorternc".
-
-There are no "right" or "wrong" answers to the questions in this inventory.
-Your answers will help show how you like to look at things and how you like to
-go about deciding things.  Knowing your own preferences and learning about
-other people's can help you understand where your special strengths are, what
-kind of work you might enjoy and be successful doing, and how people with
-different preferences can relate to each other and be valuable to society.
- 
-Read each question carefully and indicate your answer by typing 'A', 'B' or
-'C' for cannot decide.
-
-Do not think too long about any question.
-
-The test consists of 70 questions.
-
diff --git a/xtrn/smm/mb-isfj.asc b/xtrn/smm/mb-isfj.asc
deleted file mode 100644
index c59d1d4a19..0000000000
--- a/xtrn/smm/mb-isfj.asc
+++ /dev/null
@@ -1,116 +0,0 @@
-ISFJs in short:
-
-Quiet, friendly, responsible and conscientious.  Work devotedly to
-meet their obligations.  Lend stability to any project or group.
-Thorough, painstaking, accurate.  May need time to master technical
-subjects, as their interests are usually not technical.  Patient
-with detail and routine.  Loyal, considerate, concerned with how
-other people feel.
-
-About 6% of the population.
-
-Details about ISFJs:
-
-Six out of every hundred people are ISFJs.  Here the primary is to
-be of service and to minister to individual needs.  ISFJs carry a
-sense of history, a sense of continuity with past events and
-relationships.  Traditions and the conservation of resources are
-highly valued.
-
-The least hedonistic of all types, ISFJs believe work is good, play
-must be earned.  ISFJs are willing to work long, long hours.  When
-they undertake a task, it will be completed if at all humanly
-possible.
-
-Adhering to an established way of doing things and doing them well
-is valued and respected.  The efficiency and effectiveness of an
-established procedure is not often questioned.  Procedures dictated
-by handbooks are law.  If others violate or ignore these standard
-operating procedures, ISFJs are annoyed and irritated, although
-they may not always display this reaction.  Usually, such
-irritation is turned inward and may be experienced as fatigue and
-muscle tension.
-
-ISFJs are super-dependable and seldom are happy working in
-situations where rules are constantly changing.  Their major need
-to be of service to others leads them into occupations such as
-nursing, teaching, secretarial work, medical practice (especially
-general practice), librarian work, and middle-management
-administrative jobs.
-
-They relate well to people who need them, for example, the sick,
-the ignorant, students, and the "boss."  Much satisfaction comes to
-them when they are taking care of the needs of another and they
-render the service gently and helpfully.  When the recipient is no
-longer in need, the relationship may change its character, the ISFJ
-becoming disinterested.
-
-They enjoy assisting the downtrodden and can handle better than
-other types servility of others.  If a situation calls for such
-behavior on their part, they will show "due respect."
-
-ISFJs have an extraordinary sense of responsibility and an
-outstanding talent for executing routines which call for repeated,
-sequential procedures; for example, ISFJs make extraordinary
-secretaries, highly efficient nurses, and dedicated teachers.
-Speculation and theory do not intrigue ISFJs, who would rather
-leave the less practical matters to others while remaining
-themselves practical and down-to-earth.
-
-ISFJs tend to be devoted and loyal to a boss and tend to identify
-personally rather than institutionally.  They expect others,
-including the boss, to follow procedures and are distressed and
-embarrassed when people do not behave as they are supposed to
-behave.
-
-ISFJs often seem to feel personally responsible for seeing to it
-that people in an institution or business carry out established
-rules and routines.  They often are aware of status given by
-titles, environment, offices, and the like and can use this to
-advantage.
-
-They are aware of the value of material resources and abhor the
-squandering or misuse of these resources.  To save, to put
-something aside against an unpredictable future, to prepare for
-emergencies - these are important actions.
-
-ISFJs may experience some discomfort when placed in positions of
-authority over others and may tend to try to do everything
-themselves rather than insist that others do their jobs.  As a
-result, ISFJs are frequently overworked.
-
-ISFJs are devoted to mate and family and usually are excellent
-homemakers.  The home of an ISFJ is likely to be well kept inside
-and out.  Interior and exterior are meticulously maintained and
-appointed in the traditional manner.
-
-As a parent, the ISFJ expects children to conform to the rules of
-society and has a feeling of personal responsibility to see to it
-that these rules are honored.
-
-An ISFJ is apt to find the putting on of airs as offensive and
-tends to prefer modest, quiet friends rather than more boisterous
-ones.  For the ISFJ, people should behave according to their
-position in life, and the ISFJ may be annoyed by others who act
-either above or below their social or economic station.
-
-The ISFJ female often displays a flair for making the interior of
-the home attractive in a time-honored style, provides attractive,
-nourishing meals, and maintains the environment in a neat and
-orderly state.  To the ISFJ male and female, the home territory is
-important to own and to preserve.
-
-While ISFJs are super-dependable, they may be fascinated by and
-attracted to the irresponsible, the lush, the glutton.  Many ISFJs
-marry alcoholics and then proceed to conduct a rescue-rejection
-game without end, with the rescuing phase taking the guise of an
-attempt to reform.  Occasionally an ISFJ mother may reveal a
-tendency to find humor in the "waywardness" of a son, while raising
-her daughters to respect traditions and to do the Right Thing at
-the Right Time - always.
-
-ISFJs are frequently misunderstood and undervalued.  Their
-contributions often are taken for granted, and the ISFJ as well is
-often taken for granted.  This can cause an ISFJ to harbor feelings
-of resentment, and this bottled up emotion can gnaw inwardly,
-causing the ISFJ much undeserved suffering.
diff --git a/xtrn/smm/mb-isfp.asc b/xtrn/smm/mb-isfp.asc
deleted file mode 100644
index 4b9b4d322b..0000000000
--- a/xtrn/smm/mb-isfp.asc
+++ /dev/null
@@ -1,166 +0,0 @@
-ISFPs in short:
-
-Retiring, quietly friendly, sensitive, kind, modest about their
-abilities.  Shun disagreements, do not force their opinions or
-values on others.  Usually do not care to lead but are often loyal
-followers.  Often relaxed about getting things done, because they
-enjoy the present moment and do not want to spoil it by undue haste
-or exertion.
-
-About 5% of the population.
-
-Details about ISFPs:
-
-Although all SPs (Sensuous Performers) are artisans in their
-nature, they usually do not pursue their artistry with the same
-devotion and adornment as the ISFP.  For whatever reason, the ISFP
-seems more inclined to the "fine arts" than the other SPs; so when
-an especially gifted composer, painter, or dancer shows up, he or
-she, more frequently than not, possesses the character of an ISFP.
-Beethoven, Toscanini, Rembrandt, and Nijinski, as shown by
-typohistorical research, were clear-cut ISFPs.
-
-But the ISFP temperament is very difficult to observe, even in the
-great artists, and so ISFP is probably the most misunderstood of
-all the types.
-
-A major source of misunderstanding is the tendency of ISFPs not to
-express themselves directly, but through action.  If they find a
-medium of expression, some art form, then the character is
-expressed in some degree in the medium.  If not, it simply doesn't
-come out, and no one knows them, this social reticence making the
-character all but invisible.
-
-Of course, in those rare cases where remarkable skill is achieved,
-such as in the virtuoso, ISFPs become celebrities, but their nature
-is still far from visible.  Harpo Marx, a brilliant comedic actor,
-may well be seen as a prototype, in his simultaneous celebrity and
-mute invisibility.
-
-On close observation, these relatively infrequent SPs (5 percent of
-the population is ISFP, as compared to 15 percent ESFP) are just as
-hedonistic and impulsive as the other SPs.  Here is no NF search
-for significance, nor for that matter any fascination with science
-(NT) or commerce (SJ).
-
-ISFPs live Epicurean lives in the here and now, and as gracefully
-as possible.  They do not plan and prepare.  Submergence in their
-artistry is not preparation for something later; rather they
-experience intensely, now.  ISFPs do not wait, for to wait is to
-see their impulse wither and die; they want and value their
-impulses and see them as the center of their lives.
-
-Nor are ISFPs devoted or committed to artful play; rather they are
-caught, as by a magnet or a whirlwind.  So then the long hours of
-"practice" the virtuoso "gives" to artistry is not practice at all
-and it is not given; it is doing and it is taken from the (willing)
-ISFP by the performance itself.  The act is ISFP's master, not the
-reverse, so we must abandon any notion of ISFPs as careful and
-devoted planners and of dutiful preparation and rehearsal.  They
-paint, or sing, or toot, or dance, or run, or skate, or pot, or
-whatever, simply because must: the mountain is climbed 'because it
-is there'.
-
-Because the ISFP is always caught up, so to speak, in whatever
-actions are underway, rather than practicing toward some distant
-goal, there is no question of the ISFP noticing fatigue, pain, or
-danger.  They are usually quite oblivious to the accompaniments of
-many of their favorite activities.  It is not that ISFPs are inured
-to them as much as it is that, wholly engaged by an action, they
-simply do not notice them.  In this ISFP is similar to other SPs
-and different from all other types.
-
-ISFP, like other SPs, has a special kind of intelligence.  Please
-recall that intelligence is defined in this book as doing things
-well under varying circumstances.  This particular category of
-intelligence might be called "artisan concretized."  Such talent
-differs from that possessed by NFs, NTs, and SJs (granting of
-course, that they too have their own unique and inherent
-abilities).  This artisan concretization somehow keeps the ISFP
-more closely in touch with the very real.
-
-While the ISTP is attuned to the tool, so to speak, the ISFP is
-attuned to color, line, texture, shading - touch, motion, seeing,
-and hearing in harmony.  The senses of the ISFP seem more keenly
-tuned than those of others.  Rembrandt could almost taste colors so
-great was his discrimination.  Toscanini could hear a single false
-note in the most complex operatic-orchestral score, and Hemingway's
-words tasted and smelled and felt the waves.  This extreme
-concreteness and specificity seems to come naturally to the ISFP
-and is embedded "in the warp and woof of the man's make."
-
-The social side of the ISFP character must not be eclipsed by the
-more spectacular performances some of this group are capable of.
-The ISFP has to be the kindest of all the types with no near
-competitors.  This kindness is unconditional.  Here is sympathy, of
-which we are all capable, carried to its most extreme form.  The
-ISFP is especially sensitive to the pain and suffering of others
-and, like St.  Francis of Assisi, with sympathetic impulsivity
-gives freely to the sufferer.
-
-ISFP is usually not interested in developing facility in speaking,
-writing, or conversation.  Speech, after all, is abstract, not
-concrete, ISFPs preferring to have their fingers on the pulse of
-life.  That pulse must be felt - by touch, in the muscles, in the
-eyes, in the ears.
-
-This insistence on the senses being so closely attuned to reality
-can, in some ISFPs, occasion a breach with language, and language
-becomes a barrier to smooth interpersonal relations.  So ISFPs are
-sometimes seen by others as reserved and private, tending to give
-up rather easily in their attempts to express themselves verbally.
-
-But this reluctant speech is not so much a lack of ability as it is
-disinterest.  Hemingway broke that barrier, a splendid instance of
-an ISFP entering the world of words and making apparent
-inarticulateness into art, changing the face of 20th Century
-literature.
-
-The number of great artisans who, upon investigation, were found
-clearly to have been ISFPs, is truly awesome.  The other SPs seem
-to have contributed far fewer masters to the fine arts.  Gaugin and
-Puccini, both ESTPs, were in this sense exceptional.  Music and the
-dance seems almost the province of ISFP, and surely investigation
-will show many of the great athletes come from this group.
-
-Of course, all ISFPs have not been and need not be artisans in the
-narrow sense of the word.  Art, broadly conceived, is any action
-the next move of which is a free variable, and it is art thus
-conceived that is the forte of SPs in general and the ISFP in
-particular.
-
-Thus ISFPs have a lot of leeway in choice of occupation, especially
-if they do not drop out of school early (most SPs do, since the
-school offers little that is of interest to them or that challenges
-their special brand of intelligence).  It is a sad day indeed when
-the ISFP chooses work wherein the operations are fixed by rule or
-necessity and not free.  To be happy and productive the ISFP must
-choose variable actions and be rewarded for doing them.
-
-Finally, in many ISFPs may be found an instinctive longing for the
-natural, the pastoral, the bucolic.  They are quite at home in the
-wilds, and nature seems to welcome them.  Some have a remarkable
-way with animals, even wild animals, almost as if there were a bond
-of mutual sympathy and trust.  In some instances a similar bond may
-be seen between the ISFP and young children, instant and unstudied.
-
-Perhaps the most important thing to understand about ISFPs is that
-they are SPs, with much in common with ESFPs especially, often
-resembling ISTPs, and even sharing some traits with the seemingly
-very different ESTP.
-
-To summarize this commonality with other SPs, ISFPs may be seen as
-optimistic and cheerful; egalitarian, fraternal, and insubordinate;
-tending to ward off obligation, duty, confinement, and fetters; a
-lover of freedom, easily bored, wanting excitement, risk, chance,
-and tests of luck; uncomplicated in motivation, trusting,
-receptive, generous, and in every sense of the word a spender
-rather than a saver.
-
-ISFPs are misunderstood not only because they are retiring,
-reserved, and even self-effacing, but because the Jungians have
-cast them as "introverted feeling types," and therefore very much
-like the INFPs.  Watch a few thoroughgoing ISFPs and you'll find
-they have very little in common with INFPs.  Other types are
-reminded to guard against the natural tendency to project their own
-traits of character onto the silent ISFP.
diff --git a/xtrn/smm/mb-istj.asc b/xtrn/smm/mb-istj.asc
deleted file mode 100644
index 399af67a1b..0000000000
--- a/xtrn/smm/mb-istj.asc
+++ /dev/null
@@ -1,121 +0,0 @@
-ISTJs in short:
-
-Serious, quiet, earn success by concentration and thoroughness.
-Practical, orderly, matter-of-fact, logical, realistic, and
-dependable.  See to it that everything is well organized.  Take
-responsibility.  Make up their own minds as to what should be
-accomplished and work toward it steadily, regardless of protests or
-distractions.
-
-About 6% of the population.
-
-Details about ISTJs:
-
-ISTJs are characterized by decisiveness in practical affairs, are
-the guardians of time-honored institutions, and, if only one
-adjective could be selected, 'dependable' would best describe this
-type which represents about 6 percent of the general population.
-The word of ISTJs is their bond, and they experience great
-uneasiness by thoughts of a bankrupt nation, state, institution, or
-family.
-
-Whether at home or at work, this type is rather quiet and serious.
-ISTJs are extraordinary persevering and dependable.  The thought of
-dishonoring a contract would appall a person of this type.  When
-they give their word, they give their honor.
-
-ISTJs can be counted on to conserve the resources of the
-institution they serve and bring to their work a practical point of
-view.  They perform their duties without flourish or fanfare;
-therefore, the dedication they bring to their work can go unnoticed
-and unappreciated.
-
-ISTJ's interest in thoroughness, details, justice, practical
-procedures, and smooth flow of personnel and material leads this
-type to occupations where these preferences are useful.
-
-For example, ISTJs make excellent bank examiners, auditors,
-accountants, or tax examiners.  Investments in securities are
-likely to interest this type, particularly investments in blue chip
-securities, ISTJs are not likely to take chances with their own or
-others' money.
-
-ISTJs can handle difficult, detailed figures and make sense of
-them.  They communicate a message of reliability and stability,
-which often makes them excellent supervisors of, for example, a
-ward of a hospital, a library, or a business operation.
-
-They would be capable of handling the duties of a mortician, a
-legal secretary, or a law researcher.  High school teachers of
-business, home economics, physical education, and the physical
-sciences, are ISTJs, as are top-ranking officers of the Women's
-Army Corps.  Often this type seem to have ice in their veins, for
-people fail to see an ISTJ's vulnerability to criticism.
-
-ISTJs are patient with their work and with procedures within an
-institution, although not always patient with the individual goals
-of people in that institution.  ISTJs will see to it that resources
-are delivered when and where they are supposed to be; materiel will
-be in the right place at the right time.  And ISTJs would prefer
-that this be the case with people, too.
-
-As a husband or wife, the ISTJ is a pillar of strength.  Just as
-this type honors business contracts, so do they honor the marriage
-contract.  Loyal and faithful mates, they take responsibilities to
-children and mate seriously, giving lifelong commitment to these.
-'Duty' is a word the ISTJ understands.
-
-The male ISTJ sees himself as the breadwinner of a family, although
-he can accept a working wife - as long as responsibilities to
-children are not shirked.  The male ISTJ's concept of masculinity
-is patriarchal, and both female and male ISTJs make steady,
-dependable partners.  The female ISTJ may abandon the frivolous for
-the sensible and may not always deepen her sensuality.
-
-As parents, ISTJs are consistent in handling children, and the
-rules of family are made clear.  A rebellious, nonconformist child
-may have a difficult time, however, with an ISTJ parent - and vice
-versa.  As a child, the ISTJ is apt to be obedient and a source of
-pleasure to parents and teachers.
-
-Although ISTJs are outstandingly practical and sensible, they can
-marry people who are thoroughly irresponsible, with the marriage
-developing into a relationship more parent-to-child than
-adult-to-adult.
-
-The ISTJ fluctuates from being rescuer to reformer of the wayward
-mate.  The marriage then becomes a lifelong game: On one side,
-there is Irresponsibility, Promise of Reform, Brief Period of
-Reform, and Irresponsibility again;  on the ISTJ's part, the cycle
-is Disapproval, Rescue, Scolding, Forgiveness, Acceptance of
-Promise To Do Better, and on and on.
-
-This pattern often is seen when an ISTJ marries an alcoholic and
-enters a life of care taking punctuated by periods of anger and
-rejection.  Somehow, although ISTJs can accept periodic fickleness
-and selfishness in significant others, they do not see this kind of
-behavior as acceptable in themselves.
-
-ISTJs have a distaste for and distrust of fanciness in speech,
-dress, or home.  The ostentatious is abhorred, and a neat, orderly,
-and functional home and work environment is preferred.  Durability
-of furnishings are of primary concern, esthetics given slim
-consideration.  The clothes of an ISTJ tend to be practical and
-durable rather than in the latest style or luxurious.  "No
-nonsense" in both food and clothes seem characteristic of this type
-who tend not to be attracted by exotic foods, beverages, or places.
-
-The male ISTJ may enjoy stag, men-only parties and use a different
-sort of language when only men are present.  The yearly hunting or
-fishing trip as a male ritual is often a part of recreation for an
-ISTJ.  More than the female, the ISTJ male is apt to be involved in
-community service organizations that transmit traditional values to
-the young, such as Boy Scouting.  They understand and appreciate
-the contributions these groups make in preserving the national
-heritage.
-
-Along with the SJs, the ISTJ takes particular delight in festive
-occasions held in the context of rituals, for example, weddings,
-holiday feasts, and birthdays.  At work, the ISTJ is apt to see the
-holiday office party as a necessary nuisance and would be likely to
-participate and enjoy these events.
diff --git a/xtrn/smm/mb-istp.asc b/xtrn/smm/mb-istp.asc
deleted file mode 100644
index 6341a59e44..0000000000
--- a/xtrn/smm/mb-istp.asc
+++ /dev/null
@@ -1,191 +0,0 @@
-ISTPs in short:
-
-Cool-onlookers - quiet, reserved, observing and analyzing life with
-detached curiosity and unexpected flashes of original humor.
-Usually interested in impersonal principles, cause and effect, how
-and why mechanical things work.  Exert themselves no more than they
-think necessary, because any waste of energy would be inefficient.
-
-About 13% of the population.
-
-Details about ISTPs:
-
-Just as impulsive as other SPs, the ISTP's life is artful action -
-and action is end in itself.  Action for the ISTP is more
-gratifying if it is born of impulse rather than purpose.  If the
-action is in the service of an end or aim, let the aim look out for
-itself; it cannot be allowed to influence execution.  The act is
-self-directed, self-leading, containing its own imperatives which
-cannot be suborned to mere rules, regulations, or laws.
-
-ISTPs are egalitarian and can be fiercely loyal to "brothers." They
-can also be fiercely insubordinate seeing hierarchy and authority
-as unnecessary and even superfluous.  It is not so much a matter of
-going against regulations as it is simply ignoring them.
-
-The ISTP must do his or her own thing, free to vary each next move.
-And ISTPs are, or want to be, proud of their ability to make the
-next move skillfully.
-
-ISTPs are often fearless, risking themselves more than other types,
-despite (even frequent) injury.  Of all the types, ISTPs are most
-likely to pit themselves, or their technique, against chance, odds,
-or fate.  They thrive on excitement; they crave some excitement
-each day, in the form of fast motion - racing, sky diving, or
-surfing, for instance.  This hunger for action makes them much more
-subject to boredom than any other type, their urge driving them to
-a faster pace.  Strangely, however, they are not bored while doing
-their thing, even though there may be long stretches when nothing
-happens, as during travel, surfing, hunting, or fishing.
-
-The ISTP nature is most easily seen in their mastery of tools,
-tools of any kind, from microscopic drill to supersonic jet.  From
-an early age, they are drawn to tools as to a magnet; they must
-manipulate them, and tools fall into their hands demanding use.
-Many pilots knew by the age of five that they were going to be
-pilots.
-
-ISTPs tend to take up activities that allow them to use tools;
-driving, steering, operating.  And if given a tool, whether scalpel
-or earth mover, is operated with a precision that defies belief,
-that operator is likely an ISTP.  Others use tools, of course, but
-not with the virtuosity of the ISTP.
-
-Indeed, we must call ISTP's the tool artisans, for they above all
-others command the tool and bend it to their impulse.  But again,
-ISTPs - personified in Michaelangelo and Leonardo - work (or
-better, play) with their tools on personal impulse and not on
-schedule.  If an externally imposed schedule coincides with
-impulse, fine; if not, so much the worse for the schedule.
-
-One tool especially attractive to the ISTP is the weapon.  Should
-ISTPs turn against society (for whatever reason), they wield their
-weapons with lethal genius to support their rejection.  The hit man
-of today, the gunslinger of the American West, and the duelist of
-18th Century Europe, may be seen as virtuosos of precision
-homicide.
-
-Hit man, gunslinger, and duelist alike took pride in their prowess.
-Fortunately, they face their own kind in battle, the good warriors
-of the land: soldier, marshal, police, intelligence agent.  This is
-not to say that all warriors, good or bad, are ISTPs, or that ISTPs
-are all weapons experts; rather that the weapon virtuoso is more
-frequently ISTP than not.
-
-ISTPs also play on impulse, taking off at any time just because
-they "feel like it."  (We are advised not to try to stop the ISTP
-who "feels like" doing something.)  The neurosurgeon does crop
-dusting on the side and rides a motorcycle to the airport, and the
-financier goes on a hunting trip in the middle of an audit (i.e.,
-SJ scrutiny).  There can be no end to the ways ISTPs seek thrills
-in play.
-
-Although they may have the appearance of loners in their work, they
-nonetheless hang around their own kind in play.  The climbers,
-racers, flyers, hunters, and in general, movers flock together. The
-companionship is mediated through the tool, and conversation is
-sparse and terse.
-
-Like the ISFPs, ISTPs communicate through action, and show little
-interest in developing verbal skills.  Indeed, this lack of
-interest in communication may be mistaken for what well meaning but
-misguided medics and educators call "learning disability" or
-"dyslexia," both preposterous notions when meant as explanations.
-Let ISFPs get near a tool of any complexity and power and see how
-fast they pass up everybody in 'learning' to use it and how precise
-their 'lexicon' in talking of its features.
-
-Despite their egalitarianism, insubordination, and love of freedom,
-they can be leaders, even great ones.  But they must be "up front,"
-sword in hand, leading the charge.  That is to say, ISTPs can be
-very successful as battle leaders, for instance, no matter how
-large or small the force under their command.  Their supreme
-realism, timing, and sense of expediency allows them to seize the
-moment and fully exploit whatever resources can be gotten (theirs
-or others) and capitalize on deficits and mistakes of their
-opponent.
-
-Theirs is an expediency or exploitative leadership, based on a
-special kind of intelligence which may be called artistic
-concreteness.  Yes, for the ISTP battle leader, combat is an art,
-an intellectual game, not in the sense of strategy (that is for
-NTs), but rather using whatever is at hand to defeat the other with
-the least injury.
-
-Battle leaders are duellists.  Patton was such a leader, and we
-must credit Marshall (an NTJ strategist) for seeing beneath that
-flamboyant, impulsive, insubordinate, and reckless exterior a
-peerless warrior.  The same credit goes to Grant (another NTJ) for
-selecting Sheridan (STP), and to Hitler (ENFJ) for selecting Rommel
-(ISTP).  Patton, Sheridan, and Rommel were cut from the same cloth
-and showed the same artistic espionage and rapier-like tactics.
-
-Glory is a pre-20th Century concept better understood by the ISTP
-than by others.  Or at least the ISTP is more interested in it than
-most others.  In battle there is glory, for it is in battle that
-one can exercise one's lethal skills with positive sanction.
-
-The Seven Samurai were glorified and so have been duellists down
-through the ages.  Foss, Boyington, Fonck, and von Richtoffen, all
-virtuosos of the winged machine gun, are still glorified heroes.
-But there are hundreds of warriors just like them in nature.  One
-can test one's mettle in lethal duel, there's glory in it, as the
-film The Great Waldo Pepper showed most poetically.
-
-The education and intelligence of the ISTP is worth special
-comment.  Possessed of artisan intelligence, ISTP is not in the
-least interested in the clerical, interpretive, and "science"
-curricula that abound in the 20th Century school.  The other SPs,
-equally bored by the school, will at least act as if they're trying
-to learn, but not ISTP.  ISTP will stare coldly into the eyes of
-the teacher and not even say no.  No amount of cajoling, bribing,
-rewarding, punishing, or threat will get them to do their school
-work.
-
-School work, quite apart from being irrelevant to the talents of
-SPs, is, after all, mere preparation for something the ISTPs figure
-they're never going to do anyway.  SPs do not wish to prepare - for
-anything - and ISTPs are careful to make this clear to their
-would-be instructors.
-
-What is there to 'do', 'now', that is 'worthwhile'?  ISTP will not
-sit still (literally) for the trivial fare dished out
-(sanctimoniously, in the eyes of the ISTP).  Most seem to agree
-that ISTPs "should" do their school work.  But why? The arguments
-are piddling and incoherent, warranting the scorn they get from the
-unshakable ISTP.
-
-ISTPs are not "minimally brain damaged," or "hyperactive," or
-"dyslexic"; they are active, and they are stubbornly insistent upon
-getting to do, in school, some things that allow them to test their
-intelligence and their mettle.  Name-calling and pill-pushing won't
-change them, other than destroying their self confidence and
-perhaps creating a stimulant addict now and then.  Give them a
-tool-centered curriculum and watch their speed.
-
-Behaviorally the ISTP is more like the ESTP than any other type,
-and the older they get, the greater the resemblance.  When young,
-ISTPs may look very much like ISFPs, but as their confidence and
-pride increase this resemblance recedes.  Jungians think ISTPs are
-just like INTPs with only minor differences, but this is based on
-the definition of ISTPs as "introverted thinking types."
-
-INTPs are logicians, philologists, and architects in the way they
-think, but ISTPs are completely disinterested in these pursuits.
-Even a cursory observation of a few clear-cut ISTPs will show how
-striking the contrast, and how trivial the resemblance.
-
-Still, the most important thing about the ISTPs is their
-commonality with other SPs.  We might think that there would be
-some resemblance to the ISTJ, having as they do, "IST" in common.
-but no, their behavior is antithetical in almost every dimension of
-comparison.  One is pessimistic while the other optimistic; one is
-parental, the other, fraternal; one saves, the other spends; one
-believes in rules, the other is instinctual insubordinate and
-recalcitrant to rules; and so on.
-
-ISTPs have infinitely more in common with the very different ESFP
-than they do with any NT or SJ; besides the above, their mood is
-one of good cheer, they are loyal to their equals, they want no
-obligations, duties, or confining promises, are uncomplicated in
-their desires, and are trusting, receptive, and generous.
diff --git a/xtrn/smm/mb-j.asc b/xtrn/smm/mb-j.asc
deleted file mode 100644
index 92c1cb6cbf..0000000000
--- a/xtrn/smm/mb-j.asc
+++ /dev/null
@@ -1,11 +0,0 @@
-The Judgement type tends toward planning, goal setting, deciding, and
-getting-things-done. Once the J makes a decision he tends to be fixed and
-inflexible. The J finds himself always waiting for others - who are always
-late; thinks that if everyone would do what they are supposed to, the world
-would be a better place, has a personal schedule for the day, and gets 
-frustrated when the schedule is interrupted, doesn't like surprises, keeps
-lists, thrives on order, likes to finish-the-job.
-J creates an environment that is structured, scheduled, ordered, planned,
-and controlled; is decisive, deliberate.
-J's plan their work and work their plan.
-The population is equally divided between Js and Ps.
diff --git a/xtrn/smm/mb-n.asc b/xtrn/smm/mb-n.asc
deleted file mode 100644
index 3347e8fb90..0000000000
--- a/xtrn/smm/mb-n.asc
+++ /dev/null
@@ -1,7 +0,0 @@
-The iNtuitive type gets his information from within himself, tends to favor
-hunches, bases his decisions on possibilities, is innovative, imaginative. 
-An N tends to think about several things at once, finds future possibilities
-more intriguing than frightening, thinks 'boring details' is a redundancy,
-believes time is relative, likes to figure out how things work, is prone to
-puns & word games, thinks in terms of general directions rather than specific
-steps. About 25% of the population are type N.
diff --git a/xtrn/smm/mb-nf.asc b/xtrn/smm/mb-nf.asc
deleted file mode 100644
index 988b822688..0000000000
--- a/xtrn/smm/mb-nf.asc
+++ /dev/null
@@ -1,22 +0,0 @@
-The purpose of life for an NF is to find his purpose in life. NF is self in
-search of self & has difficulty understanding what seem to be the false goals
-of others. Search for identity, meaning, & actualization. Believes his real
-self is somewhat less than what it should be. Desires to be genuine,
-transparent; without masks or game-playing. Life is a drama; each encounter
-is pregnant with becoming. Very sensitive to non-verbal communication.
-Relationships can fall into a pattern of generous investment of energy followed
-by disappointment in what-could-have-been. Tend to be writers, poets, musicians
-teachers, counselors, actors; excellent communicators; gift of helping people 
-grow; strong empathy. Good at appearing to be what the beholder wants to see.
-Seeks greater intensity in relationships, seeks elusive intimacy. At once both
-the audience and the actor. Often has difficulty putting limits on time & 
-energy spent at work. Seeks perfection; and is often disappointed. Tends to
-romanticize experience. Hunger for relationships.
-NF strengths are a capacity for working with people & drawing out their best,
-being articulate & persuasive, a strong desire to help others, and the ability
-to affirm others freely & easily.
-As a manager, NF has difficulty being firm, tends to give workers too much
-leeway. As mate, NF has a deep need to give & receive affection and avoid 
-conflict. As a teacher, NF makes each student feel important & cared about.
-Desire to please & comfortable with theory makes NF an excellent student.
-About 12% of the population.
diff --git a/xtrn/smm/mb-nt.asc b/xtrn/smm/mb-nt.asc
deleted file mode 100644
index 0b6ebfbf44..0000000000
--- a/xtrn/smm/mb-nt.asc
+++ /dev/null
@@ -1,32 +0,0 @@
-NT often feel like aliens in a world of SPs and SJs. The NT has a hunger for
-understanding, control & power; not over people as much as over things. 
-Basic drives are for competence, abilities, skills, ingenuity. Loves doing
-things well. Addicted to storing up wisdom & acquiring intelligence. Has
-more interest in figuring things out than actually doing them. Self critical
-and self doubt to the point of paralysis. Perfectionist, tense, compulsive,
-fear-of-failure. Doesn't accept the conventional wisdom. Tries to lift others
-to his own exaggerated levels of competence and can be arrogant with those
-who choose not to see the complexity of his chosen area. His arrogance causes
-others to withhold their reactions for fear of being labeled 'stupid' and
-isolates him from the people around him. His speech tends to be terse, 
-compact, logical, precise. Wastes few words. Doesn't like to state the obvious.
-Passion for knowing. Tends to seek complicated & exacting profession; engineer,
-mathematics, philosophy. Enjoys building systems, developing models, exploring
-ideas. Tends to be straightforward in dealing with others; others find him
-cold, remote, detached & enigmatic. Vulnerable to all-work-and-no-play.
-Enjoys playing with words, paradox, bad puns. Tends to focus on the future;
-the past is dead & gone. Is humiliated when others witness his errors.
-Not sensitive to emotions of others, capable of biting sarcasm.
-NT strengths are the ability to see the big picture, a talent for systems
-planning, insight into the internal logic & principles of systems, and the
-ability to speak & write clearly.
-As managers, NT is the strategic planner; as mate NT is more interested in
-intellectualizing feeling & emotions than in experiencing them; As parent
-NT provides a role model that is impossible to live up to; as teacher, NT
-clarity & precision can be both exciting & intimidating to students, but 
-they can bore their students by working a point to death; in finances, NT
-probably has a plan, but at the same time is comfortable with high risk
-ventures.
-NT chooses clothes for comfort & utility, doesn't pay much attention to
-fashion.
-About 12% of the population.
diff --git a/xtrn/smm/mb-p.asc b/xtrn/smm/mb-p.asc
deleted file mode 100644
index 2cccc090a0..0000000000
--- a/xtrn/smm/mb-p.asc
+++ /dev/null
@@ -1,9 +0,0 @@
-The Perceptive type tends toward plan-as-you-go, flexibility, open-ended
-tentative agreements, and letting-life-unfold. P is easily distracted, loves
-to explore the unknown, doesn't plan tasks, depends on last-minute-spurts to
-meet deadlines, doesn't believe neatness counts, enjoys creativity, trys to turn
-work into play, doesn't like to be pinned down, tends toward non-judgemental
-statements. 'P' must generate alternatives for everything.
-Likes to keep his options open, but not always - it all depends.
-
-The population is equally divided between Js and Ps.
diff --git a/xtrn/smm/mb-s.asc b/xtrn/smm/mb-s.asc
deleted file mode 100644
index ef399f5634..0000000000
--- a/xtrn/smm/mb-s.asc
+++ /dev/null
@@ -1,11 +0,0 @@
-The Sensor gets his information from external events; tends to be practical,
-base his decisions on experience, is down to earth, and notices details.
-An S prefers specific answers to specific questions, would rather DO something
-rather than think about it, likes to concentrate on the task at hand, likes
-tasks with tangible results, prefers facts to theories, thinks 'fantasy' is
-a dirty word, prefers clear/complete plans to vague guidelines, are very
-literal in use of words, very much a 'show me' person. An S may resist
-taking this test & quickly get bored with it because it is not practical
-and doesn't have an immediate application. S will take a long time to take
-this test, reading every question carefully.
-About 75% of the population are type S.
diff --git a/xtrn/smm/mb-sj.asc b/xtrn/smm/mb-sj.asc
deleted file mode 100644
index 78fc255339..0000000000
--- a/xtrn/smm/mb-sj.asc
+++ /dev/null
@@ -1,16 +0,0 @@
-The SJ exists to belong and be useful to his social group. A giver, provider,
-caretaker, parent; feels uncomfortable in a dependent role. Duty oriented,
-desires to serve, very aware of what-should-be-done. Is comfortable with
-obligations. Has a strong work ethic & desire for hierarchy & rule & order.
-Pessimistic, spends much energy in preparing for the future. Tradition &
-heritage are important. Has a keen sense for detecting ingratitude & lack of
-appreciation. Drawn to institutions; banking, teaching, government, service.
-Strong desire to conserve & store-up-for-the-future. Obligation to serve
-often overrides the fact that he is already overburdened. Backbone of society.
-SJ strengths are administration, dependability, ability to take charge.
-Home & hearth are cornerstones of SJ marriages, ritual & tradition is 
-important. SJ makes very clear who is the parent & what is expected of 
-children. As teacher SJ places high importance on neatness & punctuality.
-SJ's are the money - and moneyed - people of the world. Prefers classic,
-durable clothes. 60% of public school teachers are SJ.
-About 38% of the population.
diff --git a/xtrn/smm/mb-sp.asc b/xtrn/smm/mb-sp.asc
deleted file mode 100644
index 76882d4822..0000000000
--- a/xtrn/smm/mb-sp.asc
+++ /dev/null
@@ -1,20 +0,0 @@
-The SP must be free & will not be tied down with responsibility. Eat, drink &
-be merry, for tomorrow we die. In Aesop's fable of the ant & the grasshopper,
-the SP is the grasshopper. SP has the urge for impulsive action-for-right-now 
-rather than practicing for some future event. Waiting is the same as death.
-Likes diversity & trying new things. Easy come easy go. Not goal oriented.
-Yet the SP shows long endurance; He wouldn't climb a mountain to get to the
-top, but for the thrill of every moment. Gravitates toward jobs where action
-is involved. Tends to be fraternal & loyal to his equals. Master of the grand
-gesture, but not of the small important acts or words. Capable of abruptly
-abandoning his path & striking out in a completely different direction.
-Optimistic, libertarian, social equality. Compulsion to perform.
-SP strengths are practicality, adept problem solving skills, resourcefulness.
-As manager, SP is excellent in a crisis - and is not above creating a crisis
-to give him a sense of purpose. As mate, enjoys intensity & a thrill a minute.
-As teachers, are best at practical-vocational, tend to shy away from 
-theoretical or abstract. Not good at lesson plans. Dealing with money, SP is
-the original high roller. Not good at academics, poor spellers, least likely
-of all the types to receive a college degree.
-Chooses clothes for IMPACT.
-About 38% of the population.
diff --git a/xtrn/smm/mb-t.asc b/xtrn/smm/mb-t.asc
deleted file mode 100644
index b6d430d8b1..0000000000
--- a/xtrn/smm/mb-t.asc
+++ /dev/null
@@ -1,7 +0,0 @@
-The Thinker tends toward logic, reason, laws, policy, principals, justice,
-and impersonal decisions. The T tends to favor critical analysis, stay calm
-& objective when others panic, enjoy proving their point, would rather be
-right than liked, remember facts better than faces.
-The thinker thinks the feeler is fuzzybrained.
-The population is equally divided between Ts and Fs, although more men tend
-to be Thinkers & more women tend to be Feelers.
diff --git a/xtrn/smm/mb-tj.asc b/xtrn/smm/mb-tj.asc
deleted file mode 100644
index a5c3dbeca2..0000000000
--- a/xtrn/smm/mb-tj.asc
+++ /dev/null
@@ -1 +0,0 @@
-60 % of the world's managers are TJ.
diff --git a/xtrn/smm/mb-type.asc b/xtrn/smm/mb-type.asc
deleted file mode 100644
index efd263b45f..0000000000
--- a/xtrn/smm/mb-type.asc
+++ /dev/null
@@ -1,20 +0,0 @@
-yhMyers-Briggs Personality Types:nc
-
-The first letter of the personality type indicates how you are energized
-(hEncxtroversion or hIncntroversion).
-
-The second letter of the personality type indicates how you obtain information
-for your decisions (hSncensation or ihNnctuition).
-
-The third letter of the personality type measures your preference to operate
-from your head to your heart (hTnchinking or hFnceeling).
-
-The fourth letter of the personality type indicates how you like to order your
-life (hJncudging or hPncerception).
-
-An asterisk (h*nc) in any of your letter positions indicates you are equally
-divided between the two personality tendancies.
-
-From here you can read definitions of letter combinations (types):
-hEnc, hInc, hSnc, hNnc, hTnc, hFnc, hJnc, hPnc, hTJnc, hSPnc, hSJnc, hNTnc, hNFnc, hENFPnc, hENFJnc, hENTPnc, hENTJnc, hESFPnc, hESFJnc,
-hESTPnc, hESTJnc, hINFPnc, hINFJnc, hINTPnc, hINTJnc, hISFPnc, hISFJnc, hISTPnc, and hISTJnc.
diff --git a/xtrn/smm/mb-type.que b/xtrn/smm/mb-type.que
deleted file mode 100644
index 987d79d569596870372afd7bab47c819ab32259e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 10430
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
Mp&8v+2Co1v0H13GkN^Mx

diff --git a/xtrn/smm/purity-1.asc b/xtrn/smm/purity-1.asc
deleted file mode 100644
index 773f53d0a2..0000000000
--- a/xtrn/smm/purity-1.asc
+++ /dev/null
@@ -1,16 +0,0 @@
-Section 1:  Platonic Relations.  19 Questions.
-
-For this section, if you are mostly a:
-
-         - heterosexual, then your partner in deed, often referred to
-                         by the word "someone" or "partner", is to be someone
-                         of the OPPOSITE gender.
-
-         - homosexual, then your partner in deed, often referred to by the
-                         word "someone" or "partner", is to be someone of
-                         YOUR OWN gender.
-
-         - 50-50 confirmed bisexual, then your partner in deed, often
-                         referred to by the word "someone" or "partner", is to
-                         be someone of the OPPOSITE gender.
- 
diff --git a/xtrn/smm/purity-2.asc b/xtrn/smm/purity-2.asc
deleted file mode 100644
index b69f67e1b6..0000000000
--- a/xtrn/smm/purity-2.asc
+++ /dev/null
@@ -1,7 +0,0 @@
-Section 2:  Auto-erotica and Mono-sexualism.  51 Questions.
-
-     Although this section is termed Auto-erotica and mono-sexualism, the
-     events herein still count even if you are with someone else at the time.
-     It was so named because these activities, like the harp, (and the
-     porcelain goddess) are predominantly solo events.
- 
diff --git a/xtrn/smm/purity-3.asc b/xtrn/smm/purity-3.asc
deleted file mode 100644
index 5c33111569..0000000000
--- a/xtrn/smm/purity-3.asc
+++ /dev/null
@@ -1,2 +0,0 @@
-Section 3:  Legislative Misfits and Other Ethical Matters.  61 Questions.
- 
diff --git a/xtrn/smm/purity-4.asc b/xtrn/smm/purity-4.asc
deleted file mode 100644
index 37289ae749..0000000000
--- a/xtrn/smm/purity-4.asc
+++ /dev/null
@@ -1,2 +0,0 @@
-Section 4:  Drugs.  43 Questions.
- 
diff --git a/xtrn/smm/purity-5.asc b/xtrn/smm/purity-5.asc
deleted file mode 100644
index 14d44dda2c..0000000000
--- a/xtrn/smm/purity-5.asc
+++ /dev/null
@@ -1,16 +0,0 @@
-Section 5:  Non Platonic Relations.  63 Questions.
-
-For this section, it you are mostly a:
-
-         - heterosexual, then your partner in deed, often referred to by
-                         the word "someone" or "partner", is someone of the
-                         OPPOSITE gender.
-
-         - homosexual, then your partner in deed, often referred to by the
-                         word "someone" or "partner", is to be someone of
-                         your OWN gender.
-
-         - 50-50 confirmed bisexual, then your partner in deed, often referred
-                         to by the word "someone" or "partner", is to be
-                         someone of the OPPOSITE gender.
- 
diff --git a/xtrn/smm/purity-6.asc b/xtrn/smm/purity-6.asc
deleted file mode 100644
index 3531a8ef77..0000000000
--- a/xtrn/smm/purity-6.asc
+++ /dev/null
@@ -1,18 +0,0 @@
-Section 6:  Non Primary Choice Relations.  39 questions.
-
-      This section of the test deals with whether you have done things with
-      people whom you may not be altogether comfortable, therefore in this
-      section of the test, if you are mostly a:
-
-         - heterosexual, then your partner in deed, often referred to by the
-                         word "someone" or "partner", is to be someone of your
-                         OWN gender.
-
-         - homosexual, then your partner in deed, often referred to by the
-                         word "someone" or "partner", is someone of the
-                         OPPOSITE gender.
-
-         - 50-50 confirmed bisexual, then your partner in deed, often
-                         referred to by the word "someone" or "partner", is to
-                         be someone of your OWN gender.
- 
diff --git a/xtrn/smm/purity-7.asc b/xtrn/smm/purity-7.asc
deleted file mode 100644
index 4cf23745bc..0000000000
--- a/xtrn/smm/purity-7.asc
+++ /dev/null
@@ -1,8 +0,0 @@
-Section 7:  Alternate Choices.  26 questions.
-
-      For any of the questions in this section, a yes answer is in order if it
-      is something that you do as an alternative to other sexual gratifications
-      or as an aid and/or in conjunction with other means of sexual
-      gratification.  In other words, have you done it in a serious basis?
-      Trying it a few times to see what it's like does not count.
- 
diff --git a/xtrn/smm/purity-8.asc b/xtrn/smm/purity-8.asc
deleted file mode 100644
index bad4ef2b31..0000000000
--- a/xtrn/smm/purity-8.asc
+++ /dev/null
@@ -1,7 +0,0 @@
-Section 8:  Group Sexual Relations.  27 questions.
-
-      This section relates to what you have or have not done.  Accordingly, the
-      group of people of which we are speaking are of both genders.  In
-      questions where groups of people are concerned, there must be at least
-      one person in the group who is of the opposite gender.
- 
diff --git a/xtrn/smm/purity-9.asc b/xtrn/smm/purity-9.asc
deleted file mode 100644
index 85a257e743..0000000000
--- a/xtrn/smm/purity-9.asc
+++ /dev/null
@@ -1,6 +0,0 @@
-Section 9:  Non sentient objects.  62 questions.
-
-      This section measures your kinkiness.  Therefore, the questions apply to
-      actions and events which occurred while you were alone, as well as those
-      which occurred while you were with someone else.
- 
diff --git a/xtrn/smm/purity-a.asc b/xtrn/smm/purity-a.asc
deleted file mode 100644
index 3218f28900..0000000000
--- a/xtrn/smm/purity-a.asc
+++ /dev/null
@@ -1,5 +0,0 @@
-Section 10:  Locality.  33 questions.
-
-This  section  tries  to  figure  out how many places you have done it. It
-applies only to those situations in which you were with someone else.
- 
diff --git a/xtrn/smm/purity-b.asc b/xtrn/smm/purity-b.asc
deleted file mode 100644
index ad61bbf6c6..0000000000
--- a/xtrn/smm/purity-b.asc
+++ /dev/null
@@ -1,2 +0,0 @@
-Section 11:  Style.  76 questions.
- 
diff --git a/xtrn/smm/purity.100 b/xtrn/smm/purity.100
deleted file mode 100644
index c97b56bea1..0000000000
--- a/xtrn/smm/purity.100
+++ /dev/null
@@ -1,100 +0,0 @@
-Had a date
-Been out on a date past 4 am
-Had a blind date
-Kissed a MOS
-Been french kissed
-Kissed a MOS in the horizontal position
-French kissed three or more MOS's in 24 hours
-Kissed a MOS in the last three months
-Necked for more than 2 hours consecutively
-Slow danced cheek-to-cheek
-Had an alcoholic drink
-Been drunk
-Driven while under the influence of alcohol or drugs
-Had a lapse of memory due to drinking or drugs
-Used alcohol or drugs to lower a MOS's resistance
-Smoked tobacco
-Smoked pot or hashish
-Used a stronger drug
-Taken 4 or more "recreational" drugs within 24 hours
-Read a pornographic book or magazine
-Seen a pornographic movie
-Seen a stripper
-Been arrested
-Been convicted of a crime
-Had an erection/clitoral erection
-Had an orgasm
-Had an orgasm in a dream
-Fondled a MOS's ass
-Caressed a MOS's thigh
-Fondled a breast or had your breast fondled
-Wrestled with a MOS
-Showered, bathed, jacuzzied, or saunaed with a MOS
-Gone coed skinny-dipping
-Gone through the motions of intercourse while fully clothed
-Spent the night in a MOS's room
-Slept in the same bed with a MOS
-Seen a naked post-pubescent MOS
-Been seen naked by a MOS after puberty
-Undressed or been undressed by a MOS
-Kissed a MOS on the breast or been kissed on the breast
-Fondled a MOS's genitals or had your genitals fondled by a MOS
-Had an orgasm due to manipulation by a MOS
-Kissed a MOS on the thigh
-Engaged in cunnilingus
-Engaged in fellatio
-Had sexual intercourse at a parents house while they were home
-Engaged in definitely sexual activity on the first date
-Masturbated
-Masturbated to a picture
-Masturbated with another person in the room
-Watched another person masturbate
-Been caught masturbating
-Simulated intercourse with an inanimate object
-Committed an act of voyeurism
-Committed an act of exhibitionism
-Massaged or been massaged by a MOS
-Unintentionally interrupted a couple in a significant state of undress
-Participated in a tickle orgy, gross out, truth or dare, etc.
-Experimented sexually before puberty
-Purchased contraceptives in a drug store
-Had sexual intercourse
-Had sexual intercourse more than 10 times
-Had sexual intercourse continuously for 1/2 hour
-Had sexual intercourse within the last 3 months
-Had sexual intercourse 3 or more times in 1 night
-Had sexual intercourse in 3 or more positions
-Had sexual intercourse in a car
-Had sexual intercourse using a condom
-Done sixty-nine
-Had sexual intercourse outdoors
-Had sexual intercourse with 3 different people
-Had sexual intercourse with a virgin
-Had sexual intercourse during menstruation
-Had sexual intercourse without using birth control
-Had sexual intercourse with 2 MOSs in 24 hours
-Had sexual intercourse in a public place
-Described a sexual experience to a separate party
-Committed statutory rape
-Been the object of travel or traveled 100 miles or more for sexual activity
-Impregnated a woman or been pregnant
-Arranged or had an abortion
-Displaced a roommate by staying with a MOS for 1 or more nights
-Shacked up with a MOS for a month or more
-Tasted semen
-Been propositioned by a prostitute or pimp
-Accepted
-Had anal intercourse
-Been tested for V.D. due to reasonable suspicion
-Had V.D.
-Picked up a strange MOS for sexual purposes
-Engaged in group sex
-Engaged in sadism or masochism for sexual enjoyment
-Been propositioned by a member of the same sex
-Accepted a proposition by a member of the same sex
-Been masturbated by a member of the same sex
-Been orally stimulated by a member of the same sex
-Committed incest
-Fondled a pre-pubescent MOS
-Engaged in transvestitism for sexual enjoyment
-Committed bestiality
diff --git a/xtrn/smm/purity.500 b/xtrn/smm/purity.500
deleted file mode 100644
index 5f389c7ea8..0000000000
--- a/xtrn/smm/purity.500
+++ /dev/null
@@ -1,511 +0,0 @@
-*PURITY-1.ASC
-Kissed a friend or stranger as a friendly gesture
-Held hands with someone
-Had a date
-Had a date past 1 a.m.
-Dated someone on a regular basis
-Picked someone up
-Been picked up
-Gone steady
-Slow danced
-Had the symptoms of Russian fingers (rushin' fingers)
-Had the symptoms of Roman hands (roamin' hands)
-Shared a bed with someone without anything steamy happening
-Given a back or neck rub or massage with no ulterior motive
-Used tickling as a pick-up get-to-know-you-better routine
-Directly asked someone if they were a virgin
-Used physical strength as a get-to-know-you-better routine
-Secretly lusted after someone without that person knowing
-Dropped subtle hints to someone hoping they would pick up on it
-Written anonymous 'love letters' to someone
-*PURITY-2.ASC
-Had an arousing dream  (Wet dreams and the like.)
-Been sexually aroused
-Uttered/muttered/yelled/screamed obscenities
-Fantasized about your instructor or teacher
-Fantasized about your lawyer, doctor, nurse, psychiatrist
-Fantasized about someone you know personally but not closely
-Fantasized about anyone and masturbated at the same time
-Read or bought pornographic periodicals
-Ever had a subscription to pornographic periodicals
-Read sexually explicit literature
-Gone skinny dipping alone
-Made obscene phone calls
-Phoned up any recorded phone sex numbers
-Phoned up any live phone sex numbers
-Stuffed your bra or stuffed your pants
-Shaved your genital pubic hair
-Shaved your genital pubic hair on a fairly regular basis
-Colored or bleached your genital pubic hair
-Shaved or shaped your genital pubic hair in a particular design
-Masturbated
-Masturbated at least five times in one twenty-four hour period
-Masturbated on a fairly regular basis of no less than once a week
-Masturbated where you could have been discovered
-Masturbated out in the wilds or in nature
-Masturbated to orgasm
-Masturbated while reading sexually explicit materials
-Masturbated while driving a *moving* land vehicle
-Masturbated while on the phone
-Masturbated while in a bathroom of the opposite sex
-Masturbated while watching an R or X-rated show
-Seen any burlesque show (Rocky Horror counts)
-Been to a peep show
-Been to a private showing of a pornographic movie
-Seen a pornographic movie in a theater
-Walked around in your room/apartment/house/habitation in nude
-Walked around in a public or semi-public area bottomless
-Bought blatant sexual objects
-Owned any erotic art pieces
-Written your own fantasies for masturbatory purposes
-Sculpted erotic/obscene artworks in food
-Eaten any erotic food items  (Chocolate tits, banana dicks)
-Sculpted erotic/obscene artworks in soap, wood, etc
-Made an X- or R-rated snowman or snowwoman
-Tasted your own orgasmic liquids
-Inserted your finger into your rectum
-Used ben-wa balls or anal beads
-Performed oral sex on yourself
-Willingly urinated on your garments while wearing them
-Willingly urinated on any part of your body
-Willingly defecated on your garments while wearing them
-Willingly defecated on yourself
-*PURITY-3.ASC
-Administered a whole Purity Test or in the process
-Taken Purity Tests of any versions more than 5 times
-Lied on any previous Purity Tests
-Exaggerated about any sexual experiences
-Gone to (or escorted someone to) a Planned Parenthood Clinic
-Broken your word, promise, or vow
-Lied to someone at someone else's request
-Lied about your sexual preference in order to avoid a date
-Written graffitti
-Plagiarized
-Shoplifted
-Stolen
-Made out a check that bounced
-Used someone else's credit card without their knowledge
-Committed breaking and entering
-Seen a snuff film
-Read someone else's diary without their knowledge or consent
-Searched someone's room without their knowledge or consent
-Told someone that you loved them when you did not
-Told someone that you loved them just for sex
-Fantasized about someone else while having sex
-Intentionally listened in on other people having sex
-Used alcohol to lower someone else's inhibitions for sex
-Used drugs to lower someone else's inhibitions for sex
-Drugged someone without their knowledge and/or consent
-Forced someone into having intimate physical relations with you
-Had dates with more than one person in the same night
-Gone steady with two or more people at the same time(secret)
-Gone steady with two or more people at the same time(known)
-Urinated on someone else intentionally	(Piss fights!)
-Urinated in object that was not designed for such purpose
-Urinated anywhere other than commonly accepted piss hole
-Urinated from higher than the fifth floor or off a bridge
-Defecated anywhere other accepted shit hole
-Stored any excretia in a refrigerator/oven
-Stored evacuated excretia in your room/apartment
-Entered a bathroom of the opposite sex- unaccompanied
-Mooned or flashed someone from the front
-Farted (audibly) in mixed company
-Streaked/flashed or exposed yourself in public
-Streaked/flashed or exposed yourself at a formal gathering
-Been arrested  (Picture taken and all)
-Received money to have sex or mutual masturbation with someone
-Given money to have sex mutual masturbation with someone
-Thought you might be or might have caused someoneto be pregnant
-Bought a home pregnancy test
-Bought condoms
-Borrowed/stolen/taken birth control devices from someone else
-Had or given someone an unwanted pregnancy
-Lied about being pregnant or about having made someone pregnant
-Had sex while either you or your partner were under age
-Thought you had VD
-Had VD of any sort (VD/STD's/the clap/crabs/herpes/etc.)
-Had an AIDS test due to reasonable suspicion or imagination
-Given a sympathy fuck
-Initiated sex with someone for the sake of sex only
-Willingly committed incest
-Committed adultery
-Bought lingerie/undergarments of the opposite sex
-Stolen the underwear of someone you knew not for joke
-Intentionally taken a stranger's underwear
-*PURITY-4.ASC
-Had an alcoholic drink
-Been intoxicated
-Thrown up from having drunk too much alcohol
-Passed out due to having drunk too much alcohol
-Forgotten events that occurred while you were drunk
-Smoked tobacco	(cigarette/pipe/cigar/hookah)
-Chewed tobacco	(snuff)
-Bought controlled/illicit drugs in violation of the law
-Sold or re-sold controlled/illicit substances
-Taken stimulants
-Taken depressants excluding alcohol
-Inhaled nitrous oxide while not visiting a dentist
-Inhaled anything containing butyl nitrate
-Used a commercial aphrodisiac
-Taken valium
-Smoked marijuana/sensemilia
-Smoked marijuana/sensemilia more than four times
-Eaten marijuana/sensemilia
-Eaten marijuana or sensemilia more than four times
-Taken opiate in any form
-Taken opiate in any form more than twice
-Used cocaine
-Used cocaine more than four times
-Injected any drugs into your body other than medical
-Injected any illegal drug into your body more than twice
-Taken Ecstasy/X
-Taken PCP
-Taken PCP more than twice
-Taken LSD-25, peyote or psilocybin
-Taken LSD/peyote or psilocybin more than twice
-Taken LSD more than six times
-Deliberately injured yourself so as to obtain medication
-Played any games in which drugs were the prize
-Gone to class or work while under the influence of drugs
-Mixed drugs (alcohol counts)
-Sold possessions in order to obtain drugs
-Had sex while under the influence of nitrous
-Had an orgasm while under the influence of nitrous
-Had sex while under the influence of cocaine
-Had sex while under the influence of marijuana/sensemilia
-Had sex while under the influence of Ecstasy/X
-Had sex while under the influence of LSD/peyote or psilocybin
-Had sex while under the influence with a unknowing partner
-*PURITY-5.ASC
-Propositioned someone for necking or petting
-Propositioned someone for sex/oral sex or mutual masturbation
-Pinched or patted someone else's buttocks
-French kissed
-Been kissed below the neck but not including arms or hands
-Kissed someone else below the neck not including arms or hands
-Necked
-Petted above the waist
-Petted below the waist
-Kissed on the first date
-Necked on the first date
-Petted above the waist on the first date
-Petted below the waist on the first date
-Given a hickey
-Received a hickey
-Worn specific clothes for the purpose of hiding hickeys
-Fondled or stroked someone else's clothed legs
-Fondled or stroked someone else's bare legs
-Fondled or stroked someone else's frontal chest/torso region
-Had your frontal chest/torso region fondled or stroked
-Been involved with pelvic thrusting while fully clothed
-Had your fingers licked or sucked
-Had your ear or ear region licked/sucked, or nibbled
-Licked, breathed onto, sucked, or nibbled an ear or ear region
-Licked or sucked someone else's finger(s)
-Fondled someone who was asleep
-Given a back massage with ulterior motives
-Given a back massage that led to something steamier
-Seen someone completely nude when under good light conditions
-Been seen nude by someone else under good lighting conditions
-Been in someone's company while both were completely nude
-Bathed or showered with someone
-Let someone else wash you when you were capable of doing it
-Gone skinny dipping in mixed company
-Been involved with the fondling of a woman's clothed breast
-Been involved with the fondling of a woman's bare breast
-Licked, sucked, or nibbled on someone else's nipple
-Had your nipple licked, sucked, or nibbled upon
-Petted/fondled or otherwise handled someone's covered genitals
-Had your covered genitals petted/fondled or handled
-Petted/fondled or otherwise handled someone's bare genitals
-Had your bare genitals petted/fondled or otherwise handled
-Had an orgasm while petting
-Given your partner an orgasm while petting
-Given finger scratch marks
-Received finger scratch marks
-Drawn blood by scratching during sex
-Drawn blood by biting during sex
-Given or received *scars* from scratches or bites during sex
-Performed oral sex
-Received oral sex
-Swallowed semen, or licked female liquids off of fingers
-Done sixty-nine
-Performed mutual masturbation
-Had sex  (No need for orgasm; penetration counts.)
-Had sex on the first date
-Had sex without the use of birth control devices
-Had sex with a virgin  (Not yourself.)
-Had sex with someone whose name you did not know
-Had sex with someone whose face you never saw
-Had sex with someone with a 20 year age difference
-Had sex with someone not of your own race
-Had sex with a religious officiary
-*PURITY-6.ASC
-Held hands or otherwise displayed public affection
-Kissed someone on the lips
-French kissed someone
-Necked
-Petted
-Received manual sex
-Given manual sex
-Received oral sex
-Given oral sex
-Had sex
-Had sex with a virgin  (not yourself.)
-Had sex with someone with age difference of more than 20 years
-Had anal sex
-Been involved in fist-fucking
-Done 69  (simultaneous oral sex.)
-Propositioned someone for sex, oral sex, or mutual masturbation
-Yielded willingly to a proposition from someone for sex/oral sex
-Had sex with someone whose name you didn't know
-Had sex with someone whose face you never saw
-Been a participant in a who's-physically-better-equipped contest
-Been a judge in a contest such as above
-Gave money or favors for sex, oral sex, or mutual masturbation
-Received money or favors for sex/oral sex or mutual masturbation
-Fondled someone who was asleep
-Attempted to seduce someone
-Allowed yourself to be seduced
-Had an orgasm while petting
-Gave your partner an orgasm while petting
-Had an orgasm at all
-Had sex/oral sex or mutual masturbation with more than 10 people
-Stroked or fondled the clothed legs of someone
-Stroked or fondled the bare legs of someone
-Stroked or fondled the clothed chest/torso region of someone
-Stroked or fondled the bare chest/torso region of someone
-Fondled or handled the clothed genitals of someone else
-Stroked/fondled or handled the bare genitals of someone else
-Had sex/mutual masturbation with someone not of your own race
-Been in a menage-a-trois of people of the same sex
-Been involved in group sex/with all participants of the same sex
-*PURITY-7.ASC
-Been decidedly heterosexual
-Been decidedly homosexual
-Been decidedly bisexual
-Practiced bestiality (avec les animaux)
-Practiced transvesticism
-Practiced sadism
-Practiced masochism
-Practiced bondage
-Practiced domination
-Practiced submission
-Practiced sodomy (anal intercourse)
-Practiced cocrophilia (a marked interest in excrement)
-Practiced frotteurism
-Practiced infantilism(a dependency on diapers)
-Practiced klismaphilia (a dependency on being given an enema)
-Practiced necrophilia (copulation with a corpse)
-Practiced mysophilia (a dependency on something soiled)
-Practiced scoptophilia ( as in voyeurism)
-Practiced urophilia (being responsive to urine )
-Practiced role-playing
-Owned an underwear collection of underwear not belonging to you
-Been a foot fetishist to any degree
-Been a leather fetishist to any degree
-Been a rubber/latex fetishist to any degree
-Been a voyeur
-Been an exhibitionist
-Listened to dirty jokes in mixed company
-*PURITY-8.ASC
-Told dirty jokes in mixed company
-Discussed masturbation
-Watched a porn movie in mixed company
-Watched a porn movie with your own or someone else's parents
-Played a game which may require you or others to disrobe
-Played a game which may require you to perform action on others
-Been in contact with more than one person while all were nude
-Had oral sex with more than 10 people (not nec. at one time)
-Had sex with more than 10 people  (not necessarily at one time)
-Had sex with more than 1 person in a 24 hour period
-Had sex with both genders in a 24 hour period
-Been in a menage-a-trois (MFM OR FMF)
-Walked in on others having sex (oops) and then joined in
-Had sex or oral sex with a person and his/her parent
-Had sex/mutual masturbation, with a person and his/her sibling
-Been involved in a two (or more) in one
-Been involved in a gang bang
-Been in a circle of fuck
-Been in a 69 circle
-Been to a (cooking, baby, Wesson) oil party
-Played naked Twister [tm] (with or without oil)
-Participated in a hetro orgy or been involved in group sex
-Participated in a bisexual orgy or group sex
-Propositioned a person or group of people for group sex
-Been propositioned for group sex
-Participated in a fuck-a-thon
-*PURITY-9.ASC
-Used a foreign object or something for masturbation
-Masturbated using the aid of food
-Eaten the food used in masturbation after masturbation
-Eaten a lab dissection
-Inserted food into your or someone else's anus
-Eaten food after it was extracted from your or someone's anus
-Received an enema for a purpose other than medical
-Received an enema consisting on a non-normal enema solution
-Actually measured your own or someone else's penis
-Used a mechanical device in aiding or replacing masturbation
-Used a feather or other device for the purpose of tickling
-Used tickling as a form of *arousal*
-Used ice for sexual purposes
-Used ice for something frozen as a dildo
-Used a strap-on dildo or male extension sheath
-Used whipped cream for sexual purposes
-Used hot/melted wax for sexual purposes
-Had sex in front of or under a mirror
-Put food on your partner's body, and then eaten it
-Used household syrup/etc or any like substance for sex purposes
-Used ropes, cuffs or any other such device for bondage purposes
-Used a whip, cat-o-nine-tails, or something similar for pain
-Worn edible underwear/lingerie
-Eaten edible underwear/lingerie off of someone
-Worn a leather or rubber suit
-Worn diapers for a sexual or masturbatory purpose
-Been diapered by someone else for a sex or masturbatory purpose
-Used a ball gag or other manufactured gag
-Worn a collar and/or leash
-Been completely tied down (spreadeagled, hogtied, etc.)
-Tied someone down completely
-Had sex while you or your partner was tied up
-Used nipple clips (clothespins count)
-Pierced a part of your body other than your ears or nose
-Found a prepubescent child sexually attractive/arousing
-Had sexual contact of any kind with a prepubescent child
-Used an inflatable doll
-Humped an inanimate object like a pillow, banana, etc
-Had sex or oral sex with a dead person
-Inserted a small animal or creature into your rectum
-Had sex or oral sex with your (dead) dinner animal
-Watched animals having sex
-Been aroused by the sight of animals having sex
-Attempted to have sex with a live animal, but failed
-Had sex/oral sex or (mutual) masturbation with smallish animal
-Had sex/oral sex or masturbation with domesticated farm animal
-Mutilated or killed any living animal for your pleasures
-Had sex with a live animal  (Any size.)
-Received oral sex from a live animal  (Any size.)
-Gave oral sex to a live animal	(Any size.)
-Had sex or (mutual) masturbation with a animal more than once
-Had sex or masturbation with an animal in presence of others
-Cross dressed in the *undergarments* of the opposite sex
-Cross dressed in presence of others
-Stuffed your pants or bra while you were cross-dressed
-Had your head inserted into a urinal or toilet bowl willingly
-Worn groinal underwear on your head  (Panties/jock-strap/etc.)
-Inserted a  piece of groinal underwear into your mouth
-Deliberately sniffed or smelled a piece of groinal underwear
-Been gagged with someone's underwear  (not your own)
-Played in or with shit
-Worn or used a used condom or feminine hygiene contraption
-*PURITY-A.ASC
-Necked or petted in a place of religion
-Had sex or been involved in a place of religion
-Necked or petted in a place of the dead (mortuary)
-Had sex or been involved in oral sex in a place of the dead
-Necked or petted in a contraption of the dead (hearse/etc)
-Had sex in a contraption of the dead
-Had sex in/on a construction site (house, office, etc.)
-Necked or petted in a vehicle of LESS  THAN 30,000 pounds net
-Had sex in a vehicle of LESS THAN 30,000 pounds net
-Necked or petted in a vehicle of MORE THAN 30,000 pounds net
-Had sex in a vehicle of MORE THAN 30,000 pounds net
-Had sex in a land-based, non road dependant vehicle
-Necked in a water, manual powered vehicular transport medium
-Petted in a water/wind or prop driven transport medium
-Had sex in a water/wind driven transport MORE THAN 80 feet
-Had sex or oral sex in an aircraft
-Had sex in a household room other than a bedroom
-Had sex on the floor (but not the roof)
-Had sex on any furniture that is indoors but not a bed or table
-Had sex telephone booth, voting booth/etc
-Had sex in an elevator, people-mover, escalator, dumbwaiter
-Had sex up a tree but not in a tree house or similar structure
-Had sex in a suspension device of some kind (hammock)
-Had sex on the roof of a building in excess of 5 floors
-Had sex within the confines of a hedge, bush/etc
-Had sex, oral sex, or mutual masturbation in the snow
-Had sex in a place with the ambient temperature below freezing
-Had sex in a place where you could have been discovered
-Had sex in a water-filled bathtub, hot tub/etc
-Had sex, oral sex, or mutual masturbation in a body of water
-Had sex on the beach
-Had sex or mutual masturbation in a bathroom of the opposite sex
-Gone to a motel for the sole purpose of having sex
-*PURITY-B.ASC
-Watched while someone else masturbated
-Been watched while masturbating
-Orgasmed on somebody
-Orgasmed in somebody (male) or in you (female)
-Had more than one person orgasm on you at once
-Used  a penis as a leash or bludgeoning device
-Been involved in oxygen deprivation for sexual enhancement
-Willingly made video tapes or  pictures taken while having sex
-Physically watched others having sex
-Watched your partner of choice having sex with someone else
-Taken pictures of your partner having sex with someone else
-Willingly made audio recordings while having sex
-Talked dirty while having sex, oral sex, or mutual masturbation
-Intentionally made more noise than necessary while having sex
-Intentionally made 'animal' noises during sex
-Had a pet walk over you or your partner while during sex
-Had a general emergency arise while you were steeped in sex
-Had your sexual technique/style/skill openly praised by someone
-Taken nude pictures of someone else
-Had nude pictures of you taken
-Placed a personal ad
-Answered a personal ad
-Been involved in breast fucking  (The Hawaiian Muscle Fuck)
-Participated in fist-fucking  (see 'Caligula')
-Shaved someone's pubic hair (or had yours) as part of sex
-Had sex for more than three hours in a single session of sex
-Been bruised during sex, oral sex, or mutual masturbation
-Bruised someone else during sex, oral sex, or mutual masturbation
-Been injured during sex, oral sex, or mutual masturbation
-Orgasmed more than three times in one session of sex
-Had sex so many times or for so long that one involved runs dry
-Disturbed other people by making excessive noise during sex
-Had sex or received oral sex while you were driving
-Had sex doggie fashion
-Had sex in the female superior position
-Had sex sitting up
-Had sex standing up
-Had sex upside-down
-Gone through several sexual positions without need for re-entry
-Fallen asleep during sex
-Woken up to someone having sex with you
-Had sex while one person was passed out or unconscious
-Given or received a hickey on your upper inner thigh
-Been on the receiving of anal sex
-Been on the ramming end of anal sex (a dildo counts)
-Had sex more than 10 times with 1 person
-Had sex more than 5 times in a 24 hour period
-Had sex more than 10 times in a 24 hour period
-Had sex while someone other than your partner was watching
-Had sex while one or both were playing a musical instrument
-Performed oral sex after intercourse without washing or douching
-Kissed your partner on the lips after oral sex without rinsing
-Inflicted pain during sex
-Been involved in cunnilingus during the woman's period
-Had sex during the woman's period
-Foot masturbated someone
-Been foot masturbated
-Tongue bathed someone
-Been tongue bathed
-Licked or sucked on someone else's feet and/or toes
-Had your feet and/or toes licked or sucked by someone else
-Licked someone's anus
-Licked someone's anus while they were defecating
-Performed oral sex while the person was urinating
-Drank your own urine
-Tasted or drank someone else's urine
-Drank/drained an entire bladder-full of someone else's urine
-Drank human blood
-Tasted someone else's nasal mucous
-Been involved in a golden shower
-Swallowed your partner's orgasmic secretions
-Used the Purity Test as a checklist of things you could do
-Ever done something for purpose of lowering your Purity score
-Bought/read books to enhance sexual technique
-Participated in Purity Testing with an ulterior motive
-Become interested in person after hearing their Purity score
diff --git a/xtrn/smm/purity.asc b/xtrn/smm/purity.asc
deleted file mode 100644
index 3aae420c00..0000000000
--- a/xtrn/smm/purity.asc
+++ /dev/null
@@ -1,31 +0,0 @@
-nch                            THE UNISEX, OMNISEXUAL
-
-y                            P U R I T Y    T E S T
-nc_______________________________________________________________________________
-
-                   rhiWARNINGnrh: THIS TEST MAY EASILY OFFEND YOU
-
-chInstructions for Use:
-nc
-This is a fairly long test consisting of hone hundred questionsnc.  It starts out
-tame and gets progressively worse (or better, depending on your viewpoint).
-
-hDefinitions
-nc
-Any references to hMOSnc are references to a hMncember of the hOncpposite hSncex.
-
-All questions in this test pertain to events that have happened to you
-subsequent to your weaning and babyhood/infancy.  Anything that may have
-happened before that time is considered not standing and void.
-
-The term mutual masturbation refers to someone masturbating you AND/OR you
-masturbating someone else, not exclusively both at the same time.
-
-We would also like to define having sex in the homosexual case; homosexual sex
-has occurred when both partners are of the same sex and one of the partners has
-an orgasm while there is some contact between the genitals of both partners.
-
-We would now like to bring to your attention that there is no passing nor
-failing score.  Therefore, one really shouldn't worry too much about getting a
-high score...  even if you do get giggled at for the rest of your life.
-
diff --git a/xtrn/smm/purity.que b/xtrn/smm/purity.que
deleted file mode 100644
index c97b56bea1..0000000000
--- a/xtrn/smm/purity.que
+++ /dev/null
@@ -1,100 +0,0 @@
-Had a date
-Been out on a date past 4 am
-Had a blind date
-Kissed a MOS
-Been french kissed
-Kissed a MOS in the horizontal position
-French kissed three or more MOS's in 24 hours
-Kissed a MOS in the last three months
-Necked for more than 2 hours consecutively
-Slow danced cheek-to-cheek
-Had an alcoholic drink
-Been drunk
-Driven while under the influence of alcohol or drugs
-Had a lapse of memory due to drinking or drugs
-Used alcohol or drugs to lower a MOS's resistance
-Smoked tobacco
-Smoked pot or hashish
-Used a stronger drug
-Taken 4 or more "recreational" drugs within 24 hours
-Read a pornographic book or magazine
-Seen a pornographic movie
-Seen a stripper
-Been arrested
-Been convicted of a crime
-Had an erection/clitoral erection
-Had an orgasm
-Had an orgasm in a dream
-Fondled a MOS's ass
-Caressed a MOS's thigh
-Fondled a breast or had your breast fondled
-Wrestled with a MOS
-Showered, bathed, jacuzzied, or saunaed with a MOS
-Gone coed skinny-dipping
-Gone through the motions of intercourse while fully clothed
-Spent the night in a MOS's room
-Slept in the same bed with a MOS
-Seen a naked post-pubescent MOS
-Been seen naked by a MOS after puberty
-Undressed or been undressed by a MOS
-Kissed a MOS on the breast or been kissed on the breast
-Fondled a MOS's genitals or had your genitals fondled by a MOS
-Had an orgasm due to manipulation by a MOS
-Kissed a MOS on the thigh
-Engaged in cunnilingus
-Engaged in fellatio
-Had sexual intercourse at a parents house while they were home
-Engaged in definitely sexual activity on the first date
-Masturbated
-Masturbated to a picture
-Masturbated with another person in the room
-Watched another person masturbate
-Been caught masturbating
-Simulated intercourse with an inanimate object
-Committed an act of voyeurism
-Committed an act of exhibitionism
-Massaged or been massaged by a MOS
-Unintentionally interrupted a couple in a significant state of undress
-Participated in a tickle orgy, gross out, truth or dare, etc.
-Experimented sexually before puberty
-Purchased contraceptives in a drug store
-Had sexual intercourse
-Had sexual intercourse more than 10 times
-Had sexual intercourse continuously for 1/2 hour
-Had sexual intercourse within the last 3 months
-Had sexual intercourse 3 or more times in 1 night
-Had sexual intercourse in 3 or more positions
-Had sexual intercourse in a car
-Had sexual intercourse using a condom
-Done sixty-nine
-Had sexual intercourse outdoors
-Had sexual intercourse with 3 different people
-Had sexual intercourse with a virgin
-Had sexual intercourse during menstruation
-Had sexual intercourse without using birth control
-Had sexual intercourse with 2 MOSs in 24 hours
-Had sexual intercourse in a public place
-Described a sexual experience to a separate party
-Committed statutory rape
-Been the object of travel or traveled 100 miles or more for sexual activity
-Impregnated a woman or been pregnant
-Arranged or had an abortion
-Displaced a roommate by staying with a MOS for 1 or more nights
-Shacked up with a MOS for a month or more
-Tasted semen
-Been propositioned by a prostitute or pimp
-Accepted
-Had anal intercourse
-Been tested for V.D. due to reasonable suspicion
-Had V.D.
-Picked up a strange MOS for sexual purposes
-Engaged in group sex
-Engaged in sadism or masochism for sexual enjoyment
-Been propositioned by a member of the same sex
-Accepted a proposition by a member of the same sex
-Been masturbated by a member of the same sex
-Been orally stimulated by a member of the same sex
-Committed incest
-Fondled a pre-pubescent MOS
-Engaged in transvestitism for sexual enjoyment
-Committed bestiality
diff --git a/xtrn/smm/que.lst b/xtrn/smm/que.lst
deleted file mode 100644
index 95018ef15d..0000000000
--- a/xtrn/smm/que.lst
+++ /dev/null
@@ -1,12 +0,0 @@
-BASIC
-Basic Personality
-0
-APPEAR
-Appearance
-0
-MATERIAL
-Material
-0
-ADULT
-Adult Sexuality
-18
diff --git a/xtrn/smm/smm.can b/xtrn/smm/smm.can
deleted file mode 100644
index 503ab7da42..0000000000
--- a/xtrn/smm/smm.can
+++ /dev/null
@@ -1,4 +0,0 @@
-l
-p
-digital man
-fuck
diff --git a/xtrn/smm/smm.cfg b/xtrn/smm/smm.cfg
deleted file mode 100644
index 334011d05e..0000000000
--- a/xtrn/smm/smm.cfg
+++ /dev/null
@@ -1,22 +0,0 @@
-18
-15
-0
-
-
-
-
-0
-0
-30
-1
-
-0
-0
-0
-0
-0
-%!dsz portx %u,%i sz %f
-0
-
-
-90
diff --git a/xtrn/smm/smm.doc b/xtrn/smm/smm.doc
deleted file mode 100644
index 37939ac625..0000000000
--- a/xtrn/smm/smm.doc
+++ /dev/null
@@ -1,594 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-     Synchronet Match Maker  Version 2.10  Copyright 1996 Digital Dynamics
-     -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-
-	       "Perhaps the most comprehensive Match Maker ever."
-
-
-Synchronet Installation (if you are using Synchronet BBS Software)
-==================================================================
-
-Synchronet Match Maker (SMM) comes pre-installed in Synchronet BBS v2.1 and
-later. If match maker has been pre-installed in your system, see the file
-UPGRADE.DOC for details on installing a newer version over an older version
-(upgrading).
-
-Create the following sub-directory off of your main Synchronet directory
-(e.g. C:\SBBS):
-
-XTRN\SMM	(The XTRN directory should already exist)
-
-(example: C:\SBBS\XTRN\SMM)
-
-Copy the files included in the archive or on the floppy disk into this
-directory. The DEMO and registered versions of this program are identical.
-The registration number must be obtained from Digital Dynamics and entered
-into the Match Maker configuration program (SMMCFG) to convert the DEMO into
-a registered copy.
-
-Licenses for registered use of Synchronet Match Maker are sold separately from
-Synchronet BBS Software. Once a registration number has been issued, no refunds
-or returns of Synchronet Match Maker will be accepted.
-
-Run SCFG (Synchronet Configuration Program) and add the Match Maker to one
-of your External Program Sections and configure as follows:
-
-	����������������������������������������������������������ͻ
-	�		   Synchronet Match Maker		   �
-	����������������������������������������������������������͹
-	� �Name 		      Synchronet Match Maker	   �
-	� �Internal Code	      SMM			   �
-	� �Start-up Directory	      ..\XTRN\SMM		   �
-	� �Command Line 	      smm			   �
-	� �Clean-up Command Line				   �
-	� �Multiple Concurrent Users  Yes			   �
-	� �Intercept I/O Interrupts   No  <-- Important 	   �
-	� �Swap BBS out of Memory     Yes			   �
-	� �Modify User Data	      Yes			   �
-	� �Execute on Event	      No			   �
-	� �BBS Drop File Type	      Synchronet      XTRN.DAT	   �
-	� �Place Drop File In	      Node Directory		   �
-	����������������������������������������������������������ͼ
-
-If you wish to have old profile entries and wall writings automatically deleted
-from your match maker, you will need to run the SMMUTIL program periodically to
-remove profiles that haven't been updated in a certain number of days
-(specified on the SMMUTIL command line). To set up a timed event in SCFG->
-External Programs->Timed Events for SMMUTIL:
-
-    ��������������������������������������������������������������������ͻ
-    �			      SMMUTIL Timed Event			 �
-    ��������������������������������������������������������������������͹
-    � �Internal Code		       SMMUTIL				 �
-    � �Start-up Directory	       ..\XTRN\SMM			 �
-    � �Command Line		       smmutil 90 7 > SMMSTATS.TXT	 �
-    � �Execution Node		       1				 �
-    � �Execution Days		       Sun Mon Tue Wed Thu Fri Sat	 �
-    � �Execution Time		       00:00				 �
-    � �Requires Exclusive Execution    Yes				 �
-    � �Force Users Off-line For Event  No				 �
-    ��������������������������������������������������������������������ͼ
-
-This would have SMMUTIL remove all profiles that haven't been updated in the
-past 90 days and all wall writings older than 7 days.
-
-It will also create the file SMMSTATS.TXT in your XTRN\SMM directory with
-detailed statistics on the demographics of the current SMM profile database.
-You may want to make this file available for download or as a viewable bulletin
-on your BBS.
-
-If you are currently on DOVE-Net or FidoNet and you carry the "Synchronet Data"
-(SYNCDATA) message area and wish to link your match maker database with other
-BBSs through this message area, set up the following two Timed Events in SCFG:
-
-    ��������������������������������������������������������������������ͻ
-    �			      SMB2SMM Timed Event			 �
-    ��������������������������������������������������������������������͹
-    � �Internal Code		       SMB2SMM				 �
-    � �Start-up Directory	       ..\XTRN\SMM			 �
-    � �Command Line		       smb2smm %jsubs\syncdata smm.dab	 �
-    � �Execution Node		       1				 �
-    � �Execution Days		       Sun Mon Tue Wed Thu Fri Sat	 �
-    � �Execution Time		       00:00				 �
-    � �Requires Exclusive Execution    No				 �
-    � �Force Users Off-line For Event  No				 �
-    ��������������������������������������������������������������������ͼ
-
-    ��������������������������������������������������������������������ͻ
-    �			      SMM2SMB Timed Event			 �
-    ��������������������������������������������������������������������͹
-    � �Internal Code		       SMM2SMB				 �
-    � �Start-up Directory	       ..\XTRN\SMM			 �
-    � �Command Line		       smm2smb smm.dab %jsubs\syncdata	 �
-    � �Execution Node		       1				 �
-    � �Execution Days		       Sun Mon Tue Wed Thu Fri Sat	 �
-    � �Execution Time		       00:00				 �
-    � �Requires Exclusive Execution    No				 �
-    � �Force Users Off-line For Event  No				 �
-    ��������������������������������������������������������������������ͼ
-
-Change "syncdata" in the above examples to the internal code you have used
-for the "Synchronet Data" echo. Also, if you are not running v2.1+ of
-Synchronet, you must specify the full path to the DATA directory instead of
-using the %j. If your "Synchronet Data" echo is stored on a different
-drive or in a different directory than SBBS, then you must specify that drive
-and path on the above command lines.
-
-To get your match maker database active immediately, you may want to reset
-your message pointers for the "Synchronet Data" echo on your hub BBS. If
-using QWKnet, you would accomplish this by posting the message in the
-"Synchronet Data" echo on your BBS to "SBBS" with a title of "RESET". The
-message body does not matter.
-
-Swapping
---------
-If you get memory allocation errors during the execution of any of the above
-event command lines, add that program name to your Global Swap List in SCFG.
-
-DOOR.SYS BBS Installation (if you are using BBS software OTHER than Synchronet)
-===============================================================================
-
-Your BBS software must be able to create the industry standard DOOR.SYS drop
-file (35 lines or more). If you wish to charge credits for specific match maker
-functions (adding profile, sending telegrams, etc) your BBS software must be
-able to READ BACK in the modified DOOR.SYS drop file (e.g. GAP BBS software).
-Credits are read from line 31 of the DOOR.SYS file (in K) and credits used
-while in SMM are written to line 30 of the DOOR.SYS (in K) and total credits
-after adjustment (in K) are written back to line 31 of the DOOR.SYS. Since the
-DOOR.SYS format only supports one set of flags (line 23), flag set 1 will be
-the only valid flag set to use for the security options in SMMCFG (i.e. flag
-sets 2-4 will not be used).
-
-Create a directory for Synchronet Match Maker (SMM) and copy all the files
-into it (example: C:\BBS\DOORS\SMM).
-
-Copy the files included in the archive or on the floppy disk into this
-directory. The DEMO and registered versions of this program are identical.
-The registration number must be obtained from Digital Dynamics and entered
-into the Match Maker configuration program (SMMCFG) to convert the DEMO into
-a registered copy.
-
-Once a registration number has been issued, no refunds or returns of Synchronet
-Match Maker will be accepted.
-
-If you are running a multinode BBS, you will need to have the DOOR.SYS created
-in a separate directory for each node (i.e. NOT the directory where SMM has
-been installed). This will prevent drop file collisions if two users enter SMM
-at the same time. The complete path to the DOOR.SYS must be specified on the
-command line, so each node must have a different path specified. Example:
-
-Node 1 Command Line:	SMM C:\BBS\NODE1\DOOR.SYS
-Node 2 Command Line:	SMM C:\BBS\NODE2\DOOR.SYS
-
-SHARE must be loaded in your CONFIG.SYS or AUTOEXEC.BAT for SMM to function
-(in single node or multinode environments).
-
-If non-standard IRQs or I/O addresses are used, they must be specified on the
-SMM command line using the Command Line Options. IRQs 2-15 are fully supported.
-Shared IRQs are not supported in UART mode.
-
-16550 FIFO buffered UARTs are detected and enabled.
-
-DTE rates up to 115200 baud are supported (higher with proprietary hardware).
-
-Command Line Options:
-====================
-
-Command line options override the values (if present) in the DOOR.SYS file.
-No command line options are required when used with Synchronet BBS software.
-
-	/P#	Set the COM port (0=local only) (normally not necessary)
-
-		Example: /P1 to specify COM1
-			 /P0 to specify no COM port (local use)
-
-	/C#	Set the COM port type or I/O (D:DigiBoard, F:FOSSIL, E:EBIOS)
-
-		Example: /CF to specify FOSSIL
-			 /C3e8 to specify I/O address 3e8 (hexadecimal)
-
-	/I#	Set the COM port IRQ or channel (only required if non-standard)
-
-		Example: /I5 to specify IRQ 5
-			 /I0 to specify FOSSIL/Digi Channel 0
-
-	/R#	Set the COM port DTE rate (normally not necessary)
-
-		Example: /R57600 to specify a DTE rate of 57600 baud
-
-	/T#	Set time-slice APIs supported (default: DESQview if detected)
-
-		Example: /T1 to use INT28 time-slice API
-			 /T2 to use Win/OS2 time-slice API
-			 /T4 to disable DESQview detection and time-slice API
-
-If a user name is specified on the command line, that user's profile will be
-automatically looked up and displayed.
-
-	Example (Synchronet): SMM JOHN DOE
-
-	Example (non-Synchronet): SMM C:\BBS\NODE1\DOOR.SYS JOHN DOE
-
-The current directory MUST be the directory where SMM has been installed
-(e.g. C:\BBS\DOORS\SMM) when SMM is executed. Some non-Synchronet BBS packages
-may require a batch file to change drive and/or directory before running SMM
-and may require the same batch file re-load the BBS software. Example:
-
-	@ECHO OFF
-	CD \BBS\DOORS\SMM
-	SMM \BBS\NODE1\DOOR.SYS
-	REM The following may not be necessary with some BBS packages
-	CD \BBS\NODE1
-	BBS
-
-Configuration
-=============
-
-SMMCFG
-------
-SMMCFG.EXE is used to modify your SMM.CFG (Configuration) file. Hitting the F1
-key will display a help page on the currently selected menu or option.
-
-	����������������������������������������������������������ͻ
-	�	    Synchronet Match Maker Configuration	   �
-	����������������������������������������������������������͹
-	� �System Name				    MY BBS	   �
-	� �Wall Security...					   �
-	� �Profile Database Security... 			   �
-	� �Credit Cost for Adding Profile	    0k		   �
-	� �Credit Cost for Sending Telegram	    0k		   �
-	� �Credit Cost for Writing on the Wall	    0k		   �
-	� �Credit Cost for Reading Questionnaire    0k		   �
-	� �Minimum Level to Send Telegrams	    0		   �
-	� �Minimum Level to Read Questionnaires     0		   �
-	� �Sysop Level				    90		   �
-	� �Minor Segregation (Protection) Age	    Disabled	   �
-	� �Auto-Update Profiles 		    30		   �
-	� �Notify User of Activity		    1		   �
-	� �Use Metric System			    No		   �
-	� �Zmodem Send Command			    %!dsz portx %u,�
-	� �Local Photo Viewer			    dvpeg %f	   �
-	� �Registration Number			    UNREGISTERED   �
-	����������������������������������������������������������ͼ
-
-System Name
------------
-The most important option in this program is your System Name (BBS Name). If
-you are running Synchronet BBS Software, this option does not have to be set
-here (it is automatically passed to SMM in the XTRN.DAT drop file from
-Synchronet). If it is set, it will override the name specified in SCFG->System
-->BBS Name.
-
-If you have registered SMM for non-Synchronet BBS Software, this option must be
-set to the exact BBS name you registered SMM for (not case sensitive).
-
-Once you have setup SMM and your BBS users have entered their profiles, it is
-important that you DO NOT change your BBS name, or you will lose those
-profiles (and likely upset your users). If you are networking your match maker
-database with other BBSs, it is important that you do not have the same System
-Name as another BBS in the network. Only the first 25 characters of the BBS
-name are used and every BBS in an SMM network must have a unique BBS name. Your
-System Name (configured in SMMCFG) does not have to match your actual BBS name
-(as configured in your BBS software). This allows you to change your System
-Name for match maker networks where your real BBS name is already in use.
-
-Profile Database Security
--------------------------
-	�����������������������������������������������ͻ
-	�	    Profile Database Security		�
-	�����������������������������������������������͹
-	� �Minimum User Age to Add Profile	     15 �
-	� �Minimum User Age to Take Purity Test      18 �
-	� �Minimum Security Level to Add Profile     30 �
-	� �Required Flags (Set 1) to Add Profile	�
-	� �Required Flags (Set 2) to Add Profile	�
-	� �Required Flags (Set 3) to Add Profile	�
-	� �Required Flags (Set 4) to Add Profile	�
-	�����������������������������������������������ͼ
-
-The Profile Database Security sub-menu allows you to define who can add
-profiles by security level, age, and flags as well as the minimum age for
-the purity test. Flag sets 2-4 are used only with Synchronet BBS software.
-
-Minimum Levels
---------------
-From the SMMCFG main menu you can change the minimum levels required to
-send telegrams, write on the wall, read questionnaires, and perform sysop
-functions.
-
-Minor Segregation (Protection) Age
-----------------------------------
-This option separates all users into Minors (those users below the specified
-age) and Adults (those users at or above the specified age). When this option
-is used, adults cannot see minors' profiles or send them telegrams (and vice
-versa). This feature does not keep adult users on other non-segregated
-networked BBSs from sending telegrams to minors on your BBS (or minors on other
-BBSs from sending telegrams to adults on your BBS) - this can lead to confusion
-among users receiving telegrams from users that don't appear to be in the
-database (due to segregation on your system). This option is disabled by
-default.
-
-Auto-Update Profiles
---------------------
-This option allows you to change the number of days between automatic
-profile updates across a match maker network. Normally a user's profile will
-not be sent out across the network unless the user makes a change to their
-profile. This option allows you to have their profile automatically sent
-every so many days as long as the user is active in the match maker (enters
-the match maker and uses it). This is useful for keeping profile databases
-up-to-date across the network as new systems come online. Setting this option
-to 0 disables this feature. The default value (30) should be fine for most
-configurations.
-
-Notify User of Activity
------------------------
-This is the number of the user who will be notified of match maker activity
-(profiles added, telegrams sent, wall writings, etc). Normally this option will
-be set to 1 (for user #1, the sysop). Setting this option to 0 disables this
-feature.
-
-Use Metric System
------------------
-If you want all heights and weights to be displayed in centimeters and
-kilograms instead of inches and pounds, set this option to "Yes". Since all
-measurements are internally stored in inches and pounds, those (English)
-measurements are the most accurate. Some measurements may change slightly
-when converting from metric to English and back.
-
-Zmodem Send Command
--------------------
-This is the command line to execute to send a file via Zmodem to the remote
-user. The default command line (%!dsz portx %u,%i sz %f) should work for most
-system configurations (assuming DSZ is in your Synchronet EXEC directory or
-DOS search path and using UART serial ports on all nodes). The percent codes
-in the command line are called "Command Line Specifiers" and are explained
-later in this document.
-
-Local Photo Viewer
-------------------
-This is the command line to execute to view photos when running SMM locally.
-The percent codes in the command line are called "Command Line Specifiers" and
-are explained later in this document.
-
-Command Line Specifiers
------------------------
-%A	User name
-%B	Baud (DTE) Rate
-%C	Connect (DCE) Rate
-%F	File path
-%G	Temp directory (blank if non-SBBS)
-%I	UART IRQ Line
-%J	DATA directory (blank if non-SBBS)
-%K	CTRL directory (blank if non-SBBS)
-%N	Node Directory (blank if non-SBBS)
-%O	Sysop's name
-%P	COM Port
-%Q	System QWK ID (blank if non-SBBS)
-%R	Users Screen Rows
-%S	File Spec
-%T	Time left in seconds
-%U	UART I/O Address (in hex)
-%W	Time-slice API type
-%Z	TEXT Directory (blank if non-SBBS)
-%!	EXEC Directory (blank if non-SBBS)
-%#	Node number
-%*	Node number (zero padded to three digits)
-%$	Credits
-%%	%% for percent sign
-%1	User number
-%2	User number (zero padded to two digits)
-%3	User number (zero padded to three digits)
-%4	etc..
-
-SMM.CAN
--------
-
-The trash can file (SMM.CAN) can be used to specify a list of words or word
-combinations (one word or word combination per line) that will not be allowed
-in user information and wall entries.
-
-QUE.LST
--------
-
-The questionnaire list file (QUE.LST) can be edited with any ASCII text editor.
-The following is the stock QUE.LST containing the four stock questionnaires.
-
-BASIC
-Basic Personality
-0
-APPEAR
-Appearance
-0
-MATERIAL
-Material
-0
-ADULT
-Adult Sexuality
-18
-
-For each questionnaire, a code (up to eight valid DOS filename chars),
-a description (up to 25 chars), and minimum age are specified. A maximum
-of five questionnaires can be configured. If you are linked to the Synchronet
-Data echo, it is suggested you leave the four stock questionnaires intact
-(unmodified). If you change any of these questionnaires, you MUST change the
-code to something other than "BASIC, APPEAR, MATERIAL, or ADULT" as these codes
-are reserved specifically for the stock questionnaires. If you are not linked
-to the Synchronet Data echo, you can modify and remove any questionnaires you
-wish and use whatever code you wish except "PURITY" and "MB-TYPE" as these
-questionnaire names are specifically reserved by the Match Maker.
-
-The questionnaires are stored in files with the code for the name and .QUE
-as the file extension (e.g. BASIC.QUE, APPEAR.QUE, MATERIAL.QUE, etc).
-
-*.QUE Format
-------------
-
-A: First line is total number of questions (max: 20).
-   All lines following are question and answers groups.
-
-B: Each group starts with the actual question (max: 79 characters).
-
-C: The next line in the group consists of the total number of answers
-   (max: 16).
-
-D: The next line consists of the maximum number of answers this user can select
-   for this question.
-
-E: A single line for each answer (total answers from line C).
-
-F: Repeat lines B-E for each question (total questions from line A).
-
-Special Questionnaire Files
----------------------------
-
-Two questionnaire files (MB-TYPE.QUE and PURITY.QUE) are unique in that they
-don't follow the above format at all and should need no modification.
-
-The MB-TYPE.QUE is used for the Myers-Briggs personality test and is a pretty
-standard questionnaire. The files MB-*.ASC are descriptions of the various
-personality types. The file MB-INTRO.ASC is displayed before the test and
-MB-TYPE.ASC is displayed when seeking descriptions of the various types.
-
-The PURITY.QUE is used for the purity test and the format is simply one
-"Have you ever" question per line. The default PURITY.QUE is a 100 question
-test of an adult nature. An optional 500 question purity test is also included
-as PURITY.500. To use this test in place of the 100 question version, copy
-PURITY.500 to PURITY.QUE. The 100 question version is also included as
-PURITY.100 as a back-up, in case you want to return to the 100 question
-version. The PURITY*.ASC files are displayed before and during the testing
-procedure.
-
-Sysop Commands
-==============
-
-From the Match Maker main menu, the sysop (any user with sysop security level)
-can use the (D)elete command to remove any profile from the database. Profiles
-can be undeleted with the '*' command (available only to sysops).
-
-When viewing profiles, sysops are shown the user name, number, and system
-name at the top of the profile. Normal users are not shown this information
-to maintain the anonymity of the users in the database.
-
-Hitting '!' will display a list of all networked BBSs that have contributed to
-the current profile database. If you see your BBS name in the list, either
-someone else is using the same BBS name as you (which is bad), or something has
-gone wrong in your network and you should contact Digital Dynamics to remedy
-the situation immediately. If someone else is using the exact same BBS name
-(not considering upper/lower case differences), one of you must change your BBS
-name by at least one character or you will definitely have problems with your
-users' Match Maker profiles and telegrams.
-
-Hitting '\' will rebuild the database index. If your database is corrupted,
-you should down all your nodes and use SMMUTIL instead of this command. If
-your SMM.IXB file disappears or becomes out-of-sync with your SMM.DAB file
-(which is unlikely to occur), you can use this command to quickly recreate
-it.
-
-Photographs
-===========
-
-You may use the included ADDPHOTO.EXE utility to import photographs into your
-local match maker database. The current directory must be the directory where
-SMM is installed when ADDPHOTO is run. The usage is:
-
-ADDPHOTO filename.ext user_number system_name
-
-where filename.ext is the path, filename, and extension of the photograph file
-to import (preferably, but not necessarily, a JPEG file with a .JPG extension).
-User_number is the user's number and system_name is the name of the system the
-user created their profile on.
-
-ADDPHOTO will create a directory called PHOTO off of the directory where SMM
-is installed (e.g. C:\SBBS\XTRN\SMM\PHOTO or C:\BBS\DOORS\SMM\PHOTO) and move
-the photograph file into this directory (changing the name, but leaving the
-extension (e.g. JPG, GIF, TIF, etc) intact.
-
-Example:
-
-		ADDPHOTO JAMIEFAR.JPG 1 M.A.S.H BBS
-
-The DELPHOTO.EXE utility is used to remove photographs from your local match
-maker database. The usage is:
-
-DELPHOTO user_number system_name
-
-Example:
-		DELPHOTO 1 M.A.S.H BBS
-
-The LSTPHOTO.EXE utility may be used to create a list of all users with photos
-in your local match maker database.
-
-Example:
-		LSTPHOTO > PHOTO.LST
-
-PHOTO.ZIP
----------
-You can optionally, zip (using PKZIP) all the files in the PHOTO directory
-into a file called PHOTO.ZIP (in the SMM directory) and delete them from the
-PHOTO directory (to save disk space). When the photo is viewed or downloaded
-from SMM, it will be automatically extracted from the PHOTO.ZIP into the PHOTO
-directory (PKUNZIP.EXE must be in your DOS search path or your Synchronet
-EXEC directory). The ADDPHOTO utility will not automatically add new images to
-the PHOTO.ZIP (if you wish to use that storage method). Also, the files will
-not be automatically deleted from the PHOTO directory after download/viewing
-in SMM. This is so that popular image files will not have to be extracted each
-time. You may wish to periodically re-zip and delete the PHOTO directory
-(perhaps with an event) to preserve disk space.
-
-SYNCDATA Echo
--------------
-If your match maker is linked (via DOVE-Net or FidoNet) to the SYNCDATA echo,
-you do not need a scanner or the ADDPHOTO utility to get your users' photos
-into the database. Simply have your users send their photos along with your
-full and correct BBS name, their user number, and a xerox-copy of a current
-formal photo-ID (to verify identity only, IDs will not be scanned and all
-ID information will remain completely confidential) to Digital Dynamics.
-
-The photos must have a 2 inch square drawn around the area to be scanned. The
-photos will be scanned and distributed in JPEG format (with monthly
-redistribution) on the SYNCDATA echo by Digital Dynamics. This service is
-available to all users of SMM free of charge (this free offer _may_ expire
-on Feb 14th, 1996).
-
-Digital Dynamics reserves the right to refuse to scan and distribute any
-photos for any reason. Nudity or vulgarities will not be allowed.
-
-Photos and IDs included with a self-addressed _stamped_ enveloped will be
-returned.
-
-DEMO Version
-============
-
-The unregistered "DEMO" version of Synchronet Match Maker will not allow
-users to send Telegrams to other users in the database (through the
-message network), write on the Match Maker wall, or read other users'
-questionnaires.
-
-To register your copy of Synchronet Match Maker, complete the ORDER.TXT form
-included in this archive/directory and send it to Digital Dynamics, or call
-714-529-6328 (voice) or 714-529-9525 (BBS) to order with a credit card for
-faster processing.
-
-/* End of SMM.DOC */
diff --git a/xtrn/smm/smm_help.asc b/xtrn/smm/smm_help.asc
deleted file mode 100644
index c969ab434c..0000000000
--- a/xtrn/smm/smm_help.asc
+++ /dev/null
@@ -1,27 +0,0 @@
-yhOverall Match (General Explanation):nc
-
-The overal match is a highly refined algorithm used to compute a percentage of 
-preference match between a user and a prospective mate. The user's preferences
-are weighed more heavily than those of the prospective mate. More specific
-preferences will result in a higher match percentage potential and a wider
-range of match percentages. More vague preferences will result in a rather
-narrow range of match percentages, so it is best to keep your "hideal matenc" 
-in mind when completing the preferred mate sections of your profile and
-questionnaires.
-
-yhGlobal Database:nc
-
-If your sysop has taken the steps to link this profile database with the 
-international hSyncDatanc network, your profile will be automatically included
-in this global database for users on other BBSs around the world to view. The 
-profiles you see in this database may very well be users in other counties, 
-states, or countries and you can view their information here and communicate
-with them via hTelegramnc using this program.
-
-yhCredits:nc
-
-hPurity Test                     ncOriginal version from MIT's Baker House.
-
-hMyers-Briggs Type Indicator     ncAdapted from the book "Please Understand Me"
-				by David Keirsey and Marilyn Bates
-
diff --git a/xtrn/smm/smm_logo.asc b/xtrn/smm/smm_logo.asc
deleted file mode 100644
index c60c944dfc..0000000000
--- a/xtrn/smm/smm_logo.asc
+++ /dev/null
@@ -1,3 +0,0 @@
-              nhrn h7������������������������������������������������n hr
-              n k7nk7 nk7Find your mate or just a date, electronically! n hr
-              nhrn hk7������������������������������������������������n hrn
diff --git a/xtrn/smm/smm_main.asc b/xtrn/smm/smm_main.asc
deleted file mode 100644
index b453ada7f3..0000000000
--- a/xtrn/smm/smm_main.asc
+++ /dev/null
@@ -1,9 +0,0 @@
-� nk7������������������������������������������������������������������0
-� 7  b[hRnb7] Read Profiles               [hHnb7] Help/Info                   hk�0
-� 7  nb7[hLnb7] List Profiles               [hMnb7] Myers-Briggs Types          hk�0
-� 7  nb7[hUnb7] Update Your Profile         [hPnb7] Toggle Screen Pause         hk�0
-� 7  nb7[hDnb7] Delete Your Profile         [hTnb7] Read Telegrams              hk�0
-� 7  nb7[hNnb7] Scan for New Profiles       [hSnb7] Send Telegrams              hk�0
-� 7  nb7[hGnb7] Go to a Specific Profile    [hVnb7] Visit the Wall              hk�0
-� 7  nb7[hFnb7] Find Text in Profiles       [hOnb7] Log-off (Hang-up)           hk�0
-� nk7�h������������������������������������������������������������������n
diff --git a/xtrn/smm/upgrade.doc b/xtrn/smm/upgrade.doc
deleted file mode 100644
index be87c35f62..0000000000
--- a/xtrn/smm/upgrade.doc
+++ /dev/null
@@ -1,241 +0,0 @@
-Upgrading from Synchronet Match Maker 
--------------------------------------
-
-If you are a registered owner of SMM and upgrading from v1.10 or earlier,
-you'll need to optain your registration number from Digital Dynamics by calling
-voice at 714-529-6328. You will need to have your Synchronet registration
-number and control code on hand when you call.
-
-The most important change (in upgrading to v2.0) is to change "Intercept
-I/O Interrupts" in SCFG from "Yes" to "No". Example:
-
-	����������������������������������������������������������ͻ
-	�		   Synchronet Match Maker		   �
-	����������������������������������������������������������͹
-	� �Name 		      Synchronet Match Maker	   �
-	� �Internal Code	      SMM			   �
-	� �Start-up Directory	      ..\XTRN\SMM		   �
-	� �Command Line 	      smm			   �
-	� �Clean-up Command Line				   �
-	� �Multiple Concurrent Users  Yes			   �
-	� �Intercept I/O Interrupts   No  <-- Important 	   �
-	� �Swap BBS out of Memory     Yes			   �
-	� �Modify User Data	      Yes			   �
-	� �Execute on Event	      No			   �
-	� �BBS Drop File Type	      Synchronet      XTRN.DAT	   �
-	� �Place Drop File In	      Node Directory		   �
-        ����������������������������������������������������������ͼ
-
-The only files you need to update when converting from v2.01/2.02 to v2.10 are:
-
-SMM.DOC 	Sysop Documentation (v2.10)
-SMM.EXE 	Match Maker Program (v2.10)
-SMMCFG.EXE	Match Maker Configuration Program (v2.10)
-SMMUTIL.EXE	Repair/Maintenance Program (v2.01)
-
-The only files you need to update when converting from v2.00 to v2.10 are:
-
-SMM.DOC 	Sysop Documentation (v2.10)
-SMMCFG.EXE	Match Maker Configuration Program (v2.10)
-SMMUTIL.EXE	Repair/Maintenance Program (v2.01)
-SMB2SMM.EXE	Import Program (v2.01)
-SMM2SMB.EXE	Export Program (v2.01)
-ADDPHOTO.EXE	Import Photographs locally (v1.01)
-DELPHOTO.EXE	Delete Photographs locally (v1.00)
-LSTPHOTO.EXE	List Profiles with Photographs (v1.00)
-
-The only files you need to update when converting from v1.x to v2.0 are:
-
-*.EXE		Executables
-*.DOC		Documentation
-LIST_HDR.ASC	Condensed Listing Header
-
-If upgrading from v1.00 or v1.10, you will also need to update the following
-files:
-
-SMM_MAIN.ASC	Main Menu
-SMM_HELP.ASC	Help Screen (if upgrading from v1.00)
-PURITY.ASC	Purity Explanation (if upgrading from v1.00)
-
-New in version 2.10
-~~~~~~~~~~~~~~~~~~~
-o Minor segregation (protection) now supported. This option separates all users
-  into Adults and Minors (configurable separation age), disallowing adults to
-  see minors' profiles or send them telegrams (and vice versa)
-o Minimum Age to access the wall now configurable in SMMCFG
-o XSDK v2.42 feature: Ctrl-T now displays current time, time used, and time
-  left (similar to SBBS)
-o XSDK v2.42 feature: User is now warned on each of their last 5 minutes left
-
-New in version 2.02a
-~~~~~~~~~~~~~~~~~~~~
-o Fixed bug in SMM.EXE when using DOOR.SYS (non-Synchronet BBSs)
-
-New in version 2.02
-~~~~~~~~~~~~~~~~~~~
-o Low priority input now correctly supported (for giving up multitasker time
-  slices even while accepting string input from the user) - this was an
-  indirect bug fix in XSDK v2.41 most notably effecting OS/2 systems
-o "Searching..." text now displayed before possibly long searches to indicate
-  to the user the system is not crashed
-o Sysop text searches now search user real names, system names and user numbers
-  in addition to the normal user-viewable text fields
-
-New in version 2.01
-~~~~~~~~~~~~~~~~~~~
-o New DELPHOTO.EXE utility to delete photos from the database
-o New LSTPHOTO.EXE utility to create a list of all profiles with attached
-  photos
-o SMB2SMM/SMM2SMB updated to detect and not import/export corrupted profiles
-o ADDPHOTO 1.01 now copies (instead of renames/moves) photo image files
-o SMB2SMM no longer deletes existing photo if CRC error detected on new photo
-o Wall security level (configured in SMMCFG) now correctly keeps users below
-  that level from writing on the wall
-o FOSSIL channel number automatically determined by subtracting 1 from the
-  COM port number (e.g. COM 1 is FOSSIL/Digi channel 0)
-  /I command line switch may be used to set non-standard channel
-o New SMM, SMMCFG, and SMMUTIL fix 25 character BBS name limit
-o SMMUTIL (v2.00) now removes old photos (tallys photos and networked profiles)
-
-New in version 2.00
-~~~~~~~~~~~~~~~~~~~
-o Optionally reads from and writes to DOOR.SYS drop file
-  (for compatibility with other [non-Synchronet] BBS programs)
-o MSG, UTI, and possibly JAM message base import/export utilities will be
-  available soon (for match maker networking with non-SMB compatible BBSs)
-o Optional command line switches for com port configuration and time-slice APIs
-  (for non-standard COM ports with other BBS programs)
-o Photographs (in any size or format) can be added to the database locally
-  (with Zmodem download and local viewing)
-o Photographs are automatically imported from the SYNCDATA echo with SMB2SMM
-  (other match maker networks will need to use their own distribution methods)
-o System name separately configurable in SMMCFG (to work around duplicate BBS
-  names in a match maker network)
-o Metric measurements (centimeters and kilograms) can be enabled in SMMCFG
-o Sysop level defined in SMMCFG (no longer hard-coded at level 90)
-o Low priority input supported (based on SCFG Node toggle option if Synchronet,
-  automatically enabled with other BBS programs)
-o Trailing spaces from user names are automatically removed
-
-New in version 1.31
-~~~~~~~~~~~~~~~~~~~
-o Ability to specify a user to search for on the command line
-  displays extended profile on the user and then exits (just "SMM user name")
-o Messages can now be sent from Digital Dynamics to you (sysops, users, or
-  both) inside SMM (not telegrams, but similar) to inform sysops and users of
-  Match Maker progressions/news. All messages have pre-determined expiration
-  dates and will automatically disappear when the date is reached. Sysop-only
-  messages can be deleted immediately after they are read if the sysop wishes.
-  Special ONE-time messages are displayed to users only once, while others
-  may be displayed each time they enter SMM. (SMB2SMM v1.30 required)
-o New SMMUTIL (v1.15) fixes 4095 user limitation.
-
-New in version 1.30
-~~~~~~~~~~~~~~~~~~~
-o Ability to send telegrams directly from condensed user listings
-o Wall new-scans now correctly scan by date/time imported instead of the
-  date/time written (must use SMB2SMM 1.22, SMM2SMB 1.12, and SMMUTIL 1.14)
-o Condensed Wall listings now clear the screen between each screen-full
-  (faster screen draws) with a prompt allowing the user to read a profile,
-  send a telegram, move backwards through the wall writings, or quit at the
-  bottom of each screen-full (more intuitive and convenient)
-o Extended Wall listings now display wall writing in magenta if the author
-  is female, green if the author is male (instant gender recognition)
-  wall writings who can't be found in the database
-o Extended Wall listings allow sending telegrams directly (without reading
-  profile first) and moving backwards through the wall writings
-o Extended Wall listings stay on current wall writing after reading profile
-  or sending telegram
-o XSDK v2.33 fixes problem with flashing screen loops when a user hangs up
-  with keys in the modem buffer
-o XSDK v2.33 fixes problem with sending double carriage returns at the end
-  of each line (making captures difficult)
-o Fixed problem with selecting races above E
-o If the sysop hits '!' from the main menu, all systems connected to the
-  database are listed
-o When reading a user's questionnaire, (P)revious and (Q)uit commands are now
-  available on the pause prompt
-o Updated sysop documentation
-
-New in version 1.22
-~~~~~~~~~~~~~~~~~~~
-o New option for those seeking "any-sex non-romantic friendly matches" allows
-  matches with both romantic/intimate mates and non-romantic mates (friends)
-o When displaying long user information, preference ranges (age, weight, etc)
-  and specifics (hair color, marital status, etc) are high intensity (bright
-  colors) if the preferencees are considered requirements by the user
-o The Wall was revamped to allow new-scans for new writings since a specific
-  date only and optional display of extended user information allowing reading
-  of questionnaires and sending of telegrams
-o Wall writings will now disallow any text in SMM.CAN (same as user aliases
-  profiles, etc.)
-
-New in version 1.21
-~~~~~~~~~~~~~~~~~~~
-o Credits can be charged or given for reading questionnaires
-o New WALL inside Match Maker for public discussion
-o Credits can be charged or given for writing on the wall
-o Minimum level can be specified to allow writing on the wall
-o SMM2SMB v1.11 now creates unique profile messages that won't be deleted by
-  duplicate message checking
-o SMM2SMB v1.11 and SMB2SMM v1.21 read/write wall writings from message base
-o SMMUTIL v1.11 now allows command line specification of maximum wall writing
-  age before auto-deletion
-o Telegrams and Profile Personal Text no longer word wrap on last line (bugfix)
-o Telegrams now ask to Save (Y/n) when completed to allow last minute abort
-
-New in version 1.20
-~~~~~~~~~~~~~~~~~~~
-o DEMO and registered versions use the same executable files, unlocked with
-  registration number obtained from Digital Dynamics (entered in SMMCFG)
-o Minimum level can be specified to allow the sending of telegrams
-o Minimum level can be specified to allow the reading of questionnaires
-o Sysops deleting their own profile, will not have to exit and re-enter
-  before SMM will report their profile does not exist
-o Match Maker telegrams are stored in SMM and users are notified via BBS
-  telegram of newly received SMM telegrams
-o Users can read awaiting telegrams and send telegrams from the SMM main menu
-o New customizable main menu (SMM_MAIN.ASC)
-o (W)rite Profile command changed to (U)pdate Profile, although 'W' can still
-  be used
-o When sending telegrams, the destination user's detail is displayed to prevent
-  users from sending telegrams to a wrong user (with the same name)
-o Automatically corrects user sex when not set to (M)ale or (F)emale
-o Questionnaire answers are aligned so they can be visually compared easily
-o SMMUTIL v1.10 generates statistics, run "SMMUTIL > stats.txt" to create file
-  for display on your BBS
-
-New in version 1.10
-~~~~~~~~~~~~~~~~~~~
-o New configuration program (SMMCFG) instead of editing SMM.CFG with an
-  ASCII editor.
-o Optional trash can file for keeping users from using profanity in profiles
-  and users names.
-o SMB2SMM will not import profiles if the user age is less than you have
-  specified in SMMCFG for minimum user age.
-o SMB2SMM will not import profiles that contains words found in your TRASH.CAN
-  file (if it exists).
-o When listing profiles in SMM, you can go backwards to previous screens and
-  read profiles directly from the listing. The (R)ead profile key automatically
-  puts the user with the highest percentage on the current screen in the
-  user name field.
-o User's can enter "Non-disclosed" for their yearly income, by hitting ENTER
-  when asked.
-o User's can specify if they REQUIRE their matches to fall within certain
-  ranges or REQUIRE specific features.
-o Profile screens were condensed to get all information on one page whenever
-  possible.
-o SMMUTIL will scan for duplicate profiles or if specified, delete profiles
-  that haven't been updated in a certain number of days. SMMUTIL also
-  automatically condenses the data file, removing any deleted profiles and
-  rebuilds the index file.
-o Users can be charged credits or given credits for adding profiles and
-  sending telegrams. If a user adds a profile and then deletes it, the credit
-  charges are reversed.
-o Auto-update feature will automatically re-hatch a users entry into the
-  Global Database after a certain number of days, if the user is active in
-  the match maker but hasn't made any profile changes.
-o Sysop can be notified automatically of added profiles and sent telegrams
-  from the match maker
-
-/* End of UPGRADE.DOC */
-- 
GitLab