This file lists all of the changes made for each release of the Digital
Distortion Message Reader.

Revision History (change log)
=============================
Version  Date         Description
-------  ----         -----------
1.41     2021-02-12   Bug fix: When changing to another area with the lightbar
                      interface, if the user's current sub-board is a
                      high-numbered sub-board and they select a message group
                      with fewer sub-boards, the highlighted sub-board in that
                      group would be set to that high number and would be
                      incorrect.  That has been fixed.  Copied a fix from my
                      stand-alone message area chooser.  In that scenario, the
                      current highlighted sub-board in the other group will be
                      the first one.
1.40     2021-01-31   (Michael Long) Fixed left/right colors not being
                      customizable on message list lightbar
1.39     2020-12-01   When forwarding a message, added the ability to optinally
                      edit the message before forwarding it.
1.38     2020-11-26   Bug fix: When forwarding a message, it now correctly sets
                      sets the to_net_type property in the message header to
                      FidoNet or internet for those types of message
                      destinations
1.37     2020-07-11   Added mouse support to the scrollable reader interface.
                      The integrated area changer functionality doesn't have
                      mouse support yet.
1.36     2020-05-23   Added a command-line parameter, -onlyNewPersonalEmail,
                      which specifies to list/read only new/unread personal
                      email to the user.  And for integration with Synchronet
                      via the "Read Email" loadable module, this is to be used
                      together with the updated DDReadPersonalEmail.js.  This
                      is intended to support the "read your unread mail only"
                      option in the email menu.
1.35     2020-05-13   Fixed some logic in determining how to address a personal
                      email when replying (either to a local user or via their
                      network address).
1.34     2020-05-11   The message list mode now honors anonymous posts, showing
                      the 'from' name as "Anonymous" (for non-sysops).  The
                      sysop can still see the real name of the poster.  The
                      reader mode already honored the 'anonymous' flag.
1.33     2020-04-21   Fixed: A new user starting to read messages in a sub-board
                      no longer causes an error (it checks for the scan_ptr
                      being 0xffffffff).  This had been fixed in a couple places
                      previously, but apparently not this particular case.
1.32     2020-04-19   Removed some code that's no longer used.  Also, fixed an
                      issue when changing to another sub-board with the
                      traditional-style (non-lightbar) list where it was slow to
                      list sub-boards.  For the number of messages, it was
                      checking all headers to ignore ones marked as deleted,
                      etc., but that can be fairly slow..  Now it just uses
                      total_msgs for the MessageBase object, which is a lot
                      faster and still gives an idea of how many messages are
                      there.
1.31     2020-04-13   The area change feature now uses DDLightbarMenu.  There
                      is no more internal lightbar code in this message reader.
1.30     2020-04-07   The message list features now uses DDLightbarMenu rather
                      than the internal lightbar menu code.  Requires the
                      latest dd_lightbar_menu.js (in sbbs/exec/load).
                      Later I also plan to update the area chooser code to also
                      use DDLightbarMenu and remove the internal lightbar
                      chooser code from DDMsgReader altogether.
1.29     2020-04-03   When reading a message, if a message is written to the
                      current user, the 'To' username in the header above the
                      message is now written in a different color.  Also, there
                      are new color settings available in the theme
                      configuration file (see the readme for descriptions):
                      msgHdrMsgNumColor, msgHdrFromColor, msgHdrToColor,
                      msgHdrToUserColor, msgHdrSubjColor, msgHdrDateColor
1.28     2019-12-21   Bug fix: When the user changes to a different message
                      area while reading a message, the reader would exit with
                      an error due to an invalid last-read message number.
                      This has been fixed.
1.27     2019-09-16   Bug fix: Now displays the message score in the header
                      even if the message only has downvotes
1.26     2019-09-12   Fixed a bug that was causing some of the message vote
                      tally information to be displayed as "undefined"
1.25     2019-08-29   Added the ability to search for message groups and
                      sub-boards when changing to another sub-board. Search
                      can be started with the / key or CTRL-F (Find). Also, in
                      lightbar mode, the N key can be used to highlight the
                      next match in the list.
1.24     2019-08-17   When making a private reply on local email, an error is
                      now outputted if the recipient's user number is not
                      found.  Also, fixed an 'undefined' bug that happened when
                      searching for messages sometimes.
1.23     2019-07-27   If a message is in UTF-8 format and the user's terminal
                      doesn't support UTF-8, the message text will be converted
                      to CP437.  Also, if there is a color/attribute code in
                      the message before the message text and there are no
                      other color/attribute codes, the color/attribute codes
                      will be removed so  that the entire message isn't colored
1.22     2019-05-12   If the message score is 0, with upvotes and total_votes
                      both 0, then don't show the score when using the default
                      header ANSI.  This is what was intended, but the 0 score
                      started showing up in more recent builds of Synchronet.
1.21     2019-05-04   New uses require() instead of load(), if the require()
                      function exists, to load required .js library scripts.
                      This helps avoid 'multiple definition' errors.  The
                      require() function was added in Synchronet 3.17, so
                      if the require() function doesn't exist, then the reader
                      will use load().
1.20     2019-04-26   Added configurable options for the message score colors
                      for the message list: msgListScoreColor,
                      msgListToUserScoreColor, msgListFromUserScoreColor, and
                      msgListScoreHighlightColor
1.19     2019-04-25   If the terminal size is wide enough (at least 86
                      characters), the overall vote scores for the messages
                      is now displayed in the message list.  Also, fixed a
                      bug introduced in the previous version where the vote
                      scores were no longer being displayed when reading a
                      message.  It's no longer using MsgBase.get_index() and
                      uses get_all_msg_headers(), as before, since that's what
                      is required for message tallies to be included in the
                      message headers.
1.18     2019-04-15   Made use of the new MsgBase.get_index() function (if
                      available) for better performance.  Added 'undefined'
                      checks for some of the messaeg attribute definitions
                      before adding them to the attribute strings, since some
                      of them have changed.
1.17     2019-01-02   Added support for Synchronet's new voting feature that
                      was added in Synchronet 1.17.  Added support to allow the
                      sysop to validate messages in moderated message areas.
                      Fixed various bugs related to doing a newscan, displaying
                      messages with ANSI content, out-of-bounds error when
                      deleting a message, etc.  Updated to set the message
                      number field length dynamically based on the number of
                      messages in the sub-board.  It will be at least 4 but
                      can be more than 4 if there are 10000 messages or more
                      in a sub-board.  Updated so that when listing personal
                      email, it will use the regular formatting colors rather
                      than the colors for messages to the user, since all
                      personal emails are to the user (the 'to user' colors for
                      each email might be obnoxious).
                      Also, updated to support Synchronet's Avatar feature
                      which was added in version 3.17.  For that feature to
                      work, you will need the latest .js files - Specifically,
                      for this reader, you would need smbdefs.js and
                      avatar_lib.js.  Added a new configuration setting,
                      displayAvatars, which toggles whether or not to display
                      user avatars in the message headers.  Valid values are
                      true and false.
                      Also Added the new @-code MSG_FROM_AND_FROM_NET and
                      MSG_FROM_AND_FROM_NET-L (for left-justification with
                      field length), which shows the 'from' name with the from
                      network in parenthesis.  Updated the default message
                      header to show that information.
                      Also contains various bug fixes.
1.16     2016-09-11   Added a new feature that allows users to forward a
                      message to an email address or to another user on the
                      BBS (using the O key).  This can be useful, for
                      instance, if the user wants to send a message in a
                      public sub-board to their personal email for future
                      reference or send a message from a public sub-board to
                      another user to discuss the topic privately.
1.15     2016-08-29   - New user edit feature for sysops only: While reading
                      a message, the U key will edit the user account of the
                      author of the message (only if it's a local user account
                      on the BBS)
                      - Bug fix: Private reply on a networked sub-board
                      was no longer working (different from the bug fixed
                      in 1.14)
                      - Implemented a check to (hopefully) prevent a crash
                      related to parsing and replacing @-codes related to
                      file areas
1.14     2016-08-17   Bug fix: Version 1.13 was failing to reply to
                      private emails
1.13     2016-08-16   - Bug fix: Message number error when a new user starts
                      reading messages.
                      - Bug fix: Now, it should always successfully save a
                      message header with the READ attribute when the user
                      it was addressed to has read the message.  This should
                      fix an issue where the same message would keep coming
                      up in a newscan, etc.
1.12     2016-05-11   - Updated the way the pause prompt is shown in the help
                      screen, in case the sysop has configured an external
                      module (Baja/JS) to run for a pause prompt.
                      - Potential bug fix: When translating a message number to
                      a message index, added a check to ensure the value is
                      a number, to (hopefully) avoid a potential crash.
1.11     2016-03-25   The reader now updates the number of new posts read by
                      the user during the session.  This is represented by
                      bbs.posts_read in JavaScript.  Also, did some internal
                      refactoring of the code, removing some old code leftover
                      from my message lister that is no longer needed in this
                      reader.  DDMsgReader.js is a bit smaller due to the
                      refactor.
1.10     2016-02-19   Added a new configuration option,
                      readingPostOnSubBoardInsteadOfGoToNext, that affects what
                      happens after the user reads the last message on a
                      sub-board (for normal reading, not for newscans etc.): If
                      this is set to true, then the reader will prompt the user
                      if they want to post on the sub-board, then exit (this
                      is the stock Synchronet behavior).  If this is set to
                      false, then the reader will prompt the user whether to go
                      to the next sub-board after reading the last message on a
                      sub-board.  Also, added the postOnSubBoard text
                      configuration parameter for the theme filename, which
                      specifies the text to use for prompting the user if they
                      want to post on the sub-board after reading the last
                      message.
                      Added new configuration options areaChooserHdrFilenameBase
                      and areaChooserHdrMaxLines.  These options specify the
                      filename base for a header file to use for the message
                      area chooser list and the maximum number of lines to use
                      from the area chooser header file.  The filaname is
                      without the extension - The reader will first look for an
                      .ans version, then an .asc version.  Additionally,
                      multiple header files can be used for different terminal
                      widths - For example, chooserMsgHdr-80.ans for an
                      80-column terminal, choosrMsgHdr-140.ans for a 140-column
                      terminal, etc.
                      Updated so that when using the message written dates
                      (instead of the imported dates) in the message list & area
                      chooser, it will adjust the message written dates to the
                      BBS's local time zone so that they are all consistent.
1.09     2016-01-15   Updated to not center the message header lines
                      horizontally.  Now, it will display the header lines
                      starting on column 1.  This was done to fix a display
                      issue in some terminal software.
1.08     2016-01-10   Bug fix: When scanning message sub-boards, it wasn't
                      always closing the sub-board when there were no new
                      messages, resulting in further sub-boards failing to open
                      after a while.  That has been fixed.
1.07     2015-12-24   - Added the ability to select multiple messages (for
                      actions such as batch delete), and added the ability to
                      delete multiple selected messages.  Batch deleting is
                      only allowed when the user has permission to delete
                      messages (such as their own personal email).  Messages
                      can be selected in the following ways:
                        o Lightbar message list: The spacebar selects an
                          individual message.  CTRL-A lets the user select or
                          un-select all messages.
                        o Traditional message list: The S key lets the user
                          select or un-select messages, by typing message
                          numbers, A to select all, or N to select none
                          (un-select all).  The list of message numbers is
                          comma-separated or space-separated, allowing
                          for number ranges such as 120-130 for instance.
                        o Reader interface: The spacebar selects the message.
                      To delete the selected messages, the user must be in the
                      message list; the CTRL-D key combo is used for batch
                      delete, and it will prompt the user for confirmation
                      before deleting the messages.
                      - Added the following configurable items in the theme
                      file:
                      delSelectedMsgsConfirmText
                      selectedMsgsDeletedText
                      cannotDeleteAllSelectedMsgsText
                      selectedMsgMarkColor
1.06     2015-12-13   - Updated so that a sub-board new-message-scan (with the
                      new_msg_scan_cur_sub command-line parameter) can make
                      use of the -subBoard command-line option to scan a
                      specific sub-board, which may be different than the
                      user's current sub-board.
                      - Added a new configuration option, pauseAfterNewMsgScan,
                      which specifies whether or not to pause (i.e., with a
                      "finished" message) after doing a new message scan.
                      - Bug fix: The configFilename command-line parameter was
                      not being read correctly on startup; this has been fixed.
                      - Bug fix: Doing a new-message-scan should now always
                      display the correct sub-board @-code information in the
                      header above the message.
1.05     2015-12-06   - Improved displaying of messages with ANSI codes.  The
                      reader now makes use of frame.js and scrollbar.js (in the
                      sync/exec/load directory) to enable a scrollable user
                      interface when displaying messages with ANSI content.
                      There is also a new configuration option,
                      readerInterfaceStyleForANSIMessages, which lets the sysop
                      configure whether to use a scrollable or traditional user
                      interface for ANSI messages.  The reason for that option
                      is in case ANSI messages don't look good when using
                      frame.js & scrollbar.js - When set to a traditional user
                      interface for ANSI messages, the reader will use a
                      non-scrolling user interface for displaying messages with
                      ANSI codes, which simply sends the message to the client
                      and lets the client display the ANSI content.
                      - More kludge lines displayed (with the 'K' key), and
                      all message header lines are now displayed (with the
                      'H' key).  This is a sysop feature.
                      - Color configuration options for the kludge/header line
                      labels (hdrLineLabelColor) and kludge/header line values
                      (hdrLineValueColor)
                      - Bug fix related to interpreting colors from other BBS
                      software (WWIV, PCBoard, Wildcat, Celerity, Renegade)
1.04     2015-10-10   - New feature: Users can now download attached files,
                      whether uploaded to their mailbox in Synchronet or
                      attached via internet email.
                      - New feature: Sysops can save a message to the BBS
                      machine (using the Ctrl-S key combo).
                      - User experience improvements: Added a pause after
                      saving a message so that the user can see Synchronet's
                      message save screen before going back to the reader or
                      message list.  Also, in the message list, PageDown now
                      goes to the last message when on the last page, and
                      similarly, PageUp goes to the first message when on the
                      first page.
                      - Updated the DDReadPersonalMail.js loadable module
                      script to start reading personal email in lister mode
                      by default, which is more in line with what Synchronet
                      does by default.  That will let the user select a message
                      to read first.
1.03     2015-07-12   Bug fix: In Linux, when replying to the last message in
                      a sub-board during a newscan or in read mode, it would
                      not immediately refresh the messagebase information, so
                      it would not see the new message posted.  This has been
                      fixed by closing the messagebase while the user is
                      posting a reply message and re-opening the messagebase
                      when the user is done posting the reply.
1.02     2015-06-10   Bug fix in DDScanMsgs.js: Switched to bbs.scan_msgs()
                      instead of bbs.scan_subs() for all other scan modes
                      besides SCAN_READ.  Updated the version number to
                      reflect that; no change to the actual reader.
1.01     2015-05-17   Bug fix: The enhanced reader header file is now correctly
                      displayed even if the lengths of its lines are
                      inconsistent.
1.00     2015-05-06   Initial release