home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 2 BBS / 02-BBS.zip / mr2_230.zip / READ.ME < prev    next >
Text File  |  2000-01-16  |  107KB  |  2,070 lines

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