                         SlyEdit message editor
                              Version 2.03
                        Release date: 2026-06-30

                                  by

                             Eric Oulashin
                     Sysop of Digital Distortion BBS
               BBS internet address: digitaldistortionbbs.com
                     Alternate: digdist.synchro.net
                     Email: eric.oulashin@gmail.com



This file describes SlyEdit, a message editor for Synchronet.
Note: For sysops who already have a previous version of SlyEdit
installed and are upgrading to this version, please see the file
Upgrading.txt.

Contents
========
 1. Disclaimer
 2. Introduction
 3. Installation & Setup
 4. Features
 5. Configuration file
 6. Strings configuration file
 7. Ice-style Color Theme Settings
 8. DCT-style Color Theme Settings
 9. Common colors (appearing in both Ice and DCT color theme files)
10. Text replacements (AKA Macros)
11. User settings
12. Taglines
13. Spell check and dictionaries
14. Version history


1. Disclaimer
=============
Although I have tested SlyEdit, I cannot guarantee that it is 100% bug free or
will work as expected in all environments in all cases.  That said, I hope you
find SlyEdit useful and enjoy using it.


2. Introduction
===============
SlyEdit is a message editor that I wrote in JavaScript for Synchronet, which
can mimic the look and feel of IceEdit or DCT Edit.  SlyEdit also supports
customization of colors via theme files, cross-posting into other message
areas, text search, and file import & export (works with files on the
BBS machine, and is enabled only for the sysop).

The motivation for creating this was that IceEdit and DCT Edit were always
my two favorite BBS message editors, but in a world where 32-bit (and 64-bit)
Windows and *nix platforms are common, 16-bit DOS emulation is required to run
IceEdit and DCT Edit, which is noticeably slow and sometimes unreliable.
Since SlyEdit is written in JavaScript, it is faster than a DOS-based message
editor and can run in any environment in which Synchronet runs, without any
modification or being re-compiled.

SlyEdit will recognize the user's terminal size and set up the screen
accordingly.  The width of the edit area will always be 80 characters and
support up to 79 characters; however, an increased terminal size will provide
more room for message information to be displayed.  Also, a terminal height
greater than the standard 24 or 25 characters will provide a taller edit area,
allowing more of the message to be seen on the screen at a time.

SlyEdit allows the user to select/change the color of their text using the
CTRL-K key, if the allowColorSelection is set to true in SlyEdit.cfg.  Also,
you can have SlyEdit convert colors to ANSI when posting messages, for
compatibility with other BBS software.  To do so, set the saveColorsAsANSI
setting to true in SlyEdit.cfg.

As of version 1.88b (2024-02-11), SlyEdit supports inputting UTF-8 text.

Also, SlyEdit has no moving parts that can wear out over time.

Thanks go out to the following people for testing:
- Nick of Lightning BBS (lightningbbs.dyndns.org) for testing early versions
- Nick (AKA Access Denied) of The Pharcyde (pharcyde.org) for testing the
  newer versions and for his input on various features, mainly message quoting
- echicken (sysop of Electronic Chicken) for his solution to look up the
  original author of a message after a user changes the "To" name when
  replying to a message

3. Installation & Setup
=======================
Starting with Synchronet version 3.16 (if I remember correctly), Synchronet
included SlyEdit by default, so it should already be set up for you. However,
these instructions can still be useful if you want to update SlyEdit to a
newer version without waiting for the next version of Synchronet to be
released.
These are the steps for installation:
 1. Get the SlyEdit files from the Synchronet repository. If you're running on
    Linux, you probably have the Synchronet repository out on your machine. If
    you don't have the Synchronet repository on your machine, you can get the
    files via a web browser here (there should be download links for each
    file):
    - SlyEdit.js:
    https://gitlab.synchro.net/main/sbbs/-/blob/master/exec/SlyEdit.js?ref_type=heads
    - slyedit_dct_stuff.js, slyedit_ice_stuff.js, slyedit_misc.js from sbbs/exec/load:
    https://gitlab.synchro.net/main/sbbs/-/blob/master/exec/load/slyedit_dct_stuff.js?ref_type=heads
    https://gitlab.synchro.net/main/sbbs/-/blob/master/exec/load/slyedit_ice_stuff.js?ref_type=heads
    https://gitlab.synchro.net/main/sbbs/-/blob/master/exec/load/slyedit_misc.js?ref_type=heads
    - SlyEdit config files in sbbs/ctrl:
    https://gitlab.synchro.net/main/sbbs/-/tree/master/ctrl?ref_type=heads
    - SlyEdit documentation (slyedit_readme.txt & SlyEdit_Upgrading.txt) in sbbs/docs:
    https://gitlab.synchro.net/main/sbbs/-/blob/master/docs/slyedit_readme.txt?ref_type=heads
    https://gitlab.synchro.net/main/sbbs/-/blob/master/docs/SlyEdit_Upgrading.txt?ref_type=heads
 2. From the Synchronet repository in sbbs/exec, copy SlyEdit.js into your
    sbbs/exec directory
 3. From the Synchronet repository, in sbbs/exec/load, copy
    slyedit_dct_stuff.js, slyedit_ice_stuff.js, and slyedit_misc.js to your
    sbbs/exec/load directory
 4. Copy the .cfg files into your sbbs/ctrl directory.  If you plan to
    customize your SlyEdit configuration, copy SlyEdit.example.cfg to
    SlyEdit.cfg and make your SlyEdit changes there. Your SlyEdit.cfg file
    can be in the sbbs/ctrl directory or in the sbbs/mods directory. If you
    want to modify the color scheme files (SlyIceColors*.cfg or
    SlyDCTColors.cfg), you can copy those to sbbs/mods and edit them there,
    or create your own color scheme files in sbbs/mods.
 5. Set up SlyEdit on your BBS with Synchronet's configration program (SCFG).

To add SlyEdit to Synchronet's list of external editors, run Synchronet's
configuration program (SCFG) and select "External Programs", and then
"External Editors".  The following describes setting up SlyEdit:
 1. Scroll down to the empty slot in the editor list and press Enter to
    select it.
 2. For the external editor name, enter "SlyEdit" (without the quotes)
 3. For the internal code, use SLYEDIT
 4. Press Enter to select and edit the new entry.  Asuming that the .js files
    are in the sbbs/exec directory, the settings should be as follows (the
    wording and options shown may vary, depending on the version of Synchronet
    you have installed):
      Name                            SlyEdit
      Internal Code                   SLYEDIT
      Command line                    ?SlyEdit.js %f
      Access requirements             ANSI AND COLS 80
      Native Executable               No
      I/O method                      FOSSIL or UART
      Use Shell or New Context        No
      Record Terminal Width           Yes
      Word-wrap Quoted Text           Yes, for 79 columns
      Retain Ctrl-A Codes in Quotes   Yes
      Automatically Quoted Text       All
      Editor Information Files        QuickBBS MSGINF/MSGTMP
      Handle Soft CRs                 N/A
      Strip FidoNet Kludges           No
      Support UTF-8 Encoding          Yes
      BBS Drop File Type              None


4. Features
===========
SlyEdit is can mimic the look & feel of IceEdit or DCT Edit.  If the mode
(ICE/DCT/RANDOM) is not specified on the command line, the user will be asked
what UI mode they want upon first running SlyEdit.  SlyEdit also has the
following features:
- Message quoting: When replying to a message, users can select lines from the
  message to quote.  By default, SlyEdit puts the initials of the original
  author in front of the quote lines to indicate who originally wrote those
  parts of the message.  Optionally, sysops may disable the use of initials
  in quote lines, in which case SlyEdit simply prefixes quote lines with " > "
  as was done in IceEdit, DCT Edit, and other editors of the early-mid 1990s.
- Cross-posting into other message sub-boards: When posting a message to a
  message sub-board, SlyEdit allows the user to select other message sub-boards
  to post the message into.  SlyEdit will post the message to the user's
  current message sub-board by default.  Using the cross-post feature, the
  user can select any number of other message sub-boards to cross-post his/her
  message into.  SlyEdit respects the ARS security setting for each sub-board -
  If a user is not allowed to post in a message sub-board, SlyEdit will not
  allow the user to select that sub-board for cross-posting.  The user can also
  un-select their current message sub-board.  When the user un-selects their
  current message sub-board and chooses other message sub-boards to post
  his/her message into, Synchronet will say that the message was aborted
  because the message file wasn't saved as it normally is for the current
  message sub-board.  However, SlyEdit will output all of the message
  sub-boards that the message was posted into.  If the user un-selected their
  current message sub-board, SlyEdit will also output a note explaining that
  the BBS will say the message was aborted, even though it was posted into
  other sub-boards and that is normal.
- Text search: Allows the user to search for text in the message.  If
  the text is found, the message area will scroll to it, and it will be
  highlighted.  Repeated searches for the same text will look for the
  next occurrance of that text.
- Allows changing the message subject
  Note: If using a Synchronet 3.17c development build (pre official release),
  you will need a build from July 21, 2019 or newer.
- Navigation: Page up/down, home/end of line, and arrow keys
- Slash commands (at the start of the line):
  /A: Abort
  /S: Save
  /Q: Quote message
  /C: Cross-post message sub-board selection
- Sysops can import a file (stored on the BBS machine) into the message
- Sysops can export the current message to a file (on the BBS machine)
- Configuration file with behavior and color settings.  See section 4
  (Configuration File) for more information.
- Spell check

The following is a summary of the keyboard shortcuts, from SlyEdit's command
help screen (note that file import, with Ctrl-O & Ctrl-X, are only available to
the sysop or users with sysop access, and file import/export takes place on the
BBS machine):

Help keys                                     Slash commands (on blank line)
---------                                     ------------------------------
Ctrl-G       : Input graphic character      | /A      : Abort
Ctrl-L       : Command key list (this list) | /S      : Save
Ctrl-T       : List text replacements       | /T      : List text replacements
                                            | /Q      : Quote message
                                            | /M      : Add a meme
                                            | /U      : Your user settings
                                            | /C      : Cross-post selection
                                            | /UPLOAD : Upload a message

Command/edit keys
-----------------
Ctrl-A       : Abort message                | PageUp  : Page up
Ctrl-Z       : Save message                 | PageDown: Page down
Ctrl-Q       : Quote message                | Ctrl-W  : Word/text search
Insert/Ctrl-I: Toggle insert/overwrite mode | Ctrl-D  : Delete line
Ctrl-S       : Change subject               | ESC     : Command menu
Ctrl-U       : Your user settings           | Ctrl-C  : Cross-post selection
Ctrl-K       : Change text color            | Ctrl-R  : Spell checker
Ctrl-O       : Import a file                | Ctrl-X  : Export to file


A couple notes on the help screen:
- The key help (as shown above) will be shown in a scrollable window
- If the user's terminal supports RIP, SlyEdit will display a RIP header
  above the help (rather than an ANSI header). RIP support is still in its
  initial stages, and I'm not sure where else to make use of RIP yet in SlyEdit.



5. Configuration file
=====================
The configuration file included in the Synchronet repository is
SlyEdit.example.cfg in sbbs/ctrl.  You can copy it to SlyEdit.cfg to make your
own customizations.

The configuration file is split up into 3 sections - Behavior, Ice colors, and
DCT colors.  These sections are designated by [BEHAVIOR], [ICE_COLORS], and
[DCT_COLORS], respectively.

To help with configuration, there is a menu-driven configuration script in
sbbs/exec called slyedcfg.js. To run it, open a command prompt in the sbbs/exec
directory and run it with this command:
jsexec slyedcfg

Alternately, you can specify the .js filename extension if you want to:
jsexec slyedcfg.js

The configuration script will copy your SlyEdit configuration file to
SlyEdit.cfg in your sbbs/mods directory. SlyEdit will pick up its configuration
from sbbs/mods if the configuration file is there.

The configuration settings are described below:

Behavior settings
-----------------
Setting                           Description
-------                           -----------
displayEndInfoScreen              Whether or not to display the info
                                  screen when SlyEdit exits.  Valid values
                                  are true and false.  If this option is
                                  not specified, this feature will be
                                  enabled by default.

reWrapQuoteLines                  Whether or not to re-wrap quote lines. Valid
                                  values are true and false.  This feature is
                                  enabled by default.  With this feature
                                  enabled, SlyEdit will re-wrap quote lines
                                  to still be complete and readable after the
                                  quote prefix character is added to the front
                                  of the quote lines.  SlyEdit is able to
                                  recognize quote lines beginning with >
                                  or 2 letters and a > (such as EO>).  If this
                                  feature is disabled, quote lines will simply
                                  be trimmed to make room for the quote prefix
                                  character to be added to the front.

allowColorSelection               Whether or not to let the user change the
                                  color/attributes of the text they're typing.
                                  Defaults to true.  When this is enabled, the
                                  user can change their text color with the
                                  CTRL-K hotkey.

saveColorsAsANSI                  Whether or not to save message color/attribute
                                  codes as ANSI (if not, they will be saved as
                                  Synchronet attribute codes). Saving colors as
                                  ANSI in posted messages provides a
                                  compatibility with other BBS software and
                                  message readers that might not understand
                                  Synchronet attribute codes (but most do
                                  understand ANSI).

allowCrossPosting                 Whether or not to allow cross-posting
                                  messages into different/multiple message
                                  sub-boards.  Valid values are true and false.

enableTextReplacements            Toggles the use of text replacements (AKA
                                  macros) as the user types a message.  Valid
                                  values are true, false, and regex.  If regex
                                  is used, text replacements will be enabled
                                  and used as regular expressions as
                                  implemented by JavaScript.  For more
                                  information, see section 10 (Text
                                  replacements (AKA Macros)).

tagLineFilename                   Specifies the name of the file that stores
                                  taglines, which users can optionally choose
                                  from to be appended to their message upon
                                  saving the message.

taglinePrefix                     Some text to be added to the front of
                                  a tagline that is selected from the user.
                                  The intention of this setting is to
                                  differentiate taglines from the rest of the
                                  message.  This defaults to the string "... "
                                  (3 dots and a space).  If desired, this can
                                  be set to a blank string (nothing after the
                                  =) - for instance, if you only want to put
                                  double quotes around text lines, you could
                                  set this to blank and enable the
                                  quoteTagLines setting.

quoteTaglines                     Whether or not to put selected taglines in
                                  double quotes.  This defaults to false.  If
                                  you like taglines to have double quotes and
                                  no prefix, you can set this to true and set
                                  taglinePrefix to a blank string (nothing
                                  after the =).

shuffleTaglines                   Whether or not to shuffle (randomize) the
                                  list of taglines displayed to the user for
                                  selection.

allowUserSettings                 Whether or not to allow users to configure
                                  their own user settings.  This defaults to
                                  true.

allowEditQuoteLines               Whether or not to allow the user to edit
                                  quote lines.  Valid values are true and
                                  false.  If this option is not specified, the
                                  default value is true.

allowSpellCheck                   Whether or not to allow spell check.  Valid
                                  values are true and false.  Defaults to true.
                                  You might want to disable spell check if,
                                  for instance, the spell check feature causes
                                  an "out of memory" error on your system.

ctrlQQuote                        Whether or not to use Ctrl-Q as the hotkey for
                                  quoting. If not, Ctrl-Y will be used. Valid
                                  values are true and false. Defaults to true.
                                  This is a default value for a user setting;
                                  users are allowed to toggle this according
                                  to their preference (also dependent on what
                                  terminal they're using, since Ctrl-Q can be
                                  used to toggle XON/XOFF flow control or
                                  disconnect.

useQuoteLineInitials              Whether or not to prefix quoted message lines
                                  with the previous author's initials when
                                  replying to a message.  Valued values are
                                  true and false.  If this setting is disabled,
                                  SlyEdit will simply prefix the quoted lines
                                  with " > ", as was done in IceEdit, DCT Edit,
                                  and other message editors of the early-mid
                                  1990s.  This setting is enabled by default.
                                  This setting serves as the default for the
                                  user setting, which users can configure in
                                  their own settings.

indentQuoteLinesWithInitials      When prefixing quoted messages lines with the
                                  previous author's initials, this setting
                                  specifies whether or not to indent quoted
                                  lines with a space.  Valued values are true
                                  and false.  This setting is disabled by
                                  default.  This setting serves as the default
                                  for the user setting, which users can
                                  configure in their own settings.

enableTagLines                    Whether or not to enable the option for users
                                  to choose a tagline to append to their
                                  message upon saving the message.  This
                                  setting serves as the default for the user
                                  setting, which users can configure in their
                                  own settings.

dictionaryFilenames               Dictionary filenames (used for spell check).
                                  This is a comma-separated list of dictionary
                                  filenames.  The dictionary filenames are in
                                  the format dictionary_<language>.txt, where
                                  <language> is the language name.  In this
                                  list, the filenames can be in that format, or
                                  just <language>.txt, or just <language>.
                                  Leave blank to use all dictionary files that
                                  exist on the system.  The dictionary files
                                  are located in either sbbs/mods, sbbs/ctrl,
                                  or the same directory as SlyEdit.

memeMaxTextLen                    For appending a 'meme' to a message, this
                                  specifies the maximum text length for a meme.

memeDefaultWidth                  The default width for memes

memeStyleRandom                   For appending a meme to a message, whether or
                                  not to choose a random style (border style &
                                  color) for the meme. The user will still be
                                  able to change it. Valid values are true and
                                  false. If this is true, the border & color
                                  settings will be ignored.
								  
memeDefaultBorder                 Default border for posting a meme. This can be
                                  one of the following:
                                  none
                                  single
                                  mixed1
                                  mixed2
                                  mixed3
                                  double
                                  ornate1
                                  ornate2
                                  ornate3
								  This can also be a number between 1 and the
                                  maximum number of meme border styles. You can
                                  refer to sbbs/exec/load/meme_lib.js - Near the
                                  top, there are definitions such as
                                  BORDER_NONE, BORDER_SINGLE, etc., up to
                                  BORDER_COUNT (which is the number of border
                                  styles supported).

memeDefaultColor                  For appending a meme to a message, this is a
                                  number that specifies the coloring for the
                                  meme. This can be between 1 and the maximum
                                  number of coloring options supported by
                                  sbbs/exec/load/meme_chooser.js. You can refer
                                  to sbbs/exec/load/meme_chooser.js. At the time
                                  of this writing, under "function main" in that
                                  file, there is an array of attribute codes,
                                  declared via "var attr", and there are are 7
                                  of them as of now.

memeJustify                       For appending a meme to a message, this
                                  specifies the text justification. Valid
                                  values are center, left, and right.

String settings
-----------------
Setting                           Description
-------                           -----------
stringsFilename                   The name of the file containing text strings
                                  displayed in SlyEdit. The default is
                                  SlyEditStrings_En.cfg, which is located in
                                  sbbs/ctrl - You can copy this to sbbs/mods and
                                  keep a modified copy there if you want. The
                                  strings in this file can contain Synchronet
                                  attribute codes (prefixed with \x01).

Ice colors
----------
Setting                           Description
-------                           -----------
ThemeFilename                     The name of the color theme file to use.
                                  Note: Ice-style theme settings are described
                                  in Section 5: Ice-style Color Theme Settings.
                                  If no theme file is specified, then default
                                  colors will be used.
menuOptClassicColors              Whether or not to use the classic Ice-style
                                  menu option colors.  Valid options are true
                                  and false.  If this option is set to false,
                                  then new colors will be used for Ice-style
                                  menu options.  If this is set to true, then
                                  the classic Ice-style menu option colors will
                                  be used.  Note that if this is set to false,
                                  the color setting SelectedOptionTextColor
                                  won't be used.

DCT colors
----------
Setting                           Description
-------                           -----------
ThemeFilename                     The name of the color theme file to use.
                                  Note: DCT-style theme settings are described
                                  in Section 8: DCT-style Color Theme Settings.
                                  If no theme file is specified, then default
                                  colors will be used.

The color theme files are plain text files that can be edited with a text
editor.  For each color setting, you can specify color attribute characters as
specified in the Synchronet documentation for attribute (Ctrl-A) codes:
http://wiki.synchro.net/custom:ctrl-a_codes
Note that you don't need control (Ctrl-A) characters for the color settings;
just the attribute characters.  A couple examples of specifying colors:

High green: gh
Normal cyan: c


6. Strings configuration file
=============================
The strings configuration file (added in SlyEdit v1.89e, 2025-02-09) is a file
similar in concept to text.dat, which is intended to contain strings displayed
by SlyEdit. The format is like the other configuration files, in name=value
format.

Currently, the only configuratble string in there is areYouThere, which
specifies a string to display for the input timeout warning (like item 668,
AreYouThere in text.dat). The reason SlyEdit has its own version of this string
is in case you decide to change the one in text.dat; for SlyEdit, it should be
a string that can fit on one line on the screen.


7. Ice-style Color Theme Settings
=================================
Note that you don't need control (Ctrl-A) characters for the color settings;
just the attribute characters.

The following options are valid for Ice-style theme files:
----------------------------------------------------------
QuoteLineColor                    The color for quoted lines in the message

BorderColor1                      The first color to use for borders
                                  (for alternating border colors)

BorderColor2                      The other color to use for borders
                                  (for alternating border colors)

KeyInfoLabelColor                 The color to use for key information
                                  labels (displayed on the bottom border)

TopInfoBkgColor                   The color to use for the background in
                                  the informational area at the top

TopLabelColor                     The color to use for informational labels
                                  in the informational area at the top

TopLabelColonColor                The color to use for the colons (:) in the
                                  informational area at the top

TopToColor                        The color to use for the "To" name in the
                                  informational area at the top

TopFromColor                      The color to use for the "From" name in the
                                  informational area at the top

TopSubjectColor                   The color to use for the subject in the
                                  informational area at the top

TopTimeColor                      The color to use for the time left in the
                                  informational area at the top

TopTimeLeftColor                  The color to use for the time left in the
                                  informational area at the top

EditMode                          The color to use for the edit mode text

QuoteWinText                      The color for non-highlighted text in
                                  the quote window

QuoteLineHighlightColor           The color for highlighted text in the
                                  quote window

QuoteWinBorderTextColor           The color for the quote window borders

; Colors for the multi-choice options
SelectedOptionBorderColor         The color to use for the borders around
                                  text for selected multi-choice options

SelectedOptionTextColor           The color to use for the text for selected
                                  multi-choice options

UnselectedOptionBorderColor       The color to use for the borders around
                                  text for unselected multi-choice options

UnselectedOptionTextColor         The color to use for the text for unselected
                                  multi-choice options

8. DCT-style Color Theme Settings
=================================
Note that you don't need control (Ctrl-A) characters for the color settings;
just the attribute characters.

The following options are valid for DCT-style theme files:
----------------------------------------------------------
QuoteLineColor                    The color for quoted lines in the message

TopBorderColor1                   The first color to use for the
                                  top borders (for alternating border
                                  colors)

TopBorderColor2                   The other color to use for the
                                  top borders (for alternating border
                                  colors)

EditAreaBorderColor1              The first color to use for the
                                  edit area borders (for alternating border
                                  colors)

EditAreaBorderColor2              The other color to use for the
                                  edit area borders (for alternating border
                                  colors)

EditModeBrackets                  The color to use for the square brackets
                                  around the edit mode text that appears
                                  in the bottom border (the [ and ] around
                                  the "INS"/"OVR")

EditMode                          The color to use for the edit mode text

TopLabelColor                     The color to use for the informational labels
                                  in the informational area at the top

TopLabelColonColor                The color to use for the colons (:) in the
                                  informational area at the top

TopFromColor                      The color to use for the "From" name in the
                                  informational area at the top

TopFromFillColor                  The color to use for the filler dots in the
                                  "From" name in the informational area at the top

TopToColor                        The color to use for the "To" name in the
                                  informational area at the top

TopToFillColor                    The color to use for the filler dots in the
                                  "To" name in the informational area at the top

TopSubjColor                      The color to use for the subject in the informational
                                  area at the top

TopSubjFillColor                  The color to use for the filler dots in the subject
                                  in the informational area at the top

TopAreaColor                      The color to use for the "Area" text in the
                                  informational area at the top

TopAreaFillColor                  The color to use for the filler dots in the "Area"
                                  field in the informational area at the top

TopTimeColor                      The color to use for the "Time" text in the
                                  informational area at the top

TopTimeFillColor                  The color to use for the filler dots in the "Time"
                                  field in the informational area at the top

TopTimeLeftColor                  The color to use for the "Time left" text in the
                                  informational area at the top

TopTimeLeftFillColor              The color to use for the filler dots in the "Time left"
                                  field in the informational area at the top

TopInfoBracketColor               The color to use for the square brackets in the
                                  informational area at the top

QuoteWinText                      The color for non-highlighted text in
                                  the quote window

QuoteLineHighlightColor           The color for highlighted text in the
                                  quote window

QuoteWinBorderTextColor           The color to use for the text in the quote window
                                  borders

QuoteWinBorderColor               The color to use for the quote window borders

BottomHelpBrackets                The color to use for the brackets displayed in
                                  the line of help text at the bottom

BottomHelpKeys                    The color to use for the key names written in
                                  the line of help text at the botom

BottomHelpFill                    The color to use for the filler dots in the line of
                                  help text at the bottom

BottomHelpKeyDesc                 The color to use for the key descriptions in the
                                  line of help text at the bottom

TextBoxBorder                     The color to use for text box borders (i.e., the
                                  abort confirmation prompt)

TextBoxBorderText                 The color to use for text in the borders of text
                                  boxes (i.e., the abort confirmation prompt)

TextBoxInnerText                  The color to use for text inside text boxes

YesNoBoxBrackets                  The color to use for the square brackets used for
                                  yes/no confirmation prompt boxes

YesNoBoxYesNoText                 The color to use for the actual "Yes"/"No" text in
                                  yes/no confirmation prompt boxes

SelectedMenuLabelBorders          The color to use for the border characters for the
                                  labels of currently active drop-down menus

SelectedMenuLabelText             The color to use for the text for the labels of
                                  currently active drop-down menus

UnselectedMenuLabelText           The color to use for the text for the labels of
                                  inactive drop-down menus

MenuBorders                       The color to use for the drop-down menu borders

MenuSelectedItems                 The color to use for selected items on the drop-down
                                  menus

MenuUnselectedItems               The color to use for unselected items on the
                                  drop-down menus

MenuHotkeys                       The color to use for the hotkey characters in the
                                  menu items on the drop-down menus

9. Common colors (appearing in both Ice and DCT color theme files)
==================================================================
Note that you don't need control (Ctrl-A) characters for the color settings;
just the attribute characters.

listBoxBorder                     The color to use for the border of list
                                  boxes, such as the cross-post area selection
                                  box and the text replacements list box.  Note
                                  that this setting replaces crossPostBorder,
                                  which was used in previous versions of
                                  SlyEdit.

listBoxBorderText                 The color to use for text in the borders of
                                  list boxes, such as the cross-post area
                                  selection box and the text replacements list
                                  box.  Note that this setting replaces
                                  crossPostBorderText, which was used in
                                  previous versions of SlyEdit.

crossPostMsgAreaNum               The color to use for the message group/sub-
                                  board numbers in the cross-post area
                                  selection box

crossPostMsgAreaNumHighlight      The color to use for the highlighted
                                  (lightbar) message group/sub-board numbers
                                  in the cross-post area selection box

crossPostMsgAreaDesc              The color to use for the message group/
                                  sub-board descriptions in the cross-post
                                  area selection box

crossPostMsgAreaDescHighlight     The color to use for the highlighted
                                  (lightbar) message group/sub-board
                                  descriptions in the cross-post area selection
                                  box

crossPostChk                      The color to use for the checkmarks for the
                                  enabled message sub-boards in the cross-post
                                  area selection box

crossPostChkHighlight             The color to use for the highlighted
                                  (lightbar) checkmarks for the enabled
                                  message sub-boards in the cross-post area
                                  selection box

crossPostMsgGrpMark               The color to use for the current message
                                  group marker character in the cross-post area
                                  selection box

crossPostMsgGrpMarkHighlight      The color to use for the highlighted
                                  (lightbar) current message group marker
                                  character in the cross-post area selection
                                  box

msgWillBePostedHdr                The color to use for the text "Your message
                                  will be posted into the following area(s)"
                                  text when exiting SlyEdit

msgPostedGrpHdr                   The color to use for the group name header
                                  when listing the message's posted message
                                  areas when exiting SlyEdit

msgPostedSubBoardName             The color to use for the message sub-boards
                                  when listing the message's posted message
                                  areas when exiting SlyEdit

msgPostedOriginalAreaText         The color to use for the text "(original
                                  message area)" when listing the message's
                                  posted message areas when exiting SlyEdit

msgHasBeenSavedText               The color to use for the text "The message
                                  has been saved." when exiting SlyEdit

msgAbortedText                    The color to use for the Message Aborted
                                  text when exiting SlyEdit

emptyMsgNotSentText               The color to use for the Message Not Sent
                                  text when exiting SlyEdit

genMsgErrorText                   The color to use for general message error
                                  text when exiting SlyEdit

listBoxItemText                   The color to use for text appearing in list
                                  boxes (such as the list of text replacements
                                  and the list of tag lines)

listBoxItemHighlight              The color to use for the currently selected
                                  item in list boxes (such as the list of text
                                  replacements and the list of tag lines)

10. Text replacements (AKA Macros)
==================================
SlyEdit version 1.29 added text replacements (AKA Macros), which lets you (the
sysop) define words to be replaced with other text as the user types a message.
This feature can be used, for instance, to replace commonly misspelled words
with their correct versions or to replace swear words with less offensive
words.  This feature is toggled by the enableTextReplacements option in
SlyEdit.cfg can can have one of three values:
false : Text replacement is disabled
true  : Text replacement is enabled and performed as literal search and replace
regex : Text replacement is enabled using regular expressions as implemented by
        JavaScript (more accurately, Synchronet's JavaScript interpreter, which
        at the time of this writing is Mozilla's JavaScript engine (AKA
        JavaScript-C or "SpiderMonkey").

The text searches are performed on single words only, as the user types the
message, and are replaced by whatever text you configure for the word.  The
configuration for text replacing is read from a configuration file called
SlyEdit_TextReplacements.cfg, which is plain text and can be placed in either
sbbs/ctrl or in the same directory as SlyEdit's .js files (SlyEdit.js,
SlyEdit_Misc.js, etc.).  Each line in SlyEdit_TextReplacements.cfg needs to
have the following format:
originalWord=replacementText
where originalWord is the word to be replaced, and replacementText is the text
to replace the word with.

The options for the enableTextReplacements configuration optoin are explained
in more detail below:

- false: Text replacing is disabled

- true: Literal text search and replace - The words will be matched literally
and replaced with the text on the right side of the = in
SlyEdit_TextReplacements.cfg.  In this mode, word matching is not
case-sensitive.  The words can have both uppercase and lowercase letters and
will still be matched to the words configured in SlyEdit_TextReplacements.cfg.
In this mode, if the first letter of the original word is uppercase, then the
first letter of the replaced text will also be uppercase.
While this works, one drawback to literal text searching is that it won't
replace a word if there are punctuation characters or other characters around
the word or if the word is misspelled.

- regex: With this option, SlyEdit will treat the word searches (on the left
side of the = in SlyEdit_TextReplacements.cfg) as regular expressions, as
implemented by JavaScript.  When using regular expressions, SlyEdit will start
trying all the regular expressions provided and apply only the first one that
changes the text and will stop there.
Regular expressions offer a more flexible way to serach and replace text.  For
example, in case a word is surrounded by punctuation or other characters, a
regular expression can be given that will still match the word.  For example,
you might want a regular expression that changes "teh" to "the" (since "teh"
is a common misspelling of "the").  To ensure that the word is replaced even if
the word has other characters around it, you could use a regular exprssion and
replacement such as this:
(.*)teh(.*)=$1the$2
That way, even if the word is enclosed in quotes (such as "teh"), the word will
still be converted to "the".  And to preserve the first letter's case (if it's
uppercase or lowercase), this regular expression and replacement string would
handle that:
(.*)([tT])eh(.*)=$1$2he$3
SlyEdit applies the regular expressions on a per-word basis; that is, the
expression .* in a regular expression will match any characters only in the
last word the user typed, not the entire line.

For more information on regular expressions, the
following are some web pages that explain them:

General information about regular expressions:
http://www.regular-expressions.info/tutorial.html

Information on text grouping and backreferencing with parenthesis (the page
calls them "round brackets") - A very powerful feature of regular expressions:
http://www.regular-expressions.info/brackets.html

General information about regular expressions geared toward JavaScript:
http://www.javascriptkit.com/javatutors/re.shtml

Information about using backreferences with regular expressions in JavaScript:
http://stackoverflow.com/questions/2447915/javascript-string-regex-backreferences

JavaScript-specific information on regular exprssions:
http://www.w3schools.com/js/js_obj_regexp.asp
http://www.w3schools.com/jsref/jsref_obj_regexp.asp

One nice thing about JavaScript's implementation (among others) of regular
expressions is that it supports the use of parentheses for character grouping
and backreferencing to place a portion of the matched text in the replacement
text.  In JavaScript, each numbered capture buffer is preceded by a dollar sign
($).  For example, the regular expression (darn) will match the word "darn" and
store it in buffer 1, and in JavaScript (and with SlyEdit's search and
replace), you would use $1 to refer to the word "darn".  For example, for
(darn), the replacement $1it would replace the word "darn" with "darnit".

11. User settings
=================
Since version 1.32, SlyEdit has the ability for each user to configure some
settings for themselves.  Note that SlyEdit settings are not saved or loaded
for guest users, so anyone logging in as guest will always get the default
SlyEdit settings, and guest users should always be asked for what SlyEdit mode
they want to use upon running SlyEdit.

The user settings include the following:
- The SlyEdit mode: DCT, Ice, or Random
- Whether or not to enable the option to use taglines
- Whether or not to prompt for spell checking when saving a message
- Whether or not to add the original author's initials to quote lines
  (this was previously only configurable in SlyEdit.cfg)
- Whether or not to indent quote lines that use author's intials (this was
  previously only configurable in SlyEdit.cfg)
- Whether or not to trim spaces from quoted lines (when replying to messages).
  Some users indent their paragraphs with spaces as a writing style.  When
  this setting is enabled, this feature removes leading spaces from quoted
  lines when replying to a message.  A user might want to disable this, for
  example, when they want to ensure that a message is quoted exactly as-is.
- Whether or not to auto-sign messages.  When this setting is enabled, the
  user's messages are automatically signed with their alias or their real
  name, depending on the sub-board's settings.  There is additionally a setting
  to specify whehter to use only their first name when signing with their
  real name, and also whether to sign emails with their real name (emails
  don't have a configuration like sub-boards do).
- Dictionaries for spell-check.  If there is only one dictionary configured,
  this option won't appear on the user options list.  If there are multiple
  dictionary files on the BBS machine (in either sbbs/mods, sbbs/ctrl, or in
  the same directory as SlyEdit), the user will be able to choose any or all
  dictionaries to be used for the spell check feature.  Multiple dictionaries
  can be selected, so if the user writes messages in more than one language,
  or if a message could contain multiple languages, the spell-check feature
  will use all selected dictionaries for spell checking.

The user settings files will be stored in the sbbs/data/user directory with the
filename <user number>.SlyEdit_Settings, and the user number will be 0-padded
up to 4 digits.

12. Taglines
============
SlyEdit version 1.32 added the ability for users to optionally choose a tagline
to be appended to their message upon saving the message.  Each user can
configure in their user settings whether or not they want to enable this
feature.  The setting enableTaglines in SlyEdit.cfg sets the default setting,
but users are free to change it for themselves.

The taglines are loaded from the text file SlyEdit_Taglines.txt, which can be
located in any of the following directories, searched in the following order:
- sbbs/mods
- sbbs/ctrl
- The same directory as SlyEdit's .js files

Synchronet version 3.16 has the ability to place the tag line after the user's
signature, so if you are running version 3.16 or newer of Synchronet, the tag
line will be placed after the user's signature, if the user has a signature.

Specifically, Synchronet 3.16 starting with the beta build on July 5, 2015 will
behave that way; with earlier versions of Synchronet, the tag line will be
placed before the user's signature.  On June 22, 2015, Synchronet added support
for a file called editor.tag (in each node directory's temp directory) which
can contain an editor tagline, and on July 5, 2015, Synchronet included an
update in which the full path & filename to the tagline file will be written
to line 7 of the MSGINF drop file, which SlyEdit reads on startup.  If the
MSGINF file includes the 7th line, then the tagline will appear after the
user's signature (if they have one).  If the MSGINF file does not include the
7th line, then the tagline will appear before the user's signature.


13. Spell check and dictionaries
================================
Since version 1.64, SlyEdit has a spell check feature.  Spell check can be
started by the user with the Ctrl-R hotkey, or by the Edit > Spell Checker
option in the DCT-style ESC menu (only available when in DCT mode).  For spell
check, SlyEdit will check each word to see if it exists in the configured
dictionary/dictionaries, and if not, it will prompt the user for a corrected
version of the word.  The sysop can configure one or multiple dictionaries in
SlyEdit.cfg with the dictionaryFilenames option.  Dictionary files need to be
in the format dictionary_<languageName>.txt, where <languageName> is the name
of the language.  Also, ideally, the language names should follow standard
language tags, as in "en-us" for English (US), etc.  See these web pages for
more information:
https://en.wikipedia.org/wiki/Language_localisation
http://www.lingoes.net/en/translator/langcode.htm
Also, the dictionary filenames will be parsed and the language name will be
used in the menu of dictionaries in the user options - The user is able to
enable/disable the configured dictionaries for their own use for the spell
checker.

For the dictionaryFilenames option in SlyEdit.cfg, you can specify a comma-
separated list of dictionary filenames.  The dictionary filenames are in the
format dictionary_<languageName>.txt, where <language> is the language name.
In this list, the filenames can be in that format, or just <languageName>.txt,
or just <languageName>.  You can leave the setting blank to use all dictionary
files that exist on the system.

SlyEdit will search for the dictionary files in the following directories, in
this order:
1. sbbs/mods
2. sbbs/ctrl
3. SlyEdit's own directory

Dictionary files must be sorted in order for word matching to work properly
(SlyEdit uses a binary search for quick word matching, which requires the words
to be sorted).  Also, all of the words in the dictionary files must be lower-
case, since SlyEdit does case-insensitive matching by converting words in the
message to lower-case and comparing them with the words in the dictionary.


14. Version history
===================
Version  Date         Description
-------  ----         -----------
2.02     2026-04-27   Bug fix: When uploading a message (with /UPLOAD or /UL),
                      use the uploaded message file as-is (don't interpret
                      attribute codes, etc.)
2.01     2026-03-18   For guest users, always use default settings (with no
                      saved UI style/mode, in particular) and don't save user
                      settings
2.00     2026-03-05   SlyEdit has a new user setting (in the user settings menu,
                      opened with Ctrl-U), to specify which UI style to use
                      (Ice/DCT/Random), and if the user hasn't chosen, SlyEdit
                      will ask the user when SlyEdit starts. That way, there
                      only needs to be one SlyEdit entry in the external
                      editors.
                      SlyEdit will still work as configured previously in
                      Synchronet, but you may wish to edit their external
                      editors in Synchronet  to have only one SlyEdit entry
                      (and it can be just called "SlyEdit").
                      For the SlyEdit entry that is deleted, users who were
                      using that style of SlyEdit may find that their editor
                      has been defaulted to another editor, so they may need
                      to change their preferred editor to SlyEdit again.

                      When removing the 2nd SlyEdit entry from your external
                      editor configuration, you may want to change the internal
                      code for your remaining SlyEdit entry to match (i.e.,
                      "SLYEDIT").

                      NOTE: Before changing your Synchronet editor configuration
                      to only have one SlyEdit, download the following JS script
                      and run it (either on your BBS PC using jsexec or on the
                      terminal); It will list users who currently appear to be
                      using SlyEdit.  Note them down:
                      http://digdist.synchro.net/usersUsingSlyedit.js

                      After changing your Synchronet external editor
                      configuration to just have one SlyEdit (and changing its
                      internal code), you should go through and check the users
                      listed by that script to ensure they have SlyEdit selected
                      as their external editor.

                      Internal: Message edit code has been refactored a bit to
                      simplify the code, for development/maintenance purposes.
                      There should be no change to behavior.
                      I bumped the version up to 2.00 due to significant
                      changes. Also, it was getting close to 2.00 anyway, and
                      changing the version to 2.00 allows for plenty of version
                      numbers within 2.xx for future changes.
1.93     2026-02-11   Made the command key help screen use a scrolling window
                      (frame) so that the user can scroll it up & down. The
                      command key help screen can be shown with Ctrl-L. Also,
                      typing /? on an empty line and pressing enter will show
                      program help, which is basically the same screen but with
                      the SlyEdit version & a couple lines of information above
                      the scrollable key help window.
                      Also, an initial attempt at displaying a RIP header at
                      the top of the aforementioned program info & key help
                      screens.
1.92h    2026-02-10   Command list help now scrolls; also, minimal (and
                      experimental) RIP support - displays a RIP header above
                      the command list help if the user's terminal supports
                      RIP
1.92g    2026-02-08   Fix: For Ice mode, when the user changes their quote
                      hotkey (Ctrl-Q or Ctrl-Y), refresh the hotkey displayed
                      in the bottom edit border so that it shows the correct
                      hotkey
1.92f    2026-01-30   Fix for the 'from' name location when using a wide
                      terminal (> 80 columns)
1.92e    2025-11-11   When loading user settings, if the settings object is null
                      or invalid for some reason, ensure it's an object. This
                      this should fix GiitLab issue #1006, filed by Fernando
                      Toledo.
1.92d    2025-10-26   New user setting to allow users to toggle for themselves
                      whether to use Ctrl-Q to quote (if not, Ctrl-Y will be
                      used). The SlyEdit configuration option ctrlQQuote is now
                      a default for the user setting.
1.92c    2025-10-25   New configuration option to toggle whether Ctrl-Q is the
                      hotkey to be used for quoting (if not, Ctrl-Y will be used
                      instead). The option name in SlyEdit.cfg is ctrlQQuote; it
                      can also be toggled using slyedcfg.js.
                      Improvement to user input for choosing a graphic character
                      to insert.
1.92b    2025-08-02   Cross-post selection fix to not select when just enter is
                      pressed (just confirm; this change was mainly in
                      dd_lightbar_menu.js). Also, updated cross-post help text
                      and bottom border help text for othe cross-post menu to
                      explain that better.
1.92a    2025-06-24   Bug fix: For cross-posting, when selecting a sub-board,
                      the additional menu quit keys were set as item-select keys
                      instead; now they are quit keys as they should be, so that
                      quitting/exiting out of the cross-post sub-board selection
                      menu does not select the sub-board.
1.92     2025-06-10   Added a new user setting to toggle whether to wrap quote
                      lines to the terminal width. Turning this off can help
                      preserve message formatting when quoting. Also, added
                      a user toggle option for whether to join wrapped quote
                      lines.
                      Also, the included configuration file is now
                      SlyEdit.example.cfg. You can copy it to SlyEdit.cfg to
                      make your own customizations. slyedcfg.js will copy it
                      to sbbs/mods/SlyEdit.cfg.
1.91     2025-05-20   Bug fix: Message text is now properly re-written when the
                      Program Info box (available from DCT mode) is erased
1.90     2025-05-07   Better behavior when editing a general file rather than a
                      message (i.e., if the user is editing an SSH key): Not
                      adding a space after each (wrapped) line, etc.. Lines will
                      still be wrapped in the user's terminal during editing but
                      should be saved properly.

                      Color/attribute codes are no longer removed from quote
                      lines. Although quote lines still appear in SlyEdit with
                      one (configurable) color, the quoted text will retain
                      color/attribute codes when the message is posted.

                      New feature: A 'meme' can be added to the message by
                      typing /m on an empty line by itself and pressing enter.

                      Bug fix: When closing the User Settings dialog, quote
                      lines are refreshed with the configured quote line color
                      (instead of with any color codes included in those lines)
 
                      Bug fix: When closing the User Settings dialog, existing
                      message lines are refreshed better; sometimes, there were
                      small parts of the beginnings of some lines that were
                      blanked out.
 
                      Bug fix (sort of): DCT mode File menu wasn't drawing when
                      the user presses the ESC key to bring up the menu. I don't
                      know why that's happening. I found a kludge that seems to
                      fix it.
 
                      On startup, SlyEdit now sets the 'normal' attribute on the
                      console to clear away any background color or other
                      attribute(s) that may have been set.
1.89e    2025-02-09   User inactivity timeout: Display a warning message
                      (without messing with the screen). New [STRINGS]
                      configuration section with stringsFilename to specify the
                      name of a strings file, which for now just contains an
                      areYouThere setting
1.89d    2025-01-26   User inactivity timeout improvement (via use of
                      console.getkey() instead of the custom function that was
                      being used)
1.89c    2024-10-29   Open the quote file in binary mode to avoid EOF issues on
                      Windows if a unicode "right arrow" code exists in the
                      message, which would get truncated to ASCII Ctrl-Z (ASCII
                      26), which is interpreted as EOF on Windows.
1.89b    2024-05-11   In SlyEdit_Misc.js, check to see that
                      xtrn_area.editor[user.editor] is an object before using it.
1.89a    2024-05-04   Don't line-wrap poll messages for quoting, as that could
                      mess up the formatting of the poll options.  Also, a
                      minor fix for the 'to' name length in DCT mode when using
                      a wide terminal.
1.89     2024-04-30   Quote wrapping length: When re-wrapping quote lines, read
                      the editor configuration settings for "word-wrap quoted
                      text" as specified in xtrn.ini (settable in scfg) - Wrap
                      quote lines to the width specified there, or if not
                      specified, default to 79 columns. This is to help ensure
                      quoted text is a reasonable width for many terminals. The
                      wrapping logic is also called for prepending quoted text
                      with the quote prefix, so (for now) there needs to be a
                      default quote wrap width.
1.88d    2024-02-16   Header display update for UTF-8. And printing from/to/subj
                      after writing the header with empty data so that the
                      header 'graphic' characters & everything lines up
                      properly.
1.88c    2024-02-12   UTF-8 support in the displayed header and when quoting
                      text and when quoting message text
1.88b    2024-02-11   Previous change reverted; now has "real" UTF-8 support.
                      New feature: Entering a graphic char with Ctrl-G (Ctrl-G
                      was previously the key for general help, which wasn't much)
1.88     2024-02-07   Support for entering UTF-8/Unicode characters; internally
                      uses K_CP437 to convert to CP437, so the strings are still
                      in CP437 internally in Synchronet
1.87a    2023-12-17   Using the msg_area.sub object to check sub-board settings
                      instead of opening the sub-board (for determining whether
                      to post with real name)
1.87     2023-08-15   Improvement to paragraph/line breaks in quote line wrapping
1.86     2023-07-26   Started refactoring the re-wrapping of quote lines to work
                      better for the various quote prefixes used in various
                      messages.
1.85     2023-05-15   Internal: Refactored readColorConfig() in _DCTStuff.js
                      and _IceStuff.js.
                      Removed the readValueSettingConfigFile() function.
1.84     2023-02-10   Sysops: When importing a file from the BBS machine,
                      SlyEdit now prompts to send it immediately or not (if not,
                      edit it before sending).  Sending immediately can be
                      useful for posting ANSI files unmodified.
1.83     2022-12-13   Quote lines that are wider than the user's terminal width
                      are now wrapped to the user's terminal width to ensure
                      all the quote lines are entirely available to be quoted.
1.82     2022-12-01   Bug fix: Added some safety checks when reading the
                      configuration file
1.81     2022-11-26   Refactored the way the configuration file is read. Also,
                      the color configuration files now can just specify
                      attribute characters, without the control character.
1.80     2022-07-04   Added the ability to change/set the text color (using the
                      CTRL-K hotkey).  If desired, changing the text color can
                      be disabled if, and the colors can be saved as ANSI
                      (rather than Synchronet attribute codes) for compatibility
                      with other BBS software & message readers. The
                      allowColorSelection option in SlyEdit.cfg specifies
                      whether or not to allow changing text colors, and the
                      saveColorsAsANSI option specifies whether or not to save
                      the message colors as ANSI.
1.79     2022-06-21   JS strict mode enabled. Small JS issues fixed.
1.78     2022-06-09   Removed high-ascii characters from the SlyEdit JS files;
                      used ascii() with their numeric ASCII values instead. This
                      should avoid issues with text editors converting
                      characters incorrectly.
1.77     2022-05-27   Fixed a few instances where SlyEdit was trying to access
                      sub-board information with an empty sub-board code (in the
                      rare case when no sub-boards are configured).
1.76     2022-03-05   When selecting quote lines in a reply message, SlyEdit now
                      remembers the position in the quote selection menu so that
                      the quote menu isn't always at the top whenever it's
                      opened again.  This issue may have been introduced when
                      SlyEdit was refactored to use DDLightbarMenu for its
                      lightbar stuff.
1.75     2021-12-11   Refactored the cross-post menu and quote selection window
                      to use DDLightbarMenu instead of SlyEdit's own lightbar
                      code.
1.74     2021-01-23   Making use of the new K_NUL and checking user input
                      against null, SlyEdit no longer thinks a 0x0 (sent with
                      CTRL-Space on a Mac) is a timeout.  K_NUL was added on
                      Jan. 21, 2021 by Rob Swindell. (This update was from Deon
                      George)
1.73     2020-03-31   Now uses DDLightbarMenu instead of SlyEdit's own internal
                      choice menu.
1.72     2020-03-04   For cross-posting, to make sure the user can post in a
                      sub-board, SlyEdit now checks the can_post property of the
					  sub-board rather than checking the ARS.  The can_post
					  property covers more cases.
1.71     2020-03-03   Added a new configuration option, allowSpellCheck, which
                      the sysop can use to configure whether or not spell check
                      is allowed.  You might want to disable spell check if the
                      spell check feature causes SlyEdit to abort with an error
                      saying it's out of memory.
1.70     2019-08-15   Fix for a bug introduced in the flowing-line update in
                      1.68 where some quote blocks were sometimes not being
                      included when saving a message.  Also, quote lines are now
                      rapped to the user's terminal width rather than 80
                      olumns.
1.69     2019-08-14   Updated to only use console.inkey() for user input and not
                      use console.getkey() anymore. The change was made in the
                      getUserKey() function in SlyEdit_Misc.js. Also, SlyEdit
                      will now write the editor style (ICE or DCT) to result.ed
                      at the end when a message is saved.  Also, when editing a
                      message, if the cursor is at the end of the last line and
                      the user presses the DEL key, then treat it as a
                      backspace. Some terminals send a delete for backspace,
                      particularly with keyboards that have a delete key but no
                      backspace key.
1.68     2019-08-09   Updated to honor the SUB_ANON and SUB_AONLY flags for the
                      sub-boards when cross-posting so that the "from" name is
                      "Anonymous" if either of those flags enabled.
                      Updated to allow message uploading. Started working on
                      updates to save new text lines as one long line, to help
                      with word wrapping in offline readers etc.
1.67     2019-07-21   Now supports the RESULT.ED drop file, with the ability to
                      change the subject. Synchronet 3.17c development builds
                      from July 21, 2019 onward support result.ed even for
                      editors configured for QuickBBS MSGINF/MSGTMP.
1.66     2019-05-29   Added more parsing for dictionary filenames for 'general'
                      dictionaries and 'supplimental' ones
1.65     2019-05-24   Added support for parsing many standard language tags for
                      the dictionary filenames
1.64     2019-05-24   Started working on adding a spell check feature. Also,
                      updated to use require() instead of load() for .js
                      scripts when possible.
1.63     2019-04-18   Started working on supporting word-wrapping for the entire
                      width of any terminal size, beyond 79.
1.62     2018-11-11   Updated to save the message if the user disconnects, to
                      support Synchronet's message draft feature that was added
                      recently.
1.61     2018-08-03   Updated to delete instances of User objects that are
                      created, due to an optimization in Synchronet 3.17 that
                      leaves user.dat open
1.54     2017-12-26   Improved quoting with author initials when a > character
                      exists in the quote lines: Not mistaking the preceding
                      text as a quote prefix if it has 3 or more non-space
                      characters before the >.  Also fixed an issue where
                      wrapped quote lines were sometimes missing the quote line
                      prefix.
1.53     2017-12-19   Updated the PageUp and PageDown keys to ensure they match
                      what's in sbbsdefs.js, since Synchronet added key codes
                      for those keys on December 17, 2018.  SlyEdit should still
                      work with older and newer builds of Synchronet, with or
                      without the updated sbbsdefs.js.
1.52     2017-12-17   Added the ability for the sysop to toggle whether or not
                      to allow users to edit quote lines, using the
					  configuration option allowEditQuoteLines.
.. Removed some history comments ..
1.00     2009-08-22   Initial public release
         2009-05-11   Started development
