home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 3 Comm / 03-Comm.zip / mrp_099p.zip / READ.ME < prev    next >
Text File  |  1995-01-03  |  110KB  |  2,272 lines

  1. MR/2 PM - A QWK Compatible Mail Reader for OS/2 PM.  01/02/94
  2.  
  3. Copyright (c) 1992, 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.  Register MR/2 PM also registers you for
  12. MR/2 character mode, and visa versa.
  13.  
  14. Existing MR/2 registered users are automatically registered users
  15. of MR/2 PM.  The same MR2.ID file can be used by both versions.
  16. ------------------------------------------------------------------
  17.  
  18. CONTACTING THE AUTHOR - see the end of this file.
  19.  
  20. MR2.INI - your MR/2 PM parameter file
  21. -------------------------------------
  22.  
  23. This is where you tell MR/2 PM all it needs to know about your system
  24. and the way you'd like it to work.  If you don't have an MR2.INI file
  25. from MR/2 classic (character mode), or you've never modified one for
  26. MR/2 PM before,  MR/2 will attempt to place you into the E editor
  27. with a starter INI loaded.  Make any necessary changes and save the file.
  28.  
  29. NOTE:  Problems ... you'll have to edit MR2.INI, then exit out of MR/2 PM
  30. and reenter for any changes to take effect.  My "reload INI" code needs
  31. some looking at.
  32.  
  33. ** If it can't or doesn't load the editor to create the initial MR2.INI
  34. file, it's best that you do this by hand, from the command line:
  35.  
  36.     copy mr2ini.org mr2.ini
  37.     e mr2.ini
  38.  
  39. ***************************************************************************
  40. NOTE:  You may use an existing MR2.INI file, if you have one.  The only
  41. change that's really required is that your editor and zipper/unzipper
  42. file names be fully qualified.  Use a complete path and add the appropriate
  43. file extension (e,g, "d:\os2util\pkunzip.exe").  These changes *will* work
  44. with MR/2 classic, also.
  45. ****************************************************************************
  46.  
  47.  
  48. KNOWN BUGS AND STUFF
  49. ====================
  50.  
  51. THIS IS BETA, PRE-RELEASE SOFTWARE.  THE BUG LIST IS QUITE EXTENSIVE
  52. AND ALL KNOWN PROBLEMS ARE BEING ADDRESSED.  USE THIS PRODUCT AT YOUR
  53. OWN RISK - THE AUTHOR ASSUMES NO LIABILITY FOR LOST OR DAMAGED DATA.
  54.  
  55. I've got a big hit-list, and I'm anxious to start hitting.  I'd like to
  56. get as much feedback as possible while I'm in this process, though.
  57.  
  58. Feel free to report bugs or offer suggestions.  MR/2 PM is based on my
  59. seemingly solid QWK routines from MR/2 "classic", but the user
  60. interface is all new.
  61.  
  62.  
  63. Changes included in v0.99p
  64. --------------------------
  65.  
  66. o   Bug: Click on NOQWK, then select a BBS configuration.  Clicking on
  67.     OK crashed, double clicking on the BBS file worked ok.  Both work now.
  68.  
  69. o   Reworked, again, all the dialog box sizing and coordinate saving-to-INI
  70.     code.  You wouldn't believe the amount of old code that I yanked.
  71.     What I have now is a much simpler setup:  No "presizing" of dialog
  72.     resources, saving of window size ONLY when size is changes AFTER
  73.     it is visible ... etc.,.  This seems to have solved the growing and
  74.     shrinking window problems (which I finally saw happen for myself with
  75.     my NEW video card :).  Address book lookup dialog background fixed.
  76.     Index dialog box headings given more space.
  77.  
  78.     From the ongoing development of the QWK core (and extremelly
  79.     experimental code):
  80.  
  81. o   Searching once again enhanced!  Marc Bourassa came up with a great
  82.     idea that I had overlooked ... being able to actually include
  83.     conference selection criteria in a search string.  This allows for a
  84.     VC that "includes all message from conferences that contain OS2 in
  85.     their name, and add all mention of OS/2 in conferences that don't."
  86.     Basically, conference specifications can be used just like any other
  87.     keyword in a criteria string and can be AND'd or OR'd as desired.
  88.     For example (these need better examples ... next release :):
  89.  
  90.     String = {C}"*OS2*"
  91.  
  92.     String = {C}"*OS2*" | (!{C}"*OS2*" && OS/2)
  93.  
  94.     String = !{C}"*OS2*" && OS/2
  95.  
  96.     String = !{C}"*OS2*" && !{C}"OS-*" && OS/2
  97.  
  98.     String = {C}"17,254,890-898"
  99.  
  100.  
  101. Changes included in v0.99o
  102. --------------------------
  103.  
  104. o   Fixed a twice-reported crash when a packet is first opened.
  105.     Actually, it could have occurred anytime VC creation was in
  106.     progress.  Had to do with CHECK=BODY and MR/2 somehow calculating
  107.     the origin to be PAST the end of message.  I didn't find exactly WHY
  108.     this was happening, but I saw it happen and fixed it.  I always hate
  109.     when I can't find the root of the problem, tho :)
  110.  
  111. o   A report of the message index dialog going spastic caused me to take
  112.     a hard look at it.  While mine didn't flash as horribly as reported,
  113.     I did see way too much activity.  I calmed the resizing logic
  114.     down somewhat and I think it looks much nicer.
  115.  
  116. o   Finally found the right color combo for listbox background ...
  117.     something else that Warp somehow changed.  Fixed a couple, will
  118.     look harder for other off-colored boxes.
  119.  
  120.  
  121. Changes included in v0.99n
  122. --------------------------
  123. Quick fix AND I added an interesting new feature to the core.  Turns
  124. out the search engine changes added here took a total of 45 minutes
  125. to code (into both readers) and give it a decent testing!  Pretty
  126. neat stuff, tho!
  127.  
  128. o   BUG: found that with the new display logic, when a VC keyword
  129.     actually STARTED a line of the message, that line would disappear.
  130.     It would never be written to the screen.  Fixed.
  131.  
  132. o   Internal:  Repackaged the INI data and file loading routines into a
  133.     C++ class.  Previously these were just a growing collection of
  134.     public/global variables and some odd-ball routines.  I need the
  135.     ability to save a single packet's working "environment" as a unit
  136.     for MR/2 PM (to allow multiple working environments :), so this is
  137.     the ticket.  No functionality added, but due to the large amounts of
  138.     code and macro-ugliness I created, bug-potential is above average.
  139.  
  140. o   Further enhancements to the text-string search function.  Support
  141.     for selecting message-specific areas to check within a search
  142.     specification.  For example, you can now ask for all message that
  143.     have "OS/2" in the SUBJECT field, but not in the message itself.
  144.     You may tag any word, or set of words within matched parenthesis,
  145.     with a set of areas to test.  The default is to test all parts of
  146.     the message.  For example:
  147.  
  148.     {S}OS/2                 Matches "OS/2", only checking SUBJECT
  149.  
  150.     {F}"Jim Gilliland"      Finds ONLY message FROM Jim Gilliland
  151.  
  152.     {M}"Tim McClanahan" & !{FT}"Tim McClanahan"
  153.  
  154.                             Finds references to Tim McClanahan
  155.                             inside any message text, but excludes
  156.                             messages FROM or TO him.
  157.  
  158.     {S}(MR/2 | MR2 | MR-2)  Matches any of these three strings when
  159.                             they exist in the SUBJECT field.
  160.  
  161.     {Conclusion}            Probably won't find what you want :)
  162.  
  163.     "{Conclusion}"          Probably is what you want.  Finds any
  164.                             occurence of the word "Conclusion" that
  165.                             is enclosed between curly-brackets.
  166.  
  167.     Valid areas are From, To, Subject, Message, Body and Origin,
  168.     represented by the letters F, T, S, M, B and O, respectively.  The
  169.     Message section consists of the Body AND the Origin, which are
  170.     separated by the tearline (if MR/2 can find it :).  When in doubt,
  171.     MR/2 calls all of the message "Body".
  172.  
  173.     I think I'm done with the searching enhancements.  The only thing I
  174.     can think to add is selection of conferences to search for the
  175.     ALL-CONFERENCES real-time searching.  I rarely use this anymore, and
  176.     I think that this process belongs elsewhere.  Maybe later, but I'm
  177.     putting this on the super-duper low priority list.  I joked about
  178.     supporting proximity searches in the Fidonet OS/2 echo.  Really, I
  179.     *was* just joking! :)
  180.  
  181.  
  182. Changes included in v0.99m
  183. --------------------------
  184. This is mostly a bug fix for Warp-related problems.  Since it's been a
  185. while since my last update, many key features are automatically added
  186. just by linking with MR/2 classic's QWK engine.  Testing was minimal,
  187. save your old EXE if you are concerned.
  188.  
  189. I know that the listbox colors are off.  I know that the some screens
  190. flash twice, quickly.  Hey, the buttons are there.  Actually, I think
  191. I improved the performance even more than planned by streamlining
  192. several areas!
  193.  
  194. I am working on a massive rewrite of this, using Borland C++ and ObjectPM,
  195. an OS/2-specific toolkit.  I paused development of the "new" MR/2 PM to
  196. fix up the existing version a bit.  At least it's usable under Warp now.
  197. Let me know if you find otherwise :)  See "Update.ltr" for info ...
  198.  
  199. o   Update the distribution packet a tad.  MR2read.me (MR/2 Classic's
  200.     read.me file) has been made current.  MR2INI.ORG has been copied
  201.     from MR/2 classic, meaning it's complete and well organized as of
  202.     the v2.0 QWK engine release.
  203.  
  204. o   Modified much of the message display subsystem to support the new
  205.     Boolean search logic inherited from MR/2 classic.  See MR/2 CLASSIC
  206.     readme insert that follows this section.
  207.  
  208. o   Also added support for saving Virtual Conferences and MR/2-created
  209.     NDX files.  See MR/2 classic section below.
  210.  
  211. o   Fixed the obvious problems that became apparent with Warp.  Turns
  212.     out I was actually sometimes positioning things WAY out of bounds,
  213.     and older version of OS/2 must have zeroed these invalid values,
  214.     whereas Warp takes this more seriously.  I don't know.  I found the
  215.     positioning problem on my end, and it seems to have remedied the
  216.     whole thing.  I also cleaned up this code a tad and made it more
  217.     logical and streamline.
  218.  
  219. o   Again, relinked with the MR/2 QWK core and support modules, so bug
  220.     fixes and speed improvements *should* abound :)
  221.  
  222. o   Added support for the "*" key in the message viewer.  Starts the
  223.     editor with a *copy* of the message (unquoted) inserted.  This is to
  224.     allow cut/paste of specific message sections.
  225.  
  226. Some inportant notes from MR/2 classic that pertain here:
  227. ---------------------------------------------------------------------
  228.  
  229. o   When building of virtual conferences is complete, MR/2 now invoked
  230.     the command file "SaveVCs.CMD", if it exists in the MR/2 home
  231.     directory. The current version of this cmd file pkzip's ALL modified
  232.     NDX files back into the original packet.  This happens as a
  233.     BACKGROUND process, invoked using the "start /b /c" command.  This
  234.     has two benefits:
  235.  
  236.     Virtual conference NDX files are saved with the packet, so that VC's
  237.     are built only once per the life of the packet.  Any subsequent
  238.     opening of this packet will already have the VC structure intact and
  239.     available for instant reading.
  240.  
  241.     Packets without NDX file altogether will now have ALL MR/2-created
  242.     NDX files saved for subsequent opens.  For example, the QWK packets
  243.     produced by MR/2's MQWK packet merging utility do not include NDX
  244.     files.  Each time you would open a packet created with this utility,
  245.     MR/2 would build the NDX files from scratch.  This is now required
  246.     ONLY the very first time the packet is opened.
  247.  
  248.     NOTES:  If the command file processing fails, the only harm should be
  249.     that the NDX files are missing from the QWK packet.  That's no
  250.     different than what happened previously; MR/2 will just try again the
  251.     next time the packet is opened.
  252.  
  253.     If this new system is undesirable for any reason, simply remove (delete)
  254.     "SaveVCs.cmd" from the MR/2 directory.
  255.  
  256. o   I *think* I have a personal internet FTP site set up on my machine! :)
  257.     See "Contacting the author", above.
  258.  
  259. o   Previously, the bbsname.cfg file for a specific BBS was overwritten
  260.     with a packets control.dat file, regardless of the age of the
  261.     packet being opened.  If the packet was a year old, that BBS would
  262.     then have a year old CFG file saved for it.  MR/2 now copies only if
  263.     the "new" file has a newer date than the existing file.
  264.  
  265. o   Modified the Virtual Confenence builder's "Conferences" command to
  266.     accept both ranges and text wild card strings.  For example,
  267.     the following Conferences commands will now work:
  268.  
  269.         (NULL) or *             All conferences
  270.         1,2,3,4                 1 2 3 or 4
  271.         1-4                     1 through 4
  272.         1-4,100,200,1000-       1->4, 100, 200 or 1000 and greater
  273.         -1000                   through 1000
  274.         alt*,comp*              all named starting with alt or comp
  275.         !200,alt*,comp*         all named starting with alt or comp
  276.                                 EXCEPT 200
  277.  
  278.         !200-300,!17,alt*,comp* starting with alt or comp EXCEPT 200-300
  279.                                 and 17 EXCEPTIONS SHOULD COME FIRST as
  280.                                 first "match" terminates the check
  281.  
  282.         *.*                     any confernce with a dot in its name
  283.         17,254,alt.*,comp.*     all alt/comps and conferences 17 and 254
  284.         *-R, *-F                All conferences ending in -R or -F.  For
  285.                                 PC-Ohio, this would be all RIME or FIDONET
  286.                                 conferences, respectively.
  287.  
  288.     "Negatives" are available to exclude certain conferences by number or
  289.     name.  As the above states, negatives or excluded conferences should
  290.     be listed first, as the first criteria the conference fits in causes
  291.     the routine to cease checking.  For example:
  292.  
  293.         !100-150,1-1000
  294.  
  295.     will include conferences 1 through 99 and 151 through 1000.  Any
  296.     conference from 100 through 150 will fit the first catagory, which is
  297.     negated/excluded, so messages in these conferences will NOT be included.
  298.     However:
  299.  
  300.         1-1000,!100-150
  301.  
  302.     This will include all conferences 1 through 1000.  Since any message
  303.     in the range 100-150 will first qualify as a match for the first range,
  304.     the second range will never cause a message to be excluded.  The first
  305.     example is the correct way to exclude conferences.
  306.  
  307.     NOTE:  The support of ranges and wildcards has caused a slowdown in the
  308.     creation of VC's.  While "minimal", I plan to add some code to support
  309.     original-style Conferences commands using the old method.  The most
  310.     efficient commands will consist of singular numbers.  Next in up in
  311.     efficiency would be numeric ranges.  NOTE that, where large ranges are
  312.     concerned (more than 50 conferences?), this is more efficient than
  313.     individual listings.  Finally, wildcard and/or text-strings matches
  314.     are CPU-intensive, and will cause slower VC building.  Still, the
  315.     flexibility offered by wildcards and numeric ranges far outweigh
  316.     the "small" cost in performance.  The decision is left to you.
  317.  
  318.  
  319. o   Boolean match logic is now available for both virtual conferences
  320.     and real-time (F, ALT-F) searching.  The "old" method of or'ing
  321.     strings together is still supported, although I'm having some
  322.     problems with this.  Perhaps an INI variable later ...
  323.  
  324.     Keywords can be OR'd together, AND'd together and/or NOT'd.  In
  325.     addition, parenthesis can be used to control the evaluations of
  326.     the test.  There is also an operator that will match a word,
  327.     remaining sensitive to case.  I've also added support for quoted
  328.     strings so that spaces and the special boolean operator symbols
  329.     can still be searched for.  Some simple examples:
  330.  
  331.         (OS/2 | OS2) & !WARP    (OS/2 or OS2) and not warp
  332.         Windows & OS/2          Windows and OS/2
  333.         Windows | OS/2          Windows or OS/2
  334.         ^warp                   warp, but ONLY if all lower case letters
  335.  
  336.     The "operator" symbols follow the conventions used by C and C++ for
  337.     boolean operations:
  338.  
  339.         &   is the AND operator
  340.         |   is the OR operator
  341.         !   is the NOT operator
  342.         ()  cause the expression inside to be
  343.             evaluated as a single expression.
  344.  
  345.     and one other that I added:
  346.  
  347.         ^   causes a case-sensitive match to be performed.
  348.             The word that follows must be found with
  349.             matching capitalization to be concidered a
  350.             "match".
  351.  
  352.     The following will find all messages that contain one of two
  353.     different words referencing OS/2 that also mentions "bugs".
  354.     if the message doesn't match under this criteria, then it is
  355.     tested for the words "Windows" and "slow" in the same messages:
  356.  
  357.         ((OS/2 | OS2) & bugs) | (Windows & slow)
  358.  
  359.     The following is somewhat similar.  It will also find all messages
  360.     that contain one of two different words referencing OS/2 that also
  361.     mentions "bugs".  If the message is found to match, then it is
  362.     tested for the words "Windows" and "slow" in the same messages.
  363.     If these words are both found, however, the message is eliminated
  364.     (compliments of the "!" NOT operator):
  365.  
  366.         ((OS/2 | OS2) & bugs) & !(Windows & slow)
  367.  
  368.     When MR/2 displays a message that has bee "found", all words
  369.     contained in the match string will be highlighted.
  370.  
  371.     A few more examples:
  372.  
  373.         ObjectPM | "Object PM"      spaces are ignored unless witin quotes
  374.  
  375.         "R&D"                       operator characters must be in quotes
  376.                                     if part of a search string.
  377.  
  378.         R&D                         finds the single letters R and D,
  379.                                     anywhere in the message.  This *isn't*
  380.                                     what you want!
  381.  
  382.         "(ch | 0xFF)"               more special characters within quotes.
  383.                                     The operator characters will be treated
  384.                                     as any other characters.
  385.  
  386.         """Windows"""               Looks funny?  It will find the Windows
  387.                                     in message but only if between quote
  388.                                     marks.  Two quotes together are treated
  389.                                     as a single " mark, but they must still
  390.                                     be part of an entire quoted string.
  391.                                     Tricky?  Maybe.  Just know that ...
  392.  
  393.         ""Windows""                 WILL NOTE WORK, and that ...
  394.  
  395.         "can you say ""neighbor""?" will find the prase 'can you say
  396.                                     "neighbor"?'  The word neighbor mus be
  397.                                     within quotes to be concidered a match.
  398.  
  399.         "&Windoze"                  Soundex search for anything sounding
  400.                                     similar to "Windows".
  401.  
  402.         ^warp | phasers             Looks for the word "warp" in all lower
  403.                                     case ONLY, or the word "phasers"
  404.  
  405.         ^NT | ^Nick                 Looks for the capital letters "NT" or
  406.                                     the string "Nick" where only the N is
  407.                                     capitalized.
  408.  
  409.     MAXIMUM seach criteria length for VC's is 256 bytes (after the "="
  410.     marker).  All must be on a single line.  Nesting is supported
  411.     further than anyone will need it (limitted only by stack space).
  412.     Other ideas are in head ... let me know if you come up with any
  413.     handy and/or clever ideas :)
  414.  
  415. o   The old stuff.  I've got all of my old w1\w2\w3 strings working
  416.     as-is, but there were problems with embedded spaces that used to
  417.     be seen as significant parts of the string.  They aren't any more.
  418.     To get search strings that include spaces to work, simply wrap the
  419.     ENTIRE string inside quotes.  For example:
  420.  
  421.         String = "TekRam\DC-6\DC6\Promise\Caching IDE"
  422.  
  423.     These will probably be "unsupported" quickly, as they're part of the
  424.     reason that performance is down (checking for or's in two places now).
  425.  
  426. o   Add in a new INI parameter for myself - FolderOrder.  This has the
  427.     same parameters as MessageOrder, but allows a different sort to be
  428.     applied to the ReplyLog and Inbasket.  I found myself constantly
  429.     converting these folders to date/time sort, so I decided to add
  430.     an option to default the sort for just these folders.
  431.  
  432.     NOTE:  By default, FolderOrder = -1, which means that the
  433.     MessageOrder is used.  Sort orders will work the same for everyone
  434.     unless they specify this option specifically.
  435.  
  436. There is undoubtably more ... if you're *really* interested, read through
  437. MR2READ.ME, included here, which is the read me from MR/2 classic's
  438. QWK engine used in this release.
  439.  
  440.  
  441. Changes included in v0.99l
  442. --------------------------
  443.  
  444. o   ALIAS parameter keyword added to INI file processing.
  445.     New INI variable "ALIAS" allows you to set a user name for yourself
  446.     other than the one found in the BBS Control.dat file.  This alias
  447.     name will be placed in the FROM field of all your replies.  Best used
  448.     in a "local", BBS-specific INI file when accessing multiple BBS's.
  449.     For Example:  Alias=Billy-Bob will override the settings in Control.dat
  450.     (say for this example the BBS name was "William B Gooden").  Replies
  451.     would come from Billy-Bob.
  452.  
  453. o   Turns out that the @variable logic was not as recursive as I had
  454.     advertised.  For example, inserting a "phrase file" line that
  455.     contained yet another variable to replace did not work.  It does now :)
  456.  
  457. o   Fixed a crash when modifying replies (changing, killing ...).  If the
  458.     subject happenned to end in column 25 with a number BUT not be a
  459.     "split reply", MR/2 would crash looking for the "/" in "x/n".  For
  460.     example "OS/2 <...> 2.11" would cause this crash to occur.
  461.  
  462. o   Same compiler switch setting changes and "tweaks" as found in MR/2
  463.     classic v2.04.  Should be a little snappier.
  464.  
  465. o   Rime-routed messages that were long enough to be split missed the
  466.     auto-routing line placement logic on secondary parts.  I was looking
  467.     for too exact a match on "RIME".  Also, I keyed on "Postlink" within
  468.     the original message to tell if it was routed.  Editing the header on
  469.     pass two, the original message was no longer available.
  470.     Anyway, fixed :)
  471.  
  472. o   Added support for ME/2, a PM-based editor I've been playing with.
  473.     ME/2 is an MDI-based editor with toolbar, statusbar, multiple
  474.     file windows, speller, thesaurus, simple printing ... tons of
  475.     features.  I'm putting it out at the same time as this (ME2_099.zip).
  476.     If you use ME/2 as your editor, it is preloaded by MR/2 on startup.
  477.     MR/2 can control it using IPC tricks, so response is better than
  478.     you'd get with any normal PM editor.  Session switching back and
  479.     forth is handled automatically.  See the me2.doc file included with
  480.     the ME/2 distribution zip.
  481.  
  482. o   INI parameter added - "SourceFile".  If specified, a source message
  483.     that is being replied to will be quoted to this file, and the actual
  484.     reply file will contain no quoted text, just an empty template
  485.     read-to-complete.  This is used by ME/2 as an option, and may be
  486.     useful for other setups.
  487.  
  488.  
  489. Changes included in v0.99k
  490. --------------------------
  491.  
  492. o   Deleting a REP packet failed to actually delete the file.  Fixed.
  493.     Rename still doesn't work.
  494.  
  495. o   Address book logic added.
  496.  
  497. o   The ability to UNKILL a message now functions (press U).
  498.  
  499. o   The A key will steal an address from any message and allow you to add
  500.     it into the address book.  ALT-A is the correct key (as per MR/2
  501.     classic), but I forgot, so we'll use A until next release.  When that
  502.     no longer works, try ALT-A :)  Stealing will post a maintenance form
  503.     and allow you to assign a tag and tweak any data derived from the
  504.     message.
  505.  
  506. o   Address book now appears to be fully functional ... and pretty darn
  507.     solid to boot!  There is a "Lookup" button next to the TO field
  508.     on the Message Header Edit dailog box.  Press this to access the
  509.     address book (your MR/2 classic address book will work, of an example
  510.     will be provided here ... rename it to mr2.adr).
  511.  
  512.     From the address pick-list, full maintenance can be performed.
  513.     Address informat includes enough to route private mail via Internet,
  514.     Netmail or Rime, as well as posting to any public conference.
  515.  
  516.     The A key will steal an address from any message and allow you to add
  517.     it into the address book.  ALT-A is the correct key (as per MR/2
  518.     classic), but I forgot, so we'll use A until next release.  When that
  519.     no longer works, try ALT-A :)  Stealing will post a maintenance form
  520.     and allow you to assign a tag and tweak any data derived from the
  521.     message.
  522.  
  523.     I'll try to scarf in som eof MR/2 classic's doc's on this:
  524. ---------------------------------------------------------------------
  525. o   Added a "Local/Global" flag to the address book maintenance screen.
  526.     It's changeable ONLY when adding the entry ... I make no attempts to
  527.     remove the address from one book and add it into another.  maybe later.
  528.     "L" for Local puts it in your bbsname.ADR while "G" for Global puts
  529.     it in the main, global address book, MR2.ADR.
  530.  
  531. o   Address book maintenance.  Add new or modify existing records from
  532.     the address book selection screen.  ALT-A to add, highlight an entry
  533.     and press ALT-C to change.  ALT-D to delete (confirms w/a prompt).
  534.     Text file is rewritten each time, previous version is copied to
  535.     bbsname.old or mr2.old, depending on which book is being modified.
  536.  
  537. o   NOTE:  Address book tags are resolved in a first-found order.  The
  538.     local address book, if one exists, is checked first.  If not found
  539.     there, the global MR2.ADR is checked.  If duplicates exist, only
  540.     the first one found (searching the file(s) sequentially) is the one
  541.     that's used.  Pick list selections go through the same process ... so
  542.     picking the "other" one doesn't matter.
  543.  
  544. o   Address Book.  I've added the ability to record email addresses and
  545.     other pertainent information in a simple text file.  See
  546.     example.adr for a starter kit/example file.  My email addresses
  547.     are pre-recorded here in various forms :)
  548.  
  549.     To access an address-book entry, you use the first field of the
  550.     record as the identifier or "tag".  When filling out the message
  551.     header information, enter a "!" followed by an existing address
  552.     book tag, tab or enter out of this field and the address book data
  553.     will be accessed and automatically applied.  For example, to send
  554.     an internet message to me (assuming you have a private internet
  555.     mail conference defined), simply type "!NK-I" as the TO user and
  556.     press ENTER.  Oh, you must first copy the file example.adr to
  557.     mr2.adr.  MR/2 looks for a BBSname.adr (e.g., "NERDNOOK.adr")
  558.     first, then "MR2.Adr" second, both in the MR/2 base directory.
  559.  
  560.     The format is:
  561.  
  562.     Tag | Description | TO name | Conference | Private? | Section | Address
  563.  
  564.     where:
  565.  
  566.     Tag is a short identifier you'll use to reference the address,
  567.  
  568.     Description is a free-form field to help you remember who/what this
  569.     address is for.
  570.  
  571.     To name is the name to plug into the TO; header field.
  572.  
  573.     Conference is the conference in which to place the message.  NOTE that
  574.     this is usually a specific number, but "I" is allowed and will be
  575.     replaced with the conference number set as your "Internet" conference.
  576.     Also, "N" is allowed and represents the defined Netmail conference.
  577.  
  578.     Private is either "Y" or "N", representing the privacy flag.
  579.  
  580.     Section identifies the template section to use.  Sometime this may
  581.     obviously be unnecessary, but it does allow for user-defined "special"
  582.     sections to be created and used for specific address book entries.
  583.     "Internet", "Netmail" and "Rime" will probably be used most frequently.
  584.     NOTE that "New" is automatically prepended by MR/2 when entering "new"
  585.     messages.
  586.  
  587.     Address is the first-line address code.  If the template section uses
  588.     the @Internet@, @Fidonet@ or either of the @Rime*@ variables, the
  589.     contents of these variables will be set to this string.
  590.  
  591.     NOTES:  There is no error checking or identification by BBS name, other
  592.     than allowing for BBS-specific address books.  MR2.Adr, if it exists,
  593.     is always references, but after any bbs-specific file has been checked.
  594.  
  595.     Use of the "N" and "I" conference identifiers helps make some addresses
  596.     less BBS-specific.  For example, I can send Fidonet netmail from any of
  597.     three separate BBS's.  My MR2.adr can contain netmail addresses for
  598.     use on all BBS's, as long as my template file(s) have been set up
  599.     correctly and private mail conferences have been identifies in the
  600.     BBS-specific INI's.  This can get complex - but it also can be quite
  601.     powerful and handy.
  602. --------------------------------------------------------------------------
  603.  
  604.  
  605.  
  606. Changes included in v0.99j
  607. --------------------------
  608.  
  609. o   Finally was able to get back into MR/2 PM enhancements.  Modified
  610.     the packet selection screen to mirror MR/2 classic's new look.
  611.     New screen opens now by default.  Click on the "mode" button (">")
  612.     in the lower right corner to toggle between the old and new screens.
  613.     MR/2 remembers your last "mode" and uses that.
  614.  
  615. o   New screen shows Total messages, count and percent read, total
  616.     personal and replies originating from this packet.  Also lists
  617.     reply packets for opening as stand-alone packets.  Even the old
  618.     screen mode will list and process .REP packets individually.
  619.  
  620. o   Support code for recording above data in EA's.
  621.  
  622. o   More work on the new opening dialog box ... compacted top area,
  623.     extended packet list box to hold more entires.  REP packets now
  624.     open properly.  Current path displays with KB's free space.
  625.  
  626.  
  627.  
  628. Changes included in v0.99i
  629. --------------------------
  630. This is being released sooner than I would have liked.  The reason
  631. being a combination of my slowness and the uncovering of a few
  632. serious bugs in the v0.99h/hs releases.  Please, please, please
  633. keep your existing EXE around, and DO NOT DISTRIBUTE this release.
  634. I'll have something much better very soon.  Really.
  635.  
  636. This has tons of "half way" code.  It automatically is linked with
  637. my latest QWK core and all of the fixes/enhancements related to that
  638. are included.  Still, some of the "classic" versions 2.0 features
  639. need support code in the base program to be fully functional.  Most
  640. of this is not yet in place.
  641.  
  642. I did use this EXE for several sessions and it did seem to work just
  643. fine.  I did not attempt to excersise all features, tho.
  644.  
  645. If there can be such a thing <g>, I'm calling this a pre-release beta
  646. copy.
  647.  
  648. o   Relinked with all of MR/2 classic's core features (v1.96x).
  649.  
  650. o   AutoUnpackReplies INI parameter is functional.
  651.  
  652. o   Reply logging is working less "full" source capability.
  653.  
  654. o   Bug:  Selecting a conference from the Reply Header screen failed
  655.     to work.  If you picked a conference from the master conference
  656.     list, it would be ignored.  My logic to remove the limit on the
  657.     max number of entries worked OK, but the selection logic failed to
  658.     take into account the new conference name storage technique.  Fixed.
  659.  
  660. o   I resize the message viewer buttons back to their "original" size
  661.     for now.  The smaller buttons don't do much good unless I add more
  662.     buttons/functions.  I've got some ideas along those lines ...
  663.  
  664.  
  665. Changes included in v0.99hs (Special/patch)
  666. -------------------------------------------
  667.  
  668. o   If a QWK packet contained no .NDX files, MR/2 PM would fail to build
  669.     them.  This has been corrected.  The check for NDX files was changed
  670.     to the new log-overhead WCFiles_Exist() call.
  671.  
  672.  
  673. Changes included in v0.99h
  674. --------------------------
  675.  
  676. o   Ooops!  You can now access the inbasket when entering messages without
  677.     specifying an existing packet BUT ...  when you reply, MR/2 PM would
  678.     think you were *still* entering new messages.  Fixed.
  679.  
  680. o   Modified the message viewer so that the results of searching are
  681.     now hilighted, as MR/2 classic does.  This was quite a learning
  682.     experience (as far as PM coding goes :).  By default, if no hilite
  683.     color has been specified, text is marked in "reverse video" relative
  684.     to normal text on the same line.  If a hilite color is specified, that
  685.     color is used.
  686.  
  687. o   I've added a forth possible PMCOLOR INI argument.  A forth number
  688.     may now be specified to identify the search-text hilight color.  I
  689.     like 2 (RED) myself.  See the INI file notes for other possibilities.
  690.     Mine reads "PMColors=6,-2,-1,2" which gives me a black background,
  691.     white normal text, yellow quoted text and red hilighted text.
  692.  
  693.  
  694. Changes included in v0.99g
  695. --------------------------
  696.  
  697. o   Found some text-mode user interface code that was being linked in
  698.     and never used.  MR/2 classic's EVENT class was being linked in,
  699.     as well as some VIO wrapper calls.  I discovered this while trying
  700.     to see why two MR/2 sessions could not coexist.  Turns out the
  701.     EVENT class closes a public semaphore that it can't if another MR/2
  702.     is open.  MR/2 PM doesn't need or use this class.  Dummy modules
  703.     have now been created to resolve any externals.  Code is smaller and
  704.     alot of unnecessary semaphore calls have been removed.
  705.  
  706. o   Internal Editor:  F10 now is denoted on the File menu as being an
  707.     accelerator key for SAVE/EXIT.  I also added Ctrl+S to force a SAVE.
  708.     CTRL+F and CTRL+R only worked if capital F/R were pressed.  This has
  709.     been corrected.
  710.  
  711. o   Found an example of a "huge" listbox.  Pretty simple.  I converted the
  712.     Master conference list from the header editing dialog box to use
  713.     this technique.  This listbox can now (theoretically) hold 32700+
  714.     conference names.  Much better that the 1500 or so that max'd the
  715.     thing out previously.
  716.  
  717. o   ExitAtEndOfParameters INI parameter is now functional.  It now
  718.     works, where as before, any time a specific packet was passed on the
  719.     command line (or opened via association) MR/2 PM would exit
  720.     afterwards.  Now the option to bring up the packet selection menu
  721.     exists by setting this value to NO.  MR/2 PM will still only process
  722.     the first packet-name parameter passed to it.  All subsequent packet
  723.     names are ignored.
  724.  
  725. o   Noticed a rather large problem.  While message reading dialog was made
  726.     resizable, the "paging" logic used a static line count of 17 lines per
  727.     screen.  The number of displayed lines now varies.  Since the scroll
  728.     bar manipulation (with the mouse) seemed to know what it was doing,
  729.     I converted all of my paging and seek-to-line functions to send
  730.     messages to the scrollbar.  Works great now!
  731.  
  732. o   In fixing the above, I used PMSPY to view the message traffic.
  733.     I noticed several unnecessary calls being made, and sure enough,
  734.     they originated from my code!  Seems I was asking for two listbox
  735.     counts for ANY message sent to the message dialog box, whether
  736.     these values were needed or not.  This doesn't happen any more; now
  737.     I query for these values only when they're needed.  While it's hard
  738.     for me to see a difference, this has to have sped up the message
  739.     viewer code.  Much less message traffic, anyway.
  740.  
  741. o   Entering messages with no packets:  If you would cancel from the
  742.     very first message, I would assume you wanted to do nothing and
  743.     return to the packet selection screen.  This made it impossible to
  744.     get to your inbasket messages w/o openning up a full packet.  You
  745.     couldn't view existing replies, either.  This behaviour has been
  746.     modified; CANCELing the first "new write" simply places you at the
  747.     conference select menu where you can read deferred messages or
  748.     replies (if any) and/or press the WRITE button for new messages.
  749.  
  750.  
  751. Inherited from MR/2 classic QWK core:
  752.  
  753. o   Changed the internal QWK initialization routine that matches NDX
  754.     files to master conference names.  Previously, the master conference
  755.     was sequentially searched until the number associated with the index
  756.     file (e.g., 1695 for "1695.NDX") was matched.  On a 3000 conference
  757.     BBS, this resulted in an average of 1500 checks before a match.  If
  758.     you had mail from 100 conferences ... yikes!  It took awhile,
  759.     although, in reality, it was only a matter of seconds.  The new
  760.     logic searches the master list once and a compressed easy/quick to
  761.     search array of conference numbers is searched to see if the master
  762.     name is needed.  If found, it is processed.  This makes things just a
  763.     tad more snappier.
  764.  
  765. o   Mods made to logic that builds "Conferences w/Mail" list caused the
  766.     sort order to be alphabetical.  While this may be desirable to some,
  767.     I've become acustom to and still prefer the default "numerical" order
  768.     by conference number.  I'm the only one that saw this happen, but it
  769.     sure confused me.  I reworked the code a little more and got the "old"
  770.     sort order back.  I also managed to make it even more efficient in
  771.     the process :).
  772.  
  773. o   Internet private mail (replying).  While replying to various Usenet
  774.     messages via private Internet mail, I noticed MR/2 was leaving alot of
  775.     To: addresses blank (@INTERNET@ values not found, replaced with blanks).
  776.     The address was usually easy to find, on the first line identified
  777.     by the PC-Board "@From:" command.  MR/2 now extracts valid addresses
  778.     from these lines and can reply properly.
  779.  
  780.     NOTE:  I've heard from some users that their internet mail was
  781.     getting bounced because, when copied from the message header FROM
  782.     field, the address was in all upper case.  My upper-case addresses
  783.     seem to work, but there are several different qwk->internet systems
  784.     in use.  To be safe, I've modified the default template file to
  785.     convert internet addressed to lower case.  If you're using a
  786.     template file, and you'd like to do the same, simply find @INTERNET@
  787.     variable and change it to @LOWER@@INTERNET@.
  788.  
  789. o   Conference names containing hi-end ASCII characters were getting
  790.     truncated.  Switched to using unsigned characters and the problem is
  791.     now gone!
  792.  
  793. o   INTERNAL:  Small patch to GetMessageLine().  If pMessage is NULL,
  794.     this function instantly returns -1.  No packet entry into private mail
  795.     conferences crashed inside this function when templates were being
  796.     processed.
  797.  
  798. o   I had introduced a few bugs with no-packet entry.  There were various
  799.     cases where internal information was not correctly set and crashes
  800.     would occur.  Things seem to work much smoother now.
  801.  
  802. o   I received an Internet message just today about deferred messages and
  803.     how zeros seem to be mysteriously appearing.  I checked my inbasket
  804.     (remembering that I'd seen this happen before) and did some
  805.     experimenting.  Sure enough, one character of every message was
  806.     being changed; the most frequent occurence was a ' ' being changed to
  807.     a '0'.  I was marking the 'archived' bit (my personal invention) of
  808.     the message header, only I was changing the 127th byte of the actual
  809.     message, instead.  The archive bit is bit 16, which will change a ' '
  810.     to a '0', an 'a' to a 'q' and so on.  I now have moved this mark back
  811.     into the message header, where it belongs.  The "archived" indicator
  812.     that's supposed to be showing for folder messages will probably work
  813.     now, too.
  814.  
  815.  
  816. Changes included in v0.99f
  817. --------------------------
  818.  
  819. o   Changed the sizing of the message index dialog box and the conference
  820.     select box just a tad.  Reports of the box size "creeping" on
  821.     higher resolution monitors.  Can't really test this, so please let
  822.     me know.
  823.  
  824. o   Conversion of the master conference linked list to my new, experimental
  825.     "quick heap" routines.  I'm maintaining a separate heap for memory
  826.     needed for this linked list.  The list is freed in huge chunks instead
  827.     of 2 parts per conference name (i.e., PC-Ohio's 3000 conferences caused
  828.     the old heap to have to free 6000 linked entries, maintaining the
  829.     "available block" information as each one is released).  This *should*
  830.     speed up the exiting of packets.  Deleting the files is still a
  831.     source for delay ... perhaps I can multithread this and overlap things
  832.     a bit.
  833.  
  834. o   Modified MR2UTIL.CPP - RemoveWorkFiles() routine.  You wouldn't
  835.     believe the amount of code I was executing to delete a packet's
  836.     files!  I was actually building a sorted linked list of file names
  837.     with details (sizes, dates, etc.,.), then immediately deleting each
  838.     file found in this list.  Now, this routine merely finds the "next"
  839.     file and removes it.  Results in a noticable speed up when exiting a
  840.     packet.  Between the above quick-heap mod, and this one, I think I've
  841.     licked this problem.  These changes are to the core QWK engine, so
  842.     they'll help both MR/2 and the PM version.
  843.  
  844. o   I've made all internal linked lists use the new QHEAP.  Should result
  845.     in improved "snappiness".  Also has big-bug potential.  I'll test
  846.     thoroughly before releasing.
  847.  
  848. o   Made some new routines for general use.  Includes a low-overhead
  849.     delete-by-wildcard routine and an "at least one file matching
  850.     this wildcard exists" function.  Minor performance improvements
  851.     should result, as the code scattered about in several places used
  852.     previously had high overhead.
  853.  
  854. o   I made the Print Screen key function as the message-hardcopy key;
  855.     just like pressing "P".  I got used to this using Golden Compass
  856.     and liked the idea.  Pressing Print Screen will send a formatted
  857.     copy of the current message to the printer.
  858.  
  859. o   Rewrote the bintree() class to use QHEAP.  Master conference
  860.     sorting should be faster for large conferences.  At least a tad ...
  861.  
  862. o   Ooops. I broke the template logic for replies in 0.99E.  Fixed it.
  863.     This is a good enough reason to put this version out-and-about.
  864.  
  865.  
  866. Changes included in v0.99e
  867. --------------------------
  868.  
  869. o   Added the MINIMIZE button back to the message viewing screen.
  870.     I'm not sure why it got yanked; by accident I think.  Someone
  871.     complained, so I'm putting it back.  Maximizing messes up message
  872.     viewer.  Yuck!  This isn't really usable yet ... well, maybe.  If
  873.     you resize the message box even 1 dot vertically things repaint OK.
  874.  
  875. o   Problems with No Packet Entry crashing on first message resolved.
  876.     Part of the processing thought you were replying and attempted
  877.     to search the original for an origin line.  FIxed.  Also, template
  878.     always was set to the "default" template.  Now should default to
  879.     `NewMessage` section.
  880.  
  881. o   Jumping to previous reading position is now functional.  If
  882.     GoToLastRead is set to YES, MR/2 PM will jump to the message
  883.     that was last on the screen the previous time the current packet was
  884.     open (if the message can be found w/o error).  If not set to YES, you
  885.     will be prompted for the correct action to take,
  886.  
  887. o   Tagline selection dialog: this is now sizable.  All pre-size code
  888.     and real-time sizing code has been applied.
  889.  
  890. o   Message Index selection dialog: this is now sizable.  All pre-size
  891.     code and real-time sizing code has been applied.
  892.  
  893. o   Quick Thread Summary dialog: code added to pre-set the size before
  894.     display.  This removed the annoying and time-consuming "flash" when
  895.     "Q" is pressed, or the "Subject Index" button is clicked.
  896.  
  897. o   Bug when using associations to launch MR/2 PM and open a QWK packet.
  898.     If replies existed, the dialog to warn/prompt-to-keep existing
  899.     replies would fail and return a default of "NO".  In other words,
  900.     MR/2 PM would see the replies but wouldn't tell you about them, or
  901.     ask you what to do.  It just deleted (er, renamed) them.  Fixed.
  902.  
  903.  
  904. Changes included in v0.99d
  905. --------------------------
  906.  
  907. NOTES: This is the first release in quite awhile.  Summer ended up
  908. being busy, where I expected it to be quiet and coding-productive.
  909. Anyway, I'm posting this with some extensive internal changes.  PLEASE,
  910. if you're using an existing version, save your old EXE just in case you
  911. don't like something I've done.  THEN, tell me about what you don't like.
  912.  
  913. I left some dialog box resizing logic unfinished (still).  While this
  914. code for this is working "ok", I still just don't like it.  I *may* end
  915. up doing something similar to BMR (the Netware utility I co-authored),
  916. where multiple dialog boxes are available, and the whole screen repaints
  917. when a new dialog box interface is selected.  For MR/2, I'd simply let
  918. you resize, but remove, then repaint, the entire dialog to the new
  919. size.  This would be one-time-ugly (the initial resize flash) but then
  920. would work cleanly after that.  The resizing on-the-fly causes some
  921. pretty ugly screens sometimes.  This new idea causes some interesting
  922. coding problems - since I have to close the dialog box and reopen it,
  923. I have to save context-sensitive things like message read/search position,
  924. etc.,.  My problems, not yours :)
  925.  
  926. Originally, I was thinking of coding a big font/color control screen.
  927. I think I like drag-n-drop of fonts and colors instead.  I have to
  928. come up with a scheme for saving/restoring this information, but it
  929. looks relatively simple (I *hate* those two words, they never seem to
  930. be true :)
  931.  
  932. Changes:
  933.  
  934. o   Actually, these were in 0.99c:  Index Message box had trouble
  935.     remembering its last position (and size).  Fixed.  Now to make it
  936.     actually resizable :)  Also, from fixes made in MR/2 classic v1.53,
  937.     some "ghost" files often remained inside tmp$$ after a packet was
  938.     closed.  Fixed.
  939.  
  940. o   Message box display work - painting of "next" message should be
  941.     much faster.  (NOTE: comparing it to 0.99c it *is* much faster :).
  942.     I still want to totally do away with the use of a listbox for the
  943.     message text.  My chance will come ...
  944.  
  945. o   Background color of the message viewing window is now set as the
  946.     "default" when the window is painted.  All this does is prevents
  947.     the listbox color flash between messages.  It also removes the
  948.     yellow color band that sometimes appeared at the bottom of short
  949.     messages.
  950.  
  951. o   Internal Editor:  F10 key now saves and exits, just as MR/2 classic's
  952.     editor does.  I got really used to hitting F10-F10 to finish a reply
  953.     in text mode.  Now I can do the same in PM.
  954.  
  955. o   Removed another message reading screen "flash" - the one right after
  956.     a conference is selected.  This speeds things up another "tad", too.
  957.  
  958.  
  959. Inherited from MR/2 classic:
  960. ----------------------------
  961.  
  962. o   Inbasket packing often left killed replies visable and available across
  963.     packets.  Fixed - killed messages will once again disappear the next
  964.     time the packet (and related inbasket) is closed.
  965.  
  966. o   I added a new function on the message reading screen triggered by
  967.     pressing the C key.  This is the "Copy" function.  It simply places
  968.     a copy of the current message in the reply conference, changes the
  969.     FROM user to your name and places the EDIT HEADER screen up.  Right
  970.     now you can copy any message to someone else and make it "from you";
  971.     not just your own replies.  This may change.  Copy loops for multiple
  972.     copies until your ESCAPE from the "next" message header edit.
  973.     I also plan to add a manner to copy to predefined distribution lists.
  974.  
  975. o   Forwarding messages:  If a `Forward` template section and accessed
  976.     message header information, this information would be copied from the
  977.     header AFTER the header editing process.  That meant that if you
  978.     changed the conference or subject, the changed data would be used.
  979.     This has been corrected to show correct original data.
  980.  
  981. o   When creating some types of new message where MR/2 defaulted the TO
  982.     user to blank, the cursor would be one character over.  This was a
  983.     bug in the internal EditHdr trim function.  Fixed.
  984.  
  985. o   Messages.Dat and mr2bm.bin would never get deleted from the tmp$$
  986.     directory when a packet was closed.  Just a minor flaw, but this did
  987.     waste some disk space when MR/2 was not in use.  Fixed.
  988.  
  989. o   When MR/2 builds it's own NDX files, it now opens the target index in
  990.     APPEND mode.  No biggy, except in playing around qith QWK merge logic,
  991.     I found that my QWK engine assumes all conference's message are
  992.     together.  This may or may not be true for most mail doors, but I
  993.     should be able to handle non-contiguous conference messages with out
  994.     breaking anything.
  995.  
  996. o   ALT-N to enter new messages w/o an existing packet failed to read and
  997.     configure based on the selected BBS's "local" INI.  The local INI is
  998.     now added to MR/2's configuration parameters when one for the selected
  999.     BBS is found.
  1000.  
  1001. o   New INI parameter "RemoveReplyBookmarks".  This is NO by default, but
  1002.     may be set to YES if it is found that MR/2's bookmarks are interfering
  1003.     with a networks routing or origin lines.  There was a problem on
  1004.     ILink where someone's origin lines were not appended about 50% of the
  1005.     time.  It was blamed on my use of the last byte of the message header
  1006.     as a bookmark flag.  Setting this INI option to YES will cause MR/2
  1007.     to replace any bookmak character at this position with a space (0x20).
  1008.     You lose any bookmark information stored in this byte with this option,
  1009.     but the bookmark flags saved with replies is minimal anyway.
  1010.  
  1011. o   Reply splitting:  instead of "(Cont'd)" being attached to the subject
  1012.     of a split message, MR/2 now numbers each part and gives a total count.
  1013.     The counters are placed at the far right of the subject space, so
  1014.     subjects like "MR/2                  1/2".  This preserves as much of
  1015.     the original subject as possible.  This also will assist in MR/2's
  1016.     sorting of multiple part messages (when sorting by thread).
  1017.  
  1018. o   When a single piece of a split message is later modified, the last
  1019.     line of that part would often be removed before entering the editor.
  1020.     This has been corrected, although more changes to come might
  1021.     render this fix useless ...
  1022.  
  1023. o   Added the capability to split messages at a user defined point.
  1024.     Used SLMR's ".pg" marker technique.  Start a line with ".pg" and
  1025.     MR/2 will force a split at this position.
  1026.  
  1027. o   Made Fast Exit from the message viewer *really* fast!  Instead of
  1028.     filtering back through all those nasty C++ destructers, I simply call
  1029.     DOSExit after some simple cleanup.  Seems to work nicely even on
  1030.     packets with a large number of conferences (~3000).  I'll spend some
  1031.     watching for bugs ... I think I can multithread my freeing of many
  1032.     internal structures and linked lists too.  (This is what takes MR/2
  1033.     so long when closing a large packet w/lotsa conferences - all the
  1034.     freeing of memory.  ZTC doesn't handle this very quickly ... I'll
  1035.     try to help them some :).
  1036.  
  1037.     PM VERSION NOTE: changes were quite different, but I achieved the
  1038.     same effect by exiting MR/2 PM w/o deallocating packet memory (fast
  1039.     exit only).  Works fine on my systems and *is* much faster.
  1040.  
  1041. o   If you specified a static, hard-coded tagline, then hit F2 to "pick"
  1042.     a new tagline, MR/2 would crash.  Now it puts up a nicer "empty list"
  1043.     message, although it still doesn't let you pick a new one :).
  1044.  
  1045.  
  1046. Changes included in v0.99c
  1047. --------------------------
  1048.  
  1049. o   The Reply Header edit form, when selecting an alternate conference.
  1050.     The listbox could only hold a fixed number of conference (1500?).
  1051.     If there were more, you couldn't see them.  Instead of *really* trying
  1052.     to solve the problem :), I added a "match" field on this form.  This
  1053.     field accepts wildcard characters, like *os2* or pr*.  It does ranges
  1054.     too, I'll have to doc these ... something like [A-L]* lists A
  1055.     through L ... Unix-style wildcard matching!
  1056.  
  1057.     Entering just a single character, say "P", works the same as entering
  1058.     "P*".  I may make all non-wildcard specs "prefix" matches like this.
  1059.  
  1060. o   Half tones on completely read threads.  This should probably be optional.
  1061.  
  1062. o   Save to file:  All sorts of keyboard wierdness.  Keys being processed
  1063.     by the message window underneath.  Fixed.
  1064.  
  1065. o   Message Dialog.  There was still a screen flash - pre-sizing the
  1066.     dialog box needed some tweaking, and I had to supress the second
  1067.     painting of the screen when initializing.
  1068.  
  1069. o   ALT-A, ALT-D now functional when a conference name is highlighted.  This
  1070.     works from the Conferences w/Message selection screen, as well as on
  1071.     the Conference selection screen attached to the Reply Header Editing
  1072.     screen.  Easiest way to ADD conferences is to "Write new", then ALT-C
  1073.     for the conference list.  Highlight and ALT-A to your hearts content.
  1074.  
  1075. o   Lots of playing around with parent/owner windows to remove strange
  1076.     occurences and to aid in new CenterSubWindow() call.
  1077.  
  1078. o   I've got code in place to insure that certain message dialogs remain
  1079.     centered inside the "main" window.
  1080.  
  1081. o   INTERNAL:  Main dialog proc became too large for ZTC to handle!  I
  1082.     split out the whole WM_CHAR processing section into a separate
  1083.     routine.
  1084.  
  1085. o   I think I've finally trapped all the strange keystroke processing
  1086.     that resulted from having dialog boxes pop up on top of the message
  1087.     dialog box.  This should end the strangeness with Save, Find, Steal
  1088.     Tag, etc.,.
  1089.  
  1090. o   More mouse pointer to "wait" pointers when needed.
  1091.  
  1092. o   Deferring a message now updates the message status with a 'D'.
  1093.     Previously, message was deferred but the display was not updated.
  1094.     Same thing with (P)rinting a message ... dialog now updates with a
  1095.     "S" status ("Saved" - MR/2 classic has always reported printed messages
  1096.     as being saved ...).
  1097.  
  1098. o   ALT-F is now available from the conference selection dialog to
  1099.     search ALL conferences for text.  Just like MR/2 classic.
  1100.  
  1101. o   There was a problem after closing any packet where MR/2 PM would
  1102.     lose track of the correct QWK Packet Path.  This occured (I think)
  1103.     only if your Packet Path and MR/2 PM home directory where on the
  1104.     same disk drive.  When you close a packet, you are now correctly
  1105.     returned to your previous packet directory.
  1106.  
  1107. o   I added a tiny button on the message viewer screen.  I'm not sure
  1108.     where this will end up and/or what it will be labeled, but right now
  1109.     it's the "option" button.  The only option at this time is to
  1110.     toggle between MONO and PS fonts for message viewing.  The font
  1111.     mode switch is persistant across all future sessions until changed
  1112.     again.  This button will probable bring up a much more comprehensive
  1113.     set of options later :)
  1114.  
  1115. o   Open Packet reworked.  Changes to the way focus is initialized, order
  1116.     of the entry fields / listbox to be more natural.  Bug where selecting
  1117.     certain directory names switched drives.
  1118.  
  1119. o   Save Message:  ditto.  Also, save path changes are remembered and
  1120.     used across all packets read in that session (reset when you exit out
  1121.     and reenter).
  1122.  
  1123. o   Internal Editor:  The state of the font (Mono or PS) and the Word Wrap
  1124.     setting are now saved and restored between sessions.
  1125.  
  1126.     Fixes inherited recently from MR/2 classic:
  1127.     -------------------------------------------
  1128.  
  1129. o   ADD/DROP conference would not work if a DOOR.ID file was not present in
  1130.     the packet.  I now default to QMAIL format in these cases, and create
  1131.     QMAIL-style add/drop messages.
  1132.  
  1133. o   When you would modify a reply and change the header data, the index
  1134.     list would not reflect these changes.  The "I"/Insert index list will
  1135.     now accurately match reply header data.
  1136.  
  1137. o   Ooops.  "InBasket" Folder was not being packed.  In other words,
  1138.     messages that were deferred, then later killed/deleted would still
  1139.     be physically contained in the InBasket.Dat file.  They were marked
  1140.     as inactive, so they couldn't be read.  Code to pack this file
  1141.     has been reinstituted.
  1142.  
  1143. o   Double oops :)  FolderPath was never sufficiently documented as a
  1144.     valid MR2.INI parameter.  It was metioned in the read.me file, but
  1145.     was never entered into the MR2INI.ORG file.  It's there now, and ...
  1146.  
  1147. o   It never really worked, anyway.  It "kinda" worked, as it did
  1148.     everything correctly except allow you to actually read deferred message
  1149.     from anywhere except off of the MR2 home directory.
  1150.  
  1151. o   Modified the origin line find logic.  Original code, for some stupid
  1152.     reason, started at the beginning of a message and search forward.  I
  1153.     now start at the end and work backwards.  This will help prevent
  1154.     erroneous detection of the origin when user-entered dashed lines are
  1155.     entered as section separaters.
  1156.  
  1157.     In addition, I revamped the whole routine.  It seems to do a much
  1158.     better job of finding the start of the origin section.
  1159.  
  1160. o   There was a problem on some systems with the personal conference not
  1161.     showing in the selection list.  This was when working on an HPFS
  1162.     drive, and the personal.ndx file was unpacked with a lower case file
  1163.     name.  When MR/2 scanned conferences, it always matched on capital
  1164.     letters for the personal index.  This was never a problem BEFORE
  1165.     long name support, as the names always came back capitalized.  Now,
  1166.     they come back as they are on disk.  I've fixed this problem and
  1167.     scanned for other possibilities.  I think that was it ... time will
  1168.     tell!   NOTE: The report I received that finally solved this one
  1169.     specifically mentioned a 32-bit UNZIP.EXE.  He mentioned that all
  1170.     worked OK with the -U switch added to the command line.  Just FYI.
  1171.  
  1172. o   Message Header Edit screen now allows you to enter conference numbers
  1173.     that are not present within the control.dat master conference list.
  1174.     Maximus QWK doors and PC Board's built-in QWK feature do not supply
  1175.     complete conference lists.  Some QWK doors also make this optional to
  1176.     reduce packet size.  Previously, you could not post into a conference
  1177.     that was not defined in the contorl.dat file.  Now, you may manually
  1178.     enter ANY number.  If MR/2 cannot find it in the master list, it will
  1179.     beep and clearly identify the conference number as a possible problem
  1180.     with the tag: "** WARNING: Unknown Conference **".  It's the user's
  1181.     resposibility to make sure a message is posted to the correct
  1182.     conference number.  Maybe I'll add a user-definable master list later.
  1183.  
  1184.  
  1185.  
  1186. Changes included in v0.99b
  1187. --------------------------
  1188.  
  1189. o   MR2PM.INI, the file that holds window position data now contains a
  1190.     version number embedded within.  Any old file found (w/o a version
  1191.     level recorded) will be erased.  This is necessary due to the
  1192.     massive changes made to the way positions are recorded.  Otherwise,
  1193.     windows end up painting off the screen.  You'll have to position
  1194.     windows to desired spots once more.
  1195.  
  1196. o   Internal editor is now available and functional.  Set the
  1197.     Editor=INTERNAL. The "Set Color" option does nothing yet.  Also,
  1198.     "Set font" merely toggles between mono and ps fonts.  There's no
  1199.     provision for changing the file name or importing/exporting text.
  1200.     All this will come with time ...
  1201.  
  1202. o   Sizable windows are started.  Size and position of several windows are
  1203.     saved and recalled.  In particular, the message viewing screen and
  1204.     conference selection screen are sizeable.  There's some tricky code
  1205.     behind these screens to minimize flashing and contorting; let me know
  1206.     if you see anything strange.
  1207.  
  1208. o   No Qwk (entry of message w/o a packet) is now functional.
  1209.  
  1210. o   I added a command line parameter "/defaultpos" or just "/d" to suppress
  1211.     the mr2pm.ini file access.  This mode uses default window sizes and
  1212.     positions.  ... until I get all the kinks out, this is a safeguard.
  1213.  
  1214. o   Welcome screen now displays in mono font.  Looks OK, unless ANSI
  1215.     codes are present :(
  1216.  
  1217. o   Merged most of MR/2 v1.51 features into this EXE.  The list of
  1218.     pertainent features follows (in latest-first order):
  1219.  
  1220. ==============================================================================
  1221. o   RIME routed messages are now recognized as having a "header area" at
  1222.     the top of the message.  If the message is "split" due to length,
  1223.     the header area should be automically pasted into the top
  1224.     of each part.
  1225.  
  1226. o   FILE_ID.DIZ files were crossed between classic and PM.  Fixed.
  1227.  
  1228. o   OK, I linked in HPFS longname support and modified some code to
  1229.     retrieve and handle long file names.  The packet select screen
  1230.     now shows TE/2-renamed files like "pc-ohio.qwk;1".  This will need
  1231.     some testing and polish, but it works.  FileSpec in MR2.INI should
  1232.     be changed to "*.q*" in order to see these files.
  1233.  
  1234. o   Ooops.  I couldn't find a PKUnzip that would work with long names.
  1235.     Even the older OS/2 version puked.  This'll definitely be a problem
  1236.     with other DOS based archivers.  So, I added a little diddy to
  1237.     unqwk.cmd that, if a long name is detected, will copy the selected
  1238.     file into the tmp$$ directory as MR2$TMP.QWK and unpack this.  It
  1239.     then deletes the "temporary" QWK packet.  Works great with even
  1240.     the DOS PKUnzip now!
  1241.  
  1242.     If you want to use TE/2 on a HPFS system and unpack the "BBS.QWK;1"
  1243.     type names with a DOS or PK* product, you *must* set your unzipper
  1244.     to unqwk.cmd.
  1245.  
  1246. o   An MR/2 INI file other than MR2.INI may be specified via command line
  1247.     parameter.  Use "MR2 /IMR2_ALT.INI" to use a file named MR2_ALT.INI as
  1248.     the global MR/2 INI file.  I'm hoping that this helps in allowing
  1249.     multiple instances of MR/2 to be open on the desktop.  Needs more
  1250.     testing and experimentation ...  Opening two different MR/2 seesion
  1251.     still crashes.
  1252.  
  1253. o   Welcome and Goodbye screen now list on the Bulletins select menu.
  1254.     You can view these, unobstructed and at length, any time you choose.
  1255.  
  1256. o   Minor change to the parsing of the @Fidonet@ variable.  Removed any
  1257.     @fidonet suffix that exists in the origin line.
  1258.  
  1259. o   Added code to trim off nulls at end of any message.  Was trimming spaces,
  1260.     but Internet messages sometimes had nulls.  Messes up the reply file
  1261.     editing.  Also, if any embedded nulls are found, these *aren't* written
  1262.     to the reply file OR save file.
  1263.  
  1264. o   Processing for IDATE improved a little.  I saw some DATE: lines that
  1265.     started with weekday names like "Sun, ".
  1266.  
  1267. o   New INI parameter - ReplyStripTagline defaulting to YES.  Set it to NO
  1268.     if you want to use SmartQuoting (which strips the original messages
  1269.     tagline) but still want the tag quoted.
  1270.  
  1271. o   QuoteStyle now has an optional parameter, which is ON by default.
  1272.     If you specify TagStyle=PCBoard,Autosense, you're saying that quote
  1273.     style can use hi-end ASCII chars, but if it's a Fidonet reply,
  1274.     change to Fidonet mode.  I'm not sure if I should include Internet
  1275.     messages as Fido-typed tags ... I probably should.  I'll research.
  1276.     Without the "Autosense" keyword, tag style will adhere strictly to
  1277.     what's been specified.
  1278.  
  1279. o   Added new Template file sections: SaveHeader and PrintHeader.  Lets
  1280.     you define the header for messages when printed or saved.  If these
  1281.     sections don't exist, the old default header is used.
  1282.  
  1283. o   Added more variables to aid in the support of the new header sections:
  1284.     MsgRefNbr, MsgNumber, MsgStatus.  In addition, added some more variables
  1285.     to aid in formatting sections.  @COL:45@ sets the next column to 45.
  1286.     @RCOL:72@ says to right justify the next variable referenced at col 72.
  1287.     @Center:40@ says to center the next variable referenced over column 40.
  1288.     The @RCOL@ and @CENTER@ variables can be used w/o column specs to
  1289.     right justify at "wrap column" or center the entire line between wrap
  1290.     column and 1.
  1291.  
  1292.     Negative @COL@ specs may be supplied.  This will delete the specified
  1293.     number of characters before the variable.  For example, @ITIME@@COL:-4@
  1294.     would change 07:54:30 GMT to just 07:54:30.  Messes up, tho, if MSGDATE
  1295.     ends up getting substituted for IDATE (no IDATE is found).
  1296.  
  1297.     See example.tf, at the end.  There's a section `unused` with some
  1298.     doc/examples.
  1299.  
  1300. o   The template file now supports comment lines.  Simply start the line
  1301.     (very first columns) with ";;" and the line is ignored.
  1302.  
  1303. o   While viewing any message, you can press "~" to rewrap it.  This is
  1304.     useful only in USENET (Internet) conferences where sometimes a message
  1305.     gets posted without linefeeds.  MR/2 would display it on a single line,
  1306.     but only give you access to the first 160 characters.  This rewrapping
  1307.     is quite temporary (if you "go back" later to view the same message,
  1308.     you'll have to rewrap it again), and totally manual; performed by user
  1309.     keypress only.  I may INI-ize an automated/detection scheme later.
  1310.  
  1311. o   Added a bunch of code to better detect message display lines that are
  1312.     "quotes" from previous messages.  This is not configurable at this time.
  1313.     If I did too much, yell and I'll make this optional.  With all the
  1314.     messages I looked at, quoting highlights were right 99% of the time.
  1315.  
  1316. o   New QuoteBody option - Paragraph.  If you specify something like:
  1317.  
  1318.         QuoteBody="%i│▌",Paragraph
  1319.  
  1320.     then you'll get a quotes like:
  1321.  
  1322.         MN│▌Yes-  DOS 6 upgrade is... (lines chopped for brevity)
  1323.           │▌number of files that...
  1324.  
  1325.         MN│▌And then after your DOS...
  1326.           │▌the manual of files you...
  1327.           │▌release the whole thing...
  1328.  
  1329.        you can do the same thing with "%i>", and secondary lines
  1330.        get just " >".  Use the "|" (shifted backslash) and Fidonet
  1331.        sysops may not yell at you :)  (it's not hi-end ASCII).
  1332.  
  1333.     Bummer!  I just saw someone (a registered MR/2 user using a DOS
  1334.     package, hmmmph!) quote with a technique that this doesn't yet
  1335.     handle :(.  Just a minor nit, maybe I'll add something later to do
  1336.     this (YOU CAN'T DO THIS WITH MR/2):
  1337.  
  1338.         MN┤Yes-  DOS 6 upgrade is... (lines chopped for brevity)
  1339.           │number of files that...
  1340.  
  1341.  
  1342. o   Modified the logic to pick out the quoting initials to better parse
  1343.     Internet "from" fields.  Still needs some other strange-character
  1344.     detection added (nick.knight@pc-ohio should reduce to nk>).
  1345.  
  1346. o   Fixed a bug where internet from fields that were filled to 25 characters
  1347.     resulted in your own last initial being inserted as the senders second
  1348.     initial (Michael.Hagerty@nitelog.com to Nick Knight, reply would
  1349.     be quoted MK>)  This *was* fixed in v1.45 but not documented.
  1350.  
  1351. o   I added some things. First SmartWrapping and SmartQuoting have three
  1352.     levels: No, Yes and Full.  Full is aggressive, rewrapping all
  1353.     non-quoted text to the defined wrap column (This is the old "YES").
  1354.     If set to Yes (the "new" option), wrapping occurs ONLY after a line
  1355.     feed has been inserted by MR/2 (an overlength line was detected).
  1356.     The defaults are "YES" ... we'll see if this works any better.
  1357.     Limited testing, but you *can* now shut these off w/o crashing!
  1358.  
  1359. o   Also, add an "~" to the end of any line (before the linefeed) and
  1360.     MR/2 will strip out the "~" and keep the return that follows intact.
  1361.     This is for stubborn wrapping problems.  Just in case :)
  1362.  
  1363. o   If the quoting initials ended up longer than 9 characters (FROM name
  1364.     had no spaces), the string was not properly terminated.  This resulted
  1365.     in garbage in the initials and in one reported case, a crash.  This
  1366.     would occur most often in internet conferences.
  1367.  
  1368. o   New template sections are definable:  NewInternet and NewNetmail
  1369.     for creating new messages in these private-mail conferences.
  1370.  
  1371. o   When editing a message header and the conference is the Internet or
  1372.     Netmail defined conference, the "private" flag is set to YES.
  1373.  
  1374. o   New template section: `RIME` can be defined for use when replying
  1375.     to a message in private mode.  If a reply is private, and the
  1376.     source message is determined to be from a RIME source (Postlink
  1377.     origin is last line of message), then this section is used in
  1378.     generating the reply.  This allows for private, routed mail.
  1379.     Not sure what to do about "new" private, routed messages.
  1380.  
  1381. o   New variables:  @RimeIDCode@ and @RimeSiteNo@ for use in the RIME
  1382.     section for "routing" private messages.  Will result in blanks unless
  1383.     replying to a message with a Postlink origin line.
  1384.  
  1385. o   New Variables:
  1386.  
  1387.         @RimeIDCode@ and @RimeSiteNo@, defined above.
  1388.  
  1389.         @Version@ for the MR/2 version.
  1390.  
  1391.         @SerialNumber@ is replaced by the registered serial number
  1392.                 (empty if not registered).
  1393.  
  1394.         @UserName@ is replaced by your user names as found in the QWK
  1395.                 control.dat structure.
  1396.  
  1397.         @IDate@ is replaced with the Internet "Date:" spec, or the
  1398.                 the same results as @MDATE@ if a date string is not
  1399.                 found.
  1400.  
  1401. o   New template section: `Forward`.  If this section is declared, it is
  1402.     used as the template "prefix" for forwarded messages.  NOTE:  $Body is
  1403.     not required, this section is inserted as a whole.  If not declared,
  1404.     the old MR/2 default forward prefix is used.
  1405.  
  1406. o   See EXAMPLE.TF for examples of all new section capabilities.  My name
  1407.     and email addresses are plastered all through here.  You'll want to,
  1408.     of course, change these to your own :)
  1409.  
  1410. o   When replying into the Internet mail conference, the @INTERNET@
  1411.     variable will better represent a true Internet address.  If the
  1412.     Reply-To: line isn't present, MR/2 then looks for a "From:" line and
  1413.     attempts to parse out an address.  If no From: line is detected,
  1414.     MR/2 now looks to the last line of the message.  If the sender has
  1415.     included his address inside of parenthesis, then this is used as the
  1416.     INTERNET value.
  1417.  
  1418. o   Modified msg2rep.cmd so that if archiver.id file isn't found, it
  1419.     defaults to pkzip (configurable).  If using no packet entry, no
  1420.     unarchiver was called, so no archiver.id is created.  We need to
  1421.     be able to specify a packet as a default.
  1422.  
  1423. o   If a local INI specified a value for Internet and/or Netmail, it
  1424.     was not cleared when the packet was exitted.  If the next packet
  1425.     opened did not reset these values (or did not have a local INI), then
  1426.     some erroneous detection of network mail would result.  Fixed.
  1427.  
  1428. o   I modified the "origin" line finding logic to recognize more common
  1429.     reader/network tearline styles.  For instance, MR/2's own TwoLine
  1430.     style tagline is now recognized as the beginning of the origin section
  1431.     (and end of the BODY section).
  1432.  
  1433. o   Started coding of a REXX script to handle detection of the archiver
  1434.     used to pack the mail packet.  A code is returned that will be used to
  1435.     branch to the correct command for unpacking.  To me, this is the ideal
  1436.     solution, as it is forever extensible.  I've got a scheme for a packer
  1437.     script (for replies) that will match the unpacker used.  I'm new to
  1438.     REXX coding (this was the perfect excuse to get my feet wet :), so
  1439.     if anyone wants to make improvements and/or enhancements, I'll welcome
  1440.     them.  (file is named Unqwk.cmd)
  1441.  
  1442. o   Create msg2rep.cmd - a REXX script for packing replies into a .rep
  1443.     file based on the method used to unpack the original packet.  The source
  1444.     packet *must* have been unpacked with unqwk.cmd (or, at least, the file
  1445.     "archiver.id" must exist and identify the correct packer to use).  This
  1446.     script opens up "archiver.id" and extracts the id number.  Based on that
  1447.     number, a branch is made to the correct packet command.
  1448.  
  1449.     NOTE:  You may have to modify these files a tad IF your archivers
  1450.     are not in your "PATH" environment variable.
  1451.  
  1452.     NOTE:  These command are useful if you use multiple packet sources
  1453.     (BBS's) that use different compression techniques.  If you can get
  1454.     by with a single zipper/unzipper command, the "old" way is OK, and
  1455.     in fact, still more efficient.  These new files simply provide
  1456.     additional flexibility for those that frequent a variety of BBS's and
  1457.     need this functionality.
  1458.  
  1459.     INSTALLATION:  Modify your MR2.INI file to declare:
  1460.  
  1461.         Zipper=..\msg2rep
  1462.         Unzipper=..\unqwk
  1463.  
  1464.     the default .cmd files depend on all archivers being in your "path".
  1465.     If not, you may modify the path = '' statement at the top of each
  1466.     file to reflect the correct path, or modify each zipper command
  1467.     separately to reflect each's valid path.
  1468.  
  1469. o   The prompt "Work area has an open packet" has been enhanced.  You may
  1470.     still see this prompt.  However, if the work directory is found to
  1471.     contain replies, the prompt will read "Open packet with REPLIES found".
  1472.  
  1473. o   If an error occurs when unpacking the packet, you will now remain
  1474.     inside MR/2 to select a new packet, or whatever.
  1475.  
  1476. o   IF an error occurs while packing replies, the work directory is *not*
  1477.     purged.  Previously, any error while spawning the packer still let the
  1478.     files be deleted.  What happens now is, after the command error is
  1479.     reported, you're prompted that an open packet with replies exists.  The
  1480.     correct course of action is to go back in the packet (continue working
  1481.     with the open packet) fast exit with ALT-X and correct the zipper
  1482.     problem.
  1483.  
  1484. o   Cleaned up and tested UNQWK.CMD and MSG2REP.CMD.  Made sure error codes
  1485.     were properly returned to MR/2.  Seems to work well with the new error
  1486.     handling described above.
  1487.  
  1488. o   Added new variable @ISUBJECT@ that resolves to the Internet message
  1489.     subject line (often different than the QWK "subject" field).
  1490.     I hope there's a limit to the size of these things ... I only
  1491.     accomodate "realistic" lengths.  We'll see.
  1492.  
  1493. o   Ooops.  New template section logic didn't accomodate new messages
  1494.     created w/o replying.  The template file can now define a section for
  1495.     `NewMessage`.
  1496.  
  1497. o   The INI parameter SplitLongMessages has been enhanced.  YES/NO still
  1498.     function in the old way; YES will cause messages to be split at 92
  1499.     lines (90 lines of message, 2 lines for the <cont..d> footer).  You
  1500.     can now, however, place a number here as an option.  This sets
  1501.     splitting to YES, but modifies the line count cutoff to be the specified
  1502.     value (instead of 92).  This value *must* be greater than or equal
  1503.     to 10 (I've been told of a BBS system that requires no more than 16
  1504.     lines <really!>, so I figure 10 will be a "safe" minimum).  I would
  1505.     suggest using a reasonable number if you need to change the default
  1506.     at all.
  1507.  
  1508. o   New INI parameters V0 through V9 allow you to set user-defined text
  1509.     strings as template variables.  Uses of the strings @V0@ through @V9@
  1510.     in the tenplate file will be replced with the corresponding defined
  1511.     text string.
  1512.  
  1513.     These variables can contain any other variables, including other "V"
  1514.     variables.  This allows for a template to be defined with an
  1515.     attribution line of @V0@, for example, and this line can be changed
  1516.     for each BBS by defining different values to V0 in the BBSs local
  1517.     INI file.  The variable replacement is recursive, so any number of
  1518.     replacemnet levels is possible.  It's also possible to confuse the
  1519.     system by circularly defining variables.  My rule:  keep it where
  1520.     it's understandable.
  1521.  
  1522.     For example, if you add a line to MR2.INI that says "V0=1:157/200"
  1523.     and your template file starts "...writing from Fidonet address @V0@",
  1524.     the fidonet node address will be placed in the reply.
  1525.  
  1526. o   New INI parameters "INTERNET" and "NETMAIL".  Use these variables to
  1527.     declare which conferences, if any, handle Internet mail and Fidonet
  1528.     netmail, respectively.  For example, PC-Ohio has Internet mail in
  1529.     conference 5 and Fidonet netmail in conference 6.  My PC-OHIO.INI
  1530.     file has:
  1531.  
  1532.     Internet=5
  1533.     Netmail=6
  1534.  
  1535.     Nerd' Nook has Netmail in conference in 139 and no Internet capabilities.
  1536.     My NerdNook.INI file has the lines:
  1537.  
  1538.     Internet=-1
  1539.     Netmail=139
  1540.  
  1541.     The "-1" tells MR/2 that there is no Internet support, and makes sure
  1542.     that the Internet section template is not referenced.
  1543.  
  1544. o   New variables @INTERNET@ and @FIDONET@.  The INTERNET variable will
  1545.     be replaced with the "Reply-to:" address found in Internet mail.  The
  1546.     target address will be stripped of extra verbage and should represent
  1547.     a correct and "ready-to-go" internet address.  The FIDONET variable
  1548.     will be replaced with the full Fidonet address found in the origin
  1549.     line of the current message.  If either one of these variable can
  1550.     not be resolved, then an empty string is substituted.
  1551.  
  1552.     These variables are meant to be used for personal mail addressing
  1553.     using template "sections".  See next blurb.
  1554.  
  1555. o   Sections in the template file `Internet` and `Netmail`.  You may now
  1556.     allocate "sections" within the template file.  Sections are denoted
  1557.     and named by a string between "accent" characters (`).  The first
  1558.     template file section has no name and will be refered to as the
  1559.     "default" section.  A section ends at the next section name string,
  1560.     or at the end of the file.
  1561.  
  1562.     When replying to messages targetted for a conference declared to
  1563.     be the INTERNET or NETMAIL conferences, MR/2 will switch template
  1564.     sections to the corresponding section.  If ever a section is not found
  1565.     (by name matching), the default section is used.
  1566.  
  1567.     This allows for Fidonet netmail and Internet mail to have templates
  1568.     that correctly set up destination addressing.  See the file Example.tf
  1569.     for examples of sections.
  1570.  
  1571. o   Mods to reply creation ... removed the beginning CR/LF when creating
  1572.     the reply file.  Made changes to the way the template file handled
  1573.     CR/LF spacing.  Template file's allignment matches reply files
  1574.     better now (line spacing/blank lines).
  1575.  
  1576. o   When replying and the FROM user name is an Internet made-up name with
  1577.     periods imbedded, MR/2 nulls-out the quoting initials.  The quoted text
  1578.     is simply marked with whatever symbol is defined in the INI, usually
  1579.     a ">" (no initials preceed the ">").
  1580.  
  1581. o   Oh boy.  I modified the Save Reply logic of my QWK class.  This is
  1582.     dangerous, simply because it changes the way replies are saved.  I'll
  1583.     test it thoroughly before letting it out.  *Please* report any problems
  1584.     to me quickly.
  1585.  
  1586.     The change comes when splitting messages (it may effect more, my hope
  1587.     is that it doesn't :).  IF you're in sending Internet mail or Netmail,
  1588.     the message "header" will be copied to each split section.  In most
  1589.     cases, this will be the correct function.  There may be cases where
  1590.     it isn't.  Yell at me and I'll make it configurable.  In other words,
  1591.     netmail or internet mail that's split will be addressed properly for
  1592.     all "parts" if addressing is done on the first line(s) of the message.
  1593.  
  1594. o   When replying into the Fidonet netmail conference, the source message
  1595.     is first checked to see if the first line starts "From:".  If so, and
  1596.     what follows appears to be a Fidonet node designation (it has a ":" and
  1597.     a "/"), then this is used as the value of the FIDONET variable.
  1598.     If not found, the origin line is found.  In netmail messages (the ones
  1599.     I receive at least), there is no origin line, just a "From:" identifier
  1600.     on the very first line of the message.
  1601.  
  1602. o   Taglines now are filtered for variables (e.g., @FROM@).
  1603.  
  1604. o   Took template file checking one step further - if file name is
  1605.     empty, processing doesn't even start.
  1606.  
  1607. o   The initial MR2.INI file now specifies that the INTERNAL editor now
  1608.     be used as the default.  The initial INI editing is still performed
  1609.     inside the E editor.
  1610.  
  1611. o   New INI parameter:  "TemplateFile".  This is another one of those
  1612.     features that is merely a starting place and has lots of future
  1613.     expansion possibilities.  Place a file name here that defines a
  1614.     template for all message replies.  The reply will created using this
  1615.     file as a guide BEFORE you edit it.  This allows for any necessary
  1616.     cleanup.  The "template" file I used for testing looked like this
  1617.     (note that the variables used will be documented below):
  1618.  
  1619.     -------------------------------------------------------------------
  1620.     Subject: @Subject@
  1621.     In a message dated @DATE@, @FROM@ said to @TO@:
  1622.  
  1623.  
  1624.     $BODY
  1625.  
  1626.  
  1627.     Nick Knight
  1628.  
  1629.     From @from@ reading @CONFNAME@ (@CONFNUM@) on @BBSID@, to @TO@
  1630.     Subject: @Subject@
  1631.  
  1632.     FidoNet:    1:157/2
  1633.     Internet:   nick.knight@pcohio.com
  1634.     Compuserve: 76066,1240
  1635.  
  1636.     To First:   @tofirst@
  1637.     To Last:    @tolast@
  1638.     YYMMDD:     @yymmdd@
  1639.     Date:       @date@
  1640.     From First: @fromfirst@
  1641.     From Last:  @FromLast@
  1642.     Msg Date:   @msgdate@
  1643.     Msg Time:   @msgtime@
  1644.     Day:        @Day@
  1645.     Julian:     @Julian@
  1646.     Time:       @Time@
  1647.     Time 24:    @Time24@
  1648.     AM/PM:      @AmPm@
  1649.  
  1650.     Upper:      @Upper@@Subject@ @upper@@day@
  1651.     Lower:      @lOWER@@Subject@ @lower@@day@
  1652.     Mixed:      @mix@@From@ -> @mix@@to@
  1653.     -------------------------------------------------------------------
  1654.  
  1655.     The quoted version of the original message is inserted at the $BODY
  1656.     marker, which is required.  NOTE that this is not an appropriate
  1657.     template file for use within internationally echoed conferences.
  1658.     It's offered here merely as an example.
  1659.  
  1660.     The section before the $BODY line allows for an "attribution"
  1661.     line or section.  The area below the $BODY marker works as a
  1662.     signoff or signature section.
  1663.  
  1664.     AGAIN, this feature is under development and may be changed in the
  1665.     next couple of versions.  My idea is to add more blocks to this file.
  1666.     For example, a definition for saved message headers, forwarded
  1667.     header definition, etc.,.  I've got plenty of ideas.
  1668.  
  1669.     The reply file generated by my test template file looked like:
  1670.     -----------------------------------------------------------------
  1671.  
  1672.     Subject: NEW ZOO
  1673.     In a message dated 03/06/93, DAN HANSON said to ALL:
  1674.  
  1675.     DH>I saw this in Time Magazine.  The New York Bronx Zoo has been
  1676.     DH>renamed to the International Wildlife Conservation Park.  In
  1677.  
  1678.     <My reply would be inserted here.>
  1679.  
  1680.     Nick Knight
  1681.  
  1682.     From DAN HANSON reading Main Board (0) on PC-OHIO, to ALL
  1683.     Subject: NEW ZOO
  1684.  
  1685.     FidoNet:    1:157/2
  1686.     Internet:   nick.knight@pcohio.com
  1687.     Compuserve: 76066,1240
  1688.  
  1689.     To First:   ALL
  1690.     To Last:    ALL
  1691.     YYMMDD:     930306
  1692.     Date:       03/06/93
  1693.     From First: DAN
  1694.     From Last:  HANSON
  1695.     Msg Date:   03-06-93
  1696.     Msg Time:   14:21
  1697.     Day:        Saturday
  1698.     Julian:     065
  1699.     Time:       03:08
  1700.     Time 24:    15:08
  1701.     AM/PM:      PM
  1702.  
  1703.     Upper:      NEW ZOO SATURDAY
  1704.     Lower:      new zoo saturday
  1705.     Mixed:      Dan Hanson -> All
  1706.     -----------------------------------------------------------------
  1707.  
  1708. o   Variables are available for use in the template file.  They are
  1709.     currently only used by the reply file generator.  I'll add the
  1710.     capability to other areas as I think of them.
  1711.  
  1712.     The following variables have been provided:
  1713.  
  1714.         BBSID                           TIME
  1715.         CONFNAME                        TIME24
  1716.         CONFNUM                         TO
  1717.         DATE                            TOFIRST
  1718.         DAY                             TOLAST
  1719.         FROM                            YYMMDD
  1720.         FROMFIRST                       UPPER
  1721.         FROMLAST                        LOWER
  1722.         MSGDATE                         MIX
  1723.         MSGTIME                         AMPM
  1724.         SUBJECT                         JULIAN
  1725.  
  1726.  
  1727.     The literals UPPER, LOWER and MIX are not actual variables, but
  1728.     modifiers.  They will convert the case of the NEXT variable
  1729.     replacement to either all upper, all lower or mixed case, respectively.
  1730.     Mixed case basically lower cases all letters except the first letter
  1731.     of each word.  See the example above for more detail.
  1732.  
  1733. o   GREATER CHICAGO Online BBS is now offering a service called the
  1734.     "OS/2 Shareware Author Support Program".  They are willing to handle
  1735.     Visa/Mastercard charges for shareware authors.  Starting immediately,
  1736.     MR/2 may be registered by "charging" it!  You can register online by
  1737.     calling Greater Chicago Online BBS at (708) 895-4042.  Alternatively,
  1738.     you can provide your charge card information to me directly on the
  1739.     MR/2 registration form provided (register.doc).  There is a $2.00
  1740.     handling fee associated with all charged registrations, making the
  1741.     total charged registration cost $22.00 US for domestic orders.
  1742.  
  1743.     Shareware authors may get more information on the OS/2 Shareware
  1744.     Author Support Program by calling the GREATER CHICAGO Online BBS at
  1745.     the number above (leave a note to the sysop) or by Compuserve mail
  1746.     at 70404,3277.  Fidonet netmail can be sent to Bill Cook at 1:115/895.
  1747.  
  1748. ==============================================================================
  1749.  
  1750. Changes included in v0.99a
  1751. --------------------------
  1752.  
  1753. o   Attempting to show the BBS's Welcome screen in the message listbox
  1754.     behind conference select picklist.  It isn't pretty (I need a
  1755.     monospaced font) and you can't see much of it.  Maybe I'll try
  1756.     something else.
  1757.  
  1758. o   After deferring a message, the message status was not updated with a
  1759.     "D", even though the message WAS deferred.  Fixed.
  1760.  
  1761. o   New routine "clear_resulttable()" is called if there is no local INI
  1762.     and a packet is closed.  Previously, hit counters for custom
  1763.     conferences would not respresent the correct counts (counts would
  1764.     not be cleared for the next packet).
  1765.  
  1766. o   Index display showed message number with some trailing garbage
  1767.     sometimes. This is fixed.
  1768.  
  1769. o   No QWK Entry code started.
  1770.  
  1771. o   Open by association started (specifying a packet as a command-line
  1772.     parameter).
  1773.  
  1774. o   The spacebar now really does work as in MR/2 classic ... it works
  1775.     like the page-down key until the end of a message is displayed, then
  1776.     like the NEXT key.
  1777.  
  1778. o   When editing the message header, the F10 key now works as it does
  1779.     in MR/2 classic.  That is, it works as the "accept" key.  I'll leave
  1780.     the F11 key also as an "accept" key for those that got used to it.
  1781.  
  1782. o   Write New:  The selected conference would be erased on the "after"
  1783.     header edit.  It would be reset to "000".  Fixed.
  1784.  
  1785. o   The E editor was demonstrating some very unusual behaviour.  When
  1786.     replying, parts of the message would be hidden and unavailable for
  1787.     editing.  Yet, they *were* there!  There would be no vertical scroll
  1788.     bars displayed, and the horizontal was only in one (the wrong)
  1789.     direction.  This ended up having something to do with the program
  1790.     control value I was setting.  EPM seemed to work OK, as did text mode
  1791.     edit sessions, but E just croaked.  This *seems* to be fixed.
  1792.  
  1793. o   Also, the $ and ! specifiers for DOS and FullScreen sessions added
  1794.     earlier can now be combined in the form $! for both packers and
  1795.     your editor.  IE, you can force a DOS session to full-screen.
  1796.  
  1797. o   Tagline stealer had a problem with certain characters (while editing
  1798.     the tagline-to-save) invoked message functions (Reply, for example).
  1799.     This has been fixed ... I need to review all my dialog boxes for the
  1800.     same types of problems.
  1801.  
  1802. o   Sizable message reading screen.  It has some painting problems when
  1803.     the screen is resized, but once the size is remembered it works
  1804.     pretty well.  You can also size the Conference selection dialog.
  1805.     MR/2 PM now remembers the size of these screens in addition to the
  1806.     position.
  1807.  
  1808. o   The possibility of the message listbox getting the focus has been
  1809.     eliminated (I think? :).  When this happened, keys would cease to
  1810.     function as they would normally (X would not exit, F would not
  1811.     find).
  1812.  
  1813. Changes included in v0.99
  1814. -------------------------
  1815.  
  1816. o   For your archivers:  if you wish (or have to :) use a DOS version
  1817.     of PKUnzip, for example, MR/2 PM will now work correctly.
  1818.  
  1819.     This bug was causing lockups (blank screen, no keyboard, manual
  1820.     boot time) on OS/2 2.0 GA and simply failing on the old 2.1 beta.
  1821.     No idea what it did to versions in-between.
  1822.  
  1823.     Now, when a DOS archiver is called upon, MR/2 PM opens a DOS window
  1824.     (in the "background", even) and runs the DOS utility there.
  1825.  
  1826.     Editors may also be DOS-based.
  1827.  
  1828. o   I changed the way that the zip/zipper work.  Basically, whether
  1829.     using DOS or OS/2 executables, a new session (windowed usually)
  1830.     is created.  I'll have to see if I like this better, and get
  1831.     outside opinions (anybody?).  Also, the editor is called with
  1832.     the same logic.  This should help with those cases where the
  1833.     reply editor would end up "in the background".  That shouldn't
  1834.     happen at all now, as MR/2 PM is suspended UNTIL the editor is
  1835.     terminated.  Uh oh, can't have this!
  1836.  
  1837. o   Tagline selection list now has buttons for OK and CANCEL.
  1838.  
  1839. o   Lockups due to missing or unnamed template file (lockup when
  1840.     requesting the editor for a reply) are now fixed.  Same problems
  1841.     as with MR/2 classic.
  1842.  
  1843. o   Read markers are back on the message index list, and the read
  1844.     count is now back on the thread selection list.  Sorry!
  1845.  
  1846. o   Write button is now enabled and can be used to write "new" messages.
  1847.     I'm getting some random crashing ... more work is needed.
  1848.  
  1849. o   New buttons on Conference selection list:  News, Files and Bulletins.
  1850.     Bulletins is still non-functional.  Soon.  Buttons call your editor
  1851.     accessing the specified file.  No checking for non-existent files.
  1852.  
  1853. o   Mods to keep secondary dialog box positions as "relative" to the
  1854.     open/message windows.  That means that if you place the conference
  1855.     select window somewhere, then move the message reading screen, the
  1856.     conference select box will move to stay in the same "relative"
  1857.     position.
  1858.  
  1859. o   Cleaned up some of the "extra" little informative dialogs that would
  1860.     end up appearing as independent windows.
  1861.  
  1862. o   The zipper/unzipper EXE is now queried, and if found to be a DOS app,
  1863.     a DOS session is started.  No strange "$" specifiers needed :)
  1864.     The window is now opened foreground, though.
  1865.  
  1866. o   The editor call is now handled differently.  You editor should now
  1867.     end up with the correct focus, even if windowed.
  1868.  
  1869. o   The conference listbox is now automatically updated if/when the
  1870.     background "custom conference" thread completes.
  1871.  
  1872. o   Edit header now sets the focus to the SUBJECT field.
  1873.  
  1874. o   Cleaned up some of the button resetting to "default" values
  1875.     after some other button is pressed.  More to come ...
  1876.  
  1877. o   Removed the makeshift "paging" buttons I had placed on the message
  1878.     reading dialog.  Turns out PM already accomodates paging by clicking
  1879.     inside the scrollbar track, above or below the slider.  I just
  1880.     recently learned that!
  1881.  
  1882. o   The MR/2 PM version is now part of the packet select dialog title.
  1883.  
  1884. o   The distribution zip now contains a FILE_ID.DIZ description file.
  1885.  
  1886. o   Bulletin button on the conference select list is now functional.  It
  1887.     brings up a selection list of available bulletins.  Selecting one will
  1888.     load your editor with the appropriate bulletin.  Only minimal error
  1889.     checking is performed.
  1890.  
  1891.  
  1892. Changes included in v0.98
  1893. -------------------------
  1894.  
  1895. NOTE: Version 0.97 never really made it into distribution.
  1896.  
  1897. o   Relinked with many of MR/2's latest features being added automatically.
  1898.     Others needed some minor code adjustments.  Deferred messages are
  1899.     functional, as is the new "template" feature.  I'll include MR2READ.ME
  1900.     for anyone that wants to get a feel for what else *might* be new.
  1901.     Also, the "TwoLine" TagStyle is now available.
  1902.  
  1903. o   I played around with saving window positions.  It works OK, but isn't
  1904.     quite right, particularly with regards to secondary dialog boxes.  Work
  1905.     will continue.  MR/2 PM now creates and maintains an "MR2PM.INI" file
  1906.     in the software's base directory.
  1907.  
  1908.  
  1909. Changes included in v0.97
  1910. -------------------------
  1911.  
  1912. o   Buttons on the Message Index dialog box are now functional.
  1913.  
  1914. o   Removed some unnecessary screen repaints that would occur when a
  1915.     function (e.g., Pick Thread) was canceled and the same message was
  1916.     left on the screen.
  1917.  
  1918. o   If CTRL-PAGEDN was used to page forward by thread, pressing the NEXT
  1919.     button would redisplay the same message immediately afterwards (only
  1920.     once).
  1921.  
  1922. o   Focus for reading messages now starts on the NEXT button.
  1923.  
  1924. o   The SPACEBAR now functions as it does in MR/2 classic (page down,
  1925.     next message if at end of current message).  NOT YET !!!!  BROKEN
  1926.  
  1927. o   Origin recognition enhancements inherited from MR/2 classic.  Custom
  1928.     Conference now recognize the "origin" section of a message better
  1929.     whe using the "check = origin" option.
  1930.  
  1931. o   After "reList"-ing packets, the focus is set on the OPEN button.
  1932.  
  1933. o   Thread summary listbox - sometimes the last entry would be malformed
  1934.     (characters missing from the front of the thread text).  Fixed.
  1935.  
  1936. o   You can now (again) double click on a packet name to open it, save file
  1937.     to save to it.
  1938.  
  1939. o   Pressing the Tagline button while editing a reply header would crash
  1940.     MR/2 PM.  This now works correctly.
  1941.  
  1942. o   Color is supported in the message viewer listbox.  I wouldn't call
  1943.     it pretty, but it's there.  A new MR2.INI entry has been added just
  1944.     for specifying PM viewer colors.  PMColor=1,2,3 ... where 1 is the
  1945.     color for quoted text, 2 the color for normal text and 3 is the
  1946.     background color.  The defaults are half-tone, black and default
  1947.     entry field color (half-tone yellow, sorta).  You may specify one,
  1948.     two or all three and let whatever's left default.  See the MR2INI.ORG
  1949.     file for colors possible.
  1950.  
  1951. o   Many improvements inherited from MR/2 classic.  The speed of conference
  1952.     name sorting has been dramatically improved.  Some obscure control.dat
  1953.     file problems cleared up.  Personal message beeping problem fixed.
  1954.     Minor tagline problems fixed (?).
  1955.  
  1956. o   Packet selection dialog sometimes had the file date/time clipped.
  1957.     This has been corrected.
  1958.  
  1959.  
  1960. Changes included in v0.96
  1961. -------------------------
  1962.  
  1963. o   Personal messages now beep if configured to do so.
  1964.  
  1965. o   The "find" text is cleared when a new conference is selected.  Old way,
  1966.     the text locator would still be in effect when a new conference was
  1967.     entered.
  1968.  
  1969. o   Packet path was previously lost when a packet was exited, resulting in
  1970.     an empty packet selection list.  This has been fixed.
  1971.  
  1972. o   If the FROM user is changed when replying, this change is remembered for
  1973.     all subsequent replies, until a new packet is selected.
  1974.  
  1975. o   Message viewer keyboard interface enhanced.  Up/Down arrows now scroll
  1976.     message by line; Page Up/Down by page.  Home jumps to beginning,
  1977.     End to end.  Insert key calls up INDEX (still trying to stay SLMR
  1978.     keystroke compat for some reason :)  Paging improved somewhat.
  1979.  
  1980. o   Added a more direct way to get message lines from the QWK engine.  The
  1981.     previous method involved querying the message line by number, walking
  1982.     through increasing number requests.  Each call resulted in the entire
  1983.     message being traversed until the line was found.  Now, the new call
  1984.     oStart = GetNextMessageLine(char *target, int oStart) speeds this up.
  1985.     Filling the message list box is now faster.
  1986.  
  1987. o   Columnized listboxes now display selected item in a more "correct"
  1988.     color.
  1989.  
  1990. o   Bookmark flags were not getting set and/or being read.  This has
  1991.     been corrected.
  1992.  
  1993. o   Message window now displays the bookmark flags in a minimal fashion.
  1994.     If a message has been read, a "√" is displayed next to the reference
  1995.     number.  After this, an "R" appears if the message was replied to,
  1996.     an "S" if it was saved, and a "K" if it's a reply that's been killed.
  1997.  
  1998. o   Taglines are now selectable via the "taglines" button.  Hot key of
  1999.     F2 not yet implemented.
  2000.  
  2001. o   Save Header button on reply message header now functions.
  2002.  
  2003. o   If using an existing packet, flags to save replies and bookmark flags
  2004.     were not being defaulted to TRUE.  This caused problems - now fixed.
  2005.  
  2006. o   When modifying or killing a reply, the message header and message text
  2007.     are now updated on screen when the action is complete.
  2008.  
  2009. o   When spawning to the editor, the path was *not* inherited from MR/2 PM.
  2010.     You would usually end up with a default path of C:\.  This cause
  2011.     problems with reply files named "reply.msg" (not fully qualified) to
  2012.     appear to be missing.  You now start editing while pathed into the
  2013.     tmp$$ working directory.
  2014.  
  2015. o   Enabled the "T" key when viewing a message.  This now steals the current
  2016.     message's tagline.  As with MR/2 classic, the arrow keys let you scroll
  2017.     through the message lines.  Pushbuttons are also provided for this
  2018.     purpose.
  2019.  
  2020. o   Save-to-file has also been enabled.  Press "S" while viewing a message.
  2021.     A file dialog screen comes up for save-file selection.  There are some
  2022.     inconsistencies here that I hope to clean up quickly ... but it does
  2023.     work.
  2024.  
  2025. o   Enabled the F2, F3, F9 and F10 keys on the Reply Header Edit screen
  2026.     to function as in MR/2 classic;  Pick tag, Toggle to, Save Header Only,
  2027.     Accept, respectively.  F10 won't register for some reason (it's a PM
  2028.     special "menu" key - I'll have to read up :), so I've assigned F11 as
  2029.     the "Accept" hot key (in addition to F10, which I hope to get working).
  2030.  
  2031. o   The "Save Header" botton when editing the message header is enabled
  2032.     only when editing an existing reply.  This allows you to modify
  2033.     the destination data w/o editing the message content.  This makes no
  2034.     sense unless the message already exists.
  2035.  
  2036. o   The "R" replied mark wasn't showing up immediately after a message was
  2037.     replied to.  Fixed.
  2038.  
  2039. o   The Page Up/Down "buttons" on the message viewer no longer obtain the
  2040.     focus when clicked on.
  2041.  
  2042. o   Private/Public buttons now work correctly while editing a reply's header.
  2043.     Conference name is now static text - no user editing can be performed.
  2044.  
  2045. o   Expanded the conferences w/mail listbox width a tad.
  2046.  
  2047. o   Most pushbuttons now have associated hotkeys that are underlined.  I
  2048.     may have went a little overboard, but I dunno.
  2049.  
  2050. o   When modifying a reply, old tagline is extracted and becomes the
  2051.     default tagline for the "new", updated reply.  This was previously
  2052.     broken.
  2053.  
  2054. o   There was some crazyness happening with WM_CHAR messages (keyboard
  2055.     characters) that I've kludged around.  For example, with a message
  2056.     displayed and a secondary dialog box up (pick thread, reply header,
  2057.     etc.,.) and a pushbutton highlighted, pressing the "X" key would
  2058.     prompt you to exit.  The "S" key would bring up the save dialog.
  2059.     Even stranger things would happen.  I'm not sure what I'm doing
  2060.     wrong when nesting dialogs, but I put a simple filter in that
  2061.     disables keystrokes to the message window when another dialog box
  2062.     is on top.
  2063.  
  2064. o   Double clicking on the system menu button, or ALT-F4'ing from either
  2065.     of the programs main screens now exits cleanly.  It used to trap.
  2066.  
  2067. o   MR/2 classic uses TAB/BACKSPACE while viewing a message to move
  2068.     forward/backwards an entire thread.  Since TAB is used by the PM
  2069.     dialog routines, this key is logically unavailable.  I've attached
  2070.     the same functionality to the CTRL-PAGEDN (fwd) and CTRL_PAGEUP (back)
  2071.     keys.  These work the same way in MR/2 classic - they're a carry-over
  2072.     from SLMR-compatibility days.
  2073.  
  2074. o   Often MR/2 PM would leave a file or conference unselected by default.
  2075.     When this occurred and ENTER was pressed, the program would process
  2076.     it as if ESCAPE was hit, either closing the packet, or exiting the
  2077.     program.  I've now taken steps to always have something selected by
  2078.     default when the dialog box is initially displayed.
  2079.  
  2080. o   Thread summary - message count is now columnized.
  2081.  
  2082. o   Custom conferences now align the line containing matching text on
  2083.     the second line of the message listbox.  Also, the alignment process,
  2084.     which is shared with the "Find" search function, now parses compound
  2085.     search strings and matches any one string.  (Previously, the PM
  2086.     listbox message LM_SEARCHSTRING was used - this was for straight
  2087.     word-for-word matches only).
  2088.  
  2089. o   The "Find" dialog box now displays any currently active search string.
  2090.  
  2091. o   The "L" key (find LAST search hit) did not function properly.  Fixed.
  2092.  
  2093. o   Played around with WinMessageBox to post the "Replies Exist" message.
  2094.     This is what I'll use for most confirmations, since I'm supposed to :)
  2095.  
  2096. o   Played with changing the color of text/quoted text in the message
  2097.     viewer.  It worked, but I'm not very happy with it.  I'm leaving it
  2098.     at this time to do quoted test in "halftone".  I'll make this optional,
  2099.     or allow a wider selection of color options.
  2100.  
  2101. o   The "hit" status (Hit nn/nnn) is now displayed on the message viewing
  2102.     screen if the message is part of the current search results.
  2103.  
  2104. o   Logging of messages (my "remote" debugging trail) is now off by default,
  2105.     but can be invoked by supplying a command-line parameter (anything).
  2106.  
  2107. o   The "Config" button now functions to edit the MR2.INI file.  I place
  2108.     a dialog box up that requires an "OK" when editing is complete.  This
  2109.     will be removed when I get to reading the editor's exit queue.
  2110.  
  2111. o   If no MR2.INI file exists, an initial one is made and you're placed in
  2112.     the E editor to make any necessary revisions.
  2113.  
  2114. o   If you answer NO to "use the existing open packet?", the packet is
  2115.     actually deleted.  Before, this prompt could come up several times.
  2116.  
  2117. o   While building the message header index (short pause on a fast machine,
  2118.     more significant on a slower machine), a "waiting" dialog is displayed.
  2119.     I need to find that snippet about setting the hour-glass mouse pointer.
  2120.     No, actually, I need to add some secondary threads to this stuff ...
  2121.     maybe this weekend.
  2122.  
  2123. o   Most all of the message viewer letter command found in MR/2 classic
  2124.     are now functional in MR/2 PM.  The exception seems to be the "B"
  2125.     command, read backwards w/in thread.  I'll fix this one soon :)
  2126.     The "Z" key now works (zip to first non-read in conference).
  2127.  
  2128. o   The "B" key (read backwards w/in thread, go to thread summary at
  2129.     beginning of thread) now functions correctly.  Note that selecting a
  2130.     thread from the thread summary places you at the FIRST message in a
  2131.     thread, not the last.
  2132.  
  2133. o   There's a new button on the Conference Select dialog box labeled
  2134.     "Write".  This is for composing new messages w/o a message to
  2135.     reply to.  I just have to put some code behind it now :)
  2136.  
  2137. o   The No QWK button is now operational on the packet select screen.
  2138.     If you depress this button, the "Pick BBS" dialog pops up and allows
  2139.     you to select a BBS.  From then on you're in "write new" mode.
  2140.  
  2141. o   The reply header edit dialog now has a "Conferences" button for
  2142.     selecting a different response conference.  The MR/2 classic hotkey
  2143.     F4 also maps to conference selection.  Also, the conference number
  2144.     may be plugged in by hand.  MR/2 now validates the number supplied and
  2145.     displays the conference name, or "Unknown" if a bad conference number
  2146.     is specified.
  2147.  
  2148. o   The Message Index dialog box now has horizontal scrollbar.  There's
  2149.     nothing to scroll yet, but the scrollbar's there :)
  2150.  
  2151. o   I changed the way messages are displayed when unpacking a packet and
  2152.     checking for existing replies.  This still isn't right, but it's better
  2153.     than it was.  I still need to multithread and pipe the PKZip/unzip stuff.
  2154.     That'll be first thing on the list for the next beta.
  2155.  
  2156. o   The Config button now properly resets the packet path, if it is changed
  2157.     in the INI file.  Previously, the path would not be changed.
  2158.  
  2159. o   OK, so my message index listing has a horizontal scrollbar, and I've
  2160.     got stuff to scroll.  Hmmm, I must have to actually do the scrolling,
  2161.     too.  I thought all this stuff was magic?  I guess not.
  2162.  
  2163. o   OK, Cancel buttons added to message index dialog.
  2164.  
  2165.  
  2166. Version 0.95 - Original ALPHA release 10/12/92
  2167. Version 0.96 - Second release - BETA  10/25/92
  2168. ----------------------------------------------
  2169.  
  2170. No ANSI code support exists.
  2171.  
  2172. Message display is relatively slow, particularly on long messages.
  2173.  
  2174. No online HELP exists at this time.
  2175.  
  2176. Just for fun, here's my "to do" list in its current form.  Note that these
  2177. notes aren't intended to make sense to you ... don't worry, they do to me :)
  2178. Listing these may help identify problems I'm already aware of.  There seems
  2179. to be alot, but the thing works fairly well.
  2180.  
  2181. To Do's (Bugs/Fixes):
  2182. =====================
  2183. o   Long conference lists
  2184. o   Highlight search hits - define a color.
  2185. o   Alt-R & Alt-W inside editor
  2186. o   Reorder Message read buttons?
  2187. o   Expand message index, horizontal scroll bars.
  2188. o   Hit counter for searching (checking ... )
  2189.  
  2190. o   Online help
  2191. o   Manual
  2192.  
  2193. o   Keep focus out of message box - reset focus to NEXT?
  2194. o   Edit button on Save dialog doesn't work
  2195. o   No-file error checking for bulletins.
  2196. o   Config button: editor opens in the background.  Wait box is off.
  2197.  
  2198. To Do's (Long term enhancements):
  2199. =================================
  2200. o   Toolbar(s) instead of pushbuttons.
  2201. o   Get rid of listbox for message viewer and write to window myself,
  2202.     paging, scroll bars much faster.
  2203. o   Make 32 bit and use v2.0 controls (eg, settings in a notebook).
  2204. o   Font control - colors?  Moveable/sizeable windows?
  2205.  
  2206.  
  2207. CONTACTING THE AUTHOR
  2208. =====================
  2209.  
  2210. You  can contact me in a number  of ways.  Unfortunately, I can't
  2211. provide a phone number at this time.
  2212.  
  2213. US Mail:       Nick Knight
  2214.                1823 David Ave.
  2215.                Parma, Ohio 44134
  2216.  
  2217. Fido netmail:  1:157/2 to "Nick Knight"
  2218.  
  2219. Internet:      User "Nick Knight", (nick.knight@pcohio.com)
  2220.  
  2221. Fido Echomail: Echomail messages to  me are discouraged,  as
  2222.                keeping  them "on  topic" and  interesting to
  2223.                the  masses would  be difficult.   I  do read
  2224.                OS2,  OS2PROG,  C_PLUSPLUS and DR DEBUG daily,
  2225.                though.   OFFLINE  echo also  (deals with mail
  2226.                readers), this might be THE place to ask public
  2227.                questions, eh?
  2228.  
  2229.                I recently have acquired access to a host of other
  2230.                networks with OS/2 conferences.  These include RIME,
  2231.                SmartNet, Uninet and some others I can't remember.
  2232.  
  2233.                I also do poll the Fidnet OS2PRODSUPPORT echo.
  2234.  
  2235. Direct BBS:    Leave a message on the Nerd's Nook BBS
  2236.                (1:157/2) at (216)  356-1772, 356-1872  or
  2237.                356-1431.   I check in here multiple times a
  2238.                day.  I will also keep the most recent copy
  2239.                of MR/2 posted here.    Other boards
  2240.                (non-local) will get updates at my  convenience.
  2241.  
  2242. **************************************************************************
  2243. **************************************************************************
  2244. **             NOTE:  Nerd's now supports an MR/2 conference            **
  2245. **             and file area.  Conference #208 is dedicated to          **
  2246. **             MR/2 support and files.  File area #45 contains          **
  2247. **             MR/2-related files.  Any file uploaded into              **
  2248. **             conference 208 will be placed in file area 45.           **
  2249. **************************************************************************
  2250. **************************************************************************
  2251.  
  2252.                Nerd's does support file requests (157/2 or 157/3)
  2253.  
  2254.                Optionally, I call into PC-OHIO regularly.
  2255.  
  2256. Compuserve:    I check in  here only  when I have  to.   Try
  2257.                mail to  my  user ID  - 76066,1240,  although
  2258.                this isn't the best approach.
  2259.  
  2260. Internet FTP:  Well, during normal business hours, 8-5 or later EST,
  2261.                my work machine is on the internet.  I have an anonymous
  2262.                FTP "site" setup as a directory on my machine.  This is
  2263.                a hit-or-miss proposition, but you can try it.  Ftp to
  2264.                nick.raleigh.com.  You can upload bugs, packets, notes,
  2265.                whatever.
  2266.  
  2267.                AGAIN, this will only be available when our company SLIP
  2268.                connection is up, when our LAN Server network is running,
  2269.                and when my machine is on (almost always).  It's very
  2270.                "hit or miss".
  2271.  
  2272.