home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 3 Comm / 03-Comm.zip / mr2_226.zip / READ.ME < prev    next >
Text File  |  1996-02-01  |  108KB  |  2,091 lines

  1. MR/2 - A QWK Compatible Mail Reader for OS/2.  02/01/96
  2.  
  3. Copyright (c) 1994-1996 Knight Writer Software Company.
  4. All rights reserved.
  5.  
  6. ===================================================================
  7.                           N O T I C E
  8. ===================================================================
  9. This IS a shareware package, and does require a registration fee if
  10. you choose to continue using it after 30 days.   The registration
  11. fee is currently $25 US.  Eventually, the product MAY have a
  12. "begging" screen with a key-file that will register the software
  13. and suppress it.  The more interest I get, the more likely I am to
  14. continue with improvements.
  15. ------------------------------------------------------------------
  16.  
  17. CONTACTING THE AUTHOR
  18. =====================
  19.  
  20. You  can contact me in a number  of ways.  Unfortunately, I can't
  21. provide a phone number at this time.
  22.  
  23. US Mail:       Nick Knight
  24.                P.O. Box 22366
  25.                Beachwood, Ohio 44122
  26.                
  27. Fax:           (216) 595-0199 (Secant Technologies' fax machines)
  28.  
  29. Fido netmail:  1:157/2 to "Nick Knight"
  30.  
  31. Internet:      nick@secant.com
  32.                http://nick.secant.com
  33.  
  34. Fido Echomail: Find the Fidonet OS2PRODSUPPORT conference.  I'm there.
  35.  
  36.                Echomail messages to  me in more general conferences are
  37.                discouraged, as keeping them "on  topic" and
  38.                interesting to the masses would be difficult.  I do
  39.                read OS2, OS2PROG, C_PLUSPLUS and DR DEBUG daily,
  40.                though.  OFFLINE echo also (deals with mail readers),
  41.                this might be THE place to ask public questions, eh?
  42.  
  43.                I recently have acquired access to a host of other
  44.                networks with OS/2 conferences.  These include RIME,
  45.                SmartNet, Uninet, Intelec, Nanonet, Racenet and some
  46.                others I can't remember.
  47.  
  48. Direct BBS:    Leave a message on the Nerd's Nook BBS (1:157/2) at (216) 
  49.                356-1772, 356-1872 or 356-1431.  I check in here multiple 
  50.                times a day.  I will also keep the most recent copy of 
  51.                MR/2 posted here.  Other boards (non-local) will get 
  52.                updates at my convenience.
  53.  
  54. ******  INTERNET ADDRESS CHANGE!!!  PLEASE READ IF FTP'ING  **********
  55.  
  56. Internet FTP:  My work machine is now on the internet "full time". Ftp 
  57.                to nick.secant.com.  You can upload bugs, packets, notes, 
  58.                whatever.
  59.  
  60. **************************************************************************
  61. **************************************************************************
  62. **             NOTE:  Nerd's now supports an MR/2 conference            **
  63. **             and file area.  Conference #208 is dedicated to          **
  64. **             MR/2 support and files.  File area #45 contains          **
  65. **             MR/2-related files.  Any file uploaded into              **
  66. **             conference 208 will be placed in file area 45.           **
  67. **************************************************************************
  68. **************************************************************************
  69.  
  70.                Nerd's does support file requests (157/2 or 157/3)
  71.  
  72. Compuserve:    I check only once a week or thereabouts.  Try mail to my
  73.                user ID  - 76066,1240, although internet mail has proven
  74.                to be a faster approach.
  75.  
  76.  
  77. Changes included in v2.26
  78. -------------------------
  79.  
  80. NOTE:  Most of these changes revolve around making MR/2 more Internet
  81. friendly.  I'm using it with the MR/2 INMAK (Internet News and Mail Access
  82. Kit) for all my Usenet activity.  A couple others are, too.  This may not 
  83. be for everyone, but I'd like to know if I can find more people to provide
  84. feedback.  Any takers please email nick@secant.com.
  85.  
  86. I will probably post a "try it if you dare" setup on my web page soon.
  87.  
  88. o   Greater Chicago BBS no longer processes credit card orders for
  89.     OS/2 Shareware authors.  I am now using OS/2 Shareware BBS to
  90.     process MR/2 ICE orders, and I can also charge MR/2 Classic
  91.     registration.  I want to reowrk the registration process so that
  92.     I can email keys and/or simple letters with numeric keys.    
  93.  
  94. o   INI option not yet switchable: LongSubjects.  Turns on with Internet
  95.     Mode only right now (has applications for PC-Board use).
  96.  
  97. o   Support for long SUBJECTS started by showing in the Quick Thread
  98.     summary and in the Index.  The Index shows them at the end (right
  99.     arrow).  I have to figure out a better scheme for this.  Long 
  100.     subjects are detected when part of a Usenet header, and/or when
  101.     part of a PCBoard embedded command extension.
  102.     
  103. o   Created REXX scripts to run UQWK before and after MR/2 (after only
  104.     if replies exist).  Individual script to put replies to the news
  105.     server as a separate option.  I am now reading and replying to 
  106.     Usenet newsgroups completely through MR/2 and its interface to
  107.     UQWK.  I will add a POP3 utility shortly ...
  108.  
  109. o   Cosmetic:  fixed VC "hit" highlighting when panning the viewer 
  110.     window to the right.  I found this much more necessary a task using
  111.     the INMAK to read newsgroups, and the highlight problem was anoying.
  112.  
  113. o   Code to clean up the letter "N" often left by PC-Board BBS's at the
  114.     end of embedded long fields.  This would sometimes appear when
  115.     reply templates are expanded.
  116.  
  117. o   Sorting would often crash when a large conference was selected.  The
  118.     crash could occur when MR/2 initially opened the conference, if the
  119.     sort type was set to NOSORT, DATETIME or NUMBER.  The crashes could
  120.     also occur when resorting, if switching between any of these
  121.     three.  Fixed, or at least modified to work in almost an real-life
  122.     case.
  123.  
  124. o   Added a new search string modifier ... the tilde (~).  This, when
  125.     placed at the very beginning of a keyword, requests the match be
  126.     qualified as an "exact word match".  If the strings is embedded as
  127.     part of some other word, it will not match.  For example, searching
  128.     for the word "owl" will match "owl", but also words like "knowledge"
  129.     and "scowl".  Using the search string "~owl" will match only with
  130.     "owl" as a standalone word.  Beginning and end of line cases
  131.     are handled correctly in this mode.
  132.  
  133. o   Forwarding a message now loads the message into the editor first,
  134.     in case add-on notes are needed.
  135.     
  136. o   Some internal changes to support odd QWK headers with embedded nulls.
  137.  
  138. o   MQWK modified to support QWK packets that are padded at the end with 
  139.     0xFF's instead of the "usual" 0x0's.
  140.     
  141. o   Various other very minor fixes and optimizations.
  142.  
  143.  
  144. Changes included in v2.25
  145. -------------------------
  146.  
  147. o   The revised quoting code for Usenet replies was too aggressive ...
  148.     it actually chopped the first "paragraph" off of ALL quoting.  In
  149.     my case, it usually didn't quote the most pertinent part of the
  150.     source.  NOW, to skip the quoting of the first "paragraph", the
  151.     reply template must have the command line $SkipHeader before the 
  152.     $Body line.  This is a big enough inconvenience to release this
  153.     "quick fix".  Later, the template logic will be improved to
  154.     include all the neat little features I've added for MR/2 ICE
  155.     (the Internet Cruiser Edition).
  156.     
  157. o   Example.tf's UseNet section changed slightly - added $SkipHeader.
  158.     
  159.  
  160. Changes included in v2.24
  161. -------------------------
  162. CALL FOR BETA TESTERS:  Internet email now, newsgroups later.  A direct
  163. connection is required (SLIP, PPP, LAN, whatever).  Let me know if you
  164. want to preview this PM-based product and provide feedback.  Email me.
  165.  
  166. o   The "J" - jump to original/source message was broken when I added
  167.     the new folder stuff.  Fixed.
  168.  
  169. o   INTERNET ftp site has been changed.  Use nick.secant.com instead 
  170.     I've also registered and upgraded the ftp daemon, and the new 
  171.     version is supposed to relieve some of the access problems  users 
  172.     have had in the past. Secant Technologies is my "new" employer 
  173.     although, in reality, this is just a spin off from my old company, 
  174.     Raleigh Systems.  This means the same basic SLIP connection, but 
  175.     much less traffic over this line. In theory, it will work much 
  176.     better.  Whatever the case, I have much more control over how this 
  177.     domain is managed :).
  178.     
  179.     EVEN BETTER ... I wrote a "connection watchdog" utility that checks
  180.     the SLIP connection every 5 minutes and attempts to re-establish it
  181.     if pinging our provider fails.  I've seen this work nicely a couple
  182.     of times, which means nights and weekends ought to provide an
  183.     excellent chance to connect.
  184.     
  185.     Email can be directed more directly to me at nick@secant.com.  I ONLY
  186.     SEE THIS ADDRESS DURING THE WEEK, though.  As mentioned above, the
  187.     best approach is to send message to me at both addresses:
  188.     nick@secant.com AND nick.knight@pcohio.com.
  189.  
  190. o   Fixed a minor template problem where "new" internet email would not
  191.     copy in the TO: address supplied in the header edit form.  If no
  192.     message (i.e., a new message) or address-book entry was selected,
  193.     the "from" user was checked for an "@" sign.  In the case of a new
  194.     message, the "to" user needs to be checked.  Fixed.
  195.  
  196. o   Somewhere along the line, I fixed the 'O' command.  This again 
  197.     loads a command shell (cmd.exe) directly from MR/2.  Apparently,
  198.     Mike uses this, so I'll make sure I quit tinkering with it :).
  199.  
  200. o   Ooops.  If the new VCPriority was not specified in the INI file,
  201.     then it would default to "Normal".  Fine.  However, the "delta"
  202.     value was never initialized, causing it to be set (by default) to
  203.     zero.  This is "full normal priority".  It had too much priority;
  204.     the "old" default called for Normal, -31.  I now initialize the
  205.     delta to -31 at program startup.  
  206.  
  207. o   I started playing more seriously with UQWK and how MR/2 interfaces
  208.     with it.  I've been reading Internet news for a long time using
  209.     UQWK to create the packets.  Worked great, but I never looked into
  210.     replying.  If I wanted to reply, I'd usually see the message in
  211.     my PC-Ohio packet.  BUT, I started getting newsgroups that aren't
  212.     carried by PC-Ohio, and I found a message I *had* to reply to ...
  213.     
  214. o   Modified the way articles from USENET-declared conferences are
  215.     quoted.  Headers are now stripped from quotes.  I can make this
  216.     optional, if desired.  Just yell.
  217.     
  218. o   I modified the way initials for quoting are generated for Usenet
  219.     areas.  If I find an internet header, and the QWK from field has
  220.     an internet address in it ("@" found), I try and extract valid,
  221.     usable initials from the Internet header.
  222.     
  223. o   The example template in this release includes the code necessary
  224.     to create a COMPLETE and CORRECT Usenet news header.  This will
  225.     only work if the target system (UQWK, for example), supports the
  226.     uploading of articles with headers.  I have one little problem with
  227.     lines wrapping, but other than that, it seems to work great.
  228.     
  229. o   I modified ZTC's runtime library.  Again.  Support for the %Z
  230.     timezone variable was missing from there date/time formatting.
  231.     It isn't any more :).  I added support for %Z, which will extract
  232.     the timezone from the environment variable TZ (for example, Set
  233.     TZ=EST5EDT for eastern US'ers).  The default (if TZ isn't set)
  234.     is the eastern time zone.  I kludged in %z, and that will be
  235.     replaced by -0500 (the 5 in the TZ spec), which represents the
  236.     difference between the current time zone and GMT.
  237.     
  238. o   Ah, now the fun stuff.  I added new template variables:
  239.     @IHeaderInfo@, @SystemDate@ and @Environment@.
  240.       
  241.     IHeaderInfo must have a "parameter" passed with it.  The parameter 
  242.     string will specify an Internet message header value to find and 
  243.     insert.  For example, @IHeaderInfo:Newsgroups@ will insert the list 
  244.     of newsgroups found in the source message's header.  Any string may 
  245.     me used ... if not found, a zero length string is returned.
  246.     
  247.     SystemDate is as flexible as you can get when it comes to formatting 
  248.     the current system date and time.  You have access to ALL the 
  249.     variables a programmer has when calling the runtime library function 
  250.     strftime(). For example, the variable expression (as used in the new 
  251.     Usenet template section) "@SystemDate:%a, %d %b %Y %H:%M:%S %Z@" is 
  252.     replaced with the current date/time formatted similarly to "Sun, 01 
  253.     Jul 1995 17:20:12 EDT".  I offer the following as a quick reference 
  254.     to the % values available.  Mix and match as desired:
  255.     
  256.     Weekday name:           %a or %A    (Mon or Monday)
  257.     Current Week day #:     %w          (0-6, Sunday = 0)
  258.     Month:                  %b or %B    (Jul or July)
  259.                             %m          (2 digits, e.g., 07)
  260.     Year:                   %y or %Y    (95 or 1995)
  261.     Default display:        %c          (02-Jul-1995 17:30:12)
  262.     Default date display:   %x          (02-Jul-1995)
  263.     Default time display:   %X          (17:30:12)
  264.     Day of the month:       %d          (On July 2nd, this equals 02)
  265.     Current hour:           %H or %I %p (18 or 06 pm)
  266.     Current minute:         %M          (Minute as a 2 digit number)
  267.     Current second:         %S          (Second as a 2 digit number)
  268.     Julian Date:            %j          (Julian date, e.g., 183)
  269.     Current Week number:    %U or %W    (Sunday or Monday starts week)
  270.     Time zone:              %Z or %z    (EST/EDT or -0500 (diff GMT))
  271.  
  272.     Environment also must be complimented by a parameter.  The string
  273.     parameter will specify the environment variable to lookup up, and
  274.     whose data will be inserted.  For example, "@Environment:Comspec@"
  275.     will be replaced (on my system, at least) with "C:\os2\cmd.exe".
  276.  
  277. o   OK, I added some "pre wrapping" to the template logic.  This to
  278.     correctly format a Usenet message header before the internal
  279.     editor decides to word-wrap it incorrectly.  This logic will
  280.     actually pre-word-wrap ALL template lines.  Shouldn't (??) make
  281.     a difference.  I'll add more code if someone informs me otherwise.
  282.     
  283.     Anyway, I am now satisfied that I can correctly generate RFC-821
  284.     and RFC-1036 compliant message headers.  With this, I will quickly
  285.     throw together docs on how to use MR/2 with a direct internet
  286.     connection.  I will first support UQWK, then add SOUPER later
  287.     (still planning to support SOUP, although I don't know why).
  288.  
  289. o   Yet another template variable.  This one is @IHINDENT:n@, and was 
  290.     added mostly to aid in my formatting of Internet headers (Internet 
  291.     Header INDENT).  I don't like the way this works; it's bound to 
  292.     change.  Mentioned only because it's visible in the new Usenet 
  293.     template sections.  It's really a Second Line indent spec, and 
  294.     perhaps that's what I'll rename it to :)  Later:  added INDENT:n and 
  295.     RIGHTINDENT:n.  These can be used to increase the margins on both 
  296.     sides of quoted text, for example.  IHINDENT is a specialized 
  297.     "second line" indent and has NO USE outside of the internet header 
  298.     area.
  299.  
  300. o   I've been adjusting the internal editor, again.  I got mad when
  301.     it crashed on me, trying to import a 100K file :(.  I'm
  302.     determined to make it successfully import huge UUEncoded files.
  303.     I also want to fix the problem with marking super-long blocks
  304.     of existing text.  All of this requires reworking the internals,
  305.     with which I am now unfondly familiar.  I did improve things a bit,
  306.     but the job is not done.
  307.  
  308. o   Modified the spelling checker to recognize words with embedded
  309.     apostophies as single words instead of two pieces-parts.  I'll
  310.     adjust this code, over time, if necessary.
  311.         
  312.  
  313. Changes included in v2.23
  314. -------------------------
  315.  
  316. o   Fix for new folders logic where folder save/selects would use the
  317.     "default" folder path and ignore any FoldePath statement in the INI.
  318.     This now uses the FolderPath setting when listing folder for import
  319.     and for saving messages.
  320.     
  321.     NOTE:  I tried to allow for the importing of folders by exact file
  322.     name, in effect allowing you to list/pick folders in a different
  323.     path.  Well, the picking part went just fine, but there was a big
  324.     problem.  MR/2's internal engine simply says "if they pick a
  325.     folder conference, go to the FolderPath and open this file for
  326.     reading".  There is currently no provision for remembering folders
  327.     outside this path.  Not too difficult a fix, but not one I can
  328.     address at this moment.
  329.     
  330.     If you wish to "archive" a message and use it as the source for a
  331.     reply targetted for a different BBS, you'll have to SAVE the message
  332.     to a folder in the target BBS's folderpath.  Only folders in the BBS's
  333.     FolderPath can be imported, but a message can be saved to a new or
  334.     existing folder anywhere on your PC.
  335.     
  336.  
  337. Changes included in v2.22
  338. -------------------------
  339.  
  340. o   I found the beep-on-personals problem.  It was an interesting mistake
  341.     that would definitely cause it to work "sometimes".  Fixed.
  342.  
  343. o   Finally, I've added some control over the priority of the background 
  344.     thread that creates virtual conferences (VC's).  I once tried to 
  345.     make this an "Idle time" thread, but it often locked up the session 
  346.     on exit.  This turned out to be a conflict with pulse and other 
  347.     CPU/resource monitors. So, since day #2, this thread has run at 
  348.     "regular" priority, with a -31 delta* (the lowest "regular" setting 
  349.     there is).  It was often still too resource-hungry.
  350.     
  351.     So, for the folks that like to keep things simple, I'll tell you 
  352.     that you can now use the INI parameter VCPriority to set the thread 
  353.     priority to either NORMAL or LOW.  Low results in an "idle time" 
  354.     setting, with a +2 delta.  A default idle time setting with a delta 
  355.     of zero still locks the session on exit.
  356.     
  357.     *DELTA's are merely "fine tuning" adjustments.  They're provided to
  358.     give you a way to adjust thread priorities in finer increments.
  359.     
  360.     NOTE:  I changed the default to now be LOW.  This seems to be about
  361.     the same speed with no other activity, but the system is more snappy
  362.     when you need it to be.  Don't like it?  Add the line:
  363.     
  364.         VCPriority = Normal
  365.         
  366.     to your INI and you're back to the old setting.  This results in
  367.     normal/regular priority with a -31 delta.
  368.     
  369.     OK.  For those that like to twiddle more (others, skip to the next
  370.     dot-item :).  You can supplement the Low/Normal settings (again, for
  371.     you programmers out there, that's Idle Time/Regular, respectively)
  372.     with specific deltas.  Simple give the delta numerically, after the
  373.     category specifier, separated by a comma.  For example:
  374.     
  375.         VCPriority = Low,1
  376.         
  377.     will slow the VC thread down even more.  All settings searched a 
  378.     simple packet on my system in 22-25 seconds, except for this one.  
  379.     This one stretched the search out to 40 seconds.  Oh, sure, a value 
  380.     of ZERO will not even search, and will lock the session on exit.  
  381.     For Low priority, don't use any delta lower than 1.  For Normal 
  382.     priority, valid values are between -31 and +31, including 0.
  383.  
  384. o   Yet another VC-thing, related to the above but actually resulting
  385.     in a new VC "subfeature" :)  You can now TURN OFF all virtual
  386.     conferences defined.  Actually, you're clearing them out of
  387.     memory.  Where this comes in handy is in local INI's, where your
  388.     packets don't benefit from you "global" INI's.  You can have 
  389.     a specific local INI that first declares VC's "off", then defines
  390.     some specific VC's just for that BBS/INI combination.  So, for
  391.     example, with a little UQWK trickery and creative-INIizing,
  392.     I don't have to search the binaries and non-computer related Usenet
  393.     newsgroups for keywords that, if they are found, aren't in the
  394.     context I was looking for, anyway.  Do you know how often strings
  395.     like "MR2" and "BMR" turn up in UUEncoded binaries? :)    
  396.  
  397. o   "Subject" lines in the body of a message will no longer highlight
  398.     automatically.  I did this for myself, and liked it.  So, if you
  399.     also prefered this, simply modify your Color INI parameter.  The
  400.     5th pair of HEX numbers, if provided, will set a color for the 
  401.     SUBJECT lines.  To recreate the previous release's colors, simply
  402.     tack on the 4th (usually the last) pair of hex numbers again, to the
  403.     end of the string.  For example, my old Colors strings said:
  404.  
  405.         Colors=0F0E0AE1
  406.     
  407.     and I changed it now to:
  408.     
  409.         Colors=0F0E0AE1E1
  410.  
  411. o   MR/2 will now prompt you for confirmation when you exit.  Previously,
  412.     pressing ESCAPE on the packet select screen will cause an exit from
  413.     MR/2.  Now you are prompted to confirm exiting.
  414.     
  415.     NOTE:  this is a bit of a worry for me, as I kind of like exiting
  416.     quickly.  I will admit, I sometimes exit "by accident", but I also
  417.     like the fact that I can press ESCAPE 6-7 times from anywhere and
  418.     be assured I'm out of MR/2 withou waiting to make sure it happens.
  419.     I made prompting the new default.  If you don't like this, and 
  420.     prefer the old way (no confirmation prompt), simply modify your
  421.     MR2.INI file and add the line "ExitPrompt = No".
  422.  
  423. o   MR/2 now works better when using an external editor and NOT SAVING
  424.     your reply.  This has great benefits for those whose settings say
  425.     to edit the header ONLY BEFORE, and some benefit to the others.
  426.     MR/2 now can tell if the reply file has been changed during the 
  427.     editing process.  If it hasn't, MR/2 will not save the reply, and
  428.     will not prompt for a disposition when in AFTER mode.  Basically,
  429.     MR/2 sees no-change in the reply file as being a "cancel reply".
  430.  
  431.     PREVIOUSLY:  If the settings called for not prompting for header
  432.     info "after", MR/2 would save the reply automatically, even if the
  433.     file reflected no editing by the user.  If AFTER mode prompting was
  434.     on, MR/2 would prompt for a disposition, again, even if the reply file
  435.     was not changed.  I don't see any problems with changing this ... I'm
  436.     sure someone will let me know if they see otherwise :).
  437.  
  438. o   I added a new "feature" in response to some problems with performance
  439.     involving large reply logs.  This change can speed things up, and
  440.     if you look hard enough (with a little imagination :), you'll see
  441.     lots of potential for expanding on this.  This is a move towards an
  442.     (optional) database-type add-on.
  443.     
  444.     Anyway, you now can IMPORT replylog-type files into your list of
  445.     "Conferences w/Mail".  The InBasket and ReplyLog are both QWK-based
  446.     "folders", and you can now create your own.  This allows you to,
  447.     for example, rename a bulging ReplyLog to another name.  The
  448.     result is that you start with an empty reply log.  However, you
  449.     can still "import" and access the older reply log when/if needed.
  450.     
  451.     When you press ALT-I from the Conferences w/mail pick list, you are 
  452.     presented with a list of all *.DAT files in your BBS specific folder 
  453.     directory (note that the Inbasket and ReplyLog are suppressed from 
  454.     this list).  If you select a folder, it is added to the conference
  455.     list after the two system/automatic folders.
  456.     
  457.     Ok, so you can manually copy reply logs and InBaskets around to
  458.     create importable folders.  This has some usefulness, but only to
  459.     a limited extent, right?  You can also "file" individual messages
  460.     into an existing, or new, folder.  The '/' key now functions
  461.     as the save-to-folder command, at least until I think some more.
  462.     When you press '/' while viewing a message, you will be allowed
  463.     to select from a list of existing folders.  Pressing ESCAPE from
  464.     this list will allow for entry of a "new" folder name.  These
  465.     messages are stored in QWK format, as opposed to TEXT format used
  466.     by the 'S' key.  That means that these messages may later be
  467.     "imported" and read as another form of "virtual" conference.
  468.     
  469.     PLEASE consider this "beta"-type code.  It's new, and shouldn't
  470.     effect anything else, but it underwent very limitted testing.
  471.     I'm sure I'll improve on it greatly over the next couple of months.
  472.  
  473.     Note that you can import the same folder dozens of time.  It does
  474.     you nothing for you, though :).  There are dozens of helpers and
  475.     lots of error checking I will add.  Later.
  476.     
  477.     ---- Complex Tutorial on how to waste much of an evening :) -----
  478.     
  479.     What I did was copied my reply log (ReplyLog.Dat in my BBS specific 
  480.     sub directory off of MR/2's home path) to a "save" file. I then went 
  481.     through and marked all of my 1995 replies as "killed" (remember, I 
  482.     saved the original file).  I followed up my exiting MR/2, which then 
  483.     repacked my ReplyLog, removing all killed messages. This file now 
  484.     contained only pre-1995 replies.  I copied this file to a file named 
  485.     "ReplyLog-1994.Dat" (I work off of an HPFS drive), then copied the 
  486.     save file back to ReplyLog.Dat.  I then manually marked all of the 
  487.     pre-1995 replies in the "current" reply log as Killed and repacked 
  488.     (Actually, I first set my PurgeAfter setting to a safe number of 
  489.     days greater than the julian date, that made things quicker).  I let 
  490.     MR/2 repack the log, removing all old replies.  I now have two reply 
  491.     logs, a current/active version for 1995, and an importable file 
  492.     containing all older replies.
  493.  
  494.     I know, this begs for some automation, batch killing and even an
  495.     external packer.  As I mentioned, lots of room for expansion!
  496.  
  497.     SUPPLEMENT:  This is also great for me now, as I read/reply from 
  498.     both work and home.  I was always wanting to access replies from the 
  499.     "other" system, but had no sane way to do it, even if I happened to 
  500.     have the "other" reply log accessable.  Now, it's a simple matter of 
  501.     copying the other log to another name and updating it periodically. 
  502.     I now have a "Work's ReplyLog" at home, and visa versa.
  503.     
  504.     ----- End of tutorial!! -----------------------------------------
  505.  
  506.  
  507. Changes included in v2.21
  508. -------------------------
  509. So much for not working on the text mode version.  I knew it would
  510. happen this way - the bugs wouldn't come out until I said it was done.
  511. I probably have one more very minor update in a week or two, but I *do*
  512. plan to revist PM work starting NOW.
  513.  
  514. o   I broke RIME routed auto-addressing when I installed the Usenet
  515.     conference INI parameter.  Fixed.
  516.     
  517. o   Minor things for myself; may not be permanent.  Subject: lines in
  518.     Internet message headers are not highlighted with the "search hit"
  519.     color.  Only if *not* reading a virtual conference.
  520.  
  521. o   Modified SAVE function slightly.  If you're saving a file that starts
  522.     a UUEncoded "binary" message (or series of messages), the SAVE file
  523.     default is derived from the UUEncoded banner.  This will need to be
  524.     made optional and/or easily reversable.
  525.  
  526. o   I added code a while back to attempt to always fill the "To:" field
  527.     with something for Internet-type replies.  This has proven to be
  528.     too aggressive and has been "calmed down" a bit.
  529.  
  530. o   Just for general information:  Someone hit me with a packet that
  531.     crashed.  It contained about 9 message, but the control.dat file
  532.     described almost 6000 conferences.  I couldn't see this as a problem,
  533.     as I read a BBS with 4000+ now, with no problem at all.  Well, it
  534.     turns out to be a "sort" problem.  I currently use a binary tree
  535.     sort.  These are great for "randomly distributed" list of conference
  536.     names (a list in no particular alphabetical order), but absolutely
  537.     atrocious for pre-sorted lists.  And that's exactly what was wrong.
  538.     The conference list was, for the most part, pre-sorted.  This causes
  539.     the sort to slow to a crawl AND, with a large enough list, can 
  540.     cause a stack overflow.  (The binary tree "inorder" is recursive).
  541.     
  542.     My suggestion to this user was to set SortMasterConferences=NO.  That
  543.     solved the problem on my system, and caused no real loss of
  544.     functionality, as the list was mostly sorted, anyway.  Until I go to
  545.     32-bit and switch to a "new" hi-tech sorting algorithm.
  546.     
  547. o   I needed a new function on the packet select screen - so I added it. 
  548.     ALT-T now allows you to change the date/time stamp of a packet.  it 
  549.     defaults to 01-01-80 12:00, so as to move the packet to the bottom 
  550.     of the list (descending date sorts only).  This will keep me from 
  551.     inadvertently deleting sample packets that I want to keep for 
  552.     awhile.
  553.  
  554. o   FolderOrder would not be allowed to work correctly if used in 
  555.     conjunction with the AutoFirstKey option.  Fixed so that the
  556.     AutoFirstKey is ignored is a FolderOrder has been specified and
  557.     in fact, you are reading a folder.
  558.  
  559. o   Small fix for editor open-file error - better error handling.
  560.  
  561. o   Alt-U from the packet selection screen.  "Un Saves" virtual conferences.
  562.     Simply marks the packet with an EA that tells MR/2 to rerun VC's
  563.     next time the packet is open.  I plan on "auto detecting" the
  564.     modification of any VC definitions, and performing this automatically.
  565.     Until then, at least it's available as a manual method.
  566.     
  567. o   Ctrl-C handler.  This was a toughy.  I had the editor crap out on me
  568.     a couple of times.  Other users complained, also.  I've been trying
  569.     FRANTICALLY to figure this out.  Any and every time I went to find it,
  570.     the internal editor work flawlessly.  It got me again tonight, and 
  571.     I finally figured out why.  I started with a fresh, previously unopened
  572.     packet.  The Save VC's process, once it started, reset my CTRL-C
  573.     handler to the system default, which is to "break" when pressed.  I
  574.     now save/restore the CTRL-C state before and after.  Solved.  Sorry :(
  575.  
  576. o   Minor help file additions.
  577.         
  578.  
  579. Changes included in v2.2
  580. ------------------------
  581. I'll be in PM mode for a while now.  I'll address any bugs that pop up,
  582. but enhancements and additions will have to originate from the new
  583. MR/2 PM side, if they happen.  When I get back into text mode, I've
  584. got some big plans :).  Again, if you're interested in testing my 
  585. SOUP packet support module, please contact me.
  586.  
  587. o   '/' now defers to ReplyLog.  It used to work as a synonym for the 'D'
  588.     key (Defer message to the inbasket).  It was brought to my attention
  589.     that a user might want to save the "last" message of a reply thread
  590.     into the reply log, even though he wishes not to continue the thread
  591.     with a reply.  This made almost TOO much sense, so I added this
  592.     ability.  Simply find a message you wish to include in the replylog
  593.     and press '/'.  Now, it copies it in there, and it obviously *isn't*
  594.     from you ... so it's now more than a ReplyLog, I guess.
  595.  
  596. o   Edit Header:  I modified the fields for From, To and Conference
  597.     so that they now use "autoclear" editing mode.  Upon entering one of
  598.     these fields, if you press ANY alphanumeric key without moving the
  599.     cursor first, MR/2 will clear the field entirely before registering
  600.     your keystroke.  We'll see how folks like this ...   
  601.  
  602. o   Entry fields in general:  Well, there have been a couple of handy 
  603.     "special" keys  available within all entry fields (as in the 
  604.     Message Header Edit screen) since day one ... it just seems I've 
  605.     never documented them! I've added a couple more and modified some:
  606.  
  607.     Home, End, Cursor Left/Right  - these are obvious and "known".
  608.     Ctrl-Y or Ctrl-X - Clear the ENTIRE field's contents (delete all).
  609.     Ctrl-D or Ctrl-Z - Clear from cursor to end-of-field.
  610.     Ctrl-F or Ctrl-RightArrow - move forward to start of next word.
  611.     Ctrl-R or Ctrl-LeftArrow - move backwards to start of previous word.
  612.  
  613. o   Template variables @Internet@ and @FidoNet@ now accept a numeric 
  614.     parameter, if needed.  Some gateway addressing schemes (like the one 
  615.     at OS/2 Shareware) provide an internet email message via netmail.  
  616.     With this comes a "double FROM" line, the first being a netmail 
  617.     address, the second is the real internet address.  When MR/2 would 
  618.     go to resolve the internet address, it would see the first From and 
  619.     select this as the reply's To: target.  Wrong.  The NEXT From line 
  620.     would be the correct one to parse, but MR/2 would not look further.
  621.     
  622.     For these case, you may now plug into your template something like
  623.     @Internet:3@, where the 3 tells MR/2 to START looking at line 3 and
  624.     on.  This will solve the OS/2 Shareware problem, I think.
  625.     
  626. o   Modified the template variable resolution logic a bit.  Often MR/2 
  627.     would search an entire message to resolve a variable.  I shortened 
  628.     this for some variables, particularly Internet header vars.  The 
  629.     search STOPS at the first blank line.
  630.  
  631. o   Bug I introduced with the Usenet template section.  If reply was to 
  632.     a "Usenet" conference, it would be switched to PRIVATE by default.
  633.     fixed.
  634.     
  635. o   Internal editor:  Problem when CTRL-O was used to open a secondary 
  636.     file, and then ESCAPE was pressed with that file "current".  If the
  637.     file was not changed, the editor would EXIT, no matter what the state
  638.     of the other open file was (usually your reply, in progress).  The
  639.     reply would actually get saved to the defined ReplyFile name, but
  640.     MR/2 would not save it as a reply.  Now, ESCAPE from the "other" 
  641.     buffer handles the "other" file properly, then returns to the
  642.     original file for further editing.
  643.  
  644. -   Last minute changes - reworked this even more.  In testing, I found 
  645.     all sorts of little gotcha's involving the extensive editing of two 
  646.     files at the same time.  I'm happy with the changes I made; it will 
  647.     solve most of my own personal "lost text" situations.  I use the 
  648.     internal editor myself and I do *tons* of multiple buffer functions 
  649.     and cross pasting.  I'm sure I'll tweak this a bit more over time, 
  650.     but it looks good now.  For example, if you save or exit one file, 
  651.     and the "other" file has been changed, the editor switches to that 
  652.     window and awaits a disposition keystroke.  Previously, MR/2 
  653.     "guessed" as to what you wanted to do, usually guessing to save it.
  654.  
  655. o   By request, and another good one.  I've added the key functions 
  656.     ALT-I and ALT-N to stand for the Internet and Netmail Conferences, 
  657.     respectively, on both the Edit Header screen and the Master 
  658.     Conference Selection screen.  So, if your INTERNET and/or NETMAIL 
  659.     INI parameters are set, instead of having to remember and type in 
  660.     these number, of find the conferences in the pick-list, simply press 
  661.     ALT-I or ALT-N.
  662.    
  663.  
  664. Changes included in v2.19
  665. -------------------------
  666. Folks!  I've seen quite a few of you mention MR/2 in public echos, 
  667. pointing out its features and "sticking up" for it.  I appreciate the 
  668. support! You have no idea how good it makes me feel to see someone ask 
  669. for feature in "some other reader", only to have 2 or 3 of you respond, 
  670. "oh, you mean like MR/2 already has?".  Again, thanks!
  671.  
  672. Yes another beta.  Next week this goes out as v2.2, no matter what.  I 
  673. just had too many unconfirmed "fixed" bugs to let v2.2 out.  I'll let it 
  674. ride one more week, then let it out.  Once it's widely available, I'll 
  675. see who reports what.
  676.  
  677. o   A couple of more changes fixing message >32k and <64k.  Searching was
  678.     disrupted by any message approaching 64K.  Fixed.  Ditto with saving
  679.     them to a file.
  680.     
  681. o   Using Conferences = and text wildcards would not work correctly unless
  682.     supplied string(s) were all upper case.  MR/2 would upper case the
  683.     message's conference name for the compare, but test against the
  684.     string you supplied, in a case-sensitive manor, without adjusting the
  685.     case.  Also fixed.
  686.     
  687. o   I chased the "tagline disappears when reply is modified" problem.  I
  688.     *know* it was there, as I saw it myself.  When I tried to *make* it
  689.     happen, I couldn't.  I'll keep watching ...
  690.     
  691. o   I have preliminary SOUP format support in an "external" form.  Write to
  692.     me if interested.  It's currently read-only (no support for replies,
  693.     yet).  This won't be actually released for awhile.  I assume a long
  694.     development process to "get it right".  It will be dependable 
  695.     and productive very soon, tho, for those that want to help "test".
  696.     I may also need sample packets created by utilities other than the
  697.     one's I am using.
  698.     
  699. -   Interesting "discussion" I've been involved with on the internet. 
  700.     Specifically in news.software.readers.  The regulars in this 
  701.     newsgroup have determined that QWK readers can not and will never be 
  702.     able to post "correctly" to the Internet.  I've been disagreeing, 
  703.     often "violently" :).  Their solution?  Throw out your QWK readers 
  704.     and QWK BBS software - switch to SOUP format.  My opinion?  QWK is 
  705.     easily fixed and/or extended to work.  It's a much more practical 
  706.     solution than asking millions of PC-based users to switch to stuff 
  707.     that, for the most part, doesn't exist, or is still new and hard to 
  708.     find, if it does.
  709.     
  710.     I intend to support SOUP as far as I can.  I still have no intentions
  711.     of abandoning the QWK market.  I intend to fight their plan, in as far
  712.     as it tries to condemn QWK.  I'm not unaware of the problems with the
  713.     QWK format, and I know that the messages that *I* personally post do
  714.     not meet their RFC-1036 "standard".  I *do not* agree with the severity
  715.     of the problem, nor with their suggested, must-do-it-our-way solution.
  716.  
  717. o   Editor: Switched the meaning of CTRL-Y from "copy block" to the more
  718.     pseudo-standard meaning of "delete line".  Hopefully this will not
  719.     confuse anyone.
  720.  
  721. o   As what I'm hoping is the last effort I make to salvage long message 
  722.     (greater than 64K) with this 16-bit code, I put in "overflow" logic. 
  723.     What used to happen is that, when MR/2 encountered a message over 
  724.     its limit, a blank screen would show, the message could not be saved 
  725.     to a file ... nothing could be done with it.  VC building would stop 
  726.     dead in its tracks (and fail to find any hits past that point), and 
  727.     often index building would, also.  Now, I adjust messages >64K to
  728.     64K - 128 bytes, then "trash" the remainder, reading past it.  Again,
  729.     not "the" solution, but a much more graceful work-around.
  730.     
  731.     I've tested this with message approaching >64.  They *still* work :)
  732.     Since I have only heard reports of larger messages, I leave this to
  733.     those "reporting" to verify that it works.  It's relatively simple;
  734.     it "should" (famous last words ...).
  735.     
  736. o   A sample packet I was provided had a conference Personal (0).  This 
  737.     was a packet built by uqwk (Usenet->QWK utility).  Since I remember
  738.     this reported as a problem, I suppress the listing if the size of 
  739.     Personals is zero.
  740.  
  741. o   Well, one more big-message problem handled.  The viewer and searcher
  742.     work OK with these messages ... by ignoring anything > 64K.  Saving
  743.     these messages in their entirety is important.  The main reason, as
  744.     I see it, is that *most* message this size will probably be UUEncoded
  745.     binaries.  It's not all that important to see and/or search these
  746.     messages to the end, but saving them completely *is* important.  Hence,
  747.     I did just that.
  748.     
  749.     The only remaining problem I see is *sending* a uuencoded binary >64K.
  750.     I'm sure you can't do it at this time.  I'll see how hard this is to
  751.     address.
  752.     
  753. -   NOTE that this version of MR/2 handled a QWK packet created from a
  754.     SOUP packet with HUGE messages.  The packet contained 5 messages with
  755.     UUEncoded graphic images ranging in size from 133,201 to 179,907 bytes
  756.     each (message size as reported by the SOUP format; QWK size would be
  757.     a tad bigger).  These messages could be viewed, although, only the 
  758.     first 64K showed up.  These messages *did not* disrupt searching, or
  759.     any other "normal" function.  AND, I successfully converted ALL of
  760.     these UUEncoded images to their graphic form by saving them to a 
  761.     text file and using a UUDecode utility on each.  All messages saved
  762.     to text files completely and error free.  This was not possible
  763.     before this release.
  764.  
  765. o   Moved the default MR2INI.ORG "ReplyFile" specification back to the 
  766.     MR/2 "home" directory.  I realized that just using "Reply.Msg" caused
  767.     MR/2 to see an open packet WITH replies, even if no reply had been
  768.     saved.
  769.     
  770. o   I attempted to offer some "crash recovery" from within the internal 
  771.     editor.  I can't be the only person occasionally losing work because 
  772.     of seemingly unrecreatable crashes :(.  I discovered recently, after 
  773.     ALMOST losing an hour or two of work, that much of the text exists 
  774.     in either the REPLYFILE or a file called TEMP1.TXT in the work 
  775.     directory.  My first attempts to automatically salvage these files 
  776.     is less than satisfactory.  I do plan on bettering this, tho.  I 
  777.     may switch recovery efforts to keystroke recording, so that changes 
  778.     can be "replayed" upon any kind of crash.  We'll see.  Perhaps a
  779.     periodic auto-save feature.
  780.  
  781.  
  782. Changes included in v2.18
  783. -------------------------
  784.  
  785. o   Mostly unoptimization and squashed a couple of obscure bugs.  I
  786.     turned off optimizations anywhere seemingly "critical" code was
  787.     being performed.  I kept the generation of 286+ code on everywhere.
  788.     This in an attempt to squash the last of these incorrect highlighting
  789.     in virtual conference bugs.  I have been unable to recreate these
  790.     at all. I have one user reporting this problem and have heard
  791.     nothing else about it from others ... 
  792.     
  793.     Question:  Is anyone else experiencing the miss-highlighting of words
  794.     in virtual conferences?  Ok, if you *were* having this problem, does
  795.     it still occur using this release?  Please, if you feel up to it,
  796.     let me know EITHER way, via private mail only.  Responding publicly
  797.     in echod conferences on a individual basis is discouraged.
  798.  
  799. -   UPDATE:  I may have found it.  It turns out that there *is* a problem
  800.     when a user sets PositionOnMatch to NO.  It was an easy one to fix,
  801.     once I saw it, and that one's gone.  I'm not positive this was *the*
  802.     problem, but it was very similar to what was described.  I'll wait
  803.     for confirmation ... :)
  804.     
  805. o   Wrote a message base reorganizer; this after a one user's reply log
  806.     became corrupt.  Even though his reply log contained several hundred
  807.     messages, only 9 would show within MR/2.  This was because there were
  808.     2048 bad "blocks" between the 9th message and the next good one.
  809.     
  810.     While I can't explain what happened, this new utility reorganized the
  811.     corrupt file and allowed the rest of the messages to be accessed.
  812.     It is a relatively simple utility.  It walks through the messages,
  813.     checking the header, then reading the defined number of message
  814.     blocks, copying these to a second file.  If a header is read that is
  815.     determined to be invalid, the utility scans ahead until the next
  816.     valid header is found.  It then continues to copy messages.  There
  817.     is much information written to the screen, including a summary line
  818.     for each message, and statistics at the end of the run.
  819.     
  820.     This utility can be used to repair QWK "message" type files such as
  821.     Messages.dat, BBsname.rep, InBasket.Dat and ReplyLog.Dat.  The most
  822.     obvious use for it is in repairing the two MR/2 specific files.
  823.  
  824.     This utility, while small, is not included in the distribution zip.
  825.     It will be posted locally (Nerd's Nook) and at my internet ftp site,
  826.     and will be available via uuencoded email "on request".  It has just
  827.     too limited a use to be shipped everywhere, all the time.  That's
  828.     my opinion, at least.  I'm open for a discussion, if anyone sees fit.
  829.  
  830.     FILE:  FixDat.Zip, about 13k.
  831.     
  832. -   Perhaps, when all is said and done, I'll separate out the little
  833.     utilities into a "MR2UTIL.ZIP" kit.  Since they will rarely be updated
  834.     (or at least at a slower rate than the main program :), this might make
  835.     sense.
  836.  
  837.  
  838. Changes included in v2.17b,c
  839. ----------------------------
  840.  
  841. o   Backed out a large number of the compiler optimizations I had tried
  842.     since v2.12.  As more and more of these little bugs were apparently
  843.     caused by faulty optimizations, I made the call that whatever very
  844.     minimal speed difference they make just wasn't worth the bugs.
  845.     I will be switching compilers very soon, anyway.
  846.  
  847. o   Big boo-boo on my part.  MR/2 can now read larger message, although
  848.     still limited to <64k.  Due to some lousy integer-based math, reading
  849.     messages > 32K would fail (giving you the no-message, blank screen).
  850.     I've fixed the math, and found that "most" UUENCODED messages in my
  851.     test packets can now be read.  It's isn't "the" answer, but it sure
  852.     will help.  This has been unnecessarily limited since day one.
  853.  
  854.  
  855. Changes included in v2.17a
  856. --------------------------
  857. A couple of quick bug fixes ...
  858.  
  859. o   HideConferences once again works.  It was a silly error on my part.
  860.  
  861. o   Welcome screen backdrop was flackey.  I don't know why, exactly, but
  862.     it had something to do, once again, with Zortech's optimizations.
  863.     I'm beginning to badly distrust the optimizer, and may undo some of
  864.     the remaining switches on critical modules.
  865.  
  866. o   And MR/2 keeps getting smarter :).  I had a brainstorm ... I can now
  867.     solve the problem with BBS's that have both Netmail and Internet
  868.     email going into the same directory.  If Internet and Netmail are
  869.     defined as the same directory, and you switch a reply into this
  870.     directory, MR/2 will first check to see if it originated in a
  871.     defined Usenet conference.  If it did, it gets an Internet section
  872.     from the template.  If not, or the Usenet parameter has not been
  873.     set, then the source message is tested for the existence of an
  874.     Internet-style Message ID.  Again, if there is one, the reply gets
  875.     created with an Internet template.  Otherwise, a Netmail template is
  876.     used.  I think this will be extremely accurate.
  877.  
  878.     Ok, for the users that this may help:  Does this solve the whole
  879.     problem?  Do you need the ability to create a Fidonet netmail
  880.     address in Internet form?  Please let me know.  Maybe I'll create an
  881.     @IFidonet@ variable, and/or give you access to the pieces-parts
  882.     as individual variables.  Heck, I'll do this anyway :)
  883.  
  884. o   Ok, I added another @variable: @IFidonet@.  This is the internet
  885.     form of the current message's fidonet address.  For example, if
  886.     replying to a message from me, @IFidonet@ would be replaced with
  887.     "f200.n157.z1".  With this, it will be easy to set up a template
  888.     that will route fidonet mail through the internet.  A template
  889.     section example will follow in the next release.  My full Fidonet
  890.     address via the internet is "nick.knight@f200.n157.z1.fidonet.org".
  891.  
  892.  
  893.  
  894. Changes included in v2.17
  895. -------------------------
  896. Enough small problems still exist in the new search logic to keep
  897. calling this a "beta".  For those that have reported problems, please
  898. make sure you report them again if they still occur (thanks!).  Still
  899. left to do for the v2.2 release:  Folder packing - scan for, warn about
  900. and remove malformed sections.  Possibly expand maximum search string
  901. and allow multi-line INI definitions.  Small enhancements to MQWK,
  902. including adding support for multiple archivers.  Maybe a few others...
  903.  
  904. o   Searching once again enhanced!  Marc Bourassa came up with a great
  905.     idea that I had overlooked ... being able to actually include
  906.     conference selection criteria in a search string.  This allows for a
  907.     VC that "includes all message from conferences that contain OS2 in
  908.     their name, and add all mention of OS/2 in conferences that don't."
  909.     Basically, conference specifications can be used just like any other
  910.     keyword in a criteria string and can be AND'd or OR'd as desired.
  911.     For example:
  912.  
  913.         String = {C}"*OS2*"
  914.  
  915.     This example (when found as part of a complete MakeConference set)
  916.     tells MR/2 to include all messages that are in conferences that
  917.     have the string "OS2" anywhere in their name.
  918.  
  919.  
  920.         String = {C}"*OS2*" | (!{C}"*OS2*" & OS/2)
  921.  
  922.     This example tells MR/2 to include all messages that are in
  923.     conferences that have the string "OS2" anywhere in their name OR
  924.     if OS2 is NOT part of the conference name, include the
  925.     message if it contains the keyword "OS/2".
  926.  
  927.  
  928.         String = !{C}"*OS2*" & OS/2
  929.  
  930.     This example tells MR/2 to include all messages that are NOT in
  931.     conferences that have the string "OS2" anywhere in their name AND
  932.     ALSO CONTAINS the keyword "OS/2".
  933.  
  934.  
  935.         String = !{C}"*OS2*" & !{C}"OS-*" & {SB}OS/2
  936.  
  937.     This example tells MR/2 to first EXCLUDE all messages that are in
  938.     conferences where OS2 is anywhere in the name, and then also EXCLUDE
  939.     messages from conferences that START with "OS-" ("OS-DEBATE", for
  940.     example, would be excluded).  All message NOT EXCLUDED will be checked
  941.     for the keyword "OS/2" in the SUBJECT or the BODY of the message
  942.     (simple tearline detection is applied, and if identified, the tearline
  943.     denotes the logical end of message).
  944.  
  945.  
  946.         String = !{C}"*OS2*,OS-*" & {SB}OS/2
  947.  
  948.     Logically identical to the previous example, but in my opinion
  949.     a little less "intuitive", if any of this is at all :).
  950.  
  951.     NOTES.  The "Conferences" line is still fully functional, and in
  952.     fact, superceeds these "embedded" commands.  If you specify an
  953.     old-style Conferences line, and the message doesn't fit into this
  954.     specification, the message will not even make it to the processing
  955.     of the search string.  If you want to check ALL message and have
  956.     the search string dictate the full set of criteria, leave the
  957.     "Conferences=" line out completely, or manually specify the default
  958.     of "Conferences = *".
  959.  
  960. o   I noticed that under NO-QWK message entry, portions of previously
  961.     opened packets still might linger.  Now, work directory is scrubbed
  962.     before building message-entry environment.
  963.  
  964. o   Removed compiler optimizations from template file appending code.
  965.     It was interferring somehow.  If you would "write new" to an address
  966.     that used a tempalte section, then went in and wrote a second (even
  967.     to the same address), second message would start completely blank.
  968.     With optimizations turned off, this now works fine.  Go figure.
  969.  
  970. o   Editor bug:  Ctrl-O to open a file, type in an illegal file name or
  971.     specify a directory that didn't exist, MR/2 would lock up.  File
  972.     system errors caused an infinite loop when opening an file for
  973.     editing.  Now it beeps and returns to the file name prompt.  No
  974.     error message is provided yet, but I think it's pretty obvious, and
  975.     it's certainly better than locking up.  I was bitten by this twice
  976.     just this week, losing parts of a reply :(
  977.  
  978. o   You may now use the UseNet INI parameter to identify a list of
  979.     conferences that are Internet-based "Usenet" newsgroups.  The
  980.     benefit of this is that, when replying, MR/2 will now attempt to
  981.     access the new Usenet/NewUsenet template sections for the reply.
  982.     If not found, the default section is used.  This allows for
  983.     Usenet-targetted replies to use their own unique boilerplate.
  984.     A couple of new reply-time variables have also been added ...
  985.  
  986. o   The "Usenet" INI parameter follows the same rules as the old
  987.     HideConferences parameter, whose workings have changed just a little
  988.     :).  HideConferences previously was able to handle ONLY a list of
  989.     simple numeric values delimitted by commas.  It now uses the
  990.     "Conference matching" logic of searches.  That is, you may specify
  991.     single conference numbers (old lines need not be changed, I've just
  992.     added additional possibilities), ranges and/or wildcard strings to
  993.     compare against conference names.  For example:
  994.  
  995.         HideConferences = 7,93,99,100-163,*forsale*
  996.  
  997.     There can be multiple Usenet and HideConferences lines in any INI,
  998.     the lines are effectively accumulated so that MR/2 sees one line for
  999.     each INI keyword containing all data from each of the individual
  1000.     corresponding lines.
  1001.  
  1002.     For my setup, specifying Usenet conferences was easy ... they are the
  1003.     ONLY conferences I read that contain a "." in the conference names as
  1004.     supplied by my BBS, and I read no other conferences with a dot in
  1005.     the conference name.  Hence, my totally functional Usenet INI line
  1006.     is:
  1007.  
  1008.         Usenet = *.*
  1009.  
  1010.     An alternative might be something line "Usenet=comp.*,alt.*,cle.*"
  1011.  
  1012.     Remember, this isn't a file name match ... it's simply a pattern
  1013.     matcher, so this matches any conference name with a dot anywhere
  1014.     within its name.  One day I'll fully document the wildcard pattern
  1015.     matched and all of its supported features :)
  1016.  
  1017. o   @IMessageID@ and @IReferences@ have been added to the reply-time
  1018.     variable list.  You may include these in any template section.
  1019.     They will be resolved at reply-creation time to the source Usenet
  1020.     "Message ID" and "References" line, respectively, as derived from
  1021.     the source message's header area.  This may help with the claim of
  1022.     several Internet hard-heads that MR/2 is "breaking" threads.
  1023.  
  1024. o   Usenet and NewUsenet template sections added to the default
  1025.     "example.tf" file.  Existing users that already have a working
  1026.     template file can cut these files from the example file and paste
  1027.     them into their working template file.  The reply template for
  1028.     Usenet will create a basic Usenet-style header area that includes
  1029.     the "References:" line that some Internetters are complaining
  1030.     is absent from most QWK messages.  PC-Ohio seems to place these
  1031.     in the message correcly, without any help from the mail reader.
  1032.  
  1033.     ALSO, the `Forward` header section of the example template was
  1034.     modified slightly.  The "~" symbols meant to suppress word wrap on
  1035.     short lines never really did serve the purpose well.  What else
  1036.     suppresses line rewrap?  Blank spaces at the beginning of the next
  1037.     line.  So, each of the three lines in the Forward section have been
  1038.     indented a single space. Users can make the same or a similar change
  1039.     to their own template file, if desired.
  1040.  
  1041.     I'd love to figure out what Fidonet is doing to rewrap messages so
  1042.     horribly.  Then I'd like to find a fix.  Oh well, I guess we'll all
  1043.     have to live with nasty-looking messages for awhile.
  1044.  
  1045. o   John Bales reported a problem where certain NOT-type searches, were
  1046.     causing trouble; usually reporting "first failed-0" errors.  It
  1047.     turns out that MR/2 was checking the very last sector of the packet
  1048.     as a message.  Usually this sector consists of all NULL characters,
  1049.     and when comparing for the contents of a string, would always fail.
  1050.     If you're checking for the ABSENCE of a strings, as is possible now,
  1051.     it will always match.  It was seen as a message header (with no
  1052.     body) that matched any NOT comparison.  This would always give you
  1053.     one more NOT match than you really had, and trying to read that last
  1054.     message would cause the error <deep breath :>. Fixed.
  1055.  
  1056. o   Reworked SaveVCs.CMD to work with multiple archivers.  I will let
  1057.     this out as-is, but there are some complications.  I have tested it
  1058.     with PKZip, InfoZip, Arj and LH/2.  The problem is that ONLY PKZip
  1059.     and Arj seem to have options that preserve the date/time stamp of
  1060.     the original archive when updating.  This means that InfoZip and
  1061.     LH/2 actually set the date/time of the packet to the current
  1062.     system time when repacking.  Not good.  I still have to test with
  1063.     Zoo, DOS Arc and DOS LHA, but this is just busywork, and I believe
  1064.     these are rarely used.  This script also detects packets with
  1065.     "long names" and applied logic that allows for DOS-based archivers
  1066.     to access the file.
  1067.  
  1068.     Using REXX, I see I can get a file's date/time stamp easily
  1069.     enough ... I just don't see how to change it from within REXX.
  1070.     If anyone knows how to do this, it might save me some grief.
  1071.     Otherwise, I get to write this touch utility that will do
  1072.     nothing but accept a lone file name and a REXX-format date/time
  1073.     string and set the file's date/time to that.
  1074.  
  1075. o   OK, I wrote an extremelly simple "touch" utility, which is included
  1076.     in this zip.  It has no features or options other than what I
  1077.     needed, and totals 7k in size.  No docs, as it is meant ONLY to
  1078.     solve the problem of timestamps being changed by saveVCs.cmd.
  1079.     "sfiledt.exe" will be in your MR/2 directory and SaveVCs.cmd will
  1080.     now make use of it, when found.
  1081.  
  1082.  
  1083. Changes included in v2.16
  1084. -------------------------
  1085.  
  1086. o   Internal:  Repackaged the INI data and file loading routines into a
  1087.     C++ class.  Previously these were just a growing collection of
  1088.     public/global variables and some odd-ball routines.  I need the
  1089.     ability to save a single packet's working "environment" as a unit
  1090.     for MR/2 PM (to allow multiple working environments :), so this is
  1091.     the ticket.  No functionality added, but due to the large amounts of
  1092.     code and macro-ugliness I created, bug-potential is above average.
  1093.  
  1094. o   Further enhancements to the text-string search function.  Support
  1095.     for selecting message-specific areas to check within a search
  1096.     specification.  For example, you can now ask for all message that
  1097.     have "OS/2" in the SUBJECT field, but not in the message itself.
  1098.     You may tag any word, or set of words within matched parenthesis,
  1099.     with a set of areas to test.  The default is to test all parts of
  1100.     the message.  For example:
  1101.  
  1102.     {S}OS/2                 Matches "OS/2", only checking SUBJECT
  1103.  
  1104.     {F}"Jim Gilliland"      Finds ONLY message FROM Jim Gilliland
  1105.  
  1106.     {M}"Tim McClanahan" & !{FT}"Tim McClanahan"
  1107.  
  1108.                             Finds references to Tim McClanahan
  1109.                             inside any message text, but excludes
  1110.                             messages FROM or TO him.
  1111.  
  1112.     {S}(MR/2 | MR2 | MR-2)  Matches any of these three strings when
  1113.                             they exist in the SUBJECT field.
  1114.  
  1115.     {Conclusion}            Probably won't find what you want :)
  1116.  
  1117.     "{Conclusion}"          Probably is what you want.  Finds any
  1118.                             occurence of the word "Conclusion" that
  1119.                             is enclosed between curly-brackets.
  1120.  
  1121.     Valid areas are From, To, Subject, Message, Body and Origin,
  1122.     represented by the letters F, T, S, M, B and O, respectively.  The
  1123.     Message section consists of the Body AND the Origin, which are
  1124.     separated by the tearline (if MR/2 can find it :).  When in doubt,
  1125.     MR/2 calls all of the message "Body".
  1126.  
  1127.     I think I'm done with the searching enhancements.  The only thing I
  1128.     can think to add is selection of conferences to search for the
  1129.     ALL-CONFERENCES real-time searching.  I rarely use this anymore, and
  1130.     I think that this process belongs elsewhere.  Maybe later, but I'm
  1131.     putting this on the super-duper low priority list.  I joked about
  1132.     supporting proximity searches in the Fidonet OS/2 echo.  Really, I
  1133.     *was* just joking! :)
  1134.  
  1135.  
  1136. Changes included in v2.15
  1137. -------------------------
  1138.  
  1139. Still a beta.  I'll call v2.2 a "real" release.  In the meantime, I'll
  1140. continue to poke with large, currently-working features :)
  1141.  
  1142. o   Had to modify the messaging-viewing support code to handle much longer
  1143.     search strings.  Most routines had support for 80-100 character match
  1144.     strings, and MR/2's search engine now allows 255 characters.  If you
  1145.     used a longer string, many strange things would happen.  Seems to
  1146.     work now.
  1147.  
  1148. o   I massively modified the VC file handling system.  Again.  I tested
  1149.     fairly thoroughly, and my time trials showed an extremelly minimal
  1150.     improvement.  Considering all that I did, I'm pretty dissappointed
  1151.     :(. BUT, my system is massively-double-cached ... meaning I have
  1152.     large OS/2 disk caches, on top of a caching IDE controler with 4 MB
  1153.     of cache RAM. Hopefully there are some *real* improvements resulting
  1154.     from this, and my machine's just not the best for showing these.
  1155.     Details follow.
  1156.  
  1157. o   Modified the string matching logic added in v2.14 to be more efficient.
  1158.     Some work on the conference matching parser also.
  1159.  
  1160. o   Changed the VC process so that it opens a large-buffered FILE structure
  1161.     instead of sharing the main process's open, raw file handle.
  1162.  
  1163. o   Changed the way VC index files are opened and written too.  Previously,
  1164.     only one index file could be open at a time, and a process of closing
  1165.     the current one and opening the "next" one in append mode was used.
  1166.     I now open each index file once and it remains open until all VC's are
  1167.     built.  I then close ALL index files at this time.  Index files were
  1168.     converted to use raw file handle output as opposed to the previous
  1169.     buffered-stream mode.  I dynamically change the maximum allowed count
  1170.     of file handles to facilitate this change.  If this fails, the old
  1171.     method is used as a backup.
  1172.  
  1173. o   When building of virtual conferences is complete, MR/2 now invoked the
  1174.     command file "SaveVCs.CMD", if it exists in the MR/2 home directory.
  1175.     The current version of this cmd file pkzip's ALL modified NDX files
  1176.     back into the original packet.  This happens as a BACKGROUND process,
  1177.     invoked using the "start /b /c" command.  This has two benefits:
  1178.  
  1179.     Virtual conference NDX files are saved with the packet, so that VC's
  1180.     are built only once per the life of the packet.  Any subsequent
  1181.     opening of this packet will already have the VC structure intact and
  1182.     available for instant reading.
  1183.  
  1184.     Packets without NDX file altogether will now have ALL MR/2-created
  1185.     NDX files saved for subsequent opens.  For example, the QWK packets
  1186.     produced by MR/2's MQWK packet merging utility do not include NDX
  1187.     files.  Each time you would open a packet created with this utility,
  1188.     MR/2 would build the NDX files from scratch.  This is now required
  1189.     ONLY the very first time the packet is opened.
  1190.  
  1191.     NOTES:  If the command file processing fails, the only harm should be
  1192.     that the NDX files are missing from the QWK packet.  That's no
  1193.     different than what happened previously; MR/2 will just try again the
  1194.     next time the packet is opened.
  1195.  
  1196.     If this new system is undesirable for any reason, simply remove (delete)
  1197.     "SaveVCs.cmd" from the MR/2 directory.
  1198.  
  1199.  
  1200.  
  1201. Changes included in v2.14
  1202. -------------------------
  1203.  
  1204. BETA!  Everything here is very new and, although, I've been using it every
  1205. day, is bound to have a problem or two.
  1206.  
  1207. NOTE:  Old VC strings may not work as they used to.  It's IMPORTANT and
  1208. very simple to fix this ... Make String = \word1\word2\word 3 into
  1209. String = "\word1\word2\word 3" and all will work as it did in the past.
  1210. Only strings containing embedded spaces need to be wrapped in quotes.
  1211.  
  1212. o   I *think* I have a personal internet FTP site set up on my machine! :)
  1213.     See "Contacting the author", above.
  1214.  
  1215. o   Previously, the bbsname.cfg file for a specific BBS was overwritten
  1216.     with a packets control.dat file, regardless of the age of the
  1217.     packet being opened.  If the packet was a year old, that BBS would
  1218.     then have a year old CFG file saved for it.  MR/2 now copies only if
  1219.     the "new" file has a newer date than the existing file.
  1220.  
  1221. o   Modified the Virtual Confenence builder's "Conferences" command to
  1222.     accept both ranges and text wild card strings.  For example,
  1223.     the following Conferences commands will now work:
  1224.  
  1225.         (NULL) or *             All conferences
  1226.         1,2,3,4                 1 2 3 or 4
  1227.         1-4                     1 through 4
  1228.         1-4,100,200,1000-       1->4, 100, 200 or 1000 and greater
  1229.         -1000                   through 1000
  1230.         alt*,comp*              all named starting with alt or comp
  1231.         !200,alt*,comp*         all named starting with alt or comp
  1232.                                 EXCEPT 200
  1233.  
  1234.         !200-300,!17,alt*,comp* starting with alt or comp EXCEPT 200-300
  1235.                                 and 17 EXCEPTIONS SHOULD COME FIRST as
  1236.                                 first "match" terminates the check
  1237.  
  1238.         *.*                     any confernce with a dot in its name
  1239.         17,254,alt.*,comp.*     all alt/comps and conferences 17 and 254
  1240.         *-R, *-F                All conferences ending in -R or -F.  For
  1241.                                 PC-Ohio, this would be all RIME or FIDONET
  1242.                                 conferences, respectively.
  1243.  
  1244.     "Negatives" are available to exclude certain conferences by number or
  1245.     name.  As the above states, negatives or excluded conferences should
  1246.     be listed first, as the first criteria the conference fits in causes
  1247.     the routine to cease checking.  For example:
  1248.  
  1249.         !100-150,1-1000
  1250.  
  1251.     will include conferences 1 through 99 and 151 through 1000.  Any
  1252.     conference from 100 through 150 will fit the first catagory, which is
  1253.     negated/excluded, so messages in these conferences will NOT be included.
  1254.     However:
  1255.  
  1256.         1-1000,!100-150
  1257.  
  1258.     This will include all conferences 1 through 1000.  Since any message
  1259.     in the range 100-150 will first qualify as a match for the first range,
  1260.     the second range will never cause a message to be excluded.  The first
  1261.     example is the correct way to exclude conferences.
  1262.  
  1263.     NOTE:  The support of ranges and wildcards has caused a slowdown in the
  1264.     creation of VC's.  While "minimal", I plan to add some code to support
  1265.     original-style Conferences commands using the old method.  The most
  1266.     efficient commands will consist of singular numbers.  Next in up in
  1267.     efficiency would be numeric ranges.  NOTE that, where large ranges are
  1268.     concerned (more than 50 conferences?), this is more efficient than
  1269.     individual listings.  Finally, wildcard and/or text-strings matches
  1270.     are CPU-intensive, and will cause slower VC building.  Still, the
  1271.     flexibility offered by wildcards and numeric ranges far outweigh
  1272.     the "small" cost in performance.  The decision is left to you.
  1273.  
  1274.  
  1275. o   Boolean match logic is now available for both virtual conferences
  1276.     and real-time (F, ALT-F) searching.  The "old" method of or'ing
  1277.     strings together is still supported, although I'm having some
  1278.     problems with this.  Perhaps an INI variable later ...
  1279.  
  1280.     Keywords can be OR'd together, AND'd together and/or NOT'd.  In
  1281.     addition, parenthesis can be used to control the evaluations of
  1282.     the test.  There is also an operator that will match a word,
  1283.     remaining sensitive to case.  I've also added support for quoted
  1284.     strings so that spaces and the special boolean operator symbols
  1285.     can still be searched for.  Some simple examples:
  1286.  
  1287.         (OS/2 | OS2) & !WARP    (OS/2 or OS2) and not warp
  1288.         Windows & OS/2          Windows and OS/2
  1289.         Windows | OS/2          Windows or OS/2
  1290.         ^warp                   warp, but ONLY if all lower case letters
  1291.  
  1292.     The "operator" symbols follow the conventions used by C and C++ for
  1293.     boolean operations:
  1294.  
  1295.         &   is the AND operator
  1296.         |   is the OR operator
  1297.         !   is the NOT operator
  1298.         ()  cause the expression inside to be
  1299.             evaluated as a single expression.
  1300.  
  1301.     and one other that I added:
  1302.  
  1303.         ^   causes a case-sensitive match to be performed.
  1304.             The word that follows must be found with
  1305.             matching capitalization to be concidered a
  1306.             "match".
  1307.  
  1308.     The following will find all messages that contain one of two
  1309.     different words referencing OS/2 that also mentions "bugs".
  1310.     if the message doesn't match under this criteria, then it is
  1311.     tested for the words "Windows" and "slow" in the same messages:
  1312.  
  1313.         ((OS/2 | OS2) & bugs) | (Windows & slow)
  1314.  
  1315.     The following is somewhat similar.  It will also find all messages
  1316.     that contain one of two different words referencing OS/2 that also
  1317.     mentions "bugs".  If the message is found to match, then it is
  1318.     tested for the words "Windows" and "slow" in the same messages.
  1319.     If these words are both found, however, the message is eliminated
  1320.     (compliments of the "!" NOT operator):
  1321.  
  1322.         ((OS/2 | OS2) & bugs) & !(Windows & slow)
  1323.  
  1324.     When MR/2 displays a message that has bee "found", all words
  1325.     contained in the match string will be highlighted.
  1326.  
  1327.     A few more examples:
  1328.  
  1329.         ObjectPM | "Object PM"      spaces are ignored unless witin quotes
  1330.  
  1331.         "R&D"                       operator characters must be in quotes
  1332.                                     if part of a search string.
  1333.  
  1334.         R&D                         finds the single letters R and D,
  1335.                                     anywhere in the message.  This *isn't*
  1336.                                     what you want!
  1337.  
  1338.         "(ch | 0xFF)"               more special characters within quotes.
  1339.                                     The operator characters will be treated
  1340.                                     as any other characters.
  1341.  
  1342.         """Windows"""               Looks funny?  It will find the Windows
  1343.                                     in message but only if between quote
  1344.                                     marks.  Two quotes together are treated
  1345.                                     as a single " mark, but they must still
  1346.                                     be part of an entire quoted string.
  1347.                                     Tricky?  Maybe.  Just know that ...
  1348.  
  1349.         ""Windows""                 WILL NOTE WORK, and that ...
  1350.  
  1351.         "can you say ""neighbor""?" will find the prase 'can you say
  1352.                                     "neighbor"?'  The word neighbor mus be
  1353.                                     within quotes to be concidered a match.
  1354.  
  1355.         "&Windoze"                  Soundex search for anything sounding
  1356.                                     similar to "Windows".
  1357.  
  1358.         ^warp | phasers             Looks for the word "warp" in all lower
  1359.                                     case ONLY, or the word "phasers"
  1360.  
  1361.         ^NT | ^Nick                 Looks for the capital letters "NT" or
  1362.                                     the string "Nick" where only the N is
  1363.                                     capitalized.
  1364.  
  1365.     MAXIMUM seach criteria length for VC's is 256 bytes (after the "="
  1366.     marker).  All must be on a single line.  Nesting is supported
  1367.     further than anyone will need it (limitted only by stack space).
  1368.     Other ideas are in head ... let me know if you come up with any
  1369.     handy and/or clever ideas :)
  1370.  
  1371. o   The old stuff.  I've got all of my old w1\w2\w3 strings working
  1372.     as-is, but there were problems with embedded spaces that used to
  1373.     be seen as significant parts of the string.  They aren't any more.
  1374.     To get search strings that include spaces to work, simply wrap the
  1375.     ENTIRE string inside quotes.  For example:
  1376.  
  1377.         String = "TekRam\DC-6\DC6\Promise\Caching IDE"
  1378.  
  1379.     These will probably be "unsupported" quickly, as they're part of the
  1380.     reason that performance is down (checking for or's in two places now).
  1381.  
  1382. o   Expands the FIND criteria entry forms to hold much longer search-for
  1383.     strings.  I also saw that this was another case where light red on
  1384.     white was being used.  Changed to dark-red on white.  Much easier to
  1385.     see!
  1386.  
  1387. o   The mouse, when set in single-click mode was totally unusable with
  1388.     selection lists.  Fixed.
  1389.  
  1390. o   NOTE that my tests show that I've slowed down the creation of virtual
  1391.     conferences by 10-20%.  I have applied several optimizations and
  1392.     rearranged, and this has helped.  I see room for a couple of major
  1393.     performance enhancements, and those will be applied next.
  1394.  
  1395.  
  1396. Changes included in v2.13
  1397. -------------------------
  1398.  
  1399. o   Help screen for the editor was STILL missing the ALT-* (paste)
  1400.     key combination.  Added.
  1401.  
  1402. o   Lots of questions about FolderOrder.  Past Docs don't clearly state
  1403.     all the possibilities.  MessageOrder and SortOrder can have values
  1404.     of:  Subject, DateTime, From, To or MessageNumber.
  1405.  
  1406. o   SplitLongReplies = YES would not work ... you would have to specify
  1407.     a line count, otherwise the response was read as NO.  Fixed.
  1408.  
  1409. o   I spent quite awhile with a user, trying to figure out why his
  1410.     internet replies weren't working correctly (they weren't using the
  1411.     INTERNET template, although all appeared to be setup correctly).
  1412.     Turns out he had HeaderEditing set to AFTER.  This usually won't
  1413.     work.  I now check for this conflict and change HeaderEditing to
  1414.     BOTH if either INTERNET or NETMAIL conferences have been specified.
  1415.     I *do* post a warning on the first message of each session, and
  1416.     explain how to remedy this.  There is still a potential problem with
  1417.     RIME routing (no way to specify PRIVATE before a reply to a public
  1418.     message is created with HeaderEditing set to BEFORE), but this is
  1419.     more difficult to detect.  I will create and post on Nerd's a
  1420.     "How to ..." document.  This will save me a ton of time in the
  1421.     future, as most of my support efforts have been in this area.
  1422.     When questions arise, I'll simply send this boilerplate as a
  1423.     message.
  1424.  
  1425. o   More minor example template tweaks.  Removed a couple of lingering
  1426.     references to my last name, added another example of a netmail
  1427.     routing line.  There are now three routing lines for a netmail
  1428.     message, *one* of them should be correct (most cases should be
  1429.     covered).
  1430.  
  1431. o   ADD/DROP was broken due to the change to 5-digit conference support.
  1432.     Fixed this ... hopefully that's the last bug caused by this change.
  1433.     I also cleaned up the ADD/DROP prompt (conference name was 1 char
  1434.     off ... cosmetic, all related to the 5-digit change).
  1435.  
  1436.  
  1437. Changes included in v2.12
  1438. -------------------------
  1439.  
  1440. o   Editing a reply and saving it would (sometimes) cause a crash
  1441.     when the reply conference was exitted.  This was non-destructive;
  1442.     the reply would be OK, it was a function of the new sorting that
  1443.     was slightly off.  Fixed.
  1444.  
  1445.  
  1446. Changes included in v2.11
  1447. -------------------------
  1448. BETA as far as I'm concerned.  Seems to work just fine for me, but I
  1449. changed lots of basic, its-been-working-forever code.  Please do not
  1450. distribute widely ... and report any problems immediately.  If all checks
  1451. out, I'll post it widely next weekend.
  1452.  
  1453. o   MQWK.CMD - added and tested command lines for using zip/unzip
  1454.     (InfoZip utilities).  Tested with the DOS versions; assuming
  1455.     command lines are the same.  Comment out the first set of lines,
  1456.     uncomment out the second.  NOTE that zip failed when run with
  1457.     the "start" command so as to run it in the background.  It seems
  1458.     zip wants to open the source file in a mode that conflicts with
  1459.     the fact that MR/2 also has it open.  Too bad; the PK utilities
  1460.     work OK this way.
  1461.  
  1462. o   More minor tweaks to the conference index builder.  Someone
  1463.     complained recently, so I thought I'd have a look.  I see room for
  1464.     some *big* improvements! :)
  1465.  
  1466. o   When modifying a reply, the fact that the NEW reply had a later date
  1467.     than the OLDER version would case the message pointer to seem to
  1468.     "shift" to another message.  This was after you would save the reply
  1469.     ... the message viewer showed something different.  This would only
  1470.     happen if other replies had a matching subject.  I now sort the
  1471.     reply headers differently.  I disregard date/time when sorting after
  1472.     a reply-modify.
  1473.  
  1474. o   Ooops.  Forgot to list Ctrl-O on the Editor help screen.  Fixed.
  1475.  
  1476. o   I modified the conference header sort massively.  It now uses a
  1477.     btree sort with minimal data movement.  This fix, in addition to
  1478.     the other little tweaks a day or two ago, result in a great speed
  1479.     boost.  My informal testing (watching the MR/2 clock tick away)
  1480.     involved loading one 800 message conference, and another with 402
  1481.     messages.  The larger conference took 15 seconds to load with the
  1482.     old MR/2, it now takes about 5.  The smaller conference's time
  1483.     dropped from 6 seconds to about 2-3.  The larger the conference,
  1484.     the bigger the difference will be.  Smaller conferences will show
  1485.     smaller improvements.  Overall, things are just *much* faster.
  1486.  
  1487. o   Converted all internal storage and formats to support 5 digit
  1488.     conference numbers, as long as these numbers remain in the
  1489.     16-bit range (up to 65,635).  A user reported a BBS system that
  1490.     used thousands as a group identifier, and the remainder as the
  1491.     sub-sconference number.  This was a big change, and I'll test
  1492.     thoroughly before releasing.
  1493.  
  1494. o   Packet selection screen was expanded 2 characters and underlying
  1495.     logic modified to support packets from BBS's with 8 characters
  1496.     names, and with 2 digit TE/2-style collision suffixes.  For example,
  1497.     NERDNOOK.QWK;99 could not be opened, renamed or passed to MQWK.CMD
  1498.     when merging packets.  This appears to be working better.
  1499.  
  1500. o   Another error dialog has been added.  This one agains warns if the
  1501.     working directory has been specified on a different-but-valid drive
  1502.     (a potential problem).  There's even one more problem to detect; as
  1503.     MR/2 requires the work directory to be a subdirectory off of its
  1504.     "base" location. This would occur rarely, and is not destructive,
  1505.     whereas the one that are now detected and avoided were.
  1506.  
  1507. o   Added a third level sort to the subject thread sort procedure.
  1508.     Threads are now sorted by Subject, then date/time, then message
  1509.     number.  As reported, split message all may have the same date/time,
  1510.     and this usually assures that they appear correctly.
  1511.  
  1512. o   Editing a message header, then requesting to "pick a conference"
  1513.     from the master list.  Previously, typing letters did not jump to
  1514.     the first prefix match.  Fixed.
  1515.  
  1516. o   Add in a new INI parameter for myself - FolderOrder.  This has the
  1517.     same parameters as MessageOrder, but allows a different sort to be
  1518.     applied to the ReplyLog and Inbasket.  I found myself constantly
  1519.     converting these folders to date/time sort, so I decided to add
  1520.     an option to default the sort for just these folders.
  1521.  
  1522.     NOTE:  By default, FolderOrder = -1, which means that the
  1523.     MessageOrder is used.  Sort orders will work the same for everyone
  1524.     unless they specify this option specifically.
  1525.  
  1526. o   Further modified the message sorting ... if DATE/TIME sort is active,
  1527.     a secondary sort level of message number is activated.  Same reasons
  1528.     as it was added as the 3rd level on subject sorting.
  1529.  
  1530. o   Revamped the INI parser once again.  My while() loop kept growing,
  1531.     and I kept breaking the compiler.  It's now broken into two
  1532.     separate routines, which gives me plenty of room for expansion, but
  1533.     also increases the possibility that bugs have been introduced.
  1534.  
  1535.  
  1536. Changes included in v2.1
  1537. ------------------------
  1538.  
  1539. o   I found rather large memory leak when using the internal editor.  It
  1540.     seems that the cleanup routines ... something I've never looked at
  1541.     before and always *assumed* were just fine (NOTE: the editor started
  1542.     as a third party editor "toolkit", which I have modified extensively).
  1543.     Well, the cleanup routine was empty; totally empty.  I added about 8
  1544.     free() calls to release committed but unneeded memory.  I found this
  1545.     when I went to add the "cleanup" counterpart for:
  1546.  
  1547. o   The internal editor now has an undo capability ... unlimitted levels.
  1548.     I keep a record of all block delete's and CTRL-X line deletes.  You
  1549.     can use CTRL-U to insert the text in reverse order of the deletes.
  1550.     Inserts are always to the current cursor position.  In a way, this can
  1551.     be used as an intra-document cut/paste.  Each of the two editor buffers
  1552.     has its own undo-delete list.
  1553.  
  1554.     Let me know if you can think of any other place to store text for
  1555.     "undoing".  I'll look through the code for more possibilities, too.
  1556.     NOTE that I do *not* pay attention to presses of the delete key (for
  1557.     removing a character at a time).
  1558.  
  1559.     NOTE:  CTRL-U previously would delete a marked block.  There are
  1560.     several other ways to do this, so I remapped this key.  I hope
  1561.     this won't confuse anybody :)
  1562.  
  1563. o   Well, I finally had to fix the long-time Zortech file open bug,
  1564.     instead of dodging it.  ZTC's fopen(), the call used often to open a
  1565.     file for reading and/or writing would NOT return NULL on error.
  1566.     This is a C/C++ standard - to return NULL if an open fails.  I
  1567.     thought this was just a problem on open-for-reads, but I find that
  1568.     opening a file for write that fails (a bad file name or path, for
  1569.     example) STILL returns an "ok" value.  This was masking the real
  1570.     reason one user's VC's were crashing.  Not that I know the real
  1571.     reason, yet, but the diagnostics that have always been there can now
  1572.     work.  I cleaned them up further, and tested them using a hand-made
  1573.     bad file name.  In this example, instead of crashing whenever the VC
  1574.     thread hits its first message, a polite failure message *should*
  1575.     display on the screen.  The VC process will terminate if ever an
  1576.     open fails.  Now, to see what file name this user's system is trying
  1577.     to open ... :)
  1578.  
  1579. o   I love the Internet! :)  In a single 24 hour period, I was able to
  1580.     exchange private mail with the aforementioned user a couple of
  1581.     times, actually upload a test MR2.EXE to his machine via ftp (I
  1582.     don't yet have personal access like this - a friend "demoed" it to
  1583.     me :).  There was still enough time to get the tell-all error
  1584.     message back from him!
  1585.  
  1586.     If you specified a fully-qualified WorkPath, either in the INI file
  1587.     OR on the command line (for example, WorkPath=C:\mr2\Work or
  1588.     /WC:\mr2\Work, the VC index building process would crash.  I now
  1589.     handle this for both cases.
  1590.  
  1591. o   In testing the above, I happened to try a drive/path that didn't exist
  1592.     at all.  I used /WJ:\mr2\tmp, where the J drive is non-existent on my
  1593.     machine.  I picked a packet (of pickled peppers? ... oh, sorry, long
  1594.     day :), MR/2 pathed to the defined work dir, which of course failed,
  1595.     and then proceeded to clean out the directory.  The directory it
  1596.     cleaned out happened to be my MR/2 home directory (source code and
  1597.     all).  Bummer!  Good thing I keep great backups and hadn't done much
  1598.     work since I backed up!
  1599.  
  1600.     And I remember arguing with a user publicly that MR/2 wouldn't
  1601.     delete files unless the chdir succeeded.  Ooops.
  1602.  
  1603.     NOW, if the change directory fails, a nice 10-12 line dialog box
  1604.     pops up, explains the problem, shows you your workpath, then
  1605.     promptly exits w/out deleting a single thing.
  1606.  
  1607. o   Modified the edit header logic slightly.  When editing a message
  1608.     header where the original message's "from" field is blank, MR/2
  1609.     now tries to use the @Internet@ value for the TO field.  I've
  1610.     received mail before this way, and when I replied, my message had
  1611.     a blank TO field and was uploaded to the BBS this way.  The message
  1612.     made it to its destination, but since PCBoard views a blank TO as
  1613.     being equivelant to "ALL", everyone else on my BBS could read it.
  1614.     In other words, it was not PRIVATE on my home board.  Since PCBoard
  1615.     ignores the TO line if there's a TO: line in the message, I could
  1616.     have put anything there, but the INTERNET address (truncated) seemed
  1617.     appropriate.
  1618.  
  1619. o   Minor internal editor fixups ... things like names on the top of both
  1620.     editor windows are correct and stay that way, the search prompt
  1621.     now stays at the title bar or the "owner" window.
  1622.  
  1623. o   I modified the Editor=Internal INI options to accept another
  1624.     parameter.  Editor=Internal,FullScreen (or just the work "FULL")
  1625.     puts the editor into full-screen mode.  This uses ALL display lines
  1626.     when editing a file instead of leaving the source message header
  1627.     displayed.
  1628.  
  1629. o   When switching the Editor specification in MR2.INI back and forth
  1630.     between Internal, ME/2 and/or an external editor, MR/2 would
  1631.     sometimes ignore the requested change until restarted from scratch.
  1632.     This works much better now, except ME/2 still doesn't shut down
  1633.     after it is no longer the requested editor.  Minor nit - I'll fix
  1634.     it eventually.
  1635.  
  1636. o   When MR/2 packs the folders, a check is made to see if the folder
  1637.     file is empty (size equal to 128 bytes).  If it is, the file is
  1638.     removed.  Also, MR/2 will try to remove any BBS-specific folder
  1639.     directory on packet exit.  If the directory has *anything* in it,
  1640.     the remove will fail (as it's supposed to).  If empty, as is
  1641.     sometimes the case, the directory will disappear.  This will prevent
  1642.     the system from collecting directories for BBS's for which no data
  1643.     is stored in a folder.
  1644.  
  1645. o   Subject sorting was modified to make DATE/TIME the secondary sort
  1646.     field, rather than message number.  I made a bold assumption that
  1647.     the other way would never really give the desired affect and that
  1648.     (as many have requested), DATE/TIME is indeed the proper second
  1649.     sort option.  If anyone disagrees, please speak up and I'll add
  1650.     BOTH choices as options.
  1651.  
  1652. o   When using the INI parameter SourceFile, MR/2 now starts in the
  1653.     reply buffer with ALL of the text in the source file marked.  A
  1654.     simple ALT-C or ALT-M will copy/move the block into the reply.
  1655.  
  1656. o   The default template file  "Subject:" line for NewInternet was
  1657.     changed from @ISUBJECT@ to @SUBJECT@.  This will keep MR/2 from
  1658.     "inventing" long internet subjects and will instead insert the
  1659.     SUBJECT value from the message header.  You can modify the subject
  1660.     in the message while editing, if desired.
  1661.  
  1662. o   Another memory leak plugged - this time in deleting the list of
  1663.     conference message headers.  There was also an unneeded call to
  1664.     lookup and format the Conference name in this loop.  This was
  1665.     removed (microscopic speed improvement).
  1666.  
  1667.  
  1668. Changes included in v2.09A
  1669. --------------------------
  1670. Another short-lived release; v2.09 had a serious bug.  I offer this
  1671. release quicker-than-planned to ward off potential problems.  I still
  1672. plan on a bunch more minor fixes, fixing anything else that turns up
  1673. wrong with the next internal editor changes, and releasing v2.1 in,
  1674. say, another week?
  1675.  
  1676. o   Modified the folder-packing process.  This procedure often left
  1677.     unattached "source" messages in the log well after the parent
  1678.     message was gone.  I've written a little checker/diagnostic utility
  1679.     to help me watch how well this works, so I'll be watching closely.
  1680.  
  1681. o   Ooops!  Ctrl-S from within the internal editor did nasty things.  It
  1682.     did save the work to disk, but then it closed the file and cleaned
  1683.     up.  This caused later saves to fail.  Fixed.
  1684.  
  1685. o   Initial MR/2 startup now uses the internal editor instead of E.
  1686.     Don't know why I didn't switch to this before.
  1687.  
  1688. o   MR/2 used the E editor as the default if not specified.  Now it's
  1689.     the internal editor.
  1690.  
  1691. o   Modified the help subsystem slightly - HELP works when editing the
  1692.     INI file with the internal editor.
  1693.  
  1694. o   Modified the default colors specified in the default MR2.INI file.
  1695.     Message text was in yellow, now it's in bright-white and the HEADER
  1696.     data is in yellow.  I like this better.
  1697.  
  1698. o   Modified the default first-time startup code to copy example.tf to
  1699.     template.tf, if template.tf is not found.  Template.tf is the default
  1700.     template file specified in MR2.INI.  Previously, if a new user did not
  1701.     put out the effort, templates would not be used ... the INI simply
  1702.     specified a template file that did not exist.  Now one *will* exist.
  1703.  
  1704. o   Modified the example.tf file and removed all references to my name :).
  1705.     In place of my name, I've inserted the string @Mix@@UserName@.  This
  1706.     takes the user name from the QWK packet, mixes the case and signs
  1707.     all message that way.  For "Reply-To:" lines in internet templates,
  1708.     I simply left this blank.  If the user gets this far, he can edit the
  1709.     template and fill this in himself.
  1710.  
  1711. o   Another pathing patch so that, when using ME/2 as your editor, pressing
  1712.     ALT-C to edit MR2.INI works ok.
  1713.  
  1714.  
  1715. Changes included in v2.09
  1716. -------------------------
  1717.  
  1718. o   Better protection and diagnostics for read_line overflows.  All of
  1719.     my sequential file (text) access to read a "line" are now protected
  1720.     by a "max" count value.  If this value is met, a crude warning is
  1721.     displayed, a keypress is requested, and the line is truncated.  This
  1722.     has been the suspected cause of a large number of unsolvable crashes
  1723.     ... any files that gets corrupted or modified when CR/LF's are
  1724.     removed can cause this.  Now, at least there is a warning, some
  1725.     information, and no crash.
  1726.  
  1727. o   Trying to solve an obscure VC crash for a user, I made minor changes
  1728.     to the VC search process.  Just for my information/reference later :)
  1729.  
  1730. o   Ooops.  I temporarily saved the SplitLongReplies value in a character
  1731.     variable.  That caused overflow/rounding, so that specifying 300 line
  1732.     messages resulted in 44 line messages (300-256=44).  You could not
  1733.     get messages longer than 256 lines.  Fixed.
  1734.  
  1735. o   When saving a message (or BBS file) to a save file, entering a bad or
  1736.     invalid file name would show no error message or indication of a
  1737.     problem, even though the save failed.  This has been corrected to where
  1738.     MR/2 will beep and stay at the file name prompt until a valid save file
  1739.     name is specified, or ESCAPE is pressed.
  1740.  
  1741. o   I somehow readded the problem where matching conference names failed to
  1742.     insert the second name in the master conference list.  This is, again,
  1743.     fixed.
  1744.  
  1745. o   If you opened a packet with existing replies, unpacked them, then killed
  1746.     all replies (so no active replies remained), MR/2 would exit and leave
  1747.     the original reply packet intact.  It is now removed (renamed to a .old)
  1748.     and none of the killed replies are registered in the reply log.
  1749.  
  1750. o   Cosmetic: left over garbage in background when a "no packets exist"
  1751.     box is displayed has been removed.
  1752.  
  1753. o   If no BBS .cfg files existed, MR/2 would display a message about
  1754.     not having any QWK packets available.  Fixed.
  1755.  
  1756. o   Internal editor work - LOTS of it :).  I'm not telling yet! :)
  1757.     (Just in case bugs are found with what "used to work" ...)
  1758.  
  1759. o   Ok, fine.  I'll tell you about the editor.  I'll put this out for
  1760.     some user-testing, then issue v2.1 when it appears all the kinks are
  1761.     out.  I will add INI variables to specify full screen editing (all 25
  1762.     lines) and initial split-window sizing.
  1763.  
  1764.     - Optional 2-buffer, split window editing.
  1765.  
  1766.     First, if you add the INI parameter SourceFile=somename.txt, MR/2
  1767.     will automatically go into full screen, split window editing mode on
  1768.     reply.  If you don't do this, the editor starts off looking the
  1769.     same, but new keys are enabled:
  1770.  
  1771.     CTRL-O   Open a new file (in the secondary buffer only)
  1772.              prompts for file name, asks if save old one if modified
  1773.              *This ALWAYS opens the file into the TOP, extra window/buffer*
  1774.  
  1775.     CTRL-D   Divide the editing screen into 2 equal parts
  1776.     CTRL-C   Close/Hide the current editor Window (if split only)
  1777.     CTRL-G   Grow the current window to full size (if split only)
  1778.     CTRL-S   Save the current file
  1779.  
  1780.     CTRL-UP       Move the divider bar up one line
  1781.     CTRL-DOWN     Move the divider bar down one line
  1782.     CTRL-PAGEUP   Expand the bottom window all the way
  1783.     CTRL-PAGEDOWN Expand the top window all the way
  1784.     ALT-N         Give the NEXT editor buffer the focus
  1785.                     (split or two full screens - Shift F3 works, too)
  1786.  
  1787.     ALT-C will now copy *across* windows.  If nothing is marked in the
  1788.     current window, the other window is checked for a mark.  ALT-M will
  1789.     do the same; if text is not highlighted in the current window, it
  1790.     will check the "other" window, cut the marked text and paste it to
  1791.     the current cursor position.
  1792.  
  1793.     Sorry, I had to change some things:
  1794.  
  1795.         FIND was remapped to CTRL-F (from CTRL-S)
  1796.         FIND NEXT was remapped to CTRL-N (from CTRL-F)
  1797.  
  1798.     And, for compatibility with ME/2:
  1799.  
  1800.         ALT-X    Save and exit whole editor.
  1801.  
  1802.     If you don't do the SourceFile thing, then you can still open CTRL-O
  1803.     a file or two for reference.  For example, just today, I CTRL-O
  1804.     opened MR2.DOC and cut a couple of lines from that.  Same with a
  1805.     snip from pmmle.h.
  1806.  
  1807. o   Editor Help screen updated to show new key functions, also now includes
  1808.     clipboard access keys.
  1809.  
  1810. o   ME/2 USERS:  I fixed it now so that ME/2 is initially loaded *after*
  1811.     MR/2 switches the path to the working directory.  This means that
  1812.     the old ME/2 "erc 100 - reply.msg" error due to a pathing problem is
  1813.     fixed by default.  Your old INI ReplyFile specs will work.  If you're
  1814.     not using ME/2, this change *will not* effect you.
  1815.  
  1816.  
  1817. Changes included in v2.08
  1818. -------------------------
  1819.  
  1820. o   By request, and it made sense, the conference name is displayed
  1821.     at the top of the message index screen.  I simply show the
  1822.     "packet id" string that is optionally shown on the message viewing
  1823.     screen.
  1824.  
  1825. o   I noticed that the reply header editing screen still was using that
  1826.     aweful light red color (on top of white) for the current field.  I
  1827.     changed this to normal red, and I think it's much easier to read.
  1828.  
  1829. o   Also by request, when MR/2 clears the screen to pack replies, a
  1830.     simple message is posted informing you of this.  On some system,
  1831.     the delay was significant, and with the screen totally blank,
  1832.     confusion resulted.  The message is simple and modest; I depend on
  1833.     the archiver to write to stdout, and pretty-stuff wouldn't scroll
  1834.     off the screen nicely.
  1835.  
  1836. o   MR/2 would sometimes "lock up" when moving backwards through message
  1837.     by thread (using Ctrl-PageUp or backspace).  This has been fixed.
  1838.  
  1839. o   Importing text into the internal editor (Alt-R) would often result
  1840.     in the cursor being shifted to the right one character from where
  1841.     keypresses would insert characters.  This has been fixed.
  1842.  
  1843.  
  1844. Changes included in v2.07
  1845. -------------------------
  1846.  
  1847. o   Minor changes - mostly in the interface and communications between
  1848.     my external PM editor, ME/2.
  1849.  
  1850.  
  1851. Changes included in v2.06
  1852. -------------------------
  1853.  
  1854. o   Rime-routed messages that were long enough to be split missed the
  1855.     auto-routing line placement logic on secondary parts.  I was looking
  1856.     for too exact a match on "RIME".  Also, I keyed on "Postlink" within
  1857.     the original message to tell if it was routed.  Editing the header on
  1858.     pass two, the original message was no longer available.
  1859.     Anyway, fixed :)
  1860.  
  1861. o   Added support for ME/2, a PM-based editor I've been playing with.
  1862.     ME/2 is an MDI-based editor with toolbar, statusbar, multiple
  1863.     file windows, speller, thesaurus, simple printing ... tons of
  1864.     features.  I'm putting it out at the same time as this (ME2_099.zip).
  1865.     If you use ME/2 as your editor, it is preloaded by MR/2 on startup.
  1866.     MR/2 can control it using IPC tricks, so response is better than
  1867.     you'd get with any normal PM editor.  Session switching back and
  1868.     forth is handled automatically.  See the me2.doc file included with
  1869.     the ME/2 distribution zip.
  1870.  
  1871. o   INI parameter added - "SourceFile".  If specified, a source message
  1872.     that is being replied to will be quoted to this file, and the actual
  1873.     reply file will contain no quoted text, just an empty template
  1874.     read-to-complete.  This is used by ME/2 as an option, and may be
  1875.     useful for other setups.
  1876.  
  1877.  
  1878. Changes included in v2.05
  1879. -------------------------
  1880.  
  1881. o   Resolution of the source Internet address enhanced slightly.  I moved
  1882.     the check for PC-Boards @From: specifier before some of the others, as
  1883.     if this line is there, it's much more reliable than searching for the
  1884.     tokens like "From: ".  Some of my recent replies detected invalid
  1885.     Internet addresses.  This should help. (After a couple of replies,
  1886.     it does! :).
  1887.  
  1888. o   Setting extended attributes on packets stored on a LAN Server network
  1889.     drive would actually modify the datestamp.  I added code to query the
  1890.     original date/time and then reset this *after* the EA's were applied.
  1891.     Seems to behave properly now.
  1892.  
  1893. o   I screwed up and overwrote a large, completely unread packet tonight.
  1894.     I was bummed.  But wait!  I now save the PTR file and can reset my
  1895.     pointers!!  Only ... MR/2's saving mechanism seems to have been broken
  1896.     and I uploaded a 3 month old file.  Needless to say, I got more messages
  1897.     than I needed!  What a mess ... I had to reset all my pointers by hand
  1898.     and I know I missed some mail.  I then fixed the date compare of PTR
  1899.     files.  They should overwrite the existing one now, if newer, and do
  1900.     it correctly.  For whoever it was that reported this and that I
  1901.     ignored ... you got your revenge!
  1902.  
  1903. o   MR/2 would crash when you pressed escape from the "NO PACKETS FOUND"
  1904.     message.  Had something to do with the aggressive optimizations.  I've
  1905.     "unoptimized" a bit until I can figure this out.
  1906.  
  1907. o   I made a slight goof when I fixed the recursive variable replacement
  1908.     in the last release.  I made it so any *real text* with an "@" in it
  1909.     would get removed, whether it had a "\" proceeding it or not.  You see,
  1910.     the "\" would *not* be there the second pass, so the "@" was unprotected.
  1911.     If there was a string between two @'s, this would be removed too, as
  1912.     it was assumed it was an invalid variable name.  I now leave unresolved
  1913.     variables in the text as-is.  This bug effected mostly fidonet
  1914.     and internet addresses.  Fixed.
  1915.  
  1916.  
  1917. Changes included in v2.04
  1918. -------------------------
  1919. NOTE:  This version includes alot of optimization from compiler switches
  1920. and from some rearranging of localized code.  I used it personally for
  1921. several weeks, and the only "problems" I saw were minor video (cosmetic)
  1922. issues ... like a "black hole" for a second or two when one of the "use
  1923. existing?" prompts comes down.  I'll track this, but you may see it until
  1924. the next version.  The fixes in this release are beneficial, and the
  1925. video problems just minor and cosmetic.
  1926.  
  1927. I've also traced some recent slow downs to the folder subsystem; packing
  1928. log files and building indices in particular.  I do this way too often, and
  1929. it takes too long.  I will spend some time on these shortly, attempting to
  1930. hit the disk far less than happens currently.
  1931.  
  1932. o   New INI variable "ALIAS" allows you to set a user name for yourself
  1933.     other than the one found in the BBS Control.dat file.  This alias
  1934.     name will be placed in the FROM field of all your replies.  Best used
  1935.     in a "local", BBS-specific INI file when accessing multiple BBS's.
  1936.     For Example:  Alias=Billy-Bob will override the settings in Control.dat
  1937.     (say for this example the BBS name was "William B Gooden").  Replies
  1938.     would come from Billy-Bob.
  1939.  
  1940. o   Turns out that the @variable logic was not as recursive as I had
  1941.     advertised.  For example, inserting a "phrase file" line that
  1942.     contained yet another variable to replace did not work.  It does now :)
  1943.  
  1944. o   Fixed a crash when modifying replies (changing, killing ...).  If the
  1945.     subject happenned to end in column 25 with a number BUT not be a
  1946.     "split reply", MR/2 would crash looking for the "/" in "x/n".  For
  1947.     example "OS/2 <...> 2.11" would cause this crash to occur.
  1948.  
  1949. o   Reply log would not always be accessible without an existing packet.
  1950.     If you had no messages in your inbasket or replies for a specific
  1951.     BBS, ALT-E (No packet entry) would not allow access to the reply log.
  1952.     Fixed.
  1953.  
  1954. o   Some major under-the-hood work.  I played around with some compiler
  1955.     switches that have always been there, but have remained undiscovered
  1956.     until now. <read: it sometimes pays to read the manual, even if
  1957.     it's 3 years late :>.  I've compiled MR/2's code, including the
  1958.     speller, thesaurus and editor, with 286-or-better code generation
  1959.     turned on.  The 386 code generator caused problems, and I still have
  1960.     some v1.3/286 users.  One day I'll go full 32-bit, but not yet :)
  1961.     Also, I turned on some aggressive optimizations.  I also recompiled
  1962.     the ZTC tools with these switches.  I tried the C runtime library,
  1963.     but it showed some bad signs, so I switched back.
  1964.  
  1965.     All this does is provides a little more snap, and a 12k reduction
  1966.     in EXE size.  Nothing revolutionary, but every bit helps.
  1967.  
  1968.  
  1969. Changes included in v2.03
  1970. -------------------------
  1971.  
  1972. o   ADD/DROP still had a problem whenever the DOOR and CONTROLNAME
  1973.     specifiers did not match (in dorr.id).  Fixed.  Cammail-Gold door
  1974.     configuration now works.
  1975.  
  1976. o   Reply logging would work wonderfully ... until you started replying
  1977.     to subsequent packets into the same REP file.  In other words, if
  1978.     you had a week's worth of packets (as I ended up having), and rifled
  1979.     through ALL of them without uploading replies, only the replies from
  1980.     the first packet would be logged.  I fixed another bug after that
  1981.     having to do with source messages, but this wasn't relevant until
  1982.     the other bug was tackled.
  1983.  
  1984. o   Killing replies with multiple parts:  fixed the bug that killed the
  1985.     WRONG messages.  Big bug (sorry), but it works now.
  1986.  
  1987. o   Fixed some problems and made some enhancements to the Fidonet node
  1988.     detection logic (replacing @FIDONET@ with the source message's
  1989.     fidonet address).  Three digit zones are now supported where two
  1990.     digits was the previous max (800:676/23).  There was a problem with
  1991.     "@" symbols as part of the Origin line text - fixed.  I also now
  1992.     attempt to extract the Fidonet address from a source message format
  1993.     that I had never seen before.  This format came from a source on
  1994.     the NITELOG BBS, one which is home to many MR/2 users.  I now
  1995.     look for and use the "Reply:" line when found in a source netmail
  1996.     message.
  1997.  
  1998. o   When using U to UNMARK a message (to unkill a reply, for example),
  1999.     the INDEX markings would not be removed.  Fixed.
  2000.  
  2001. o   Reports of sporadic crashing:  some users have emailed me with
  2002.     crash-reports and supplied debugging addresses.  Often these
  2003.     point me right to a problem.  I have a couple of addresses that
  2004.     are in general routines, and the information supplied is not
  2005.     helping.  I haven't forgotten you!  I'm looking for these and
  2006.     trying to come up with another way to find these.  I am also
  2007.     changing the way I archive older version so as not to "lose"
  2008.     the chance of making sense out of info from these older version.
  2009.  
  2010.  
  2011. Changes included in v2.02
  2012. -------------------------
  2013.  
  2014. o   Modified the after-packet-selection processing so that a local
  2015.     INI might be loaded *before* the unzipper is called.  I've always
  2016.     held that MR/2 can't know the true BBS name until the packet is
  2017.     unzipped and the control.dat file is parsed.  What happens now is,
  2018.     as soon as a packet is selected, a "base name" is derived from
  2019.     the packet name.  For example, "e:\dl\pc-ohio.qwk;12" would be
  2020.     whittled down to "pc-ohio".  If an INI file is found with this
  2021.     base name, it is instantly loaded.  Again, this is *before* the
  2022.     packet is opened, so that BBS-specific unzippers can be identified.
  2023.     If an INI cannot be found matching this derived name, then MR/2
  2024.     tries again, the old-fashioned normal way, after the packet has been
  2025.     opened.  If one is found on the first try, no secondary loading is
  2026.     performed.  This *should* work in most cases, particularly when
  2027.     OS/2 comm packages are used.
  2028.  
  2029.     NOTE that this is *still* too late to identify a different "working"
  2030.     directory.  MR/2 has already changed the default path by this time.
  2031.  
  2032. o   Mouse hot spots on message viewing screen changed a little.  I made
  2033.     clicking on the word "Subject:" equal to pressing the "Q" key and
  2034.     anywhere after the ":" and up to the "Conf:" word is still the same
  2035.     as pressing "H".  This adds easier access to the Q key.  Previously,
  2036.     the entire area was mapped to the "H" key.
  2037.  
  2038.     While I was at it, I added three more hotspots.  The only correlation
  2039.     between word and feature is that the word starts with the same letter
  2040.     as the feature.  That's how I picked the area :).  Click on the "Ref#"
  2041.     area to "R" Reply.  Click on the "Date" area to "D" defer.  Click on
  2042.     the "Status" area to "S" Save.
  2043.  
  2044. o   That pesky lockup that occured when marking and deleting a block
  2045.     up to and including the EOF marker has been squashed.  I could easily
  2046.     recreate it here, now it seems to be handled.  I simply make sure that
  2047.     the end mark can't be placed on or after the EOF triangle.
  2048.  
  2049. o   Bug:  With PositionOnMatch set to NO, the key-word highlight would
  2050.     also be suppressed for virtual conferences.  Now the keywords hilite
  2051.     regardless of the setting of this switch.
  2052.  
  2053. o   By request ... remapped the numeric keyboard "5" key, when not in
  2054.     numeric mode (arrows are active) to be equivelent to the ESCAPE key.
  2055.     As was pointed on, one can now do most message selection and
  2056.     reading/movement functions from just the numeric pad.
  2057.  
  2058.  
  2059. Changes included in v2.01
  2060. -------------------------
  2061.  
  2062. o   Trying to open the WELCOME.QWK packet in the home MR/2 directory
  2063.     caused a trap and terminated the program.  This was caused because of
  2064.     an error in the code that checks for the "\" character in the packet
  2065.     file name.  If one wasn't there, it would crash.  Fixed.
  2066.  
  2067. o   If a bad "working directory" was set in an icon, MR/2's background
  2068.     searching virtual conference builder would crash.  I've fixed this,
  2069.     although some questions remain.
  2070.  
  2071.  
  2072.  
  2073. KNOWN BUGS AND STUFF
  2074. ====================
  2075.  
  2076. The TEMPORARY directory MUST remain a subdirectory of the MR2 home dir.
  2077.  
  2078. You can't use "\" or "&" as part of any search text (since MR/2 uses them
  2079. as delimiters).
  2080.  
  2081. You can't cancel a search until the first "hit" is displayed.  This is
  2082. particularly irritating when soundex searching, since soundexing is
  2083. noticably slower.
  2084.  
  2085. If you set "SkipReadMessages" to true, you cannot gain access to a
  2086. conferences where all messages have previously been read.
  2087.  
  2088. Other frills that have not yet been addressed:  Bulk marking, twit filter.
  2089. There are probably others. Feel free to bombard me with requests.
  2090.  
  2091.