***************************************************
* What's New in Synchronet Version 3.19 for Win32 *
* (ChangeLog since v3.18b for Win32 Sep 20, 2020) *
***************************************************

Terminal Server
~~~~~~~~~~~~~~~
o Add support for NTVDMx64 (16-bit DOS doors on x64 editions of Windows)
  http://www.columbia.edu/~em36/ntvdmx64.html for more details
o Allow FOSSIL mode of the Win32 virtual UART/FOSSIL driver to be disabled
o Allow "FOSSIL Only" as a configuration option for external programs in SCFG
o Load/keep/refresh each node's configuration in memory
  Configuration changes are more readily visible (just log-off and back on)
o Changed user birthdate storage format to YYYYMMDD, input to MM/DD/YYYY
o Up to 40 characters can be configured by the sysop for gender options
  The default choice/configuration is now: "M/F/X" (not just "M/F")
o Don't force password-changes for users with blank passwords (e.g. Guest)
o Allow node directory to be configured in Advanced node options
o Support for manual terminal width setting and terminals with > 99 rows
o String command (';find') to find message and file areas by search word
o Access Requirement Strings (ARS)
- SYSOP ARS keyword now applies to target user, not necessarily the user online
o New @-codes (see http://wiki.synchro.net/custom:atcodes for more details):
- !x to perform Ctrl-A style terminal/attribute control
  (performs equivalent to Ctrl-Ax)
- TEXT:<num> (display text.dat string #num)
- NETMAIL (user's personal netmail or email address)
- FWD ("On" if the user has opted for forwarding their mail to netmail or "Off")
- TMP (user's chosen temporary file type, e.g. "ZIP")
- NOTE (user's note, same as MEMO1)
- UDR (user's upload/download byte-ratio)
- UDFR (user's upload/download file ratio)
- LASTIP (user's most recent IP address at time of logoff)
- BIRTH (user's birthdate in for full-format, i.e. MM/DD/YYYY or DD/MM/YYYY)
- BDATEFMT (user birthdate input format, alias: BIRTHFMT)
- SYSAVAILYN (same as SYSAVAIL but expands to "Yes" or "No" instead)
- SHOW:<ars> (only show the following text to users meeting ARS)
  SHOW (restore console output for all users)
- MSG_THREAD_ID, MSG_THREAD_BACK, MSG_THREAD_NEXT, MSG_THREAD_FIRST
- FREESPACEM (free disk space in Mebibytes)
- FREESPACEG (free disk space in Gibibytes)
- FREESPACET (free disk space in Tebibytes)
- FILE_TAGS (tags for currently displayed file)
- MAILR and MAILR:# (number of read mail messages waiting)
- MAILU and MAILU:# (number of unread mail messages waiting)
- GIT_HASH (Git commit hash of current build)
- GIT_BRANCH (Gir branch name of current build)
- SEX (user's gender) and GENDERS (gender options)
- Support C escape sequences in FILL @-code argument
  e.g. FILL:\x20 to fill with space
- Support strftime format arguments (w/C escape sequencs) to DATE/TIME @-codes
  DATE: (alias: TIME:)
  BDATE: (alias: BIRTH:)
  PWDATE:
  SINCE:
  LASTON:
  FIRSTON:
  LASTNEW:
  EXPDATE:  
- WAIT:<tenths_of_second> (wait a duration or for any key press)
- CONTINUE (wait for key press, aborting display upon 'N' or Ctrl-C)
- GETKEY (wait for any key press)
o New option to create door drop files in node's temp directory
o HAPROXY support option
o Support markup tags (optionally) when displaying posts
o Support PETSCII terminals connected to non-PETSCII ports
o Support forwarding of local email msg to networked mail (w/comments)
  and change of message subject
o Store client terminal information in node#/terminal.ini
  for future use (e.g. for improved node spying)
o Create node#/client.ini for each node client connection
o Support 3rd party installer files for 150+ external programs (doors)
  See xtrn/3rdp-intall/README.md for details
o New text.dat strings (see docs/text319b.dif for full list of changes):
  HowManyColumns
  InternetMailSent
  FidoNetMailSent
  QWKNetMailSent
  MsgsToYouOnlyQ
  ToYouOnly
  SetMsgPtrPrompt
  DateLastKeys
  DirLibKeys
  SubGroupKeys
  AllKey
  All
  ListKey
  FileInfoEditPrompt 
  EditExtDescriptionQ
  FiTags
  FiUploadedTo
  FiChecksum
  FiAuthor
  FiGroup
  TagFileQ
  TagFilePrompt
  EnterYourGender
  DisplayExtendedFileInfoQ

General
~~~~~~~
o New file base format (based on SMB), see docs/newfilebase.txt
  - supports long filenames
  - better support for files > 2GB and 4GB
  - extended file descriptions up to 4000 chars are now supported
  - supports file tags (specified by uploader, optionally, per directory)
  - stores and reports MD5 and SHA1 hash of files
DIZ enhancements: Read/use SAUCE data, support ANSI, increase max 1->4K
Inspired by Blocktronics (and other ANSI art group) packs' FILE_ID.DIZ/ANS
files:
  - Support (and prioritize) FILE_ID.ANS
  - Convert ANSI color/attribute sequences in DIZ files to Ctrl-A equivalent
    (uses SAUCE width and ICE color, if specified)
  - Don't treat DIZ as a series of lines, they're not always nowadays.
  - New putmsg() mode: P_INDENT to print files indented by current column
  - Display full (up to 64-char) filenames in lists when using 132+ column
    terminal.
  - Use the Author, Group, and Title fields from the SAUCE if present/non-blank
o libarchive integration (into SBBS and SBBSecho)
  built-in support for creating/extracting zip, 7zip, and tgz files
  additional read-only formats: rar, lha/lzh, iso, xar, and cab
o Give sysop more control over characters allowed in uploaded filenames
o Recognize the "standard" USENET signature delimiter: "\n-- \n"
o Use Linux OFD locks on 64-bit Linux builds
o Use a more-liberal username matching algorithm
  e.g. Ignore all non-trailing non-alphanumeric characters
o Support for single-part MIME-attachment decode/download
o .ini file !include now supports wildcard patterns
   e.g .!include modopts.d/*.ini
o Support for "name@address" syntax in twitlist.cfg
  
JavaScript
~~~~~~~~~~
o Added 'user' properties: birthyear, birthmonth, and birthday
o Added 'system.text()' method: similar to bbs.text()
o New JS User.stats properties:
- read_mail_waiting
- unread_mail_waiting
- spam_waiting
o New FileBase class
o New Archive class
o New JS system properties: git_hash and git_branch
o Add edit_msg() and forward_msg() methods to JS 'bbs' object
o Expose the next-run-date/time for an event as a new `next_run` property
  for `xtrn_area.event[]` (in `time_t` format) for easier debugging of these
  kinds of issues
o File.iniGetValue(), iniGetKeys(), iniGetObjects() now supported nested
  (!include'd) .ini files
o 'jsexec -r<expression>' to evaluate a JS expression from command-line
o More control over jsexec console output streams (-A and -S options)
o New bbs.view_file(filename) method
o Add bbs.export_filelist() method
o Add bbs.msg_from_bbsid property

The following properties would only reflect the status at the time the
file_area object was initialized:
    - can_access
    - can_upload
    - can_download
    - is_operator
    - is_exempt

 ... so if changes were made the user while online, for example, these property
values would *not* also change to reflect the current state.

The lib[] and lib_list[] 'can_access' properties still have this flaw.

Also: Add a new "files" property to the dir[] and dir_list[] objects to report
the current number of files in each directory database.

The following properties would only reflect the status at the time the
msg_area object was initialized:
- can_access
- can_read
- can_post
- is_operator
- is_moderated

... so if changes were made the user while online, for example, these
property values would *not* also change to reflect the current state.

Also: Add a new "posts" property to the sub[] and sub_list[] objects to
report the current number of posted messages (quicker than opening a MsgBase
instance).

SBBSecho
~~~~~~~~
o Signal the sub-board's configured semaphore file when importing echomail
o Don't attempt to parse origin addr from origin lines in NetMail msgs
o Support user netmail forwarding
o Automatically route in-transit mail to points to boss nodes
o When packing netmail (stored messages), don't discard non-zero zones
o Log an error and exit immediately when a local linked-node is configured
o Generate a MSGID kludge for netmail messages created by SBBSecho
o Built-in sbbsecho.log rotation
  New configuration params: MaxLogSize (default: 10M) and MaxLogsKept (10)

Control Panel
~~~~~~~~~~~~~
o New sem-file: ctrl/sound.mute
o Update sound (WAV) file play-on-event support in Windows build
o A "hack attempt" sound file is now supported in the Terminal Server, Mail
  Server,  and Services
o "login" and "logoff" sound files are now supported in the Terminal Server,
  FTP Server, Web Server, Mail Server, and Services.
o The following sound files may now be configured in the [Global] section of
  the ctrl/sbbs.ini file, if desired to set the default sound files for all
  servers/services in on place:
- AnswerSound
- LoginSound
- LogoutSound
- HangupSound
- HackAttemptSound

Web Server
~~~~~~~~~~
o Fix requests to the webserver using IPv6 address http://[1234:1234::]
  requests
o Fix heap corruption that could occur when HSTS feature is enabled

FTP Server
~~~~~~~~~~
o Disable FTP Bounce (FXP) support by default (but configurable)
o FTPS (FTP over TLS) fixes (e.g. uploads)
o Implement max concurrent connections for FTP
  by setting MaxConcurrentConnections in the [ftp] section of sbbs.ini

Mail Server
~~~~~~~~~~~
o Optionally limit concurrent connections to mail server
  via MaxConcurrentConnections key in [mail] section of sbbs.ini
o Reject control chars in base64-decoded auth credentials (name/password)
o POP3 CAPA cmd support in transaction state
o Detect and reject forged "from" fields in submitted msg headers
o No longer decodes based64-encoded messages before storing in msg/mail base
o Support quoted filenames in message subjects

smbutil
~~~~~~~
o Don't count vote/poll messages when purging to meet the maximum msgs setting
o New commands to flag/unflag all messages for deletion
o Replace ESC chars with '.' when viewing messages, support '-<count>' with 'r'
o Also, allow continuous reading of 1 or more consecutive messages using the
  -<digit> option (no prompting)
