home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 12 / CD_ASCQ_12_0294.iso / vrac / mr2_198.zip / READ.ME < prev    next >
Text File  |  1994-02-13  |  134KB  |  2,646 lines

  1. MR/2 - A QWK Compatible Mail Reader for OS/2.  02/14/94
  2.  
  3. Copyright (c) 1994, Knight Writer Software Company.
  4. All rights reserved.
  5.  
  6. ===================================================================
  7.                           N O T I C E
  8. ===================================================================
  9. This IS a shareware package, and does require a registration fee if
  10. you choose to continue using it after 30 days.   The registration
  11. fee is currently $25 US.  Eventually, the product MAY have a
  12. "begging" screen with a key-file that will register the software
  13. and suppress it.  The more interest I get, the more likely I am to
  14. continue with improvements.
  15. ------------------------------------------------------------------
  16.  
  17. CONTACTING THE AUTHOR
  18. =====================
  19.  
  20. You  can contact me in a number  of ways.  Unfortunately, I can't
  21. provide a phone number at this time.
  22.  
  23. US Mail:       Nick Knight
  24.                1823 David Ave.
  25.                Parma, Ohio 44134
  26.  
  27. Fido netmail:  1:157/2 to "Nick Knight"
  28.  
  29. Internet:      User "Nick Knight", (nick.knight@pcohio.com)
  30.  
  31. Fido Echomail: Find the Fidonet OS2PRODSUPPORT conference.  I'm there.
  32.  
  33.                Echomail messages to  me in more general conferences are
  34.                discouraged, as keeping them "on  topic" and
  35.                interesting to the masses would be difficult.  I do
  36.                read OS2, OS2PROG, C_PLUSPLUS and DR DEBUG daily,
  37.                though.  OFFLINE echo also (deals with mail readers),
  38.                this might be THE place to ask public questions, eh?
  39.  
  40.                I recently have acquired access to a host of other
  41.                networks with OS/2 conferences.  These include RIME,
  42.                SmartNet, Uninet, Intelec, Nanonet, Racenet and some
  43.                others I can't remember.
  44.  
  45.                I also do poll the Fidnet OS2PRODSUPPORT echo.
  46.  
  47. Direct BBS:    Leave a message on the Nerd's Nook BBS (1:157/2) at (216)
  48.                356-1772, 356-1872 or 356-1431.  I check in here
  49.                multiple times a day.  I will also keep the most recent
  50.                copy of MR/2 posted here.  Other boards (non-local)
  51.                will get updates at my convenience.
  52.  
  53. **************************************************************************
  54. **************************************************************************
  55. **             NOTE:  Nerd's now supports an MR/2 conference            **
  56. **             and file area.  Conference #208 is dedicated to          **
  57. **             MR/2 support and files.  File area #45 contains          **
  58. **             MR/2-related files.  Any file uploaded into              **
  59. **             conference 208 will be placed in file area 45.           **
  60. **************************************************************************
  61. **************************************************************************
  62.  
  63.                Nerd's does support file requests (157/2 or 157/3)
  64.  
  65. Compuserve:    I check in here only when I have to.  Try mail to my
  66.                user ID  - 76066,1240, although this isn't the best
  67.                approach.
  68.  
  69.  
  70. ---------------------------------------------------
  71. ALSO READ:  MR2.DOC (v1.0) and MR2.HST (v1.0->v1.4)
  72. ---------------------------------------------------
  73.  
  74. Changes included in v1.98x
  75. --------------------------
  76.  
  77. o   Manual work.  It's growing fast.  Enclosed is a new "preliminary"
  78.     MR2.DOC file.  The old manual was 22 pages, this one is 70 or so
  79.     and there's still plenty to add.  Some sections are incomplete.
  80.     No, I haven't checked for spelling errors.  I'm open for comments,
  81.     but don't dig too deeply, please.
  82.  
  83. o   PurgeAfterDays and PurgeAfterCount now actually function.  Here's
  84.     how it works:  When you close a packet, MR/2 has always "packed"
  85.     your InBasket, if any.  This process simply involved passing through
  86.     the InBasket and removing "killed" message by writing over them with
  87.     active ones.  When the ReplyLog was added, the same process was
  88.     performed.  Since the reply log grows with each reply, I added code
  89.     to control the number of messages kept, by maximum age or by maximum
  90.     count, or by both.
  91.  
  92.     If PurgeAfterDays is not specified (or set to zero), no age
  93.     check is performed on replylog messages.  Otherwise ...
  94.  
  95.     The Reply log is first packed the old way with a slight additional
  96.     check.  If a message is found to be active and older that the
  97.     cut-off date (older that PurgeAfterDays old), then the message is
  98.     marked as killed.  The normal removal process follows after this
  99.     check.  If a message is killed and it has a "source" or "original"
  100.     message after it (these have special MR/2-internal markings), this
  101.     is also killed.  Once this pass has been completed, all manually
  102.     killed and "old" message have been removed, along with any "source"
  103.     messages recorded with them.  A count of active messages is returned
  104.     to the packing process.
  105.  
  106.     If PuregAfterCount is not specified, or set to zero, no maximum
  107.     message checking is performed.  Otherwise ...
  108.  
  109.     Now, MR/2 compares the active message count to the specified maximum
  110.     (PurgeAfterCount).  If found to be greater, then the number of
  111.     messages to delete is calculated.  A new pass is made through the
  112.     folder, and the oldest messages are marked and deleted until the
  113.     number of messages to delete has been reached.  Again, if a message
  114.     is removed, so is its source/original message, if one exists.
  115.  
  116.     I will add a way to mark a reply as "permanent".  This will keep
  117.     the packing routines from removing it.  A permanent message will
  118.     not be deleted until you manually kill it.  As an additional
  119.     feature, I want to add an "unkill" key.  I've killed a couple of
  120.     replylog messages that I didn't want to, and saving them was a
  121.     real pain.  And I even know how!  I wouldn't expect anyone else to
  122.     be able to figure this out.
  123.  
  124. o   Double confirmation prompt on exiting the editor w/out saving. I
  125.     lost my last long-winded reply to this gotcha.  If you would press
  126.     ESCAPE too many times, too fast, while in the internal editor, you
  127.     would often end up losing any/all changes.  This was because ESCAPE
  128.     is seen as a request to exit the editor, and the "would you like to
  129.     save" question, when ESCAPE is pressed, says "No". Two escapes and
  130.     you've lost any changes.  I've done this more than once by accident.
  131.     It angered me; I apologize for causing anyone else this frustration.
  132.     Now, if you escape out of the editor and changes have been made, it
  133.     asks you if you wish to save them.  If you press ESCAPE, it askes if
  134.     you're sure, and ESCAPE says "no, I'm not sure" and saves your work.
  135.     You must press YES or press ENTER to abort changes.
  136.  
  137. o   Cutting from a DOS windowed session and pasting to MR/2, using
  138.     ALT-* fails.  Previous versions would actually crash, leaving the
  139.     clipboard open and locking up any program that tried to access it
  140.     afterwards.  I'm still trying to find out why this fails, but in
  141.     the meantime, I removed the crashing, and the subsequent lockups.
  142.  
  143. o   Packing the folders (Inbasket, ReplyLog).  A informative popup
  144.     window now is displayed while this process performs it's work.
  145.  
  146. o   Added a "Make Permanent" key for use within the Reply Log.
  147.     Pressing "!" will mark the Reply Log message as a "keeper" and
  148.     the Folder packing routine will no automatically delete this
  149.     message, nomatter how old it is or how many messages over the
  150.     maximum exist.
  151.  
  152. o   Added an "UnKill" keystroke.  Pressing "U" will remove the "Killed"
  153.     marking from any message.
  154.  
  155. o   New INI parameter - BackdropMaxLines.  This controls the maximum
  156.     number of lines from the WELCOME and GOODBYE screens will be flashed
  157.     to the screen.  Some BBS's have ANSI Welcome screens that are
  158.     multiple pages long.  MR/2 would proceed to flash these messages
  159.     completely at various times.  Set BackdropMaxLines to 25, for
  160.     example, to flash only the first screen.  Setting this parameter to
  161.     zero will suppress the Welcome screen altogether.  The default is
  162.     set to -1, which will flash any and all lines of the file to the
  163.     screen.
  164.  
  165. o   I think I fixed the problem with crashing when trying to finish
  166.     out of MR/2 *before* the background searching was finished.  This
  167.     would not happen if all virtual conferences had been created but,
  168.     if you would open a packet by mistake and try to quickly get out
  169.     of it, crash!  This was because I was deleting all the work files
  170.     before the background process was told to stop ... and it was
  171.     trying to read messages.dat.
  172.  
  173. o   New INI parameters: F2 through F10.  Used to attach command-line
  174.     actions to function keys.
  175.  
  176.  
  177. Changes included in v1.97x
  178. --------------------------
  179.  
  180. o   I forgot to list the INI options SavePointerFiles, PurgeAfterDays
  181.     and PurgeAfterCount in the MR2INI.ORG file.  These are now listed.
  182.  
  183.     More INI's, as I try to clean up some smaller user problems and
  184.     requests:
  185.  
  186. o   "DoorName" may now be used to identify the target BBS door "user
  187.     name" to which to address ADD/DROP messages.  This not only aids
  188.     in the case where a BBS door provides no DOOR.ID file, but also
  189.     when trying to perform ADD/DROP functions from no-packet entry or
  190.     reply packet maintenance.  For example, DoorName=RoseMail will
  191.     address all ADD/DROP messages TO: RoseMail.
  192.  
  193. o   "CursorSize" may now be specified for the normal internal editor
  194.     cursor.  Many users complained that, in certain video modes
  195.     (large number of lines/screen), and under some setups, the cursor
  196.     could not be seen.  By default, MR/2's normal editor cursor is
  197.     1 scanline high (maybe two?).  When lines/screen is 34 or more,
  198.     MR/2 changes the cursor to 6 or 7 scanlines.  This was reported to
  199.     still not be visable sometimes.  So, You may now specify the number
  200.     of scanlines for a normal cursor - from 1 to 13.  MR/2's "overtype"
  201.     cursor is 13 (14?) scanlines tall and is not configurable at this time.
  202.     Example:  CursorSize = 10
  203.  
  204. o   I did manage to finalize the thesaurus data file.  The "officially
  205.     released" thesaurus wordbase will consist of 9242 "key" words
  206.     with a total of 70,101 synonyms.  The technique I'm using makes it
  207.     easy to find synonyms, even if the word is not found to be a key.
  208.  
  209. o   There was a problem with using a MessageOrder of anything BUT
  210.     subject.  A variable remained uninitialized in all cases except
  211.     by subject, and this caused crashing as soon as a conference was
  212.     selected and the message index sort was started.  Fixed.
  213.  
  214. o   Selection lists had a bug that wouldn't allow you to select the
  215.     LAST entry (if the "page" was full).  Clicking on the bottom
  216.     line of the box did nothing (it's supposed to page down), and
  217.     clicking on the slot for the last entry on the page paged-down.
  218.     Fixed.
  219.  
  220. o   INI file now includes a default virtual conference.  This will
  221.     help new users "discover" this key feature much quicker.
  222.  
  223. o   Manual has actually been worked on!  No, it's not in here.
  224.     It's not in *that* great a shape yet, but it's progressing :)
  225.  
  226.  
  227. Changes included in v1.96x
  228. --------------------------
  229. Still lots left to do, I'll try to get a summary list together
  230. and post it next time.  I'm getting close, tho.  Bug reports seem
  231. to be light, which makes me happy.  I wanted to hit Feb 1st, but
  232. I'm not sure now.  If I can get a couple of good days in I can call
  233. it soup.  It will be *very* soon, the manual being the last major
  234. "feature" to address.
  235.  
  236. o   New and Improved help screens.  Added definitions for dozens of
  237.     previously-unlisted keystrokes and functions.  HELPS include 20
  238.     or so completely *new* screens, too, covering many of the newer
  239.     enhancements.
  240.  
  241.     NOTE that mr2.hlp is a simple editor file with [TAG] markers to tell
  242.     me where a help section starts.  The section ends at the next tag
  243.     marker.  If you don't like my HELP text, you *can* create your own
  244.     text (modify my descriptions).  A section must fit on the screen,
  245.     tho, with a char/line or two reserved as border.  Hey, if you end up
  246.     with something you think is better, send it to me and if I agree,
  247.     I'll use it :)
  248.  
  249.     I start on the manual next - actually already have, but now I have
  250.     to be serious!
  251.  
  252. o   Updated MR2INI.ORG with a section that describes the newest
  253.     INI variables.
  254.  
  255. o   Tab expansion in the message viewer.  I default this to 4
  256.     characters, but allow you to toggle this value via ALT-TAB.
  257.     Sequence is 4,8,0,2 where "0" means show the tab character and
  258.     don't expand.
  259.  
  260. o   I discovered that searching while in the INBASKET or the REPLYLOG
  261.     didn't work.  Searching within an INBASKET has never worked.
  262.     Fixed this (modified QWK.Getfh()).
  263.  
  264. o   By request (several), the spacebar may now be used as an alternate
  265.     to ENTER for selecting a conference w/mail to read.  This was a
  266.     tough call, as the ' ' is a valid typing character, and I can see
  267.     some folks trying to do a conference name prefix jump to the "main
  268.     board" conference by typing "Main ".  Where this would previously
  269.     work, and it still *might*, the spacebar press will cause the
  270.     highlighted conference to now be selected.  Open for comments, I
  271.     think this will be OK, tho.
  272.  
  273. o   It was pointed out to me that many keyboards don't have an F11 key,
  274.     and that's what I chose as the "mark" key on selection list.  (At
  275.     this time, "marking" within a list only has a purpose on the packet
  276.     selection screen, for merging QWK packets.)  After some thinking and
  277.     experimentation, I made the "*" key a synonym for F11 on pick lists.
  278.     It was suggested to use + and - to mark, unmark, but the minus or
  279.     dash often comes up as part of conference and packet names.  So,
  280.     "jump to prefix" would be affected.  The "*" key will toggle the
  281.     mark on and off.  This key is easily selected w/o shifting by using
  282.     the one on the numeric keypad (eeek!  Assuming you have one :).
  283.  
  284. o   UNQWK.CMD bug - my first user "fix" to this routine!  Thank you
  285.     Wolfgang von Thuelen for pointing this out.  In the check for long
  286.     file names, I ignored the case where file names were exactly 12
  287.     characters long BUT were still non-FAT names (e.g., "mwcst.qwk;11").
  288.     The first 'if' statement was changed from "if flongnames < 0" to "if
  289.     flongnames <= 0".
  290.  
  291. o   More thesaurus work - mostly minor cosmetics.  I've almost got
  292.     what I want, although I know the ALT-S and ALT-L are buugy now.
  293.     I'm letting it out with these bugs, as it's still functional and
  294.     I doubt many are using this feature (yet?).  Keys you may press
  295.     with descriptions are placed above editor window.
  296.  
  297.  
  298. Changes included in v1.95x
  299. --------------------------
  300. I'm calling this v1.95x, as I consider myself "close" to what I wanted
  301. in a v2.0 release.  I do have a few features to add; although not many.
  302. Believe me, I've got plenty of ideas for v2.01 and beyond.  Existing
  303. users know that this has never been a static product :).  I've created
  304. quite a few monsters here ... huge new features that are going to take
  305. some "shaking out" to get them working perfectly.
  306.  
  307. o   Clipboard:  When doing an "append" (ALT-GREY-= or ALT-GREYENTER)
  308.     to an empty clipboard, MR/2 would crash.  The first text copied to
  309.     the clipboard had to be done with the ALT-+ command, then appending
  310.     would work.  Fixed.  You can now append to an empty clipboard.
  311.  
  312. o   Reply log messages can now be "Copied" and/or "Replied to".  The
  313.     message is then copied into the reply conference as to be "sent
  314.     again".
  315.  
  316. o   INI parsing problem prevented FolderPath from being recognized.
  317.     (Discovered when relinking and testing MR/2 PM).
  318.  
  319. o   Mouse could not be used to select the very first entry in a selection
  320.     list.  This was broken recently - now fixed.
  321.  
  322. o   Template Sections labeled as "New" using routing lines:  I had
  323.     previously noted in this document AND personally corresponded
  324.     electronically with a few of you about this.  Specifically, *before*
  325.     this version, the $Body line was needed *before* the routing line,
  326.     as for "new" messages, only the "signature" sections was placed in
  327.     the reply file.  THIS HAS ALL BEEN CHANGED.  The 'New' Sections now
  328.     work the way you would expect; the entire section is placed in the
  329.     reply file, and the $Body (while still necessary) should be placed
  330.     where you would normally start your reply.  In other words, these
  331.     sections should be setup the way you would expect from using the
  332.     "normal" sections as an example.
  333.  
  334. o   Packet selection screen:  You may now MARK two or more packets on
  335.     this screen and actually MERGE them together as one QWK packet.
  336.     Use F11 to mark the packets to combine, then ALT-M (Merge) to
  337.     merge them together.  This process calls upon my new and improved
  338.     MQWK.CMD REXX command file to do most of the work.  This makes the
  339.     process configurable/extendable, as long as you want to tinker with
  340.     REXX source code.
  341.  
  342.     Multiple/automatic archiver detection is not supported at this time;
  343.     the archiver name is hard-coded in the script to be "pkunzip -n"
  344.     and the zipper is 'pkzip'.  Modify these in MQWK.CMD if necessary.
  345.  
  346.     When you press ALT-M, and if 2 or more packets are marked, MR/2 will
  347.     prompt for a target packet name.  If a name is supplied, all marked
  348.     QWK packets will be merged into one with this name.  If no name is
  349.     supplied, MR/2 simply combines the packets in the TMP$$ work
  350.     directory, where they can be read as a combined packet.  NOTE,
  351.     however, that bookmarks will be lost, as there will be no "target"
  352.     packet to record them to.  I suggest always allowing MR/2 to
  353.     repack the combined QWK packet.
  354.  
  355.     FURTHER NOTE:  I've now modified the script so that there is very
  356.     little reason *not* to repack the combined messages into a new QWK
  357.     file.  If a name is supplied as a target, MR/2 combines all marked
  358.     packets and jumps right into "read" mode.  AT THE SAME TIME, I spawn
  359.     another session, in the background, to archive the combined packet.
  360.     This becomes invisible to you and should not impede your normal
  361.     reading operations.  If the combined packet does not show up on the
  362.     packet selection screen, you may reference MQWK.LOG for possible
  363.     error messages.  All output from the archiving process is redirected
  364.     to this file.
  365.  
  366.     Index files (*.ndx) are discarded by the merge process ... MR/2 will
  367.     create index files when it opens the combined packet.
  368.  
  369.     I've tested this procedure with QMail and CamMail doors.  I expect
  370.     that other doors may created cases that call for a little adjusting.
  371.     Keep me posted.  ALSO, no error checking is performed to assure that
  372.     all the packets you are merging together are of the same BBS.  THIS
  373.     IS IMPORTANT, as merging dissimilar packets WILL NOT WORK CORRECTLY.
  374.  
  375.     ALSO NOTE that this takes alot of free disk space.  A set of QWK
  376.     packets totaling 2MB might require 4-5 MB additional free disk space
  377.     to function.
  378.  
  379. o   INTERNAL: Messages.dat is now opened in READ-ONLY mode.  This allows
  380.     the file to be accessed in a background task for archiving.
  381.  
  382. o   INTERNAL: Modifications to zDList, zDLSelect and zDirSelect (linked
  383.     list and selection from list(s) routines) to further support "marking"
  384.     of members and retrieval of "marked" status in various forms.
  385.  
  386. o   I received a packet via CIS email from the Channel1 BBS.  This
  387.     board has been a great logic-breaker for me ... they ought to quit
  388.     growing! Anyway, their control.dat files finally made it over 64k,
  389.     which has always been an MR/2 limitation (due to an initial design
  390.     flaw on my part).  This is now fixed so that there is *no* maximum
  391.     control.dat file size limitation.  I now handle/parse this file one
  392.     line at a time w/o loading it all into memory up front.  Channel1
  393.     packets once again work!
  394.  
  395. o   HideConferences can now be specified multiple times within a set
  396.     of INI files.  The hidden conferences list is now cumulative where
  397.     before only the last HideConference line was effective.
  398.  
  399. o   I expanded the packet selection screen even more and added columns
  400.     for Per (Personal) and Rep (Replied-to) message counts.  I know that
  401.     I'm constantly trying to remember which packet had all the personals
  402.     to me in it, so this helps me out.  The reply count may also help
  403.     tell you something about a particular packet.
  404.  
  405. o   Modified ZTC's library routine system().  Command line was deemed
  406.     invalid when > 128 characters.  OS/2 allows much more; I changed
  407.     the max to 256.  This will allow more QWK packets to be merged
  408.     together (it broke today at 4 fully qualified packet names).
  409.  
  410. o   Changes to the way the built-in thesaurus functions.  I've still
  411.     got some fancy things to do, but it's getting closer.  Invoking
  412.     the thesaurus for a word that was not a "key" in the word base
  413.     previously did nothing; it just ignored you.  Now, MR/2 posts a
  414.     message and jumps into a sequential "match" search.  When you
  415.     request a further search of the database using ALT-S, a similar
  416.     message is posted.  Both messages mention that you can now press
  417.     ESCAPE to hault the search.  Also, when a search completes with
  418.     out finding any new words, MR/2 keeps the previous word list on
  419.     the screen.  Before, you would be placed out of the thesaurus.
  420.  
  421.  
  422.  
  423. Changes included in v1.72x
  424. --------------------------
  425.  
  426. o   Made the default starting sequence for the reply log 1.  Was set
  427.     at 100 for testing.  If you already have replies in your log,
  428.     the only way to reset the sequence is to delete (or rename) the
  429.     log.
  430.  
  431. o   If your PacketPath did not contain a drive specification (for
  432.     example "\dl\qwk\"), then the drive free space literal didn't
  433.     work.
  434.  
  435. o   Bookmarks and other EA's would sometimes not be recorded.  This
  436.     also had to do with the packet path being "fully qualified".
  437.     It should work both ways now.
  438.  
  439. o   Total message counts were being padded by 25.  Fixed.
  440.  
  441. o   Created the first cut of mqwk.cmd ... short for mergeqwk.cmd.
  442.     This REXX script allows you to create a new QWK packet from
  443.     two or more existing QWK packets.  It merges the packet files
  444.     (except that it throws out the indices, MR/2 doesn't really need
  445.     them :) and repacks as if all the messages came in the same
  446.     single packet.  Source packets *must* be from the same BBS, tho.
  447.  
  448. o   Bug when processing QWK packets w/no indices.  If MR/2 was left to
  449.     build the NDX files, all NDX files would be created fine ... except
  450.     for Personal.ndx.  After the first message recognized as a "personal"
  451.     message, the NDX builder changed a counter and wouldn't match
  452.     another messages as personal.  Basically, only one message would
  453.     ever be recognized as being "to you" (unless your name was actually
  454.     a full 25 characters).  Fixed - now all personal messages are
  455.     recorded in MR/2's version of Personal.Ndx.
  456.  
  457. o   If no address book(s) exist for a session, and a user would
  458.     press F2 while in the TO field, MR/2 would crash.  This was
  459.     reported by a user that was used to pressing F2 from anywhere
  460.     to get a tagline list.  Many are probably used to this.  Fixed.
  461.  
  462. o   Ctrl-C handler would be deactivated whenever a call to a command
  463.     line utility was made.  This would include archivers or file viewers
  464.     but not editors.  This meant that pressing CTRL-C while viewing a
  465.     message or editing a reply (internal editor) would break right to a
  466.     command line ... no warning, no chance to save your work.  Fixed.
  467.  
  468. o   I added something in awhile ago and never documented it, as I still
  469.     considered it "unfinished".  While viewing a messages, pressing '*'
  470.     will load that messages as displayed into the editor.  The purpose
  471.     of this is to allow cutting/appending to the system clipboard.  You
  472.     can, for example, find a message that contains a paragraph you'd
  473.     like to use.  Press '*', mark and bound the section (F11 - F12) and
  474.     append to the clipboard (ALT-GREYENTER).  Now you can go into a
  475.     reply and paste the selected text in using ALT-GREY*.
  476.  
  477. o   Fixed several crashing problems with address book maintenance.  These
  478.     were extremelly difficult to find, as it turns out, but I did find
  479.     them.  It seems to work OK again (ALT-A, ALT-C and ALT-D).
  480.  
  481.  
  482. Changes included in v1.71x
  483. --------------------------
  484. This is one of those "quick fix" patches ... sames notes as for 1.70.
  485.  
  486. o   Oops.  That was quick.  I had broken the Conference= clause in
  487.     custom conferences.  Only searched the first conference number in
  488.     this list.  Fixed.
  489.  
  490. o   OK, so I added the INI variable HideConference=.  List after this
  491.     conference numbers you wish NOT to list in the conferences w/mail
  492.     list, separated by commas.  For example, I suppress all the forsale
  493.     conferences I build my virtual conferences from by posting the line:
  494.  
  495.         HideConferences=276,554,648,1534,1473,1460,1228,1119,1002
  496.  
  497.     in my INI.
  498.  
  499.  
  500. Changes included in v1.66x thru v1.70x
  501. --------------------------------------
  502. This one is a biggy.  Again, PLEASE save your original MR2.EXE, in case
  503. something nasty shows up in this one.  Lots of changes.
  504.  
  505. PLEASE DO NOT DISTRIBUTE THIS FILE.  I'd like to keep this a
  506. strictly limitted beta.
  507.  
  508. NOTE that reply logging is in here and ACTIVE.  Your INI variable will
  509. work.  Set it to YES, NO or FULL (to save originals w/replies).  I will
  510. warn you that REPLY LOGGING is still unfinished.  It works, but I may
  511. have to change some things that may require purging any existing log.
  512. So, if you wanna try it, consider it experimental and don't count on
  513. logged messages *always* being available.
  514.  
  515. Still to do, reply logging wise:
  516.  
  517. -   if log entry is killed, kill the original (don't kill any yet :).
  518. -   allow killing of just the source/original msg (*don't* try this).
  519. -   when viewing an original, message movement is inconsistent.
  520.     (NOTE: when on a logged reply, press J to see the original).
  521. -   Reissuing the same or a modified logged reply is not functioning.
  522. -   purge logic by day / count is not in.
  523. -   no way yet to "make entry permanent" so day/count purge skips it.
  524. -   Separate reply log sort?
  525.  
  526. Thesaurus: code is also in place for simple access.  That's just not
  527. good enough for me, tho.  I plan on reworking this quickly; it's a
  528. simple matter of beefing up the user interface to offer more options.
  529. I've got some neat ideas.  Currently, ALT-T or ALT-F1 while on a word in
  530. the internal editor invokes the thesaurus.  A beep occurs if the word is
  531. not found as a "key"; nothing else.  This will change.  If found, the
  532. synonym list is displayed.  To search further for words where your
  533. source word lists as a synonym, press ALT-S (search).  At any time,
  534. pick a word and hit ENTER to replace the original word in the editor.
  535. Pick a word and press ALT-L to "lookup" *that* word as a key.  I want to
  536. try to stack lists somewhat as you move through so you can back-pedal.
  537. I also want to allow entry of an alternate search word.  I also want to
  538. allow insertion of the picked word in addition to replacement mode.
  539. Maybe more.
  540.  
  541. You'll need the thesaurus database file, distributed separately.  I'm
  542. putting out a BETA dictionary for beta testers here only.  PLEASE DO
  543. NOT DISTRIBUTE.  The final version should be available soon.  Look for,
  544. oh, we'll call it BETAThrs.zip at 300k.  This unpacks to mr2thsrs.bin,
  545. which goes in the directory with mr2.exe.  No read.me for it, no .diz
  546. file ... this ZIP should go nowhere.  Please?
  547.  
  548. AGAIN, PLEASE DO NOT DISTRIBUTE ANYTHING FROM THIS RELEASE.
  549.  
  550. I'll have something much "safer" in a couple of days. I *do* need your
  551. help, tho.  Please report anything nasty you find quickly.  Thanks!
  552.  
  553. o   Well, Reply logging is coming along.  I now have a seemingly-clean
  554.     method implemented for recording the replies.  The ReplyLog
  555.     conference shows up in the conferences w/mail listing.  It showed up
  556.     originally *before* the InBasket; I promptly moved it to the end
  557.     of the list.  It doesn't stay there for various reasons.  I'd like
  558.     to see it stay at the end of the list, just before active replies,
  559.     if any.  There's still much to work out in general operations from
  560.     within this conferences.  AND, I still don't have a mechanism for
  561.     FULL logging (i.e., capturing the original message w/the reply).
  562.  
  563. o   New INI variable, PacketRefresh.  This is a time period, in seconds,
  564.     that MR/2 should use as the packet list auto-refresh cycle.  Set it
  565.     to between 0 and 32000 (60 is the default).  When set to 0, refresh
  566.     is disabled.  Setting it to low numbers (less than 5 seconds) may
  567.     not be too advantageous.
  568.  
  569. o   I played around with PacketRefresh set on 5 seconds.  It's usable,
  570.     although too much for my tastes.  The massive screen flash drove
  571.     me crazy, so I minimized/localized it and now it isn't quite
  572.     as obnoxious.
  573.  
  574. o   Hmm.  I'm not sure why, but for some reason my mission tonight
  575.     tangented to supporting PC-Board escape sequences for Welcome and
  576.     Goodbye screens.  I spent more time than I should have, but they
  577.     work. This wasn't even on my 2.0 list; oh well.  The support is
  578.     only on the auto-display backdrops; I can easily add it into the
  579.     internal file viewer.
  580.  
  581. o   Fixed a bogus error report "Erc at location 6: ####".  It was
  582.     actually an error that I expected.  The displaying of the
  583.     message was the actual bug.  This happened when openning a second
  584.     (or subsequent) MR/2 session.
  585.  
  586. o   Internal editor now has a built-in thesaurus.  It features 9000+
  587.     base words with a synonym count of 60,000+ words.  From within the
  588.     editor (whether actually editing a reply *or* while independently
  589.     spell-checking an existing reply with Ctrl-F2), just press Alt-T or
  590.     Alt-F1.  If the word exists in the thesaurus index, a list of
  591.     synonyms are displayed.  There are some more options, which I will
  592.     wait on explaining, because I *think* they're about to change :)
  593.  
  594. o   PC Board codes are now supported both as backdrops (Welcome, Goodbye)
  595.     AND as file selection (e.g., viewing of bulletins).  Also, in
  596.     reworking the code for this, I found that the ANSI detection
  597.     logic for backdrop displays actually read the file(s) from disk
  598.     twice.  Minor, but a waste of a half-second or so anyway.
  599.  
  600. o   Packet drive free space now shows on the packet select screen.
  601.  
  602. o   Main Packet menu now has an entry for "Pack Replies".  This is to
  603.     allow you to pack the replies that have been created to that point,
  604.     so you may upload them in a separate communications session.  When
  605.     invoked, you first see a big dialog warning you of what you are
  606.     about to do, and listing out what you *shouldn't* do.  You can ESCAPE
  607.     from there to abort, or press any other key to continue.
  608.  
  609.     If you continue, another prompt is displayed for you to confirm your
  610.     actions.   If you confirm that the replies are to be packed, MR/2
  611.     creates a REP file containing all active replies and removes these
  612.     from view.  It also then adds them to the reply log, if active.
  613.     This is slightly risky ... I suggest you use this option with
  614.     caution. AND, delete existing replies once you are sure they've
  615.     been uploaded to the appropriate BBS.
  616.  
  617. o   Packet selection screen now has column headings instead of the
  618.     "Avialable Packets" title.  I played with many different layouts
  619.     and liked this the best.
  620.  
  621. o   Lots of changes to the way MR/2 builds and maintains reply messages
  622.     and packets.  All of them meant to be inivisible; I hope they stay
  623.     that way, too :).  All in order to support Reply Logging ... the
  624.     tough part is keeping the original/source message around for
  625.     reference and keeping it logically attached to the reply.
  626.  
  627. o   Forwarding of messages is now considered internally to be a
  628.     form of carbon-copy.  Previously, forwarding one of your own
  629.     replies would misfire and modify the original.  This should fix it.
  630.  
  631. o   Two things that *still* don't quite work right, both regarding
  632.     silicon or carbon copies.  First, I'm not happy with what happens
  633.     when you copy a multiple part message to someone else.  You can't
  634.     copy it again after that.  Second, copy a routed message (with
  635.     address data at the top of the message) just plain doesn't work
  636.     right.  I need to look at these.
  637.  
  638. o   Reply logging.  Ok, I've got an experimental technique in place. It
  639.     seems to work ... time will tell.  It is *nothing* like what I had
  640.     originally tried way back, like a year ago.  This system works by
  641.     making a shadow files of your replies as well as the original/source
  642.     messages, if any.  When the reply file is deleted, the shadows are
  643.     seen as "ready" and are merged into the Reply Log. The reply log has
  644.     been moved back to the front of the conference list, following
  645.     Personal messages and then the Inbasket, if either or both exist.
  646.  
  647.     This is a complex technique, but I feel it gives me the best shot at
  648.     maintaining an accurate reply log, nomatter how the user chooses to
  649.     delete his reply packets.  I should suppress most, if not all,
  650.     duplicate replies.  There is one existing loophole that I know of,
  651.     and I'll either plug this or document it soon ... it has to do with
  652.     killing all your replies individually until none exist.
  653.  
  654.     NOTE that this *is* a complex process.  One or two (if logging is
  655.     set to FULL) files are involved, as are some extended attributes. I
  656.     wanted to depend on EA's totally, but the 64K total EA limit per
  657.     file worried me. Replies are assigned sequence numbers as created,
  658.     and logged replies are given yet another sequence number as their
  659.     "message number".  I hope all of this ends up worth it :)
  660.  
  661.     Whatever the case, the reply log logic is such that it does very
  662.     little to change the actual process of replying and packing replies.
  663.     So, the old problem of the reply conference ballooning to a huge
  664.     size should not come about again.
  665.  
  666.     Still lots to do ... now that a reply log exists, I need some new
  667.     access routines, a purge routine and more ...
  668.  
  669. o   While viewing a reply-log message ONLY, the 'J' key will allow you
  670.     to jump to the original/source messages, if one exists.  Original or
  671.     source messages are logged ONLY if LogginReplies = FULL in your INI
  672.     file.  These original/source messages are visible ONLY this way, but
  673.     then are available for printing, replying again ... most of the
  674.     normal messaging functions may be used.
  675.  
  676. o   Message Index Screen now shows message date/time.  There wasn't any
  677.     more room, so date/time is at the end of the line and appears "off
  678.     the screen".  I added pan-left and pan-right capabilities to the
  679.     screen.  Left and Right arrow keys are used.  Mouse hotspots are
  680.     provided on the display's border box - two arrows and the phrase
  681.     "Alt-O to Sort".
  682.  
  683. o   Sort Order for messages now supports Date/Time order.  Previously
  684.     this was not functioning.
  685.  
  686. o   Alt-O to order messages via the message index now shows date/time
  687.     as an option.
  688.  
  689. o   The Reply Header Edit screen has an expanded tagline area.  I moved
  690.     it to the left and squeezed it on the right - 10 more characters!
  691.     By request :).
  692.  
  693. o   New INI variable: SavePointerFiles.  Defaults to YES but can be set
  694.     to NO.  If a BBS places a message-pointer file in its QWK packets,
  695.     then this file is saved to the MR/2 software directory when a packet
  696.     is opened.  Only pointer files newer than the existing pointer file
  697.     (if any) are kept.
  698.  
  699. o   New INI variable: PurgeAfterDays.  This defaults to 0, which
  700.     indicates that no age-checking is to be performed on the Reply Log.
  701.     If set to a valid, positive number of days, then Reply Log messages
  702.     older than this day-count will be removed each time the log is
  703.     packed (when a packet is closed).
  704.  
  705. o   New INI variable: PurgeAfterCount.  This defaults to 0, which
  706.     indicates that no quantity checking is to be performed on the Reply
  707.     Log.  If set to a valid, positive number, then the Reply Log
  708.     messages are counted during packing.  If there are more than the
  709.     specified number in the log, then the oldest messages will be
  710.     removed until this number is reached.
  711.  
  712. o   OK, I mucked up the inbasket name.  Nobody saw this but me, so
  713.     no damage done.
  714.  
  715. o   Negative percentages on packet select screen has been fixed.  Simple
  716.     (and stupid on my part) integer math overflow.  Math now uses long
  717.     values.
  718.  
  719. o   Divide by zero errors on some packets where, for whatever reason,
  720.     total ends up being zero.  Fixed.
  721.  
  722.  
  723. Changes included in v1.65x
  724. --------------------------
  725. I think I'll leave at that for now ... I'll put this out for "beta"
  726. testers before I throw any more huge code changes in and cause severe
  727. bugs :)
  728.  
  729. o   When you delete a .rep file from the packet selection screen,
  730.     the file is now copied to a ".old" file.  This mimick the deleting
  731.     of an existing reply packet when opening a packet; if you respond
  732.     to "delete" the existing replies, it would copy the file to a
  733.     bbs.old name and then delete the original.
  734.  
  735. o   When selecting a reply file to open, MR/2 would flash the BBS
  736.     name select screen and remove it.  This flash has been removed.
  737.  
  738. o   Divisor bar between packets and replies on the selection screen.
  739.  
  740. o   Reworked help screens a tad.  Modified screen writes to be a bit
  741.     snapier; cleaned up the often-visable cursor that shouldn't have been
  742.     and changed the color from nasty green to bold-white on blue.
  743.  
  744. o   Cleaned up some bugs with manually killing replies.  Sometimes the
  745.     wrong reply would get killed.  This occured mostly when multiple
  746.     part replies existed in the reply conference.
  747.  
  748. o   I modified the Edit Message Header screen.  Instead of adding another
  749.     bar that explained tha F6 is the "pick address" function key, I modified
  750.     the way the keys work.  Now, F2 is the generic "pick from list" key, and
  751.     the list to select from is dependant on the current field (the field in
  752.     which the cursor resides).  Use F2 to pick TO, CONFERENCE and TAGLINE
  753.     values from pick-lists; just move into one of those fields before
  754.     pressing F2.  For old timers, this may take some getting used to, but
  755.     I think it is cleaner this way.
  756.  
  757. o   Conferences w/mail list now updates automatically when custom
  758.     conference building thread completes.  Previously, you had to select
  759.     a conference and then exit to get the list of custom conferences to
  760.     be displayed.
  761.  
  762. o   Packet list is refreshed every 60 seconds.  Basically, if you're
  763.     parked on the Packet Selection screen, every 60 seconds an ALT-N is
  764.     generated as a keystroke by the keyboard event processor.
  765.  
  766. o   While viewing message as search results (including custom conferences),
  767.     I add the ability to search forward for the next hit *within* the
  768.     current message.  While MR/2 lines up the first match near the top
  769.     of the screen, finding subsequent matches was sometimes difficult,
  770.     particularly on long messages.  Now, ALT-N is search forward within
  771.     messages.  It searches from the next undisplayed line (as if you
  772.     had next-paged) forward.  I tried it searching from display line 3 so
  773.     that the next hit not on line 2 would be moved to line 2, but this
  774.     was too much ... it's easy to spot (IMO) all hits on the same page.
  775.     I also played with beeping when ALT-N found nothing more ... but this
  776.     was agrevating.  I think this works the best.  I'll see about adding
  777.     search-backwards, too.
  778.  
  779.     ALT-N was chosen because the N key is the "next search result message"
  780.     key.  Walking through searches requires only finger movement on and
  781.     off the ALT key that way.
  782.  
  783.  
  784.  
  785. Changes included in v1.64x
  786. --------------------------
  787. I posted a general notice in Nerd Nook's MR/2 conference asking for a
  788. little word-of-mouth marketing help.  MR/2 doesn't get talked up
  789. much anymore; it seems other products have captured most of the
  790. attention.  I've asked that, if given the chance, MR/2 users speak up
  791. and voice their opinions.  Thanks in advance.
  792.  
  793. o   ALT-F is available in pick-lists to search for text strings.  It
  794.     works in all pick lists except the Conferences w/mail ... this
  795.     has code attached to that key combo already.  For example, to find
  796.     a tagline with the name "Jim" in it, press ALT-F, fill in Jim and
  797.     press ENTER.
  798.  
  799.     The tagline "He's dead Jim ..." (if it's there :) will be highlighted.
  800.  
  801.     The search starts from the NEXT position (it's incremental), so
  802.     HOME to the beginning to search the entire list, or ALT-F and
  803.     ENTER to search from the current "hit".
  804.  
  805. o   INTERNAL: One more change to the form class.  The cursor is now
  806.     set to the ORIGINAL state when a FillField call is exited.  This is
  807.     as opposed to just being turned OFF.  Sometimes the cursor would
  808.     not be present (of course, toggling the INSERT key twice would have
  809.     turned it back on ...).
  810.  
  811. o   Reassembling of "split" replies now functions.  I've tested with
  812.     messages split into 12 individual sections.  When replying, MR/2
  813.     will recreate the original, unsplit message.  Once you save this,
  814.     all parts are replaced with the new parts.  I've tested the
  815.     modification of a 6-part reply, adding text to make it up to 12
  816.     parts and all worked well.
  817.  
  818.     This *will* be controled by an INI option so you can choose
  819.     between never or always reassembling, or being asked each time.
  820.  
  821.     NOTE:  I *also* preserve manual page break commands (e.g., ".pg").
  822.     If you placed them in the original message to force a break,
  823.     they'll be there when the message is reassembled.
  824.  
  825.     NOTE:  The message parts must be found to be consistent w/in
  826.     the reply folder.  If you've killed a section and subsequently
  827.     packed the replies so, say 1-5 and 7-8 are present but 6 is
  828.     missing, MR/2 will only edit the single part.  Also, parts are
  829.     identified by the sequence token placed in the Subject when
  830.     MR/2 splits messages (e.g., "1/10").  If these are changed or
  831.     otherwise inconsistent, you'll only have access to individual
  832.     parts again.
  833.  
  834. o   Added the ability to spell check an existing reply at any time.
  835.     Ctrl-F2 while the reply is visible.  This basically puts you into
  836.     the internal editor and auto-invokes the speller.  You have no
  837.     opportunity to edit the message header, but you can exit the speller
  838.     and do normal text editing if you wish.  You must use F10 to save
  839.     the changes to the reply.
  840.  
  841. o   You can, of course, use an external editor AND use a separate,
  842.     external spell checker of your choice on your replies.  This is
  843.     simply a matter of specifying a .cmd or .bat file as your "Editor"
  844.     and calling your Editor, then call the spell checker against the
  845.     reply file right after that.  What you can't do (yet :) is use my
  846.     internal editor and an external spell-checker.  Coming up ...
  847.  
  848. o   I had received reports for a long time, mostly from a single user
  849.     (Mike :), that the keyboard would sometimes, randomly, cease
  850.     functioning.  He seemed to correspond this problem with the use of
  851.     MS Word, so I tended to blaim it on MS <g>.  It seemed to never happen
  852.     to me or anyone else, at least.  Well ...
  853.  
  854.     With all my playing around lately, I've seen the keyboard from within
  855.     MR/2 quit responding.  The mouse worked ... enough that I could move
  856.     around and exit cleanly.  The command line accepted keystrokes, but,
  857.     once back in MR/2 again ... nothing!  Usually I'd have to load
  858.     a new session, and *once*, that didn't even work.  I put some error
  859.     checking in my kbd*() access code and find that MR/2 was failing to
  860.     receive the keyboard focus.  I'm still not sure why, exactly, but I
  861.     modified the code to use the default system keyboard (instead of
  862.     using KbdOpen() to obtain a new "logical" keyboard) and all seems to
  863.     work now.  Time will tell...
  864.  
  865.     I've left some primitive error checking in this code.  A simple line
  866.     will appear that says, for example "Erc at location 3: 449" if an
  867.     error occurs.  Let's hope there aren't any more, but please report
  868.     them if they do.  Thanks.
  869.  
  870. o   If you would ENTER a new message (using 'E') while viewing replies,
  871.     all replies after that would appear to be scrambled.  Once you
  872.     exited the replies conference and reentered, everything would be fine.
  873.     Entering a new message from the Replies conference fried the NDX file
  874.     image in memory; reselecting it loaded it again.  This has been
  875.     corrected.
  876.  
  877. o   Tons of changes revolving around modifying replies.  Copying a reply to
  878.     another user now reassembles split parts, if any, and copies all parts
  879.     to the new target.  You can do this to as many users as desired as long
  880.     as you do it all w/o exiting the copy-loop.  Once you're out, due to
  881.     the way MR/2 sorts the conference messages, a split message with more
  882.     than one copy is unavailable as an original for more copies.
  883.  
  884. o   New INI parameters:  PreEdit and PostEdit.  These function *only* when
  885.     using the internal editor; external editor users can put pre and post
  886.     process commands in a .cmd or .bat file that also invokes their editor.
  887.     The only other possibility left is for an external editor user to
  888.     be able to automatically spell check the reply when finished.
  889.  
  890.     PreEdit executes the specified command with the reply file name
  891.     appended *before* entering the internal editor.  This allows for
  892.     quote processors and other filters to be used.
  893.  
  894.     PostEdit executes the specified command with the reply file name
  895.     appended *after* leaving the internal editor.  This allows for
  896.     formatters, spellers or other filter programs to be used.
  897.  
  898. o   Background screen when no Welcome screen once again changed.  From
  899.     blank to MR/2's header and blue pattern backdrop.
  900.  
  901. o   Modified the Pre and PostEdit processors.  I thought about it, and I
  902.     was limiting the use of these to users of the internal editor.
  903.     There are places where this is helpful elsewhere so ...  These
  904.     commands are invoked (if specified) before and after a reply is
  905.     edited, regardless of the editor being used.  It is *still* more
  906.     efficient to use a .bat or .cmd file to do all three when using an
  907.     external editor, but the option is yours.  This also allows for the
  908.     specifying of "PostEdit=INTERNAL" with the internal editor.  This
  909.     forces an invocation of the spell-checker after every message
  910.     editing session.
  911.  
  912.     I've tested PostEdit spell checking using the DOS ShareSpell
  913.     shareware package.  Works great!
  914.  
  915. o   New INI parameter, ReassembleSplits.  May be set to YES, NO or
  916.     ASK ... defaults to ASK.
  917.  
  918. o   New INI parameter, ShowBBSId.  May be set to No, Top, Bottom or
  919.     Both.  This is the new BBS-ID string that notes the packet file name,
  920.     BBS name and logical conference name.  You can now control if and
  921.     where you see it.
  922.  
  923. o   Fix: On Fast Exit using 'X', the INBASKET was packed and any killed
  924.     message removed.  Problem was that the NDX file still referenced
  925.     those messages.  Walking through the Inbasket would show garbled
  926.     text when a missing message was encountered.
  927.  
  928.     I now suppress the packing of the Inbasket on fast exit ... this
  929.     makes sense anyway.  This way, the Inbasket is in the exact state
  930.     it was left in upon reentry.
  931.  
  932. o   Fix: Bookmarks are saved as EA's on fast exit.  If you would fast
  933.     exit a packet after reading most of it, then delete the "exiting"
  934.     packet from the work directory upon reentering MR/2, your bookmarks
  935.     for that packet would be lost.  I now save them before fast-exiting.
  936.  
  937. o   Taglines can now be sorted (temporarily, until packet is closed and
  938.     they're reloaded from disk) by pressing ALT-O from the tagline
  939.     select screen.
  940.  
  941. o   Address book is now sorted by description.  I'll give you more options
  942.     at a later time.
  943.  
  944. o   ALT-R in the editor, importing a file, left the cursor position
  945.     in limbo afterwards.  This caused strange results; most notably
  946.     a seemingly unresponsive keyboard that would suddenly snap back
  947.     into activity.  This has been corrected.  Multiple imports seem
  948.     to still proceed slowly, particularly if the file(s) are large.
  949.  
  950. o   Wrapping of reply lines:  .pg lines are considered hard returns
  951.     as are tabs at the beginning of lines.
  952.  
  953. o   Reply file now have EA's attached to them (total count).
  954.  
  955. o   If percentage read flags are displayed (now the default, suppressable
  956.     via INI setting), then I also list all .REP files in the ReplyPath
  957.     at the bottom of the packet list.  They will ALWAYS sort to the
  958.     bottom of the list, but will follow normal sorting rules between
  959.     .REP files (in other words, packets are sorted as a group, the
  960.     reply files are sorted as a group, and the two list are then
  961.     appended together).  The last column for a reply packet shows the
  962.     number of replies contained in the file.  Yes, you can open a
  963.     reply file.  You end up with replies and the inbasket available,
  964.     similar to "no packet entry" mode.  You can also RENAME and DELETE
  965.     .REP files as you can packets.
  966.  
  967. o   When using 'E' to enter a new message from within the inbasket, you
  968.     were asked if the current message should be killed after the reply
  969.     was saved.  This is no longer the case.
  970.  
  971.  
  972. Changes included in v1.63x
  973. --------------------------
  974.  
  975. o   Internal editor ALT-R text import was extremely slow.  I played
  976.     around with the code somewhat and turned off the screen display
  977.     while importing.  I think this works much more like it ought to.
  978.     Text imports are now lightning fast compared to the old method.
  979.  
  980. o   Started adding support for system clipboard access to the internal
  981.     editor.  It *seems* to work fine.  I can cut/copy text into the
  982.     clipboard, and I can paste it back, or paste it into E or EPM.  I
  983.     can also cut from EPM/E and paste into my editor.
  984.  
  985.     I was *going* to use the standard PM keystrokes where possible for
  986.     cutting and pasting.  The problem is that SHIFT-DEL and SHIFT-INS
  987.     are the same as the unshifted versions in normal character mode.
  988.     I'm not really interested in switching to "raw" or "binary" keyboard
  989.     mode, so ... I used something similar to QEdit's key assignments.
  990.  
  991.     ON THE NUMBER PAD, the "grey" keys ONLY, ALT- is the CUT key, ALT+
  992.     is the COPY key, ALT-* is the PASTE key.  I've added two non-standard
  993.     clipboard access modes:  ALT/ is the CLEAR clipboard key, and ALT=
  994.     is the APPEND to clipboard key.  You can append all the text you want
  995.     to the clipboard, "building" a collection of paragraphs, for example.
  996.  
  997.     THIS IS THE SYSTEM CLIPBOARD!!  So, you can cut/paste to/from any
  998.     Windowed full screen session (including DOS) or any PM app that
  999.     support the clipboard.
  1000.  
  1001.     More ways to access the clipboard to come ...
  1002.  
  1003. o   Since it was pointed out to me that *most* PC keyboard don't have
  1004.     an equal "=" key on the numeric pad, I've made the ALT-ENTER on the
  1005.     numeric keypad to be the same.  This is the clipboard APPEND command.
  1006.  
  1007. o   Not only does switching session cause the blink attribute to come
  1008.     back alive, so do VIO popups like TE/2 alarms windows. :(
  1009.     Windowed session seem not to be affected, only full-screen sessions.
  1010.  
  1011. o   I had reactivated the LoggingReplies switch so that I could work more
  1012.     on this feature.  Well, many existing INI's have this switch set to
  1013.     YES; in fact, the default INI has this flag set to YES.  This caused
  1014.     many reports of problems.  I've switched the code back so that the
  1015.     INI value is ignored, but I can still switch it to YES for development.
  1016.     Sorry for any inconvenience.
  1017.  
  1018. o   Fixed the backdrop and file display function to clear the screen, even
  1019.     if the file-to-display is non-existant.  For example, if a Welcome
  1020.     screen is not found (common during no-packet entry :), then old screens
  1021.     are cleared before menus and/or conference pick lists are displayed.
  1022.  
  1023. o   New INI parameter, AutoUnpackReplies.  This defaults to NO, which means
  1024.     you'll be prompted for reply-file disposition if replies are found to
  1025.     exist.  If set to YES, the prompt is suppressed and replies are
  1026.     unpacked, as if you had said to "Keep" them.
  1027.  
  1028. o   New INI parameter, AutoFirstReadKey.  Defaults to nothing.  If you set
  1029.     this to, for example "Q" (e.g., "AutoFirstReadKey = Q"), then
  1030.     whenever a conference is selected (that contains more than 1 message),
  1031.     the quick thread index is selected as if you had pressed Q.  The other
  1032.     common use for this would be to specify an "I" for the master message
  1033.     index.  By request ...  open for opinions.
  1034.  
  1035. o   INTERNAL:  Forms.cpp (FillField) - fixed the order that the cursor
  1036.     is reset.  I was turning it off, then resetting the normal size.
  1037.     Setting the size turned it back on which often left the character
  1038.     cursor visible when it should not have been.  Fixed.
  1039.  
  1040.  
  1041. Changes included in v1.62x
  1042. --------------------------
  1043.  
  1044. o   Address book maintenance would crash when modifying an address file
  1045.     with comments in a certain format.  Comment lines were viewed as
  1046.     real lines and attempts to parse them were made.  Fixed.
  1047.  
  1048. o   With the colors I personally use, I have a black background with
  1049.     search "hits" in yellow background.  Yellow is a "high" color,
  1050.     which requires the video "blink" bit to be off.  Otherwise you
  1051.     get an orange blinking highlight.  My sessions always started with
  1052.     search words marked in yellow.  Somewhere down the pike, and often,
  1053.     they'd start to be displayed in blinking orange.  I saw nothing in
  1054.     my code.  *Finally* found it tonight ... it's OS/2!  If your screen
  1055.     shows yellow highlighting, you switch to the desktop, then switch
  1056.     back to MR/2, blinking-orange!  I fixed this so that the blink bit
  1057.     is set OFF before each message is displayed ... so it's fixed for the
  1058.     next message.
  1059.  
  1060. o   Store address of current message in address book.  ALT-A ("Add"?).
  1061.     Works nicely ... some minor bugs that I'll have fixed up in a minute.
  1062.  
  1063. o   Cleaned up address "stealing", address-tag selecting and address book
  1064.     maintenance.  I'll test if for a couple of days and let others try.
  1065.     I rearranged alot of code to get things to work "properly".  Now, for
  1066.     instance, I won't let you add a tag that already exists (if it's a
  1067.     "new" address add).  Conference numbers validate but I and N are
  1068.     allowed for Internet and Netmail conferences.  I also ended up
  1069.     patching *alot* of the @Internet@ and @Fidonet@ parsing logic.  These
  1070.     will even work cleaner now.
  1071.  
  1072. o   New INI variable - PacketSort.  Setting packet sort to NAME will sort
  1073.     the available packet list by file name.  Specifying DTIME_DDATE will
  1074.     result in descending dates, descending time (this *is* the default and
  1075.     the way MR/2 has worked for quite a while ... newest packet first).
  1076.     Specifying ATIME_DDATE results in newest-date first, but inside each
  1077.     day, packets are listed in ascending time order (oldest first, newest
  1078.     last).  This way multiple packets created by a single visit to a
  1079.     mail door list correctly ... QWK, QW0, QW1, etc., even tho the last
  1080.     packet is newer.  By request.
  1081.  
  1082. o   New Packet Select screen "look".  Actually, I just extended the box
  1083.     (made it wider) so that it can hold more data.  I've listed, next
  1084.     to each packet, the percent read.  Following this is the actual count
  1085.     of "read" messages, followed by the total message count.  This is
  1086.     tentative ... I'm taking votes.  I don't like the marking of a packet
  1087.     with a "replies exist" flag, as I often have replies that belong to
  1088.     3-4 packets, but I have 6-7 packets for that BBS.  I've got another
  1089.     idea ... maybe I'll squeeze this in quickly.  If the packet has never
  1090.     been read, all I can show is "0%".  Ideas?  I can show counts of
  1091.     personal messages?  replied-to messages? ... whatever.
  1092.  
  1093.     NOTE:  before I'm done, I'll add an INI flag to force the packet
  1094.     display to the "old way".  The old way is actually quicker ... I now
  1095.     have to poll for EA's for each packet.  It's not really noticable on
  1096.     my system; your mileage may vary.
  1097.  
  1098. o   Hee hee!  I've now (**finally**) got a working clipboard class!  More
  1099.     on this when I actually put it to work :).
  1100.  
  1101. o   Fixed up the shadow on the extended packet select box.  Also, added
  1102.     the INI parameter "ShowReadPercent" that can be YES or NO.  Allows
  1103.     selection of the old way, if desired, over what is now the new way
  1104.     with read percentages.  The default is YES, show it the new way.
  1105.  
  1106. o   I finally made the INI parser case statement too complex and broke the
  1107.     compiler.  I "hand optimized" this routine, finding lots of excess
  1108.     code.  I moved many simple sections of code into separate routines.
  1109.     I report it only because changes like these, although seemingly simple,
  1110.     can cause bugs.  If you see any INI oddities start to occur, please
  1111.     let me know.
  1112.  
  1113. o   Ooops.  No packet message entry had some problems if you used ALT-X
  1114.     to fast-exit the packet, then tried to get back in.  The error
  1115.     occured while trying to resolve the packet name from the EA's.
  1116.     There are no EA's for no-packet entry!  Fixed.
  1117.  
  1118. o   Added a "Local/Global" flag to the address book maintenance screen.
  1119.     It's changable ONLY when adding the entry ... I make no attempts to
  1120.     remove the address from one book and add it into another.  maybe later.
  1121.     "L" for Local puts it in your bbsname.ADR while "G" for Global puts
  1122.     it in the main, global address book, MR2.ADR.
  1123.  
  1124.  
  1125. Changes included in v1.61x
  1126. --------------------------
  1127.  
  1128. o   INTERNAL:  Dlist class modified.  Added a "fmarked" flag.  Also added
  1129.     methods is_marked(), mark(int) and mark_all(int).  Since this class is
  1130.     a low-level building block used by *lots* of code, recompiled all source.
  1131.  
  1132. o   INTERNAL: Dlselect.cpp modified to start support of markable linked-list
  1133.     displays.
  1134.  
  1135. o   'E' is now available from the message viewer to enter NEW messages w/o
  1136.     having to return to the Packet menu.  The current conference will be
  1137.     the default for the new message, but To and Subject remain blank.
  1138.  
  1139. o   INTERNAL: Modified the Event class once again.  My code to disable
  1140.     and enable the event handler (for external editing) closed the event
  1141.     semaphore, the opened it on enable.  This was unnecessary and could
  1142.     cause problems with my multiple-instance logic.  Now, DosSemClose is
  1143.     skipped, and semaphore need not be re-opened.
  1144.  
  1145. o   INTERNAL:  QWK class now uses a the unique semaphore internal ID set
  1146.     by the event class.  This in an attempt to get multiple instances
  1147.     running.
  1148.  
  1149. o   You may now specify the name of a unique MR2 sub directory to use
  1150.     as the work directory right on the command line.  For example,
  1151.     "MR2 /Wtmp$$$" will override the INI setting for work path and
  1152.     create/use a "tmp$$$" sub directory for unpacking and reading the
  1153.     QWK packet.  Another aid in what will eventually allow multiple
  1154.     instances.
  1155.  
  1156. o   OK!  I was able to run 3 simultaneous copies of MR/2.  I ran three
  1157.     windowed sessions and was able to (using OS/2's window menu) cut
  1158.     and paste between them.  All that's *really* required is that
  1159.     you specify a different work directory for each session using the
  1160.     /Wpath command mentioned above.  I can see myself having either
  1161.     "MR/2 - 2" and "MR/2 - 3" icons on the desktop or multiple command
  1162.     files for when I need to reference other packets.  I was able to open
  1163.     up two instances w/o specifying a work path, the second instance
  1164.     after a packet was already open.  I was able to read the same packet
  1165.     *in two different windows*, allowing me have two separate spots
  1166.     visible at one time.  Exiting one occurence messed things up a bit,
  1167.     as it deleted most of the unzipped work files.  I play with this
  1168.     idea some more ... and I'll play with my own code to access the
  1169.     clipboard in full-screen sessions.
  1170.  
  1171. o   Fixed a bug in No-packet entry.  If target conference was changed
  1172.     BEFORE creating a reply, this conference would be forgotten and
  1173.     the original conference would be defaulted on the AFTER pass.  Fixed.
  1174.  
  1175. o   Address book lookup failed to close the .adr file when tag was found.
  1176.     Found this while trying to rewrite the .adr file.  Fixed.
  1177.  
  1178. o   Address book maintenance.  Add new or modify existing records from
  1179.     the address book selection screen.  ALT-A to add, highlight an entry
  1180.     and press ALT-C to change.  ALT-D to delete (confirms w/a prompt).
  1181.     Text file is rewritten each time, previous version is copied to
  1182.     bbsname.old or mr2.old, depending on which book is being modified.
  1183.  
  1184. o   NOTE:  Address book tags are resolved in a first-found order.  The
  1185.     local address book, if one exists, is checked first.  If not found
  1186.     there, the global MR2.ADR is checked.  If duplicates exist, only
  1187.     the first one found (searching the file(s) sequantially) is the one
  1188.     that's used.  Pick list selections go through the same process ... so
  1189.     picking the "other" one doesn't matter.
  1190.  
  1191. o   I am now displaying both the packet name, BBS name AND the "logical"
  1192.     conference name in two places on the message viewer.  I'm trying to
  1193.     determine which spot I like more.  The bottom status line position
  1194.     overwrites the old first-time-user help prompts.  This worries me,
  1195.     which means I'd make it an INI toggle that defaults to the help
  1196.     prompts.  The display in the middle of the divisor bar is "safe",
  1197.     but it looks a tad cluttered to me.  Votes?
  1198.  
  1199. o   Rot13 support.  The internal editor will now rot13 a clock of
  1200.     highlighted text.  Just press ALT-E (E for "Encrypt"?).  A block
  1201.     must be highlighted, tho.  In the message viewer, ALT-E will rot13
  1202.     the whole message.  Read the desired part and ALT-E to return the
  1203.     message to normal viewing.  Replying to a message displayed in
  1204.     rot13'd form is OK, the message buffer is only temporarily converted
  1205.     and almost any action switches it back.
  1206.  
  1207. o   RemoveReplyBookmarks now defauls to YES.  I'm trying to remove the
  1208.     problem of missing origin lines.  If it doesn't go away, I'll set
  1209.     this back.  INI file can still override this ...
  1210.  
  1211. o   New INI parameter "FileViewer".  If you set FileViewer=List, for
  1212.     example, you will invoke the command "List filename" whenever a
  1213.     bulletin, news file or file list is selected for viewing.  OR,
  1214.     specify your editor ("FileViewer=Q" in my case).  This eliminates
  1215.     file size restraints withing my internal viewer (which I intend to
  1216.     remove anyway).  It also allows more power ... it's a user's choice,
  1217.     at least.
  1218.  
  1219. o   Listening to someone from a while ago ... I've taken a small amount
  1220.     of time to encrypt and otherwise protect my copyright notice and banner.
  1221.     It was reported that my reader was available in Hong Kong with another
  1222.     name and copyright notice on it.  It won't be so easy to change this
  1223.     information any more.  Users will notice no difference ... just FYI.
  1224.  
  1225. o   Spell checker crashing.  This was reported by two users, but I couldn't
  1226.     get it to happen for me.  Luckily, one of the users was a coworker and
  1227.     I was able to see it first hand on his machine.  Turns out the crash
  1228.     occurs only if the reply starts with a quoted line.  Mine always start
  1229.     with an attribution line ... "In a message dated ...".  I reworked the
  1230.     quote-skipping logic within the spell checker (and eliminated another
  1231.     bug at the same time).  I've tested with all forms of quoted lines that
  1232.     I could think of an all seems to be in order.  I guess you'll tell me :).
  1233.  
  1234.  
  1235. Changes included in v1.60x
  1236. --------------------------
  1237. NOTE:  Most versions from this point on until the end of the year will
  1238. contain **lots** of new code.  For those that consider themselves
  1239. less-than-adventurous, it might pay to stick with what you're using
  1240. until all the new features shake out some.  Still, I *do* use MR/2 every
  1241. day, so I have a great incentive for keeping it functional.
  1242.  
  1243. NOTE that all address book and dictionary logic is in development and
  1244. subject to radical changes at any time.  Version numbers may not jump
  1245. very fast, but these are all considered v2.0 features.  I consider every
  1246. version released (in limited fashion only) from now until Jan 1st to
  1247. be a v2.0 beta.
  1248.  
  1249. o   I removed the necessity to have a "String = " clause in a custom
  1250.     conference definition.  It was pointed out that, if you could search
  1251.     on "anything", you'd be able to build combined conference for easier
  1252.     manual scanning.  Before, if you defined a conference with no search
  1253.     criteria or a NULL string, nothing would match.  If you searched on
  1254.     a space, it would work, but the highlighting was awful!  Now,
  1255.     either include the clause "String =" (followed by a CR/LF) or leave
  1256.     if out altogther, list a bunch of conference number to search, and
  1257.     a combo-conference is built.
  1258.  
  1259. o   `NewRime` template section now available for "new" messages written
  1260.     to an address-book target whose private mail section-type is `Rime`.
  1261.     To add `NewRime` to your existing template file, simply add a
  1262.     section in this format:
  1263.  
  1264.     ;---------------
  1265.     `NewRime`
  1266.     $Body
  1267.     ->@RimeSiteNo@
  1268.  
  1269.     Your name here
  1270.     ;----------------
  1271.  
  1272. o   Also, the NewInternet and NewNetmail sections should be changed.  The
  1273.     routing lines (the very first lines of each section) should now match
  1274.     the normal Internet and Netmail sections, respectively.
  1275.  
  1276. o   Address Book.  I've added the ability to record email addresses and
  1277.     other pertainent information in a simple text file.  At this time
  1278.     there is no way to add or maintain the address book other than via
  1279.     direct text editor modifications.  I expect this to change.  See
  1280.     example.adr for a starter kit/example file.  My email addresses
  1281.     are pre-recorded here in various forms :)
  1282.  
  1283.     To access an address-book entry, you use the first field of the
  1284.     record as the identifier or "tag".  When filling out the message
  1285.     header information, enter a "!" followed by an existing address
  1286.     book tag, tab or enter out of this field and the address book data
  1287.     will be accessed and automatically applied.  For example, to send
  1288.     an internet message to me (assuming you have a private internet
  1289.     mail conference defined), simply type "!NK-I" as the TO user and
  1290.     press ENTER.  Oh, you must first copy the file example.adr to
  1291.     mr2.adr.  MR/2 looks for a BBSname.adr (e.g., "NERDNOOK.adr")
  1292.     first, then "MR2.Adr" second, both in the MR/2 base directory.
  1293.  
  1294.     The format is:
  1295.  
  1296.     Tag | Description | TO name | Conference | Private? | Section | Address
  1297.  
  1298.     where:
  1299.  
  1300.     Tag is a short identifier you'll use to reference the address,
  1301.  
  1302.     Description is a free-form field to help you remember who/what this
  1303.     address is for.
  1304.  
  1305.     To name is the name to plug into the TO; header field.
  1306.  
  1307.     Conference is the conference in which to place the message.  NOTE that
  1308.     this is usually a specific number, but "I" is allowed and will be
  1309.     replaced with the conference number set as your "Internet" conference.
  1310.     Also, "N" is allowed and represents the defined Netmail conference.
  1311.  
  1312.     Private is either "Y" or "N", representing the privacy flag.
  1313.  
  1314.     Section identifies the template section to use.  Sometime this may
  1315.     obviously be unnecessary, but it does allow for user-defined "special"
  1316.     sections to be created and used for specific address book entries.
  1317.     "Internet", "Netmail" and "Rime" will probably be used most frequently.
  1318.     NOTE that "New" is automatically prepended by MR/2 when entering "new"
  1319.     messages.
  1320.  
  1321.     Address is the first-line address code.  If the template section uses
  1322.     the @Internet@, @Fidonet@ or either of the @Rime*@ variables, the
  1323.     contents of these variables will be set to this string.
  1324.  
  1325.     NOTES:  There is no error checking or identification by BBS name, other
  1326.     than allowing for BBS-specific address books.  MR2.Adr, if it exists,
  1327.     is always references, but after any bbs-specific file has been checked.
  1328.  
  1329.     Use of the "N" and "I" conference identifiers helps make some addresses
  1330.     less BBS-specific.  For example, I can send Fidonet netmail from any of
  1331.     three separate BBS's.  My MR2.adr can contain netmail addresses for
  1332.     use on all BBS's, as long as my template file(s) have been set up
  1333.     correctly and private mail conferences have been identifies in the
  1334.     BBS-specific INI's.  This can get complex - but it also can be quite
  1335.     powerful and handy.
  1336.  
  1337. o   Not labeled as of yet on the Edit Header screen:  F6 calls up the
  1338.     address book pick-list.  Contains BOTH bbs.adr and mr2.adr.
  1339.  
  1340. o   Internal dictionary available when using the INTERNAL editor.  You'll
  1341.     need one of the two dictionary files available:
  1342.  
  1343.     MR2DICTL.ZIP (280k) - 120,000 words, 480K uncompressed
  1344.     MR2DICTS.ZIP (128k) -  60,000 words, 248K uncompressed
  1345.  
  1346.     The spelling checker logic is fairly good.  The suggested word part
  1347.     needs a little work.  You can add words to a "user" dictionary.  I'll
  1348.     provide a utility later to manipulate dictionaries (add/delete words,
  1349.     merge user dictionary, etc.,.).
  1350.  
  1351.     CTRL-F2 while editing a reply.  ESCAPE stops the speller in between
  1352.     checks.  If a word is not found in either dictionary (base or user),
  1353.     then you are given up to 10 suggested spellings.  You are allowed to
  1354.     pick one of these, skip the word, ignore the word for the rest of the
  1355.     time you are editing the current file, add the word to your user
  1356.     dictionary, edit the word by hand, or stop the spelling check
  1357.     procedure.  The mispelled word is highlighted, and the menus/pick
  1358.     lists move to opposite sides of the display in an attempt to give you
  1359.     an unobstructed view of the word "in context".
  1360.  
  1361.     QEdit users will notice the menu's look a bit familiar :).  It was
  1362.     quite timely of Qedit to get me my v3.0 upgrade around the same
  1363.     time as my dictionary thinking started ...
  1364.  
  1365.     MR2DICT.BIN is the dictionary used ... it must be in the MR/2 home
  1366.     directory with MR2.EXE.  MR2USER.BIN is the user dictionary.  It will
  1367.     be created whenever the first word is added to it.
  1368.  
  1369.     Due to the size of these dictionary files, the base dictionaries
  1370.     themselves will remain separate zip files for distribution purposes.
  1371.  
  1372.     NOTE:  Dictionary is English-only; no support for hi-end ASCII
  1373.     characters at all.  Sorry.
  1374.  
  1375.  
  1376. Changes included in v1.57
  1377. -------------------------
  1378.  
  1379. o   Changed the internal QWK initialization routine that matches NDX
  1380.     files to master conference names.  Previously, the master conference
  1381.     was sequentially searched until the number associated with the index
  1382.     file (e.g., 1695 for "1695.NDX") was matched.  On a 3000 conference
  1383.     BBS, this resulted in an average of 1500 checks before a match.  If
  1384.     you had mail from 100 conferences ... yikes!  It took awhile,
  1385.     although, in reality, it was only a matter of seconds.  The new
  1386.     logic searches the master list once and a compressed easy/quick to
  1387.     search array of conference numbers is searched to see if the master
  1388.     name is needed.  If found, it is processed.  This makes things just a
  1389.     tad more snappier.
  1390.  
  1391. o   Ooops.  It was pointed out to me today that sorting by message number
  1392.     didn't work correctly.  I was using string compares, where message
  1393.     number is left justified.  This means that message number "1000 "
  1394.     would come *before* message "9    ".  WRONG!  Easy to fix - I now
  1395.     convert to numbers and compare.
  1396.  
  1397. o   INTERNAL:  Event class now checks for errors when creating the event
  1398.     semaphore.  If the named semaphore already exists, a new name is
  1399.     created and another attempt is made.  This is to aid in running
  1400.     multiple instances.  Also, a global variable is set with the final
  1401.     "ID" used.  This is necessary when creating some of the other
  1402.     control semaphores.
  1403.  
  1404. o   Mods made to logic that builds "Conferences w/Mail" list caused the
  1405.     sort order to be alphabetical.  While this may be desirable to some,
  1406.     I've become acustom to and still prefer the default "numerical" order
  1407.     by conference number.  I'm the only one that saw this happen, but it
  1408.     sure confused me.  I reworked the code a little more and got the "old"
  1409.     sort order back.  I also managed to make it even more efficient in
  1410.     the process :).
  1411.  
  1412. o   Someone noticed that when using NO PACKET ENTRY, the Inbasket was
  1413.     inaccessible.  This has been corrected.
  1414.  
  1415. o   Internet private mail (replying).  While replying to various Usenet
  1416.     messages via private Internet mail, I noticed MR/2 was leaving alot of
  1417.     To: addresses blank (@INTERNET@ values not found, replaced with blanks).
  1418.     The address was usually easy to find, on the first line identified
  1419.     by the PC-Board "@From:" command.  MR/2 now extracts valid addresses
  1420.     from these lines and can reply properly.
  1421.  
  1422.     NOTE:  I've heard from some users that their internet mail was
  1423.     getting bounced because, when copied from the message header FROM
  1424.     field, the address was in all upper case.  My upper-case addresses
  1425.     seem to work, but there are several different qwk->internet systems
  1426.     in use.  To be safe, I've modified the default template file to
  1427.     convert internet addressed to lower case.  If you're using a
  1428.     template file, and you'd like to do the same, simply find @INTERNET@
  1429.     variable and change it to @LOWER@@INTERNET@.
  1430.  
  1431. o   Conference names containing hi-end ASCII characters were getting
  1432.     truncated.  Switched to using unsigned characters and the problem is
  1433.     now gone!
  1434.  
  1435. o   INTERNAL:  Small patch to GetMessageLine().  If pMessage is NULL,
  1436.     this function instantly returns -1.  No packet entry into private mail
  1437.     conferences crashed inside this function when templates were being
  1438.     processed.
  1439.  
  1440. o   I had introduced a few bugs with no-packet entry.  There were various
  1441.     cases where internal information was not correctly set and crashes
  1442.     would occur.  Things seem to work much smoother now.
  1443.  
  1444. o   I received an Internet message just today about deferred messages and
  1445.     how zeros seem to be mysteriously appearing.  I checked my inbasket
  1446.     (remembering that I'd seen this happen before) and did some
  1447.     experimenting.  Sure enough, one character of every message was
  1448.     being changed; the most frequent occurence was a ' ' being changed to
  1449.     a '0'.  I was marking the 'archived' bit (my personal invention) of
  1450.     the message header, only I was changing the 127th byte of the actual
  1451.     message, instead.  The archive bit is bit 16, which will change a ' '
  1452.     to a '0', an 'a' to a 'q' and so on.  I now have moved this mark back
  1453.     into the message header, where it belongs.  The "archived" indicator
  1454.     that's supposed to be showing for folder messages will probably work
  1455.     now, too.
  1456.  
  1457.  
  1458. Changes included in v1.55 - v1.56
  1459. ---------------------------------
  1460.  
  1461. o   Inbasket packing often left killed replies visable and available across
  1462.     packets.  Fixed - killed messages will once again disappear the next
  1463.     time the packet (and related inbasket) is closed.
  1464.  
  1465. o   Conversion of the master conference linked list to my new,
  1466.     experimental "quick heap" routines.  I'm maintaining a separate heap
  1467.     for memory needed for this linked list.  The list is freed in huge
  1468.     chunks instead of 2 parts per conference name (i.e., PC-Ohio's 3000
  1469.     conferences caused the old heap to have to free 6000 linked entries,
  1470.     maintaining the "available block" information as each one is
  1471.     released).  This *should* speed up the exiting of packets.  Deleting
  1472.     the files is still a source for delay ... perhaps I can multithread
  1473.     this and overlap things a bit.
  1474.  
  1475. o   Modified MR2UTIL.CPP - RemoveWorkFiles() routine.  You wouldn't
  1476.     believe the amount of code I was executing to delete a packet's
  1477.     files!  I was actually building a sorted linked list of file names
  1478.     with details (sizes, dates, etc.,.), then immediately deleting each
  1479.     file found in this list.  Now, this routine merely finds the "next"
  1480.     file and removes it.  Results in a noticable speed up when exiting a
  1481.     packet.  Between the above quick-heap mod, and this one, I think I've
  1482.     licked this problem.  These changes are to the core QWK engine, so
  1483.     they'll help both MR/2 and the PM version.
  1484.  
  1485. o   I've made all internal linked lists use the new QHEAP.  Should result
  1486.     in improved "snappiness".  Also has big-bug potential.  I'll test
  1487.     thoroughly before releasing.
  1488.  
  1489. o   Made some new routines for general use.  Includes a low-overhead
  1490.     delete-by-wildcard routine and an "at least one file matching
  1491.     this wildcard exists" function.  Minor performance improvements
  1492.     should result, as the code scattered about in several places used
  1493.     previously had high overhead.
  1494.  
  1495. o   Rewrote the bintree() class to use QHEAP.  Master conference
  1496.     sorting should be faster for large conferences.  At least a tad ...
  1497.  
  1498.  
  1499. Changes included in v1.54 - Limitted distribution
  1500. -------------------------------------------------
  1501.  
  1502. o   Message Sort can now be defined in the INI as no order, Subject,
  1503.     From or To.  The FROM and TO options are new.
  1504.  
  1505. o   NOTE that if you don't sort by subject but then ask for a quick
  1506.     thread summary (by pressing Q), messages are sorted by subject from
  1507.     that point on.  Previously, Q would just beep at you if SUBJECT was not
  1508.     the specified message sort.
  1509.  
  1510. o   From the Message Index, ALT-O now allows you to change the message
  1511.     sort on-the-fly.  You may select from a menu the option to
  1512.     sort by NUMBER, SUBJECT, FROM USER or TO USER.  Once mesasges are
  1513.     sorted, normal reading (e.g., ENTER for next) will give you the next
  1514.     message in the NEW sort order.  Again, pressing Q resorts by
  1515.     Subject ... this will probably change too, as I've got ideas :)
  1516.  
  1517. o   OK, the "Q" key has been changed once again.  I'm still trying to
  1518.     figure out what the correct method should be.  Now, if you press the
  1519.     Q key and message sorting is by subject, it works the same ... you
  1520.     get the Quick Thread Summary list.  If you happen to be sorted by
  1521.     FROM or TO user, you get a by-user summary.  If there is no sort or
  1522.     message number sort and Q is pressed, the sort is changed to subject
  1523.     and the thread summary is displayed.
  1524.  
  1525. o   I added a new function on the message reading screen triggered by
  1526.     pressing the C key.  This is the "Copy" function.  It simply places
  1527.     a copy of the current message in the reply conference, changes the
  1528.     FROM user to your name and places the EDIT HEADER screen up.  Right
  1529.     now you can copy any message to someone else and make it "from you";
  1530.     not just your own replies.  This may change.  Copy loops for multiple
  1531.     copies until your ESCAPE from the "next" message header edit.
  1532.     I also plan to add a manner to copy to predefined distribution lists.
  1533.  
  1534. o   Forwarding messages:  If a `Forward` template section and accessed
  1535.     message header information, this information would be copied from the
  1536.     header AFTER the header editing process.  That meant that if you
  1537.     changed the conference or subject, the changed data would be used.
  1538.     This has been corrected to show correct original data.
  1539.  
  1540. o   When creating some types of new message where MR/2 defaulted the TO
  1541.     user to blank, the cursor would be one character over.  This was a
  1542.     bug in the internal EditHdr trim function.  Fixed.
  1543.  
  1544.  
  1545. Changes included in v1.53
  1546. -------------------------
  1547.  
  1548. o   Messages.Dat and mr2bm.bin would never get deleted from the tmp$$
  1549.     directory when a packet was closed.  Just a minor flaw, but this did
  1550.     waste some disk space when MR/2 was not in use.  Fixed.
  1551.  
  1552. o   When MR/2 builds it's own NDX files, it now opens the target index in
  1553.     APPEND mode.  No biggy, except in playing around qith QWK merge logic,
  1554.     I found that my QWK engine assumes all conference's message are
  1555.     together.  This may or may not be true for most mail doors, but I
  1556.     should be able to handle non-contiguous conference messages with out
  1557.     breaking anything.
  1558.  
  1559. o   ALT-E to enter new messages w/o an existing packet failed to read and
  1560.     configure based on the selected BBS's "local" INI.  The local INI is
  1561.     now added to MR/2's configuration parameters when one for the selected
  1562.     BBS is found.
  1563.  
  1564. o   New INI parameter "RemoveReplyBookmarks".  This is NO by default, but
  1565.     may be set to YES if it is found that MR/2's bookmarks are interfering
  1566.     with a networks routing or origin lines.  There was a problem on
  1567.     ILink where someone's origin lines were not appended about 50% of the
  1568.     time.  It was blamed on my use of the last byte of the message header
  1569.     as a bookmark flag.  Setting this INI option to YES will cause MR/2
  1570.     to replace any bookmak character at this position with a space (0x20).
  1571.     You lose any bookmark information stored in this byte with this option,
  1572.     but the bookmark flags saved with replies is minimal anyway.
  1573.  
  1574. o   Modified the confirmation button screen routines to accept the pressing
  1575.     of a "k" or "K" to mean "keep" when prompting about existing replies.
  1576.     For an "Ok/Cancel" choice, "o" or "O" means OK, and "Y" still works as
  1577.     a positive response on all versions of this screen.
  1578.  
  1579. o   Reply splitting:  instead of "(Cont'd)" being attached to the subject
  1580.     of a plit message, MR/2 now numbers each part and gives a total count.
  1581.     The counters are placed at the far right of the subject space, so
  1582.     subjects like "MR/2                  1/2".  This preserves as much of
  1583.     the original subject as possible.  This also will assist in MR/2's
  1584.     sorting of multiple part messages (when sorting by thread).
  1585.  
  1586. o   When a single piece of a split message is later modified, the last
  1587.     line of that part would often be removed before entering the editor.
  1588.     This has been corrected, although more changes to come might
  1589.     render this fix useless ...
  1590.  
  1591. o   Save file selection screen now supports long file names.  I changed the
  1592.     order of the display to place the file name last.  I don't like this
  1593.     as much as when it's first, as you can't use keyboard chars to jump
  1594.     to filename (i.e.,  pressing "M" no longer moves to the first M file).
  1595.     I may play with trying to fit the long file name in front, maybe with
  1596.     leader dots to line it up with the corresponding date/time and size.
  1597.  
  1598. o   Improved the long file name selection logic.  Moved the name back to
  1599.     the front of each line so shortcut keys work again.  Selection box
  1600.     expands to fit around longest name (I've set a max of 42 characters
  1601.     for save file names ... at least it's better that 8 :).
  1602.  
  1603. o   Decision Button logic changed once again.  I like this even more.
  1604.     Now, if the screen reads YES/NO, the only letters MR/2 responds to
  1605.     are Y and N.  KEEP/DELETE recognize only K and D, and OK/CANCEL see
  1606.     only O and C.  All other typing characters are ignored.  Also,
  1607.     if you use the right arrow key, the right box is highlighted and
  1608.     becomes the default when ENTER is pressed.  If you press left arrow,
  1609.     the highlight moves back to the left box and this is again the ENTER
  1610.     default selection.
  1611.  
  1612. o   Form filling logic changed somewhat.  Implemented the TAB key to
  1613.     advance one field as the down arrow key does now.  Also implemented
  1614.     SHIFT-TAB as a previous field key synonomous with the up arrow key.
  1615.  
  1616. o   Added the capability to split messages at a user defined point.
  1617.     Used SLMR's ".pg" marker technique.  Start a line with ".pg" and
  1618.     MR/2 will force a split at this position.
  1619.  
  1620. o   Made Fast Exit from the message viewer *really* fast!  Instead of
  1621.     filtering back through all those nasty C++ destructers, I simply call
  1622.     DOSExit after some simple cleanup.  Seems to work nicely even on
  1623.     packets with a large number of conferences (~3000).  I'll spend some
  1624.     watching for bugs ... I think I can multithread my freeing of many
  1625.     internal structures and linked lists too.  (This is what takes MR/2
  1626.     so long when closing a large packet w/lotsa conferences - all the
  1627.     freeing of memory.  ZTC doesn't handle this very quickly ... I'll
  1628.     try to help them some :).
  1629.  
  1630. o   If you specified a static, hard-coded tagline, then hit F2 to "pick"
  1631.     a new tagline, MR/2 would crash.  Now it puts up a nicer "empty list"
  1632.     message, although it still doesn't let you pick a new one :).
  1633.  
  1634.  
  1635. Changes included in v1.52
  1636. -------------------------
  1637.  
  1638. o   New variables for use with templates to allow random and user-selected
  1639.     phrase insertion.  First, there must exist a text file containing a
  1640.     list of possible phrases, one per line.  Then, the template file
  1641.     must contain one of the following (assuming "phrases.phr" is the file
  1642.     name and it resides in the MR/2 home directory.  Remember, when
  1643.     replying, you're pathed into the TMP$$ sun directory):
  1644.  
  1645.         @SELECT:..\phrases.phr@
  1646.         @RANDOM:..\phrases.phr@
  1647.  
  1648.     Select will build a list of te file's contents and display the
  1649.     phrases in a selection box for you to pick from.  If you ESCAPE
  1650.     from the selection w/o picking an entry, MR/2 will randomly select
  1651.     one for you.  If you choose the RANDOM option, no user prompting is
  1652.     performed;  MR/2 randomly selects one of the phrases to include.
  1653.  
  1654.     You may have multiple phrases per template line; as many as you want
  1655.     in any given section.  They're processed one at a time.  Phrases may
  1656.     even contain other @ variables, however, these variables are not
  1657.     replaced with data until AFTER the phrase is selected.  Hmmm, I'll
  1658.     have to test this, but there should be no reason a random phrase
  1659.     couldn't reference another select/random phrase clause.  Ah, I'm
  1660.     thinking too hard :)
  1661.  
  1662.     When you're selecting a phrase manually, the template line in
  1663.     progress is displayed on the bottom "status" line of the screen.
  1664.  
  1665.     OK, how about an example?  Here's what I tested with in my template
  1666.     file:
  1667.  
  1668.     ==================================================
  1669.     On @MSGDATE@, @FROM@ @SELECT:..\SAID.PHR@ to @TO@:
  1670.  
  1671.     $BODY
  1672.  
  1673.     To which, @SELECT:..\TOD.PHR@, I reply:
  1674.  
  1675.     Nick
  1676.     ====================================================
  1677.  
  1678.     The contents of the file "SAID.PHR" I used for testing was:
  1679.  
  1680.         said
  1681.         spewed
  1682.         bellowed
  1683.         expounded
  1684.         proclaimed
  1685.         jabbered
  1686.         mumbled
  1687.  
  1688.     and "TOD.PHR" contained:
  1689.  
  1690.         on this brisk morning
  1691.         in the heat of the night
  1692.         in a babbling frenzy
  1693.         without a hint of intelligence
  1694.  
  1695.     all just jibberish to test with.  It works very nicely, tho.
  1696.     The sysops will love me now!  BTW, I used a .PHR suffix to stand
  1697.     for "phrases".  Phrases should be of a reasonable length (none
  1698.     longer than 200 chars, for select, only 76 are usable).
  1699.  
  1700.     Please, let me know if you can think of any "colorful" extensions
  1701.     to this idea! :)
  1702.  
  1703. o   ADD/DROP conference would not work if a DOOR.ID file was not present in
  1704.     the packet.  I now default to QMAIL format in these cases, and create
  1705.     QMAIL-style add/drop messages.
  1706.  
  1707. o   When you would modify a reply and change the header data, the index
  1708.     list would not reflect these changes.  The "I"/Insert index list will
  1709.     now accurately match reply header data.
  1710.  
  1711. o   Ooops.  "InBasket" Folder was not being packed.  In other words,
  1712.     messages that were deferred, then later killed/deleted would still
  1713.     be physically contained in the InBasket.Dat file.  They were marked
  1714.     as inactive, so they couldn't be read.  Code to pack this file
  1715.     has been reinstituted.
  1716.  
  1717. o   Double oops :)  FolderPath was never sufficiently documented as a
  1718.     valid MR2.INI parameter.  It was metioned in the read.me file, but
  1719.     was never entered into the MR2INI.ORG file.  It's there now, and ...
  1720.  
  1721. o   It never really worked, anyway.  It "kinda" worked, as it did
  1722.     everything correctly except allow you to actually read deferred message
  1723.     from anywhere except off of the MR2 home directory.
  1724.  
  1725. o   I just spent 3 days tracking and fixing a bug ... one that ends up I
  1726.     put in just 5 days ago :).  In tracking this down, I did discover some
  1727.     potential problems and even a memory leak with the Quick Thread
  1728.     Selection screen logic.  These problems may have been the cause of some
  1729.     of the rare/random reports of crashing I've received.  Well, at least
  1730.     the memory leak is gone! (it was relatively minor)
  1731.  
  1732. o   In case you're just tuning in, MR/2, while an OS/2 app, still
  1733.     "polls" the keyboard for input.  This is to ease mouse support. It's
  1734.     technically possible to use semaphores and other OS/2 resources to
  1735.     support both devices (kbd and mouse) w/o polling, and most OS/2-ers
  1736.     will tell you this is the route to take.  Still, I could think of no
  1737.     clean way of removing polling, short of spending a couple of weeks
  1738.     and adding tons of code.  When I asked for suggestions in various
  1739.     OS/2 programming conferences, it got fairly quiet. Zortech's default
  1740.     libraries originally used a very tight polling loop.  MR/2 uses a
  1741.     much friendlier loop, using calls to DOSSleep between every poll.
  1742.  
  1743.     I've increased the default sleep time from .30 seconds to .50
  1744.     seconds.  Using PM SysInfo, my CPU showed 19% usage w/o MR/2 loaded.
  1745.     At 30 ms delay, the meter showed 23%.  At 50 ms, it reads 21%.  I
  1746.     investigated this in response to a reported problem where MR/2
  1747.     allegedly hogged the CPU from a comm program (OS/2 hosted - HA5?).
  1748.     I've never seen this myself ... MR/2 has never caused my system to
  1749.     seem slow or impeeded my TE/2 use.  I'm in MR/2 more than anyone :),
  1750.     and by default I'm using TE/2 probably more than the average user.
  1751.  
  1752.     Anyway, .50 seconds is the new default.  I'll probably make this
  1753.     configurable for those that see a difference :).  I'm also planning
  1754.     on playing with the background search thread priority now that OS/2
  1755.     2.1 is out.  I'll see if the old IDLE thread bug still exists.
  1756.  
  1757. o   Modified the origin line find logic.  Original code, for some stupid
  1758.     reason, started at the beginning of a message and search forward.  I
  1759.     now start at the end and work backwards.  This will help prevent
  1760.     erroneous detection of the origin when user-entered dashed lines are
  1761.     entered as section separaters.
  1762.  
  1763.     In addition, I revamped the whole routine.  It seems to do a much
  1764.     better job of finding the start of the origin section.
  1765.  
  1766. o   There was a problem on some systems with the personal conference not
  1767.     showing in the selection list.  This was when working on an HPFS
  1768.     drive, and the personal.ndx file was unpacked with a lower case file
  1769.     name.  When MR/2 scanned conferences, it always matched on capital
  1770.     letters for the personal index.  This was never a problem BEFORE
  1771.     long name support, as the names always came back capitalized.  Now,
  1772.     they come back as they are on disk.  I've fixed this problem and
  1773.     scanned for other possibilities.  I think that was it ... time will
  1774.     tell!   NOTE: The report I received that finally solved this one
  1775.     specifically mentioned a 32-bit UNZIP.EXE.  He mentioned that all
  1776.     worked OK with the -U switch added to the command line.  Just FYI.
  1777.  
  1778. o   Message Header Edit screen now allows you to enter conference numbers
  1779.     that are not present within the control.dat master conference list.
  1780.     Maximus QWK doors and PC Board's built-in QWK feature do not supply
  1781.     complete conference lists.  Some QWK doors also make this optional to
  1782.     reduce packet size.  Previously, you could not post into a conference
  1783.     that was not defined in the contorl.dat file.  Now, you may manually
  1784.     enter ANY number.  If MR/2 cannot find it in the master list, it will
  1785.     beep and clearly identify the conference number as a possible problem
  1786.     with the tag: "** WARNING: Unknown Conference **".  It's the user's
  1787.     resposibility to make sure a message is posted to the correct
  1788.     conference number.  Maybe I'll add a user-definable master list later.
  1789.  
  1790.  
  1791. Changes included in v1.51
  1792. -------------------------
  1793.  
  1794. o   RIME routed messages are now recognized as having a "header area" at
  1795.     the top of the message.  If the message is "split" due to length,
  1796.     the header area should be automically pasted into the top
  1797.     of each part.
  1798.  
  1799. o   FILE_ID.DIZ files were crossed between classic and PM.  Fixed.
  1800.  
  1801. o   After a brief "vacation" <NOT!>, work is once again progressing :)
  1802.  
  1803. o   OK, I linked in HPFS longname support and modified some code to
  1804.     retrieve and handle long file names.  The packet select screen
  1805.     now shows TE/2-renamed files like "pc-ohio.qwk;1".  This will need
  1806.     some testing and polish, but it works.  FileSpec in MR2.INI should
  1807.     be changed to "*.q*" in order to see these files.
  1808.  
  1809. o   Ooops.  I couldn't find a PKUnzip that would work with long names.
  1810.     Even the older OS/2 version puked.  This'll definitely be a problem
  1811.     with other DOS based archivers.  So, I added a little diddy to
  1812.     unqwk.cmd that, if a long name is detected, will copy the selected
  1813.     file into the tmp$$ directory as MR2$TMP.QWK and unpack this.  It
  1814.     then deletes the "temporary" QWK packet.  Works great with even
  1815.     the DOS PKUnzip now!
  1816.  
  1817.     If you want to use TE/2 on a HPFS system and unpack the "BBS.QWK;1"
  1818.     type names with a DOS or PK* product, you *must* set your unzipper
  1819.     to unqwk.cmd.
  1820.  
  1821. o   Selecting an alternate conference using F4 from the Message Header
  1822.     Edit screen was broken.  This has been fixed.
  1823.  
  1824. o   Packet path would get reset after every packet.  That meant that if
  1825.     you used ALT-P to change to a different directory and opened a packet,
  1826.     you'd lose that path when that packet was exited.  Packet path and
  1827.     Video mode now are kept across packets
  1828.  
  1829. o   An MR/2 INI file other than MR2.INI may be specified via command line
  1830.     parameter.  Use "MR2 /IMR2_ALT.INI" to use a file named MR2_ALT.INI as
  1831.     the global MR/2 INI file.  I'm hoping that this helps in allowing
  1832.     multiple instances of MR/2 to be open on the desktop.  Needs more
  1833.     testing and experimentation ...  Opening two different MR/2 seesion
  1834.     still crashes.
  1835.  
  1836.  
  1837. Changes included in v1.50
  1838. -------------------------
  1839.  
  1840. o   Read.me is now shifted around so that most recent changes (from now
  1841.     on, at least) list at the top.  The old mr2.hst file that used to
  1842.     house the list of modifications up to v1.00 (beta changes) is gone.
  1843.     Mr2.hst now contains a list of changes from v1.00 up to v1.40.
  1844.     This read.me file contains changes made in v1.40 and beyond.
  1845.  
  1846. o   Welcome and Goodbye screen now list on the Bulletins select menu.
  1847.     You can view these, unobstructed and at length, any time you choose.
  1848.  
  1849. o   Minor change to the parsing of the @Fidonet@ variable.  Removed any
  1850.     @fidonet suffix that exists in the origin line.
  1851.  
  1852. o   Ooops.  When using the internal editor, and editing mr2.ini, the
  1853.     read clock string would pop onto every edit screen.  The clock display
  1854.     is now suspended/resumed correctly.
  1855.  
  1856. o   Clock would still pop up if you would request HELP while inside the
  1857.     editor, then CANCEL to clear the help screen.  Fixed.
  1858.  
  1859. o   ALT-W now "works" when inside the internal editor.  It will write the
  1860.     entire file currently being edited, to another file named by you.
  1861.     This does not change the original file's name.  It will overwrite any
  1862.     existing file ... I guess there's an enhancement idea right there :)
  1863.  
  1864.     NOTE: The internal editor works similarly to the E and EPM editors
  1865.     as far as CR/LF's go.  If you type in a long reply letting the
  1866.     editor do the wrapping, there are not necessarily CR/LF's at the end
  1867.     of every line.  These occur only where they previously occur, or
  1868.     when you force a "hard return" by pressing ENTER.  MR/2's reply
  1869.     saving logic places hard returns into the replies.  This means that
  1870.     files that are created by using ALT-W *may* appear to be one long
  1871.     line (or at least one long line per user-typed paragraph) when
  1872.     viewed with another editor, printed, or typed to the screen.  If you
  1873.     want to ALT-W write a reply with correct CR/LF placement, save the
  1874.     reply AND THEN go into the reply conference and re-edit it.  Once it
  1875.     has been saved, CR/LF's will be placed properly.  Let's see if this
  1876.     causes a problem for anyone.
  1877.  
  1878.  
  1879. Changes included in v1.48x
  1880. --------------------------
  1881.  
  1882. o   Add/Drop - you can add or drop a conference via "door" command now.
  1883.     Simply highlight a conference on the Conferences w/mail or the Write
  1884.     New selection list.  Press ALT-A to add, ALT-D to drop, and confirm
  1885.     the action.  Adding/Dropping a non-BBS conference (MR/2 created, for
  1886.     example) does nothing.
  1887.  
  1888. o   Internal Editor:  cursor would not be visible in with screen displays
  1889.     of 40 lines or more.  I was drawing the cursor, just too thin!  Now,
  1890.     the cursor setting routine queries # lines and adjusts.
  1891.  
  1892. o   Modified the "no packets exist" screen to report the option of
  1893.     pressing ALT-E to enter message to a known BBS even though no packets
  1894.     exist.  Formatted the text on this screen a little better.
  1895.  
  1896. o   Added code to trim off nulls at end of any message.  Was trimming spaces,
  1897.     but Internet messages sometimes had nulls.  Messes up the reply file
  1898.     editing.  Also, if any embedded nulls are found, these *aren't* written
  1899.     to the reply file OR save file.
  1900.  
  1901. o   Processing for IDATE improved a little.  I saw some DATE: lines that
  1902.     started with weekday names like "Sun, ".
  1903.  
  1904. o   New INI parameter - ReplyStripTagline defaulting to YES.  Set it to NO
  1905.     if you want to use SmartQuoting (which strips the original messages
  1906.     tagline) but still want the tag quoted.
  1907.  
  1908. o   QuoteStyle now has an optional parameter, which is ON by default.
  1909.     If you specify TagStyle=PCBoard,Autosense, you're saying that quote
  1910.     style can use hi-end ASCII chars, but if it's a Fidonet reply,
  1911.     change to Fidonet mode.  I'm not sure if I should include Internet
  1912.     messages as Fido-typed tags ... I probably should.  I'll research.
  1913.     Without the "Autosense" keyword, tag style will adhere strictly to
  1914.     what's been specified.
  1915.  
  1916. o   NOTE: starting with the next release, this file will begin to list the
  1917.     latest changes at the TOP of the file, with older revisions towards
  1918.     the bottom.
  1919.  
  1920.  
  1921. Changes included in v1.47x
  1922. --------------------------
  1923.  
  1924. o   Added new Template file sections: SaveHeader and PrintHeader.  Lets
  1925.     you define the header for messages when printed or saved.  If these
  1926.     sections don't exist, the old default header is used.
  1927.  
  1928. o   Added more variables to aid in the support of the new header sections:
  1929.     MsgRefNbr, MsgNumber, MsgStatus.  In addition, added some more variables
  1930.     to aid in formatting sections.  @COL:45@ sets the next column to 45.
  1931.     @RCOL:72@ says to right justify the next variable referenced at col 72.
  1932.     @Center:40@ says to center the next variable referenced over column 40.
  1933.     The @RCOL@ and @CENTER@ variables can be used w/o column specs to
  1934.     right justify at "wrap column" or center the entire line between wrap
  1935.     column and 1.
  1936.  
  1937.     Negative @COL@ specs may be supplied.  This will delete the specified
  1938.     number of characters before the variable.  For example, @ITIME@@COL:-4@
  1939.     would change 07:54:30 GMT to just 07:54:30.  Messes up, tho, if MSGDATE
  1940.     ends up getting substituted for IDATE (no IDATE is found).
  1941.  
  1942.     See example.tf, at the end.  There's a section `unused` with some
  1943.     doc/examples.
  1944.  
  1945. o   The template file now supports comment lines.  Simply start the line
  1946.     (very first columns) with ";;" and the line is ignored.
  1947.  
  1948. o   Save message - if your "default" file in the INI has a "*" or a"?"
  1949.     in the name, MR/2 shows the file selection list immediately upon
  1950.     hitting the "S" to save.
  1951.  
  1952. o   MR/2 now will highlight all occurences of a search string within a
  1953.     "hit" message.  This includes custom conferences, and soundex hits.
  1954.     Soundex highlights may appear longer or shorter than the actual hit.
  1955.     Since the length of these matches is variable, a "best-guess" is made.
  1956.     Header area hits are highlighted also.  A multiple part search string
  1957.     will cause ALL strings that have matched to be highlighted.  Color
  1958.     defaults to yellow background, black letters, but ...
  1959.  
  1960. o   I added yet another 2-byte color combination to the end of my "archaic"
  1961.     (as it's been referred to :) color specification.  Modify your INI
  1962.     color line (example given):
  1963.  
  1964.         Colors=1E171E??
  1965.  
  1966.     replace the ?? with the two-digit color code for the HIGHLIGHT color to
  1967.     use when displaying search result "hits".  The default, black on yellow,
  1968.     would be specified as E0.
  1969.  
  1970.     If you don't like new the highlighted text, just define the highlight
  1971.     color to be the same as normal text.  This will still show differently
  1972.     in the header and quoted text sections ... let me know.
  1973.  
  1974. o   INTERNAL:  had to modify csoundex to return hit pointer.
  1975.     check_for_string() now returns a point to a hit, and sets a global
  1976.     length variable, __cfs_match_lgth.  ViewBuffer now has code to search
  1977.     for match string(s) and hilite any/all found.
  1978.     INI.cpp:  added another parse for new color possibility.
  1979.  
  1980. o   While viewing any message, you can press "~" to rewrap it.  This is
  1981.     useful only in USENET (Internet) conferences where sometimes a message
  1982.     gets posted without linefeeds.  MR/2 would display it on a single line,
  1983.     but only give you access to the first 160 characters.  This rewrapping
  1984.     is quite temporary (if you "go back" later to view the same message,
  1985.     you'll have to rewrap it again), and totally manual; performed by user
  1986.     keypress only.  I may INI-ize an automated/detection scheme later.
  1987.  
  1988. o   GetMessageLine:  added a new parameter, maxline_length.  This defaults
  1989.     to 32000, but may be overridden.  Problem was with long usenet message
  1990.     (no linefeeds), stacked string variable were getting overflowed.  This
  1991.     becase apparent when searching for varibale values ... may exist in
  1992.     other places.
  1993.  
  1994. o   Specified maxline_length on all calls to GetMessageLine() found in
  1995.     MR2.cpp and MR2Util.cpp.
  1996.  
  1997. o   Added a bunch of code to better detect message display lines that are
  1998.     "quotes" from previous messages.  This is not configurable at this time.
  1999.     If I did too much, yell and I'll make this optional.  With all the
  2000.     messages I looked at, quoting highlights were right 99% of the time.
  2001.  
  2002. o   New QuoteBody option - Paragraph.  If you specify something like:
  2003.  
  2004.         QuoteBody="%i│▌",Paragraph
  2005.  
  2006.     then you'll get a quotes like:
  2007.  
  2008.         MN│▌Yes-  DOS 6 upgrade is... (lines chopped for brevity)
  2009.           │▌number of files that...
  2010.  
  2011.         MN│▌And then after your DOS...
  2012.           │▌the manual of files you...
  2013.           │▌release the whole thing...
  2014.  
  2015.        you can do the same thing with "%i>", and secondary lines
  2016.        get just " >".  Use the "|" (shifted backslash) and Fidonet
  2017.        sysops may not yell at you :)  (it's not hi-end ASCII).
  2018.  
  2019.     Bummer!  I just saw someone (a registered MR/2 user using a DOS
  2020.     package, hmmmph!) quote with a technique that this doesn't yet
  2021.     handle :(.  Just a minor nit, maybe I'll add something later to do
  2022.     this (YOU CAN'T DO THIS WITH MR/2):
  2023.  
  2024.         MN┤Yes-  DOS 6 upgrade is... (lines chopped for brevity)
  2025.           │number of files that...
  2026.  
  2027. o   Prewrapping still screws up.  I'll look at this tomorrow. :(
  2028.     HA!  I had a problem where I saw too many lines as being "quoted".
  2029.     Fixed this and text is flowing much nicer.  Time will tell.
  2030.  
  2031. o   Editor:  Hi-end ASCII (>127) is now available via the ALT-nnn (numeric
  2032.     keypad entry).  Hi end characters that used to display with different
  2033.     attributes now display correctly (normal text color).
  2034.  
  2035. o   Forms: ALT-nnn combinations can now be used to enter characters into
  2036.     forms.  The Header Editing form will now accept these characters.
  2037.     Still a problem ... display rountines aren't showing them ...
  2038.     OK, fixed displays.  It was a trimming problem, hi-end ASCII getting
  2039.     trimmed off the end as, when seen as signed chars, they're actually
  2040.     LESS THAN a ' ' and would get trimmed.
  2041.  
  2042. o   Oops, old quote detect now also uses new "extended" quoted line
  2043.     detection logic.
  2044.  
  2045.  
  2046. Changes included in v1.46x
  2047. --------------------------
  2048. Beta bug fixes...
  2049.  
  2050. o   Trying to declare SmartWrapping or SmartQuoting in the INI file
  2051.     resulted in a crash.  I messed up by referencing an uninitialized
  2052.     pointer.  Sorry ... fixed now.
  2053.  
  2054. o   Modified the logic to pick out the quoting initials to better parse
  2055.     Internet "from" fields.  Still needs some other strange-character
  2056.     detection added (nick.knight@pc-ohio should reduce to nk>).
  2057.  
  2058. o   Fixed a bug where internet from fields that were filled to 25 characters
  2059.     resulted in your own last initial being inserted as the senders second
  2060.     initial (Michael.Hagerty@nitelog.com to Nick Knight, reply would
  2061.     be quoted MK>)  This *was* fixed in v1.45 but not documented.
  2062.  
  2063. o   So my wrapping logic needs a little work :)  I added some things.
  2064.     First SmartWrapping and SmartQuoting have three levels: No, Yes and
  2065.     Full.  Full is aggressive, rewrapping all non-quoted text to the
  2066.     defined wrap column (This is the old "YES").  If set to Yes (the
  2067.     "new" option), wrapping occurs ONLY after a line feed has been
  2068.     inserted by MR/2 (an overlength line was detected). The defaults are
  2069.     "YES" ... we'll see if this works any better.  Limited testing, but
  2070.     you *can* now shut these off w/o crashing!
  2071.  
  2072. o   Also, add an "~" to the end of any line (before the linefeed) and
  2073.     MR/2 will strip out the "~" and keep the return that follows intact.
  2074.     This is for stubborn wrapping problems.  Just in case :)
  2075.  
  2076.  
  2077. Changes included in v1.45x
  2078. --------------------------
  2079. Another limitted release beta ...
  2080.  
  2081. o   INTERNAL: get_origin into mr2util.cpp from qwksrch.cpp.  Previously
  2082.     it was considered part of the searching logic but now has more
  2083.     applications.
  2084.  
  2085. o   If the quoting initials ended up longer than 9 characters (FROM name
  2086.     had no spaces), the string was not properly terminated.  This resulted
  2087.     in garbage in the initials and in one reported case, a crash.  This
  2088.     would occur most often in internet conferences.
  2089.  
  2090. o   New module: Wrap.cpp - WrapMessageText() called from MakeReply()
  2091.     and SaveReply().
  2092.  
  2093. o   New function in mr2util.cpp: fQuoteLine().  This used to be a simple
  2094.     macro used in a single place.  It was needed in another chunk of
  2095.     code so I made it a function.  This also allows for extensions, as
  2096.     all MR/2 currently recognizes is a '>' in any of columns 1 through
  2097.     5.  If one's there, I call it a quote line.
  2098.  
  2099. o   New INI variable:  SmartQuoting, defaulting to "YES" but may be
  2100.     manually set to NO via INI settings.  SmartQuoting will "prewrap"
  2101.     the reply file that MR/2 generates, compensating for the user
  2102.     initial prefix string.  In other words, when you first see the
  2103.     reply, the original sender's text will be rewrapped and quoted so
  2104.     as to fit inside the WrapLinesAtColumn defined in MR2.INI.
  2105.  
  2106.     NOTE: that existing quoted lines ARE NOT REWRAPPED.
  2107.  
  2108.     ALSO NOTE: SmartQuoting will *not* quote past the first tearline.
  2109.     If this creates an incovenience, please let me know.
  2110.  
  2111. o   New INI variable:  SmartWrapping, defaulting to "YES" but may be
  2112.     manually set to NO via INI settings.  SmartWrapping will change
  2113.     the logic used by MR/2 when the edited reply file is saved.
  2114.     If set to NO, the old wrapping method is used.  When left on,
  2115.     MR/2 will format your NEW text with some intellegence.  There is
  2116.     logic to differentiate between a "hard" and "soft" return, and
  2117.     soft returns will be removed if necessary.
  2118.  
  2119.     The old technique would simply insert hard returns to make the line
  2120.     fit within the declared wrap column.  The remaining section of the
  2121.     original line would often be short (one or two words) and look out
  2122.     of place, stranded on a line by itself.  The new technique attempts
  2123.     to rewrap the text as a whole and eliminate some of the older
  2124.     method's ugly results.
  2125.  
  2126.     NOTE: Quoted lines ARE NOT REWRAPPED, these are always considered
  2127.     to be prefixed and terminated by hard returns.
  2128.  
  2129. o   New template sections are definable:  NewInternet and NewNetmail
  2130.     for creating new messages in these private-mail conferences.
  2131.  
  2132. o   The NewMessage template section was never actually used ... the
  2133.     "default" direct section was always being used for new messages.
  2134.     Fixed.
  2135.  
  2136. o   When editing a message header and the conference is the Internet or
  2137.     Netmail defined conference, the "private" flag is set to YES.
  2138.  
  2139. o   INTERNAL:  SetSection() moved into mr2util.cpp.
  2140.  
  2141. o   INTERNAL:  AppendFile() - replaced fpreamble with multivalued
  2142.     "subsection" parameter.
  2143.  
  2144. o   New template section: `RIME` can be defined for use when replying
  2145.     to a message in private mode.  If a reply is private, and the
  2146.     source message is determined to be from a RIME source (Postlink
  2147.     origin is last line of message), then this section is used in
  2148.     generating the reply.  This allows for private, routed mail.
  2149.     Not sure what to do about "new" private, routed messages.
  2150.  
  2151. o   New variables:  @RimeIDCode@ and @RimeSiteNo@ for use in the RIME
  2152.     section for "routing" private messages.  Will result in blanks unless
  2153.     replying to a message with a Postlink origin line.
  2154.  
  2155. o   New Variables:
  2156.  
  2157.         @RimeIDCode@ and @RimeSiteNo@, defined above.
  2158.  
  2159.         @Version@ for the MR/2 version.
  2160.  
  2161.         @SerialNumber@ is replaced by the registered serial number
  2162.                 (empty if not registered).
  2163.  
  2164.         @UserName@ is replaced by your user names as found in the QWK
  2165.                 control.dat structure.
  2166.  
  2167.         @IDate@ is replaced with the Internet "Date:" spec, or the
  2168.                 the same results as @MDATE@ if a date string is not
  2169.                 found.
  2170.  
  2171. o   New template section: `Forward`.  If this section is declared, it is
  2172.     used as the template "prefix" for forwarded messages.  NOTE:  $Body is
  2173.     not required, this section is inserted as a whole.  If not declared,
  2174.     the old MR/2 default forward prefix is used.
  2175.  
  2176. o   See EXAMPLE.TF for examples of all new section capabilities.  My name
  2177.     and email addresses are plastered all through here.  You'll want to,
  2178.     of course, change these to your own :)
  2179.  
  2180. o   ** DO NOT USE THE ALT-W feature inside the internal editor. **
  2181.     ALT-R seems to work ok (Read or "insert" file).
  2182.  
  2183.  
  2184. Changes included in v1.44x
  2185. --------------------------
  2186.  
  2187. o   When replying into the Internet mail conference, the @INTERNET@
  2188.     variable will better represent a true Internet address.  If the
  2189.     Reply-To: line isn't present, MR/2 then looks for a "From:" line and
  2190.     attempts to parse out an address.  If no From: line is detected,
  2191.     MR/2 now looks to the last line of the message.  If the sender has
  2192.     included his address inside of parenthesis, then this is used as the
  2193.     INTERNET value.
  2194.  
  2195. o   Added ALT-R and ALT-W support to the internal editor.  ALT-R prompts
  2196.     for a file name, then reads that file into the current cursor
  2197.     position.  ALT-W prompts for a file name and writes the entire edit
  2198.     buffer to that file (overwritting).  I'm not happy this code ... and
  2199.     it doesn't seem to work that well.  I also noticed that the editor
  2200.     doesn't save files in full text mode (no CR's).
  2201.  
  2202. o   Modified msg2rep.cmd so that if archiver.id file isn't found, it
  2203.     defaults to pkzip (configurable).  If using no packet entry, no
  2204.     unarchiver was called, so no archiver.id is created.  We need to
  2205.     be able to specify a packet as a default.
  2206.  
  2207. o   If a local INI specified a value for Internet and/or Netmail, it
  2208.     was not cleared when the packet was exitted.  If the next packet
  2209.     opened did not reset these values (or did not have a local INI), then
  2210.     some erroneous detection of network mail would result.  Fixed.
  2211.  
  2212. o   The internal editor now saves and ALT-W writes files in TEXT mode.
  2213.     I had to do cr/lf translations myself :(.  Writing is OK now, although
  2214.     I'm still hoping to recognize and write only a block, if something is
  2215.     highlighted/marked.  Reading/importing a text file also works OK, but
  2216.     since I'm tricking the editor by inserting the file into the internal
  2217.     editor keyboard buffer, it runs more slowly than it should.  Plenty of
  2218.     room for improvement here :)
  2219.  
  2220.     THIS IS BUGGY AND MAY GET YANKED !!!!
  2221.  
  2222. o   I modified the "origin" line finding logic to recognize more common
  2223.     reader/network tearline styles.  For instance, MR/2's own TwoLine
  2224.     style tagline is now recognized as the beginning of the origin section
  2225.     (and end of the BODY section).
  2226.  
  2227. o   INTERNAL:  QwkSrch.cpp - modified fopen() call to open custom conference
  2228.     NDX file.  It now prepends the BaseDir and WorkPath.  MR2PM, under some
  2229.     interesting circumstances,  would write these files to the wrong
  2230.     directory.  MR/2 classic probably could have, too.
  2231.  
  2232. o   Qwksrch.cpp - James Schmidt found a couple of problems.
  2233.     If you set the CHECK= parameter for a custom conference to TO, FROM
  2234.     and/or SUBJECT, and the source message used mixed case text, a match
  2235.     would never be found.  Fixed.  Also, if a message had no detectable
  2236.     origin line, for some strange reason I called the whole message part
  2237.     of the origin/tagline area (and it had no "body" section).  This is now
  2238.     reversed - a message with no tearline is all "body" and has no origin
  2239.     section.
  2240.  
  2241.  
  2242. Changes included in v1.43x
  2243. --------------------------
  2244.  
  2245. FOLKS:  Same as before ... 1.42 was kept *very* internal.  This version
  2246. is still beta stuff.
  2247.  
  2248. o   Started coding of a REXX script to handle detection of the archiver
  2249.     used to pack the mail packet.  A code is returned that will be used to
  2250.     branch to the correct command for unpacking.  To me, this is the ideal
  2251.     solution, as it is forever extensible.  I've got a scheme for a packer
  2252.     script (for replies) that will match the unpacker used.  I'm new to
  2253.     REXX coding (this was the perfect excuse to get my feet wet :), so
  2254.     if anyone wants to make improvements and/or enhancements, I'll welcome
  2255.     them.  (file is named Unqwk.cmd)
  2256.  
  2257. o   Create msg2rep.cmd - a REXX script for packing replies into a .rep
  2258.     file based on the method used to unpack the original packet.  The source
  2259.     packet *must* have been unpacked with unqwk.cmd (or, at least, the file
  2260.     "archiver.id" must exist and identify the correct packer to use).  This
  2261.     script opens up "archiver.id" and extracts the id number.  Based on that
  2262.     number, a branch is made to the correct packet command.
  2263.  
  2264.     NOTE:  You may have to modify these files a tad IF your archivers
  2265.     are not in your "PATH" environment variable.
  2266.  
  2267.     NOTE:  These command are useful if you use multiple packet sources
  2268.     (BBS's) that use different compression techniques.  If you can get
  2269.     by with a single zipper/unzipper command, the "old" way is OK, and
  2270.     in fact, still more efficient.  These new files simply provide
  2271.     additional flexibility for those that frequent a variety of BBS's and
  2272.     need this functionality.
  2273.  
  2274.     INSTALLATION:  Modify your MR2.INI file to declare:
  2275.  
  2276.         Zipper=..\msg2rep
  2277.         Unzipper=..\unqwk
  2278.  
  2279.     the default .cmd files depend on all archivers being in your "path".
  2280.     If not, you may modify the path = '' statement at the top of each
  2281.     file to reflect the correct path, or modify each zipper command
  2282.     separately to reflect each's valid path.
  2283.  
  2284. o   INTERNAL: packet_exists() now returns TRUE+1 if a .msg file is found
  2285.     in the work directory.
  2286.  
  2287. o   INTERNAL: packet_exists() and remove_packet_exists now use the file
  2288.     name "control.dat" when checking (and removing) packet exist status.
  2289.     If you left a no-packet entry session with ALT-X, then tried to go back
  2290.     in later, MR/2 would not see the existing work (since no messages.dat
  2291.     file ever existed).  Control.dat will always exist if a "packet" is
  2292.     open.
  2293.  
  2294. o   The prompt "Work area has an open packet" has been enhanced.  You may
  2295.     still see this prompt.  However, if the work directory is found to
  2296.     contain replies, the prompt will read "Open packet with REPLIES found".
  2297.  
  2298. o   If an error occurs when unpacking the packet, you will now remain
  2299.     inside MR/2 to select a new packet, or whatever.
  2300.  
  2301. o   IF an error occurs while packing replies, the work directory is *not*
  2302.     purged.  Previously, any error while spawning the packer still let the
  2303.     files be deleted.  What happens now is, after the command error is
  2304.     reported, you're prompted that an open packet with replies exists.  The
  2305.     correct course of action is to go back in the packet (continue working
  2306.     with the open packet) fast exit with ALT-X and correct the zipper
  2307.     problem.
  2308.  
  2309. o   Cleaned up and tested UNQWK.CMD and MSG2REP.CMD.  Made sure error codes
  2310.     were properly returned to MR/2.  Seems to work well with the new error
  2311.     handling described above.
  2312.  
  2313. o   Added new variable @ISUBJECT@ that resolves to the Internet message
  2314.     subject line (often different than the QWK "subject" field).
  2315.     I hope there's a limit to the size of these things ... I only
  2316.     accomodate "realistic" lengths.  We'll see.
  2317.  
  2318. o   Ooops.  New template section logic didn't accomodate new messages
  2319.     created w/o replying.  The template file can now define a section for
  2320.     `NewMessage`.
  2321.  
  2322. o   There was a problem with clearing of search results if there was no
  2323.     local INI when a packet was closed.  Previously, hit counters for custom
  2324.     conferences would not represent the correct counts (counts would not
  2325.     be cleared for the next packet).  Now, all data is cleared (MR2.INI is
  2326.     always reloaded after a packet is closed).
  2327.  
  2328. o   The INI parameter SplitLongMessages has been enhanced.  YES/NO still
  2329.     function in the old way; YES will cause messages to be split at 92
  2330.     lines (90 lines of message, 2 lines for the <cont..d> footer).  You
  2331.     can now, however, place a number here as an option.  This sets
  2332.     splitting to YES, but modifies the line count cutoff to be the specified
  2333.     value (instead of 92).  This value *must* be greater than or equal
  2334.     to 10 (I've been told of a BBS system that requires no more than 16
  2335.     lines <really!>, so I figure 10 will be a "safe" minimum).  I would
  2336.     suggest using a reasonable number if you need to change the default
  2337.     at all.
  2338.  
  2339.  
  2340. Changes included in v1.42x
  2341. --------------------------
  2342.  
  2343. FOLKS!!!:  This is truely a beta ... please save your old working
  2344. MR/2 version before trying this release.  I changed alot of code, and while
  2345. eveything appears to be OK so far ... well, we all know better than to
  2346. get too relaxed, eh? :)
  2347.  
  2348.  
  2349. o   New INI parameters V0 through V9 allow you to set user-defined text
  2350.     strings as template variables.  Uses of the strings @V0@ through @V9@
  2351.     in the tenplate file will be replced with the corresponding defined
  2352.     text string.
  2353.  
  2354.     These variables can contain any other variables, including other "V"
  2355.     variables.  This allows for a template to be defined with an
  2356.     attribution line of @V0@, for example, and this line can be changed
  2357.     for each BBS by defining different values to V0 in the BBSs local
  2358.     INI file.  The variable replacement is recursive, so any number of
  2359.     replacemnet levels is possible.  It's also possible to confuse the
  2360.     system by circularly defining variables.  My rule:  keep it where
  2361.     it's understandable.
  2362.  
  2363.     For example, if you add a line to MR2.INI that says "V0=1:157/200"
  2364.     and your template file starts "...writing from Fidonet address @V0@",
  2365.     the fidonet node address will be placed in the reply.
  2366.  
  2367. o   New INI parameters "INTERNET" and "NETMAIL".  Use these variables to
  2368.     declare which conferences, if any, handle Internet mail and Fidonet
  2369.     netmail, respectively.  For example, PC-Ohio has Internet mail in
  2370.     conference 5 and Fidonet netmail in conference 6.  My PC-OHIO.INI
  2371.     file has:
  2372.  
  2373.     Internet=5
  2374.     Netmail=6
  2375.  
  2376.     Nerd' Nook has Netmail in conference in 139 and no Internet capabilities.
  2377.     My NerdNook.INI file has the lines:
  2378.  
  2379.     Internet=-1
  2380.     Netmail=139
  2381.  
  2382.     The "-1" tells MR/2 that there is no Internet support, and makes sure
  2383.     that the Internet section template is not referenced.
  2384.  
  2385. o   New variables @INTERNET@ and @FIDONET@.  The INTERNET variable will
  2386.     be replaced with the "Reply-to:" address found in Internet mail.  The
  2387.     target address will be stripped of extra verbage and should represent
  2388.     a correct and "ready-to-go" internet address.  The FIDONET variable
  2389.     will be replaced with the full Fidonet address found in the origin
  2390.     line of the current message.  If either one of these variable can
  2391.     not be resolved, then an empty string is substituted.
  2392.  
  2393.     These variables are meant to be used for personal mail addressing
  2394.     using template "sections".  See next blurb.
  2395.  
  2396. o   Sections in the template file `Internet` and `Netmail`.  You may now
  2397.     allocate "sections" within the template file.  Sections are denoted
  2398.     and named by a string between "accent" characters (`).  The first
  2399.     template file section has no name and will be refered to as the
  2400.     "default" section.  A section ends at the next section name string,
  2401.     or at the end of the file.
  2402.  
  2403.     When replying to messages targetted for a conference declared to
  2404.     be the INTERNET or NETMAIL conferences, MR/2 will switch template
  2405.     sections to the corresponding section.  If ever a section is not found
  2406.     (by name matching), the default section is used.
  2407.  
  2408.     This allows for Fidonet netmail and Internet mail to have templates
  2409.     that correctly set up destination addressing.  See the file Example.tf
  2410.     for examples of sections.
  2411.  
  2412. o   Mods to reply creation ... removed the beginning CR/LF when creating
  2413.     the reply file.  Made changes to the way the template file handled
  2414.     CR/LF spacing.  Template file's allignment matches reply files
  2415.     better now (line spacing/blank lines).
  2416.  
  2417. o   When replying and the FROM user name is an Internet made-up name with
  2418.     periods imbedded, MR/2 nulls-out the quoting initials.  The quoted text
  2419.     is simply marked with whatever symbol is defined in the INI, usually
  2420.     a ">" (no initials preceed the ">").
  2421.  
  2422. o   Oh boy.  I modified the Save Reply logic of my QWK class.  This is
  2423.     dangerous, simply because it changes the way replies are saved.  I'll
  2424.     test it thoroughly before letting it out.  *Please* report any problems
  2425.     to me quickly.
  2426.  
  2427.     The change comes when splitting messages (it may effect more, my hope
  2428.     is that it doesn't :).  IF you're in sending Internet mail or Netmail,
  2429.     the message "header" will be copied to each split section.  In most
  2430.     cases, this will be the correct function.  There may be cases where
  2431.     it isn't.  Yell at me and I'll make it configurable.  In other words,
  2432.     netmail or internet mail that's split will be addressed properly for
  2433.     all "parts" if addressing is done on the first line(s) of the message.
  2434.  
  2435. o   When replying into the Fidonet netmail conference, the source message
  2436.     is first checked to see if the first line starts "From:".  If so, and
  2437.     what follows appears to be a Fidonet node designation (it has a ":" and
  2438.     a "/"), then this is used as the value of the FIDONET variable.
  2439.     If not found, the origin line is found.  In netmail messages (the ones
  2440.     I receive at least), there is no origin line, just a "From:" identifier
  2441.     on the very first line of the message.
  2442.  
  2443.  
  2444. Changes included in v1.41x
  2445. --------------------------
  2446.  
  2447. o   Template file processor would lockup if the named template file did
  2448.     not exist.  Same ZTC bug where fopen() doesn't return NULL on error.
  2449.     Fixed with a call to my file_size() function.
  2450.  
  2451. o   Taglines now are filtered for variables (e.g., @FROM@).
  2452.  
  2453. o   Took template file checking one step further - if file name is
  2454.     empty, processing doesn't even start.
  2455.  
  2456. o   Distribution packets now contain a FILE_ID.DIZ file to help automate
  2457.     BBS description entry.
  2458.  
  2459. o   The initial MR2.INI file now specifies that the INTERNAL editor now
  2460.     be used as the default.  The initial INI editing is still performed
  2461.     inside the E editor.
  2462.  
  2463.  
  2464. Changes included in v1.40x
  2465. --------------------------
  2466.  
  2467. Not much feedback on the internal editor yet.  I used it for a while but
  2468. switched back to QEdit.  I need file import/export capabilities myself; I'll
  2469. be adding that to the internal editor soon.
  2470.  
  2471. o   Save file wildcarding logic fix.  First, if you entered a spec like
  2472.     "c:\tmp\*" and pressed ENTER, MR/2 would save the message to that file
  2473.     name, which is illegal.  No error would be reported.  Now, when ENTER
  2474.     is pressed and a wildcard is in the file name specified, MR/2 converts
  2475.     the ENTER into an F2 keypress and shows a file pick list.
  2476.  
  2477. o   If "C:\tmp\*" was provided as the save file pick list, and a file was
  2478.     selected from the list, the file name returned would be grunged.  The
  2479.     file name field would be filled with some mutation of the subject line
  2480.     from the message display.  This was due to the missing ".", which I
  2481.     assumed would always be there.  This has been corrected.
  2482.  
  2483. o   New INI parameter:  "TemplateFile".  This is another one of those
  2484.     features that is merely a starting place and has lots of future
  2485.     expansion possibilities.  Place a file name here that defines a
  2486.     template for all message replies.  The reply will created using this
  2487.     file as a guide BEFORE you edit it.  This allows for any necessary
  2488.     cleanup.  The "template" file I used for testing looked like this
  2489.     (note that the variables used will be documented below):
  2490.  
  2491.     -------------------------------------------------------------------
  2492.     Subject: @Subject@
  2493.     In a message dated @DATE@, @FROM@ said to @TO@:
  2494.  
  2495.  
  2496.     $BODY
  2497.  
  2498.  
  2499.     Nick Knight
  2500.  
  2501.     From @from@ reading @CONFNAME@ (@CONFNUM@) on @BBSID@, to @TO@
  2502.     Subject: @Subject@
  2503.  
  2504.     FidoNet:    1:157/2
  2505.     Internet:   nick.knight@pcohio.com
  2506.     Compuserve: 76066,1240
  2507.  
  2508.     To First:   @tofirst@
  2509.     To Last:    @tolast@
  2510.     YYMMDD:     @yymmdd@
  2511.     Date:       @date@
  2512.     From First: @fromfirst@
  2513.     From Last:  @FromLast@
  2514.     Msg Date:   @msgdate@
  2515.     Msg Time:   @msgtime@
  2516.     Day:        @Day@
  2517.     Julian:     @Julian@
  2518.     Time:       @Time@
  2519.     Time 24:    @Time24@
  2520.     AM/PM:      @AmPm@
  2521.  
  2522.     Upper:      @Upper@@Subject@ @upper@@day@
  2523.     Lower:      @lOWER@@Subject@ @lower@@day@
  2524.     Mixed:      @mix@@From@ -> @mix@@to@
  2525.     -------------------------------------------------------------------
  2526.  
  2527.     The quoted version of the original message is inserted at the $BODY
  2528.     marker, which is required.  NOTE that this is not an appropriate
  2529.     template file for use within internationally echoed conferences.
  2530.     It's offered here merely as an example.
  2531.  
  2532.     The section before the $BODY line allows for an "attribution"
  2533.     line or section.  The area below the $BODY marker works as a
  2534.     signoff or signature section.
  2535.  
  2536.     AGAIN, this feature is under development and may be changed in the
  2537.     next couple of versions.  My idea is to add more blocks to this file.
  2538.     For example, a definition for saved message headers, forwarded
  2539.     header definition, etc.,.  I've got plenty of ideas.
  2540.  
  2541.     The reply file generated by my test template file looked like:
  2542.     -----------------------------------------------------------------
  2543.  
  2544.     Subject: NEW ZOO
  2545.     In a message dated 03/06/93, DAN HANSON said to ALL:
  2546.  
  2547.     DH>I saw this in Time Magazine.  The New York Bronx Zoo has been
  2548.     DH>renamed to the International Wildlife Conservation Park.  In
  2549.  
  2550.     <My reply would be inserted here.>
  2551.  
  2552.     Nick Knight
  2553.  
  2554.     From DAN HANSON reading Main Board (0) on PC-OHIO, to ALL
  2555.     Subject: NEW ZOO
  2556.  
  2557.     FidoNet:    1:157/2
  2558.     Internet:   nick.knight@pcohio.com
  2559.     Compuserve: 76066,1240
  2560.  
  2561.     To First:   ALL
  2562.     To Last:    ALL
  2563.     YYMMDD:     930306
  2564.     Date:       03/06/93
  2565.     From First: DAN
  2566.     From Last:  HANSON
  2567.     Msg Date:   03-06-93
  2568.     Msg Time:   14:21
  2569.     Day:        Saturday
  2570.     Julian:     065
  2571.     Time:       03:08
  2572.     Time 24:    15:08
  2573.     AM/PM:      PM
  2574.  
  2575.     Upper:      NEW ZOO SATURDAY
  2576.     Lower:      new zoo saturday
  2577.     Mixed:      Dan Hanson -> All
  2578.     -----------------------------------------------------------------
  2579.  
  2580. o   Variables are available for use in the template file.  They are
  2581.     currently only used by the reply file generator.  I'll add the
  2582.     capability to other areas as I think of them.
  2583.  
  2584.     The following variables have been provided:
  2585.  
  2586.         BBSID                           TIME
  2587.         CONFNAME                        TIME24
  2588.         CONFNUM                         TO
  2589.         DATE                            TOFIRST
  2590.         DAY                             TOLAST
  2591.         FROM                            YYMMDD
  2592.         FROMFIRST                       UPPER
  2593.         FROMLAST                        LOWER
  2594.         MSGDATE                         MIX
  2595.         MSGTIME                         AMPM
  2596.         SUBJECT                         JULIAN
  2597.  
  2598.  
  2599.     The literals UPPER, LOWER and MIX are not actual variables, but
  2600.     modifiers.  They will convert the case of the NEXT variable
  2601.     replacement to either all upper, all lower or mixed case, respectively.
  2602.     Mixed case basically lower cases all letters except the first letter
  2603.     of each word.  See the example above for more detail.
  2604.  
  2605. o   GREATER CHICAGO Online BBS is now offering a service called the
  2606.     "OS/2 Shareware Author Support Program".  They are willing to handle
  2607.     Visa/Mastercard charges for shareware authors.  Starting immediately,
  2608.     MR/2 may be registered by "charging" it!  You can register online by
  2609.     calling Greater Chicago Online BBS at (708) 895-4042.  Alternatively,
  2610.     you can provide your charge card information to me directly on the
  2611.     MR/2 registration form provided (register.doc).  There is a $2.00
  2612.     handling fee associated with all charged registrations, making the
  2613.     total charged registration cost $22.00 US for domestic orders.
  2614.  
  2615.     Shareware authors may get more information on the OS/2 Shareware
  2616.     Author Support Program by calling the GREATER CHICAGO Online BBS at
  2617.     the number above (leave a note to the sysop) or by Compuserve mail
  2618.     at 70404,3277.  Fidonet netmail can be sent to Bill Cook at 1:115/895.
  2619.  
  2620.  
  2621. KNOWN BUGS AND STUFF
  2622. ====================
  2623.  
  2624. The TEMPORARY directory MUST remain a subdirectory of the MR2 home dir.
  2625.  
  2626. You can't use "\" or "&" as part of any search text (since MR/2 uses them
  2627. as delimiters).
  2628.  
  2629. You can't cancel a search until the first "hit" is displayed.  This is
  2630. particularly irritating when soundex searching, since soundexing is
  2631. noticably slower.
  2632.  
  2633. If you set "SkipReadMessages" to true, you cannot gain access to a
  2634. conferences where all messages have previously been read.
  2635.  
  2636. Other frills that have not yet been addressed:  Bulk marking,
  2637. twit filter, function key assigning. There are probably others.
  2638. Feel free to bombard me with requests.
  2639.  
  2640.  
  2641. ************************************************************************
  2642. NOTE:  READ.ME format has changed!  Go to the BEGINNING of the file for
  2643. the most recent changes!!!
  2644. ************************************************************************
  2645.  
  2646.